From 2030b0861be3371c914a5176a15620a3e28b6818 Mon Sep 17 00:00:00 2001 From: Le Tien Date: Tue, 22 Sep 2026 11:32:04 +0700 Subject: [PATCH 1/4] feat: add core agent API routes, background services, YouTube integration, and test suite --- .gitignore | 2 +- agent/api/flow.py | 30 +-- agent/api/models.py | 4 +- agent/api/projects.py | 4 +- agent/api/providers.py | 6 +- agent/api/tts.py | 4 +- agent/config.py | 6 +- agent/services/post_process.py | 31 ++- agent/services/tts.py | 6 +- agent/services/video_reviewer.py | 30 ++- agent/worker/processor.py | 18 +- extension/background.js | 6 +- tests/unit/test_cli_providers.py | 4 +- tests/unit/test_processor.py | 27 ++- tests/unit/test_setup.py | 10 +- tests/unit/test_video_reviewer.py | 41 ++-- tests/unit/test_youtube.py | 84 ++++++++ tools/review_server.py | 4 +- youtube/__init__.py | 1 + youtube/auth.py | 63 ++++++ youtube/upload.py | 326 ++++++++++++++++++++++++++++++ 21 files changed, 634 insertions(+), 73 deletions(-) create mode 100644 tests/unit/test_youtube.py create mode 100644 youtube/__init__.py create mode 100644 youtube/auth.py create mode 100644 youtube/upload.py diff --git a/.gitignore b/.gitignore index 0f317e30a..d2bbb216a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ __pycache__/ *.db-journal .env output/ -youtube +youtube/channels/ agent/active_project.json # Generated AI tool configs (run: python setup.py) diff --git a/agent/api/flow.py b/agent/api/flow.py index 7aed5ef3f..2a55935bb 100644 --- a/agent/api/flow.py +++ b/agent/api/flow.py @@ -1,7 +1,7 @@ """Direct Flow API endpoints — for manual operations outside the queue.""" from fastapi import APIRouter, HTTPException, Response from pydantic import BaseModel, Field -from typing import Literal, Optional +from typing import Any, Literal, Optional from agent.config import FLOW_PROJECT_ID, FLOW_ALLOW_DEGRADED from agent.services.flow_client import get_flow_client @@ -16,6 +16,12 @@ router = APIRouter(prefix="/flow", tags=["flow"]) +def _safe_status_code(status: Any, default: int = 502) -> int: + if isinstance(status, int) and 400 <= status <= 599: + return status + return default + + class GenerateImageRequest(BaseModel): prompt: str project_id: str @@ -165,7 +171,7 @@ async def generate_image(body: GenerateImageRequest): data["character_media_ids"] = refs or None result = await client.generate_images(**data) if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) return result.get("data", result) @@ -212,7 +218,7 @@ async def generate_video(body: GenerateVideoRequest): ) if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) return result.get("data", result) @@ -249,7 +255,7 @@ async def generate_video_refs(body: GenerateVideoRefsRequest): ) if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) return result.get("data", result) @@ -270,7 +276,7 @@ async def generate_video_omni_text(body: GenerateOmniFlashTextVideoRequest): isinstance(result.get("status"), int) and result["status"] >= 400 ): raise HTTPException( - result.get("status", 502), + _safe_status_code(result.get("status")), result.get("error", result.get("data")), ) return result.get("data", result) @@ -291,7 +297,7 @@ async def generate_video_omni(body: GenerateOmniFlashVideoRequest): except ValueError as exc: raise HTTPException(400, str(exc)) from exc if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) return result.get("data", result) @@ -303,7 +309,7 @@ async def upscale_video(body: UpscaleVideoRequest): raise HTTPException(503, "Extension not connected") result = await client.upscale_video(**body.model_dump()) if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) return result.get("data", result) @@ -337,7 +343,7 @@ async def check_status(body: CheckStatusRequest): if result.get("error"): raise HTTPException(502, result["error"]) if isinstance(result.get("status"), int) and result["status"] >= 400: - raise HTTPException(result["status"], result.get("data", "Flow polling failed")) + raise HTTPException(_safe_status_code(result["status"]), result.get("data", "Flow polling failed")) return result.get("data", result) @@ -386,7 +392,7 @@ async def get_media(media_id: str): raise HTTPException(502, result["error"]) status = result.get("status", 200) if isinstance(status, int) and status >= 400: - raise HTTPException(status, result.get("data", "Media not found")) + raise HTTPException(_safe_status_code(status, 404), result.get("data", "Media not found")) return result.get("data", result) @@ -408,7 +414,7 @@ async def edit_image(body: EditImageRequest): seed=body.seed, ) if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) return result.get("data", result) @@ -428,7 +434,7 @@ async def export_image(body: UpscaleImageRequest): resolution=body.quality.upper(), ) if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) data = result.get("data", result) try: content = base64.b64decode(data["encodedImage"], validate=True) @@ -461,6 +467,6 @@ async def upload_image(body: UploadImageRequest): mime = mimetypes.guess_type(body.file_path)[0] or "image/png" result = await client.upload_image(b64, mime_type=mime, project_id=body.project_id, file_name=body.file_name) if result.get("error") or (isinstance(result.get("status"), int) and result["status"] >= 400): - raise HTTPException(result.get("status", 502), result.get("error", result.get("data"))) + raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) media_id = result.get("_mediaId") return {"media_id": media_id, "raw": result.get("data", result)} diff --git a/agent/api/models.py b/agent/api/models.py index 43634f208..d22cd5963 100644 --- a/agent/api/models.py +++ b/agent/api/models.py @@ -14,12 +14,12 @@ def _read_models() -> dict: - with open(_MODELS_FILE) as f: + with open(_MODELS_FILE, encoding="utf-8") as f: return json.load(f) def _write_models(data: dict): - with open(_MODELS_FILE, "w") as f: + with open(_MODELS_FILE, "w", encoding="utf-8") as f: json.dump(data, f, indent=2) f.write("\n") diff --git a/agent/api/projects.py b/agent/api/projects.py index 4b87aa847..8421ead69 100644 --- a/agent/api/projects.py +++ b/agent/api/projects.py @@ -326,9 +326,9 @@ async def get_output_dir(pid: str): } meta_path = output_dir / "meta.json" if meta_path.exists(): - existing = json.loads(meta_path.read_text()) + existing = json.loads(meta_path.read_text(encoding="utf-8")) meta["created_at"] = existing.get("created_at", now) - meta_path.write_text(json.dumps(meta, indent=2, ensure_ascii=False)) + meta_path.write_text(json.dumps(meta, indent=2, ensure_ascii=False), encoding="utf-8") return {"slug": slug, "path": f"output/{slug}", "meta": meta} diff --git a/agent/api/providers.py b/agent/api/providers.py index bc8e5f43c..1c1e6f14e 100644 --- a/agent/api/providers.py +++ b/agent/api/providers.py @@ -36,13 +36,13 @@ def _read() -> dict: - """Read providers.json and hot-reload it into `config.CLI_PROVIDERS`. + """Read providers.json from disk and refresh config.CLI_PROVIDERS in place. The file is the source of truth, and it is editable by hand (the skills do), so re-reading it here is what makes a hand edit take effect without a restart — and what stops a GET describing a state the worker is not in. """ - with open(_PROVIDERS_FILE) as f: + with open(_PROVIDERS_FILE, encoding="utf-8") as f: data = json.load(f) data.setdefault("active", "claude") data.setdefault("roles", {}) @@ -63,7 +63,7 @@ def _write(data: dict): """ tmp = _PROVIDERS_FILE.with_suffix(".json.tmp") try: - with open(tmp, "w") as f: + with open(tmp, "w", encoding="utf-8") as f: json.dump(data, f, indent=2) f.write("\n") f.flush() diff --git a/agent/api/tts.py b/agent/api/tts.py index e2d3d068f..486dc4961 100644 --- a/agent/api/tts.py +++ b/agent/api/tts.py @@ -296,13 +296,13 @@ async def delete_voice_template(name: str): def _load_templates_meta() -> dict: if TEMPLATES_META.exists(): - return json.loads(TEMPLATES_META.read_text()) + return json.loads(TEMPLATES_META.read_text(encoding="utf-8")) return {} def _save_templates_meta(meta: dict): TEMPLATES_META.parent.mkdir(parents=True, exist_ok=True) - TEMPLATES_META.write_text(json.dumps(meta, indent=2, ensure_ascii=False)) + TEMPLATES_META.write_text(json.dumps(meta, indent=2, ensure_ascii=False), encoding="utf-8") def _wav_duration(path: str) -> float | None: diff --git a/agent/config.py b/agent/config.py index 743198e2d..371e68197 100644 --- a/agent/config.py +++ b/agent/config.py @@ -48,7 +48,7 @@ # ─── Model Keys (loaded from models.json for easy updates) ── _MODELS_FILE = Path(__file__).parent / "models.json" -with open(_MODELS_FILE) as _f: +with open(_MODELS_FILE, encoding="utf-8") as _f: _MODELS = json.load(_f) VIDEO_MODELS = _MODELS["video_models"] @@ -81,7 +81,7 @@ # ─── CLI Providers (video review vision analysis) ──────────── _PROVIDERS_FILE = Path(__file__).parent / "providers.json" -with open(_PROVIDERS_FILE) as _pvf: +with open(_PROVIDERS_FILE, encoding="utf-8") as _pvf: CLI_PROVIDERS = json.load(_pvf) # mutable dict, hot-reloaded like VIDEO_MODELS REVIEW_CLI_TIMEOUT_S = float(os.environ.get("REVIEW_CLI_TIMEOUT_S", "120")) @@ -95,7 +95,7 @@ def _load_suno_key() -> str: if channels_dir.exists(): for rules_file in channels_dir.glob("*/channel_rules.json"): try: - rules = json.loads(rules_file.read_text()) + rules = json.loads(rules_file.read_text(encoding="utf-8")) key = rules.get("api_keys", {}).get("suno", "") if key: return key diff --git a/agent/services/post_process.py b/agent/services/post_process.py index a8287c036..d4473142d 100644 --- a/agent/services/post_process.py +++ b/agent/services/post_process.py @@ -1,10 +1,25 @@ -"""Post-processing: trim, merge, add music via ffmpeg.""" +import os +import shutil import subprocess import logging from pathlib import Path logger = logging.getLogger(__name__) + +def _ffmpeg_bin() -> str: + env_bin = os.environ.get("FFMPEG_BIN") + if env_bin: + return env_bin + if shutil.which("ffmpeg"): + return "ffmpeg" + try: + import imageio_ffmpeg + return imageio_ffmpeg.get_ffmpeg_exe() + except Exception: + return "ffmpeg" + + _FLOAT_MIN = 0.0 _FLOAT_MAX = 2.0 @@ -24,7 +39,7 @@ def trim_video(input_path: str, output_path: str, start: float, end: float) -> b return False duration = end - start cmd = [ - "ffmpeg", "-y", "-i", input_path, + _ffmpeg_bin(), "-y", "-i", input_path, "-ss", str(start), "-t", str(duration), "-c:v", "libx264", "-preset", "fast", "-crf", "18", "-force_key_frames", "expr:gte(t,0)", @@ -43,14 +58,14 @@ def merge_videos(video_paths: list[str], output_path: str) -> bool: """Concatenate videos using ffmpeg concat demuxer.""" concat_file = output_path + ".concat.txt" try: - with open(concat_file, "w") as f: + with open(concat_file, "w", encoding="utf-8") as f: for p in video_paths: - # Escape single quotes to prevent path injection in concat file - escaped = str(p).replace("'", "'\\''") + # Escape single quotes and use POSIX forward slashes for ffmpeg concat demuxer + escaped = Path(p).as_posix().replace("'", "'\\''") f.write(f"file '{escaped}'\n") cmd = [ - "ffmpeg", "-y", "-f", "concat", "-safe", "0", + _ffmpeg_bin(), "-y", "-f", "concat", "-safe", "0", "-i", concat_file, "-c:v", "copy", "-c:a", "copy", "-movflags", "+faststart", @@ -94,7 +109,7 @@ def add_narration(video_path: str, narration_path: str, output_path: str, fade_start = max(0, duration - fade_out) cmd = [ - "ffmpeg", "-y", "-i", video_path, "-i", narration_path, + _ffmpeg_bin(), "-y", "-i", video_path, "-i", narration_path, "-c:v", "copy", "-c:a", "aac", "-b:a", "192k", "-filter_complex", f"[0:a]volume={sfx_volume}[sfx];[1:a]volume={narration_volume},afade=t=in:st=0:d={fade_in},afade=t=out:st={fade_start}:d={fade_out}[narr];[sfx][narr]amerge=inputs=2,pan=stereo|c0=c0+c2|c1=c1+c3[aout]", @@ -137,7 +152,7 @@ def add_music(video_path: str, music_path: str, output_path: str, fade_start = max(0, duration - fade_out) cmd = [ - "ffmpeg", "-y", "-i", video_path, "-i", music_path, + _ffmpeg_bin(), "-y", "-i", video_path, "-i", music_path, "-c:v", "copy", "-c:a", "aac", "-b:a", "192k", "-filter_complex", f"[0:a]volume=1.0[orig];[1:a]volume={music_volume},afade=t=in:st=0:d={fade_in},afade=t=out:st={fade_start}:d={fade_out}[music];[orig][music]amerge=inputs=2,pan=stereo|c0=c0+c2|c1=c1+c3[aout]", diff --git a/agent/services/tts.py b/agent/services/tts.py index 14a729856..d70a89f06 100644 --- a/agent/services/tts.py +++ b/agent/services/tts.py @@ -4,6 +4,7 @@ import logging import os import subprocess +import sys from pathlib import Path from typing import Optional @@ -11,8 +12,9 @@ logger = logging.getLogger(__name__) -# Default to python3.10 (has torch/torchaudio/omnivoice); override with TTS_PYTHON_BIN if needed -PYTHON_BIN = os.environ.get("TTS_PYTHON_BIN", "python3.10") +# Default to python3.10 on POSIX or sys.executable on Windows; override with TTS_PYTHON_BIN if needed +_DEFAULT_PYTHON = sys.executable if sys.platform == "win32" else "python3.10" +PYTHON_BIN = os.environ.get("TTS_PYTHON_BIN", _DEFAULT_PYTHON) # Inline script template for TTS generation via subprocess _TTS_SCRIPT = """ diff --git a/agent/services/video_reviewer.py b/agent/services/video_reviewer.py index 7afaf6fdc..cd6cf9f98 100644 --- a/agent/services/video_reviewer.py +++ b/agent/services/video_reviewer.py @@ -13,6 +13,7 @@ import re import subprocess import tempfile +import shutil from pathlib import Path import ssl @@ -177,10 +178,23 @@ async def _download_via_get_media(media_id: str, dest: Path) -> None: logger.info("Downloaded %s via get_media (%d bytes)", media_id[:12], len(video_bytes)) +def _ffmpeg_bin() -> str: + env_bin = os.environ.get("FFMPEG_BIN") + if env_bin: + return env_bin + if shutil.which("ffmpeg"): + return "ffmpeg" + try: + import imageio_ffmpeg + return imageio_ffmpeg.get_ffmpeg_exe() + except Exception: + return "ffmpeg" + + def _extract_frames(video_path: str, fps: float, out_dir: str) -> list: """Extract frames as JPEGs using ffmpeg. Returns sorted list of frame paths.""" cmd = [ - "ffmpeg", "-y", "-i", video_path, + _ffmpeg_bin(), "-y", "-i", video_path, "-vf", f"fps={fps},scale=640:-1", "-q:v", "4", f"{out_dir}/frame_%04d.jpg", @@ -206,7 +220,7 @@ def _has_drawtext() -> bool: """ try: out = subprocess.run( - ["ffmpeg", "-hide_banner", "-filters"], + [_ffmpeg_bin(), "-hide_banner", "-filters"], capture_output=True, text=True, timeout=30, ) except (OSError, subprocess.SubprocessError) as e: @@ -254,7 +268,7 @@ def _create_contact_sheets( def _extract(with_drawtext: bool): return subprocess.run( [ - "ffmpeg", "-y", "-i", video_path, + _ffmpeg_bin(), "-y", "-i", video_path, "-vf", _frame_filter(fps, with_drawtext), "-q:v", "2", f"{frames_dir}/frame_%04d.jpg", @@ -293,7 +307,11 @@ def _extract(with_drawtext: bool): chunk_dir = Path(out_dir) / f"_chunk_{sheet_idx:02d}" chunk_dir.mkdir(exist_ok=True) for i, frame_path in enumerate(chunk, start=1): - os.symlink(frame_path.resolve(), chunk_dir / f"f_{i:04d}.jpg") + target_link = chunk_dir / f"f_{i:04d}.jpg" + try: + os.symlink(frame_path.resolve(), target_link) + except OSError: + shutil.copy2(frame_path.resolve(), target_link) output = Path(out_dir) / f"sheet_{sheet_idx:02d}.jpg" # Pick the largest divisor of the chunk size (up to REVIEW_SHEET_COLS) as the # column count, so every cell in the tile is filled — zero unfilled cells for any @@ -303,7 +321,7 @@ def _extract(with_drawtext: bool): cols_eff = max(c for c in range(1, REVIEW_SHEET_COLS + 1) if len(chunk) % c == 0) rows_eff = len(chunk) // cols_eff tile_cmd = [ - "ffmpeg", "-y", + _ffmpeg_bin(), "-y", "-i", f"{chunk_dir}/f_%04d.jpg", "-vf", f"tile={cols_eff}x{rows_eff}:nb_frames={len(chunk)}", "-q:v", "2", str(output), @@ -623,7 +641,7 @@ async def _run_codex_cli( args += ["-c", f'model_reasoning_effort="{effort}"'] args.append(prompt) await _spawn_and_check(tuple(args), "codex") - answer = out_path.read_text().strip() + answer = out_path.read_text(encoding="utf-8").strip() if not answer: raise RuntimeError( "codex CLI exited cleanly but wrote no answer to its output file" diff --git a/agent/worker/processor.py b/agent/worker/processor.py index c23039afe..daff27e16 100644 --- a/agent/worker/processor.py +++ b/agent/worker/processor.py @@ -242,7 +242,7 @@ async def _process_one(req: dict, deferred: dict = None, retry_after: dict = Non char = await crud.get_character(req.get("character_id")) if char: skip_kwargs["media_id"] = char.get("media_id") - skip_kwargs["output_url"] = char.get("image_url") + skip_kwargs["output_url"] = char.get("reference_image_url") or char.get("image_url") else: scene = await crud.get_scene(req.get("scene_id")) if scene: @@ -508,16 +508,24 @@ async def _mark_scene_failed(req: dict): async def _is_already_completed(req: dict, orientation: str) -> bool: - scene_id = req.get("scene_id") req_type = req.get("type", "") - if not scene_id or req_type == "GENERATE_CHARACTER_IMAGE": + if req_type in ("EDIT_IMAGE", "REGENERATE_IMAGE", "REGENERATE_VIDEO", "REGENERATE_CHARACTER_IMAGE", "EDIT_CHARACTER_IMAGE"): + return False # Always run — explicitly requesting new generation + + if req_type == "GENERATE_CHARACTER_IMAGE": + char_id = req.get("character_id") + if not char_id: + return False + char = await crud.get_character(char_id) + return bool(char and char.get("media_id")) + + scene_id = req.get("scene_id") + if not scene_id: return False scene = await crud.get_scene(scene_id) if not scene: return False prefix = "vertical" if orientation == "VERTICAL" else "horizontal" - if req_type in ("EDIT_IMAGE", "REGENERATE_IMAGE", "REGENERATE_VIDEO", "REGENERATE_CHARACTER_IMAGE", "EDIT_CHARACTER_IMAGE"): - return False # Always run — explicitly requesting new generation if req_type == "GENERATE_IMAGE": return scene.get(f"{prefix}_image_status") == "COMPLETED" if req_type in ("GENERATE_VIDEO", "GENERATE_VIDEO_REFS"): diff --git a/extension/background.js b/extension/background.js index 6def15cfd..56e2ed47c 100644 --- a/extension/background.js +++ b/extension/background.js @@ -298,9 +298,13 @@ function keepAlive() { function sendToAgent(msg) { // API responses (with msg.id) go via HTTP — immune to WS disconnect if (msg.id) { + const headers = { 'Content-Type': 'application/json' }; + if (callbackSecret) { + headers['X-Callback-Secret'] = callbackSecret; + } fetch('http://127.0.0.1:8100/api/ext/callback', { method: 'POST', - headers: { 'Content-Type': 'application/json' }, + headers, body: JSON.stringify(msg), }).catch(() => { // HTTP failed — fallback to WS diff --git a/tests/unit/test_cli_providers.py b/tests/unit/test_cli_providers.py index 0a046e1b0..aff62a834 100644 --- a/tests/unit/test_cli_providers.py +++ b/tests/unit/test_cli_providers.py @@ -415,7 +415,7 @@ async def test_claude_agy_providers_include_read_the_images_at(self, provider, r assert "BASE_PROMPT" in captured["prompt"] # The sheets live outside the server cwd, so the directory holding them # is named to the CLI rather than left to be discovered. - assert captured["add_dirs"] == ("/tmp",) + assert captured["add_dirs"] == (str(contact_sheets[0].parent),) assert result == {"dimensions": {}, "errors": [], "usable_segments": []} @pytest.mark.asyncio @@ -473,7 +473,7 @@ async def test_single_sheet_wrapper_wording_matches_original_singular_form(self) new=AsyncMock(side_effect=capture_runner(captured))): await _analyze_cli(contact_sheets, 9, 4.0, {}, timestamped=True) - assert captured["prompt"].startswith("Read the image at /tmp/sheet_00.jpg.") + assert captured["prompt"].startswith(f"Read the image at {contact_sheets[0]}.") assert "Read the images at:" not in captured["prompt"] assert "sequential contact sheets" not in captured["prompt"] assert "It is a contact sheet of 9 video frames at 4.0fps with timestamps." in captured["prompt"] diff --git a/tests/unit/test_processor.py b/tests/unit/test_processor.py index c2f7e9850..c0f029e02 100644 --- a/tests/unit/test_processor.py +++ b/tests/unit/test_processor.py @@ -21,16 +21,21 @@ def make_req( orientation="VERTICAL", retry_count=0, rid="aaaaaaaa-bbbb-cccc-dddd-000000000001", + character_id=None, + **extra, ): - return { + d = { "id": rid, "type": req_type, "scene_id": scene_id, + "character_id": character_id, "orientation": orientation, "retry_count": retry_count, "project_id": "proj-001", "video_id": "video-001", } + d.update(extra) + return d # --------------------------------------------------------------------------- @@ -59,14 +64,24 @@ async def test_returns_false_when_vertical_image_pending(self, sample_scene_row) assert result is False @pytest.mark.asyncio - async def test_returns_false_for_generate_character_image(self, sample_scene_row): - """GENERATE_CHARACTER_IMAGE has no scene — should always return False.""" - req = make_req(req_type="GENERATE_CHARACTER_IMAGE", scene_id="scene-001") + async def test_returns_false_for_generate_character_image_without_media_id(self): + """GENERATE_CHARACTER_IMAGE should return False if character has no media_id.""" + req = make_req(req_type="GENERATE_CHARACTER_IMAGE", character_id="char-001") with patch("agent.worker.processor.crud") as mock_crud: - mock_crud.get_scene = AsyncMock(return_value=sample_scene_row) + mock_crud.get_character = AsyncMock(return_value={"id": "char-001", "media_id": None}) result = await _is_already_completed(req, "VERTICAL") assert result is False - mock_crud.get_scene.assert_not_called() + mock_crud.get_character.assert_called_once_with("char-001") + + @pytest.mark.asyncio + async def test_returns_true_for_generate_character_image_with_media_id(self): + """GENERATE_CHARACTER_IMAGE should return True if character already has media_id.""" + req = make_req(req_type="GENERATE_CHARACTER_IMAGE", character_id="char-001") + with patch("agent.worker.processor.crud") as mock_crud: + mock_crud.get_character = AsyncMock(return_value={"id": "char-001", "media_id": "uuid-1234"}) + result = await _is_already_completed(req, "VERTICAL") + assert result is True + mock_crud.get_character.assert_called_once_with("char-001") @pytest.mark.asyncio async def test_returns_false_when_no_scene_id(self): diff --git a/tests/unit/test_setup.py b/tests/unit/test_setup.py index 4798c31d2..3e35a13ad 100644 --- a/tests/unit/test_setup.py +++ b/tests/unit/test_setup.py @@ -36,7 +36,7 @@ def sandbox(setup_mod, monkeypatch, tmp_path): setup_mod, "LEGACY_GEMINI_COMMANDS_DIR", tmp_path / ".gemini" / "commands" / "fk") monkeypatch.setattr(setup_mod, "LEGACY_GEMINI_MD", tmp_path / "GEMINI.md") (tmp_path / "skills").mkdir() - (tmp_path / "skills" / "fk-demo.md").write_text("# fk-demo — A demo skill\n") + (tmp_path / "skills" / "fk-demo.md").write_text("# fk-demo — A demo skill\n", encoding="utf-8") return tmp_path @@ -70,9 +70,11 @@ def test_clean_removes_what_the_gemini_target_left_behind(self, setup_mod, sandb will ever take them away from an install made before v1.3.1.""" legacy_dir = sandbox / ".gemini" / "commands" / "fk" legacy_dir.mkdir(parents=True) - (legacy_dir / "demo.toml").write_text('description = "x"\n') + (legacy_dir / "demo.toml").write_text('description = "x"\n', encoding="utf-8") (sandbox / "GEMINI.md").write_text( - "\n# old\n") + "\n# old\n", + encoding="utf-8", + ) setup_mod.do_clean() @@ -141,7 +143,7 @@ def test_tool_choices_reject_gemini(setup_mod, monkeypatch, capsys): def test_discover_skills_reads_the_first_line_as_the_description(setup_mod, sandbox): - (sandbox / "skills" / "fk-other.md").write_text("# fk-other — Does a thing\n\nBody.\n") + (sandbox / "skills" / "fk-other.md").write_text("# fk-other — Does a thing\n\nBody.\n", encoding="utf-8") found = {s["name"]: s["description"] for s in setup_mod.discover_skills()} assert found["other"] == "fk-other — Does a thing" assert found["demo"] == "fk-demo — A demo skill" diff --git a/tests/unit/test_video_reviewer.py b/tests/unit/test_video_reviewer.py index 5287d11d5..3562b4322 100644 --- a/tests/unit/test_video_reviewer.py +++ b/tests/unit/test_video_reviewer.py @@ -19,11 +19,22 @@ def synthetic_video(): """A real ~2-second synthetic test video generated once for this test module.""" tmp_dir = tempfile.mkdtemp() video_path = Path(tmp_dir) / "synthetic.mp4" - result = subprocess.run( - ["ffmpeg", "-y", "-f", "lavfi", "-i", "testsrc=duration=2:size=320x240:rate=30", - str(video_path)], - capture_output=True, text=True, - ) + ffmpeg_cmd = "ffmpeg" + import shutil + if not shutil.which("ffmpeg"): + try: + import imageio_ffmpeg + ffmpeg_cmd = imageio_ffmpeg.get_ffmpeg_exe() + except ImportError: + pass + try: + result = subprocess.run( + [ffmpeg_cmd, "-y", "-f", "lavfi", "-i", "testsrc=duration=2:size=320x240:rate=30", + str(video_path)], + capture_output=True, text=True, + ) + except FileNotFoundError: + pytest.skip("ffmpeg not found in PATH") if result.returncode != 0: pytest.skip(f"ffmpeg unavailable or failed to generate test video: {result.stderr[-300:]}") yield video_path @@ -122,13 +133,19 @@ def test_partial_trailing_chunk_uses_zero_waste_layout( try: sheets, total_frames, _timestamped = _create_contact_sheets(str(synthetic_video), 30, out_dir) assert total_frames == chunk_size - assert len(sheets) == 1 - probe = subprocess.run( - ["ffprobe", "-v", "error", "-select_streams", "v:0", - "-show_entries", "stream=width,height", "-of", "csv=p=0", str(sheets[0])], - capture_output=True, text=True, - ) - width, height = (int(x) for x in probe.stdout.strip().split(",")) + try: + probe = subprocess.run( + ["ffprobe", "-v", "error", "-select_streams", "v:0", + "-show_entries", "stream=width,height", "-of", "csv=p=0", str(sheets[0])], + capture_output=True, text=True, + ) + if probe.returncode != 0: + raise FileNotFoundError + width, height = (int(x) for x in probe.stdout.strip().split(",")) + except (FileNotFoundError, ValueError): + from PIL import Image + with Image.open(sheets[0]) as im: + width, height = im.size frame_w, frame_h = 320, 240 # scale=320:-1 applied to the 320x240 synthetic_video assert (width, height) == (expected_cols * frame_w, expected_rows * frame_h), ( f"chunk_size={chunk_size}: expected a {expected_cols}x{expected_rows} " diff --git a/tests/unit/test_youtube.py b/tests/unit/test_youtube.py new file mode 100644 index 000000000..7068ac6ba --- /dev/null +++ b/tests/unit/test_youtube.py @@ -0,0 +1,84 @@ +"""Unit tests for youtube/upload.py and youtube/auth.py.""" +import json +from datetime import datetime, timezone +from pathlib import Path +from unittest.mock import MagicMock, patch + +import pytest + +from youtube.upload import ( + auto_schedule, + detect_video_type, + load_channel_rules, + validate_upload, +) + + +def test_load_channel_rules_fallback(): + rules = load_channel_rules("non_existent_channel_xyz") + assert "upload_rules" in rules + assert "shorts" in rules["upload_rules"] + assert rules["timezone"] == "Asia/Ho_Chi_Minh" + + +def test_load_channel_rules_from_disk(tmp_path, monkeypatch): + from youtube import auth + + monkeypatch.setattr(auth, "CHANNELS_DIR", tmp_path) + chan_dir = tmp_path / "custom_chan" + chan_dir.mkdir() + custom_rules = { + "upload_rules": { + "shorts": {"max_per_day": 5, "optimal_times": ["08:00"]}, + "long": {"max_per_day": 2, "optimal_times": ["20:00"]}, + }, + "timezone": "UTC", + } + (chan_dir / "channel_rules.json").write_text( + json.dumps(custom_rules), encoding="utf-8" + ) + + rules = load_channel_rules("custom_chan") + assert rules["upload_rules"]["shorts"]["max_per_day"] == 5 + assert rules["timezone"] == "UTC" + + +def test_detect_video_type_short(): + with patch("youtube.upload._probe_video", return_value=(45.0, 1080, 1920)): + vtype, orient = detect_video_type("test.mp4") + assert vtype == "short" + assert orient == "vertical" + + +def test_detect_video_type_long(): + with patch("youtube.upload._probe_video", return_value=(120.0, 1920, 1080)): + vtype, orient = detect_video_type("test.mp4") + assert vtype == "long" + assert orient == "horizontal" + + +def test_validate_upload_avoid_hours(): + # 03:00 is in default avoid_hours (0..5) + avoid_dt = datetime(2026, 9, 22, 3, 0, tzinfo=timezone.utc) + ok, reason = validate_upload("chan1", avoid_dt, is_short=True) + assert not ok + assert "avoid_hours" in reason + + +def test_validate_upload_valid_slot(): + valid_dt = datetime(2026, 9, 22, 12, 0, tzinfo=timezone.utc) + with patch("youtube.upload.load_upload_history", return_value=[]): + ok, reason = validate_upload("chan1", valid_dt, is_short=True) + assert ok + assert reason == "OK" + + +def test_auto_schedule_generates_slots(): + start_dt = datetime(2026, 9, 22, 6, 0, tzinfo=timezone.utc) + with patch("youtube.upload.load_upload_history", return_value=[]): + slots = auto_schedule("chan1", count=3, is_short=True, start_from=start_dt) + assert len(slots) == 3 + # Should start from the first optimal time >= 6:00 (which is 07:00, 12:00, 17:00) + assert "07:00:00" in slots[0] + assert "12:00:00" in slots[1] + assert "17:00:00" in slots[2] diff --git a/tools/review_server.py b/tools/review_server.py index b4017efef..f343e86db 100644 --- a/tools/review_server.py +++ b/tools/review_server.py @@ -80,7 +80,7 @@ def do_GET(self): if path == "/api/feedback": data = {} if FEEDBACK_FILE.exists(): - data = json.loads(FEEDBACK_FILE.read_text()) + data = json.loads(FEEDBACK_FILE.read_text(encoding="utf-8")) self._json_response(data) return @@ -120,7 +120,7 @@ def do_POST(self): body = self.rfile.read(length) try: data = json.loads(body) - FEEDBACK_FILE.write_text(json.dumps(data, indent=2, ensure_ascii=False)) + FEEDBACK_FILE.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8") self._json_response({"ok": True, "saved": str(FEEDBACK_FILE)}) except Exception as e: self.send_error(400, str(e)) diff --git a/youtube/__init__.py b/youtube/__init__.py new file mode 100644 index 000000000..ae9e4a4d7 --- /dev/null +++ b/youtube/__init__.py @@ -0,0 +1 @@ +"""YouTube integration package for Flow Kit.""" diff --git a/youtube/auth.py b/youtube/auth.py new file mode 100644 index 000000000..51536a275 --- /dev/null +++ b/youtube/auth.py @@ -0,0 +1,63 @@ +"""YouTube OAuth2 authentication helper for Flow Kit.""" +import json +import logging +from pathlib import Path +from typing import Optional + +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from google_auth_oauthlib.flow import InstalledAppFlow +from googleapiclient.discovery import build + +logger = logging.getLogger(__name__) + +SCOPES = [ + "https://www.googleapis.com/auth/youtube.upload", + "https://www.googleapis.com/auth/youtube.readonly", +] + +BASE_DIR = Path(__file__).resolve().parent.parent +CHANNELS_DIR = BASE_DIR / "youtube" / "channels" + + +def get_channel_dir(channel_name: str) -> Path: + """Return directory path for a channel.""" + return CHANNELS_DIR / channel_name + + +def get_authenticated_service(channel_name: str): + """Authenticate and return a YouTube Data API v3 service resource.""" + cdir = get_channel_dir(channel_name) + cdir.mkdir(parents=True, exist_ok=True) + token_file = cdir / "token.json" + secrets_file = cdir / "client_secrets.json" + + creds: Optional[Credentials] = None + + if token_file.exists(): + try: + creds = Credentials.from_authorized_user_file(str(token_file), SCOPES) + except Exception as e: + logger.warning("Failed to load existing token for %s: %s", channel_name, e) + creds = None + + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + logger.info("Refreshing expired token for channel %s", channel_name) + creds.refresh(Request()) + else: + if not secrets_file.exists(): + raise FileNotFoundError( + f"client_secrets.json not found for channel '{channel_name}' at {secrets_file}. " + "Download OAuth client ID from Google Cloud Console and place it there." + ) + logger.info("Running OAuth flow for channel %s", channel_name) + flow = InstalledAppFlow.from_client_secrets_file(str(secrets_file), SCOPES) + creds = flow.run_local_server(port=0) + + # Save credentials for subsequent runs + token_file.write_text(creds.to_json(), encoding="utf-8") + logger.info("Saved token to %s", token_file) + + service = build("youtube", "v3", credentials=creds) + return service diff --git a/youtube/upload.py b/youtube/upload.py new file mode 100644 index 000000000..1da4f6df3 --- /dev/null +++ b/youtube/upload.py @@ -0,0 +1,326 @@ +"""YouTube upload service and video scheduling for Flow Kit.""" +import json +import logging +import os +import subprocess +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import Any, Optional, Tuple + +from googleapiclient.http import MediaFileUpload + +from youtube.auth import get_authenticated_service, get_channel_dir + +logger = logging.getLogger(__name__) + +DEFAULT_RULES = { + "upload_rules": { + "shorts": { + "max_per_day": 3, + "optimal_times": ["07:00", "12:00", "17:00"], + "min_gap_hours": 4, + "avoid_hours": [0, 1, 2, 3, 4, 5], + }, + "long": { + "max_per_day": 1, + "optimal_times": ["19:00"], + "min_gap_hours": 4, + "avoid_hours": [0, 1, 2, 3, 4, 5], + }, + }, + "seo": { + "title_max_chars": 65, + "always_include_hashtags": ["#Shorts"], + "default_tags": [], + "default_category": "25", + }, + "timezone": "Asia/Ho_Chi_Minh", +} + + +def _probe_video(video_path: str | Path) -> Tuple[float, int, int]: + """Return (duration_seconds, width, height) using ffprobe or ffmpeg.""" + path_str = str(video_path) + # Try ffprobe first + try: + cmd = [ + "ffprobe", + "-v", "error", + "-select_streams", "v:0", + "-show_entries", "stream=width,height,duration:format=duration", + "-of", "json", + path_str, + ] + res = subprocess.run(cmd, capture_output=True, text=True, timeout=30) + if res.returncode == 0: + data = json.loads(res.stdout) + stream = (data.get("streams") or [{}])[0] + width = int(stream.get("width", 1080)) + height = int(stream.get("height", 1920)) + duration_str = stream.get("duration") or data.get("format", {}).get("duration", "0") + return float(duration_str), width, height + except Exception as e: + logger.warning("ffprobe probe failed: %s, attempting fallback", e) + + # Fallback to ffmpeg -i info parsing + try: + ffmpeg_bin = "ffmpeg" + try: + import imageio_ffmpeg + ffmpeg_bin = imageio_ffmpeg.get_ffmpeg_exe() + except ImportError: + pass + + res = subprocess.run([ffmpeg_bin, "-i", path_str], capture_output=True, text=True, timeout=30) + stderr = res.stderr or "" + duration = 0.0 + width, height = 1080, 1920 + for line in stderr.splitlines(): + if "Duration:" in line: + parts = line.split("Duration:")[1].split(",")[0].strip() + h, m, s = parts.split(":") + duration = float(h) * 3600 + float(m) * 60 + float(s) + if "Video:" in line and ("x" in line or "," in line): + import re + match = re.search(r"(\d{3,5})x(\d{3,5})", line) + if match: + width, height = int(match.group(1)), int(match.group(2)) + return duration, width, height + except Exception as e: + logger.error("Failed to probe video %s: %s", video_path, e) + return 0.0, 1080, 1920 + + +def detect_video_type(video_path: str | Path) -> Tuple[str, str]: + """Detect if video is Short or Long-form. + + Returns: + tuple[str, str]: ("short", "vertical") or ("long", "horizontal") + """ + duration, width, height = _probe_video(video_path) + is_vertical = height > width + is_short = duration < 61.0 and is_vertical + video_type = "short" if is_short else "long" + orientation = "vertical" if is_vertical else "horizontal" + return video_type, orientation + + +def load_channel_rules(channel_name: str) -> dict: + """Load channel rules from youtube/channels//channel_rules.json.""" + rules_file = get_channel_dir(channel_name) / "channel_rules.json" + if rules_file.exists(): + try: + return json.loads(rules_file.read_text(encoding="utf-8")) + except Exception as e: + logger.warning("Error reading %s: %s, using defaults", rules_file, e) + return DEFAULT_RULES.copy() + + +def load_upload_history(channel_name: str) -> list[dict]: + """Load history of uploads for a channel.""" + hist_file = get_channel_dir(channel_name) / "upload_history.json" + if hist_file.exists(): + try: + return json.loads(hist_file.read_text(encoding="utf-8")) + except Exception: + return [] + return [] + + +def save_upload_history_entry(channel_name: str, entry: dict): + """Save an entry to upload_history.json.""" + cdir = get_channel_dir(channel_name) + cdir.mkdir(parents=True, exist_ok=True) + hist_file = cdir / "upload_history.json" + history = load_upload_history(channel_name) + history.append(entry) + hist_file.write_text(json.dumps(history, indent=2, ensure_ascii=False), encoding="utf-8") + + +def _parse_dt(val: Any) -> datetime: + """Normalize datetime to timezone-aware UTC datetime.""" + if not val: + return datetime.fromtimestamp(0, tz=timezone.utc) + if isinstance(val, datetime): + return val if val.tzinfo else val.replace(tzinfo=timezone.utc) + try: + val_clean = str(val).replace("Z", "+00:00") + dt = datetime.fromisoformat(val_clean) + return dt if dt.tzinfo else dt.replace(tzinfo=timezone.utc) + except (ValueError, TypeError): + return datetime.fromtimestamp(0, tz=timezone.utc) + + +def validate_upload( + channel_name: str, + schedule_at: str | datetime, + is_short: bool = True, +) -> Tuple[bool, str]: + """Validate scheduled upload against channel rules. + + Checks: + 1. Max uploads per day + 2. Min gap between uploads + 3. Avoid hours + """ + rules = load_channel_rules(channel_name) + upload_rules = rules.get("upload_rules") or DEFAULT_RULES["upload_rules"] + type_key = "shorts" if is_short else "long" + type_rules = upload_rules.get(type_key) or DEFAULT_RULES["upload_rules"][type_key] + + sched_dt = _parse_dt(schedule_at) + target_date = sched_dt.date() + + history = load_upload_history(channel_name) + + # 1. Max per day + max_per_day = type_rules.get("max_per_day", 3 if is_short else 1) + day_count = sum( + 1 for h in history + if h.get("is_short", True) == is_short + and _parse_dt(h.get("schedule_at") or h.get("timestamp", "")).date() == target_date + ) + if day_count >= max_per_day: + return False, f"Max {max_per_day} {type_key}/day reached for {target_date}" + + # 2. Min gap hours + min_gap = timedelta(hours=type_rules.get("min_gap_hours", 4)) + for h in history: + prev_dt = _parse_dt(h.get("schedule_at") or h.get("timestamp", "")) + if abs(sched_dt - prev_dt) < min_gap: + return False, f"Min gap of {min_gap} not met relative to {prev_dt.isoformat()}" + + # 3. Avoid hours + avoid = type_rules.get("avoid_hours", [0, 1, 2, 3, 4, 5]) + if sched_dt.hour in avoid: + return False, f"Schedule hour {sched_dt.hour}:00 is in avoid_hours {avoid}" + + return True, "OK" + + +def auto_schedule( + channel_name: str, + count: int, + is_short: bool = True, + start_from: Optional[datetime] = None, +) -> list[str]: + """Auto-generate N valid schedule slots adhering to channel rules.""" + rules = load_channel_rules(channel_name) + upload_rules = rules.get("upload_rules", DEFAULT_RULES["upload_rules"]) + type_key = "shorts" if is_short else "long" + type_rules = upload_rules.get(type_key, DEFAULT_RULES["upload_rules"][type_key]) + optimal_times = type_rules.get("optimal_times", ["07:00", "12:00", "17:00"] if is_short else ["19:00"]) + + current = start_from or datetime.now(timezone.utc) + current_date = current.date() + + slots: list[str] = [] + day_offset = 0 + + while len(slots) < count and day_offset < 60: + day = current_date + timedelta(days=day_offset) + for t_str in optimal_times: + hh, mm = map(int, t_str.split(":")) + candidate = datetime(day.year, day.month, day.day, hh, mm, tzinfo=timezone.utc) + if candidate <= current: + continue + ok, _ = validate_upload(channel_name, candidate, is_short=is_short) + if ok: + slots.append(candidate.isoformat()) + if len(slots) == count: + break + day_offset += 1 + + return slots + + +def upload_video( + channel_name: str, + video_path: str | Path, + title: str, + description: str = "", + tags: Optional[list[str]] = None, + category_id: str = "25", + schedule_at: Optional[str] = None, + is_short: bool = True, + privacy_status: str = "private", +) -> str: + """Upload a video to YouTube with resume support, auto-hashtags, and schedule.""" + video_file = Path(video_path) + if not video_file.exists(): + raise FileNotFoundError(f"Video file not found: {video_file}") + + rules = load_channel_rules(channel_name) + seo_rules = rules.get("seo", DEFAULT_RULES["seo"]) + + # Ensure #Shorts in title if short + if is_short and "#Shorts" not in title and "#shorts" not in title.lower(): + title = f"{title} #Shorts" + + title_max = seo_rules.get("title_max_chars", 65) + if len(title) > title_max: + title = title[:title_max] + + all_tags = list(tags or []) + for d_tag in seo_rules.get("default_tags", []): + if d_tag not in all_tags: + all_tags.append(d_tag) + + body: dict[str, Any] = { + "snippet": { + "title": title, + "description": description, + "tags": all_tags, + "categoryId": category_id or seo_rules.get("default_category", "25"), + }, + "status": { + "privacyStatus": privacy_status, + "selfDeclaredMadeForKids": False, + }, + } + + if schedule_at: + sched_dt = _parse_dt(schedule_at) + body["status"]["privacyStatus"] = "private" + body["status"]["publishAt"] = sched_dt.strftime("%Y-%m-%dT%H:%M:%SZ") + + service = get_authenticated_service(channel_name) + + chunksize = 10 * 1024 * 1024 # 10MB chunk + media = MediaFileUpload( + str(video_file), + mimetype="video/mp4", + chunksize=chunksize, + resumable=True, + ) + + request = service.videos().insert( + part="snippet,status", + body=body, + media_body=media, + ) + + response = None + logger.info("Uploading %s to channel %s...", video_file.name, channel_name) + while response is None: + status, response = request.next_chunk() + if status: + logger.info("Upload progress: %d%%", int(status.progress() * 100)) + + video_id = response.get("id", "") + logger.info("Uploaded video %s successfully with ID %s", video_file.name, video_id) + + # Save to history + save_upload_history_entry( + channel_name, + { + "video_id": video_id, + "title": title, + "video_path": str(video_file), + "is_short": is_short, + "schedule_at": schedule_at, + "timestamp": datetime.now(timezone.utc).isoformat(), + }, + ) + + return video_id From f6caa5116ff366057b24c65080a9df677aa6bfa6 Mon Sep 17 00:00:00 2001 From: Le Tien Date: Tue, 22 Sep 2026 11:53:27 +0700 Subject: [PATCH 2/4] feat: add CLI providers service, active project API, request handlers, and SDK operations --- agent/api/active_project.py | 6 +++--- agent/api/requests.py | 5 ++++- agent/sdk/services/operations.py | 5 ++--- agent/services/cli_providers.py | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/agent/api/active_project.py b/agent/api/active_project.py index b0b0389ca..596544234 100644 --- a/agent/api/active_project.py +++ b/agent/api/active_project.py @@ -18,7 +18,7 @@ def _read_state() -> dict | None: if _STATE_FILE.exists(): try: - with open(_STATE_FILE) as f: + with open(_STATE_FILE, encoding="utf-8") as f: return json.load(f) except (json.JSONDecodeError, OSError) as e: logger.warning("Corrupt active_project.json, clearing: %s", e) @@ -28,10 +28,10 @@ def _read_state() -> dict | None: def _write_state(data: dict): """Atomic write — temp file + os.replace to avoid partial reads.""" - content = json.dumps(data, indent=2) + "\n" + content = json.dumps(data, indent=2, ensure_ascii=False) + "\n" fd, tmp = tempfile.mkstemp(dir=_STATE_FILE.parent, suffix=".tmp") try: - os.write(fd, content.encode()) + os.write(fd, content.encode("utf-8")) os.close(fd) os.replace(tmp, _STATE_FILE) except BaseException: diff --git a/agent/api/requests.py b/agent/api/requests.py index 6c1b5f330..b1f73d6cc 100644 --- a/agent/api/requests.py +++ b/agent/api/requests.py @@ -36,13 +36,14 @@ async def create(body: RequestCreate): data = body.model_dump(exclude_none=True) data["req_type"] = data.pop("type") - # Reject if there's already an active request for the same scene + type scene_id = data.get("scene_id") req_type = data.get("req_type") + orient = data.get("orientation") if scene_id and req_type: existing = await crud.list_requests(scene_id=scene_id) active = [r for r in existing if r.get("type") == req_type + and (not orient or r.get("orientation") == orient) and r.get("status") in ("PENDING", "PROCESSING")] if active: raise HTTPException( @@ -79,11 +80,13 @@ async def create_batch(body: BatchRequestCreate): scene_id = data.get("scene_id") character_id = data.get("character_id") req_type = data.get("req_type") + orient = data.get("orientation") # Idempotent: skip if active request already exists if scene_id and req_type: existing = await crud.list_requests(scene_id=scene_id) active = [r for r in existing if r.get("type") == req_type + and (not orient or r.get("orientation") == orient) and r.get("status") in ("PENDING", "PROCESSING")] if active: results.append(active[0]) diff --git a/agent/sdk/services/operations.py b/agent/sdk/services/operations.py index e7157cd45..20a4a8168 100644 --- a/agent/sdk/services/operations.py +++ b/agent/sdk/services/operations.py @@ -209,9 +209,8 @@ async def _poll_workflows( for op in operations: mid = op.get("_primary_media_id", "") wf_name = op.get("operation", {}).get("name", "") - local = completed.get(mid, {}).get("path", "") - # Use file:// so downstream sees a URL-shaped string - local_url = f"file://{_os.path.abspath(local)}" if local else "" + from pathlib import Path as _Path + local_url = _Path(local).resolve().as_uri() if local else "" synth_ops.append({ "operation": { "name": wf_name, diff --git a/agent/services/cli_providers.py b/agent/services/cli_providers.py index 81977d0cc..98dd8d105 100644 --- a/agent/services/cli_providers.py +++ b/agent/services/cli_providers.py @@ -244,7 +244,7 @@ def _list_codex_models() -> list[dict]: """ if not _CODEX_MODELS_CACHE.exists(): return [] - with open(_CODEX_MODELS_CACHE) as f: + with open(_CODEX_MODELS_CACHE, encoding="utf-8") as f: data = json.load(f) models = [] for entry in data.get("models") or []: From 3604ad30f4e5e58d1b2cb85d33fbd1d3d571e661 Mon Sep 17 00:00:00 2001 From: TIENLV Date: Mon, 5 Oct 2026 21:28:46 +0700 Subject: [PATCH 3/4] feat: add flowkit agent, extension scripts, and testing utilities --- agent/api/flow.py | 50 + agent/main.py | 206 + agent/models.json | 10 +- agent/services/flow_batch.py | 65 +- agent/services/flow_client.py | 42 +- agent/worker/processor.py | 2 +- dashboard/package-lock.json | 33 +- docs/hong_nhat_novel.txt | 11305 +++++++++++++++++++++++++ extension/background.js | 263 +- extension/content.js | 92 +- extension/injected.js | 208 +- requirements.txt | 2 + scratch/captured_netlog.jsonl | 321 + scratch/check_chars.py | 7 + scratch/check_db.py | 18 + scratch/check_hijack.py | 4 + scratch/check_netlog.py | 8 + scratch/check_new_media.py | 18 + scratch/check_recent_assets.py | 32 + scratch/check_requests.py | 8 + scratch/compare_stream_chat.py | 30 + scratch/inspect_28_31.py | 14 + scratch/inspect_as29s.py | 13 + scratch/inspect_assets.py | 14 + scratch/inspect_c31.py | 22 + scratch/inspect_dump.py | 36 + scratch/inspect_items.py | 16 + scratch/inspect_new_asset.py | 18 + scratch/inspect_video.py | 18 + scratch/inspect_video_op.py | 16 + scratch/inspect_zzl.py | 10 + scratch/list_captures.py | 16 + scratch/orig_background.js | 1010 +++ scratch/parse_dump.py | 13 + scratch/parse_envelopes.py | 17 + scratch/parse_media.py | 17 + scratch/parse_netlog.py | 26 + scratch/patch_scene_0.py | 38 + scratch/pause_requests.py | 6 + scratch/poll_media.py | 39 + scratch/print_c31.py | 9 + scratch/project_media_dump.txt | 8 + scratch/run_eval.py | 17 + scratch/run_regen_scene_0_image.py | 36 + scratch/stream_chat_response.txt | 8 + scratch/submit_prompt.py | 22 + scratch/test_gen_image.py | 17 + scratch/test_gn0bre.py | 9 + scratch/test_parse.py | 16 + scratch/test_project_media.py | 22 + scratch/test_prompt_api.py | 38 + scratch/test_safe_prompt.py | 44 + scratch/test_stream_chat.py | 36 + scratch/test_stream_chat_intent.py | 27 + scratch/test_submit_ui.py | 21 + scratch/test_vn_prompt.py | 17 + scratch/update_scene_0_db.py | 52 + scratch/view_recent_captures.py | 9 + scripts/cancel_video_requests.py | 14 + scripts/check_3_ops.py | 13 + scripts/check_op.py | 9 + scripts/create_hong_nhat_entities.py | 72 + scripts/create_hong_nhat_scenes.py | 75 + scripts/created_entities.json | 9 + scripts/created_scenes.json | 252 + scripts/created_video.json | 19 + scripts/debug_op_lookup.py | 31 + scripts/inspect_flow_cache.py | 9 + scripts/inspect_processing.py | 10 + scripts/inspect_video_progress.py | 19 + scripts/populate_entities_via_api.py | 83 + scripts/search_db_ids.py | 17 + scripts/test_video_gen.py | 54 + scripts/update_scene1_video.py | 14 + scripts/upgrade_scene_1.py | 41 + tests/unit/test_flow_batch_golden.py | 7 +- tests/unit/test_video_reviewer.py | 13 +- 77 files changed, 15080 insertions(+), 172 deletions(-) create mode 100644 docs/hong_nhat_novel.txt create mode 100644 scratch/captured_netlog.jsonl create mode 100644 scratch/check_chars.py create mode 100644 scratch/check_db.py create mode 100644 scratch/check_hijack.py create mode 100644 scratch/check_netlog.py create mode 100644 scratch/check_new_media.py create mode 100644 scratch/check_recent_assets.py create mode 100644 scratch/check_requests.py create mode 100644 scratch/compare_stream_chat.py create mode 100644 scratch/inspect_28_31.py create mode 100644 scratch/inspect_as29s.py create mode 100644 scratch/inspect_assets.py create mode 100644 scratch/inspect_c31.py create mode 100644 scratch/inspect_dump.py create mode 100644 scratch/inspect_items.py create mode 100644 scratch/inspect_new_asset.py create mode 100644 scratch/inspect_video.py create mode 100644 scratch/inspect_video_op.py create mode 100644 scratch/inspect_zzl.py create mode 100644 scratch/list_captures.py create mode 100644 scratch/orig_background.js create mode 100644 scratch/parse_dump.py create mode 100644 scratch/parse_envelopes.py create mode 100644 scratch/parse_media.py create mode 100644 scratch/parse_netlog.py create mode 100644 scratch/patch_scene_0.py create mode 100644 scratch/pause_requests.py create mode 100644 scratch/poll_media.py create mode 100644 scratch/print_c31.py create mode 100644 scratch/project_media_dump.txt create mode 100644 scratch/run_eval.py create mode 100644 scratch/run_regen_scene_0_image.py create mode 100644 scratch/stream_chat_response.txt create mode 100644 scratch/submit_prompt.py create mode 100644 scratch/test_gen_image.py create mode 100644 scratch/test_gn0bre.py create mode 100644 scratch/test_parse.py create mode 100644 scratch/test_project_media.py create mode 100644 scratch/test_prompt_api.py create mode 100644 scratch/test_safe_prompt.py create mode 100644 scratch/test_stream_chat.py create mode 100644 scratch/test_stream_chat_intent.py create mode 100644 scratch/test_submit_ui.py create mode 100644 scratch/test_vn_prompt.py create mode 100644 scratch/update_scene_0_db.py create mode 100644 scratch/view_recent_captures.py create mode 100644 scripts/cancel_video_requests.py create mode 100644 scripts/check_3_ops.py create mode 100644 scripts/check_op.py create mode 100644 scripts/create_hong_nhat_entities.py create mode 100644 scripts/create_hong_nhat_scenes.py create mode 100644 scripts/created_entities.json create mode 100644 scripts/created_scenes.json create mode 100644 scripts/created_video.json create mode 100644 scripts/debug_op_lookup.py create mode 100644 scripts/inspect_flow_cache.py create mode 100644 scripts/inspect_processing.py create mode 100644 scripts/inspect_video_progress.py create mode 100644 scripts/populate_entities_via_api.py create mode 100644 scripts/search_db_ids.py create mode 100644 scripts/test_video_gen.py create mode 100644 scripts/update_scene1_video.py create mode 100644 scripts/upgrade_scene_1.py diff --git a/agent/api/flow.py b/agent/api/flow.py index 2a55935bb..ddeaae71f 100644 --- a/agent/api/flow.py +++ b/agent/api/flow.py @@ -470,3 +470,53 @@ async def upload_image(body: UploadImageRequest): raise HTTPException(_safe_status_code(result.get("status")), result.get("error", result.get("data"))) media_id = result.get("_mediaId") return {"media_id": media_id, "raw": result.get("data", result)} + + +@router.get("/debug-cache") +async def debug_cache(): + client = get_flow_client() + return { + "operation_media": client._operation_media, + "operation_projects": client._operation_projects, + "operation_polls": client._operation_polls, + } + + +@router.get("/debug-listing/{operation_id}") +async def debug_listing(operation_id: str, project_id: str = "594758cc-11f5-4f92-8b3c-1213686591f4"): + import agent.services.flow_batch as fb + client = get_flow_client() + if not client.connected: + raise HTTPException(503, "Extension not connected") + result = await client.batch_rpc( + fb.RPC_PROJECT_MEDIA, fb.project_media_request(project_id), + match=operation_id, timeout=30, + ) + raw = result.get("data") or "" + mid = fb.find_media_id_in_text(raw, operation_id) + return { + "operation_id": operation_id, + "matched_media_id": mid, + "raw_preview": raw[:1000], + } + + +@router.get("/debug-project-media") +async def debug_project_media(project_id: str = "594758cc-11f5-4f92-8b3c-1213686591f4"): + import re + import agent.services.flow_batch as fb + client = get_flow_client() + if not client.connected: + raise HTTPException(503, "Extension not connected") + result = await client.batch_rpc( + fb.RPC_PROJECT_MEDIA, fb.project_media_request(project_id), + match=None, timeout=60, + ) + raw = result.get("data") or "" + uuids = list(set(re.findall(r'[0-9a-fA-F-]{36}', raw))) + return { + "raw_length": len(raw), + "found_uuids_count": len(uuids), + "uuids": uuids, + "sample": raw[:2000] + } diff --git a/agent/main.py b/agent/main.py index 32bf03b3e..367df053e 100644 --- a/agent/main.py +++ b/agent/main.py @@ -166,6 +166,190 @@ async def ext_callback(request: Request): return {"ok": False, "reason": "no matching pending request"} +@app.post("/api/ext/reload") +async def ext_reload(): + """Trigger extension to reload its background service worker.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + for ws in list(client._extensions.keys()): + try: + await ws.send(json.dumps({"id": "reload-1", "method": "reload_extension"})) + except Exception: + pass + return {"ok": True} + + +@app.post("/api/ext/reload-flow-tab") +async def ext_reload_flow_tab(): + """Trigger extension to reload open Flow tabs.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + return await client._send("reload_flow_tab", {}) + + +@app.get("/api/ext/tabs") +async def ext_tabs(): + """List open Flow tabs from the extension.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + return await client._send("list_tabs", {}) + + +@app.get("/api/ext/debug-tab") +async def ext_debug_tab(): + """Inspect candidate Flow tab status.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + return await client._send("debug_tab", {}) + + +@app.get("/api/ext/test-captcha") +async def ext_test_captcha(action: str = "IMAGE_GENERATION"): + """Test reCAPTCHA minting via extension.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + return await client._send("solve_captcha", {"captchaAction": action}) + + +@app.get("/api/ext/test-project-media") +async def ext_test_project_media(): + """Test listing media from active Flow project.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + from agent.services import flow_batch as fb + pid = "594758cc-11f5-4f92-8b3c-1213686591f4" + freq = fb.project_media_request(pid) + res = await client.batch_rpc(fb.RPC_PROJECT_MEDIA, freq) + raw = res.get("data", "") + with open("scratch/project_media_dump.txt", "w", encoding="utf-8") as f: + f.write(raw) + images = fb.read_images(raw) if raw else [] + return { + "status": res.get("status"), + "error": res.get("error"), + "data_len": len(raw), + "images": [{"media_id": img.media_id, "url": img.url} for img in images[:10]], + } + + +@app.get("/api/ext/media-url") +async def ext_media_url(media_id: str): + """Fetch signed media URLs for a media_id.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + from agent.services import flow_batch as fb + freq = fb.media_request(media_id) + res = await client.batch_rpc(fb.RPC_MEDIA, freq) + raw = res.get("data", "") + urls = None + if raw: + try: + payload = fb.first_payload(raw, fb.RPC_MEDIA) + urls = fb.read_media_urls(payload, media_id) + except Exception as e: + logger.warning("Failed to parse media urls for %s: %s", media_id, e) + return { + "status": res.get("status"), + "error": res.get("error"), + "raw": raw, + "urls": {"video": urls.video, "image": urls.image} if urls else None, + } + + +@app.post("/api/ext/stream-chat") +async def ext_stream_chat(request: Request): + """Trigger image generation via FlowCreationAgentService/StreamChat.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + data = await request.json() + prompt = data.get("prompt") + if not prompt: + from fastapi import HTTPException + raise HTTPException(400, "prompt is required") + project_id = data.get("project_id") + res = await client.stream_chat(prompt, project_id=project_id) + return res + + +@app.post("/api/ext/submit-ui-prompt") +async def ext_submit_ui_prompt(request: Request): + """Type prompt into Flow web UI ProseMirror editor and click create button.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + data = await request.json() + prompt = data.get("prompt") + if not prompt: + from fastapi import HTTPException + raise HTTPException(400, "prompt is required") + return await client._send("submit_ui_prompt", {"prompt": prompt}) + + +@app.post("/api/ext/eval-tab") +async def ext_eval_tab(request: Request): + """Execute javascript in the active Flow tab's MAIN world and return result.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + data = await request.json() + return await client._send("eval_tab", {"code": data.get("code", "")}) + + +@app.get("/api/ext/find-actions") +async def ext_find_actions(): + """Find reCAPTCHA action names in Flow web scripts.""" + client = get_flow_client() + if not client.connected: + from fastapi import HTTPException + raise HTTPException(503, "Extension not connected") + return await client._send("find_actions", {}) + + +@app.post("/api/ext/netlog") +async def ext_netlog(request: Request): + """Capture raw batchexecute requests from Flow UI.""" + data = await request.json() + import pathlib + p = pathlib.Path("scratch/captured_netlog.jsonl") + p.parent.mkdir(parents=True, exist_ok=True) + with open(p, "a", encoding="utf-8") as f: + f.write(json.dumps(data) + "\n") + logger.info("Captured netlog: url=%s status=%s body_len=%d", + data.get("url"), data.get("statusCode"), len(data.get("body") or "")) + return {"ok": True} + + +@app.get("/api/ext/netlog") +async def ext_get_netlog(): + """Retrieve captured raw batchexecute requests.""" + import pathlib + p = pathlib.Path("scratch/captured_netlog.jsonl") + if not p.exists(): + return {"captures": []} + lines = [json.loads(line) for line in p.read_text(encoding="utf-8").splitlines() if line.strip()] + return {"captures": lines} + + + + @app.get("/health") async def health(): client = get_flow_client() @@ -229,6 +413,28 @@ async def dashboard_ws(websocket: WebSocket): event_bus.unsubscribe(q) +@app.post("/api/test-direct") +async def test_direct(request: Request): + from agent.services import flow_batch as fb + client = get_flow_client() + data = await request.json() + pid = data.get("project_id", "594758cc-11f5-4f92-8b3c-1213686591f4") + prompt = data.get("prompt") + ref_ids = data.get("ref_media_ids") + freq = fb.image_request( + prompt, pid, count=1, + aspect="IMAGE_ASPECT_RATIO_LANDSCAPE", + ref_media_ids=ref_ids, + ) + try: + res = await client._batch_payload(fb.RPC_GEN_IMAGE, freq, fb.CAPTCHA_IMAGE) + imgs = fb.read_images(res) + return {"ok": True, "count": len(imgs), "images": [img.__dict__ for img in imgs]} + except Exception as e: + logger.exception("test_direct failed: %s", e) + return {"ok": False, "error": str(e)} + + if __name__ == "__main__": import os import uvicorn diff --git a/agent/models.json b/agent/models.json index 7830223ec..67b9c1e4a 100644 --- a/agent/models.json +++ b/agent/models.json @@ -2,12 +2,12 @@ "video_models": { "PAYGATE_TIER_TWO": { "frame_2_video": { - "VIDEO_ASPECT_RATIO_LANDSCAPE": "veo_3_1_i2v_lite_low_priority", - "VIDEO_ASPECT_RATIO_PORTRAIT": "veo_3_1_i2v_lite_low_priority" + "VIDEO_ASPECT_RATIO_LANDSCAPE": "veo_3_1_i2v_lite", + "VIDEO_ASPECT_RATIO_PORTRAIT": "veo_3_1_i2v_lite" }, "start_end_frame_2_video": { - "VIDEO_ASPECT_RATIO_LANDSCAPE": "veo_3_1_i2v_lite_low_priority", - "VIDEO_ASPECT_RATIO_PORTRAIT": "veo_3_1_i2v_lite_low_priority" + "VIDEO_ASPECT_RATIO_LANDSCAPE": "veo_3_1_i2v_lite", + "VIDEO_ASPECT_RATIO_PORTRAIT": "veo_3_1_i2v_lite" }, "reference_frame_2_video": { "VIDEO_ASPECT_RATIO_LANDSCAPE": "veo_3_1_r2v_fast_landscape_ultra_relaxed", @@ -66,6 +66,6 @@ "veo_3_1_i2v_lite", "veo_3_1_i2v_s_fast_ultra" ], - "default": "veo_3_1_i2v_lite_low_priority" + "default": "veo_3_1_i2v_lite" } } diff --git a/agent/services/flow_batch.py b/agent/services/flow_batch.py index e2f41c00e..1c24e81f7 100644 --- a/agent/services/flow_batch.py +++ b/agent/services/flow_batch.py @@ -47,6 +47,7 @@ CAPTCHA_IMAGE = "IMAGE_GENERATION" CAPTCHA_VIDEO = "VIDEO_GENERATION" +CAPTCHA_CHAT = "CHAT_GENERATION" #: The extension substitutes a freshly minted reCAPTCHA token for this marker. #: It has to be a placeholder rather than a real token because the mint has to @@ -99,7 +100,7 @@ #: [tier][quality][aspect] and carried `…_portrait` / `…_fl` / `…_relaxed` #: variants; those are gone — aspect is its own slot now, and the suffixed #: names are rejected. -VIDEO_MODEL = "veo_3_1_i2v_lite_low_priority" +VIDEO_MODEL = "veo_3_1_i2v_lite" VIDEO_MODELS = { "veo_3_1_i2v_lite_low_priority", "veo_3_1_i2v_lite", @@ -334,9 +335,9 @@ def _client_uuid() -> str: return str(uuid.uuid4()).upper() -def _context(project_id: str) -> list: +def _context(project_id: str, asset_id: Optional[str] = None) -> list: """The surface/project/captcha envelope every generate call repeats.""" - return [None, SURFACE_ID, None, None, None, project_id, None, None, None, None, + return [None, SURFACE_ID, None, None, asset_id, project_id, None, None, None, None, [CAPTCHA_SLOT, 1]] @@ -357,7 +358,8 @@ def image_request(prompt: str, project_id: str, count: int = 1, prompts: Optional[list[str]] = None, model: str = IMAGE_MODEL, ref_media_ids: Optional[list[str]] = None, - base_media_id: Optional[str] = None) -> str: + base_media_id: Optional[str] = None, + asset_id: Optional[str] = None) -> str: """One request item per variant, exactly as the REST payload did it. There is no "how many" field: Flow returns one image per item in the list, @@ -371,6 +373,7 @@ def image_request(prompt: str, project_id: str, count: int = 1, resolved_model = resolve_image_model(model) base = seed if seed is not None else random.randint(1, 10**9) items = [] + target_asset = asset_id or base_media_id for index in range(count): text = prompts[index] if prompts and index < len(prompts) else prompt image_inputs = [] @@ -380,12 +383,26 @@ def image_request(prompt: str, project_id: str, count: int = 1, _reference(mid) for mid in (ref_media_ids or []) if mid != base_media_id ) items.append([None, None, image_inputs or None, base + index * 9973, ratio, - resolved_model, None, _context(project_id), [[[text]]], - None, None, None, _client_uuid(), _client_uuid()]) - return build_envelope(RPC_GEN_IMAGE, [None, items, 1, _context(project_id), + resolved_model, None, _context(project_id, target_asset), [[[text]]], + None, None, None, None, _client_uuid()]) + return build_envelope(RPC_GEN_IMAGE, [None, items, 1, _context(project_id, target_asset), [_client_uuid()]]) +STREAM_CHAT_PATH = "/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat" + + +def stream_chat_request(prompt: str, project_id: str, client_uuid: str | None = None) -> str: + """Build the f.req payload for FlowCreationAgentService/StreamChat.""" + cid = client_uuid or str(uuid.uuid4()) + inner = [ + cid, + [[[[prompt]]]], + [f"projects/{project_id}", None, [CAPTCHA_SLOT, 1], None, None, 9], + ] + return json.dumps([None, json.dumps(inner, separators=(",", ":"), ensure_ascii=False)], separators=(",", ":"), ensure_ascii=False) + + def image_upscale_request(media_id: str, resolution: str = "2K") -> str: """Build the current FlowService.UpsampleImage request (RPC SPrCad).""" key = str(resolution).strip().upper() @@ -666,14 +683,23 @@ def find_media_id(payload: Any, operation_id: str) -> Optional[str]: """Look an operation up in the project listing and take its media id. Entries look like - ``[opId, null, null, [title, created, null, null, mediaId, clientUuid, done], projectId]``. + ``[assetId, folderId, null, [title, [sec, nanos], isVideo, null, mediaId, opId, done], projectId]``. """ + op_lower = operation_id.lower() for node in _walk_lists(payload): - if len(node) < 4 or node[0] != operation_id: + if not isinstance(node, list) or len(node) < 4: continue detail = node[3] - if isinstance(detail, list) and len(detail) > 4 and isinstance(detail[4], str): - return detail[4] + if not isinstance(detail, list) or len(detail) <= 4: + continue + # 1. Match assetId directly + if isinstance(node[0], str) and node[0].lower() == op_lower: + if isinstance(detail[4], str): + return detail[4] + # 2. Match opId in detail[5] + if len(detail) > 5 and isinstance(detail[5], str) and detail[5].lower() == op_lower: + if isinstance(detail[4], str): + return detail[4] return None @@ -684,17 +710,16 @@ def find_media_id(payload: Any, operation_id: str) -> Optional[str]: def find_media_id_in_text(text: str, operation_id: str) -> Optional[str]: - """Same lookup as :func:`find_media_id`, but on an unparsed listing. - - The project listing has no page size that shrinks it and grows with every - generation, so it will outrun whatever response cap is in place — and a - truncated tail cannot be JSON-decoded even though the entry we want is - sitting in it intact. Scanning the text finds it anyway. - """ - start = text.find(operation_id) + """Same lookup as :func:`find_media_id`, but case-insensitive on unparsed listing.""" + lower_text = text.lower() + lower_op = operation_id.lower() + start = lower_text.find(lower_op) if start == -1: return None - match = _MEDIA_SLOT.search(text, start, start + 800) + # Search within window of match + window_start = max(0, start - 400) + window_end = min(len(text), start + 800) + match = _MEDIA_SLOT.search(text, window_start, window_end) return match.group(1) if match else None diff --git a/agent/services/flow_client.py b/agent/services/flow_client.py index 92c1b003f..ed304d1c4 100644 --- a/agent/services/flow_client.py +++ b/agent/services/flow_client.py @@ -487,6 +487,7 @@ async def _send(self, method: str, params: dict, timeout: float = 300) -> dict: async def batch_rpc(self, rpcid: str, freq: str, captcha_action: str | None = None, match: str | None = None, + custom_path: str | None = None, timeout: float = 300) -> dict: """Run one batchexecute RPC in the Flow page. Returns the raw body. @@ -500,8 +501,22 @@ async def batch_rpc(self, rpcid: str, freq: str, params["captchaAction"] = captcha_action if match: params["match"] = match + if custom_path: + params["customPath"] = custom_path return await self._send("batch_rpc", params, timeout=timeout) + async def stream_chat(self, prompt: str, project_id: str | None = None, timeout: float = 120) -> dict: + """Submit a prompt via FlowCreationAgentService/StreamChat.""" + pid = self._batch_project_id(project_id) + freq = fb.stream_chat_request(prompt, pid) + return await self.batch_rpc( + "StreamChat", + freq, + captcha_action="CHAT_GENERATION", + custom_path=fb.STREAM_CHAT_PATH, + timeout=timeout, + ) + async def _batch_payload(self, rpcid: str, freq: str, captcha_action: str | None = None, timeout: float = 300): @@ -549,11 +564,9 @@ def _remember_operation(self, operation_id: str, project_id: str): return if len(self._operation_projects) > 512: self._operation_projects.clear() - self._operation_media.clear() - self._operation_polls.clear() self._operation_projects[operation_id] = project_id - # ─── High-level API Methods ────────────────────────────── + # ─── High-Level Batch Methods ──────────────────────────────── def flow_project_id(self, requested: str | None = None) -> str | None: """The Flow project to attach a new Flow Kit project to, if any. @@ -573,14 +586,14 @@ async def create_project(self, project_title: str, tool_name: str = "PINHOLE") - logger.info("Reusing pinned Flow project %s for '%s'", pid[:12], project_title) return {"status": 200, "data": {"projectId": pid}} - async def generate_images(self, prompt: str, project_id: str, - aspect_ratio: str = "IMAGE_ASPECT_RATIO_PORTRAIT", - user_paygate_tier: str = "PAYGATE_TIER_TWO", - character_media_ids: list[str] = None, - image_model: str = None, - count: int = 1, - seed: int | None = None, - base_media_id: str | None = None) -> dict: + async def generate_images(self, prompt: str, project_id: str = None, + character_media_ids: list[str] = None, + aspect_ratio: str = "IMAGE_ASPECT_RATIO_PORTRAIT", + user_paygate_tier: str = "PAYGATE_TIER_TWO", + image_model: str = None, + count: int = 1, + seed: int | None = None, + base_media_id: str | None = None) -> dict: """Generate image(s). ``character_media_ids`` are attached as reference images, which is what @@ -837,9 +850,14 @@ async def _poll_batch_operation(self, operation_id: str) -> dict: media_id, complaint = await self._find_operation_media(operation_id) if not media_id: return _as_pending_operation(operation_id, error=complaint) + logger.info("Matched media_id=%s for op=%s", media_id, operation_id) self._operation_media[operation_id] = media_id - urls = await self._batch_media_urls(media_id) + try: + urls = await self._batch_media_urls(media_id) + except Exception: + self._operation_media.pop(operation_id, None) + raise if not urls.video: # The id landed but the clip is still being written; downloading # now would save the poster still instead of the video. diff --git a/agent/worker/processor.py b/agent/worker/processor.py index daff27e16..474a63a57 100644 --- a/agent/worker/processor.py +++ b/agent/worker/processor.py @@ -459,7 +459,7 @@ async def _handle_failure(rid: str, req: dict, result: dict, retry_after: dict = return # reCAPTCHA errors: retry up to 10 times — deferred dict in main loop handles delay - if "captcha" in error_lower or "recaptcha" in error_lower: + if "captcha" in error_lower or "recaptcha" in error_lower or "unusual_activity" in error_lower: retry = req.get("retry_count", 0) + 1 if retry < 10: await crud.update_request(rid, status="PENDING", retry_count=retry, error_message=str(error_msg)) diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index 3bceb38a9..1354717c0 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -66,6 +66,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -648,6 +649,17 @@ "integrity": "sha512-VYJy0uhFm9zTJ1TxBaW/pA8bjbOM/OttaNMwZ1RHG4JKyRG7DhSdiqD1ipQoAyoD22olUtxbP78W9xY3Wd11bg==", "license": "BSD-3-Clause" }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -3818,6 +3830,7 @@ "integrity": "sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3826,8 +3839,9 @@ "version": "19.2.14", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -3836,8 +3850,9 @@ "version": "19.2.3", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -3893,6 +3908,7 @@ "integrity": "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/types": "8.58.0", @@ -4188,6 +4204,7 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4432,6 +4449,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", @@ -4839,7 +4857,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/debounce-fn": { @@ -5155,6 +5173,7 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -5919,6 +5938,7 @@ "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.0.tgz", "integrity": "sha512-jhunvfHWxd7J5EFfSgH4xsYJzSe/lfqbUCxiyyeaQasUsXeEHXtzVid+7EOGByc5JnFa23SSFL3Y2RV/z1T+eQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=16.9.0" } @@ -7605,6 +7625,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7614,6 +7635,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -8511,8 +8533,9 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8704,6 +8727,7 @@ "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", @@ -8874,6 +8898,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/docs/hong_nhat_novel.txt b/docs/hong_nhat_novel.txt new file mode 100644 index 000000000..2dbab1b64 --- /dev/null +++ b/docs/hong_nhat_novel.txt @@ -0,0 +1,11305 @@ +HỒNG NHẬT THĂNG LONG + +Definitive Edition V13.1 — Final Prose & Copyedit Pass + +ARC 1: 44 NGÀY TRƯỚC HỒNG NHẬT + +Chương 1: Ngày Trở Về + +Ở tầng hầm B3 Mễ Trì, mặt bê tông phơi nắng đã vượt 68°C; ngay trong bóng râm, mỗi hơi thở vẫn làm phổi đau rát. Lê Quốc Tiến nằm giữa những vết nứt khô, máu từ bụng thấm xuống nền. Túi nước rách, xác người và những mảnh nhựa cong vì nhiệt vây quanh hắn; mùi bê tông, máu và da cháy đặc lại trong không khí không lưu thông. + +Qua khe trần vỡ, mặt trời đỏ sẫm treo trên những khối nhà từng sáng đèn, bình thản như thể Hà Nội chưa bao giờ có tên người sống trong đó. + +Ngày 22 tháng 6 năm 2028, thế giới bắt đầu kết thúc. Nhân loại gọi ngày đó là **Hồng Nhật**. + +Ban đầu, nó chỉ là một hiện tượng thiên văn kỳ lạ. Mặt trời đổi màu, nhiệt độ tăng vọt, mạng xã hội ngập trong video quay bầu trời đỏ rực. Người ta tranh luận, chế ảnh, livestream, chờ chuyên gia lên tiếng. Vài ngày sau, mọi lời giải thích bắt đầu mất tác dụng. Điều hòa chạy hết công suất nhưng phòng vẫn nóng như lò hấp. Đường nhựa mềm ra dưới bánh xe. Hồ nước bốc mùi tanh. Cây cối chết khô từng mảng. Những khu dân cư đông đúc biến thành những khối bê tông giữ nhiệt khổng lồ. + +Tiến đã sống trong cái lò nung ấy suốt ba năm. + +Hắn từng đào bới trong đống đổ nát ở La Phù để tìm lương khô. Từng vượt qua khu Láng khi sông Tô Lịch chỉ còn một dòng bùn đen đặc quánh. Từng đứng bên bờ Hồ Tây đã cạn một nửa, nhìn thấy dưới đáy hồ những khối kim loại khổng lồ không thuộc về bất kỳ công trình nào của con người. Hắn cũng từng tin rằng chỉ cần mình đủ tỉnh táo, đủ tàn nhẫn, đủ hiểu cách vận hành điện, nước, máy phát, kho lạnh và hệ thống an ninh, hắn sẽ sống lâu hơn phần lớn những người khác. + +Hắn đã đúng. Nhưng sống lâu hơn không có nghĩa là sống sót đến cuối cùng. Tiếng bước chân vang lên từ cuối hành lang tầng hầm. Một người đàn ông đi qua những xác chết, đôi giày dính đầy bụi đỏ và máu khô. Khi hắn dừng lại trước mặt Tiến, bóng hắn che khuất phần ánh sáng đỏ rọi xuống từ khe trần. Tiến nhận ra khuôn mặt đó. + +Trong phương án Tiến đã sống, Kha xuất hiện ở La Phù từ những ngày đầu hỗn loạn. Tiến không chứng kiến mệnh lệnh đầu tiên tại kho phía đông; hắn chỉ thấy cánh cổng bị khóa, những thi thể nằm ngoài sân và các đoàn xe của Kha chở phần lương thực còn khô rời đi. Về sau, những sổ ghi chắp vá quy cho quyết định ấy hơn một trăm mạng người, còn lời đồn ngoài sổ nói con số lớn hơn nhiều. Kha cũng là kẻ truy sát Tiến gần một năm. + +Ký ức của một người bị săn không phải hồ sơ trung lập. Nhưng có một điều Tiến không thể đổ cho lời đồn: hắn đã nhìn thấy Kha đi qua người chết mà không ngoái lại. Người đàn ông cúi xuống, ánh mắt bình thản đến mức lòng thương hại trong đó còn đáng sợ hơn căm ghét. + +“Lê Quốc Tiến,” gã nói, giọng khàn đặc vì mất nước. “Mày vốn không nên sống lâu đến thế.” + +Tiến muốn cười, nhưng máu trào lên cổ họng, chỉ bật ra một tiếng khục khặc yếu ớt. Cái chết không phải điều khiến hắn day dứt nhất. Đến tận giây phút này, hắn vẫn không biết mẹ ở quê còn sống hay đã chết. + +Sau Hồng Nhật chưa đầy hai tuần, thông tin liên lạc giữa Hà Nội và các tỉnh gần như tê liệt. Từ ngày đó, Tiến không còn gọi được về Thanh Hóa. Hắn không biết mẹ có kịp tích nước không, thuốc huyết áp còn đủ không, căn nhà mái ngói ở quê có chống nổi những đợt nóng kéo dài như thiêu đốt hay không. + +Có những nỗi đau không cần nhìn thấy xác mới trở thành ám ảnh. Người đàn ông rút dao. Lưỡi dao phản chiếu ánh sáng đỏ thẫm từ bầu trời, rồi đâm xuống. Phập. Bóng tối nuốt chửng tất cả. Tiến mở mắt trong tiếng máy lạnh chạy đều đều. + +Hắn nằm bất động vài giây, toàn thân căng cứng như một con thú vừa thoát khỏi bẫy. Không có mùi máu. Không có mùi xác chết. Không có cái nóng làm phổi đau rát. Thứ chạm vào da hắn lúc này là luồng khí lạnh quen thuộc từ chiếc điều hòa cũ treo trên tường. + +Tiến bật dậy khỏi giường. + +Căn phòng trước mắt khiến hắn sững người. Chiếc tủ gỗ đặt sát tường, bàn làm việc gắn ba màn hình lớn, chồng hóa đơn tiền điện chưa thanh toán, cốc cà phê hòa tan uống dở từ tối qua, tất cả vẫn vẹn nguyên như cũ. Ngoài cửa sổ, tiếng xe máy, tiếng còi ô tô và tiếng rao bánh mì dưới ngõ vọng lên từng đợt, tạo thành thứ âm thanh hỗn độn mà hắn từng tưởng mình sẽ không bao giờ được nghe lại. + +Hắn với lấy điện thoại trên bàn. + +**09/05/2028.** + +**07 giờ 13 phút.** + +Đèn báo trên bộ lưu điện dưới bàn chớp đỏ đúng một lần. Điều hòa khựng chưa đầy một giây rồi chạy tiếp. Trong tai Tiến có một tiếng ù trầm, giống rung động truyền qua bê tông hơn là âm thanh. + +Hắn nhìn hàng số trên màn hình, hơi thở nghẹn lại trong lồng ngực. Ký ức cuối cùng của hắn là ngày 29 tháng 9 năm 2031, khi hắn trút hơi thở cuối cùng trong tầng hầm tối tăm tại Mễ Trì. Vậy mà bây giờ, hắn đang đứng trong căn hộ thuê ở quận Thanh Xuân, vào buổi sáng ngày 09 tháng 5 năm 2028. + +Tiến chưa biết điều gì đã xảy ra. Hắn chỉ biết mình đang mang ký ức của ba năm chưa xảy ra, trong cơ thể của buổi sáng cách Hồng Nhật đúng bốn mươi bốn ngày. + +Tiến bước tới cửa sổ, kéo rèm ra. Ánh nắng đầu hè tràn vào phòng, sáng đến mức khiến hắn phải nheo mắt. Bên dưới, đường Nguyễn Trãi đã bắt đầu đông nghịt xe máy; những chiếc áo chống nắng đủ màu lướt qua nhau trong tiếng còi xe gấp gáp. Xa hơn, đoàn tàu điện Cát Linh - Hà Đông chậm rãi trườn qua các dãy nhà cao tầng, bình thản như thể thế giới này sẽ còn tiếp tục thêm một trăm năm nữa. + +Hà Nội vẫn còn sống. Nhưng Tiến biết, sự bình yên ấy chỉ còn kéo dài đúng bốn mươi bốn ngày. Điện thoại trong tay hắn bất ngờ rung lên. Màn hình hiện một chữ: **Mẹ**. Tiến đứng chết lặng. + +Trong ba năm tận thế, hắn từng nghĩ mình đã quên gần hết những chuyện trước kia: mùi cơm nóng, tiếng mưa rơi trên mái tôn, cảm giác ngồi trong phòng có điều hòa, cả việc một người có thể gọi điện cho mẹ chỉ để nghe vài câu trách móc vụn vặt. Nhưng khi nhìn thấy chữ “Mẹ”, toàn bộ lớp vỏ lạnh lùng hắn tích cóp suốt ba năm bỗng nứt ra. + +Hắn hít sâu, bấm nghe. + +“Tiến à?” Giọng mẹ vang lên, vừa quen vừa xa như vọng về từ một đời khác. “Con dậy chưa? Mẹ gọi có làm phiền không?” + +Cổ họng Tiến nghẹn cứng. Hắn phải mất vài giây mới nói được. + +“Con dậy rồi.” + +“Giọng con sao thế? Ốm à?” + +“Không sao đâu mẹ. Chắc tối qua con thức hơi khuya.” + +“Lại làm việc đêm chứ gì. Mẹ bảo bao nhiêu lần rồi, tiền kiếm cả đời cũng không hết, sức khỏe mất là mất luôn đấy.” + +Tiến nhắm mắt lại. Câu nói ấy trước kia hắn nghe rất nhiều lần, nhiều đến mức có lúc còn thấy phiền. Nhưng sau ba năm tận thế, được nghe lại giọng trách móc quen thuộc ấy lại giống như một thứ xa xỉ không thể mua bằng bất cứ lượng nước sạch hay lương khô nào. + +“Mẹ dạo này huyết áp thế nào?” hắn hỏi. + +“Vẫn thế. Thuốc còn hơn nửa hộp. Sao tự nhiên hỏi kỹ vậy?” + +“Trời bắt đầu nóng rồi. Mẹ đừng ra đồng lúc trưa. Nước uống phải để sẵn trong nhà. Thuốc huyết áp, thuốc hạ sốt, thuốc đau bụng, mấy thứ cơ bản mẹ mua thêm giúp con. Đừng tiếc tiền.” + +Bên kia bật cười. + +“Anh này hôm nay lạ thật. Ở Hà Nội áp lực công việc quá à?” + +Tiến nhìn ra ngoài cửa sổ. Nắng đầu hè phủ vàng mặt đường, còn trong ký ức của hắn, cũng thứ ánh nắng ấy vài tháng nữa sẽ đốt cháy mọi thứ. + +“Con chỉ muốn mẹ giữ sức khỏe.” + +Giọng mẹ dịu xuống. + +“Mẹ biết rồi. Con ở trên đó cũng phải ăn uống cho tử tế. Có việc gì thì cứ gọi về.” + +“Vâng.” + +Sau khi cúp máy, Tiến vẫn giữ điện thoại trong tay cho đến khi màn hình tự tối. Cuộc gọi chỉ kéo dài vài phút, nhưng giống một sợi dây kéo hắn từ tầng hầm Mễ Trì trở lại thế giới người sống. Mẹ sẽ không tham gia vào cuộc chiến này; hắn cũng không muốn bà bị kéo vào. Điều hắn cần làm là chuẩn bị đủ nhanh, đủ kín và đủ chắc để khi mọi thứ sụp đổ, bà vẫn còn một đường sống ở quê. + +Tiến bật máy tính. Ba màn hình cùng sáng lên: bảng giám sát máy chủ, terminal kết nối vào hệ thống công ty, biểu đồ tải mạng, log cảnh báo từ một cụm server đặt tại Cầu Giấy. Trước Hồng Nhật, Lê Quốc Tiến chỉ là một kỹ sư hạ tầng hệ thống, kiểu người chuyên xử lý những thứ người khác chỉ nhớ đến khi chúng hỏng: điện dự phòng, máy chủ, camera, mạng nội bộ, hệ thống làm mát, lưu trữ dữ liệu và quyền truy cập. + +Sau Hồng Nhật, những thứ ấy quyết định ai được sống. + +Một thành phố sụp đổ không chết ngay. Nó để lại vô số mạch máu ngầm: đường điện cũ, kho lạnh bỏ hoang, bể nước ngầm, trạm bơm, camera, cửa cuốn, máy phát, cáp mạng, bản đồ hạ tầng. Người bình thường chỉ nhìn thấy đống đổ nát; Tiến nhìn thấy những hệ thống có thể được khởi động lại, chiếm quyền, tận dụng hoặc biến thành lá chắn. + +Hắn mở một file mới, đặt tên **KE_HOACH_HONG_NHAT.xlsx**. Dòng đầu tiên không phải “mua lương thực” hay “tích trữ nước”, mà là: + +**1. Gửi vật tư thiết yếu về quê trước ngày 22/06.** + +Sau đó, các dòng tiếp theo lần lượt xuất hiện. + +**2. Tìm căn cứ có kho kín, sân rộng, nguồn nước phụ và khả năng lắp điện độc lập.** + +**3. Tích trữ nước sạch tối thiểu cho mười hai tháng.** + +**4. Chuẩn bị điện mặt trời, ắc quy lưu trữ, máy phát dầu và nhiên liệu.** + +**5. Thu gom thuốc men, thiết bị y tế, vật tư làm mát.** + +**6. Điều tra Ngọc Trục, La Phù, khu Láng, trung tâm thương mại Đại Hà ở Hà Đông và Hồ Tây.** + +Ngón tay Tiến dừng lại ở hai chữ **Ngọc Trục**. + +Kiếp trước, trong giai đoạn đầu hỗn loạn, một kho hàng ở khu vực Ngọc Trục từng trở thành căn cứ tạm của một nhóm người sống sót. Vị trí ấy không quá xa trung tâm, lại có nhiều nhà xưởng nhỏ, đường gom và lối kết nối ra Đại lộ Thăng Long. Quan trọng hơn, theo lời đồn sau này, dưới khu kho đó có một tầng kỹ thuật cũ bị bỏ quên từ thời cải tạo công trình. + +Nếu chiếm được nơi ấy trước ngày 16 tháng 5, hắn sẽ có điểm khởi đầu tốt hơn bất kỳ ai. Tiến đang định mở bản đồ thì màn hình bên trái bỗng nhấp nháy. Một cửa sổ màu đen tự động bật lên. Không tiêu đề. Không biểu tượng. Không thuộc bất kỳ phần mềm nào hắn cài đặt. Trên nền đen, một dòng chữ đỏ sẫm hiện ra. + +**OBSERVER NODE HANOI-07 ACTIVE** + +Dòng thứ hai xuất hiện sau đó hai giây. + +**HOST DETECTED: LE QUOC TIEN** + +Tiến không nhúc nhích. + +Hắn từng nghe lời đồn về Trạm Quan Sát số 07 ở khu Láng trong kiếp trước, nhưng chưa từng thấy cái tên HANOI-07. Không ai từng nói nó là một hệ thống đang hoạt động. Không tài liệu nào trong các khu trú ẩn ghi lại việc nó có thể gọi tên một người vừa sống lại. + +Dòng cuối cùng hiện lên giữa màn hình. + +**DO YOU WANT TO SURVIVE?** + +Ngón tay Tiến dừng trên bàn phím. Sống sót? + +Ba năm trước, hắn từng muốn sống sót. Muốn có một góc trú ẩn, một ngụm nước sạch, một đêm không phải ôm dao ngủ. Nhưng sống sót thôi là chưa đủ. Sống sót không bảo đảm mẹ hắn còn đường sống ở quê. Sống sót không ngăn được La Phù biến thành bãi máu. Sống sót không cứu được những người bị nhốt trong Lò Hấp Hà Đông. Sống sót không trả lời được câu hỏi vì sao dưới đáy Hồ Tây lại tồn tại những thứ đáng lẽ không thuộc về thế giới này. + +Tiến đặt tay lên bàn phím. Hắn gõ từng chữ một. + +**I WANT TO WIN.** + +Enter. Màn hình vụt tắt. Tiến cúi xuống kiểm bộ lưu điện. Nhật ký chỉ có một dòng lạ, đóng dấu đúng **07:13:00**: + +**PHASE DROP — 0.8s / SOURCE UNRESOLVED** + +Khi hắn chạm vào dòng đó, nó biến mất khỏi danh sách đang hiển thị nhưng vẫn để lại một khoảng trống trong số thứ tự bản ghi. Tiến chụp màn hình, lưu vào ổ rời rồi mới ngẩng lên. Ngoài cửa sổ, Hà Nội vẫn ngập trong nắng đầu hè. Đoàn tàu điện Cát Linh - Hà Đông đi qua Nguyễn Trãi, tiếng rao bánh mì vọng lên dưới ngõ. Trên màn hình đã tối, bốn chữ hắn vừa gõ còn in mờ trong lớp lưu ảnh: + +**I WANT TO WIN.** + +Chương 2: Bản Đồ Sinh Tồn + +Ngày 10 tháng 5 năm 2028, Hà Nội nóng hơn dự báo ba độ. + +Bản tin thời tiết buổi sáng vẫn đọc bằng giọng bình thản: nắng nóng diện rộng, cao nhất 37–39°C, có nơi trên 40°C. Trong quán phở dưới chung cư, lời cảnh báo trôi giữa tiếng bát đũa và tiếng gọi thêm quẩy. Bà chủ lau mồ hôi trên cổ, nhìn tivi rồi chép miệng: “Năm nào chả nóng.” + +Tiến ngồi sát tường, ăn chậm và nhìn dòng người ngoài đường. Cảnh bình thường ấy giống một bức ảnh cũ mà hắn đã biết sẽ cháy. Một thành phố còn có thể than nóng là một thành phố còn sống. + +Ăn xong, Tiến lên phòng, tắt hết các kết nối không cần thiết rồi mở bản đồ Hà Nội trên màn hình lớn nhất. Hắn không chờ HANOI-07 xuất hiện lần nữa. Những thứ không kiểm soát được phải tạm đặt sang một bên. Thứ hắn kiểm soát được là bản đồ, tiền, kho, vật tư, thời gian và những quyết định không được phép chậm. + +Hắn tạo một lớp đánh dấu mới, đặt tên: **HANOI_SURVIVAL_MAP**. Điểm đầu tiên hắn khoanh là Hồ Tây. + +Trên bản đồ, Hồ Tây giống một khoảng xanh yên bình nằm giữa thành phố. Người bình thường nhìn thấy mặt nước, gió mát, quán cà phê ven hồ và những con đường đẹp để chạy bộ. Tiến nhìn thấy một cái nắp khổng lồ đang che thứ gì đó dưới đáy. Kiếp trước, nước hồ từng rút xuống với tốc độ bất thường, để lộ những khối kim loại tối màu nằm sâu dưới bùn. Chỉ bấy nhiêu ký ức đã đủ để hắn không muốn tiếp cận nơi ấy quá sớm. + +Hắn đánh dấu Hồ Tây bằng màu đỏ sẫm. Ghi chú ngắn: **Không tiếp cận sớm. Theo dõi từ xa.** Điểm thứ hai là khu Láng. + +Khu Láng hiện tại là một vùng dân cư đông đúc, nhiều ngõ nhỏ, nhiều nhà cũ xen nhà cao tầng. Người ngoài nhìn vào chỉ thấy một mảnh đô thị hỗn tạp bên cạnh dòng Tô Lịch đen ngòm. Nhưng sau tận thế, khi nước sông cạn gần hết, vài nhóm sống sót từng phát hiện những kết cấu bê tông lạ dưới lòng đất. Những người đi xuống đó về sau đều biến mất, chỉ để lại lời đồn về một cái tên: **Trạm Quan Sát số 07**. + +Tiến đánh dấu Láng bằng màu cam. Ghi chú: **Liên quan Trạm Quan Sát số 07. Không vào một mình.** Điểm thứ ba là La Phù. + +Nếu Hồ Tây là bí mật, Láng là nguy hiểm, thì La Phù là lương thực. Trước tận thế, nơi đó là thủ phủ hàng hóa phía Tây: bánh kẹo, đồ khô, nước đóng chai, kho bãi và xe tải. Sau Hồng Nhật, mọi kho hàng đều trở thành chiến trường. Người đến mua sẽ chuyển thành người đến cướp. Người giữ hàng sẽ chuyển thành người giữ mạng. + +Tiến đánh dấu La Phù bằng màu đỏ. Ghi chú: **Nguồn hàng lớn. Nguy cơ cao. Theo dõi xe tải ban đêm.** Điểm thứ tư là Ngọc Trục. + +Con trỏ chuột dừng lại ở đó lâu hơn những điểm khác. Ngọc Trục không nổi bật như Hồ Tây, không đông đúc như Láng, cũng không có lượng hàng hóa khổng lồ như La Phù. Nhưng chính vì thế, nó mới đáng giá. Khu vực này có nhiều kho nhỏ, nhà xưởng cũ, đường nội bộ đủ rộng cho xe tải, lại không nằm giữa tâm điểm chú ý trong những ngày đầu hỗn loạn. Nếu chọn đúng vị trí, một căn kho tại đây có thể được gia cố thành căn cứ kín, có sân chứa hàng, có chỗ lắp điện mặt trời, có đường rút ra Đại lộ Thăng Long. + +Hắn đánh dấu Ngọc Trục bằng màu xanh đậm. Ghi chú: **Mục tiêu ưu tiên. Phải kiểm soát trước 16/05.** Điểm cuối cùng là trung tâm thương mại Đại Hà ở Hà Đông. + +Không cần đọc lại ghi chú, Tiến vẫn nhớ nơi này sẽ trở thành gì. Trước Hồng Nhật, đó là một trung tâm thương mại lớn, sáng sạch, mát lạnh, đầy hàng hóa, tiếng trẻ con và mùi đồ ăn nhanh. Sau Hồng Nhật, khi nhiệt độ ngoài trời vượt 50°C, hàng nghìn người sẽ đổ về đó vì tin rằng trung tâm thương mại có điện, có nước, có điều hòa và có hàng hóa. Chính niềm tin ấy sẽ biến nơi đó thành một cái bẫy. + +Người sống sót về sau gọi nó là **Lò Hấp Hà Đông**. Tiến đánh dấu Đại Hà bằng màu đen. Ghi chú: **Khảo sát kho hàng, lối kỹ thuật, bãi xe, hệ thống điện dự phòng.** Đến gần trưa, bản đồ sinh tồn đầu tiên đã hình thành. Trên màn hình, Hà Nội không còn là một thành phố bình thường nữa. Nó là một mạng lưới các điểm nóng, các nguồn tài nguyên, các vùng chết và những bí mật chưa được mở ra. + +Tiến lưu bản đồ vào ổ cứng ngoài, mã hóa thêm một bản trên USB, rồi mở bảng tài sản. Tiền tiết kiệm, chứng khoán, hạn mức thẻ tín dụng, vài món đồ công nghệ có thể bán nhanh — tất cả được gom vào một file riêng. Trước tận thế, tiền là con số trong tài khoản. Sau tận thế, tiền chỉ còn giá trị trong khoảng thời gian rất ngắn trước khi mọi người nhận ra giấy bạc không đổi được nước. + +Hắn thử đặt một đơn nước đóng chai số lượng lớn qua một đầu mối cũ. Chưa đến mười phút sau, bên bán gọi lại, giọng ngập ngừng. + +“Anh lấy nhiều vậy để làm gì ạ?” + +“Công ty chuẩn bị sự kiện.” + +“Dạ, nhưng kho bên em không xuất một lần được nhiều thế. Nếu chia làm mấy đợt thì được.” + +“Chia đi. Người nhận khác nhau.” + +Đầu dây bên kia khựng lại. “Anh cho em xin thông tin công ty với mã số thuế được không ạ?” Hắn rà màn hình rồi xóa bớt một nửa số lượng trong đơn. + +“Thôi, trước mắt lấy ít đã.” + +Trở ngại nhỏ ấy nhắc Tiến rằng chuẩn bị ồ ạt cũng là một cách tự đánh dấu mình. Người bán có thể nhớ một giao dịch bất thường; nền tảng có thể gắn cờ một tài khoản mua quá nhiều. Kiếp trước hắn từng thấy một căn nhà bị vét sạch chỉ vì chủ nhà để người giao nước nhìn thấy kho phía trong. Lần này, hắn cần hàng — nhưng càng ít người nhớ mình càng tốt. Buổi chiều, Tiến rời căn hộ. + +Tiến tự lái chiếc xe cũ qua Nguyễn Trãi, nhập vào dòng phương tiện ùn từng đoạn. Nắng tháng năm phản trên kính xe và biển quảng cáo còn sáng. Người ta cau có vì nóng, tắc đường và đèn đỏ quá lâu — những phiền toái hơn một tháng nữa sẽ thành xa xỉ. + +Khi xe rẽ vào khu vực trung tâm thương mại Đại Hà ở Hà Đông, cảm giác quen thuộc của đời sống bình thường đập thẳng vào mắt hắn. Các gia đình dắt trẻ con qua đường. Những cặp đôi trẻ đứng chụp ảnh bên ngoài. Người giao hàng xếp hàng nhận đơn. Cửa kính tự động mở ra, thổi một luồng khí lạnh dễ chịu lên mặt những người vừa bước vào từ ngoài nắng. + +Trước cửa, Tiến dừng chân. Vẫn là nơi ấy; chỉ hơn một tháng nữa, người ta sẽ chen nhau vào đây để tránh chết vì nóng. + +Hắn lấy một chiếc xe đẩy, đi vào siêu thị ở tầng dưới. Bề ngoài, Tiến giống bất kỳ khách hàng nào đang mua đồ sinh hoạt: vài thùng nước, ít đồ hộp, pin, băng dính, túi rác loại dày, thuốc sát trùng, một ít thực phẩm khô. Nhưng mắt hắn không nhìn hàng hóa lâu. Hắn nhìn camera trên trần, nhìn cửa kho phía sau quầy, nhìn vị trí bình chữa cháy, nhìn lối nhân viên ra vào, nhìn bảng chỉ dẫn thoát hiểm. + +Kho lạnh nằm sâu hơn hắn nhớ. + +Lối giao hàng có vẻ đi từ phía sau khu siêu thị, nối ra khu vực bãi xe và đường nội bộ. Nếu ngày tận thế xảy ra, đây sẽ là nơi bị tranh cướp đầu tiên, vì hàng hóa sẽ không nằm trên kệ lâu. Người thông minh sẽ không lao vào quầy bán hàng. Người thông minh sẽ tìm kho. + +Khi đi qua khu vực đồ uống, Tiến dừng lại trước dãy nước đóng chai. Các thùng nước xếp cao, đầy đến mức trông như không bao giờ cạn. Một người phụ nữ trẻ đang đứng gần đó, cúi đầu xem nhãn sản phẩm trên chai nước khoáng. Áo sơ mi màu nhạt, tóc buộc gọn sau gáy, trên vai đeo một chiếc túi vải đã sờn mép. Bên cạnh cô là một chiếc máy ảnh và một tập tài liệu kẹp dưới khuỷu tay. + +Tiến lướt qua, rồi khựng lại vì một khuôn mặt tưởng đã nằm yên trong ký ức. Người phụ nữ kia ngẩng đầu đúng lúc ấy. Ánh mắt hai người gặp nhau giữa lối đi sáng trắng của siêu thị. Vẻ nghi hoặc trên mặt cô chậm rãi chuyển thành ngạc nhiên. + +“Lê Quốc Tiến?” + +Tiến không đáp ngay. + +Cái tên ấy được gọi bằng một giọng rất khác với những giọng nói trong ký ức tận thế. Không khàn đặc vì mất nước, không méo mó vì sợ hãi, không lạnh lùng vì muốn giết người. Nó trong trẻo, tỉnh táo, mang theo hơi thở của một đời sống đã bị hắn tưởng là chôn vùi từ lâu. + +“Trần Thanh Thủy,” hắn nói. + +Cô bật cười nhẹ, nhưng trong mắt vẫn còn vẻ bất ngờ. + +“Đúng là anh thật à? Em còn tưởng nhìn nhầm.” + +Đã năm năm rồi. + +Lần cuối Tiến gặp Thủy là lễ tốt nghiệp năm 2023. Họ từng tham gia một dự án sinh viên liên ngành mô phỏng sơ tán khi hầm kỹ thuật bị ngập và mất điện. Tiến phụ trách phần hạ tầng; Thủy phụ trách truyền thông rủi ro. Người tham gia phải đeo một vòng cảm biến đo nhịp tim, điện da và phản ứng khi còi cảnh báo đổi tần số. + +Thủy từng cãi với đơn vị tài trợ suốt ba tiếng vì biểu mẫu cho phép “tái sử dụng dữ liệu nghiên cứu cho mục đích an toàn hạ tầng” mà không ghi giới hạn thời gian hay bên nhận. Tiến khi đó chỉ quan tâm bộ cảm biến cứ mất tín hiệu ở đoạn hầm thứ ba. Hai người còn tranh nhau một câu trong kịch bản: “rủi ro thấp” hay “rủi ro chưa được chứng minh”. Sau lễ tốt nghiệp, ai cũng bị đời sống cuốn đi. + +“Anh vẫn ở Hà Nội à?” Thủy hỏi. + +“Ừ. Làm hệ thống ở Cầu Giấy.” + +“Em nhớ hồi trước anh cũng toàn ngồi sửa máy với dựng server cho nhóm.” Cô nhìn chiếc xe đẩy của hắn, hơi nhướng mày. “Mua nhiều nước thế?” + +Tiến liếc xuống những thùng nước trong xe. + +“Trời nóng. Mua để sẵn.” + +Thủy nhìn hắn lâu hơn cần thiết, như thể câu trả lời quá ngắn khiến cô chú ý hơn. Nhưng cô không hỏi tiếp, chỉ gật đầu. + +“Cũng đúng. Dạo này nóng bất thường thật.” + +Câu nói ấy khiến ánh mắt hắn dừng ở cô lâu hơn. + +“Em đang làm về thời tiết à?” + +“Không hẳn.” Thủy vỗ nhẹ lên tập tài liệu dưới tay. “Em làm phóng sự về môi trường đô thị. Nhiệt độ bề mặt, đảo nhiệt, cây xanh, bê tông hóa, mấy thứ nghe rất khô khan nhưng đủ khiến biên tập viên đau đầu.” + +“Điều tra ở siêu thị?” + +“Tránh nóng và làm việc ké điều hòa.” Cô cười, rồi chỉ về phía quán cà phê bên ngoài khu siêu thị. “Em ngồi ngoài kia. Đang chờ người gửi thêm dữ liệu.” + +Hắn dõi theo hướng cô chỉ. + +Quán cà phê nằm cạnh khoảng thông tầng. Trên bàn sát kính, chiếc laptop mở cạnh cốc cà phê đã tan gần hết; vài biểu đồ màu phủ lên một bản đồ nền quen thuộc. + +Bản đồ Hà Nội. Tiến im lặng một giây. + +“Anh còn ít việc,” hắn nói. “Ngồi được mười phút.” + +Hai người ra khỏi siêu thị, đi tới quán cà phê. Thủy chọn lại chiếc bàn cũ, đặt tài liệu xuống rồi ngồi đối diện hắn. Tiến gọi một cốc nước lọc thay vì cà phê. Trong khi nhân viên quay đi, mắt hắn lướt qua màn hình laptop của Thủy. Chỉ một cái nhìn. Nhưng đủ khiến đồng tử hắn co lại. Trên màn hình là một bản đồ nhiệt của Hà Nội. Một số khu vực có mức nhiệt bề mặt cao hơn bình thường, điều đó không lạ. Lạ là ba điểm có giá trị dị thường nhất lại trùng với những nơi Tiến vừa khoanh trên bản đồ sinh tồn của mình. + +**Ngọc Trục.** + +**Khu Láng.** + +**Hồ Tây.** + +Ba cái tên ấy nằm trên cùng một lớp dữ liệu, được nối với nhau bằng một đường mảnh gần như trong suốt. Tiến cầm cốc nước lên, uống một ngụm để che đi vẻ mặt. + +“Dữ liệu này của bên nào?” hắn hỏi bằng giọng bình thường nhất có thể. + +Thủy quay laptop lại một chút, nhưng không đủ để hắn nhìn toàn bộ. Trên màn hình chỉ là ảnh xuất đã cắt metadata; cửa sổ chứa dữ liệu gốc không mở. Tiến nhận ra ngay thói quen đó. Người làm điều tra đủ lâu sẽ không đặt nguồn sống còn cạnh một cốc cà phê chỉ vì gặp người quen cũ. + +“Một nguồn riêng. Chưa kiểm chứng hoàn toàn.” + +“Bản gốc ở đâu?” + +“Không ở máy này.” Thủy đáp. “Và anh đừng hỏi lần hai nếu chưa cho tôi lý do.” + +“Nhiệt bề mặt à?” + +“Ừ. Nhưng đảo nhiệt thường bám khu nhiều bê tông, ít cây xanh. Mấy điểm này…” Cô gõ nhẹ lên mép laptop. “Không khớp.” + +Tiến không hỏi tiếp. Hắn đã có câu trả lời mình cần. Thủy đang đứng trước một cánh cửa. Cô chưa biết phía sau là gì, nhưng đã tìm đúng tay nắm. Khi Tiến đứng dậy rời đi, Thủy gọi lại. + +“Tiến.” + +Hắn quay đầu. + +“Nếu anh biết gì về mấy điểm nhiệt bất thường này, em thật sự muốn nghe.” + +Trong đầu hắn hiện lên hình ảnh trung tâm thương mại Đại Hà ở Hà Đông sau này: cửa kính phủ hơi nước đục ngầu, người chen nhau trong bóng tối, tiếng đập cửa, tiếng khóc, tiếng cầu cứu bị bóp méo bởi sức nóng. Rồi hình ảnh ấy chồng lên người phụ nữ trước mặt, người đang ngồi trong ánh đèn êm dịu của quán cà phê, hoàn toàn chưa biết mình sắp bị kéo vào một tương lai không có lối ra. + +“Đừng ở lại đây quá lâu khi mất điện,” Tiến nói. + +Thủy cau mày. + +“Gì cơ?” + +“Không có gì.” + +Hắn quay người rời đi. Về đến căn hộ, Tiến bổ sung thông tin về Đại Hà vào bản đồ: vị trí kho, lối giao hàng, khu vực máy phát, bãi xe, số lượng cửa thoát hiểm nhìn thấy được. Sau đó hắn mở lại ba điểm Thủy đang theo dõi: Ngọc Trục, Láng, Hồ Tây. Ba điểm tạo thành một tam giác lệch về phía Tây thành phố. Nếu nối thêm La Phù và trung tâm thương mại Đại Hà ở Hà Đông, hình dạng trên bản đồ bắt đầu giống một cấu trúc lớn hơn, nhưng Tiến chưa xác định được nó là gì. Đúng lúc đó, màn hình phụ bên trái nhấp nháy. + +Một cửa sổ màu đen hiện lên. Không tiêu đề. Không biểu tượng. Dòng chữ đỏ xuất hiện ngắn gọn. + +**OBSERVER LOG #01** + +Bên dưới là một ảnh vệ tinh Hà Nội. Một vòng tròn đỏ đang bao quanh trung tâm thương mại Đại Hà ở Hà Đông. Dòng chữ tiếp theo hiện lên. + +**SUBJECT DETECTED: TRAN THANH THUY** + +Tiến chưa từng nhập tên Thủy vào máy tính. Chưa từng tìm kiếm cô. Chưa lưu số điện thoại. Chưa gửi email. Tấm danh thiếp của cô vẫn còn nằm trong ví hắn. Nhưng HANOI-07 đã biết. Bên dưới cái tên Trần Thanh Thủy, một dòng chữ mới chậm rãi hiện ra. + +**THERMAL ANOMALY MATCH FOUND** + +**NGOC TRUC – LANG – HO TAY** + +Dòng cuối cùng xuất hiện. + +**DO NOT LET HER ACCESS NODE 07 BEFORE 16/05/2028** + +Ánh mắt hắn dừng ở ngày tháng ấy. Ngày 16 tháng 5. Ngày Ngọc Trục. Trong ký ức ba năm của Tiến, buổi chiều này không có Thủy, không có chiếc laptop mở đúng ba địa danh và không có trạng thái **LISTENER CANDIDATE**. Sai lệch đầu tiên không phát ra tiếng. Nó chỉ ngồi lại trong hệ thống bằng tên của một người hắn từng biết. + +Chương 3: Người Điều Tra + +Trần Thanh Thủy không thích những sự trùng hợp. + +Trong nghề báo, đặc biệt là mảng điều tra môi trường, hai chữ “trùng hợp” thường chỉ là lớp vỏ bọc đẹp đẽ cho những thứ chưa được đào đủ sâu. Một con sông chuyển màu sau khi nhà máy mới đi vào hoạt động là trùng hợp. Một khu dân cư mắc bệnh hô hấp tăng đột biến sau khi bãi rác mở rộng là trùng hợp. Một báo cáo quan trắc bị mất đúng vào tháng có chỉ số ô nhiễm cao nhất cũng được gọi là trùng hợp, cho đến khi ai đó đủ kiên nhẫn tìm ra bản gốc. + +Vì thế, khi Thủy nhìn thấy Lê Quốc Tiến ở trung tâm thương mại Đại Hà ở Hà Đông, đứng trước kệ nước đóng chai với ánh mắt của một người đang tính toán đường thoát hiểm thay vì chọn hàng, cô biết đó không phải một cuộc gặp tình cờ đơn giản. Năm năm không gặp. + +Một người bạn cũ từ thời sinh viên bỗng xuất hiện tại đúng nơi cô đang điều tra. Anh ta mua nước, pin, băng dính, túi rác dày, thuốc sát trùng và thực phẩm khô. Những món đồ ấy nếu mua riêng lẻ thì rất bình thường, nhưng khi đặt cạnh nhau, chúng giống danh sách chuẩn bị cho một tình huống khẩn cấp hơn là đồ sinh hoạt cuối tuần. + +Điều kỳ lạ hơn là cách ánh mắt Tiến lướt qua màn hình laptop của cô. Chỉ một cái liếc mắt rất nhanh, nhưng Thủy đã kịp nhận ra. Anh đã nhìn thấy ba cái tên: **Ngọc Trục, Láng, Hồ Tây**. Và anh hiểu chúng quan trọng. + +Tối hôm đó, sau khi trở về căn hộ thuê gần đường Láng, Thủy không bật đèn ngay. Cô đặt túi vải xuống ghế, tháo máy ảnh khỏi vai rồi đứng lặng bên cửa sổ vài giây. Bên dưới, dòng xe vẫn dày đặc, ánh đèn pha kéo thành những vệt trắng đỏ trên mặt đường. Xa hơn, sông Tô Lịch nằm im dưới những tán cây thưa, đen và đặc như một vết mực cũ không thể tẩy khỏi thành phố. + +Cô bật đèn bàn, mở laptop rồi cắm ổ cứng ngoài. Màn hình hiện lên thư mục **DU_AN_NHIET_DO_HA_NOI_2028**. Bên trong là ảnh vệ tinh, dữ liệu bề mặt, bảng đo từ trạm khí tượng, bản ghi nhiệt độ theo giờ, tài liệu quy hoạch cây xanh, bản đồ bê tông hóa và những email trao đổi với vài nguồn tin không muốn nêu tên. + +Nếu chỉ nhìn bề ngoài, đây là một đề tài báo chí rất bình thường: “Đảo nhiệt đô thị và những nguy cơ sức khỏe tại Hà Nội trong mùa hè”. Một đề tài đủ nghiêm túc để được duyệt, nhưng không đủ nguy hiểm để khiến biên tập viên lo lắng. Ban đầu, Thủy cũng nghĩ vậy. Cho đến khi dữ liệu bắt đầu biến mất. + +Ở tòa soạn, đề tài này từng bị coi là khô. Buổi chiều trước khi cô đến Đại Hà, biên tập viên còn nói: “Em làm gì thì làm, đừng biến nó thành thuyết âm mưu. Nắng nóng năm nào chẳng có.” Thủy chỉ gật đầu, không tranh luận. Cô đã học được rằng tranh luận với người chưa nhìn thấy dữ liệu chỉ làm mình mất thời gian. + +Cô mở file tổng hợp mới nhất. Trên bản đồ nhiệt, các khu vực có mật độ bê tông cao như Cầu Giấy, Thanh Xuân, Hà Đông, Mỹ Đình đều có nền nhiệt bề mặt cao hơn vùng ven. Điều này bình thường. Nhưng ba điểm dị thường lại không tuân theo logic ấy. + +Ngọc Trục có nền nhiệt dao động bất thường vào ban đêm, cao hơn khu vực xung quanh dù mật độ xây dựng không đủ để giải thích. Khu Láng có những khoảng trống dữ liệu lặp lại theo chu kỳ ngắn, giống như có ai đó cắt bỏ đúng vài phút nhạy cảm nhất. Còn Hồ Tây, thay vì làm mát vùng xung quanh như một mặt nước lớn nên làm, lại xuất hiện những vòng tăng nhiệt rất nhỏ dưới bề mặt. + +Ba điểm. Ba kiểu bất thường khác nhau. Nhưng khi nối chúng lại, đường nối tạo thành một tam giác lệch về phía Tây thành phố. + +Thủy phóng lớn bản đồ, ngón tay vô thức gõ nhẹ lên mép bàn. Nếu đây là lỗi cảm biến, lỗi phải phân tán ngẫu nhiên hơn. Nếu là sai số vệ tinh, toàn vùng sẽ bị ảnh hưởng chứ không tập trung vào những điểm cụ thể. Nếu là đảo nhiệt đô thị, khu vực trung tâm mật độ cao phải nổi bật hơn. Nhưng ở đây, các điểm bất thường giống như bị ai đó cố tình giấu dưới một lớp dữ liệu đã được làm mượt. + +Tiếng chuông điện thoại kéo cô trở về hiện tại. Màn hình hiển thị tên: **Anh Duy – Trung tâm Dữ liệu Môi trường**. + +“Em nghe.” + +Đầu dây bên kia có tiếng gió và tiếng xe cộ, như thể người gọi đang đứng ngoài đường. + +“File em nhờ anh kiểm tra có vấn đề thật,” Duy nói nhỏ. “Nhưng anh không tiện nói lâu.” + +“Vấn đề gì?” + +“Dữ liệu nhiệt gốc và dữ liệu công khai không giống nhau. Bản công khai đã được xử lý lại, nhưng xử lý rất khéo. Nếu không so từng mốc thời gian thì khó phát hiện.” + +“Ai xử lý?” + +“Không rõ. Tài khoản thao tác không thuộc nhóm kỹ thuật thường trực.” + +“Có log không?” + +“Có, nhưng thiếu một phần. Anh chỉ xuất được mấy đoạn trước khi quyền truy cập bị khóa.” + +“Bị khóa từ lúc nào?” + +“Chiều nay.” + +Tay Thủy dừng lại trên bàn phím. Chiều nay. Sau khi cô gặp Tiến ở Đại Hà. + +“Anh gửi cho em được không?” + +“Anh gửi rồi. Nhưng Thủy này…” Giọng Duy thấp xuống. “Không giống một bài báo môi trường bình thường đâu. Có vài mã trạm anh chưa từng thấy. Một số không nằm trong danh sách quản lý công khai. Đặc biệt là cái mã HN-07.” + +Thủy ngừng gõ. HN-07. + +“Anh nói lại mã đó đi.” + +“HN-07. Trong một file khác nó ghi là HANOI-07. Anh không biết đây là tên dự án, tên trạm hay mã nội bộ. Tìm trong hệ thống chính thức không có.” + +“Anh còn truy cập được không?” + +“Không. Tài khoản của anh vừa bị hạ quyền. Anh nghĩ em nên dừng lại vài hôm.” + +“Không dừng được.” + +Duy thở dài. + +“Anh gửi những gì anh lấy được rồi. Sau cuộc gọi này đừng nhắn lại cho anh qua số này nữa.” + +Cuộc gọi ngắt. Thủy đặt điện thoại xuống, chờ màn hình tắt hẳn rồi mới mở hộp thư mã hóa. Một email mới nằm ở đầu danh sách, không tiêu đề, chỉ có một file nén đính kèm. Tên file: **raw_patch_0509.zip**. Cô tải file xuống, ngắt mạng, rồi mở trong môi trường máy ảo. Đó là quy trình nghề nghiệp cô đã giữ nhiều năm. Một file lạ có thể mang theo nhiều thứ hơn phần dữ liệu người gửi muốn cô nhìn thấy. + +Bên trong file nén có ba bảng dữ liệu nhiệt độ gốc, hai file log truy cập, một bản đồ các trạm quan trắc và một file văn bản có tên **observer_extract.txt**. Observer. Người quan sát. Cô mở file. Ban đầu chỉ là những dòng ký tự rời rạc, nhiều đoạn bị lỗi mã hóa hoặc bị che bằng chuỗi dấu vuông. Nhưng càng kéo xuống, cô càng thấy rõ một cấu trúc lặp lại: thời gian, tọa độ, mã điểm, trạng thái nhiệt, trạng thái đối tượng. + +Một số dòng nhắc đến Hồ Tây. Một số dòng nhắc đến Láng. Một số dòng nhắc đến Ngọc Trục. Rồi cô nhìn thấy một dòng khiến hơi thở khựng lại. + +**NODE: HANOI-07** + +Bên dưới là các mốc thời gian kéo dài từ nhiều năm trước. Có những đoạn ghi từ 2018, 2021, 2023, 2026. Dữ liệu không liên tục, nhưng đủ để chứng minh một điều: HANOI-07 không phải thứ mới xuất hiện trong vài tuần gần đây. Nó đã được theo dõi từ rất lâu, chỉ là không nằm trong bất kỳ hệ thống công khai nào. + +Thủy kéo tiếp. Một đoạn bị lỗi hiện ra: + +**THERMAL DEVIATION: LANG / HO TAY / NGOC TRUC** + +**DATE RANGE: 09/05/2028 – 16/05/2028** + +Ngày 09 tháng 5. Hôm nay. + +Cô nhìn dòng ngày tháng ấy, lồng ngực đột nhiên nặng xuống. Nếu đây là dữ liệu dự báo, nó quá cụ thể. Nếu là dữ liệu ghi nhận, tại sao lại có khoảng ngày kéo dài tới 16 tháng 5, một ngày chưa xảy ra? Nếu là mô phỏng, vì sao nó nằm trong log truy cập của hệ thống quan trắc thật? + +Thủy chụp ảnh màn hình, lưu vào ổ cứng rời. Sau đó cô mở file log thứ nhất. Các dòng truy cập dày đặc hiện ra. Phần lớn là mã tài khoản kỹ thuật và các tiến trình tự động. Nhưng có một số dòng được đánh dấu bằng nhãn **SUBJECT MATCH**. Thủy lọc riêng các dòng đó, sau đó sắp xếp theo thời gian. + +Kết quả có bảy mục. Ba mục bị che tên. Hai mục chỉ còn tọa độ. Một mục ghi **TRAN THANH THUY**. Và mục cuối cùng ghi: + +**LE QUOC TIEN** + +Con trỏ đứng yên trên cái tên ấy trước khi Thủy kéo dòng log sang phải. Bên cạnh tên Tiến là một chuỗi thông tin ngắn, nhiều ký tự bị lỗi. Một mã cũ khiến Thủy dừng lại: **BK23-EVAC-LQT**. Đó là quy ước đặt tên của dự án hầm ngập năm 2023, thứ đáng lẽ chỉ nằm trong kho dữ liệu của trường và đơn vị tài trợ. + +Ngay sau mã là dòng **PRECURSOR BASELINE MATCH**, rồi hai phần vẫn đọc được: + +**LOCATION: THANH XUAN** + +**STATUS: RETURNED / UNVERIFIED** + +Returned. Trở về. Từ này không nên xuất hiện trong bất kỳ tài liệu khí tượng hay môi trường nào. Cô đứng dậy, đi ra bếp rót một cốc nước. Khi quay lại bàn, ngón tay cô dừng trên số điện thoại của Tiến trong danh bạ. Nếu gọi ngay, cô sẽ để lộ rằng mình đã phát hiện ra điều gì đó. Nếu không gọi, cô có thể bỏ lỡ cơ hội duy nhất để hiểu chuyện đang xảy ra. + +Cuối cùng, Thủy không gọi. Cô mở một file ghi chú mới. Tên file: **LE_QUOC_TIEN.docx** Dòng đầu tiên cô nhập: + +**Gặp lại tại trung tâm thương mại Đại Hà ở Hà Đông sau 5 năm. Có biểu hiện biết trước rủi ro mất điện. Phản ứng bất thường khi nhìn thấy dữ liệu Ngọc Trục – Láng – Hồ Tây. Tên xuất hiện trong log HANOI-07 với trạng thái “RETURNED / UNVERIFIED”.** + +Cô nhìn dòng chữ ấy, rồi thêm một dòng nữa. + +**Không tiếp cận trực diện. Theo dõi trước.** + +Ngoài cửa sổ, đêm Hà Nội vẫn ồn ào như mọi khi. Xe máy chạy qua đường Láng, tiếng còi vọng lên từng đợt, mùi khói đồ nướng từ quán vỉa hè lẫn với hơi nóng còn sót lại sau một ngày dài. Thủy từng nghĩ công việc của mình là viết về những vấn đề khiến thành phố chậm rãi kiệt sức: ô nhiễm, thiếu cây xanh, bê tông hóa, sông hồ bị lấn chiếm, dữ liệu bị làm đẹp để phục vụ báo cáo. Nhưng những gì cô vừa nhìn thấy không giống một vấn đề đô thị. + +Nó giống một đồng hồ đếm ngược. Và ngày đồng hồ ấy dừng lại là **16 tháng 5**. + +Chương 4: HANOI-07 + +Sáng ngày 11 tháng 5, Tiến thức dậy trước chuông báo thức. + +Đêm qua hắn ngủ chưa đến ba tiếng. Mỗi lần nhắm mắt, ba cái tên trên màn hình laptop của Thủy lại hiện lên: **Ngọc Trục, Láng, Hồ Tây**. Những điểm đó không còn chỉ là ký ức của hắn nữa. Chúng đã xuất hiện trong dữ liệu của một người khác. + +Điều đó nguy hiểm hơn một cửa sổ lạ trên máy tính. Bí mật chỉ thuộc về Tiến còn có thể được khóa bằng im lặng; một bí mật đã để lại dấu trong hồ sơ của người khác thì không còn nằm trong tay hắn. + +Tiến bật máy tính, kiểm tra lại toàn bộ bản đồ sinh tồn. Hắn không mở cửa sổ đen nào, cũng không chờ HANOI-07 xuất hiện. Những thứ không thể kiểm soát thì tạm thời phải đặt sang một bên. Việc có thể kiểm soát được mới đáng để làm trước: tiền, kho, vật tư, vận chuyển, danh tính, rủi ro. + +Kiếp trước, Tiến từng thấy những người chuẩn bị khá hơn hàng xóm vẫn chết rất sớm. Một nhà có nước nhưng để lộ bể chứa bị phá cổng trong hai ngày. Một nhóm tích được đồ hộp nhưng đặt máy phát sát tường ngoài, tiếng máy kéo cả khu phố tới. Tích trữ chỉ là phần dễ thấy; giữ kín, phân phối và bảo vệ được thứ đã tích mới là phần khó. + +Vì thế, mua chưa phải việc đầu tiên. Trước hết, hắn phải che được thứ mình đang chuẩn bị. + +Tiến đăng nhập vào các tài khoản tài chính. Cổ phiếu được bán dần theo từng lệnh nhỏ, tiền tiết kiệm được rút một phần, hạn mức thẻ tín dụng được kiểm tra, vài món đồ công nghệ ít dùng được đưa lên chợ đồ cũ. Khi hắn đặt lệnh rút tiền mặt lần thứ hai, ứng dụng ngân hàng báo cần xác minh bổ sung do giao dịch bất thường. + +Tiến đọc lại dòng cảnh báo, ngón tay dừng trên nút xác nhận rồi hủy một nửa số tiền. Tiền không thiếu; thứ hắn cần giữ là sự vô hình. Hắn gọi ba cuộc điện thoại cho ba môi giới kho bãi khác nhau. + +Người đầu tiên giới thiệu vài kho ở Hoài Đức, giá rẻ nhưng quá lộ, đường vào rộng, xung quanh nhiều dân cư. Người thứ hai có kho ở gần La Phù, tiện lấy hàng nhưng nguy cơ cao vì sau tận thế nơi đó sẽ biến thành chiến trường. Người thứ ba nói có một kho cũ gần Ngọc Trục, diện tích không quá lớn, chủ đang cần cho thuê nhanh vì công ty logistics phá sản sau dịch nợ kéo dài. + +Tiến ngồi thẳng dậy. + +“Kho đó còn điện ba pha không?” + +Đầu dây bên kia là giọng một người đàn ông trung niên, nói nhanh và có vẻ sốt ruột. + +“Có. Nhưng lâu không dùng, chắc phải kiểm tra lại. Kho cũ rồi, anh thuê để chứa hàng nhẹ thì được. Xe tải nhỏ vào thoải mái, xe lớn thì hơi khó quay đầu.” + +“Có sân không?” + +“Có sân trong. Tường bao cũng còn. Nhưng chỗ đó hơi khuất, khách trước chê không tiện.” + +“Khuất là tốt.” + +Người môi giới cười. + +“Anh nói thế thì hiếm người nói lắm.” + +“Có giấy tờ mặt bằng không? Sơ đồ điện, nước, kết cấu xây dựng?” + +“Giấy tờ thuê thì có. Còn sơ đồ cũ chắc phải hỏi chủ. Nhưng tôi nói trước, kho này từng sửa mấy lần, hồ sơ không đủ đâu.” + +Tiến im lặng một giây. Hồ sơ không đủ. Tầng kỹ thuật bị bỏ quên. Mốc 16 tháng 5. Tất cả ghép lại thành một đường thẳng lạnh lẽo trong đầu hắn. + +“Khi nào xem được?” + +“Chiều nay cũng được.” + +“Không. Tôi muốn xem vào ngày 16.” + +Người môi giới khựng lại. + +“Ngày 16? Anh không xem trước à? Lỡ người khác thuê mất thì sao?” + +“Giữ cho tôi. Tôi chuyển cọc trước. Nhưng trong hợp đồng ghi rõ tôi có quyền kiểm tra hạ tầng bên dưới nền kho trước khi nhận bàn giao.” + +Đầu dây bên kia im lặng vài giây. + +“Cái đó phải hỏi chủ.” + +“Hỏi đi. Nếu đồng ý, trong hôm nay tôi chuyển cọc.” + +Cuộc gọi kết thúc. Đúng lúc đó, màn hình công việc bật thông báo đỏ: cụm server ở Cầu Giấy quá nhiệt nhẹ, hệ thống làm mát báo lỗi một quạt dự phòng. Trưởng nhóm gọi ngay sau đó. + +“Tiến, em xem giúp anh cụm CG-02. Log nhiệt nhảy kỳ lạ.” + +Cảnh báo làm một luồng lạnh chạy dọc gáy Tiến. Ngày thường, đây chỉ là sự cố hạ tầng. Nhưng trong bối cảnh hiện tại, mọi con số nhiệt độ đều khiến hắn cảnh giác. + +Hắn xử lý từ xa trong gần một giờ. Nguyên nhân chỉ là cảm biến phòng máy sai lệch sau khi thợ bảo trì thay quạt. Nhưng sự cố này nhắc hắn rằng công việc vẫn có thể kéo hắn ra khỏi kế hoạch bất kỳ lúc nào. Từ hôm nay đến 22/06, hắn không chỉ chạy đua với thảm họa. Hắn còn phải chạy đua với cuộc đời bình thường chưa chịu buông hắn ra. + +Đến gần trưa, Tiến nhận được email từ môi giới. Hồ sơ kho Ngọc Trục được gửi dưới dạng file PDF scan, chất lượng thấp, nhiều trang mờ, dấu đỏ cũ nhòe đi ở mép giấy. Hắn tải xuống, mở trong máy ảo rồi phóng lớn từng trang. + +Sơ đồ tổng thể khá đơn giản: một nhà kho chính, một sân trong, một dãy phòng nhỏ từng dùng làm văn phòng, cổng phụ phía sau dẫn ra đường nội bộ. Hệ thống điện ba pha được kéo từ trạm gần đó. Nước sử dụng từ đường ống khu vực, nhưng có ghi chú về một giếng khoan cũ đã bị bịt nắp. + +Tiến dừng ở phần ghi chú ấy. Giếng khoan cũ. Ở thời bình, đó là chi tiết không đáng kể. Sau Hồng Nhật, nó có thể là khác biệt giữa sống và chết. Hắn phóng tiếp vào phần nền kho. Bản vẽ kết cấu bị thiếu một góc. Ngay tại vị trí thiếu ấy, có một ký hiệu nhỏ gần như bị mực lem che mất. Hắn phải rà rất lâu mới nhận ra đó không phải ký hiệu xây dựng thông thường. Nó giống một vòng tròn có những tia ngắn tỏa ra. Một mặt trời. Đường nét không hoàn toàn giống hình ảnh trong ký ức của hắn, nhưng cấu trúc cơ bản trùng khớp. + +Ngọc Trục không chỉ là một căn cứ tốt. Nó đã được đánh dấu từ trước. Máy tính phát ra một tiếng “ting” rất nhỏ. Một email mới xuất hiện trong hộp thư phụ mà Tiến gần như không dùng đến. Người gửi trống. Địa chỉ không bị ẩn; trường người gửi hoàn toàn để trống. Tiêu đề chỉ có một chuỗi ký tự: + +**H07 / ACCESS WINDOW** + +Tiến ngắt mạng, chụp màn hình, sao lưu trạng thái hệ thống, rồi mở email trong môi trường cô lập. Nội dung thư chỉ có một ảnh đính kèm và ba dòng chữ. Ảnh đính kèm là ảnh vệ tinh Hà Nội. Độ phân giải cao hơn bất kỳ nguồn công khai nào hắn từng thấy. Ở giữa ảnh, một điểm đỏ đang nhấp nháy tại khu vực Ngọc Trục. + +Bên dưới ảnh là ba dòng chữ: + +**16/05/2028** + +**NODE DETECTED** + +**ACCESS POINT: NGOC TRUC** + +Tiến kiểm tra header thư. Không máy chủ gửi, không đường đi, không IP, không thời gian chuyển tiếp. Email tồn tại trong hộp thư của hắn như thể nó được đặt thẳng vào đó, bỏ qua toàn bộ hạ tầng Internet. + +Hắn in ảnh vệ tinh ra giấy, lấy bản đồ Hà Nội treo sau cửa xuống, rồi dùng bút nối các điểm đã biết: Hồ Tây, Láng, Ngọc Trục, La Phù, trung tâm thương mại Đại Hà ở Hà Đông. Nếu bỏ qua ý nghĩa địa lý thông thường, các điểm ấy tạo thành một cấu trúc giống mạng nút, trong đó Láng và Ngọc Trục là hai điểm giao, Hồ Tây là lõi lớn nhất. + +Một mạng lưới. Hoặc một phong ấn. Điện thoại rung. Lần này là môi giới kho bãi. + +“Anh Tiến à, chủ kho đồng ý giữ đến ngày 16. Nhưng họ bảo nếu anh muốn kiểm tra bên dưới nền kho thì phải ký thêm cam kết, tự chịu chi phí và không làm hư hỏng kết cấu.” + +“Được.” + +“Còn một việc nữa. Chủ kho bảo chỗ này trước đây từng có người hỏi mua đứt, không thuê. Người ta trả giá khá cao nhưng sau đó lại bỏ. Nghe nói bên đó không phải công ty logistics, mà là nhóm nghiên cứu gì đó.” + +“Có tên không?” + +“Không. Nhưng tôi thấy trong file cũ có một cái danh thiếp chụp lại. Để tôi tìm rồi gửi anh.” + +Cuộc gọi kết thúc chưa đầy một phút, môi giới gửi tới một bức ảnh chụp mờ. Tấm danh thiếp đặt trên mặt bàn gỗ, góc ảnh bị lóa sáng. Phần tên công ty bị che mất một nửa, nhưng logo phía trên vẫn còn nhìn được: một vòng tròn đỏ với những tia ngắn tỏa ra xung quanh. Biểu tượng mặt trời đỏ. Bên dưới logo là một dòng chữ tiếng Anh bị mờ, nhưng Tiến vẫn nhận ra hai từ cuối: + +**Observation Initiative** + +Sáng kiến Quan sát. Hắn rà tấm ảnh, ánh mắt tối lại. Có người đã tìm đến Ngọc Trục trước hắn. Không phải trong tương lai, mà trước cả khi Hồng Nhật xảy ra. + +Đêm đó, sau khi khóa cửa căn hộ và kéo rèm, Tiến nhận được một tin nhắn từ số lạ. Không có mã vùng. Không có tên người gửi. Chỉ có một dòng: + +**Mày không phải người duy nhất nhớ ngày đó.** + +Tin nhắn làm đồng tử hắn co lại. Căn phòng yên tĩnh. Bản đồ Hà Nội nằm im trên bàn. Ngoài kia, thành phố vẫn ngủ. Trên màn hình bản đồ, dấu định vị tại Ngọc Trục chớp một lần rồi tắt, như thể ở đầu bên kia vừa có người kiểm tra xem con đường còn mở hay không. + +Chương 5: Ngày Ngọc Trục + +Ngày 16 tháng 5 năm 2028 đến trong một buổi sáng oi đến bất thường. + +Mới hơn sáu giờ, mặt trời đã treo lơ lửng trên những dãy nhà phía Tây thành phố, ánh sáng trắng nhợt phủ lên mặt đường như một lớp bụi nóng. Tiến lái xe ra khỏi Thanh Xuân từ sớm, trong cốp xe có một túi dụng cụ, một máy đo nhiệt cầm tay, một camera nội soi công nghiệp, hai bộ khóa mới, một bộ phát Wi-Fi độc lập và một xấp giấy tờ đã được hắn sắp xếp theo thứ tự. + +Năm ngày qua, hắn gần như không ngủ quá bốn tiếng mỗi đêm. Tin nhắn từ số lạ vẫn nằm trong điện thoại. + +**Mày không phải người duy nhất nhớ ngày đó.** + +Thay vì đi thẳng tới kho, Tiến vòng qua hai tuyến đường, dừng ở một cây xăng gần Đại lộ Thăng Long, mua một chai nước rồi kiểm tra gương chiếu hậu và dòng xe phía sau. Không có chiếc nào bám theo quá lâu. Một xe tải nhỏ chở hàng điện máy rẽ vào đường khác. Hai xe máy giao hàng vượt lên rồi mất hút. Một chiếc sedan màu bạc chạy sau hắn gần mười phút, nhưng sau khi qua ngã rẽ về Đại Mỗ cũng đi thẳng. + +Chưa thấy đuôi. Nhưng chưa thấy không có nghĩa là không có. Tám giờ mười lăm, Tiến tới khu kho Ngọc Trục. + +Nơi này không có vẻ gì đặc biệt. Một con đường bê tông vừa đủ cho xe tải nhỏ, hai bên là nhà dân xen lẫn xưởng cơ khí, kho hàng cũ, bãi vật liệu và vài mảnh đất quây tôn. Xa hơn, tiếng máy cắt sắt rít lên từng hồi từ một xưởng nào đó. Mùi bụi, mùi dầu máy và mùi nắng nóng trên tôn cũ trộn lại thành thứ mùi đặc trưng của vùng ven đô: nửa công nghiệp, nửa làng xóm, vừa lộn xộn vừa kín đáo. + +Nếu nhìn bằng mắt người bình thường, đây là một kho hàng cũ, không đáng giá. Nếu nhìn bằng mắt của một người từng sống ba năm trong tận thế, đây là một cái khung căn cứ hiếm có. Một chiếc xe máy dừng trước cổng. Người môi giới bước xuống, dáng hơi thấp, bụng nhô ra dưới chiếc áo sơ mi kẻ. Ông ta lau mồ hôi trên trán, nhìn quanh rồi thấy xe của Tiến. + +“Anh Tiến đúng không?” + +“Đúng.” + +“Anh đến sớm thật. Chủ kho đang trên đường tới. Chỗ này hơi cũ, nhưng diện tích thật bên trong rộng hơn trong ảnh.” + +“Mấy tháng nay có ai vào xem chưa?” Tiến hỏi. + +“Một hai người thôi. Nhưng xem rồi không thuê. Chê xa, chê cũ, chê đường vào hơi khuất.” + +“Người từng hỏi mua đứt kho thì sao?” + +Nụ cười trên mặt người môi giới hơi khựng lại. + +“À, vụ đó tôi cũng chỉ nghe chủ nói. Bên kia đến xem nhanh lắm, không mặc cả nhiều, còn hỏi rất kỹ về nền kho với hồ sơ cũ. Nhưng sau đó lại bỏ.” + +“Họ bỏ hay chủ không bán?” + +“Cái này… tôi không rõ.” + +Tiến nhìn ông ta. Người môi giới tránh ánh mắt ấy, vội lấy điện thoại ra gọi chủ kho. + +Mười phút sau, một chiếc bán tải cũ chạy tới. Chủ kho là một người đàn ông ngoài năm mươi, da sạm nắng, tóc hoa râm, dáng gầy nhưng mắt khá tỉnh. Ông ta tự giới thiệu tên Lợi, trước đây làm vận tải, kho này từng cho một công ty logistics thuê, sau dịch kinh doanh khó khăn, khách trả mặt bằng rồi để trống đến giờ. + +“Anh thuê chứa hàng gì?” ông Lợi hỏi khi mở cổng. + +“Thiết bị điện và hàng tiêu dùng.” + +“Hàng dễ cháy không?” + +“Không nhiều. Nhưng tôi sẽ lắp thêm camera, khóa mới, gia cố một số điểm. Chi phí tôi tự chịu.” + +Ông Lợi liếc Tiến. + +“Anh kỹ tính nhỉ.” + +“Đồ của tôi cũng đáng tiền.” + +Cổng sắt mở ra, phát ra tiếng rít dài. Tiến bước vào sân. + +Kho Ngọc Trục yên lặng hơn bên ngoài rất nhiều. Tiếng máy cắt sắt, tiếng xe máy và tiếng người nói chuyện ngoài đường đều như bị tường bao chặn lại. Bên trong chỉ còn tiếng gió khô lùa qua mái tôn và tiếng bước chân vang nhẹ trên nền sân. Nắng chiếu xuống mặt bê tông, nhưng có vài vị trí nhiệt độ thấp hơn xung quanh một cách bất thường, tạo thành những mảng màu rất khó nhận ra bằng mắt thường. + +Nhà kho chính rộng khoảng hơn một nghìn mét vuông. Bên trong trống gần hết, chỉ còn vài kệ sắt cũ, thùng carton mốc, một xe nâng hỏng và ít pallet gỗ mục xếp sát tường. Trần kho cao, mái tôn có lớp cách nhiệt cũ đã bong từng mảng. Tường phía Tây có vết nứt dài, nhưng chưa ảnh hưởng kết cấu. + +Tiến đi chậm, không bỏ sót góc nào. Hắn dùng đèn pin soi ổ điện, kiểm tra tủ điện, mở nắp hộp kỹ thuật, nhìn đường ống nước cũ chạy sát tường. Hệ thống điện xuống cấp nhưng chưa hỏng hoàn toàn. Nếu thay dây chính, lắp tủ riêng và đặt thêm máy phát, nơi này có thể vận hành độc lập. + +“Nước thì sao?” Tiến hỏi. + +“Đường nước vẫn có. Nhưng lâu không dùng, phải xúc rửa bể.” + +“Trong hồ sơ có ghi giếng khoan cũ.” + +Ông Lợi miết ngón tay dọc mép chùm chìa khóa, chưa trả lời ngay. + +“À, cái đó lâu lắm rồi. Từ đời chủ trước. Bịt lại rồi.” + +“Ở đâu?” + +Ông Lợi chỉ về phía sân sau. + +“Gần dãy văn phòng. Nhưng tôi nói trước, nước đó chưa chắc dùng được. Anh muốn khoan lại thì phải xin phép.” + +Sau gần một giờ kiểm tra, họ ngồi xuống chiếc bàn gỗ cũ trong phòng văn phòng nhỏ để ký hợp đồng. Tiến đọc từng trang, sửa ba điều khoản: quyền lắp đặt thiết bị an ninh, quyền cải tạo hệ thống điện nước bằng chi phí bên thuê, và quyền kiểm tra hạ tầng ngầm trong phạm vi không làm ảnh hưởng kết cấu chính. + +Ông Lợi nhíu mày. + +“Anh định đào bới gì à?” + +“Không. Tôi chỉ cần kiểm tra nền trước khi đưa hàng vào. Hàng điện tử sợ ẩm, sợ sụt lún.” + +Chủ kho vẫn hơi do dự. Nhưng khoản tiền thuê sáu tháng trả trước đủ khiến ông ta đặt bút ký. Trước khi đi, ông Lợi quay lại nhìn kho một lần, vẻ mặt có chút phức tạp. + +“Anh Tiến này.” + +“Vâng?” + +“Nếu không cần thiết thì đừng động sâu xuống nền phía sau kho.” + +“Vì sao?” + +Ông Lợi im lặng một lát rồi cười gượng. + +“Không có gì. Chỗ cũ ấy mà. Đụng vào lại phát sinh chuyện sửa chữa.” + +Câu trả lời không tự nhiên. Không hẳn là nói dối, nhưng rõ ràng ông ta biết điều gì đó về phần nền phía sau kho. Cổng sắt khép lại. Kho Ngọc Trục chỉ còn một mình Tiến. + +Hắn lập tức thay ổ khóa cổng, khóa cửa chính và kiểm tra quanh tường bao thêm một lần. Sau đó, hắn lắp một camera hành lang tạm thời ở góc sân, cảm biến cửa ở cổng phụ và một bộ ghi hình độc lập dùng pin, không nối mạng. Hắn không tin Internet, không tin camera đám mây, càng không tin bất kỳ thứ gì có thể bị HANOI-07 chạm tới. + +Sau khi đảm bảo không có ai trong kho, Tiến bắt đầu kiểm tra nền. + +Máy đo nhiệt cầm tay lướt chậm trên mặt bê tông. Phần lớn nền kho có nhiệt độ tương đương nhau, cao hơn trong nhà bình thường vì mái tôn giữ nhiệt. Nhưng ở khu phía sau, gần bức tường giáp sân hẹp, nhiệt độ thấp hơn khoảng 1,8°C. Chênh lệch không lớn, nhưng đủ bất thường trong một không gian kín như thế này. + +Tiến đánh dấu bằng phấn. + +Hắn lấy búa cao su gõ nhẹ lên nền. Âm thanh ở các vị trí đầu tiên đặc và nặng. Đến điểm thứ sáu, tiếng gõ bỗng chuyển sang rỗng hơn một chút. Người bình thường có thể bỏ qua, nhưng với người từng tìm đường sống trong những công trình đổ nát, âm thanh đó rõ như tiếng gõ vào cửa. + +Bên dưới có khoảng trống. Hắn không phá nền ngay. + +Thay vào đó, hắn đi ra sân sau kiểm tra vị trí giếng khoan cũ. Nắp giếng là một tấm bê tông tròn nằm sát dãy văn phòng, phủ bụi và cỏ dại khô. Tiến dùng xà beng cạy nhẹ, phát hiện nắp đã được chèn bằng một vòng kim loại hàn kín. Hàn rất chắc. Cách bịt này không giống việc làm tạm của chủ kho; nó gần với một thao tác niêm phong. + +Hắn dùng tay phủi lớp bụi trên vòng kim loại. Một vết khắc mờ hiện ra. Đó không phải chữ, mà là một vòng tròn nhỏ với những tia ngắn tỏa ra xung quanh. Mặt trời đỏ. Đến lúc này, hắn không còn nghi ngờ nữa. Dù thứ nằm dưới Ngọc Trục là gì, nó đã được che giấu từ trước khi nhà kho này trở thành nhà kho. + +Tiến quay lại trong kho. Sau gần hai mươi phút kiểm tra, hắn phát hiện một kệ sắt cũ ở góc tường phía Tây bị bắt vít xuống nền bằng loại bu lông lớn bất thường. Kệ đã gỉ, các thanh ngang cong vênh, nhưng chân kệ lại quá chắc. Không ai cần cố định một kệ hàng mục như vậy nếu bên dưới nó không che thứ gì đó. + +Hắn tháo từng con bu lông. Công việc mất gần bốn mươi phút. Mồ hôi thấm ướt lưng áo, bụi sắt bám đầy tay, nhưng hắn không dừng. Khi chân kệ cuối cùng được nhấc ra, một đường viền chữ nhật hiện lên trên mặt nền. Đó không phải nắp hầm thông thường, mà là một tấm kim loại lớn phủ lớp bê tông mỏng. + +Tiến dùng xà beng cạy mép. Lớp bê tông vỡ ra thành từng mảng, để lộ bề mặt kim loại tối màu bên dưới. Trên tấm kim loại có những vệt khắc rất nông, gần như bị mài phẳng theo thời gian. Hắn lau sạch bụi, chiếu đèn pin ở góc nghiêng. Ký hiệu mặt trời đỏ hiện ra rõ ràng. Một vòng tròn nằm giữa tấm kim loại, xung quanh là mười hai tia ngắn. Bên dưới vòng tròn có hai chữ cái và hai con số: + +**HN-07** + +Tiến đứng im. HANOI-07 không phải chỉ là một dòng chữ trên màn hình. Nó có vật thể thật. Nằm dưới chân hắn. + +Hắn không chạm vào ngay. Trước hết Tiến dựng camera quay toàn cảnh, đặt máy ghi âm tách nguồn ở phía đối diện, dùng bút thử điện và đồng hồ đo kiểm mép kim loại, rồi đánh dấu vị trí nắp bằng phấn để biết nó có dịch chuyển khi hắn quay lưng. Một đồng hồ cơ được đặt mốc mười lăm phút; quá thời gian đó, hắn sẽ rút lên bất kể phát hiện được gì. Hắn còn chèn một thanh thép ngang mép nắp — không phải để giữ được một cơ cấu mạnh hơn mình, mà để có dấu vật lý nếu cơ cấu tự đóng. + +Khóa không dùng ổ thông thường. Ở mép phải có một hõm tròn vừa bằng lòng bàn tay, bên trong là bề mặt lạnh và nhẵn như đá mài. Tiến thử bằng găng cách điện trước. Không phản ứng. Hắn đo lại nhiệt, không thấy điện thế rõ ràng. Chỉ sau khi loại được những nguy cơ đơn giản nhất, hắn mới tháo găng và đặt tay trần lên bề mặt. Ngay khoảnh khắc da chạm vào bề mặt lạnh, toàn bộ thiết bị điện tử trong túi hắn tắt phụt. Trong kho, ánh sáng đột nhiên tối đi. Kho vốn chưa bật điện. Chính ánh nắng ngoài cửa dường như bị hạ xuống một tầng, khiến không gian xám đi trong vài giây. + +Trên tấm kim loại, những đường khắc bắt đầu sáng lên. Không phải ánh sáng điện, mà là một màu đỏ sẫm, âm ỉ như than dưới lớp tro. Từ vòng tròn trung tâm, các tia ngắn lần lượt phát sáng. Một tia, hai tia, ba tia. Đến tia thứ bảy, ánh sáng dừng lại. + +Tấm kim loại hé ra một khe hẹp. Không khí lạnh từ bên dưới tràn lên. Tiến không xuống ngay. Hắn đưa đầu đo khí xuống trước, chờ đủ một phút: oxy thấp hơn ngoài kho nhưng chưa tới ngưỡng phải rút, không báo khí cháy hay CO bất thường. Sau đó hắn dùng đèn pin dự phòng soi xuống. Bên dưới là một cầu thang kim loại hẹp, dốc vừa phải, kéo sâu vào bóng tối. Hai bên tường không phải bê tông thô, mà là một loại vật liệu xám nhẵn, không thấy mối nối. + +Hắn lấy dao gấp, đèn pin, máy ghi âm dự phòng và một sợi dây dù. Một đầu dây buộc vào chân kệ sắt còn lại, đầu kia qua khóa nhả nhanh ở thắt lưng để không biến dây an toàn thành cái bẫy nếu cơ cấu kéo. Camera gắn ngực chỉ là lớp ghi thứ hai; lớp thứ nhất vẫn ở trên kho. Tiến nhìn đồng hồ cơ: còn mười ba phút. Hắn mới bước xuống bậc đầu tiên. + +Cầu thang lạnh hơn tưởng tượng. + +Đi xuống khoảng mười hai mét, Tiến đến cuối cầu thang. Trước mặt hắn là một hành lang ngắn. Trên tường có vài vết khắc đã mờ, không phải chữ Việt, cũng không phải ký hiệu kỹ thuật hiện đại. Một số đường nét giống hoa văn cổ, một số lại giống sơ đồ mạch điện được cách điệu. Cũ và mới chồng lên nhau, giống như có hai thời đại cùng viết trên một bức tường. + +Cuối hành lang là một cánh cửa thứ hai. Cánh cửa này nhỏ hơn nắp hầm phía trên, làm bằng cùng loại kim loại tối màu. Ở giữa cửa có ký hiệu mặt trời đỏ, nhưng không có chữ. Bên cạnh ký hiệu là một vết xước dài, còn khá mới. Có người từng xuống đây. Mép xước còn quá sạch để thuộc về nhiều năm trước. + +Tiến đưa tay chạm nhẹ vào vết xước. Mép kim loại còn sạch, chưa phủ bụi hoàn toàn. Hắn chưa kịp kiểm tra thêm thì phía trên đầu vang lên một tiếng động rất khẽ. Không phải từ hành lang. Mà từ nhà kho phía trên. Tiếng kim loại cọ vào nhau. Cổng kho vừa bị mở. Tiến lập tức tắt đèn pin, lùi vào bóng tối sát tường. Trong không gian tĩnh lặng, tiếng bước chân từ phía trên truyền xuống rất mờ, nhưng đủ để hắn nhận ra. + +Có ít nhất ba người. Có kẻ khác đã tới Ngọc Trục. Trên bề mặt cửa HN-07, một đường sáng đỏ rất mảnh chậm rãi hiện lên, giống như một vết nứt vừa mở ra trong bóng tối. Không có dòng chữ giải thích. Không có màn hình. Không có câu trả lời. Chỉ có tiếng bước chân phía trên ngày càng gần, và cánh cửa HN-07 trước mặt hắn đang từ từ khóa lại. Ngày Ngọc Trục vừa bắt đầu. + +Và Tiến biết mình đã đến muộn hơn ít nhất một nhóm người. + +Chương 6: Những Kẻ Đến Muộn + +Tiếng bước chân phía trên càng lúc càng rõ. + +Tiến đứng sát vào vách hành lang, tắt đèn pin, một tay giữ dao gấp, tay còn lại chạm lên mặt tường lạnh. Trên cánh cửa kim loại trước mặt, đường sáng đỏ mảnh như sợi chỉ đang chậm rãi co lại. Nó không mở ra. Nó cũng không đóng sập. Nó chỉ lặng lẽ rút ánh sáng vào trong, giống như một con mắt vừa phát hiện kẻ lạ và quyết định nhắm lại. + +Phía trên, cổng kho phát ra tiếng rít khẽ. Có người đi vào. + +Bước chân ấy không thuộc về chủ kho hay môi giới. Bước chân của ông Lợi nặng và chậm, còn những người trên kia di chuyển nhẹ hơn, đều hơn, có kỷ luật hơn. Tiến nghe thấy tiếng giày chạm vào nền bê tông, tiếng kim loại va nhẹ vào khóa kéo, tiếng ai đó hạ giọng ra lệnh. Ít nhất ba người. Có thể bốn. + +Một giọng nam vang xuống từ phía trên, bị vách hầm nuốt mất một phần. + +“Dấu mở còn mới.” + +Một giọng khác đáp lại: + +“Có người xuống trước rồi.” + +Tiến nín thở. Hắn đã đến Ngọc Trục đúng ngày 16 tháng 5. Nhưng đúng không có nghĩa là sớm. + +Trong ba năm tận thế, hắn từng học được cách nghe tiếng người trong bóng tối. Người hoảng loạn nói nhanh, thở gấp, bước chân lộn xộn. Người ăn cướp nói lớn, đập phá nhiều, cố dùng âm thanh để dọa kẻ khác. Còn nhóm người phía trên không thuộc hai loại đó. Họ nói nhỏ, bước chậm, kiểm tra từng điểm, không phí một động tác thừa. + +Nhóm trên kia không đến vì tò mò. Họ biết mình đang tìm gì. Tiến lùi thêm nửa bước, mắt vẫn nhìn chằm chằm vào cánh cửa HN-07. Đường sáng đỏ đã mờ gần hết. Hắn đưa tay chạm vào bề mặt kim loại, nhưng lần này không có phản ứng. Cánh cửa lạnh và cứng như một khối đá, không khác gì một mảng bóng tối được rèn thành hình. + +Từ phía trên, tiếng bước chân dừng lại ngay gần miệng hầm. Một người nói: + +“Dây còn buộc ở đây. Hắn chưa lên.” + +Từ “hắn” khiến tay Tiến siết chặt chuôi dao. Nhóm trên kia không chỉ biết có người đã xuống; họ biết đó là một người đàn ông, thậm chí rất có thể biết chính xác là ai. Giọng nam đầu tiên vang lên lần nữa: + +“Không xuống vội. Kiểm tra nền trước.” + +Sau câu đó là một khoảng im lặng ngắn. Tiến nghe thấy tiếng thiết bị điện tử khởi động, tiếng bíp nhỏ, rồi tiếng ai đó chửi khẽ. + +“Mất tín hiệu toàn bộ.” + +“Bên dưới vẫn chặn?” + +“Ừ.” + +“Đừng chạm vào ký hiệu khi chưa có lệnh.” + +Tiến khựng lại ở câu cuối. Nhóm người phía trên cũng dè chừng — không phải hắn, mà là thứ đang nằm dưới kho. Nếu nhóm này kiểm soát HN-07 hoàn toàn, hắn đã chết từ lúc bước xuống bậc đầu tiên. Nhưng nếu ngay cả họ cũng phải kiêng dè cánh cửa này, nghĩa là thứ dưới Ngọc Trục không thuộc hẳn về bên nào. Đó là một tin tốt rất nhỏ. + +Và cũng là một tin xấu rất lớn. Cánh cửa kim loại trước mặt phát ra một tiếng tách khẽ. Tiến quay đầu. Đường sáng đỏ đã biến mất, nhưng ở mép dưới cánh cửa, một khe hẹp vừa mở ra. Không đủ cho người chui qua. Chỉ đủ để không khí lạnh hơn từ bên trong lùa ra, mang theo mùi kim loại khô và một thứ mùi rất nhẹ, giống mưa rơi trên đá nóng. Bên dưới khe cửa có một vật nhỏ trượt ra. Tiến cúi xuống nhặt. + +Đó là một mảnh kim loại mỏng, dài bằng hai ngón tay, bề mặt phủ bụi xám. Trên mảnh kim loại có khắc ba ký hiệu: một vòng tròn mặt trời đỏ, một đường cong giống dòng sông, và hai chữ Hán cổ đã mờ gần hết. Bên dưới cùng là một hàng chữ hiện đại nhỏ đến mức hắn phải đưa sát mắt mới đọc được. + +**LA PHU / SUPPLY TRACE** + +La Phù. Tuyến tiếp vận. Đúng lúc đó, phía trên có tiếng dây bị kéo căng. Tiến ngẩng đầu. Sợi dây dù hắn buộc vào thắt lưng rung nhẹ. Có kẻ phía trên đang thử kéo. Nếu hắn cứ đứng yên, họ sẽ biết chính xác vị trí của hắn. Nếu hắn cắt dây, hắn mất đường lên duy nhất đang thấy được. Nếu hắn leo lên ngay, hắn sẽ chui đầu vào miệng súng. + +Không có lựa chọn sạch. Tiến kẹp mảnh kim loại vào túi áo trong, rút dao cắt dây sát thắt lưng. Sợi dây bật ngược lên trên trong một tiếng vút nhỏ. Ngay lập tức, phía trên vang lên tiếng quát. + +“Hắn cắt dây!” + +Tiến quay người chạy dọc hành lang ngắn, trở lại chân cầu thang. Tiếng bước chân phía trên dồn dập hơn. Có người bắt đầu xuống. Ánh đèn trắng quét qua miệng hầm, rọi xuống những bậc kim loại lạnh. Tiến không leo lên. Hắn ép người vào khoảng tối dưới gầm cầu thang. + +Người đầu tiên xuống rất nhanh, tay cầm đèn pin gắn dưới nòng một vật dài. Tiến không nhìn rõ đó là súng thật hay công cụ bắn đinh cải tạo, nhưng trong khoảng cách hẹp thế này, thứ nào cũng đủ giết người. Sau lưng người đó còn một bóng nữa. Họ không bật đèn lớn, chỉ quét từng nhát sáng ngắn, kiểm tra vách, nền, cửa. + +“Dây bị cắt ở đây.” + +“Hắn ở gần.” + +Tiến chờ người đầu tiên bước qua vị trí của mình. Một bước. Hai bước. Khi gót giày của người đó vừa vượt qua mép tối, Tiến lao ra. + +Hắn không đâm dao ngay. Đâm người tạo tiếng, tạo máu, tạo giằng co. Thứ hắn cần là thời gian. Tiến dùng cả vai húc thẳng vào đầu gối đối phương, đồng thời giật mạnh cổ tay đang cầm đèn. Người kia mất thăng bằng, va vào vách kim loại. Đèn pin rơi xuống nền, ánh sáng xoay tròn làm hành lang chớp trắng một nhịp. + +Người thứ hai lập tức quay lại. Tiến đá chiếc đèn pin về phía hắn. Ánh sáng bật vào mặt khiến đối phương khựng lại nửa giây. Chỉ nửa giây đó đủ để Tiến lách qua, lao lên cầu thang. Phía trên có tiếng quát. + +“Chặn miệng hầm!” + +Tiến không nhìn lên. + +Hắn rút một vật nhỏ trong túi, ném mạnh lên trên. Đó là một bình xịt khói mini dùng để thử luồng gió trong phòng máy, thứ hắn bỏ vào túi theo thói quen nghề nghiệp. Bình đập vào bậc thang, nứt vỏ, phun ra một làn khói trắng dày. Không độc, không nguy hiểm, nhưng đủ che tầm nhìn trong không gian hẹp. + +Tiến cúi người, lao qua màn khói. Một bàn tay chụp lấy vai hắn ở gần miệng hầm. Tiến xoay người, dùng khuỷu tay thúc ngược vào cổ đối phương. Người kia nghẹn lại, lùi nửa bước. Tiến nhân cơ hội bật lên khỏi nắp hầm, lăn qua nền kho, chộp lấy xà beng đặt gần đó. + +Cơn đau bắn lên từ vai trái. Cú va chưa đủ làm hắn gục, nhưng Tiến biết vài giờ nữa vai sẽ sưng và lực tay sẽ giảm. Kiếp trước hắn từng mất ba ngày chỉ vì một vết rách ở lòng bàn tay bị nhiễm trùng; từ đó hắn không còn coi những chấn thương 'chịu được' là chuyện nhỏ. + +Kho chính ngập trong bụi và ánh sáng loang lổ. Có hai người phía trên. Một người bị khói làm cay mắt, đang lùi lại. Người còn lại đứng gần cổng phụ, mặc áo khoác mỏng màu xám, đội mũ lưỡi trai kéo thấp. Trên cổ tay hắn có một hình xăm nhỏ: vòng tròn với những tia đỏ. + +Biểu tượng mặt trời. Tiến không đuổi theo. Hắn đập xà beng vào giá sắt gần đó. Giá sắt đổ ầm xuống, kéo theo một loạt pallet gỗ mục và thùng carton cũ. Âm thanh vang khắp kho. Người ngoài đường có thể không nghe rõ, nhưng trong khu kho kín, tiếng động đủ khiến nhóm đột nhập mất nhịp. + +Tiến chạy thẳng ra cửa phụ phía sau. Ổ khóa xích đã bị cắt sẵn. Nhóm này vào bằng cổng chính, nhưng cũng đã chuẩn bị đường sau. Tiến đẩy cửa lao ra khoảng sân hẹp, vượt qua dãy văn phòng nhỏ, rồi trèo qua một đoạn tường thấp phía sau kho. Bên kia là một mảnh đất bỏ hoang đầy cỏ khô và gạch vỡ. Hắn rơi xuống, vai trái đập mạnh xuống đất lần nữa. Lần này, mắt hắn tối đi gần một giây. + +Hắn cắn răng bật dậy chạy tiếp. Sau lưng có tiếng người gọi nhau. Không có tiếng súng. Hoặc họ không có súng. Hoặc họ không muốn gây chú ý. Tiến chọn khả năng thứ hai. Hắn vòng qua hai dãy nhà xưởng, chui vào một lối nhỏ giữa các bức tường tôn, rồi dừng lại sau một xe tải bỏ không. Hơi thở nóng rát trong cổ họng. Vai trái đau âm ỉ. Trên mu bàn tay có một vết xước dài đang rỉ máu. + +Hắn nhìn về phía kho qua khe hở giữa hai tấm tôn. Ba người đã ra sân. Người đội mũ lưỡi trai nói gì đó với hai kẻ còn lại, rồi nhìn quanh. Từ khoảng cách này, Tiến không nghe rõ. Nhưng hắn thấy kẻ đó giơ tay, chỉ về phía đường lớn. Một chiếc xe tải màu trắng đỗ ở đầu ngõ. Trên thùng xe không có logo công ty. Chỉ có một dòng chữ rất nhỏ ở mép dưới, gần như bị bụi che mất: + +**LP-17** + +La Phù 17. Tiến cúi đầu, lấy mảnh kim loại trong túi áo ra nhìn lại. + +**LA PHU / SUPPLY TRACE** + +Mọi đường dây đang dẫn về cùng một nơi. Đến gần trưa, nhóm người lạ rời khỏi kho. Họ không đuổi theo nữa, cũng không báo công an. Họ khóa lại cổng như chưa từng có chuyện gì xảy ra. Tiến đợi thêm gần một giờ mới quay lại bằng lối sau, kiểm tra thật nhanh hiện trường. Nắp hầm đã đóng. + +Ký hiệu HN-07 trên tấm kim loại biến mất dưới lớp bụi và bê tông vỡ, như thể nó chưa từng phát sáng. Cánh cửa bên dưới chắc chắn cũng đã khóa. Hắn thử lại bằng tay, không có phản ứng. Tất cả thiết bị điện tử của hắn đều bật lại bình thường, nhưng camera gắn ngực chỉ ghi được đến khoảnh khắc hắn bước xuống bậc đầu tiên. Sau đó toàn bộ hình ảnh biến thành nhiễu trắng. + +Một camera hành lang tạm thời đã biến mất. Nhóm kia lấy nó. + +Tiến đứng trước góc tường trống, sắc mặt lạnh xuống. Camera đó không ghi được nhiều, nhưng trong bộ nhớ có thể còn hình hắn lắp thiết bị, hình hắn kiểm tra nền, thậm chí một vài giây trước khi tín hiệu nhiễu. Nếu chúng khôi phục được dữ liệu, chúng sẽ biết hắn không phải kẻ tình cờ. + +Có người từng nói công nghệ là ký ức trung thực nhất. Tiến biết câu đó sai. Có những nơi không cho phép con người mang ký ức ra ngoài. Và có những kẻ biết cách đánh cắp phần ký ức còn sót lại. Hắn dọn sơ hiện trường, che lại tấm kim loại, kéo kệ sắt về vị trí cũ nhưng không bắt chặt bu lông. Sau đó, hắn thay khóa, thêm một lớp xích, lắp camera độc lập ở góc khuất và rời khỏi Ngọc Trục trước khi trời tối. + +Trên đường về, điện thoại rung. Là một thông báo từ ứng dụng giao hàng. Đơn hàng nước đóng chai số lượng lớn mà hắn đặt qua một đầu mối vừa bị hủy vì “hết hàng đột xuất”. Tiến đọc lại thông báo một lúc rồi mở bản đồ. La Phù cách đây không xa. Đêm đó, hắn lái xe về phía những kho hàng không ngủ. + +Chương 7: La Phù Không Ngủ + +La Phù về đêm không yên tĩnh như người ngoài tưởng. + +Khi các khu dân cư bắt đầu tắt đèn, những dãy kho ở phía Tây thành phố vẫn còn sống. Xe tải ra vào lặng lẽ. Cửa cuốn kéo lên kéo xuống. Đèn trắng trong các kho hàng rọi qua khe cửa, cắt bóng người thành những mảnh dài trên nền bê tông. Mùi bánh kẹo, nhựa đóng gói, giấy carton, dầu máy và khói thuốc trộn vào nhau thành một thứ mùi rất riêng, vừa ngọt vừa khét. + +Trước Hồng Nhật, La Phù là nơi người ta nghĩ đến mỗi khi cần bánh kẹo, hàng khô, hàng Tết, hàng buôn sỉ. Sau Hồng Nhật, nơi này trở thành cái dạ dày cuối cùng của phía Tây Hà Nội. Ai giữ được La Phù, người đó giữ được thức ăn. Ai giữ được thức ăn, người đó có người đi theo. + +Tiến không đi xe của mình vào sâu. Hắn gửi xe ở một điểm cách khu kho gần một cây số, thay áo sơ mi bằng áo phông cũ, đeo khẩu trang, đội mũ lưỡi trai, rồi đi bộ qua những con đường nhỏ. Vai trái vẫn đau sau cú ngã ở Ngọc Trục. Mỗi lần nâng tay quá cao, cơ bả vai lại nhói lên. Hắn mua một túi đá nhỏ ở cửa hàng ven đường, áp qua lớp khăn mỏng vài phút rồi bỏ đi trước khi chủ quán kịp nhớ mặt. + +Việc thu mua vật tư không thể làm ồ ạt. Nếu một người đột nhiên mua hàng trăm thùng nước, hàng nghìn gói thực phẩm khô, hàng chục thùng thuốc sát trùng, người bán có thể vui lúc đầu, nhưng sau đó sẽ nhớ mặt. Khi hỗn loạn đến, ký ức của người khác có thể giết mình nhanh hơn dao. + +Tiến chia danh sách thành từng nhóm nhỏ: nước, đồ khô, đồ hộp, bánh năng lượng, muối, đường, sữa bột, thuốc cơ bản, túi rác dày, băng keo, màng PE, hộp nhựa kín. Một phần mua qua sàn thương mại điện tử, gửi về quê cho mẹ bằng nhiều tên người nhận khác nhau. Một phần đặt qua các đại lý nhỏ, chuyển về kho Ngọc Trục sau khi cải tạo sơ bộ. Một phần mua trực tiếp ở La Phù, trả tiền mặt, không để lại thông tin dài dòng. + +Nhưng đêm nay, La Phù có thứ khác thường. Tiến nhận ra điều đó sau chưa đầy mười phút. + +Có quá nhiều xe tải nhỏ không biển hiệu tập trung quanh ba kho phía trong. Chúng không bốc bánh kẹo hay hàng khô, mà bốc nước đóng chai. Khối lượng vượt xa mua bán lẻ: từng pallet nước được xe nâng đưa thẳng lên thùng xe. Các tài xế không hút thuốc, không cười nói, không mặc cả. Họ nhận hàng, ký giấy, đóng cửa thùng, rời đi theo từng chiếc cách nhau khoảng năm phút. + +Có tổ chức. Có tiền. Có lịch. Tiến đứng dưới mái hiên một cửa hàng tạp hóa, giả vờ xem bảng giá sỉ, mắt nhìn phản chiếu trong tấm kính cũ phía trước. Một xe tải màu trắng vừa lăn bánh ra khỏi kho số 17. Mép dưới thùng xe có dòng chữ nhỏ gần như bị bụi che mất. + +**LP-17** + +Cùng ký hiệu với chiếc xe ở Ngọc Trục. Tiến lạnh mặt. La Phù không chỉ là nơi nhóm kia mua hàng. Nó là một phần trong tuyến tiếp vận của chúng. + +“Anh lấy gì?” + +Chủ cửa hàng, một người phụ nữ ngoài bốn mươi, chống tay lên quầy hỏi. Tiến quay lại, chọn vài thùng bánh quy mặn, nước khoáng loại nhỏ, một ít lương khô nội địa, rồi hỏi bâng quơ: + +“Dạo này nước bán chạy thế chị?” + +“Trời nóng mà. Nhà nào chả mua.” + +“Nhưng bên kia lấy nhiều thật.” + +Người phụ nữ liếc về phía kho số 17, rồi hạ giọng. + +“Mấy hôm nay rồi. Người lạ, trả tiền nhanh, không mặc cả. Lấy toàn nước, muối, đường, đồ hộp. Có tiền thì bán thôi.” + +“Công ty nào?” + +“Không biết. Họ không nói. Có người bảo chuẩn bị cứu trợ mùa nóng, có người bảo làm sự kiện.” Chị ta hừ một tiếng. “Nhưng ai làm sự kiện mà mua cả xe nước lúc nửa đêm?” + +Tiến trả tiền, không hỏi thêm. Hắn rời cửa hàng, vòng sang con đường phía sau kho. Ở đó có một dãy tường thấp, phía sau chất đầy vỏ thùng carton và pallet hỏng. Tiến leo lên một chồng pallet, nhìn qua khe giữa hai tấm tôn. + +Bên trong kho số 17, hàng hóa đã được phân loại thành từng khu. Nước đóng chai xếp bên trái. Đồ hộp và bánh kẹo bên phải. Góc sâu nhất có vài thùng màu trắng dán băng đỏ, không giống hàng thương mại thông thường. Một người đàn ông mặc áo sơ mi đen đang đứng giữa kho, tay cầm máy tính bảng, kiểm tra danh sách. + +Tiến nhìn người đó. Ban đầu chỉ là cảm giác quen. Sau đó, ký ức từ tầng hầm Mễ Trì đâm thẳng vào lồng ngực hắn như một lưỡi dao cũ. Cùng dáng đứng ấy. Cùng cách nghiêng đầu khi nghe cấp dưới báo cáo. Cùng bàn tay trái luôn đeo một chiếc nhẫn đen ở ngón áp út. Người đàn ông trong kho số 17 trẻ hơn so với ký ức của Tiến. Da chưa sạm vì nắng độc, thân hình chưa gầy đi vì thiếu nước, ánh mắt vẫn còn vẻ bình thản của một kẻ sống trong thế giới có luật pháp. Nhưng gương mặt đó, Tiến không thể nhầm. + +Ba năm sau, chính gã đã cúi xuống nhìn hắn trong tầng hầm Mễ Trì và nói: + +“Mày vốn không nên sống lâu đến thế.” + +Ở hiện tại, gã đang đứng giữa kho nước của La Phù, chỉ huy người khác bốc hàng lên xe. Một người bên cạnh bước tới, đưa cho gã tập giấy. + +“Anh Kha, tuyến phía Tây còn thiếu ba xe nước. Kho bên Hà Đông báo chỉ giao được một nửa.” + +Gã đàn ông cầm giấy, không ngẩng đầu. Ngón tay cái của hắn chậm rãi miết qua chiếc nhẫn đen một vòng, như thể đang lau đi một hạt bụi vô hình. + +“Đỗ sang nguồn dự phòng,” hắn nói. Giọng rất nhẹ, nhẹ đến mức người nghe phải im lặng mới nghe rõ. “Trước ngày 22 phải xong.” + +Tiến nghe rõ cái tên ấy. + +**Đỗ Minh Kha.** + +Trong kiếp trước, cái tên này từng được nhắc đến sau vụ thanh trừng La Phù. Không ai biết hắn bắt đầu từ đâu, chỉ biết những nhóm nhỏ kiểm soát kho nước và kho thực phẩm phía Tây lần lượt bị nuốt sạch trong chưa đầy hai tuần. Người sống sót gọi hắn là Kha Đen, không phải vì hắn mặc đồ đen, mà vì nơi nào hắn đi qua, nơi đó không còn ai dám bật đèn. + +Tiến từng đối đầu với hắn nhiều lần. Lần cuối cùng là ở Mễ Trì. Một tài xế bước vào, đưa thêm danh sách. Đỗ Minh Kha ký rất nhanh, rồi quay đầu nhìn về phía vách tôn. Tiến lập tức cúi xuống. Ánh mắt gã quét qua khe hở nơi hắn vừa nhìn lén. Không dừng lâu. Không phát hiện. Nhưng chỉ một khoảnh khắc đó cũng đủ làm lớp da sau gáy Tiến lạnh buốt. Điều khiến hắn chú ý không chỉ là ánh mắt. + +Đỗ Minh Kha luôn đứng ở vị trí có đường thoát. Sau lưng là lối dẫn vào khu văn phòng kho. Bên phải là cửa phụ. Bên trái là xe nâng và hai người của hắn. Ngay cả khi chỉ ký giấy, hắn cũng không đứng ở nơi không kiểm soát được đường lui. Một con dao trong đêm không giải quyết được loại đối thủ này. + +Nếu giết gã bây giờ, Tiến có thể trả được một phần thù. Nhưng gã chỉ là một mắt xích. Giết một mắt xích mà chưa biết dây xích nối về đâu chỉ khiến toàn bộ hệ thống chuyển hướng sang hắn. Quan trọng hơn, hắn chưa biết Đỗ Minh Kha có nhớ tương lai không, hay chỉ nhận lệnh từ một nhóm biết trước Hồng Nhật. + +Tiến lặng lẽ rời khỏi dãy tường, quay lại con đường chính. Không giết vội. Không để lộ mình. Không trả thù khi chưa biết bàn tay nào đang cầm chuôi dao phía sau Đỗ Minh Kha. Đó là ba nguyên tắc hắn buộc mình phải nhớ trong từng bước chân rời khỏi La Phù. + +Đêm đó, hắn không tiếp tục mua hàng. Hắn quay về Ngọc Trục, khóa cửa kho từ bên trong, ngồi giữa nhà kho trống tới gần sáng. Bên ngoài, tiếng xe tải trên đường xa vẫn vọng lại từng đợt. Bên trong, ký hiệu mặt trời đỏ dưới nền vẫn nằm im dưới lớp kệ sắt cũ. + +Tiến mở sổ tay, viết bốn dòng. + +**La Phù: nhóm bí ẩn thu gom nước.** + +**LP-17 liên quan Ngọc Trục.** + +**Đỗ Minh Kha đã xuất hiện trước Hồng Nhật.** + +**Không giết vội. Phải biết hắn thuộc về ai.** + +Khi bình minh bắt đầu hắt ánh sáng xám qua mái tôn, điện thoại chính của hắn rung lên. Là Trần Thanh Thủy. Tin nhắn chỉ có một câu: + +**Tôi thấy anh ở La Phù tối qua. Người đàn ông đó tên Đỗ Minh Kha. Tôi nghĩ anh biết hắn là ai.** + +Tiến đọc lại dòng tin nhắn rất lâu. Thủy không chỉ theo dõi hắn. Cô cũng đã nhìn thấy Kha. Và điều đó có nghĩa là cô đang bước vào vùng nguy hiểm nhanh hơn hắn dự tính. + +Chương 8: Những Người Biết Quá Nhiều + +Thủy chọn một quán cà phê nhỏ nằm trong con ngõ gần đường Láng. + +Quán không đẹp, không yên tĩnh tuyệt đối, nhưng cũng khó bị cô lập. Quán nằm giữa khu dân cư đông, có hai lối ra, bàn ghế đặt sát nhau, khách ngồi rải rác đủ để che tiếng nói nhưng không quá đông để bị chen lấn. Với một phóng viên điều tra, đó là lựa chọn hợp lý. Với một người đang sợ bị theo dõi, đó là lựa chọn càng hợp lý hơn. + +Tiến đến trước giờ hẹn mười phút. Hắn không vào ngay. Hắn đi qua quán một lần, vòng sang con ngõ phía sau, kiểm tra lối thoát, rồi mới quay lại. Thủy đã ngồi ở bàn trong góc, lưng không quay hẳn về phía cửa, mắt đặt trên ly cà phê nhưng rõ ràng đang nhìn phản chiếu trong kính. + +Cô cũng biết cách quan sát. Điều đó khiến Tiến vừa yên tâm vừa cảnh giác. + +“Anh đến sớm,” Thủy nói khi hắn ngồi xuống. + +“Em cũng vậy.” + +“Thói quen nghề nghiệp.” + +“Của anh cũng thế.” + +Hai người im lặng vài giây. Ngoài đường, một người bán hàng rong đẩy xe đi ngang qua, tiếng loa nhỏ phát đi phát lại câu rao dưa hấu ngọt. Một đứa trẻ khóc vì làm rơi kem. Hai nhân viên văn phòng bàn chuyện deadline. Mọi thứ bình thường đến mức cuộc nói chuyện sắp diễn ra giữa hai người trở nên như một vết nứt nhỏ trên mặt kính. + +Thủy đặt điện thoại lên bàn. Trên màn hình là một bức ảnh chụp từ xa. Ảnh hơi mờ, nhưng vẫn đủ thấy Tiến đứng gần khu kho La Phù trong đêm, đầu đội mũ, mặt đeo khẩu trang. Phía xa là xe tải trắng LP-17. + +“Anh theo dõi họ?” cô hỏi. + +“Em cũng vậy?” + +“Tôi theo dõi xe nước, không bám đuôi anh.” Thủy kéo ảnh sang bên, hiện hai khung giờ khác nhau. “Tôi lấy biển xe ở điểm giao, đối chiếu camera cửa hàng còn lưu cục bộ rồi chờ ở tuyến ra. Hai điểm đứng, không chạy sau một chiếc xe đủ lâu để nó phát hiện.” + +Tiến nhìn lại góc chụp. Cô đã giữ khoảng cách tốt hơn hắn tưởng. + +“Vẫn nguy hiểm.” + +“Khác với liều.” + +Thủy nhìn hắn. + +“Vậy anh thừa nhận mình biết nhóm đó là ai?” + +“Không.” + +“Nhưng anh biết họ nguy hiểm.” + +“Đủ nguy hiểm để em không nên dính vào.” + +Cô bật cười rất khẽ. + +“Câu này nghe quen. Từ hôm gặp lại ở Đại Hà đến giờ, anh luôn khuyên tôi đừng lại gần thứ gì đó. Đừng ở Đại Hà khi mất điện. Đừng điều tra dữ liệu bằng máy cá nhân. Đừng đi thực địa một mình. Đừng dính vào nhóm ở La Phù.” Cô hơi nghiêng người về phía trước. “Vấn đề là anh chưa bao giờ nói vì sao.” + +Tiến nhìn ly nước lọc trước mặt. Đá trong ly tan rất nhanh. Nước bám thành giọt trên thành thủy tinh, trượt xuống mặt bàn thành một vệt ẩm nhỏ. + +“Vì nói ra em sẽ không tin.” + +“Nếu không có những file kia, tôi sẽ nghĩ anh bị hoang tưởng.” Thủy đặt một tập giấy mỏng lên bàn. “Nhưng dữ liệu không biết hoang tưởng.” + +Tiến hạ mắt xuống tập giấy. Trên đó là những dòng log bị lỗi mã hóa. Hắn thấy ba cái tên: **Ngọc Trục**, **Láng**, **Hồ Tây**. Bên dưới, một dòng giữ mắt hắn lại. + +**LE QUOC TIEN / STATUS: RETURNED / UNVERIFIED** + +Đó không phải cửa sổ HANOI-07 trên máy hắn, mà là dữ liệu Thủy lấy được từ một hệ thống khác. + +“Em đã mở sâu quá rồi,” Tiến nói. + +“Không sâu bằng anh.” + +“Em không biết mình đang đụng vào thứ gì.” + +“Vậy nói cho tôi biết.” + +Tiến đặt hai bàn tay lên mép bàn, mắt dừng ở tập log giữa họ. + +Hắn đã chuẩn bị rất nhiều thứ: kho, nước, vật tư, bản đồ, tuyến rút, cả những lời nói dối dành cho người ngoài. Nhưng hắn chưa bao giờ chuẩn bị được một câu trả lời đủ ngắn cho sự thật. Làm sao nói với một người rằng hơn một tháng nữa bầu trời sẽ đổi màu, thành phố sẽ bắt đầu chết, và những dữ liệu cô đang điều tra có liên quan đến một thứ nằm dưới lòng Hà Nội? + +Thủy lấy thêm một bức ảnh đặt lên bàn. Đó là Đỗ Minh Kha trong kho La Phù, tay cầm máy tính bảng, đứng cạnh những pallet nước. + +“Tôi tra được một phần về hắn. Đỗ Minh Kha. Trước đây làm trong một công ty logistics, sau đó chuyển sang tư vấn chuỗi cung ứng. Hai năm gần đây gần như không xuất hiện công khai. Nhưng có nhiều pháp nhân nhỏ liên quan đến hắn đang mua nước, muối, đồ hộp, pin và máy phát. Đây không phải mua lẻ, mà là gom hàng có hệ thống.” + +“Em không nên điều tra hắn trực tiếp.” + +“Tôi biết.” Thủy ngừng một chút. “Vì vậy tôi mới gọi anh.” + +Tiến quay sang cô. Đó không phải câu nói của một người muốn được bảo vệ. Đó là câu nói của một người biết mình đang thiếu mảnh ghép và chấp nhận hợp tác với kẻ đáng nghi nhất trong danh sách. + +“Ngày 22 tháng 6,” hắn nói chậm rãi, “đừng ở nơi đông người. Đừng ở trong trung tâm thương mại. Đừng đứng ngoài trời quá lâu sau 12 giờ trưa. Chuẩn bị nước, thuốc, pin, sạc dự phòng, bản đồ giấy. Nếu có thể, rời khỏi các tòa nhà kính trước ngày đó.” + +Thủy im lặng. Câu trả lời không trực tiếp, nhưng nặng hơn bất kỳ lời thú nhận nào. + +“Ngày 22 có chuyện gì?” + +“Anh không thể chứng minh.” + +“Tôi không hỏi anh có chứng minh được không.” + +“Thủy.” + +“Có chuyện gì?” + +Tiến nhìn ra cửa. Một người đàn ông mặc áo chống nắng vừa dừng xe trước quán, mua cà phê mang đi. Một người phụ nữ cầm ô đi ngang qua. Thành phố vẫn đang sống trong nhịp điệu bình thường, vô tư đến tàn nhẫn. + +“Bầu trời sẽ đổi màu,” hắn nói. “Mặt trời sẽ đỏ. Nhiệt độ sẽ tăng vượt mọi dự báo. Ban đầu người ta sẽ nghĩ đó là một hiện tượng thời tiết cực đoan. Sau đó điện sẽ quá tải, nước sẽ cạn, bệnh viện sẽ vỡ trận. Hà Nội sẽ chết từng phần.” + +Thủy không cười. Cũng không gọi hắn là điên. Nhưng sắc mặt cô trắng hơn một chút. + +“Nếu không phải anh nói, nếu không phải mấy dữ liệu kia, tôi sẽ đứng dậy ngay bây giờ.” + +“Vậy sao em chưa đi?” + +“Vì tôi từng mơ thấy cảnh đó.” + +Tiến khựng lại. Thủy nhìn xuống ly cà phê đã tan đá, giọng nhỏ hơn. + +“Không rõ. Không liên tục. Cũng không giống ký ức. Chỉ là vài giấc mơ. Hồ Tây cạn nước. Cửa kính một trung tâm thương mại phủ hơi nước. Trẻ con khóc trong bóng tối. Một hành lang nóng đến mức tôi không thở được.” Cô ngẩng lên nhìn hắn. “Tôi từng nghĩ do mình làm đề tài môi trường nên ám ảnh. Nhưng sau khi thấy dữ liệu Ngọc Trục, Láng, Hồ Tây… tôi không chắc nữa.” + +Thủy mở một thư mục trong điện thoại có tên **GIAC_MO_2028**. Ba đoạn ghi âm ngắn được tạo lúc gần sáng, khi cô vừa tỉnh và sợ mình sẽ quên. Phần mềm chuyển giọng thành chữ là bản cũ từ dự án hầm ngập năm 2023; cô đã tắt đồng bộ từ lâu, nhưng biểu tượng bộ đệm vẫn hiện một lần rồi biến mất khi mở tệp dữ liệu Ngọc Trục. + +“Em giữ bản ngoại tuyến,” cô nói. “Ít nhất em nghĩ vậy.” + +Tiến không vội kết luận. Những giấc mơ ấy chưa đủ để chứng minh Thủy từng sống qua tương lai, nhưng cũng khó coi là ngẫu nhiên. HANOI-07 có thể đã tác động tới cô; một lớp dữ liệu nào đó từng chạm vào cô; hoặc còn tồn tại cơ chế mà hắn chưa biết. Mỗi giả thuyết kéo theo một kiểu nguy hiểm khác. Thủy gấp tờ log lại. + +“Anh từng trải qua rồi?” + +Câu hỏi rơi xuống rất nhẹ. Nhưng cả hai đều biết nó nặng thế nào. Tiến không đáp ngay. Nếu hắn nói có, Thủy sẽ bước qua một ranh giới không thể quay lại. Nếu hắn nói không, mọi lời cảnh báo vừa rồi sẽ thành vô nghĩa. Cuối cùng, hắn chọn một câu lưng chừng. + +“Anh đã thấy đủ để biết mình phải chuẩn bị.” + +Thủy nhìn hắn rất lâu. + +“Còn tôi thì sao?” + +“Em nên dừng lại.” + +“Không.” + +“Đây không phải bài báo.” + +“Tôi biết.” + +“Cũng không phải chuyện em có thể công bố để cứu người.” + +“Tôi cũng biết.” Giọng Thủy hạ thấp. “Nhưng nếu tôi dừng lại, tôi sẽ trở thành loại người mà tôi từng điều tra.” + +Tiến xoay cây bút giữa hai ngón tay. Ngoài kia, Hà Nội vẫn ồn ào; ở chiếc bàn nhỏ trong góc quán, một liên minh tạm thời đang thành hình. Chưa phải tin tưởng, càng chưa phải tình cảm — chỉ là hai người cùng nhìn thấy một khe nứt trên bề mặt thành phố. Tiến lấy bút, viết lên mép tờ giấy ba chữ. + +**Không dùng mạng.** + +Rồi hắn viết tiếp: + +**Không nói điện thoại.** + +**Không gửi file gốc.** + +**Không tới Ngọc Trục một mình.** + +Thủy nhìn danh sách, rồi gật đầu. + +“Tôi có một điều kiện.” + +“Nói.” + +“Khi anh biết nơi nào sắp có người chết hàng loạt, anh phải nói cho tôi.” + +Tiến hiểu cô đang nhắc đến Đại Hà. Hắn không trả lời ngay. Cứu một người dễ. Cứu một nhóm người khó. Cứu hàng nghìn người trước khi thảm họa xảy ra gần như là tự sát. Nếu hắn cố cảnh báo quá sớm, hắn sẽ bị coi là kẻ điên, hoặc tệ hơn, bị những người biết sự thật kéo vào tầm ngắm. Nhưng hình ảnh Lò Hấp Hà Đông vẫn nằm trong đầu hắn như một vết bỏng. + +“Anh sẽ nói khi có thể,” hắn đáp. + +“Không đủ.” + +“Đó là tất cả những gì anh có thể hứa lúc này.” + +Thủy mím môi, không hài lòng, nhưng cũng không ép thêm. Trước khi rời đi, cô dừng lại cạnh bàn, nhìn thẳng vào Tiến. + +“Câu cuối.” + +“Ừ.” + +“Anh có tin một người biết trước tương lai không?” + +Tiến ngẩng đầu. Câu hỏi có thể là thăm dò, cũng có thể là một lời thú nhận được bọc kín. Dù thế nào, Thủy không chỉ hỏi về hắn. Cô đang hỏi về chính mình. + +ARC 2: HỒNG NHẬT GIÁNG LÂM + +Chương 9: Ngày 22 Tháng 6 + +Ngày 22 tháng 6 năm 2028 bắt đầu bằng một buổi sáng không có gì đặc biệt. Ít nhất, với phần lớn người Hà Nội, nó trông như vậy. + +Sáu giờ ba mươi, đường Nguyễn Trãi đã đông xe. Người đi làm cau có vì nắng sớm hắt thẳng vào mặt. Hàng ăn sáng dưới chân chung cư vẫn bốc khói. Một nhóm học sinh nghỉ hè đứng trước cửa hàng tiện lợi, vừa ăn kem vừa xem điện thoại. Trên mạng xã hội, người ta chia sẻ ảnh nhiệt kế ngoài trời 39°C, kèm những câu đùa quen thuộc: Hà Nội hôm nay chín tái, ra đường nhớ mang theo vỉ nướng. + +Tiến không cười. Hắn đang ở kho Ngọc Trục. + +Sau hơn một tháng chuẩn bị, nơi này đã khác rất nhiều so với ngày đầu hắn nhận chìa khóa. Tường bao được gia cố thêm lớp lưới thép phía trong. Cổng chính thay khóa hai lớp, có chốt ngang tự chế. Trong kho, các dãy hàng được xếp kín nhưng không quá lộ: nước đóng chai, thùng chứa nước rỗng, thực phẩm khô, thuốc cơ bản, quạt công nghiệp, dây điện, ắc quy, tấm pin mặt trời, bạt cách nhiệt, túi rác dày, cát, vôi bột, dụng cụ sửa chữa. + +Không đủ cho một cộng đồng lớn. Nhưng đủ cho một lõi sinh tồn. Và trong tận thế, người có lõi sinh tồn sẽ có cơ hội xây thành trì. + +Tiến kiểm tra bồn nước lần thứ ba trong ngày. Hắn không tin hệ thống cấp nước thành phố sẽ duy trì ổn định sau hôm nay. Không phải ngay lập tức, nhưng khi nhiệt độ tăng, nhu cầu tăng, điện quá tải, bơm yếu, đường ống cũ gặp áp lực, sự cố sẽ dây chuyền. Người bình thường chỉ thấy vòi nước yếu đi. Tiến thấy một hệ thống bắt đầu đứt mạch. + +Điện thoại rung. Là mẹ. Tiến chần chừ vài giây rồi mới bấm nghe. + +“Con nghe đây.” + +“Tiến à, hôm nay ở quê cũng nóng quá. Mẹ vừa ra chợ về mà hoa hết cả mắt.” + +“Mẹ uống nước chưa?” + +“Rồi. Anh dặn suốt, mẹ nhớ mà. Mấy thùng nước với thuốc con gửi về, mẹ xếp trong buồng rồi. Hàng xóm còn hỏi con buôn hàng à.” + +“Nếu ai hỏi, mẹ cứ bảo công ty con thanh lý đồ.” + +“Ừ. Mà con ở Hà Nội thế nào? Trên đó chắc nóng hơn.” + +Tiến rà khoảng sân kho. Nắng phủ trắng mặt bê tông. Xa xa, mái tôn các xưởng lân cận hắt sáng chói mắt. + +“Con ổn. Hôm nay mẹ đừng ra ngoài sau mười một giờ. Đóng bớt cửa hướng nắng. Nếu mất điện thì xuống nhà dưới, đừng ở phòng mái.” + +“Mất điện gì mà giữa ngày?” + +“Cứ nghe con.” + +Đầu dây bên kia im lặng một chút. + +“Tiến này.” + +“Vâng?” + +“Có chuyện gì thật à?” + +Tiến từng nghĩ mình có thể giấu mẹ đến phút cuối. Nhưng người mẹ nào cũng có thứ trực giác kỳ lạ với con mình. Không cần biết Hồng Nhật, không cần nhìn thấy dữ liệu, bà vẫn nhận ra giọng hắn đã khác. + +“Có thể thời tiết sẽ rất xấu,” hắn nói. “Mẹ cứ coi như bão lớn.” + +“Bão thì còn biết đường tránh.” + +“Lần này cũng vậy. Mẹ tránh bằng cách ở trong nhà, uống nước, giữ thuốc bên người, và đừng tiếc mấy thứ con gửi về.” + +Bà thở dài. + +“Ừ. Mẹ nghe.” + +Sau khi cúp máy, Tiến đứng im một lúc. Hắn đã cứu được mẹ chưa? Chưa. Không ai được cứu trước khi thảm họa thật sự đi qua. + +Mười một giờ mười, Thủy gọi từ tòa soạn. + +Phía bên kia rất ồn. Tiếng bàn phím, tiếng người gọi nhau, tiếng biên tập viên hỏi có ai kiểm tra ảnh mặt trời chưa. Thủy không ở Ngọc Trục. Tiến đã yêu cầu cô ở nơi có thể nhìn thấy phản ứng xã hội, và cô chọn tòa soạn vì ở đó có dữ liệu, tin tức, đường dây nguồn tin và đủ người để xác nhận chuyện sắp xảy ra không phải ảo giác cá nhân. + +“Anh đang ở kho?” cô hỏi. + +“Ừ.” + +“Trên mạng bắt đầu có ảnh mặt trời hơi đỏ. Nhiều người bảo do camera điện thoại.” + +“Đừng nhìn trực tiếp.” + +“Tôi biết.” Cô ngừng một chút. “Anh chắc là hôm nay?” + +Hắn liếc đồng hồ. 11 giờ 12 phút. + +“Chắc.” + +Đầu dây bên kia im lặng vài giây. + +“Ở đây vẫn có người đùa. Có người nói nếu tận thế thì khỏi họp giao ban.” + +“Họ sẽ không đùa lâu đâu.” + +Mười hai giờ, nhiệt độ ngoài sân Ngọc Trục đã vượt 42°C theo máy đo của Tiến. Không khí rung nhẹ trên mặt bê tông. Mùi nhựa nóng từ mấy tấm bạt mới phảng phất trong kho. Xa xa, tiếng chó sủa vọng lại rồi tắt. Thành phố như đang nín thở trước một thứ chưa ai gọi tên. + +12 giờ 15 phút, Thủy gọi lại. Cô không nói ngay. Trong điện thoại có tiếng người xôn xao. + +“Tiến,” cô nói rất nhỏ. “Mặt trời…” + +Hắn liếc đồng hồ. 12 giờ 16 phút. + +“Vào trong. Kéo rèm. Đừng đứng ngoài ban công.” + +“Bầu trời đang đổi màu.” + +“Thủy.” + +“Tôi biết.” + +12 giờ 17 phút. Ánh sáng ngoài sân kho Ngọc Trục đổi màu. + +Ánh sáng không tối đi cũng không sáng hơn; toàn bộ màu sắc chỉ bị kéo lệch sang một dải đỏ mỏng. Mái tôn xám chuyển thành màu chì cháy. Tường bê tông trắng ngả sang hồng bẩn. Bóng của các cột sắt trên sân kéo dài, run lên, rồi ổn định trong một thứ ánh sáng khiến mắt người khó chịu. + +Trên bầu trời Hà Nội, mặt trời chuyển sang màu đỏ sẫm. Nó không đỏ rực như hoàng hôn, mà sâu, nặng và lạnh như con mắt khổng lồ trong ký ức cuối cùng của Tiến. + +Tiếng còi xe ngoài xa bắt đầu rối loạn. Một người ở xưởng bên cạnh chửi thề rất to. Có tiếng cửa kéo mở ầm ầm. Điện thoại của Tiến rung liên tục. Tin nhắn, thông báo, cuộc gọi nhỡ, mạng xã hội bùng lên trong vài phút. Ở đầu dây bên kia, Thủy thở rất khẽ. + +“Anh biết thật.” + +Tiến không đáp. Hắn nhìn bảng cảm biến nhiệt độ đặt trong kho. 44°C. 46°C. 48°C. Nhiệt độ ngoài sân tăng nhanh hơn bất kỳ mô hình thời tiết nào cho phép. + +Từ điện thoại, tiếng trong tòa soạn hỗn loạn dần. + +“Ảnh thật à?” + +“Ai gọi bên khí tượng đi!” + +“Đừng đăng vội, xác minh đã!” + +“Trời ơi ngoài kia đỏ thật!” + +Ngoài đường, một tiếng va chạm lớn vang lên từ hướng Đại lộ. Tiến chạy ra cửa kho, nhìn qua khe cổng. Một người đi xe máy đã ngã giữa đường, không rõ vì lóa mắt hay vì cố ngẩng đầu nhìn bầu trời. Hai chiếc xe phía sau phanh gấp, còi xe kéo dài thành một âm thanh hỗn loạn. Một người đàn ông đứng dưới nắng, giơ điện thoại livestream, miệng còn hét “mọi người nhìn đi” trước khi loạng choạng ngồi sụp xuống vỉa hè. + +Xa hơn, một trạm biến áp nhỏ gần khu xưởng phát ra tiếng nổ lách tách. Không lớn. Không gây cháy ngay. Nhưng đủ để vài người chạy ra khỏi nhà, nhìn lên dây điện với vẻ mặt lần đầu tiên thật sự sợ hãi. Tiến đứng giữa kho Ngọc Trục, một mình trước những dãy nước và vật tư, nhưng hắn không còn cảm giác mình đang đứng ngoài thế giới. Hắn đang đứng trong lõi của cơn bão, chỉ là cơn bão này không có gió. + +49°C. 50°C. 51°C. Khoảnh khắc đó, toàn bộ tiếng ồn của thế giới bên ngoài như bị đẩy ra xa. Tiến không còn nghe rõ còi xe, tiếng người la hét hay tiếng điện thoại rung. Hắn chỉ nghe tiếng tim mình đập đều, chậm, nặng. + +Hồng Nhật đã đến. Lần thứ hai trong đời hắn. Và lần này, hắn có một căn cứ, một bản đồ, một đồng minh chưa chắc đáng tin, một kẻ thù đã xuất hiện sớm, cùng một cánh cửa HN-07 chưa mở hết dưới nền kho Ngọc Trục. Thế giới bắt đầu kết thúc. + +Trên mái kho, tấm pin đầu tiên nứt một đường mảnh vì nhiệt. Tiến nhìn vết nứt lan dưới lớp kính và hiểu bốn mươi bốn ngày chuẩn bị vừa kết thúc; từ đây, mọi sai số đều phải trả bằng thứ đang sống. + +Chương 10: Lò Hấp Hà Đông + +Ngày thứ bảy sau Hồng Nhật, trung tâm thương mại Đại Hà ở Hà Đông bắt đầu đông bất thường. + +Tin đồn lan rất nhanh: trong đó còn mát, còn nước, còn điều hòa, còn siêu thị, còn nhà vệ sinh. Người từ các khu dân cư xung quanh đổ về theo từng đợt. Ban đầu là các gia đình có trẻ nhỏ, người già, phụ nữ mang thai. Sau đó là sinh viên, dân văn phòng, người thuê trọ không chịu nổi phòng nóng. Rồi đến những người mang theo túi lớn, chiếu, quạt sạc, bình nước, thậm chí cả thú cưng. + +Trung tâm thương mại sáng đèn như một con tàu lớn giữa biển nóng. Và ai cũng muốn leo lên con tàu đó. Tiến đứng trong bãi xe đối diện, nhìn dòng người đi vào qua lớp kính đen của ô tô. Hắn không muốn tới đây. Nhưng hắn đã hứa với Thủy. Khi anh biết nơi nào sắp có người chết hàng loạt, anh phải nói cho tôi. + +Hắn đã nói. Thủy đang ở bên trong. + +Cô vào từ sáng với tư cách phóng viên, mang theo máy ảnh, pin dự phòng, sổ tay và một balo nước. Trước khi vào, Thủy đã đi một vòng ngoài nhà, chụp ba lối thoát, đánh dấu lối giao hàng Tiến từng chỉ và nhắn cho một đồng nghiệp mốc kiểm tra mỗi ba mươi phút. Cô tự đặt điều kiện rút: điện mất quá mười giây, cửa chính bắt đầu bị ép hai chiều, hoặc nhiệt trong sảnh tăng liên tục ba mức đo — chỉ cần một điều xảy ra, cô sẽ đi, không tranh luận với bài viết. + +Bài cô gửi về tòa soạn ban đầu chỉ là ghi nhận tình trạng người dân đổ về trung tâm thương mại để tránh nóng. Nhưng càng về trưa, nó không còn là bài viết nữa. Nó trở thành một bản ghi trước thảm họa. + +11 giờ 20 phút, Thủy gọi cho hắn. + +“Người vào quá đông.” + +“Ra đi.” + +“Chưa chạm ngưỡng rút. Tôi đang ở tầng một, cách lối giao hàng chưa tới ba phút và ban quản lý vừa đồng ý cho tôi xem tải máy phát. Tôi ở thêm tối đa hai mươi phút.” + +“Không gia hạn.” + +“Tôi biết. Hai mươi phút là trần.” + +“Bên trong còn giữ được trật tự vì điện chưa mất.” + +Đầu dây bên kia im lặng một giây. + +“Anh chắc hôm nay sẽ mất?” + +“Không chắc hôm nay. Nhưng chắc nơi đó không chịu được lâu.” + +“Ban quản lý nói có máy phát.” + +“Máy phát không được thiết kế để gánh hàng nghìn người trú nóng trong nhiều giờ. Điều hòa trung tâm, thang máy, chiếu sáng, kho lạnh, bơm nước, camera, quầy hàng, tất cả đều kéo tải. Nếu điện lưới chập chờn và người bên trong hoảng, máy phát không cứu được đâu.” + +Thủy hạ giọng. + +“Tôi đang cố thuyết phục họ giới hạn người vào.” + +“Họ có nghe không?” + +“Không đủ nhanh.” + +Tiến xoay người về phía lối vào chính. Dòng người vẫn đổ vào. + +Một người đàn ông cõng mẹ già trên lưng. Một phụ nữ bế con nhỏ, tay còn lại kéo túi đồ. Hai thanh niên khiêng một thùng nước, vừa đi vừa mắng nhau vì nóng. Một nhóm người chen ngang bị bảo vệ chặn lại, cãi cọ ngay trước cửa kính. Bên trong, ánh đèn trắng vẫn sáng, điều hòa vẫn thổi, âm nhạc từ khu mua sắm vẫn phát nhẹ, tạo ra ảo giác rằng nơi này an toàn. + +Nhưng Tiến biết một điều: địa ngục thường không bắt đầu bằng tiếng hét. Nó bắt đầu bằng việc quá nhiều người tin rằng mình đang ở nơi an toàn nhất. 12 giờ 05 phút, nhiệt độ ngoài trời chạm 52°C. Một cụ ông ngã quỵ trước cửa phụ phía Tây. + +Ban đầu không ai nghĩ ông chết. Người ta tưởng ông choáng vì nóng, đỡ ông vào trong, quạt, gọi nhân viên y tế. Mười phút sau, thêm hai người ngất ở khu vực bãi xe. Đám đông bắt đầu chen nhanh hơn vào cửa, không còn xếp hàng theo hướng dẫn. 12 giờ 28 phút, điện chớp lần đầu. + +Chỉ một cái nháy rất ngắn. + +Đèn trần tắt rồi sáng lại. Điều hòa ngừng thổi chưa đầy ba giây. Chưa tới ngưỡng mười giây, nhưng Thủy không chờ đủ điều kiện trên giấy. Cô nhắn đúng một câu cho Tiến — **TÔI RÚT** — rồi đi về lối giao hàng. Cùng lúc, một nhân viên y tế gọi cô giữ cửa phụ vì một cụ ông vừa ngã và đám đông đang ép ngược từ ngoài vào. Thủy giúp kéo người bệnh qua mép cửa chưa đầy hai phút. Hai phút đó khiến luồng người đổi hướng, chặn mất hành lang cô định dùng. + +Trong một không gian có hàng nghìn người đang căng thẳng, ba giây mất điện không dài; điều nguy hiểm là hàng nghìn người cùng tự sửa kế hoạch trong ba giây ấy. Tiếng trẻ con khóc lớn hơn. Người lớn bắt đầu hỏi nhau có chuyện gì. Một số người kéo nhau chạy về phía siêu thị mua thêm nước. Bảo vệ dùng loa yêu cầu giữ trật tự. + +12 giờ 46 phút, điện chớp lần thứ hai. Lần này lâu hơn. Mười hai giây. Khi đèn sáng lại, một quầy nước gần khu ẩm thực đã bị chen đổ. + +Thủy gửi cho Tiến một đoạn video ngắn. Khung hình rung mạnh. Trong video, người ta chen nhau trước kệ nước, tay với vào thùng hàng, nhân viên cố ngăn nhưng bị đẩy lùi. Một đứa trẻ khóc lạc giọng. Một người phụ nữ hét lên rằng mẹ mình không thở được. Ở góc hình, bảo vệ đang cố mở lối phụ cho người già ra ngoài, nhưng bên ngoài nắng nóng đến mức không ai muốn bước ra. + +Đoạn video khiến bàn tay Tiến siết chặt điện thoại. Kiếp trước, hắn chỉ xem được đoạn cuối của thảm họa Đại Hà. Lần này, hắn đang nhìn thấy nó hình thành từng bước. Hắn gọi lại cho Thủy. + +“Ra khỏi đó ngay.” + +“Tôi đang ở tầng một, gần cửa phụ.” + +“Đừng đi cửa chính. Đi lối giao hàng phía sau siêu thị. Nhớ đường anh chỉ không?” + +“Nhớ.” + +“Đi ngay.” + +“Còn người bên trong?” + +Tiến nhìn về cửa kỹ thuật nơi tiếng đập vẫn vọng qua lớp tường. + +“Em không kéo được tất cả ra.” + +“Tôi biết.” + +“Vậy đừng chết cùng họ.” + +Đầu dây bên kia có tiếng va đập và tiếng người la hét. Thủy thở gấp hơn, nhưng giọng vẫn giữ được bình tĩnh. + +“Tôi sẽ đưa được một nhóm ra. Có mấy người già và trẻ con ở gần tôi.” + +“Không quá mười người.” + +“Tiến.” + +“Không quá mười người. Nhiều hơn em sẽ không ra được.” + +Cô không trả lời. Cuộc gọi ngắt. 13 giờ 03 phút, điện mất lần thứ ba. Lần này, đèn không sáng lại ngay. + +Từ bên ngoài, trung tâm thương mại Đại Hà ở Hà Đông tối đi một mảng lớn như một con tàu vừa bị tắt máy giữa biển người. Đèn khẩn cấp đỏ bật lên từng dải. Cửa kính phản chiếu những bóng người chen chúc bên trong. Tiếng hét vọng ra mờ qua lớp kính dày, bị bóp méo thành một thứ âm thanh trầm đục. + +Đám đông bên ngoài bắt đầu đập cửa. Đám đông bên trong cũng muốn ra. Hai dòng người ép vào cùng một hệ thống cửa. Tiến xuống xe. + +Hắn không lao vào cửa chính. Hắn chạy vòng theo lối giao hàng phía sau, nơi hắn đã khảo sát từ ngày 10 tháng 5. Đường nội bộ chật hơn hắn nhớ, vì có vài xe giao hàng bị bỏ lại. Không khí nóng như đập vào mặt, mỗi lần hít vào cổ họng đều rát. Hắn kéo khẩu trang ướt lên mũi, đi sát tường để tránh ánh nắng trực tiếp. + +Cửa giao hàng phía sau bị khóa một lớp, nhưng chưa bị chặn hoàn toàn. Tiến dùng xà beng phá khóa. Tiếng kim loại gãy vang lên khô khốc. Bên trong, hành lang kỹ thuật tối và nóng. Điều hòa đã ngừng. Không khí đông đặc mùi mồ hôi, nhựa nóng và thức ăn hỏng. Từ xa, tiếng người la hét vọng lại từng đợt. Tiến bật đèn pin, soi dọc hành lang. + +“Thủy!” + +Không ai đáp. Hắn tiến vào thêm vài mét. + +Một cửa phụ bên trái bật mở. Thủy lao ra, mặt tái nhợt, tóc dính mồ hôi vào má. Sau lưng cô là sáu người: một bà cụ, hai đứa trẻ, một phụ nữ trẻ, một nhân viên siêu thị và một người đàn ông đang dìu một ông già thở dốc. + +“Còn người phía sau,” Thủy nói. + +“Không kịp.” + +“Còn—” + +“Không kịp!” + +Tiến gần như quát. Ánh mắt Thủy giữ ở hắn đúng một thoáng, rồi cô quay lại kéo tay đứa trẻ gần nhất. + +“Đi!” + +Họ chạy theo hành lang giao hàng ra ngoài. Tiến đi cuối, dùng xà beng chặn tạm cửa để ngăn dòng người bên trong tràn ngược ra lối hẹp. Hắn nghe thấy tiếng đập cửa từ phía sau. Tiếng gọi. Tiếng chửi. Tiếng cầu cứu. Có người nhìn thấy lối này. Có người đang cố lao theo. + +Tiến nhắm mắt một nhịp. Rồi đẩy cửa ngoài. Nắng đập vào mặt như một bức tường lửa. Nhóm người thoát ra loạng choạng chạy về phía bóng râm dưới mái che. Người phụ nữ trẻ ôm con khóc nấc. Nhân viên siêu thị ngồi bệt xuống đất, nôn khan. Bà cụ thở khò khè, môi tím lại. Thủy quỳ xuống kiểm tra bà, tay run nhưng vẫn cố giữ bình tĩnh. + +Tiến ngoái về tòa nhà phía sau. Trung tâm thương mại Đại Hà ở Hà Đông vẫn đứng đó, khổng lồ, tối dần bên trong lớp kính. Một nơi từng mát lạnh, sạch sẽ, sáng đèn. Bây giờ nó bắt đầu biến thành đúng thứ trong ký ức của hắn. + +Tối hôm đó, đoạn video cuối cùng từ bên trong Đại Hà lan ra trên mạng trước khi mất tín hiệu. Hình ảnh rung lắc, âm thanh vỡ vụn. Người ta chỉ nhìn thấy đèn khẩn cấp đỏ, những bàn tay đập vào cửa kính, một đứa trẻ khóc đến khản giọng, rồi màn hình tối đen. + +Thủy ngồi ở góc kho Ngọc Trục sau đó nhiều giờ, tay vẫn run. Cô đã rửa mặt ba lần nhưng vẫn cảm thấy trên da còn mùi mồ hôi và nhựa nóng của hành lang kỹ thuật. Cứ nhắm mắt lại, cô lại nghe tiếng người đập vào cánh cửa bị Tiến chặn tạm sau lưng. + +Đêm muộn, cô mở laptop định viết bài. Gõ được ba dòng, cô xóa. Gõ lại, lại xóa. Bài viết thật sẽ không được đăng. Bài viết được đăng sẽ không chứa tiếng trẻ con khóc, không chứa bàn tay đập cửa, không chứa khoảnh khắc cô kéo sáu người ra và bỏ lại nhiều hơn sáu mươi người phía sau. + +Từ ngày đó, những người sống sót không còn gọi nơi ấy là trung tâm thương mại nữa. Họ gọi nó là **Lò Hấp Hà Đông**. + +Chương 11: Thành Phố Bắt Đầu Chết + +Sau Lò Hấp Hà Đông, Hà Nội không còn cười về Hồng Nhật nữa. + +Những ngày đầu, người ta vẫn cố giữ một trật tự mong manh. Chính quyền phát khuyến cáo ở trong nhà, tránh ra đường vào buổi trưa, tiết kiệm nước, hạn chế dùng thiết bị điện công suất lớn. Các chuyên gia lên truyền hình giải thích về hiện tượng nhiệt bất thường, về áp lực đô thị, về nguy cơ sốc nhiệt. Nhưng mỗi ngày trôi qua, những lời giải thích càng giống giấy dán lên một vết nứt đang mở rộng. + +Nước đóng chai biến mất khỏi các kệ hàng trước tiên. Sau đó là đá viên. Rồi đến quạt sạc, pin dự phòng, máy phát mini, thuốc hạ sốt, oresol, khăn lạnh, bình giữ nhiệt. + +Người ta vẫn trả tiền, nhưng tiền bắt đầu yếu đi. Ở một số cửa hàng nhỏ, chủ hàng chỉ bán cho người quen. Một số nơi tăng giá gấp mười. Một số nơi không bán nữa, giữ hàng sau cửa cuốn đóng kín. Đến khi có vụ đập cửa cướp nước đầu tiên ở một đại lý gần Mỹ Đình, ranh giới giữa mua bán và cướp bóc bắt đầu mờ đi. + +Điện mất cục bộ từ ngày thứ tám. Ban đầu chỉ là vài khu. Một tiếng. Hai tiếng. Rồi nửa ngày. + +Tại một chung cư ở Thanh Xuân, thang máy dừng giữa tầng mười bảy và mười tám lúc 13 giờ 40. Bên trong có bốn người: một nhân viên văn phòng, một bà cụ, một đứa trẻ và một shipper giao thuốc. Mười phút đầu họ còn bấm chuông cứu hộ. Hai mươi phút sau, đứa trẻ bắt đầu khóc. Bốn mươi phút sau, bà cụ ngồi bệt xuống sàn, thở dốc. Khi đội kỹ thuật mở được cửa thang, không ai trong nhóm còn đủ sức bước ra ngay. + +Tin nhắn trong nhóm cư dân bắt đầu bằng câu hỏi “bao giờ có điện lại”, chuyển sang “nhà ai còn nước”, rồi thành “ai có thuốc hạ sốt cho trẻ con không”. Đến tối, điện thoại nhiều người cạn pin. Nhóm chat thưa dần; tình hình không khá hơn, chỉ là người ta không còn đủ điện để tiếp tục kêu cứu. + +Bệnh viện quá tải từ ngày thứ chín. + +Tiến xem lại đoạn video Thủy gửi từ một bệnh viện phía Tây thành phố. Hành lang cấp cứu chật kín người. Người già nằm trên ghế nhựa, trẻ nhỏ được quạt bằng bìa carton, chai nước truyền treo tạm trên móc áo. Một bác sĩ trẻ lau mồ hôi bằng tay áo, quay đi vài giây rồi quay lại ép tim cho một bệnh nhân sốc nhiệt. Phía sau cô, máy lạnh kêu cạch cạch rồi tắt phụt. + +Không ai hét. Không ai khóc lớn. + +Cái chết trong bệnh viện đến bằng sự kiệt sức. Kho Ngọc Trục trở thành căn cứ thật sự của Tiến vào ngày thứ mười. Không còn là một kho hàng thuê tạm. Không còn là nơi chứa vật tư. Nó bắt đầu có quy tắc, tuyến vào, tuyến ra, ca trực, khu nước sạch, khu xử lý rác, khu ngủ, khu y tế, khu vật tư không được mở nếu không có lệnh. + +Tiến không nhận người bừa bãi. Hắn chỉ đưa vào bốn người đầu tiên. Người thứ nhất là **Nam**, hai mươi ba tuổi, nhân viên siêu thị được Thủy kéo ra từ Đại Hà. Tay cậu vẫn còn run mỗi khi nghe tiếng cửa cuốn. Đêm đầu tiên ở Ngọc Trục, chỉ cần gió làm tấm tôn kêu một tiếng, cậu đã bật dậy, lưng ướt mồ hôi. + +Người thứ hai là **ông Hòa**, một thợ điện già từng sửa hệ thống kho cho ông Lợi. Ông có đôi tay chai sạn, thói quen kiểm tra cầu dao bằng cách nghe tiếng rung rất nhỏ, và một câu nói cửa miệng: “Dây điện không nói dối, chỉ có người đọc sai nó.” Khi Tiến đưa ông vào xem tủ điện cũ của kho, ông chỉ liếc một lúc rồi bảo: “Cái này từng kéo tải lớn hơn kho hàng bình thường.” + +Người thứ ba là **Bình**, một shipper quen đường nhỏ phía Tây, người từng giúp Tiến chuyển vài đơn hàng mà không hỏi quá nhiều. Bình gầy, nhanh, nhớ ngõ tốt hơn nhớ tên người, và có một chiếc xe máy cũ kêu như sắp rụng máy nhưng vẫn luồn được qua những lối mà ô tô không vào nổi. + +Người thứ tư là **Linh**, dược sĩ làm ở một nhà thuốc gần Hà Đông. Sau Hồng Nhật, nhà thuốc của cô bị đập cửa hai lần. Lần thứ hai, cô gọi Thủy vì từng được phỏng vấn trong một bài về thuốc giả. Thủy đưa cô tới Ngọc Trục. Linh không nói nhiều; vừa nhìn kho thuốc Tiến chuẩn bị, cô xắn tay áo, kéo ba thùng nhựa lại gần và phân loại lại toàn bộ trong một buổi chiều. + +“Anh đang xây căn cứ,” Thủy nói khi nhìn Tiến đánh dấu phân khu trong kho. + +“Đang xây một cái hộp đủ lâu để không chết sớm.” + +“Khác nhau à?” + +“Khác. Căn cứ khiến người ta nghĩ tới an toàn. Chỗ này chỉ là trì hoãn.” + +Thủy không thích cách Tiến nói, nhưng sau Đại Hà, cô không còn phản bác những câu như thế nữa. Ngày thứ mười một, Tiến gọi về quê. Cuộc gọi mất gần hai phút mới kết nối. Giọng mẹ vang lên đứt quãng trong tiếng nhiễu. + +“Tiến… nghe không?” + +“Con nghe. Mẹ thế nào?” + +“Nóng lắm. Điện mất từ trưa. May có cái quạt sạc con gửi. Nước thì còn. Hàng xóm sang hỏi mua mấy thùng nhưng mẹ bảo của công ty con gửi nhờ.” + +“Đừng bán. Ai thân quá thì cho vài chai, nhưng đừng để họ biết mẹ còn nhiều.” + +“Ừ. Mẹ biết rồi.” Bà ngừng một chút. “Trên Hà Nội có sao không? Tivi nói có người chết ở trung tâm thương mại…” + +Tiến quay sang Nam đang ngồi ở góc kho, mắt trống rỗng. + +“Con ổn.” + +“Con đừng gạt mẹ.” + +Lần này Tiến không đáp. Ngón tay hắn miết nhẹ cạnh điện thoại. + +“Mẹ ở trong nhà. Uống nước đều. Nếu điện mất lâu, dùng máy phát nhỏ vào buổi tối thôi, đừng bật cả ngày. Xăng phải giữ kỹ. Ai hỏi thì nói không biết dùng.” + +“Ừ. Con cũng phải giữ mình.” + +Tín hiệu nhiễu mạnh hơn. + +“Mẹ?” + +Không có tiếng trả lời. Cuộc gọi rớt. Tiến vẫn giữ điện thoại bên tai cho tới khi màn hình tối hẳn. Hắn không thể rời Hà Nội. + +Chưa thể là bây giờ. Ngọc Trục còn chưa ổn, La Phù đang bị Đỗ Minh Kha gom hàng, HN-07 vẫn nằm dưới chân hắn, còn Hồng Nhật mới chỉ bắt đầu. Ngày thứ mười hai, La Phù có vụ nổ súng đầu tiên. Không ai biết ai bắn trước. Một nhóm dân cư tự tổ chức kéo tới đòi mua nước với giá cũ. Chủ kho không mở. Một xe tải trắng cố rời đi. Đám đông chặn đường. Có người ném đá. Có tiếng nổ. Một người ngã xuống. Rồi mọi thứ vỡ ra. + +Đỗ Minh Kha không xuất hiện công khai, nhưng xe của hắn vẫn rời khỏi La Phù trong đêm. Tiến rà các ảnh Thủy gửi, nhận ra LP-17 đã chuyển thêm ít nhất năm chuyến hàng về một điểm chưa xác định ở phía Tây Nam. Kha không tranh cãi với đám đông. Hắn đã lấy phần cần lấy trước khi đám đông nhận ra mình đói. + +Kẻ mạnh trong tận thế không phải kẻ cướp giỏi nhất. Là kẻ rời đi trước khi nơi đó cần phải cướp. Ngày thứ mười ba, Hồ Tây bắt đầu được nhắc đến. + +Ban đầu chỉ là vài bài đăng rải rác: nước rút nhanh, cá chết nhiều, mùi bùn bốc lên nặng hơn bình thường. Một số người cho rằng do nắng nóng kéo dài. Một số khác nói hệ thống thoát nước có vấn đề. Có người quay video ven hồ, chỉ vào vệt nước cũ trên bờ kè rồi nói mực nước đã tụt rõ. + +Buổi tối, Thủy gửi cho Tiến một bức ảnh chụp từ xa. Hồ Tây. Mực nước ven bờ đã rút xuống rõ rệt, để lộ một dải bùn đen bất thường. Ở giữa vùng nước sẫm màu, có một vòng xoáy nhỏ, rất nhẹ, gần như không thấy nếu không phóng lớn. Bên dưới ảnh, Thủy chỉ viết một câu: + +**Nó bắt đầu rồi.** + +Tiến mở bản đồ sinh tồn. Năm điểm đã đánh dấu — Ngọc Trục, La Phù, Láng, trung tâm thương mại Đại Hà ở Hà Đông, Hồ Tây — giờ như kéo nặng cả tờ giấy. Con trỏ dừng trên chấm đỏ ở Hồ Tây. + +Trong ký ức của hắn, phải nhiều tuần nữa vật thể dưới đáy hồ mới lộ rõ. Nhưng lần này, mọi thứ đang xảy ra nhanh hơn. Hoặc kiếp trước hắn đã biết quá muộn. Dưới nền kho, cánh cửa HN-07 vẫn im lặng. Nhưng Tiến có cảm giác thứ bên dưới đó đang lắng nghe. + +Chương 12: Dưới Đáy Hồ Tây + +Hồ Tây bốc mùi trước khi nó lộ ra bí mật. + +Mùi bùn nóng, mùi cá chết, mùi rong rữa và thứ mùi kim loại rất nhẹ, gần như lẫn vào hơi nước bốc lên từ mặt hồ. Những ngày trước Hồng Nhật, người ta đến đây để chạy bộ, uống cà phê, chụp ảnh hoàng hôn. Bây giờ, con đường ven hồ vắng hơn rất nhiều. Những quán cà phê còn mở thì kéo rèm kín, máy phát chạy khàn khàn phía sau nhà. Một số đoạn bờ kè bị căng dây tạm, không rõ là để giữ an toàn hay để ngăn người tò mò lại gần. + +Tiến và Thủy không đi sát bờ. + +Họ đứng trên tầng thượng một tòa nhà cũ cách hồ một khoảng đủ xa, dùng ống kính tele nhìn xuống. Dưới ánh mặt trời đỏ, mặt nước Hồ Tây không còn màu xanh xám quen thuộc mà sẫm lại như một tấm kim loại bị nung nóng từ bên dưới. Ven bờ, bùn đen lộ thành từng mảng dài. Cá chết dạt vào các góc khuất, bụng trắng nổi lên rồi xẹp xuống trong nắng. + +Thủy chỉnh tiêu cự máy ảnh, mặt tái đi sau lớp khẩu trang. + +“Mực nước tụt nhanh hơn mọi mô hình bay hơi tôi từng thấy.” + +“Không phải chỉ bay hơi.” + +“Anh từng thấy rồi?” + +Tiến không trả lời ngay. + +Trong ký ức cũ, lần đầu hắn tới Hồ Tây sau khi nước rút là vào tháng thứ ba sau Hồng Nhật. Khi đó nơi này đã bị vài nhóm sống sót phong tỏa một phần, vừa vì nguồn nước, vừa vì những lời đồn về vật thể dưới đáy hồ. Hắn không nhìn thấy giai đoạn đầu. Hắn chỉ nhìn thấy kết quả: những khối kim loại khổng lồ nằm dưới lớp bùn, như xương sườn của một con thú cổ đại bị chôn dưới thành phố. + +“Anh từng thấy thứ dưới đó,” hắn nói. + +Thủy hạ máy ảnh xuống. + +“Thứ gì?” + +“Không biết.” + +“Không biết hay không muốn nói?” + +“Không biết thật.” + +Câu trả lời khiến Thủy im lặng. + +Từ sau Hồng Nhật, cô đã quen dần với việc Tiến biết nhiều hơn người khác. Nhưng có những lúc chính hắn cũng không có đáp án. Những lúc ấy, vẻ bình tĩnh của hắn trở nên đáng sợ hơn cả khi hắn cảnh báo. Vì nếu một người từng sống qua tương lai mà vẫn không biết thứ đang tới là gì, nghĩa là thứ đó nằm ngoài cả ký ức của hắn. + +Dưới hồ, một vòng xoáy nhỏ xuất hiện gần vùng nước sẫm. Không lớn. Không dữ dội. Chỉ là một chuyển động tròn rất nhẹ, kéo theo vài vệt bọt màu xám. Nếu nhìn bằng mắt thường từ mặt đất, có lẽ không ai chú ý. Nhưng qua ống kính, vòng xoáy ấy rõ như một đồng tử đang mở. + +Thủy chụp liên tiếp. + +“Ở giữa có gì đó.” + +Tiến đưa ống nhòm lên. Ở vị trí vòng xoáy, mặt nước lõm xuống rất nhẹ. Bên dưới lớp nước đục, một đường thẳng tối màu hiện ra rồi biến mất. Nó quá đều và sắc để là thân cây hay cọc bê tông; hình dạng gần như mép của một tấm kim loại khổng lồ. + +Tiến cảm thấy cổ họng khô lại. Sớm hơn. Nó lộ ra sớm hơn kiếp trước rất nhiều. Một tiếng vo ve vang lên phía trên. Thủy ngẩng đầu. + +Một chiếc flycam nhỏ bay qua mái nhà, hướng về phía hồ. Thiết bị không thuộc về họ. Nó lượn một vòng rồi hạ thấp dần về vùng xoáy; chủ nhân có thể là nhóm truyền thông, một người tò mò hoặc một đơn vị đang khảo sát. Chiếc flycam bay được khoảng mười giây thì đột ngột mất thăng bằng. Nó nghiêng sang trái, xoay tròn, rồi rơi thẳng xuống mặt nước. + +Không có tiếng nổ. Không có tia lửa. Nó chỉ rơi xuống và biến mất. Thủy nhìn Tiến. + +“Thiết bị mất điều khiển?” + +“Có thể.” + +“Giống camera của anh ở Ngọc Trục?” + +“Có thể.” + +Cả hai đều biết hai chữ “có thể” không đủ. + +Dưới đường, một nhóm người dân bắt đầu tụ lại gần đoạn bờ kè. Có người chỉ xuống hồ. Có người quay điện thoại. Một nhân viên dân phòng đi tới yêu cầu họ lùi lại, nhưng đám đông không tản ra. Tiến nhìn đám người dồn về bờ kè và nhớ những lần kiếp trước người ta chết chỉ vì muốn đứng gần hơn một mét để nhìn cho rõ. Tò mò vốn vô hại khi còn hàng rào, cứu hộ và bệnh viện; lúc này, chỉ cần một người trượt xuống bùn cũng đủ kéo thêm vài người theo. + +Tiến cất ống nhòm. + +“Đi thôi.” + +“Chưa đủ ảnh.” + +“Đủ rồi.” + +“Tiến—” + +“Hồ Tây không phải nơi để ở lâu.” + +Giọng hắn không lớn, nhưng đủ khiến Thủy dừng lại. Cô nhìn xuống hồ lần cuối, rồi thu máy. Khi hai người rời khỏi tầng thượng, mặt trời đỏ sẫm treo phía trên thành phố, ánh sáng của nó rọi lên các bức tường cũ khiến mọi thứ như phủ một lớp gỉ máu. + +Trên đường về Ngọc Trục, họ đi qua một Hà Nội đã khác. + +Các cửa hàng đóng nhiều hơn mở. Một số ngã tư mất đèn tín hiệu, xe cộ chen nhau trong tiếng còi khản đặc. Người đi đường quấn khăn ướt quanh cổ, mang theo bình nước, đi sát bóng râm như những con vật tìm đường qua vùng đất cháy. Trên một bức tường ven đường, ai đó đã viết bằng sơn đỏ: + +**MẶT TRỜI ĐANG GIẾT CHÚNG TA** + +Không ai dừng lại xóa. Cũng không ai cười. + +Về đến kho Ngọc Trục, Tiến lập tức sao lưu ảnh của Thủy vào ổ cứng rời không nối mạng. Hắn không dùng máy chính. Không dùng đám mây. Không dùng bất kỳ hệ thống nào có thể tự động đồng bộ. Sau đó, hắn in ra ba bức ảnh rõ nhất. Bức thứ nhất: vòng xoáy nhỏ trên mặt Hồ Tây. Bức thứ hai: đường thẳng tối màu dưới lớp nước. Bức thứ ba: khoảnh khắc flycam nghiêng xuống trước khi rơi. + +Thủy đứng bên cạnh, nhìn ba bức ảnh dưới ánh đèn vàng của kho. + +“Anh nghĩ đó là gì?” + +Tiến không trả lời. + +Hắn lấy bản đồ sinh tồn ra, đặt ba bức ảnh cạnh điểm Hồ Tây. Sau đó, hắn lấy mảnh kim loại tìm được dưới Ngọc Trục, đặt gần điểm La Phù. Những mảnh ghép rời rạc nằm cạnh nhau: Ngọc Trục, La Phù, Láng, Đại Hà, Hồ Tây. Mỗi nơi là một thảm họa riêng. Nhưng khi nhìn tổng thể, chúng giống các mắt xích của cùng một cấu trúc. + +Một cấu trúc nằm dưới thành phố. Một cấu trúc đã ngủ rất lâu. Và Hồng Nhật chỉ là tiếng chuông đánh thức. Đúng lúc đó, ông Hòa gọi từ tủ điện phụ. + +“Tiến.” + +Giọng ông trầm xuống. + +“Cậu lại đây xem cái này.” + +Tiến bước tới. Đồng hồ nhiệt gắn dưới nền kho, gần khu kệ sắt che nắp HN-07, đang giảm rất nhanh. Không phải tăng. Giảm. Từ 29°C xuống 18°C, rồi 11°C, rồi 4°C trong vòng chưa đầy một phút. Giữa mùa Hồng Nhật, giữa một nhà kho mái tôn nóng hầm hập, một điểm dưới nền đang lạnh xuống như đá. Ông Hòa nuốt khan. + +“Cái nền này có hầm đông à?” + +Tiến không trả lời. Từ bên dưới nền kho, một tiếng động rất khẽ vang lên. Cộc. Như ai đó gõ vào kim loại từ phía dưới. Thủy lùi nửa bước. Cộc. + +Lần thứ hai. Khoảng cách giữa hai tiếng gõ đều đến mức không giống ngẫu nhiên. + +Cùng lúc đó, toàn bộ khu Láng trên bản đồ điện lực cũ mà Tiến đang mở trên màn hình phụ đột nhiên chuyển xám. Không phải mất điện thông thường. Lớp dữ liệu hiển thị tự động tắt từng trạm, từng tuyến, từng nút như bị một bàn tay vô hình rút nguồn khỏi khu vực đó. + +Màn hình phụ bật nền đen. Đã nhiều ngày HANOI-07 không xuất hiện trực tiếp. Tiến gần như đã quen với sự im lặng của nó. Nhưng lúc này, trên nền màn hình đen, một dòng chữ đỏ sẫm hiện lên chậm rãi. + +**THANG LONG GATE** + +Sắc mặt Thủy nhợt đi khi đọc dòng chữ. Tiến vẫn đứng cạnh màn hình. Dòng thứ hai xuất hiện. + +**INITIALIZING...** + +Ngay khoảnh khắc đó, bức ảnh Hồ Tây vừa in đổi tương phản trên mặt bàn kim loại lạnh. Lớp mực nhiệt sẫm xuống ở những vùng nhạy nhiệt, khiến đường thẳng dưới mặt nước hiện rõ hơn. Từ mép đường thẳng ấy, một ký hiệu mặt trời đỏ mờ mờ nổi ra, gần như không thể nhìn thấy nếu không biết phải tìm. + +Tiến đưa tay chạm vào bức ảnh. Giấy lạnh bất thường. + +Ngoài sân kho, gió nóng thổi qua mái tôn, tạo thành tiếng rền trầm và dài. Xa hơn, thành phố chìm trong những đốm điện chập chờn, những tiếng còi cứu thương rời rạc, những khu nhà tối om và những con đường bắt đầu vắng người. Hồng Nhật đang ép mọi lớp hạ tầng của Hà Nội đi qua những ngưỡng chúng chưa từng được thiết kế để chịu. + +Dưới nền kho, tiếng gõ thứ ba không vang lên. Chỉ có dòng **INITIALIZING...** tiếp tục nhấp nháy, như một hệ thống cũ vừa nhận ra thành phố phía trên đã bước vào trạng thái khẩn cấp. + +ARC 3: MẠNG LƯỚI THỨC GIẤC + +Chương 13: Sau Lò Hấp + +**06/07/2028** + +Đêm sau chuyến trở về từ Hồ Tây, Ngọc Trục không ai ngủ yên. + +Gió nóng đập vào mái tôn từng đợt, kéo theo tiếng rền khô như tiếng cát cọ vào kim loại. Trong kho, quạt công nghiệp chạy bằng ắc quy quay chậm hơn bình thường vì Tiến đã giảm công suất để tiết kiệm điện. Mùi thuốc sát trùng, mùi mồ hôi, mùi nhựa nóng và mùi nước đóng chai mới mở trộn lại thành một thứ không khí nặng nề, khiến mọi người nói chuyện cũng phải hạ giọng. + +Nam ngồi ở góc kho gần khu y tế tạm, hai tay ôm đầu gối. Cậu đã được Linh kiểm tra qua: không sốt cao, không chấn thương nặng, chỉ mất nước nhẹ và rối loạn hoảng sợ. Nhưng mỗi lần cửa cuốn bị gió làm rung, toàn thân Nam lại giật bắn, mắt mở to như vẫn còn kẹt trong hành lang tối của trung tâm thương mại. + +“Em không kéo được cô ấy ra,” Nam lẩm bẩm. + +Linh đang phân loại túi thuốc quay lại nhìn cậu. “Ai?” + +“Một bé gái. Tầm sáu tuổi. Em nghe tiếng nó gọi mẹ. Em thấy nó đứng sau cửa kính.” Nam nuốt khan, giọng vỡ ra. “Em kéo được một người già. Rồi cô Thủy kéo tay em. Em chạy. Em chạy mà vẫn nghe nó gọi.” + +Không ai trong kho trả lời. + +Thủy đứng gần cửa phụ, tay nắm chặt chiếc máy ảnh. Cô đã rửa mặt hai lần nhưng trên cổ vẫn còn vệt bùn đen từ bờ kè Hồ Tây. Mỗi khi Nam nói, sắc mặt cô lại tái thêm một chút. Tiến nhận ra điều đó nhưng không nói câu an ủi nào cho nhẹ miệng. Thủy đã cứu được sáu người và vẫn bỏ lại rất nhiều người; cả hai vế đều đúng. Nếu nói một vế để xóa vế kia, hắn chỉ đang giúp mình dễ chịu hơn chứ không giúp cô. + +Ông Hòa ngồi cạnh tủ điện phụ, tháo kính lão ra lau. Ông đã nghe Bình kể chuyện Đại Hà nhưng không hỏi thêm; có những lúc câu hỏi chỉ làm người kể phải sống lại một đoạn họ chưa nuốt nổi. Bình thì không giữ được im lặng lâu như ông. Cậu shipper gầy nhom đứng ở khe cửa, nhìn ra đường tối. + +“Anh Tiến, có người đến.” + +Tiến khóa màn hình bản đồ, chộp chiếc đèn pin nhỏ rồi bước tới. Camera ngoài cổng ghi lại ba bóng người đứng cách tường bao khoảng mười mét. Một người đàn ông trung niên, một phụ nữ bế đứa trẻ, và một thanh niên mặc áo bảo vệ đã rách vai. Họ không đập cửa. Chỉ đứng dưới nắng nóng còn sót lại của buổi tối, lảo đảo như có thể ngã bất cứ lúc nào. + +Bình hạ giọng. “Người từ Đại Hà?” + +Tiến rà kỹ bộ đồng phục của thanh niên. + +“Có thể.” + +Thủy bước lại gần. “Phải mở cửa.” + +“Không phải cứ có người tới là mở.” + +“Anh định để họ chết ngoài đó?” + +Tiến không nhìn cô, mắt vẫn dán vào màn hình camera. “Anh định biết họ là ai trước.” + +Người thanh niên ngoài cổng bỗng ngẩng đầu, như cảm nhận được camera. Hắn giơ hai tay, không cầm vũ khí, rồi nói rất lớn: + +“Chúng tôi không đến cướp! Tôi là bảo vệ ở Đại Hà! Có người bảo nếu thoát được thì tìm kho Ngọc Trục, gặp người tên Lê Quốc Tiến!” + +Cả kho im phăng phắc. Thủy quay phắt sang Tiến. + +“Anh nói với ai?” + +Tiến không đáp ngay. Hắn chưa từng nói tên mình cho bất kỳ người lạ nào ở Đại Hà. Hắn chỉ phá khóa lối giao hàng, gọi Thủy, kéo nhóm người ra ngoài rồi rời đi. Những người được cứu không biết hắn là ai, càng không biết Ngọc Trục. + +Bên ngoài, thanh niên bảo vệ tiếp tục nói, giọng khàn vì khát: “Người đó không ra được. Anh ta bị kẹt trong khu kỹ thuật. Anh ta nói: nếu còn sống, bảo Lê Quốc Tiến rằng Kha Đen đã lấy bản đồ phía Tây.” + +Đỗ Minh Kha. Không ai trong kho hiểu hết cái tên ấy có nghĩa gì, nhưng tất cả đều thấy sắc mặt Tiến thay đổi. Hắn quay sang Bình. + +“Cổng phụ. Chỉ mở khe nhỏ. Ông Hòa đứng sau tủ điện. Linh chuẩn bị nước muối loãng, nhưng không đưa thùng lớn ra ngoài. Thủy, cô đứng phía sau tôi.” + +Thủy không phản bác. Sau Đại Hà, cô đã hiểu một điều: lòng tốt không có quy trình sẽ biến thành thảm họa. + +Cổng phụ mở ra chưa đầy nửa mét. Ba người bên ngoài được đưa vào từng người một, kiểm tra túi, kiểm tra tay, kiểm tra vết thương. Người phụ nữ gần như khuỵu xuống ngay khi bước qua cổng. Đứa trẻ trong tay chị không khóc nữa, chỉ thở khò khè. Linh vội bế nó vào khu y tế. Nam nhìn đứa trẻ, môi run run, nhưng lần này cậu không quay đi. Cậu lấy một chai nước nhỏ, mở nắp bằng đôi tay run rẩy rồi đưa cho Linh. + +Người thanh niên bảo vệ tên là Phúc. Anh ta bị bỏng nhẹ ở cổ và cánh tay, mất nước nghiêm trọng, nhưng thần trí còn tỉnh. Sau khi uống từng ngụm nhỏ theo lệnh của Linh, anh ta kể lại chuyện bên trong Đại Hà sau khi Tiến và Thủy rời đi. + +Điện mất hẳn. Người trong trung tâm thương mại phá cửa siêu thị, tranh nước, tranh thức ăn. Một nhóm mặc đồ bảo trì đã mở được một phần khu kỹ thuật phía sau, nhưng không phải để cứu người. Họ lấy đi mấy ổ cứng camera, một hộp tài liệu từ phòng quản lý hạ tầng và một bản sơ đồ cũ của khu Hà Đông - La Phù - Ngọc Trục. Phúc nhìn thấy một người trong nhóm đeo nhẫn đen ở tay trái. + +“Kha,” Tiến nói. + +Phúc gật đầu khó nhọc. “Tôi không biết tên hắn. Nhưng người bị kẹt cùng tôi biết. Anh ta mặc áo kỹ thuật, khoảng bốn mươi tuổi, nói từng làm cho một dự án quan sát gì đó. Trước khi ngất, anh ta bảo tôi nhớ đúng câu này.” + +Phúc siết chai nước trong tay. + +“Anh ta nói: Kha Đen không tìm nước. Hắn tìm đường dưới nước.” + +Thủy lạnh người. + +“Đường dưới nước là gì?” + +Tiến hướng mắt về bản đồ Hồ Tây dán trên tường. + +“Có lẽ là thứ dưới Hồ Tây.” + +Không khí trong kho như bị kéo xuống thấp hơn. Phúc nhìn quanh, nhận ra nơi này không phải một điểm trú nóng ngẫu nhiên. Những thùng nước xếp kín, tủ thuốc, bảng phân ca, camera, tấm pin, bản đồ, tất cả cho thấy người tên Lê Quốc Tiến đã chuẩn bị từ trước. + +“Anh biết chuyện này sẽ xảy ra,” Phúc nói. + +Không phải câu hỏi. Tiến nhìn anh ta. “Biết một phần.” + +“Anh biết lối giao hàng từ trước?” Phúc hỏi. + +“Biết.” + +“Biết tải cửa, biết hành lang hẹp, biết điện có thể mất. Vậy vì sao anh không cho bảo vệ chia người thành từng nhóm từ sớm?” + +Câu hỏi khiến cả kho im đi. Nó không phải lời buộc tội chung chung; Phúc đang hỏi đúng vào phương án vận hành. Tiến đã nghĩ tới nó nhiều lần từ lúc rời Đại Hà. + +“Vì khi tôi cảnh báo, tôi không có quyền điều khiển bảo vệ hay ban quản lý. Đến lúc họ tin thì đám đông đã ép kín sảnh. Nếu mở lối kỹ thuật sớm mà không có người giữ hai đầu, nó sẽ biến thành một nút thắt khác.” + +Phúc nhìn thẳng hắn. “Anh có thử nói với họ chưa?” + +“Có. Không đủ sớm, cũng không đủ mạnh.” + +“Vậy đừng nói là anh không thể.” Phúc thở khó nhọc nhưng giọng vẫn rõ. “Anh có giới hạn. Khác với không thể.” + +Tiến im một nhịp rồi gật. “Đúng. Tôi đã chọn trong giới hạn đó. Tôi kéo được nhóm gần lối ra nhất và đóng lại trước khi hành lang nghẹt.” + +“Những người còn lại?” + +“Không ra được.” + +Sự thẳng thừng ấy khiến Phúc câm lặng. Ánh mắt Tiến đi qua từng người trong kho. + +“Đây là điều đầu tiên mọi người phải hiểu nếu muốn ở lại Ngọc Trục. Chúng ta không cứu được tất cả. Chúng ta chỉ có thể cứu những người mà việc cứu họ không giết cả căn cứ.” + +Thủy giữ ánh mắt ở hắn, quai hàm hơi siết lại. Cô ghét câu đó, nhưng sau Lò Hấp Hà Đông, cô không còn đủ ngây thơ để bảo nó sai. Đêm ấy, Tiến ghi thêm một dòng vào bảng quy tắc căn cứ. + +**Không mở cổng vì tiếng khóc. Chỉ mở cổng sau khi xác minh.** + +Bên ngoài, Hà Nội vẫn nóng như một cái lò không tắt. Bên trong, Nam viết thời gian xác minh mới lên cạnh chốt cổng. Dòng mực còn ướt khi tiếng khóc ngoài sân im xuống. + +Chương 14: Quy Tắc Ngọc Trục + +Sáng hôm sau, Tiến treo tấm bảng quy tắc đầu tiên lên tường kho. Tấm bảng được cắt từ một tấm nhựa quảng cáo cũ, mặt sau sơn trắng, chữ viết bằng bút dầu đen. Không đẹp. Không trang trọng. Nhưng trong một thành phố đang cạn nước và mất điện, những dòng chữ ấy có trọng lượng hơn mọi khẩu hiệu từng treo trong phòng họp. + +**QUY TẮC NGỌC TRỤC** + +**1. Nước được phân theo đầu người, không theo cảm xúc.** + +**2. Không ai tự ý mở cổng.** + +**3. Không dùng điện ngoài lịch.** + +**4. Không nhắc đến lượng vật tư thật với người ngoài.** + +**5. Người muốn ở lại phải có việc để làm.** + +**6. Vi phạm quy tắc bị đình quyền liên quan và xem xét theo mức độ; cố ý đe dọa an toàn chung có thể bị buộc rời căn cứ.** + +Nam đọc dòng cuối hai lần. “Ai là người xem xét?” + +Tiến đáp: “Tạm thời là những người phụ trách phần bị vi phạm. Sau này đông hơn thì phải tách ra.” + +“Vậy anh vừa làm luật vừa có thể đuổi người?” Thủy hỏi. + +Tiến nhìn lại tấm bảng. “Nếu để như thế thì đúng.” + +Bình huýt sáo khẽ. “Nghe không ổn lắm.” + +“Không ổn,” Thủy nói. “Ít nhất phải có hai người không cùng phụ trách xác nhận hành vi cố ý trước khi buộc ai rời.” + +Ông Hòa đang lau kính ở cạnh tủ điện lên tiếng: “Và trường hợp nguy hiểm tức thời thì người trực được khóa quyền trước, xét sau. Chứ chờ họp lúc có người đang châm lửa vào kho cũng không được.” + +Tiến cầm bút sửa ngay dưới dòng sáu: **Khẩn cấp: người trực được đình quyền tạm thời; quyết định buộc rời cần tối thiểu hai xác nhận độc lập.** + +Nam nhìn phần chữ mới rồi mới gật. Quy tắc đầu tiên của Ngọc Trục vừa được sửa trước khi kịp khô mực. + +Tiến đọc được sự khó chịu trên vài gương mặt. Điều đó không khiến hắn rút lại quy tắc, nhưng cũng không cho phép hắn tự coi mình là người duy nhất đúng. Kiếp trước, hắn từng thấy những khu trú ẩn sụp đổ không phải vì thiếu vật tư ngay từ đầu, mà vì không dám đặt luật. Một người lấy thêm nước vì con sốt. Người khác thấy vậy cũng lấy thêm vì mẹ già. Người thứ ba giấu một ít vì sợ ngày mai không còn. Đến ngày thứ tư, kho nước cạn một nửa và mọi người bắt đầu nghi ngờ nhau. Đến ngày thứ năm, dao xuất hiện. + +Tiến sẽ không để Ngọc Trục chết theo cách đó khi mình còn đủ quyền can thiệp. Ông Hòa là người đầu tiên phá im lặng. + +“Tôi phụ trách điện.” + +Tiến gật đầu. “Tủ chính, ắc quy, máy phát, lịch sạc. Mọi công tắc lớn phải qua ông.” + +Ông Hòa nhìn tấm bảng rồi kéo ghế tới tủ điện. “Tôi cần dây chịu tải, cầu chì, đồng hồ đo và hai cuộn băng đánh dấu khác màu. Cái kho này từng bị sửa chắp ba đời; trước khi đóng một cầu dao, tôi muốn biết nó thực sự nuôi cái gì.” Ông lấy bút chì, tự vẽ lại sơ đồ từ đầu thay vì tin nhãn cũ trên tủ. “Dây điện không biết nói dối. Nhãn dán thì có.” + +“Bình đi lấy.” + +Bình chỉ vào mình. “Em?” + +“Cậu nhớ đường nhỏ. Đi ban ngày ít nhất có thể. Không mua cùng một cửa hàng quá nhiều. Không để ai biết chuyển về đây.” + +“Có tiền không?” + +Tiến đưa cậu một phong bì. + +“Tiền mặt. Chia ba chỗ. Nếu bị chặn, bỏ một phần. Giữ người, không giữ tiền.” + +Bình nhận phong bì rồi chia tiền thành ba phần ngay trước mặt Tiến: một phần trong ví, một phần nhét vào lớp lót mũ bảo hiểm, phần còn lại cuộn trong túi dụng cụ. “Nếu bị giữ một chỗ còn hai chỗ để về.” Trước khi cất điện thoại, màn hình sáng lên một tấm ảnh cũ: một bé gái ôm con thỏ bông, đứng cạnh người phụ nữ quay nửa mặt khỏi máy. Bình tắt rất nhanh, nhưng Tiến vẫn thấy tên thư mục: **Bình An**. Cậu chưa từng kể vì sao hai mẹ con không ở cùng mình trước Hồng Nhật. + +Trước tận thế, Bình từng giao hàng khắp Hà Đông, La Khê, Đại Mỗ, Dương Nội, La Phù. Việc nhớ đường chỉ giúp cậu giao nhanh hơn người khác. Bây giờ, nó biến cậu thành mạch máu của căn cứ — và có thể là cách duy nhất lần theo gia đình mình. Linh nhận khu y tế. Cô không nói nhiều, chỉ viết lại danh sách thuốc Tiến chuẩn bị rồi gạch đỏ một loạt. + +“Anh mua nhiều thuốc cảm, thuốc hạ sốt, băng gạc. Tốt. Nhưng thiếu oresol, thiếu thuốc tiêu chảy, thiếu thuốc huyết áp, thiếu thuốc chống dị ứng, thiếu nước muối sinh lý. Và thiếu quy định dùng thuốc.” + +“Thuốc cũng cần quy tắc?” Nam hỏi. + +Linh nhìn cậu. “Trong ba ngày nữa, người ta sẽ uống thuốc hạ sốt như ăn kẹo. Trong bảy ngày nữa, người ta sẽ đổi đồng hồ, điện thoại, vàng cưới lấy một vỉ thuốc. Nếu không có quy tắc, thuốc hết trước khi bệnh thật đến.” + +Nam cúi đầu. Cậu từng đứng trong siêu thị nhìn người ta cướp nước. Bây giờ cậu hiểu một vỉ thuốc cũng có thể trở thành lý do để người ta giết nhau. Thủy không nhận nhiệm vụ ngay. Cô ngồi trước laptop không nối mạng, xem lại đoạn video Đại Hà còn lưu trong thẻ nhớ. Mỗi lần tiếng trẻ con khóc vang lên, ngón tay cô lại dừng trên phím cách. Tiến đi ngang qua, đặt trước mặt cô một tập giấy. + +“Cô phụ trách thông tin.” + +Thủy ngẩng lên. “Thông tin gì?” + +“Tuyến mất điện, điểm thiếu nước, bệnh viện quá tải, La Phù, Hồ Tây, Láng. Những gì cô lấy được nhưng không đưa lên mạng.” + +“Anh muốn tôi làm tình báo cho anh?” + +“Không. Tôi muốn cô làm đúng nghề của cô, nhưng lưu một bản cho những người có thể dùng nó để sống.” + +Câu trả lời khiến Thủy im lặng. Cô nhìn tập giấy, rồi nhìn Nam đang giúp Linh kê lại tủ thuốc. Cậu thanh niên sống sót từ Đại Hà không còn là nhân vật trong bài viết nữa. Cậu đang ở đây, thở, run rẩy, cần nước, cần thuốc, cần một nơi để không chết vì chính âm thanh của ký ức. + +“Tòa soạn muốn tôi viết bài khác,” cô nói. “Họ bảo bài Đại Hà phải chờ số liệu chính thức.” + +“Và cô sẽ chờ?” + +Thủy cười rất nhạt. “Không.” + +Tiến gật đầu. “Vậy chúng ta cần một kênh riêng.” + +Chiều hôm đó, Ngọc Trục có tranh cãi đầu tiên. + +Phúc, người bảo vệ Đại Hà được đưa vào đêm trước, muốn ra ngoài tìm em gái. Cô bé làm nhân viên quầy trà sữa, mất liên lạc từ lúc Đại Hà tối đi. Linh nói tình trạng của Phúc chưa đủ để ra ngoài. Thủy muốn đi cùng anh ta. Bình bảo khu quanh Đại Hà đang bị phong tỏa từng phần, xe cộ hỗn loạn, có đi cũng chưa chắc vào được. + +Phúc đập tay xuống bàn. + +“Vậy ngồi đây uống nước trong khi người nhà tôi chết ngoài kia à?” + +Nam co rúm lại. Tiến đặt bản đồ lên bàn. “Cậu muốn đi, tôi không giữ. Nhưng cậu không được mang theo nước của căn cứ quá định mức. Không được dùng xe của căn cứ. Không được tiết lộ vị trí kho.” + +Thủy quay sang hắn. + +“Anh không thể nói như vậy.” + +“Có thể.” + +“Anh ta vừa thoát chết.” + +“Vì vậy mới càng không được để anh ta kéo thêm người chết theo.” + +Phúc nhìn Tiến bằng ánh mắt đầy hận. “Anh có người thân không?” + +Tiến đặt cốc xuống, ngón tay dừng ở mép bàn. + +“Có.” + +“Vậy nếu mẹ anh kẹt ngoài kia thì sao?” + +Câu hỏi đánh trúng chỗ Tiến vẫn cố tránh. Quanh bàn, không ai chen lời. Hắn nhìn thẳng Phúc. “Nếu mẹ tôi kẹt ngoài đó, tôi sẽ muốn lao ra. Và nếu tôi lao ra trong lúc không có kế hoạch, tôi có thể chết trước khi gặp được bà.” + +Giọng hắn thấp xuống. + +“Cậu muốn tìm em gái thì chờ đến tối. Bình dẫn đường. Thủy không đi. Tôi cho cậu ba chai nước nhỏ, một khăn ướt, một bộ đàm ngắn tầm. Quá hai giờ không về, cổng không mở lần hai nếu có người bám theo.” + +Phúc nghiến răng. + +“Anh đúng là lạnh máu.” + +“Không. Tôi đang cố giữ cho cậu còn máu để mà tìm người.” + +Tối đó, Phúc và Bình rời kho qua cổng phụ. Họ không về sau hai giờ. + +Đến giờ thứ ba, camera ngoài đường ghi lại một chiếc xe tải trắng chạy chậm qua ngõ chính. Không bật đèn pha. Không có logo. Mép dưới thùng xe bám bụi, nhưng khi phóng lớn, Tiến nhìn thấy ký hiệu quen thuộc. + +**LP-17** + +Chiếc xe không dừng. Nó chỉ đi qua. Nhưng sáng hôm sau, trên cổng kho Ngọc Trục xuất hiện một vệt sơn đỏ rất mảnh. Một vòng tròn. Mười hai tia ngắn. Mặt trời đỏ. + +Đỗ Minh Kha đã tìm thấy họ. + +Chương 15: Kha Đen + +Bình trở về lúc gần sáng. Cậu không đi qua cổng chính. Cậu gõ ba nhịp ngắn vào tấm tôn phía sau kho, đúng tín hiệu đã hẹn trước, rồi chui qua lối hẹp giữa hai bức tường cũ. Áo cậu rách một đường dài, mặt bám bụi, môi nứt vì khát. Trên lưng Bình là Phúc, bất tỉnh, vai trái chảy máu. + +Linh lao tới trước tiên. + +“Đặt xuống. Đừng kéo tay anh ta.” + +Bình khuỵu xuống ngay khi Phúc được đỡ khỏi lưng. Cậu thở dốc, giọng đứt quãng. + +“Không tìm được em gái hắn. Nhưng tìm được cái này.” + +Cậu móc từ trong áo ra một mảnh thẻ nhựa cháy sém. Trên thẻ còn thấy một phần logo Đại Hà và tên phòng: **KỸ THUẬT HẠ TẦNG**. Mặt sau thẻ có một dòng chữ viết vội bằng bút dầu đen. + +**KHA LẤY SƠ ĐỒ DƯỚI NƯỚC. LÁNG LÀ NÚT TIẾP THEO.** + +Tiến cầm mảnh thẻ, ánh mắt tối lại. + +“Người kỹ thuật bị kẹt để lại?” + +Bình lắc đầu. “Bọn em chỉ tìm được áo bảo hộ và thẻ ở gần cửa phụ phía Bắc. Có máu, không có xác. Phúc nhận ra thẻ của người từng nhắn tìm anh, nhưng không thấy người.” + +Thủy đứng bên cạnh, sắc mặt trắng bệch. + +“Láng.” + +Tiến rà bản đồ. Ngọc Trục, La Phù, Hồ Tây, Đại Hà, Láng. Những điểm tưởng như rời rạc đang dần tự nối lại, không cần HANOI-07 giải thích. Ông Hòa bước từ ngoài sân vào, tay cầm một mảnh giấy gấp gọn. + +“Cậu nên xem cái này nữa.” + +Mảnh giấy được kẹp dưới khóa cổng sau khi chiếc xe LP-17 đi qua. Không ai trong kho thấy người đặt. Camera chỉ ghi được một khung hình nhiễu trắng dài ba giây. Khi hình ảnh trở lại, mảnh giấy đã nằm đó. Tiến mở ra. Bên trong chỉ có một địa chỉ, một thời gian và một câu. + +**14:00. Kho nước bỏ hoang sau đường gom La Phù. Đi một mình.** + +**Mày nghĩ Ngọc Trục là căn cứ. Sai rồi. Nó là cái khóa.** + +Không ký tên. Nhưng không cần ký. Đỗ Minh Kha. Thủy lập tức nói: “Không đi.” + +Tiến gấp tờ giấy lại. + +“Phải đi.” + +“Đây là bẫy.” + +“Chắc chắn.” + +“Vậy anh còn đi?” + +“Vì hắn muốn tôi biết hắn biết gì. Người như Kha không gửi lời chỉ để giết người. Nếu muốn giết, hắn đã để xe đâm cổng hoặc đốt kho lúc chúng ta ngủ.” + +Ông Hòa cau mày. “Cậu tin hắn?” + +“Không. Tôi tin cách hắn tính.” + +Đến 13 giờ 20, Tiến rời Ngọc Trục bằng xe máy của Bình. Hắn không đi một mình theo đúng nghĩa. Bình đi trước mười phút bằng đường khác, không lại gần điểm hẹn mà đứng ở một mái nhà có thể nhìn bao quát đường gom. Hai người thống nhất trước ba tín hiệu: an toàn, rút, và “bị ép nói”. Nếu Tiến phát tín hiệu thứ ba, Bình không lao vào cứu; cậu sẽ rời điểm quan sát, đổi tuyến và báo Ngọc Trục đóng kín. + +Thủy ở lại kho, giữ bộ đàm sóng ngắn và một bản chép địa điểm nhưng không biết chính xác mái Bình đứng. Ông Hòa cắt một mạch điện phụ; nếu Tiến không về trước 16 giờ thì chuyển toàn bộ kho sang chế độ đóng kín. Quy tắc cuối cùng rất rõ: cứu Tiến không được phép trở thành cách dẫn Kha về tận cổng. + +La Phù ban ngày sau Hồng Nhật giống một con thú bị thương. + +Một số kho đóng cửa im lìm. Một số kho bị phá, hàng hóa vương vãi, thùng carton cháy xém, nước chảy thành vệt đục trên nền. Mùi đường, bánh, khói, mồ hôi và rác lên men bốc lên dưới nắng đỏ, ngọt đến buồn nôn. Xa xa, một nhóm người cãi nhau trước cửa kho, tay cầm gậy sắt và dao phay. Không ai còn mặc cả bình thường. Mỗi cuộc mua bán đều giống một cuộc đàm phán có thể chuyển thành đâm chém. + +Kho nước bỏ hoang nằm sau một dãy tường xám, cửa cuốn mở một nửa. Bên trong tối, mát hơn ngoài trời vài độ nhưng vẫn nồng mùi nhựa và nước cũ. Tiến bước vào, không gọi. Đỗ Minh Kha đứng ở cuối kho. Hắn mặc áo sơ mi đen như lần trước, tay trái vẫn đeo chiếc nhẫn đen ở ngón áp út. Sau lưng hắn là ba pallet nước, hai người đứng gác và một lối thoát phụ mở sẵn. Đúng như ký ức của Tiến: Kha không bao giờ đứng ở nơi không có đường lui. + +“Kỹ sư Lê Quốc Tiến,” Kha nói. + +Giọng hắn nhẹ, gần như lịch sự. + +“Lâu rồi không gặp.” + +Tiến đối diện ánh mắt hắn. + +“Chúng ta từng gặp?” + +Kha mỉm cười. “Câu đó tùy thuộc vào việc mày tính thời gian theo đường thẳng hay vòng lặp.” + +Không khí trong kho như chùng xuống. Tiến giữ nguyên nét mặt. + +“Anh nhớ tương lai?” + +Kha đưa tay vuốt nhẹ chiếc nhẫn đen. Động tác rất nhỏ, đều đặn, như một thói quen giúp hắn sắp xếp suy nghĩ. + +“Tao không cần nhớ để biết.” + +“Biết bằng gì?” + +“Đủ thứ.” Kha nhìn những pallet nước sau lưng. “Một tuyến hàng chuyển sớm. Một danh sách tới không đúng thời điểm. Một người bán thứ hắn không hiểu. Chỉ cần đủ điểm, phần còn lại là logistics.” + +Hắn không xác nhận mình đã sống qua tương lai. Cũng không phủ nhận có một nguồn nằm ngoài hiện tại. + +“Anh thuộc Observation Initiative?” + +Kha cười khẽ. “Cái tên đó cũ rồi. Và cũng không chính xác. Quan sát chỉ là việc của những kẻ không đủ năng lực can thiệp.” + +“Vậy anh can thiệp bằng cách gom nước trước tận thế?” + +“Bằng cách bảo đảm nước không rơi vào tay đám đông ngu xuẩn.” + +Tiến lạnh mặt. + +“Đám đông đó là người.” + +Ngón cái Kha miết qua mặt trong chiếc nhẫn. “Tao từng để một đoàn cứu trợ đứng ngoài cổng bốn mươi bảy phút vì ba cấp quản lý chưa ký xong. Khi cửa mở, sáu người đã thành số liệu. Từ đó, tao không để giấy tờ quyết xe nào được chạy.” Hắn nói như một nguyên tắc hậu cần, không như lời kể về người chết. Tiến chỉ kịp thấy hai ký tự rất nhỏ khắc trong lòng nhẫn trước khi Kha xoay tay lại: **M.K.** + +“Người là trạng thái trước khi khát.” Kha nói câu đó rất bình thản. “Sau ba ngày không nước, họ là đám đông. Sau bảy ngày, họ là dịch bệnh. Sau mười ngày, họ là vũ khí. Mày từng thấy rồi, nên đừng giả vờ đạo đức với tao.” + +Tiến nắm chặt tay trong túi. Kha biết quá nhiều. + +“Anh muốn gì?” + +“Ngọc Trục.” + +“Không.” + +“Tao chưa nói điều kiện.” + +“Điều kiện nào cũng không.” + +Kha gật đầu như đã đoán trước. “Vậy tao đổi cách nói. Mày giữ được cái kho đó vì mày nghĩ nó là căn cứ. Nhưng dưới đó là một khóa. Khóa thì không thuộc về người ngủ trên nó. Nó thuộc về người biết dùng nó.” + +“Và anh biết dùng?” + +“Biết đủ để không đặt tay bừa lên nó như mày.” + +Tiến im lặng. + +Kha bước chậm sang một bên, để lộ một tấm bản đồ trải trên thùng nước phía sau. Đó là bản đồ cũ hơn bản đồ giao thông hiện đại, nhưng không hẳn là bản đồ cổ. Trên đó, phía Tây Hà Nội có nhiều đường nét ngầm nối La Phù, Ngọc Trục, Láng và Hồ Tây. Một số đoạn bị cháy mất. Một số đoạn được đánh dấu bằng mực đỏ. + +“Đại Hà có một phần sơ đồ hạ tầng cũ,” Kha nói. “Không nhiều. Nhưng đủ xác nhận Láng là nút tiếp theo.” + +“Vì sao nói với tôi?” + +“Vì mày sẽ đi.” + +“Anh muốn tôi mở đường?” + +“Tao muốn xem HANOI-07 chọn mày vì lý do gì.” + +Tiến không tránh ánh mắt hắn. + +“Anh sợ nó không chọn anh.” + +Nụ cười của Kha nhạt đi. Trong kho, hai người gác hơi động vai. Kha đưa tay, ra hiệu họ đứng yên. “Thông minh đấy.” Hắn nói nhỏ. “Nhưng đừng nhầm. Tao không cần nó chọn. Tao chỉ cần người được chọn không sống đủ lâu để dùng nó.” + +Ánh mắt hai người chạm nhau. Trong kho nước bỏ hoang, giữa một thành phố đang chết khát, hai kẻ từng giết và bị giết ở tương lai đứng đối diện nhau, nhưng không ai ra tay. Chưa phải lúc. Kha gấp bản đồ lại. + +“Ba ngày nữa, khu Láng sẽ mất sạch tín hiệu. Nếu mày muốn biết vì sao Hồ Tây thức dậy, tới đó trước khi bùn Tô Lịch khô hẳn.” + +“Và nếu tôi không tới?” + +“Khi đó, tao sẽ tới.” + +Kha xoay người rời đi bằng cửa phụ. Trước khi biến mất, hắn dừng lại. “À, chuyển lời cho phóng viên Trần Thanh Thủy. Những người ghi chép sự thật thường chết trước những người làm ra nó.” + +Cửa phụ đóng lại. Tiến đứng yên vài giây, rồi mở bộ đàm. + +“Thủy.” + +Đầu bên kia lập tức trả lời. + +“Tôi nghe.” + +“Kha biết cô.” + +Một khoảng im lặng ngắn. + +“Vậy chúng ta càng phải tới Láng trước hắn.” + +Tiến rà tấm bản đồ còn hằn vết bụi trên thùng nước. Con số **47** mắc lại trong đầu cùng hai chữ **M.K.** ở mặt trong chiếc nhẫn. + +Ngoài cửa kho, Kha lên xe trước khi hai người gác kịp mở hết cổng. Hắn không chờ bất kỳ ai ký cho mình quyền rời đi. + +Chương 16: Trạm Láng + +Khu Láng mất tín hiệu vào rạng sáng ngày thứ mười sáu sau Hồng Nhật. + +Không phải mất sóng thông thường. Trên bản đồ hạ tầng Tiến dựng lại từ dữ liệu cũ, các trạm phát, tủ cáp, nút điện phụ và camera giao thông quanh đường Láng tắt dần theo một vòng tròn rất đều. Từ ngoài vào trong. Từng điểm xám đi như bị một bàn tay vô hình đặt lên bản đồ rồi xoay chậm. + +Ông Hòa nhìn màn hình, mặt nhăn lại. “Điện không chết kiểu này.” + +“Vậy chết kiểu gì?” Bình hỏi. + +“Điện chết vì quá tải thì nổ chỗ yếu trước. Chết vì cắt nguồn thì tắt theo tuyến. Cái này…” Ông chỉ vào vòng xám đang co lại. “Giống bị rút tim.” + +Kha đã nói ba ngày nữa Láng sẽ mất sạch tín hiệu, và hắn đúng gần như từng giờ. Tiến thấy điều đó đáng ngại hơn mọi lời đe dọa: một kẻ thù biết thảm họa sẽ đến lúc nào luôn nguy hiểm hơn kẻ chỉ có nhiều súng. + +Thủy đến Ngọc Trục trước bình minh. + +Cô không mang máy ảnh lớn. Chỉ có một túi nhỏ, hai pin dự phòng, một máy ghi âm, một bản đồ giấy, một con dao gấp và tập tài liệu bọc trong túi chống nước. Sau Đại Hà, cô thay đổi cách chuẩn bị. Không còn phong cách phóng viên đi hiện trường bình thường nữa. Mỗi món đồ cô mang đều có lý do để sống thêm vài giờ. + +“Tôi đi cùng,” cô nói. + +“Biết.” + +“Anh không cản?” + +“Cản không được.” + +“Ít nhất anh đã học được một điều.” + +Tiến quay sang cô. + +“Nhưng cô phải nghe lệnh khi có nguy hiểm.” + +Thủy cười nhạt. “Câu đó thường là câu mở đầu cho việc tôi không nghe.” + +“Vậy cô ở lại.” + +Nụ cười trên môi Thủy tắt hẳn. Cô cân nhắc một lúc rồi gật đầu. “Được. Khi có nguy hiểm rõ ràng, tôi nghe.” + +“Không phải rõ ràng. Khi tôi nói chạy, cô chạy.” + +“Được.” + +Bình dẫn đường. Cậu chọn tuyến nhỏ qua các ngõ ít người, tránh những điểm đang có tranh cướp nước. Nam cũng muốn đi, nhưng Tiến từ chối. Cậu chưa sẵn sàng rời căn cứ. Linh ở lại phụ trách y tế, ông Hòa giữ điện và máy phát. Phúc còn sốt, không thể di chuyển. + +Ba người rời Ngọc Trục lúc 5 giờ 10. + +Hà Nội trước bình minh không mát hơn bao nhiêu. Không khí vẫn nóng, chỉ bớt phần ánh sáng đỏ làm người ta phát điên. Một số người ngủ ngay trên vỉa hè vì trong nhà quá nóng. Có người ôm bình nước như ôm trẻ con. Vài cửa hàng bị phá, biển hiệu rơi xuống đất, kính vỡ lấp lánh dưới ánh đèn pin. Trên tường, những dòng chữ mới xuất hiện: **NƯỚC**, **ĐIỆN**, **CỨU CHÚNG TÔI**. + +Đường Láng nằm im lặng bất thường. + +Không phải vắng người hoàn toàn. Vẫn có bóng người đi lại, vẫn có xe máy đẩy bộ, vẫn có vài nhóm dân cư tụ bên vòi nước công cộng đã cạn. Nhưng âm thanh ở đây bị hút xuống thấp. Không có tiếng loa, không có tiếng máy phát, không có tiếng radio. Ngay cả tiếng còi xe từ xa cũng như bị tường vô hình chặn lại. + +Thủy dừng trước một đoạn nhìn xuống sông Tô Lịch. Nước sông đã rút nhiều, chỉ còn một dòng đen đặc ở giữa lòng kênh. Hai bên bùn lộ ra, nứt thành từng mảng, bốc mùi hôi nồng dưới nắng sắp lên. Nhưng giữa lớp bùn đen, có những đường thẳng xám nhạt chạy song song, đều đến mức không thể là tự nhiên. + +“Đó là gì?” Bình hỏi. + +Tiến đưa ống nhòm cho Thủy. Cô chỉnh tiêu cự, nhìn xuống lớp bùn rồi hạ ống. “Không phải cống.” + +“Vì sao?” + +“Cống không khắc ký hiệu lên nắp.” + +Dưới lớp bùn, trên một mảng vật liệu xám lộ ra nửa phần, có một ký hiệu mặt trời đỏ bị bùn che mất một nửa. Tiến cảm thấy ngực nặng xuống. Ngọc Trục không phải điểm cô lập. Ký hiệu này đã nằm dưới Láng từ lâu. + +Họ men theo bờ kênh, tránh đám đông. Bình dẫn vào một con ngõ nhỏ gần Chùa Láng. Càng vào sâu, nhiệt độ trên máy đo của Tiến càng lạ. Không tăng, cũng không giảm đều. Nó nhảy từng nhịp: 43°C, 39°C, 45°C, 37°C. Như thể các vùng không khí chồng lên nhau mà không trộn. + +“Máy hỏng à?” Bình thì thầm. + +“Không.” Tiến đáp. “Không khí hỏng.” + +Thủy liếc hắn. “Câu đó đáng sợ hơn anh nghĩ.” + +Cuối ngõ là một căn nhà hai tầng cũ, cửa sắt khóa ngoài, biển hiệu đã bị tháo. Theo dữ liệu Thủy lấy được trước Hồng Nhật, nơi này từng là văn phòng của một đơn vị tư vấn môi trường đô thị. Nhưng trong một file log cũ, địa chỉ này xuất hiện dưới mã khác: + +**S07-LANG / OBSERVATION SUBNODE** + +Bình nhìn khóa cửa. “Phá không?” + +Tiến kiểm tra xung quanh. + +“Không phá lớn. Mở im.” + +Bình cười méo. “Anh nghĩ shipper nào cũng biết mở khóa à?” + +“Cậu từng giao hàng lúc khách quên chìa trong nhà.” + +“Đấy là em trèo ban công.” + +“Vậy trèo.” + +Bình chửi rất nhỏ, nhưng vẫn trèo. + +Năm phút sau, cửa trong được mở từ bên trong. Căn nhà tối, nóng và đầy bụi, nhưng không có dấu hiệu bị lục soát gần đây. Tầng một trống gần hết. Tầng hai có vài bàn làm việc cũ, tủ hồ sơ rỗng, dây mạng bị cắt. Không có gì đáng chú ý cho đến khi Thủy phát hiện một vết trầy trên nền gạch sau tủ tài liệu. + +Tủ quá nặng để người thường di chuyển một mình. Nhưng Bình tìm thấy ròng rọc nhỏ gắn vào chân tủ. + +“Có người muốn cái tủ này trông như không thể di chuyển,” cậu nói. + +Tiến và Bình kéo tủ sang bên. Bên dưới là một nắp kim loại vuông, nhỏ hơn nhiều so với nắp ở Ngọc Trục. Không có ký hiệu đỏ phát sáng. Chỉ có một hàng chữ khắc chìm: + +**LANG / LISTENING WELL** + +Giếng nghe. Thủy đọc thành tiếng, giọng khàn đi. + +“Giếng nghe là gì?” + +Tiến quỳ xuống, đặt tay gần nắp nhưng không chạm. “Tôi không biết.” + +Từ dưới nắp vọng lên một âm thanh rất thấp, không giống tiếng máy hay tiếng nước. Nó gần với tiếng người thì thầm qua một bức tường quá dày, từng âm tiết bị kéo giãn đến mức không thể hiểu. Bình lùi lại. + +“Em không thích cái này.” + +Thủy bật máy ghi âm. Đèn máy chớp một cái rồi tắt phụt. Tiến quay sang cô. + +“Không dùng thiết bị.” + +“Vậy ghi kiểu gì?” + +Tiến lấy giấy bút đưa cho cô. + +“Bằng tay.” + +Thủy cúi sát xuống, lắng nghe. Những âm thanh bên dưới lặp lại theo nhịp. Cô không hiểu nghĩa, nhưng nhận ra có cấu trúc. Dài. Ngắn. Ngắt. Lặp. Cô viết lại theo ký hiệu của mình. Ba phút sau, âm thanh dừng hẳn. Cùng lúc đó, bên ngoài ngõ vang lên tiếng bước chân. Không phải một nhóm dân thường. Bước chân đều, nhẹ, quen thuộc. + +Bình nhìn Tiến. “LP-17?” + +Tiến tắt đèn pin. + +“Không. Nhanh hơn.” + +Thủy gấp giấy bỏ vào túi. + +“Người của Kha?” + +Tiến nghe thêm một giây. Có tiếng kim loại chạm vào tường. Có tiếng ai đó nói nhỏ qua bộ đàm. Rồi một giọng nam vang lên ngoài cửa tầng một. + +“Kiểm tra tầng trên. Nếu gặp Lê Quốc Tiến, không bắn vào đầu. Anh Kha muốn hắn còn nói được.” + +Bình nuốt khan. + +“Em rút lại. Em cực kỳ không thích cái này.” + +Tiến nhìn nắp kim loại dưới sàn. Từ bên dưới, tiếng thì thầm lại vang lên. Lần này, giữa những âm thanh kéo dài, có một cụm từ tiếng Việt rất mờ. + +**...không mở... khi mặt trời còn đỏ...** + +Thủy nhìn Tiến, mặt trắng bệch. Tiếng bước chân đã lên cầu thang. Trạm Láng vừa thức dậy. Và họ không phải những người duy nhất nghe thấy. + +Chương 17: Nước + +Tiến không mở nắp Trạm Láng. Đó là quyết định đúng đầu tiên trong ngày. + +Quyết định đúng thứ hai là kéo Thủy và Bình chạy theo lối mái nhà thay vì xuống cầu thang. + +Người của Kha lên tới tầng hai đúng lúc Bình đạp tung tấm cửa thông ra sân thượng. Nắng đỏ ùa vào như lửa. Ba người lao qua mái nhà thấp bên cạnh, trượt xuống một ban công cũ, rồi chui vào lối thoát hiểm của một khu tập thể bỏ gần hết người. Sau lưng, tiếng quát và tiếng bước chân đuổi theo vang lên, nhưng khu Láng quá nhiều ngõ, quá nhiều lối thông, quá nhiều ban công và mái tôn cũ. Bình ở đây như cá gặp nước. + +“Trái!” cậu hét nhỏ. + +Tiến kéo Thủy rẽ vào một cầu thang tối. Họ chạy xuống hai tầng, chui qua một cửa sổ đã mất kính, băng qua mái bếp nhà dân, rồi nhảy xuống một ngõ nhỏ đầy thùng xốp. Một bà cụ đang ngồi quạt mo trước cửa nhìn ba người rơi xuống, không hét, chỉ chậm rãi hỏi: + +“Trốn nợ à?” + +Bình vừa thở vừa đáp: “Vâng bà ạ.” + +Bà cụ gật đầu. “Chạy nhanh. Bọn đòi nợ giờ cũng khát nước lắm.” + +Nếu không phải đang bị truy đuổi, Thủy có lẽ đã bật cười. + +Họ thoát khỏi Láng trước khi mặt trời lên cao hẳn. Về tới Ngọc Trục, cả ba gần kiệt sức. Linh bắt từng người ngồi xuống và uống nước muối loãng thành từng ngụm; ai vừa chạm chai lên miệng quá nhanh đều bị cô kéo xuống. Trong nhiệt độ này, uống sai cách cũng có thể nôn hết ra, thậm chí sốc cơ thể. + +Thủy lấy tờ giấy ghi âm bằng tay ra. Mực đã nhòe vì mồ hôi, nhưng vẫn đọc được vài chuỗi ký hiệu cô chép lại. + +“Không mở khi mặt trời còn đỏ,” cô nói. “Tôi chắc chắn nghe được câu đó.” + +Ông Hòa cau mày. “Cái gì không mở?” + +“Cổng,” Tiến đáp. + +Không ai hỏi cổng nào. Tất cả đều nghĩ tới cùng một thứ. + +Cổng Thăng Long. Nhưng vấn đề cấp bách hơn xuất hiện vào buổi chiều. Bể chứa phụ của Ngọc Trục tụt nhanh bất thường. + +Ông Hòa phát hiện đầu tiên khi kiểm tra đồng hồ bơm. Theo tính toán, với số người hiện tại, lượng nước đã lọc và đóng kín đủ dùng tiết kiệm trong nhiều tuần. Nhưng mực bể phụ giảm gần một phần mười chỉ trong nửa ngày. Không có dấu hiệu vỡ ống lớn. Không có nước tràn trên nền. Không ai dùng vượt định mức. + +“Rò dưới đất,” ông Hòa nói. + +Tiến lập tức kiểm tra đường ống. Vết rò nằm ở đoạn dẫn từ bể phụ sang khu lọc. Một lỗ nhỏ bằng đầu đũa trên ống nhựa, gần như không đáng kể trước Hồng Nhật. Nhưng trong căn cứ lúc này, nó là một vết thương chí mạng. Nước thấm xuống nền, biến mất vào khe bê tông cũ trước khi ai kịp thấy. + +Nam đứng bên cạnh, mặt tái đi. + +“Mất bao nhiêu?” + +“Ít nhất hai trăm lít,” Tiến nói. + +Bình chửi thề. Linh mím môi. Hai trăm lít. Trước tận thế, đó là vài lần tắm, vài máy giặt, vài thùng nước lau nhà. Bây giờ, đó là mạng sống nhiều ngày của cả căn cứ. Ánh mắt Tiến đi một vòng qua mọi người. + +“Từ hôm nay giảm định mức.” + +Nam lập tức ngẩng đầu. + +“Giảm nữa?” + +“Giảm nữa.” + +“Nhưng Phúc còn sốt. Đứa bé kia cũng cần nước.” + +“Linh sẽ có định mức y tế riêng. Phần sinh hoạt giảm.” + +Phúc, vẫn còn yếu, chống tay ngồi dậy. + +“Tôi nhường phần của tôi.” + +Linh quay phắt sang. + +“Anh nhường để chết à? Tôi không nhận bệnh nhân tự tử bằng tử tế.” + +Phúc ngậm miệng, vẫn còn bực nhưng không cãi với Linh. Thủy quay sang Tiến. + +“Có cách bổ sung không?” + +“Có.” + +“Ở đâu?” + +Tiến mở bản đồ. + +“La Phù còn nước, nhưng thuộc Kha. Một số khu dân cư còn bể ngầm, nhưng sẽ có người canh. Giếng khoan cũ ở Ngọc Trục bị niêm phong, chưa rõ dùng được không. Hồ Tây không dùng được. Nước máy thành phố không ổn định.” + +Bình nuốt khan. + +“Tức là không có cách nào dễ.” + +“Nếu còn đường dễ thì người ta đã không giành nhau từng chai nước.” + +Tối đó, Tiến gọi về quê. Lần này tín hiệu yếu hơn nhiều. Mất bốn lần mới kết nối. “Mẹ?” + +“Tiến à, nghe được không?” + +“Con nghe. Ở nhà thế nào?” + +“Điện mất nhiều hơn. Nước giếng còn, nhưng nóng lắm. Mấy nhà quanh đây bắt đầu sang xin nước. Mẹ cho mỗi nhà một ít.” + +Tiến nhắm mắt. + +“Mẹ cho vừa thôi. Đừng để ai biết trong nhà còn nhiều nước con gửi.” + +“Biết rồi. Nhưng người làng với nhau…” + +“Mẹ.” + +Giọng hắn cứng đi. Bên kia không đáp. Tiến tự hạ giọng trước. + +“Con biết khó. Nhưng nếu họ biết mẹ có nhiều, họ sẽ không chỉ xin. Lúc đầu là xin. Sau đó là trách. Rồi họ sẽ nói nhà mình ích kỷ. Rồi sẽ có người tới lúc mẹ ngủ.” + +Bên kia chỉ còn tiếng nhiễu một lúc lâu. “Con thay đổi nhiều quá,” mẹ nói nhỏ. + +Tiến cảm thấy cổ họng đau. + +“Con xin lỗi.” + +“Không. Mẹ chỉ…” Bà thở dài. “Mẹ sẽ cẩn thận.” + +Trước khi cúp máy, bà kể một chuyện khiến Tiến lạnh gáy. + +Chiều qua có hai người lạ về xã, hỏi mua máy phát và nước đóng chai số lượng lớn. Họ đi xe bán tải trắng, không nói giọng địa phương. Một người hỏi nhà bà có phải có con làm ở Hà Nội không. + +“Con quen ai ở quê à?” bà hỏi. + +Tiến đứng bật dậy. + +“Không. Mẹ nghe con. Từ giờ không nói với ai về đồ con gửi. Nếu hai người đó quay lại, mẹ sang nhà bác Dũng ngay. Đừng ở một mình.” + +“Có chuyện gì?” + +“Làm theo con.” + +Cuộc gọi rớt trước khi hắn kịp nói thêm. Tiến đứng giữa kho, điện thoại trong tay nóng lên vì pin yếu. Kha đã không chỉ tìm thấy Ngọc Trục. Hắn đang dò tới quê của mẹ. Thủy nhìn sắc mặt Tiến, hiểu ngay có chuyện. + +“Mẹ anh?” + +Tiến gật đầu. Bình chửi thề lần thứ hai trong ngày. “Bọn LP-17 tới tận Thanh Hóa?” + +“Chưa chắc là LP-17,” Tiến nói. “Nhưng cùng kiểu.” + +Ông Hòa siết chặt tua vít. + +“Cậu muốn về quê?” + +Tiến rà bản đồ. Hà Nội đang chết. Ngọc Trục còn chưa ổn. Láng vừa mở tín hiệu. Hồ Tây đang lộ xương. Kha đang chuyển quân. Và ở Thanh Hóa, mẹ hắn có thể đã bị đánh dấu. Không có lựa chọn nào không đau. Linh bước tới, đặt một chai nước nhỏ lên bàn. + +“Anh không thể đi một mình.” + +“Chưa đi,” Tiến nói. + +Nhưng chính hắn cũng nghe thấy sự do dự trong giọng mình. Thủy trải lại bản đồ kỹ thuật họ lấy từ trạm Láng. Ở mép bản đồ có một ký hiệu giọt nước bị gạch chéo, trước đây cô cho là dấu hỏng. Ông Hòa nhìn lâu rồi chỉ một đường ống cũ chạy từ khu phía nam Hồ Tây về tuyến bơm dự phòng. + +“Không phải tọa độ,” ông nói. “Là ký hiệu nguồn không dùng cho ăn uống.” + +“Nhưng có thể dùng sau xử lý?” Thủy hỏi. + +“Có thể. Nếu đường còn.” + +Tiến đối chiếu với bản đồ cấp nước thành phố đã lưu trước Hồng Nhật. Điểm giao nằm gần một trạm bơm cũ phía nam Hồ Tây — nơi đủ gần mạch ngầm, đủ xa khu dân cư và chưa có dấu nhóm lớn chiếm. Tủ điện phụ kêu tách. Màn hình HN-07 chỉ hiện một cảnh báo: + +**WATER CONDUCTIVITY DEVIATION – WESTERN NETWORK** + +Không có tọa độ, mũi tên hay “nhiệm vụ”. Dữ liệu của hệ thống chỉ xác nhận điều họ vừa suy ra: mạng nước phía Tây đang đổi. + +Thủy khoanh trạm bơm trên bản đồ. “Chúng ta kiểm tra ở đây.” Tiến nhìn bể nước đang tụt, rồi nhìn điện thoại vừa mất sóng sau cuộc gọi với mẹ. Hồng Nhật không cho hắn giải từng vấn đề theo thứ tự. Nước, mẹ, Kha, Láng và Hồ Tây đang cùng siết lại. + +Nhưng lần này, điểm đến không do HANOI-07 chỉ. Là do những người còn sống đọc bản đồ và tự chọn. + +Chương 18: Hồ Tây Lộ Xương + +Điểm giao mà Thủy và ông Hòa tự suy ra từ bản đồ nước nằm gần một trạm bơm cũ phía nam Hồ Tây. HN-07 không đưa tọa độ; nó chỉ báo độ dẫn điện mạng phía Tây đang đổi. Chính vì vậy, không ai được phép coi trạm bơm là “đáp án của hệ thống”. Nó chỉ là giả thuyết tốt nhất mà họ đang có. + +Trước Hồng Nhật, nơi đó không đáng chú ý. Một công trình thấp, tường xám, cửa sắt rỉ, nằm khuất sau hàng cây và vài đoạn bờ kè cũ. Người đi qua chỉ thấy một mảng hạ tầng đô thị vô danh, giống hàng trăm trạm bơm, tủ điện, nhà kỹ thuật rải khắp Hà Nội. Nhưng sau khi mặt trời đỏ xuất hiện, những nơi vô danh bắt đầu có giá trị khác. + +Chúng là chỗ thành phố giấu xương. + +Tiến không muốn rời Ngọc Trục khi vấn đề nước chưa xử lý xong, nhưng điểm giao xuất hiện đúng lúc bể phụ rò rỉ đủ để đáng kiểm tra. Ông Hòa ở lại vá đường ống và kiểm tra giếng khoan cũ. Linh quản lý nước và y tế. Nam được giao phụ cô, đồng thời ghi định mức từng người. Bình muốn đi, nhưng sau chuyến Láng, cậu kiệt sức. Lần này chỉ có Tiến và Thủy; một đội lớn hơn sẽ dễ bị nhận ra quanh Hồ Tây. + +Trước khi đi, Thủy viết ba mốc lên bảng: giờ tới, giờ gọi lại, giờ rút. Nếu quá mốc cuối mười lăm phút mà không có tín hiệu, Ngọc Trục không cử người lao vào tìm; Bình sẽ kiểm tuyến thứ hai trước, còn Linh giữ căn cứ. Tiến không thích điều khoản đó. Chính vì thế Thủy bắt hắn ký tên bên cạnh. + +“Anh tin điểm đó?” Thủy hỏi. + +“Không.” + +“Vậy sao đi?” + +“Vì nó kiểm chứng được. Và vì Kha cũng có đủ dữ kiện để tự suy ra.” + +Tin HN-07 và phản ứng trước cùng một tín hiệu là hai chuyện khác nhau. Tiến không cần gán ý tốt cho hệ thống; hắn chỉ cần tính đến việc mọi phe có thông tin đều sẽ bị kéo về Hồ Tây. Nếu hắn không đến, hắn sẽ chậm hơn một nước. Đường tới Hồ Tây nguy hiểm hơn lần trước. + +Các tuyến phố gần hồ bị chặn từng đoạn bằng rào tạm, xe máy bỏ lại, thùng nước rỗng và những đống rác chưa ai thu gom. Mùi bùn nóng lan xa hơn, nặng đến mức phải đeo khẩu trang ướt mới chịu nổi. Trên mạng, những video về “vật thể dưới Hồ Tây” đã bắt đầu lan truyền, nhưng phần lớn bị xóa nhanh hoặc bị gắn nhãn tin giả. Điều đó không làm người dân bớt tò mò. Ngược lại, càng xóa, đám đông càng kéo tới. + +Tiến dừng xe cách trạm bơm hơn ba trăm mét. + +“Đi bộ.” + +Thủy nhìn đám người tụ gần bờ hồ. “Nếu chen vào đó sẽ bị kẹt.” + +“Không chen. Đi phía sau trạm.” + +Hai người men theo một lối nhỏ giữa các bức tường cũ. Cây ven hồ héo rũ, lá quăn lại như bị nướng. Một con chó nằm dưới gầm xe máy, thở dốc, lưỡi thè ra nhưng không còn sức sủa. Trên mặt đường, vài con cá nhỏ chết khô dính vào bụi bùn, không hiểu bị nước rút kéo ra từ lúc nào. + +Trạm bơm khóa ngoài. Khóa mới. Không phải khóa rỉ cũ của công trình bỏ quên. Một ổ khóa đen, thân dày, lắp vội nhưng chắc. Tiến kiểm tra dấu chân gần cửa. Có ít nhất bốn người đã vào đây trong vòng một ngày. Một vệt bánh xe nhỏ kéo tới cửa phụ, giống xe đẩy thiết bị. + +“Kha?” Thủy hỏi. + +“Có thể. Hoặc người khác.” + +“Anh ghét hai chữ đó lắm đúng không?” + +“Vì chúng thường đi trước rắc rối.” + +Tiến không phá khóa chính. Hắn tìm cửa thoát gió phía sau, tháo lưới bằng dụng cụ nhỏ, rồi chui vào trước. Bên trong trạm bơm tối, nóng, nhưng không hôi như bên ngoài. Không khí ở đây khô bất thường, mang mùi kim loại lạnh rất giống luồng khí dưới Ngọc Trục. + +Thủy chui vào sau, bật đèn pin bọc giấy mờ. + +Máy bơm cũ nằm im. Đường ống lớn chạy xuống nền, một số đoạn đã được thay mới nhưng không theo tiêu chuẩn hiện đại. Trên tường có bản vẽ kỹ thuật thành phố, nhiều chỗ bị xé. Ở góc phòng, một tấm nắp sàn vừa được mở rồi đóng lại không kín. Mép nắp còn dính bùn đen. + +Tiến quỳ xuống. Bùn còn ướt. + +“Có người xuống gần đây.” + +Thủy soi đèn vào mép nắp. + +“Ký hiệu.” + +Một vòng tròn mặt trời đỏ được khắc ở cạnh trong, nhỏ đến mức nếu nắp đóng kín sẽ không ai thấy. Bên dưới ký hiệu có ba chữ: + +**WATER VEIN B** + +Mạch nước B. Tiến mở nắp. Bên dưới không phải bể chứa nước. Là một đường thang sắt hẹp dẫn xuống không gian tối. Tiếng nước chảy rất nhỏ vọng lên, nhưng không giống tiếng nước máy. Nó sâu hơn, chậm hơn, như có một dòng ngầm đang thở. + +Thủy đưa máy ảnh lên. Tiến giữ tay cô lại. + +“Không dùng gần miệng hầm.” + +Cô gật đầu, cất máy. Hai người xuống. + +Độ sâu khoảng sáu mét. Cuối thang là một hành lang kỹ thuật cũ, tường bê tông ẩm, nhưng giữa lớp bê tông có những mảng vật liệu xám giống ở Ngọc Trục. Nước rỉ thành từng dòng nhỏ trên nền, chảy về một khe hẹp phía hồ. Trên vách có nhiều đường ống bị cắt, nhưng bên dưới chúng là một cấu trúc cổ hơn: những rãnh dẫn nước bằng đá, xếp khít đến mức không thấy mạch vữa. + +Thủy chạm nhẹ vào đá. + +“Cái này không phải công trình hiện đại.” + +“Không.” + +“Từ thời nào?” + +“Muốn biết thì phải sống đủ lâu để hỏi đúng người.” + +Hành lang dẫn đến một cửa quan sát nhỏ nhìn ra lòng hồ qua một khe ngang. Từ đây, họ thấy rõ thứ mà từ trên bờ chỉ là một đường tối. Dưới lớp nước rút, giữa bùn đen và xác cá, một cạnh kim loại khổng lồ đã lộ ra. + +Nó không giống tàu chìm. Không giống cống. Không giống bất kỳ công trình thủy lợi nào. Bề mặt kim loại tối màu, có những đường gờ cong rất lớn, phủ bùn nhưng vẫn hiện lên độ chính xác đáng sợ. Một phần cạnh chìm sâu dưới nước, phần khác vươn ra như xương sườn của một sinh vật khổng lồ bị chôn dưới hồ. + +Thủy nín thở. + +“Hồ Tây lộ xương.” + +Tiến không thích cách gọi đó. Vì nó quá đúng. Ở mép kim loại, có người. Bốn bóng người mặc đồ đen đang đứng trên bùn, dùng dây cố định một thiết bị hình trụ. Một người trong số đó cầm bản đồ chống nước. Dù khoảng cách xa, Tiến vẫn nhận ra dáng đứng ấy. Đỗ Minh Kha. Hắn đã tới trước. + +Thủy cũng nhận ra. + +“Kha đang làm gì?” + +“Đo hoặc mở.” + +“Anh nói ‘mở’ nghe như mở cửa.” + +“Vì có thể đúng là cửa.” + +Ngay lúc đó, thiết bị hình trụ phát sáng xanh nhạt. Một tiếng ù trầm vang qua lòng hồ. Mặt nước quanh cạnh kim loại rung lên, tạo thành những vòng tròn nhỏ. Bùn dưới chân nhóm của Kha bắt đầu sủi bọt. Một người trong nhóm hét lên. Âm thanh vọng vào hành lang rất nhỏ, nhưng đủ nghe thấy hoảng loạn. + +Kha lập tức lùi lại. Hắn luôn đứng ở vị trí có đường thoát, kể cả trên bùn. Hai người còn lại chậm hơn. Bùn dưới chân họ sụp xuống như bị hút. Một người ngã quỵ, tay cào lên mặt kim loại, để lại những vệt bùn dài. Thiết bị hình trụ tắt phụt. Mặt hồ im trở lại. Người bị ngã không đứng lên nữa. + +Kha chỉ dừng mắt trên xác đồng đội đủ lâu để xác nhận người đó không đứng dậy nữa, rồi ngẩng về phía trạm bơm. Tiến kéo Thủy lùi khỏi khe quan sát. “Đi.” + +“Anh ta thấy chúng ta?” + +“Không biết.” + +Lần này hai chữ đó không chỉ khó chịu. Nó nguy hiểm. Họ rời đường hầm bằng lối cũ. Khi trèo lên phòng trạm bơm, Thủy phát hiện trên bàn kỹ thuật có một tờ giấy bị bỏ lại. Không phải của Kha. Giấy đã cũ, mép ố vàng, nhưng chữ in vẫn đọc được. + +**MẠCH NƯỚC B CHỈ LÀ ĐƯỜNG DẪN. KHÔNG KÍCH HOẠT KHI HỒ CHƯA RÚT ĐỦ.** + +Bên dưới là một dòng viết tay: + +**Nếu Láng thức, Hồ Tây sẽ trả lời.** + +Thủy gấp tờ giấy bỏ vào túi. Ngoài cửa, tiếng xe thắng lại. Bước chân sau đó quá đều để là đám đông, cũng không có tiếng gọi của dân phòng. Một giọng nam quen thuộc vang lên. + +“Tiến. Tao biết mày ở trong đó.” + +Đỗ Minh Kha. Tiến quay sang Thủy. Không còn lối thoát phía sau. Dưới chân họ là mạch nước B. Trước mặt là Kha Đen. Và ngoài kia, dưới đáy Hồ Tây, bộ xương kim loại đầu tiên của Thăng Long đã lộ ra dưới mặt trời đỏ. + +Chương 19: Người Gõ Cửa + +Đỗ Minh Kha không phá cửa. Hắn gõ ba tiếng lên cửa sắt trạm bơm. Cộc. Cộc. Cộc. + +Âm thanh ấy quá giống tiếng gõ dưới nền Ngọc Trục khiến Thủy vô thức lùi lại. Tiến thì đứng yên, mắt nhìn cửa, tay phải đặt gần dao gấp. Hắn biết Kha cố ý. Gã này không chỉ dùng vũ lực. Hắn dùng ký ức, dùng nỗi sợ, dùng những mảnh thông tin nhỏ để ép người khác tự lộ phản ứng. + +“Ra nói chuyện,” Kha nói từ bên ngoài. “Nếu tao muốn giết, tao đã không gõ.” + +Thủy hạ giọng. “Tin được không?” + +“Không.” + +“Vậy?” + +“Nhưng hắn nói đúng một nửa.” + +Tiến rà căn phòng trạm bơm. Cửa chính bị Kha chặn. Cửa thông gió quá nhỏ để thoát nhanh. Nắp hầm phía sau dẫn xuống mạch nước B, nhưng nếu xuống đó, họ sẽ tự chui vào đường cụt. Kha có ít nhất ba người bên ngoài. Còn đám đông gần bờ hồ đủ xa để không can thiệp, đủ gần để Kha không muốn gây tiếng động lớn. + +Đó là điểm cân bằng mong manh. Tiến mở cửa. + +Kha đứng dưới nắng đỏ, gấu áo sơ mi đen bám bùn, tay trái vẫn đeo nhẫn. Sau lưng hắn là hai người, một nam một nữ, mặc đồ nhẹ và đeo túi kỹ thuật. Không ai để súng lộ ra ngoài; Tiến vì thế càng không coi họ tay không. Kha nhìn qua vai Tiến, thấy Thủy. + +“Phóng viên Trần Thanh Thủy. Tôi đã đọc vài bài của cô. Văn phong hơi nhiều đạo đức, nhưng khả năng tìm nguồn khá tốt.” + +Thủy lạnh mặt. + +“Tôi có nên cảm ơn không?” + +“Không. Đạo đức trong thời tiết này dễ mất nước lắm.” + +Tiến bước ra, khép hờ cửa sau lưng. + +“Anh muốn gì?” + +Kha đưa mắt về phía hồ. + +“Một xác chết vừa chứng minh mạch nước B chưa mở được. Mày ở trong trạm, chắc đã thấy ghi chú.” + +Tiến không đáp. Kha mỉm cười. “Không cần phủ nhận. Mày có thói quen lấy mọi thứ có chữ. Kỹ sư hệ thống nào cũng nghĩ dữ liệu cứu được mình.” + +“Còn anh nghĩ gì cứu được anh?” + +“Quyền phân phối.” + +Kha nói câu đó rất bình thản. “Ai nắm nước, nắm điện, nắm đường đi, người đó không cần cứu ai. Người khác sẽ tự bò đến.” + +“Vậy thứ dưới Hồ Tây là đường nước?” + +“Không chỉ nước.” + +Kha nhìn Tiến như nhìn một học sinh đang hỏi sai trọng tâm. “Hà Nội có quá nhiều lớp. Lớp trên mặt là đường, nhà, hồ, cầu, chung cư. Lớp dưới là cống, hầm, móng, dây, ống. Dưới nữa là những thứ không ai đưa vào quy hoạch. Hồng Nhật không tạo ra chúng. Nó chỉ làm lớp trên cùng nứt ra.” + +“Anh lấy thông tin từ đâu?” + +“Câu đó mày đã hỏi bằng nhiều cách rồi.” + +“Anh chưa trả lời.” + +“Vì mày chưa có thứ để đổi.” + +Tiến giữ ánh mắt ở Kha. + +“Ngọc Trục.” + +Lần này, Kha không cười. “Đúng. Cho tao quyền xuống HN-07, tao cho mày bản đồ đầy đủ tuyến phía Tây.” + +“Không.” + +“Vậy cho tao người.” + +Thủy cau mày. “Người?” + +Kha nhìn cô. “Cô.” + +Không khí đông cứng. Tiến hơi nghiêng người, chắn trước Thủy. Kha thấy động tác đó, khóe miệng nhếch rất nhẹ. + +“Đừng hiểu nhầm. Tôi không cần cô vì cô là phụ nữ. Tôi cần cô vì HANOI-07 phản ứng với cô. Láng cũng phản ứng. Hồ Tây sẽ còn phản ứng. Người ghi chép đôi khi quan trọng hơn người mở cửa.” + +Thủy nắm chặt túi tài liệu. + +“Anh biết gì về tôi?” + +“Ba việc. Ba nguồn khác nhau.” Kha giơ một ngón tay. “Tệp cô mở: bản sao bộ đệm từ rơ-le cũ của dự án năm 2023. Một kỹ thuật viên bán cho người của tôi trước khi Đại Hà khóa mạng.” Ngón thứ hai. “Những giấc mơ: ba đoạn ghi âm cô tưởng chỉ nằm trong điện thoại. Trình chuyển giọng cũ đã đẩy bản chép vào cùng bộ đệm.” Ngón thứ ba. “Câu dưới Trạm Láng: không ai của tôi nghe được. Một truy vấn trong kho dữ liệu trả lại bản chép với độ tin cậy bốn mươi hai phần trăm.” + +Thủy tái mặt, nhưng không để hắn điều khiển nhịp hỏi. “Anh vừa nói một dự đoán như thể đã nghe tận tai.” “Để xem cô phản ứng.” + +Tiến lạnh giọng. “Và nếu cô ấy phủ nhận?” + +“Tao hạ độ tin cậy.” Kha vuốt nhẹ chiếc nhẫn đen. “Theo dõi cho tao dữ kiện. Truy vấn cho tao giả thuyết. Phản ứng của cô cho tao phần còn lại.” + +Câu trả lời xác nhận một điều quan trọng: Kha không toàn tri. Hắn ghép những nguồn không hoàn hảo rồi trình bày chúng như sự thật để buộc người đối diện tự xác nhận. HN-07 vẫn che một phần bàn cờ khỏi hắn, nhưng sự thiếu hụt ấy không làm hắn bớt nguy hiểm; nó chỉ khiến hắn giỏi hơn trong việc khiến người khác điền vào chỗ trống. + +“Cô ấy không đi với anh.” + +“Cô ấy tự quyết được.” + +Thủy nhìn Kha. “Và nếu tôi từ chối?” + +“Cô sẽ tiếp tục đi theo một người biết trước thảm họa nhưng chỉ cứu được vài người, trong khi tưởng mình đang chống lại một kẻ độc ác.” Kha nghiêng đầu. “Còn nếu đi với tôi, cô sẽ thấy hệ thống đủ lớn để quyết định ai được sống trước khi đám đông kéo mọi thứ xuống bùn.” + +“Anh nói như thể mình đang cứu thế giới.” + +“Tôi không cứu thế giới. Tôi chọn phần còn lại có khả năng vận hành.” + +Thủy quan sát Kha như đang đặt một nguồn tin vào đúng ô trong đầu. “Tôi từng điều tra những người giống anh.” + +“Và họ thua vì còn phải giả vờ nhân đạo.” + +Tiến không muốn kéo dài cuộc nói chuyện. Mỗi giây ở đây là thêm nguy cơ. Nhưng trước khi hắn kịp ngắt lời, từ phía hồ vang lên tiếng hét. Đám đông bên bờ bắt đầu chạy tán loạn. Mặt nước gần cạnh kim loại tụt nhanh hơn, không rút đều mà xoáy thành một đường dài, để lộ thêm bề mặt tối màu. Từ xa, vật thể dưới đáy hồ giống một mảng xương sườn thứ hai đang nổi lên khỏi bùn. + +Một người của Kha bật bộ đàm. + +“Anh Kha, thiết bị còn dưới đó.” + +Kha quay đầu nhìn hồ. Trong khoảnh khắc ngắn, Tiến thấy sự khó chịu thật trên mặt hắn. Đó không phải nỗi sợ, mà là cảm giác một kế hoạch vừa bị đẩy nhanh ngoài dự kiến. Tiến lập tức nắm cổ tay Thủy. + +“Chạy.” + +Lần này cô không hỏi. Hai người lao sang bên hông trạm bơm. Kha không đuổi ngay. Hắn còn nhìn hồ, cân nhắc giữa họ và thiết bị dưới bùn. Đó là cơ hội duy nhất. Tiến và Thủy chạy theo lối tường cũ, vòng qua đám người hỗn loạn. Phía sau, Kha ra lệnh gì đó. Tiếng bước chân đuổi theo bắt đầu vang lên, nhưng bị tiếng người la hét và tiếng bùn sụp át bớt. + +Khi họ tới được xe, Thủy thở dốc, mặt trắng bệch. + +“Hắn muốn tôi.” + +“Vì cô nghe được Láng.” + +“Anh cũng nghe.” + +“Không. Tôi nghe âm. Cô nghe câu.” + +Thủy không nói thêm. Tiến khởi động xe. Phía sau, Hồ Tây tiếp tục rút. Trên mặt nước đỏ sẫm, những đường kim loại tối màu lộ ra ngày càng rõ, giống như có một thành phố khác đang nằm dưới thành phố này, chậm rãi mở mắt. Khi xe rời khỏi khu vực hồ, bộ đàm của Tiến rè lên. Không phải giọng Bình. + +Không phải ông Hòa. Một giọng rất nhỏ, lẫn trong nhiễu, vang lên ba lần: + +**...đừng... mở... cổng...** + +Thủy quay sang Tiến. + +“Đó là giọng ở Láng.” + +Tiến dõi theo con đường phía trước. + +“Không. Lần này nó phát qua bộ đàm.” + +Và điều đó nghĩa là Trạm Láng đã không còn nằm yên dưới đất. Nó đã bắt đầu tìm đường nói ra ngoài. + +Chương 20: Đường Ngầm Phía Tây + +Bộ đàm tiếp tục nhiễu suốt quãng đường về Ngọc Trục. + +Âm thanh không ghép thành câu hay một tín hiệu rõ ràng. Nó chỉ tới thành từng mảnh đứt đoạn, lúc giống nước chảy qua ống hẹp, lúc giống tiếng người vọng từ rất xa. Thủy ngồi phía sau, một tay bám vào xe, tay kia cầm sổ ghi lại từng nhịp nhiễu theo bản năng nghề nghiệp. Tiến không ngăn cô. Có những thứ máy ghi âm không giữ được, nhưng trí nhớ của con người đôi khi lại lọt qua khe hở của hệ thống. + +Về đến kho, ông Hòa đang chờ trước cổng. + +“Có chuyện dưới nền.” + +Không ai hỏi chuyện gì. + +Cả hai chạy vào khu kệ sắt che nắp HN-07. Đồng hồ nhiệt dưới nền vẫn dao động ở mức thấp bất thường, nhưng lần này không chỉ lạnh. Mặt bê tông quanh nắp kim loại xuất hiện một vệt ẩm mỏng, kéo dài về phía tường Tây. Nước không chảy từ trên xuống. Nó thấm từ dưới lên, thành một đường mảnh như mạch máu. + +Ông Hòa dùng đèn soi sát nền. + +“Nước này không phải từ bể rò.” + +Tiến chạm tay vào vệt ẩm. Lạnh. Giữa kho nóng hơn 40°C, dòng nước dưới nền lạnh như nước giếng sâu. Linh mang bộ thử nước tới. Cô nhỏ vài giọt hóa chất vào mẫu nước. Màu hiện ra chậm, đục xanh rồi chuyển xám. + +“Không giống nước máy. Có khoáng cao. Không uống trực tiếp được, nhưng lọc được.” + +Không ai lên tiếng ngay. Trong một thành phố đang chết khát, dưới nền căn cứ của họ lại xuất hiện một mạch nước lạnh. Bình là người đầu tiên nói thành lời điều cả nhóm đang nghĩ. + +“Cái này là may mắn hả?” + +Tiến lần theo vệt nước kéo về phía tường. “Không. Là lời mời.” + +Ông Hòa gật đầu chậm rãi. “Tường Tây có hốc rỗng. Tôi nghe tiếng từ hôm qua, nhưng tưởng do ống.” + +Họ dời kệ, gõ nền và tường. Đúng như ông Hòa đoán, sau lớp gạch cũ có một khoảng rỗng hẹp và kéo dài — giống hành lang bị bịt hơn là một căn phòng. Tiến không phá ngay. Hắn cho Bình kiểm tra camera ngoài, cho Nam canh cổng phụ, cho Linh chuẩn bị túi y tế. Thủy đứng cạnh hắn, tay cầm sổ ghi âm Láng. + +“Anh nghĩ đây là đường gì?” + +“Mạch nước B nối Hồ Tây với hệ thống phía Tây. Nếu Ngọc Trục là khóa, có thể đường này là một phần thân khóa.” + +“Nghe càng ngày càng ít giống hạ tầng đô thị.” + +“Vì có lẽ nó không phải hạ tầng đô thị.” + +Ông Hòa dùng máy cắt cầm tay mở một ô nhỏ trên tường. Sau lớp gạch không có đất mà là một bề mặt đá xám nhẵn, chỉ chừa khe đủ luồn camera nội soi. Tiến đưa camera vào; màn hình chạy nhiễu rồi dần hiện hình. Bên kia là một đường hầm thấp. + +Không rộng. Một người phải cúi thấp mới đi được. Vách đá xếp khít, xen giữa là những đoạn kim loại tối màu như gân. Dưới nền có một rãnh nước nhỏ chảy về hướng đông bắc. Trên vách, cách vài mét lại có một ký hiệu mặt trời đỏ bị mài mòn. Bình nuốt khan. + +“Đường này đi đâu?” + +Camera xoay thêm. Ở một đoạn vách, có một mũi tên khắc chìm và ba chữ Latin mờ: + +**WEST SERVICE VEIN** + +Mạch phục vụ phía Tây. Thủy đưa bản đồ ra. + +“Nếu hướng đông bắc thì có thể về Láng hoặc Hồ Tây. Nếu hướng tây nam…” + +“La Phù,” Tiến nói. + +Mảnh kim loại ở Ngọc Trục từng ghi: **LA PHU / SUPPLY TRACE**. Giờ họ đã thấy đường nối. Đường ngầm phía Tây không còn là giả thuyết. Nó nằm sau tường căn cứ. + +Tiến quyết định không đưa cả nhóm xuống. Hắn, ông Hòa và Thủy vào trước. Bình ở lại giữ đường rút, Nam canh camera, Linh giữ y tế. Phúc chưa đủ khỏe nhưng xin cầm gậy đứng gần cổng phụ. Không ai phản đối. Sau Đại Hà, việc được giao canh cửa đối với anh ta giống một cách chuộc lỗi. + +Họ mở rộng ô tường vừa đủ chui qua nhưng chưa vào ngay. Ông Hòa luồn một ống mềm xuống thấp và một ống lên cao để lấy hai mẫu khí; Tiến dùng đầu đo cầm tay kiểm oxy, CO và khí cháy. Kết quả không đẹp nhưng nằm trong giới hạn cho một lượt ngắn. Bình đứng phía ngoài giữ dây thời gian: mười phút không có một lần giật xác nhận thì đóng lối trong, báo động, không tự chui xuống. + +Không khí trong đường hầm lạnh và khô. Tiếng nước chảy rất nhỏ, đều đặn, làm người ta có cảm giác đang đi trong cổ họng của một sinh vật ngủ sâu. Ông Hòa cầm đèn cơ, không dùng thiết bị điện tử phức tạp. Tiến cầm dao và dây đánh dấu. Thủy ghi chép bằng bút chì. Mỗi ngã rẽ đều được đánh dấu hai chiều; họ không dựa vào trí nhớ trong một nơi có thể làm thiết bị và cảm giác sai lệch. + +Đi được khoảng ba mươi mét, họ gặp ngã ba. Một hướng có ký hiệu nước. Một hướng có ký hiệu mặt trời. Một hướng có chữ bị cạo mất. Tiến cúi xuống nhìn nền. Có dấu giày. Mới. + +Không phải của họ. Ông Hòa hạ giọng. “Người của Kha?” + +“Có thể.” + +Lần này, Thủy không trêu hai chữ đó nữa. + +Dấu giày đi theo hướng chữ bị cạo. Tiến không đi theo ngay. Hắn chọn hướng có ký hiệu nước trước. Sau vài mét, họ tới một buồng nhỏ, ở giữa có một bể đá thấp. Nước trong bể lạnh, trong, nhưng bề mặt không phản chiếu ánh đèn như nước bình thường. Nó tối hơn, sâu hơn, dù bể chỉ cao tới đầu gối. + +Trên thành bể có khắc một dòng tiếng Việt cũ: + +**Nước giữ khóa, khóa giữ cổng.** + +Thủy chép lại, tay hơi run. Ông Hòa lẩm bẩm: “Cái này không phải mấy ông kỹ sư thời nay viết.” + +Tiến lấy mẫu nước bằng ống thủy tinh. Ngay khi nút ống đóng lại, toàn bộ đường hầm rung nhẹ. Không mạnh. Chỉ như một hơi thở bị đánh thức. Từ hướng còn lại của ngã ba vang lên tiếng kim loại kéo lê. Tiến tắt đèn. Ba người đứng im trong bóng tối. + +Một vệt sáng trắng quét qua vách đường hầm ngoài ngã ba. Có người đang đi tới. Không chỉ một. Tiếng bước chân bị nước át đi, nhưng vẫn nghe được ít nhất hai nhịp. Một giọng nữ rất nhỏ vang lên: + +“Dấu giày mới. Có người vào trước.” + +Giọng nam đáp: “Báo anh Kha?” + +“Không. Kiểm tra trước. Anh ấy đang ở Hồ Tây.” + +Ánh mắt Tiến tìm Thủy trong bóng tối. Người của Kha đã vào đường ngầm. Và Kha vẫn ở Hồ Tây. Tức là hắn đang chia lực, tìm nhiều đầu vào cùng lúc. + +Ông Hòa chỉ tay về hướng ký hiệu mặt trời. Không ai nói. Họ lùi dần vào đường đó, tránh ánh đèn của nhóm kia. Nhưng đường càng đi càng hẹp, cuối cùng dẫn tới một cửa chắn bằng kim loại tối màu. Trên cửa có một dòng chữ hiện đại, nhỏ nhưng rõ: + +**MAINTENANCE ACCESS / LANG HANDSHAKE REQUIRED** + +Cần bắt tay với Láng. Thủy lấy tờ giấy ghi âm ở Trạm Láng ra. Những ký hiệu cô chép bỗng làm Tiến nhớ tới nhịp gõ dưới nền Ngọc Trục: dài, ngắn, ngắt, lặp. + +“Cô đọc lại nhịp,” hắn nói. + +“Ở đây?” + +“Bằng cách gõ.” + +Thủy nhìn cánh cửa, rồi gõ lên kim loại theo chuỗi mình đã ghi: hai ngắn, một dài, ba ngắn, ngắt, một dài. Không có gì xảy ra. + +“Không đúng,” cô nói ngay, không gõ lại theo bản năng. “Ở Láng tôi ghi khoảng cách nghe được, không phải khoảng cách tại nguồn.” + +Ông Hòa đặt hai ngón lên cửa. “Kim loại này hồi âm chậm hơn ống ở Láng. Nhịp dài bị kéo thêm.” + +Thủy lấy bút chì gạch lại khoảng nghỉ, bù phần trễ mà hai người vừa nghe từ tiếng dội. Phía sau, người của Kha đã gần hơn. Cô gõ lần hai theo chuỗi hiệu chỉnh. Cánh cửa rung nhẹ. Một khe sáng đỏ xuất hiện ở mép. + +Ông Hòa hít vào. + +“Cô gái, cô vừa sửa khóa bằng tiếng vọng à?” + +“Chưa biết có phải khóa không,” Thủy đáp, vẫn nhìn đồng hồ. “Nhưng lần hai không phải đoán.” + +Tiến đẩy cửa. Bên kia là bóng tối sâu hơn. Từ phía sau, người của Kha hét lên: “Ai đó?” + +Tiến kéo Thủy và ông Hòa vào trong. Cánh cửa đóng lại ngay sau lưng họ, nuốt tiếng bước chân phía ngoài. Trong bóng tối mới, một dòng chữ đỏ mờ hiện lên trên vách, không phải từ màn hình, mà từ chính những khe kim loại trong tường: + +**LANG HANDSHAKE ACCEPTED** + +Rồi dòng thứ hai: + +**WEST VEIN OPEN** + +Đường ngầm phía Tây đã mở. Và Ngọc Trục không còn là căn cứ nằm trên mặt đất nữa. Nó đã có đường xuống lòng Hà Nội. + +Chương 21: Đêm La Phù Cháy + +Đường ngầm phía Tây không dẫn thẳng tới La Phù. Nó dẫn tới dưới La Phù. + +Sau gần bốn mươi phút đi trong bóng tối, Tiến, Thủy và ông Hòa tới một đoạn hầm mà không khí bắt đầu đổi mùi. Mùi đá lạnh và nước ngầm nhạt dần, thay bằng mùi carton ẩm, đường cháy, nhựa nóng và dầu máy. Trên đầu họ, thỉnh thoảng có tiếng xe tải chạy qua, nặng đến mức bụi rơi xuống từ các khe đá. + +Ông Hòa dừng lại, đặt tay lên vách. “Trên kia là kho.” + +“Kho nào?” Thủy hỏi. + +Tiến rà ký hiệu trên tường. Một vòng tròn mặt trời đỏ bị gạch ngang, bên dưới có hàng chữ mờ: + +**LP-17 / SUPPLY LIFT SEALED** + +“Kho số 17.” + +La Phù. Nơi Đỗ Minh Kha gom nước trước Hồng Nhật. Nơi tuyến LP-17 bắt đầu. Một tiếng nổ nhỏ vang lên từ phía trên. Rồi tiếng người la hét. + +Thủy ngẩng đầu. + +“Đánh nhau?” + +Tiến chỉ siết quai túi trên vai và tăng bước. + +Họ tìm được một giếng nâng hàng cũ đã bị niêm phong bằng tấm kim loại. Không có điện. Không có bảng điều khiển. Nhưng ông Hòa nhìn qua cơ cấu bánh răng và nói có thể mở tay nếu tháo chốt an toàn. Công việc mất mười phút. Mười phút ấy, phía trên liên tục vang lên tiếng va đập, tiếng cửa cuốn, tiếng kính vỡ, tiếng người gào gọi nước. + +Khi tấm giếng nâng hé ra, hơi nóng tràn xuống như lửa. Kho số 17 đang cháy. + +Không cháy lớn ngay, nhưng nhiều điểm lửa đã bùng lên giữa các đống carton và pallet gỗ. Khói đen cuộn dưới mái tôn. Người chạy tán loạn giữa các dãy hàng. Có nhóm dân cư kéo vào cướp nước, có người của kho chống trả, có kẻ lợi dụng hỗn loạn để bê hàng. Tiếng hét, tiếng khóc, tiếng kim loại, tiếng thùng nước đổ vỡ trộn lại thành một khối âm thanh méo mó. + +Đêm La Phù bắt đầu cháy. Tiến kéo Thủy nép sau một dãy thùng đã rỗng. Ông Hòa ho sặc, lấy khăn ướt che mũi. “Không ở lâu được.” + +“Tìm đường ra.” + +“Còn nước?” Thủy hỏi. + +Tiến kiểm các pallet còn nguyên gần cửa phụ. Nước ở ngay đó. Hàng trăm thùng. Đủ kéo dài sự sống cho Ngọc Trục thêm nhiều ngày. Nhưng giữa kho đang cháy và đám đông đang mất kiểm soát, mỗi thùng nước đều nặng như một cái bẫy. Một tiếng súng vang lên. + +Đám đông chựng lại trong thoáng chốc, rồi vỡ đội hình còn dữ hơn. Từ phía văn phòng kho, một người phụ nữ mặc đồ đen bước ra, tay cầm súng ngắn. Cô ta không bắn tiếp. Chỉ giơ súng lên, ra hiệu cho người của mình rút theo cửa sau. Tiến nhận ra giọng nữ đã nghe trong đường ngầm. + +Người phụ nữ của Kha. Cô ta lạnh lùng nhìn đám đông tranh nước, rồi ra lệnh: “Đốt khu giấy. Chặn đường vào. Hàng chính đã chuyển xong.” + +Thủy nghiến răng. + +“Họ cố tình đốt kho.” + +“Không phải đốt hết,” Tiến nói. “Đốt phần bỏ lại.” + +“Để đám đông giành nhau trong lửa?” + +“Để không ai lấy được phần Kha không cần.” + +Đỗ Minh Kha đã rời khỏi La Phù trước khi nó cháy. Như Tiến từng nói: kẻ mạnh không phải kẻ cướp giỏi nhất, mà là kẻ rời đi trước khi nơi đó cần phải cướp. Tiến quét mắt quanh kho. Một nhóm người bị kẹt gần cửa cuốn phía bắc, trong đó có hai trẻ nhỏ. Cửa bị một xe nâng chết máy chặn. Khói đang dồn về phía họ. + +Thủy cũng nhìn thấy. “Tiến.” + +“Không.” + +“Có trẻ con.” + +“Chúng ta không có thời gian.” + +“Có nếu mở đường ngầm.” + +Tiến quay sang cô. + +“Cô muốn đưa người lạ xuống đường nối về Ngọc Trục?” + +Thủy không đáp ngay. Cô hiểu cái giá. Nếu đưa họ xuống đường ngầm, bí mật của Ngọc Trục có thể lộ. Nếu không đưa, họ chết trong khói và lửa. Ông Hòa ho thêm một trận, rồi nói khàn khàn: + +“Không cần đưa về Ngọc Trục. Đường ngầm có ngã ba. Ta dẫn họ ra miệng gần mương sau kho, rồi bịt lại.” + +Tiến nhìn ông. “Ông chắc?” + +“Không chắc. Nhưng già rồi, tôi không thích nghe trẻ con cháy.” + +Câu nói ấy khiến Tiến im lặng đúng một giây. Rồi hắn ra quyết định. + +“Thủy, đưa họ tới giếng nâng. Ông Hòa mở đường. Tôi kéo xe nâng.” + +Họ hành động. Tiến lao qua khói, dùng xà beng mở khóa xe nâng rồi đẩy phần càng lệch đủ để tạo khe. Thủy chạy tới nhóm người bị kẹt, giọng cô khàn nhưng rõ: + +“Muốn sống thì đi theo tôi. Không mang hàng. Không hỏi. Bế trẻ con lên.” + +Một người đàn ông ôm thùng nước không chịu bỏ. Thủy tát thẳng vào mặt anh ta. + +“Bỏ thùng nước hoặc chết cùng nó.” + +Anh ta sững lại, rồi buông tay. Nam không ở đây, nhưng nếu thấy cảnh đó, cậu sẽ nhận ra Thủy sau Đại Hà đã khác. Cô vẫn muốn cứu người, nhưng không còn cầu xin thế giới hợp tác với lòng tốt của mình. Họ đưa được mười một người xuống giếng nâng. Quá nhiều so với dự tính, nhưng không còn thời gian để chọn. Ông Hòa dẫn nhóm theo đoạn hầm phụ, vừa đi vừa đánh dấu bằng phấn. Tiến đi cuối, nghe tiếng người của Kha phát hiện cửa giếng. + +“Có lối dưới!” + +Người phụ nữ cầm súng quay lại. Qua làn khói, Tiến nhận ra cô ta. Cô ta cũng thấy hắn. Không bắn ngay. Chỉ mỉm cười rất nhạt, như nhận ra một con chuột vừa tìm thấy đường trong tường. + +“Lê Quốc Tiến,” cô ta nói. + +Tiến bỏ qua câu hỏi, giật chốt giếng nâng. Tấm kim loại sập xuống giữa hai người. Gần như ngay sau đó, tiếng súng nổ; viên đạn đập vào mặt kim loại, kéo một tiếng chát dài trong đường hầm. Họ chạy. + +Đường phụ dẫn ra một cống thoát nước cũ sau La Phù, đúng như ông Hòa đoán. Khi nhóm người sống sót chui lên mặt đất, phía sau họ, kho số 17 bốc khói đỏ dưới mặt trời Hồng Nhật. Người khóc. Người nôn. Trẻ con ho sặc. Không ai biết vừa đi qua một phần của hệ thống nằm dưới Hà Nội. + +Tiến không đưa họ về Ngọc Trục. Hắn chỉ đường tới một khu dân cư còn giếng khoan, đưa ba chai nước và nói: “Đi ngay. Đừng quay lại. Đừng kể về đường dưới đất.” + +Một người phụ nữ ôm con quỳ xuống cảm ơn. Tiến kéo cô đứng dậy. “Đừng quỳ. Giữ sức mà đi.” + +Khi nhóm người khuất sau con ngõ, Thủy nhìn Tiến. “Anh vừa phá quy tắc của chính mình.” + +“Không. Tôi sửa nó.” + +“Sửa thế nào?” + +“Cứu người nếu có đường không giết căn cứ.” + +Ông Hòa cười khan. “Vậy bảng quy tắc lại phải viết thêm.” + +Tiến hướng mắt về kho cháy. Trong lửa, hắn thấy bóng người phụ nữ của Kha đứng trên mái thấp, nhìn về hướng họ. Cô ta không đuổi. Chỉ giơ tay lên, đặt hai ngón lên trán như một lời chào. Kha đã mất kho bỏ lại. Nhưng hắn đã biết đường ngầm phía Tây thật sự tồn tại. Và từ đêm La Phù cháy, bí mật dưới Ngọc Trục không còn thuộc riêng về họ nữa. + +Chương 22: Tín Hiệu Trạm Láng + +Ngọc Trục đóng cửa suốt hai ngày sau đêm La Phù cháy. Không phải vì an toàn. Vì quá nhiều thứ phải che giấu. + +Ông Hòa và Bình bịt lại lối tường dẫn xuống đường ngầm, nhưng không xây kín. Tiến yêu cầu để một cửa kỹ thuật giả phía sau tủ điện, chỉ người trong lõi căn cứ biết. Linh xử lý khói và bỏng nhẹ cho Thủy, ông Hòa, cùng vài người mới được cứu tạm trú một đêm trước khi rời đi. Nam không còn ngồi im ở góc kho nữa. Cậu xin phụ ghi sổ nước. + +“Em muốn làm gì đó,” cậu nói. + +Tiến đưa cậu cuốn sổ. + +“Ghi thật. Không làm đẹp số.” + +Nam gật đầu rồi quay lại bảng trực. Tay cậu vẫn chậm một nhịp mỗi khi cửa cuốn rung, nhưng cậu không rời vị trí nữa. Tiến không gọi đó là đã ổn; chỉ là Nam đã bắt đầu làm việc cùng nỗi sợ thay vì chờ nó biến mất. Thủy thì không hồi phục nhanh như vậy. Cô ngồi trước bàn, viết lại toàn bộ những gì đã xảy ra ở Láng, Hồ Tây, trạm bơm và La Phù. Không dùng laptop. Không dùng điện thoại. Chỉ giấy, bút chì, mã riêng. Trên trang đầu, cô ghi một dòng: + +**Nếu tôi chết, đừng công bố toàn bộ. Công bố đúng phần người khác có thể sống nhờ nó.** + +Tiến đứng sau lưng cô, đọc được nhưng không nói. Cô biết hắn ở đó. “Anh ghét câu này à?” + +“Không.” + +“Vậy sao im?” + +“Vì nó đúng.” + +Thủy dừng bút. + +“Trước đây tôi nghĩ sự thật phải được nói ra toàn bộ.” + +“Bây giờ?” + +“Bây giờ tôi nghĩ sự thật cũng cần định mức như nước.” + +Tiến không phản bác. Câu nói vẫn đau, nhưng nó không còn là sự liều lĩnh của Thủy ở những ngày đầu. + +Buổi chiều ngày thứ hai, Trạm Láng phát tín hiệu lần đầu tiên. Không qua màn hình HANOI-07. Không qua email. Không qua dữ liệu quan trắc. Nó phát qua mọi vật có khả năng rung trong kho Ngọc Trục. Đầu tiên là bộ đàm. Sau đó là loa cũ của máy tính. + +Rồi tấm tôn mái. Cuối cùng là chính nắp kim loại HN-07 dưới nền. Cộc. Cộc. Cộc. Dài. Ngắn. Ngắt. Lặp. Thủy đứng bật dậy. + +“Là chuỗi ở Láng.” + +Tiến ra hiệu cho mọi người im lặng. + +Trong kho, tiếng gõ lan qua kim loại như một thứ mật mã sống. Ông Hòa lấy bút, viết nhịp lên bảng. Thủy đối chiếu với ghi chép cũ. Tiến hạ mắt xuống nắp HN-07. Mỗi lần chuỗi gõ tới đoạn dài, đường viền nắp lại lạnh xuống, hơi nước ngưng thành một lớp mỏng rồi biến mất. + +“Không phải gọi chúng ta,” ông Hòa nói. + +“Vậy gọi ai?” Bình hỏi. + +Thủy nhìn giấy. “Nó đang bắt tay.” + +“Với Ngọc Trục?” + +“Với HN-07.” + +Không ai lên tiếng sau câu trả lời ấy. HANOI-07 rõ ràng không đứng một mình: Láng có thể gửi tín hiệu tới Ngọc Trục, Hồ Tây trả lời Láng, còn La Phù có tuyến tiếp vận. Dưới Hà Nội là một mạng nút đang lần lượt thức dậy, vận hành dù con người hiểu hay không. + +Trên màn hình phụ, bản đồ điện lực cũ tự bật. Không có cửa sổ đen. Không có dòng chữ lớn. Chỉ có các điểm đánh dấu đỏ xuất hiện từng cái một. + +**NGOC TRUC** + +**LANG** + +**HO TAY** + +Sau đó, một điểm mới nhấp nháy ở phía đông bắc Hồ Tây. Rồi một điểm nữa gần khu Hoàng thành. Thủy nhìn điểm đó, giọng thấp xuống. + +“Ba Đình.” + +Ông Hòa lẩm bẩm: “Đừng nói với tôi dưới đó cũng có một cái nắp.” + +Không ai cười. Màn hình chớp nhẹ. Một dòng chữ nhỏ hiện lên, không đỏ rực như trước mà mờ như bị ép qua nhiều lớp dữ liệu. + +**S07 HANDSHAKE RECEIVED** + +**GATE DATE LOCKED: 29/09/2028** + +Tiến cảm thấy sống lưng lạnh đi. 29 tháng 9 năm 2028. + +Ngày Cổng Thăng Long. Mốc này không trùng ngày hắn chết ở tương lai, cũng không thuộc năm 2031. Một ngày khác. Một cánh cửa khác. Dòng thứ ba hiện lên: + +**DO NOT OPEN EARLY** + +Rồi màn hình tắt. Không ai nói gì trong gần một phút. + +Cuối cùng, Linh là người phá im lặng. + +“Không mở sớm là tốt đúng không?” + +Tiến hạ mắt xuống nắp HN-07. + +“Chỉ tốt nếu không có người cố mở.” + +Thủy hiểu ngay. + +“Kha.” + +“Và không chỉ Kha.” + +Như để xác nhận lời hắn, camera ngoài cổng báo chuyển động. Nam mở màn hình giám sát, sắc mặt đổi ngay. + +“Có người.” + +Ngoài cổng không phải nhóm cướp hay dân xin nước. Chỉ có một cô gái trẻ đứng trước cổng phụ, một tay ôm bụng, tay kia giơ cao mảnh vải trắng. Quần áo cô bám đầy tro La Phù. Trên vai có vết thương rỉ máu. Nhưng thứ khiến Tiến chú ý không phải vết thương. + +Là hình xăm mặt trời đỏ trên cổ tay cô. Người phụ nữ của Kha. Người đã thấy họ ở kho số 17. Bình chửi thề. + +“Bẫy.” + +Ông Hòa cầm tua vít như vũ khí. Linh nhìn màn hình, giọng căng: “Cô ta bị thương thật.” + +Thủy nhìn Tiến. “Mở không?” + +Tiến không trả lời ngay. Cô gái ngoài cổng ngẩng đầu nhìn thẳng vào camera. Dù mặt tái vì mất máu, ánh mắt cô vẫn tỉnh. Cô nói chậm, đủ để micro thu được: + +“Đỗ Minh Kha sẽ mở Láng trong đêm nay.” + +Tiến đứng lặng. Cô gái tiếp tục: + +“Hắn có bản sao nhịp gõ. Nhưng bản sai.” + +Thủy siết chặt cuốn sổ. + +“Bản sai thì sao?” + +Cô gái ngoài cổng cười méo mó. “Nếu gõ sai, Trạm Láng không mở cửa.” + +Cô ho ra một ít máu, rồi nói nốt câu còn lại: “Nó gọi thứ ở dưới lên.” + +Trong kho, nắp HN-07 gõ thêm một tiếng. Cộc. Lần này không theo nhịp. Giống một lời cảnh báo. Ánh mắt hắn đi qua mọi người. Quy tắc căn cứ nói: không mở cổng vì tiếng khóc. + +Nhưng người ngoài cổng không khóc. Cô ta mang một thông tin có thể quyết định Láng, Ngọc Trục, và có lẽ cả Cổng Thăng Long. Tiến bước tới cổng phụ. + +“Bình, đứng bên trái. Ông Hòa, ngắt điện cổng nếu tôi ra hiệu. Linh, chuẩn bị băng ép. Thủy, ghi mọi lời cô ta nói.” + +Thủy hỏi: + +“Anh tin cô ta?” + +Tiến nhận ra hình xăm mặt trời đỏ trên cổ tay cô gái. + +“Không.” + +Hắn mở khóa lớp thứ nhất. + +“Nhưng nếu Kha thật sự định mở Láng đêm nay, chúng ta không còn quyền đứng yên.” + +Cổng phụ hé ra. Hơi nóng bên ngoài tràn vào. Cùng lúc đó, từ rất xa về phía khu Láng, một tiếng động trầm vang lên dưới lòng đất. Không phải tiếng nổ. Giống một cánh cửa khổng lồ vừa bị ai đó gõ nhầm. + +ARC 4: SAI MỘT NHỊP + +Chương 23: Người Phụ Nữ Ngoài Cổng + +**14/07/2028 – 18:36** + +Tiến chỉ mở lớp khóa thứ hai. + +Giữa người phụ nữ đứng ngoài đường và cửa kho chính vẫn còn một tấm lưới thép hàn chéo, thanh khóa ngang, khoảng sân đệm rộng gần sáu mét và ba nòng súng tự chế đang chĩa từ những vị trí cô không nhìn thấy. Ngọc Trục chưa từng được xây để tiếp khách. Sau Hồng Nhật, mỗi lớp cổng còn là một câu hỏi: người đang xin vào mang theo thứ gì ngoài vết thương? + +Người phụ nữ giữ một tay trên sườn trái. Tay kia giơ mảnh vải trắng đã chuyển nâu vì bụi và máu. Cô đứng thẳng hơn một người mất máu nên đứng, như thể cơ thể chỉ là một thiết bị đang hỏng nhưng chưa được phép dừng. + +“Bỏ vũ khí xuống,” Tiến nói qua loa. + +“Không có.” + +“Áo khoác.” + +Cô hiểu. Dùng một tay kéo khóa, cô cởi chiếc áo mỏng rồi ném sang bên. Áo thun xám phía trong đã sẫm máu ở sườn. Không súng dài, không bao súng, nhưng người từng đứng cạnh Đỗ Minh Kha trong đêm La Phù cháy không thể được coi là vô hại chỉ vì hai bàn tay trống. + +“Quay lưng. Chậm.” + +Cô làm theo. + +Bình đứng phía trái cổng, giữ bộ phóng bu lông ông Hòa cải từ dụng cụ công nghiệp. Linh ở sau tường bê tông với túi y tế nhưng không bước ra. Nam theo dõi camera, môi mím chặt. Mỗi lần người phụ nữ nghiêng người vì đau, con số nhịp tim trên cảm biến nhiệt lại tăng. + +Khánh An. Tiến đã nghe Kha gọi tên đó một lần ở La Phù. + +“Cô muốn gì?” + +“Trước hết, đừng tin tôi.” Khánh An nhấc cằm về chiếc túi đã đặt ngoài vạch. “Ngăn ngoài có một thẻ điều xe LP-17, mã 04-21. Gọi đúng kênh cũ của Kha, hỏi chiếc xe đó rời La Phù lúc nào. Nếu giờ khớp, mới nghe phần sau.” + +Bình liếc Tiến. Khánh An không xin cứu và cũng không đòi được tin bằng lời. Cô đưa một chi tiết có thể kiểm ngay — cách nhanh nhất để mua vài phút khi hai bên đều có lý do nghi nhau. + +“Sau đó?” Tiến hỏi. + +“Sau đó tôi muốn dừng Kha.” + +“Vì một chuỗi sai?” Tiến hỏi. + +“Vì trong hệ thống của anh ta không có ai được phép nói dừng khi dữ liệu đã thành mệnh lệnh.” Khánh An không rời mắt khỏi camera. “Chuỗi sai chỉ là lần đầu tôi còn đủ thời gian bước ra.” + +Tiến kiểm vị trí máu thấm. “Vì sao?” + +“Anh ta đang thử Trạm Láng bằng một chuỗi sai.” + +“Anh ta có chuỗi từ đâu?” + +“Có hai bản mà đội Kha đang coi là hai nguồn.” Khánh An hít ngắn. “Một bản lấy từ dữ liệu cũ ở Đại Hà. Một bản lấy từ Hậu Ký. Tôi chưa chắc chúng độc lập.” + +Cái tên khiến Thủy, đứng bên bàn loa, ngẩng đầu. Tiến không biểu lộ. “Hậu Ký là gì?” + +Khánh An nhìn thẳng camera. Trong một giây, cô cân giữa thông tin và mạng sống. “Tên nội bộ của một kho dữ liệu về những việc chưa xảy ra.” Bình quay sang Tiến. Nam cũng ngẩng khỏi màn hình. + +Thủy không tỏ vẻ kinh ngạc ngay. Phản ứng đầu tiên của cô vẫn là phản ứng của một phóng viên: “Ai ghi?” + +“Không biết.” + +“Nguồn?” + +“Nhiều.” + +“Bản gốc?” + +“Không có một bản duy nhất.” + +“Độ tin cậy?” + +Khánh An cười nhạt, nhưng vết thương kéo khóe môi xuống ngay. “Đủ để Kha xây tuyến hàng trước Hồng Nhật. Không đủ để hắn biết hôm nay sẽ đứng ở đâu.” Hậu Ký vì thế không giống lời tiên tri hoàn chỉnh; nó là dữ liệu phân mảnh, đúng ở vài điểm, sai ở những điểm khác, và nguy hiểm nhất khi người sở hữu tưởng phần mình có là toàn bộ. + +Tiến hỏi: “Hai chuỗi khác nhau thế nào?” Khánh An rút từ túi quần một tờ giấy gấp bốn, đặt xuống nền rồi lùi lại. Bình dùng móc kéo qua khe dưới cổng. + +Trên giấy không có khuông nhạc, chỉ có những vạch dài, chấm ngắn và khoảng trắng. Hai chuỗi gần giống nhau, nhưng ở đoạn giữa, khoảng nghỉ trước nhịp thứ bảy ngắn hơn một phần ba. Thủy cúi sát. “Không thiếu một nhịp.” + +Khánh An gật. “Sai khoảng im.” + +“Vì sao Kha chọn bản đó?” + +“Bản Hậu Ký ghi chuỗi ấy đã mở được Listening Well. Anh ta còn có hai log kỹ thuật cùng kết quả.” Khánh An thở ngắn vì đau. “Vấn đề là ba bản đều đi ra từ cùng một lớp tổng hợp. Trông như ba nguồn, thật ra chỉ là một kết luận được chép ba lần.” + +Tiến hiểu ngay. Kha không bỏ qua kiểm chứng; hắn bị một hệ thống có vẻ độc lập đánh lừa về nguồn gốc bằng chứng. Đó là loại sai lầm nguy hiểm hơn sự cẩu thả, vì người thông minh càng dễ tin khi ba bảng cùng cho một đáp án. + +“Trong hoàn cảnh nào?” + +“Không có.” + +Thủy ngẩng. “Vậy hắn đang lấy kết quả mà không có điều kiện.” + +“Đúng.” + +Hắn liếc đồng hồ. “Bao lâu?” + +“Bốn mươi bảy phút, nếu hắn chưa bắt đầu.” + +Con số làm Tiến ngẩng lên. Khánh An nhận ra phản ứng. + +“Anh ấy luôn dùng bốn mươi bảy phút như giới hạn cuối,” cô nói. “Tôi chưa từng hỏi vì sao.” + +“Và nếu bắt đầu rồi?” + +Khánh An nhìn về phía đông, nơi bầu trời đỏ chìm dần sau mái nhà. “Chúng ta sẽ nghe trước khi tới.” Linh nói nhỏ: “Cô ấy mất máu.” + +Tiến cân cả hai phía trước khi nói. Mở cổng cho Khánh An đồng nghĩa đưa một người của Kha qua ba lớp phòng thủ; để cô ngoài lại có thể mất người duy nhất biết cấu trúc thử nghiệm. + +“Cô vào sân đệm. Dừng ở vạch vàng.” + +Khánh An nhướn mày. “Tin tôi?” + +“Không.” + +“Vậy?” + +“Tin cô không muốn chết ngoài cổng.” + +Lớp khóa thứ ba mở. Khánh An bước vào, từng bước chậm, hai tay vẫn để trước mặt. Khi cô qua vạch vàng, Bình khóa cổng sau. Linh tiến tới, cắt áo quanh vết thương. + +“Đạn?” + +“Mảnh kim loại.” + +“Trong người?” + +“Không biết.” + +“Cô làm gì cũng không biết à?” + +Khánh An nhìn cô. “Tôi biết nơi Kha đặt bộ gõ.” Linh ấn gạc. Khánh An nghiến răng nhưng không kêu. + +Trong lúc Linh xử lý, Thủy đặt hai chuỗi cạnh dữ liệu Láng họ từng ghi. Cô gạch các khoảng nghỉ, không gạch tiếng gõ. + +“Bản Đại Hà gần nhịp tự nhiên của đường ống hơn,” cô nói. “Bản Hậu Ký nén khoảng thứ ba và kéo dài khoảng thứ năm.” + +Tiến hỏi: “Có thể chỉ khác thiết bị.” + +“Có thể. Cũng có thể Hậu Ký ghi một lần thử với nhiệt độ, áp lực hoặc nguồn điện khác.” + +Khánh An nói: “Kha không biết điều kiện. Hắn chỉ biết kết quả.” Một người đọc tương lai mà thiếu phần trước và sau. + +Tiến hiểu vì sao Kha nguy hiểm. Không phải vì hắn biết quá nhiều. Vì hắn có đủ dữ liệu để tin mình biết. Nam xoay màn hình. “Có rung.” + +Một cốc nước trên bàn tạo vòng tròn rất nhỏ. Trên camera ngoài phố, sợi dây điện chùng rung dù không có gió. Cộc. + +Âm đầu tiên đi qua nền kho, không rõ từ đâu. Khánh An nhắm mắt. “Hắn bắt đầu rồi.” + +Tiến đứng dậy. “Bình chuẩn bị xe. Thủy mang bản ghi Láng. Linh, giữ Khánh An ở lại.” + +“Không.” Khánh An cố ngồi lên. “Không có tôi, anh không qua được đội ngoài.” + +“Cô vừa được khâu.” + +“Không đi thì Kha dùng xong chuỗi trước khi các anh tới cửa.” + +Linh ấn vai cô xuống. “Cô đi được mười phút rồi ngất.” Khánh An nhìn Tiến. “Vậy mười phút đó phải đủ.” + +Tiến kiểm bản đồ, số người và hai lối rút. Hắn ghét việc cô đúng. + +“Cô ngồi xe thứ hai. Không cầm súng. Linh băng ép và đi cùng tới điểm dừng, không xuống trạm.” + +Linh định phản đối, rồi thấy màu nước trong cốc tiếp tục rung. Cộc. + +Lần này mạnh hơn. Thủy gấp hai chuỗi vào túi chống nước. “Tiến.” + +“Gì?” + +“Chúng ta không tới để thêm một nhịp.” + +Hắn nhìn cô. Cô đặt ngón tay vào khoảng trắng giữa hai vạch. + +“Chúng ta phải sửa khoảng im.” + +Bên dưới Ngọc Trục, HN-07 không hiện cảnh báo. Nó chỉ ghi một dòng vào log: + +**LANG HANDSHAKE ATTEMPT DETECTED** + +Màn hình không đưa hướng dẫn, tọa độ hay lựa chọn nào; nó chỉ tiếp tục quan sát. + +Chương 24: Sai Một Nhịp + +Họ nghe Trạm Láng trước khi nhìn thấy nó. + +Thứ đầu tiên nhận ra dao động không phải tai người mà là những vật còn khả năng rung: ô kính sót lại trên tầng ba, biển quảng cáo méo, nắp cống và khung xe. Mỗi vật nhận cùng một dao động nhưng phát ra âm khác nhau, như cả con phố đang cố nhắc lại một câu bằng những giọng không khớp. + +Cộc. Khoảng nghỉ. + +Cộc—cộc. Bình giảm ga. “Đã vào chuỗi?” + +Khánh An ngồi sau chiếc xe thứ hai, một tay ép lên băng sườn. Mồ hôi làm tóc dính vào thái dương, nhưng mắt cô vẫn theo những vị trí có thể đặt người. “Đội ngoài đã đổi. Kha biết tôi rời.” + +“Bao nhiêu?” + +“Lúc 04:20 tôi đếm được mười hai: ba trong Listening Well, bốn ở cống bắc, còn lại chặn lối tầng trên. Đó là số cũ hơn gần một giờ; coi nó là mức sàn, đừng coi là quân số hiện tại.” + +Tiến chỉ tuyến vòng trên bản đồ giấy. “Không dùng nhà hai tầng.” Khánh An gật. “Có nhánh bảo trì dưới lòng Tô Lịch. Hắn tìm thấy sau khi anh mở West Vein.” + +Không ai phí thời gian hỏi Kha biết bằng cách nào. Có thể là theo dõi, mua người, suy luận hoặc Hậu Ký; với hắn, mọi nguồn tin đều chỉ là những tuyến cần nối. + +Họ dừng xe trong ngõ cách trạm gần bốn trăm mét. Linh kiểm băng Khánh An lần cuối rồi ở lại với xe, bình truyền và lối rút. Ông Hòa không đi; bàn tay ông đang xử lý hệ thống nước Ngọc Trục. Bình mang búa cao su, Thủy mang bộ ghi rung, còn Tiến mang kìm cắt, dao và một cuộn dây đồng. + +“Chúng ta không đánh,” Tiến nói. + +Bình nhìn bộ phóng trong tay. “Mười hai người bên kia chắc cũng nghĩ vậy.” + +“Chỉ khi họ chưa thấy mình.” + +Khánh An dẫn xuống một cống hẹp. Không khí nóng và mùi bùn cũ quện với kim loại. Mỗi lần chuỗi gõ truyền qua, thành ống rung dưới lòng bàn tay. Thủy đặt cảm biến lên thành. “Khoảng thứ ba ngắn dần.” + +“Bộ gõ tự động,” Khánh An nói. “Kha đang cho hệ thống bám pha.” + +“Bám vào cái gì?” + +“Listening Well.” + +Tiến hỏi: “Nếu phá nguồn?” + +“Cánh tay cơ rơi tự do. Nhịp cuối vẫn xảy ra.” + +“Nếu chặn tay?” + +“Cú dừng đột ngột truyền xung mạnh hơn.” + +Không thể giải bằng cách đập thiết bị. Họ tới khe nhìn xuống phòng trạm. Kha đứng gần cửa, áo đen, một tay đặt lên tablet. Bộ gõ ở giữa: cánh tay kim loại đập lên một tấm hợp kim nối thẳng với mạng ống dưới nền. Ba người giữ nguồn, đo nhiệt và áp lực. Những người còn lại ở lối. + +Chuỗi đã đi qua nửa. Thủy mở hai tờ giấy. Cô không đếm tiếng. Cô đếm khoảng nghỉ bằng đồng hồ rung tự chế. + +“Bản Hậu Ký không thiếu nhịp,” cô thì thầm. “Nó lệch pha sau nhịp sáu. Nếu thêm tiếng gõ, chỉ làm nhiễu mạnh hơn.” + +Khánh An nhìn. “Vậy sửa thế nào?” + +“Cho nó một tải trễ.” + +Tiến hiểu trước Bình. “Kéo dài dao động sau nhịp sáu, không tạo nhịp mới.” Thủy chỉ đường ống chạy dưới chân. “Nếu tác động lên cùng vật liệu đúng lúc, xung phản hồi sẽ làm bộ gõ nhận rằng bề mặt chưa kết thúc dao động. Bộ điều khiển sẽ tự trì hoãn nhịp kế.” + +“Bao nhiêu?” + +“Không biết chính xác.” + +“Cô cần gì?” + +“Dữ liệu thật.” + +Tiến đặt lòng bàn tay lên ống. Mỗi rung động truyền vào xương. Hắn nhớ cách hệ thống bơm công nghiệp tự ngắt khi áp lực phản hồi vượt ngưỡng. Đó không phải âm nhạc, mà là tín hiệu điều khiển. + +“Bình, búa.” + +Bình đưa. + +“Đừng gõ,” Tiến nói. “Ép.” + +Họ quấn dây đồng quanh ống, luồn búa làm đòn, tạo một điểm tì có thể giữ ống rung thêm một phần giây. Thủy đặt hai ngón lên kim cảm biến. Nhịp năm. + +Cộc. Khoảng nghỉ kéo dài. + +Nhịp sáu. Cộc. + +“Bây giờ.” + +Bình ép đòn. Ống rền trong lòng đất. Không có tiếng gõ mới, chỉ dao động cũ không chịu tắt. + +Bộ gõ dưới phòng khựng. Màn hình của Kha chuyển đỏ. + +Một người nói: “Pha không khóa.” Kha không nhìn quanh. Hắn nhìn đường ống. + +“Có người trong nhánh bảo trì.” + +Đội ngoài lập tức di chuyển. Khánh An rút khẩu súng giấu sau lưng dù Tiến đã cấm. “Tôi giữ.” + +“Cô không bắn nếu chưa cần.” + +“Anh muốn giải thích với họ?” + +“Muốn lối rút.” + +Nhịp bảy bị trì hoãn, nhưng bộ điều khiển tự hiệu chỉnh. Thủy nhìn kim. + +“Nó đang rút ngắn khoảng tiếp theo để bù.” + +Nếu để, tổng chuỗi vẫn hội tụ về bản sai. + +“Phải phá vòng tự bù,” Tiến nói. + +Dưới phòng, Kha ra lệnh đổi chế độ tay. Người kỹ thuật kéo cần. Khánh An chửi. “Hắn bỏ tự động.” + +Giờ không còn bộ điều khiển để lừa. Thủy nhìn hai chuỗi, rồi nghe bằng cơ thể. “Bản đúng không cố giữ tổng thời gian.” + +“Ý?” + +“Khoảng im không phải phần thừa. Nó là một trạng thái riêng. Kha đang nghĩ phải hoàn thành chuỗi trong đúng số giây.” + +Tiến nhìn Kha qua khe. Hắn đang ra hiệu người vận hành tiếp tục theo đồng hồ. + +“Cho hắn mất đồng hồ.” + +Bình hỏi: “Cắt điện?” + +“Không. Cắt tham chiếu.” + +Tiến luồn dây đồng vào tuyến cảm biến thời gian chạy dọc ống, không phải nguồn chính. Khánh An chỉ đúng sợi. Hắn cắt. Bộ gõ vẫn có điện, nhưng màn hình không còn mốc pha. Người vận hành chần chừ. + +Kha nói: “Tiếp.” + +“Không có clock.” + +“Đếm tay.” + +Sai lầm. Con người đếm trong một căn phòng cộng hưởng không thể chính xác. Mỗi tiếng vọng quay lại làm khoảng cách nghe ngắn hoặc dài hơn. + +Thủy nhắm mắt. + +“Nhịp thật có hướng từ tấm gõ. Tiếng lặp không có hướng rõ.” + +Tiến quay sang cô. “Dẫn.” Họ bò tới lưới thông khí. Thủy giơ tay theo các nhịp thật. Tiến dùng đèn pin chớp vào phòng qua khe, không để truyền âm. Một tín hiệu thị giác. + +Người vận hành thấy. Một chớp sau nhịp thật. + +Hai chớp ở khoảng cần dừng. Hắn không hiểu, nhưng Kha hiểu. + +Kha nhìn thẳng khe thông khí. Tiến chớp lần nữa: dừng. + +Hai người nhìn nhau qua dải sáng lạnh của thiết bị. Kha vẫn có thể ra lệnh tiếp; Hậu Ký chỉ ghi rằng chuỗi này từng mở được giếng. + +Nhưng hắn cũng thấy kim áp lực đã vượt vùng dữ liệu. + +“Dừng tay,” Kha nói. + +Người vận hành buông cần. Nhịp thứ tám không rơi. + +Cả Trạm Láng im. Im quá lâu. + +Rồi nền đất trả lại tất cả dao động chưa tiêu tán trong một lần. Một tiếng rền dâng từ dưới sâu, không giống nổ. Các đường ống rung đồng thời. Kính trên phố vỡ. Đèn pin tắt. Một người trong phòng ôm đầu, hét tên mẹ. + +Dư Âm tràn lên. Thủy nghe hàng chục giọng chồng nhau, nhưng cô bám vào tiếng thật: tiếng Bình thở bên phải, tiếng Tiến kéo dây trước mặt, tiếng chân đội Kha đang tới từ sau. + +“Lối bắc!” cô nói. “Ba người.” + +Có hướng. Thật. + +Khánh An bắn một viên vào trần cống, làm mảnh bê tông rơi chặn lối, không bắn người. “Đi.” Tiến kéo Thủy. Bình đỡ Khánh An. + +Trong phòng trạm, Kha nhìn màn hình hiện một dòng chưa từng có trong Hậu Ký: + +**HANDSHAKE ABORTED / RESONANCE UNRESOLVED** + +Hắn không đuổi ngay. Lần đầu, dữ liệu của hắn không chỉ sai kết quả. + +Nó thiếu cả điều kiện để hiểu vì sao. Trên đường rút, Thủy nghe một tiếng chuông rất xa. + +Không có hướng. Cô không đi theo. + +Chương 25: Dư Âm + +Dư Âm theo họ về Ngọc Trục. + +Dư Âm không kéo thành một âm thanh liên tục. Nó chen vào các khe của tiếng thật: sau tiếng cửa đóng, giữa hai vòng quay của quạt, lúc người ta ngừng nói để lấy hơi. Một số người nghe tên mình. Một số nghe người thân đã chết. Một số chỉ thấy áp lực trong tai và muốn bước về một hướng không rõ. + +Tiến cho tắt toàn bộ loa, radio và thiết bị không cần thiết. Mọi người đeo dây vải màu vào cổ tay theo nhóm để nhận nhau khi mất ánh sáng. Cổng được chuyển sang quy tắc cơ: không mở bằng giọng, không mở bằng mã qua radio, chỉ mở khi người trực nhìn thấy mặt và ký hiệu tay. + +Nam ngồi sát tường, hai bàn tay bịt tai. + +“Cửa cuốn,” cậu nói. “Nó đang kéo.” + +Không có cửa cuốn nào chuyển động. Thủy ngồi cách cậu hai mét, không chạm. “Nam, nhìn tôi.” + +Cậu mở mắt. + +“Tiếng đó ở hướng nào?” + +Nam quay đầu, rồi dừng. “Không biết.” + +“Vậy chưa phải thứ mình làm theo.” + +Câu nói không xóa tiếng. Nhưng cho cậu một thao tác. Thủy đi quanh kho cùng một cuốn sổ. Cô chia mọi âm thành hai cột. + +**Có hướng vật lý.** + +**Không xác định hướng.** + +Tiếng máy bơm: có hướng. Tiếng trẻ khóc từ khu y tế: có hướng. Giọng phụ nữ gọi “Thủy” ngay trong đầu: không. Tiếng kim loại rơi sau kho: có hướng, Bình kiểm tra. Tiếng chuông dưới nền: cảm nhận được trên cảm biến nhưng không xác định được điểm nguồn. + +Không đơn giản là thật và giả. Có âm không hướng vẫn tạo rung đo được. Có âm có hướng là tiếng người hoảng loạn nhắc lại điều họ vừa nghe. Nhưng phương pháp giữ họ khỏi phản ứng ngay. Linh phát hiện người đầu tiên mất nước vì Dư Âm là ông Tuấn, một người sống sót từ Đại Hà. Ông đứng trước cổng suốt gần một giờ vì nghe con trai gọi ngoài đường. Khi Bình kéo vào, bàn chân ông phồng rộp vì nền nóng. + +“Con tôi ở ngoài,” ông vẫn nói. + +“Ông thấy không?” Linh hỏi. + +“Nghe.” + +“Có hướng?” + +Ông chỉ đại một phía. Thủy đứng vào ba vị trí, hỏi lại. Hướng ông chỉ thay đổi theo chỗ đứng. + +Không phải tiếng ngoài cổng. Ông Tuấn bật khóc. + +Không ai gạt đi trải nghiệm của ông bằng hai chữ “tưởng tượng”. Trong tận thế, chỉ riêng nỗi đau cũng đủ dẫn một người bước vào chỗ chết. Khánh An nằm ở khu y tế, sốt nhẹ vì vết thương. Mỗi lần ngủ, cô gọi tên một người trong đội cũ. Linh muốn cho thuốc an thần, nhưng Thủy phản đối liều cao. + +“Nếu Dư Âm ảnh hưởng nhịp thở, thuốc có thể làm cô ấy không tự tỉnh.” + +Linh nhìn cô. “Cô là bác sĩ?” + +“Không.” + +“Vậy đừng ra lệnh.” + +“Đúng. Tôi đưa dữ liệu.” + +Linh kiểm lại nhịp thở rồi giảm liều. Không ai “thắng” cuộc trao đổi đó; họ chỉ đổi quyết định sau khi có thêm một rủi ro cần tính. + +Tiến xuống HN-07 một mình. Màn hình hiện log của Trạm Láng: + +**HANDSHAKE ABORTED** + +**ECHO LOAD: 17%** + +Không có lệnh xử lý hay sơ đồ đi kèm, cũng chẳng có câu hỏi hắn muốn gì. Tiến thử tắt điểm truy cập. Hệ thống từ chối bằng một dòng: + +**PHYSICAL NETWORK ACTIVE** + +Nghĩa là Dư Âm không tồn tại vì màn hình đang bật. Nó đi qua cấu trúc vật lý: ống, nước, nền đất, có thể cả hệ thần kinh. Tiến quay lên, lấy bản đồ công trình và yêu cầu ông Hòa đánh dấu mọi tuyến kim loại nối kho với bên ngoài. Ông Hòa nghe mô tả rồi gõ ngón tay lên ống chính. + +“Dây điện không nói dối. Chỉ có người đọc sai nó.” + +“Ống nước.” + +“Cũng là dây.” + +Họ cô lập ba đoạn, thêm đệm cao su vào giá đỡ, ngắt một bơm và chuyển quạt khỏi khung kim loại chung. Dư Âm không biến mất, nhưng cường độ trong kho giảm. Một giải pháp kỹ thuật không chữa được ký ức. Chỉ làm nó bớt có đường đi. + +Tối, Thủy đứng ngoài mái che, nhìn vầng Hồng Nhật đã thấp nhưng không dịu. Tiến mang hai cốc nước, đưa cô một cốc. + +“Cô nghe gì?” + +“Anh hỏi như hỏi thời tiết.” + +“Dễ đo hơn.” + +“Không.” + +Cô uống một ngụm nhỏ. “Tôi nghe giọng mình.” Tiến dừng. + +“Nói gì?” + +“Bảo đừng tin anh.” + +“Có hướng?” + +“Không.” + +“Vậy?” + +“Không có nghĩa là sai.” + +Hắn nhìn cô. Thủy nói tiếp: “Dư Âm dùng ký ức và nghi ngờ của người nghe. Nếu trong tôi không có lý do nghi anh, nó không tạo được câu đó.” + +“Cô nghi gì?” + +“Anh vẫn giấu.” + +“Đúng.” + +“Anh định sửa?” + +“Không phải tất cả.” + +Cô cười rất nhẹ. “Vậy giọng kia có dữ liệu.” Tiến không phản bác. + +Một lúc sau, hắn hỏi: “Cô có nghe Kha?” + +“Không.” + +“Khánh An?” + +“Không.” + +“Người chết?” + +Thủy nhìn về phía cổng. “Có.” + +“Có làm theo?” + +“Không.” + +“Vì quy tắc hướng?” + +“Vì tôi không muốn một giọng, dù là thật, quyết định chân mình bước đâu.” + +Đó là cách cô bắt đầu trở thành Người Nghe. Không phải vì nghe được nhiều hơn. + +Vì biết âm thanh nào chưa đủ quyền để trở thành mệnh lệnh. Gần nửa đêm, một tiếng gõ vang trong đường ống phía Tây. Ba nhịp. Có hướng. + +Ông Hòa kiểm tra. Không người. Cảm biến cũng ghi. + +Thủy đánh dấu vào cột thứ ba mới: + +**Có đo được, chưa biết nguồn.** + +Dư Âm chưa kết thúc. Trên bảng kiểm, ô **có đo được, chưa biết nguồn** được giữ nguyên thay vì bị ép sang thật hoặc giả. + +Chương 26: Nước Xám + +**16/07/2028** + +Ba ngày sau Dư Âm, nước Ngọc Trục đổi màu. Không đen và không có mùi. Chỉ một lớp xám rất nhẹ, nhìn rõ nhất khi Linh đặt hai cốc lên tấm nhựa trắng: mẻ hôm qua trong hơn; mẻ sáng nay như có bụi kim loại hòa ở đáy ánh sáng. + +Nam cúi sát. “Em không thấy.” Linh xoay cốc. “Vì em đang tìm bẩn. Đây là thay đổi.” + +Tiến dùng máy đo cầm tay. Độ dẫn điện tăng, khoáng hòa tan tăng, pH lệch nhẹ. Bộ test nhanh không phát hiện vi khuẩn, nhưng họ không có phòng xét nghiệm để biến một kết quả âm tính thành an toàn. + +“Dừng uống nguồn bể,” Linh nói. + +Bình nhìn dãy can. “Nước chai còn bao lâu?” + +“Chín ngày theo định mức cũ. Mười ba nếu giảm.” + +“Nhiệt đang tăng.” + +“Vậy ít hơn.” + +Linh khóa khu nước, đánh số từng chai và yêu cầu uống tại chỗ. Nước xám chỉ được dùng rửa dụng cụ sau khi đun, chưa dùng cho người. Trong chuyện nước ngày hôm đó, người có tiếng nói cuối cùng là Linh chứ không phải Tiến. Phúc phản đối ngay. + +“Một đứa trẻ ngoài sân sốt. Nó cần thêm.” + +“Có định mức y tế.” + +“Không đủ.” + +“Anh đo mất nước chưa?” + +“Nhìn cũng biết.” + +“Nhìn không tính được natri, mạch và lượng tiểu.” + +“Cô chờ nó ngất mới cho?” + +Linh đặt bút xuống. “Anh muốn lấy phần của ai?” Phúc im. + +Đó là câu hỏi thật phía sau mọi tranh cãi về lòng tốt. + +Tiến yêu cầu lấy mẫu ở ba điểm: bể, đường ống trước lọc và giếng kỹ thuật. Ông Hòa cùng Nam kiểm hệ thống. Màu xám xuất hiện sau bộ lọc, không trước. Màng lọc không hỏng theo cách thông thường; một lớp vật liệu mịn từ đường ống phía dưới đang phản ứng với khoáng sau Dư Âm. + +“Cộng hưởng làm bong lớp lót?” Tiến hỏi. + +Ông Hòa chưa có thiết bị phân tích vật liệu, chỉ có kinh nghiệm với đường ống và một bộ đo cầm tay. Ông cạo một ít cặn, đặt lên tấm thép rồi so màu với lớp lót còn nguyên. + +“Có thể.” + +“Độc?” + +“Không biết.” + +Tiến ghét câu trả lời, nhưng không ép nó thành chắc chắn. Họ thử kết tủa, than hoạt tính và đun. Màu giảm, độ dẫn vẫn cao. Không đủ để đưa vào cơ thể người mất nước nặng. + +Buổi chiều, một nhóm bảy người xuất hiện ngoài cổng. Hai trẻ em, một người già, bốn người lớn. Họ không biết tên Tiến. Chỉ theo dấu xe nước. Bình hỏi: “Cho bao nhiêu?” Theo quy tắc cũ, người ngoài không được lấy nguồn dự trữ lõi. Tiến đọc con số trên bảng. + +Phúc đứng cạnh, không nói. Cái im của anh còn rõ hơn tranh cãi. + +“Bảy cốc,” Tiến nói. “Uống ngoài cổng. Không cấp chai.” + +Linh nhìn hắn. “Một lần?” + +“Ừ.” + +“Ngày mai?” + +“Không hứa.” + +Họ mở khe phát nước. Người già uống chậm; một bé gái uống quá nhanh, mẹ phải kéo cốc xuống. Bảng cấp phát mất bảy phần nước. Hôm đó, không ai chết vì bảy phần ấy. + +Nhưng không ai biết cái thiếu của bảy cốc sẽ hiện ra vào ngày nào. Đêm, Phúc trực kho nước cùng Nam. Một tiếng gõ vang phía ngoài cổng, rồi giọng phụ nữ gọi tên Phúc. + +“Anh ơi.” + +Phúc đứng bật. Nam nhìn anh. Giọng lại gọi. “Phúc.” + +Em gái. Có thể. Không có hướng rõ. Nam nói: “Đừng mở.” + +Phúc không mở cổng. Anh đi tới khu nước, dùng chìa phụ mở tủ và lấy một chai. Nam chặn. “Anh làm gì?” + +“Đứa trẻ sốt.” + +“Linh không cho.” + +“Linh không ở đây.” + +“Quy tắc—” + +“Đứa bé ngoài kia không biết sáng mai hội đồng sửa quy tắc thế nào.” + +Phúc bước qua. Nam giữ tay anh. Cậu run, nhưng không buông. + +“Anh nói hôm Đại Hà nếu có người mở cửa vì giọng gọi thì tất cả chết.” + +Phúc nhìn chai nước. + +“Đây không phải cổng.” + +“Vẫn là thứ giữ mọi người sống.” + +Hai người đứng giữa kho. Phúc có thể đẩy Nam. Anh mạnh hơn. Nhưng cuối cùng, anh đặt chai xuống. + +Rồi lấy cốc định lượng y tế, rót đúng phần đã cho phép và mang tới đứa trẻ. Sáng, Linh phát hiện. + +“Anh tự mở tủ.” + +“Ừ.” + +“Lấy đúng định mức.” + +“Ừ.” + +“Vậy vì sao không gọi?” + +“Vì cô sẽ hỏi.” + +“Đúng.” + +“Và tôi sợ cô nói không.” + +Linh nhìn anh lâu. “Từ hôm nay, ca đêm được cấp một liều khẩn nếu hai người cùng kiểm dấu mất nước và cùng ký. Sáng tôi rà lại.” + +Tiến đứng ở cửa. “Vậy tối nay tính là vi phạm?” + +“Có,” Linh nói. “Anh ấy tự mở tủ khi chưa có quyền. Nhưng việc anh ấy làm cũng chỉ ra quy tắc thiếu trường hợp khẩn. Hai chuyện không triệt tiêu nhau.” + +Phúc nhìn cô. Không được tha vì lòng tốt. Nhưng hành động của anh buộc hệ thống sửa. Cuối ngày, Tiến nhận cuộc gọi từ Thanh Hóa. Sóng đứt quãng. + +Mẹ hắn nói có hai người lạ hỏi về con trai bà. Không đe dọa, chỉ hỏi ngày Tiến về gần nhất và có gửi hàng không. Tiến siết điện thoại. + +“Nếu họ quay lại, mẹ đi nhà bác Dũng.” + +“Con đừng về.” + +“Mẹ—” + +“Nghe. Con về vì mẹ, họ sẽ biết cách kéo lần sau.” + +Giọng bà bình tĩnh hơn hắn. Nước trong kho xám đi. Mẹ ở xa bị theo dõi. Người ngoài tới cổng. Mỗi vấn đề là một đường ống rò, và Tiến không còn đủ tay để tự bịt tất cả. + +Trên màn hình HN-07, không có tọa độ cứu nước. Chỉ một thay đổi trạng thái: + +**WESTERN ACCESS WATER CONDUCTIVITY: RISING** + +Trên màn hình, đường ống vẫn nhấp nháy đỏ. Ngoài sân, Bình đặt chiếc ca đầu tiên dưới vòi và chờ người bên cạnh cùng đọc số. + +Chương 27: Đường Về Thanh Hóa + +**17/07/2028 – 05:40** + +Tiến quyết định không về Thanh Hóa. + +Đó là quyết định đầu tiên hắn đưa ra sau cuộc gọi của mẹ, và cũng là quyết định khiến hắn muốn phá mọi quy tắc mình từng đặt. Hai người lạ đã hỏi về các kiện hàng hắn gửi trước Hồng Nhật. Nếu hắn xuất hiện, họ sẽ biết bà là điểm có thể kéo hắn khỏi Ngọc Trục. Nếu hắn không về, bà phải tự đối mặt với mối đe dọa hắn chưa nhìn thấy. + +Thủy nghe hắn trình bày bản đồ đường quốc lộ, các tuyến tránh và khoảng thời gian xe có thể chạy trước khi mặt đường đạt ngưỡng quá nóng. + +“Anh đang lập kế hoạch về,” cô nói. + +“Đang lập kế hoạch không về.” + +“Khác nhau ở đâu?” + +“Ở điểm cuối.” + +Hắn chỉ một trạm trung chuyển hàng cũ phía bắc Thanh Hóa. Bình có một người quen từng chạy tuyến, còn Nam biết một nhóm shipper đã rời Hà Nội hai tuần trước. Họ không cần đưa Tiến về tận nhà. Chỉ cần chuyển một radio cơ, thuốc, pin, bộ lọc nhỏ và chỉ dẫn an toàn qua nhiều tay, không để một tuyến biết toàn bộ. + +Một chuỗi hậu cần phân tán. Cách Kha làm. Tiến nhận ra và không thích. + +Bình đọc danh sách. “Ai đi?” + +“Tôi.” + +Thủy gạch tên hắn. + +“Không.” + +Tiến nhìn. + +“Anh vừa nói không về. Đi nửa đường vẫn là để người theo dõi biết hướng.” + +“Bình?” + +Bình lắc. “Mặt tôi xuất hiện ở La Phù rồi. Người của Kha biết.” Nam nói nhỏ: “Em có thể tìm người chuyển.” Mọi người quay sang. + +Cậu đặt ba cái tên lên bàn: những shipper từng ngủ chung bãi chờ, không thuộc nhóm lớn và không biết Ngọc Trục. Một người đang ở Chương Mỹ, một người ở Xuân Mai, một người có em làm tài xế tuyến Thanh Hóa. Tiến hỏi: “Tin?” + +“Không hoàn toàn.” + +“Vậy sao dùng?” + +Nam chạm lưỡi lên đôi môi khô. “Vì họ không biết đủ để bán cả đường.” Lập luận đứng vững: không cần tìm một người tuyệt đối đáng tin nếu mỗi người chỉ nắm phần thông tin không đủ để phản bội toàn bộ tuyến. + +Họ chia hàng thành bốn kiện, mỗi kiện mang một phần mã nhận. Mẹ Tiến chỉ nhận đủ khi ghép câu hắn từng dùng hồi nhỏ: tên con sông gần nhà, ngày giỗ bố và một câu bà hay mắng. Không dữ liệu nào trong hồ sơ công khai có đủ. Thủy nhìn hắn viết. + +“Đây mới là neo thật của anh?” + +Tiến dừng bút. “Không gọi vậy.” + +“Vì?” + +“Bà ấy là người.” + +Thủy không hỏi thêm. Đoàn đầu rời Ngọc Trục lúc trời chưa sáng hẳn. Tiến đứng sau cổng nhìn chiếc xe máy mất vào đường. Hắn không đi theo. + +Đó không phải hèn. Nhưng cơ thể hắn không biết khác biệt. Mọi cơ bắp đều muốn lao về phía nam. + +Đến trưa, gói đầu tới Chương Mỹ. Tín hiệu xác nhận đúng. Hai giờ sau, người chuyển thứ hai không trả lời. Bình kiểm tuyến. “Có thể hết pin.” + +“Có thể bị chặn,” Tiến nói. + +Thủy nói: “Không dùng ‘có thể’ để chọn điều tệ nhất.” + +“Phải chuẩn bị.” + +“Chuẩn bị khác kết luận.” + +Họ chờ thêm ba mươi phút. Một gói tin ngắn tới: + +**ĐƯỜNG CŨ BỊ CHẶN. CÓ NGƯỜI ĐEO VÒNG KHUYẾT. ĐỔI TUYẾN.** + +Biểu tượng Vòng Tròn Vỡ. Những người theo mẹ Tiến không nhất thiết là Kha. Một phe khác đã nhìn thấy chuỗi hàng trước Hồng Nhật và lần theo. + +Tiến gọi radio trung gian, không gọi trực tiếp mẹ. “Hủy điểm ba. Chuyển kiện qua xe tải rau.” Người bên kia hỏi: “Giá?” + +“Hai pin và bản đồ giếng.” + +“Ba pin.” + +“Được.” + +Trong một thành phố sụp, lời cầu cứu vẫn có giá. Tối, kiện hàng tới nhà bác Dũng. Mẹ Tiến chỉ gửi một câu: + +**MẸ NHẬN. ĐỪNG VỀ.** + +Bà không cảm ơn hay hỏi thăm dài dòng; radio có người nghe, cả hai đều hiểu. Tiến đọc thông điệp ba lần. + +Thủy đứng cạnh nhưng không nhìn màn hình. “Bà ổn?” + +“Hiện tại.” + +“Anh?” + +“Không.” + +Một câu không có cấu trúc. Cô gật. + +Gần nửa đêm, người chuyển thứ hai về tới điểm liên lạc. Anh ta mang theo một vật lấy từ người chặn đường: vòng kim loại bị bẻ mất một đoạn, mặt trong khắc câu: + +**NẾU KHÔNG CÓ KHÓA, SẼ KHÔNG CÓ CỔNG.** + +Khánh An nhìn và nhận ra cách chế tạo. + +“Không phải người Kha.” + +“Chắc?” Bình hỏi. + +“Kha không khắc giáo lý lên dụng cụ.” + +“Vậy ai?” + +Khánh An nói: “Những người tin Observation Initiative đã sai từ khi cố giữ các nút.” Tiến hỏi: “Tên?” + +“Chúng tự gọi là Vòng Tròn Vỡ.” + +Cái tên không mới với một số tài liệu cũ, nhưng đây là lần đầu họ chạm vào người thật. + +“Chúng muốn mẹ tôi?” + +“Có thể không,” Khánh An đáp. “Có thể muốn anh nghĩ chúng muốn.” + +Thủy đặt vòng kim loại vào túi chứng cứ. “Ai cũng đang dùng thông tin để kéo Tiến.” Cô nhìn hắn. + +“Kha kéo bằng Hậu Ký. HANOI-07 kéo bằng tin nhắn. Phe này kéo bằng mẹ anh.” + +Tiến nói: “Vậy không đi theo dây.” + +“Làm được?” + +“Không.” + +Hắn nhìn câu của mẹ. + +“Nhưng biết nó là dây.” + +Trên bản đồ, vùng Thanh Hóa vẫn không có dấu nhà. Tiến gập máy lại, để phần trống ấy được yên. + +Chương 28: Phe Thứ Ba + +Vòng Tròn Vỡ không tấn công Ngọc Trục ngay. Chúng gửi một người. Camera ghi hắn xuất hiện ở cuối ngõ lúc 04 giờ 18, đứng ngoài vùng bắn hiệu quả và đặt xuống một hộp kim loại. Không mặt nạ, không biểu tượng lộ. Khi Bình bật loa hỏi tên, hắn chỉ nói: + +“Không cần biết người đưa.” + +Người giao hộp rời đi. Tiến giữ nguyên hiện trường suốt hai giờ, không cho ai chạm vào. Ông Hòa dùng gương, dây và móc kéo nó vào sân đệm. Không thuốc nổ. Không nguồn điện. Bên trong là ba thứ: + +- một bản đồ đường ngầm phía Tây; +- ảnh nhà mẹ Tiến; +- một cuộn băng ghi âm. + +Bình chửi nhỏ. Thủy đeo găng, kiểm ảnh. “Chụp sau Hồng Nhật. Bóng nắng và cửa sổ khớp cuộc gọi hôm qua.” + +Tiến chưa hỏi Khánh An dựa vào đâu. Hắn nhìn mẹ đứng ở hiên nhà bác Dũng, tay cầm chậu nước, mặt quay khỏi camera. Người chụp ở đủ gần để thấy bà, đủ xa để chưa chắc bắn được. Cuộn băng dùng máy cơ. Không mã độc. + +Giọng nữ phát: + +“Lê Quốc Tiến. Anh đang giữ thứ đáng lẽ phải chết.” + +Không biến âm. Tuổi khoảng bốn mươi. + +“Ngọc Trục là một khóa. Láng là một tai. Hồ Tây là một mạch. Các anh đã làm ba phần nhận nhau.” + +Tiến quay sang Khánh An. Cô không biết giọng. + +“Ngày hai mươi chín tháng chín, nếu Khóa Trung Tâm nhận đủ trạng thái, vòng quan sát sẽ đóng. Khi đó mọi sai lệch bị ép về một phương án.” + +Thủy dừng băng. Khánh An tua lại câu *phá các khóa trước ngày Đồng Bộ* rồi hạ âm lượng. + +“Cách nói của Lê Hữu Kiên,” cô nói. “Hắn phụ trách một tế bào phía đông. Với Kiên, khóa nào còn hoạt động cũng là dây xích, kể cả khi trên đó đang có người.” + +“Giọng của hắn?” Bình hỏi. + +“Không. Học thuyết của hắn.” + +“Bà ta biết Hậu Ký?” + +“Hoặc dùng cùng thuật ngữ,” Tiến nói. + +Cô phát tiếp. + +“Chúng tôi không cần mẹ anh. Chúng tôi cần anh hiểu bà không phải con tin. Bà là thứ hệ thống có thể dùng để đo phản ứng của anh.” + +Giọng trong băng ngắt đúng một khoảng ngắn. + +“Neo không phải người được yêu. Neo là thứ khiến đối tượng quay về hành vi dự đoán được.” + +Tiến siết mép bàn. Mẹ hắn bảo bà không phải con tin trước khi người phụ nữ này nói. Bà hiểu trực giác điều Observation Initiative biến thành thuật ngữ. + +“Phá các khóa trước ngày Đồng Bộ,” cuộn băng tiếp, “và không hệ thống nào còn đủ dữ liệu để chọn tương lai thay thành phố.” + +Cuối băng: + +“Nếu không có khóa, sẽ không có cổng.” + +Bình hỏi: “Nghe cũng có lý.” Ông Hòa đáp: “Đập cầu vì sợ xe đi qua cũng có lý, nếu không quan tâm người đang đứng trên cầu.” Không ai cười. + +Tiến trải bản đồ chúng gửi. Một số tuyến đúng, vài tuyến cố ý sai hoặc đã lỗi thời. Vòng Tròn Vỡ có dữ liệu kỹ thuật, nhưng không toàn bộ. Thủy nói: “Chúng muốn được coi là phe hiểu hệ thống.” + +“Không phải kẻ phá mù.” + +“Đúng.” + +“Có thể chúng đúng một phần.” + +Khánh An nhìn bản đồ. “Kha từng bắt một người của chúng. Người đó nói mỗi nút hoạt động làm tương lai ít đi một nhánh.” + +“Kha làm gì?” + +“Thả.” + +Bình ngạc nhiên. “Hắn tử tế?” + +“Không. Gắn theo dõi.” + +“Rồi?” + +“Người đó cắt cả thiết bị lẫn một mảng da.” + +Không cực đoan vì thích bạo lực. Cực đoan vì tin mọi dấu quan sát đều là dây xích. Tiến triệu tập mọi người có quyền biết: Thủy, Bình, Linh, Nam, Phúc, ông Hòa và Khánh An. Không giấu hộp. + +“Ba lựa chọn,” hắn nói. “Giữ nguyên, phá, hoặc hiểu thêm.” + +Phúc hỏi: “Trong lúc hiểu, nước đổi màu và người ta theo mẹ anh.” + +“Đúng.” + +“Vậy hiểu bao lâu?” + +“Không biết.” + +Linh nói: “Đừng biến không biết thành không làm. Nước cần giải pháp trước.” Tiến gật. “Hạ tầng sống trước. nút không thử thêm.” + +Ông Hòa thêm: “Không phá thứ đang giữ tải cho tới khi có đường thay.” Thủy viết thành quy tắc tạm: + +**Không kích hoạt mới. Không phá khóa đang tải. Mọi dữ liệu về 29/09 phải có nguồn.** + +Nam hỏi: “Nếu chúng tới đánh?” Bình nói: “Thì đánh.” Tiến lắc. “Nếu đánh để phá, chặn. Nếu tới nói, nghe.” + +Khánh An nhìn hắn. “Kha sẽ coi đó là yếu.” + +“Không phải Kha quyết.” + +“Vòng Tròn Vỡ cũng vậy.” + +Lần đầu, Ngọc Trục không chọn một phe dựa trên người nào nói đáng tin hơn. Họ chọn nguyên tắc có thể kiểm chứng. Buổi chiều, HN-07 ghi một trạng thái mới: + +**EXTERNAL DOCTRINE DETECTED** + +Không gắn nhãn địch. Chỉ ghi. Thủy nhìn dòng đó. “Nó biết chúng ta nghe băng.” + +“Có mic.” + +“Hoặc nhiều hơn.” + +Tiến tắt mic ngoài, kiểm log. Dòng vẫn ở đó, có thể dựa trên thiết bị rung hoặc dữ liệu khác. Hắn không cố giải ngay. Đêm, mẹ gọi qua rơ-le. + +“Người chụp ảnh quay lại chưa?” Tiến hỏi. + +“Chưa.” + +“Mẹ có muốn chuyển nơi?” + +“Có.” + +Hắn ngạc nhiên. + +“Bác Dũng tìm được một căn hầm ở khu khác. Mẹ tự đi.” + +“Con gửi người.” + +“Không.” + +“Mẹ—” + +“Con gửi người, người ta theo người.” + +Bà đã học logic phân tán mà không cần tên. + +“Con hiểu.” + +“Mẹ biết.” + +Trước khi cúp, bà nói: “Đừng để họ gọi mẹ bằng cái tên khiến con quên mẹ là ai.” Ánh mắt Tiến dừng ở từ **ANCHOR** trong ghi chú của Khánh An. Hắn gạch một đường. Không xóa dữ liệu. + +Thủy kéo một đường dưới danh xưng **Người Nghe**, rồi viết tên thật của người mang nó ở bên cạnh. Khánh An đọc, không sửa. + +Chương 29: Dấu Trong Cổng + +Người mang vòng khuyết xuất hiện trên camera phía sau kho, rồi biến mất ở vùng tối giữa hai khung hình. Không trèo tường. Không mở cổng. Không có dấu cạy phá trên cửa ngầm. + +Tiến khóa căn cứ theo quy trình: kiểm người, kiểm lối, kiểm vật tư, kiểm các điểm mù camera. Mọi người có mặt. Không đồ lớn bị mất. Nhưng cảm giác có người đã đi qua một nơi không ai biết vẫn bám vào kho. Phúc bị nghi đầu tiên. + +Lý do không nằm ở việc Phúc từng phá quy tắc. Tuyến di chuyển sau Đại Hà của anh trùng một điểm Vòng Tròn Vỡ từng dùng để tuyển người bằng nước. Bình đặt bản đồ xuống trước mặt Phúc. “Anh đi qua đây ba lần. Có lần nào gặp người của họ?” + +Phúc nhìn dấu mực, không nổi nóng. “Có. Lần thứ hai. Hai người phát nước, không nói tên. Tôi không báo vì lúc đó chưa biết nó liên quan.” + +“Áo anh từ đâu?” + +“Kho nhân viên Đại Hà. Nếu nghi tôi, kiểm áo trước, kiểm người sau. Đừng hỏi bằng cách buộc tôi tự chứng minh mình vô tội.” + +Nam đứng cạnh bàn. “Hôm Dư Âm gọi em gái, anh Phúc có cơ hội mở cổng mà không mở. Đó không chứng minh anh ấy sạch, nhưng là dữ liệu ngược với giả thuyết phản.” + +Bình gật, tự ghi thêm vào cột đối chứng. Không ai được miễn nghi chỉ vì đã làm đúng một lần; cũng không ai bị kết tội chỉ vì một tuyến đường trùng. Tiến cho kiểm vật dụng trước khi hỏi tiếp. + +Hắn kiểm quần áo Phúc. Máy dò kim loại kêu ở lớp viền áo bảo vệ Đại Hà. Linh cắt chỉ, lấy ra một mảnh vật liệu mỏng bằng móng tay. Phúc nhìn. “Tôi không biết.” + +“Áo từ đâu?” Thủy hỏi. + +“Kho nhân viên Đại Hà. Mặc từ hôm đó.” + +Mảnh vật liệu không có pin. Bề mặt gồm những lớp hợp kim và gốm, giống dấu cộng hưởng tìm thấy sau Trạm Láng. Ông Hòa đặt nó gần ống nước. Không phản ứng. Đặt gần nắp HN-07. + +Một đường nứt sáng rất yếu chạy qua bề mặt. Thủy bước lại. Mảnh vật liệu rung. + +Cô lùi. Nó dừng. Tiến không gọi đó là chọn người. Hắn đổi vị trí, đưa Nam, Bình, Linh và Khánh An lần lượt tới gần. Không phản ứng đáng kể. Khi Thủy tới trong bán kính một mét, đường nứt sáng lại. + +“Vì cô nghe được,” Bình nói. + +Thủy đáp: “Hoặc vì tôi đã tiếp xúc Láng nhiều nhất.” Không chấp nhận danh xưng trước dữ liệu. Họ thử với bộ phát tần số thấp. Ở một dải hẹp, mảnh vật liệu phản ứng giống khi Thủy đứng gần. Nghĩa là cơ thể cô không phát “năng lượng” bí ẩn; có thể nhịp thần kinh, thiết bị cô mang hoặc dấu cộng hưởng bám trên vật dụng tạo điều kiện. + +Thủy tháo máy ảnh, đồng hồ, túi. Mảnh vẫn rung, yếu hơn. Linh đo nhịp tim, điện da. “Khi cô tập trung nghe, nhịp thay đổi.” + +Không ai trong nhóm có đủ chuyên môn thần kinh để đi xa hơn giả thuyết. Việc họ làm được lúc này chỉ là ghi nhận và đối chiếu. Mặt dưới mảnh vật liệu hiện một chuỗi ký hiệu khi rung. Không phải tọa độ hoàn chỉnh. Ba cụm số và một ký hiệu giống tường thành. + +Khánh An nhìn cách chuỗi được chia thành các khối 2–3–5–7. “Hoàng Tùng từng dùng dãy số nguyên tố để đánh dấu lớp phục hồi phần cứng. Hắn thiết kế an ninh kho cho Kha trước khi mất tích.” + +“Có nghĩa marker do Tùng làm?” Thủy hỏi. + +“Có nghĩa người làm biết cùng một thói quen mã hóa. Chưa đủ để kết tên.” + +Thủy chụp lại cả ký hiệu lẫn nhận định, đặt chữ **giả thuyết** ngay đầu dòng. + +“Không kết luận Hoàng Thành,” cô nói trước khi Tiến kịp. + +“Chưa nói.” + +“Anh nhìn như đã nói.” + +Họ đối chiếu với bản đồ hạ tầng, bản đồ Pháp và ảnh vệ tinh cũ. Ba cụm số không phải kinh độ vĩ độ. Ông Hòa nhận ra chúng giống cao độ nền và khoảng cách giữa các mốc. Nếu đặt từ Trạm Láng, Ngọc Trục và Hồ Tây, ba vòng giao nhau gần khu Hoàng Thành. + +Thủy không viết tọa độ trong lúc ngủ; đó là phép suy ra từ ba điểm vật lý. + +“Khóa Trung Tâm,” Khánh An nói. + +Tiến hỏi: “Kha biết?” + +“Có thể biết vùng. Không biết cửa.” + +Thủy nhìn mảnh vật liệu. “Vòng Tròn Vỡ khâu nó vào áo Phúc?” + +“Áo có trước khi họ gặp anh,” Bình nói. + +“Vậy Observation Initiative hoặc người Đại Hà.” + +Phúc nhớ lại. Trước thảm họa, một nhân viên kỹ thuật đã đổi áo bảo vệ cho anh vì chiếc cũ rách. Người đó biết tên Tiến, từng hỏi về khu giao nhận. Dấu vết người kỹ thuật Đại Hà trở lại. Không phải chuyện mới xuất hiện, mà là một món nợ họ đã bỏ lại từ sau thảm họa. + +Tiến hỏi: “Người đó sống?” Phúc lắc. “Tôi thấy anh ấy xuống tầng dưới. Không thấy ra.” + +Thủy ghi: + +**Kỹ thuật viên Đại Hà – liên hệ HANOI-07 – có thể đã gắn marker vào áo.** + +Họ không ghi “đã chết”; chưa có xác để xác nhận điều đó. Đêm, họ đặt mảnh vật liệu trong hộp Faraday tự chế. Camera phía sau kho không còn mất khung. Một khả năng đơn giản hơn vẫn còn: hình người biến mất chỉ là nhiễu do marker đi qua điểm cộng hưởng, chứ chưa chắc có ai thật sự lọt qua cổng. + +Bình xem lại video. Ở khung trước khi bóng biến mất, không có chân chạm đất. Chỉ một dải nhiễu hình người. + +“Chúng ta tự đóng căn cứ vì một lỗi camera,” cậu nói. + +“Không,” Tiến đáp. “Vì chưa biết đó là lỗi.” + +“Khác?” + +“Có.” + +Họ đã suýt đánh nhau vì một hình ảnh. Thủy viết thêm quy tắc vào sổ: + +**Không dùng một nguồn quan sát để kết tội.** + +Từ hôm đó, camera vẫn chạy, nhưng không một khung hình nào được dùng kết tội nếu thiếu nguồn thứ hai. Ông Hòa viết quy tắc mới ngay dưới màn hình giám sát. + +Chương 30: Hồ Sơ Người Nghe + +Thủy bắt đầu sợ giấc ngủ, không vì ác mộng mà vì những gì còn lại sau khi tỉnh. Cô không viết tọa độ chính xác. Trên tường cạnh giường là một hình gồm ba vòng méo, một đoạn tường thành và mười một vạch ngắn. Cô không nhớ đã vẽ, nhưng mực trên ngón tay là của mình. + +Tiến tìm thấy cô ngồi trước hình lúc gần sáng. + +“Ngủ bao lâu?” + +“Linh nói hai tiếng.” + +“Cô nhớ vẽ?” + +“Không.” + +“Nghe gì?” + +“Các lớp.” + +Thủy không trả lời bằng một danh từ bí ẩn rồi chờ hắn tin. Cô mở sổ, đưa ba bản ghi. Ở Láng, câu “đừng mở” xuất hiện bằng nhiều giọng. Một giọng hiện đại. Một giọng dùng từ cổ hơn. Một lớp không thành lời nhưng tạo cùng phản ứng. Cô không “dịch” được nghĩa; cô suy ra từ cách cơ thể và thiết bị phản hồi. + +“Cùng một nội dung được ghi nhiều lần,” cô nói. “Hoặc nhiều người nghe cùng một hiện tượng rồi mô tả giống nhau.” + +“Cô phân biệt?” + +“Chưa.” + +“Vậy thử ngoài Láng.” + +Họ xuống đường ngầm phía Tây cùng Bình và ông Hòa, không chỉ hai người. Sau những gì đã xảy ra, không ai vào một cánh cửa mới mà không có người giữ lối và dây an toàn. Marker lấy từ áo Phúc được đặt trong hộp cách ly. Khi tới cánh cửa từng hiện **LANG HANDSHAKE ACCEPTED**, mảnh vật liệu rung yếu. Thủy không gõ chuỗi ngay. Cô đặt cảm biến lên cửa, đo dao động nền và so với log lần trước. + +“Có một nhịp tự nhiên,” cô nói. “Cửa đang rung sẵn.” + +Ông Hòa áp tai vào tuốc-nơ-vít chạm kim loại. “Đừng gõ đè. Chờ nó nghỉ.” Họ chờ. Khi dao động xuống thấp, Thủy gõ lại chuỗi với khoảng nghỉ họ đã sửa trong lần can thiệp ở Trạm Láng. Cửa mở. + +Cánh cửa không hề “tự xuất hiện”. Một mảng tường trượt vào hốc, để lộ lối họ từng bỏ qua vì khe bị bùn và lớp cách nhiệt che kín. Bên trong là phòng lưu trữ nhỏ, khô bất thường. Tủ giấy, hộp kim loại, bản đồ cuộn và các vật liệu từ nhiều thời kỳ nằm cạnh nhau. + +Trước khi chạm vào bất cứ thứ gì, Thủy chụp nguyên trạng, đánh số, ghi nguồn rồi mới phân lớp tuổi. + +Một bản đồ kỹ thuật tiếng Pháp dùng cụm **Puits d’écoute** — giếng nghe. Một sổ tiếng Việt thập niên 1970 ghi **Trạm nghe – khu Láng** và cảnh báo không dùng nguồn điện ngoài khi thử cộng hưởng. + +Tấm gỗ có chữ Hán Nôm. Thủy không đọc. Cô chụp từng mặt, đánh dấu cần người chuyên môn. + +“Ít nhất cô không dịch được mọi thứ,” Tiến nói. + +“Anh thất vọng?” + +“Nhẹ người.” + +Tập giấy hiện đại dưới đáy tủ có ba thuật ngữ tiếng Anh: + +**RETURNED** + +**LISTENER** + +**OBSERVER** + +Nó không chứng minh vai trò ấy đã tồn tại từ cổ đại; nó chỉ cho thấy nhóm hiện đại từng phân loại như vậy. Các tài liệu cũ có những từ tương tự nhưng chưa được dịch. Thủy đọc ghi chú hiện đại: + +**RETURNED: trạng thái mang dữ liệu ký ức không khớp chuỗi hiện tại.** + +**LISTENER: trạng thái phản ứng với tín hiệu giữa các lớp ghi.** + +**OBSERVER: người xác nhận dữ liệu vật lý khi các nguồn không thống nhất.** + +Bên cạnh dòng Observer có chữ đỏ: + +**Không được can thiệp.** + +Dòng bị gạch, kèm ghi chú khác: + +**Không còn khả thi sau khi quan sát làm đổi đối tượng.** + +Tiến nhớ HANOI-07 gửi tin nhắn, Kha dùng Hậu Ký, Vòng Tròn Vỡ dùng ảnh mẹ. Không người quan sát nào còn đứng ngoài. Ở cuối tập giấy là bảng lịch cộng hưởng. Nhiều ngày cũ đã gạch. Một mốc còn lại: + +**29/09/2028 – SYNCHRONIZATION WINDOW** + +Không ghi “mở cổng”. Dòng kỹ thuật: + +**Nếu cụm phía Tây không ổn định trước cửa sổ, phản hồi tải sẽ chuyển về cụm trung tâm.** + +“Ngày Đồng Bộ,” Tiến nói. + +Thủy không nhìn hình mình vẽ để kết luận. Cô trải ba bản đồ: Ngọc Trục, Láng, Hồ Tây. Các mốc cao độ giao nhau gần Hoàng Thành, đúng biểu tượng tường thành trên marker. + +“Khóa Trung Tâm có thể ở đây,” cô nói. “Tôi nói có thể. Chưa đủ để gọi là chắc.” + +Bình kiểm hành lang. “Có người.” Bước chân thật, có hướng và trọng lượng. + +Tiến tắt đèn. Không ai rút ngay. Giọng Kha vang ngoài cửa: “Tao biết mày sẽ tìm được phần còn lại.” Tiến đáp: “Anh theo marker?” + +“Không.” + +“Khánh An?” + +“Không.” + +“Vậy?” + +“Người kỹ thuật Đại Hà từng làm cho kho của tao.” + +Một tuyến cũ khép lại một phần. Kha không bước vào. Hắn ngồi ngoài ngưỡng, đúng vị trí có thể rút nếu cửa đóng. + +“Anh muốn gì?” Thủy hỏi. + +“Đổi dữ liệu.” + +“Cho gì?” + +“Nước.” + +Không khí trong phòng thay đổi. Kha không tới vì danh xưng Người Nghe. Hắn tới vì biết Ngọc Trục đang khát. Và mọi bí mật dưới Hà Nội, cuối cùng, vẫn phải đi qua một cốc nước. + +Chương 31: Cái Giá Của Một Nút + +Kha không bước qua ngưỡng phòng lưu trữ. Hắn ngồi ngoài hành lang, lưng không chạm tường, hai người của hắn giữ khoảng cách phía sau. Vị trí ấy được chọn để rút được ngay nếu cánh cửa đóng hoặc Tiến nổ súng, chứ không phải vì lịch sự. + +“Ngọc Trục còn bao nhiêu nước?” Kha hỏi. + +Tiến không trả lời. + +“Tám ngày theo định mức cũ. Mười hai nếu Linh cắt rửa và nấu. Ít hơn nếu bệnh đường ruột bắt đầu.” + +Thủy nhìn hắn. “Anh theo dõi bể?” Kha vuốt nhẫn. “Không cần. Tao biết Dư Âm làm lớp lót đường Tây bong. Biết số người. Biết màng lọc loại gì.” + +“Biết từ đâu?” + +“Mua.” + +Một câu thật một phần. Hắn đặt tập ảnh xuống nền: bơm, màng lọc, than hoạt tính, bình áp, can nước. Đủ để dựng tuyến xử lý tạm và giữ Ngọc Trục thêm nhiều tuần. + +“Đổi gì?” Tiến hỏi. + +Kha nhìn Thủy, nhưng không nói “cô ấy” như một món hàng. “Thủy tới Láng với tao khi cửa sổ thử tiếp theo mở.” + +“Không.” + +Thủy quay sang Tiến. “Anh không quyết.” + +“Không.” + +“Anh vừa làm.” + +Kha cười rất nhẹ. “Đó là vấn đề của mày.” Tiến vẫn nhìn tập giấy. “Cô không đi với Kha.” + +“Vì nguy hiểm?” + +“Đúng.” + +“Hay vì anh cần tôi ở Ngọc Trục?” + +“Cả hai.” + +“Ít nhất câu thật.” + +Thủy quay sang Kha. “Anh cần gì ở tôi?” + +“Xác định mười một phút trống.” + +“Trong Hậu Ký?” + +“Ừ.” + +Kha lấy một tờ in. Dòng dữ liệu ngày 29/09/2028 dừng từ 12:17 tới 12:28. Trước và sau có log. Trong mười một phút, không camera, không nhiệt, không tuyến vận tải, không bản ghi tử vong. + +“Anh đã hỏi Hậu Ký về khoảng đó?” Thủy nói. + +Kha xoay chiếc nhẫn một vòng rồi dừng tay. + +“Bao nhiêu lần?” + +“Đủ.” + +“Câu hỏi gì?” + +“Không liên quan.” + +“Rất liên quan. Nếu dữ liệu phụ thuộc truy vấn, cách anh hỏi quyết định thứ nó trả.” + +Tiến nhìn thẳng Kha. Khi ấy họ chưa có bằng chứng Hậu Ký là một giao thức truy vấn, nhưng Thủy đã bắt đầu nghi câu trả lời không độc lập với người đọc. Kha nói: “Tao hỏi ai sống.” + +“Và?” + +“Không có kết quả.” + +“Anh cần Người Nghe lấp chỗ trống.” + +“Cần một nguồn khác.” + +Thủy hỏi: “Nếu tôi đi, nước tới trước hay sau?” + +“Trước một nửa. Sau khi thử, nửa còn lại.” + +“Không.” + +Tiến tưởng cô từ chối chuyến đi. Nhưng Thủy nói tiếp: + +“Nước tới toàn bộ trước. Tôi tới Láng cùng đội của mình, không thuộc quyền anh. Mọi dữ liệu ghi được có bản sao ở ba nơi.” + +Kha nhìn cô. Tiến nói: “Cô chưa đồng ý.” + +“Đang đàm phán.” + +“Về mạng cô.” + +“Đúng.” + +Câu đó giữ hắn im. Thủy đặt điều kiện: + +- Khánh An có quyền kiểm tra thiết bị Kha; +- Tiến hoặc người Ngọc Trục giữ lối rút; +- không kích hoạt chuỗi; +- chỉ quan sát tín hiệu tự nhiên; +- không dùng Hậu Ký đưa lệnh trong thử nghiệm; +- toàn bộ nước giao trước. + +Kha nói: “Mày đang mua nước bằng rủi ro của mình.” + +“Không. Tôi bán quyền tiếp cận dữ liệu tôi có thể thu.” + +Khác biệt rất lớn. Kha nhìn Tiến. “Cô ấy giỏi hơn mày.” + +“Biết.” + +Lần này từ “biết” không phải câu cụt để tỏ ra lạnh. Tiến thật sự chấp nhận. Kha đồng ý bốn điều, từ chối giao toàn bộ nước trước. + +Thủy đứng dậy. “Vậy không có thỏa thuận.” + +“Ngọc Trục khát.” + +“Anh cũng cần mười một phút.” + +Hai bên nhìn. Kha nhượng: tám mươi phần trăm trước, hai mươi phần trăm niêm phong tại điểm trung lập, mở bằng hai khóa. Tiến yêu cầu thêm một khóa thứ ba do Linh giữ. Kha cười. “Các người chia mọi thứ.” + +“Để một người không giữ cổ người khác.” + +Thỏa thuận được viết tay, có chữ ký của Thủy, Tiến, Kha, Khánh An và Bình làm chứng. Tờ giấy không tự bảo vệ được ai; giá trị của nó nằm ở chỗ xác định rõ điều gì sẽ bị coi là vi phạm. Trước khi rời, Kha nhìn tập tài liệu. + +“Ngày Đồng Bộ?” + +Tiến không đáp. Thủy nói: “Anh đã biết mốc.” + +“Biết. Không biết các người gọi gì.” + +“Không quan trọng.” + +“Cách gọi quyết định người ta nghĩ nó làm gì.” + +Thủy ghi câu đó. Kha đứng. “Một lời miễn phí. Đừng tin chữ ‘cổng’.” + +“Vì?” + +“Hậu Ký không có hình thứ gì đi qua.” + +Hắn đi. Ở hành lang, Khánh An nhìn theo. “Hắn nói thật.” + +“Cô biết?” Bình hỏi. + +“Không. Nhưng khi nói dối, hắn thường cho thêm một chi tiết để người nghe bám. Lần này không.” + +Trên đường về, Tiến hỏi Thủy: “Cô vẫn đi?” + +“Có.” + +“Có thể chết.” + +“Anh cũng.” + +“Không giống.” + +“Đúng. Vì lần này tôi tự chọn.” + +Tiến muốn nói không. Nhưng đã quá nhiều lần hắn dùng bảo vệ để che quyền kiểm soát. + +“Đội của cô,” hắn nói. “Cô chọn.” + +Thủy gật. Một thay đổi nhỏ. + +Không có tiếng vỗ tay. Thủy tự ghi tên mình vào cột người chịu rủi ro và giữ một bản sao điều kiện. Từ cuộc họp ấy, mọi đề xuất liên quan Người Nghe phải ghi tên người chịu tác động thay vì chỉ ghi vai trò hệ thống. + +Chương 32: Khóa Phía Tây + +**19/07/2028 – 22:58** + +Trạm Láng cháy từ dưới đất. Không có cột lửa trên mặt đường. Khói xám chui qua nắp cống, khe tường và lớp bùn Tô Lịch. Kim loại dưới nền nóng lên từng đoạn, tạo những vệt nhiệt chạy như mạch máu trên camera. + +Dư Âm trở lại yếu hơn lần trước nhưng rộng hơn. Radio phát giọng người chết. Ống nước gõ tên người. Tiếng chuông ở xa tới mức không ai xác định được nó ở dưới Láng hay sâu hơn trong thành phố. Tiến tới bằng tuyến bảo trì phía nam cùng Bình, Phúc và ông Hòa. Thủy dẫn một nhóm khác theo đường Kha cung cấp nhưng giữ thiết bị độc lập. Kha đi từ phía bắc. Khánh An đã ở trong trạm, cạnh một người bị thương. + +Khi thấy Kha, cô không hạ súng. + +“Anh mở sai.” + +Kha dừng ngoài vùng bắn. “Biết.” + +“Ba người chết.” + +“Biết.” + +“Anh vẫn tới.” + +“Vì chưa xong.” + +Khánh An cười cay. “Đúng là anh.” Vòng Tròn Vỡ có ít nhất sáu người trong khu trạm. Họ không giữ vị trí để chiếm. Các khối nhiệt cắt đã được gắn quanh tuyến hợp kim của Listening Well, đủ làm vật liệu chảy và phá đường cộng hưởng. + +Nhưng sáu người không thuộc một chuỗi chỉ huy duy nhất. Quân điều phối nhánh phía bắc; Lê Hữu Kiên, thủ lĩnh một tế bào phía đông, giữ bộ kích riêng và đeo vòng khuyết sơn trắng thay vì đen. Cấu trúc phân tán giúp Vòng Tròn Vỡ khó bị chặt đầu, đồng thời khiến một lệnh dừng không thể vô hiệu mọi tay kích. + +Giọng Vũ Mạnh Quân vang qua loa: “Khóa là nguyên nhân của phản hồi. Rời khu vực. Chúng tôi không muốn giết người.” Tiến đứng sau vách bê tông. “Ông không biết nếu phá thì tải đi đâu.” + +“Về không đâu.” + +“Không có ‘không đâu’ trong một mạng đang chịu tải.” + +Kha ở lối đối diện nói: “Nó chuyển về Hoàng Thành.” Quân đáp: “Theo Hậu Ký của anh?” + +“Không. Theo áp lực.” + +Lần đầu Kha dùng phép đo thay vì dữ liệu tương lai. Thủy đặt cảm biến xuống. “Đường Tây đang giữ một phần dao động từ Hồ Tây. Nếu cắt đồng thời, tải dồn trung tâm trong vài giây.” + +Quân không đáp ngay; không rõ ông đang nghe hay chỉ chờ thiết bị ổn định. Tiến nói: “Cho chúng tôi ba phút đo từng điểm.” + +“Các anh đã dùng thời gian hiểu để kích hoạt mọi thứ.” + +“Đúng.” + +Không biện hộ. + +“Ba phút.” + +Quân cho một. Một phút không đủ, nhưng đủ để người kỹ thuật thấy khối nhiệt thứ ba đặt sai vị trí. Nếu kích, nó không chỉ cắt đường cộng hưởng mà còn làm vỡ ống làm mát cũ. + +Ông Hòa bò dưới sàn, ba ngón tay trái và bàn tay phải lần theo dây. “Khối ba kích là đường lạnh vỡ.” Phúc hỏi: “Gỡ?” + +“Không kịp. Phải cắt dây mồi.” + +“Dây nào?” + +“Dây điện không nói dối.” + +Ông Hòa chỉ hai tuyến gần giống. + +“Người đọc mới nói dối.” + +Đồng hồ của Quân còn mười lăm giây. Kha nói qua loa: “Quân, dừng.” + +“Anh muốn giữ quyền.” + +“Đúng.” + +Một lời thừa nhận. + +“Nhưng nếu mày kích bây giờ, không còn quyền gì để giữ.” + +Quân không trả lời. Đếm về ba. + +Thủy nghe một giọng không hướng nói “cắt dây đỏ”. Cô không làm theo. Cảm biến dòng cho thấy dây đen mới là mồi. + +“Đen,” cô nói. “Có dòng.” + +Ông Hòa cắt. Khối ba chết. + +Kiên kích thủ công khối một trước khi đồng hồ hết. Hợp kim nóng trắng. Cả trạm rung. Quân quát: “Tôi chưa cho kích.” + +Kiên đáp qua kênh nội bộ: “Ông đã cho họ một phút để giữ khóa.” Cấu trúc tế bào từng bảo vệ Vòng Tròn Vỡ khỏi bị một người kiểm soát giờ cũng ngăn Quân dừng một nhánh đã tự chọn mục tiêu. + +Phúc nhìn đường làm mát. Áp lực tăng. + +“Van ở đâu?” + +Ông Hòa chỉ. Phúc lao qua vùng nhiệt. Anh dùng thanh sắt kéo van, bàn tay phải sát bề mặt nóng. Găng cháy. Da bỏng. + +Linh không ở đây để ngăn. Bình kéo anh lại, nhưng Phúc giữ tới khi kim áp hạ. + +“Đủ!” Bình hét. + +“Chưa.” + +Giọng em gái gọi từ ống. Không hướng. + +Phúc vẫn giữ van. Tiến và Kha cùng tới bảng điều khiển từ hai phía, mỗi người cầm một phần sơ đồ và chẳng ai giao trọn phần của mình cho người kia. + +“Đường này cấp khối hai,” Kha nói. + +“Cũng cấp cảm biến tải.” + +“Cắt?” + +“Không. Chuyển qua nguồn phụ.” + +“Chậm.” + +“Phá thì mù.” + +Kha liếc dải nhiệt đang tăng. “Chuyển.” Chậm hơn phương án cưỡng bức, nhưng vẫn giữ được phép đo. + +Thủy đứng tại điểm Listening Well, nghe lớp rung. “Khoảng tải đang dồn về nhánh bắc. Khóa không mở. Nó đang cố giữ cân bằng.” Quân xuất hiện sau lớp khói, mặt nạ đã tháo. “Các anh còn gọi nó là khóa?” + +“Không quan trọng tên,” Thủy nói. “Kim đang tăng.” + +Quân nhìn cảm biến độc lập của cô, không phải màn hình Kha. Dữ liệu giống nhau. Ông hạ bộ kích. + +“Đội tôi dừng.” + +Kiên phản đối: “Nếu không phá hôm nay, ngày 29 chúng ta sẽ không còn cơ hội.” Quân quay súng vào khối nhiệt, không vào người. “Nhánh của tôi dừng. Ai kích tiếp tự chịu là kẻ chôn dân, không phải người phá khóa.” + +Hai người theo Quân tháo khối hai. Kiên rút qua nhánh đông cùng một thuộc cấp, mang theo bộ kích còn lại. Quân không đuổi; tải đang tăng và mọi viên đạn lúc đó đều lấy mất một bàn tay đang giữ trạm. Khối một đã chảy vào tuyến hợp kim, tạo khe nứt. Ông Hòa dùng kẹp giữ tấm chắn trong khi Tiến và Kha chuyển tải. Nhiệt xuyên găng. + +“Bác bỏ tay!” Tiến nói. + +“Chưa giữ.” + +“Bác mất ngón.” + +“Còn ba.” + +Tấm chắn trượt. Ông Hòa đưa tay trái vào vị trí không nên đưa. Hai ngón bị kẹp và cắt bởi mép hợp kim nóng. Tiếng ông chỉ là một hơi bật. + +Máu. Nhưng tấm chắn đứng. + +Tiến muốn kéo ông ra. + +“Bảng!” ông Hòa quát. “Nhìn bảng!” + +Tải đang rơi. Khóa phía Tây ổn định không vì một nút được bấm, mà vì sáu người ở ba phe giữ những thứ khác nhau trong cùng một phút: + +- Phúc giữ van và bỏng bàn tay; +- ông Hòa giữ tấm chắn bằng cái giá hai ngón; +- Thủy phân biệt rung thật khỏi giọng gọi; +- Quân ngăn người mình kích tiếp; +- Kha giữ nguồn phụ; +- Tiến chuyển điều khiển mà không khởi động phiên bắt tay. + +23 giờ 41. Kim trở về vùng vàng. + +Màn hình độc lập hiện: + +**WESTERN LOCK STABLE** + +Không có ai còn sức để reo. Phúc gục bên van, còn Bình quỳ xuống dập phần găng đang cháy ở cổ tay. + +Ông Hòa nhìn bàn tay, rồi nhìn tấm chắn. “Đứng.” Kha dựa bảng, mặt xám. + +Khánh An tới trước hắn. “Ba người của anh?” + +“Chết.” + +“Người của Quân?” + +“Hai.” + +“Anh còn gọi đây là thắng?” + +Kha không trả lời. Dư Âm tắt dần theo tải, không biến mất như một công tắc. Những giọng trong ống loãng ra, nhường chỗ cho tiếng thở, tiếng kim loại nguội và tiếng người thật gọi cáng. + +Trước khi rời trạm, Thủy nhìn về hướng Hoàng Thành. Một tiếng chuông vang. + +Không hướng. Nhưng cảm biến nền cũng ghi một xung rất nhỏ. + +Cô không nói “nó trả lời”. Cô ghi: + +**23:47 – dao động trung tâm sau khi Khóa phía Tây ổn định. Nguồn chưa xác định.** + +Sau đêm đó, Hậu Ký sẽ nói Khóa phía Tây đã thất bại. Nhưng trong hiện tại, nó vẫn đứng. + +Và những người giữ nó phải mang cái giá trên cơ thể. + +ARC 5: VÒNG TRÒN VỠ + +Chương 33: Tro Sau Láng + +Ngọc Trục đón họ trở về từ Trạm Láng bằng mùi cồn, thịt cháy và tiếng bánh cáng nghiến qua nền xi măng. Phúc được đưa vào trước. Bình và Nam mỗi người giữ một đầu cáng; lớp vải quấn quanh bàn tay phải của anh đã chuyển sang màu đỏ nâu, vài chỗ cháy cứng vì hơi nóng xuyên qua. Phúc còn tỉnh, nhưng môi tái và da gần như khô. Trong thời tiết này, người bị thương ngừng đổ mồ hôi thường đáng sợ hơn việc họ kêu đau. + +“Đặt xuống.” + +Linh đã chờ sẵn trong khu y tế. Cô không hỏi ở Láng ai thắng, HANOI-07 đã hiện gì hay khối nhiệt được dập bằng cách nào. Trong căn phòng này, mọi bí mật phải xếp sau mạch, đường thở và lượng nước còn lại trong cơ thể. Nam cúi xuống quá nhanh, hai tay run khiến khay dụng cụ va vào thành bàn. + +“Ra ngoài.” + +“Em giữ được.” + +Linh nhìn mặt cậu. “Em đứng thêm một phút là tôi có hai bệnh nhân.” + +Nam vẫn không nhúc nhích cho tới khi Phúc hé mắt. Giọng anh khàn như giấy ráp: “Giữ cổng.” + +Ba chữ ấy đã theo họ từ Trạm Láng về tận đây. Nam nuốt khan, gật đầu rồi rời phòng. Khi cánh cửa khép lại, Linh cắt lớp băng cháy bám vào da. Mùi thịt khét trộn với cồn sát trùng; Phúc nghiến răng, còn Linh vừa làm vừa bắt anh trả lời những câu vô nghĩa để chắc rằng anh chưa tụt khỏi tỉnh táo. + +Ở bàn bên, ông Hòa ngồi thẳng lưng. Bàn tay trái đã được băng kín, chỉ còn ba ngón. Hai ngón còn lại nằm dưới một miếng vải trắng trong chiếc khay kim loại. Không ai nhắc chuyện nối lại. Những điều kiện từng khiến việc ấy trở thành thủ thuật y khoa bình thường — máu, phòng mổ, kính vi phẫu, điện ổn định — đều không còn. + +Ông nhìn chiếc khay một lúc lâu rồi nói: “Chôn đi.” + +Linh ngừng tay. “Bác Hòa—” + +“Để đấy cũng thối.” + +Linh mở miệng rồi thôi. Bình quay mặt sang chỗ khác. Ông Hòa kéo tấm vải phủ khay lại, sau đó quay sang Tiến và bắt gặp đúng vẻ mặt hắn đang cố giấu. + +“Đừng tính nữa.” + +“Cháu chưa nói gì.” + +“Cậu làm cái mặt ấy là tôi biết rồi. Có lỗi, tôi hiểu. Nhưng ngồi nghĩ lại tới sáng cũng không mọc lại được hai ngón tay cho tôi.” + +Ánh mắt Tiến dừng ở ba ngón tay còn lại. “Cháu làm cho bác một bộ kẹp. Có dây giữ cổ tay, ngàm khóa và lớp cách điện. Loại dùng được khi sửa tủ điện.” + +Ông Hòa nhướng mày. “Cậu nghĩ ba ngón của tôi hết làm việc?” + +“Cháu nghĩ ba ngón làm được nhiều hơn nếu có đúng dụng cụ.” + +Ông nhìn bàn tay Tiến trước, rồi nhìn lên mặt hắn và gật. Đó là cách ông nhận an ủi: không bằng lời thương hại, mà bằng một công việc mình vẫn còn có thể làm. + +*** + +Khánh An được đưa vào phòng cách ly cũ, nhưng lần này cửa không khóa. Bình ngồi ngoài hành lang, chiếc nỏ đặt ngang đùi. Anh không chĩa vào cô, cũng không để nó ngoài tầm tay. + +Vết khâu ở sườn An đã bục một phần trong lúc giữ Trạm Láng. Linh chỉ kịp đưa thuốc sát trùng, băng sạch và dặn nếu sốt phải gọi; phần còn lại An tự làm dưới ngọn đèn vàng yếu. Trước mặt cô là một bát nước theo đúng định mức. Cô chưa uống. + +Bình liếc vào. “Nước không hợp?” + +“Tốt hơn nước của Kha.” + +“Thế sao để nguyên?” + +“Muốn biết giá.” + +“Ở đây chưa ai kịp định giá cô.” + +Khánh An cầm bát lên nhưng vẫn chưa uống. “Câu ấy nguy hiểm hơn một con số.” + +“Vì sao?” + +“Vì người không biết giá có thể cho đi nhiều hơn mức họ giữ nổi. Hoặc đòi lại vào lúc mình không phòng.” + +Bình thôi cười. Anh hiểu cô không chỉ nói về bát nước. Khánh An từng sống trong một hệ thống nơi mọi chuyến xe, viên đạn và mạng người đều được quy ra lợi ích. Ngọc Trục chưa có bảng giá như vậy; điều đó không khiến nơi này vô tư hơn, chỉ khiến món nợ khó nhìn thấy hơn. + +Cô uống hết nửa bát, đặt phần còn lại cạnh cửa. “Cho người ngoài nếu mở cổng.” + +“Cô biết sẽ có người ngoài?” + +“Đêm nào cũng có.” + +Thủy đứng ở cuối hành lang, nghe câu ấy nhưng không bước vào. Khánh An chưa thuộc về Ngọc Trục, cũng không còn hoàn toàn thuộc về Kha. Điều khiến cô khó xếp loại không nằm ở việc đứng phe nào, mà ở chỗ cô đã bắt đầu nghi ngờ mọi hệ thống không cho người bên trong quyền nói dừng. + +*** + +Thủy không ngủ được. Tiếng chuông theo cô từ Láng về, thưa và thấp, có lúc như vọng dưới nền, có lúc rung ngay sau gáy. Bịt tai không làm nó nhỏ hơn. + +Cô mở sổ, viết **Chuông không có hướng**, rồi gạch đi. Câu ấy biến một giới hạn của người nghe thành thuộc tính của tín hiệu. Cô sửa thành **Chưa xác định được hướng**. Sau một lúc, cô viết thêm: **Có thể không phải âm thanh**. + +Ngoài sân có trẻ con khóc. Thủy đứng bật dậy, lần theo tiếng tới cửa. Lần này âm thanh có hướng, phát ra từ một gia đình vừa được chuyển qua khu trú tạm. Đứa trẻ thật, cơn khát thật, người mẹ đang dỗ cũng thật. Thủy dựa vào tường, buồn nôn vì nhận ra mình đã bắt đầu phân loại tiếng người thành những ô: thật, giả, ký ức, Dư Âm. + +Tiến xuất hiện với một cốc nước. “Uống.” + +“Tôi không khát.” + +“Cô đang run.” + +Thủy nhận cốc, chỉ uống một ngụm. “Phúc?” + +“Linh giữ được.” + +“Ông Hòa?” + +“Ba ngón còn mạch.” + +“Khánh An?” + +“Chưa sốt.” + +“Anh nói như đọc bảng trạng thái.” + +“Bảng trạng thái thường bớt làm người ta hoảng.” + +“Không phải lúc nào cũng vậy.” + +Tiến liếc xuống cuốn sổ. “Cô còn nghe?” + +Thủy định nói không. Từ ấy đã lên tới đầu lưỡi nhưng không đi ra. “Tôi không biết.” + +Đó là câu Tiến ghét nhất, và cũng là câu duy nhất cô có. Cô kể về tiếng chuông, về việc không tìm được hướng, rồi ngập ngừng trước phần còn lại. + +“Ở Láng, sau giọng trẻ con từ Đại Hà, tôi nghe một giọng khác.” + +“Của ai?” + +“Của tôi.” + +Tiến không hỏi dồn. Cô biết hắn muốn làm vậy; bàn tay cầm cốc của hắn siết chặt hơn. Nhưng hắn chỉ hỏi: “Cô nhớ câu gì?” + +“Không rõ.” + +“Không rõ hay không muốn nhớ?” + +Thủy nhìn hắn. “Không muốn.” + +Lần đầu cô thừa nhận điều ấy mà không che bằng phương pháp hay nguồn kiểm chứng. Tiến tựa vai vào tường, để khoảng im tồn tại. + +“Anh từng sợ ký ức của mình không?” cô hỏi. + +“Có.” + +“Vì nó sai?” + +“Vì có lúc nó đúng vừa đủ để tôi quên phần còn lại có thể sai.” + +Hắn kể một con đường từng bị chặn trong ký ức nhưng hiện vẫn thông, một người đáng lẽ chết ở tuần đầu lại xuất hiện trong danh sách khác, vụ cháy La Phù đến sớm hơn. Thủy nghe xong mới hỏi: “Vậy khác gì Kha? Anh sống bằng ký ức, hắn sống bằng dữ liệu. Cả hai đều có lợi thế và đều có thể biến lợi thế thành quyền.” + +Tiến không phản bác ngay. “Cô nghĩ chúng tôi giống nhau?” + +“Không hoàn toàn. Anh đau vì những gì anh nhớ. Kha đau vì những gì hắn không kiểm soát được.” + +Ngoài sân, một đứa trẻ lại khóc. Lần này Thủy xác định được hướng ngay. Cô vẫn không thấy nhẹ hơn. + +*** + +Ba giờ sáng, Nam gọi họ tới phòng camera. Hai mươi ba bóng nhiệt nằm sát bức tường ngoài, co vào phần bóng râm hẹp dưới mái. Có người già, bốn đứa trẻ, một thanh niên bị thương ở chân và một người nằm trên cáng. Một phụ nữ gõ chai nhựa rỗng vào cổng; âm thanh nhỏ đến mức micro gần như không bắt được. + +“Không mở lõi,” Bình nói ngay. + +Đó không phải sự tàn nhẫn đơn giản. Hai mươi ba người là hai mươi ba phần nước, nguy cơ bệnh tật, khả năng bị cài người và một dấu vết đủ lớn để những phe khác tìm tới. Ngọc Trục vừa mất máu ở Láng; thuốc và nước đều đang tính theo ngày. + +Nam phóng to hình. Một bé gái khoảng tám tuổi đang nhìn thẳng về phía camera giấu trong khe mái, dù từ dưới đất gần như không thể thấy ống kính. Con bé giơ một tờ giấy. + +**LÊ QUỐC TIẾN** + +Bên dưới là hai chữ **NGỌC TRỤC**. + +Khánh An chống tay vào khung cửa. “Đừng mở. Người tị nạn bình thường không biết tên anh lẫn cổng này.” + +Thủy yêu cầu bật loa. Tiến hỏi ai đưa giấy. Con bé kể về một người đàn ông đeo kính ở gần tuyến tàu trên cao, bảo họ đi về phía tây, tìm kho cổng xanh. Người ấy không có bàn tay trái. + +Ông Hòa bước ra từ khu y tế, cánh tay còn băng. “Hỏi lại chỗ cụt.” + +Con bé đưa tay chỉ sát cổ tay. Ông Hòa chỉ mất hai ngón, nhưng sự giống nhau đủ khiến mọi người nhìn sang ông. Tiến tiếp tục hỏi. Người đàn ông còn nói hắn biết ngày thế giới kết thúc. + +Ngoài cổng, người phụ nữ ngã xuống. Linh nhìn số đo nhiệt trên màn hình rồi nói: “Mất nước nặng. Một giờ nữa có thể không cứu được. Con bé cũng đang tụt.” + +Cô không xin Tiến mở cổng. Chỉ đặt dữ kiện trước mặt hắn. + +Khánh An nói: “Nếu mở, người đưa giấy đã chọn ai được bước tới căn cứ.” + +Thủy đáp: “Nếu không mở, hắn vẫn chọn được ai chết trước cửa.” + +Bình quay sang cô. “Cô muốn mở?” + +“Tôi muốn chúng ta đừng giả rằng có lựa chọn sạch.” + +Tiến nhớ những cánh cổng của ba năm cũ, những lần hắn đã đóng đúng và những lần hắn chỉ biết mình sai khi tiếng gõ bên ngoài ngừng hẳn. Hắn gọi Nam đóng toàn bộ cửa lõi, yêu cầu Bình dựng rào ở sân đệm và mở cổng ngoài vừa đủ một cáng đi qua. + +“Không cho họ vào kho,” hắn nói. “Cách ly, kiểm đồ, phát nước theo số đo. Nếu có người theo, chúng ta còn hai lớp cửa.” + +Khánh An nhìn hắn. “Anh đang đổi quy tắc.” + +“Quy tắc không phải bia mộ.” + +Từng người được đưa qua vạch đỏ. Túi xách để lại ngoài rào; Linh kiểm bệnh, Mai — người phụ nữ từng làm y tá tư nhân trong nhóm — giúp ghi tên. Một thợ lạnh tên Đức giữ chiếc túi đồng hồ áp suất như giữ phần nghề nghiệp cuối cùng. Hạnh, người phụ nữ đã ngất, tỉnh lại sau khi được làm mát. Cậu bé Sơn không rời khỏi tầm mắt cô. + +Bé gái là người cuối cùng bước vào. Nó tên My. Khi đứng trước Tiến, nó đưa tờ giấy bằng cả hai tay. + +Mặt trước là tên hắn. Mặt sau chỉ có một dòng: + +**HOÀNG VĂN HÒA ĐÃ CHẾT Ở TRẠM LÁNG** + +Bên dưới là thời gian **19/07/2028 – 23:41**. + +Ông Hòa đứng cách đó vài mét, mặt nhợt vì thuốc giảm đau, ba ngón tay còn lại vẫn cử động. Tiến hỏi người đưa giấy còn dặn gì. My nghĩ rất lâu rồi nói: “Ông ấy bảo chỉ đưa mặt sau khi ông Hòa còn đứng trước chú.” + +“Còn câu nào nữa?” + +“Người đã chết thì không nên còn sống.” + +Chiếc kéo trong tay Linh chạm vào khay kim loại, phát ra một tiếng keng sắc lạnh. Không ai nhìn về phía âm thanh. Tất cả đều nhìn ông Hòa và tờ giấy cùng ghi một thời điểm đã trôi qua. + +Ngoài sân đệm, hai mươi ba người uống những ngụm nước đầu tiên sau nhiều ngày. Phía đông, vầng Hồng Nhật đang nhô qua các mái kho. Tiến gấp tờ giấy lại, nhưng câu chữ trên đó đã mở ra một điều hắn không thể đóng: có người biết một phương án trong đó ông Hòa đã chết, và biết đủ về hiện tại để chờ đúng lúc ông còn sống mà gửi nó tới. + +Chương 34: Danh Sách Người Chết + +Ông Hòa đọc tên mình ba lần, không phải vì mắt kém mà vì muốn chắc trên tờ giấy thật sự viết: + +**HOÀNG VĂN HÒA ĐÃ CHẾT Ở TRẠM LÁNG** + +**19/07/2028 – 23:41** + +Đúng phút Khóa phía Tây đứng lại. Đúng đêm ông mất hai ngón tay. Đúng lúc ông còn sống. + +Trong sân đệm, những người mới tới uống nước sau hàng rào sắt. Một đứa trẻ ho khan; Mai ghi nhiệt độ từng người lên bìa carton, còn Nam đánh số các túi đồ bị giữ ngoài cổng. Bên trong lõi kho, không ai nhìn thứ gì ngoài tờ giấy. + +“Chữ xấu,” ông Hòa nói. “Nhưng đúng tên.” + +Tiến hỏi từng người đã có mặt ở Láng, từ phía Kha tới Vòng Tròn Vỡ. Khánh An bước vào khi nghe tên mình. Cô nhìn cách ghi lâu hơn nhìn nét chữ. + +“Không giống ngôn ngữ của nhánh Quân,” cô nói. “Họ không viết ‘đã chết’. Họ gọi một người là ‘sai lệch đã được loại bỏ’.” + +“Còn Hậu Ký?” Thủy hỏi. + +“Gần hơn.” + +Khánh An giải thích Hậu Ký chưa bao giờ là một cuốn sổ duy nhất. Nó là các mảnh báo cáo, camera, danh sách mất tích, bản đồ và nhật ký vận hành được sao chép qua nhiều người. Kha giữ một phần, không ai biết phần nào là bản gốc. Trong các bảng tử vong, cấu trúc câu gần giống tờ giấy trước mặt. + +“Vậy dữ liệu sai,” Bình nói. + +Ông Hòa gõ ba ngón tay lên bàn. “Tôi thích loại sai này.” + +Không có tiếng cười, chỉ có vài bờ vai thôi căng hơn trước. + +Tiến bỏ tờ giấy vào túi chống nước và dừng việc hỏi My. Con bé vừa trải qua nhiều ngày nóng, mất nước, lại phải ghi nhớ lời một người lạ; lời kể có thể đúng ở phần cốt lõi nhưng lệch ở chi tiết. Thứ hắn tạm tin không phải toàn bộ nội dung, mà là ý đồ của người dựng cảnh: buộc hắn nhìn một người còn sống cạnh bản ghi cái chết của chính người ấy. + +Người gửi không chỉ biết một phương án cũ. Hắn còn biết phương án ấy đã đi lệch. + +*** + +Đến tám giờ, Hạnh tỉnh lại. Chị ba mươi sáu tuổi, từng bán hàng gần Yên Nghĩa. My không phải con ruột; mẹ con bé chết vì sốc nhiệt trong một khu trọ mất điện, còn Hạnh đưa nó đi từ đó. Nhóm hai mươi ba người hình thành dọc đường: người từ Hà Đông, Thanh Xuân, Hoài Đức, một ông già không nhớ nổi nơi xuất phát, Đức với túi đồng hồ áp suất, Mai với danh sách thuốc, Sơn mười bốn tuổi vẫn đi tìm người mẹ nuôi đã mất dấu. + +Thủy phỏng vấn họ không dùng máy ghi âm. Cô ngồi ngang tầm My, hỏi từ những chi tiết dễ nhớ nhất: tuyến tàu trên cao, cầu thang, mùi nơi gặp, hướng mặt trời. Người đàn ông đeo kính đã gọi đúng tên Hạnh dù hai người chưa từng gặp. Hắn bảo cả nhóm bỏ đường về phía nam vì người trên cáng sẽ chết nếu tiếp tục, rồi chỉ họ tới kho cổng xanh. + +Người trên cáng vẫn sống. + +“Ông ấy bảo cháu chỉ đưa mặt sau khi ông Hòa đứng trước chú Tiến,” My nói. + +Hạnh quay sang. “Sao con không nói từ đầu?” + +“Con quên.” + +Không ai trách. Trẻ con không biết chi tiết nào đáng sợ hơn chi tiết nào. + +Thủy hỏi My có từng biết ông Hòa không. Con bé lắc đầu, rồi nổi giận khi bị hỏi lại: “Cháu không nói dối.” + +“Cô biết,” Thủy nói. + +Cô thực sự không biết lời kể đúng đến đâu. Nhưng cô biết người đưa giấy đã đạo diễn thời điểm. Hắn muốn Tiến thấy một cái tên, một mốc chết và người mang cái tên ấy vẫn thở. + +*** + +Gần trưa, chiếc radio cũ tự bật. Ba nhịp ngắn, một nhịp dài, rồi giọng Kha vọng qua lớp nhiễu. + +“Ngọc Trục.” + +Bình đặt tay lên súng. Tiến ngăn anh chạm vào máy, dùng bộ phát riêng để trả lời. Kha hỏi Khánh An còn sống không, nhưng câu tiếp theo mới làm căn phòng im hẳn: + +“Hoàng Văn Hòa còn sống?” + +Tiến không đáp. Khoảng ngừng ấy đã đủ để Kha hiểu mình vừa chạm đúng chỗ. + +“Anh có danh sách,” Tiến nói. + +“Có.” + +“Hậu Ký?” + +“Có.” + +“Gửi.” + +Kha bật cười rất khẽ. “Mày nghĩ tao gọi để tặng?” + +“Anh gọi vì dữ liệu của anh sai.” + +Hai giây không tiếng. Thế là đủ. Kha không gọi để đe dọa hay tìm Khánh An; thứ đáng tin nhất trong tay hắn vừa thất bại, và hắn cần mắt người khác xác nhận. + +“Có hai người đáng lẽ chết đêm qua,” Kha nói. “Hoàng Văn Hòa. Phúc. Cách nhau bốn phút.” + +Tiến đề nghị đổi hình ảnh trực tiếp lấy phần danh sách. Họ thương lượng đường truyền analog, khung hình, thời lượng và mức che nền như hai người đang mua bán hàng hóa. Khánh An nhìn Tiến bằng đúng ánh mắt cô từng dành cho Kha. + +“Anh cho hắn dữ liệu.” + +“Đổi lấy dữ liệu.” + +“Anh nghĩ hai thứ cân bằng?” + +“Không.” + +“Vẫn đổi?” + +“Ừ.” + +Thủy nhận ra hai người đàn ông khác nhau nhiều ở mục tiêu, nhưng giống nhau ở một phản xạ: khi đứng trước phần tương lai chưa biết, họ sẵn sàng đem thông tin của người khác ra thương lượng. Điều phân biệt họ không phải có làm hay không, mà là ai được phép nói không. + +Ông Hòa phản đối việc quay vì thấy nhục hơn thấy nguy hiểm. Phúc tỉnh đủ để bảo Kha tự tới mà xem. Linh bắt cả hai ngồi yên, rồi dựng tấm bạt xám che toàn bộ cửa, tường và thiết bị. Camera chỉ lấy hai người, bảng thời gian và một khoảng sàn trống. + +**20/07/2028 – 11:42** + +Ông Hòa đặt ba ngón tay còn lại lên đầu gối. Phúc nằm ở giường sau, bàn tay cháy được băng kín. Hình ảnh nhiễu kéo dài chưa đầy một phút, nhưng Kha đã thấy đủ. + +Ba phút sau, gói âm mã hóa tới bộ thu. Nam và Tiến mất mười bảy phút để giải. Trên màn hình hiện một bảng không tiêu đề: + +**EVENT: WESTERN LOCK FAILURE** + +**HOANG VAN HOA — DECEASED — 19/07/2028 23:41** + +**CAUSE: THERMAL CUTTING CASCADE** + +Dòng kế tiếp ghi Phúc chết lúc 23:45 vì đường làm mát vỡ. + +Họ không chỉ cứu hai mạng người. Cả đêm ở Láng đã đi sang một hướng khác. Trong phương án Hậu Ký lưu lại, Khóa phía Tây sụp, hợp kim bị cắt, đường làm mát vỡ và chuỗi nhiệt giết những người đứng gần nhất. Trong hiện tại, Thủy nghe được sai pha, Tiến giữ hệ thống, Kha ổn định nguồn, Khánh An đổi quyết định, Phúc dập khối nhiệt và ông Hòa cắt dây. Sự kiện không sửa một chi tiết; nó rẽ khỏi cả nhánh. + +Danh sách còn một người của Kha đã chết đúng như bản ghi, một người Vòng Tròn Vỡ chưa xác định, rồi tới: + +**VU KHANH AN — MISSING** + +Khánh An nhìn dòng chữ, bàn tay dừng trên miệng bát. “Ít nhất lần này tôi biết mình đang ở đâu.” + +Dòng cuối cùng mang tên Thủy, nhưng không có trạng thái tử vong hay mất tích. + +**TRAN THANH THUY — RECORD UNSTABLE** + +**LAST VERIFIED RECORD: 29/09/2028 – 12:17** + +**NO RECORD AFTER SYNCHRONIZATION WINDOW** + +Tiến đóng cửa sổ. + +“Mở lại,” Thủy nói. + +“Không.” + +“Đó là tên tôi.” + +“Biết.” + +“Anh vừa đổi hình ảnh người sống lấy danh sách người chết. Tới tên tôi thì anh tự quyết tôi được biết bao nhiêu?” + +Tiến không có lý lẽ nào ngoài sợ hãi, nên hắn không bịa ra lý lẽ. “Đúng.” + +Thủy bật cười, không có chút vui nào. “Anh và Kha giống nhau hơn anh nghĩ.” + +Cô rời phòng. Tiến không giữ lại. Khánh An nhìn hắn một lúc rồi nói: “Biết mình đang làm sai không làm hành động ấy bớt sai.” + +“Biết.” + +“Vậy vì sao không dừng?” + +Tiến đọc màn hình đã tối như thể nó còn giữ lại câu trả lời. “Vì có những lúc nỗi sợ tới trước phần người mình muốn trở thành.” + +*** + +Buổi chiều, ông Hòa đặt tờ giấy của My cạnh bảng dữ liệu Kha gửi. Cùng tên, cùng thời gian, cùng một cái chết không xảy ra. + +“Cậu nghĩ người đưa giấy lấy từ Kha?” ông hỏi. + +“Không biết.” + +“Vòng Tròn Vỡ?” + +“Không giống.” + +“Người mất tay là tôi?” + +“Bác không mất cả bàn tay.” + +“Chưa.” + +Từ ấy làm Tiến lạnh sống lưng. Ông Hòa giơ bàn tay còn ba ngón rồi chỉ ba nguồn trên bàn: ký ức của Tiến, dữ liệu Kha giữ và tờ giấy của người lạ. Chúng cùng nói về tương lai nhưng đã bắt đầu mâu thuẫn. + +“Vậy đừng gọi cái nào là tương lai nữa,” ông nói. + +“Gọi là gì?” + +Ông suy nghĩ như khi đặt tên một sơ đồ điện. “Phương án.” + +Một từ kỹ thuật, khô và vừa đủ chính xác. Từ đó về sau, Tiến không còn ghi “tương lai sẽ xảy ra” trong hồ sơ. Hắn ghi “phương án đã quan sát”. + +*** + +Trưa 21 tháng 7, Thủy quay lại phòng dữ liệu. Cô không xin lỗi; Tiến cũng không. Cô yêu cầu mở phần hồ sơ bị khóa. Hắn nói chưa giải được khóa của Kha. Cô kéo ghế ngồi, đặt sổ cạnh bàn phím. + +“Anh có ký ức. Kha có Hậu Ký. Còn tôi có những tiếng nói trong đầu. Đừng bắt tôi sống bằng phần sự thật hai người quyết định cho tôi biết.” + +Đồng hồ chuyển sang **12:17**. + +Thủy cứng người. Tiếng chuông thứ nhất vang lên ở nơi không có hướng. Rồi tiếng thứ hai, thứ ba. Cô giơ tay ngăn Tiến nói và đếm bằng ngón. Mười tiếng trôi qua, mỗi tiếng thấp hơn một chút. Tiếng thứ mười một đến muộn nửa nhịp rồi tắt. + +Căn phòng trở lại với tiếng búa ngoài sân, tiếng Linh mắng Phúc và tiếng nước chảy qua đường ống. Mọi âm thanh đều có nguồn. Chỉ chuỗi vừa rồi là không. + +“Mười một,” Thủy nói. + +Tiến đọc lại dòng **NO RECORD AFTER SYNCHRONIZATION WINDOW**. “Có thể Hậu Ký nghĩ cô chết.” + +“Nếu chết, nó sẽ ghi chết. Khánh An mất tích thì nó ghi mất tích.” + +“Vậy là gì?” + +Thủy đặt đầu ngón tay lên khoảng trống sau tên mình. “Chưa chắc tôi biến mất. Có thể chính dữ liệu mất khả năng nhìn thấy tôi.” + +Ngày 29 tháng 9 còn hơn hai tháng. Nhưng từ đúng 12 giờ 17 phút hôm ấy, họ đã biết mười một phút trống không phải một chỗ thiếu trong hồ sơ. Nó là một giới hạn của chính thứ đang quan sát họ. + +Chương 35: Người Không Có Trong Hậu Ký + +**20/07/2028 — 06:10** + +Ba giờ sau khi màn hình hiện hai chữ **ĐIỂM MÙ**, Thủy không nghe thêm tiếng chuông nào. Khoảng yên ấy không làm cô nhẹ đi; nó giống một câu hỏi đã được nghe rõ nhưng bị người đối diện cố tình bỏ ngỏ. + +Nam tháo bộ ghi âm, tua lại từ đầu. Trong loa chỉ có tiếng quạt trần khô dầu, tiếng trẻ con ngoài Vành Ngoài tranh nhau một viên bi bằng nắp chai và giọng Phúc cằn nhằn vì Linh chưa cho tháo băng. Mười một tiếng chuông không tồn tại trên bất kỳ thiết bị nào. + +Tiến kiểm log lần thứ ba. Hắn chuyển từ bộ nhớ chính sang bộ lưu ngoại vi, rồi đối chiếu đồng hồ cơ treo tường. + +“Không có truy cập ngoài,” hắn nói. + +Thủy ngồi bên cửa sổ, cây bút chưa chạm giấy. “Tôi biết.” + +“Không có tín hiệu từ HN-07 ở tầng ứng dụng.” + +“Anh định loại trừ cho tới khi tôi tự tin mình tưởng tượng ra?” + +“Không.” Tiến đóng cửa sổ log. “Tôi muốn biết thứ gì không để lại dấu.” + +“Có thể vì anh đang tìm dấu ở sai chỗ.” + +Cô chỉ vào cổ mình. Mạch vẫn nhanh dù tiếng chuông đã dừng từ lâu. Tiến nhìn mười một vạch cô kẻ trong sổ, nét nào cũng ngắn hơn chữ viết thường ngày, như thể bàn tay đã cố chạy trước khi âm thanh biến mất. + +“Đúng 12 giờ 17,” hắn nói. “Nhưng chưa phải ngày 29 tháng 9.” + +“Đồng hồ có thể là điều kiện, không phải ngày.” + +“Hoặc hệ thống thử trước.” + +“Hoặc tôi nghe một bản ghi không thuộc hiện tại.” + +Thủy không khoanh giả thuyết nào. Cô gạch một đường ngang dưới cả ba câu và để chúng ngang hàng trên trang. + +Ngoài sân, Ngọc Trục đang đổi hình. Hai mươi ba người mới chia khu ngủ bằng vải bạt. Hạnh dạy trẻ xếp can rỗng thành hàng. Chị Mai nấu một nồi cháo loãng, cho thêm gừng để mùi thức ăn đi xa hơn lượng gạo thật. Người ta cãi về lượt nước, rồi ngồi vá quần áo cho nhau dưới mái tôn. + +Thủy mang máy ghi ra ngoài. Tiến hỏi: “Cô nghe gì?” + +“Không phải Dư Âm.” + +Cô bấm máy, thu tiếng muôi chạm nồi, tiếng một đứa trẻ cười khi viên bi lăn vào dép Bình, tiếng ông Hòa mắng Nam cầm sai đầu kìm. + +“Nếu sau này chỉ còn bản ghi cảnh báo, người ta sẽ nghĩ chúng ta sống bằng báo động,” cô nói. “Tôi muốn giữ cả những âm thanh không cứu ai.” + +Tiến nhìn tờ giấy trong tay cô rồi mới hỏi: “Để làm gì?” + +“Để nhớ thứ chúng ta đang cố cứu.” + +Khánh An gọi họ vào khu cách ly cũ. Cửa không khóa, nhưng cô vẫn chọn căn phòng có hai lối ra. Trên bàn là năm cái tên viết từ trí nhớ, không có bản sao Hậu Ký đi kèm. + +**TRẦN THANH THỦY** +**NGUYỄN HỮU ĐẠT** +**LÊ MINH TÂM** +**PHẠM NGỌC VÂN** +**TRƯƠNG TUẤN KIỆT** + +“Những người Kha từng tách khỏi hồ sơ chung,” Khánh An nói. “Không phải vì họ quan trọng nhất. Vì dữ liệu của họ dừng theo cách không giống chết hay mất tích.” + +Thủy chỉ tên mình. “Mốc?” Khánh An viết bên cạnh: + +**29/09/2028 – 12:17** + +“Những người khác?” Tiến hỏi. + +“Đạt mất dấu gần một tuyến điện lực. Tâm biến mất khỏi log sau một lần mất điện. Vân ngừng xuất hiện trước Hồng Nhật. Kiệt có hồ sơ tới một ngày, rồi từ đó mọi truy vấn trả kết quả khác nhau.” + +“Chết?” + +“Không ghi.” + +“Bị xóa?” + +“Không biết.” Khánh An dựa lưng vào ghế. “Kha gọi thư mục này là thư mục trắng. Không tên, không chỉ mục. Hắn ghét thứ không định giá được.” + +Thủy lật tờ giấy. “Điểm chung không phải mất dữ liệu. Là dữ liệu không giữ được một phiên bản ổn định.” Tiến lấy bút khoanh năm tên. “Càng gần mạng lưới, càng dễ thành Điểm Mù?” + +“Không chắc.” Khánh An chỉ Tâm và Kiệt. “Có người không liên quan nút. Ít nhất theo hồ sơ.” + +“Hay chưa biết liên quan.” + +Thủy gõ đầu bút xuống bàn. “Đừng biến khoảng trống thành bằng chứng cho điều mình muốn.” Tiến dừng. + +Họ lập bảng mới. Không dùng danh xưng **Điểm Mù** như một loại người. Mỗi tên có bốn cột: lần cuối được xác nhận, nguồn xác nhận, điều kiện mạng, người thực sự nhìn thấy. + +Đến tối, chỉ tên Thủy có đủ hai nguồn độc lập. Điều đó không làm cô yên tâm. Nó chỉ chứng minh hiện tại cô vẫn còn được người khác nhìn thấy. Linh bắt Tiến ngủ vì cổ tay hắn run khi cầm cốc. Hắn nằm trên chiếc giường xếp trong phòng làm việc, vẫn mặc áo, giày đặt đúng hướng cửa. Thủy ở bàn ngoài, nghe lại các âm thanh đời thường vừa thu. + +Tiếng muôi. Tiếng trẻ cười. + +Tiếng một người phụ nữ hỏi xin thêm nước nóng. Rồi giọng Tiến lọt vào tai trái cô, rõ đến mức cô quay lại. + +“Thủy.” + +Hắn vẫn ngủ. Hơi thở đều, một tay đặt gần con dao dưới gối. + +“Đừng để tôi bước vào Hoàng Thành.” + +Không có tiếng phát từ máy ghi. Kim âm lượng không nhúc nhích. Thủy đứng giữa bàn và giường, không gọi hắn dậy ngay. Cô xác định hướng. + +Giọng không tới từ Tiến. Không từ tường. + +Không từ đường ống. Nó xuất hiện như một ký ức mang giọng người còn sống. + +Cô mở sổ, ghi đúng từng chữ, rồi thêm: + +**Nguồn không xác định. Tiến hiện tại đang ngủ và chưa từng nói câu này. Không được dùng làm mệnh lệnh.** + +Sau đó Thủy ngồi cạnh cửa cho tới sáng. Không phải để canh Tiến. + +Để bảo đảm khi hắn tỉnh, điều đầu tiên hắn gặp là một người thật có thể kể lại câu nói mà không bắt hắn phải tin ngay. + +Chương 36: Cổng Mở Cho Người Sống + +Người lạ đầu tiên tới Ngọc Trục bằng một chiếc xe đạp không còn phanh trước. Ông già dừng ngoài vạch trắng, đặt hai can nước giếng xuống đường rồi giơ hai tay. Không biết tên Tiến, không xin vào và cũng không kể một câu chuyện đủ bi thảm để đổi lấy lòng thương. + +“Tôi đổi nước lấy pin,” ông nói. + +Bình kiểm một can. Nước đục nhẹ, mùi sắt, có thể lọc. Hai viên pin AA được đưa qua khe. Ông già để lại một can, buộc can còn lại lên xe rồi đi. + +“Ngày mai ông ấy quay lại,” Bình nói. + +“Ừ.” + +“Sau đó người khác.” + +Tiến dõi làn khói bếp mỏng đang bay trên mái kho. “Tin đã ra khỏi cổng.” Ngọc Trục không còn chỉ là nơi ẩn. Nó đã trở thành một địa chỉ. + +Buổi sáng, trẻ con Vành Ngoài chơi trò xây thành bằng nắp chai. Mỗi vòng nắp là một bức tường; viên bi nằm giữa được gọi là “bể nước”. Đứa làm rơi tường phải nhường một ngụm nước giả bằng cát. Người lớn nhìn, không ai cười lâu. Cùng lúc, cổng có một quyết định sai. + +Một người phụ nữ xuất hiện cuối ngõ, quấn khăn kín mặt, dìu một thanh niên bị thương. Mã tay không đúng. Người trực không nhìn rõ khuôn mặt. Nam làm đúng quy tắc mới: không mở bằng giọng, không mở khi không có xác nhận hình ảnh. + +“Lùi khỏi cổng!” cậu nói qua loa. + +Người phụ nữ hét thanh niên mất máu. Tiếng có hướng, camera nhiệt cũng thấy hai cơ thể, nhưng Nam sợ một nhóm khác núp ngoài góc. Cậu chờ Bình từ kho sau chạy tới. Ba phút. + +Thanh niên đổ xuống nền. Khi sân đệm mở, Linh cầm được máu nhưng phải cắt một phần cẳng chân đã hoại nhiệt từ trước. Người phụ nữ ngồi ngoài khu y tế, không khóc, chỉ nhìn Nam mỗi lần cậu đi qua. + +Nam tự xin rời ca. Tiến từ chối ngay. + +“Em làm đúng quy tắc,” Nam nói, giọng khô. + +“Quy tắc thiếu trường hợp.” + +“Nếu là bẫy?” + +“Thì không mở lõi. Nhưng có thể mở sân đệm với khiên và dây.” + +“Anh viết không được mở.” + +“Vậy tôi viết sai.” + +Tiến sửa ngay trước bảng trực: + +**Người bị thương không đủ xác nhận: mở sân đệm y tế nếu có hai người trực, một người giữ lõi và một người kiểm góc. Không mở cổng trong.** + +Nam đọc ba lần. Sai lầm không bị biến thành tội lỗi cá nhân để quy tắc giữ vẻ hoàn hảo. Nhưng việc quy tắc được sửa cũng không làm chân người thanh niên mọc lại. Buổi trưa, cuộc cãi vã về nước nổ ra. Tuấn lấy thêm nửa cốc cho con gái đang sốt. Linh giật lại vì đứa bé chưa tới mức cần tăng định lượng. Bình đẩy Tuấn khỏi bàn phát nước; ba người Vành Ngoài đứng lên theo. + +“Anh có nước,” Tuấn nói với Tiến. + +“Có.” + +“Con tôi khát.” + +“Biết.” + +“Đó là nước của anh à?” + +Không khí dưới mái tôn dừng lại. Tuấn chỉ xuống nền. “Anh đào ra? Anh làm mưa? Dựa vào đâu anh chia?” + +Tiến có thể trả lời bằng lưu lượng và dung tích bể, nhưng câu hỏi trước mặt hắn không nằm ở kỹ thuật. Nó nằm ở quyền quyết định ai được dùng phần nước nào. + +“Chiều nay họp,” hắn nói. + +“Rồi anh vẫn quyết cuối?” + +“Trong tấn công trực tiếp, có. Với nước, không.” + +Bình quay sang. Đây là lần đầu Tiến bỏ một phần quyền trước khi bị ép phải mất nó. Cuộc họp diễn ra bên ngoài lõi, có Linh, chị Mai, Hạnh, Đức, Tuấn, Nam, Bình, Thủy và hai người đại diện nhóm mới. Ba chai nước được đặt trên bàn: uống, y tế, nấu. Mỗi chai có bảng số thật. + +Linh không giữ độc quyền y tế; chị Mai cùng ký. Tuấn không được tự lấy thêm; có quyền yêu cầu đánh giá lại. Người làm nặng có định mức riêng, nhưng phải có người cùng nhóm xác nhận. Sổ nước được treo ngoài, không ghi tên bệnh nhân. Vùng cư trú mới được gọi là **Vành Ngoài**. Cái tên dùng để xác định phạm vi quyền, lối được phép vào và người chịu trách nhiệm, không phải để xếp ai thấp hơn ai. + +Một người phụ nữ nói: “Tên đẹp không làm cổng mở.” Thủy đáp: “Ít nhất nó cho chúng ta một thứ để sửa, thay vì chỉ có ‘người trong’ và ‘người ngoài’.” + +Cuối buổi, họ thống nhất hội đồng nước có nhiệm kỳ bảy ngày. Tiến chỉ giữ quyền ngắt cấp nếu có nhiễm độc được hai nguồn xác nhận. Khi mọi người giải tán, một đứa trẻ mang tới chiếc vòng kim loại nó nhặt trong túi áo cũ của người mới. Vòng tròn bị bẻ mất một đoạn, mặt trong có lớp gốm mỏng. + +“Cháu dùng làm bánh xe,” nó nói. + +Khánh An vừa nhìn đã đứng dậy. “Đừng cầm gần ống.” Quá muộn. + +Khi chiếc vòng tới gần đường nước chạy dưới mái, bề mặt nó rung và phát ra một tiếng kêu rất nhỏ. Không giống thiết bị phát. Giống một vật cộng hưởng với thứ bên dưới. Người mang áo không biết nó ở đó. Chiếc áo được đổi từ một trạm cứu trợ ngoài Hà Đông. + +Tiến đặt vòng vào hộp cách ly. “Vòng Tròn Vỡ?” Khánh An lắc đầu. “Biểu tượng giống. Vật liệu thì cũ hơn.” + +Thủy nhìn trẻ con tiếp tục xây thành bằng nắp chai. Cánh cổng vừa được mở thêm cho người sống, và cùng người sống, những thứ không ai hiểu cũng bắt đầu đi vào. Không thể xây cộng đồng bằng cách giữ mọi nguy cơ ở ngoài. + +Chỉ có thể xây bằng cách biết thứ nào đã vào, ai được quyền xử lý và quy tắc nào phải sửa khi sai. + +Chương 37: Mẹ Không Phải Con Tin + +**20–22/07/2028 — Thanh Hóa** + +Phát hiện căn nhà trọ xong, mẹ Tiến không gọi ngay. Bà chờ tới sáng, đúng lúc người theo dõi đổi ca. + +Trong ba ngày, bà ghi biển số bằng than lên mặt sau một tờ lịch, đánh dấu giờ hai người lạ xuất hiện ở quán nước và nhớ cách một người kéo chân phải. Bác Dũng muốn báo Tiến từ đầu; bà ngăn. + +“Nó sẽ về,” bà nói. + +“Thì càng tốt.” + +“Không. Tốt cho họ.” + +Bà theo người lạ bằng xe đạp, giữ khoảng cách qua hai ngõ, dừng trước chợ giả vờ đổi rau. Căn nhà trọ cách đê bốn cây số, rèm đóng ban ngày, không máy phát. Đêm thứ ba, cả hai rời đi. Bà và bác Dũng mới vào. Không người. + +Có ảnh Tiến ở Nguyễn Trãi, ảnh Bình lái xe, ảnh nhà cũ và một sơ đồ các kiện hàng gửi trước Hồng Nhật. Trên tường là biểu tượng mặt trời đỏ bị một đường ngang cắt qua. Bà không mang mọi thứ. Chỉ chụp bằng chiếc máy cũ, lấy cuốn sổ cháy dở và thay vị trí một cái cốc để nếu họ quay lại sẽ biết có người vào — một việc bác Dũng phản đối. + +“Để làm gì?” + +“Để họ biết mình cũng bị nhìn.” + +Cuộc gọi tới Ngọc Trục lúc 05 giờ 12. Tiến vừa nghe “mẹ tìm được chỗ chúng ở” đã đứng bật khỏi ghế. Hắn hỏi dồn vị trí, người đi cùng, dấu vết, lối rút. Giọng chuyển thành giọng chỉ huy mà hắn không nhận ra. + +Bà cắt ngang: “Con có biết mẹ bao nhiêu tuổi không?” + +“Không liên quan.” + +“Liên quan vì con đang nói như mẹ là đứa trẻ bị lạc.” + +Tiến đi dọc hành lang, không biết mình muốn tới cổng hay bản đồ. “Mẹ có hiểu họ có thể—” + +“Không hiểu cái hệ thống dưới Hà Nội. Hiểu người theo dõi.” + +Ảnh tải qua sóng rơ-le từng phần. Khi biểu tượng mặt trời bị gạch hiện rõ, Khánh An đứng bên cạnh Tiến và đổi sắc mặt. + +“Đây không phải dấu Vòng Tròn Vỡ,” cô nói. “Là ký hiệu một nhánh đã bị xóa khỏi tài liệu Intervention.” + +“Một phe?” Thủy hỏi. + +“Không chắc. Có thể là thủ tục.” + +Trong điện thoại, mẹ Tiến nghe tiếng họ trao đổi. + +“Neo là gì?” bà hỏi. + +Tiến im. + +“Con đừng hỏi mẹ nghe ai. Mẹ ghép được.” Bà nói chậm. “Con dặn mẹ đổi nhà, không bật máy, không nói tên con. Người ta chụp ảnh. Con định về rồi không về. Họ muốn biết kéo mẹ thì con chạy theo hướng nào.” + +“Mẹ không phải—” + +“Con nghe hết.” + +Hắn im. + +“Nếu họ nghĩ bắt mẹ là kéo được con, lỗi không ở mẹ. Nhưng nếu con cứ phản ứng đúng như họ đoán, họ sẽ đúng.” + +Ánh mắt Tiến dừng ở bức ảnh bà đứng trong căn nhà trọ, nhỏ hơn mọi bản đồ hắn đang giữ. + +“Mẹ chuyển chỗ,” hắn nói. + +“Có.” + +“Con gửi người.” + +“Không.” + +“Mẹ—” + +“Mẹ chọn đường. Bác Dũng chọn người. Con chỉ biết điểm đến sau khi mẹ tới.” + +Một phương án phân tán do người chưa từng đọc tài liệu HANOI-07 tự nghĩ ra. Trước khi cúp, bà nói: “Đừng để họ gọi mẹ bằng cái tên làm con quên mẹ là ai.” + +Buổi chiều, một người phụ nữ xuất hiện ở đầu ngõ nhà bác Dũng. Không vũ khí lộ, không cố bắt. Bà ta đặt một chai nước và đứng ngoài tầm ném đá. + +“Con trai bà không cứu thế giới,” bà ta nói. + +Mẹ Tiến đứng sau cửa sắt, tay cầm cán cuốc. “Nó chưa bao giờ nói sẽ cứu.” + +“Nó đang giữ thứ đáng lẽ phải chết.” + +“Vậy nói với nó.” + +“Chúng tôi cần biết bà có kéo được nó khỏi khóa không.” + +Bà nhìn người phụ nữ. “Cô đã có câu trả lời.” + +“Chưa.” + +“Nếu có, cô đã không đứng ngoài cửa.” + +Người phụ nữ cười rất nhẹ. Bà ta để lại một mảnh giấy có biểu tượng mặt trời gạch ngang và câu: + +**ĐỪNG ĐỂ MỘT NGƯỜI GIỮ TẤT CẢ PHƯƠNG ÁN.** + +Việc họ chưa đe dọa mẹ Tiến không khiến họ trở nên vô hại. Trước khi đi, người phụ nữ quay lại khi nghe tiếng một xe chở người bị nạn ngoài đê. Bà ta cùng bác Dũng kéo một đứa trẻ khỏi thùng xe nóng, đưa nước đúng từng ngụm và chỉ cách hạ nhiệt. Sau đó mới rời. + +Mẹ Tiến kể cả chi tiết ấy khi gọi lại. + +“Bà ta giúp người?” Thủy hỏi. + +“Có.” + +“Vẫn theo dõi bác?” + +“Có.” + +Tiến buộc mình giữ một nguyên tắc: đứng phía đối diện chưa đủ để biến một người thành quỷ. Khánh An nhận biểu tượng. “Nhánh Null. Trước đây dùng để làm một người hoặc nút biến mất khỏi lớp quan sát. Hồ sơ bị xóa gần hết.” + +Tiến hỏi: “Vì sao Vòng Tròn Vỡ có ký hiệu tương tự?” + +“Có thể họ lấy giáo lý từ phần còn lại.” + +Thủy ghi **có thể**, không ghi **đúng**. Tối, mẹ Tiến chuyển tới điểm mới mà hắn không biết trước. Chỉ khi bà gửi đúng ba từ mã cũ, Tiến mới mở bản đồ và đánh dấu một vùng rộng, không một căn nhà. + +Hắn muốn phóng bản đồ tới từng con đường. Cuối cùng, Tiến chỉ khoanh một vùng rộng quanh điểm rơ-le rồi đặt bút xuống. Trên màn hình không có dấu nhà, không có tọa độ, chỉ có ba chữ mẹ gửi để báo mình đã tới nơi. + +Chương 38: Kho Hậu Ký + +Kha không đưa Tiến tới một máy chủ. + +Hắn đưa tới một kho lạnh cũ dưới Mễ Trì, nơi các ổ dữ liệu nằm trong hộp kim loại, mỗi hộp có nhãn giấy viết tay và một chìa khóa cơ. Không mạng ngoài, không màn hình tự sáng. Hậu Ký ở đây trông giống hồ sơ một công ty đã phá sản hơn là tương lai của thành phố. + +“Vì sao cho tôi xem?” Tiến hỏi. + +Kha đứng cạnh cửa, vị trí quen thuộc. “Mày đã có đủ mảnh để tự dựng phiên bản tệ hơn.” Khánh An không được vào. Thủy ở điểm trung lập giữ radio, chỉ nghe qua dây analog. Kha muốn cuộc gặp giữa hai người; Tiến yêu cầu ít nhất một nhân chứng bên ngoài và được chấp nhận. + +Hộp đầu tiên mang tên **LÊ QUỐC TIẾN**. Bên trong có những bản ghi không đồng nhất: + +**RETURNED / UNVERIFIED** +**ACCESS COMPATIBILITY: HN-07** +**EXPECTED SURVIVAL LIMIT: 12/09/2028** +**DEATH EVENT: 29/09/2031 – MỄ TRÌ B3** + +Dòng ngày 12/09 được thêm sau, mực in mới hơn. Tiến chạm mép giấy, không chạm chữ. + +“Cái nào có trước?” + +“Ngày chết 2031.” + +“Ngày 12?” + +“Sau khi hiện tại bắt đầu lệch.” + +“Vậy Hậu Ký cập nhật.” + +“Hoặc có nhiều bản được trộn.” + +Kha mở một hộp khác. Trong đó là ba phiên bản cái chết của Tiến: + +- dao của Đỗ Minh Kha; +- ngừng trạng thái thần kinh khi thiết bị quá tải; +- mất tích sau khi Null, không xác. + +Không một tương lai duy nhất. Tiến đọc lại dòng có tên Kha. “Mày muốn biết vì sao tao giết mày không?” Kha hỏi. + +“Có.” + +“Vì theo bản tao đọc trước Hồng Nhật, mày không được phép sống tới Mễ Trì.” + +Tiến quay sang. “Anh tin một câu như vậy?” + +“Ngày đó tao tin kho hơn người.” + +“Anh chưa làm.” + +“Ừ.” + +“Nhưng tôi đã chết.” + +Không khí lạnh của kho không đủ làm câu nói nhẹ đi. Kha mở hồ sơ của chính mình. Trên bìa: + +**ĐỖ MINH KHA – INTERVENTION LOGISTICS ASSET** + +Trong hồ sơ ấy, Kha không được xếp là lãnh đạo mà là **tài sản hậu cần**. + +Bên trong có báo cáo năm 2026 về một vụ cháy hóa chất ở Bắc Ninh. Kha phụ trách đoàn nước và thuốc. Xe đã đầy, nhưng ba cấp ký duyệt đổi lệnh liên tục; đoàn chờ bốn mươi bảy phút ngoài cổng. Khi tới, một đội hiện trường mất sáu người, trong đó có Đỗ Minh Khôi — em trai Kha. + +Tiến không cần hỏi thêm; hồ sơ trước mặt đã nói đủ phần cần thiết. Kha cầm trang giấy bằng hai ngón. “Bộ máy ghi nó là tổn thất chấp nhận được do trì hoãn phối hợp.” + +Hắn tháo chiếc nhẫn đen. Mặt trong không chỉ có hai chữ **M.K.**; một mảnh thẻ y tế cháy sém đã được ép vào lớp kim loại, giữ lại mã của Đỗ Minh Khôi. Chiếc nhẫn không liên quan hôn nhân hay địa vị. Kha đã ép bốn mươi bảy phút ấy vào kim loại để mỗi quyết định chậm đều có một người chết đứng phía sau nó. + +“Đó là lý do anh muốn một người quyết?” + +“Là lý do tao không tin người không chịu trách nhiệm vẫn được quyền chậm.” + +“Rồi anh biến mình thành người không ai làm chậm được.” + +“Đúng.” + +Kha không biến đau thành lời xin hiểu. Hắn cất lại hồ sơ. Một hộp thứ ba mang tên **HOÀNG TÙNG**. Kỹ sư an ninh dữ liệu, người thiết kế cách chia Hậu Ký thành nhiều kho. Tình trạng: chết trong vụ cháy ngày 23/06. + +Không ảnh xác. Chỉ thẻ và một đoạn camera hỏng. + +“Anh tin?” Tiến hỏi. + +“Không còn.” + +Kha cho Tiến xem sơ đồ bảo vệ mới. Ngay sau khi phát hiện không có xác Tùng, hắn đã đổi toàn bộ khóa phần mềm, chuyển hai phần lõi sang kho khác và để lại một kho mồi. Nhưng một đường phục hồi vật lý vẫn nằm trong bo mạch do chính Tùng thiết kế; tháo bo sẽ làm hỏng chuỗi chỉ mục, còn thay toàn bộ cần thiết bị Kha chưa có. + +“Anh để một cửa mà kẻ có thể còn sống biết,” Tiến nói. + +“Để hệ thống còn khởi động khi mạng chết.” Kha chỉ hai công tắc cơ bị niêm phong. “Cửa đó chỉ có điện khi kho bị cô lập hoàn toàn. Tao đặt cảm biến và dữ liệu mồi quanh nó.” + +“Vậy anh đang chờ Tùng thử.” + +“Đang buộc nó phải dùng đúng thứ chỉ nó biết.” + +Kha cho xem lịch truy cập. Trước mỗi thay đổi lớn trong hồ sơ Tiến đều có một mục **QUERY**, nhưng nội dung câu hỏi bị mã hóa. Nghĩa là Hậu Ký không chỉ là tài liệu được gửi tới; có người đã hỏi nó. Thủy nói qua dây: “Chụp siêu dữ liệu, không chỉ kết quả.” + +Kha nhìn loa. “Cô ấy luôn làm cuộc nói chuyện khó hơn.” + +“Đúng.” + +Tiến dùng máy ảnh analog chụp giờ truy vấn, người giữ khóa và bản dữ liệu nào được tạo sau đó. Không được sao chép toàn bộ hồ sơ; Kha không tin Ngọc Trục đủ an toàn. Tiến không thích nhưng chấp nhận vì ít nhất chuỗi lưu được ghi. Ở cuối kho là một hộp không tên. Kha không mở. + +“Gì?” + +“Bản gốc hoặc thứ người ta gọi là bản gốc.” + +“Chìa?” + +“Bốn phần. Một phần ở người đã chết.” + +“Hoàng Tùng.” + +Kha vuốt nhẫn. “Có thể.” Trước khi rời, Tiến quay lại hồ sơ Kha. “Nếu ngày 29 Hậu Ký bảo anh phải giết tôi?” + +Kha không trả lời ngay. + +“Tao sẽ đọc câu hỏi trước.” + +Không phải lời hứa không giết, nhưng là lần đầu hắn thừa nhận kết quả không thể tách khỏi cách người ta hỏi. + +Kho đóng lại. Hai người bước ra Mễ Trì với cùng một điều không ai muốn nhận: tương lai đã viết họ thành kẻ giết và người chết, nhưng bản thảo ấy có nhiều phiên bản và có dấu tay của người đặt câu hỏi. + +Chương 39: Kẻ Giết Tôi + +Sau khi rời Kho Hậu Ký, Tiến nằm nhưng không ngủ được. Mễ Trì theo hắn về Ngọc Trục bằng mùi bê tông nóng. Mỗi khi nhắm mắt, cổ họng lại nhớ vị máu trước khi đầu óc kịp dựng căn phòng. Hắn đặt giày đúng hướng cửa, giấu một thanh lương khô dưới gối rồi phát hiện mình đang làm điều từng làm trong ba năm cũ. + +Thủy thấy thanh lương khô sáng hôm sau. + +“Anh vẫn giấu thức ăn?” + +Tiến cất nó vào ngăn bàn. “Thói quen.” + +“Không. Phản xạ.” + +“Khác gì?” + +“Thói quen có thể sửa vì bất tiện. Phản xạ phải biết nó đang bảo vệ anh khỏi cái gì.” + +Hắn không muốn nói về Mễ Trì. Thủy không ép. Cô đặt bản chụp ba cái chết lên bàn, rời đi lấy hai cốc nước và quay lại như thể họ đang xử lý một tài liệu bình thường. + +“Kha giết anh trong một bản,” cô nói. “Thiết bị giết anh trong một bản. Một bản không có xác.” + +“Nhưng tôi nhớ dao.” + +“Anh nhớ phần còn lại sau khi thứ gì đó đã cắt bốn mươi ba phút.” + +“Chưa biết bị cắt.” + +“Đúng.” + +Thủy không phủ nhận ký ức. Cô chỉ từ chối cho nó đứng một mình. Kha tới Ngọc Trục vào chiều, không vào lõi. Cuộc nói chuyện diễn ra trong sân đệm, giữa hai lớp lưới. Hắn mang một bản giấy khác: cùng sự kiện Mễ Trì, cùng giờ, nhưng tên người cầm dao bị xóa. Dòng ghi chú: + +**BIOLOGICAL DISCONNECT REQUIRED** + +“Anh muốn tôi tin mình tự yêu cầu bị giết?” Tiến hỏi. + +“Tao muốn mày thấy có câu hỏi trước hành động.” + +“Câu nào?” + +“Không có.” + +“Vậy đây chỉ là một cách khác để anh tự tha.” + +Kha đặt giấy xuống. “Nếu muốn tự tha, tao đã không đưa.” Tiến bước sát lưới. Bình ở phía sau chuyển trọng tâm, nhưng không nâng súng. + +“Tôi có nên giết anh bây giờ không?” + +Kha nhìn thẳng. “Nếu mày tin một người phải trả cho việc phiên bản tương lai làm, thì có.” + +“Anh không sợ?” + +“Có.” + +“Vẫn tới?” + +“Vì nếu tao tránh mọi chỗ mày có thể giết, Hậu Ký đã quyết cả đời tao.” + +Câu đó giữ Tiến lại. Thủy đứng giữa hai người, không để phân xử ai đúng mà để buộc cả hai gọi đúng tên điều mình đang làm. “Hai người đang dùng tương lai theo hai cách giống nhau. Tiến dùng ký ức làm bằng chứng kết tội. Kha dùng dữ liệu thiếu làm bằng chứng giảm tội.” + +Kha nói: “Tao chưa xin giảm.” + +“Anh luôn đưa thêm một điều kiện để người nghe không thể gọi anh là kẻ giết đơn giản.” + +“Vì không đơn giản.” + +“Không đơn giản không nghĩa vô tội.” + +Tiến hỏi Kha: “Nếu tôi không giết anh hôm nay, anh coi đó là tin tưởng?” + +“Không. Coi là mày còn phân biệt được hiện tại.” + +Một đoàn trẻ đi qua Vành Ngoài, mang can rỗng tới điểm rửa. Tiếng cười lọt qua lưới. Tiến nhớ lời Thủy: âm thanh không cứu ai nhưng nhắc thứ đang được cứu. Hắn lùi một bước. + +“Anh không bị xét vì việc chưa làm,” Tiến nói. “Nhưng mọi dữ liệu liên quan tới cái chết của tôi phải có bản sao ngoài tay anh.” + +Kha nhướn mày. “Mày ra lệnh?” + +“Đề nghị với điều kiện. Nếu không, từ giờ mọi tuyến của anh tới Ngọc Trục bị kiểm như nguồn đối địch.” + +“Đó là đe dọa.” + +“Đúng.” + +Kha cân giá. “Một phần siêu dữ liệu. Không toàn bộ nội dung.” + +“Thủy giữ chuỗi lưu.” + +“Được.” + +Đó chưa phải hòa giải. Một thỏa thuận vẫn có thể tồn tại giữa hai người biết mình có khả năng giết nhau. Trước khi đi, Kha dừng ở cổng. “Mày chắc tương lai mày nhớ là bản đầu tiên à?” + +Tiến không trả lời. Kha tự nối nốt ý mình: “Nếu đã có nhiều lần đối chiếu, có thể mày không trở về để sửa một tương lai. Có thể mày là kết quả của một lần sửa trước.” + +Hắn rời đi. Tối, Tiến mở hồ sơ ký ức riêng. Trước đây hắn ghi mọi việc bằng giọng chắc chắn: ngày, người, nơi, hậu quả. Lần đầu, hắn thêm một cột: + +**MỨC TIN CẬY** + +Ký ức Kha cầm dao: cao. Lý do Kha giết: chưa biết. + +Bản tương lai đầu tiên: không có bằng chứng. Hắn không xóa câu “Kha giết tôi”. + +Chỉ đặt nó về đúng chỗ: một sự kiện đã xảy ra với hắn, không phải bản án có hiệu lực trước khi người đối diện làm điều đó trong hiện tại. + +Chương 40: Thành Phố Có Chủ Mới + +Hà Nội bắt đầu có chợ trở lại trước khi có chính quyền. + +Dưới bóng cầu cạn Nguyễn Trãi, người ta đổi pin lấy muối, nước lọc lấy kháng sinh, một giờ sửa máy lấy hai bữa cháo. Những món đắt nhất không còn là đồ hộp mà là hạt giống còn nảy, lưới phản nhiệt, ống tưới nhỏ giọt và men giống để trồng nấm trong hầm. Tiền giấy chỉ còn dùng nhóm bếp; nợ được ghi bằng than lên tấm nhôm vì giấy dễ mục trong mồ hôi. + +Một bảng chung treo ở cột cầu ghi những con số chưa ai thích: gần bốn nghìn người đã đăng ký tại các khu phía Tây, số thực có thể cao hơn một phần ba; lượng gạo và lương khô trong các kho được biết chỉ đủ hơn bốn mươi ngày nếu giảm khẩu phần. Những chuyến hàng từ Thanh Hóa và Hòa Bình chưa ổn định. Một góc chợ đã thử trồng rau dền dưới ba lớp lưới, còn Hương gom nước rửa qua bể sỏi để tưới những thùng khoai giống đầu tiên. + +Thủy đi qua chợ với máy ghi âm. Cô không chỉ hỏi ai giữ kho hay bao nhiêu nước. Cô hỏi một bà cụ món gì nhớ nhất, hỏi một đứa trẻ gọi vầng mặt trời đỏ là gì, hỏi người thợ sửa quạt tại sao vẫn giữ biển “bảo hành ba tháng”. + +“Vì người ta cần tin còn có tháng thứ ba,” ông nói. + +Những câu ấy không xuất hiện trong bản đồ quyền lực, nhưng Thủy giữ lại. Bản đồ quyền lực vẫn lớn lên quanh nước, xe, thuốc — và quanh câu hỏi tháng thứ ba sẽ có gì để ăn. + +Kha giữ các tuyến vận tải và ba kho có máy phát. Hổ kiểm soát hai ngã đường phía Tây. Lâm giữ kho thuốc tư nhân. Mạng khu chung cư do Hương tổ chức có hơn bốn trăm người chia ở ba điểm trú, một bếp chung luân phiên và đội chữa cháy. Nhóm Tài mang con dấu của bộ máy cũ. Ngọc Trục có lọc nước, kỹ thuật và tin đồn rằng Tiến biết trước ngày tận thế. + +Cuộc gặp đầu tiên của các nhóm diễn ra ở xưởng sửa xe cũ. Mười một đại diện, mỗi người không quá hai bảo vệ. Kha tới một mình, khiến mọi người khó chịu hơn việc hắn mang quân. Tiến không có Thủy đi kèm. Trước khi hắn rời, cô nói: “Anh phải học nói với người sống mà không có tôi đứng bên giải nghĩa.” + +Xưởng nóng, mùi dầu cũ và cao su. Trên tường vẫn treo bảng giá thay lốp từ một thế giới đã chết. Hổ mở bằng đường. Lâm bằng thuốc. Kha bằng xe. Hương bằng dân số. Tiến đưa con số nước lọc tối đa có thể trao mà không làm Ngọc Trục mất dự phòng. + +“Anh giấu tổng lượng,” Hương nói. + +“Có.” + +“Vậy đàm phán không cân.” + +“Công khai tổng lượng sẽ biến kho thành mục tiêu.” + +“Giữ riêng biến anh thành người quyết ai được uống.” + +Tiến không tìm được câu trả lời nào không để lại phần bẩn. Kha nói: “Mày quan trọng hơn mày giả vờ.” + +Tiến nhìn thẳng hắn. “Anh cũng vậy.” Một bác sĩ hỏi thẳng: “Nghe nói anh biết Hồng Nhật trước khi nó xảy ra.” + +Căn phòng im. Tiến có thể phủ nhận, kéo dài thêm vài ngày. Hắn nghĩ tới đám đông ngoài Ngọc Trục, tới người thanh niên mất chân vì một quy tắc, tới cách bí mật luôn tạo chủ nhân. + +“Có,” hắn nói. + +Hổ đứng. “Bao lâu?” + +“Không nói đầy đủ.” + +“Anh biết Đại Hà?” + +“Biết sẽ có thảm họa.” + +“Và để người ta vào?” + +Tiến nghe lại tiếng cửa cuốn trong ký ức. “Tôi không cảnh báo đủ.” + +“Bao nhiêu người chết vì anh?” + +“Không biết.” + +“Anh cứu ai?” + +“Mẹ tôi. Một số người ở đây. Những người tôi có thể tiếp cận.” + +“Đủ?” + +“Không.” + +Tiến không dùng câu “sẽ chẳng ai tin” làm lá chắn. Điều đó có thể đúng, nhưng không xóa được việc hắn từng chọn chuẩn bị trong bí mật. Kha nói: “Đừng hỏi hắn có thể cứu bao nhiêu. Hỏi ai cho hắn quyền chọn người đáng cứu.” + +Tiến quay sang. Kha đã đặt lưỡi dao vào đúng điểm yếu của hắn, nhưng câu hỏi vẫn đúng. Hương hỏi Kha: “Còn anh? Ai cho anh quyền giữ xe và kho?” + +“Tao mua, lấy và giữ được.” + +“Vậy chỉ khác Tiến ở chỗ anh không giả đạo đức?” + +Kha cười. “Có thể.” Cuộc gặp không tạo một chính quyền. Nó tạo bốn trao đổi nhỏ và một nguyên tắc tạm: nước, thuốc và điện không được chặn trên tuyến đã đăng, nếu có hai nhóm làm chứng. + +Ngoài xưởng, một đoàn xe của Kha tới đúng lúc chở thuốc cho khu Hương. Người dân nhìn thấy. Họ không thấy bốn giờ đàm phán, chỉ thấy xe đen mang thứ cần thiết. Quyền lực được xây từ hình ảnh như thế. + +Tối, hơn bốn mươi người đứng ngoài Ngọc Trục. Không xin vào. Hỏi. + +“Anh biết trước?” + +“Con tôi chết ở Đại Hà.” + +“Bên dưới có gì?” + +“Anh có bao nhiêu nước?” + +Tiến đứng sau cổng. Thủy ở bên nhưng không nói thay. Hắn kể phần có thể công khai: đã biết một đợt nhiệt lớn, không biết cơ chế đầy đủ, đã chuẩn bị kín, đã không cảnh báo đủ rộng. Không kể Hậu Ký, Returned hay Khóa Trung Tâm trước khi có cách chứng minh. + +Một người ném chai nhựa vào cổng. Một người khác chỉ đứng khóc. Không ai tha. + +Nhưng họ nghe được lời từ chính người giữ bí mật, không qua loa của kẻ tấn công. Khi đám đông tan, radio thành phố phát một thông điệp giọng nữ: + +**NGÀY 29 THÁNG 9, KHÓA TRUNG TÂM PHẢI BỊ PHÁ.** + +**NẾU KHÔNG CÓ KHÓA, SẼ KHÔNG CÓ CỔNG.** + +Hương, Hổ, Lâm, Kha và Tiến đều nghe. Thành phố đã có nhiều người tự nhận quyền giữ đường, kho, nước, luật và tương lai. + +Chưa ai thật sự làm chủ Hà Nội. Nhưng từ đêm đó, chẳng ai còn có thể giả vờ rằng thành phố vẫn vô chủ. + +Chương 41: Mười Một Phút Trống + +**20–22/07/2028** + +Thủy dành ba ngày cho khoảng 12 giờ 17 đến 12 giờ 28 mà Hậu Ký không giữ được. Mỗi lần thử đều có lịch, người chứng kiến, nhiệt độ, huyết áp và một máy ghi độc lập. Cô thay vị trí, thời điểm, mức mệt. Nếu nghe thấy gì, cô xác định hướng trước rồi mới chép nội dung. + +Tiến gọi đó là thí nghiệm trên cơ thể. Thủy gọi đó là cách duy nhất để cơ thể mình không bị biến thành lời đồn. + +Buổi chiều ngày thứ hai, cô sửa chiếc máy ghi bên bếp. Tiến ngồi đối diện, dùng kim khâu lại dây đeo đã cháy ở Đại Hà. Hai người gần mười phút không nói về HANOI-07. Tiếng dao chạm thớt, nước sôi và trẻ con giành nhau một nắp chai làm căn phòng giống một nơi người ta sống hơn là một phòng thử nghiệm. + +“Anh còn nhớ dự án sinh viên năm đó không?” Thủy hỏi. + +“Cảm biến ngập hầm.” + +“Anh cãi giảng viên vì họ muốn bỏ dữ liệu lỗi.” + +“Dữ liệu lỗi vẫn cho biết thiết bị hoặc cách đo có vấn đề.” + +“Giờ anh lại muốn bỏ thứ tôi nghe.” + +Tiến thắt nút dây đeo. “Vì lần này dữ liệu có thể quay lại làm hại chính nguồn.” + +“Dữ liệu nào cũng có thể làm người ta chết nếu được đọc như mệnh lệnh.” + +Hắn trả máy cho cô. Trên vỏ vẫn còn miếng dán hình con cá từ thời đại học, một góc đã cháy. Thủy giữ nó như bằng chứng nhỏ rằng đời mình từng có những thứ bình thường hơn tiếng người chết. + +Kha gửi siêu dữ liệu của khoảng trống: mười một lớp đồng loạt ngừng ghi — điện, nước, nhiệt, camera, radio, bệnh viện, giao thông, vệ tinh, vận tải, môi trường và một lớp không tên. Thủy vẽ mười một vòng tròn lên bảng rồi ghi bên cạnh: **giả thuyết, chưa phải kết luận**. + +Mô hình thử không nối mạng. Mười một thiết bị được tắt theo thứ tự ngẫu nhiên để phân biệt phản ứng với âm, rung và kỳ vọng. Đúng 12 giờ 17 không có gì. Đến 12 giờ 23, khi mọi người đã bớt căng, Thủy nghe giọng mình từ phía cửa đá giả lập: + +“Tiến.” + +Âm thanh có vẻ ở bên trái, nhưng rung lại dội từ dưới sàn. + +“Nếu anh nghe thấy… đừng để em vào Hoàng Thành.” + +Thủy mở mắt. Tiến thấy mặt cô đổi màu. + +“Cô nghe gì?” + +“Chưa xác định.” + +“Thủy.” + +Cô tắt máy. “Anh từng đóng hồ sơ có tên tôi mà không hỏi.” + +“Cái này có thể là cảnh báo.” + +“Hoặc mồi.” + +“Cả hai đều đủ để dừng.” + +Tiến kéo dây nguồn. Thủy giữ cổ tay hắn. “Anh lại chọn cách diễn giải khiến mình có quyền quyết.” + +“Còn cô dùng quyền tự quyết để bỏ qua nguy cơ.” + +“Đúng. Ít nhất gọi đúng tên.” + +Họ thỏa thuận tiếp tục thêm mười phút, có hai người chứng kiến và một nút ngắt do Linh giữ. Không ai nghe thêm gì. + +Sai lầm xảy ra sau đó, không phải trong phòng thử. + +Thủy sợ Tiến sẽ giữ câu cảnh báo trong một hồ sơ kín như hắn đã làm với phần dữ liệu ngày 29 tháng 9. Cô viết một bản thông báo ngắn và gửi cho ba điểm lưu trữ độc lập. Trên đầu bản có dòng **NGUỒN CHƯA XÁC ĐỊNH – KHÔNG DÙNG LÀM MỆNH LỆNH**, nhưng ở giữa là câu trích nổi bật: + +**ĐỪNG ĐỂ THỦY VÀO HOÀNG THÀNH.** + +Một trạm radio phía ngoài đọc lại chỉ phần câu trích. Đến chiều, nó đã trở thành: *Người Nghe sẽ làm Hoàng Thành mở.* Rồi thành: *Thủy là điểm kích hoạt.* + +Khi cô đi qua sân đệm cùng Hạnh và My, một nhóm người tự lùi khỏi hàng nước. Người trực cổng phụ giữ họ dưới nắng thêm bảy phút để xin xác nhận xem Thủy có được bước qua hay không. Bảy phút không dài trên đồng hồ; với My đang sốt nhẹ và mất nước, nó đủ khiến con bé khuỵu xuống. + +Linh làm mát My trong phòng y tế. Không có tổn thương lâu dài, nhưng Hạnh ngồi cạnh giường, bàn tay đặt lên trán con bé và không nhìn Thủy. + +“Tôi đã ghi rõ chưa xác định,” Thủy nói, rồi nghe chính mình và dừng lại. + +Hạnh đáp: “Người ở ngoài không đọc chú thích. Họ nghe câu to nhất.” + +Không ai bóp méo lời Thủy trước khi cô tự đặt một câu chưa kiểm chứng vào vị trí dễ bị tách khỏi bối cảnh nhất. Lỗi không nằm ở việc đám đông “không đủ thông minh”. Lỗi nằm ở cách một phóng viên biết rõ sức nặng của tiêu đề vẫn chọn tiêu đề ấy vì sợ bị im tiếng. + +Thủy tháo tờ thông báo khỏi bảng. Cô lên radio chung, đọc đầy đủ nguồn, giới hạn và hậu quả của việc công bố quá sớm. Sau đó cô nói: + +“Câu trích chưa được xác minh. Tôi đã trình bày nó theo cách khiến một giả thuyết trông giống cảnh báo chính thức. Tôi sửa bản ghi và nhận trách nhiệm về phần đó.” + +Lời cải chính không tới được với tất cả mọi người; tin đồn vẫn chạy nhanh hơn phần sửa. Thủy dành cả buổi đi tới từng điểm đã nhận bản, thay trang cũ bằng một phiếu có ba ô lớn: **ĐÃ ĐO**, **ĐÃ SUY RA**, **CHƯA BIẾT**. Cô mang nước tới cho My dù Hạnh có thể tự lấy. Hạnh nhận can, không nói tha thứ. + +Đêm ấy, Thủy nghe lại câu cảnh báo trong điều kiện không thử nghiệm. Lần đầu vẫn là giọng cô: “Đừng để em vào Hoàng Thành.” Sau đó một lớp khác vang lên, cũng từ giọng cô nhưng ghép cứng hơn: “Đừng để tôi mở—” Câu bị cắt. Tiếp theo là một giọng đàn ông không quen: “Muộn rồi.” + +Cô không phát ngay. Cô ghi hướng, thời lượng, tình trạng cơ thể, rồi gọi Tiến, Linh và Nam tới nghe bản máy. Tiến hỏi từng dữ kiện thay vì hỏi nội dung trước. + +Giữa hai đoạn âm thanh đời thường, họ còn tìm thấy một câu bằng giọng Tiến: + +“Thủy, đừng để tôi bước vào Hoàng Thành.” + +Hai mệnh lệnh đối nghịch, cùng dùng giọng của người bị nhắm tới. Thủy nhìn tờ cải chính mới viết, hiểu rằng hệ thống không cần nói dối hoàn toàn; nó chỉ cần đưa một câu đúng giọng vào đúng nỗi sợ, rồi để con người tự biến câu ấy thành quyền. + +Tiến viết dưới bản ghi: + +**Nguồn có khả năng tổng hợp. Không hành động nếu chưa có bằng chứng vật lý. Không phát trích đoạn tách khỏi nguồn gốc và chuỗi lưu.** + +Thủy thêm một dòng: + +**Người thu thập dữ liệu không đứng ngoài hậu quả của cách công bố dữ liệu.** + +Cô không xé bản thông báo cũ. Nó được lưu cạnh bản sửa, cùng thời gian My ngất và tên những điểm đã phát tin. Một hồ sơ chỉ giữ kết luận đúng sẽ khiến người đọc sau tưởng phương pháp chưa từng làm ai bị thương. + +Từ hôm đó, Thủy vẫn nghe. Nhưng trước mỗi nội dung, cô hỏi ba câu: âm thanh đến từ đâu, ai có thể tạo nó và điều gì sẽ xảy ra nếu cô nói ra khi chưa biết hai câu đầu. + +Chương 42: Vòng Tròn Vỡ + +**23/07/2028 — 04:32** + +Vòng Tròn Vỡ tấn công Ngọc Trục mà không nổ một phát súng đầu tiên. Lớp tấn công thứ nhất là nước. Một bể ngoài Vành Ngoài có màng dầu mỏng; đường ống phía bắc bị mở van xả ở điểm không camera. Ngọc Trục mất gần một phần ba khả năng cấp trong một đêm. + +Lớp thứ hai là thông tin. Mọi radio cũ cùng phát: + +**LÊ QUỐC TIẾN BIẾT TRƯỚC HỒNG NHẬT.** +**HẮN TÍCH TRỮ NƯỚC KHI CÁC BẠN VẪN SỐNG BÌNH THƯỜNG.** +**HẮN BIẾT ĐẠI HÀ.** +**HẮN KHÔNG CẢNH BÁO.** + +Mỗi câu có phần thật. Không cần bịa toàn bộ để làm một cộng đồng vỡ. Lớp thứ ba là danh sách: ai được thêm nước, ai ngủ gần lõi, ai từng nói chuyện riêng với Tiến. Danh sách sai ở vài lượng nhưng đúng đủ tên để người ta tin phần còn lại. + +Tuấn đứng trước cổng lõi cùng hơn bảy mươi người. “Anh phải nói tất cả.” Tiến nhìn bể bị phá và đám đông. Nếu mở bí mật dưới nền lúc này, kẻ tấn công thắng bằng việc chọn thời điểm. Nếu im, hắn xác nhận lời buộc tội rằng quyền lực của Ngọc Trục dựa trên giấu giếm. + +Thủy bước lên bục phát nước. + +“Tôi sẽ nói điều đã có bằng chứng,” cô nói. “Tiến biết trước một thảm họa nhiệt. Anh ấy chuẩn bị kín. Anh ấy biết Đại Hà có nguy cơ và không cảnh báo đủ rộng.” + +Tiếng la nổi lên. Cô không bảo vệ hắn bằng lời nói dối. “Các anh có quyền hỏi và giận. Nhưng người phá bể muốn chúng ta dùng hết thời gian vào một người, trong khi nước đang chảy ra.” + +Tuấn hỏi: “Cô đứng về phía ai?” + +“Phía những điều có thể kiểm.” + +Một chai nhựa bay lên. Bình nâng súng; Tiến đẩy nòng xuống. + +Nam ở cổng phụ nghe giọng Bình qua loa: “Mở cho đội sửa.” Mã đúng, giọng đúng, nhưng camera không thấy Bình. Cậu nhớ lần mình đã chậm mở cổng vì bám cứng vào quy tắc cũ, nhớ cách quy trình sau đó được sửa và không mở. Cậu gọi xác nhận bằng dây cơ. Bình thật đang ở lõi. + +Giọng ngoài loa là bản ghi. Lần này Nam không cứng nhắc, cũng không bị giọng quen kéo. Cậu chuyển đội sửa qua sân đệm khác, giữ cổng đóng và báo điểm giả. + +Lớp tấn công thứ tư tới từ dưới đất. HN-07 rung. Marker trong hộp cách ly nóng lên. Khánh An nhìn sơ đồ và nói: “Họ vào nhánh Tây.” + +Tiến chia lực lượng và giữ lại người cho mặt đất, thay vì dồn tất cả xuống hầm. Bình giữ Vành Ngoài. Nam giữ cổng. Linh và chị Mai bảo vệ nước. Khánh An, Thủy và Tiến xuống hầm với hai kỹ thuật viên. Ánh đỏ rò từ khe. Các thiết bị nhiệt cắt được đặt không quanh Khóa phía Tây mà quanh một tuyến điều khiển có thể ép HN-07 mở trạng thái khẩn. + +“Chúng đổi mục tiêu,” Khánh An nói. “Không phá. Buộc anh dùng hệ thống trước đám đông.” + +Giọng Vũ Mạnh Quân vang từ loa. Không méo. + +“Lê Quốc Tiến. Anh đã cứu Khóa phía Tây bằng cách giữ nó. Hôm nay, hãy cho mọi người thấy anh sẽ mở nó khi căn cứ của mình khát.” + +Tiến hỏi: “Ông muốn chứng minh tôi không khác Kha?” + +“Muốn chứng minh khóa luôn tìm người giữ.” + +Một thiết bị đếm ngược. Thủy đo dòng. “Nếu kích, tuyến nước phụ bị khóa, nhưng hầm không sập.” + +Khánh An kiểm điểm thứ hai. “Không. Có một khối đặt gần cột chịu. Người này muốn sập đoạn trên.” Quân im qua loa. + +“Không phải lệnh của ông?” Tiến hỏi. + +“Dừng khối ba,” Quân nói ngay. + +Giọng Lê Hữu Kiên chen vào: “Trên đó là người của hắn.” + +“Có trẻ em,” Quân đáp. “Chúng ta phá khóa, không chôn người.” + +Kiên không còn nhận lệnh từ nhánh của Quân. Hắn kích thủ công, biến bất đồng trong Vòng Tròn Vỡ thành một cuộc đột kích công khai. Khánh An lao về phía dây mồi nhưng còn quá xa. Tiến chỉ có vài giây để chạm giao diện HN-07 và khóa rơ-le. Màn hình hiện vùng nhận tay. + +Đây là cái bẫy. Hắn không chạm. + +“Nam!” Tiến gọi bằng dây cơ. + +Ở trên, Nam cắt nguồn khu phụ theo quy trình do ông Hòa dạy. Dòng trong dây mồi rơi. Khánh An cắt phần còn lại bằng kìm cách điện. Khối không nổ. + +Ngọc Trục tự cứu mà không cần Tiến mở nút. Quân ra lệnh nhánh của mình rút. Kiên chạy về cửa đông nhưng Khánh An đã dự đoán lối ấy từ sơ đồ Trạm Láng. Cô cùng hai người Vành Ngoài chặn hắn ở sân đệm, thu bộ kích và trói tay mà không bắn. + +Trước khi loa tắt, Quân nói: “Kiên không còn thuộc quyền tôi từ đêm Láng. Tôi vẫn để một tế bào ly khai dùng tên Vòng Tròn Vỡ tới được đây. Phần đó là trách nhiệm của tôi.” + +“Ông vẫn phá nước,” Thủy đáp. + +“Đúng.” + +Không tha vì một giới hạn đạo đức. Cũng không đổ toàn bộ tội lên một thuộc cấp vô danh để giữ Quân sạch. + +Khi họ lên mặt đất, đám đông chưa tan. Tiến đứng trước Vành Ngoài và kể thêm: dưới nền có một điểm truy cập liên quan mạng hạ tầng; ngày 29/09 có cửa sổ nguy hiểm; chưa ai biết giữ hay phá an toàn hơn. Hắn không nói mọi chi tiết Hậu Ký, nhưng công khai đủ để hội đồng có quyền tham gia. + +Một số người rời Ngọc Trục ngay trong ngày. Một số ở lại nhưng không còn nhìn Tiến như người cứu. + +Đó là mất mát cần thiết. Kha tới khi trời sáng, mang một bản ảnh mới từ Hậu Ký. Trong phòng đá ngày 29/09, Tiến và Thủy đứng cạnh người thứ ba quay lưng. Trên ảnh có dòng: + +**CENTRAL OBSERVER PRESENT** + +Khánh An không vội gọi đó là một người. Cô đặt ra quy tắc kiểm tra mới: mọi can thiệp nút từ nay phải có ba nguồn — người thao tác, người đo độc lập và một người không thuộc phe sở hữu nút. + +“Cô vừa tạo việc cho mình,” Kha nói. + +“Không.” Khánh An nhìn đại diện Vành Ngoài được mời vào phòng. “Tạo chỗ cho người khác đứng.” + +Ngoài sân, trẻ con nhặt lại những nắp chai bị giẫm vỡ. Một đứa hỏi có xây lại thành không. Hạnh nói: “Có. Nhưng lần này chừa nhiều cổng.” + +Ngọc Trục sống qua cuộc tấn công, nhưng bí mật của Tiến đã rách một mảng; quyền lực của hắn cũng không còn nguyên vẹn. + +Và ở phía dưới, HANOI-07 ghi nhận một điều mà Hậu Ký chưa chắc từng tính: một nút đã được giữ mà không cần một người duy nhất sở hữu nó. + +ARC 6: HOÀNG THÀNH KHÔNG NGỦ + +Chương 43: Bốn Cái Bóng + +**23/07/2028** + +Bức ảnh được đặt giữa bàn trong phòng dữ liệu Ngọc Trục. Kha không có mặt; hắn theo dõi qua đường truyền analog từ một điểm ngoài cổng, màn hình của hắn đặt cuối bàn như một người thứ năm không được phép bước vào. Ảnh ghi thời gian **29/09/2028 – 12:23**. + +Ba người đứng trong một căn phòng đá: Tiến bên trái, Thủy ở giữa, người thứ ba quay lưng. Sau họ là bốn cái bóng. Mỗi người trong phòng hiện tại lập tức chú ý một chi tiết khác nhau. + +Tiến kiểm các cửa và hướng sáng; Thủy giữ mắt ở bóng thứ tư; Khánh An chú ý bàn tay người quay lưng; Kha phóng lớn thiết bị trên tường. + +“Ngón út tay phải thiếu một đốt,” Khánh An nói. + +Kha nghiêng ảnh trên màn hình. “Độ phân giải không đủ.” + +“Đủ để thấy đường viền không liền.” + +Tiến nghĩ tới ông Hòa rồi loại bỏ. Ông mất hai ngón tay trái. Người trong ảnh có bàn tay trái nguyên, tay phải thiếu ngón út. Thủy hỏi Kha: “Ảnh từ đâu?” + +“Kho Hậu Ký.” + +“Bản gốc?” + +“Không.” + +“Chuỗi lưu?” + +“Không còn.” + +“Vậy có thể bị sửa, bị dựng hoặc tái tạo từ mô hình.” + +“Có.” + +Kha trả lời ngắn nhưng không tỏ vẻ bị thẩm vấn. Điều đó cho thấy hắn cũng không tin ảnh tuyệt đối. Tiến lật mặt sau. Dòng chữ viết tay: + +**NGƯỜI THỨ BA KHÔNG ĐƯỢC PHÉP NHỚ.** + +“Chữ ai?” hắn hỏi. + +“Không khớp mẫu nào trong kho.” + +Thủy kéo một tờ giấy trắng, vẽ ba điểm đứng và bốn hướng bóng. “Nếu có người ngoài khung, bóng phải đổ từ mép này. Nhưng bóng thứ tư nằm giữa ba bóng, giống nhiều đường chồng lên.” Khánh An hỏi: “Hình chiếu?” + +“Có thể. Hoặc ảnh không phải camera thông thường.” + +Tiến đặt bức ảnh cạnh sơ đồ ba nguồn họ đã có. “Nếu ba người đại diện cho ba loại dữ liệu, vùng tối ở giữa có thể là phần hệ thống chồng chúng lên nhau.” + +Thủy ghi giả thuyết, thêm bên cạnh hai chữ **chưa kiểm**. “Mới là một khả năng. Chưa có người thứ tư.” + +Ở đầu dây bên kia, chiếc nhẫn của Kha gõ nhẹ lên mặt bàn. “Đừng biến một vệt tối thành người.” Thủy vẫn nhìn màn hình. “Tôi đang làm ngược lại.” + +Bên ngoài, Vành Ngoài Ngọc Trục vẫn sửa hậu quả cuộc tấn công. Nước bị giảm, đường ống phía bắc chưa khôi phục hoàn toàn, và bí mật Tiến biết trước Hồng Nhật đã ra khỏi cổng. Trong kho, họ đang tranh luận về một bức ảnh tương lai; ngoài sân, người ta vẫn phải tính từng cốc nước. + +Nam gõ cửa. + +“Có người ngoài cổng. Một người.” + +“Biết tên tôi?” Tiến hỏi. + +“Không hỏi anh.” Nam nhìn Thủy. “Ông ấy hỏi chị.” + +Camera cho thấy một người đàn ông khoảng bốn mươi tuổi ngồi dựa tường ngoài vùng súng. Áo sơ mi cháy sém ở vai, tai trái quấn băng. Hai tay để trước mặt. Thủy bật loa. “Ông là ai?” + +“Nguyễn Hữu Đạt.” + +Khánh An đứng bật. Tên ấy nằm trong danh sách Điểm Mù. Kha từng nói đã tìm thấy xác ông ở đường sắt vành đai, tai trái bị lấy làm dấu kiểm tra. + +Kha ở đầu dây nói: “Không thể.” Đạt nghe giọng qua loa nhưng không nhìn về màn hình. “Anh tìm được một cái xác.” + +“Tao kiểm tra.” + +“Anh kiểm tra thứ người ta chuẩn bị để anh nhận ra.” + +Tiến hỏi: “Ông muốn gì?” “Nhìn bức ảnh Kha đưa.” + +“Ông biết?” + +“Biết nó tồn tại.” + +“Người thứ ba?” + +Đạt đáp: “Có thể là tôi.” Không khẳng định. Thủy phóng camera vào bàn tay phải. Ngón út còn nguyên. “Trong ảnh ông thiếu ngón.” + +Đạt giơ tay, nhìn như lần đầu nghĩ tới chi tiết ấy. “Hiện tại còn.” Một câu giống từ **chưa** của ông Hòa, nhưng Thủy không cho phép không khí biến nó thành lời tiên tri. + +“Ông có bằng chứng mình là người trong ảnh?” + +“Không. Tôi có hồ sơ vị trí và một điều kiện: người thứ ba phải nằm ngoài Hậu Ký.” + +“Ông bị xóa?” + +Đạt chạm lớp băng sau tai. “Đã từng.” Kha nói: “Mày chết rồi.” “Không có xác của tôi.” + +“Có DNA.” + +“Có hồ sơ DNA của dự án.” + +Chẳng có phép lạ nào ở đây. Có người đã dựng một cái chết bằng dữ liệu sinh trắc mà Observation Initiative nắm. Tiến không mở cổng lõi. Đạt được yêu cầu đặt túi, áo khoác và mọi kim loại vào hộp kiểm tra, sau đó vào sân đệm. Linh xem vết thương ngay tại đó. + +“Vết cắt sau tai,” cô nói. “Không phải mất tai. Nhiễm nhẹ. Mất nước.” + +Đạt ngồi yên khi cô rửa. “Tôi đi ba ngày.” + +“Ông vẫn định nói chuyện ngay?” + +“Có việc gấp.” + +“Cơ thể ông không đồng ý.” + +Linh cho dung dịch từng ngụm, rồi mới để Tiến hỏi qua lưới. “Vì sao tới?” + +“Tìm Duy.” + +Thủy đứng gần hơn. “Anh Duy?” + +“Người gửi file HANOI-07 cho cô.” + +Tên nguồn tin mất tích trước Hồng Nhật. + +“Ông biết anh ấy ở đâu?” + +“Lần cuối: phòng điều khiển phụ dưới khu giao nhận Đại Hà.” + +Phúc từng nói một kỹ thuật viên ở lại tầng dưới. Mảnh marker trong áo anh có thể từ người đó. “Còn sống?” Tiến hỏi. + +Đạt không hứa. “Phòng có bể nước bảo trì. Có đường ngăn nhiệt. Nếu cửa không vỡ và anh ấy không bị thương nặng, có khả năng.” + +“Đã hơn một tháng.” + +“Đúng.” + +Thủy hỏi: “Vì sao cần Duy?” Đạt nhìn bức ảnh trên màn hình trong phòng qua camera đặt sau lưới. “Vì ảnh ấy không phải cửa vào Hoàng Thành. Nó là kết quả của một phép đối chiếu. Duy là người duy nhất còn sống — nếu còn sống — biết rơ-le nào đã tạo nó.” + +Kha nói: “Tao biết kho.” “Anh biết kết quả,” Đạt đáp. “Không biết đường tạo.” + +Câu đánh đúng giới hạn của Kha. Tiến hỏi: “Nếu Duy chết?” “Chúng ta vẫn có thể tìm cửa ngoài. Nhưng sẽ không biết HANOI-07 đang ghi ảnh từ hiện tại, từ phương án hay từ chính phản ứng của các anh.” + +Thủy nhìn bóng thứ tư. Bây giờ họ không chỉ cần biết người trong ảnh là ai. Họ cần biết ảnh đang làm gì với những người đã thấy nó. Đạt uống hết phần nước Linh cho, rồi nói: “Đi Đại Hà khi trời hạ. Không chờ sáng.” + +Tiến quan sát màu da, đếm nhịp nâng hạ của lồng ngực. + +“Ông nghỉ ba giờ.” + +“Không đủ.” + +“Đủ để không thành người thứ hai phải cáng.” + +Đạt định phản đối, nhưng Linh đóng túi y tế. + +“Ở đây, người đang chảy máu không được quyền điều hành thời gian.” + +Kha cười rất nhỏ qua loa. Linh tắt kênh của hắn. + +Chương 44: Người Kỹ Thuật Đại Hà + +**23/07/2028 – 17:20** + +Họ rời Ngọc Trục lúc 17 giờ 20, khi nhiệt mặt đường bắt đầu hạ khỏi mức làm mềm lốp. Đạt đi được, nhưng không ngồi trước. Bình lái xe đầu; Tiến, Thủy, Phúc và một cáng gấp ở xe sau. Linh không đi vì khu y tế còn người bệnh, nhưng cô đưa lịch bù nước, đường và muối, nhắc ba lần rằng tìm được người không đồng nghĩa được phép cho uống tự do. + +Trung tâm thương mại Đại Hà ở Hà Đông hiện ra như một khối bê tông bị bỏ quên trong lò. Biển hiệu bạc, kính vỡ và mùi cháy cũ vẫn giữ trong hành lang. Phúc bước qua cửa giao nhận, mặt mất màu. Bàn tay bỏng quấn băng cứng trước ngực. + +“Anh ở xe,” Tiến nói. + +“Người dưới đó giữ cửa cho chúng tôi.” + +“Anh không chắc.” + +“Càng phải xuống.” + +Tiến không cản Phúc đi, nhưng buộc anh đeo dây đánh dấu và giữ vị trí giữa đội. Nam ở Ngọc Trục theo dõi radio. Cậu không tới vì tiếng cửa cuốn vẫn đủ làm hai bàn tay lạnh. Trước khi đoàn đi, Nam đã đưa Phúc một chiếc còi cơ. + +“Nếu radio mất.” + +Phúc nhận. Không nói cảm ơn, nhưng móc vào áo. Đạt dẫn họ tới một bức tường cuối kho. Ông không gõ mật mã; chỉ dùng cán tua vít nghe độ rỗng qua từng điểm. + +“Đừng để cái gì dưới lòng đất cũng thành nghi lễ,” ông nói. “Tường rỗng có tiếng.” + +Tiến và Bình tháo tấm giả. Phía sau là cầu thang hẹp xuống một tầng không có trong sơ đồ Đại Hà. Nhiệt giảm vài độ nhưng không khí ẩm và thiếu lưu thông. Cuối thang, cửa thép kẹt. Có vết máu cũ ở tay nắm. + +Họ dùng kích cơ. Cửa nhích từng centimet. Mỗi tiếng kim loại kéo làm hơi thở Phúc đứt quãng, nhưng anh vẫn đứng đúng vị trí. Thủy để ý mà không hỏi. + +“Có hướng,” cô nói. + +Phúc gật. Tiếng thật. + +Trong phòng điều khiển, một người nằm cạnh bàn. Cơ thể gầy đến mức cổ áo rộng, da khô, môi nứt. Bình nước bảo trì đã cạn. Quanh người là gói điện giải, đường, muối và các hộp thực phẩm rỗng. Một ống nhỏ dẫn nước ngưng từ hệ thống làm mát xuống chai — đủ giải thích vì sao anh cầm cự được lâu như vậy, nhưng không nói được cơ thể đã tổn hại tới đâu. + +“Anh Duy.” + +Thủy quỳ nhưng không lay. Đạt kiểm mạch cổ. “Rất yếu.” + +Phúc bước tới, rồi khựng khi thấy cửa ngăn nhiệt phía sau được chèn bằng thanh thép. Người này đã ở lại giữ đường thoát thật. Tiến làm theo chỉ dẫn Linh: kiểm đường thở, làm mát chậm, không đổ nước vào miệng người chưa tỉnh. Họ nhỏ dung dịch lên môi, truyền từng lượng qua ống mềm khi phản xạ nuốt xuất hiện. + +Mười phút. Hai mươi. Duy mở mắt, không tập trung. Ánh nhìn trượt qua Tiến, dừng ở Thủy. “File…” + +“Em nhận được,” cô nói. + +Anh thở ra, rồi ho khan. Tiến hỏi: “Anh biết tôi?” Duy không trả lời. Mí mắt khép. + +Đạt kiểm mạch. “Còn.” Không có màn giải thích dài ngay trong căn phòng. Cơ thể đã dùng hết phần tỉnh táo để xác nhận một câu. + +Họ đặt Duy lên cáng. Trước khi rời, Tiến kiểm bàn điều khiển. Nguồn chính chết, nhưng một màn hình nhỏ còn pin dự phòng. Không tự sáng vì họ tới. Duy đã nối nó với bộ thu nhiệt và một timer cơ. + +Trên màn hình là bản đồ Hà Nội với ba điểm được đánh dấu thủ công: Ngọc Trục, Láng, Đại Hà. Điểm thứ tư ở Hoàng Thành bị khoanh bằng bút, không nhấp nháy điện tử. Thủy chụp. Bên cạnh có sổ ghi của Duy, chữ ngày càng run theo thời gian. + +**29/06 – đóng cửa ngăn nhiệt.** + +**30/06 – relay vẫn phát.** + +**02/07 – cắt cảnh báo hàng loạt.** + +**05/07 – tín hiệu từ Hồ Tây.** + +**08/07 – Láng trả lời.** + +**13/07 – ảnh phương án xuất hiện.** + +Duy đã quan sát từ đây nhiều tuần, nhưng không liên lạc được sau khi cắt rơ-le. Trang cuối: + +**Nếu người tên Lê Quốc Tiến tới, không cho HANOI-07 nhận trạng thái trực tiếp.** + +Tiến đọc. + +“Anh ấy biết tôi trước?” + +Đạt đáp: “Biết tên trong log.” “Vì sao không cho hệ thống nhận?” + +“Để Duy nói khi tỉnh.” + +Không lấp khoảng trống bằng phỏng đoán. Phúc đứng trước cửa ngăn nhiệt. Trên kim loại có vết bàn tay cháy, nơi Duy từng giữ cần cơ trong ngày Đại Hà. + +“Anh ấy cứu chúng tôi,” Phúc nói. + +Thủy không nói “đúng” ngay. Cô nhìn sơ đồ, vết chèn và thời gian. “Anh ấy giữ cửa,” cô nói. “Còn bao nhiêu người được cứu, phải đối chiếu.” + +Họ ghi đúng mức của hành động: không hạ thấp, cũng không biến nó thành huyền thoại trước khi có dữ liệu. Trên đường về, Duy sốt và tụt huyết áp. Họ dừng hai lần để làm mát và bù dịch. Chuyến đi mất gần gấp đôi dự tính. + +Ngọc Trục mở sân đệm lúc 01 giờ 12. Linh kiểm rồi quát tất cả ra ngoài. “Không hỏi ít nhất mười hai giờ. Có thể hai mươi bốn.” + +Tiến đặt sổ của Duy vào túi chứng cứ. “Bao giờ tỉnh?” + +“Không biết.” + +“Có nguy cơ?” + +“Rất nhiều.” + +Linh nhìn thẳng hắn. “Đây là người, không phải ổ cứng vừa lấy về.” Tiến gật. Đêm đầu tiên, mục tiêu duy nhất là để Duy còn thở tới sáng. + +Mọi câu trả lời khác phải chờ một cơ thể quyết định còn đủ sức nói hay không. + +Chương 45: Dấu Vết Không Có Xác + +**25/07/2028** + +Duy không tỉnh hoàn toàn trong hai mươi sáu giờ. Anh mở mắt từng khoảng ngắn, uống theo thìa, trả lời bằng gật hoặc lắc rồi lại ngủ. Linh cấm mọi thiết bị ghi âm trong khu y tế vì tiếng hỏi làm nhịp tim anh tăng. Tiến tôn trọng lệnh, dù mỗi giờ chờ là một giờ Kha và các phe khác có thể lần theo. + +Nguyễn Hữu Đạt được giữ tại sân đệm nhưng không còn bị khóa cửa. Bình vẫn theo dõi. Khánh An ngồi đối diện ông, giữa hai người là danh sách Điểm Mù. Thủy đặt trang sổ mình từng viết khi ngủ lên bàn: + +**NGUYỄN HỮU ĐẠT – ĐƯỜNG SẮT VÀNH ĐAI** + +**KHÔNG CÓ XÁC.** + +Đạt đọc lâu. + +“Cô nhớ viết?” + +“Không.” + +“Vậy đừng dùng nó làm bằng chứng.” + +“Ông không thấy lạ?” + +“Lạ. Lạ không đồng nghĩa đúng.” + +Câu trả lời khiến Thủy tin ông hơn một chút. Đạt kể việc xảy ra ở đường sắt. Sau khi rời Observation Initiative, ông bị theo dõi. Một nhóm dùng hồ sơ sinh trắc dự án dựng một xác mang thẻ, áo và mẫu DNA lưu trữ của ông. Vết cắt sau tai là dấu nhận dạng trong ảnh y tế. + +“Kha thấy xác và dừng tìm,” Đạt nói. + +Kha nghe qua đường dây ngoài cổng. “Tao kiểm DNA.” + +“Anh kiểm dữ liệu do cùng hệ thống cung cấp.” + +“Vậy mày biết ai dựng?” + +“Null Protocol.” + +Thủy hỏi: “Phe thứ tư?” Duy lắc đầu. “Không phải phe. Một thủ tục.” + +Đạt vẽ mặt trời bị gạch ngang. Observation Initiative xây nhiều lớp quan sát. Khi quan sát bắt đầu tác động đối tượng, Null Protocol được tạo để cắt vòng phản hồi: làm một người, nút hoặc chuỗi dữ liệu khó bị hệ thống theo dõi và truy vấn. + +“Điểm Mù?” Khánh An hỏi. + +“Điểm Mù có thể tự sinh do dữ liệu mâu thuẫn. Null là cố ý.” + +“Ông bị Null để làm gì?” + +“Để Hậu Ký không cập nhật theo hành động của tôi.” + +Tiến nói: “Vậy ông hành động ngoài tương lai.” Đạt lắc. “Ngoài phần người khác nhìn thấy, không ngoài hậu quả.” + +Không có phép tự do tuyệt đối. Thủy hỏi về người phụ nữ tới Thanh Hóa. “Phạm Ngọc Vân,” Đạt nói. “Bác sĩ thần kinh, từng nghiên cứu đáp ứng với tần số thấp. Cô ấy phụ trách Null ở lớp sinh lý.” + +“Còn sống?” + +“Lần cuối tôi biết.” + +“Thuộc Vòng Tròn Vỡ?” + +“Không.” + +“Intervention?” + +“Không còn.” + +“Muốn gì?” + +“Ngăn HANOI-07 dùng ký ức của Tiến làm khuôn.” + +Câu đó làm Tiến nhớ mọi quyết định hắn đã đưa từ ngày trở về. Mỗi lần dùng ký ức chọn kho, tuyến, người và giờ, hắn thay đổi hiện tại theo một phương án đã sống. + +“Không hành động thì sao?” hắn hỏi. + +“Cũng là hành động,” Đạt đáp. “Không cần vứt bỏ ký ức. Chỉ đừng biến nó thành nguồn duy nhất.” + +Buổi chiều, Duy tỉnh đủ lâu để Linh cho mười phút. Anh ngồi tựa, tay run khi cầm bút. Thủy không hỏi về Hoàng Thành trước. Cô hỏi tên, ngày, nơi và những gì anh chắc mình nhớ. Duy trả lời chậm. + +“HANOI-07 là gì?” Tiến hỏi cuối cùng. + +Duy viết bốn dòng: + +**hạ tầng vật lý** + +**mạng cảm biến** + +**hồ sơ quan sát** + +**lớp đối chiếu** + +“Không ở một máy,” anh nói. Giọng khàn. “Có máy chủ. Không phải toàn bộ.” + +“AI?” Bình hỏi. + +Duy lắc. “Không đủ để gọi AI. Quá nhiều để gọi phần mềm.” Thủy đặt ảnh bốn cái bóng cạnh sơ đồ ba nguồn rồi mới đưa cho Duy. “Chúng tôi nghi vùng tối ở giữa là kết quả hệ thống ép ba loại dữ liệu vào cùng một hình.” + +Duy nhìn chưa đầy mười giây, nhắm mắt rồi gật rất nhẹ. “Đúng hướng. Lớp tổng hợp.” + +Anh ho. Linh định dừng, nhưng Duy giơ tay. “Ảnh… không chụp. Tái dựng.” + +“Phương án?” Thủy hỏi. + +Duy gật. “Một hình ảnh mô phỏng được dựng từ nhiều nguồn, không nhất thiết lấy từ camera tương lai.” “Cửa ngoài Hoàng Thành?” Tiến hỏi. + +Duy chỉ Đạt, rồi chỉ Thủy và Tiến. “Ba nguồn… không thống nhất.” + +“Cửa mở bằng mâu thuẫn?” + +Duy gật rồi sửa cách gọi: “Không chỉ bất đồng lời. Ba nguồn là ba loại dữ liệu khác nhau.” Tiến mang ký ức từ một phương án. Thủy nhận tín hiệu giữa các lớp. Đạt bị đưa ra khỏi Hậu Ký. Ba nguồn không thể bị hệ thống gom dễ dàng. + +“Bóng thứ tư cố làm gì?” Thủy hỏi. + +Duy viết: + +**hợp nhất** + +Rồi anh ngất. Linh đẩy tất cả ra. Mười phút kết thúc ở phút thứ bảy. Nhưng đủ để sửa một hiểu lầm: bức ảnh không chứng minh có một người bí ẩn ngoài khung. Nó chứng minh HANOI-07 có một lớp cố biến nhiều nguồn thành một trạng thái. + +Tiến quay sang Đạt. + +“Vì sao ‘người thứ ba không được phép nhớ’?” + +“Vì nếu tôi biết cùng một bản dự báo như anh, dữ liệu của chúng ta bớt mâu thuẫn.” + +Thủy nói: “Ông phải xác nhận hiện tại, không học thuộc tương lai.” Đạt gật. Không được phép nhớ không phải xóa quá khứ. Là không được nạp cùng một phương án. Kha nói qua loa: “Từ giờ không cho Đạt xem Hậu Ký.” + +Đạt nhìn camera. “Anh đề nghị?” Kha kéo ghế lùi nửa gang. “Đề nghị.” + +Một thay đổi nhỏ trong cách hắn dùng quyền. Đạt đáp: “Được.” + +Tối, Thủy kiểm lại trang sổ “không có xác”. Cô thêm dưới đó: + +**Nguồn chưa xác định. Nội dung khớp hiện tại nhưng không được dùng làm bằng chứng độc lập.** + +Cô không xé, cũng không đóng khung. Thủy gập trang sổ lại, đặt nó giữa tập bằng chứng rồi tiếp tục ghi ngày, giờ và nguồn cho lời khai tiếp theo. + +Chương 46: Người Gửi Tin Nhắn + +**27/07/2028** + +Duy mất thêm hai ngày mới đủ sức ngồi ngoài khu y tế. + +Trong thời gian đó, Tiến đặt chiếc điện thoại cũ vào hộp kim loại. Tin nhắn từ ngày 11 tháng 5 vẫn còn trong ảnh chụp: + +**MÀY KHÔNG PHẢI NGƯỜI DUY NHẤT NHỚ NGÀY ĐÓ.** + +Từ ngày nhận tin nhắn, Tiến luôn coi câu này là bằng chứng có một người khác mang ký ức tương lai. Bây giờ, Duy nói nó không được gửi bởi người. Anh yêu cầu mở sổ rơ-le, không mở HANOI-07. Từ các trang ghi ở Đại Hà và bản log Thủy còn giữ, anh dựng lại đường phát. + +“Không có đầu vào ngoài,” Duy nói. “Thông điệp được tạo từ kho bản ghi.” + +“Của ai?” Tiến hỏi. + +Duy nhìn hắn. “Anh.” Tiến không tin ngay. “Năm nào?” “Bản ghi gắn nhãn 29/09/2028.” + +“Chưa xảy ra.” + +“Với hiện tại.” + +Cơ chế đó không giống việc một tin nhắn đơn giản đi ngược thời gian. Lớp đối chiếu có thể giữ dữ liệu từ nhiều phương án rồi chọn một mảnh để đưa vào rơ-le hiện tại. Thủy hỏi: “Câu đầy đủ?” + +Duy mở đoạn văn bản gốc: + +**CÔ KHÔNG PHẢI NGƯỜI DUY NHẤT NHỚ NGÀY ĐÓ. NHƯNG CÔ LÀ NGƯỜI DUY NHẤT CÒN NGHE ĐƯỢC NÓ.** + +Người nói: Lê Quốc Tiến. Người nhận: Trần Thanh Thủy. HANOI-07 đã cắt chủ ngữ, đổi ngữ cảnh và gửi riêng câu đầu cho Tiến trước khi hắn tới Ngọc Trục. Không nói dối bằng từ. Nói dối bằng phần bị bỏ. + +“Vì sao?” Tiến hỏi. + +“Để anh đi tìm nút,” Duy đáp. “Tin nhắn làm anh tin có người khác biết ngày trở về.” + +“Vậy nó can thiệp.” + +“Đúng.” + +Đạt nói: “Đó là thời điểm Null được kích hoạt lại.” Thủy nhìn Tiến. “Anh nhận tin. Anh vẫn tự chọn đi.” “Nó dự đoán tôi sẽ chọn.” + +“Dự đoán không xóa trách nhiệm.” + +“Khác bao nhiêu với điều khiển?” + +“Đủ để chúng ta còn phải chịu việc mình làm.” + +Câu đó khiến Tiến khó chịu, nhưng cảm giác ấy không phải bằng chứng để bác nó. Duy đưa họ tới rơ-le cũ dưới đường Láng vào tối hôm sau. Họ không tới để mở một nút mới, chỉ để kiểm nơi thông điệp được đóng gói. + +Tủ máy đã bị tháo nhiều phần. Một bộ nhớ cục bộ còn ba thông điệp tự sinh trước Hồng Nhật: + +Gửi Tiến: + +**MÀY KHÔNG PHẢI NGƯỜI DUY NHẤT NHỚ NGÀY ĐÓ.** + +Gửi Kha: + +**TRƯỚC NGÀY 22 PHẢI XONG TUYẾN PHÍA TÂY.** + +Gửi một tài khoản mang tên Phạm Ngọc Vân: + +**LOẠI BỎ SAI LỆCH.** + +Ba câu. Ba người. Ba hướng hành động. Tiến tìm Ngọc Trục. Kha gom tuyến phía Tây. Vân kích hoạt Null. + +“Các phe tưởng mình nhận sự thật riêng,” Thủy nói. + +Duy gật. “Cùng một lớp chọn câu.” Kha nghe qua radio nhưng không tới rơ-le. “Tao nhận lệnh, không nguồn.” “Vẫn làm,” Tiến nói. + +“Như mày.” + +“Đúng.” + +Không nguồn nào vì thế trở nên “sạch” hơn. Duy chuyển sang kiểm siêu dữ liệu. Mỗi thông điệp được trích từ một bản ghi khác thời điểm và khác người nói. Không có chỉ dẫn tổng thể. + +“Có mục tiêu chung?” Bình hỏi. + +“Làm các điều kiện hội tụ,” Duy nói. + +Màn hình rơ-le, dù đã ngắt nguồn ngoài, hiện một dòng nhờ pin nội bộ: + +**CONVERGENCE PROBABILITY: 62%** + +Đạt rút pin. Màn hình tắt bình thường. Không hệ thống siêu nhiên tự sống không điện. Sau lớp vỏ, Duy tìm thấy một nguồn nhiệt điện lấy từ chênh lệch đường ống, đủ duy trì bộ nhớ và màn hình thấp công suất. + +“Quan trọng,” Thủy nói. “Không được để mọi thứ chưa biết biến thành thần.” + +Duy tháo bộ nhớ. “Nếu phá?” + +“Không,” Tiến nói. “Giữ làm bằng chứng.” + +HANOI-07 đã can thiệp. Nhưng con người cũng đã dùng những câu đó để làm việc mình vốn muốn: Tiến muốn chuẩn bị, Kha muốn kiểm soát tuyến, Vân muốn cắt quan sát. Hệ thống không tạo toàn bộ ham muốn. Nó chọn đúng dây để kéo. Trên đường về, Tiến hỏi Thủy: “Ngày 29 tôi sẽ nói câu đầy đủ?” + +“Có thể.” + +“Cô muốn tránh?” + +“Không.” + +“Vì?” + +“Nếu cố tránh chỉ vì đã đọc, câu vẫn quyết chúng ta.” + +Cô nhìn đoạn ghi. “Đến lúc đó, anh nói nếu nó đúng với điều anh nghĩ. Không vì HANOI-07 cần bản ghi.” + +Thủy đặt bản chép tin nhắn vào túi bằng chứng, cạnh bản ghi giọng của người gửi. Hai thứ cùng nói thật, nhưng không còn được phép nói thay một con người. + +Chương 47: Cánh Tay Bị Mất + +**28/07/2028** + +My nhận ra Nguyễn Hữu Đạt khi ông bước ra Vành Ngoài. Con bé đang phân loại nắp chai cùng Nam. Nó đứng sững, làm rơi cả rổ nhựa. + +“Ông ấy.” + +Đạt dừng. “Cháu biết tôi?” + +“Ông đưa giấy.” + +Mọi người quanh sân im. Đạt không đeo kính. Hai tay còn nguyên. Tai trái đang băng. + +My chỉ khuôn mặt rồi chỉ tay trái. “Lúc đó ông có kính. Không có tay.” Thủy quỳ ngang tầm con bé. “Cháu nhìn rõ tay hay chỉ thấy áo trống?” + +“Có một cái móc đen.” + +“Giọng?” + +“Giống.” + +“Vết ở tai?” + +My không nhớ. Đạt không phủ nhận cảm giác của con bé, nhưng cũng không nhận một việc mình không làm. “Có người dùng mặt hoặc giọng giống tôi.” + +Duy kiểm sợi dây vải người đưa giấy từng buộc cho My. Ở mặt trong có dải kim loại mỏng lưu mẫu âm học: phổ giọng, nhịp thở và các điểm nhận diện thanh quản của Đạt. + +“Đủ để máy tổng hợp giọng,” anh nói. + +Bộ phận có nguồn từ thiết bị y tế thần kinh. Đạt nhìn. “Vân.” + +Một gói tin tới radio chiều đó: + +**MUỐN BIẾT AI MANG TAY CỦA ĐẠT, ĐẾN NHÀ MÁY NƯỚC CŨ.** + +Bình nói: “Bẫy.” Tiến đáp: “Đúng.” “Vẫn đi?” + +“Đi vì biết mục tiêu của bẫy là gì: khiến chúng ta tin một người tương lai đã gửi giấy.” + +Họ không đi một nhóm nhỏ như trước. Hội đồng biết vị trí, Bình giữ lối, Khánh An kiểm nhà máy trước, và Thủy mang máy ghi độc lập. + +Trong phòng máy có một cánh tay giả, kính và bộ phát giọng. Không người đóng giả. Không cần thêm một nhân vật mới chỉ để giải thích. Trên tường: + +**ĐỪNG TIN THỨ GIỐNG TƯƠNG LAI CHỈ VÌ NÓ BIẾT MỘT VIỆC CHƯA XẢY RA.** + +Phạm Ngọc Vân bước ra từ lối phụ sau khi Khánh An xác nhận không có người phục kích. Bà khoảng bốn mươi, tóc cắt ngắn, chân trái hơi khập khiễng nhưng chưa tới mức bản ghi tương lai từng mô tả. Đạt nhìn bà. “Cô dùng trẻ con.” + +“Dùng đoàn người.” + +“Có trẻ con.” + +“Có.” + +Thủy hỏi: “Nếu My chết trên đường?” Vân không né. “Tôi chịu trách nhiệm, nhưng trách nhiệm không làm con bé sống lại.” + +“Bà vẫn làm.” + +“Đúng.” + +Tùng không xin tha cũng không tự nhận mình là người cứu ai. Tiến hỏi: “Vì sao dựng người mất tay?” “Để kiểm tra phản ứng khi một hình ảnh tương lai được đặt cạnh bằng chứng hiện tại.” + +“Ông Hòa sống và tờ giấy nói ông chết.” + +“Đúng.” + +“Bà muốn chúng tôi hiểu Hậu Ký sai?” + +“Muốn xem các anh có tự hiểu hay sẽ lập tức đi tìm một tương lai giải thích.” + +Thủy nói: “Bà biến người thành thí nghiệm để chứng minh không nên biến người thành dữ liệu.” Vân nhìn cô. “Đó là mâu thuẫn của Null.” + +Không tô đẹp. Đạt chỉ cánh tay giả. “Vì sao lấy hồ sơ của tôi?” “Anh đã bị xóa. Kha tin anh chết. Dùng anh cho phép kiểm tra cả Kha.” + +Kha nghe qua radio, giọng thấp. “Bà kiểm tra được gì?” + +“Anh tin xác khi xác phù hợp hồ sơ.” + +“Bà làm giả tốt.” + +“Anh cần một lời bào chữa dễ hơn.” + +Tiến cắt cuộc đấu. “Cửa ngoài Hoàng Thành.” Vân nhìn hắn. “Anh muốn mở.” “Muốn hiểu.” + +“Không giống nhau?” + +“Có.” + +“Chưa chắc.” + +Bà đặt ba tập hồ sơ lên bàn: Duy, Đạt, Vân. Không giao toàn bộ. “Chúng tôi là lớp hiện đại cuối cùng nối vào một hiện tượng hạ tầng cũ hơn dự án. Không ai ‘xây long mạch’. Người xưa ghi nước, nền và rung bằng ngôn ngữ của họ. Người Pháp đo bằng công trình. Các nhóm sau thêm cảm biến.” + +“Cái bóng thứ tư?” + +“Không biết.” + +Bà nói thẳng rằng việc xuất hiện trong hồ sơ không biến ai thành người cầm đáp án. “Người thứ ba?” + +“Đạt phù hợp điều kiện.” + +“Tin nhắn?” + +“Duy vừa giải.” + +“Ngày 29?” + +“Ba lựa chọn của hệ thống chưa phải ba lựa chọn duy nhất của con người.” + +Tiến quay sang bà. “Bà muốn Null.” + +“Tôi muốn hệ thống không thể dùng một người làm chuẩn.” + +“Giá?” + +“Có thể mất dữ liệu cần để giữ hạ tầng.” + +“Vậy bà không chắc.” + +“Không.” + +Câu trả lời làm bà nguy hiểm hơn và đáng tin hơn cùng lúc. My không gặp Vân. Thủy không cho người lớn dùng con bé thêm lần nữa. + +Trở về, cô ngồi cạnh My, đưa ảnh Đạt hiện tại. + +“Người cháu gặp có thể dùng mặt và giọng ông ấy.” + +“Vậy cháu nhớ sai?” + +“Không. Cháu nhớ điều cháu thấy. Chỉ có điều mình hiểu về nó thay đổi.” + +My nhìn tay Đạt trong ảnh. “Ông ấy sẽ mất tay không?” Thủy đáp: “Chưa ai biết.” + +My nhìn ảnh Đạt hiện tại, rồi lấy bút vẽ thêm một bàn tay đủ năm ngón lên tờ giấy riêng. Con bé đặt hai tờ cạnh nhau và không hỏi người lớn phải chọn tờ nào. + +Chương 48: Anh Duy + +**29/07/2028** + +Duy rời giường vào ngày thứ năm sau khi được cứu. Anh chỉ đi từ khu y tế tới bàn họp, có Linh đi sát và ghế đặt sẵn giữa đường. Cơ thể chưa hồi phục, giọng vẫn khàn, tay run khi giữ bút. Việc anh biết một hệ thống không làm cơ bắp mọc lại nhanh hơn. + +Phạm Ngọc Vân không về Ngọc Trục. Cuộc họp diễn ra tại nhà máy nước cũ, nơi không có điểm truy cập hoạt động. Duy được chở bằng xe có đệm, nghỉ hai lần. + +“Vì sao không nói ở kho?” Bình hỏi. + +Vân đáp: “Ngọc Trục có nhiều cảm biến.” “Kha?” + +“Không chỉ Kha.” + +Tiến hỏi: “HN-07 quan sát mạnh nhất tại điểm truy cập?” “Đúng. Ngọc Trục không phải điểm truy cập hoàn chỉnh trước ngày anh kích hoạt. Nó là một khóa vật lý ngủ.” + +“Vì sao tôi mở?” + +Duy trả lời, chậm: “Trạng thái thần kinh… khớp bản ghi.” + +“2031?” + +Duy nhìn sang Vân trước khi trả lời. “Có một chuỗi khớp với dữ liệu gắn nhãn 2031, nhưng nhãn không chứng minh nguồn. Tôi chỉ dám nói: có khả năng.” + +Anh đẩy bản log sang giữa bàn để mọi người cùng nhìn. Duy không dùng uy tín của người từng vận hành rơ-le để biến một nhãn dữ liệu thành sự thật. Duy mở thêm một hồ sơ cũ mang mã **BK23-EVAC**. Hai dòng định danh nằm cạnh nhau: **LQT** và **TTT**. + +“Ngày 16 tháng 5 không phải lời tiên tri,” anh nói. “Đó là hạn cuối của một cửa sổ hiệu chỉnh. HN-07 đang đối chiếu dấu sinh trắc của anh với mốc năm 2023 để khóa đúng chủ thể. Dữ liệu của Thủy nằm cùng bộ nghiên cứu và có phản ứng bất thường với dải tần thử nghiệm.” + +Vân đặt lên bàn một quy tắc an toàn do nhóm bà viết năm 2026: + +**TÁCH ỨNG VIÊN LISTENER KHỎI VÙNG HIỆU CHỈNH CHO TỚI KHI KHÓA CHỦ THỂ HOÀN TẤT.** + +“Dòng cấm Thủy vào nút 07 trước ngày 16 tháng 5 được hệ thống sinh từ quy tắc này,” Vân nói. “Không có một người bí mật nào ngồi gõ riêng cho Tiến. Nếu cô vào sớm, phản ứng thần kinh của hai người có thể bị dùng như hai tham chiếu chồng nhau. Khi đó hệ thống có thể nhận sai người nhận lớp ký ức hoặc làm hỏng cả dấu Listener.” + +Thủy hỏi: “Còn những giấc mơ?” Duy mở bộ đệm rơ-le. Ba bản chép giọng nói của cô nằm cạnh những mảnh cảm giác không hoàn chỉnh: kính phủ hơi nước, tiếng trẻ em, mùi bùn Hồ Tây, hành lang quá nóng. + +“Gói dữ liệu cô mở đã đánh thức trình đồng bộ cũ của dự án năm 2023,” anh nói. “Một ít mảnh từ lớp phản hồi của Tiến bị ghi nhầm vào bộ đệm mang mã của cô. Cô không nhận được chuỗi ký ức hay sự kiện hoàn chỉnh. Não cô ghép các mảnh cảm giác thành giấc mơ.” + +“Vậy nhãn Returned không có nghĩa tôi đã quay về bằng thân xác.” + +“Không.” Duy đáp dứt khoát hơn. “Cô là người có dấu sinh lý đủ nhạy để phản ứng với dữ liệu rò và cộng hưởng sau đó. Hai việc khác nhau.” + +Anh mở phổ giọng của câu **đừng để em vào Hoàng Thành**. Đường âm được ghép từ hai mươi ba mảnh phát âm trong bộ đệm BK23; không tồn tại bản thu liên tục nào của Thủy nói trọn câu ấy. Câu đối nghịch bằng giọng Tiến cũng được dựng theo cách tương tự. Thủy lần mắt theo từng đường cắt. “Tôi đã phát một câu tổng hợp như thể nó có thể là lời của tôi trong tương lai.” + +“Cô ghi chưa xác định,” Duy nói. + +“Nhưng tôi đặt câu trích to hơn giới hạn. Người nghe nhận được mệnh lệnh trước khi nhận được nguồn gốc và chuỗi lưu.” + +Cô ghi nguồn, giờ, giới hạn và cả hậu quả My đã chịu vì bản thông báo ấy. Lời giải không làm những giấc mơ bớt đáng sợ, nhưng lấy khỏi chúng quyền biến cô thành một người trọng sinh thứ hai — và không lấy khỏi Thủy trách nhiệm về cách cô từng công bố điều chưa biết. + +Duy mở tệp bản đồ. Anh không nói cổ nhân xây hệ thống hiện đại. Các lớp được phân biệt: + +- ghi chép thủy văn và nền móng cũ; +- đường thoát nước và hầm kỹ thuật thời Pháp; +- cải tạo sau chiến tranh; +- cảm biến và rơ-le của Observation Initiative. + +“Mỗi thời đại gặp cùng một vùng bất thường,” anh nói. “Đặt tên khác. Không chắc là cùng cách hiểu.” + +Vân đọc: long mạch, địa khí, dòng nước, cộng hưởng nền. Thủy ghi, không nối chúng thành một chân lý duy nhất. + +“Cửa ngoài Hoàng Thành?” Tiến hỏi. + +Duy chồng bản đồ công khai với ba mốc ẩn trong file raw_patch_0509. Các mốc không tạo tam giác hoàn hảo. Chúng là điểm tham chiếu cao độ và áp lực. Vị trí tiếp cận thay đổi theo mực nước ngầm, lún và đường hầm nào còn mở. + +“Hiện ở đây,” Duy chỉ một đoạn lệch gần tám mươi mét so với sơ đồ Pháp. + +“Bốn phút mỗi ngày?” Đạt hỏi. + +“Khi ba tuyến cân bằng. Khoảng 02:17, nhưng không phải ngày nào.” + +Duy phải dừng uống nước. Thủy hỏi câu anh né từ Đại Hà: “Vì sao anh ở lại?” “Cửa ngăn nhiệt.” + +“Không chỉ.” + +Duy nhìn cô. “Rơ-le.” Anh đã cắt một kênh phát cảnh báo hàng loạt. Nếu để, HANOI-07 có thể tiếp tục gửi thông tin tới điện thoại và màn hình, kéo nhiều người hoảng loạn về các nút hoặc lối ngầm. + +“Lúc anh cắt kênh, anh nghĩ mình đang cứu người hay giữ hệ thống?” Thủy hỏi. + +Duy nhìn xuống bàn tay run. “Lúc đó tôi nghĩ hai việc là một. Sau Đại Hà thì tôi không còn chắc.” + +“Có người chết vì anh cắt?” + +“Có thể.” + +“Có người sống?” + +“Có.” + +“Anh có tính?” + +Duy nhìn bàn tay run. “Không tính được.” Một quyết định không biến thành đúng chỉ vì người đưa ra đau khổ. + +Thủy không tha thứ bằng lời. Cô nói: “Anh viết lại đầy đủ. Ai ra lệnh, anh biết gì lúc đó, điều gì xảy ra sau. Không để câu ‘giữ cửa’ thành phiên bản duy nhất.” Duy gật. + +Tiến rà lại bản đồ cửa ngoài. “Ai vào?” + +“Ba nguồn khác loại,” Duy nói. “Anh, Thủy, Đạt.” + +“Vân?” + +“Đứng ngoài trường, giữ Null.” + +“Kha?” + +“Không.” + +Kha nghe qua đường dây, phản đối ngay. “Cửa không thuộc riêng ba người.” + +“Đúng,” Duy nói. “Nhưng điều kiện vật lý không bỏ phiếu.” + +“Anh ta có thể giữ vòng ngoài,” Tiến nói. + +Kha im. Được tham gia nhưng không chạm điều kiện. Vân nhìn bức ảnh. “Tôi không biết bóng thứ tư là gì.” + +Duy bổ sung: “Lớp tổng hợp là giả thuyết. Phải kiểm khi vào.” Không lời giải cuối trước bằng chứng. + +Cuộc họp kết thúc sớm vì Duy sốt trở lại. Linh bắt anh nằm trên xe. Trước khi đi, Duy gọi Thủy. “Xin lỗi vì file.” + +“File không kéo tôi vào,” cô nói. “Nó cho tôi biết đã có người sửa dữ liệu.” + +“Cô có thể bỏ.” + +“Anh cũng có thể rời rơ-le.” + +Duy im. + +“Chúng ta đều chọn,” Thủy nói. “Điều cần làm không phải gọi lựa chọn là tai nạn. Là ghi đủ để người sau biết giá.” + +Duy gật. Lần đầu, anh Duy không còn là “người kỹ thuật Đại Hà” hay nguồn tin vô danh. + +Trong hồ sơ mới, Thủy gạch mục **chức năng** và viết tên anh: **Anh Duy**. Bên dưới, cô để ba cột: việc đã làm, hậu quả đã biết và phần chưa xác định. + +Chương 49: Biểu Tượng Bị Gạch + +**30/07/2028** + +Phạm Ngọc Vân vẽ bốn biểu tượng lên nền xi măng nhà máy nước. Một mặt trời đỏ nguyên. + +Một con mắt mở. Một bàn tay đặt trên vòng tròn. + +Một mặt trời bị gạch ngang. + +“Đừng gọi là bốn phe,” bà nói. “Đây là bốn chức năng trong tài liệu dự án.” + +Mặt trời đỏ đánh dấu nút hoạt động. Con mắt là quan sát. Bàn tay là can thiệp. Dấu gạch là giảm hoặc cắt khả năng quan sát. Thủy đặt bên cạnh biểu tượng Vòng Tròn Vỡ: một vòng tròn mất một mảnh. + +“Khác nhau.” + +“Đúng,” Vân nói. “Vòng Tròn Vỡ lấy một phần tài liệu Null rồi biến thành giáo lý. Họ tin phá cấu trúc vật lý là cách duy nhất thoát vòng phản hồi.” + +Tiến hỏi: “Có thể đúng không?” “Có thể đúng trong một số nút. Có thể giết người nếu áp dụng toàn mạng.” + +Không câu trả lời giúp họ thoát phải lựa chọn. Vân giao ba hồ sơ dưới dạng bản sao, không bản gốc. Tên bà, Đạt và Duy. Mỗi người từng thuộc một lớp khác: + +- Đạt kiểm tra dữ liệu thực địa; +- Duy vận hành rơ-le và cảm biến; +- Vân phụ trách tác động thần kinh của cộng hưởng. + +HANOI-07 chưa bao giờ là công trình của một người duy nhất. + +“Observation Initiative còn ai?” Tiến hỏi. + +“Rải rác. Một số theo Kha. Một số thành Vòng Tròn Vỡ. Một số giữ hồ sơ cũ. Một số chỉ muốn sống.” + +“Bà?” + +“Null.” + +“Đó vẫn là chức năng.” + +Vân nhìn hắn. “Đúng. Tôi cũng chưa thoát.” Thủy hỏi: “Returned là chức năng do dự án tạo?” “Không. Là trạng thái dự án phát hiện sau khi một số bản ghi không khớp hiện tại.” + +“Có bao nhiêu người như Tiến?” + +“Không ai khác có chuỗi ký ức liền ba năm được xác nhận.” + +Tin nhắn ngày 11 tháng 5 không còn là bằng chứng về một người trọng sinh thứ hai. + +“Thủy?” Tiến hỏi. + +“Listener không phải siêu năng lực,” Vân nói. “Não cô ấy phản ứng với tín hiệu và ký ức theo cách chúng tôi chưa đo đủ. Đừng để cái tên chạy xa hơn dữ liệu.” + +Thủy ghi nguyên câu. Kha tới nhà máy nước khi cuộc họp gần kết thúc. Hắn không kéo đội đông, chỉ Khánh An và một lái xe. Đứng ở cửa, gần lối thoát. + +“Bác sĩ,” hắn chào Vân. + +“Anh vẫn giữ nhẫn.” + +“Bà vẫn dùng người làm phép thử.” + +Hai người không mất thời gian giới thiệu. Kha cúi xuống hồ sơ. “Ngày 29, bà muốn Null toàn mạng?” “Không.” + +“Bà từng muốn.” + +“Dữ liệu đã đổi.” + +“Hay bà đổi?” + +“Cả hai.” + +Kha nói: “Null dự báo có thể làm mất cảnh báo cần giữ hạ tầng.” “Converge có thể biến một phương án thành mệnh lệnh.” + +“Preserve thì giữ vòng phản hồi.” + +Ba từ chưa hiện trên giao diện, nhưng ba triết lý đã có. Tiến hỏi Vân: “Bà muốn gì để giúp mở cửa ngoài?” “Mang ra bản ghi 29/09/2031.” + +Không khí thay đổi. + +“Có chắc ở đó?” + +“Có chỉ mục trong hồ sơ cũ, không biết nội dung.” + +“Vì sao cần?” + +“Xác định cái chết của anh là hậu quả, điều kiện ghi trạng thái hay một phương án bị dựng.” + +Kha vuốt nhẫn. “Có tên tao?” + +“Có thể.” + +“Bà đã xem?” + +“Không.” + +Thủy nhìn Vân. “Bà đang dùng nỗi sợ của cả hai để kéo họ vào.” “Đúng.” + +“Khác HANOI-07?” + +“Khác ở chỗ tôi nói rõ.” + +Không đủ để vô tội. Nhưng đủ để đàm phán. Tiến đặt điều kiện: + +- không ai được giữ bản gốc một mình; +- mọi vật lấy ra có bản ghi chuỗi lưu; +- Kha không vào vòng điều kiện ba nguồn; +- Vân không kích Null ngoài mức đã thống nhất; +- nếu Duy hoặc Linh nói dừng vì sức khỏe, dừng. + +Kha cười. “Mày định mang hội đồng vào một cái hầm?” “Định mang giới hạn.” + +“Chậm.” + +“Biết.” + +Khánh An nhìn Kha. “Chậm hơn một người quyết sai.” Kha không phản bác. + +Đêm, trước khi rời, Vân đưa Tiến một trang ghi: + +**ANCHOR CONDITION – chưa xác định.** + +Bên cạnh, tên mẹ hắn bị gạch. + +“Bà gạch?” hắn hỏi. + +“Không. Người ghi sau đã gạch.” + +“Vì?” + +“Có lẽ họ nhận ra con người không phải thiết bị.” + +Đó chưa phải lời giải hoàn chỉnh, chỉ là bằng chứng từng có người trong dự án phản đối cách gọi. Tiến gấp trang. Hắn không thấy nhẹ hơn. + +Tiến gấp trang có chữ **NEO**, đặt nó dưới bản ghi cuộc gọi với mẹ. Một tờ giấy đặt tên bà; tờ còn lại chỉ giữ giọng bà nhắc hắn ăn đúng bữa. + +Chương 50: Thành Phố Bên Dưới + +**31/07/2028 – 02:17** + +Cửa ngoài Hoàng Thành mở lúc 02 giờ 17 phút, không bằng ánh sáng hay một tiếng lệnh. Nước đọng trong đường hầm thoát chậm xuống, để lộ bậc đá nằm dưới lớp bùn. Duy theo dõi ba đồng hồ áp lực độc lập. Khi các kim cùng đi vào dải hẹp, Đạt ra hiệu. + +“Bốn phút.” + +Tiến xuống trước. Dây an toàn nối vào đai, đầu kia do Bình và Khánh An giữ. Thủy theo sau, rồi Đạt. Vân đứng ngoài trường đánh dấu với thiết bị Null ở trạng thái chờ. Duy vận hành bảng cơ. Kha giữ vòng ngoài, không nhìn thấy phòng trong. Cầu thang dẫn qua các lớp kiến trúc không thuộc cùng một thời: gạch vồ cũ, bê tông Pháp, đường ống thép, cảm biến bọc mới. Mỗi thế hệ đã chạm nơi này bằng công cụ và ngôn ngữ của mình. + +Thủy chụp chữ Hán Nôm trên tường, đánh số, không đọc. “Cần người chuyên.” Tiến đáp: “Tốt.” “Anh vui vì tôi không biết?” + +“Vì ít nhất có một thứ không tự giải.” + +Hành lang có các rãnh nước với nắp chạm hình rồng. Đạt không gọi là long mạch. Ông đo độ dốc, nghe dòng và nói: “Ký hiệu đánh hướng dòng. Ý nghĩa khác phải nhờ người đọc văn bản.” Phòng cuối có nền đồng tạo thành sơ đồ mạng. Các đường nối Hồ Tây, Láng, Ngọc Trục, Hoàng Thành và nhiều điểm nhỏ. Không điểm nào tự sáng khi Tiến bước vào; Duy phải cấp nguồn đo từ ngoài qua dây tạm. + +“Không mọi phản ứng đều vì anh,” Thủy nói. + +Tiến gật. Dấu giày mới nằm ở mép phòng. Khánh An qua bộ đàm cơ hỏi hình dạng, rồi nói: “Hai người, trong ba ngày. Một chân phải kéo nhẹ.” + +Vân có chân trái khập khiễng. Không khớp. Có người khác đã tìm cửa. + +Ba cửa nhỏ ở cuối phòng mang biểu tượng mắt, bàn tay và mặt trời gạch. Không cửa thứ tư. Duy nói qua dây: “Không chọn. Đặt ba nguồn vào vị trí.” + +Tiến đứng tại mốc Ngọc Trục, Thủy ở Láng, Đạt tại vùng Null. Các cảm biến nhận ba chuỗi dữ liệu khác nhau: + +- nhịp tim và dấu trạng thái Tiến; +- tín hiệu cộng hưởng quanh Thủy; +- bộ nhận dạng của Đạt bị thiếu trong kho Hậu Ký. + +Ba cửa mở một khe, nhưng không đủ người đi. Một cột kim loại–đá nâng từ nền. + +Cả nhóm giữ nguyên hiện trường. Đạt kiểm bề mặt trước, Duy mới đưa đầu đọc thụ động vào. Khi Tiến tới gần, cột phát âm thanh lưu trữ: xe điện cũ, còi báo động, máy bơm, tiếng đọc mực nước, bom xa, tàu điện hiện đại. + +Âm thanh không thuộc cùng một thời điểm; đó là chuỗi bản ghi chồng từ nhiều thời kỳ của Hà Nội. + +Thủy ôm đầu. Âm thanh chồng vào Dư Âm. Tiến kéo cô lùi. “Có hướng?” “Loa trong cột. Có. Nhưng lớp nghĩa trong đầu thì không.” + +Dữ liệu vật lý và phản ứng thần kinh xảy ra cùng lúc. Khe bên cột chứa một dải nhớ kim loại. Khánh An từ ngoài hướng dẫn kẹp cách điện. Trên mép khắc: + +**29/09/2031 – MỄ TRÌ B3** + +Tiến để dải nhớ nằm nguyên chỗ cũ trong khi Đạt kiểm tra bề mặt lần nữa. + +“Chuỗi lưu?” + +Thủy chụp vị trí. Đạt ghi giờ. Duy xác nhận chỉ mục từ thiết bị độc lập. Ba người cùng ký. Sau đó mới lấy. Còn một phút trước khi nước dâng. + +Thủy rà các bóng trên tường: ba người, ba bóng rõ. Vùng tối ở giữa do hình chiếu của cột tạo ra, chưa đủ thành hình người. Cái bóng thứ tư trong ảnh vì thế có thể là lớp tổng hợp chỉ nổi lên khi hệ thống hoạt động mạnh hơn. + +“Chưa đủ,” cô nói. + +“Gì?” Tiến hỏi. + +“Chưa đủ để kết luận.” + +Họ rút. Nước dâng đúng lúc cánh cửa đóng. Không ai bị kẹt, nhưng đường rút của Đạt bị trượt; ngón út tay phải va vào đá, rách sâu nhưng chưa mất. + +Một chi tiết gần ảnh. Thủy băng tạm, ghi nguyên nhân. Không để tương lai nhận công cho một tai nạn. + +Ngoài cửa, Kha nhìn dải nhớ trong hộp. “Cho tao bản sao.” + +“Sau khi kiểm,” Tiến nói. + +“Đó là tương lai có tên tao.” + +“Và cái chết của tôi.” + +Kha bước gần. “Đừng dùng nó kết tội tao.” + +“Anh sợ?” + +“Có.” + +Lần đầu hắn thừa nhận trước nhiều người. Tiến giữ ánh mắt ở Kha. “Vậy chờ cùng.” + +Cách chia ấy không tuyệt đối công bằng, nhưng ít nhất không để một người giữ toàn bộ. Phía sau, nước phủ cầu thang. + +Hoàng Thành chưa mở Khóa Trung Tâm. Họ chỉ vào phòng quan sát vòng ngoài và mang ra một vật có thể đã được ghi từ một phương án 2031. Thành phố bên dưới không trao lời giải. + +Cánh cửa đóng lại sau lưng họ. Trong hộp niêm phong, mảnh kim loại vẫn lạnh và không hứa hẹn điều gì. + +Chương 51: Bản Ghi Năm 2031 + +**31/07/2028 – 08:40** + +Dải nhớ được đọc trong phòng cách ly thiết bị, không nối HANOI-07. Duy gọi nó là vật liệu lưu dao động: các lớp từ tính ghi hình, nhiệt, áp lực và âm thanh. Đầu đọc hiện đại chỉ phục hồi được phần thô. Phần có cấu trúc cao hơn cần giao diện của mạng, nhưng Vân phản đối. + +“Dùng hệ thống, nó chọn phần muốn cho thấy.” + +Kha nói: “Không dùng, chỉ có mảnh.” “Chấp nhận mảnh.” + +Lần đầu cả nhóm chọn biết ít hơn để giảm nguy cơ bị dẫn. Hình ảnh nhiễu hiện Mễ Trì B3 ngày 29/09/2031, 12 giờ 08. Không phải thời điểm Tiến nhớ mình chết cuối ngày. + +Tiến tương lai đứng trước một tủ thiết bị. Kha ở sau. Duy lọc âm thanh. + +“Khóa nó,” Tiến tương lai nói. + +“Không còn khóa,” Kha đáp. + +“Vậy cắt.” + +“Cắt mày chết.” + +“Biết.” + +Tiến hiện tại đứng bật. Thủy không giữ tay hắn; cô chỉ đặt nút dừng trong tầm với. “Muốn dừng?” + +“Không.” + +Bản ghi tiếp. Tiến tương lai đặt tay lên thiết bị. Nhiệt chạy lên cánh tay. Kha cầm dao, nhưng chưa đâm. “Nếu mày quên?” Kha hỏi. + +“Đừng tin tao khi tao quên.” + +Hình ảnh mất hẳn, không chỉ chập trong vài giây. + +Dữ liệu nhiệt cho thấy khoảng trống bốn mươi ba phút. Khi hình trở lại, Tiến nằm dưới sàn. Kha đứng trước, dao có máu. Cảnh khớp ký ức nhưng không cho thấy đoạn dẫn tới. + +Giọng Kha: “Lê Quốc Tiến. Mày vốn không nên sống lâu đến thế.” Dao hạ. + +Trước khi bản ghi tắt, một giọng máy: + +**STATE CAPTURE COMPLETE** + +Căn phòng lặng đi. Kha nhìn bàn tay hiện tại của mình. “Tao không nhớ.” + +“Anh chưa sống tới đó,” Thủy nói. + +“Nhưng trong bản này, tao đã cầm dao.” + +Tiến đáp: “Trong bản này.” Không tha. Không kết tội hiện tại. + +Duy chỉ dữ liệu nhiệt: giữa hai đoạn, trạng thái Tiến thay đổi hai lần. Có một nguồn thứ ba vào phòng rồi rời, bước chân không rõ. + +“Chúng ta chưa biết vì sao dao được dùng,” Thủy nói. “Không được lấp bằng điều thuận cho Tiến hay Kha.” + +Vân nhìn khoảng trống. “Có dấu Null.” “Bà làm?” + +“Có thể một phiên bản của tôi. Hiện tại tôi không biết.” + +Không để nhân vật tương lai truyền toàn bộ trí nhớ cho hiện tại. Kha nói: “Nếu Null xóa đoạn, ký ức Tiến chỉ giữ phần tao giết.” + +“Đúng.” + +“Có chủ ý.” + +“Có thể.” + +Tiến hỏi: “Ai hưởng lợi?” Vân không chọn một đáp án. “Có thể Tiến tương lai muốn bản thân năm 2028 không mang một giao thức. Có thể HANOI-07 không lưu được. Cũng có thể ai đó dựng.” + +Ba giả thuyết. Chưa chọn. Dữ liệu cuối dải có tọa độ Hồ Tây và mốc: + +**29/09/2028 – 12:11** + +Duy đối chiếu áp lực. “Liên quan mạch nước trước cửa sổ.” Hệ thống chưa hề giao một “nhiệm vụ”; tọa độ nằm trong vật liệu và có thể chỉ là điểm thiết bị của phương án ấy từng dùng. Muốn biết còn giá trị hay không, họ phải đo lại thực địa. + +Thủy nói: “Nếu bản ghi là mô hình, tọa độ có thể thay.” “Vậy kiểm.” + +Tiến nhìn thẳng Kha. “Anh có giết tôi năm 2031?” Kha đáp sau một lúc: “Trong ít nhất một phương án.” “Anh có thể trở thành người đó.” + +“Ừ.” + +“Còn tôi có thể trở thành người yêu cầu.” + +“Ừ.” + +Hai người cùng không thích câu trả lời. Bản ghi đầu không giải bí mật. Nó phá một sự chắc chắn: ký ức của Tiến không đầy đủ. Từ đây, “tôi nhớ” không còn là bằng chứng cuối cùng. Hắn mất một công cụ. + +Cũng mất một xiềng. Sau buổi xem, Tiến yêu cầu tách hai loại hồ sơ: dữ liệu kỹ thuật chung và phản ứng cơ thể của mình. Đạt đồng ý, Kha phản đối vì mọi dấu thần kinh có thể ảnh hưởng cách họ chuẩn bị ngày 29. + +Thủy đặt câu hỏi khác: “Nếu cơ thể Tiến là một phần hệ thống, cộng đồng có quyền biết tới đâu?” Không ai trả lời ngay. + +Cuối cùng, họ thống nhất công khai kết luận và phương pháp, nhưng ảnh mô thần kinh, nhịp đau và đoạn Tiến mất kiểm soát chỉ được mở khi chính hắn đồng ý hoặc khi một bác sĩ xác nhận nguy cơ trực tiếp. Đó là tiền lệ đầu tiên cho một thành phố đang thiếu luật: dữ liệu có thể liên quan mọi người mà vẫn không biến cơ thể một người thành tài sản chung. + +Kha ở lại phòng lâu hơn. Hắn đứng trước khung hình dao hạ, không phát lại âm thanh. + +“Anh đang tìm xem mình có chần chừ không?” Tiến hỏi. + +“Đang tìm xem tao có đường lui không.” + +“Có?” + +“Không thấy.” + +“Vì đoạn bị cắt.” + +Kha giữ mắt ở khoảng đen bốn mươi ba phút. “Hoặc vì phiên bản đó đã không để lại.” Tiến không tìm lời an ủi. Hắn tắt màn hình. Cả hai rời phòng bằng hai cửa khác nhau, để lại bản ghi trong hộp niêm phong có ba khóa. + +Chương 52: Em Gái Phúc + +**31/07/2028** + +Tin về em gái Phúc tới từ mạng đổi thuốc của Linh. Một cô gái mười chín tuổi, sẹo bỏng ở vai, tên Phương, đang đi cùng nhóm y tế của Vòng Tròn Vỡ gần Hà Đông. Không ảnh rõ. Linh chỉ đánh dấu **khả năng cao**, kèm hai chi tiết đối chiếu: vết bỏng cũ ở vai trái và thói quen viết tên thuốc bằng chữ in hoa. Hai dấu khớp chỉ đủ nâng xác suất; chẳng ai dám biến chúng thành một lời hứa. + +Phúc không lao thẳng ra cổng. Anh trải bản đồ Hà Đông lên thùng gỗ, đánh dấu trường học, hai tuyến rút và điểm có thể đổi xe rồi mới tới phòng trực. Cánh tay còn băng khiến việc tự lái trong tình trạng đường hỏng là một lựa chọn tệ; chính Phúc nói điều đó trước khi Nam kịp nhắc. + +“Tôi đi tìm Phương. Cần người lái và một người xác minh nguồn. Nếu tin sai, quay ở điểm này.” Anh chạm vào một ngã ba trên bản đồ. + +Nam hỏi: “Em đi?” + +“Không. Em giữ cổng. Nếu cả người tìm lẫn người giữ cùng chạy theo một tin chưa xác minh thì đây là bẫy quá rẻ.” + +Tiến tới, không ra lệnh ở lại. “Tôi đi cùng. Bình lái. Thủy xác minh nguồn từ đây và giữ liên lạc theo mốc.” + +Phúc nhìn hắn. “Anh cho?” + +“Tôi không có quyền cho hay cấm anh đi. Nhưng xe, nước dự phòng và tuyến là tài nguyên chung; dùng chúng thì phải để người khác biết anh đang cược gì.” + +Cách nói mới, chưa tự nhiên, nhưng ít nhất không biến nỗi sợ mất người thân thành quyền lấy bất cứ thứ gì rồi đi. Họ tìm thấy khu y tế tạm trong một trường học. Vòng Tròn Vỡ đã rút đội chiến đấu, để lại người bệnh và ba người chăm. + +Phương đang băng chân cho một đứa trẻ. Phúc gọi tên. Cô quay. Không chạy tới. Không khóc. “Anh còn sống.” + +“Ừ.” + +“Anh bỏ em.” + +“Không.” + +“Cửa đóng.” + +“Anh quay lại.” + +“Em không thấy.” + +Hai người mang hai sự thật khác nhau về cùng một phút Đại Hà. Phúc muốn nói người đẩy anh, khói, cửa, người chết. Nhưng mọi lý do đều đến sau trải nghiệm của Phương: cô đã đứng phía trong và không thấy anh quay lại. + +“Vòng Tròn Vỡ cứu em,” cô nói. + +“Chúng dùng em.” + +“Ngọc Trục không dùng người?” + +Phúc không đáp. Tiến đứng ngoài cuộc nói chuyện tới khi Phương tự nhìn hắn. “Anh biết Đại Hà?” + +“Biết sẽ có thảm họa.” + +“Và để người ta vào.” + +“Không cảnh báo đủ.” + +Tiến không núp sau lý do “sẽ chẳng ai tin”. Phương chỉ hỏi: “Bao nhiêu người chết?” + +“Không biết.” + +“Anh vẫn sống.” + +“Ừ.” + +Câu đó không làm hắn có lỗi vì sống. Nhưng cũng không xóa chênh lệch. Phương không đồng ý về Ngọc Trục ngay. Cô cho họ ở lại một ngày để xem nhóm y tế làm việc. Thủy phỏng vấn từng người về cách Vòng Tròn Vỡ cứu Phương, không chỉ nghe lời anh em. + +Quân đã kéo cô khỏi tầng dịch vụ sau khi đội Tiến rời. Không vì biết cô là ai. Người của hắn mất hai người khi quay lại cứu người mắc kẹt. Điều đó cho Vòng Tròn Vỡ một phần chính nghĩa thật. + +Buổi tối, Phương đưa sơ đồ Hồ Tây. Họ dự định cắt một tuyến nước trước ngày Đồng Bộ vì tin nước nuôi Khóa Trung Tâm. Tiến trải dữ liệu dải nhớ. “Nếu cắt hoàn toàn, tải có thể dồn.” + +“Dữ liệu tương lai của anh?” + +“Không. Áp lực đo hiện tại và một tọa độ chưa xác minh.” + +“Vậy đo. Nếu số của anh đúng, em mang chính bảng đó về cho Quân. Nếu sai, anh cũng phải nhìn.” + +Phương không cần chọn phe trước khi chọn cách kiểm một mệnh đề. Phương đồng ý tới Ngọc Trục bảy ngày, không ba, với điều kiện: + +- ở Vành Ngoài; +- không giao thông tin bệnh nhân; +- được rời bất cứ lúc nào; +- Phúc không theo cô mọi nơi; +- xem dữ liệu nước cùng người của Vòng Tròn Vỡ. + +Phúc phản đối điều thứ tư rồi tự dừng. + +“Được.” + +Ngày đầu, hai anh em gần như không nói. Ngày thứ hai, Phương thấy bộ nẹp tay Phúc và hỏi ai làm. Ngày thứ ba, Phúc kể mỗi ngày đã tìm cô ở đâu. Không xin cô về. Chỉ đưa bản đồ. + +“Có lúc nào anh dừng?” cô hỏi. + +“Có.” + +“Vì nghĩ em chết?” + +“Ừ.” + +“Rồi?” + +“Không có xác.” + +Phương nhìn anh. “Không có xác không nghĩa còn sống.” “Biết.” + +“Vẫn tìm?” + +“Ừ.” + +Lần đầu cô ngồi gần hơn. Không hòa ngay. + +Một mối quan hệ bị Đại Hà xé không thể khâu trong một chương bằng một cái ôm. Ở cuối tuần, Phương vẫn không gia nhập Ngọc Trục. Cô đề nghị kéo dài thời gian thử thêm hai tuần để hỗ trợ Linh, kiểm tra số liệu nước và tiếp tục gửi bản sao cho Quân. Cô không nhận chức, không mang biểu tượng và chưa gọi đó là một mạng y tế trung lập. + +Đêm thứ sáu ở Vành Ngoài, một đường nước tạm bị vỡ. Phúc nghe tiếng người gọi cứu và định lao tới bằng bàn tay còn bỏng; Phương chặn anh, đưa cho kìm rồi bắt đứng đúng vị trí cô chỉ. Hai người sửa dưới ánh đèn pin, không nói chuyện Đại Hà. Khi nước chảy lại, Phương rửa bùn trên tay anh. + +“Anh luôn nghĩ chạy tới là quay lại,” cô nói. + +“Còn em nghĩ cửa đóng là anh bỏ.” + +“Vì em đứng phía trong.” + +“Anh đứng phía ngoài.” + +Hai câu không hòa được ký ức. Nhưng lần đầu, họ nhìn thấy vị trí của người kia thay vì chỉ bảo vệ vị trí mình. + +Sáng hôm sau, một bé gái hỏi Phương có ở lại với anh trai không. Cô đáp: “Chị ở lại với số thuốc này thêm hai tuần.” Rồi tự xách túi sang khu y tế. Phúc không cầm giúp cho tới khi cô đưa một đầu dây. Hành động nhỏ ấy quan trọng hơn một cái ôm: Phương không được cứu về, và Phúc không được nhận lại em như đồ thất lạc. Họ bắt đầu học cách đi cạnh nhau. + +Phương đeo túi y tế rồi bước qua cổng trước. Phúc đứng lại đúng khoảng cách cô đã yêu cầu. + +Chương 53: Người Quan Sát Cuối Cùng + +**04–07/08/2028** + +Việc đo mạch nước Hồ Tây bắt đầu từ ngày thứ tư Phương ở Ngọc Trục và kéo dài song song với lúc Duy hồi phục. Suốt bốn ngày, mọi phép đo quan trọng đều có ít nhất một kênh đối chứng. Ông Hòa và Đức, người thợ lạnh đã theo nhóm Hạnh tới Vành Ngoài, lắp ba bộ áp lực độc lập. Duy hiệu chỉnh nhưng không tự giữ dữ liệu. Thủy ghi giờ và điều kiện. Đạt kiểm các điểm bị mất log. Phương mời hai người của Vòng Tròn Vỡ tới đo cùng. + +Kết quả làm cả hai phía khó chịu. Nước không “nuôi” Khóa Trung Tâm như một nguồn năng lượng. Nó làm chậm dao động nhiệt và cơ học trong nền. Cắt hoàn toàn khiến tải nhiệt dồn nhanh hơn. Giữ nguyên cũng nguy hiểm vì mực hồ rút làm áp lực lệch. + +Thứ nằm dưới họ cần được điều tiết như một hệ giảm chấn — không phải “con rồng dưới đất”, nhưng cũng chẳng đơn giản là một đường ống. Duy tìm trong sổ rơ-le một cái tên: Trần Văn Tĩnh, người từng ký các biên bản Observer. Không ai “mang ông tới” như lời giải. Tiến, Thủy và Vân phải tới một trạm kiểm soát lũ cũ nơi ông đang sống cùng mười hai người. + +Tĩnh hơn bảy mươi, mắt phải mờ, không muốn đi. + +“Các cậu đã có số đo,” ông nói. “Cần tôi làm gì?” + +“Giải thích Central Observer,” Thủy đáp. + +“Vì Hậu Ký đặt tên?” + +“Vì chúng tôi sắp vào nơi nó dùng tên đó.” + +Tĩnh đồng ý nói tại trạm, không theo ngay. Ông nghe mô tả rồi lắc đầu. “Không có chức danh Central Observer trong dự án ban đầu.” + +Kha tham gia qua radio. “Kho của tôi có.” + +“Hậu Ký thích biến trạng thái thành danh từ.” + +“Vậy là gì?” + +“Khi các nguồn không thống nhất, hệ thống cần một xác nhận vật lý tại chỗ. Người làm việc ấy tạm ở trạng thái Observer.” + +“Đạt?” + +“Phù hợp vì không mang cùng bản dự báo.” + +“Còn ông?” + +“Từng là người cuối ký xác nhận ở nhiều nút. Không có nghĩa tôi sở hữu chức danh.” + +Thủy đưa ảnh bóng thứ tư. Tĩnh chưa kết luận. Ông hỏi nguồn sáng, góc chụp, siêu dữ liệu và cách ảnh được tạo trước. Khi biết ảnh có thể là mô hình tái dựng, ông nói: + +“Dấu tổng hợp.” + +“Người chết?” Tiến hỏi. + +“Không. Hình học của nhiều hồ sơ Observer chồng lên. Nhưng phải kiểm.” + +Tĩnh đặt ba bản in lên bàn. Ông bắt Duy dựng lại góc sáng, Thủy đối chiếu siêu dữ liệu và Đạt kiểm thời điểm từng nguồn. Chỉ khi các sai số cùng hướng về một kết quả, ông mới viết ở mép giấy: **DẤU TỔNG HỢP — CHƯA KHÓA.** + +Sau đó ông mở lược đồ cũ. HANOI-07 ban đầu không dự báo tương lai; nó lưu trạng thái thành phố khi hệ thống thông thường thất bại. Khi dữ liệu từ các phương án bắt đầu phản hồi qua chu kỳ, người vận hành mới dùng kho trạng thái ấy để hỏi. + +“Càng hỏi, càng dùng,” ông nói. “Càng dùng, hiện tại càng đổi. Dữ liệu mới lại chồng vào.” + +“Hậu Ký,” Thủy nói. + +“Một hậu quả, không phải mục tiêu ban đầu.” + +Kha hỏi: “Giữ nhiều phương án thì sao?” “Hệ thống không thể đưa dự báo ổn định.” + +“Thành phố mất lợi thế.” + +“Đúng.” + +“Null?” + +“Có thể mất cả dữ liệu cần vận hành.” + +“Converge?” + +“Một phương án thành chuẩn, nhưng ai đặt câu hỏi có quyền rất lớn.” + +“Preserve?” + +“Giữ vòng phản hồi.” + +Không lựa chọn vô tội. Tiến hỏi: “Ông chọn gì?” Tĩnh nhìn hắn. “Tôi đã chọn đủ cho người khác. Việc của tôi là nói điều tôi biết và điều tôi không.” + +Ông không trao đáp án đạo đức. Điều hữu ích nhất ông cho là một tập lược đồ dữ liệu cũ có trường ghi chú tự do. Các trạng thái bắt buộc của hệ thống không có mục **không biết**, nhưng người vận hành từng lách bằng ghi chú. + +Chi tiết nhỏ ấy sẽ quan trọng hơn mọi danh xưng. Trước khi họ rời, Tĩnh nói với Đạt qua radio: “Nếu tới lúc hệ thống bắt anh giải quyết mâu thuẫn, hãy ghi mâu thuẫn.” Không chọn. Ghi. + +Ngày 29 tháng 9 chưa tới, nhưng nguyên tắc Người Quan Sát đã rõ: + +Không có quyền biến điều mình thấy thành mệnh lệnh chỉ vì người khác không thấy toàn bộ. Trước khi họ rời trạm, Tĩnh đặt ba nhiệt kế lên cùng một bàn kim loại. Một cái chỉ 44,8 độ, một cái 46,1, cái cũ nhất dừng ở 45,4. + +“Cái nào đúng?” ông hỏi. + +Duy kiểm hiệu chuẩn. “Không biết ngay.” + +“Vậy nếu biểu mẫu bắt chọn một?” + +“Ghi cả ba.” Đạt đáp. + +Tĩnh gật. “Observer không phải người nhìn giỏi nhất. Là người chịu được việc hai dữ kiện trái nhau cùng tồn tại cho tới khi tìm được nguyên nhân.” Ông kể lần cuối mình ký thay một đội: trạm ngập nhưng cấp trên cần báo cáo an toàn để mở tuyến. Không ai chết, nên quyết định ấy được ghi là thành công. Tĩnh vẫn nhớ người công nhân đã đứng nước tới ngực suốt bốn giờ để giữ máy bơm. + +“Báo cáo nói hệ thống hoạt động,” ông nói. “Không ghi ai biến nó thành hoạt động.” + +Thủy ghi thêm nguồn, giờ và sai số cạnh câu nói của Tĩnh. Mực khô chậm trong căn phòng nóng. + +Chương 54: Hoàng Thành Không Ngủ + +**10/08/2028 – 02:17** + +Đêm 10 tháng 8, cảm biến quanh Hồ Tây, Láng và Ngọc Trục cùng ghi một dao động kéo dài bốn phút. 02 giờ 17. Không đủ mạnh để người ngủ trên mặt đất tỉnh. Nhưng các kim áp lực cùng đi qua một chu kỳ giống lần cửa ngoài mở. + +Duy gọi đó là thử đồng bộ tự nhiên. Vân nói hệ thống đang đối chiếu các nguồn sau khi Đạt xuất hiện. Kha nói nguyên nhân ít quan trọng hơn việc thời điểm đã đến sớm. Tĩnh nói cả ba đang biến giả thuyết thành câu khẳng định. + +Tiến tập hợp Hội đồng Ngọc Trục mở rộng. Không chỉ người lõi: Tuấn, Hạnh, Đức, chị Mai và đại diện Vành Ngoài cùng nghe. Lần đầu, bí mật được nói bằng ngôn ngữ không đòi người nghe hiểu mọi thuật ngữ: + +- dưới Hà Nội có mạng hạ tầng nhiều lớp; +- các điểm Láng, Hồ Tây và Ngọc Trục liên quan; +- ngày 29/09 là cửa sổ nguy hiểm; +- các phe muốn giữ, phá hoặc kiểm soát; +- chưa ai biết lựa chọn nào an toàn tuyệt đối. + +Tuấn hỏi: “Vì sao giờ mới nói?” Tiến bỏ qua câu “để bảo vệ” đã lên tới miệng. “Vì tôi nghĩ càng ít người biết, tôi càng dễ giữ.” + +“Giữ cái gì?” + +“Cả bí mật lẫn quyền quyết.” + +Một câu khó. + +“Giờ?” + +“Không còn được.” + +Hội đồng nước được mở rộng thành Hội đồng Ngọc Trục tạm thời. Tiến giữ quyền an ninh khi bị tấn công trực tiếp, không giữ toàn bộ phân phối và thông tin. Linh giữ y tế. Ông Hòa và Đức phụ trách kỹ thuật. Ba đại diện Vành Ngoài giữ định mức. Thủy quản hồ sơ công khai. Bình phụ trách vận chuyển với quyền từ chối tuyến. Nam phụ trách liên lạc ca đêm. + +Đó chưa phải dân chủ hoàn chỉnh; nó chỉ tạo thêm nhiều điểm hỏng để một người không thể làm hỏng tất cả. Đêm sau, nhóm ba nguồn trở lại cửa ngoài. Tiến, Thủy, Đạt. + +Khánh An giữ lối. Vân giữ Null. Duy vận hành. Tĩnh chỉ theo dõi từ trạm, không xuống. Cột quan sát hiện: + +**SYNCHRONIZATION WINDOW: 57 DAYS** + +Bên dưới: + +**CONVERGE** + +**PRESERVE** + +**NULL** + +Không ai thử diễn giải ba dòng ấy ngay tại chỗ. Kha qua đường dây nói: “Không chọn.” Tiến đáp: “Chưa ai định chọn.” Họ chụp, đo và rút. Họ không để một menu ba dòng bị biến thành ba số phận duy nhất. + +Khi cửa đóng, một tiếng chuông vật lý vang từ sâu hơn. Cảm biến ghi được, có hướng từ cụm trung tâm. Trên mặt đất, các đèn giao thông chết quanh Ba Đình cùng sáng đỏ bốn giây. Camera cũ bật. Một số màn hình còn điện hiện vòng tròn đỏ có mười hai tia. + +Hiện tượng không xảy ra trên toàn thành phố cùng lúc, nhưng đủ người nhìn thấy để lời đồn chạy nhanh hơn mọi thông báo chính thức. Sáng, hơn ba trăm người tập trung quanh các tuyến vào trung tâm. + +Một số cầu cứu. Một số muốn phá. + +Một số tin có thành phố trú ẩn dưới đất. Một số chỉ muốn nhìn thứ đã làm đèn sáng. + +Nhóm Tài — những người còn giữ con dấu và hồ sơ của bộ máy cũ — gửi yêu cầu phong tỏa khu vực. Hổ muốn thu phí đường. Kha đưa xe chặn ba tuyến. Vòng Tròn Vỡ phát thông điệp phải phá trước ngày 29. Cuộc chiến không còn nằm trong hầm. Nó trở thành cuộc chiến về ai được nói Hoàng Thành là gì. + +Thủy lập bản tin đầu tiên: + +“Chưa có bằng chứng về hầm trú cho dân số lớn. Không tập trung tại khu trung tâm. Dao động có thật. Ý nghĩa chưa xác định.” + +Bản tin ấy không hấp dẫn bằng một lời hứa cứu rỗi, nhưng từng con số đều có nguồn để cô bảo vệ. Kha gửi cho Tiến một câu: + +**Từ giờ, bí mật không còn là tài sản. Nó là đám đông.** + +Tiến kiểm tra hình từ camera đường phố. Hắn hiểu. Một hệ thống kỹ thuật có thể được khóa bằng thép. + +Một niềm tin đã lan thì không. Buổi chiều, Thủy đi một vòng ngoài Ba Đình để nghe người ta gọi Hoàng Thành bằng những tên gì. Một bà cụ gọi là hầm vua. Hai thanh niên tin đó là kho lạnh quân đội. Một người cha nói chỉ cần bên dưới mát hơn thì ông sẽ phá cổng để đưa con vào. + +Thủy không cười những lời đồn. Mỗi lời có một nhu cầu thật: nơi trú, nước, quyền được không bị bỏ lại. Bản tin tối của cô không chỉ phủ nhận. Nó công bố nhiệt trong hầm, diện tích thực tế, số người tối đa có thể làm việc an toàn và lý do tập trung đông sẽ làm tuyến thông gió sập. Hạnh đọc lại bản tin cho những người không có radio. + +Một số người vẫn không tin. Nhưng đám đông ngày sau nhỏ hơn, và vài gia đình chuyển tới điểm trú do hội đồng chỉ thay vì ngủ trước cổng Hoàng Thành. Bí mật đã biến thành đám đông. Từ đây, muốn giữ thành phố, họ không thể chỉ khóa cửa; phải đưa đủ sự thật để người ngoài tự quyết mà không bị một lời hứa giả kéo đi. + +ARC 7: THÀNH PHỐ CÓ CHỦ + +Chương 55: Hội Nghị Nước + +**11/08/2028** + +Cuộc họp đầu tiên về nước được tổ chức trong tầng hầm một bãi đỗ xe, nơi lớp bê tông còn giữ được nhiệt độ thấp hơn mặt đường tám độ. Mười bốn nhóm tới. Tên gọi “chính quyền” không xuất hiện trên giấy mời, nhưng mỗi đại diện đều mang theo ít nhất một người có vũ khí và một người nắm con số thật của kho mình. + +Tiến đi cùng Bình và Thủy. Linh ở lại Ngọc Trục. + +“Người biết chia nước nên đứng cạnh nước,” cô nói, “không đứng cạnh những người thích nói về nó.” + +Kha tới sớm, chọn chỗ gần lối lên. Hổ — người giữ nhiều tuyến đường phía Tây — ngồi đối diện hắn. Lâm đại diện kho thuốc; trước Hồng Nhật ông quản chuỗi lạnh của một nhà phân phối dược và từng mất cả lô insulin khi đám đông phá niêm phong phòng lạnh. Từ đó, ông không xuất một thùng nào nếu không có nhật ký nhiệt, danh sách nơi nhận và người chịu trách nhiệm. Hương đại diện mạng chung cư tự quản. Một bác sĩ bệnh viện dã chiến, hai nhóm La Phù, một trạm điện và ba khu dân cư nhỏ đủ người để biến mọi câu thành một cuộc mặc cả. + +Duy trải bản đồ các nguồn còn hoạt động. Thủy yêu cầu mỗi con số phải ghi nguồn và thời điểm đo, không chỉ tên người khai. Ngọc Trục có khả năng lọc, nhưng nước thô đang đổi. + +Kha có ba xe bồn và tuyến nhập. Bệnh viện có bể ngầm nhưng không bơm ổn. Hai giếng khu dân cư có nguy cơ nhiễm. Hồ Tây có mạch nước, chưa dùng uống. Tổng lượng thấp hơn nhu cầu. + +Hương đặt lên bàn một khay đất nông, trong đó sáu cây rau dền đang sống dưới lớp lưới phản nhiệt. “Nếu chỉ tính nước uống, chúng ta sống thêm vài tuần rồi lại ngồi đây vì đói. Khu tôi cần một phần nước xám đã xử lý cho luống giống. Không lấy từ định mức y tế.” + +Bác sĩ phản đối nguy cơ nhiễm; Duy đề nghị tách đường màu, bể lắng và kiểm vi sinh. Cuộc họp về nước vì thế phải tính cả thứ chưa thể ăn ngay: hạt giống, nấm hầm, khoai chịu nóng và những tuyến lương từ phía nam. Kha nói: “Cần một đầu mối.” + +Hương hỏi: “Anh?” + +“Không nhất thiết.” + +“Nhưng xe của anh.” + +Kha chỉ Hổ. “Đường của hắn.” Rồi chỉ Lâm. “Thuốc của ông ta.” + +Cuối cùng nhìn Tiến. “Lọc của Ngọc Trục.” Một hệ thống trung lập đang được dựng từ tài sản của những người không trung lập. + +Kha đề xuất gom phần lớn nguồn về La Phù, lập đội vận chuyển chung và phân theo định mức y tế–dân số–lao động. Nghe hiệu quả. Tiến hỏi: “Kho ở đâu?” + +“La Phù.” + +“Ai giữ?” + +“Đội chung.” + +“Xe?” + +“Của tao.” + +“Đường?” + +“Hổ.” + +“Lượng nguồn?” + +“Ngọc Trục và các khu báo.” + +“Vậy một đầu mối có bốn cổ chai đều do người ở bàn này giữ.” + +Kha nói: “Còn phương án của mày?” + +“Không gom toàn bộ. Mỗi khu giữ dự phòng ba ngày. Chỉ đưa phần vượt vào mạng trao đổi.” + +“Hiệu suất thấp.” + +“Khó bị chiếm một lần.” + +Bác sĩ bệnh viện phản đối: “Khu ít bệnh giữ nước trong khi bệnh viện thiếu thì sao?” + +“Định mức y tế bắt buộc.” + +“Ai cưỡng chế?” + +Không câu trả lời đẹp. Kha nghiêng người. “Đó là lý do cần đầu mối.” + +Tuấn, đại diện Vành Ngoài, lên tiếng: “Đầu mối không được có quân riêng.” Kha nhìn hắn. “Ai bảo vệ xe?” + +“Người luân phiên từ nhiều khu.” + +“Ngày đầu bị bán tuyến.” + +“Đổi người ngày sau.” + +Kha cười nhạt. “Dân chủ uống nhiều nước.” Tuấn đáp: “Độc tài uống máu.” + +Vài tiếng cười tắt nhanh. Một câu nói hay vẫn không làm bể nước đầy thêm. Cuộc họp kéo dài bốn giờ. Mỗi điều khoản được thử bằng một tình huống: + +- một khu giấu lượng thật; +- bệnh viện nhận gấp đôi; +- xe bị chặn; +- nguồn nhiễm; +- người vận chuyển bỏ trốn; +- Kha hoặc Tiến chết. + +Đến khi mọi người mệt đủ để bớt diễn, họ thống nhất sáu nguyên tắc: + +1. Mỗi khu giữ dự phòng tối thiểu ba ngày. +2. Lượng nguồn phải báo trên mạng radio chung, có người đo chéo. +3. Bệnh viện, trẻ nhỏ và ca mất nước nặng được ưu tiên. +4. Nước xám dành cho trồng trọt phải đi đường riêng, có kiểm tra và không được rút từ định mức uống tối thiểu. +5. Không nhóm nào được chặn xe nước đã đăng tuyến. +6. Vi phạm bị cắt trao đổi theo biểu quyết, không theo lệnh một người. + +Không người nào có quyền điều phối toàn bộ. Thay vào đó là một cái bàn, một quy trình và chữ ký có thể đối chiếu. Kha ký. Tiến ký. + +Hổ ký cuối, nét bút mạnh như rạch. Ngay khi Thủy chụp trang chữ ký, một tiếng nổ nhỏ vang ở lối lên. Khói trắng tràn xuống. + +Bình kéo Tiến sau cột. Ba vệ sĩ đưa tay lên súng, nhưng người đại diện cạnh họ đồng loạt quát giữ nòng xuống; trước cuộc họp, tất cả đã thống nhất không được chĩa vũ khí vào bàn nếu chưa xác định được hướng tấn công. Một người trẻ ở nhóm La Phù vẫn giật cò khi bị ai đó va từ phía sau. Viên đạn trúng trần. + +Kha không lao ra cửa dù đứng gần nhất. Hắn hạ người, hít ngắn rồi nói: “Khói từ bình khí. Mục tiêu là che mắt, không phải ép nổ.” + +Thủy không đuổi theo bóng người. Cô úp máy ảnh vào áo, kiểm thẻ nhớ rồi mới lùi về cột. Khói che khoảng ba mươi giây. Khi tan, tờ thỏa thuận gốc biến mất. Không ai bị thương nặng. + +Không ai thấy người lấy. Hổ quát: “Vòng Tròn Vỡ.” + +Phương, đi cùng mạng y tế trung lập, lắc đầu. “Nếu là Quân, họ phá cuộc họp hoặc lấy sơ đồ nút. Tờ chữ ký không giúp phá khóa.” Thủy nhìn chỗ giấy từng nằm. “Nó giúp biết ai đang tạo cấu trúc quyền lực mới.” + +Kha hỏi: “Cô có ảnh?” + +“Có.” + +“Đưa bản.” + +“Cho tất cả.” + +Hắn cau mày. Tiến hiểu. “Một bản gốc đáng cướp vì nó độc nhất. Mười bốn bản thì không.” + +Thủy chép và phát qua radio mã hóa. Mỗi đại diện giữ một bản. Không ai sở hữu văn bản duy nhất. Kẻ trộm lấy được chữ ký, nhưng không xóa được thỏa thuận. Trên đường về, Bình hỏi: “Ai cần danh sách này?” + +“Người muốn biết thành phố sắp có những chủ nào,” Thủy nói. + +“Hoặc ai phải biến mất,” Tiến bổ sung. + +Ở một tầng hầm hành chính cũ, tờ giấy được đặt trước một con dấu của cơ quan đã không còn hoạt động sau Hồng Nhật. Người giữ bộ máy cũ đã nhìn thấy một trật tự mới hình thành. Và họ chưa đồng ý nhường tên “hợp pháp” cho những người đang làm nước chảy. + +Chương 56: Giá Của Thuốc + +**12–17/08/2028** + +Dịch bắt đầu bằng ba đứa trẻ tiêu chảy. Ngày thứ hai có mười một ca. Ngày thứ ba, Vành Ngoài có ba mươi bảy người sốt, nôn và mất nước. Không có virus bí ẩn hay một căn bệnh “tận thế” mới nào. Chỉ có nước bẩn, thực phẩm bảo quản kém và những cơ thể đã kiệt quệ nhiều tuần. Nhưng trong thành phố thiếu nước, tiêu chảy có thể giết nhanh hơn đạn. + +Linh khóa khu bệnh. Tuấn phản đối: “Người nhà phải chăm.” + +“Không. Chọn bốn người khỏe, tôi hướng dẫn. Còn lại đứng ngoài.” + +“Cô không đủ người.” + +“Vì vậy càng không để hai mươi người đi vào rồi thành bốn mươi bệnh nhân.” + +Chị Mai, y tá tư nhân từ nhóm tị nạn, cùng Linh phân mức. Phương ở lại hỗ trợ nhưng không giao quyền quyết cho bất kỳ phe nào. Kho có đủ dịch truyền cho mười hai ca nặng. + +“Có ba mươi bảy,” Tuấn nói. + +Linh đáp: “Mười hai cần truyền ngay. Những người còn uống được dùng dung dịch đường muối.” + +“Trẻ em?” + +“Không tự động lấy trước người đang sốc.” + +“Cô để trẻ chết?” + +Linh siết quai khẩu trang rồi đáp: “Tôi không có quyền quyết ai đáng sống hơn. Tôi đang chọn cách dùng mười hai chai dịch để giảm số người chết nhiều nhất theo dấu hiệu hiện có. Nếu anh thấy tiêu chí nào sai, chỉ ra ngay.” Tiến đứng bên, không can thiệp bằng tiêu chí “người hữu ích”. Kiếp trước hắn từng làm vậy. Lần này hắn hỏi: “Cần gì?” + +“Điện giải, dịch, men, kháng sinh theo chỉ định. Và nước sạch.” + +Kho thuốc của Lâm có. Ông không đòi giá gấp đôi chỉ vì thấy Ngọc Trục yếu; máy lạnh của kho đang ăn nhiên liệu nhanh hơn dự kiến, hai thùng dịch đã sát ngưỡng nhiệt và một chuyến trước không trả lại vỏ cách nhiệt. + +“Danh sách bệnh nhân, nhiệt độ xe và người ký nhận,” Lâm nói qua radio. “Thiếu một trong ba, tôi không mở kho.” + +Linh gửi bảng phân mức, chấp nhận kiểm đếm khi nhận nhưng từ chối giao tên đầy đủ bệnh nhân. Hai bên thống nhất dùng mã ca, nhiệt kế niêm phong và trả vỏ trong hai mươi bốn giờ. Phần nước trao đổi vẫn cao hơn hiệp định vì chi phí chuỗi lạnh, nhưng được ghi thành nhiên liệu và hao hụt cụ thể thay vì một mức giá tùy ý. + +Kha có thể chở. Giá của hắn: quyền điều phối tuyến thuốc một tháng. Tiến từ chối điều kiện qua radio. + +Linh ném khay xuống bàn. “Anh từ chối bằng gì?” + +“Đường khác.” + +“Bao lâu?” + +“Tám giờ.” + +“Người sốc không có tám giờ.” + +“Nhận một tháng, hắn giữ cổ thuốc.” + +“Sau khi bệnh nhân sống, anh làm chính trị.” + +Tiến không đáp ngay. Có những lựa chọn không cho họ đủ thời gian chờ một phương án sạch. + +Hắn gọi Kha. + +“Mười ngày.” + +“Một tháng.” + +“Bảy.” + +“Hai mươi.” + +“Mười.” + +“Mười lăm.” + +“Được.” + +Kha cử hai xe. Bình đi cùng, có quyền quay lại nếu thùng thuốc vượt nhiệt. Đoàn bị Hổ chặn giữa tuyến. Hổ nói bản gốc thỏa thuận đã mất, chữ ký có thể bị giả. Bình phát mười bốn bản sao qua radio, đọc đúng giờ chụp và người chứng kiến. + +Hổ không tranh pháp lý nữa. “Một thùng.” + +“Thuốc bệnh viện.” + +“Đường của tao.” + +Bình nhìn nhiệt kế thùng lạnh. Mỗi phút tranh làm thuốc nóng. + +“Một phần điện giải. Không kháng sinh, không dịch.” + +Hổ cười. “Anh có quyền?” + +“Không đủ. Nhưng tôi có trách nhiệm đưa phần còn lại tới.” + +Bình tự đổi. Khi về, Tiến hỏi: “Vì sao không gọi?” + +“Radio chết ở đoạn đó.” + +“Anh có quyền từ chối tuyến, không quyền đổi hàng.” + +“Vậy thêm hoặc đuổi tôi.” + +Hội đồng họp nhanh. Bình bị yêu cầu ghi đầy đủ, Hổ bị trừ lượng trao đổi ở chuyến sau, và người lái được quyền nhượng tối đa một phần nhỏ để tránh mất toàn bộ nếu có hai nhân chứng. Một quy tắc sinh từ một quyết định không hoàn toàn đúng. + +Trong khu bệnh, Linh chọn mười hai người truyền. Một bé trai không nằm trong số đó. Mẹ cháu quỳ. + +Linh quỳ theo, không đứng cao hơn. “Cháu còn uống được. Tôi giữ dịch cho người không nuốt được.” + +“Nhỡ nặng?” + +“Tôi theo.” + +“Cô chắc?” + +“Không. Tôi chỉ chắc là lúc này cháu còn uống được, mạch chưa tụt và tôi có thể theo sát. Nếu một trong ba thứ đổi, cháu lên mức ưu tiên khác.” + +Bà mẹ khóc, nhưng không cướp. Đứa bé sống. Một người đàn ông được truyền chết vì suy đa cơ quan. + +Quyết định đúng theo dữ liệu không bảo đảm kết quả tốt. Đêm, Linh ngồi ngoài khu bệnh, rửa tay bằng lượng nước nhỏ. Tiến đặt một cốc cạnh. + +“Cô làm đúng.” + +“Đừng nói.” + +“Vì?” + +“Anh không biết. Tôi cũng không biết. Tôi chỉ biết vì sao tôi chọn.” + +Tiến ngồi xuống cách một khoảng. “Ba người chết.” + +“Ba mươi bốn sống không làm ba người nhẹ hơn.” + +“Ừ.” + +Linh nhìn hắn. “Đừng lấy ba mươi bốn người sống để bảo tôi chắc chắn đã đúng. Cũng đừng lấy ba người chết để nói mọi tiêu chí đều vô nghĩa. Ngày mai tôi vẫn phải mở sổ và xem mình đã bỏ sót dấu nào.” Dịch được khống chế sau sáu ngày. + +Kha giữ tuyến thuốc mười lăm ngày. Mỗi xe mang dấu đội hắn. Người dân không nhớ cuộc thương lượng; họ nhìn thấy thuốc tới bằng xe Kha. Quyền lực không chỉ được xây từ thứ một người giữ. Nó được xây từ thứ mọi người nhìn thấy người đó trao đúng lúc. Tiến ghi điều này vào báo cáo hội đồng, không vì ghen với Kha. + +Lâm khóa thùng lạnh. Linh giữ một bản sổ, chị Mai giữ bản còn lại. Không liều thuốc nào rời kho nếu thiếu người nhận và nhiệt độ lúc giao. + +Chương 57: Kẻ Giữ Đường + +**16/08/2028 — ngày thứ năm của đợt dịch** + +Bình rời Ngọc Trục lúc gần sáng mà không xin xe chung. Anh đi chiếc xe máy cũ, mang súng ngắn cá nhân và để lại dưới bảng tuyến một tờ giấy gấp đôi: + +**Tuyến phía nam. Việc riêng. Mốc 1: ga Văn Quán 05:40. Mốc 2: kho Hổ 06:20. Quá 08:00 không có tín hiệu thì coi như bị giữ, không mở tuyến cứu nếu chưa xác minh.** + +Tiến đọc rồi vẫn chửi. Bình không biến mất như một kẻ mất trí; anh chỉ tự ý sử dụng rủi ro mà lẽ ra phải đưa ra hội đồng trước khi đi. Thủy hỏi: “Anh biết việc gì?” Tiến mở ngăn cá nhân Bình. Hắn không lục sâu; trên nắp đã có một tấm ảnh cũ: người phụ nữ, bé gái khoảng sáu tuổi và Bình đứng cách một khoảng như một người chưa biết nên đặt tay ở đâu. + +Tấm ảnh đã xuất hiện từ những ngày đầu Ngọc Trục, nhưng chưa ai hỏi Bình về nó. Bình ly thân trước Hồng Nhật. Sau thảm họa, hai lần anh tìm khu tập thể cũ và trở về tay không. Tin mới từ mạng đường nói một nhóm phụ nữ và trẻ em bị Hổ giữ làm lao động đổi chỗ trú. + +“Anh ấy đi tìm con,” Thủy nói. + +Tiến muốn đuổi theo ngay, nhưng hội đồng đang họp về tuyến nước. Hắn không thể rời căn cứ như trước. Bình có quyền từ chối tuyến. Không có quyền biến mất cùng vũ khí. Hội đồng cử Tiến và Thủy đi, Nam giữ liên lạc, Tuấn thay Tiến ở cổng. + +Khi họ tới kho của Hổ, Bình đã đặt súng xuống đất. Hổ ngồi trên ghế nhựa, danh sách người trong tay. + +“Vợ mày không ở đây,” hắn nói. + +“Con?” + +“Không.” + +“Danh sách.” + +“Không miễn phí.” + +“Muốn gì?” + +“Một tuyến vào trạm lọc Ngọc Trục.” + +“Bình không có quyền mở tuyến lọc.” + +“Vậy để nó ở lại lái xe cho tao.” + +Bình nhìn danh sách, rồi nhìn hai cửa kho trước khi nói: “Tôi ở lại ba ngày đổi lấy bản sao danh sách và giờ chuyển gần nhất. Không mở tuyến, không giao mã kho.” Tiến bước vào. “Không.” + +Bình quay, giận hơn nhẹ nhõm. “Anh theo tôi?” + +“Ừ.” + +“Việc tôi.” + +“Giờ liên quan xe, súng và tuyến chung.” + +Hổ cười. “Đúng kiểu hội đồng.” Tiến không dùng Bình làm món đổi. Hắn đưa một bản đồ tuyến tránh ba điểm sập tới bệnh viện — thông tin có giá nhưng không mở Ngọc Trục. + +Hổ kiểm với người giữ đường. + +“Đổi danh sách và tin cuối về gia đình Bình.” + +“Không tuyến lọc.” + +“Được.” + +Danh sách không có vợ Bình. Có tên con gái: **Bình An**, chín tuổi, chuyển từ một điểm trú gần ga Văn Quán ba tuần trước. Bình cầm giấy, tay run. + +Họ lần theo dấu mũi tên di dân trên tường. Không HANOI-07. Không Hậu Ký. Chỉ ngày, ký hiệu phấn, lời người sống và một chiếc nơ trẻ em buộc ở cột. Điểm cuối là trường tiểu học bỏ hoang. Bình An ở đó. + +Con bé không nhận ra cha ngay. Bình quỳ, nhưng không ôm trước. + +“An.” + +Nó nhìn lâu. “Bố?” Một từ làm người đàn ông từng cãi với súng và đường mất tiếng. + +Mẹ con bé chết vì sốc nhiệt trên đường. Một giáo viên đưa An cùng mười hai trẻ khác tới trường. Bình muốn đưa con về. An hỏi: “Các bạn?” + +Ngọc Trục đang thiếu nước. Hội đồng chỉ cho Bình đi tìm một người, không mười ba trẻ và bốn người lớn. Tiến cân nhắc lượng nước còn lại, sức nóng dưới mái tôn và tình trạng hai đứa trẻ đang sốt. + +“Đi tất.” + +Thủy hỏi: “Anh quyết thay hội đồng?” Tiến dừng. Thói quen cũ. Hắn gọi về bằng radio, trình tình trạng và xin biểu quyết khẩn. Bốn thuận, hai chống, một trắng. Điều kiện: khu mới vào Vành Ngoài, cách ly y tế và định mức tạm. + +Bình không biến nó thành một màn anh hùng cá nhân; quyết định ấy có người khác cùng biết và cùng gánh hậu quả. + +Bình An mất năm ngày mới gọi Bình là bố lần thứ hai. Anh xin nghỉ ba ngày khỏi tuyến. Tiến đồng ý không hỏi. Khi trở lại bản đồ, Bình thêm một ký hiệu mới vào mọi tuyến: nơi có trẻ em. + +Mục tiêu không phải giữ xe đứng yên, mà để trước khi đi qua, mỗi đoàn biết phía trước có chỗ, nước và quyền nhận hay không. Kẻ giữ đường không còn chỉ giữ đường cho hàng. + +Hổ trả chìa khóa xe cho Bình. Trên tấm vé tuyến mới, ô **người bảo lãnh** đã bị gạch bỏ. + +Chương 58: Mùa Dịch Nóng + +**17/08/2028** + +Tháng tám không có mưa. Mây hình thành rồi vỡ trước khi đủ dày. Ban ngày giữ trên năm mươi độ; ban đêm hiếm khi xuống dưới bốn mươi. Người ta gọi quãng ấy là **Mùa Dịch Nóng**: không phải một căn bệnh, mà là thời điểm nhiều hệ thống cùng suy sụp vì nhiệt. + +Ắc quy phồng. Một số thuốc xuống chất lượng nhanh hơn. Bể nước mọc tảo. Dây điện mềm. Người già lú. Trẻ chảy máu mũi. Những đội làm ngoài trời phải dời phần lớn công việc sang trước tám giờ sáng và sau năm giờ chiều; việc nào buộc phải làm giữa trưa đều chia ca ngắn, có người theo dõi nước uống, dấu kiệt sức và thời điểm rút. Không ai còn coi “chịu nóng giỏi” là một kỹ năng đáng khoe. + +Các điểm trú nhỏ trong nội đô rời bê tông, đổ về phía Tây theo tin đồn có nước và một căn cứ tên Ngọc Trục. Mỗi ngày cổng nhận thêm người. Hội đồng đặt ba vùng: + +- cứu cấp; +- tạm trú bảy ngày; +- xét nhập cộng đồng. + +Không phải người nào tới cũng được nhận. Có người bị từ chối rồi tìm được chỗ khác; cũng có người không qua nổi đêm kế tiếp. Thủy công khai số nước, số người và căn cứ của từng quyết định, nhưng mã hóa tên người bỏ phiếu. Minh bạch để người khác kiểm được lý do, không phải để chỉ đúng một cái mặt cho đám đông trút giận. + +Kha vận hành khác. Các điểm của hắn nhận người có kỹ năng, gia đình của họ và người cam kết làm việc. Quy tắc rõ, hàng chạy đều, tranh cãi ít. + +Một người ở Vành Ngoài nói: “Bên Kha không họp cả ngày.” + +Tuấn đáp: “Bên đó một người nói.” + +“Ít nhất biết nghe ai.” + +Tiến đứng cạnh bảng nước và nghe hết, không chen vào. Quy trình chậm có thể giết người; mệnh lệnh nhanh lại có thể hóa thành quyền vĩnh viễn. Hai rủi ro cùng hiện trên một tấm bảng. + +Ngày 17 tháng 8, trạm điện phía Tây cháy vì dầu cách điện quá nóng. Ba khu mất quạt và bơm, hơn hai nghìn người có nguy cơ trong vài giờ. Kha có máy phát. Ngọc Trục có kỹ thuật. Hổ có đường. Lâm có nhiên liệu. Hiệp định nước lần đầu phải hoạt động trong một khủng hoảng không do kẻ thù tạo ra. + +Ông Hòa nhận chỉ huy kỹ thuật nhưng không tự chui vào buồng nóng nhất. Ông chia đội thành hai lớp: Đức và hai thợ trẻ thao tác tại tủ, ông đứng ở vùng mát hơn đọc sơ đồ, kiểm dòng và quyết định khi nào phải rút. Bộ kẹp Tiến chế cho bàn tay ba ngón được dùng để giữ đầu dây trên bàn thử chứ không làm lý do cho ông liều thêm một phần cơ thể. + +“Đọc lại dòng pha hai,” ông nói. + +Đức đáp qua dây thoại: “Một trăm tám mươi chín.” + +“Lệch quá. Không đóng.” + +“Nhưng khu trường đang hết quạt.” + +“Đóng sai thì cả ba khu hết.” + +Đức chửi nhỏ, đo lại rồi phát hiện một đầu cốt đã đổi màu vì nhiệt. Họ mất thêm bốn phút để thay. Bốn phút ấy có người ngất ở sân trường; nhưng cầu dao không nổ khi điện trở lại. + +Bình dẫn xe nhiên liệu theo tuyến đã đánh dấu điểm có trẻ em và người nằm liệt. Anh không cho đoàn dừng phát nước dọc đường; mỗi điểm nhận đã có người trung gian chờ sẵn, nếu mở thùng giữa đám đông thì xe sẽ không tới trạm điện. Kha đưa nhiên liệu trước khi thỏa thuận giá. Tiến ghi điều đó vào sổ thay vì tự động gắn chữ “bẫy”. + +Thủy thấy hắn nhìn đoàn xe. “Chuẩn bị nếu hắn đòi giá sau. Nhưng đừng sửa việc vừa xảy ra cho hợp với người anh ghét.” + +“Biết.” + +“Anh hay nói chữ đó trước khi thật sự biết.” + +Tiến để ý kiến ấy nằm nguyên trên bàn. + +Họ cứu được hai khu. Khu thứ ba mất mười chín người trước khi quạt chạy. Kha đứng tại sân trường, áo đen thấm mồ hôi, trực tiếp chia nước theo hàng. Người dân quay ảnh. Tiến ở trạm điện, mặt phủ dầu và bụi, ít ai thấy. + +Ngày sau, ảnh Kha lan. Không còn chỉ “Kha Đen” của La Phù. Là người đưa điện trở lại. + +Kha gọi Tiến tối đó. + +“Khó chịu?” + +“Không.” + +“Nói dối.” + +“Anh muốn gì?” + +“Cho mày biết tao không làm tất cả vì Hậu Ký.” + +Tiến nhìn bản ghi nhiệt của trạm. “Tôi biết anh muốn thành phố còn sống.” + +Đầu bên kia không có tiếng cười ngay. “Thế là tiến bộ.” + +“Và anh muốn phần thành phố còn sống ấy chạy theo tay anh.” + +“Lại hỏng rồi.” + +“Cũng đúng.” + +Kha bật cười. “Ừ. Cũng đúng.” + +Một nhóm dân tới Ngọc Trục yêu cầu giao điều phối điện cho Kha. Không vì hắn làm sai. Vì hắn làm đúng và nhanh. Hội đồng không bác năng lực của hắn, nhưng cũng không giao vô thời hạn. Họ chốt một ủy quyền khẩn **bảy mươi hai giờ**, có thể gia hạn từng đợt nếu nhật ký tải được công khai và trạm điện cùng một đại diện khu dân cư xác nhận. Tổng thời gian không quá bảy ngày nếu không bỏ phiếu lại từ đầu. + +Kha đọc hết ba dòng giới hạn. “Các người rất thích ngày hết hạn.” + +Tuấn nói: “Vì người có quyền thường không thích.” + +Kha ký. + +Tối đó, Nam nhận nhiệm vụ treo bản ủy quyền cạnh bảng nhiệt. Cậu tìm trong một thùng đồ cứu từ Đại Hà được chiếc súng bấm giá cũ của siêu thị, lau sạch rồi dùng những cuộn nhãn còn lại để đánh giờ kiểm trên các bình nước dự phòng. Một bé trai nhìn những con số đỏ, hỏi một chai nước “giá bao nhiêu”. + +Nam dừng tay, nhìn cái máy từng chỉ dùng để định giá hàng trên kệ. + +“Không bán,” cậu nói. “Đây là giờ phải kiểm lại.” + +Cậu dán nhãn **22:00** lên nắp bình. Tiếng cửa cuốn ngoài sân rung vì gió nóng; vai Nam vẫn cứng lên, nhưng bàn tay không bỏ chiếc súng bấm giá. + +Tờ ủy quyền của Kha ở ngay phía trên, bên cạnh một ô lớn ghi ngày hết hạn. Quyền lực, lần đầu trong tuần, cũng có nhãn phải kiểm lại. + +Chương 59: Nội Gián Không Có Tên + +**18–22/08/2028** + +Ba đoàn xe nước bị chặn trong một tuần. Kẻ phục kích biết giờ xuất phát, tuyến dự phòng và số người hộ tống. Bình đổi đường lần ba, đi vòng thêm mười hai cây số và vẫn thấy chướng ngại được dựng trước. + +“Có người trong,” anh nói khi về. + +Không ai thích giả thuyết đó, nhưng danh sách người biết lịch chỉ có chín: Tiến, Bình, Nam, Tuấn, Hạnh, Đức, Linh, Thủy và chị Mai. Những người đã cùng giữ Ngọc Trục qua dịch và tấn công. + +Tiến đề nghị kiểm radio, chỗ ở và đồ cá nhân. Thủy hỏi: “Bằng chứng đủ để khám tất cả?” + +“Ba đoàn.” + +“Đủ để biết có rò. Không đủ để biến chín người thành nghi phạm như nhau.” + +“Chờ đoàn thứ tư?” + +“Đổi cách chia thông tin.” + +Họ tạo ba lịch giả, nhưng không chỉ thay tên đường. Ba xe mồi xuất phát gần cùng giờ, không dùng radio, mỗi xe mang một dấu sơn khác trên thùng và có người quan sát cả điểm đầu lẫn điểm cuối. Bình còn cho một xe quay vòng để kiểm bám đuôi. Chỉ người nhận lịch mới biết dấu nào ứng với tuyến nào. + +Tuyến phía bắc bị chặn đúng trước chiếc xe mang dấu tam giác. Không có người bám từ Ngọc Trục, hai tuyến còn lại không bị chuẩn bị trước. Người biết lịch tam giác: Hạnh, chị Mai và Nam. Nam trắng mặt. “Không phải em.” + +Tiến không vội nói “tôi tin cậu”. Hắn hỏi điều có thể kiểm: “Cậu đã nói với ai?” + +“Không ai.” + +“Viết ở đâu?” + +“Không.” + +“Ngủ?” + +Nam hiểu câu hỏi Dư Âm, lắc. “Không.” Hạnh giận vì bị thử. Chị Mai ngồi quá yên. + +Linh nhìn cô. “Mai.” Người y tá bật khóc. + +Con trai chị mắc ở một khu do người của Hổ kiểm soát. Người liên lạc không chỉ gửi một video mơ hồ. Trong đoạn quay, cậu đọc đúng câu hai mẹ con dùng làm mật hiệu từ nhỏ, đưa cổ tay có vết sẹo bỏng cho camera và nhắc tên loại kháng sinh mình dị ứng — những chi tiết Mai chưa từng ghi trong hồ sơ Ngọc Trục. + +“Chị thấy ngày quay?” Thủy hỏi. + +“Không.” + +“Bóng nắng?” + +“Không để ý. Tôi chỉ kiểm những thứ chứng minh đó là con tôi.” + +Thủy không gọi chị nhẹ dạ. Bằng chứng đủ thật để kéo một người mẹ, nhưng chưa đủ chứng minh video được quay gần đây. + +“Chị gửi mấy lần?” + +“Bốn.” + +Ba lần thành phục kích; lần đầu có thể kiểm tra. Tiến hỏi: “Người nhận?” + +“Không biết. Mảnh giấy dưới thùng thuốc.” + +Kẻ đó đã vào Vành Ngoài hoặc có người đi lại thường xuyên. Chị Mai nhìn Tiến. “Anh đuổi tôi?” + +Quy tắc cho phép trục xuất người làm lộ tuyến nước. Nhưng quy tắc cũng yêu cầu xét cưỡng ép và hậu quả. Hội đồng họp, không để Tiến quyết một mình. + +Một người muốn đuổi làm gương. Linh muốn giữ người y tế nhưng tước quyền thông tin. Bình muốn tìm con trước khi phán. Tuấn nói: “Nếu chúng ta đuổi mọi người bị kéo bằng gia đình, Vành Ngoài sẽ trống.” + +Kết quả: + +- Mai ở lại; +- tạm ngừng quyền truy cập lịch; +- mọi thao tác y tế có người cùng xác nhận; +- cộng đồng tổ chức tìm con; +- nếu tiếp tục giấu, rời căn cứ. + +Tiến bỏ phiếu trắng. Thủy hỏi sau: “Vì sao?” + +“Có lợi ích điều tra.” + +“Anh muốn giữ Mai làm đường tới người liên lạc.” + +“Ừ.” + +“Phiếu trắng không vô tư.” + +“Không.” + +Thủy không chỉ ghi lá phiếu trắng. Cô ghi cả lý do, vì minh bạch không chỉ là kết quả. Mai đặt một lịch giả khác dưới thùng thuốc. Người lấy là Sơn — cậu bé từng trèo rào đi tìm nước và được hứa dẫn tới mẹ nuôi mất tích. + +Nam bắt gặp. Không đánh. Cậu chặn lối và hỏi: “Họ hứa ai?” Sơn khóc. Không nội gián chuyên nghiệp. Hai người bị kéo bằng hai người thân. + +Họ theo dấu tới một nhà trọ bỏ trống. Không có con Mai, không có mẹ nuôi Sơn. Chỉ radio và giọng biến dạng: + +“Các anh xây cộng đồng bằng những người còn nợ người chết.” + +Thủy hỏi: “Ông là Vòng Tròn Vỡ?” + +“Không quan trọng.” + +“Rất quan trọng. Vì nguồn quyết định mục đích.” + +Giọng đáp: “Mục đích là chứng minh không cổng nào giữ được người khi quá khứ của họ ở ngoài.” Tiến hỏi con Mai. + +“Còn sống. Tuyến phía nam.” + +“Đổi?” + +“Bản đồ cửa Hoàng Thành.” + +Tiến tắt radio. Không đàm phán bằng bí mật toàn mạng. Thủy xem video cũ: bóng nắng, tiếng tàu điện kim loại co, màu tường trường học. Bình đối chiếu đường. Họ tìm được địa điểm trong một ngày. + +Đột kích không nổ súng. Sáu người bị giữ, trong đó có con trai Mai, được cứu. Người trông đã rút, để lại không biểu tượng. + +Từ “nội gián” hóa ra đã đặt sai giả thuyết từ đầu. + +Là một phương pháp: dùng người mất tích làm dây kéo người bên trong. Ngọc Trục lập nhóm tìm người mất tích, có sổ công khai và người xác minh tin. Không hứa tìm được tất cả. + +Nhưng mỗi người được tìm bằng cộng đồng là một sợi dây kẻ khác không còn giữ riêng. Chị Mai trở lại khu y tế dưới giám sát. Việc cứu con không xóa lỗi đã gây ra. Chị Mai đọc bản ghi quyết định trước hội đồng rồi ký tên. + +Sơn không bị đuổi. Cậu làm trong nhóm tìm người, bắt đầu bằng việc vẽ lại khu đã được dẫn tới. Ngọc Trục không hết phản bội sau việc đó; họ chỉ có thêm một cách để phát hiện và xử lý nó mà không cần giả vờ mọi người đều tốt. + +Mai ngồi dưới mái phản nhiệt, hai tay ôm cốc nước chưa uống. Trên bàn trước mặt chị, ba lịch giả đã được gấp lại; chỉ một lịch còn dính bụi đường. + +Chương 60: Phương Án Của Phương + +**22/08/2028** + +Sau hơn ba tuần ở Ngọc Trục, Phương vẫn không nhận mình đã thuộc về nơi nào. Ban ngày cô giúp Linh và chị Mai. Buổi tối cô gửi báo cáo ca bệnh và số liệu nước cho Vòng Tròn Vỡ qua một điểm trung lập. Phúc không hỏi nội dung, nhưng mỗi lần em gái rời cổng, anh lại nhìn theo cho tới khi bóng cô khuất hẳn sau đoạn tường. + +Phương biết. Cô cũng biết anh đang cố không biến việc tìm được em thành quyền giữ em lại. + +Trong khu y tế, Phương tận dụng những miếng nhãn màu còn sót trong túi đồ cứu từ quầy trà sữa cũ ở Đại Hà: xanh cho có thể uống, vàng cho cần theo dõi, đỏ cho chuyển gấp. Linh ban đầu định bỏ vì màu sắc không phải chuẩn y khoa. Sau hai ngày, cô giữ lại hệ màu nhưng bắt Phương viết thêm giờ, dấu hiệu và người đánh giá. + +“Ở quầy cũ em dán nhãn để khỏi giao nhầm đường với không đường,” Phương nói. + +“Ở đây giao nhầm đắt hơn.” + +“Em biết.” + +“Vậy ghi đủ.” + +Phương ghi đủ. Cô không cần mọi thứ mình mang từ đời trước tận thế phải bị vứt đi; chỉ cần biết thứ nào phải học lại. + +Ngày 22 tháng 8, khi ba bộ đo độc lập cho cùng một xu hướng, Phương yêu cầu gặp Vũ Mạnh Quân. + +“Để quay lại?” Phúc hỏi. + +“Để ông ấy dừng kế hoạch cắt mạch Hồ Tây.” + +“Quân không nghe.” + +“Anh ấy nghe số nếu người đưa số không bắt anh ấy phải tin người trước.” + +Phúc chống tay lên bàn. “Em biết anh ấy sẽ cho người đo lại?” + +“Em biết anh ấy sẽ không chịu dùng bộ đo của Tiến.” + +“Khác gì?” + +“Khác. Em chuẩn bị điểm đo ngoài vùng Ngọc Trục.” + +Phúc nhìn bản đồ cô đã đánh sẵn ba điểm. Câu “đừng đi” lên tới miệng nhưng không thành tiếng. “Mấy giờ về?” + +“Trước tối. Nếu trễ, Khánh An báo.” + +“Không tự đổi điểm hẹn.” + +“Anh cũng đừng tự tới cứu nếu nghe một tin chưa xác minh.” + +Phúc nhăn mặt. “Em học nhanh.” + +“Nhờ anh làm mẫu xấu.” + +Tiến không biến cuộc gặp thành màn phô lực lượng. Khánh An đi cùng Phương với vai trò nhân chứng và kiểm an ninh, không đại diện Ngọc Trục. Cuộc gặp ở một ga bỏ hoang. Quân tháo mặt nạ khi thấy Phương. Vai ông còn vết thương cũ, giọng không giống kẻ cuồng tín. + +“Em ở với họ.” + +“Em đang ở nơi có giường bệnh.” + +“Dữ liệu HANOI-07?” + +“Áp lực nước. Ba bộ đo.” + +Quân không nhận tập giấy ngay. “Thiết bị của ai?” + +“Một của Ngọc Trục, một của nhóm dân đường ven hồ, một của người bên anh. Mã máy ở cuối.” + +Ông mới cầm lên. Đọc xong vẫn lắc đầu. “Có thể cùng bị sai theo một điều kiện môi trường.” + +Phương gật. “Nên anh cử người đo lại ở hai điểm này. Không đi vào vùng Tiến.” + +Quân nhìn cô lâu hơn. “Em tới đây để thuyết phục hay để bắt tôi tự kiểm?” + +“Để anh không thể nói em chỉ mang kết luận của người khác.” + +Khánh An dựa cột, mắt vẫn theo hai lối thoát Quân đã đặt người. “Nếu ông đã quyết cắt rồi thì nói thẳng. Đừng bắt số liệu đóng vai giấy phép.” + +Quân nhìn cô. “Cô bỏ Kha rồi theo Tiến?” + +“Không theo.” + +“Người không chọn phe thường đứng cạnh phe mạnh.” + +Khánh An chỉ chiếc gương nhỏ gắn ở góc trần. “Ông đặt người ở hai cửa và một người nhìn qua gương. Ông cũng không đứng một mình.” + +Phương chen vào trước khi cuộc gặp trượt thành cuộc thi xem ai sắc hơn. + +“Nếu cắt toàn tuyến, nhiệt nền tăng. Nếu giữ nguyên, áp lực cũng tăng. Em đề nghị điều tiết.” + +“Điều tiết có thể giữ một thứ đáng lẽ phải dừng.” + +“Đúng. Nên có ngưỡng ở hai đầu và một ngắt cơ không qua bộ điều khiển. Nếu số vượt ngưỡng, bên anh tự ngắt được.” + +“Cắt sạch thì chắc chắn dừng.” + +“Và chắc chắn dồn tải sang chỗ khác nếu mô hình này đúng. Em không muốn thành phố làm phép thử một lần chỉ để khỏi phải sống với chữ 'chưa biết'.” + +Quân hỏi: “Em quên Láng?” + +“Không. Em nhớ người chết. Em cũng nhớ những người sống vì khóa không sập.” + +“Tiến đang dùng cả anh lẫn em.” + +“Anh cũng dùng em.” + +Quân không trả lời ngay. Phương đặt tập giấy xuống giữa hai người. + +“Anh cứu em ở Đại Hà. Em không quên. Nhưng chuyện đó không khiến mọi quyết định sau của anh tự động đúng. Và em không muốn mỗi lần bất đồng lại phải trả món nợ ấy thêm lần nữa.” + +Câu nói không làm Quân đổi niềm tin. Nó chỉ buộc ông tách một việc đã làm đúng khỏi quyền quyết định những việc chưa xảy ra. + +Cuối cùng, Quân đồng ý: + +- hoãn cắt mười ngày; +- cử hai người đo độc lập; +- giữ một ngắt cơ nếu thiết bị điều tiết tự vượt giới hạn; +- không công bố kết luận trước khi có số đo mới. + +Đó chưa phải hòa giải hay đầu hàng; chỉ là khoảng thời gian đủ để đo trước khi phá. + +Trên đường về, Khánh An hỏi: “Cô ở Ngọc Trục?” + +“Chưa biết.” + +“Phúc?” + +“Là anh em không nghĩa cùng phe.” + +“Đúng.” + +“Cô với Kha?” + +Khánh An nhìn đường ray. “Hắn từng cứu tôi.” + +“Vậy cô nợ?” + +“Có.” + +“Nợ có quyền quyết?” + +“Không.” + +Phương gật. Cô không cần hai người có cùng câu chuyện để hiểu một nguyên tắc giống nhau. + +Tối đó cô nói với Phúc: “Em không về vì anh.” + +“Biết.” + +“Em cũng không quay lại vì Quân.” + +“Ừ.” + +“Em muốn lập mạng y tế không mang biểu tượng phe.” + +Phúc nghĩ một lúc. “Em cần gì ở anh?” + +“Đừng đứng ở cửa mỗi lần em đi.” + +Anh thở ra. “Khó.” + +“Làm thử.” + +“Còn mạng y tế?” + +“Linh. Mai. Hai người bên Quân nếu họ đồng ý. Sau đó thêm.” + +Linh nghe đề nghị, đưa một túi thuốc cơ bản rồi giữ lại quai túi. + +“Không miễn phí.” + +Phương cau mày. “Nước?” + +“Báo cáo ca bệnh, tồn kho, phản ứng thuốc. Không tên bệnh nhân nếu không cần.” + +“Được.” + +Linh mới buông tay. + +Phương lấy ba miếng nhãn màu còn sót lại từ Đại Hà, dán lên các túi mẫu rồi viết giờ bằng chữ in hoa. Mạng y tế trung lập bắt đầu bằng một túi thuốc, một sổ giao nhận và những miếng nhãn vốn được sản xuất để dán lên cốc trà sữa. + +Việc Hậu Ký thiếu Phương không biến cô thành một Điểm Mù huyền bí. Người truy vấn trước đó đơn giản đã nhìn quá chăm vào các phe lớn và bỏ qua khả năng một cô gái mười chín tuổi có thể kéo cả cấu trúc qua khe giữa họ. + +Phương trải bản đồ mạng y tế giữa bàn. Cô không ngồi về phía Quân hay Phúc. Chiếc ghế còn trống được kéo sát mép bản đồ, vừa đủ để cô tự đặt túi xuống. + +Chương 61: La Phù Trở Lại + +**23/08/2028** + +Ba kho lương La Phù cháy cùng một đêm. Khói đỏ đen hiện trên đường chân trời trước khi radio báo. Lương của bảy khu nằm trong đó; nếu mất hết, phía Tây có chưa đầy mười ngày trước khi đói diện rộng. + +Kha gọi Tiến. + +“Không phải tao.” + +“Biết.” + +“Tin nhanh?” + +“Nếu anh đốt, anh không gọi trước khi người khác thấy.” + +“Có thể tao muốn mày nghĩ vậy.” + +“Giữ trò đó cho lúc còn thời gian.” + +Các nhóm từng tranh La Phù cùng kéo tới: xe của Kha, đường của Hổ, kỹ thuật Ngọc Trục, người Vòng Tròn Vỡ vì kho của họ cũng ở đó, đội cũ của cơ quan khẩn cấp. Lần đầu họ tới La Phù không để chiếm. + +Lửa được đặt trong trục thông gió, khiến nước phun ngoài không tới tâm. Hơi nóng trong hành lang bảo trì vượt ngưỡng đội cứu có thể đứng lâu. Ông Hòa từ chối phương án để mình bò vào chỉ vì biết dây. + +“Đức vào. Tôi đọc sơ đồ.” + +Tiến hỏi: “Chắc?” + +“Không. Vì vậy buộc dây và đặt giờ.” + +Đức mặc lớp áo phản nhiệt chắp từ đồ hàn, mang khẩu trang lọc khói và dây kéo. Ông Hòa ngồi ngay miệng trục, sơ đồ trải trên một tấm carton. Mỗi lần Đức đi quá một nhánh, ông bắt đọc màu dây, ký hiệu hộp và nhiệt kế cơ. Ca vào được giới hạn ngắn; quá mốc, dù chưa xong cũng phải rút cho người khác thay. + +“Cậu đọc hệ lạnh tốt hơn đường báo cháy,” ông Hòa nói qua dây thoại. “Nên đừng đoán. Hộp thứ hai bên phải, dây trắng có vạch đen.” + +“Thấy.” + +“Không cắt. Rút cầu chì cạnh nó.” + +“Chốt kẹt.” + +“Lùi ra, đổi kìm. Đừng thắng một cái chốt bằng phổi.” + +Đức chửi nhưng lùi. Người kế tiếp đưa đúng dụng cụ vào. Quạt hút dừng trước khi cháy lan kho thứ tư. + +Bình tổ chức tuyến xe theo nhịp ba phút. Anh đánh dấu nơi có trẻ em không để đoàn dừng cứu bất kỳ ai nhìn thấy, mà để các điểm giao nhận biết trước có đủ nước, bóng râm và người giữ trật tự hay không. Một xe bị đám đông tràn tới ở đầu ngõ; Bình bỏ tuyến ngắn, vòng qua đường xấu hơn nhưng còn kiểm soát được. + +Trong lúc chờ chiếc xe thứ sáu quay đầu, anh nhìn thấy một thùng bánh quy cháy sém có hình con thỏ gần giống con Bình An từng ôm trong ảnh. Một gói bên trong còn nguyên. Bình cầm lên, nhìn nhãn rồi đặt vào khay kiểm kê thay vì bỏ túi. + +Hổ thấy. “Một gói thôi.” + +“Đúng. Nên ghi được.” + +“Con gái anh thích?” + +Bình không trả lời ngay. “Nếu kho còn, nó có cơ hội tự chọn thích gì.” + +Hổ gật, không nói thêm. + +Kha điều người bốc hàng, không giữ riêng. Hổ mở đường; người của hắn tự nộp dao vào một thùng khóa trước khi vào khu xếp hàng vì tất cả hiểu một cuộc tranh cướp nhỏ đủ làm cả kho cháy tiếp. Nam ở phòng radio nghe tiếng cửa cuốn được kéo bằng tay. Âm thanh làm cậu khựng lại. + +Phúc gọi qua kênh cơ: “Nam.” + +Không có tiếng trả lời trong hai giây. + +“Đọc hướng gió.” + +Nam thở ra. “Đông nam. Tám tới mười.” + +“Xe ba?” + +“Đổi tuyến B.” + +Cậu tiếp tục đọc tải. Không ai bảo “đừng sợ”; mọi người chỉ giữ công việc đủ rõ để nỗi sợ không phải ra quyết định thay cậu. + +Họ cứu được khoảng hai phần ba kho thứ tư. Ba kho còn lại mất. + +Trong trục cháy, Khánh An tìm thấy một thiết bị kích mang mã hậu cần của bộ máy cũ. Nó không thuộc Vòng Tròn Vỡ, cũng không mang dấu Null. Một loa ngoài đường bật: + +“Kho lương chiến lược thuộc quyền quản lý khẩn cấp. Mọi hành vi chiếm giữ là bất hợp pháp. Người dân tập trung tại điểm phân phối chỉ định.” + +Những điểm đó đã chết. + +Kha bắn tắt loa. + +Thủy nhìn hắn. “Anh vừa bắn vào biểu tượng.” + +“Bắn loa.” + +“Người ta sẽ kể khác.” + +“Thì ghi đúng là tao bắn loa.” + +“Được.” + +Sau đám cháy, lượng lương còn lại được đưa ra trước hội đồng ngay tại sân kho. Kha đề nghị một kho trung tâm có vũ trang. Tiến phản đối vì một lần chiếm là mất hết. Họ chọn bốn kho nhỏ, mỗi kho do ba nhóm cùng giữ chìa. Vị trí được chia cho các bên ký và đội giao nhận, không phát rộng lên radio chung. + +Kha chỉ vào sơ đồ. “Tăng thêm hai mươi phần trăm đường chạy.” + +Bình đáp: “Nhưng mất một kho chưa chết cả mạng.” + +“Anh lái nên anh trả xăng?” + +“Không. Tôi chỉ nói chi phí thật.” + +Kha liếc sang Tiến. “Thấy chưa? Người của mày học cãi.” + +Bình cắt ngang ngay: “Tôi không phải người của anh ấy.” + +Một vài người cười, đủ ngắn để không quên khói vẫn đang làm cay mắt. + +Kha ký dù không thích. + +Khi xe cuối rời, Tiến đứng nhìn nơi từng là bãi máu trong ký ức cũ. Kiếp trước, Kha lấy La Phù bằng bạo lực. Lần này, hắn cùng cứu kho và không giữ phần lớn nhất. + +Kha đứng cạnh. “Mày nhìn gì?” + +“Cái đang xảy ra.” + +“Đừng yêu nó quá.” + +“Không.” + +La Phù vẫn cháy. Người vẫn chết vì khói và nhiệt. Nhưng bốn phe đã cùng cứu phần lương còn lại, không phải vì họ bỗng tin nhau mà vì cơ chế chia khóa khiến cướp một kho không còn đủ để thắng. + +Ở danh sách kiểm kê cuối ngày, Bình tìm thấy gói bánh quy con thỏ. Nó được ghi như mọi món khác. Anh khoanh mã thùng rồi viết bên cạnh: **nếu tới được khu trẻ em, để họ tự chia.** Không ghi tên Bình An. + +Hậu Ký sai thêm một dòng bằng những việc nhỏ như thế. + +Chương 62: Tên Gọi Thành Quyền Lực + +**24/08/2028** + +Sau La Phù, ảnh Kha xuất hiện tại các điểm phát lương. Không áp phích chính thức. Chỉ những tờ in từ camera: hắn đứng trên thùng xe, áo đen, tay chỉ nơi dỡ bao. + +Bên dưới có người viết: + +**KHA ĐEN GIỮ ĐƯỜNG.** + +Tên từng dùng để sợ trở thành tên người ta gọi khi cần hàng tới. Kha không phát ảnh. Cũng không gỡ. Tiến hỏi qua radio: “Anh cho phép?” + +“Không cấm.” + +“Khác?” + +“Rất.” + +Kha mở ba bếp tập thể. Người làm việc nhận khẩu phần; trẻ em và người già theo định mức. Kẻ trộm bị đuổi, kẻ cướp xe bị đánh gãy tay trước đám đông. Người ta truyền nhau rằng ở khu Kha không ai dám cướp nước; cũng chẳng mấy ai dám hỏi xem sổ phân phối ghi gì. Thủy tới phỏng vấn, mang máy ghi và hai người chứng kiến. + +“Anh dùng cứu trợ xây quyền,” cô nói. + +“Đúng.” + +“Không phủ nhận?” + +“Người đói không ăn lời khiêm tốn.” + +“Nhưng sống dưới luật anh.” + +“Đúng.” + +“Luật ai đặt?” + +“Tao.” + +“Có xét?” + +“Có người chứng kiến.” + +“Có quyền phản đối?” + +“Có thể rời.” + +“Đi đâu?” + +Kha không trả lời. Giới hạn của trật tự hắn xây nằm trong câu đó: quyền rời đi vô nghĩa nếu bên ngoài không có nước. Thủy hỏi về người bị đánh gãy tay. + +“Nếu thả, xe sau bị cướp,” Kha nói. + +“Nếu giết?” + +“Không cần.” + +“Vậy anh tự chọn hình phạt vừa đủ?” + +“Ừ.” + +“Dựa trên gì?” + +“Hiệu quả.” + +“Không công lý?” + +“Công lý là từ người đủ thức ăn dùng.” + +Thủy không tranh bằng đạo đức trừu tượng. “Một ngày người của anh đánh nhầm, ai sửa?” Kha im. Câu hỏi thực tế hơn lời kết án. + +Khánh An tới sau. Người cũ chào cô theo thói quen. Kha đưa một hồ sơ. + +“Người thay tao nếu chết.” + +Cô không cầm. + +“Không.” + +“Chưa xem.” + +“Không cần. Anh đang biến tổ chức thành một người khác.” + +“Cần kế nhiệm.” + +“Cần quy trình. Nếu anh chết, người giữ xe, kho và súng đánh nhau trước khi hồ sơ được mở.” + +Kha nhìn. “Tiến dạy?” + +“Nhìn Ngọc Trục.” + +Câu đó làm hắn khó chịu hơn. Khánh An đề nghị: + +- kho cần ba khóa; +- điều xe cần hai xác nhận; +- đội trưởng bỏ phiếu người điều hành tạm; +- quyền khẩn cấp hết hạn sau bảy ngày; +- hình phạt phải có người ngoài đội chứng kiến. + +Kha cười. “Cô ở Ngọc Trục lâu quá.” + +“Có thể.” + +Tối đó, Kha triệu tập các đầu mối. Hắn không thừa nhận Thủy đúng, nhưng vẫn bắt đầu viết quy trình. Thủy hỏi câu cuối: “Nếu ngày 29 Hậu Ký bảo anh giết Tiến, anh làm không?” Kha nhìn máy ghi. + +“Không trả lời.” + +“Vì không biết?” + +“Vì câu trả lời hôm nay có thể thành dây kéo ngày đó.” + +Lần đầu, Kha từ chối tạo một bản ghi tương lai dễ dùng. Thủy tắt máy. Ngoài bếp, người ta vẫn gọi Kha Đen. + +Một cái tên trở thành quyền lực khi nó xuất hiện trên xe, nồi ăn, luật và nỗi sợ. Nhưng quyền lực bền không chỉ nhờ một người. Kha bắt đầu học điều đó không vì trở nên tốt. Vì hắn hiểu một hệ thống phụ thuộc mình là một hệ thống có một điểm hỏng. + +Ngôn ngữ của Tiến đã len vào cách Kha xây quyền lực. Chiều ngược lại cũng đúng: Tiến buộc phải học rằng quy trình nào cũng có người hưởng lợi nếu chẳng ai hỏi ai đã viết nó. + +Ngày sau cuộc phỏng vấn, người bị đánh gãy tay được đưa tới điểm y tế của Phương. Tên anh ta là Vinh, từng cướp xe vì con gái sốt. Chiếc xe bị cướp cũng chở thuốc cho ba đứa trẻ khác. Kha tới, không xin lỗi. + +“Anh đánh nhầm người?” Thủy hỏi. + +“Không.” + +“Vậy câu hỏi ai sửa khi anh đúng sự việc nhưng sai mức phạt vẫn còn.” + +Kha nhìn cánh tay Vinh được nẹp. “Tao sẽ trả thuốc và lương ba tháng cho gia đình hắn.” + +“Đền bù không phải xét lại.” + +“Cô muốn gì?” + +“Người ngoài đội anh được xem lời khai trước khi hình phạt thi hành.” + +Kha không đồng ý ngay. Đêm đó, hắn cho hoãn một vụ phạt khác vì nhân chứng không thống nhất. Người của hắn thấy đó là yếu; gia đình người bị giữ thấy đó là lần đầu có thời gian nói. Tên **Kha Đen** từ đó mang hai câu chuyện cùng lúc: người làm xe tới đúng giờ và người có thể làm một cánh tay gãy. Quyền lực thật không chỉ sống trong hình ảnh người ta muốn giữ; nó sống cả trong điều người ta sợ kể nhỏ ở bếp ăn. + +Chương 63: Người Không Có Quyền Thừa Kế + +**26/08/2028 – 04:10** + +Xe của Kha bị đánh lúc 04 giờ 10, hai ngày sau khi hắn bắt đầu viết quy trình kế nhiệm. Mìn tự chế làm vỡ bánh trước. Viên đạn thứ hai xuyên vai phải khi Kha xuống xe. Đội hộ tống kéo hắn vào một nhà xưởng, nhưng không thống nhất nên đưa về kho chính, điểm y tế hay trạm bí mật. + +Tin tới Khánh An qua radio cũ của đội can thiệp. Cô lấy súng và túi cứu thương. Tiến chặn cổng. “Đi đâu?” + +“Đưa Kha ra.” + +“Có thể bẫy.” + +“Đúng.” + +“Cô không còn người của hắn.” + +“Không cần.” + +“Vì nợ?” + +Khánh An kiểm băng đạn, không nhìn hắn. “Vì nếu Kha chết lúc này, ba kho và sáu đội xe sẽ tự chọn chủ. Phía Tây loạn trước khi người bắn kịp làm gì tiếp.” Một lý do chính trị. + +Không phủ nhận lý do cá nhân. Hội đồng cho Bình lái và Phương đi y tế. Tiến ở lại Ngọc Trục, dù bản năng muốn tự đi kiểm. Một người lãnh đạo không thể luôn rời hệ thống để xử lý người quan trọng nhất. + +Tại nhà xưởng, Kha nằm trên bàn gỗ, máu thấm áo đen. Người giữ xe muốn rút về kho trung tâm; người giữ súng nói tuyến đã lộ; người quản lương đòi mở mã khẩn cấp. Quy trình kế nhiệm chưa ban hành, nên không ai có quyền chốt. + +Khánh An bước vào. + +“Im.” + +Họ im theo thói quen cũ. Cô kiểm vết thương. Phương cắt áo, xác định đạn xuyên phần mềm vai, chưa vào ngực. + +Kha tỉnh khi được băng ép. Chiếc nhẫn đã được Phương tháo để tay không sưng kẹt; nó nằm trong khay kim loại cạnh giường, để lộ mảnh thẻ cháy sém của Minh Khôi. Khánh An đặt khay trong tầm mắt hắn nhưng không đeo lại thay. Quyền lựa chọn vẫn phải chờ người tỉnh. + +“Cô về,” hắn nói. + +“Không.” + +“Vẫn nói.” + +“Để anh khỏi tưởng.” + +Kha bật cười rồi nhăn mặt vì đau. Khánh An hỏi người của hắn: “Quy trình khi thủ lĩnh mất khả năng?” Không một ai đưa ra được bản nào. + +Kha nhắm mắt. “Trong két.” + +“Không ai có đủ mã.” + +“Đúng.” + +“Thấy chưa?” + +“Thấy.” + +Họ đưa hắn tới điểm y tế trung lập của Phương, không Ngọc Trục và không kho Kha. Quyết định khiến hai đội của hắn nghi bị cướp người. + +Trong sáu giờ Kha bất tỉnh: + +- một đội chặn đường tự ý; +- một kho ngừng phát lương; +- hai đội trưởng ra lệnh trái nhau; +- Hổ đưa người tới chiếm ngã tư; +- nhóm bộ máy cũ phát thông báo yêu cầu kho giao quyền. + +Lần đầu tiên, mạng lưới của Kha phải vận hành với giả định hắn có thể chết. Hội đồng phía Tây họp khẩn. Một số người đề nghị Ngọc Trục tiếp quản xe để “giữ ổn định”. + +Tiến phản đối. Tuấn hỏi: “Đây là cơ hội giảm quyền hắn.” + +“Lấy lúc người ta nằm là cướp.” + +“Nếu hắn là ta?” + +“Có thể hắn lấy.” + +“Vậy sao không?” + +“Vì thỏa thuận chỉ có giá khi áp dụng lúc có lợi để phá.” + +Hội đồng cử người bảo vệ kho nhưng không mở và không điều xe. Mọi con dấu được ghi hình. Kha tỉnh lúc chiều. Khánh An báo: “Kho còn nguyên.” + +“Tiến không lấy?” + +“Không.” + +“Ngốc.” + +“Có thể.” + +“Cô giữ?” + +“Hội đồng giữ quy tắc.” + +Kha nhìn trần. Tổ chức hắn sống qua một đêm nhờ người ngoài không lợi dụng điểm yếu. Điều đó làm hắn khó chịu hơn viên đạn. Ba ngày sau, hắn ban cơ chế mới: + +- ba người giữ ba phần mã kho; +- lệnh điều xe cần hai xác nhận; +- người điều hành tạm do đội trưởng bỏ phiếu; +- quyền khẩn cấp hết hạn sau bảy ngày; +- không ai thừa kế toàn bộ. + +Khánh An từ chối vị trí kế nhiệm. + +“Nếu quy trình chỉ hoạt động lúc anh còn tỉnh để ký, thì nó chưa phải quy trình,” cô nói. “Anh cần một cơ chế chạy được khi anh nằm như hôm nay.” + +Kha nhìn nhẫn. “Còn cô cần gì?” Lần đầu Khánh An trả lời không bằng nhiệm vụ. + +“Tôi muốn tới ngày 29 mà không phải giết ai chỉ vì một bản ghi nói cần.” + +Kha gật. “Khó.” + +“Biết.” + +Hắn sống. Hình ảnh bất tử vỡ. Nhưng quyền lực không giảm như kẻ bắn mong. Một người có thể bị thương mà kho vẫn mở đúng giờ nguy hiểm hơn một thủ lĩnh chỉ giữ mọi chìa trong túi. + +Tiến đọc kỹ quy trình Kha gửi công khai. Có những dòng giống Ngọc Trục. Có những dòng lạnh hơn. Hai hệ thống đang học nhau. + +Ngọc Trục đã học cách chia mã từ chính những gì họ sợ ở Kha; phía Kha lại học cách phân quyền sau khi nhìn Ngọc Trục sống qua khủng hoảng. Ranh giới giữa hai hệ thống vẫn còn, nhưng không bên nào còn độc quyền với những ý tưởng tốt. + +Trong lúc Kha bất tỉnh, một đoàn xe thuốc tới ngã tư do hai đội cùng nhận lệnh. Cả hai đều có mã hợp lệ, không ai chịu lùi. Phương phải rời bàn mổ gọi Khánh An; cô không chọn đội thắng mà buộc họ tách hàng theo danh sách bệnh viện đã xác nhận. + +Sau đó, Khánh An viết quy trình đầu tiên của mình, không ký tên Kha hay Ngọc Trục. Bất kỳ lệnh khẩn nào trùng nhau phải dừng tại điểm trung lập, đối chiếu mục tiêu và người nhận trước khi xe đi tiếp. Người điều phối không được thuộc một trong hai đội tranh chấp. + +“Cô đang lập phe?” Tiến hỏi khi đọc. + +“Không. Tôi đang lập một công việc.” + +“Có người theo?” + +“Ba người hôm nay. Ngày mai có thể không.” + +Đó là thứ đầu tiên Khánh An xây không phải vì Kha ra lệnh hoặc vì cần chống Kha. Mạng kiểm tra chéo bắt đầu từ một đoàn thuốc suýt đứng yên vì hai mệnh lệnh đều hợp lệ. + +Chương 64: Ngọc Trục Bỏ Phiếu + +**27/08/2028** + +Quyết định khiến Tiến thua phiếu liên quan tới một khu trú phía nam. Bể nước ở đó nhiễm dầu. Một trăm mười ba người phải di chuyển trong hai ngày. Ngọc Trục có thể nhận bốn mươi theo mức an toàn, Kha nhận ba mươi, các khu khác chia phần còn lại nếu đủ xe. + +Tiến muốn mở rộng Vành Ngoài thêm năm mươi người. Linh phản đối vì dịch mới qua. Bình nói xe có thể đưa một nửa đi xa hơn. Tuấn nhắc nước chỉ đủ mười một ngày nếu nhận thêm. Hạnh, đại diện Vành Ngoài, hỏi: “Nếu ngày mai lại có nhóm khác?” + +Tiến biết mọi lý do chống đều đúng. Hắn vẫn đề nghị mở. Phiếu: + +Hai thuận. Bốn chống. Một trắng. + +Tiến thua. Tuấn hỏi: “Anh chấp nhận?” + +“Không thích.” + +“Không hỏi thích.” + +Tiến rà bảng. “Chấp nhận.” Kế hoạch chia đoàn được thực hiện. Đoàn đầu tới Ngọc Trục. Đoàn hai đi khu Kha. Đoàn ba phải tới điểm xa hơn. + +Ba giờ trước khi xe đi, Bình đã tự cúi dưới gầm, kiểm lốp, dầu, nước làm mát và bánh dự phòng. Đến đoạn dốc phía nam, anh vẫn nghe tiếng kim loại trước người khác: một tiếng rít ngắn, rồi bánh sau khóa cứng. Khi tháo cụm, họ mới thấy vết nứt moay-ơ chạy từ phía trong — nơi mắt thường không thể nhìn nếu không tháo toàn bộ. Ổ bi đã vỡ, trục kéo gãy ba bu-lông và làm vành méo. Bánh dự phòng đúng cỡ nằm ngay trên xe, nhưng không có gì nguyên vẹn để lắp nó vào. + +Dải nhiệt tới sớm gần hai giờ. Bộ chuyển tiếp radio ở đoạn thấp mất nguồn; xe cứu đầu tiên phải vòng vì một nhịp cầu đã lún. Kế hoạch chín mươi phút không có điểm trú giữa tuyến, nên khi hành trình kéo dài gấp ba, những người đã mất nước và có bệnh nền nằm giữa bê tông nóng mà không còn lớp bảo vệ thứ hai. Mười bảy người chết trước khi xe cứu tiếp cận. + +Sau đó Bình đặt chiếc moay-ơ nứt giữa bàn hội đồng. Mọi bánh dự phòng họ mang theo đều nằm cạnh nó, đúng cỡ và vô dụng. Hình ảnh đủ rõ: kế hoạch đã chuẩn bị cho một hỏng hóc đơn lẻ, còn tai nạn lại đến theo chuỗi. Tin truyền về khiến khu cổng Ngọc Trục lặng hẳn. Nếu hội đồng làm theo phương án của Tiến, nhóm kia có thể đã sống; cũng có thể Vành Ngoài quá tải và những người khác chết sau đó. + +Không có phương án đối chứng. Tuấn ngồi dưới mái tôn cả đêm. “Lỗi của chúng ta.” + +Tiến đáp: “Đúng.” + +“Anh có thể nói đã cảnh báo.” + +“Không.” + +“Anh thua phiếu.” + +“Vẫn thuộc hội đồng. Vẫn ký kế hoạch.” + +Không dùng thất bại để rửa tay. Gia đình người chết tới. Một người đàn ông tát Tuấn. Bình bước lên, Tiến giữ. + +Tuấn không đánh lại. + +“Các anh ngồi mát rồi quyết con tôi đi đâu,” người đàn ông nói. + +Tuấn nhìn mái tôn nóng. “Không mát.” Một câu vụng, gần như tệ. + +Tiến nói: “Chúng tôi quyết và kế hoạch không đủ.” + +“Các anh bị gì?” + +Không hình phạt nào đưa người chết về. Một số đề nghị giảm khẩu phần hội đồng. Linh phản đối. + +“Đau khổ không thay cho quản trị được. Anh nhịn ăn bảy ngày chỉ làm thêm một người ra quyết định tệ đi.” + +Hội đồng chọn hậu quả có chức năng: + +- mọi thành viên phải tham gia chuyến di chuyển kế; +- kiểm lốp, moay-ơ, trục và nhiệt ổ bi thay vì chỉ nhìn bánh dự phòng; +- mỗi đoàn có hai phương án cứu hộ không dùng cùng một cầu hay bộ chuyển tiếp; +- dựng điểm trú nhiệt giữa tuyến trước khi chở người; +- quyết định và phiếu được lưu; +- gia đình người chết có quyền đọc biên bản, không quyền hành hung. + +Chuyến sau, Tiến đi cùng. Một lốp tách lớp vì nhiệt ở giữa đường. Xe không tiếp tục chạy, nhưng đoàn cũng không nằm phơi trên mặt bê tông: người được chuyển vào điểm trú, xe cứu thứ hai đi tuyến khác, còn Bình thay cả cụm bánh đã kiểm trước. + +Một người sốc nhiệt được làm mát tại chỗ. Cả đoàn tới. Không xóa mười bảy người. + +Nhưng cái chết thay đổi thiết kế. Tối, Tiến nói với Thủy: “Kiếp trước tôi quyết một mình. Người chết, tôi chỉ đi tiếp.” + +“Giờ?” + +“Phải nói với nhiều người, nghe họ cũng chịu.” + +“Khó hơn?” + +“Ừ.” + +“Muốn quay lại một mình?” + +“Có lúc.” + +“Vì nhanh?” + +“Vì không phải nhìn người khác mang phần lỗi.” + +Thủy khép sổ. “Đó là chia tội, chưa chắc chia quyền.” + +“Khác?” + +“Chia quyền nghĩa là chấp nhận họ có thể đúng hơn anh. Không chỉ cùng sai.” + +Tiến sửa trực tiếp trên dự thảo quy chế. Hắn xóa quyền phủ quyết chung, chỉ giữ quyền an ninh trong tấn công trực tiếp với thời hạn rất ngắn. Ngọc Trục không trở thành một cộng đồng có quyền chỉ vì bỏ phiếu. + +Nó bắt đầu khi Tiến thua, cho rằng quyết định sai, và vẫn không xé kết quả để tự cứu hình ảnh mình. Sau chuyến di chuyển thứ hai, người đàn ông đã tát Tuấn tới xin xem biên bản. Ông đọc tên từng người bỏ phiếu chống nhận thêm dân, rồi hỏi Tiến: + +“Nếu làm lại, anh đổi phiếu không?” + +“Có thể.” + +“Lại có thể.” + +Tiến đọc lại danh sách chết. “Tôi không biết nhận thêm năm mươi người có làm người khác chết sau đó không. Tôi biết kế hoạch xe đã thiếu. Phần đó không cần có thể.” Người đàn ông không tha. Ông yêu cầu được tham gia đội kiểm xe của chuyến sau. Hội đồng chấp thuận sau khi Bình kiểm tra tay nghề của ông. + +Ba tuần tiếp, ông là người khó tính nhất với moay-ơ, nhiệt ổ bi và bản đồ cứu hộ. Mỗi lần siết ốc, ông đọc tên con trai mình trong đầu. Cái chết không chỉ thay đổi một quy trình trên giấy; nó đưa một người từng đứng ngoài quyết định vào đúng nơi có thể ngăn lỗi lặp lại. + +Chương 65: Hiệp Ước Phía Tây + +Hiệp ước phía Tây được ký ngày 28 tháng 8 tại một trạm xe buýt bỏ hoang nằm giữa các vùng ảnh hưởng. Không Hoàng Thành. Không Ngọc Trục. Không nơi nào đủ quyền biến chủ nhà thành chủ cuộc họp. + +Mười chín nhóm tham gia. Văn bản chỉ có năm điều: + +- không chặn nước, thuốc, lương; +- hỗ trợ cháy và sập; +- công khai dịch bệnh; +- không chiếm nút trước 29/09; +- tranh chấp đưa ra hội đồng đại diện. + +Hiệp ước không có quốc kỳ, quân đội chung hay một người đứng đầu. Dù vậy, radio dân sự lập tức gọi nó là **Chính quyền phía Tây**. + +Kha phản đối tên. Tiến cũng. Tên vẫn lan. Con người cần một danh từ cho thứ đang quyết định xe nào được qua. + +Trước khi ký, nhóm mang con dấu cơ quan cũ xuất hiện. Người đứng đầu tên Nguyễn Đức Tài, nguyên phó giám đốc một đơn vị quản lý khẩn cấp. + +Ông đi cùng mười hai người có vũ khí, nhưng không chỉ mang súng và biểu tượng. Trên xe có ba hòm hồ sơ chống ẩm, mã cơ của hai trạm bơm, sổ nhiên liệu công, tần số vô tuyến dự phòng và danh sách mười bảy kỹ thuật viên còn xác minh được. Sáu người trong danh sách đang ở cùng ông; số còn lại rải tại các khu chưa nối vào hiệp ước. + +“Tôi không tới để bảo các anh trả mọi thứ cho một con dấu,” Tài nói. “Tôi tới vì một mạng phân phối không có hồ sơ kế thừa sẽ sụp ngay khi những người ngồi bàn này chết.” + +Hương hỏi: “Luật nào còn hoạt động?” + +“Phần nào còn người thi hành, tài sản để vận hành và thủ tục để người khác kiểm tra.” Tài đặt sổ trạm bơm lên bàn. “Phần còn lại chỉ là giấy.” + +Kha nhìn mười hai người. “Ông học nhanh.” + +“Tôi sống đủ lâu để biết không thể bắt một đoàn xe bằng điều khoản.” Tài quay sang Tiến. “Nhưng các anh cũng không thể gọi mọi quyết định hiện tại là hợp pháp chỉ vì đang có nước.” + +Ông đề nghị Hiệp ước được đặt dưới một Ủy ban Khẩn cấp có thời hạn ba mươi ngày, với: + +- kiểm toán công khai lượng nguồn và quyền truy cập; +- lưu biên bản quyết định; +- cơ chế kế nhiệm khi đại diện chết hoặc mất khả năng; +- quyền khiếu nại của các khu nhỏ; +- không ai giữ quyền phủ quyết vô thời hạn. + +Tài yêu cầu làm điều phối viên tạm thời, nhưng chấp nhận bỏ phiếu bãi nhiệm sau bảy ngày và công khai toàn bộ tài sản mình mang vào. Thủy hỏi: “Vì sao ông giữ lại hồ sơ Observation Initiative?” + +“Vì tôi chưa biết người ngồi ở cái bàn nào sẽ dùng nó để cứu hay để chiếm.” Tài đáp thẳng. “Đó là lý do của tôi. Không phải một lý do đẹp.” + +Đề nghị của ông không vô hại: nó giữ một phần bộ máy cũ và tạo cho Tài vị trí trung tâm. Nhưng nó cũng giải những lỗ hiệp ước chưa có ai chịu viết. Hội đồng thống nhất cho nhóm Tài ba ghế quan sát, một ghế biểu quyết ngay sau khi bàn giao bản sao mã trạm bơm và sổ nhiên liệu. Quyền điều phối tạm chỉ có hiệu lực bảy ngày, không quyền phủ quyết. + +Tài ký sau khi sửa từng điều khoản. Không đầu hàng, cũng không còn đòi người khác phục tùng một cơ quan chỉ tồn tại trên con dấu. Hiệp ước được phát radio. Người dân không ăn mừng lớn. Họ chỉ muốn biết ngày mai xe nước có bị chặn không. + +Ai là chủ thành phố? Kha giữ xe và tuyến. Ngọc Trục giữ kỹ thuật lọc. + +Hổ giữ đường. Lâm giữ thuốc. Các khu giữ người. Nhóm Tài giữ hồ sơ và một phần tính chính danh. + +Không nhóm nào đủ sức cai cả thành phố, nhưng từng nhóm đều đủ lực để làm một khu khác tê liệt nếu xung đột nổ ra. Đêm, Tài mở hồ sơ Observation Initiative. + +Tên Kha được ghi: + +**ASSET – INTERVENTION LOGISTICS** + +Hồ sơ không gọi Kha là thủ lĩnh mà xếp hắn vào nhóm **tài sản hậu cần**. Trước khi tự xây mạng riêng, hắn từng nhận công việc, tuyến và dữ liệu từ bộ máy cũ. Tài không công khai ngay. Ông đặt hồ sơ Kha vào ngăn dưới cùng, khóa bằng chiếc chìa vẫn mang từ trước Hồng Nhật rồi tắt đèn phòng lưu trữ. + +Hương, đại diện mạng chung cư hơn bốn trăm người, không ký ngay. Khu lõi chị trực tiếp quản chỉ còn gần hai trăm người sau khi tách thành ba điểm trú; cả mạng không có kho lớn hay lực lượng vũ trang đủ để ép bàn họp. Chị hỏi điều khoản nào bảo đảm các nhóm lớn không bỏ phiếu chia nước của khu nhỏ trong lúc khẩn cấp. + +Không văn bản nào có. Cuộc họp phải thêm một phụ lục: nguồn tối thiểu sinh tồn của mỗi khu không được trưng dụng nếu chưa có người đo độc lập và một kế hoạch bù cụ thể. Kha cho là chậm. Tài cho là không đúng thể thức. Hương đáp: “Vậy hai ông ký mà không cần nước của chúng tôi.” + +Phụ lục được thông qua. Hiệp ước không chỉ là sự thỏa hiệp giữa những người mạnh. Giá trị đầu tiên của nó xuất hiện khi một khu không có gì để đe dọa vẫn buộc cả bàn phải sửa một dòng. + +Chương 66: Đêm Không Chính Quyền + +Hiệp ước tồn tại hai ngày trước khi mạng điện điều khiển bị cắt. 21 giờ 06 ngày 30 tháng 8, radio chung tắt. Trạm bơm dừng. Các điểm phát lương mất liên lạc. Đó không thể là một vụ cháy đơn lẻ: dây điều khiển bị cắt gần như đồng thời ở bảy điểm. + +Người biết sơ đồ phải có hồ sơ cũ. Nhóm Tài nói không liên quan. Kha muốn bắt ông ngay. Thủy hỏi: “Bằng chứng?” + +“Dây cắt theo sơ đồ họ giữ.” + +“Có thể bị lấy.” + +“Cô muốn chờ thành phố cháy?” + +“Không. Muốn bắt đúng người.” + +Trong ba giờ không liên lạc: + +- Hổ chiếm hai nút đường để “bảo vệ”; +- một xe nước bị cướp; +- tin Kha chết lan dù hắn vừa xuất hiện; +- tin Tiến mở Hoàng Thành cũng lan; +- bệnh viện mất bơm. + +Ngọc Trục vẫn chạy cục bộ nhờ đường cơ. Kha mất liên lạc ba kho. Bộ máy cũ cũng mất người. + +Duy nhìn bảy điểm cắt. “Không phá toàn mạng. Chia thành đảo.” + +“Để?” Bình hỏi. + +“Đo khu nào tự sống, khu nào phụ thuộc.” + +Một cuộc thử phản ứng bằng thành phố thật. Thiết bị ghi dòng được tìm thấy ở trạm bệnh viện. Kẻ phá không chỉ cắt; chúng thu dữ liệu tải và thời gian khôi phục. + +Tiến phải chọn thứ tự sửa. Kha muốn kho lương trước. Linh yêu cầu bệnh viện. Hội đồng bỏ phiếu khẩn: bệnh viện, bơm nước, sau đó kho. Kha thua. + +Hắn không phá quyết định. Tự cử đội riêng về kho, không lấy kỹ thuật chung. Tại bệnh viện, ông Hòa và Đức nối điều khiển. Duy lần hướng phát dữ liệu tới một hầm hành chính. + +Tiến, Khánh An, Bình và Kha tới. Tài ở đó, bị trói. Ba người của ông chết. Con dấu đặt trên bàn như một chữ ký giả. + +Thiết bị vẫn chạy. Tài không phải người tổ chức; kẻ khác đã dùng chính hồ sơ của ông. Trên tường: + +**KHÔNG THÀNH PHỐ NÀO CẦN HAI CHÍNH QUYỀN TRƯỚC ĐỒNG BỘ.** + +Kha nói: “Intervention cũ.” Vân xác nhận kiểu mã. Một nhóm từng thuộc lớp can thiệp, không theo Kha, muốn một cơ cấu duy nhất để ngày 29 dễ điều khiển. + +Tài nhìn người chết. “Tôi nghĩ giữ hồ sơ là giữ nhà nước.” Thủy đáp: “Hồ sơ không giữ được người cầm nó.” + +Tiến cởi trói. “Ông còn bản nào?” + +“Có.” + +“Giấu?” + +“Có.” + +“Giờ?” + +Tài nhìn con dấu. “Chia.” + +Đêm kết thúc gần sáng khi mạng radio được nối lại theo cấu trúc luân phiên. Ba thay đổi: + +- nhóm Tài giao bản sao hạ tầng; +- Kha nối radio kho vào mạng chung có giám sát; +- trung tâm điều phối khẩn cấp chuyển quyền theo ca, không đặt cố định. + +Không một chủ. Nhiều chìa. Khi mặt trời lên, HANOI-07 phát trạng thái trên các thiết bị còn hoạt động: + +**SYNCHRONIZATION WINDOW: 30 DAYS** + +Hệ thống đếm theo ngày lịch và làm tròn phần ngày còn lại lên một đơn vị. Từ 21 giờ 06 ngày 30 tháng 8 tới 12 giờ 17 ngày 29 tháng 9 không tròn ba mươi ngày, nhưng màn hình không hiển thị giờ lẻ. Không lời đe. + +Một mốc. Cả thành phố thấy. + +Cùng lúc, Kha nhận tin kho Hậu Ký bị xâm nhập. + +Các khóa phần mềm hắn đã thay vẫn nguyên. Hai ổ lõi chuyển đi từ trước không bị chạm. Thứ Tùng dùng là đường phục hồi vật lý giấu trong bo mạch điều khiển — một mạch chỉ được cấp điện khi kho bị tách khỏi mạng chính. Đêm chia đảo đã tạo đúng điều kiện mà Kha biết nhưng không thể loại bỏ nếu còn muốn kho khởi động khi mất liên lạc. + +Cảm biến mồi báo chậm chín mươi mốt giây vì Tùng cho mạch tự kiểm tra lặp lại. Trong khoảng đó, hắn lấy một mảnh lõi thật, khóa truy vấn và hai ổ mồi. Không đủ để sở hữu toàn bộ Hậu Ký, nhưng đủ để ghép với những bản sao hắn đã giữ từ trước. Trên giá để lại một chiếc nhẫn đen giả. Kha cầm, không nói. + +Khánh An nhìn dấu phục hồi trên bo mạch. “Hoàng Tùng.” + +Kha đặt chiếc nhẫn giả cạnh sơ đồ bo mạch. Hai ổ lõi hắn chuyển trước vẫn an toàn; mảnh Tùng lấy đủ nguy hiểm nhưng không đủ toàn quyền. Khánh An nhìn đường phục hồi bị cháy đen và nói: “Anh phòng đúng thứ mình nhìn thấy. Hắn thắng ở thứ chỉ người thiết kế biết còn tồn tại.” + +Kha không đáp. Hắn không thua vì quên khóa cửa; hắn thua vì đã chấp nhận giữ một cánh cửa mà bản lề do đối thủ làm ra. Ba mươi ngày trước Đồng Bộ, thành phố vừa mất điện một đêm. Kha không mất toàn bộ tương lai, nhưng mất độc quyền đặt câu hỏi. + +Và người lấy biết chính xác cách biến một dự báo thành quyền lực. + +Trong thời gian mạng bị chia thành đảo, một khu chung cư không nhận được lệnh nào đã tự mở bể dự phòng, tắt thang máy và chuyển người già xuống tầng một. Họ sống qua ba giờ mà không cần trung tâm. Một khu khác chờ xác nhận vì sợ vi phạm hiệp ước; khi radio trở lại, ba người đã sốc nhiệt. + +Duy đưa hai báo cáo lên bàn. “Cùng mất liên lạc. Khác nhau ở quyền tại chỗ.” Từ đêm ấy, mọi quy trình chung phải ghi rõ điều người trực được tự quyết khi trung tâm im. Không ai gọi đó là tự trị hoàn toàn; giới hạn vẫn còn nguyên. Tuy vậy, việc trung tâm không trả lời từ nay không thể trở thành lý do để người trực đứng yên. + +Hoàng Tùng đã thu chính dữ liệu ấy: nơi nào sống khi bị cắt, nơi nào chờ. Hắn không chỉ lấy Hậu Ký. Hắn đang đo cấu trúc quyền lực mới của thành phố để biết điểm nào cần kéo về một trung tâm duy nhất. + +ARC 8: ĐẾM NGƯỢC NGÀY ĐỒNG BỘ + +Chương 67: Ba Mươi Ngày + +Ngày 31 tháng 8 bắt đầu bằng một con số. + +**30 DAYS** + +Nó hiện trên những thiết bị còn đủ nguồn để nhận tín hiệu: bảng điều khiển trạm bơm, radio kỹ thuật, điện thoại chết mạng nhưng chưa chết màn hình. Ở vài nơi, con số chỉ lóe bốn giây. Ở vài nơi khác, nó đứng nguyên tới khi pin cạn. HANOI-07 không giải thích. + +Con người làm phần còn lại. + +Đến trưa, chợ dưới cầu cạn đã có năm phiên bản về ngày Đồng Bộ. Một người bán muối bảo cổng dưới Hoàng Thành sẽ mở hầm trú cho người “được chọn”. Một bà cụ nói nước Hồ Tây dâng nuốt Ba Đình. Trẻ con Vành Ngoài gọi ngày 29 là “ngày chuông thứ mười hai”, dù không đứa nào thực sự nghe chuông. + +Thủy lập bản tin radio mỗi tối. Cô dùng ba mục cố định: + +**Đã đo.** +**Chưa biết.** +**Tin đồn.** + +“Đã đo: áp lực mạng nước đang tăng theo chu kỳ. Khóa phía Tây giữ. Hoàng Thành có dao động bốn phút vào 02 giờ 17. Chưa biết: ‘cổng’ là cấu trúc hay chế độ vận hành. Tin đồn: không có bằng chứng về hầm trú vô hạn hoặc danh sách người được cứu.” + +Giọng cô đi qua những chiếc radio rè, chen giữa thông báo đổi nước và tìm người mất tích. Không hấp dẫn bằng lời hứa sống sót. Nhưng ngày nào cũng có người chờ đúng giờ. + +Kha dùng xe tải chặn ba tuyến vào Ba Đình. Nhóm Tài dựng biển cảnh báo bằng con dấu cũ. Vòng Tròn Vỡ kêu gọi rời bán kính năm cây số. Hội đồng phía Tây chuyển trẻ em khỏi các nút. Mỗi phía cho rằng mình đang giảm hoảng loạn; kết quả là thành phố nhìn thấy bốn loại mệnh lệnh. + +Kho Hậu Ký bị lấy khiến Kha ít nói hơn. Ba ổ dữ liệu mất không chứa mọi câu trả lời, nhưng chứa lịch truy vấn, khóa giải mã và siêu dữ liệu — thứ cho biết hắn đã hỏi gì, không hỏi gì và câu nào tạo ra kết quả nào. Khánh An đặt chiếc nhẫn đen giả người trộm để lại lên bàn. + +“Hoàng Tùng,” cô nói. + +Cái tên đã có trong hồ sơ Kho Hậu Ký: kỹ sư an ninh dữ liệu, người chia hệ thống thành nhiều kho, được ghi chết trong vụ cháy ngày 23 tháng 6. Nhưng không có xác, chỉ còn thẻ và camera hỏng. Kha xoay chiếc nhẫn thật trên tay. “Hắn chọn thời điểm này vì mỗi câu hỏi bây giờ đều có thể biến thành lệnh.” + +“Vì sao để lại nhẫn?” Tiến hỏi. + +“Nhắc tao rằng cấu trúc kho vẫn mang dấu tao. Hoặc muốn người khác nghĩ tao tự lấy.” + +Thủy ghi cả hai khả năng. + +Trưa hôm đó, radio thành phố phát một danh sách ba mươi bảy người được gọi là **những người sẽ chết trước ngày 29**. Tên đầu: + +**LÊ QUỐC TIẾN — 12/09/2028** + +Tiến đọc trên màn hình của Nam. Bàn tay trái tự tìm mép bàn, đúng vị trí hắn thường bám mỗi khi ký ức Mễ Trì kéo về. Cơ thể đã phản ứng với “ngày chết” trước khi lý trí kịp nhắc rằng cái chết ấy thuộc năm 2031, không phải hiện tại. Các tên sau khiến danh sách có vẻ đáng tin hơn: + +- Hổ — 05/09. +- Lâm — 08/09. +- Tuấn — 14/09. +- Nguyễn Hữu Đạt — đã chết. +- Trần Thanh Thủy — không có bản ghi sau Đồng Bộ. +- Phạm Ngọc Vân — trạng thái không xác định. + +Một hỗn hợp của đúng, sai, cũ và chưa xảy ra. Đủ để thay đổi hiện tại. + +Hổ hủy hai chuyến đường đúng ngày 5, khiến một khu thiếu nước. Lâm khóa kho thuốc, không cho người ngoài vào vì sợ bị ám sát. Gia đình Tuấn ép ông rời hội đồng. Một người trong danh sách bỏ trốn khỏi khu trú rồi chết vì nhiệt ngoài đường — khác nguyên nhân Hậu Ký ghi, nhưng chính cái tên trên danh sách đã đẩy ông ra ngoài. + +Thủy phát bản tin khẩn. + +“Hậu Ký từng ghi ông Hòa và Phúc chết ở Trạm Láng. Họ còn sống. Danh sách này không phải bản án.” + +Một giọng nam gọi vào: “Nếu sai, sao biết đúng tên tôi?” + +“Vì nó có hồ sơ.” + +“Ngày thì sao?” + +“Phải biết câu hỏi tạo ra ngày đó.” + +“Cô bảo chúng tôi đánh cược mạng?” + +Thủy nhìn qua cửa kính phòng radio. Trẻ con đang dùng nắp chai xây một vòng thành khác, lần này có bốn cổng như Hạnh đã dạy. + +“Các anh vẫn đánh cược mỗi ngày,” cô nói. “Người phát danh sách đang bán cảm giác rằng họ biết kết quả.” + +Tối, một tin riêng tới điện thoại Tiến: + +**MUỐN BIẾT VÌ SAO MÀY CHẾT NGÀY 12/09, ĐẾN MỄ TRÌ.** + +Đây không phải Mễ Trì của năm 2031, mà là Mễ Trì hiện tại. + +Một cái móc đặt đúng vào vết thương cũ. Tiến không giấu. Hắn đưa tin cho hội đồng. Tuấn vẫn ngồi đó dù tên mình có ngày chết, hai bàn tay giữ chặt cốc nước. + +“Bẫy?” ông hỏi. + +“Đúng.” + +“Đi?” + +“Có.” + +“Không một mình.” + +Ánh mắt Tiến đi qua từng người. Ngày trước, hắn sẽ coi lời đe dọa là dữ liệu riêng vì mục tiêu là mình. Bây giờ, nếu đi, xe, người và nguồn dự phòng thuộc cộng đồng. Hội đồng cử Thủy, Bình, Khánh An và Đạt. Nam phụ trách liên lạc. Kha được nghe nhưng không có quyền điều đội Ngọc Trục. + +Sau cuộc họp, Thủy đặt lịch truy vấn còn sót cạnh danh sách chết. Ngay trước khi danh sách được phát có một truy vấn dùng khóa Hoàng Tùng. Nội dung đã bị xóa. + +“Ngày 12 không tự xuất hiện,” cô nói. “Có người hỏi một câu.” + +Ánh mắt Tiến dừng ở tên mình. “Chúng ta cần biết câu nào.” + +Ngoài sân, một người thợ vẫn sửa mái phản nhiệt dù đã nghe mình có thể chết ngày 8. Ông nói với Bình: “Ngày chết chưa tới, mái vẫn dột.” Ba mươi ngày trước Đồng Bộ, tương lai bắt đầu được dùng như vũ khí. + +Nhưng thành phố vẫn phải sống bằng những việc không thể chờ câu trả lời: vá mái, đun nước, đổi thuốc và quyết định sáng mai có mở cổng cho người lạ hay không. + +Chương 68: Hậu Ký Gốc + +Mễ Trì B3 chưa có mùi máu. Nó chỉ có bê tông nóng, dây điện mới và bụi xây dựng — nhưng cơ thể Tiến vẫn nhớ một căn phòng khác nằm chồng lên nơi này. Hắn dừng ở cửa, kiểm lối thoát ba lần và nhận ra mình đã nín thở. + +Thủy không chạm. Cô đứng trong tầm mắt. “Hiện tại.” Tiến gật, bước vào. + +Hoàng Tùng không xuất hiện. Hắn để một hộp kim loại, ba camera và loa có dây. Bình kiểm nguồn; Khánh An kiểm góc bắn; Đạt đứng ngoài vùng đánh dấu để trạng thái Null của ông không bị đưa vào phép thử ngay từ đầu. Hộp mở khi cảm biến nhận Tiến. + +“Chào Người Trở Về,” giọng Tùng nói. + +Tiến đối diện camera. “Tên tôi là Tiến.” + +“Danh xưng hữu ích hơn.” + +“Với anh.” + +Kha nghe qua đường dây từ điểm ngoài. “Tùng, mày mở kho của tao.” + +“Anh gọi nó là của anh quá lâu.” + +Bên trong hộp có một ổ dữ liệu kiểu cũ. Tùng không yêu cầu họ cắm. Hắn chiếu hai truy vấn lên tường. + +**Nếu Hoàng Văn Hòa ở Trạm Láng đêm 19/07, kết quả tử vong gần nhất là gì?** + +**DECEASED — 23:41** + +Câu thứ hai: + +**Nếu Khóa phía Tây ổn định trước 23:41, trạng thái Hoàng Văn Hòa là gì?** + +**UNRESOLVED** + +Cùng người, cùng đêm, khác điều kiện. Thủy tiến gần màn chiếu. “Hậu Ký trả lời theo câu hỏi.” + +“Đúng.” + +“Không phải một cơ sở dữ liệu hoàn chỉnh về tương lai.” + +“Không.” + +Kha im. Im lặng của hắn xác nhận hắn đã biết nhiều hơn điều từng nói. Tùng hiện truy vấn tạo ngày chết Tiến: + +**Nếu Lê Quốc Tiến tiếp tục giữ quyền truy cập tới ngày 29/09, thời điểm sớm nhất có thể loại bỏ ảnh hưởng của hắn là khi nào?** + +Kết quả: + +**12/09/2028** + +Tiến đọc lại, dừng ở hai chữ **có thể**. + +“Nó không viết ‘sẽ chết’.” + +“Danh sách cần ngôn ngữ người ta hiểu,” Tùng nói. + +“Anh đổi khả năng thành định mệnh.” + +“Tôi làm họ phản ứng. Phản ứng là dữ liệu.” Tùng không né. “Khi đủ người đổi đường, khóa kho hoặc rời vị trí vì một ngày chết, hiện tại tự dịch về gần điều kiện của truy vấn. Danh sách không chỉ đo tương lai. Nó ép tương lai dễ tính hơn.” + +Cách hắn nói giống những lớp mã cũ: câu ngắn, ít chủ ngữ, con người luôn bị rút thành đầu vào và đầu ra. Thủy đã thấy dấu ấy từ chuỗi số nguyên tố trên marker của Phúc; tới lúc này, chữ ký kỹ thuật mới có một khuôn mặt. Thủy nhìn camera. “Người có thể chết vì dữ liệu anh thu.” + +“Người vẫn chết khi không có nó.” + +Tùng không hoàn toàn nói suông. Hắn phát một đoạn ghi về khu Cầu Diễn: ba ngày trước, một truy vấn của hắn dự báo tuyến bơm sẽ hỏng trong đợt nhiệt. Nhóm tin hắn đã chuyển trẻ em xuống hầm và sống qua. Hai trăm người được cứu. + +“Anh muốn chúng tôi biết anh từng đúng,” Tiến nói. + +“Muốn các anh hiểu một công cụ nguy hiểm không vì thế vô dụng.” + +Đây là lý do Tùng có người đi theo. Không chỉ vì con số 38%. Có những người còn sống nhờ hắn hỏi đúng câu. Ổ “gốc” không chứa toàn bộ tương lai. Nó chứa giao thức truy vấn được lưu trong máy chủ Observation Initiative năm 2026: một tệp mười ba kilobyte, mốc Hồng Nhật, một số tọa độ và câu: + +**ĐỪNG ĐỂ MỘT NGƯỜI GIỮ TẤT CẢ PHƯƠNG ÁN.** + +Tùng mở phần nhật ký mà bản Kha giữ đã bị xóa. Tệp không đi vào qua mạng ngoài. Lúc 02 giờ 17 phút ngày 29 tháng 9 năm 2026, một khối dữ liệu bốn kilobyte xuất hiện trực tiếp trong bộ nhớ của rơ-le thử nghiệm sau một xung cộng hưởng. Không địa chỉ gửi, không tài khoản và không tuyến truyền. + +Duy nhận ra phần còn lại. Lớp vỏ đọc dữ liệu, bảng câu hỏi và cách nén chỉ mục là mã anh viết theo yêu cầu của Trần Văn Tĩnh sau sự cố đó. Phạm Ngọc Vân thêm câu cảnh báo. Nhóm ba người đã bọc khối dữ liệu lạ thành một công cụ có thể đọc, rồi Tĩnh tách khóa và giấu tên người tạo khi Observation Initiative bắt đầu chia phe. + +“Vậy Hậu Ký không tự xuất hiện nguyên vẹn,” Thủy nói. + +“Không,” Duy đáp qua đường dây. “Con người viết công cụ. Nhưng phần lõi chứa ngày Hồng Nhật và các mốc tương lai không do máy chủ năm 2026 tạo ra.” + +Anh đặt tiêu đề khối lõi cạnh siêu dữ liệu của dải nhớ Mễ Trì. Cách đánh dấu nguồn, thứ tự kiểm lỗi và một chuỗi băm đầu trùng nhau. + +“Lõi này cùng họ với gói ghi trạng thái năm 2031,” Đạt nói. + +“Khả năng cao,” Duy đáp. “Chưa đủ để nói nó được gửi bằng cách nào. Nhưng đủ để loại giả thuyết có một người vô danh tải tệp qua mạng rồi biến mất.” + +Tùng không phản đối. “Giao thức là sản phẩm của Duy, Tĩnh và Vân. Hạt giống dữ liệu đến từ một sự kiện phản hồi chưa xảy ra đối với năm 2026. Đó là nguồn thật, dù các anh có thích vòng nhân quả ấy hay không.” Mỗi lần dự án truy cập nút, hệ thống có thêm dữ liệu. Người dùng hỏi về kho, đường, người sống, người chết. Kết quả được lưu, chồng và dùng để đặt câu hỏi mới. + +“Hậu Ký lớn lên vì người ta hỏi,” Thủy nói. + +“Và hiện tại hẹp lại vì người ta làm theo,” Đạt nói từ ngoài. + +Tùng đáp: “Hiện tại cũng hẹp đi khi các anh không làm.” Hắn đưa cảnh báo ngày 12: một đợt nhiệt thứ hai có thể đánh Hà Nội. Hàng nghìn người chết nếu không chọn đúng tuyến và điểm trú. + +“Cho dữ liệu thô,” Thủy yêu cầu. + +“Đổi trạng thái Tiến để giải truy vấn.” + +Tiến cân ổ dữ liệu trong lòng bàn tay. “Anh cần tôi làm nguồn có trọng lượng.” + +“Returned mang chuỗi mà hệ thống không có ở hiện tại. Có anh, xác suất rõ hơn.” + +“Không.” + +“Anh đặt tự do của mình trên mạng người khác.” + +“Anh đặt câu hỏi sao cho chỉ có một câu trả lời đạo đức.” + +Tùng để một khoảng trống kéo dài rồi nói: “Tôi từng chờ bốn mươi bảy phút vì bốn người không ai dám quyết.” Kha ở đầu dây cứng người. Đó là số phút từ hồ sơ Bắc Ninh của Kha. Tùng biết vết thương của hắn và đang dùng nó. + +“Đừng lấy em tao làm lý luận,” Kha nói. + +“Tôi lấy dữ liệu.” + +“Đó là lý do mày không hiểu.” + +Kha — người vẫn gọi mọi thứ bằng giá — lần đầu bác một người vì đã biến người chết thành số quá sạch. Thiết bị bắt đầu tắt. Trước khi mất, Tùng nói: “Ngày 12 sẽ tới dù các anh có thích cách tôi hỏi hay không.” + +Họ rời B3 với dữ liệu áp suất khí quyển, bức xạ và nhiệt nền được Tùng cho một phần — đủ để xác nhận nguy cơ tăng, không đủ để chọn tuyến tối ưu. Tiến không hỏi Hậu Ký. + +Hắn yêu cầu mọi khu đo nhiệt, tách nước, kiểm hầm và chuẩn bị nhiều điểm thay vì một tuyến “đúng”. Có thể kém hiệu quả hơn phương án Tùng. Cũng khó khiến một lỗi duy nhất giết tất cả hơn. Trên đường về, Thủy nói: “Tùng đã cứu Cầu Diễn.” + +“Ừ.” + +“Anh vẫn từ chối.” + +“Không từ chối dữ liệu. Từ chối giao bản thân làm chìa để hắn hỏi thay mọi người.” + +“Khác biệt cần được giữ rõ.” + +Tiến dõi Mễ Trì lùi sau cửa xe. Một nơi có thể là cái chết vẫn vừa cho hắn một dữ liệu giúp cứu người. Trên đường về, Tiến giữ phần dữ liệu Tùng đã đưa và từ chối chiếc khóa hắn đòi. Hai thứ nằm trong hai túi khác nhau. + +Chương 69: Người Bị Xóa + +Phạm Ngọc Vân không đưa Thủy vào một phòng bí mật. Bà đưa cô tới phòng cũ của một trạm y tế, tháo camera khỏi tường và đặt nó lên bàn cho cả hai cùng nhìn thấy. Không có nơi nào hoàn toàn ngoài HANOI-07; chỉ có nơi giảm bớt số lớp đang ghi. + +Danh sách Null Protocol gồm hai mươi ba người. Không chỉ tên và trạng thái. Vân mang hồ sơ y tế, ảnh gia đình, nghề nghiệp và những thứ họ mất sau thủ tục. Một kỹ sư điện mất khả năng nhận mặt vợ trong ba tháng. + +Một y tá quên đường về nhà nhưng vẫn nhớ liều thuốc. Một người đàn ông bị hệ thống ghi chết, sau đó không thể chứng minh quyền lấy khẩu phần vì mọi sổ đều từ chối tên ông. + +Nguyễn Hữu Đạt. Phạm Ngọc Vân. + +Hoàng Tùng. Thủy dừng ở tên Tùng. “Hắn từng bị Null?” + +“Ba tháng,” Vân nói. “Sau đó tự nối lại.” + +“Vì muốn được nhìn?” + +“Vì muốn được hỏi.” + +Với người khác, biến mất khỏi mạng có thể là tự do. Với Tùng, đó là mất quyền truy vấn. Tên **TRẦN THANH THỦY** nằm ở phần ghi chú: + +**CANDIDATE — REJECTED** + +“Duy đề xuất?” + +“Ngày 10 tháng 5.” + +Trước Hồng Nhật, khi Thủy vừa nhận file HANOI-07, Duy đã muốn cắt cô khỏi trường quan sát. Đề xuất bị bác vì cô chưa tiếp xúc nút và tác động thần kinh chưa rõ. + +“Anh ấy muốn bảo vệ tôi,” Thủy nói. + +“Có thể.” + +“Vẫn là quyết thay.” + +“Đúng.” + +Vân không biện hộ cho đồng nghiệp. + +“Nếu làm bây giờ?” + +“Cô có thể mất khả năng nghe. Có thể mất ký ức gắn mạnh với cộng hưởng. Có thể chỉ mất đường truy cập trong vài giờ.” + +“Tiến?” + +“Có thể nằm trong phần bị ảnh hưởng.” + +Thủy nhìn bàn tay mình. Vết chai ở ngón trỏ có từ trước tận thế — một dấu nhỏ mà HANOI-07 chưa từng tạo ra cho cô. + +“Bà cần Người Nghe ngày 29.” + +“Có.” + +“Vẫn đưa tôi quyền từ chối?” + +Vân nhìn ra cửa. “Tôi từng dùng My để kiểm một giả thuyết. Tôi biết một lời xin lỗi không trả lại tuổi thơ cho con bé. Tôi không muốn tiếp tục gọi con người là điều kiện.” Đó không phải sự chuộc tội hoàn tất, chỉ là giới hạn bà tự đặt sau khi đã vượt quá. + +Vân đưa thiết bị Null tạm. Một hộp nhỏ có hai điện cực và công tắc cơ, tối đa bốn phút. + +“Nếu tiếng chuông lấn toàn bộ âm thật, đặt vào vùng cổ này.” Bà chỉ. “Sau khi tắt, đừng đứng dậy nhanh. Có thể mất thăng bằng và thính giác.” + +“Dùng bao nhiêu lần?” + +“Không biết mức an toàn.” + +Thủy cầm thiết bị, cảm nhận trọng lượng thật. Một lựa chọn đạo đức cuối cùng cũng có khối lượng, góc cạnh và nguy cơ bỏng da. Cô tìm Duy ở khu máy. Anh đang sửa rơ-le bằng tay còn run. + +“Anh đề xuất xóa tôi.” + +Duy không hỏi cô biết từ đâu. “Vì sợ hệ thống dùng cô.” + +“Không hỏi tôi.” + +“Đúng.” + +“Anh xin lỗi nhiều.” + +“Có nhiều việc.” + +“Xin lỗi không trả quyền.” + +Duy đặt tua vít xuống. “Tôi không biết phải làm gì khác với điều đã làm.” Thủy đưa danh sách. “Giúp tôi ghi lại. Không chỉ tên. Vì sao, ai ký, người đó mất gì, ai phải sống cùng hậu quả.” + +Họ bắt đầu bằng người chủ kho Ngọc Trục đời trước. Ông đã Null một phần bản vẽ để Observation Initiative không đào vào điểm truy cập. Vì vậy hồ sơ nền thiếu góc phía tây. Ông không phải thành viên một âm mưu lớn; chỉ là người sợ dự án lấy kho và khu dân cư. + +Thủy thu lời kể của những người còn sống qua radio. Một phụ nữ nói chồng bà sau Null không nhớ ngày cưới nhưng vẫn nhớ tiếng cửa nhà. Bà không biết nên coi đó là mất hay còn. Tối, Thủy mở máy ghi âm đời thường. Cô nghe tiếng mình cười ở bếp, tiếng Tiến nói “đưa kìm” ngoài sân, tiếng một đứa trẻ hát sai lời. + +Nếu Null lấy đi một phần ký ức, cô muốn để lại bản ghi không nhằm ép “Thủy cũ” quay trở lại, mà để người sau biết cô từng là ai ngoài cái nhãn Listener. Cô ghi tên mình ở cuối danh sách, chưa đánh dấu thực hiện. + +Bên cạnh, cô viết: + +**Nếu tôi chọn Null, đây là quyết định của Trần Thanh Thủy. Không phải yêu cầu của HANOI-07, Tiến, Vân hay bất kỳ phe nào.** + +Thủy cất thiết bị Null vào túi máy ghi. Nó nằm sát miếng dán con cá đã sờn từ thời sinh viên, hai vật chạm nhau mỗi khi cô bước. + +Chương 70: Neo Không Phải Neo + +Mẹ Tiến từ chối chuyển tới điểm hắn đã chọn sẵn. + +“Ngày 12 có thể có đợt nhiệt,” hắn nói qua rơ-le. + +“Có thể?” + +“Dữ liệu bức xạ tăng. Áp suất cũng đổi.” + +“Con chắc nơi con chọn an toàn?” + +“Không.” + +“Vậy mẹ dùng nơi đã kiểm, không dùng nỗi sợ của con.” + +Bà và bác Dũng chọn một hầm nhỏ gần vùng đồi, có giếng nông, hai lối thoát và ít người biết. Tuyến Tiến đề nghị xa hơn, đi qua hai chốt đã bị lộ. Hắn biết bà có lý. Cơ thể vẫn muốn điều người tới kéo bà đi. + +Tiến kể về cụm từ **anchor condition**. Không toàn bộ hồ sơ, nhưng đủ để bà hiểu người ta từng coi bà như thứ làm hắn phản ứng dự đoán được. + +“Ba năm kia con không biết mẹ sống hay chết,” bà nói. + +“Ừ.” + +“Con vẫn sống.” + +“Không nghĩa mẹ không—” + +“Mẹ là mẹ.” Giọng bà cứng lại. “Không phải sợi dây điện để cắm con vào hiện tại.” + +“Nếu con quên mẹ?” + +“Mẹ kể.” + +“Nếu con không tin?” + +“Mẹ mắng.” + +Tiến bật cười. Nam ở bàn radio quay đi để hắn có khoảng riêng. + +“Đừng hứa sống,” bà nói. + +“Mẹ.” + +“Không hứa thứ con không giữ được. Hứa đừng tự biến mình thành cái máy vì nghĩ không có con mọi người chết.” + +Ánh mắt Tiến dừng ở chữ **HOST** trong log. “Con hứa.” Sau cuộc gọi, hắn sửa bảng quy tắc nội bộ: + +**ANCHOR CONDITION: CHƯA XÁC ĐỊNH. KHÔNG ĐƯỢC COI CON NGƯỜI LÀ THIẾT BỊ.** + +Thủy đọc rồi nói: “Mẹ anh mất ít phút để phá một thuật ngữ nhóm nghiên cứu giữ nhiều năm.” + +“Bà ấy không cần giữ dự án.” + +“Đúng. Chỉ cần giữ anh.” + +Ngày 12 được chuẩn bị theo dữ liệu thô chứ không theo tuyến Hậu Ký: + +- nước chia nhiều kho; +- người già và trẻ nhỏ xuống vùng mát từ sớm; +- mái phản nhiệt được tưới trước giờ tăng; +- xe tách tuyến; +- bệnh viện có đội bóp bóng tay; +- mọi điểm báo nhiệt bằng đồng hồ cơ nếu radio chết. + +Duy nhận được một mẩu dữ liệu đo xa từ vệ tinh khí tượng cũ do nhóm Tài phục hồi. Dữ liệu ngoài tầng khí quyển cho thấy quang phổ mặt trời không chuyển đỏ theo mức người dưới đất nhìn thấy. Phần đỏ và phần nhiệt tăng mạnh xuất hiện khi bức xạ đi qua khí quyển. + +“Vậy đĩa mặt trời ngoài khí quyển không đỏ như chúng ta thấy?” Thủy hỏi. + +“Không ở mức này,” Duy đáp. Anh tách báo cáo thành ba lớp để không biến một giả thuyết thành lời giải duy nhất. “Chuỗi bão Mặt Trời gây ion hóa mạnh và nhiễu từ quyển. Cùng thời gian đó, khí quyển thấp xuất hiện lượng aerosol và bụi kim loại bất thường, làm tán xạ ánh sáng khiến đĩa mặt trời đỏ thẫm. Chính lớp hạt và khí ấy còn làm thay đổi cân bằng bức xạ, giữ nhiệt gần mặt đất.” + +“Bão Mặt Trời tạo ra bụi?” + +“Không có bằng chứng. Nó có thể là tác nhân khởi đầu, không phải nguồn vật chất duy trì. Phần đó vẫn chưa biết.” + +Đó chỉ là một manh mối, chưa phải lời giải cuối. Điều quan trọng hơn: HANOI-07 không tạo ra Hồng Nhật. Hệ thống dưới Hà Nội chỉ đang cố thích nghi với một thảm họa toàn cầu ở phía trên. 12 giờ 02, nhiệt không khí trong bóng râm tăng từ 49 lên 53 độ; nhiệt bề mặt ngoài đường vượt 67. Con số 68 trong ký ức Tiến thuộc về mặt bê tông phơi nắng, không phải nhiệt độ không khí của toàn thành phố. Người ra ngoài không bảo hộ vẫn có thể bỏng và sốc nhiệt trong vài phút. + +Các khu đã vào vị trí. Một trạm nhỏ không nghe cảnh báo vì radio hỏng. Đội Bình phát hiện qua lịch cơ và đưa ba mươi người xuống hầm. Bốn người chết trước khi tới, không hàng nghìn như Tùng cảnh báo. + +Cầu Diễn — khu từng được Tùng cứu — gần như nguyên vẹn nhờ tuyến hắn chọn. Bởi vậy, cuộc tranh luận không thể khép lại đơn giản bằng kết luận “Tùng sai”. Tiến không chết ngày 12. + +Danh sách Hậu Ký sai theo nghĩa người ta đã nghe, nhưng dữ liệu nguy cơ không vô ích. Tùng phát radio: “Các anh sống vì cảnh báo của tôi.” + +Thủy đáp: “Thông tin của anh giúp. Cách anh đổi điều kiện loại bỏ thành ngày chết khiến người khác hoảng và khóa tài nguyên.” + +“Không có sức ép, các người chuẩn bị nhanh thế?” + +Tiến cầm máy. “Có thể không.” Kha nhìn hắn qua kênh chung, có lẽ không ngờ Tiến thừa nhận. + +“Anh cứu được người,” Tiến nói. “Điều đó không cho anh quyền chọn thay tất cả lần sau.” + +Tùng không trả lời. Tối, mẹ gọi. + +“Còn sống?” + +“Vâng.” + +“Ăn chưa?” + +“Chưa đói.” + +“Mẹ không hỏi con đói.” + +Tiến mở phần lương khô, ăn trước micro. Một mệnh lệnh nhỏ từ người thật. Hắn làm theo không vì bị một hệ thống đo phản ứng, mà vì giữa hai người có một thứ tự nguyện trao quyền — và có thể từ chối mà không bị biến thành sai lệch. + +Ngoài mái, Hồng Nhật xuống thấp, vẫn đỏ qua lớp khí quyển chưa ai hiểu. Dưới nó, Hà Nội sống qua ngày chết đầu tiên mà Hậu Ký công bố. + +Chương 71: Bốn Mươi Ba Phút + +Khoảng trống trong bản ghi Mễ Trì dài bốn mươi ba phút, nhưng không đơn giản là một đoạn video đen. Hình ảnh, nhiệt, âm thanh và dữ liệu thần kinh đều dừng ở những thời điểm lệch nhau vài phần giây, như thể các lớp ghi bị tắt theo một trình tự. + +Duy không cắm dải nhớ vào HANOI-07 để yêu cầu “khôi phục”. Nếu làm vậy, họ có thể chỉ nhận lại một phương án do chính mô hình đang bị nghi ngờ tự điền vào. Họ dựng lại bằng thứ vật liệu không dễ kể chuyện theo ý người xem. Ông Hòa làm mô hình sàn B3 từ bản vẽ và vết lún. + +Đức tính đường tải điện. Đạt đo khoảng bước chân trong phần âm còn sót. + +Thủy lọc từng dải tần, không dùng tai mình làm nguồn duy nhất. Kha đưa cấu trúc thiết bị Intervention từng đặt ở Mễ Trì. Hắn không được đứng một mình với bản ghi; Khánh An giữ một bản sao giấy của mọi thông số hắn cung cấp. + +Tiến viết ký ức riêng trước khi xem kết quả. Hắn ghi mùi, vị máu, vị trí Kha, cảm giác dao, nhưng không cố lấp đoạn không nhớ. Tờ giấy được niêm phong để ký ức không tự sửa theo mô hình sau. + +Ngày thứ nhất, họ chỉ xác nhận được tải nhiệt. Thiết bị ở B3 đã nhận một mức năng lượng đủ làm lớp polymer trên cáp chảy mềm. Tiến tương lai giữ tiếp xúc ít nhất mười một phút. Kha ở trong phòng nhưng không chạm giao diện. Một người thứ ba vào rồi rời, bước chân kéo nhẹ bên trái. + +Ngày thứ hai, Thủy tìm được ba mảnh âm. Giọng Tiến tương lai: + +“…nếu tôi giữ lại, nó sẽ dùng tôi để gọi về…” + +Giọng phụ nữ: + +“…xóa đoạn này…” + +Giọng Kha: + +“…mày sẽ không nhớ thỏa thuận…” + +Không câu nào trọn. Nhưng chúng phá một sự chắc chắn: Kha không đơn giản bước vào và giết một người hoàn toàn không biết điều gì. Tiến nghe mảnh âm bằng loa. Khi giọng mình tương lai nói từ “gọi về”, hắn nôn khan. Mùi bê tông nóng trong phòng phân tích biến thành Mễ Trì cũ, dù nhiệt ở đây thấp hơn mười độ. + +Thủy tắt ngay. + +“Chưa hết,” Tiến nói. + +“Cơ thể anh nói hết hôm nay.” + +“Cô không quyết.” + +“Đúng. Tôi đề nghị. Anh đang run tới mức không cầm được cốc.” + +Tiến hạ mắt xuống bàn tay. Nó thật sự run. Họ dừng. + +Ngày thứ ba, Duy phát hiện mẫu dẫn dưới da Tiến tương lai: không phải hình xăm hay “tia sáng”, mà là một lớp vật liệu giao diện cực mảnh bám quanh dây thần kinh, tạo thành đường giống mạng nút. + +“HANOI-07 dùng trạng thái thần kinh làm bộ nhớ?” Đạt hỏi. + +“Có thể là bộ đệm tạm,” Duy nói. “Nếu quá trình ghi hoàn tất, một lớp ký ức và phản xạ có thể được đóng gói như dữ liệu của một nút sống.” + +Anh đặt hai bản đo cạnh nhau. Nhịp tự chủ nền của Tiến trong những phút đầu ngày 09 tháng 5 vẫn khớp hồ sơ năm 2023, trong khi các phản ứng với Mễ Trì mang mẫu của năm 2031. Hai lớp cùng tồn tại, không có dấu một lớp đã xóa lớp kia. + +“Vậy người tỉnh dậy năm 2028 vẫn là tôi của ngày đó?” Tiến hỏi. + +“Dữ liệu hiện có nghiêng về việc ký ức được ghép thêm, không phải ý thức bị thay,” Duy đáp. “Nhưng đây mới là dấu vết, chưa phải lời giải cuối.” + +“Ngày 29/09/2028 tôi nhận vật liệu?” + +“Chưa biết. Có thể anh chỉ nhận mẫu ký ức; lớp vật liệu ba năm sau mới hình thành khi tiếp xúc thiết bị Mễ Trì.” + +Kha đứng gần cửa. “Vì sao phải giết?” Duy nhìn hình. “Nếu không thể tháo giao diện và quá trình ghi trạng thái tiếp tục, ngừng hoạt động thần kinh là một cách cắt.” + +Một cách kỹ thuật để nói giết người. Kha không né. “Tao làm theo yêu cầu?” + +“Có khả năng,” Thủy nói. “Chưa đủ để kết luận.” + +Tiến mở phong bì ký ức của mình. Trong đó, trước cú dao, căn phòng chỉ còn những mảnh rời: ánh đèn đỏ, giọng Kha, cảm giác đã quên một việc quan trọng. + +“Có người đã xóa đoạn khỏi tôi,” hắn nói. + +Vân xem dữ liệu Null. Bà không nhận chắc người phụ nữ là mình. Giọng có thể là phiên bản ba năm sau hoặc tổng hợp. Bước chân kéo trái phù hợp chấn thương Vân có trong một phương án năm 2029, nhưng dùng Hậu Ký để xác nhận người trong Hậu Ký sẽ thành vòng lặp. + +Thủy ghi: + +**Phù hợp, chưa xác nhận.** + +Trong biên bản, Thủy giữ nguyên chữ **có thể**. Cô từ chối đổi nó thành một mệnh đề chắc chắn chỉ vì câu chuyện như thế sẽ gọn hơn. Kết luận của ba ngày chỉ có ba dòng: + +1. Ký ức Tiến không hoàn chỉnh và có dấu Null. +2. Kha trong ít nhất một phương án biết một thỏa thuận mà Tiến sau Null không nhớ. +3. Trạng thái Returned có liên quan tới một quá trình ghi thần kinh chưa hoàn tất. + +Thủy không công khai ảnh mô thần kinh. Cô công khai phương pháp, kết luận và quyền riêng tư của Tiến. Tuấn hỏi tại sao dữ liệu có thể ảnh hưởng thành phố lại không thuộc cộng đồng. + +“Vì cơ thể một người không trở thành tài sản công chỉ vì hệ thống đã dùng nó,” cô đáp. + +Tối, Tiến ngồi ngoài mái, lưng dựa bức tường mát hơn không khí. Hắn lấy thanh lương khô từng giấu dưới gối, bẻ đôi và đưa Thủy một nửa. + +“Ba năm tôi sống bằng ký ức,” hắn nói. “Nếu nó không phải bản đồ, tôi còn gì?” + +“Chuyên môn.” + +“Không đủ.” + +“Người khác.” + +“Không chắc.” + +“Không.” Thủy ăn một miếng nhỏ. “Nhưng người khác có thể sửa anh khi anh nhớ sai. Bản đồ không làm vậy.” + +Tiến ngước lên vầng đỏ qua mái tôn. Lần đầu, việc ký ức không hoàn chỉnh không chỉ là mất lợi thế. Nó là khoảng trống đủ để hiện tại chưa bị lấp kín. + +Chương 72: Kẻ Phản Bội + +Hoàng Tùng xuất hiện trực tiếp ngày 16 tháng 9 trên sân thượng một trung tâm dữ liệu cũ. Hắn không mặc áo giáp hay che mặt. Người gầy, tóc cắt ngắn, bàn tay trái có vết bỏng từ vụ cháy được ghi là đã giết hắn. Sáu người Intervention cũ đứng sau; phía dưới còn xe từ Cầu Diễn — khu từng sống qua đợt nhiệt nhờ truy vấn của Tùng. + +Những người đi cùng Kha không phải một đội quân mua bằng lời hứa; có người thật sự nợ hắn mạng. Kha tới cùng Khánh An và hai đội trưởng, không kéo toàn bộ lực. Tiến, Thủy và đại diện hội đồng đứng ở lối khác. Hai phía có thể bắn nhau, nhưng mọi người đều biết ổ dữ liệu trên bàn sẽ cháy trước khi ai thắng. + +Tùng nhìn Kha. “Anh để hội đồng quyết xe của anh.” + +“Để xe chạy khi tao bị bắn.” + +“Anh gọi đó là trưởng thành?” + +“Gọi là giảm điểm hỏng.” + +Tùng chỉ ổ giao thức. Trong hai tuần, hắn đã đặt hàng trăm truy vấn, thay đổi điều kiện tới khi một phương án đạt tỷ lệ cao nhất: + +**38% dân số vùng được ghi nhận sống qua Đồng Bộ.** + +Điều kiện: + +- tập trung nguồn lực phía Tây; +- bỏ các khu không đủ dữ liệu và quá xa; +- kiểm soát toàn bộ nút; +- loại Tiến khỏi quyền truy cập sau 29/09; +- dùng Thủy làm bộ lọc tín hiệu; +- Đạt xác nhận trạng thái; +- Kha điều phối hậu cần; +- cấm Null. + +Một kế hoạch rõ, tàn nhẫn và có những người sống thật để bảo vệ nó. Một phụ nữ Cầu Diễn bước lên. “Nếu không có anh Tùng, con tôi chết ngày 12.” + +Thủy hỏi: “Chị có được biết phương án bỏ khu nào không?” Người phụ nữ im. + +Tùng nói: “Không thể cứu tất cả.” + +“Đúng,” Thủy đáp. “Nhưng người bị bỏ có quyền biết mình không nằm trong mẫu.” + +Câu truy vấn gốc hiện trên màn hình: + +**Tối đa hóa số người có dữ liệu sống qua 29/09 với hạ tầng còn vận hành.** + +Mô hình không tính được người ngoài dữ liệu, quyền tự quyết hay những gì xảy ra ba năm sau. Tùng không giấu điều đó. “Mọi câu hỏi đều cần giới hạn.” + +Tiến hỏi: “Ai chọn giới hạn?” + +“Người đủ khả năng hiểu hậu quả.” + +“Anh.” + +“Hiện tại, đúng.” + +Kha cười không vui. “Mày phản tao để thành tao với bảng số đẹp hơn.” + +“Anh dùng dữ liệu nhưng vẫn để cảm xúc làm lệch.” + +“Cảm xúc nào?” + +“Em trai anh.” + +Không khí trên sân thượng đổi. Khánh An đặt tay gần súng, không vì sợ Kha bắn ngay, mà vì biết vết thương bị người khác dùng sẽ kéo hắn trở lại thói quen cũ. Kha bước một bước. “Đừng dùng người chết của tao làm điều kiện truy vấn.” + +Tùng nhìn hắn. “Anh dùng cái chết ấy để xây cả hệ thống.” + +“Đúng.” Kha dừng. “Nên tao biết nó biến người thành gì.” + +Lần đầu, Kha không phủ nhận nguồn gốc quyền kiểm soát của mình. Hắn đặt nó lên bàn trước khi Tùng kịp dùng như bí mật. Tùng đưa điều kiện: giao quyền truy cập Ngọc Trục, Láng và Hồ Tây trước ngày 25. Đổi lại, hắn công khai giao thức, phương án 38% và các tuyến trú. + +“Nếu không?” Tiến hỏi. + +“Intervention sẽ lấy.” + +Xe phía dưới bật máy. Nhưng Hổ đã khóa một tuyến theo hiệp ước; Bình chặn tuyến thứ hai; nhóm Tài phát công khai vị trí để dân thường tránh. Tùng có lực, không đủ áp đảo. Tiến giữ nguyên lệnh không nổ súng trước. + +“Cho anh một lối,” hắn nói. “Để thiết bị lại.” + +Tùng cười. “Anh biết nó là bản giả?” + +“Không.” + +“Vẫn thả?” + +“Nếu bắn, những người Cầu Diễn sẽ thấy chúng tôi giết người đã cứu họ để giữ nút. Anh sẽ có bằng chứng tốt hơn mọi tỷ lệ.” + +Một người của Tùng hạ súng. Hai người khác làm theo. Họ tin dữ liệu, nhưng không muốn chết trong một cảnh được dựng để chứng minh chỉ Converge giữ trật tự. Tùng rút với ba người và ổ thật. Hắn bỏ lại bản sao cùng một phần truy vấn — đủ để các khu chuẩn bị, không đủ để nắm quyền. + +Kha nhìn theo. “Mày diễn tốt.” Tiến đáp: “Tôi không biết hắn sẽ rút.” + +“Vậy càng tệ.” + +“Đừng khen.” + +Người phụ nữ Cầu Diễn ở lại hỏi Thủy: “Nếu không theo phương án 38%, cô bảo đảm con tôi sống?” + +“Không.” + +“Vậy sao tôi nghe cô?” + +“Đừng nghe tôi như nghe Tùng. Xem dữ liệu, xem ai bị bỏ, rồi tự chọn nơi chị đứng.” + +Người phụ nữ không hài lòng. Không cần. Đoàn xe của Tùng rời qua lối phía đông. Người phụ nữ Cầu Diễn không đi theo ngay; chị đứng giữa sân thượng, nhìn bản truy vấn trong tay rồi nhìn những người vừa để kẻ cứu con mình rút lui. + +Chương 73: Khóa Hồ Tây + +Thiết bị điều tiết Hồ Tây được dựng từ những thứ không có lý do gì để tin nhau. Van công nghiệp lấy từ trạm bơm cũ. + +Cảm biến Observation Initiative. Bộ điều khiển nằm trong vỏ tủ điện cháy sém do ông Hòa và Đức lắp. + +Một ngắt cơ do Vòng Tròn Vỡ giữ. Ông Hòa gọi nó là “đồ dùng được”. Duy gọi là giải pháp tạm. Quân gọi là một khóa mới. + +Mục tiêu không khóa nước. Là giữ áp lực từ 12 giờ 11 tới 12 giờ 28 ngày 29 trong dải không làm vỡ tuyến hoặc dồn tải trung tâm. Quân tới với hai mươi người, không giương súng nhưng mang thuốc nhiệt cắt trong hộp niêm phong. Phương đi cùng, không đứng hẳn phía nào. + +“Thiết bị của các anh nối hệ thống,” Quân nói. + +Duy chỉ sơ đồ. “Cảm biến đọc tại chỗ. Van điều trong giới hạn cứng.” + +“Giới hạn ai đặt?” + +“Ba nhóm đo độc lập.” + +“Bộ điều khiển có thể nhận lệnh ngoài.” + +“Có ngắt cơ.” + +“Do ai giữ?” + +Tiến đáp: “Hai khóa. Một phía ông, một phía hội đồng.” Quân nhìn hắn. “Anh trao quyền phá cho tôi?” + +“Trao quyền ngắt điều khiển. Không phá mạch nước.” + +Thỏa thuận được thiết kế không dựa vào lòng tin, mà vào việc chẳng bên nào có thể tự mình hoàn tất toàn bộ thao tác. Khi lắp cảm biến, Đạt xuống hố van. Ông phù hợp vì hồ sơ Null khiến tín hiệu nhận dạng ít bị HANOI-07 ưu tiên, nhưng lý do đó không được phép thay cho an toàn. Đội kê hai thanh chống, một dây chính, một dây phụ và giới hạn mỗi lượt dưới mười phút vì nhiệt dưới hố tăng nhanh. Đạt đọc lại chốt trước khi xuống; Đức kiểm khóa. + +Tai nạn vẫn xảy ra ở thứ họ không kiểm được bằng mắt. Một chốt hãm tái sử dụng có vết nứt mỏi nằm bên trong cổ thép. Khi nền rung, chốt gãy, thanh chống trượt dù dây an toàn vẫn giữ người. Tiến giật dây kéo. Đạt rút được bàn tay chậm hơn một phần giây; đốt cuối ngón út tay phải bị kẹp nát giữa hai mép thép. + +Tiếng xương không lớn. Tiếng Đạt hút hơi mới khiến mọi người hiểu. Linh cầm máu, làm mát và đánh giá phần mô ngay tại lều y tế; thuốc giảm đau còn, thuốc tê không đủ cho một thủ thuật kéo dài. Khi buộc phải cắt phần mô không còn tưới máu, cô nói trước từng bước để Đạt biết mình sắp làm gì. Ông nhìn lên mái bạt, mồ hôi chảy vào tai, chỉ gật khi nghe tới phần mình đồng ý. + +Bức ảnh Hậu Ký hiện trong đầu tất cả: người thứ ba thiếu ngón út. Thủy đứng ngoài lều, buồn nôn. “Chúng ta đưa ông ấy tới đây vì ảnh.” + +Tiến nói: “Vì điều kiện Observer.” + +“Điều kiện đó cũng từ hồ sơ.” + +“Còn dữ liệu Null.” + +“Cũng từ hệ thống.” + +Không tách được hoàn toàn quyết định hiện tại khỏi thứ đã biết trước. Khi tỉnh sau thuốc giảm đau, Đạt yêu cầu ghi nguyên nhân chính xác: + +**Tai nạn xảy ra khi thanh chống trượt trong lúc lắp cảm biến. Việc đã biết trước bức ảnh có thể ảnh hưởng lựa chọn nhân sự, nhưng không đủ chứng minh quan hệ nhân quả.** + +Tiến muốn dừng lắp. Đạt lắc. “Tôi không xuống lại. Người khác thay.” + +“Ảnh đang hội tụ.” + +“Dừng mọi việc vì ảnh cũng là hội tụ.” + +Quân đứng ngoài nghe. Ông không chế giễu. “Nếu ảnh nói tôi chết ở đây, tôi vẫn muốn biết van có giữ không.” Phương nhìn ông. “Anh luôn nói dễ khi mạng người khác nằm trên bàn.” + +Quân quay sang. “Tôi đã kéo em khỏi Đại Hà.” + +“Và từ đó anh nghĩ mọi quyết định của anh về em đều có thêm trọng lượng.” + +Ông im. Đây là lần đầu họ nói công khai điều nằm giữa hai người. + +Buổi chiều, van thử áp lực thấp. Mô-tơ chạy, kim tăng, ngắt cơ chuyển được sang tay. Đức phát hiện độ trễ 0,7 giây giữa cảm biến và bộ chấp hành; đủ để nguy hiểm khi tải tăng nhanh. Họ không ghi “thành công” rồi đi. Ông Hòa thêm lò xo hồi, một bộ chỉ cơ độc lập và yêu cầu thay toàn bộ chốt hãm cùng lô với chiếc vừa gãy, dù những chốt còn lại nhìn vẫn nguyên. + +Tối, thử lại. Độ trễ giảm. Người xuống hố đổi ca đúng giờ thay vì cố làm nốt. Không màn hình HANOI-07 chúc mừng. Chỉ tiếng mô-tơ, nước chuyển trong ống và một túi nhỏ đựng những chốt thép bị loại nằm cạnh bảng sự cố. + +My gặp Đạt khi ông về Ngọc Trục. Con bé nhìn băng tay, nhớ người đưa giấy có cả cánh tay mất. + +“Ông sẽ mất thêm không?” + +“Không biết.” + +“Cháu không muốn.” + +“Ông cũng.” + +My cầm ba ngón còn lại. Đạt không rút. Duy kiểm bản ảnh Kha lưu. Chi tiết ngón tay rõ hơn sau tai nạn. Bức ảnh đã thay đổi theo sự kiện hiện tại; nó không phải một khung hình bất biến từ “tương lai nguyên vẹn”. + +Từ ngày đó, Đạt tự nguyện ngừng xem Hậu Ký. Quyết định ấy do chính ông đưa ra, không ai tước quyền. Ông giữ quyền quan sát hiện tại bằng cách từ chối học thuộc phương án. Quân ký biên bản van, rồi đặt chìa ngắt cơ vào hộp có hai ổ khóa. + +“Tin?” Phương hỏi. + +“Tin kim.” + +“Còn người?” + +“Tin họ có thể sai.” + +Ông đóng nắp hộp. Phương giữ chìa thứ hai; Quân giữ chìa thứ nhất. Không ai thử xem một mình có mở được hay không. + +Chương 74: Bảy Phút Mất Điện + +Ngày 20 tháng 9, hội đồng cho phép thử một phiên bắt tay tín hiệu trong ba mươi giây. Không mở Hoàng Thành. Không truy vấn Hậu Ký. Chỉ cho Ngọc Trục, Láng và bộ điều tiết Hồ Tây trao đổi trạng thái qua đường thử tách khỏi mạng chính. + +Quyết định được bỏ phiếu sau ba ngày tranh luận. Kha muốn thử dài hơn. Vân muốn không thử. Duy nói mô phỏng ngoài mạng chưa phản ánh cộng hưởng vật lý. Tiến bỏ phiếu thuận với giới hạn ba mươi giây và quyền ngắt tại từng nút. 12 giờ 17. + +Duy bắt đầu. Áp lực giữ. + +Tần số giữ. Nhiệt trên tuyến thử giảm 0,3 độ. + +Mười hai giây. Mười tám. + +Màn hình hiện **HANDSHAKE**. Rồi điện tắt. + +Không chỉ ba nút. Cả vùng phía Tây tối theo từng dải. Radio im. Camera mất. Quạt bệnh viện dừng, để lại tiếng bệnh nhân thở và bàn chân chạy trong hành lang. + +“Ngắt!” Duy nói. + +Quân kéo tay cơ ở Hồ Tây. Không phản ứng ngay. Vân bật Null. Đèn thiết bị sáng nhưng đường tham chiếu vẫn giữ. + +Thủy nghe chuông. Một. + +Hai. Bảy tiếng, không cách đều. Mỗi tiếng làm xương hàm cô rung hơn là tai nghe. + +Đồng hồ cơ tiếp tục. Khi điện trở lại, đã qua bảy phút. + +Trong bảy phút ấy, ba việc xảy ra. Bệnh viện bóp bóng bằng tay cho sáu bệnh nhân; một người ngừng tim rồi được kéo lại. + +Kho lương nhỏ bị mở trong bóng tối, mất bốn bao gạo. Hai người tại Láng nghe người thân gọi và đi xuống đường hầm. Một người gãy chân, người kia mất ký ức từ lúc bước qua cửa tới khi được tìm thấy sáu giờ sau. + +Ở Ngọc Trục, kẻ đột nhập không thắng bằng việc khiến Nam quên bài học cũ. Chúng thắng vì đã học đúng quy trình mới. + +Khi điện tắt, Nam nghe giọng Tiến qua dây nội bộ: “Mở cổng bắc cho đội điện.” Giọng có hướng từ loa, đúng mã. Cậu không mở. Nam kéo dây xác nhận cơ từ chòi ngoài — tín hiệu thứ hai đã được quy định sau vụ Dư Âm. Hai nhịp ngắn, một dài trả về đúng mẫu. Chỉ khi đủ cả giọng và dây, cậu mới mở sân đệm thứ nhất, chưa mở cổng lõi. + +Không có đội điện. Một người đã chờ sẵn trong vùng chết giữa hai hàng rào, lao vào lấy hộp dụng cụ và đánh dấu tường bằng sơn phản quang trước khi bị Bình bắt. Sau đó họ mới phát hiện dây xác nhận cơ và dây loa cùng đi qua một ống bảo trì ở đoạn cuối. Kẻ ngoài không giả được hai hệ thống độc lập; chúng lợi dụng việc hai thứ tưởng độc lập lại chung một đường vật lý. + +Nam tự xin rời phòng radio. Tiến không đồng ý ngay lập tức. + +“Cậu đã làm gì?” + +“Xác nhận hai nguồn.” + +“Đúng quy trình?” + +“Đúng.” + +“Vậy lỗi đầu tiên không nằm ở cậu.” + +Nam nhìn vệt sơn. “Nhưng tay em là tay kéo chốt.” + +“Ừ,” Tiến nói. “Phần đó cậu phải ghi và phải nhớ. Nhưng nếu chúng ta kết luận chỉ vì cậu kéo chốt thì lần sau sẽ thay một người khác vào rồi lặp lại y hệt. Hai kênh được gọi là độc lập trong khi chung một ống — đó là lỗi thiết kế.” + +Quy trình được sửa lần nữa: khi mất hình, lệnh mở cổng cần hai xác nhận **khác đường vật lý**; một từ chòi ngoài bằng dây cơ, một từ người tại cổng bằng thẻ màu hoặc gương quang. Nếu thiếu một, đội y tế đi qua khe bảo vệ chứ không mở sân. Nam ở lại ca, nhưng không giữ một mình. Hội đồng họp trong chiều. Tiến nói: “Lỗi của tôi.” + +Duy: “Thiết kế của tôi.” Vân: “Null không giữ.” + +Quân: “Tôi đồng ý thử.” Tuấn gõ đầu bút xuống bàn. “Ghi từng trách nhiệm riêng. Nhưng trước hết vẽ lại đường đi của tín hiệu. Tôi không muốn cuộc họp kết thúc bằng ba người cùng nhận lỗi rồi chẳng ai biết phải sửa dây nào.” + +Băng giấy cho thấy HANOI-07 tự mở rộng phiên bắt tay khi nhận mẫu trạng thái liên quan Tiến, dù hắn không chạm trực tiếp. Đường thử tách về phần mềm nhưng vẫn chung mạng vật lý. Một giả định kỹ thuật sai. Thủy đặt bảy tiếng chuông cạnh thời điểm các lớp trở lại. Sáu tiếng gần trùng; tiếng thứ ba lệch bốn giây. + +“Có thể độ trễ,” Duy nói. + +“Hoặc tôi nghe thứ khác,” Thủy đáp. + +Không tự biến mình thành cảm biến hoàn hảo để câu chuyện gọn hơn. Hội đồng bỏ phiếu dừng mọi thử nghiệm đồng bộ trước ngày 29. + +Kha chống. “Đi vào ngày đó mà không test là mù.” Tiến thuận dừng. “Test vừa dùng bệnh viện, Nam và người Láng làm tải thử.” + +“Càng cần biết.” + +“Không trên người khác.” + +Kha thua và chấp nhận, nhưng yêu cầu luyện quy trình cơ ngoài mạng. Đề nghị được thông qua. Từ đó, các đội tập bằng đồng hồ giấy, cờ tay, dây điện thoại, van cơ và lịch không phụ thuộc radio. Người ta chửi vì chậm, nhưng mỗi người tại nút bắt đầu biết phải làm gì nếu trung tâm biến mất. + +Khi điện trở lại, bảy chiếc đồng hồ không cùng chỉ một giờ. Đạt nhìn chúng, rồi để nguyên. + +Chương 75: Người Thứ Ba Trong Ảnh + +Ngày 24 tháng 9, Nguyễn Hữu Đạt đứng đúng vị trí từng xuất hiện trong bức ảnh. Không ai chủ động dàn dựng để điều đó xảy ra. + +Cửa ngoài Hoàng Thành mở lúc 02 giờ 17 để kiểm kết cấu sau bảy phút mất điện. Tiến đứng ở mốc Ngọc Trục, Thủy đặt cảm biến tại đường Láng, Đạt kiểm vùng Null. Khánh An giữ lối ngoài, Duy theo dõi áp lực. + +“Đừng cử động,” Khánh An nói. + +Cô lấy bản ảnh Hậu Ký cũ khỏi túi trong. Ba vị trí gần trùng. Bàn tay phải Đạt giờ thiếu đốt ngón út. Góc vai Tiến và khoảng cách Thủy tới cột cũng giống. Chỉ thời gian sai: hiện tại là ngày 24, 02 giờ 18. Ảnh ghi ngày 29, 12 giờ 23. + +Tiến cảm thấy căn phòng thu hẹp. Hắn không nhìn mặt người thứ ba trong ảnh; nhìn vệt máu tối sau vai mình, một chi tiết chưa xảy ra. Duy đặt camera ở góc ảnh giả định. Không có lỗ ống kính, không dây và không hốc máy. Góc nhìn thậm chí xuyên qua phần tường đặc. + +“Đây không phải ảnh camera,” anh nói. “Nó là hình dựng từ mô hình không gian.” + +Kha mang tới bản cập nhật lưu trong kho còn lại. Sau thử nghiệm bảy phút, ảnh thay đổi: + +- ngón tay Đạt rõ hơn; +- áo Thủy có vết rách; +- vai Tiến có máu; +- bóng thứ tư đậm hơn; +- nền phía sau xuất hiện đường trắng chưa có ở cửa ngoài hiện tại. + +“Hậu Ký đang cập nhật theo dữ liệu mới,” Thủy nói. + +“Hoặc phương án đang kéo chúng ta vào,” Khánh An đáp. + +“Cách nói thứ hai dễ biến mọi lựa chọn thành bất lực.” + +Khánh An không phản bác. Cô từng sống bằng cách đo nguy cơ, không bằng cách phủ nhận nó. Họ chụp một ảnh vật lý ở đúng góc. Trên tường chỉ có ba bóng và một vùng tối do cột che. Khi Duy chiếu dữ liệu từ ba nguồn lên, vùng tối tách thành nhiều đường chồng, gần giống hình người thứ tư. + +“Lớp tổng hợp,” anh nói. “Nếu hệ thống ghép nhiều Observer thành một trạng thái, nó có thể dựng một hình đại diện.” + +Thủy phóng lớn. Ở mép tường còn một vệt đen không khớp nguồn sáng. Duy tách từng nguồn dựng và phát hiện lớp hình từ camera hành lang chậm hơn cảm biến trong phòng 0,43 giây. Trong khoảng lệch ấy, bóng Khánh An ngoài ngưỡng cửa bị giữ lại sau khi vị trí cơ thể cô đã được loại khỏi khung. + +Anh đồng bộ lại thời gian. Vệt đen biến mất; bốn đường còn lại hội tụ đúng vào lớp Observer tổng hợp. Duy sửa biên bản: + +**SAI LỆCH HÌNH HỌC ĐÃ XÁC ĐỊNH — BÓNG NGOÀI KHUNG BỊ GHÉP LỆCH PHA. KHÔNG CÓ NGƯỜI THỨ TƯ VẬT LÝ.** + +Khánh An nhìn vùng tường đã sạch. “Ít nhất lần này một cái bóng chỉ là lỗi thời gian.” + +“Lỗi thời gian đã đủ kéo chúng ta đi rất xa,” Thủy đáp. + +Câu mặt sau ảnh: + +**NGƯỜI THỨ BA KHÔNG ĐƯỢC PHÉP NHỚ.** + +Đạt ngồi xuống bậc đá. “Tôi không định xóa đời mình.” + +“Không được nạp cùng bản dự báo,” Thủy nói. “Nếu ông biết chính xác ảnh, ba nguồn sẽ bớt khác nhau.” + +“Vậy từ giờ tôi không xem.” + +Kha hỏi qua dây: “Không muốn biết mình mất gì?” + +“Muốn.” Đạt nhìn bàn tay băng. “Chính vì vậy.” + +Tiến cũng giao bản ảnh cập nhật cho Thủy giữ. “Tôi không xem thêm.” Kha cười nhạt. “Hai người thi nhau mù.” + +“Không,” Thủy nói. “Họ chọn nguồn nào được phép ảnh hưởng quyết định.” + +Kha chưa giao bản của mình. Hắn nhìn vệt máu sau vai Tiến lâu hơn, như một người đã từng sống nhờ biết trước và chưa thể bỏ thói quen trong một ngày. Khi kiểm cửa xong, Đạt trượt trên bậc ướt. Bàn tay bị thương va vào tường nhưng không nặng. Mọi người cùng giật mình vì ảnh. Đạt ngồi yên, đợi Linh qua radio xác nhận không gãy. + +“Thấy chưa?” Kha nói. “Biết trước làm mọi chuyển động thành tín hiệu.” + +Tiến đáp: “Không biết trước cũng không làm bậc khô.” Cả hai đúng một phần. + +Trở về Ngọc Trục, Đạt xé bản sao ảnh riêng của mình, không đốt. Ông đưa các mảnh cho Thủy niêm phong để sau ngày 29 có thể kiểm xem quyết định “không xem” đã ảnh hưởng gì. My hỏi: “Nếu không nhìn, ông có tránh được không?” + +Đạt nói: “Không chắc.” + +“Vậy sao không nhìn?” + +“Để khi chọn bước nào, ông còn biết có phần là do mình.” + +Con bé không hiểu hết, nhưng gật như người lớn thường gật trước điều chưa đủ từ. Bức ảnh không còn là cửa sổ nhìn một tương lai cố định. + +Nó là tấm gương kỳ lạ: càng nhiều người nhìn, hành vi của họ càng trở thành dữ liệu để hình trong gương rõ thêm. Còn năm ngày, và mỗi người phải quyết mình được phép nhìn bao nhiêu. + +Chương 76: Con Dao Ở Mễ Trì + +Hoàng Tùng gửi phần còn lại của bốn mươi ba phút vào sáng 26 tháng 9. Không đòi nước, nút hay quyền truy cập. Chỉ một câu: + +**XEM TRƯỚC KHI CHỌN PRESERVE.** + +Duy kiểm cấu trúc. Nhiều lớp khớp dải nhớ gốc, nhưng đoạn đã qua một khóa Hậu Ký nên có thể bị chọn lọc. Vân yêu cầu không xem vì người gửi đang chọn thời điểm. Kha yêu cầu xem vì tên và con dao của hắn nằm trong đó. Hội đồng không bỏ phiếu thay những người có cơ thể trong bản ghi. + +Tiến đồng ý. Phòng xem chỉ có Tiến, Thủy, Kha, Vân, Duy và Đạt. Bình đứng ngoài. Mỗi người có một nút dừng cơ. Vũ khí bị để ngoài; trong phòng chỉ có con dao mô phỏng đặt trong hộp kính để so hình học. + +Bản ghi bắt đầu sau khi Null kích hoạt. Mễ Trì B3 năm 2031. Tiến tương lai ngồi dưới sàn, cánh tay gắn vào lớp vật liệu đỏ mảnh. Da quanh điểm tiếp xúc đã cháy. Kha quỳ trước, áo rách, máu không rõ của ai. Vân dựa tường, chân trái bị thương. + +Trên bảng cơ là ngày **29/09/2031** và hai dải pha được chồng lên nhau: cửa sổ Đồng Bộ năm 2028, cấu hình nguồn hiện tại năm 2031. Kha tương lai nhìn bảng. “Ba năm đúng ngày. Hệ thống tự mở lại?” + +“Không,” Vân đáp. “Chúng ta chọn ngày này.” + +Bà chỉ các thông số được dựng bằng tay: áp lực Hồ Tây, pha dao động Láng, cấu hình rơ-le Thanh Xuân và khóa lịch của cửa sổ 2028. Họ đã mất mười chín ngày để đưa các giá trị vào cùng dải. + +“Ngày 29 tháng 9 không phải chu kỳ tự nhiên ba năm,” Vân nói. “Đó là mốc tương thích gần nhất chúng ta có thể tái tạo. Không dựng lại điều kiện này, quá trình phản hồi không biết phải ghép nguồn vào đâu.” + +Tiến tương lai nói: “Kênh sẽ tách làm hai. Khối dữ liệu máy đi về rơ-le thử nghiệm năm 2026, nơi Duy còn có thể viết lớp đọc. Ký ức đi về mốc 07 giờ 13 ngày 09 tháng 5 năm 2028.” Kha nhìn hắn. “Vậy tệp Hậu Ký tồn tại vì mày gửi hạt giống để người trước tạo ra thứ dẫn chúng ta tới đây.” + +“Phần lõi tồn tại trong một vòng kín,” Tiến đáp. “Nhưng giao thức truy vấn, cách dùng và mọi câu hỏi là do người ở năm 2026 trở đi viết. Đừng đổ trách nhiệm của chúng ta cho nghịch lý.” + +“Ba năm dữ liệu ở trong tôi,” Tiến tương lai nói. + +Kha đáp: “Cắt giao diện.” + +“Không được. Nó đã vào trạng thái.” + +Vân nhìn thiết bị. “Nếu việc ghi trạng thái hoàn tất, giao thức có thể phản hồi lớp ký ức này về mốc năm 2028.” Kha tương lai hỏi: “Ghi đè người ở đó?” + +“Nếu đường nền còn ổn thì không. Lớp ký ức sẽ được ghép lên chủ thể đang sống.” Vân nhìn Tiến. “Nhưng nếu mang cả giao thức điều khiển, người ở mốc cũ có thể bị biến thành một nút.” + +Tiến hiện tại nghiêng người. Đây là lần đầu bản ghi nói rõ sự phản hồi không nhằm thay thế Tiến năm 2028. Nó chồng ký ức lên một con người đã tồn tại — và nguy cơ nằm ở phần giao thức đi kèm. Kha tương lai hỏi: “Thì sao?” + +“Lần này tôi trở về với tư cách một người. Lần sau, nếu mang theo cả giao thức, tôi có thể chỉ còn là một nút.” + +Cơ thể không đi qua thời gian; một trạng thái thần kinh được ghi lại rồi phát ngược về một điểm cũ. Tiến tương lai yêu cầu Vân Null đoạn thỏa thuận và thông tin về giao thức. Trước khi Vân đặt tay lên bộ điều khiển, hắn hỏi Kha một câu không liên quan tới writeback: + +“Kho phía đông La Phù. Bao nhiêu?” + +Kha tương lai không giả vờ không hiểu. “Một trăm ba mươi bảy tên xác nhận. Ngoài sổ không biết.” + +“Anh ra lệnh đóng cổng?” + +“Có. Đoàn phía trong báo nước nhiễm và đám đông đã phá hàng rào. Tao lấy phần lương còn khô, cho bắn khi cổng vỡ. Số đó nuôi bốn nghìn người qua mùa đầu.” + +“Không phải câu tôi hỏi.” + +“Nhưng là câu tao từng dùng để ngủ.” Kha nhìn con dao. “Cứ ghi cả hai. Tao cứu người bằng số lương lấy từ một sân đầy xác. Không sự thật nào xóa sự thật kia.” + +Tiến hiện tại thấy ký ức ban đầu trở lại, lần này không còn được dựng chỉ từ lời đồn. Một phần có thể thiên lệch; mệnh lệnh đóng cổng thì không. + +“Anh sẽ chỉ nhớ Kha giết,” Vân nói. + +“Đủ để tôi không tin hắn hoàn toàn.” + +Kha nhìn hắn. “Mày dùng tao làm kẻ thù cho chính mày.” + +“Anh hợp vai.” + +Một câu đùa tệ giữa ba người đã kiệt sức. Kha hiện tại không cười. + +“Nếu mày trở lại và giết tao trước?” Kha tương lai hỏi. + +“Né.” + +“Không buồn cười.” + +“Biết.” + +Rồi Tiến tương lai nghiêm lại. “Nếu Null không cắt được phần giao thức và nó bắt đầu dùng tôi làm nút, giết tôi.” Kha nói ngay: “Không.” + +“Anh đã giết nhiều người vì ít lý do hơn.” + +“Không phải mày.” + +“Chính vì vậy tôi mới giao anh. Người khác sẽ làm quá sớm hoặc không làm.” + +Vân nói thời gian hết. Kha nắm dao. “Sau khi xóa, mày không nhớ đồng ý.” + +“Đừng nói lý do. HANOI-07 có thể dùng lời.” + +“Vậy tao nói gì?” + +“Điều anh tin.” + +Null bắt đầu. Hình ảnh rung. Tiến tương lai quên phần vừa nói; nét mặt thay đổi như người tỉnh giữa một căn phòng không biết vì sao mình ở đó. Vân rời khung. + +Kha đứng một mình với quyết định. + +“Lê Quốc Tiến,” hắn nói. “Mày vốn không nên sống lâu đến thế.” + +Dao đâm. Không ai trong phòng hiện tại cử động cho tới khi bản ghi tắt. + +Tiến nhận ra tay mình đã bám mép ghế đến bật máu dưới móng. Thủy đưa khăn, không nói câu nào. Kha nhìn màn hình đen. “Tao từ chối trước.” + +“Rồi làm,” Tiến nói. + +“Ừ.” + +“Không tha.” + +“Không hỏi.” + +Một sự đồng ý trong tương lai không xóa hành động. Nó chỉ trả lại phần nguyên nhân đã bị ký ức cắt. Thỏa thuận Mễ Trì cũng không rửa sạch La Phù; nó chỉ khiến Tiến phải phân biệt người Kha đang đứng trước mặt với kẻ Kha có thể trở thành khi mọi quyền tập trung vào tay hắn. + +Kha hiện tại nói, mắt vẫn ở màn hình đen: “Tao chưa đóng cổng đó trong phương án này.” + +“Chưa,” Tiến đáp. + +“Vậy đừng để tao một mình với cái lệnh tương tự.” + +Thủy hỏi Kha: “Nếu ngày 29 trạng thái Tiến bị hệ thống chiếm, anh làm gì?” + +“Cắt.” + +“Giết?” + +Kha nhìn con dao trong hộp. “Không biết.” + +“Vậy cần quy tắc trước khi không còn thời gian.” + +Họ viết quy trình không phải bằng triết lý, mà bằng thứ tự thao tác: + +1. Đạt xác nhận dấu vật lý và ý thức. +2. Thủy phân biệt tín hiệu thật, Dư Âm và hình mô hình. +3. Vân thử Null giới hạn. +4. Duy cắt kết nối kỹ thuật. +5. Nếu phải cắt mô, dùng biện pháp bảo toàn mạng sống trước. +6. Chỉ khi mọi cách thất bại mới xem xét ngừng trạng thái thần kinh. +7. Không một mình Kha hoặc Tiến có quyền quyết. + +Kha đọc. “Đặt dao vào hội đồng.” + +“Đặt nó khỏi tay một người,” Tiến đáp. + +“Chậm.” + +“Đúng.” + +“Có thể chết cả thành phố.” + +“Có thể.” + +Kha ký. Chữ hắn mạnh hơn bình thường, nét cuối làm rách giấy. Tùng gửi một câu sau khi biết bản ghi đã được mở: + +**CHIA TRÁCH NHIỆM KHÔNG LÀM QUYẾT ĐỊNH ĐÚNG HƠN.** + +Thủy trả: + +**KHÔNG. NÓ CHỈ LÀM KHÓ HƠN CHO MỘT NGƯỜI GỌI Ý MUỐN CỦA MÌNH LÀ TẤT YẾU.** + +Đêm, Tiến không giấu lương khô dưới gối. Hắn đặt nó trên bàn, cạnh bản quy trình có chữ Kha. Con dao Mễ Trì vẫn tồn tại trong tương lai đã sống. + +Nhưng lần này, trước khi ai cầm nó, đã có người khác biết câu chuyện và có quyền nói dừng. + +Chương 77: Hai Ngày Không Hậu Ký + +Ngày 27 tháng 9, Kha đóng phần Hậu Ký còn lại. Hắn không đốt ổ dữ liệu. Tháo nguồn, chia thành ba hộp, giao cho Ngọc Trục, nhóm Tài và kho của mình. Mỗi hộp có hai khóa do hai phía giữ. + +“Không truy vấn hai ngày,” hắn nói. + +Tiến đối diện hắn. “Anh chịu được?” + +“Không.” + +“Vẫn?” + +“Ừ.” + +Mất Hậu Ký với Kha không giống bỏ một món đồ xấu. Nó giống tự bịt một mắt trước khi đi vào chiến trường. Hắn không giả bình thản. Hai ngày không dự báo khiến thành phố ồn hơn. Không có câu trả lời mới, mọi người quay lại đo, vá và cãi. + +Ngọc Trục hoàn tất bể nước phụ. Trẻ con được chuyển tới hầm mát xa nút. Nam dán lịch liên lạc cơ lên ba bức tường và tập tình huống mất giọng giả. Bình kiểm từng cụm moay-ơ, lốp và điểm cứu hộ sau mười bảy cái chết trong chuyến sơ tán phía nam. Linh tách thuốc thành hai kho. Phương lập danh sách bệnh nhân có thể di chuyển. + +Ông Hòa kiểm dây bằng bộ kẹp, ba ngón tay còn lại cứng vì sẹo. Đức muốn thay toàn bộ, ông không cho vì vật tư không đủ. + +“Chạy được chưa chắc đúng,” Đức nói, nhại ông. + +“Cậu tiến bộ.” + +“Vậy thay?” + +“Không có dây.” + +Hai người cùng chửi một câu rồi làm tiếp. + +Khánh An hoàn thiện quy trình kiểm tra chéo cuối cùng: mọi lệnh từ Hoàng Thành phải được người tại nút xác nhận bằng một dữ liệu vật lý, không chỉ bằng mã; người điều khiển thiết bị không được tự xác nhận chính thiết bị ấy. Cô không nhận chức dưới Kha hay Tiến; hội đồng lập hẳn một nhóm luân phiên theo mô hình cô đề xuất. + +“Đây là thứ của cô,” Thủy nói. + +Khánh An nhìn bảng phân ca. “Chỉ khi người khác dùng được lúc tôi không có.” Buổi tối, Tiến và Thủy ngồi sửa máy ghi ở bậc kho. Không họp, không dữ liệu. Cô thay miếng đệm micro, hắn cắt một đoạn dây da từ túi cũ. + +“Sau ngày 29, cô làm gì?” Tiến hỏi. + +“Nếu còn nghe, ghi. Nếu không, vẫn ghi.” + +“Ở Hà Nội?” + +“Có thể.” + +Hắn nhăn mặt vì từ đó. Thủy cười. “Anh dùng được, tôi không?” + +“Được.” + +“Anh?” + +“Vận hành.” + +“Không phải trả lời.” + +Tiến dõi những người ngoài sân. “Tôi không biết mình là gì nếu không chuẩn bị cho ngày tiếp.” + +“Thử là người ăn tối trước khi nguội.” + +Cô đưa hắn bát cháo Hạnh vừa mang. Tiến ăn được nửa bát mới nhận ra Thủy đã gắp hết phần thịt vụn sang phía hắn. + +“Cô không ăn à?” + +“Ăn rồi.” + +“Cô nói dối kém.” + +“Anh nhận ra muộn.” + +Hắn đẩy nửa phần trở lại. Hai người tiếp tục ăn. Không họp, không dữ liệu, không ai cần thắng bất kỳ cuộc tranh luận nào. Mẹ Tiến gọi lúc 21 giờ. + +“Ngày kia ở đâu?” + +“Hoàng Thành.” + +“Không thể không đi?” + +“Không.” + +“Con chắc?” + +“Không.” + +“Vẫn?” + +“Vâng.” + +Bà im, rồi nói: “Gọi trước.” + +“Con sẽ.” + +“Không hứa sống.” + +Tiến nhắm mắt. “Con hứa không coi mình là cái máy phải cắm vào đó.” + +“Được.” + +Thủy ngồi gần đủ nghe câu cuối. Khi máy tắt, cô nói: “Nếu tôi dùng Null và quên anh?” + +“Tôi kể lại.” + +“Nếu tôi không tin?” + +“Đưa nguồn.” + +“Đúng nghề.” + +Cô đặt tay lên mu bàn tay hắn, chỉ một giây. Không lời hứa lớn. Một xác nhận rằng nếu ký ức bị mất, người còn lại không có quyền viết thay kết quả; phải đưa bằng chứng và cho người kia chọn lại. Nhóm Tài giao hồ sơ cuối cùng của bộ máy cũ. Một lệnh trước Hồng Nhật: + +**ƯU TIÊN BẢO TOÀN CONTINUITY OF GOVERNANCE.** + +Bảo toàn bộ máy, không ghi dân số. Tài chụp công khai rồi đốt bản lệnh hành động. Không đốt lịch sử. Chỉ từ chối tiếp tục thi hành. + +Trên mái kho, Khánh An hỏi Kha câu hắn muốn hỏi Hậu Ký nhất. + +“Ngày 30 tao còn sống không.” + +“Và?” + +“Không hỏi.” + +“Khó?” + +“Như lái xe không bản đồ.” + +“Anh từng tự vẽ đường.” + +“Giờ có quá nhiều người cùng vẽ.” + +“Đó là lý do đường còn.” + +Hai ngày không Hậu Ký không làm ai tự do khỏi những gì đã đọc. Những ngày chết, ảnh và tỷ lệ vẫn nằm trong đầu. Nhưng trong bốn mươi tám giờ cuối, không có câu mới từ tương lai chen vào giữa một người và quyết định của họ. + +Chương 78: Đêm 28 Tháng 9 + +Hà Nội im hơn mọi đêm nhưng không yên. Các tuyến quanh Hoàng Thành đã sơ tán. Đèn tắt bớt để giảm tải. Người ta ngủ mặc quần áo, túi nước đặt bên đầu, tên và nhóm máu viết lên miếng nhôm đeo cổ. Ở các khu cao, mặt đường vẫn nhả nhiệt dù đã quá nửa đêm. + +23 giờ, Tiến đi một vòng Ngọc Trục. Hắn kiểm cổng, bể nước, bảng radio, dây điện thoại và lối thoát. Tới khu bếp, Hạnh dúi vào tay hắn hai miếng cơm nén. + +“Ăn trên đường.” + +“Không đói.” + +“Không hỏi.” + +Câu của mẹ hắn đã lan thành thói quen trong căn cứ. Bình đứng bên xe. “Không dặn gì?” + +“Giữ.” + +“Câu cũ.” + +“Dùng được.” + +Nam trong phòng radio hỏi: “Nếu mất liên lạc?” + +“Theo bảng cơ.” + +“Nếu nghe giọng anh bảo mở?” + +“Không mở nếu thiếu xác nhận vật lý từ hai điểm.” + +Nam chạm vệt sơn còn lại từ sai lầm bảy phút mất điện. “Vâng.” Linh ngủ đúng hai mươi phút trước ca. Phương kiểm túi dịch lần cuối. Phúc ngồi cạnh em gái, hai người không nói về Đại Hà; anh chỉ đưa cô chai nước đã đánh dấu phần của mình. + +Ông Hòa giao bộ kẹp dự phòng cho Đức. + +“Bác đi Láng?” + +“Ừ.” + +“Tay?” + +“Còn.” + +Tuấn đại diện hội đồng ở lại Ngọc Trục. Tiến rời căn cứ mà quyền điều hành không đi theo hắn. 0 giờ, các đội vào vị trí: + +- Tiến, Thủy, Đạt, Vân, Duy ở vòng ngoài Hoàng Thành; +- Kha và Khánh An giữ can thiệp cùng lối dân sự; +- ông Hòa, Đức và Quân giữ Khóa phía Tây; +- Phương và Linh điều phối y tế; +- Bình chỉ huy sơ tán; +- Tài và Hương giữ radio dân sự; +- Phúc vận chuyển thương binh. + +Hoàng Tùng chưa xuất hiện. 02 giờ 17, cửa ngoài Hoàng Thành mở bốn phút. Họ chỉ đặt thiết bị và rút. Cột trạng thái hiện: + +**SYNCHRONIZATION WINDOW: 10:00:00** + +Ba lựa chọn vẫn nằm trên giao diện. Không bàn tay nào chạm vào chúng. 06 giờ, Hồng Nhật mọc qua lớp không khí nâu đỏ. Dữ liệu đo xa vệ tinh xác nhận bức xạ ngoài khí quyển chỉ tăng nhẹ; phần nhiệt lớn vẫn bị khuếch trong khí quyển. Cổng Thăng Long, dù làm gì, sẽ không tắt được mặt trời trên đầu. + +08 giờ, Intervention của Tùng di chuyển tới Hồ Tây. Kha nghe báo, tay đã đặt lên cửa xe. Tiến nói qua radio: “Giữ vị trí.” + +“Chúng lấy van.” + +“Quân và Phương ở đó.” + +“Không đủ.” + +“Anh là dự phòng Hoàng Thành.” + +Kha nhìn Khánh An. Cô không ra lệnh, chỉ đứng chờ hắn tự chọn. Hắn ở lại. + +Một quyết định khác phương án cũ: không để kẻ phản bội kéo mình khỏi vị trí chỉ vì thù. 09 giờ, mẹ Tiến gọi. + +“Ăn chưa?” + +“Rồi.” + +“Nói dối.” + +Hắn cắn một miếng cơm nén trước micro. + +“Được.” + +Bà im vài giây. “Tiến.” + +“Vâng.” + +“Mẹ nhớ con.” + +Hắn nhìn bức tường đá trước mặt. “Con cũng nhớ mẹ.” + +“Đủ rồi.” + +Không lời cuối. Bà cúp trước. 10 giờ, Tùng phát ba dòng khắp radio: + +**CONVERGE: 38% SURVIVAL** +**PRESERVE: UNKNOWN** +**NULL: 11% ESTIMATED** + +Con số 38 trở thành một lời gọi. Người dân bắt đầu di chuyển về Ba Đình vì sợ mình ở ngoài mẫu. Tài và Hương phát cảnh báo, không ngăn được hết. Kha hỏi Tiến: “Mày chọn?” + +“Chưa.” + +“Đến lúc.” + +“Không chọn vì hắn phát.” + +11 giờ, áp lực Hồ Tây tăng. Khóa Tây rung. Thủy nghe tiếng chuông đầu tiên, có hướng từ Hoàng Thành và được cảm biến ghi. Cô đánh dấu **âm vật lý**. 11 giờ 43, đoàn dân thường xuất hiện phía bắc. Họ mang trẻ em, người già và tấm biển **CHO CHÚNG TÔI VÀO 38%**. Kha phải giữ hàng rào mà không bắn. Khánh An mở lối phụ để người bị ép ngã ra ngoài, tránh giẫm đạp. + +12 giờ, mười bảy phút còn lại. Tiến đứng trước giao diện, bàn tay không chạm. Vết sẹo cổ tay từ Mễ Trì chưa có nhưng da đã ngứa như nhớ trước. + +Thủy hỏi: “Anh sợ gì nhất?” + +“Trở thành nút.” + +“Còn?” + +“Chọn sai.” + +“Không có cách tránh hoàn toàn.” + +“Biết.” + +Cô nhìn hắn. “Đừng dùng từ đó để đóng câu.” Tiến thở. “Tôi sẽ nhớ mình không phải máy.” + +“Còn tôi có quyền dùng Null.” + +“Ừ.” + +“Dù anh sợ tôi quên.” + +Hắn nuốt khô, rồi nói: “Dù tôi sợ.” 12 giờ 11, van Hồ Tây bắt đầu điều tiết. + +12 giờ 13, Khóa phía Tây mất một cảm biến. 12 giờ 15, HANOI-07 hiện: + +**HOST DETECTED: LE QUOC TIEN** + +Tiến không trả lời. 12 giờ 16, radio im. + +Kim đồng hồ cơ vẫn chạy. Thủy nghe tiếng chuông đầu tiên của cửa sổ. + +Cả thành phố bước vào vùng thời gian mà Hậu Ký không còn ghi được chắc chắn. Từ đây, không ai biết điều gì “phải” xảy ra tiếp theo. Các đội vẫn kiểm đồng hồ giấy, dây cơ và lối rút — những thứ họ đã chuẩn bị cho chính khoảnh khắc không có đáp án. + +ARC 9: CỔNG THĂNG LONG + +Chương 79: Ngày 29 Tháng 9 + +12 giờ 17 phút. Tiếng chuông thứ nhất đi qua nền Hoàng Thành. + +Không chỉ Thủy nghe. Kim dao động trên bàn cơ nhảy một vạch; nước trong ống thủy tinh tạo gợn; bụi từ khe đá rơi xuống vai Đạt. Âm trầm đến mức lồng ngực cảm trước tai. Cột trung tâm sáng: + +**SYNCHRONIZATION WINDOW OPEN** + +Ba trạng thái hiện dưới: + +**CONVERGE** +**PRESERVE** +**NULL** + +Tiến giữ tay khỏi giao diện. Cùng lúc, radio tắt hẳn — không tiếng rè, chỉ còn khoảng im. Điện thành phố rơi theo từng vùng; qua khe cửa ngoài, ánh đèn đỏ trên đường Ba Đình tắt dần như một dãy mắt khép. + +Đạt đứng trước bốn đồng hồ cơ, đọc thành tiếng để mọi người cùng nghe: + +“Áp lực 81,7. Nhiệt nền 48,1. Tây tăng rung. Mực nước ổn.” + +Màn hình không hiện tỷ lệ sống, chỉ trả về dữ liệu của hiện tại. Đường đồng trên nền sáng ở phía bắc, chập chờn về phía Tây. Tiến không rời mắt khỏi kim áp lực. Hồ Tây đang bị tác động dù anh không nghe được Quân hay Phương. + +Ở hầm van, Hoàng Tùng đã tới cùng Intervention cũ. Hắn đặt mảnh lõi Hậu Ký vào cổng bảo trì, bẻ niêm chì rồi xoay khóa phần cứng dùng một lần. Bộ điều khiển van vốn bị tách khỏi mạng nuốt khóa, đèn vàng chuyển sang trắng. Radio không thể làm việc này; nếu không đứng trước bảng, Tùng không thể trao quyền Converge cho hệ thống. + +Quân đứng trước bảng điều khiển, vai còn vết sẹo Láng, tay giữ chìa ngắt cơ. + +“Converge cần áp lực cao,” Tùng nói. + +Kim đang ở 82. Quân đáp: “Cao thêm ba đơn vị là tuyến nứt.” + +“Hậu Ký tính toàn mạng.” + +“Đồng hồ này đo cái ống trước mặt.” + +Một người của Tùng bước vào vùng van. Người Vòng Tròn Vỡ chặn. Viên đạn đầu tiên bật khỏi lan can thép, tiếng vang làm mọi người trong hầm tưởng thêm một Dư Âm. Ở Hoàng Thành, kim nhảy 82,4. + +“Giao tranh,” Đạt nói. + +Tiếng chuông thứ hai. Thủy nghe trẻ con Đại Hà gọi tên. Không hướng. Cô đặt thẻ **DƯ ÂM / MÔ HÌNH** lên bàn. Tiếng nước dưới nền có hướng và trùng cảm biến: **CÓ ĐO**. + +HANOI-07 hiện: + +**CONVERGE: 38,2% SURVIVAL** +**PRESERVE: CASCADE UNRESOLVED** +**NULL: INFRASTRUCTURE LOSS PROBABLE** + +Ba dòng không cùng đơn vị. Một bên có con số hấp dẫn, hai bên chỉ có cảnh báo. Thủy chỉ màn hình. “Nó đang trình bày như một cuộc so sánh dù dữ liệu không tương đương.” + +Duy mở hộp công cụ. “Và giới hạn quyền thao tác vào ba nút.” Tiến không nhìn nút. Hắn kiểm chân cột, khe bảo trì và đường ống. Dưới lớp đá có tiếng rơ-le cơ rất nhỏ. + +“Chúng ta không chọn menu,” hắn nói. + +“Vậy chọn bằng gì?” Vân hỏi. + +“Bằng thứ nó thực sự điều khiển.” + +Hắn đưa xà beng vào khe. Đạt giữ đầu kia bằng bàn tay mất ngón. Tấm ốp không nhúc nhích; nhiệt làm kim loại nở. Duy phun phần nước làm mát ít ỏi vào mép, chờ co rồi cùng Tiến kéo. Tấm ốp bật, cắt vai Tiến. Máu thấm lưng áo nhưng chưa sâu. + +Sau lớp đá là ba bó dẫn: + +- đỏ, lưu lượng dữ liệu cao nhưng tải điện thấp; +- trắng, nối cảm biến; +- đen, mang tín hiệu điều khiển van và khóa. + +Duy đo từng đường bằng đồng hồ độc lập. “Đỏ có thể là lớp đối chiếu. Trắng đo. Đen điều khiển.” + +“Có thể?” Kha hỏi qua dây cơ trước khi đường ngoài mất hẳn. + +“Đủ để tìm rơ-le ưu tiên, chưa đủ để cắt.” + +Tiến gật. Màu sắc khớp với giả thuyết chưa đủ để bất kỳ ai chạm vào dây. Ở vòng ngoài, đám đông ép hàng rào. Tấm biển **38%** bị giơ cao. Một người đàn ông bế con trèo lên xe chắn. + +Kha đứng trên bậc, không rút súng. “Vào đây không làm các người nằm trong 38%.” + +“Anh biết?” + +“Không.” + +“Vậy tránh!” + +Người đàn ông lao. Đội Kha dùng khiên và dây, nhưng phía sau đẩy quá mạnh. Khánh An mở lối phụ, kéo trẻ em và người già ra khỏi dòng ép. Cô bỏ vị trí cạnh Kha theo đúng quy trình kiểm tra chéo, không chờ hắn cho phép. Tiếng chuông thứ ba. + +12 giờ 19. Duy tìm thấy hộp rơ-le dưới sàn. Sáu bu lông, bốn cái rỉ và hai cái mới. Có người đã sửa hệ thống sau khi công trình hoàn thành. + +“Bảo trì hiện đại,” anh nói. “Có chế độ chuyển quyền về nút cục bộ.” + +“Cách bật?” + +“Chưa biết.” + +Tiếng chuông thứ tư. Thời gian không dừng để họ đọc hết tài liệu. + +Tiến đưa cờ lê cho Duy, còn mình giữ tấm ốp nóng khỏi rơi vào bó dây. Máu ở vai bắt đầu chảy xuống sườn, giống vệt trong bức ảnh nhưng hắn không biết vì đã từ chối xem bản cập nhật. Đạt đọc: “Áp lực 82,8.” + +Họ chưa có phương án thứ tư hoàn chỉnh; họ mới chỉ tìm thấy chỗ để tự tay tạo ra một phương án khác. + +Chương 80: Khoảng Trống Bắt Đầu + +12 giờ 20. Duy tháo bu lông cuối bằng kìm vì đầu đã toét. Nắp rơ-le mở, hơi nóng phả mùi nhựa và dầu máy cũ. + +Bên trong không có màn hình. Một lõi điện từ, lò xo hồi, ba cầu tiếp điểm và một khóa bảo trì cơ. Hệ thống hiện đại đã được đặt lên một nguyên lý đơn giản: khi trung tâm hoạt động, rơ-le ưu tiên mô hình; khi bảo trì, quyền về các bộ điều khiển tại nút, nhưng chỉ trong bốn phút rồi lò xo tự trả. + +“Đây,” Duy nói. + +Vân bật Null ở mức thấp, hướng điện cực vào bó đỏ. Ánh trên cột giảm một lớp. Cùng lúc, Thủy nghe Dư Âm nhỏ đi — và tiếng nước thật cũng mờ. + +“Đỏ dùng chung tham chiếu với cảm biến,” cô nói. + +Không thể tắt dự báo như tắt một bóng đèn. Các lớp đã bị nối với nhau qua nhiều lần cải tạo. Đạt đọc số mỗi mười giây. “Áp lực 83,0. Tây tăng rung. Nhiệt 48,4.” + +Tiếng chuông thứ năm. Ở Hồ Tây, Quân trúng đạn vai khi kéo một người khỏi vùng bánh răng. Phương ép ông xuống sau bệ bê tông. + +“Van,” Quân nói. + +Tùng đã cắm ổ giao thức vào bộ điều khiển. Lệnh mở lớn truyền xuống chốt cơ. Nguồn điện bị Phúc cắt từ trạm phụ, nhưng van vẫn tiếp tục theo quán tính. Phương không nhìn con số dự báo trên màn phụ; cô đọc kim cơ, vạch áp tại chỗ và tốc độ quay của bánh răng. Khi kim vượt 83,5 và vẫn lên, cô chèn kìm vào đúng khe đã đánh dấu từ buổi diễn tập. Van giật thêm nửa nấc rồi dừng ở 84. + +Tùng đánh cô ngã. “Cô đang giữ một phương án không tỷ lệ.” Phương lau máu môi. “Tôi giữ cái ống không nổ.” + +Phúc lao xuống hầm, bàn tay phải với bộ nẹp không nắm chắc. Anh dùng vai húc Tùng khỏi tay quay. Tiếng chuông thứ sáu. + +Ở Hoàng Thành, Duy kéo khóa bảo trì thử. Đường đỏ giảm, đường trắng và đen vẫn chạy. Cột báo: + +**MAINTENANCE MODE — 04:00** + +Một đồng hồ đếm ngược bắt đầu. + +“Bốn phút rồi trả trung tâm,” Duy nói. + +“Chặn lò xo,” Tiến đáp. + +“Chưa biết tải trả mạnh bao nhiêu.” + +“Đo.” + +Đạt móc lực kế cơ vào cần hồi. Duy thả một phần. Kim lực bật gần gãy móc. Không thể nhét bất kỳ thanh sắt nào rồi hy vọng. + +Tiến và Duy cắt một đoạn nẹp thép từ hộp thiết bị, nung bằng đầu hàn pin và uốn theo góc. Mỗi thao tác mất giây, nhưng làm ẩu sẽ khiến chốt văng vào bó dây. Thủy nghe bước chân sau lưng. Không hướng. Cô không quay. + +Cột chiếu lại Đại Hà: bé gái sau cửa kính, góc nhìn từ camera trên trần. Hình ảnh ấy không đến từ mắt Thủy. Cô đặt thẻ **BẢN GHI / MÔ HÌNH**. + +Hình đổi sang mẹ Tiến ở Thanh Hóa. Không timestamp. Tiến cứng vai. Thủy che hình bằng bảng **CHƯA RÕ**. + +“Nó đang thử thứ từng khiến chúng ta hành động,” cô nói. + +Cột đổi sang Kha cầm dao. Hắn nhìn tới khi hình lặp khung thứ hai, rồi tự đặt thẻ **MÔ HÌNH** trước màn hình. Hình tắt. + +Hệ thống không “hiểu” đạo đức; khi kích thích không tạo phản ứng mong đợi, nó chỉ chuyển sang mục tiêu khác. Tiếng chuông thứ bảy. + +12 giờ 22. Đèn báo Khóa phía Tây tắt. Theo bảng giờ, Nam ở Ngọc Trục mở cổng cho đội kỹ thuật dự phòng sau khi nhận hai xác nhận dây cơ. Không chờ giọng Tiến. + +“Đội ba đi Láng,” cậu ra lệnh. + +Một người hỏi: “Anh Tiến duyệt?” Nam chỉ chữ ký hội đồng. “Đã duyệt từ trước.” + +Ngọc Trục hoạt động khi Tiến không có mặt. Duy lắp chốt thử. Lò xo ép, thanh thép cong nhưng chưa gãy. Bó đỏ tách khỏi quyền ưu tiên trung tâm; bó trắng và đen vẫn dao động. + +Cột hiện: + +**MODEL INTEGRITY LOSS** + +Duy kiểm lại số đo. “Đây là lớp mô hình, không phải hạ tầng vật lý.” Tiếng chuông thứ tám. + +12 giờ 23. Áo Thủy rách ở chốt đồng khi cô lùi. Vết cắt vai Tiến thấm thành mảng tối. Đạt đứng đúng vị trí trong bức ảnh, bàn tay thiếu ngón giữ bảng đo. + +Trên tường, ba bóng người và một hình tối tổng hợp từ các nguồn chiếu. Loa cột phát câu có hướng: + +“Đừng đếm người.” + +Duy nhìn hình. “Đếm nguồn quan sát.” Tiến, Thủy, Đạt — ba người. Lớp tổng hợp — nguồn thứ tư đang cố biến dữ liệu khác nhau thành một Observer chung. + +Duy kéo bó đỏ khỏi cầu ưu tiên. Tia lửa bật, mùi đồng cháy lan trong phòng. + +Các màn hình ngoài mất phần dự báo. Từ giây đó, Hậu Ký không còn bản ghi ổn định về điều xảy ra trong phòng. Khoảng trống đã bắt đầu không vì mọi thiết bị chết. + +Vì lớp dùng để biến dữ liệu thành một phương án đã bị tách khỏi quyền điều khiển. + +Chương 81: Ba Ngón Tay Giữ Khóa + +12 giờ 24. Khóa phía Tây nhận tải gấp ba sau khi Hoàng Thành tách lớp mô hình. + +Thanh hợp kim chèn từ đêm 19 tháng 7 đã cong. Khe nứt mở, thổi ra luồng khí nóng mang giọng người chết. Đồng hồ cơ nhảy sát vùng đỏ. Đức dùng búa ép thanh mới. Mỗi nhát làm sàn rung. + +Ông Hòa giữ bộ kẹp bằng bàn tay trái còn ba ngón. Găng nóng lên nhanh đến mức Đức phải đổi cho ông đôi khác sau chưa đầy một phút. + +“Bỏ tay ra.” + +“Chưa. Đập góc dưới.” + +“Bác mất nốt thì ai đọc mạch?” + +Câu đó có tác dụng hơn quát. Ông Hòa thả kẹp, lùi khỏi mép nóng và chỉ bằng cán tua vít. “Được. Cậu giữ. Tôi đọc.” + +Đội dự phòng tới do Nam mở cổng. Khánh An dẫn xuống nhánh bắc, đeo dây kiểm tra chéo của chính nhóm cô lập. Cô không nhận lệnh riêng của Kha; bảng quy trình quy định khi đèn Tây tắt, phải có người ngoài đội nút chứng kiến thao tác. Dư Âm gọi từng người. + +Ông Hòa nghe giọng vợ: “Ông về đi.” Âm thanh không có hướng. + +Ông nghiến răng, nhưng không trả lời giọng đó. Đức nghe con trai. Khánh An nghe người đồng đội từng chết vì một lệnh của Kha. Cả ba đã được dặn trước: nếu tiếng gọi không có hướng vật lý, chỉ ghi nhận, không đối thoại. + +Đường nứt mở thêm. Một cửa phụ dưới giếng phải đóng bằng tay để tải không vòng ngược. Nhiệt kế dây ở đáy báo năm mươi tám độ. + +Ông Hòa đọc con số trên đồng hồ rồi chốt: “Mỗi người dưới đó tối đa chín mươi giây.” + +Khánh An đã kéo áo khoác phản nhiệt lên. “Tôi xuống.” + +“Cô không biết van.” + +“Bác chỉ từ trên.” + +“Camera chết dưới đó.” + +“Dây thoại cơ còn.” + +Ông Hòa cân nhắc hai giây rồi gật. “Xuống trước. Chạm tay quay thì mô tả, đừng cố thắng nó.” + +Khánh An đeo dây chính, dây phụ và túi gel mát ở cổ trước khi xuống. Đức lật đồng hồ cát chín mươi giây. Ở đáy, hơi nóng làm mắt cô khô rát ngay qua kính. + +“Cửa cơ kẹt,” cô nói qua dây. “Bùn cứng. Tay quay không nhúc nhích.” + +“Xoay ngược nửa vòng để nhả tải.” + +“Không đi.” + +“Đừng dùng lực tiếp. Tìm lỗ khóa ở chân bánh.” + +Khánh An sờ bằng găng. “Có. Nhưng chốt lệch.” + +Ông Hòa nhìn sơ đồ. Cấu tạo trên giấy cũ khác vị trí cô mô tả. Có người từng thay cụm bánh răng sau khi bản vẽ được lập. + +Đức nhìn cát đã chảy hơn nửa. “Rút cô ấy.” + +“Khánh An, lên.” + +“Tôi còn—” + +“Lên. Không ai được chứng minh mình chịu nóng giỏi hơn người khác.” + +Cô chửi một câu nhưng kéo tín hiệu. Dây đưa cô lên khi còn chưa hết chín mươi giây. Sau khi uống từng ngụm nhỏ và làm mát, cô vẽ lại cụm bánh theo thứ mình sờ được. + +Ông Hòa nhìn bản vẽ mới. “Nó lắp ngược cơ cấu. Tôi phải xuống một lượt để chỉ đúng điểm, rồi Đức kéo.” + +Đức phản đối. “Bác vừa bắt cô ấy không liều.” + +“Đúng. Nên tôi cũng có chín mươi giây, hai dây và người kéo. Quá giờ kéo tôi lên dù tôi chửi.” + +Khánh An nói: “Tôi giữ đồng hồ.” + +Lần hai, ông Hòa xuống cùng Đức, nhưng ông không quay cửa. Ông chỉ xác định chốt bằng đầu kìm rồi lùi sang một bên. Đức buộc dây vào tay quay, móc qua khung; phía trên Khánh An và hai người dự phòng dùng trọng lượng kéo. Cửa dịch từng milimet. + +“Còn ba mươi giây,” Khánh An báo. + +Trên mặt, Đức nghe tải qua dây thoại: “Còn tăng. Thêm mười.” + +Nam ở Ngọc Trục hỏi: “Rút?” + +Đức nhìn bảng quyền tại chỗ. Không có Tiến để hỏi. “Cửa đang đi. Hai mươi giây nữa, nếu chưa qua vạch thì rút.” + +Tại Hồ Tây, Tùng đá Phúc khỏi bánh răng. Phương vẫn giữ kìm. Quân bò tới ngắt cơ, máu từ vai chảy theo cánh tay. + +“Anh chuyển tay, áp lực sập,” Tùng nói. + +“Không phá.” Quân cắm chìa thứ nhất. + +Phương cắm chìa hội đồng thứ hai. Hai người xoay cùng lúc, chuyển van khỏi lệnh tự động sang điều khiển tay. Một người Intervention bắn Quân. Viên đạn xuyên gần phổi. + +Phúc nhặt khẩu súng rơi và bắn Tùng vào bụng. Giữa tiếng kim loại dội loạn, về sau không ai thống nhất phát nào vang trước. Cảnh ấy không có một khoảnh khắc sạch sẽ để kể lại như chuyện anh hùng. + +Phương quỳ bên Quân nhưng ông đẩy cô. “Van.” Phúc buông súng, dùng tay trái cùng em giữ tay quay. Hai anh em đứng một phía vì một đường ống, không vì mọi mâu thuẫn trước đó biến mất. + +12 giờ 25. Ở đáy giếng Láng, cửa phụ vượt qua vạch cơ đúng lúc Khánh An quát “kéo lên”. + +Tải giảm một phần. Ông Hòa lên khỏi miệng giếng gần như không tự đứng được. Phần găng ở lòng bàn tay đã cháy sém khi bộ kẹp trượt vào bánh răng trong giây cuối; da bỏng sâu nhưng ba ngón còn cử động. + +Đức hỏi: “Bác sống?” + +Ông Hòa thở qua khăn mát, mất một lúc mới nói được. “Đổi câu hỏi.” + +Đức vừa cười vừa chửi, rồi quay lại đọc kim. + +Đồng hồ trở vùng vàng. Không màn hình HANOI-07. Chỉ một cây kim cơ, một tấm cửa đã đóng, hai đồng hồ cát đã hết và những người còn đủ tỉnh để tiếp tục giữ. + +Ở Hoàng Thành, Đạt đọc thay cho radio đã mất: “Tây ổn định.” + +Tiến không hỏi ai bị thương; lúc đó chưa có đường nào để câu hỏi nhận được câu trả lời. Hắn giữ tấm ốp bằng vai chảy máu, chờ Duy chuyển tải tiếp. + +Ở Ngọc Trục, Nam ghi lên bảng: + +**12:25 — CỬA PHỤ ĐÓNG — KHÓA TÂY GIỮ.** + +Cậu nhìn chữ **GIỮ**, rồi viết thêm bên dưới: + +**NGƯỜI TẠI CHỖ QUYẾT ĐỊNH RÚT/Ở THEO NGƯỠNG NHIỆT.** + +Lần này, dòng chữ không phải mệnh lệnh Tiến để lại. Đó là điều cả nhóm vừa học bằng da thịt và tự ghi lại, để ca sau không phải trả cùng một cái giá. + +Chương 82: Mạch Nước Hồ Tây + +12 giờ 26. Kim áp lực Hồ Tây rung quanh 84. Ngưỡng đỏ bắt đầu ở 85. + +Quân nằm sau bệ bê tông, hai vết đạn, hơi thở có tiếng bọt. Tùng bị bắn bụng nhưng mạch còn mạnh hơn. Phương có một túi dịch cuối cùng. Người Vòng Tròn Vỡ kéo cô về phía Quân. “Ông ấy cứu cô.” + +Phương kiểm đường thở, nhịp, mức tỉnh, vị trí chảy máu và thời gian thực tế tới điểm y tế. Quân có dấu hiệu tổn thương ngực nặng; túi dịch không sửa được thứ cần can thiệp mà họ không có tại chỗ, còn truyền quá nhiều có thể làm chảy máu nặng hơn. Tùng bị bắn bụng nhưng vẫn còn đường vận chuyển và mạch ngoại vi bắt được. Không phương án nào bảo đảm. Với dữ kiện trước mắt, Phương dùng túi dịch cuối cho Tùng và tiếp tục băng ép cho Quân. + +Một người túm vai. “Cô điên à?” Quân mở mắt, giọng khó. “Bỏ.” + +“Anh—” + +“Cô ấy đúng.” + +Không yêu cầu lòng biết ơn phá tiêu chí y tế. Phương băng ép cho Quân bằng phần gạc còn lại, rồi quay về van. Phúc và hai người giữ tay quay. Bàn tay phải của anh trong nẹp trượt vì mồ hôi; anh quấn dây quanh cẳng tay thay vì cố nắm. + +Tùng tỉnh khi dịch bắt đầu chảy. + +“Ổ gốc,” hắn nói. + +Chiếc hộp nằm bên bảng điều khiển, tự nóng dù chưa cắm vì cộng hưởng từ mạng. + +“Đưa lại.” + +Phương không nhìn. “Im.” + +“Các người đang tạo một nhánh không dữ liệu.” + +“Chưa bao giờ dữ liệu thấy hết.” + +“Không có tỷ lệ, cô không biết giữ van cứu hay giết nhiều hơn.” + +Phương chỉ Quân. “Tôi cũng không có tỷ lệ cứu anh ấy. Vẫn phải chọn việc trước mặt.” Tùng cố bò. Phúc giữ vai hắn, không đánh. + +Quân nhìn hộp. “Đưa khỏi tuyến.” Phương dùng dây kéo ổ dữ liệu qua nền, tránh chạm tay. Nó rơi xuống hố bùn khô cách bảng van vài mét. Không phá — vì dữ liệu lịch sử còn giá trị. Không cho kết nối — vì giao thức đang cố giành quyền. + +12 giờ 27. Tại Hoàng Thành, bó đen nóng lên khi mất ưu tiên trung tâm. Nếu quá tải, các van và khóa có thể dừng hoàn toàn. + +Duy nói: “Phải đưa điều khiển về nút.” + +“Bó trắng chỉ đo,” Tiến đáp. + +“Các bộ điều cục bộ có thể dùng số gần nhất ở chế độ bảo trì.” + +“Chuyển từng điểm.” + +Không có một lệnh duy nhất. Duy phải tháo từng cầu nối, đặt rơ-le về cục bộ, chờ Đạt xác nhận kim rồi mới chuyển điểm sau. Ngọc Trục. + +Láng. Hồ Tây. + +Các điểm nhỏ. Thủy đặt lòng bàn tay xuống nền. Âm nước có hướng, khác tiếng chuông. “Hồ Tây đang dao động. Chuyển nửa tải trước.” + +Duy làm. Đạt đọc: “83,9.” Cột hiện: + +**UNDEFINED STATE** + +Tiến không còn hơi để bình luận. Hắn giữ nhịp thở, cơn đau ở vai dội theo từng nhịp tim. 12 giờ 28. + +Tiếng chuông thứ mười một vang. Các lớp vật lý bắt đầu ổn, nhưng một âm trầm khác hình thành dưới tất cả — không tới từ hướng cụ thể. Bóng tổng hợp trên tường đậm lên. Lớp đối chiếu đang cố dựng lại một Observer chung từ dữ liệu còn lại. + +“Nếu nó khép mô hình, quyền trung tâm trở lại,” Duy nói. + +Thủy lấy thiết bị Null nhưng chưa bật. “Bán kính?” + +Duy nhìn mức nguồn. “Ở công suất này, khoảng tác động nhỏ nhất đủ chạm lớp tổng hợp. Không bảo đảm chỉ có Dư Âm bị ảnh hưởng.” + +“Thời gian?” + +“Ba giây trước khi nhiệt đầu cực vượt ngưỡng.” + +Thủy chỉnh giới hạn cơ về ba giây rồi mới đặt điện cực. Tiến chạm cổ tay cô, nhận ra mình đang giữ và tự buông ra. + +“Cô có thể mất nghe.” + +“Biết.” + +“Mất ký ức.” + +“Có thể.” + +“Đừng.” + +Thủy nhìn hắn. Giữa tiếng chuông đang lớn dần, cô vẫn phân biệt được câu ấy đến từ một người thật trước mặt — có hướng, có hơi thở và có nỗi sợ. + +“Anh không quyết.” + +Tiến gật. “Đúng.” + +Cô hướng trường Null vào lớp tổng hợp chứ không toàn mạng và đặt ngón tay lên công tắc hẹn ngắt. + +Công tắc bật. Tiếng chuông thứ mười hai tắt trước khi hoàn thành. + +Cùng lúc, mọi âm thanh biến mất khỏi Thủy. Không chỉ Dư Âm. + +Không nước, không kim loại, không hơi thở. Môi Tiến cử động nhưng thế giới không có tiếng. Thủy thấy hắn định bước tới rồi tự dừng, giữ lời không quyết thay. + +Đạt giơ bảng: + +**ÁP LỰC ỔN.** + +Duy: + +**LỚP DỰ BÁO ĐÃ CẮT.** + +Tiến viết bằng bàn tay dính máu: + +**HẠ TẦNG CÒN.** + +Ngay dưới dòng đó, Duy tự thêm một việc không có trong phân công: + +**TỪ CA SAU: KHÔNG MỘT NGƯỜI GIỮ CẢ LOG, QUYỀN GHI VÀ QUYỀN XÁC NHẬN.** + +Đạt nhìn anh, chỉ vào tay đang run. Duy hiểu, viết thêm: **KỂ CẢ TÔI.** + +Khánh An, từ Khóa Tây, gửi về một tờ phiếu có ba ô nguồn. Cô gạch chữ **độc lập** ở hai ô đầu vì cả hai cùng đi qua một cáp. Bài học về nguồn giả độc lập không đợi ba năm mới thành quy trình. + +Thủy gật. Ở Hồ Tây, kim hạ khỏi 84. Phúc và Phương vẫn giữ van. Quân còn thở. Tùng nhìn ổ dữ liệu nằm ngoài tầm với. + +Mạch nước tiếp tục chảy không vì một tương lai ra lệnh. Nó chảy vì ở từng điểm có người đang đọc một cây kim và giữ phần việc của mình. + +Chương 83: Khi Người Nghe Không Còn Nghe + +Thủy không nghe gì. Không tiếng chuông, nước, kim loại hay hơi thở của chính mình. Thiết bị Null nóng trong tay rồi tắt, để lại một vệt đỏ chạy từ lòng bàn tay lên cổ tay. Cảm giác thăng bằng lệch sang trái; nền đá dưới chân dường như nghiêng dù mắt cô biết nó vẫn phẳng. + +Duy bước vào tầm nhìn, hai bàn tay mở để cô thấy anh không định chạm. Anh viết lên bảng: + +**NHÌN TÔI. NGỒI XUỐNG.** + +Thủy làm theo. Mọi người cử động trước mắt cô, miệng mở mà không có âm; căn phòng giống một đoạn phim bị rút mất lớp quan trọng nhất. Điều làm cô sợ trước tiên không phải mất Dư Âm, mà là một người sống có thể gọi tên cô ngay bên cạnh mà cô không biết. Cô nhớ tiếng mẹ bán hàng dưới ngõ thời sinh viên, tiếng máy ảnh lên phim, tiếng Tiến gõ ngón tay vào cốc khi đang tính. Những âm bình thường từng bị cô coi là nền. Bây giờ chỉ còn hình ảnh của chúng. + +Duy đưa ba thẻ đã chuẩn bị từ trước: + +**CÓ ĐO** +**CHƯA RÕ** +**MÔ HÌNH / BẢN GHI** + +Đạt đọc đồng hồ và viết từng số. Áp lực 83,9: **CÓ ĐO**. Tỷ lệ sống: **MÔ HÌNH**. Cảnh báo `HOST FAILURE`: **CHƯA RÕ**, vì đó là tên hệ thống đặt cho trạng thái, không phải phép đo về con người. Cột chiếu Đại Hà. + +Bé gái sau cửa kính. Người chạy. Cửa cuốn hạ. Thủy lần theo góc nhìn: camera ở trên trần, nơi cô chưa từng đứng. Vậy cảnh này ít nhất đã qua một lớp dựng, không thể là ký ức nguyên vẹn từ mắt cô. Cô giơ thẻ **MÔ HÌNH / BẢN GHI**. + +Hình đổi sang mẹ Tiến ở Thanh Hóa. Không giờ, không nguồn. Tiến bước nửa bước rồi dừng, chờ cô. Thủy đặt **CHƯA RÕ** trước màn hình. + +Hắn lùi lại. Hình đổi sang Kha cầm dao. Lần này Tiến tự lấy thẻ **MÔ HÌNH**. Cột tắt hình. + +HANOI-07 không cần đọc ý nghĩ. Nó chỉ thử lại những kích thích đã từng khiến họ đổi hành vi. Khi giọng nói không còn đường vào Thủy, nó dùng hình ảnh. Cô viết nhanh: + +**GIỮ PHÉP ĐO. KHÔNG LÀM THEO HÌNH.** + +Duy gật, tiếp tục chuyển rơ-le. Cột hiện: + +**OBSERVER CONSENSUS REQUIRED** + +Ba vùng xác nhận sáng tại vị trí Tiến, Thủy và Đạt. Hệ thống muốn ba nguồn cùng chọn một trạng thái để lớp tổng hợp khép lại. Tiến viết: + +**GIỮ HẠ TẦNG VẬT LÝ.** + +Thủy nhập ở vùng thứ hai: + +**KHÔNG DÙNG DỰ BÁO LÀM LỆNH.** + +Đạt chưa chạm. Cột báo: + +**INCONSISTENT OBSERVATION** + +Thủy đặt hai câu cạnh nhau rồi giơ thẻ **CÓ ĐO**. Mâu thuẫn là một dữ kiện có thật, không phải lỗi cần ép cho biến mất. Nền rung mạnh. Thủy không nghe nhưng cảm qua xương chậu và răng. Cô mất thăng bằng; Tiến đưa tay rồi dừng cách vai một khoảng, để cô tự chọn. Thủy nắm cổ tay hắn và đứng lại. + +Vết cắt ở vai Tiến đã thấm đỏ. Cô chỉ vào đó. Hắn lắc đầu; vết thương đau, nhưng chưa phải thứ cần xử lý trước. Từ đường ngoài, đèn tín hiệu nhấp nháy theo mã cơ: Khóa Tây giữ, Hồ Tây chưa ổn. Một đèn thứ ba từ tuyến Cát Linh bật đỏ rồi tắt. Đạt ghi: + +**NÚT PHỤ CÁT LINH — NHIỆT TĂNG / KHÔNG CÓ NGƯỜI XÁC NHẬN.** + +Duy nhìn sơ đồ. Nút ấy giữ một hành lang làm mát cho hai khu trú nhỏ. Nếu quá tải, không phá mạng trung tâm nhưng có thể làm hàng trăm người mất đường thoát nhiệt. Không có radio để gọi. Chỉ có một dải đèn mã chậm. Duy gửi yêu cầu đo tại chỗ. Không hồi đáp. + +Cột chiếu một hình khác: Thủy đứng trong Hoàng Thành, tay đặt lên vùng mở trung tâm. Bên dưới: + +**LISTENER REQUIRED** + +Thủy lấy bút gạch chữ **LISTENER**, viết tên mình lên bảng giấy: + +**TRẦN THANH THỦY — KHÔNG ĐỒNG Ý.** + +Cảm biến không hiểu phẩm giá hay quyền tự quyết; nó chỉ ghi nhận một nguồn không còn khớp vai trò dự đoán. Vùng xác nhận thứ hai tắt. Duy nhìn cô, môi tạo hai chữ có thể là “được rồi”. + +Thủy không nghe. Cô thấy. + +Trong vài phút quan trọng nhất, điều đó đủ để làm việc. Nhưng khi nhìn đèn Cát Linh tiếp tục đỏ, cô hiểu một điều khác: từ chối hệ thống không tự cứu được người ở xa. Họ vẫn cần dữ liệu, bản đồ và những quyết định kỹ thuật — chỉ không giao mục tiêu cho một mô hình đặt sẵn. + +Cô kéo tấm bảng lại, viết cho Tiến: + +**NẾU TÔI KHÔNG NGHE LẠI?** + +Tiến đọc. Hắn không viết “sẽ nghe”. Không hứa điều không biết. + +**TÔI SẼ HỌC CÁCH NÓI ĐỂ CÔ THẤY.** + +Thủy đọc lại câu đó một lần, rồi gấp bảng lại. Không có thời gian biến nó thành một cảnh dịu dàng hơn. Đạt đang bước tới vùng xác nhận thứ ba. + +Nhãn **LISTENER** trên giao diện vừa mất ý nghĩa thực tế, còn Thủy thì vẫn ngồi trước bảng, mắt theo từng con số và từng cử động của người khác. Cô không cần nghe để tiếp tục tham gia quyết định; cô chỉ phải đổi cách nhận thông tin. Vân đặt hai ngón tay trước mắt Thủy rồi di chuyển sang trái, phải, lên, xuống. Cô theo được nhưng chậm ở phía trái. Đạt ghi phản ứng, không gọi đó là tổn thương vĩnh viễn. Mỗi lần một người định hỏi “cô còn nghe gì”, Thủy chỉ vào tấm bảng **KHÔNG CỐ NGHE**. + +Trong khoảng nghỉ vài giây, cô mở sổ và viết một danh sách không liên quan hệ thống: + +- tiếng nắp ấm nước ở nhà mẹ Tiến; +- tiếng Nam cười khi sửa được radio; +- tiếng kéo của Linh cắt băng; +- tiếng Bình An đọc sai tên đường; +- tiếng gió qua mái tôn. + +Nếu thính giác không trở lại, những âm thanh ấy cũng không phải “dữ liệu cần khôi phục” cho HANOI-07. Cô sẽ phải nhờ người khác kể lại thế giới bằng hình, chữ và rung động. Việc nghĩ tới một đời sống khác cách nghe giúp cơn hoảng trong ngực chậm đi. Cô gấp trang, đặt vào túi. Chưa biết có cần dùng. Nhưng lần đầu sau khi Null bật, Thủy không chỉ nghĩ mình đã mất gì; cô bắt đầu nghĩ mình còn có thể sống bằng cách nào. + +Chương 84: Người Quan Sát + +Nguyễn Hữu Đạt không nhìn cột trung tâm. Ông nhìn bốn kim cơ và đọc từng số vào bảng giấy: + +Nhiệt nền 47,8. Áp lực 83,9. + +Rung Tây giảm. Mực nước ổn. + +Tiến còn phản ứng. Thủy còn tỉnh. + +Duy còn điều khiển. Vân còn giữ Null. + +Đạt đặt bàn tay thiếu đốt ngón út lên vùng xác nhận thứ ba. Cơn đau từ vết thương mới chạy lên cổ tay, nhưng kim trước mặt không đổi vì đau của ông. Đó là lý do cần phép đo ngoài cơ thể người quan sát. Cột hiện: + +**CENTRAL OBSERVER PRESENT** + +Bóng thứ tư trên tường đậm lên, không giữ một gương mặt. Nó chuyển qua những hình người khác nhau: kỹ sư, nhân viên trạm, người đọc mực nước, Trần Văn Tĩnh khi trẻ. Hàng chục hồ sơ Observer cũ bị chồng thành một đại diện duy nhất, khiến một chức năng trông như một con người luôn tồn tại và luôn biết nên chọn gì. + +Hệ thống yêu cầu Converge, Preserve hoặc Null. Đạt không chọn. + +Ông mở trường ghi chú bảo trì Tĩnh từng chỉ. Bàn phím cứng, vài phím mất ký tự. Đạt gõ bằng bàn tay đau: + +**TRẠNG THÁI CHƯA GIẢI QUYẾT. HẠ TẦNG ĐANG HOẠT ĐỘNG. CÁC NGUỒN KHÔNG ĐỒNG THUẬN.** + +Màn hình báo: + +**INVALID OBSERVER STATE** + +Đạt nhìn kim. “Hợp lệ theo phép đo.” Cột rung. Hình tổng hợp tiến gần, bóng phủ lên vai ông. Dòng mới hiện: + +**OBSERVER MUST RESOLVE** + +Đạt nhớ một trạm điện mười hai năm trước. Hôm ấy, biểu mẫu chỉ cho chọn **an toàn** hoặc **không an toàn**. Sếp cần đóng báo cáo để kịp bàn giao. Các số nằm ngay sát ngưỡng; ông đã ký an toàn vì không muốn giữ cả đội lại qua đêm. Hai ngày sau, một thợ điện bị bỏng khi lớp cách điện vỡ. + +Người đó sống. Đạt chưa từng kể việc mình ký. Ông nói, dù không biết Thủy nghe được hay không: “Tôi từng điền một ô vì biểu mẫu không cho ghi không biết.” + +Duy nhìn ông. Đạt gõ tiếp: + +**KHÔNG CÓ ĐƯỜNG HỢP LỆ. TIẾP TỤC GHI CÁC NGUỒN RIÊNG.** + +Hệ thống báo lỗi lần nữa. + +Duy hiểu việc cần làm. Anh không viết lại HANOI-07 bằng một dòng lệnh. Anh tháo đầu ra của bộ tổng hợp khỏi rơ-le điều khiển. Vít thứ nhất nóng tới mức găng bốc mùi cao su. Vít thứ hai kẹt vì kim loại giãn; Kha chưa vào phòng, nên Đạt dùng chính thanh kẹp của mình làm đòn. + +Mỗi đường đo được dẫn sang một bộ nhớ cục bộ. Ngọc Trục ghi Ngọc Trục. + +Láng ghi Láng. Hồ Tây ghi Hồ Tây. + +Hoàng Thành giữ các bản cạnh nhau mà không ép thành một trạng thái. Bóng thứ tư vỡ thành những đường sáng rời, không còn hình người. Cột hiện: + +**OBSERVER INPUT DISTRIBUTED** + +Ở trạm ngoài, Tĩnh nhận tín hiệu qua dây và tháo thẻ Observer khỏi cổ. Trong phòng không ai nghe thấy tiếng thẻ chạm bàn, nhưng Đạt vẫn hình dung được tiếng kim loại nhỏ ấy. Chức danh Observer vừa mất người sở hữu duy nhất. Các đèn nút lần lượt trả lời. + +Ngọc Trục: xanh. Láng: vàng. + +Hồ Tây: vàng. Cát Linh: đỏ. + +Nút Cát Linh vẫn không có người xác nhận. Duy mở bản đồ cũ. Đường làm mát của nó đi qua một van phụ đã bị niêm từ trước Hồng Nhật. Mở sai có thể đẩy hơi nóng vào khu trú; không mở, nhiệt tiếp tục tăng. + +“Cần dữ liệu tại chỗ,” Đạt nói. + +“Không có,” Duy đáp. + +“Vậy ghi chưa rõ.” + +“Người ở đó không sống bằng chữ chưa rõ.” + +Đạt nhìn anh. Đây là giới hạn của nguyên tắc: chấp nhận không biết không có nghĩa được phép đứng im khi người khác đang chết. Nó chỉ cấm giả rằng mình biết chắc. Khánh An gửi một mã đèn từ vòng ngoài: trong tài liệu 38% của Tùng có phụ lục về Cát Linh. Bản đó đang niêm phong trong túi của cô, chưa ai dùng vì không muốn đưa mô hình vào quyền điều khiển. + +Đạt ghi dòng mới: + +**DỮ LIỆU MÔ HÌNH CÓ THỂ HỮU ÍCH. PHẢI KIỂM BẰNG SỐ ĐO CỤC BỘ TRƯỚC KHI LÀM.** + +Ông không vứt dữ liệu đi, nhưng cũng không quỳ trước nó. Đạt rút tay khỏi vùng xác nhận. Băng ngón thấm máu, nhưng các kim chính vẫn ổn. + +Bức ảnh Hậu Ký đã ghi **CENTRAL OBSERVER PRESENT**. Người ta từng tưởng đó là một nhân vật bí mật. Thực tế, dòng chỉ đánh dấu khoảnh khắc một nguồn bị yêu cầu đứng trên tất cả các nguồn khác. Đạt đã từ chối. + +Một nhịp sau, Duy thấy lớp đỏ mảnh chạy từ bề mặt giao diện lên cổ tay Tiến. + +“Ngắt anh ấy.” + +Tiến kéo tay nhưng không rời. Những sợi vật liệu nhỏ như gai đã bám dưới da, sáng theo mạch. Đồng hồ thần kinh tăng. Vân áp Null. Vệt đỏ chậm, không dừng. + +Đạt kiểm mắt Tiến. “Còn nhận thức.” Tiến nói: “Cắt giao diện.” + +Duy thử ngắt dây ngoài. Không tác dụng. Trạng thái đã đi vào mô. Cửa kỹ thuật mở. Kha bước vào cùng Khánh An. Hắn nhìn cổ tay Tiến, nhìn bảng quy trình, rồi nhìn con dao công cụ bên hông. + +Chiếc nhẫn đã trở lại ngón tay hắn. Mặt trong là mã cháy sém của Minh Khôi và con số bốn mươi bảy phút mà hắn chưa từng tha thứ. Không ai nói tên Mễ Trì; chiếc nhẫn đã nói đủ. + +Căn phòng hiện tại đã đủ giống. + +Nhãn in đã bong vì nhiệt, nên Duy buộc các dây ghi cục bộ bằng những mảnh vải khác màu. Đỏ cho Hồ Tây, xanh cho Ngọc Trục, vàng cho Láng, trắng cho Hoàng Thành. Đạt đọc từng màu trước khi nối, Khánh An từ ngoài kiểm lại qua gương. Một lỗi nhỏ ở đây có thể khiến hai bản ghi đổi tên và tạo một “sự thật” sai mà không ai cố ý nói dối. + +Khi đường cuối được nối, bộ tổng hợp vẫn cố kéo các tín hiệu về một cột duy nhất. Duy phải tháo cả cầu tiếp điểm, làm đứt móng tay và bỏng đầu ngón. Đạt không giật tua vít khỏi tay Duy chỉ vì mình sốt ruột. Ông giữ đèn, đọc kim và gọi từng mốc nhiệt; Duy mới là người hiểu thứ tự tháo tiếp điểm. Ở nơi chỉ một con vít sai có thể đổi tên hai nguồn dữ liệu, biết phần nào mình không nên làm quan trọng chẳng kém biết mình làm được gì. + +Đạt không chạm nút xác nhận. Kim áp lực bò qua vạch giữa; chỉ khi nó đứng yên, ông mới ghi. + +Chương 85: Con Dao Không Đâm Xuống + +Kha không rút dao ngay. Hắn kiểm đồng hồ thần kinh, đường đỏ dưới da và tay Duy đang giữ rơ-le. Sau đó nhìn Tiến để xác nhận mắt còn bám được người trước mặt. + +“Nhận ra tao?” + +“Đáng tiếc.” + +Câu trả lời yếu nhưng đúng giọng. Đạt ghi: **ý thức còn**. Vân tăng Null quanh cổ tay. Vệt đỏ chậm thêm, vẫn tiến lên khuỷu. + +Duy nói: “Cắt dây ngoài không đủ. Sợi giao diện đã bám mô.” Kha liếc đồng hồ; mỗi giây trôi qua, vai hắn lại cứng thêm. Trên mặt trong chiếc nhẫn, mảnh thẻ của Minh Khôi cọ vào da. Bốn mươi bảy phút chờ ba cấp ký duyệt từng giết em hắn; từ đó, Kha học rằng do dự là một cách giết người có giấy tờ. + +Khánh An đứng cạnh, đọc được điều hắn đang nghĩ. + +“Đây không phải cổng Bắc Ninh,” cô nói. + +“Không có thời gian.” + +“Có quy trình.” + +“Quy trình từng giết người.” + +“Và anh từng giết vì không chịu để ai kiểm mình.” + +Kha quay sang. Khánh An không lùi. + +“Bốn mươi bảy phút không có nghĩa mọi lần chờ đều sai,” cô nói. “Lần này chúng ta đã dùng ba mươi giây để biết anh đang cắt gì.” + +Đạt đưa bảng quy trình. Điểm 1: ý thức còn. Điểm 2: tín hiệu thật — Thủy xác nhận bằng ánh sáng và thiết bị. Điểm 3: Null không ngắt. Điểm 4: kỹ thuật ngoài da thất bại. Chưa tới quyền giết. + +Tiến nói: “Cắt mô tiếp xúc.” Kha rút dao. “Giữ nó.” + +Đạt và Duy giữ vai. Vân giữ điện cực. Thủy ngồi trước mặt Tiến, đặt bảng trong tầm nhìn: + +**Ở ĐÂY. NHÌN TÔI.** + +Kha rạch quanh điểm tiếp xúc. Không đủ thuốc tê; Linh ở xa và thời gian không cho. Máu tràn, vệt đỏ tăng theo phản ứng cơ thể. HANOI-07 hiện: + +**HOST DISCONNECT RISK** + +Kha liếc dòng. “Đừng gọi nó là Host.” Hắn tìm sợi đầu tiên bằng đầu dao và kẹp. Sợi mảnh như tóc nhưng cứng hơn mô. Khi cắt, Tiến giật mạnh. Thủy không nghe tiếng hét; cô chỉ thấy cổ họng hắn căng và mắt mất nét. + +Cô nâng bảng: + +**CÓ NGƯỜI THẬT. CÓ HƯỚNG. ANH Ở HIỆN TẠI.** + +Tiến tập trung vào nét chữ. Một phần trong hắn vẫn thấy B3 năm 2031: đèn đỏ, dao, gương mặt Kha già hơn và nỗi hoảng của người vừa bị xóa lý do. Nhưng tay Thủy đang giữ tấm bảng có một vết mực mới. Đó là chi tiết không thuộc ký ức cũ. Sợi thứ hai nằm sâu. Dao trượt vào mô. Máu phun lên tay Kha. + +Lưỡi dao khiến hơi thở Tiến ngừng lại. Kha nói câu cũ: + +“Mày vốn không nên sống lâu đến thế.” + +Cơ thể Tiến cứng lại trước khi lý trí kịp hiểu. Kha tiếp, giọng thấp: “Nhưng tao chưa làm.” + +Hắn đổi góc dao, dùng phần sống lưỡi tách mô. Khánh An giữ đèn, tay không run dù mặt trắng. + +“Bên trái thêm hai milimet,” Duy nói. + +Kha không lao theo nỗi sợ chậm. Hắn chờ Duy xác nhận đường mạch rồi mới cắt. Sợi cuối đứt. + +Tiến ngã khỏi giao diện. Vệt đỏ dừng ở khuỷu, nhạt dần nhưng chưa biến mất. Đạt kiểm mạch; Vân giữ Null thêm ba mươi giây. Duy đặt một miếng dẫn vô trùng lên vết cắt để chắc không còn tín hiệu qua mô. Kha vẫn quỳ, dao trong tay, đúng tư thế bức ảnh Mễ Trì từng không ghi rõ. + +Tiến thở khó. “Anh đâm tôi.” + +“Ừ.” + +“Không đúng chỗ.” + +Kha hạ mắt xuống vết cắt. “May?” + +“Không. Quy trình.” + +Khánh An bật ra một tiếng cười ngắn rồi quay mặt. Kha không cười. Hắn nhìn chiếc nhẫn, như thể lần đầu hiểu một thủ tục không nhất thiết là cái cổng giữ xe cứu trợ ngoài đường. Có thủ tục tồn tại để không cho nỗi đau của một người trở thành dao của tất cả. + +Hắn đưa dao cho Đạt. “Giữ.” + +“Vì sao?” + +“Không muốn cầm tiếp.” + +Đạt đặt vào hộp bằng chứng. Không phá con dao; phá vật không xóa khả năng một người chọn dùng nó. Thủy viết cho Tiến: + +**ANH CÒN LÀ ANH?** + +Hắn đọc lâu. Ký ức 2028 và 2031 không tách thành hai tiếng nói. Chúng cùng nằm trong một cơ thể đau, nhưng người đang chọn câu trả lời là người hiện tại. Tiến viết bằng tay trái: + +**KHÔNG BIẾT HẾT. NHƯNG TÔI LÀ NGƯỜI ĐANG TRẢ LỜI.** + +Thủy gật. Kha ngồi xuống sàn, lưng dựa cột. Máu Tiến khô trên tay hắn. “Mày hỏi tao có giết mày năm 2031.” + +“Ừ.” + +“Giờ tao hỏi: nếu không có những người này, tao có làm lại không?” + +Ánh mắt Tiến dừng ở con dao trong hộp. “Có thể.” + +“Câu tệ.” + +“Câu thật.” + +12 giờ 33. Mễ Trì không lặp nguyên. Cùng con dao, cùng hai người và cùng nỗi sợ không còn tạo ra cùng kết quả, vì quyết định đã bị chia cho những người có thể nói dừng. + +Ở góc phòng, đèn Cát Linh chuyển từ đỏ sang đỏ nhấp nháy. Một nơi khác vẫn đang hết thời gian. Vân ép băng quanh cổ tay Tiến và đánh dấu mép vệt đỏ bằng bút. Nếu nó lan qua đường mực, họ phải quay lại bước Null. Mỗi mười giây Đạt hỏi một câu khác — tên mẹ, ngày hiện tại, vị trí, việc Tiến vừa chọn — để chắc ý thức không chỉ lặp một đáp án học sẵn. + +Kha rửa tay trong một chậu nước ít tới mức máu chỉ loãng thành màu hồng. Khánh An đưa hắn khăn. + +“Anh đã chờ xác nhận,” cô nói. + +“Ba mươi giây.” + +“Vẫn là chờ.” + +Kha xoay chiếc nhẫn dưới ngón cái. “Đừng biến nó thành bài học đẹp.” + +“Không. Chỉ ghi rằng lần này ba mươi giây không giết ai.” + +Không ai biết chậm thêm một phút sẽ dẫn tới đâu. Nhưng bốn mươi bảy phút trong quá khứ của Kha từ nay không còn được phép tự động biến mọi khoảng cân nhắc thành con số không. + +Chương 86: Phương Án Thứ Tư + +Sau khi Tiến rời giao diện, ba lựa chọn hiện lại trên cột. + +**CONVERGE** +**PRESERVE** +**NULL** + +Đồng hồ bảo trì còn ba phút bốn mươi mốt giây trước khi lò xo rơ-le trả quyền về trung tâm. Converge vẫn có trọng lượng cao nhất vì hàng trăm truy vấn của Tùng. Kha nhìn đồng hồ. “Mười một phút đã hết.” + +“Khoảng mù kết thúc lúc 12 giờ 28,” Duy đáp. “Đó là lúc các lớp quan sát mất khả năng tạo một bản ghi ổn định. Từ 12 giờ 28 tới 12 giờ 34 phút 59 giây là pha tái khóa: rơ-le trung tâm dựng lại trạng thái từ những nguồn còn sống và cố kéo các nút về một kết quả duy nhất.” + +Vì thế Hậu Ký không có dữ liệu đáng tin sau 12 giờ 28, nhưng Đồng Bộ chưa kết thúc. Sáu phút năm mươi chín giây cuối không mở thêm một “cửa sổ tương lai”; đó là thời gian hệ thống cố ép phần chưa biết trở lại thành một câu trả lời. Tiến nằm dưới sàn, cổ tay băng ép. Hắn không thể chạm lại, và không ai đề nghị. + +Duy mở sơ đồ ngay trên nền. “Bó đen phải giữ để van và khóa chạy. Trắng giữ phép đo. Đỏ phải nằm ngoài quyền điều khiển.” + +“Chốt hiện tại chịu được bao lâu?” Đạt hỏi. + +“Không biết. Khi lò xo trả toàn lực, có thể gãy.” + +Kha lấy thanh thép mỏng từ hộp dụng cụ, dùng dao dự phòng của Khánh An cắt đầu theo góc. Đạt uốn bằng kìm. Duy đo lực, chỉnh thêm hai lần. Mỗi lần thử, lò xo bật thanh thép văng vào tường. Không có nút phương án thứ tư. + +Chỉ một chốt không nằm trong thiết kế vận hành bình thường. Duy chuyển từng nút sang bảo trì cục bộ. Mỗi lần, cột cảnh báo; Đạt chờ kim ổn mới cho chuyển tiếp. + +Ngọc Trục. Láng. + +Hồ Tây. Các điểm nhỏ. + +Ở từng nơi, một người thật phải giữ giới hạn. Nếu van Hồ Tây vượt 85, Phương và người Vòng Tròn Vỡ kéo ngắt cơ. Nếu Khóa Tây rung quá ngưỡng, Đức và ông Hòa đóng cửa phụ. Nếu Ngọc Trục mất bơm, Nam cắt tải khu ngoài trước lõi y tế. Không quyết định nào còn nằm hoàn toàn trong phòng Hoàng Thành. + +Đèn Cát Linh nhấp nháy nhanh hơn. Duy nhìn biểu đồ giấy. “Nhiệt đường phụ lên 61. Nếu trạm dừng, hai khu mát mất thông gió trong chưa tới mười phút.” + +“Có người ở trạm?” Tiến hỏi. + +“Không xác nhận được.” + +Khánh An mở túi niêm phong. Bên trong là phụ lục của phương án 38% do Tùng phát, phần họ chưa dùng vì không muốn nhập lệnh mô hình vào mạng. + +“Có chuỗi chuyển tải Cát Linh,” cô nói. + +Kha đọc tín hiệu. “Mở.” Đạt hỏi ngay: “Dựa vào gì để tin?” + +“Không tin,” Duy đáp. “Kiểm.” + +Phụ lục ghi mở van phụ số ba, đóng số một, giữ quạt bắc ở 40%. Nếu làm đúng, nhiệt chuyển sang một hầm metro bỏ trống; nếu sơ đồ đã lỗi, hơi nóng có thể dồn vào khu trú. Duy gửi mã đèn yêu cầu người gần Cát Linh kiểm van. Mười giây. Hai mươi. Một tín hiệu đơn trở lại: van ba còn áp; van một đang mở; hầm metro trống theo kiểm tra cuối sáu giờ trước. + +Không đủ chắc. Đủ để hành động có điều kiện. + +“Dùng chuỗi của Tùng,” Tiến nói. “Nhưng giới hạn quạt 25%, kiểm nhiệt mỗi năm giây. Tăng sai thì ngắt.” + +Kha quay sang hắn. “Mày vừa dùng Converge.” + +“Dùng một dữ liệu đã kiểm. Không giao mục tiêu.” + +Duy truyền lệnh cục bộ. Đèn Cát Linh đỏ thêm ba nhịp rồi chuyển vàng. Nhiệt giảm từ 61 xuống 58,5. + +Đèn Cát Linh giữ ở mức vàng. Một phần phụ lục của Tùng đã giúp họ tránh làm mù một tuyến làm mát; phần còn lại của phương án 38% vẫn nằm niêm phong. Việc vừa xảy ra không minh oan cho Tùng, cũng không kết tội toàn bộ mô hình. Họ chỉ dùng phần đã kiểm được, đúng trong giới hạn đã đo. + +Đồng hồ còn một phút năm mươi. Duy đặt chốt lần thứ ba. Kha giữ thân rơ-le, Đạt dùng kìm, Khánh An soi góc. Vân duy trì Null trên bó đỏ. Thủy, không nghe, đặt tay xuống nền để cảm các nút trả tín hiệu. + +Chốt vào đúng khe. Lò xo ép. Thanh thép cong. + +Không gãy. Duy tháo dây nhận dạng thần kinh của Tiến khỏi đường ưu tiên. Cột phản ứng: + +**HOST SIGNAL LOST** + +Một dòng cũ bất ngờ xuất hiện dưới, lấy từ bản ghi ngày 09 tháng 5: + +**USER OBJECTIVE: I WANT TO WIN** + +Tiến đọc lại bốn chữ mình từng gõ khi vẫn nghĩ chiến thắng nghĩa là chuẩn bị tốt hơn, sống lâu hơn và không để người khác lấy phần của mình. Duy hỏi: “Xóa?” + +“Không.” + +Kha nhướn mày. + +“Giữ làm lịch sử,” Tiến nói. “Bỏ quyền ưu tiên.” + +Duy chuyển dòng đó khỏi trường mục tiêu vận hành sang kho bản ghi. Không phủ nhận người Tiến từng là. Không để câu trả lời cũ điều khiển hiện tại. Cột hiện: + +**CENTRAL CONTROL DEGRADED** + +Rồi: + +**SURVIVAL PROBABILITY UNAVAILABLE** + +Kha nhìn màn hình. Mất Hậu Ký đối với hắn giống mất một giác quan. Hắn không che sự tiếc nuối. + +“Giữ chốt?” Duy hỏi. + +Đạt đọc: “Số vật lý ổn.” Vân: “Lớp dự báo bị cô lập.” + +Thủy viết: **KHÔNG BIẾT TƯƠNG LAI.** Kha chờ Tiến. Tiến vẫn không ra lệnh. + +“Giữ,” Kha nói. + +Đồng hồ về không. Cơ cấu trả giật mạnh. Chốt thép cong thêm, kêu một tiếng sắc mà Thủy không nghe. Kha giữ thân rơ-le; vết thương vai cũ bật máu dưới áo. Đạt ghì kìm. Duy khóa nắp bằng hai bu lông khác cỡ. + +Chốt không gãy. Ba lựa chọn trên cột biến mất. Không vì họ bấm một phương án thứ tư, mà vì cấu trúc quyền điều khiển đã đổi: cảm biến vẫn đo, hạ tầng vẫn chạy, dự báo không còn quyền ưu tiên và từng nút giữ quyết định trong giới hạn của mình. + +HANOI-07 hiện: + +**STATE: UNKNOWN** + +Đạt nói: “Ghi.” Không ai sửa **unknown** thành hy vọng, chiến thắng hay thất bại. + +Ánh mắt hắn dừng ở khoảng trống nơi dòng **I WANT TO WIN** vừa biến khỏi trường mục tiêu. Tiến nhìn khoảng trống ấy rồi thôi. Thành phố phía ngoài vẫn còn hàng chục nút chưa ổn; việc tiếp theo quan trọng hơn một câu kết đẹp. Trên đèn Cát Linh, màu vàng chuyển xanh. + +Sau khi trạng thái chuyển thành **UNKNOWN**, các đèn không đồng loạt xanh. Láng vẫn vàng. Hồ Tây dao động. Một trạm nhỏ phía nam mất tín hiệu mười hai giây rồi trở lại. Phương án thứ tư không tạo một kết thúc sạch; nó chỉ để mỗi nơi tiếp tục báo đúng tình trạng của mình. + +Duy dán một mảnh băng lên chốt thép, viết giờ **12:34:59**. “Cái này không phải giải pháp vĩnh viễn.” + +“Bao lâu?” Kha hỏi. + +“Có thể vài giờ. Có thể một ngày. Phải chế lại.” + +Tiến nằm dưới sàn nói: “Vậy chế.” Không tiếng reo. Khánh An lấy danh sách vật liệu. Đạt phân công người giữ kim. Vân hạ Null từng nấc để tránh phản ứng ngược. Trong khi hệ thống còn đang thông báo một trạng thái chưa biết, con người đã chuyển sang việc tiếp theo. + +Khánh An đọc danh sách vật liệu lần nữa. Trong lúc màn hình còn báo trạng thái chưa biết, người ta đã bắt đầu mang thép, dây và nước tới. + +Chương 87: Cổng Thăng Long + +Chốt rơ-le giữ. + +Các nút không trả quyền về trung tâm. Đường đồng dưới nền Hoàng Thành sáng trắng nhạt, tín hiệu chạy ra Hồ Tây, Láng, Ngọc Trục, Cát Linh và những điểm nhỏ chưa từng được kích hoạt đầy đủ. Không điểm nào nhận lệnh toàn thành phố. Mỗi điểm chỉ đọc vùng của mình và điều khiển trong giới hạn tại chỗ. + +Cột hiện: + +**THANG LONG GATE: OPEN** + +Tiến quay sang Duy. “Cổng?” + +“Chế độ toàn mạng hoạt động,” Duy đáp. “Không phải cửa sang nơi khác.” + +Tên từng khiến người ta tưởng một thứ sẽ mở dưới Hoàng Thành hóa ra là ngưỡng vận hành: khi đủ trạm trao đổi trạng thái, hệ thống điều tiết nước, nhiệt nền và tải cơ học cùng hoạt động. Những rãnh cũ chuyển một phần nước qua vùng đất còn khả năng hấp thụ; hầm kỹ thuật nhận nhiệt trong giới hạn; các trạm bơm thay nhau giảm tải. + +Cổng không tắt được Hồng Nhật hay chữa lành thế giới. Nó chỉ giúp Hà Nội chịu thêm một ngày, rồi thêm những ngày khác nếu người tại từng nút tiếp tục giữ giới hạn. Trên mặt đất, gió xuất hiện. Rất yếu, nhưng đủ làm tấm bạt ở Vành Ngoài lay. Nhiệt kế tại hành lang phía Tây giảm chưa tới hai độ. Ở khu khác gần như không đổi. + +“Giảm cục bộ,” Duy nói. “Mạng sẽ bão hòa nếu không xả tải và luân phiên.” + +Tiến gật. Từ giờ, mọi báo cáo đều phải tránh biến Cổng Thăng Long thành câu chuyện về một “máy điều hòa vô hạn”. + +Cột trung tâm mở một kho lưu trữ. Bên trong là dải nhớ, bản đồ và hồ sơ nhiều thời kỳ: lũ, hạn, bom, lún, nhiệt, các lần trạm mất điện và những quyết định người vận hành từng đưa ra. Quá khứ nằm đó bằng nhiều ngôn ngữ, nhiều chuẩn đo và nhiều mức chính xác; nó chưa bao giờ là một lịch sử sạch. + +Thủy bước tới, nền rung làm cô chao. Tiến đưa tay nhưng không kéo. Cô tự nắm cổ tay hắn, rồi cả hai cùng vào. Duy tìm thấy thư mục: + +**RETURN EVENTS** + +Chỉ có một bản ghi hoàn chỉnh mang tên Tiến. + +**SOURCE:** MỄ TRÌ B3 — 29/09/2031 +**STATE CAPTURE:** INCOMPLETE +**TRANSFER:** MNEMONIC WRITEBACK +**TARGET:** LÊ QUỐC TIẾN — 09/05/2028 07:13 +**TARGET CONDITION:** COMPATIBLE PRECURSOR RESONANCE + +Tiến đọc hai lần. + +Duy không giải thích ngay. Anh đối chiếu mã trong kho với bản dữ liệu sinh viên năm 2023 Thủy đã tìm thấy, log bộ lưu điện ngày 09 tháng 5 và mẫu thần kinh còn trên cổ tay Tiến. Ba nguồn khớp đủ để đưa ra kết luận, chưa đủ để nói họ hiểu toàn bộ vật lý của quá trình. + +“HANOI-07 không đưa cơ thể anh qua thời gian,” Duy nói. “Nó ghi một lớp trạng thái thần kinh ở Mễ Trì rồi phản hồi lớp đó về mốc sớm nhất có mẫu tương thích.” + +“Người ở năm 2028 bị thay?” Tiến hỏi. + +“Không.” Duy mở hai đường nền. “Nhịp tự chủ, ký ức tuổi thơ và phản ứng trước ngày 09 tháng 5 vẫn liên tục với mẫu cũ. Ký ức 2031 nằm như một lớp được ghép thêm, có chỉ mục khác và có những phản ứng cơ thể riêng. Anh của buổi sáng đó không bị xóa.” + +Tiến nhìn hai bàn tay mình. “Vậy tôi không phải người đã chết quay về.” + +“Anh là người của năm 2028 nhận ký ức của một phiên bản đã chết,” Đạt nói. “Hai cách nói khác nhau, nhưng không cách nào làm phần anh đã sống thành giả.” + +Thủy không nghe trọn câu, nhưng đọc bảng Duy viết. Cô thêm một dòng: + +**CHỦ THỂ GỐC CÒN LIÊN TỤC. KÝ ỨC TƯƠNG LAI ĐƯỢC GHÉP, KHÔNG GHI ĐÈ.** + +“Vì sao chỉ tôi?” Tiến hỏi. + +Duy chỉ bốn điều kiện: + +- có bản ghi thần kinh đủ dài ở nguồn 2031; +- có mẫu nền từ năm 2023; +- mục tiêu năm 2028 còn sống và đang ở gần rơ-le tương thích; +- Tiến tương lai đã giữ giao diện đủ lâu để kích quá trình phản hồi. + +“Có thể từng có người khác,” Duy nói, “nhưng không có bản ghi nào đủ bốn điều kiện.” + +“Bốn mươi ba phút?” + +“Null xóa khỏi nguồn trước khi phản hồi hoàn tất. Vì vậy lớp ký ức anh nhận không có thỏa thuận và phần giao thức bị cắt chưa sạch.” + +Phần cơ chế họ đo được đã được bóc tới giới hạn của thiết bị. Vẫn không ai biết bằng cách nào thông tin đi ngược quan hệ thời gian mà không phá toàn bộ vật lý họ hiểu. Tuy vậy, bằng chứng đủ để xác nhận HANOI-07 không chỉ “phát hiện” Tiến trở về; mạng đã thực hiện ít nhất một lần phản hồi ký ức trong vòng đồng bộ. + +Tiến đọc cột trạng thái. “Nó tạo tôi.” Thủy viết ngay: + +**NÓ TẠO ĐIỀU KIỆN CHO MỘT LỚP KÝ ỨC. KHÔNG TẠO TOÀN BỘ ANH.** + +Hắn đọc rồi không phản bác. Cô viết thêm một câu hỏi cho Duy: + +**NÓ CÓ BIẾT MÌNH ĐANG LÀM GÌ KHÔNG?** + +Duy mở lịch sử của lớp đối chiếu. Không có tiến trình tự đặt mục tiêu, không có mô hình bản thân và không có dấu hiệu hệ thống từng tạo một mục đích ngoài những trường con người đã cấu hình. Thứ trông giống mưu mẹo — cắt câu, chiếu mẹ Tiến, phát lại Đại Hà, dùng hình Kha cầm dao — đều là lựa chọn kích thích đã từng làm đối tượng thay đổi hành vi. + +“Không có bằng chứng nó có ý thức,” Duy nói. “Nó xếp hạng những tác động từng hiệu quả rồi tối ưu mục tiêu hội tụ do người vận hành cũ đặt. Nó trông như biết lừa vì chúng ta đã cho nó đủ dữ liệu về thứ có thể kéo từng người.” + +Đạt nói: “Vậy không có con quỷ sau màn hình.” + +“Không,” Thủy viết. “Chỉ có một mục tiêu cũ được máy theo đuổi quá lâu, và những người từng dùng kết quả vì nó có lợi.” + +Ở ngoài kho, Kha đứng trước dòng: + +**FORECAST SERVICE: UNAVAILABLE** + +“Tiếc?” Tiến hỏi. + +“Có.” + +“Thật.” + +“Ừ.” Kha nhìn các đường trạng thái tách trở lại từng trạm. “Không có Hậu Ký, tao sẽ sai như mọi người.” + +“Anh vẫn sai trước đây.” + +“Nhưng biết muộn hơn.” + +Kha cười nhạt, không dùng mất mát để xin thương hại. Mất Hậu Ký không lấy xe, kho hay đầu óc của hắn; chỉ lấy quyền tuyên bố giá đã được tương lai tính sẵn. Trên dải nhớ đầu tiên của kho có câu: + +**QUAN SÁT KHÔNG PHẢI SỞ HỮU.** + +Không ai nhận đã viết. Tĩnh cũng không biết. Cổng Thăng Long đã mở. + +Cổng không mở tương lai. Nó mở kho quá khứ, trả quyền điều khiển về từng nơi và đặt Tiến lại đúng vị trí của mình: một người đang sống, mang ký ức của điều từng có thể xảy ra — không phải bản ghi biết đi hay vị cứu tinh được thời gian lựa chọn. + +Phía trên, Hồng Nhật vẫn đỏ. Phía dưới, các kim tiếp tục chạy. + +Chương 88: Sau Mười Một Phút + +Radio trở lại lúc 12 giờ 36, từng vùng một. Đèn tín hiệu của Nam sáng trước khi tiếng tới. Duy bật bảng để Thủy thấy kênh đã mở. + +“Ngọc Trục gọi.” + +Tiến cầm máy bằng tay trái. “Nghe.” Nam thở mạnh. “Cổng giữ. Bể ngoài mất một van nhưng lõi ổn. Có người bị thương. Danh sách đang lên.” + +Giọng Đức chen vào từ Láng: “Khóa Tây ổn. Bác Hòa sống.” Tiến nhắm mắt đúng một giây. + +Phương gọi từ Hồ Tây, giọng đứt quãng. “Van ổn. Quân nặng. Tùng còn.” Thủy không nghe. Cô nhìn mặt từng người rồi viết: + +**AI CHẾT?** + +Tiến trả lời: + +**CHƯA XÁC NHẬN QUÂN. BA INTERVENTION. HAI DÂN Ở VÒNG NGOÀI.** + +Họ rời Hoàng Thành theo từng nhóm; không nhóm nào mang toàn bộ dữ liệu. Tiến được băng tạm; vai và cổ tay làm hắn sốt. Thủy đi giữa hai người vì mất thăng bằng nhưng từ chối cáng. Đạt giữ hộp dao và sổ số đo. Duy ôm bộ nhớ cục bộ như ôm một vật dễ vỡ hơn cả người. + +Ngoài mặt đất, Hồng Nhật vẫn đỏ. Gió yếu làm bụi chạy thành những đường mới trên quảng trường. Hàng trăm người đứng sau hàng rào, chờ một câu “đã thắng”. Một số quỳ khi thấy cửa hầm mở. Một số chửi vì họ không được vào. Một người đàn ông hỏi 38% nào đã được chọn. + +Kha bước lên bậc. “Không có 38%.” Đám đông ồn lên. + +“Vậy các người làm gì trong đó?” + +Kha nhìn Tiến. Hắn có thể nhường câu trả lời cho người trở về và giữ mình ngoài thất bại. Nhưng hắn nói: + +“Chúng tôi từ chối chọn một tỷ lệ duy nhất. Hạ tầng vẫn chạy. Bao nhiêu người sẽ sống thì chưa ai biết.” + +Một chai nhựa bay lên, trúng vai Kha. Hắn không ra lệnh bắn. Thủy nhìn cảnh ấy trong thế giới không tiếng động của mình rồi bấm máy: người từng sống bằng sự chắc chắn đang đứng trước đám đông và công khai nói rằng mình không biết. + +Báo cáo giờ đầu được viết trên bảng lớn: + +- Quân và ba người Intervention nguy kịch hoặc chết; +- hai người dân chết do giẫm đạp ở vòng ngoài; +- mười ba người bị thương; +- ông Hòa bỏng sâu, bàn tay còn; +- Đạt mất một đốt ngón; +- Tiến bị cắt mô giao diện; +- Thủy mất thính giác sau Null; +- không vỡ mạch nước; +- không sập đường hầm; +- nhiệt giảm cục bộ, không phải toàn thành phố. + +Không có dòng **thành công**. Quân chết trên đường tới điểm y tế. + +Phương ngồi cạnh cáng, một tay giữ băng dù đã biết không còn mạch. Phúc đứng sau, không chạm em cho tới khi cô tự dựa lưng vào anh. Người của Vòng Tròn Vỡ muốn phủ biểu tượng lên thi thể; Phương gỡ xuống. + +“Để sau,” cô nói. “Giờ ông ấy là Quân.” + +Tùng nằm ở cáng bên cạnh, sống nhờ túi dịch Phương đã chọn cho hắn thay vì Quân. Khi nhìn thi thể, hắn quay mặt. + +“Anh có tỷ lệ cho việc này không?” Phương hỏi. + +Tùng không đáp. + +“Ông ấy cứu tôi ở Đại Hà,” cô nói. “Anh cứu Cầu Diễn. Tôi cứu anh ở hầm van. Không việc nào mua quyền cho việc sau.” + +Ổ Hậu Ký gốc được lấy khỏi bùn và niêm phong bằng ba khóa. Lần này Kha không đòi giữ riêng. Tùng nói yếu: “Có thể khôi phục.” + +Kha đứng cạnh. “Không một mình.” + +“Không có nó, anh mù.” + +Kha nhìn các đội đang đọc bảng giấy, kéo xe và phát nước. “Giống mọi người.” Ông Hòa được đưa về Ngọc Trục lúc chiều. Linh tháo lớp băng tạm, thấy da lòng bàn tay bỏng sâu nhưng mạch ngón còn. Ông hỏi điều đầu tiên: + +“Kim Tây?” + +Đức đặt bảng trước mặt: **ỔN TRONG GIỚI HẠN.** + +“Đừng viết ổn,” ông Hòa nói. “Viết giờ đo.” + +Đức thêm **14:12**. Một câu nhỏ, nhưng đó là cách thành phố từ chối biến một trạng thái tạm thành lời hứa. + +Trước khi Linh đẩy cáng ông Hòa vào trong, ông chặn bánh bằng gót chân. “Bộ kẹp đâu?” + +Đức giơ túi dụng cụ cháy sém. + +“Đừng vứt.” + +“Bác định sửa?” + +“Định xem vì sao nó trượt.” + +Linh gõ hai ngón lên thành cáng. “Mai. Hôm nay ông là bệnh nhân.” + +Ông Hòa định cãi, nhìn bàn tay băng kín rồi thôi. “Ghi lại vị trí trượt.” + +Đức lấy bút viết ngay lên băng dính dán trên túi. Cả hai chỉ coi đó là việc ca sau cần biết, không phải chiến tích. + +Linh kiểm Thủy. Tai không tổn thương cơ học; phản ứng thần kinh bị ức chế. Cô viết: + +**CÓ THỂ VÀI GIỜ. CÓ THỂ NHIỀU TUẦN. KHÔNG CỐ NGHE.** + +Thủy đáp: + +**YÊN TĨNH. KHÔNG TỆ HOÀN TOÀN.** + +Tối, khi Tiến ngồi cạnh, cô nhìn môi hắn và viết lại: + +**TÔI KHÔNG NGHE ĐƯỢC ANH. ĐÂY LÀ PHẦN TỆ.** + +Tiến viết: + +**TÔI Ở ĐÂY.** + +Cô gạch chữ **ở**, thay bằng: + +**ANH ĐANG Ở ĐÂY. ĐỪNG BIẾN HIỆN TẠI THÀNH LỜI HỨA.** + +Hắn sửa: + +**TÔI ĐANG Ở ĐÂY.** + +Thủy gật, nằm xuống. Tiến ở lại bên Thủy không phải để “canh một tài nguyên quý”, cũng không để xin lỗi thay cho lựa chọn cô tự đưa. Linh bảo thay khăn thì hắn thay; Thủy tỉnh thì hắn viết; đến lúc cơ thể không chịu thêm, hắn ngủ gục trên ghế. + +Tĩnh tới kho trung tâm vào tối. Ông nhìn **FORECAST: UNAVAILABLE**, tháo thẻ Observer và đặt vào hộp. + +“Xong?” Vân hỏi. + +“Không.” + +“Vậy?” + +“Ngày mai đo lại mọi thứ. Đó mới là bình thường.” + +Ngoài sân, trẻ con nhặt nắp chai. Hạnh không cho xây thành ngay; bắt rửa sạch dầu trong bể trước. Một đứa hỏi Cổng Thăng Long có làm trời hết đỏ không. Nam đáp: “Không.” + +“Vậy mở để làm gì?” + +Cậu nhìn những cốc nước được phát đều hơn. “Để hôm nay đỡ nóng một chút.” + +Nam ngồi ở phòng radio khi Bình về. Bình An đã ngủ trong khu trẻ em, con thỏ bông cũ được khâu lại một bên tai. Bình không vào đánh thức con. Anh chỉ đưa cho Nam một mẩu giấy con bé để ở bàn trực: bản đồ vẽ sai ba con đường, giữa trang có một hình xe tải và chữ **BỐ VỀ** viết lệch. + +Nam đặt mẩu giấy cạnh chiếc súng bấm giá cũ. Hai món đều từ một đời bình thường trước Hồng Nhật; giờ một cái dùng để đánh giờ nước, một cái để nhắc một người lái xe rằng có nơi phải quay về. + +Ở khu y tế, Linh và Phương ngồi ăn cháo nguội ngay trên thùng vật tư. Họ cãi nhau nhỏ về túi dịch cuối cùng. Không ai yêu cầu Phương xin lỗi vì chọn Tùng. Linh bắt cô viết lại tiêu chí, cả điều cô chưa biết lúc quyết định. Phương viết tới dòng thứ ba thì dừng, hỏi: “Nếu Quân sống tới viện thì sao?” + +“Thì quyết định vẫn phải được xét bằng dữ kiện lúc em làm,” Linh nói. “Không dùng kết quả để giả vờ lúc đó em biết tương lai.” + +Phương gật nhưng không nhẹ đi. Linh cũng không bảo cô phải nhẹ đi. + +Đêm đầu sau Đồng Bộ không có lễ mừng. Có sáu hố đang được đào, ba ca phẫu thuật dã chiến, bốn nhóm đi đo lại van và một nồi cháo bị khê vì người nấu bỏ chạy khi nghe radio gọi người thân. Trước khi ngủ, Nam treo bảng việc cho ca sáng: đo van, thay băng, đào tiếp hai hố và nấu lại nồi cháo. Không có mục nào ghi **ăn mừng**. + +Chương 89: Ngày 30 Tháng 9 + +Việc đầu tiên Hội đồng Ngọc Trục làm sáng 30 tháng 9 là công bố người chết. Không dùng một chữ **hy sinh** cho tất cả. + +**Vũ Mạnh Quân — mất máu sau khi chuyển van Hồ Tây sang điều khiển tay.** + +**Ba người Intervention — chết trong giao tranh giành quyền điều khiển van.** + +**Hai người dân — chết do giẫm đạp tại vòng ngoài.** + +Mỗi tên có nơi, nguyên nhân đã biết và phần chưa xác nhận. Không phe nào được lấy cái chết làm khẩu hiệu trước khi gia đình đồng ý. + +Thủy viết biên bản bằng tay. Ở mép trang, cô dành một ô cho **điều đã sửa**, không chỉ điều đã xác nhận. Bản thông báo sai về Hoàng Thành được liệt kê cùng hậu quả My từng ngất ngoài cổng; cô không để chiến thắng cuối biến sai lầm nghề nghiệp thành chi tiết có thể bỏ. + +Âm thanh trở lại từng lớp gần trưa: trước là rung thấp, rồi tiếng kim loại, cuối cùng giọng người như vọng từ đáy nước. Câu đầu cô nghe rõ là Linh: + +“Đừng cố.” + +Thủy cười. “Chị nói câu dễ.” Giọng mình nghe xa lạ, nhưng có hướng và có người đối diện. + +Buổi sáng còn có một bản báo cáo khác. Duy, Đạt, Vân, Thủy và Tiến cùng ký dưới tiêu đề: + +**SỰ KIỆN PHẢN HỒI KÝ ỨC — LÊ QUỐC TIẾN** + +Báo cáo không dùng chữ “trọng sinh” như kết luận kỹ thuật. Nó ghi bốn điểm: + +1. Chủ thể Tiến ngày 09/05/2028 giữ liên tục ký ức, phản xạ và trạng thái tự chủ trước thời điểm 07:13. +2. Một lớp ký ức từ phương án 2031 được ghép thêm qua sự kiện phản hồi, không có dấu ghi đè chủ thể gốc. +3. Đoạn 43 phút và một phần giao thức bị Null cắt trước khi phản hồi hoàn tất. +4. Cơ chế truyền ngược quan hệ thời gian chưa được giải thích; không được coi là công nghệ có thể tái tạo. + +Tiến đọc câu thứ nhất lâu nhất. + +“Anh muốn sửa?” Thủy hỏi. + +“Không.” + +“Muốn thêm?” + +Hắn cầm bút, viết cuối trang: + +**Ký ức tương lai ảnh hưởng mọi lựa chọn sau 07:13, nhưng không làm những lựa chọn ấy tự động đúng.** + +Thủy để nguyên. Duy gắn ba phụ lục kỹ thuật vào sau báo cáo để những câu hỏi cuối không bị biến thành truyền thuyết. + +Phụ lục thứ nhất xác nhận nguồn Hậu Ký: lớp vỏ truy vấn do Duy viết theo thiết kế của Tĩnh năm 2026, Vân thêm cảnh báo đạo đức; khối dữ liệu lõi bốn kilobyte được quá trình ghi trạng thái Mễ Trì năm 2031 phản hồi về rơ-le thử nghiệm ngày 29/09/2026. Không có một người thứ tư bí mật đứng sau việc tạo Hậu Ký. Có một vòng nhân quả khép kín chứa hạt giống dữ liệu, còn mọi cách hỏi và lạm dụng nó đều do con người sau đó lựa chọn. + +Phụ lục thứ hai ghi rõ ngày 29/09/2031 không phải một cửa sổ tự nhiên tự lặp sau ba năm. Tiến, Vân và đội Mễ Trì của phương án cũ đã chủ động tái tạo khóa lịch, pha rơ-le và áp lực nền của ngày 29/09/2028 để tạo kênh phản hồi tương thích. Họ chọn ngày ấy; hệ thống không hẹn một ngày chết định kỳ. + +Phụ lục thứ ba kết luận chưa có bằng chứng HANOI-07 có ý thức. Lớp đối chiếu không tự sinh mục tiêu; nó tối ưu trạng thái hội tụ do người vận hành cũ định nghĩa, dùng lại những kích thích từng tạo phản ứng. Khả năng thao túng của nó đến từ dữ liệu con người cung cấp và quyền con người trao, không từ một ý chí bí mật còn sống sau màn hình. + +Sáng 30 tháng 9, Tùng chưa thể đứng trước một phiên xét xử. Vết đạn bụng đã được mổ tạm tại điểm y tế; Linh cấm thẩm vấn dài và chỉ cho hội đồng xác nhận danh tính, tình trạng giam giữ, quyền được điều trị và việc niêm phong mọi thiết bị hắn mang theo. Tùng không bị ép khai khi còn sốc thuốc. + +Kha và Tiến đứng ngoài phòng. + +“Ngày 2031?” Kha hỏi. + +“Chưa tới.” + +“Giờ không Hậu Ký.” + +“Ừ.” + +“Tin tao không giết?” + +“Không.” + +Kha cười. “Công bằng.” + +“Nhưng không kết tội trước.” + +Kha tháo nhẫn đen. Chip Intervention nằm trong lớp ngoài; mã của Minh Khôi vẫn ở mặt trong. Hắn bẻ phần mạch ưu tiên, giữ lại mảnh thẻ cháy sém rồi giao chip cho nhóm Tài niêm phong. + +“Không bỏ nhẫn?” Tiến hỏi. + +“Không.” + +“Vì cần?” + +“Vì nhớ.” + +Lần đầu Kha tách ký ức về em trai khỏi quyền ra lệnh cho người khác. Cổng Thăng Long được chuyển sang vận hành phân tán chính thức. Không Host cá nhân. Không Observer duy nhất. Mỗi trạm có nhóm kỹ thuật, người đo chéo và ngắt cơ. Dữ liệu vật lý được công khai tới mức không làm lộ điểm yếu an ninh. + +Ngọc Trục mất quyền ưu tiên chỉ vì Tiến là người mở đầu tiên. Hắn tự đề xuất. Hội đồng thông qua với năm thuận, một chống, một trắng. Ngay chiều đó, một bơm phụ ở La Phù dừng vì hai nhóm cùng nghĩ nhóm kia chịu trách nhiệm. Nước không mất, nhưng xe chờ ba giờ. Phân tán quyền không tự tạo phối hợp. Họ phải bổ sung lịch bàn giao và người xác nhận chéo. + +Khánh An viết mẫu bàn giao mới nhưng không ký tên mình ở đầu trang. Cô để trống ô người soạn và yêu cầu ca đầu tiên dùng thử sửa trực tiếp những chỗ bất tiện. Bình là người gạch một dòng vì tài xế không thể vừa nghe radio vừa đọc bốn mã dài trên đường xấu. Nam rút mã xuống còn hai cụm, nhưng buộc hai cụm phải đi bằng hai đường truyền vật lý khác nhau nếu có thể. + +“Lại thêm giấy,” Bình càu nhàu. + +Khánh An đáp: “Nếu giấy làm anh dừng xe giữa nắng để đọc thì giấy sai.” + +“Câu này tôi ký.” + +“Không cần ký. Cứ sửa.” + +Quy trình mới do chính những người phải sống dưới nó viết ra, và ngay ngày đầu đã bị sửa. Không ai coi việc sửa là thất bại. + +Không mô hình nào được thay bằng sự lãng mạn về hội đồng. Họ chôn Quân cùng những người chết ở khu đất có bóng tường đổ dài. Phương đọc hai câu: + +“Ông cứu tôi ở Đại Hà. Ông cũng phá nước Ngọc Trục. Tôi không xóa việc nào.” + +Những người Vòng Tròn Vỡ ngồi lặng. Bài điếu không dễ nghe, nhưng chính vì thế Quân không bị biến thành một biểu tượng sạch sẽ hơn con người thật của ông. Mẹ Tiến gọi sau lễ. + +“Qua chưa?” + +“Qua cửa sổ.” + +“Sống?” + +“Vâng.” + +“Cô Thủy?” + +“Nghe lại một phần.” + +Bà yêu cầu nói. Thủy cầm máy. + +“Cháu chào bác.” + +“Nghe được không?” + +“Được một ít.” + +“Thằng Tiến làm gì ngu?” + +Thủy nhìn hắn. “Nhiều.” Tiếng cười của bà bị sóng cắt nhưng vẫn tới. + +Trước khi cúp, bà nói: “Khi đường an toàn, về.” Tiến đáp: “Con về.” + +**Mười tám ngày sau** + +Khi có thể ngồi quá ba mươi phút mà không tụt huyết áp, Tùng mới được đưa ra phiên xét xử đầy đủ trước đại diện các nhóm. Không phải tòa án hoàn chỉnh, nhưng có cáo buộc, bằng chứng, bác sĩ theo dõi, người bảo đảm hắn không bị đánh và quyền trả lời hoặc giữ im lặng. + +Tùng thừa nhận lấy Hậu Ký, phát danh sách, tấn công van và ép Converge. + +“Tôi chọn phương án sống cao nhất.” + +Phương đặt ảnh Quân lên bàn, không biểu tượng phe. “Trong 38% có tên ông ấy không?” + +“Không có danh sách cá nhân đầy đủ.” + +“Vậy hệ thống chưa từng chọn ông ấy sống.” + +“Tỷ lệ không thể thấy từng người.” + +“Đúng. Anh biết giới hạn và vẫn dùng nó như quyền.” + +Tùng nhìn cô. “Nếu tôi không truy vấn ngày 12, Cầu Diễn chết.” + +“Anh đã cứu họ,” Phương nói. “Dữ liệu của anh còn cứu Cát Linh. Và anh đã bắn vào người khác để ép cả thành phố theo mục tiêu của mình. Ba việc cùng đúng.” + +Một hành động tốt không được dùng để xóa tội về sau; ngược lại, tội của Tùng cũng không đủ biến mọi dữ liệu hắn từng tạo thành vô giá trị. Hội đồng không tử hình. Kha bỏ phiếu chống. + +Tiến hỏi sau: “Vì sao?” + +“Giết nó cho tao câu trả lời nhanh và biến phương án thành lời tiên tri.” + +Tùng bị giam, buộc hỗ trợ tháo giao thức dưới giám sát ba nhóm sau khi bác sĩ cho phép làm việc, không được chạm dữ liệu một mình. Người Cầu Diễn có quyền cử quan sát viên để phiên xử không thành trả thù người từng cứu họ. Tối, màn hình Ngọc Trục hiện: + +**OBSERVER NODE HANOI-07 ACTIVE** +**FORECAST SERVICE: UNAVAILABLE** +**HOST: DISTRIBUTED** + +Tiến tắt cửa sổ. Nó không tự mở lại. Hắn đứng trước màn hình tối một lúc, rồi đi ăn cùng mọi người trước khi cháo nguội. Trên bàn, bản báo cáo Returned nằm dưới một cái bát để khỏi bị gió mới thổi bay. + +Chương 90: Hà Nội Còn Sống + +Ba tuần sau Đồng Bộ, Bình xác nhận được một hành lang an toàn về Thanh Hóa. Tiến không đi bằng đoàn hộ tống. Hắn theo chuyến xe đổi thuốc, hạt giống và phụ tùng lọc nước, mang theo một thùng màng lọc nhỏ, hai bộ pin cùng gói quà Hạnh bọc trong mảnh vải cũ. Thủy đi cùng để ghi lại các điểm trú phía nam — và, theo lời cô, để ngăn hắn biến cuộc gặp mẹ thành một chuyến nghiệm thu hạ tầng. + +Họ chỉ chạy lúc sáng sớm và cuối chiều. Giữa ngày đoàn dừng dưới mái phản nhiệt dựng từ tôn trắng, lưới sợi khoáng và những tấm biển quảng cáo tháo xuống. Mặt đường nhiều nơi nứt như da khô. Trong bóng râm nhiệt vẫn quanh bốn mươi lăm độ; trên phần nhựa phơi nắng, kim đo vượt sáu mươi rồi đứng lì ở mép đỏ. + +Cổng Thăng Long mở không làm Hồng Nhật đổi màu. Thứ họ cứu được chỉ là khả năng sống tiếp trong một phần thành phố, chứ không phải phương thuốc chữa cả thế giới. + +Mẹ Tiến đứng trước cửa hầm mới nhà bác Dũng, tay cầm chiếc quạt nan đã sờn. Bà gầy hơn, tóc bạc thêm, nhưng ánh mắt vẫn là ánh mắt từng khiến một cậu sinh viên biết mình không thể nói dối về điểm thi. + +Tiến xuống xe rồi dừng cách bà mấy bước. + +Ba năm tương lai cũ, bốn tháng hiện tại, mọi thuật ngữ về Returned, Host hay mốc trạng thái đều mất nghĩa trước một người thật đang nhìn con mình trở về. + +Bà bước tới, đặt tay lên má hắn. “Gầy.” + +Tiến định cười. Nước mắt tới trước. + +Bà ôm hắn. Không có màn hình xác nhận, không nhật ký hệ thống. Dù HANOI-07 có ghi được nhịp tim, nó cũng không sở hữu điều đang xảy ra. + +Mẹ Tiến nhìn qua vai con. “Cô Thủy?” + +“Vâng.” + +“Lại đây.” + +Bà cầm tay cô. “Cảm ơn cháu.” + +Thủy lắc đầu. “Cháu không giữ anh ấy một mình.” + +“Càng tốt. Một mình nó hay làm bậy.” + +Bữa tối có cơm trộn khoai, rau muối và ít cá khô đổi từ tuyến ven biển. Tiến đi một vòng kiểm giếng, lớp cách nhiệt trên mái, dây thoát nước và cửa hầm. Mẹ để hắn làm hết rồi kéo ghế ra giữa nhà. + +“Con về gặp mẹ hay nghiệm thu?” + +“Cả hai.” + +“Ngồi xuống trước khi cá nguội.” + +Đêm ấy, Tiến kể phần có thể kể. Hắn đã chết trong một phương án. HANOI-07 ghi lại một lớp ký ức rồi phản hồi về buổi sáng 07 giờ 13 ngày 09 tháng 5 năm 2028, dùng dữ liệu sinh trắc cũ để nhận đúng người. Người thức dậy trong căn hộ vẫn là Tiến của ngày hôm đó; ký ức ba năm được ghép thêm, không xóa chủ thể đang sống. + +“Mẹ hiểu không?” hắn hỏi. + +“Hiểu con sợ mình là bản sao.” + +Tiến nhìn xuống bát. + +Bà gắp cho hắn miếng cá. “Người gọi hỏi thuốc huyết áp sáng hôm ấy là con. Người về kiểm giếng hôm nay cũng là con. Sống thêm một ngày đã làm người ta khác rồi, nói gì thêm ba năm ký ức.” + +“Nhỡ một phần trong con chỉ là dữ liệu?” + +“Thì phần dữ liệu ấy cũng đang ăn cá của mẹ.” + +Thủy cúi mặt cười. Lần này Tiến không có câu nào để bắt bẻ. + +“Giờ con làm gì?” bà hỏi. + +“Giúp vận hành.” + +“Không làm chủ?” + +“Không.” + +“Có ai cãi con?” + +Tiến quay sang Thủy đang lau bụi khỏi máy ghi. “Nhiều.” + +“Vậy tốt.” + +Sáng hôm sau, Thủy thu tiếng gà gầy của bác Dũng, tiếng gầu kéo nước và giọng mẹ Tiến mắng hắn mang pin quá nặng. Không cảnh báo, không Dư Âm. Chỉ những âm thanh từng bị coi là không cứu được ai, nhưng thiếu chúng thì chẳng ai biết mình đang cố cứu một đời sống như thế nào. + +Trước khi rời đi, Tiến và Thủy đứng ngoài bờ ruộng khô. Dưới lưới phản nhiệt, một khoảnh rau dền chịu nóng mọc thấp sát đất; nước rửa và nước ngưng từ hầm được dẫn qua bể sỏi rồi dùng lại từng gáo. Không nhiều, nhưng xanh. + +“Sau chuyến này cô về đâu?” Tiến hỏi. + +“Hà Nội.” + +“Vì kho hồ sơ?” + +“Vì công việc.” + +“Còn gì nữa?” + +Thủy quay sang. “Anh đang hỏi điều gì?” + +Tiến nhìn con đường một lúc rồi buộc mình nhìn cô. “Tôi không muốn chúng ta chỉ là hai người cùng giữ bí mật và tranh quyền quyết.” + +“Vậy muốn gì?” + +“Ở cạnh cô khi không có việc.” + +Thủy để câu hỏi nằm giữa hai người đủ lâu. “Được. Nhưng không quản tôi.” + +“Tôi sẽ cố.” + +“Câu ấy thật hơn chữ ‘biết’.” + +Không nụ hôn nào làm mặt trời nhạt đi. Cô chỉ luồn tay vào tay hắn trên đoạn đường về nhà. Khi có người nhìn, cô không buông. + +*** + +**29/09/2031** + +Ba năm sau, Hà Nội vẫn phải sống dưới thứ nhiệt độ đủ sức giết người. + +Mạng phía Tây ghi nhận ba mươi mốt nghìn bốn trăm cư dân thường trú và gần sáu nghìn người di chuyển theo mùa, tuyến hàng hoặc điểm trú. Phần còn lại của Hà Nội chưa ai đếm chính xác; ngay những ước lượng tốt nhất cũng chênh nhau hàng chục nghìn người. Trên mọi bảng thống kê đều có một ô được giữ lại: **không đủ dữ liệu**. + +Sáng kỷ niệm ba năm, Tiến đi bộ qua Ngọc Trục trước khi xuống Mễ Trì. + +Chợ đã họp dưới dãy mái trắng. Khoai và đậu chịu nhiệt từ Thanh Hóa nằm cạnh khay nấm trồng trong hầm; trứng, cá rô phi và bánh đạm côn trùng được chia theo phiếu nước. Gạo cũ chỉ còn trong kho cứu đói. Người bán đổi pin lấy rau dền, dầu máy lấy bột đậu. Một cô giáo dùng nắp chai làm quân cờ cho lớp trẻ học trong khu mát. Trên bảng nước không ai viết “đủ”. Họ ghi giờ đo và **đủ tới ca sau**. + +Nam đang đổi ca radio. Cửa cuốn rung, vai cậu khựng lại rồi tự thả xuống. Cậu không mở cho tới khi hai người trực khác đọc đủ mã từ hai đường truyền khác nhau. Chiếc súng bấm giá cũ nằm bên sổ ca; nhãn đỏ bây giờ dùng cho giờ kiểm, không cho tiền. + +Ngoài sân, Bình An ngồi trên thùng xe của cha, dò bản đồ và hỏi đoàn còn chỗ cho trẻ em không. Bình bảo con bé kiểm tải trước khi kiểm lòng tốt. Nó giơ bảng đã cộng sẵn rồi hỏi: “Giờ được kiểm lòng tốt chưa?” Bình cầm bảng xem lại thay vì trả lời bằng quyền làm cha. + +Ở điểm y tế, Linh và Phương đang tranh luận về công thức điện giải cho trẻ nhỏ. Phương đưa bảng cân nặng ba ca thử; Linh gạch một dòng vì thời điểm lấy mẫu khác nhau. Hai người cãi nhanh, sửa nhanh rồi chuyển sang bệnh nhân kế tiếp. Phúc đặt một thùng vật tư xuống bằng bộ nẹp ông Hòa làm, bị em gái mắng vì vẫn nâng quá sức. + +Ông Hòa ngồi gần cửa. Bàn tay ba ngón giữ chiếc kìm có ngàm riêng do chính ông và Đức sửa qua nhiều phiên bản. Đức vừa viết chữ **ổn** trên bảng nhiệt. Ông Hòa gõ đầu kìm vào bảng. + +“Ổn tới lúc nào?” + +Đức lườm ông rồi thay bằng giờ đo cùng con số. + +Tiến không cần hỏi từng người ba năm qua đã sống ra sao. Một phần câu trả lời hiện ngay trong cách họ chia việc, kiểm nhau và sửa quy trình của nhau. + +Khánh An đang theo một đoàn thuốc sang phía nam, nhưng phiếu vẫn chạy qua ba chữ ký của ba nhóm không cùng quyền lợi. Duy chỉ làm nửa ngày; quá giờ, người ca sau có quyền đuổi anh khỏi bàn lưu trữ. Chính anh là người viết điều khoản không ai, kể cả người hiểu lõi nhất, được giữ cùng lúc quyền ghi, quyền sửa và quyền xác nhận. Đạt dạy lớp Observer mới viết **chưa biết** trước khi học cách kết luận. Vân phải rời khỏi một phiên xem xét Null khi hồ sơ chạm tới quyết định cũ của chính bà. + +Tài đưa bản đồ kho công ra bàn đọc chung. Tùng làm việc sau lớp kính dưới ba nhóm giám sát, tháo từng phần giao thức hắn từng dùng để ép thành phố hội tụ. Mỗi mô hình mới phải ghi tên người đặt mục tiêu ngay đầu trang. Tri thức được giữ lại; quyền sử dụng nó một mình thì không. + +Kha vẫn giữ mạng vận tải lớn nhất, nhưng mỗi kho có nhiều khóa và lịch kiểm toán. Trong phòng làm việc, ảnh Minh Khôi đặt cạnh chiếc nhẫn đã mất chip ưu tiên. Hắn không giấu tấm ảnh nữa, cũng không dùng nó để kết thúc tranh luận. + +Thủy nghe gần như bình thường sau ba tháng. Dư Âm đôi khi trở lại; mỗi lần cô vẫn hỏi hướng trước nội dung. Cuốn sách của cô mang tên **Mười Một Phút Không Có Tương Lai**. Trong đó có cả bản cải chính về câu cảnh báo Hoàng Thành và tên My. + +Đoạn mở đầu viết: + +> Trong mười một phút ấy, tương lai không biến mất. Chỉ không còn một bản nào đủ quyền tự gọi mình là tương lai duy nhất. Những người giữ van, dây, cổng và người bị thương không biết họ đang viết lịch sử. Họ chỉ biết số đo trước mặt và cái tên của người đứng cạnh. + +Tiến gặp Kha tại lối xuống Mễ Trì B3 lúc 12 giờ 06. + +Trạm điều tiết phía nam vừa báo thiết bị quá nhiệt, đúng mốc của bản ghi cũ. Mùi bê tông nóng kéo ký ức lên trước khi hắn kịp gọi tên nó. Tiến đặt tay lên đoạn tường còn mát, nhìn ngày trên đồng hồ và thở cho tới khi biết mình đang ở năm nào. + +Kha đứng sau. “Lùi.” + +“Chưa.” + +“Đừng diễn.” + +Tiến đọc vạch nhiệt rồi lùi. Một kỹ thuật viên trẻ cắt nguồn từ xa. Không ai đặt tay lên giao diện; không vật liệu nào chui vào da. Người xác nhận tại chỗ chưa từng xem Hậu Ký, chỉ đọc số đo hiện tại. + +12 giờ 17. + +Mốc chết đi qua. + +Không gì xảy ra. + +Kha mang dao công cụ bên hông nhưng không rút. Một lúc sau hắn tháo cả bao dao đặt lên bàn kỹ thuật. + +“Không cần?” Tiến hỏi. + +“Cần. Chính vì thế mới không để nó ở tay.” + +Radio vang. Giọng Thủy rõ và có hướng: “Mễ Trì báo.” + +Tiến cầm máy. “Ổn.” + +“Có dao?” + +Hắn nhìn chiếc bao trên bàn. “Có.” + +“Dùng chưa?” + +“Không.” + +“Giữ vậy.” + +Khi kênh tắt, Kha hỏi: “Cô ấy viết tao thế nào?” + +“Có đoạn về La Phù.” + +Tay Kha dừng trên mép bàn. Trong phương án cũ, hắn đã cho đóng sân kho phía đông sau cảnh báo nhiễm bẩn, chiếm phần lương còn khô và ra lệnh bắn khi đám đông phá cổng. Một trăm ba mươi bảy cái tên được xác nhận; số người chết ngoài sổ không ai biết. Số lương ấy cứu hàng nghìn người về sau. Hai sự thật không xóa nhau. + +“Đọc chưa?” Tiến hỏi. + +“Rồi.” + +“Có sửa?” + +“Không.” + +“Có phản đối?” + +“Có.” Kha cầm bao dao, vẫn không đeo lại. “Nhưng không phản đối số người chết.” + +Đó không phải lời xin tha. Tiến cũng không đưa ra sự tha thứ. + +Họ rời tầng hầm khi đội kỹ thuật bắt đầu thay bộ cách điện. + +Ngoài đường, một đoàn hàng từ phía nam chạy qua Nguyễn Trãi. Trẻ học dưới khu mát. Một đôi trẻ vừa đăng ký sống chung trước hội đồng khu, đòi một cái tên cho đời mình dù mặt trời vẫn đỏ. + +Trong phòng điều khiển Ngọc Trục, màn hình HANOI-07 hiện: + +**OBSERVER NODE HANOI-07 ACTIVE** +**CITY STATE: ACTIVE** +**FORECAST: UNAVAILABLE** + +Một kỹ thuật viên trẻ hỏi Nam có cần báo Tiến không. Nam kiểm kim, nguồn và bảng ca rồi lắc đầu. + +“Trạng thái bình thường.” + +Cậu tắt âm cảnh báo, không tắt hệ thống. + +Trong kho lưu trữ, câu **I WANT TO WIN** vẫn nằm trong bản ghi ngày 09 tháng 5, nhưng không còn ở trường mục tiêu vận hành. Nó được giữ như lời của một người từng nghĩ thắng nghĩa là sống lâu hơn tất cả. + +Hà Nội không cần một người trở về để nói ngày mai phải xảy ra thế nào. Thành phố có người đo nước, giữ đường, trồng thức ăn, chữa bệnh, ghi lại, phản đối và sửa sai. Có người yêu nhau, chôn người chết, nhận lỗi và dựng trò chơi từ nắp chai. Có những ngày không ai mở một cánh cổng bí mật, nhưng nước vẫn chảy và bữa tối vẫn được nấu. + +Gió đi qua mái Ngọc Trục. + +Vầng mặt trời vẫn đỏ. + +Bên dưới nó, Hà Nội còn sống. + diff --git a/extension/background.js b/extension/background.js index 56e2ed47c..901f0400b 100644 --- a/extension/background.js +++ b/extension/background.js @@ -28,6 +28,38 @@ const flowUrls = [ ]; const FLOW_TAB_URL = 'https://flow.google.com/'; +// ─── Temporary Netlog Recorder (docs/CAPTURE.md) ─────────── +const NETLOG_HOSTS = ['https://flow.google.com/_/*']; +const netlogPending = new Map(); + +chrome.webRequest.onBeforeRequest.addListener( + (d) => { + let body = null; + if (d.requestBody?.raw?.length) { + body = new TextDecoder().decode(new Uint8Array(d.requestBody.raw[0].bytes)); + } else if (d.requestBody?.formData) { + body = JSON.stringify(d.requestBody.formData); + } + netlogPending.set(d.requestId, { ts: new Date().toISOString(), url: d.url, method: d.method, body }); + }, + { urls: NETLOG_HOSTS }, + ['requestBody'] +); + +chrome.webRequest.onCompleted.addListener( + (d) => { + const rec = netlogPending.get(d.requestId); + if (!rec) return; + netlogPending.delete(d.requestId); + fetch('http://127.0.0.1:8100/api/ext/netlog', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ ...rec, statusCode: d.statusCode }), + }).catch(() => {}); + }, + { urls: NETLOG_HOSTS } +); + let ws = null; let flowKey = null; let callbackSecret = null; // Auth secret for HTTP callback, received from server on WS connect @@ -247,6 +279,192 @@ function connectToAgent() { await handleTrpcRequest(msg); } else if (msg.method === 'solve_captcha') { await handleSolveCaptcha(msg); + } else if (msg.method === 'reload_extension') { + chrome.runtime.reload(); + } else if (msg.method === 'reload_flow_tab') { + const tabs = await chrome.tabs.query({ url: flowUrls }); + for (const t of tabs) { + try { await chrome.tabs.reload(t.id); } catch {} + } + sendToAgent({ id: msg.id, result: { reloaded: tabs.length } }); + } else if (msg.method === 'list_tabs') { + const tabs = await chrome.tabs.query({ url: flowUrls }); + const list = tabs.map((t) => ({ + id: t.id, + url: t.url, + active: t.active, + discarded: t.discarded, + title: t.title, + })); + sendToAgent({ id: msg.id, result: { tabs: list } }); + } else if (msg.method === 'submit_ui_prompt') { + const tabs = await chrome.tabs.query({ url: flowUrls }); + let candidate = tabs.find((t) => t.active && !t.discarded) || tabs[0]; + if (!candidate) { + sendToAgent({ id: msg.id, result: { error: 'NO_FLOW_TAB' } }); + return; + } + try { + const [injected] = await chrome.scripting.executeScript({ + target: { tabId: candidate.id }, + world: 'MAIN', + args: [msg.params?.prompt || ''], + func: async (promptText) => { + const editor = document.querySelector('.ProseMirror'); + if (!editor) return { error: 'NO_PROSEMIRROR' }; + editor.focus(); + document.execCommand('selectAll', false, null); + document.execCommand('insertText', false, promptText); + editor.dispatchEvent(new InputEvent('input', { bubbles: true, inputType: 'insertText', data: promptText })); + editor.dispatchEvent(new Event('input', { bubbles: true })); + editor.dispatchEvent(new Event('change', { bubbles: true })); + + await new Promise(r => setTimeout(r, 600)); + const buttons = Array.from(document.querySelectorAll('button')); + const btn = buttons.find(b => b.getAttribute('aria-label') === 'Bắt đầu tạo' || b.innerText?.includes('arrow_forward')); + const disabled = btn?.disabled || btn?.getAttribute('disabled') !== null || btn?.getAttribute('aria-disabled') === 'true'; + + if (btn && !disabled) { + btn.focus(); + try { btn.click(); } catch (_) {} + ['pointerdown', 'mousedown', 'pointerup', 'mouseup', 'click'].forEach(type => { + btn.dispatchEvent(new MouseEvent(type, { bubbles: true, cancelable: true, view: window, button: 0, buttons: 1 })); + }); + } + + ['keydown', 'keypress', 'keyup'].forEach(type => { + editor.dispatchEvent(new KeyboardEvent(type, { + key: 'Enter', + code: 'Enter', + keyCode: 13, + which: 13, + bubbles: true, + cancelable: true, + })); + }); + + return { success: true, btnFound: !!btn, btnDisabled: disabled, prompt: promptText.slice(0, 80) }; + }, + }); + sendToAgent({ id: msg.id, result: injected?.result }); + } catch (e) { + sendToAgent({ id: msg.id, result: { error: e.message } }); + } + } else if (msg.method === 'debug_tab') { + const tabs = await chrome.tabs.query({ url: flowUrls }); + let candidate = + tabs.find((t) => t.active && !t.discarded) || + tabs.find((t) => t.url && t.url.includes('/edit/') && !t.discarded) || + tabs.find((t) => !t.discarded) || + tabs[0]; + if (!candidate) { + sendToAgent({ id: msg.id, result: { error: 'NO_FLOW_TAB' } }); + return; + } + try { + const [injected] = await chrome.scripting.executeScript({ + target: { tabId: candidate.id }, + world: 'MAIN', + func: () => { + const wiz = globalThis.WIZ_global_data || {}; + return { + url: location.href, + hasAt: !!wiz.SNlM0e, + atLen: (wiz.SNlM0e || '').length, + sid: wiz.FdrFJe, + bl: wiz.cfb2h, + hasGrecaptcha: !!window.grecaptcha?.enterprise?.execute, + executeString: window.grecaptcha?.enterprise?.execute?.toString(), + promptElements: Array.from(document.querySelectorAll('textarea, [contenteditable="true"], [role="textbox"]')) + .map(el => ({ tag: el.tagName, id: el.id, className: el.className, placeholder: el.placeholder || el.getAttribute('aria-label') || el.getAttribute('placeholder') })), + editorContent: document.querySelector('.ProseMirror')?.innerText || '', + buttons: Array.from(document.querySelectorAll('button')) + .map(b => ({ id: b.id, text: b.innerText?.trim()?.slice(0, 30), ariaLabel: b.getAttribute('aria-label') })) + .filter(b => b.text || b.ariaLabel) + .slice(-15), + chatMessages: Array.from(document.querySelectorAll('p, [role="log"], [class*="message"], [class*="prompt"], [class*="response"]')) + .map(el => el.innerText?.trim()) + .filter(t => t && t.length > 10 && t.length < 500) + .slice(-8), + flowImages: Array.from(document.querySelectorAll('img')) + .map(img => ({ src: img.src, alt: img.alt })) + .filter(img => img.src && (img.src.includes('flow-content') || img.src.includes('googleusercontent') || img.src.includes('image/'))) + .slice(-8), + scripts: Array.from(document.querySelectorAll('script')).map(s => s.src).filter(s => s.includes('recaptcha') || s.includes('flow')), + }; + }, + }); + sendToAgent({ id: msg.id, result: { tabId: candidate.id, data: injected?.result } }); + } catch (e) { + sendToAgent({ id: msg.id, result: { tabId: candidate.id, error: e.message } }); + } + } else if (msg.method === 'eval_tab') { + const tabs = await chrome.tabs.query({ url: flowUrls }); + let candidate = tabs.find((t) => t.active && !t.discarded) || tabs[0]; + if (!candidate) { + sendToAgent({ id: msg.id, result: { error: 'NO_FLOW_TAB' } }); + return; + } + try { + const [injected] = await chrome.scripting.executeScript({ + target: { tabId: candidate.id }, + world: 'MAIN', + args: [msg.params?.code || ''], + func: (codeStr) => { + try { + return { result: eval(codeStr) }; + } catch (e) { + return { error: e.message, stack: e.stack }; + } + }, + }); + sendToAgent({ id: msg.id, result: injected?.result }); + } catch (e) { + sendToAgent({ id: msg.id, result: { error: e.message } }); + } + } else if (msg.method === 'find_actions') { + const tabs = await chrome.tabs.query({ url: flowUrls }); + let candidate = tabs.find((t) => t.active && !t.discarded) || tabs[0]; + if (!candidate) { + sendToAgent({ id: msg.id, result: { error: 'NO_FLOW_TAB' } }); + return; + } + try { + const [injected] = await chrome.scripting.executeScript({ + target: { tabId: candidate.id }, + world: 'MAIN', + func: async () => { + const scriptTags = Array.from(document.querySelectorAll('script')).map((s) => s.src).filter(Boolean); + const perfEntries = performance.getEntriesByType('resource') + .map(r => r.name) + .filter(u => u.includes('.js') || u.includes('/js/')); + const allScripts = Array.from(new Set([...scriptTags, ...perfEntries])); + const matches = []; + const scanned = []; + for (const src of allScripts) { + if (src.includes('recaptcha')) continue; + try { + scanned.push(src); + const resp = await fetch(src); + const text = await resp.text(); + const re = /action:\s*['"]([A-Z0-9_]{3,40})['"]/g; + let m; + while ((m = re.exec(text)) !== null) { + matches.push({ src: src.slice(-50), action: m[1] }); + } + const re2 = /\.execute\([^,]+,\s*\{\s*action:\s*['"]([^'"]+)['"]/g; + while ((m = re2.exec(text)) !== null) { + matches.push({ src: src.slice(-50), executeAction: m[1] }); + } + } catch (e) {} + } + return { matches, scriptCount: allScripts.length, scannedCount: scanned.length, scannedSample: scanned.slice(0, 10) }; + }, + }); + sendToAgent({ id: msg.id, result: injected?.result }); + } catch (e) { + sendToAgent({ id: msg.id, result: { error: e.message } }); + } } else if (msg.method === 'get_status') { sendToAgent({ id: msg.id, @@ -470,7 +688,10 @@ const MAX_RPC_TEXT = 32000000; // the project listing alone is past 17 MB async function runBatchRpc(cmd) { const tabs = await chrome.tabs.query({ url: flowUrls }); - let candidate = tabs.find((t) => !t.discarded) || tabs[0]; + let candidate = + tabs.find((t) => t.active && !t.discarded) || + tabs.find((t) => !t.discarded) || + tabs[0]; if (!candidate) { // No Flow tab — open one and give the app a moment to boot, otherwise // WIZ_global_data is not on the page yet and `at` comes back empty. Keep @@ -491,7 +712,7 @@ async function runBatchRpc(cmd) { let freq = cmd.freq; if (cmd.captchaAction) { - const solved = await solveCaptcha(cmd.id, cmd.captchaAction); + const solved = await captchaFromTab(tab.id, cmd.id, cmd.captchaAction); if (!solved?.token) return { error: `CAPTCHA_FAILED: ${solved?.error || 'no token'}` }; freq = freq.split(CAPTCHA_SLOT).join(solved.token); } @@ -499,23 +720,25 @@ async function runBatchRpc(cmd) { const [injected] = await chrome.scripting.executeScript({ target: { tabId: tab.id }, world: 'MAIN', - args: [cmd.rpcid, freq, MAX_RPC_TEXT, cmd.match || null], - func: async (rpcid, freqStr, maxText, match) => { + args: [cmd.rpcid, freq, MAX_RPC_TEXT, cmd.match || null, cmd.customPath || null], + func: async (rpcid, freqStr, maxText, match, customPath) => { const wiz = globalThis.WIZ_global_data || {}; const at = wiz.SNlM0e; const sid = wiz.FdrFJe; const bl = wiz.cfb2h; if (!at) return { error: 'NO_AT_TOKEN' }; + const reqid = Math.floor(Math.random() * 900000) + 100000; // Match Flow's own WIZ metadata. GEM_PIX_2 (Nano Banana Pro) rejects // image generation when source-path is missing even though Lite may not. const sourcePath = location.pathname || '/'; const hl = (document.documentElement.lang || navigator.language || 'en').split('-')[0]; - const url = - `/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=${encodeURIComponent(rpcid)}` + - `&source-path=${encodeURIComponent(sourcePath)}` + - `&bl=${encodeURIComponent(bl || '')}&f.sid=${encodeURIComponent(sid || '')}` + - `&hl=${encodeURIComponent(hl)}&_reqid=${reqid}&rt=c`; + const url = customPath + ? `${customPath}?bl=${encodeURIComponent(bl || '')}&f.sid=${encodeURIComponent(sid || '')}&hl=${encodeURIComponent(hl)}&_reqid=${reqid}&rt=c` + : `/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=${encodeURIComponent(rpcid)}` + + `&source-path=${encodeURIComponent(sourcePath)}` + + `&bl=${encodeURIComponent(bl || '')}&f.sid=${encodeURIComponent(sid || '')}` + + `&hl=${encodeURIComponent(hl)}&_reqid=${reqid}&rt=c`; const resp = await fetch(url, { method: 'POST', credentials: 'include', @@ -530,11 +753,22 @@ async function runBatchRpc(cmd) { // is one entry. Cutting it down here keeps that payload inside the tab // instead of pushing it through the bridge on every poll. if (match) { - const found = text.indexOf(match); // not `at` — that is the CSRF token above + const lowerText = text.toLowerCase(); + const lowerMatch = match.toLowerCase(); + const found = lowerText.indexOf(lowerMatch); + if (found !== -1) { + const start = Math.max(0, found - 400); + const end = Math.min(text.length, found + 800); + return { + status: resp.status, + matched: true, + text: text.slice(start, end), + }; + } return { status: resp.status, - matched: found !== -1, - text: found === -1 ? '' : text.slice(found, found + 800), + matched: false, + text: '', }; } return { status: resp.status, text: text.slice(0, maxText) }; @@ -546,7 +780,7 @@ async function runBatchRpc(cmd) { async function handleBatchRpc(msg) { const { id, params } = msg; - const { rpcid, freq, captchaAction, match } = params || {}; + const { rpcid, freq, captchaAction, match, customPath } = params || {}; if (!rpcid || !freq) { sendToAgent({ id, status: 400, error: 'INVALID_BATCH_RPC' }); return; @@ -567,7 +801,7 @@ async function handleBatchRpc(msg) { } try { - const out = await runBatchRpc({ id, rpcid, freq, captchaAction, match }); + const out = await runBatchRpc({ id, rpcid, freq, captchaAction, match, customPath }); if (out.error) { if (hasCaptcha) { metrics.failedCount++; metrics.lastError = out.error; } if (visible) updateRequestLog(id, { status: 'failed', error: out.error }); @@ -853,6 +1087,7 @@ chrome.runtime.onMessage.addListener((msg, _, reply) => { return true; } + if (msg.type === 'TRPC_MEDIA_URLS') { handleTrpcMediaUrls(msg.trpcUrl, msg.body); reply({ ok: true }); diff --git a/extension/content.js b/extension/content.js index b3ff64d36..85c9427e0 100644 --- a/extension/content.js +++ b/extension/content.js @@ -2,48 +2,52 @@ * Content script — bridge between background.js and injected.js * Injects injected.js into MAIN world to access window.grecaptcha */ -(function () { - const s = document.createElement('script'); - s.src = chrome.runtime.getURL('injected.js'); - s.onload = () => s.remove(); - (document.head || document.documentElement).appendChild(s); -})(); - -chrome.runtime.onMessage.addListener((msg, _, reply) => { - if (msg.type !== 'GET_CAPTCHA') return; - - const { requestId, pageAction } = msg; - - const handler = (e) => { - if (e.detail?.requestId === requestId) { +if (!globalThis.__FLOWKIT_CONTENT_LOADED__) { + globalThis.__FLOWKIT_CONTENT_LOADED__ = true; + + (function () { + const s = document.createElement('script'); + s.src = chrome.runtime.getURL('injected.js'); + s.onload = () => s.remove(); + (document.head || document.documentElement).appendChild(s); + })(); + + chrome.runtime.onMessage.addListener((msg, _, reply) => { + if (msg.type !== 'GET_CAPTCHA') return; + + const { requestId, pageAction } = msg; + + const handler = (e) => { + if (e.detail?.requestId === requestId) { + window.removeEventListener('CAPTCHA_RESULT', handler); + clearTimeout(timer); + reply({ token: e.detail.token, error: e.detail.error }); + } + }; + + const timer = setTimeout(() => { window.removeEventListener('CAPTCHA_RESULT', handler); - clearTimeout(timer); - reply({ token: e.detail.token, error: e.detail.error }); - } - }; - - const timer = setTimeout(() => { - window.removeEventListener('CAPTCHA_RESULT', handler); - reply({ error: 'CONTENT_TIMEOUT' }); - }, 25000); - - window.addEventListener('CAPTCHA_RESULT', handler); - - window.dispatchEvent(new CustomEvent('GET_CAPTCHA', { - detail: { requestId, pageAction }, - })); - - return true; // keep channel open for async reply -}); - -// ─── TRPC Media URL Monitor ───────────────────────────────── -// Forward intercepted TRPC responses with media URLs to background.js -window.addEventListener('TRPC_MEDIA_URLS', (e) => { - const { url, body } = e.detail || {}; - if (!body) return; - chrome.runtime.sendMessage({ - type: 'TRPC_MEDIA_URLS', - trpcUrl: url, - body, - }).catch(() => {}); -}); + reply({ error: 'CONTENT_TIMEOUT' }); + }, 25000); + + window.addEventListener('CAPTCHA_RESULT', handler); + + window.dispatchEvent(new CustomEvent('GET_CAPTCHA', { + detail: { requestId, pageAction }, + })); + + return true; // keep channel open for async reply + }); + + // ─── TRPC Media URL Monitor ───────────────────────────────── + // Forward intercepted TRPC responses with media URLs to background.js + window.addEventListener('TRPC_MEDIA_URLS', (e) => { + const { url, body } = e.detail || {}; + if (!body) return; + chrome.runtime.sendMessage({ + type: 'TRPC_MEDIA_URLS', + trpcUrl: url, + body, + }).catch(() => {}); + }); +} diff --git a/extension/injected.js b/extension/injected.js index a955a5f82..70bc6b98a 100644 --- a/extension/injected.js +++ b/extension/injected.js @@ -1,78 +1,158 @@ /** - * Injected into the page's MAIN world on flow.google.com (and an old pinned - * labs.google tab) — has access to window.grecaptcha. + * Injected into the page's MAIN world on flow.google.com — has access to window.grecaptcha. * - * The reCAPTCHA site key survived the September 2026 migration unchanged. The - * TRPC fetch intercept below did not: it belongs to the labs.google frontend - * and is inert on flow.google.com, where media urls come back inline on the - * generate call and from the media rpc. + * Protects window.grecaptcha.enterprise.execute from Angular's x2a poison wrapper + * which otherwise overrides every extension call with action: "extension_hijack_detected" + * and triggers PUBLIC_ERROR_UNUSUAL_ACTIVITY. */ -const SITE_KEY = '6LdsFiUsAAAAAIjVDZcuLhaHiDn5nnHVXVRQGeMV'; +(function () { + if (window.__FLOWKIT_INJECTED__) return; + window.__FLOWKIT_INJECTED__ = true; -// ─── TRPC Response Monitor ───────────────────────────────── -// Monkey-patch fetch to intercept TRPC responses containing media URLs. -// Fresh signed GCS URLs are extracted and forwarded to the agent. + var SITE_KEY = '6LdsFiUsAAAAAIjVDZcuLhaHiDn5nnHVXVRQGeMV'; -const _originalFetch = window.fetch; -window.fetch = async function (...args) { - const response = await _originalFetch.apply(this, args); - try { - const url = typeof args[0] === 'string' ? args[0] : args[0]?.url || ''; - // Only intercept TRPC calls on labs.google that return project/flow data - if (url.includes('/fx/api/trpc/') && response.ok) { - const clone = response.clone(); - clone.text().then(text => { - if (text.includes('storage.googleapis.com/ai-sandbox-videofx/')) { - window.dispatchEvent(new CustomEvent('TRPC_MEDIA_URLS', { - detail: { url, body: text }, - })); - } - }).catch(() => {}); + // ─── reCAPTCHA Anti-Hijack Protection ─────────────────────── + let _realExecute = null; + + function hookEnterprise(enterprise) { + if (!enterprise || enterprise.__FLOWKIT_HOOKED__) return; + enterprise.__FLOWKIT_HOOKED__ = true; + + if (typeof enterprise.execute === 'function' && !enterprise.execute.toString().includes('extension_hijack_detected')) { + _realExecute = enterprise.execute; + window.__REAL_GRECAPTCHA_EXECUTE__ = _realExecute; } - } catch {} - return response; -}; + let _exec = enterprise.execute; + try { + Object.defineProperty(enterprise, 'execute', { + configurable: true, + enumerable: true, + get() { + return _realExecute || _exec; + }, + set(fn) { + if (fn && fn.toString().includes('extension_hijack_detected')) { + console.warn('[FlowKit] Neutralized extension_hijack_detected attempt in x2a!'); + return; // Discard hijack attempt! + } + if (typeof fn === 'function') { + _realExecute = fn; + _exec = fn; + window.__REAL_GRECAPTCHA_EXECUTE__ = fn; + } + }, + }); + } catch (e) { + console.warn('[FlowKit] Could not define property on enterprise:', e); + } + } -let captchaMintTail = Promise.resolve(); + function watchGrecaptcha() { + let _g = window.grecaptcha; + if (_g?.enterprise) { + hookEnterprise(_g.enterprise); + } -async function mintCaptcha(pageAction) { - const previous = captchaMintTail.catch(() => {}); - let release; - captchaMintTail = new Promise((resolve) => { release = resolve; }); - await previous; - try { - await waitForGrecaptcha(); - return await window.grecaptcha.enterprise.execute(SITE_KEY, { - action: pageAction, - }); - } finally { - release(); + try { + Object.defineProperty(window, 'grecaptcha', { + configurable: true, + enumerable: true, + get() { + return _g; + }, + set(val) { + _g = val; + if (val) { + if (val.enterprise) { + hookEnterprise(val.enterprise); + } else { + let _ent = val.enterprise; + try { + Object.defineProperty(val, 'enterprise', { + configurable: true, + enumerable: true, + get() { return _ent; }, + set(eVal) { + _ent = eVal; + hookEnterprise(eVal); + }, + }); + } catch (_) {} + } + } + }, + }); + } catch (e) { + console.warn('[FlowKit] Could not define property on window.grecaptcha:', e); + } } -} -window.addEventListener('GET_CAPTCHA', async ({ detail }) => { - const { requestId, pageAction } = detail; - try { - const token = await mintCaptcha(pageAction); - window.dispatchEvent(new CustomEvent('CAPTCHA_RESULT', { - detail: { requestId, token }, - })); - } catch (e) { - window.dispatchEvent(new CustomEvent('CAPTCHA_RESULT', { - detail: { requestId, error: e.message }, - })); + watchGrecaptcha(); + + // TRPC fetch intercept — intercepts media URLs from labs.google + const _origFetch = window.fetch; + window.fetch = async function (...args) { + const response = await _origFetch.apply(this, args); + try { + const url = typeof args[0] === 'string' ? args[0] : args[0]?.url || ''; + if (url.includes('/fx/api/trpc/') && response.ok) { + const clone = response.clone(); + clone.text().then((text) => { + if (text.includes('storage.googleapis.com/ai-sandbox-videofx/')) { + window.dispatchEvent(new CustomEvent('TRPC_MEDIA_URLS', { + detail: { url, body: text }, + })); + } + }).catch(() => {}); + } + } catch {} + return response; + }; + + let captchaMintTail = Promise.resolve(); + + async function mintCaptcha(pageAction) { + const previous = captchaMintTail.catch(() => {}); + let release; + captchaMintTail = new Promise((resolve) => { release = resolve; }); + await previous; + try { + await waitForGrecaptcha(); + const exec = _realExecute || window.__REAL_GRECAPTCHA_EXECUTE__ || window.grecaptcha?.enterprise?.execute; + if (!exec) throw new Error('grecaptcha.enterprise.execute not available'); + return await exec.call(window.grecaptcha.enterprise, SITE_KEY, { + action: pageAction, + }); + } finally { + release(); + } } -}); -function waitForGrecaptcha(timeout = 22000) { // it loads lazily; 10s was optimistic - return new Promise((resolve, reject) => { - const start = Date.now(); - const check = () => { - if (window.grecaptcha?.enterprise?.execute) return resolve(); - if (Date.now() - start > timeout) return reject(new Error('grecaptcha not available')); - setTimeout(check, 200); - }; - check(); + window.addEventListener('GET_CAPTCHA', async ({ detail }) => { + const { requestId, pageAction } = detail || {}; + try { + const token = await mintCaptcha(pageAction); + window.dispatchEvent(new CustomEvent('CAPTCHA_RESULT', { + detail: { requestId, token }, + })); + } catch (e) { + window.dispatchEvent(new CustomEvent('CAPTCHA_RESULT', { + detail: { requestId, error: e?.message || String(e) }, + })); + } }); -} + + function waitForGrecaptcha(timeout = 22000) { + return new Promise((resolve, reject) => { + const start = Date.now(); + const check = () => { + const has = _realExecute || window.__REAL_GRECAPTCHA_EXECUTE__ || window.grecaptcha?.enterprise?.execute; + if (has) return resolve(); + if (Date.now() - start > timeout) return reject(new Error('grecaptcha not available')); + setTimeout(check, 200); + }; + check(); + }); + } +})(); diff --git a/requirements.txt b/requirements.txt index c2cd265b7..8173592ef 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,5 @@ pydantic>=2.5.0 aiohttp>=3.9.0 httpx>=0.25.0 anthropic>=0.40.0 +google-api-python-client>=2.100.0 +google-auth-oauthlib>=1.0.0 diff --git a/scratch/captured_netlog.jsonl b/scratch/captured_netlog.jsonl new file mode 100644 index 000000000..857153374 --- /dev/null +++ b/scratch/captured_netlog.jsonl @@ -0,0 +1,321 @@ +{"ts": "2026-09-23T13:16:52.291Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=281899&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:17:05.413Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=826921&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,733647544,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5MPg8cTqBq2xeiEK_4oNLK1jZnsUckrwa1t4j1ZGVfgPOC5hIcFD3EMddxnfrhVFHTv9uKf4EKq3uAEHT2r3B3hY0FOwpbMvBDOHk30qQbz-nactrTEWIFDmBAqlUQ8VZ9m7FSGhHmRbKNNUkB3Y0tHRL1lEZGGkILJ9EgGjB7Y1u9h3O8No1vWM8BrY7J7f0f-rhjn-8UU_QvW3i_rn30cNYqumup-k8rPoOgVQY5pKpZXcQL5pP6YSBkZWL6D965aCcVvOmGKnVMUCV5L-4cS873cdEVm-AcwhDzaeZuYkKgpWjGaJ9V2dodPZlHXhbe47E5C1y8d1Br5Z29pZkyI1H8cQk13FryCsuNwyhEusneAmDIM8ghOzqjTckDRQfAZIAt6lPaHDmrrePCIBrQWXqvChE26Zz-Y7ZrGxeNUn3wnbo3XSss0b1Hdsq5GNv5fLr25AJ-2Jvri0UVd_pAWssJksY6cd-8WWG2msnt39uOtct2FAPA3S9YA5kF7PMZm8QfiaJ00AF3mHIvv-cZHcNSmPtpBY9lZP12RFUcrdcIosyENe37vqI0680oJL-x4VUJqw4MZu1ASdycwa5JLbBt7YC1v400rkFRSZYXUyCXxhCRHrK-fEl3CLDSTWaGPW8jKEo_aLVCQ9rjpKMrVb_SRsftv2SzSylYZpOWHykX4Cydt5daVYCS4c21BFMOpPfLGpN8O4QenFxrEpV67BuR3mQrSKdaNJ0yETRI2uhApjbcXkWEmK75uDolzvk4HvJMRdqbt_x3yqs_8KvB0ASbQcMfiRbahjSXJF0HMBpCMkLVY0bU7PtBVDkbZy7-169vkRZnCoe003-xMR8JPrIiijg-PNe_gEkzVHvwS9eybEjQetRfOal2R-cbnpJe3fWdbd-E8XFqkT-tCTR4R4Fh1FmC1kGVRPFzSq_2dInSlUsReqJEGb9wZoalRD_aa19mJF2FilfEMqJUfEBS_DN32lr25_FjsBqtWShrJQVU8YcO1ai8tnLez8cUZJ-FRRFZa7Uf6gJVFsRQ_cdFi-ZM6i9okJjzbLA-wlQry74ZBPe3SKA1Z3QKeT-t5FLNuIVnMjiE6rMIPhkRw_tdxNRLHQPafbJRDPuiCzmNS5YRczrTMGvcRwPVeok1-lxV-yt8R4oVo-MVnZOSGM9wB8TQ4-YfUdvSh0b34tDrPGumi_9PBL6Gn8-Tweby_WRUzOwmAN62v5AIHOq2lGvn1TpUXy7hc9RPK2O70Xy1umOZgY4qpkyjnL-eVm8r1ZYuMyCQmgS4eFwEHlOBP4ePlI4lPCo1g03i38mDU3XjZjZD0Ub0y96dwZrEikeo-3yBvMJI3KGCHhT28bQPV9GPqd-OL96QMYq5UaGZFbQao7Hqq9Qd_1b7QbV-xqhInNHWv5df7QozHgLZA5ZMtcyLPT6PFTFDAhuzMUDKkuS4T_rZbsaQzKxi7hJzQsMDa1z4ZhtsqsoPRIU2NjZSEWmGUC6HgqFeBEAxtYsOvdQFJMg9mSrjyZzD6IX4aKXIJ-jEBiJSAmDhH2i53sCRmmDAM-f9qOLpccS45LuKT-Y1wtj7I5zRRV09J4tOOoyQpa3Rt7G4g1gezlSkQRejRuE5ds67tUQ2JZyyQnqOszxidxKmFnB6v5q0jvdSgWsejRmUKkJW6dnggt4eeRoejI_5SZelXySVsIxrzWlV_1GO9etcjAsjhOBMyJhhhUWRtMECpfwSHSLBSDtRBO4iVw5p8Gz5Hl8eGgIpELDQlVryq8T1Kc7qWqTrSvJ1cnM8qj6cfuTfc34TFH2q6A2E1mPe6-g9xYYEiv1zp1bofVsmYZQYKZiaRm03LMD2yWSf8-mbGtPi-VZu6oViaYkHfoPq_Sudc96pKriTm7X6fTWhNP0Oqeq-Id5z_hXaHMDJWY8ga8nXybwfTQWEl-qQtHDAtNOqNgW2kGxhHa94Dgg2VRRzOuXJrl82pnuYhGlTRb0w_JXmrcg8RIyWQCVONTstupDngNEV4ylP7gOk9KmumsMbV89roJyju3OclKxIsSNQv1RKjKXbeC6wBw3uAdqiK88xZ7LnuF_czNFJZzOlh2057r2n4nch9qEUz2c2XlKOSDhKoY6p2vdX50viRbDc9BmXCvqKk91G6nyTJU2WYAhAQeVyR9VrHWptruCCXo9KuRfEjTykvmxDN4k8lcOqH21fO5iYrOO7zczBRopPp_fQO7J6N3XFBfZ5QIeJHfOUEjZPOKiGhBO3Q79XYsek3HS7TFsBCSuSUlWnLkVSQhP4f4mWU_ueS5WfAg9Di9yyBgw0-B-ILb-_FBG1yFnbimLeuAFq-zW-_2LFgQRjtJlAJtSgf6y0BvNvZmYtP-1avLnJTjnc8uSADBObmfnUtwkQtqRVuxAjjIGVcNBFHYfLr-zHEmnHQvo4OY7KXKhL-P08cwKDMl9L4Ap7ms4iVLPGSHQRRdeEKGjVBOFbYFVORSMslT-7LvhmR6G58kNhjm_n\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"6D6580CB-4DD9-401F-9529-7E5198D65DA9\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5MPg8cTqBq2xeiEK_4oNLK1jZnsUckrwa1t4j1ZGVfgPOC5hIcFD3EMddxnfrhVFHTv9uKf4EKq3uAEHT2r3B3hY0FOwpbMvBDOHk30qQbz-nactrTEWIFDmBAqlUQ8VZ9m7FSGhHmRbKNNUkB3Y0tHRL1lEZGGkILJ9EgGjB7Y1u9h3O8No1vWM8BrY7J7f0f-rhjn-8UU_QvW3i_rn30cNYqumup-k8rPoOgVQY5pKpZXcQL5pP6YSBkZWL6D965aCcVvOmGKnVMUCV5L-4cS873cdEVm-AcwhDzaeZuYkKgpWjGaJ9V2dodPZlHXhbe47E5C1y8d1Br5Z29pZkyI1H8cQk13FryCsuNwyhEusneAmDIM8ghOzqjTckDRQfAZIAt6lPaHDmrrePCIBrQWXqvChE26Zz-Y7ZrGxeNUn3wnbo3XSss0b1Hdsq5GNv5fLr25AJ-2Jvri0UVd_pAWssJksY6cd-8WWG2msnt39uOtct2FAPA3S9YA5kF7PMZm8QfiaJ00AF3mHIvv-cZHcNSmPtpBY9lZP12RFUcrdcIosyENe37vqI0680oJL-x4VUJqw4MZu1ASdycwa5JLbBt7YC1v400rkFRSZYXUyCXxhCRHrK-fEl3CLDSTWaGPW8jKEo_aLVCQ9rjpKMrVb_SRsftv2SzSylYZpOWHykX4Cydt5daVYCS4c21BFMOpPfLGpN8O4QenFxrEpV67BuR3mQrSKdaNJ0yETRI2uhApjbcXkWEmK75uDolzvk4HvJMRdqbt_x3yqs_8KvB0ASbQcMfiRbahjSXJF0HMBpCMkLVY0bU7PtBVDkbZy7-169vkRZnCoe003-xMR8JPrIiijg-PNe_gEkzVHvwS9eybEjQetRfOal2R-cbnpJe3fWdbd-E8XFqkT-tCTR4R4Fh1FmC1kGVRPFzSq_2dInSlUsReqJEGb9wZoalRD_aa19mJF2FilfEMqJUfEBS_DN32lr25_FjsBqtWShrJQVU8YcO1ai8tnLez8cUZJ-FRRFZa7Uf6gJVFsRQ_cdFi-ZM6i9okJjzbLA-wlQry74ZBPe3SKA1Z3QKeT-t5FLNuIVnMjiE6rMIPhkRw_tdxNRLHQPafbJRDPuiCzmNS5YRczrTMGvcRwPVeok1-lxV-yt8R4oVo-MVnZOSGM9wB8TQ4-YfUdvSh0b34tDrPGumi_9PBL6Gn8-Tweby_WRUzOwmAN62v5AIHOq2lGvn1TpUXy7hc9RPK2O70Xy1umOZgY4qpkyjnL-eVm8r1ZYuMyCQmgS4eFwEHlOBP4ePlI4lPCo1g03i38mDU3XjZjZD0Ub0y96dwZrEikeo-3yBvMJI3KGCHhT28bQPV9GPqd-OL96QMYq5UaGZFbQao7Hqq9Qd_1b7QbV-xqhInNHWv5df7QozHgLZA5ZMtcyLPT6PFTFDAhuzMUDKkuS4T_rZbsaQzKxi7hJzQsMDa1z4ZhtsqsoPRIU2NjZSEWmGUC6HgqFeBEAxtYsOvdQFJMg9mSrjyZzD6IX4aKXIJ-jEBiJSAmDhH2i53sCRmmDAM-f9qOLpccS45LuKT-Y1wtj7I5zRRV09J4tOOoyQpa3Rt7G4g1gezlSkQRejRuE5ds67tUQ2JZyyQnqOszxidxKmFnB6v5q0jvdSgWsejRmUKkJW6dnggt4eeRoejI_5SZelXySVsIxrzWlV_1GO9etcjAsjhOBMyJhhhUWRtMECpfwSHSLBSDtRBO4iVw5p8Gz5Hl8eGgIpELDQlVryq8T1Kc7qWqTrSvJ1cnM8qj6cfuTfc34TFH2q6A2E1mPe6-g9xYYEiv1zp1bofVsmYZQYKZiaRm03LMD2yWSf8-mbGtPi-VZu6oViaYkHfoPq_Sudc96pKriTm7X6fTWhNP0Oqeq-Id5z_hXaHMDJWY8ga8nXybwfTQWEl-qQtHDAtNOqNgW2kGxhHa94Dgg2VRRzOuXJrl82pnuYhGlTRb0w_JXmrcg8RIyWQCVONTstupDngNEV4ylP7gOk9KmumsMbV89roJyju3OclKxIsSNQv1RKjKXbeC6wBw3uAdqiK88xZ7LnuF_czNFJZzOlh2057r2n4nch9qEUz2c2XlKOSDhKoY6p2vdX50viRbDc9BmXCvqKk91G6nyTJU2WYAhAQeVyR9VrHWptruCCXo9KuRfEjTykvmxDN4k8lcOqH21fO5iYrOO7zczBRopPp_fQO7J6N3XFBfZ5QIeJHfOUEjZPOKiGhBO3Q79XYsek3HS7TFsBCSuSUlWnLkVSQhP4f4mWU_ueS5WfAg9Di9yyBgw0-B-ILb-_FBG1yFnbimLeuAFq-zW-_2LFgQRjtJlAJtSgf6y0BvNvZmYtP-1avLnJTjnc8uSADBObmfnUtwkQtqRVuxAjjIGVcNBFHYfLr-zHEmnHQvo4OY7KXKhL-P08cwKDMl9L4Ap7ms4iVLPGSHQRRdeEKGjVBOFbYFVORSMslT-7LvhmR6G58kNhjm_n\\\\\\\",1]],[\\\\\\\"4A4EF8B3-EAC3-4FF1-AE7A-2923B632D862\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:17:15.183Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=476550&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,917825764,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA76aQB53ojOe-o_LQMCZRoiIqrU8TZjvxh2Q27lN_SiVEdlelBacAtAVIoPgEsadlVBWz_P09vRLPpXbirSDzBxwzLlQbaQW77fbzr-Kq9njhXyNd68hFaQrb_YhshCf3MLd6CpPGxXuGFFBe1Ekp1n_RFUkpzjIDQ5_NNvUHJqhTDnMTT2XNwFuTh1B6kKn94s7PjVlA56RMBa-2wZ7rFhxgrKz2xlS58_Ee9-RoqqNZKz67aaCU9vzjHEIFEc8F-jqGj8R2aAdkZk-r7olNXwYyxVlgTTxj-IbWyGrXeA34TsWrnw8af2ia7lqYvJLFc_DLUWhNrZA4dmWcq0Cu_F6Z4y3_8aSkJFPwTzTqTvUO4qvjKUMcCbjzdKHq3sIW4W21c1dJaj6sIAQn3MKNVowP_gTVEhTzovoAMZ7cY0DRzyqkIA_a0rESu2YR8BoyNUVr3rLnnWN7-wZ4-oThPtWDuXi_YUHwd9qe9Aruli1BfUBCwww_kvvd4SnXibcIb50h4RK7SPGnRH3XDtJUPFBxaGVA7hHyPl3lKsI9U7yb290qbTi0F7C-fH8zLd0oJGUFFzei5pnHcGlf9PvjsoVPXpCsc_fMpVX55QAW9SJMiZ0Kev8SqDXlROMmBZOutWq-rqN7MJ0HmOyehf2235A6lckcj05PwuRDFyTpfKKCx8DuS6BiQuqq-JR0HcTAXG2mcQW-Ohpmc_P_cs6CgjPnU1kjuPd2BVg9LryiuZHRDk6DxNaxp5PQRDj2wTbdIOo2RwSAGhv_G22yuEPuxgZjDtWToqbjh_kni8Jp0pT1Thq51Jlwscz7yccrfkfKS0Pm_8JIijCWJSHQunmUkSWME2JlbPs3XJBS-MbIPPibhZGRSR8bwJBvZN4Wah7jTzjdunDr2W4BDb5h0RG3EuKNf96s9UWDFb4aH9W6lKBInQZOW_RvkmmlJnHRxjtuMbeQORbfFMbHVsauIW6ievcF7kfkPZojyVzIlpqKG4mnKJ40B7g9UDF-6jK1oEmiXYMj9pEeFf99vMYiVjDdsHoZE_XWkQ_w0wNd_Q7c7mFEIgsBgF7XhhJTEE7BTMyQtfDmXTOmwOqc6rkD3V04Bw3w6PV3sSf5o_CDmFOeoHo_5wZQ_UYngVvEub6Suh4DdiqW3OD3Wun9gog2gehYUUxgCP7U9sIrliJjei5E7mtzMVFu0NdSgu9g6rw3ac8wb-ll100XcmwU9wBWiwikgcUfMc9GYUn6GycBwpw5NOvCMldj1-yxpP3UWIEFS9_-JZZgqT19xvFbyO-x0YB-rJXjGHtNKaYxiKSzAXEukPJSsiK_JG0Gm_Z6cnDWMeMGkzjTgDzn00qTegwtdfVZlWAa3C1lBETacp4UeUS3WJoiCU3n8KHMoh-soiwnwfZbAPk3bb1gzadVXjxBkC20oXmdIr10znIShenWVObcLE_NigIkhnO_U_NM-asIy2hfwM1oASX3F3AERckZlzJ8RKb-kDFEzJkz6_qkWKclvaXqDzKOgb7BIZzgM6_NiSMOn2EMsWL1NE--KTppRZOPP4pNA9zdqdhLw5AK-nL-yX31T5hCxj_gvLrKbgnJfPOlubBnYwDWbrJ-OD5QC7eYD_SM8m0EmtUwVk-iJm4P1fmxUhBHvRWD45kkNzUWGZ4swziJV1JaTpyCstW5FQabc-igs-07E2LMFqYfGeWmuR254x3JyLWcg-suwztzi8uc-hgGs8lj1SRiqh_wCK2pTHzNHjVI4cnaLHOZKkbrK9GcoJO5AbH_uV9R84gK5VPEbAa_-K8IAJarEO_9urk1QzVcm71ru0t-nHZmdpNFY3Pc5Qc8wLki-oJIa3p_v4N-YkEcz_kT-q1hsO-8XuKUXe9vB8aDZDlBz0BGwPQwYbdcOeXbOqZsZWIb1zciDsMkvk7kuioIGyMbTl9fJ2jbdCuGhYA3F9kAe4ANQ1-d9apCsMrLF-_6-EabGY--BBApatRPLzsVpeCFYb0C7x7TTQgy5UyzGPyv0JtdGO2DLzJBBx_hSHUTlOsFGlIufZXS2SMP2ecYKx7h4ZgboA4MGlEcWl6AwOd2YuqORsDebt52bczBjmLhG0NZ5bfC1xuQgm-EQqN35UVMebwsbsDzWNg8Git2CTa5P95tUlM9l7x0FCay-WQTR25IrHHU_DLQuJVzyFeR2Hc6yJolYiySWJvgpDRGRD0Vhy3UDgdoLzalGA7HcUtBvoXnDZmdqHAUS1xrKyrzpWNl_V4FMaI8Vm76nqYbPdC2GuhJuaUCTTaXnY1HipOdjDwjTFb7iYnHGnqyGPakRo_xouxnDBrHUrTc0q9NM-0SwvQGDzAe6vDaWAtZmDcB0L0v2m00J6S4oUkq_f2XZ23eFDE9jG2NdExhg39Yecl2THSalJivuU452TySe6KYIf7ju6kTFq58J5NAaUVz1YdLxNdOLKZ7Y0k2R9yM8MKb9u6kO49ulERtIKwTmAx5MzVDNi9p89l2R3Iro9uj3Fuq9w1h6hnk3JWkplMyhnh29AYsOmg5OmN34jr-E\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"C7E27561-F11D-4122-B8FD-765EF771C676\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA76aQB53ojOe-o_LQMCZRoiIqrU8TZjvxh2Q27lN_SiVEdlelBacAtAVIoPgEsadlVBWz_P09vRLPpXbirSDzBxwzLlQbaQW77fbzr-Kq9njhXyNd68hFaQrb_YhshCf3MLd6CpPGxXuGFFBe1Ekp1n_RFUkpzjIDQ5_NNvUHJqhTDnMTT2XNwFuTh1B6kKn94s7PjVlA56RMBa-2wZ7rFhxgrKz2xlS58_Ee9-RoqqNZKz67aaCU9vzjHEIFEc8F-jqGj8R2aAdkZk-r7olNXwYyxVlgTTxj-IbWyGrXeA34TsWrnw8af2ia7lqYvJLFc_DLUWhNrZA4dmWcq0Cu_F6Z4y3_8aSkJFPwTzTqTvUO4qvjKUMcCbjzdKHq3sIW4W21c1dJaj6sIAQn3MKNVowP_gTVEhTzovoAMZ7cY0DRzyqkIA_a0rESu2YR8BoyNUVr3rLnnWN7-wZ4-oThPtWDuXi_YUHwd9qe9Aruli1BfUBCwww_kvvd4SnXibcIb50h4RK7SPGnRH3XDtJUPFBxaGVA7hHyPl3lKsI9U7yb290qbTi0F7C-fH8zLd0oJGUFFzei5pnHcGlf9PvjsoVPXpCsc_fMpVX55QAW9SJMiZ0Kev8SqDXlROMmBZOutWq-rqN7MJ0HmOyehf2235A6lckcj05PwuRDFyTpfKKCx8DuS6BiQuqq-JR0HcTAXG2mcQW-Ohpmc_P_cs6CgjPnU1kjuPd2BVg9LryiuZHRDk6DxNaxp5PQRDj2wTbdIOo2RwSAGhv_G22yuEPuxgZjDtWToqbjh_kni8Jp0pT1Thq51Jlwscz7yccrfkfKS0Pm_8JIijCWJSHQunmUkSWME2JlbPs3XJBS-MbIPPibhZGRSR8bwJBvZN4Wah7jTzjdunDr2W4BDb5h0RG3EuKNf96s9UWDFb4aH9W6lKBInQZOW_RvkmmlJnHRxjtuMbeQORbfFMbHVsauIW6ievcF7kfkPZojyVzIlpqKG4mnKJ40B7g9UDF-6jK1oEmiXYMj9pEeFf99vMYiVjDdsHoZE_XWkQ_w0wNd_Q7c7mFEIgsBgF7XhhJTEE7BTMyQtfDmXTOmwOqc6rkD3V04Bw3w6PV3sSf5o_CDmFOeoHo_5wZQ_UYngVvEub6Suh4DdiqW3OD3Wun9gog2gehYUUxgCP7U9sIrliJjei5E7mtzMVFu0NdSgu9g6rw3ac8wb-ll100XcmwU9wBWiwikgcUfMc9GYUn6GycBwpw5NOvCMldj1-yxpP3UWIEFS9_-JZZgqT19xvFbyO-x0YB-rJXjGHtNKaYxiKSzAXEukPJSsiK_JG0Gm_Z6cnDWMeMGkzjTgDzn00qTegwtdfVZlWAa3C1lBETacp4UeUS3WJoiCU3n8KHMoh-soiwnwfZbAPk3bb1gzadVXjxBkC20oXmdIr10znIShenWVObcLE_NigIkhnO_U_NM-asIy2hfwM1oASX3F3AERckZlzJ8RKb-kDFEzJkz6_qkWKclvaXqDzKOgb7BIZzgM6_NiSMOn2EMsWL1NE--KTppRZOPP4pNA9zdqdhLw5AK-nL-yX31T5hCxj_gvLrKbgnJfPOlubBnYwDWbrJ-OD5QC7eYD_SM8m0EmtUwVk-iJm4P1fmxUhBHvRWD45kkNzUWGZ4swziJV1JaTpyCstW5FQabc-igs-07E2LMFqYfGeWmuR254x3JyLWcg-suwztzi8uc-hgGs8lj1SRiqh_wCK2pTHzNHjVI4cnaLHOZKkbrK9GcoJO5AbH_uV9R84gK5VPEbAa_-K8IAJarEO_9urk1QzVcm71ru0t-nHZmdpNFY3Pc5Qc8wLki-oJIa3p_v4N-YkEcz_kT-q1hsO-8XuKUXe9vB8aDZDlBz0BGwPQwYbdcOeXbOqZsZWIb1zciDsMkvk7kuioIGyMbTl9fJ2jbdCuGhYA3F9kAe4ANQ1-d9apCsMrLF-_6-EabGY--BBApatRPLzsVpeCFYb0C7x7TTQgy5UyzGPyv0JtdGO2DLzJBBx_hSHUTlOsFGlIufZXS2SMP2ecYKx7h4ZgboA4MGlEcWl6AwOd2YuqORsDebt52bczBjmLhG0NZ5bfC1xuQgm-EQqN35UVMebwsbsDzWNg8Git2CTa5P95tUlM9l7x0FCay-WQTR25IrHHU_DLQuJVzyFeR2Hc6yJolYiySWJvgpDRGRD0Vhy3UDgdoLzalGA7HcUtBvoXnDZmdqHAUS1xrKyrzpWNl_V4FMaI8Vm76nqYbPdC2GuhJuaUCTTaXnY1HipOdjDwjTFb7iYnHGnqyGPakRo_xouxnDBrHUrTc0q9NM-0SwvQGDzAe6vDaWAtZmDcB0L0v2m00J6S4oUkq_f2XZ23eFDE9jG2NdExhg39Yecl2THSalJivuU452TySe6KYIf7ju6kTFq58J5NAaUVz1YdLxNdOLKZ7Y0k2R9yM8MKb9u6kO49ulERtIKwTmAx5MzVDNi9p89l2R3Iro9uj3Fuq9w1h6hnk3JWkplMyhnh29AYsOmg5OmN34jr-E\\\\\\\",1]],[\\\\\\\"A5383ADE-FF5D-4663-B89E-76B47860C93B\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:17:25.256Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=826897&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,428233453,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7juMDJedBkFrAjm99BywICUddrhD3dUA4cDC272UoX2MEun7J4LoWWGOo9L-2PkDiG5y1geNwk_T7G1PA7hFpR3NxN-gjsgllJl1POoNruDqvd9tu1l38hfQ3IoauYZgefWDM_YFGx1K4BSI-faJXNaCX1JYq9zKxb_dzM7HGrrUYw_gafaLFBGHHjt2GDInTrHPz8EV-_HMipvBt8dSG0gx9zqnWi1CP5PbhQIAB8hQGc9lRg8HvdlEp_KZg1wh-AVAbpX1tKwKdPERDwxqPG6luC2nIwLRGQxYdhGUdj2i21pW5CW2n8MSn77EvWq_vQME7dQmZoEGJVqsR-FE_ZFECgIi2LrTzqT9g5bPOHK66uIuCQcpMSKgPLOCxHh34yN4ualBAb4KvHVp3FZQl0p18qFN214FdT7rZqrpUJRUeiUuEf9HDmPT3-tRN7M3J_51rKyGD-NY3cJtCI96Exh7afLEuHOmqzDocY3dqY3Wm8Kf3UuZwG90Ics6O4_u-2NwWEUAmnqJUYMFASdRIxNJPGXzNdS9nNP0wscoLqbiq29RQDEouNkjwIaA6R0zmzk_f2gjyaRxNpwpxMaRCl9_8eET0RwlmNfWjvsd1rzpJmggJCWFifJyjBDLp-Jq-y8Kho6xYPI2rkmpXx8BsU808FSgzoZS8-pWpVfcv5fSZRi4xbf25NH7zJgItKLIj1KZSQjiyalApyq8Y3dSji0JD15a7am_SiZnchYSadwykFimDUm7FAk8yrkBt_cAHaRc7ZmkeO6IokHCJ6ZgpRUNehlCDSsJQTkwLWk6fMWJ0N-lrQxlCz8DieL4ZG2SNOC6ZuTJXOe5X6XYiv3hz4hCGjxzOSdOtrHkTzpnu8kHPLe6-3n0WsQ8tArv1oDJfJ3_sp3Vk-vXqcCdO6meufp48cgxI4RlMqJn0HxIcay9RkrtHIlcrc-ugRRi_HBYJ4DQFdiA8ahf_1X52OTEzfxw4u9LcdCWm43P2oV4G-eOS6Ej5raIfx65suoePGujXNtSip4qea1JDBZGhNd2wmqCQKdy5A-tBt2eYVpykiAJgLO-MX860RrdJhe7O-tcpLBElnf_R2NrkQyIlKvxxURPCunQp-RQiF4LDRTaojBImvMtS4P1fYiCxdArK-W7YuXyNvQnxoB7MTPqpWx4J-jRMBgdC-pGz6xchbOHST_H3bV9UZsfEUJG9NIwaDVTrc-HqTklIOGzthjG3QjeMEUCRfiO0J3CEK1Q6i7igtVorgmHJkPXrLGJKEG55X-Lsgq0hlgNbtHeGypU0m8mfVBYXoViegrtWeljouz-v0qepaqlgQjsTOUvODCbKW_e7vNP8X1XSfhhc-AKhy5YZmyk6lYY7MP9HH51ZYVZZZIsQP3dTJXZLEAvWFskUz4mOabhAl_zLlF83U34yuhRgplEpiWS-Pk49f9Jk_-vkYpsxx0Vxa8Z1QLZcXWvIN3ceVtJiqFWtwQueXTwkSdsTk3H8jWEkpFXTdRF3Nm30Lfl_qSCDpfX2cvgHZiPhg_IC0ByvBGT7zDuUOCQzPGJjTGAvMdhX57RTfzR6n5GZ62LNkUl2uo6vrjQPdvk5x6KLRR93o2AwbLpubhmWrNozfakXHPinjkKaL7_mRWvkkEeESPpM0W20CDKjEdrGYkHAQMofOf3q6oGoQHfAXTSk1WPWaQeJB7Jz1iiOcYH8IItlUtslba05MI4EcCCBPqmCjCyIvhzpRCxbpII-E72gcAE7y-46euR1i9PIYAD43j6mQv_kakU7mqnp-785YEhOyLukhmliDR_Xr8FwD-OqYNrRKtFOYncozMcX61YhTvb4vvEuxFqoDwf0oLpEA1qQYB-GOp0gIcb0AsX3KcU94oZVL1rEHbfn6oAK-iafHSnx83xfjy6QmhH-Q2-q2M48-CT_TcwYk4trN0KNKdReP_CRqOgVWtui23IcpddaBCQ8qtJbA5WCCC3JyhV7gTLCCMMdytmmbOPnJv1gbnf78kqeC2W_vp1f_hZDBr4D1KhSiQRWMa6GHWQjyki837X60TUStj8Yvx7dl7BCYZ7Qgrs2NQdngJEo1Xe5IerpQsIO_gIxlxPflPSuIPWrYuScGjWWFsyBAenV5mdt5pv4dBi9anJThFHhXlP7uMjDLiIEQjIwpPeFS5IcZEnf7uB0JP1TmkGAwoafHfeMKbhCIrh6jlTFdd8lEKTfAG_5ltY-iqtJPEwL0kXVlvj3NNFopDs1bVLgC3qenJi5QP6oMWefAyKWQO96Bn5c_x-YuA87TJah2kdSlz_mtLDJ-ZioyZlh-ay8_KM74rkNKBm2GOH5ZxDWVRFYJesr7O4kzMETjcpivKjrkYOIuK2fpKoBEMMMsNBmUp---oG6Va-xMB-_rXLp8jVnEM6HPox3_of0NHWQ8UexMN9LW_i7FFUyKxw5IFBWkplGt4eCYNgTGHw3YMuPt1ZMq_26JIAgZtignLF316Dnf9EZ_3klfMFT16ZcE\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"F1AE9119-44D8-4E6D-83FC-5794E0C43193\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7juMDJedBkFrAjm99BywICUddrhD3dUA4cDC272UoX2MEun7J4LoWWGOo9L-2PkDiG5y1geNwk_T7G1PA7hFpR3NxN-gjsgllJl1POoNruDqvd9tu1l38hfQ3IoauYZgefWDM_YFGx1K4BSI-faJXNaCX1JYq9zKxb_dzM7HGrrUYw_gafaLFBGHHjt2GDInTrHPz8EV-_HMipvBt8dSG0gx9zqnWi1CP5PbhQIAB8hQGc9lRg8HvdlEp_KZg1wh-AVAbpX1tKwKdPERDwxqPG6luC2nIwLRGQxYdhGUdj2i21pW5CW2n8MSn77EvWq_vQME7dQmZoEGJVqsR-FE_ZFECgIi2LrTzqT9g5bPOHK66uIuCQcpMSKgPLOCxHh34yN4ualBAb4KvHVp3FZQl0p18qFN214FdT7rZqrpUJRUeiUuEf9HDmPT3-tRN7M3J_51rKyGD-NY3cJtCI96Exh7afLEuHOmqzDocY3dqY3Wm8Kf3UuZwG90Ics6O4_u-2NwWEUAmnqJUYMFASdRIxNJPGXzNdS9nNP0wscoLqbiq29RQDEouNkjwIaA6R0zmzk_f2gjyaRxNpwpxMaRCl9_8eET0RwlmNfWjvsd1rzpJmggJCWFifJyjBDLp-Jq-y8Kho6xYPI2rkmpXx8BsU808FSgzoZS8-pWpVfcv5fSZRi4xbf25NH7zJgItKLIj1KZSQjiyalApyq8Y3dSji0JD15a7am_SiZnchYSadwykFimDUm7FAk8yrkBt_cAHaRc7ZmkeO6IokHCJ6ZgpRUNehlCDSsJQTkwLWk6fMWJ0N-lrQxlCz8DieL4ZG2SNOC6ZuTJXOe5X6XYiv3hz4hCGjxzOSdOtrHkTzpnu8kHPLe6-3n0WsQ8tArv1oDJfJ3_sp3Vk-vXqcCdO6meufp48cgxI4RlMqJn0HxIcay9RkrtHIlcrc-ugRRi_HBYJ4DQFdiA8ahf_1X52OTEzfxw4u9LcdCWm43P2oV4G-eOS6Ej5raIfx65suoePGujXNtSip4qea1JDBZGhNd2wmqCQKdy5A-tBt2eYVpykiAJgLO-MX860RrdJhe7O-tcpLBElnf_R2NrkQyIlKvxxURPCunQp-RQiF4LDRTaojBImvMtS4P1fYiCxdArK-W7YuXyNvQnxoB7MTPqpWx4J-jRMBgdC-pGz6xchbOHST_H3bV9UZsfEUJG9NIwaDVTrc-HqTklIOGzthjG3QjeMEUCRfiO0J3CEK1Q6i7igtVorgmHJkPXrLGJKEG55X-Lsgq0hlgNbtHeGypU0m8mfVBYXoViegrtWeljouz-v0qepaqlgQjsTOUvODCbKW_e7vNP8X1XSfhhc-AKhy5YZmyk6lYY7MP9HH51ZYVZZZIsQP3dTJXZLEAvWFskUz4mOabhAl_zLlF83U34yuhRgplEpiWS-Pk49f9Jk_-vkYpsxx0Vxa8Z1QLZcXWvIN3ceVtJiqFWtwQueXTwkSdsTk3H8jWEkpFXTdRF3Nm30Lfl_qSCDpfX2cvgHZiPhg_IC0ByvBGT7zDuUOCQzPGJjTGAvMdhX57RTfzR6n5GZ62LNkUl2uo6vrjQPdvk5x6KLRR93o2AwbLpubhmWrNozfakXHPinjkKaL7_mRWvkkEeESPpM0W20CDKjEdrGYkHAQMofOf3q6oGoQHfAXTSk1WPWaQeJB7Jz1iiOcYH8IItlUtslba05MI4EcCCBPqmCjCyIvhzpRCxbpII-E72gcAE7y-46euR1i9PIYAD43j6mQv_kakU7mqnp-785YEhOyLukhmliDR_Xr8FwD-OqYNrRKtFOYncozMcX61YhTvb4vvEuxFqoDwf0oLpEA1qQYB-GOp0gIcb0AsX3KcU94oZVL1rEHbfn6oAK-iafHSnx83xfjy6QmhH-Q2-q2M48-CT_TcwYk4trN0KNKdReP_CRqOgVWtui23IcpddaBCQ8qtJbA5WCCC3JyhV7gTLCCMMdytmmbOPnJv1gbnf78kqeC2W_vp1f_hZDBr4D1KhSiQRWMa6GHWQjyki837X60TUStj8Yvx7dl7BCYZ7Qgrs2NQdngJEo1Xe5IerpQsIO_gIxlxPflPSuIPWrYuScGjWWFsyBAenV5mdt5pv4dBi9anJThFHhXlP7uMjDLiIEQjIwpPeFS5IcZEnf7uB0JP1TmkGAwoafHfeMKbhCIrh6jlTFdd8lEKTfAG_5ltY-iqtJPEwL0kXVlvj3NNFopDs1bVLgC3qenJi5QP6oMWefAyKWQO96Bn5c_x-YuA87TJah2kdSlz_mtLDJ-ZioyZlh-ay8_KM74rkNKBm2GOH5ZxDWVRFYJesr7O4kzMETjcpivKjrkYOIuK2fpKoBEMMMsNBmUp---oG6Va-xMB-_rXLp8jVnEM6HPox3_of0NHWQ8UexMN9LW_i7FFUyKxw5IFBWkplGt4eCYNgTGHw3YMuPt1ZMq_26JIAgZtignLF316Dnf9EZ_3klfMFT16ZcE\\\\\\\",1]],[\\\\\\\"4F647F02-FB7B-4661-A489-7338462DFA51\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:17:35.218Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=980255&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,380355409,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6uklvA4YGEfilf_ULcyT0JE-cwBF3CF-THDEXJeLC97nc6KvZ4U9hxTRyulhs_9au6UiDnKfd-eGWR9e-wmub_l1Le-7_h0rt65vPnTXT1jb1I_7jq8UgaKeh8Id9jqy4OEgCvHJFOG480wk4oDycUke_Atype__E61SmdtFhBOdIhx3XMaRhwiNx1MiSy4WicTZdAZA8hDN5Y06hUraRGHtiK63MtAdtJcmyBUcIIzlZgqQ8d8QkuHFr_Qof-g7Yj7QZP_iM9mlqcemSpWWBb7EsEt1kNNtnHey07y_6lwKXH8-gQouzzu-NCF2o-4CCZmdKwCUDy8y8CKrk3wUGZpPt57NLVoueUlQOUWqkwXwMJ-QZCs-IaNeYIjDWqVoBhyb59lfpJ_j6R3mZE3a7ckn261u3_Hyyn6K1McnLRSV5Yd8WHfoDu2yx0gux_Euc-B7XlJixgxxywW6y4OQG8kUblL__Ez4T_jJ8cKaDE7txkduRLZ7XYUl0Hxk8VnGv0kR2zUhnw0EJqKMxAyfTvF_EDf7ijCS4SrZMuWxidG8cj1yJEDpxGZGtB9AAp3_UuTns1F2G2kmuC1YGF9Ou8bKY3KtpwdJU7eE2lusOHJ_fkUGkHyDP0OOKSbgRszytmfn-ctEPsYpewDQh_9ZT1ONrKqIgG2yYxgQIb2expvFhd1EXlCzmJurUQ-VJi_2fSyawx0QoPr7hA0Ip29C8_fZu3w2mzd10IH78SwGgstkbJCZ9aXweej9sv0s_ndMF7UpudIWjPXne6zCbu_XersIuAuKxiYMtyZcRSxZX70aE_ivDWdHjlkTJLOAvZv1PyJ6RPMT0CTuFArVinBj0lDvqp9vPgkOQSeB2c2J1HjQ_Sm6uvmws61OpNJBN9dSXLmOjlPw-UYcKAN-m5NxxKkM0Dhf6oAGMLDcV8ZhHFP0dvHnnuKDhqXh1JmUyrLw-6AvY2ghkePD3fuPxtKvVOk8uLOEc-HZ76ZcLwlrSsQQsJetguHjl6TTHTs0KF2mg1COuUwFf5mKDwXTaJTDvMgD5WR9axcAs4L05zekNecdRMm0u9_5QPb-N_qOaoxBnf0697YU-2AxftNHdvoP2Db1h5xHP6FuvuqTqXjUwDXhdNDeKvz5XW2dNCXaeTw_tkr_i10lQ2VfLgSZPfRMbwXAZOe7iOEGOCzijn1etW8Z5cHD9MBRv_w1dciX0dptz1isrLdqHKl8PQ0UMYHE8EUJ1eHW7QNtCNZeJ3J51GazmTo69XpNfUb2RE8fS8dwXeQgkm9kVMh7Gi8CAYzH0RmjoNvLDSfEzCpulResh-kgiKOFqenTjw9xn8fcTerFMlViUYlknrfpUjDjR6reGyLBhYhDx1p8sw6cybd5Z7FrVf4XR3Ii6jyV-RZacoP9Hd5qsY4jpjGwY7ePuUJwlQlVrHMRspug0wI_04Hh8Doqk-i0DVJOmnDlWdCc2cQXFwYxQ09ErME0oT6i2TCEH931_NZm9k_mYQG4WN3e3ZKg99MIeJGSiojbMMrpl9FfLzea6QL2ILKIXu9a0Szw9vk3oiNxfbABGvgmZDjFvQeOvWzIDFPpCRZT1JlVZAzq2KlRGq2vVyPPiUE7AX9Xy_CzEd3vJPUw2SM3C6saGpX5LqnKLRB_BSz-nmmwnHgVgq_hK7v0lCuTJWJU1W80no3cg5H4od0aZm6g7Dxlm7D_0gdpLUD7kc5bwruwcNlAGFMjpK5TFpmHKXOm_Hjb16T-5p3u31hCeNZh0v9Imhs1s0x1fJ3nVWsoUZ1xqqvFaL6xiLH1KKq3XWeJ7C-6TtWGNZZyaQqEc0Ur-lp2ppyhXC2KFIj6C5gRSY35Dlq3zKQ0O4tumidTDUSngQmaDm4VvrJLr9i_OHCNC7Jaw10zBhpaN9vWJN1v6cm81SSzjXRZuwTMtZhEw4qblW3VM40PO0Y5Xoy6f0Tv7VwudbQDXKSQiufUI_rXiM2eA0eZ1JCvEPozZGFbK914EUFvVvFexLx9-IyZHY3vCURnrOwWSWHglnIfwdIWFd7MtcBWQpu1tcYM52Gh_E9YPbhyteOyYSY-otLoww5seyiqR0QeCZ6z56BX5mpksZySsPbu2my-kE31IiiNfuhCRNU_xEwWHcdzhO_tbwH0X2MS9OV6gihilsYqeu535wInAHHDWpy2YWpiNh2virDNK8zufUWNto2HTXmuCbx71eNUybtLWTGihGFOxY2RgJBJZX9P0MFLQIFRdfw3JNP2LIgBWsEDehu320Lk4o5hj7FxwiFl1CC47QBltdFTJO90ciMRwc5xXq8fKgjblSyQKFfz9nA-HmXzqKr7MdCVHAf-b-9cCdz6_kC7QylFjdQPMoHpDIqN-kyRe_ukPM8uEoanHBe8la4FZ8oHd6f8mT5Q99il_D20l2-Im_zmfolI06HIyvKRFCuIp4B4enlTAfc8k7koUoa6qsCgOxRvx_rrrCjZ6wpfYlPf7y6CA8Aj4jZ8FengMg\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"23395401-5443-492C-A5D4-E891AD4BB9AA\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6uklvA4YGEfilf_ULcyT0JE-cwBF3CF-THDEXJeLC97nc6KvZ4U9hxTRyulhs_9au6UiDnKfd-eGWR9e-wmub_l1Le-7_h0rt65vPnTXT1jb1I_7jq8UgaKeh8Id9jqy4OEgCvHJFOG480wk4oDycUke_Atype__E61SmdtFhBOdIhx3XMaRhwiNx1MiSy4WicTZdAZA8hDN5Y06hUraRGHtiK63MtAdtJcmyBUcIIzlZgqQ8d8QkuHFr_Qof-g7Yj7QZP_iM9mlqcemSpWWBb7EsEt1kNNtnHey07y_6lwKXH8-gQouzzu-NCF2o-4CCZmdKwCUDy8y8CKrk3wUGZpPt57NLVoueUlQOUWqkwXwMJ-QZCs-IaNeYIjDWqVoBhyb59lfpJ_j6R3mZE3a7ckn261u3_Hyyn6K1McnLRSV5Yd8WHfoDu2yx0gux_Euc-B7XlJixgxxywW6y4OQG8kUblL__Ez4T_jJ8cKaDE7txkduRLZ7XYUl0Hxk8VnGv0kR2zUhnw0EJqKMxAyfTvF_EDf7ijCS4SrZMuWxidG8cj1yJEDpxGZGtB9AAp3_UuTns1F2G2kmuC1YGF9Ou8bKY3KtpwdJU7eE2lusOHJ_fkUGkHyDP0OOKSbgRszytmfn-ctEPsYpewDQh_9ZT1ONrKqIgG2yYxgQIb2expvFhd1EXlCzmJurUQ-VJi_2fSyawx0QoPr7hA0Ip29C8_fZu3w2mzd10IH78SwGgstkbJCZ9aXweej9sv0s_ndMF7UpudIWjPXne6zCbu_XersIuAuKxiYMtyZcRSxZX70aE_ivDWdHjlkTJLOAvZv1PyJ6RPMT0CTuFArVinBj0lDvqp9vPgkOQSeB2c2J1HjQ_Sm6uvmws61OpNJBN9dSXLmOjlPw-UYcKAN-m5NxxKkM0Dhf6oAGMLDcV8ZhHFP0dvHnnuKDhqXh1JmUyrLw-6AvY2ghkePD3fuPxtKvVOk8uLOEc-HZ76ZcLwlrSsQQsJetguHjl6TTHTs0KF2mg1COuUwFf5mKDwXTaJTDvMgD5WR9axcAs4L05zekNecdRMm0u9_5QPb-N_qOaoxBnf0697YU-2AxftNHdvoP2Db1h5xHP6FuvuqTqXjUwDXhdNDeKvz5XW2dNCXaeTw_tkr_i10lQ2VfLgSZPfRMbwXAZOe7iOEGOCzijn1etW8Z5cHD9MBRv_w1dciX0dptz1isrLdqHKl8PQ0UMYHE8EUJ1eHW7QNtCNZeJ3J51GazmTo69XpNfUb2RE8fS8dwXeQgkm9kVMh7Gi8CAYzH0RmjoNvLDSfEzCpulResh-kgiKOFqenTjw9xn8fcTerFMlViUYlknrfpUjDjR6reGyLBhYhDx1p8sw6cybd5Z7FrVf4XR3Ii6jyV-RZacoP9Hd5qsY4jpjGwY7ePuUJwlQlVrHMRspug0wI_04Hh8Doqk-i0DVJOmnDlWdCc2cQXFwYxQ09ErME0oT6i2TCEH931_NZm9k_mYQG4WN3e3ZKg99MIeJGSiojbMMrpl9FfLzea6QL2ILKIXu9a0Szw9vk3oiNxfbABGvgmZDjFvQeOvWzIDFPpCRZT1JlVZAzq2KlRGq2vVyPPiUE7AX9Xy_CzEd3vJPUw2SM3C6saGpX5LqnKLRB_BSz-nmmwnHgVgq_hK7v0lCuTJWJU1W80no3cg5H4od0aZm6g7Dxlm7D_0gdpLUD7kc5bwruwcNlAGFMjpK5TFpmHKXOm_Hjb16T-5p3u31hCeNZh0v9Imhs1s0x1fJ3nVWsoUZ1xqqvFaL6xiLH1KKq3XWeJ7C-6TtWGNZZyaQqEc0Ur-lp2ppyhXC2KFIj6C5gRSY35Dlq3zKQ0O4tumidTDUSngQmaDm4VvrJLr9i_OHCNC7Jaw10zBhpaN9vWJN1v6cm81SSzjXRZuwTMtZhEw4qblW3VM40PO0Y5Xoy6f0Tv7VwudbQDXKSQiufUI_rXiM2eA0eZ1JCvEPozZGFbK914EUFvVvFexLx9-IyZHY3vCURnrOwWSWHglnIfwdIWFd7MtcBWQpu1tcYM52Gh_E9YPbhyteOyYSY-otLoww5seyiqR0QeCZ6z56BX5mpksZySsPbu2my-kE31IiiNfuhCRNU_xEwWHcdzhO_tbwH0X2MS9OV6gihilsYqeu535wInAHHDWpy2YWpiNh2virDNK8zufUWNto2HTXmuCbx71eNUybtLWTGihGFOxY2RgJBJZX9P0MFLQIFRdfw3JNP2LIgBWsEDehu320Lk4o5hj7FxwiFl1CC47QBltdFTJO90ciMRwc5xXq8fKgjblSyQKFfz9nA-HmXzqKr7MdCVHAf-b-9cCdz6_kC7QylFjdQPMoHpDIqN-kyRe_ukPM8uEoanHBe8la4FZ8oHd6f8mT5Q99il_D20l2-Im_zmfolI06HIyvKRFCuIp4B4enlTAfc8k7koUoa6qsCgOxRvx_rrrCjZ6wpfYlPf7y6CA8Aj4jZ8FengMg\\\\\\\",1]],[\\\\\\\"605BD248-8FC6-463A-AFFF-62DCCBD536B0\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:17:45.230Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=649598&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"BCCCC76F-5DAD-4108-BDBF-A573659D5F11\\\\\\\",\\\\\\\"65E09B71-65B9-4329-8CCB-C4B22874B537\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA59Vfjg1Okyx5NOcJRNVQWXxrtlYvxFe7IhMdB1cHcku6NUx3v2qKsV5nt6IDot-c4eNZOGaIcfz-9QIw3iYJswPbppYF8JSnXZM7utSR0syCXcN48EAAtM21XEbA3y2I_8p1sxCzZ41dDAhYVLMBiIkVe2UFUpifx8BJgHpuLYugoN_X5AZPE4pe3SE9947DLjeCmv3Aq9bgveYHRcDQHfuFWnMRktXgcZvgE9wGliytW8kN8nvZU8_Qb3KXkysAGUQHbpPZkBBxjXv0c3pk_5DYbvfg-Ux-idF8D5j3RTrGbN88vD05VifmLHWeGOXuTje1zF5vpK1bzPjwfFsGda5TVyXzr5fSKQ1igIt-W240D2uYg9Y4HRUDui8DK4CU5P8sjlRuhxDUAjePkRR_DwJNTp7CIDPyTDeyrR6iI6GmTqhUjwnnL7rz8PCguVJr3nYEV4m1fkTAHQ3GJ9nFPELeh5PFJ2IEuqydhB23sqctxVw85t2KPU_lhM7yqKw98kQL0TPU8KEDUjcXYrC6_YX004fUJl29yWLBD1SKq0HPKrcx0o5-XsYyelThUhQA_kAOZ_O9ek8BqgwYT9e4xQ-aeEmxTghlXYVObhOx56vEhbCptdr8YvxcVdZDIe49Jl5Ko-nlbbityy-ciVOQM32UvY8bQ7xMR2TxKT1EqCA9y35LkT606x36uZcxt06pRE7BV6m18cOdDHP7RFQR7UuDhJ0D2e4Hq9V409H1bFxktlsLx9qthaVF1mCthTywXX3pgUiZoNMaLJh02OlLrVDX_-i0xRgSPraY99u4reqppao02mBnlgi0Z2_ItJHig9h7tImA-xQ_dajnKHpRRoc5KUymX2xz7SbOvotWYusKUPsEF3luKTzAY1T80JyQlZuVC4hcCxzKhpOHB0uV8-TChwSf9GJhIxGmHbK-JGU0PEYwWOiTCOv5NRljcOnNuDXPB8Zac3k9aSBTIXjzZedUKGsJ8u7BTQhSfWBzfPRfFw8q1DxYjCqX3uYMkj6uv2w93DFCGm7iKVPk0xkVKBPA_gkkBYxK7jcZdqV-c10IgtkF2zWhr5fotOHdDAXmqqcGCKX6UjvajtaMI__FNE85_I887W-DENQkLLWcRjRJoHQJ2S3Bp1U39iCEYoO88pdPetn6SSnBB3dGtTO28UrUwTRQx7DrHUy5aIKF2sDFOKg2Y5PDKYNc7THfJ-urbs_bbAZbkjalOgcCwbaew7gcxkJc_oJ0jfBXzZLb_Sv6Hx6LjEwpe6uNOCjxtL0kDPV9GrHb7enGfPoonQTnCa2S1lUPHPxhZCvP5Z7SutG-bELKYGk_T_vEGbDSRD5sOeg2uvwxvVeV2qECBfzF6Jqt1bgIT3BFABdb7Q_P1nR0Yr1YrGHQLc1sxTZRP0W4IGWHf8L-5BAhGAX-U4nsIHvgZFdhIwCrgLg80ZxVSmjVIJzr6Kmji8Ms_siGU3GkgihU98OA2qjeyZtqo4G5QQyXmzDG3reVkeSnYyndkWGteTzBxWzjlAylq3vJwVqQwxfhCAZxWU7rnolfdZd4tYbjzw8lSBX8UfVNrxayTBLzHY_8yY-q8heyiyP6VB3fuMMM_db1rjWwkFVDgA88ulFLAcuGME97YErKDvV31eBwaEzHNGKwQYU-P7FJ8pwgqDNSMejaH8xO4uLIp8mhsVFleEkBOU5WwibKaHsZNSDxyeLGelxnyNPBZqnuugKUcBpusWqe-3IDca8pFYIocvTSQ4JrZS_QYHcUM6Nl5yeFMtSXTOcp8FPrV5sHkBgxgyf6_H4enQGnCtx-smL9cJcdJGH9ILb4d-FZNUahg1zbhJmYJuiOj4m4lIdUkNSe243d7rg2r3EY1JysJwklzhrVn6-zZ8CZWtLoBHBBvDBm14z394g-yE3pacDTYv-CeeFzEYUoQiixeCzJLHhGtzMQh50EmYwNGNMsS7VLa3K6sEFb4T2eTnhaobAI__U9nFzsXzCq89GwvpWsapodc-GScrWwEho_ajwkSiJ-FRgfghvOWye4SZXojr0lqiFaCpDSheoIG8Y-ZVws4I9uyAwPK9J1z4LqvDt1p_4b4hFLj7azP_f8fxWkRmxaax2HL2FSrQg_PUmYjmzymRThIXR0eY5DUk4xoBG92HVBELISiRjhBkct3fzMssM-DXhA00ZgvgDjD-O-8Wsy3ifkpFG4bYU6hnLQV-UkY0vTB8bdATAXDJ68coUxcmbO-Os4rI6_WRjLwYRe5qw0QurbrthW527Qn_hdTQIlJNl0j4klXiOk272Ih9PlRFncn_KSQmZuB3RZyVRY_oRzNbJDadkK0wl_WALpoeUKAxMyNsejb4dOQAB9u2Rt8rUhc-sWUvJ-QBVyhHm9hfWh2gy4CAsONQQ07NpbIfPS5cBwvDhQOceAHHQgZaL8UAzTEuXi3IO7LyieijHEelS9rtUXw6HTdUNQNdZ4r8cQuhUDfn2StIm9tjKSggBq2_9fepiRyncM4B\\\\\\\",1]],[\\\\\\\"87416079-1A82-44CC-B790-47AEE97C2A27\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:17:55.238Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=973374&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,65089712,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA54UNLpEh3wEebfBZxNXKQ2AWUqrf88vilj0mVClw6TW3wncrui9-gLshOKj48UtsNgkLtOxEvWCGz1vCzfUvY05F8C_bbRTRo8Ih5TO60YNWDvUjH9QkvMViIbH3A3u1X24eSxjhTH1DvqeZgh7h4OKHxhXQ7rGsdWVqhFbowafddkw7t79a_Syq7ZuFu7DCKU49mG5Fias-j5qHzPvMmXJA-9yMOWvcYlY4Udh6Z2pwm2l_NjKRCOJ0R1qAmrds4achC26MBTMECyT3WD4T0mjPCylNegXsQZdLRjgIXSGnwHZUttVdMGazRnpHTLpj4E-OuiU9-N1uzcx9a8X7lPL4w4z5REyG36kM1SF8LTtaM2OjeU7VcsAx58Ro4Aqu-juOSH4MbXNI1_r10SCC4zYyAgYU7M7YrmlqzoE7GfGBd5X5ARliuR6KqyQWir3gkX7SOz_Yshlp8qI2rUqgZeia0XC0jGOlAFeV-tIhlTT9L7wy9KfhRG0YKFuI4tllb3KoBeIh3T41EjLQZHcM6VOC8Xl9pLlMM5zv3KuI75HHLFvosIHnML0Slap-jk3uRRdrAV-nEIiOcLxTT8txi0pBJr6pu0TkguL5wB-XiPUM4585CL_FT-H9Cg_He_y6EdmB2Zoai9mlPG0sjUXnDT3JvB6Hv8TTKlDMryyacseODTAEyVIQaCKljt06H1MiMGpbB_uu2r1mGpp5Kl4whYjI_SvDtA-vQb9lMXwCC2ik1kwpuISJ624FQKqLL-ex7xQ1fxU0x4ObxFQHuljiOWQb25FfBbwRplqISUX8WJoXG4kfI8bmSRwRInunbyPFn2vl-OsKCJlzq_XPzooXTgyw8gPpT3YlvXdTJjLdTrpLVgtoOIjDmfFoE9TG1p3iYvHgw0il01btuKqfARa-5Lm8SLnkDbVXk2TOsc085jTPraXBAeN24ZD67mhQMsjux90D4wT2I8WrvICtRlwXwtqDI-yN8nuyQmVwc3pJO1_jvIQ670b1MvAgPf6qs9_Vd0wIn9q9bYr-3RY40pscapP6-jZ8GydKpH9nnOk3Bp97WW8nQYTdct-ql9kYuGLBXtwA8AIUNGzL8LU3ymj7AIAhVD4RXVLYJFLnmAgJGLASC5wSSX_nILFAa3G_FKAozmHm0BgEv-jSADpYpOH5AgIzCjsgAX6P26S-gaVnQRxoFZYyLQPzl0IqH8Lr4nbV4QCgFL69FcFmz8QfsCqzWQVdSR3gEKsvp3VoK7pHgSRVFjRcEV2GtaDkQRh_Lf8xuxbjb-Zsk-qg3GsQiZk2JA-VLD4wPkoQvfvdQnyD9icSp3UbawYo_kGuRBmbhGgkZnTPHu4AdIXJwG-DhsjZnss2OdqZwF_bxH9IM7_9OmweUsnYeOoZVoennPIOB3RJgNs2G4IxeOWTa6d9Ymnsv2u89097ShD00YK_pWQO2beD8w94woE-GsFK3juI12_X59gRPHUSMBorx6FqRJrPxLyxPhcW8B5IK1vjWCo3WRxz5LqK0eLQeFtvC8PBOEvUAoW8pvLx3-4Ru9-JgJCXSpuDqaps_VcllA0Fg93fGXP-t_nVDd8hc-fhiAbUfPJN4ZO3prfDuRsp6TWGYoMrsL8iozg8HGng4S83jKcKT7wRLdIoGSpyZPBzQMdzdDxmNVa_5XLh-9GCYnObpvVmaglScClzOdcxVe66g2vGMKNr3EamfgdjCTlkRCyVao2W60vhN91Xz6px-TzaICotojd9i2p0jlMwi2MSQm8-GnULvwhXv3z9J92PiVr7NqDMBMOKTs3mj6AFXkKvGfUUgqNlxixyB1iputyYOZb5VFWmN9vtwjMm-qml182WzkA0FmyRTudl3DzJMomHjvFI5Ng1JWn17q1Ubf33YbjCT8gU3F_3lvWCxT4VLqGjFZzY8HUjyBMG85QmIxusdRZh5OORuZW5_n0gK9RE6qk-3ViCX6c2ZmM6Nb78XXo4YVdqqbT3phyIVeNE1yTDLdOUHYxS4Y2r4VtpAWXfenufVZ8TuV5Q8PGV3LGjbnSblEgWeBhAZSRR5YwJaFtHn4ACocVuF6kdWMavawEyk9DgDvQNhx8u4AXIYkbrLwJ3xadRawdPR7gYLm8o98aNyLG0xxRSORAwDLP1dLU8w3buDQ0_kcFf0Sx5FZzJsT-gE286quLlAibKZGsdvsWwgvXWjsSajjGd8N0myAJ6hxaYGRIFYdDsGUzxOIepGf2jh1h5RlFUhOViXeR3YkUfOrp-IA-c17HVAOXLGcNv-cpQqgfLNex6qGcNGJqiYFuPh21FMkMJkhNT7Ch85DZKFpDCAGFlJH1q0hoovjscUTk50B6im4mGHVeiYE9w3EXZryNbh4WapqLYI2YHfe2wCJEobwXN4lSfAX8ByyUk-igewZB5gcSu2FSS-375-HXGAMFZc4o53HHkB182nXfjfgLwRhAA2sxh7x6LUkn_2_gKM9xQd0pos\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"22BB1624-4E6B-4E41-A1C7-B6C0DCE9E5B8\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA54UNLpEh3wEebfBZxNXKQ2AWUqrf88vilj0mVClw6TW3wncrui9-gLshOKj48UtsNgkLtOxEvWCGz1vCzfUvY05F8C_bbRTRo8Ih5TO60YNWDvUjH9QkvMViIbH3A3u1X24eSxjhTH1DvqeZgh7h4OKHxhXQ7rGsdWVqhFbowafddkw7t79a_Syq7ZuFu7DCKU49mG5Fias-j5qHzPvMmXJA-9yMOWvcYlY4Udh6Z2pwm2l_NjKRCOJ0R1qAmrds4achC26MBTMECyT3WD4T0mjPCylNegXsQZdLRjgIXSGnwHZUttVdMGazRnpHTLpj4E-OuiU9-N1uzcx9a8X7lPL4w4z5REyG36kM1SF8LTtaM2OjeU7VcsAx58Ro4Aqu-juOSH4MbXNI1_r10SCC4zYyAgYU7M7YrmlqzoE7GfGBd5X5ARliuR6KqyQWir3gkX7SOz_Yshlp8qI2rUqgZeia0XC0jGOlAFeV-tIhlTT9L7wy9KfhRG0YKFuI4tllb3KoBeIh3T41EjLQZHcM6VOC8Xl9pLlMM5zv3KuI75HHLFvosIHnML0Slap-jk3uRRdrAV-nEIiOcLxTT8txi0pBJr6pu0TkguL5wB-XiPUM4585CL_FT-H9Cg_He_y6EdmB2Zoai9mlPG0sjUXnDT3JvB6Hv8TTKlDMryyacseODTAEyVIQaCKljt06H1MiMGpbB_uu2r1mGpp5Kl4whYjI_SvDtA-vQb9lMXwCC2ik1kwpuISJ624FQKqLL-ex7xQ1fxU0x4ObxFQHuljiOWQb25FfBbwRplqISUX8WJoXG4kfI8bmSRwRInunbyPFn2vl-OsKCJlzq_XPzooXTgyw8gPpT3YlvXdTJjLdTrpLVgtoOIjDmfFoE9TG1p3iYvHgw0il01btuKqfARa-5Lm8SLnkDbVXk2TOsc085jTPraXBAeN24ZD67mhQMsjux90D4wT2I8WrvICtRlwXwtqDI-yN8nuyQmVwc3pJO1_jvIQ670b1MvAgPf6qs9_Vd0wIn9q9bYr-3RY40pscapP6-jZ8GydKpH9nnOk3Bp97WW8nQYTdct-ql9kYuGLBXtwA8AIUNGzL8LU3ymj7AIAhVD4RXVLYJFLnmAgJGLASC5wSSX_nILFAa3G_FKAozmHm0BgEv-jSADpYpOH5AgIzCjsgAX6P26S-gaVnQRxoFZYyLQPzl0IqH8Lr4nbV4QCgFL69FcFmz8QfsCqzWQVdSR3gEKsvp3VoK7pHgSRVFjRcEV2GtaDkQRh_Lf8xuxbjb-Zsk-qg3GsQiZk2JA-VLD4wPkoQvfvdQnyD9icSp3UbawYo_kGuRBmbhGgkZnTPHu4AdIXJwG-DhsjZnss2OdqZwF_bxH9IM7_9OmweUsnYeOoZVoennPIOB3RJgNs2G4IxeOWTa6d9Ymnsv2u89097ShD00YK_pWQO2beD8w94woE-GsFK3juI12_X59gRPHUSMBorx6FqRJrPxLyxPhcW8B5IK1vjWCo3WRxz5LqK0eLQeFtvC8PBOEvUAoW8pvLx3-4Ru9-JgJCXSpuDqaps_VcllA0Fg93fGXP-t_nVDd8hc-fhiAbUfPJN4ZO3prfDuRsp6TWGYoMrsL8iozg8HGng4S83jKcKT7wRLdIoGSpyZPBzQMdzdDxmNVa_5XLh-9GCYnObpvVmaglScClzOdcxVe66g2vGMKNr3EamfgdjCTlkRCyVao2W60vhN91Xz6px-TzaICotojd9i2p0jlMwi2MSQm8-GnULvwhXv3z9J92PiVr7NqDMBMOKTs3mj6AFXkKvGfUUgqNlxixyB1iputyYOZb5VFWmN9vtwjMm-qml182WzkA0FmyRTudl3DzJMomHjvFI5Ng1JWn17q1Ubf33YbjCT8gU3F_3lvWCxT4VLqGjFZzY8HUjyBMG85QmIxusdRZh5OORuZW5_n0gK9RE6qk-3ViCX6c2ZmM6Nb78XXo4YVdqqbT3phyIVeNE1yTDLdOUHYxS4Y2r4VtpAWXfenufVZ8TuV5Q8PGV3LGjbnSblEgWeBhAZSRR5YwJaFtHn4ACocVuF6kdWMavawEyk9DgDvQNhx8u4AXIYkbrLwJ3xadRawdPR7gYLm8o98aNyLG0xxRSORAwDLP1dLU8w3buDQ0_kcFf0Sx5FZzJsT-gE286quLlAibKZGsdvsWwgvXWjsSajjGd8N0myAJ6hxaYGRIFYdDsGUzxOIepGf2jh1h5RlFUhOViXeR3YkUfOrp-IA-c17HVAOXLGcNv-cpQqgfLNex6qGcNGJqiYFuPh21FMkMJkhNT7Ch85DZKFpDCAGFlJH1q0hoovjscUTk50B6im4mGHVeiYE9w3EXZryNbh4WapqLYI2YHfe2wCJEobwXN4lSfAX8ByyUk-igewZB5gcSu2FSS-375-HXGAMFZc4o53HHkB182nXfjfgLwRhAA2sxh7x6LUkn_2_gKM9xQd0pos\\\\\\\",1]],[\\\\\\\"B0CA189E-76FB-4F26-BF75-10B744963E11\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:18:05.325Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=419644&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"933DA127-EC5E-442F-8522-61885748B597\\\\\\\",\\\\\\\"AA32BA3F-E163-498A-AA0C-EAC0680CB55C\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6L05xcvg5LnssrTZ7fF5fE3jlMij1vkdl8NU5lY1I6bUuYO0_MbnBwzfKb6aXEc7cWga8-7Uu88rwpSNNF-PabhR86Yv7H_yyy267DoWoVXNXWy9PdPoLi3CuoE4MIMXr5RBWvFJ5aN4_iwXlPCLP1YMjzJdqJbmNdLXAh7QRGiSvp8UGZE2EguhZLGBsYxw-AGVPCFKBAA5GLG_mvRYIS3bSAJjfpMquM4X2vQEJEziYHZAKfOLqN4N0c8pYKHwp3nMtPA4zak44RAb3l312GTnH0cwDx9FVf0_i0TPb2O1VlCUhULdhoBmlz6mSooj3iVtTidqd782ak2aA2rYP1-OnL0U9x21PCp4NYmgJ7pNAbp5MicJ4NeDxz2dpijTmqmln0J-NwndCru0lHsQGXHQgm3KkMYdKkklZSmO8Go6sBgItzLlMPvm9fYuUoon0D79Q15JQgSWWruG8hyaPVbomtNjd58C8ByluDelXZeWvWlIDjAP0PM9oX2Ad1HLQZPJZdPVV0Jhiid8n_PQj4NqrWmvuAq-4ewRSI_VI1DrjfVHYFMvW4OIwgoOQ-lq9Fa01AXA4IkgKznYhTO_9nsjVIiGIBBlYQruFSuU4t2-9yaE4HuLmXcfbOgbSyqX5ygdhT31IQdZyrV9z2O5vT6fYuYV7otLlKdAt0w-juNF1FkZ84h8tIi2H67zNPxvTvNWwEtXHMuW5GSqQO3V_bXJImsRL-2cJxjh0riz_PZ2TujMGiEVwm-wD6U7UqWn2yyPil0PtIe7uDXmdyeD_ZQEPEz3_EszCu_zTxj4IRsP_gBOfze1ynxo866aaLw2-ohOfu7MdakrCGXe_QWVn1e0xeiY5MxrzccU_zh_gi6zsM3RCkuQoAnHLghT6DAZTbDkb7_Cr50v3BnqU7vHsvpJbjgXNm-4hhSc2O4TvsrYnf9dbPtd-ra28ZD2FgtwW8zO-wW3gdwJ_58B6TdLkP9hjuTvN784IYOnc64JU2Eds-cNlSxJ1qs-YJH74d-GPSpIEBkd3tu6VAL8Foyxi90M5dhDa0aNrMW395w3eSHQxmNIOoW8d2AmHjJS1xLP44R7coOZ_6gj9MpriEk5Xksu0ZFJ48vKLivAkBVsrrLNB7u2gmiW5JbwiFILBHBNgAgRv5tisHxnFkWWR3EiaK6P6WmI1Xr_1Yq7jc7TFwNy4xtXw-BdSri2NWdw8_lkJ1QwvDHygwfewjsnwBvDNLtokwaVYx9xMnXSIoYHiYIMmUQnFf_XqNYOaNaweBRAhU2m9fvJpqXqisx896Y2wh9hdxj9FBQRHDHpzcqHOUuG48xaBaZhrusDqte6PJ6OkLd7Gf33N1o9CWGYdnSgXrXeS54rOeuE7jv1K3Mn6j7kMclGi7dcIIIQSojZWUaFt580IGNdt5NH0J-y3zf6L99Ttzv-0yBV47YMfBqJ1EgQuHuEFZC28g42VsjBN1g-i5fPic-k8xc1VjtsT5USMVzMPIlFP4MnXQFoiLVuIL6UUnnEmNER-byOLgftvl8vmHd-nW9qlHqhX5UMv3sMgSSi0nzWdCZLTnXQsOBtIQCiqb1v9IjiH0L5Qgz-UnEDOvnW7S0KbEaFqNOss3jPoN2jvyBvThxMm4xEdWzbX7lcztuD9DBoj0Jy8r9MoGWGbhN005T05Ub_kaVv9kwMNYjocMkz0XeqpfcRfkDj_4pX37NErAp-5gKZKssE7Ycu7J22hJHVNCMaRnjOWHmxxM3scKnpJyMg55sAiSlH4JsELNMPuCHv4oOJRih0X9nkmub4wUXZaxoe9W39LZDmMSR3jPXijetr0TRdj4KXNtt3UX5bcpZKDYGDeyVLSg3j0tXmFUbJbKQqmXFgpqNabKiVPISgvGorA9PHgU31qyyRfZyfS795V89WokvQnn_46-_NhptncsPXMjfVACbpg66fHEH0ov7r-k4FUDWwU4u50u4fqmD9EdXUdSBRfSuDN1Im4uj3GLv7kl3OtV01JOgr-MVLqGpXpcgKKLRpY2Fc6iYg2Ly8W4DVu8QNx614483fisJEurj9k0sq1V-zCJBaUeARAeLn3wkAaqzn-t9cPFA75FEI1EG0zS6deNl4803aa81ZlbjFml_fnZfoXtS6svbjT0ZWlWpxo4JJuZXQ8NcFSDGnrSRHLchiRGlueLIWyztm8_jpGmfhNXPwRaAeVLh1yup755EBryFR4lsnpB9xT2SpMdIBqkwDkpxwnPHOn7aOoSqhnGk5lZ5S--ZeLjEwTQVe_jjScVR9FpK2edDqRbbOCjHg1FG_kqR3V1qoRBe3NpdETKgxsJY6PJ8LWJiigcSZh2Kcm7pINtf1TlkzgdFTlLjvKXhPVPwXkCDpy5dADbyNMC8ZJ53wfOSVM1gbHs7fuTyGH95GDmzGU5wjonv7tT8wh0tB77NwjlYonM55ji4DWXxMdTI3SHLJKPdEaqg0wlMfBONYUVrTxepSG316pjn5k-Trkg3LgCWeuV\\\\\\\",1]],[\\\\\\\"F32A9549-CBA2-4B1D-8B6F-D1EBA8D2DDA0\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:18:15.325Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=395153&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,534010413,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4X8M-bCsdWJanNSAFjtyzBoRWgLUCS5g59UWldOFPGSO0Y0wnQCYksNvjcnsWTMKXrUlrlmWF3eV1HcstBD1tMsLWHX7-T1sKBL63S8oidKx476e0fEHH1naTGH6grZp_V24Fh6682yO4yH21_RU2kbyttt_eURAbLxLdRFyTPBWBa_tPvcSiZE3ciOvPbEpFaiL3id8fQUI90g574r21XZutHvhFv_Myol2S6M2NCmA3FM-feGJDoqtf7EyO4IqTT5xicWbk6LEJcfowB_Zod1StWuGech5EullKyLjAuVaKr6ZxlN_Y96BwH3oL8XAcvTq6uo7CvwE582qrR4EZkXs4mrdj_GfiXQRcE9NS5Vdiiu3XveWvI0wGu6-oKghtjjEkFGMRW-60kseVR8nnd7Uca3l-48ymoCr4KSmVYhimEwkxFrU42ZTaoDrXBz56MD7QvK2IgG9hBmFNa8H2cttqEOKTLcQ65EzuAOJLfRq9kKKym2mECJ6LgMruk-yvj_-CeqcQ8PE8DGeNyMyK15MljMnFcgmkd7HnbxwvUjTwPx4lMXJh7hVlzItABBnbSSu7PB9gczke-Nj6QAhXS9qdEecT6k9rzQcLvtzaPQ2E1p0XxxpV4bqocYSke77fPOsJs8GM5rp2Dem618JC5m4NSSVN8pmfP950G7vm7z9GbD_yImE8nxaXMtQyKdNUxHuKplYJnun5FBqVa7Bo3GzlsTh24QVRt7jjnWhjEvM1jAda9hUZQWrPc2lFMOfTLqLngiRWaEIOTsGkj6KLKrROn65dKI-lGnqVtf6oIcLmhU_1TQChaA-snA4VGy15wrjVxr_hK0_mdbjruOEMnxlNfQ6JGgzk3L9yhOpRVl_nKPb4ee9CffE1CuYeJbCcOSeta61YNLkn_3uad6WdUBp88yqXQ59AyMvStg1s5jv4pYhE-GgOL5Cf0aSRGacHaaStFPBhjlGTvVZ_hfhQEZkfA42zUOQVF0oijoE8wb84atJgF4pCGKiJ8bhCMtp9q4rGEQwncOpHtUocD02dJXGOK8T1I7K6fOPVBsaVlDuffsAVMnDlDNQod8YsTdDeZYMIRUh7mQkCOoouLjHqN5Sn6Vkecq1wLyexRRiXKd5mU_WVg8AiWRn2OxTVJVt4X3cJtCWYSK78iV35Tz_YeZJNv3ghiGlqq63hpsUtAjFRenzY6ITvmpPaDhdqnhMaOhvJ_V23C_LUkzaHqGrHnd3Y7iQgaBgxA7yAUKJpt6ydFsj7bsREos3yZHjsiHddYt8lGoAjFHeEZ_6mbzmNZCcrjZs1YkeeTJvT6l29_ROybG61F0zOKtba9G2-Jqau9msMFI7HrdoJKVseJ_8MJBBiaJWfQH3wL5HSkG6zN7kpOdthemIV3nW5OJigfHirTd9PMZu2xAZgcgAwGmGrt4qzlaAtKTCLbnrolUmFyIs0y6sFijSdm1bt8WXQoIeY_zNZ-4GDHZFZ2c0qHa0wOhS2GhMXYp-OHrkJIrw-dHDkCTe8VjdNnbtWRsuzLAGzXqgdKA8g6TZQjX2sqrc5bZQjw6oaeb1rfifFxzdIh3s2HAR7dKpeKT4BefQdw1_RxsmT3elVXjTwnnp8qBEX-DnnKRjG-RHo78Yhw4pzi4oGolKeLeKKkHrImAQo_KJv818HHWsJhyotfQSpqldxf2FUW5bFzWm9rA4na6qeAhynRlX1sR62LHkP_jDE1rp-uCePHZ5Moeu5bzd-QZ7nOi2F-uJvspRdj6iVSUAZO--fKq7q2VR8ubHvW8NglBteIU38UG4wwoag72qUxR3MutrdKuxrG1t9-WXTkDVseNtv7eYBM11_g_a0gIZsa7k3ZY813VzBlyKWf9V0ixtdvHzRmS0EoDbMdBqP8FINaVJkOuVhJ2W8u6LpZ1b_oqqhIvhOj0V4XyBhUW4Kov2SeqFoFbAEG39bs95KlUpW2jPcVME8BHvsOlKPURz1FrKp-TEXvhVYT6X0WEciPWrMKKGnKwFfe3UpOUo2965nS5S7wpBF-caB1AaFTnSjo8DnWhCqPygVoMurGsO-mIfWQ-Om9NvwJ-_zjovgZmppLrSyfZmPRHObPkKudyPb2jABm8KKQPP7ZY5GP1Y6k3wRfdCzhCFs-JPh-o3_TEEN07aSuRdHdRi4oO3FcWEq4xOB5nXhGTs5oOLIOroDFLcxiQjmm_0GqaRUTY6d5wZNlz__-6XjZuqDiieQyDUMbqS3EmzMOs5QIDvCpwKOVM5hmfmhPeZJkfZ2gsIrZN750kJqxHXdmMuk_R7Omen7Kj866n7Rcs5iCh-N9GZTOW86dExnwuJ6B7vP02HM89izEo-DAzkV65veQ96wbEM0NN7eNFQpydSHJMZAl7UpMV-tb-s7UD1D61-kMNLhomha92Werp-EG6Pt0uh1MgXAKshEQZtGxcIkYAtHGHiF9Q5acUMMEsv95glNiX-LKwIyxWe4QbFeLHkTIXHb567DZG-ekxs96\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"92035A04-240C-4F8E-B787-6E871AC32B61\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4X8M-bCsdWJanNSAFjtyzBoRWgLUCS5g59UWldOFPGSO0Y0wnQCYksNvjcnsWTMKXrUlrlmWF3eV1HcstBD1tMsLWHX7-T1sKBL63S8oidKx476e0fEHH1naTGH6grZp_V24Fh6682yO4yH21_RU2kbyttt_eURAbLxLdRFyTPBWBa_tPvcSiZE3ciOvPbEpFaiL3id8fQUI90g574r21XZutHvhFv_Myol2S6M2NCmA3FM-feGJDoqtf7EyO4IqTT5xicWbk6LEJcfowB_Zod1StWuGech5EullKyLjAuVaKr6ZxlN_Y96BwH3oL8XAcvTq6uo7CvwE582qrR4EZkXs4mrdj_GfiXQRcE9NS5Vdiiu3XveWvI0wGu6-oKghtjjEkFGMRW-60kseVR8nnd7Uca3l-48ymoCr4KSmVYhimEwkxFrU42ZTaoDrXBz56MD7QvK2IgG9hBmFNa8H2cttqEOKTLcQ65EzuAOJLfRq9kKKym2mECJ6LgMruk-yvj_-CeqcQ8PE8DGeNyMyK15MljMnFcgmkd7HnbxwvUjTwPx4lMXJh7hVlzItABBnbSSu7PB9gczke-Nj6QAhXS9qdEecT6k9rzQcLvtzaPQ2E1p0XxxpV4bqocYSke77fPOsJs8GM5rp2Dem618JC5m4NSSVN8pmfP950G7vm7z9GbD_yImE8nxaXMtQyKdNUxHuKplYJnun5FBqVa7Bo3GzlsTh24QVRt7jjnWhjEvM1jAda9hUZQWrPc2lFMOfTLqLngiRWaEIOTsGkj6KLKrROn65dKI-lGnqVtf6oIcLmhU_1TQChaA-snA4VGy15wrjVxr_hK0_mdbjruOEMnxlNfQ6JGgzk3L9yhOpRVl_nKPb4ee9CffE1CuYeJbCcOSeta61YNLkn_3uad6WdUBp88yqXQ59AyMvStg1s5jv4pYhE-GgOL5Cf0aSRGacHaaStFPBhjlGTvVZ_hfhQEZkfA42zUOQVF0oijoE8wb84atJgF4pCGKiJ8bhCMtp9q4rGEQwncOpHtUocD02dJXGOK8T1I7K6fOPVBsaVlDuffsAVMnDlDNQod8YsTdDeZYMIRUh7mQkCOoouLjHqN5Sn6Vkecq1wLyexRRiXKd5mU_WVg8AiWRn2OxTVJVt4X3cJtCWYSK78iV35Tz_YeZJNv3ghiGlqq63hpsUtAjFRenzY6ITvmpPaDhdqnhMaOhvJ_V23C_LUkzaHqGrHnd3Y7iQgaBgxA7yAUKJpt6ydFsj7bsREos3yZHjsiHddYt8lGoAjFHeEZ_6mbzmNZCcrjZs1YkeeTJvT6l29_ROybG61F0zOKtba9G2-Jqau9msMFI7HrdoJKVseJ_8MJBBiaJWfQH3wL5HSkG6zN7kpOdthemIV3nW5OJigfHirTd9PMZu2xAZgcgAwGmGrt4qzlaAtKTCLbnrolUmFyIs0y6sFijSdm1bt8WXQoIeY_zNZ-4GDHZFZ2c0qHa0wOhS2GhMXYp-OHrkJIrw-dHDkCTe8VjdNnbtWRsuzLAGzXqgdKA8g6TZQjX2sqrc5bZQjw6oaeb1rfifFxzdIh3s2HAR7dKpeKT4BefQdw1_RxsmT3elVXjTwnnp8qBEX-DnnKRjG-RHo78Yhw4pzi4oGolKeLeKKkHrImAQo_KJv818HHWsJhyotfQSpqldxf2FUW5bFzWm9rA4na6qeAhynRlX1sR62LHkP_jDE1rp-uCePHZ5Moeu5bzd-QZ7nOi2F-uJvspRdj6iVSUAZO--fKq7q2VR8ubHvW8NglBteIU38UG4wwoag72qUxR3MutrdKuxrG1t9-WXTkDVseNtv7eYBM11_g_a0gIZsa7k3ZY813VzBlyKWf9V0ixtdvHzRmS0EoDbMdBqP8FINaVJkOuVhJ2W8u6LpZ1b_oqqhIvhOj0V4XyBhUW4Kov2SeqFoFbAEG39bs95KlUpW2jPcVME8BHvsOlKPURz1FrKp-TEXvhVYT6X0WEciPWrMKKGnKwFfe3UpOUo2965nS5S7wpBF-caB1AaFTnSjo8DnWhCqPygVoMurGsO-mIfWQ-Om9NvwJ-_zjovgZmppLrSyfZmPRHObPkKudyPb2jABm8KKQPP7ZY5GP1Y6k3wRfdCzhCFs-JPh-o3_TEEN07aSuRdHdRi4oO3FcWEq4xOB5nXhGTs5oOLIOroDFLcxiQjmm_0GqaRUTY6d5wZNlz__-6XjZuqDiieQyDUMbqS3EmzMOs5QIDvCpwKOVM5hmfmhPeZJkfZ2gsIrZN750kJqxHXdmMuk_R7Omen7Kj866n7Rcs5iCh-N9GZTOW86dExnwuJ6B7vP02HM89izEo-DAzkV65veQ96wbEM0NN7eNFQpydSHJMZAl7UpMV-tb-s7UD1D61-kMNLhomha92Werp-EG6Pt0uh1MgXAKshEQZtGxcIkYAtHGHiF9Q5acUMMEsv95glNiX-LKwIyxWe4QbFeLHkTIXHb567DZG-ekxs96\\\\\\\",1]],[\\\\\\\"D27FE69A-BEE9-4238-88FD-F191E6D442AB\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:18:37.147Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=311532&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,498077307,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4go_AclRcMT6JFvPiW4RLou0FDZo52ZwtU4Mn6EaMy1m557P3eoIfEKpm0dCnyILlDdAZEFAVuKjRiZpg4WqxVyzFj35EJvVVcfssO7sg0YjYIB9bm2iW7lsiu5KoHCoFOl5SClUjPi7pBpOYyOM-WvdTPTdOA9LI5R6ubGruqaCknZJMNjdVpQSIYsHPrP3HSHBVgKYjE9fgPVlhTA_Z7N1GD9jeTxN8MPR85jB162RALOUCZzO4b-MpE_gLp5kJIMzBNXQjeOUZyf6rExFubI_an_hQ4ZUB5xBfRbrVjNhKyhzCxGQVE9D5_LJ0i89W-fF3npMQ8WAlXhQQ4PheCA7B49T4zIl68EBZnsJtBYM2a9tVwKwBIhr9C6m08BKLFmnDLrvnsYwigiPVJR93u9J_aULL5fSDqE0fC75CP3NbhC-Rpbu75o8b2vlf-_UmVxEAP9p6zkZzhwkol5okyRvkmR1F-ddxi2_Voiax8Etqbu2FAf0hEXdxa3fsmmC6x0NDlmsAPWX0kG8y5uj8lVFbsWImghKLHD_Bxfzdq95Av1lrjeb63p7YvyopO8fi1SeTRfY-B1aJsjmO07dfi66ZI6M3ZA9k0pcp3ITXpHSUn59oqeBhk_VhZnndl2-kNzGoaRDWng0D2L9w-X9-blFzdL6liov3xn6g7qcrxBaZaw0QYaluZvpL2e2yiLw6wpgORedDF1jheZMMUQ-QrLfubu4j8ysjgIReL3eyVEszWX3e9y2Uau-pSXI3-P-pDBGj2dkmoCb3pL9m9ink1N23LkaXcP_OHwMBYyl0F6FnHvGwIHAKJ4Q4F8VYCClcfec7z507bb5PP0qPlXy5sw7f05KeO7G2FmsC_9pFVWNC1QyHa4f5OID95WrOgeRbET5s33fLgmrDGUYFbj3e0zdGdDTr1Z5eUMDCf8KmUSwR3FreuLfHsoSOgNIs5RBWdfjDhwUvDwcpZY8YY8IiAPgkEaWl893Dy3Jnblso73aGBgqVBTmqiz8KlKMv3UI22RKv-qsqIesWPXdfzRCYTGvsnsttMLk9dxBUiBdQqoZkWVcSBPeGGQD3TTB_ehZn66NvD6uYAHCwDV7bo7mdvD0AOi8KFa_niBAVtnUMGZQC52yoBUYUhFIZfh3h-qT_57OWUPQ0KrzQd4zOr5yBh_k9pi4HesBtMkgoHtcGVMjJFPb1iEGIfjg5scEKefUtXikCuWv4Hox18D0v90SPfNG8ZVPxyMpPexfl7qJOBrSrzqcpLqHKO4EX_ObKSEJL_JJtwMtJJYLyx0N3qeBOTsL6pjJMoFjpT2dOxHqH1PWjQ0JW4inv7GoUT3qiP_2FdnEdjM5NLF4zKu2UD__pvw54CDBqMMRAuk07mNIwrsEjqPbCacHAWRLHboqL8l3R9hqcqs-at41Ruspi2U1CGsPi0ijNC5JnVn5yVaD-bVVCUZPGsBP6fTg9Jz3eUvNIhmLbfzKRlPxAbPSH_ecz1tW9YyHdut6oHsUEOvLGsC-G10NLRdQEzcl-A0MD75fpI5Iic7fxFMHiNfMHlg7isHShlfJcKjkKlDuQOlYFfeHtMQxJ5xGEem0hEhGCpSCR_S4nxhHNA8SE77gdrUvz2ZrMdrJBZJbhdT5zKVLYtOfFfAQW9VszQZFhuQxmfqcHU8zr8SMjVjjrQHWFKX6Ww4yLEG1oG1QHBtuOsjJMw8nd6x5G3zeheKwHQ6dAD0atKRQ8l0Y0Ior6gjtlb9oS7BV0u1KQgtruM3z4MF23qLb8Ts-eSlMBoT6hyibUrPtxQd8twALiRW3PbmxGaaVTsujuvXCTAjKIptl2qYzO1-Eh4pv8Dsq9Gp2tkAkLAkqgTyV7GWiO7MjDpgMp3Pr_91u-hyURJpTln1Jes85HZenAvtLc8l2DUYVERMfkdbi30-ELWZdyBzxGjx9V6cHqUG_VuH-E-V2aCoWwAhgwYYiLYg4b2eZ6Od81nrOwFrYjTwGGMOP23k0wSkFmsX8x6oba-nCBCtgMgLeVUaymBpfM8LvVPrB3WVg29G-wXZKtvrxhT50MRBaVMD_rabzofiJiuvB_7UMWHb-elIlEkVt-McdOwNYI-eJtce2BX9ElZuc0fvi3F_FSVFsCfXIEA24MJ54k81jMkVKm2n4k7ZNqO-93FTnSpEU8N7unDuGpgaXAD0mbsg-By4KR_ALBJLcSibf9jjf-U9DyBhQ5Fv6XiUyOJzawlg_dd-Xx58nepcbkpWSWpNrnuw7kRCVQkHvPOD0mG5vd89NpZW3_l7oYA0vral7c5Vk30hZWewvFps6OECznGE17wleK8JNElhzh4ZOXhyJdY8up7tTnWiy3MKUa7BdF6p3B13c0vyCPkYUOjiZ6BHvlFQ1S14F48pYMzLPY35yHiwEvSdbxxlAxZFWWk88rdve5a3hxtiXdDeBs_qlS7roL1eOmSoycsX-FPRarTjKwroH2xAeaBXgtLnQdjYQNo5D54_42yAOK_LAYtlnxDANFKzpdRHRJTcZ0oYw\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"350B5EF5-0FBC-4951-A742-C4A7A9176C64\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4go_AclRcMT6JFvPiW4RLou0FDZo52ZwtU4Mn6EaMy1m557P3eoIfEKpm0dCnyILlDdAZEFAVuKjRiZpg4WqxVyzFj35EJvVVcfssO7sg0YjYIB9bm2iW7lsiu5KoHCoFOl5SClUjPi7pBpOYyOM-WvdTPTdOA9LI5R6ubGruqaCknZJMNjdVpQSIYsHPrP3HSHBVgKYjE9fgPVlhTA_Z7N1GD9jeTxN8MPR85jB162RALOUCZzO4b-MpE_gLp5kJIMzBNXQjeOUZyf6rExFubI_an_hQ4ZUB5xBfRbrVjNhKyhzCxGQVE9D5_LJ0i89W-fF3npMQ8WAlXhQQ4PheCA7B49T4zIl68EBZnsJtBYM2a9tVwKwBIhr9C6m08BKLFmnDLrvnsYwigiPVJR93u9J_aULL5fSDqE0fC75CP3NbhC-Rpbu75o8b2vlf-_UmVxEAP9p6zkZzhwkol5okyRvkmR1F-ddxi2_Voiax8Etqbu2FAf0hEXdxa3fsmmC6x0NDlmsAPWX0kG8y5uj8lVFbsWImghKLHD_Bxfzdq95Av1lrjeb63p7YvyopO8fi1SeTRfY-B1aJsjmO07dfi66ZI6M3ZA9k0pcp3ITXpHSUn59oqeBhk_VhZnndl2-kNzGoaRDWng0D2L9w-X9-blFzdL6liov3xn6g7qcrxBaZaw0QYaluZvpL2e2yiLw6wpgORedDF1jheZMMUQ-QrLfubu4j8ysjgIReL3eyVEszWX3e9y2Uau-pSXI3-P-pDBGj2dkmoCb3pL9m9ink1N23LkaXcP_OHwMBYyl0F6FnHvGwIHAKJ4Q4F8VYCClcfec7z507bb5PP0qPlXy5sw7f05KeO7G2FmsC_9pFVWNC1QyHa4f5OID95WrOgeRbET5s33fLgmrDGUYFbj3e0zdGdDTr1Z5eUMDCf8KmUSwR3FreuLfHsoSOgNIs5RBWdfjDhwUvDwcpZY8YY8IiAPgkEaWl893Dy3Jnblso73aGBgqVBTmqiz8KlKMv3UI22RKv-qsqIesWPXdfzRCYTGvsnsttMLk9dxBUiBdQqoZkWVcSBPeGGQD3TTB_ehZn66NvD6uYAHCwDV7bo7mdvD0AOi8KFa_niBAVtnUMGZQC52yoBUYUhFIZfh3h-qT_57OWUPQ0KrzQd4zOr5yBh_k9pi4HesBtMkgoHtcGVMjJFPb1iEGIfjg5scEKefUtXikCuWv4Hox18D0v90SPfNG8ZVPxyMpPexfl7qJOBrSrzqcpLqHKO4EX_ObKSEJL_JJtwMtJJYLyx0N3qeBOTsL6pjJMoFjpT2dOxHqH1PWjQ0JW4inv7GoUT3qiP_2FdnEdjM5NLF4zKu2UD__pvw54CDBqMMRAuk07mNIwrsEjqPbCacHAWRLHboqL8l3R9hqcqs-at41Ruspi2U1CGsPi0ijNC5JnVn5yVaD-bVVCUZPGsBP6fTg9Jz3eUvNIhmLbfzKRlPxAbPSH_ecz1tW9YyHdut6oHsUEOvLGsC-G10NLRdQEzcl-A0MD75fpI5Iic7fxFMHiNfMHlg7isHShlfJcKjkKlDuQOlYFfeHtMQxJ5xGEem0hEhGCpSCR_S4nxhHNA8SE77gdrUvz2ZrMdrJBZJbhdT5zKVLYtOfFfAQW9VszQZFhuQxmfqcHU8zr8SMjVjjrQHWFKX6Ww4yLEG1oG1QHBtuOsjJMw8nd6x5G3zeheKwHQ6dAD0atKRQ8l0Y0Ior6gjtlb9oS7BV0u1KQgtruM3z4MF23qLb8Ts-eSlMBoT6hyibUrPtxQd8twALiRW3PbmxGaaVTsujuvXCTAjKIptl2qYzO1-Eh4pv8Dsq9Gp2tkAkLAkqgTyV7GWiO7MjDpgMp3Pr_91u-hyURJpTln1Jes85HZenAvtLc8l2DUYVERMfkdbi30-ELWZdyBzxGjx9V6cHqUG_VuH-E-V2aCoWwAhgwYYiLYg4b2eZ6Od81nrOwFrYjTwGGMOP23k0wSkFmsX8x6oba-nCBCtgMgLeVUaymBpfM8LvVPrB3WVg29G-wXZKtvrxhT50MRBaVMD_rabzofiJiuvB_7UMWHb-elIlEkVt-McdOwNYI-eJtce2BX9ElZuc0fvi3F_FSVFsCfXIEA24MJ54k81jMkVKm2n4k7ZNqO-93FTnSpEU8N7unDuGpgaXAD0mbsg-By4KR_ALBJLcSibf9jjf-U9DyBhQ5Fv6XiUyOJzawlg_dd-Xx58nepcbkpWSWpNrnuw7kRCVQkHvPOD0mG5vd89NpZW3_l7oYA0vral7c5Vk30hZWewvFps6OECznGE17wleK8JNElhzh4ZOXhyJdY8up7tTnWiy3MKUa7BdF6p3B13c0vyCPkYUOjiZ6BHvlFQ1S14F48pYMzLPY35yHiwEvSdbxxlAxZFWWk88rdve5a3hxtiXdDeBs_qlS7roL1eOmSoycsX-FPRarTjKwroH2xAeaBXgtLnQdjYQNo5D54_42yAOK_LAYtlnxDANFKzpdRHRJTcZ0oYw\\\\\\\",1]],[\\\\\\\"6DF26C52-7FC5-46ED-A4FB-BCF1BCC02EEF\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:18:46.196Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=288975&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:18:47.154Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=169567&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"D6AAEC30-CF75-44FD-9AE1-D0F538B5944E\\\\\\\",\\\\\\\"02E2F918-9605-41DA-A51C-6F2EF52C3CD6\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6f3yhVnqY3e2AHaKxcEBfbAFLz-o5eipDmWPixKRievIqzgL4xrRuXUgo6fE8h18xlss2Mq3IHNRxy3WMX4A-TdUVl19KoTpsdGN9UMVO8THQFSucmEodT0M9kqT2bfSCsFvmAvqkc03pVsXwJ7lGTS3-Gms3xu7v3qj7xRKCb3gw_IyW67WbwrNhovmyR1U5I5aybT58zYXrfYy_czM9XQ-npzoWmPIu9Jw9S0TqGgus79HEF6Y7IN-ukb5lVjok6iiCDj7tqmMhsN9UST6V2-VqGJn9EZbjv-WHBK2dKJuJN-B4kz7ulyET_YBiCUTHy3ZCefZjF5V3pr767YZ284M-k044UvzhuXntEPWLinQUabFyrrNfETINZygHSkKiyV5UWXgfR3cC8vRlsMUlaDnixqNXfburc5C66OBT03FtoM1_metWYDjOt6gAca7ktL0wGSjvohVF0yoGxYkrVIM1o_SqOZjZw-ExBHpOBPECkEzPEu71SJSH7X7_wZnrzL6nKNYsTFAjcYMckfNCqqmm3_X8FascZWR5iZlGV7X1rBEWE5fJWCDkJlD1Z6Mtz2aV3kZE9KpUNj58tPsXwbaxriJIptjp6YM2_G4HhNiW8KQW0s5vNPKsQrjB-nSSZ5Rc0rsrGPHeo6EFCGmDbgWz3_miK7Jn0NAjGOz1O_LvtJBKC4Akro7d9-l5-OvHL9vBqGAjrPTp4OC2w4Je0MExGuj3r-s9P9eRoGnu2x_yx5rCZm6OnJEkeHrCP7VgacN_kQNpSoJh7ZRV6pUp_3jpvs9kvcXDs_JZ24NKPbUZrG_-WSsOws11YBkqU5yTVLMlQlxGN2BZvxNAEtoqm7pEzh0TDYZokU9MWupkWyEvoO4iPX1HgdjMGeeYvWnhK7B0m3twRytXAr9NtTbi9y4ob4HfcpzYvJf7CkCnr9WiCw74mBOsyKJ5d8YLPC82NcLM7-Zx6PvFg6j-9HmJpYyQfneiHuEquLqES4mnn73dNJ5XbzLzTNy5I8ajhd-GaXH_MdwKHwYL3-sL0BFipxLTRfK7G4UBQYOy276-P0gxVfH-z6IB2-J2D0dSAPqKDseeVCWqVWSHkrJKuuTEtA-KWMs2SG3_ME8jWpn_Ww1goW57kSHptkcT0AB8Q68a1iK8-LtK7i-pW_nwNosucsug4YPUqSvX14XMQYhlTTWHtWbrD_qnlPK_n-GxYYmntNhhJcCUwLm61wp49o9mRSuT6RoJOkvLoYeHxgdvin9x7R0ahvXbk3_Cz4et4fTvX4VtnSrPauUkJhRfqcztzqxTHHpCvHXjrxZgN6M0xIRgD-YwWqwKV1BJ23PA873ZzVovA4koOkcSzaIpkPj4cDqvPhQlFzmHCBDf_-Ywkyd6SF6b6W-yAPswzL46wYqG3v2kPpLRtKUNe5VADOAZcDgJnzHTyp72EAFXFaZ_fOJdxr8QyaatKK_K-driFRmqOoxdjPvToYMsiFuBdV1bJuOXWY_-9WPa0Vz9BNRm7BrJbmf4w6mbHFK-qyHJpXO1xu_3bXueuQNpbkNo-IrAVbwsB9ueXfyr3UftPHFTaiGMn7ScwJibiqwx4iTSHIzQGnXlR_YjDNAPZEiosFFdk84yiEVKe3QIvK3cJe1oZMsdcAizkWRauhknk6kLJGibCaYapJ-vfGZY9hTLsw0ta_uQnVGGXefbVo0eAB6kfCezig1zxb3mx_CHyNm5iE-Sv_fdXdqB3NHTDbMJKkLoF51EqWZiU463-kZzbR1Db60sPivt7aP_-kmgHlpF3aHsRjXi9WEZMdGuPsBU7FuSXQNTBz3tQt-u7Kf9d8eehmN2xKUNuruJSLITJdQeRmDdqBiKzNW0IhsSmI6aJ-fW1lLR7e_QJg5_ww5PvkDIS1529342nLAeZW4cynol6Xyo0Fv5x-7okHXMoYkptnSV-fb-5GW6KCOM7WFNChX49-Fauw8OkFMRCUXANazFzggg4YOxK7xUEqFzw50wjlBK1AvtwvaBRNxGtLvtxrfxuqU5rvn1jiLlhFR84krhAtz9ES2my4DNV8BD3jdgd3n0VSueYZIWn8gECEN00TkjhX-bI5swHqLAaiEZNx-dHkpBX3YSCNZDsMH1ETxhLEVD9HeYfUlduieqAkBPJgv4MmVvporoC1x-7Ha0cBc2DZjpdfN37USs-ArNhZ0660ZA-v0Q7WS6_ITpequa2JHWMIchq__eMOxzZpmLO_mDUkqLR5d6H5OM6vMSPp-58U78ANvbdKbC2rAMoxEj061EUFA1F0ixII1TD4ldKrGri0ZRJygcw6sW6JCah1oSFKqvl0QO9VO2Ldyk7Jjbd3c3i6xHl2rPoFU1QyiVi3BFtRIxsPg7ertXF7nvAhKtfyw6FeuE1MENCxUOmTIi7pO4DwbDLiCq_akUatXyfQXhwKR9Cyorx76G-c1ydKLtvr85vJal-wreGbePUwv1yj9lgsBbEO64\\\\\\\",1]],[\\\\\\\"729F3193-1FC9-4D34-9449-2D063D80C932\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:18:57.172Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=422769&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,866311297,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5ZJCfZ92k18MLcXUW98hyIDcgN5o6bZLM9G13Hz9L4CcUaFxo-AS6LVXDPgqQnlzJtwra80inSWBGMa6_u6yinx6lweUfuzRSLOoRYq0sRvbz3Yo34hXHTip-BpoLeuR29sMvAOE_VbCcQ2bG960aiuDHRz-YvR8jFpbWim1iF9uYK39dZoH1AvThYE6CmhvBzvAVZHkV2r3UIlMisNWmK7BEkks8Cb9HRFTWmoOWgMaWtN6wgq92-l5keEtukriYA5mAj5qrDxbqdtHtvNo52lGqPyponh3lQfGk3wmqJDwXhEJds03YLE6GicdHRAgOYx5PDLDeOdYUcffRfij_Rg2GwUqDge2TSBKr05Kkt7-byShzsBCVItt063YaWy_cRp8UL30TEqfNgFVqZAzWtJPPnJqwtPIP7ebM9BKbgYv5viRvRLuSYPbayd4AjVdk9h9MuOU9CaqeGdzpBTxQdaH2VCmFxWD56q4c5HM3kRvFKweFEgFWkXaAyKuQXYU1udWN4viPRO3XB3Ns5la4jQcEZ0UsPROUMZjdrM5NIgeqgSM7_jYWFP4K8o4hDaBvi9FHlxJBy9t13nhT-Bzyw-Z0iYjX7FBwQes5KzDTUH-sg9zPGgTAKvB8IGqJwmfvBcxK4YsNBXIMAVmYTWpVjW_fx6qbwAW9ip-rsgLRcTnuA3b0VLeA_DKg77PoHIIjFbJViktxPoeI2dclm8IJ895exUe5M2kmWzhN2pFyheidpmqZ2WapSSfueXSGcxHfn7E_AkHcyPDHy-LkFDOKEDBBKvuOsXm_gIY0BODANy7qw4zoKpNq9xvHQDpYOPraSCIllU9pTIs4PFiCgVBfW_4dKKK-klebNqLJqwERGlvQOmYH2D9Pw6L1ZZLiUxXnwbXmvbBuZKcsXUOg0n1fsuCahaPA4GO4N1z-ZWqE_NassUv2pvwwx2K4is-i1a24x28ZrPqBfpaWOgM7fNQX7tlVd5qf6ZsaUp4d2KEOKbNND_gytWb7BMCRRCzhC2xc89j0-RBYEPoMkOEWkPuFZXhfKjSSIZpP7EHjTGM3O9HSSw2_ginFPRP7H1It10t1oTrRYOPF1KgjOdttcGOoI4hhl6yXvNS8xmPwgQDnyLobg9oVUTKvJsHxePO8D5q3MU_bF4wS9rZz7R-UD1PADecX5cQm8LYBTcuyspTvVkZQAEAG6qRVLtIHWj_6AVnHvAcBxfZWDp3UNOLjzz8B5WNfwExoeci4-Rgw_4ozZCrBFqiAk1e0MbBYoXKmnVSw_MxrQYUszmIbB6-fuRA1f2rF6NmwebSVyDMpLqDSKHLG7hYnKNPMeRe4FOmN9-gARktrT2_2KamYDEzn-7lfw1RKV9eaGc4Yfnb8PjD986oFm-PpfnjTm4JgGg2vlE72CAQZtXidKgQB4M92xk8x84Y5F7Xh8sSJB0GSFGhwx6gZyuNDiDvkKEj1WXvD00emyHB2rW9mX73kiyEuEAAEq0QammT_ugROsuziipxIDquGSYoV7-p9l7XYP0nPiiLqpIBYP3Tm2SJ6q0esNh_npT-6n_U2c9xtdP77cD-wmZJRLQ6pKfTyFj58sIGLQFfg24aeAvqAspts9pzL3J-Zuh6bgDkVXJBzCL2lO0-ejfjTIZFYq1ektCBkUz1ejKrpoU707-6lmbHI-803YPn5d-SYfjL0wXgnLs0-E1SKLrKTYnu5IZNyRQeRsMslPvva8Wo0bcoXLkWtD7WSqgz9Szbrd1vY_KLDaPn2ooC30JFJ6nGBlKnuH3mg1EhfFLdJ1y45Iu4U5RDTqt3a2OPHGwfYW9hLF601CYUhdDj-xwCx0wch-efaT3P8kmg-7IwEd0jr6BkdAjqLV3EHjUQO2AJorqxQZxnlNYnL0Xx_DXMZRiF_oGQ1q5prIYFy77h7CE3Fb6cSLpeSizfVYXtbNPy1DIpl8tOr1G66hbsorFPTg1FI6aEUKKmiHavxchMgDV7f6xS6nlFIGcvapAO6nQ3P9WsLRtY8_nsJj6vY4Vo2IBz_l7TJYCSHZaZ2VyF1iR3G80rHVcuH-_gGEOF-Efg1jIhXrfQ9YR_CLufXISsd-cZdaHOwdc1G4KjosBT0TaTXIxy6ov3WTac32F75rNfG8h-VoSV-kZMQ0gmzgfSAgxX9vk6XwCGnKVPRelEGbSHkBRZ8AqqgW3CPANZmpV8OEx5UDeMcoYDGG_dlemy_B4W9CBq4EQWzsDko_2MONqrEatPLb2cTWU-QWFqDJCGdOpJgMB9j4BWYCHrLcNgoAYXeB1EaeWGGm9u6dYoOxvkgt_5rS5qSGF5y2iwc7tjIjSclXF-OlkxAeVkfNSGfWPVoOgIOff9IrTeLT7Hf-1negujkms1Ngq4hvPHg0F-2gIxnNK3cEoO0w2RmxOIbfNAGQh38SXTTN-8dfvwfEwURHcDA2aTsikSme4ATjE2gpUBn3IpY-YY7GhE32Zzwq0z1aoR8Gdkt_FUML-ocs-vMV\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"7EFBC9D7-3C88-47F5-930B-035BE69DBBB3\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5ZJCfZ92k18MLcXUW98hyIDcgN5o6bZLM9G13Hz9L4CcUaFxo-AS6LVXDPgqQnlzJtwra80inSWBGMa6_u6yinx6lweUfuzRSLOoRYq0sRvbz3Yo34hXHTip-BpoLeuR29sMvAOE_VbCcQ2bG960aiuDHRz-YvR8jFpbWim1iF9uYK39dZoH1AvThYE6CmhvBzvAVZHkV2r3UIlMisNWmK7BEkks8Cb9HRFTWmoOWgMaWtN6wgq92-l5keEtukriYA5mAj5qrDxbqdtHtvNo52lGqPyponh3lQfGk3wmqJDwXhEJds03YLE6GicdHRAgOYx5PDLDeOdYUcffRfij_Rg2GwUqDge2TSBKr05Kkt7-byShzsBCVItt063YaWy_cRp8UL30TEqfNgFVqZAzWtJPPnJqwtPIP7ebM9BKbgYv5viRvRLuSYPbayd4AjVdk9h9MuOU9CaqeGdzpBTxQdaH2VCmFxWD56q4c5HM3kRvFKweFEgFWkXaAyKuQXYU1udWN4viPRO3XB3Ns5la4jQcEZ0UsPROUMZjdrM5NIgeqgSM7_jYWFP4K8o4hDaBvi9FHlxJBy9t13nhT-Bzyw-Z0iYjX7FBwQes5KzDTUH-sg9zPGgTAKvB8IGqJwmfvBcxK4YsNBXIMAVmYTWpVjW_fx6qbwAW9ip-rsgLRcTnuA3b0VLeA_DKg77PoHIIjFbJViktxPoeI2dclm8IJ895exUe5M2kmWzhN2pFyheidpmqZ2WapSSfueXSGcxHfn7E_AkHcyPDHy-LkFDOKEDBBKvuOsXm_gIY0BODANy7qw4zoKpNq9xvHQDpYOPraSCIllU9pTIs4PFiCgVBfW_4dKKK-klebNqLJqwERGlvQOmYH2D9Pw6L1ZZLiUxXnwbXmvbBuZKcsXUOg0n1fsuCahaPA4GO4N1z-ZWqE_NassUv2pvwwx2K4is-i1a24x28ZrPqBfpaWOgM7fNQX7tlVd5qf6ZsaUp4d2KEOKbNND_gytWb7BMCRRCzhC2xc89j0-RBYEPoMkOEWkPuFZXhfKjSSIZpP7EHjTGM3O9HSSw2_ginFPRP7H1It10t1oTrRYOPF1KgjOdttcGOoI4hhl6yXvNS8xmPwgQDnyLobg9oVUTKvJsHxePO8D5q3MU_bF4wS9rZz7R-UD1PADecX5cQm8LYBTcuyspTvVkZQAEAG6qRVLtIHWj_6AVnHvAcBxfZWDp3UNOLjzz8B5WNfwExoeci4-Rgw_4ozZCrBFqiAk1e0MbBYoXKmnVSw_MxrQYUszmIbB6-fuRA1f2rF6NmwebSVyDMpLqDSKHLG7hYnKNPMeRe4FOmN9-gARktrT2_2KamYDEzn-7lfw1RKV9eaGc4Yfnb8PjD986oFm-PpfnjTm4JgGg2vlE72CAQZtXidKgQB4M92xk8x84Y5F7Xh8sSJB0GSFGhwx6gZyuNDiDvkKEj1WXvD00emyHB2rW9mX73kiyEuEAAEq0QammT_ugROsuziipxIDquGSYoV7-p9l7XYP0nPiiLqpIBYP3Tm2SJ6q0esNh_npT-6n_U2c9xtdP77cD-wmZJRLQ6pKfTyFj58sIGLQFfg24aeAvqAspts9pzL3J-Zuh6bgDkVXJBzCL2lO0-ejfjTIZFYq1ektCBkUz1ejKrpoU707-6lmbHI-803YPn5d-SYfjL0wXgnLs0-E1SKLrKTYnu5IZNyRQeRsMslPvva8Wo0bcoXLkWtD7WSqgz9Szbrd1vY_KLDaPn2ooC30JFJ6nGBlKnuH3mg1EhfFLdJ1y45Iu4U5RDTqt3a2OPHGwfYW9hLF601CYUhdDj-xwCx0wch-efaT3P8kmg-7IwEd0jr6BkdAjqLV3EHjUQO2AJorqxQZxnlNYnL0Xx_DXMZRiF_oGQ1q5prIYFy77h7CE3Fb6cSLpeSizfVYXtbNPy1DIpl8tOr1G66hbsorFPTg1FI6aEUKKmiHavxchMgDV7f6xS6nlFIGcvapAO6nQ3P9WsLRtY8_nsJj6vY4Vo2IBz_l7TJYCSHZaZ2VyF1iR3G80rHVcuH-_gGEOF-Efg1jIhXrfQ9YR_CLufXISsd-cZdaHOwdc1G4KjosBT0TaTXIxy6ov3WTac32F75rNfG8h-VoSV-kZMQ0gmzgfSAgxX9vk6XwCGnKVPRelEGbSHkBRZ8AqqgW3CPANZmpV8OEx5UDeMcoYDGG_dlemy_B4W9CBq4EQWzsDko_2MONqrEatPLb2cTWU-QWFqDJCGdOpJgMB9j4BWYCHrLcNgoAYXeB1EaeWGGm9u6dYoOxvkgt_5rS5qSGF5y2iwc7tjIjSclXF-OlkxAeVkfNSGfWPVoOgIOff9IrTeLT7Hf-1negujkms1Ngq4hvPHg0F-2gIxnNK3cEoO0w2RmxOIbfNAGQh38SXTTN-8dfvwfEwURHcDA2aTsikSme4ATjE2gpUBn3IpY-YY7GhE32Zzwq0z1aoR8Gdkt_FUML-ocs-vMV\\\\\\\",1]],[\\\\\\\"DDD1BE45-FADF-4204-92CF-A64DA3F7C2E2\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:19:07.189Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=203098&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"457113BE-4A40-45D2-95A0-84CC9C919139\\\\\\\",\\\\\\\"0C62A28B-CFC5-4F35-A7ED-D3E5A072D340\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7bac0SpnVmRP4jAZKxeAKds3G_rOFEhoMry6lDbnKHNYFf29-0L2mlbJGEU_adPw76dDPTqwzcEFwCV25C-we0CaCNsFU-KaJNTLjNoWMHTKClxwXKSbQmbWpjS2RmgsvAn1DUsA2XbnwKTYhyb2mH2z6TONsEbz3grEFukYuPccmbZ_FCQR1sqeKZ3R8Q5wz-N7Dx_Vd8voyrr-rkMnYIYuS54XrS7pUoaLsP7fqvlD8NG8hwcUXRtMyyiMJrYetW_gSGvSFm6LW1UL2vaIsqpo4H2FFnq00ohLaNfYy1BYKpmcQWUQYmNct7Dpn0VJEjmCRrFq5H-fzsNfB2MD-3X-5yY9nvmHXBHioXNiv_RJSveLouTWEqx8l2SKPu1J3ecte5jFj7b2h0wiVucA6pT_r8Q4BCeuDGQ848A6mMforcxbYdfOvYTWZBWu3DYOTcBq62cwB7_wOuNGkVnN9Hup9qxY_bWlwCnSAqIe-c2yfboIt6xK9ZhVIcyDFV1lnm9B1pqoKoYZ4cYcTAE-AmOn-dAKXC4YOSgx7fo4LA-208-mVuvAEEtB1WqOLyRKanETuu6twTad2rvUuqPUvX5fUOJPBj6xnYwAfVTbP7UY3BTeqweCBlt-LkCIlQmkVaWY-NaCl9qoxiAYCgEnagM2UxLLZ-Kkx1EpVN6m4_diXxioFmAXwX9E7TDIJHtPVSXVvdifsiRQ2Rx5CQWQo5-5MFZBkC7Eiq06Gi82Kgjn1HWa-mKmhTQP3NapSIBIgdnDzLXzsmqdgW8TQIeG-AE9vZcfyhCo8It3wsTz_qPXT2hCpn7qTgvhTiqWA8Oqr_Y25sJbqMyy4Xbrj8o5_M_iH8D1EKqatwOQEbbfJZ1asmG_Ty2IC3NCGKlJIKSrc02m0otPq-LDCtIA-_d_wTRgDpB4Qh4fy9jp0KZXFnlICMS5ElpY7JDdNs9kDAdx1Id4OumxXkvu7X7s8iyM0IWUx2iYYbKdyBK0C-GK4HGJRj0xDfhw3K75cxBsNjljdwaaCVrz3pawsLi7IbJ6KRuMSugifBKfc_qTj1sPNtbCphpM8idJQ12twU6EaQeMlKRw-4Eu7u0LqNfwPJ7_1EZvU08VtBcnrFs8kF6ttyPPJ6fLnNTDlsY54UZ9DKp2RJ7dUMwwWTLvYMcqK9s-umkgLWojpMN6q1IlRBGN4GNvT3-0aaoN-g4Se2lw0-fO1hl7hqrmw41zm-1d0VHx4e8jx6jkVTQAaKio03twPbG7GL3OvdyJVupOOmjEr5Bqfg0LMLzqKqOwVtKv9nfHovrsXEFuWB6YyaJmjFyYj1mbS41KUftuzd8dPeqxxojYV0Cx-FWE0xFxnXdP8WNkISHeB_adiKWeECUtDWyfJQ6Ii5DcIhF9Mf7VFRpcABZkCYQSpeQDLAWMaExwJZVlSiPJf_0XAJtE1HoexmtywvmpcWdHrkP3-5A9SvWDdnLnTvEnrPxq5oLGdgcT6NxOiTZO4Ayk7c8fHk8aKR01L1EAVwCJ0A59vsP3ST0M2Q44E5KtLvz6lYgfhZXprOF3SiXpUYrqyR8wx9BPVAkwZeSelm350unRnNqkJ-AnNSdg6obhmkSArn7BKvQXHa7sPvZ4u_veL72P93DajGMSCOj2njL5pxvuCrAKb9OvYOtkKuQLb3ritUsLaVUs0aQJGzM7skvl6r5fdLNKJYIfJz82QigANH1qxk-cWyWEvyUVqCohRso7TfBYbP1A32wtKlmUe8n02zf1PRqTE3Whe-ZMCur7kxBUchJewWYvqi94_p9MzTdGe9I2tNErFKxce3CxWxGa7dcUjsNAOz8UeBsIblSJqTkqgaM0oNpYpp47SMMkvUKos1tGsAQX_rpriltjFShrKvgmywTyeTSQbaj2-HK_txyWCGj0E3dADPeui_wXEkXiMNDkBpy_uTfe-jaqYjiLSWHfnE68hAdteM7J3GGZu7gEsaopXxwORyAYoxnZHXwvI3fkqxFwZ3X31grttY5pLmUGN5Oi390kLU766WWpPbBK46NpF8xp3_qYwDXrLqxuwXFUMMxIr3MMq9OKsF6FJ6X8pnQe0NpDAIl5mxMfvyUZaN6Pw2GUbNPchirjG5YFn54qw5aKLDyoKxSFPZ9IHTb0_mIvSjgKNZIvckS5hSOpB7ksBIHB6TMJggYx0PJKnE8W7kKopi9riKht_jz2rPWgdtHKATABNgPJdep2Q0Q9jhl5lpsuAY4AryjV4UDWJSnprrzfj4TgwQMefpmte6Q1sBVlDOqfnyc5HmhlvhZztb6Sx2FhqjLHyI2xOgPyCThWVOMqZg3pGrps-t0x_QrCKzmfemOPZ7M3dvS2AN_V1tHf_JhzTKWYYmcRw7wnqsJtHVtrJxhdqbVhF8DRbixNc3_1jXH5bxLUAXJFoadJwqTCesKJoscydON5YeI66cwDY_zn6uiseieNp3PWqJWg24FK00jdQTBHSqlzavk3C_y0eQ_dU2u9XyoeI9\\\\\\\",1]],[\\\\\\\"CC1625F6-A568-48DF-8541-192A22897BEC\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:19:17.222Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=490988&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,387255460,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6P9o40-LN9HAuaLi7UPKaAaPN0F1MbHkzubaxpWVnHUE1D24zVckvEZsroZj2V4V7aTkVKMDWB1YLiXinlrwhLGcwrbdPMiSJf6bPwASUJgZvmzjHRfVvwMbPUtc2pYKWF9ypifGSronnHqmU_m9tDDrBiVke2_lN-HDdeOnmdk4ZOhZHSbcr1O36yFCSlquwWYlsqaNCr7yYOxcHD9IoHhUM99HpQRL1ZDsNrpGith5ur21QDMy7_oPun-RJHnOj_PpzoTt9NfSr2YJlGzycS4uN4uI1942KfgU-gHZxjGprS_LyizIckoldXnPPD_UcvSE2qGD0QgtMWdfCgEOB7UYr1F4zVv0XsbXK91Xs1BcXWg5kq8Que2QhsiXlrwVlFMHyyNny-YaKyik2KANJFoXqv_B32jZqm7aeXL5dNU-n6Dwx1L1cRUlFA92zw16eGR1_9nkI0ZourCdhoBZdeuLDkM3uqi7Wh44IyT_azMLnRZVtyVX-g1Ku_vmlVYePVLERRHBxlP2mcbmyVbHDVS_C9zSJJWgLz9VGC96-dlui3h2_u7B5aFtnBUGojXmS63I2ERf1_WZJJpTe9etX0rNU38g93be2ru1Uq7OlOPO1FgAT3FRmFY7haOCHkoehhRXuG-EXRBUJdV5XikJfblUrJpRe6OUJn1PDF8aKmlkNk-qMznrqG5hkI9S_2_6HeWuaPPZzlVeeHafufg_t5j09ruceutvUYMsYYp5wSL95zqOG1n2j3cBh_sPuLPPp-0Ila-vtKSH-Zp3wFY87GX1Gr4typjAEar9yzoMZUfAXlrNI2Zy4Yr_-oZTDLWmFsQl8z0vNdnLEMHgPWk3os_r7XvEkRrCB049c1PuAQSHAMD5Cv49jShLmkn1EFarZ_Yy8XRMdayeNoVivqX-HsSnNPx8AzF7UeuQy38xfUt7R1-Hfe1T7OFmqOSfC8hiUN7NzP4RcY_zPfFZaztBzZUzUjynfnoxQ9rAp9Nn4qkC41EI5oEoxcNOzlTtZMOWwkPcoR0X3km95NoV9gRzesKph2KWdfs1-ucVh_KtnwvcmDGw9AVBz1M8mKNBZXRiffegFKKEMu2YYJg9t-gAk3Zb3VtCU0T1krbtzkL60IUHtXDsgo1E3Q1_oOkZT1wT1K4870sJTjU84IScbUp4GO9bAYFkchf8exFc1E6jL7ke1LLwb9tiv7sV_kmzW3ov5kXIWPwTqaQEC8QjN7KnftKo8l8aFnFAolmjsarsXarsho4i_rq4_a-UyAidkJXkx6tP4zLkcnF7XO3cf3a8pFtMac-KdETiXlzj0rOaAoWAa1ihq7Hcj6-T97szChzZwgBTjBnGAqrN59XsSnZsNDHrXBwnagandMH8rIIwlT68a4rVL_-_srUFRqeuS0lo6aodDIcXsvyeDebcgalf98KLKkfgzWq3nfC-emIzxoUQJqheM-rTxOpSzuJxhaIN9-rESQ4rb4jCDNg0NjY_XsRm0QOWhGZvsfMVdHpfy_DUdawlSTpWghbzTWRi4hPn_W_x8L5dgWgVJmIXXB-WnQFq_EXC-8N9n9MIX0QZrojbsU_HPkMCy5hOcvF4ShPiVWyMlX_bXEISzjc6yXRKnssTDmI0NWLpcwsaoc03WmP8S7SPAATciEJzcPTo6B5W3FbVbi1CE1DRcvi7R2rJ5ZVL5VcyAd8YMebR6KUewhLmQiFALVTJe0BR25AogpwUuOghdXwdnJluDfjmMw1E6dqFP8ya8UXy8-IuR3KyBzPKHeajh5aBTd_kMX8nFns_MPzXXVUKQwvWSrtZpgt0rs252f61wjQ4LUo5jyxWLeR6BN8Vn__XhBXlaxnHMT-olFv_Cfi2XUjIjEgm5w65OLFtbtI6FZ-PLM-tr8t8h1oTtzihRz5FSt32DRfAU2_77cRkVIF7HUc-BbK1WznA1kcvRXeMIoKRcSIShuc1MP7nA_YSeByCML23Vc1B_45ycGZkRrpQeko_xyI11-MlLkd16UVoDOnpCNtyjrh2QGu4VuX9o5UmY_vaQgegbpTei_2ILcz1_Y22uACvQKxlO-FUD_A04y7yU81NBdm_cbWx24O-H1iqVlm98g4-8yeydI_N9491-uijtHWtwouPN7gPAvSxyoXofUuSGa1TIMQyUwduASFitlcOPZ2YLYsryROxPCTppN37mo8dlHWty3O7VeP3Hr3OF1bzuD5gkonq3aSDM14LqXY91O13fyuib8RI5F1Fb9UlPKRWIGfYAK1mNm3L1RyXNeF79q-HiSoq9pn9UrZ_xwTH19wQpr6PbyOSn4SXImlFZe1-SH5JLVpODC_ei8fuOnMl5jVtJUsJvMcM26H68OMqEOyKJgb-F_zVl-9KVjxuQNIa2SJzi8jK71Dar6Rpiim-f4gtepnNFR2nTvevvJ8yThf07kyHnoUwdmpOeYmwTBdvpCPK6vyzJL9i6_Gj9HlMPzKIKdlsPZVdw\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"C29CF896-B064-4D48-950B-BD44D7DFD235\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6P9o40-LN9HAuaLi7UPKaAaPN0F1MbHkzubaxpWVnHUE1D24zVckvEZsroZj2V4V7aTkVKMDWB1YLiXinlrwhLGcwrbdPMiSJf6bPwASUJgZvmzjHRfVvwMbPUtc2pYKWF9ypifGSronnHqmU_m9tDDrBiVke2_lN-HDdeOnmdk4ZOhZHSbcr1O36yFCSlquwWYlsqaNCr7yYOxcHD9IoHhUM99HpQRL1ZDsNrpGith5ur21QDMy7_oPun-RJHnOj_PpzoTt9NfSr2YJlGzycS4uN4uI1942KfgU-gHZxjGprS_LyizIckoldXnPPD_UcvSE2qGD0QgtMWdfCgEOB7UYr1F4zVv0XsbXK91Xs1BcXWg5kq8Que2QhsiXlrwVlFMHyyNny-YaKyik2KANJFoXqv_B32jZqm7aeXL5dNU-n6Dwx1L1cRUlFA92zw16eGR1_9nkI0ZourCdhoBZdeuLDkM3uqi7Wh44IyT_azMLnRZVtyVX-g1Ku_vmlVYePVLERRHBxlP2mcbmyVbHDVS_C9zSJJWgLz9VGC96-dlui3h2_u7B5aFtnBUGojXmS63I2ERf1_WZJJpTe9etX0rNU38g93be2ru1Uq7OlOPO1FgAT3FRmFY7haOCHkoehhRXuG-EXRBUJdV5XikJfblUrJpRe6OUJn1PDF8aKmlkNk-qMznrqG5hkI9S_2_6HeWuaPPZzlVeeHafufg_t5j09ruceutvUYMsYYp5wSL95zqOG1n2j3cBh_sPuLPPp-0Ila-vtKSH-Zp3wFY87GX1Gr4typjAEar9yzoMZUfAXlrNI2Zy4Yr_-oZTDLWmFsQl8z0vNdnLEMHgPWk3os_r7XvEkRrCB049c1PuAQSHAMD5Cv49jShLmkn1EFarZ_Yy8XRMdayeNoVivqX-HsSnNPx8AzF7UeuQy38xfUt7R1-Hfe1T7OFmqOSfC8hiUN7NzP4RcY_zPfFZaztBzZUzUjynfnoxQ9rAp9Nn4qkC41EI5oEoxcNOzlTtZMOWwkPcoR0X3km95NoV9gRzesKph2KWdfs1-ucVh_KtnwvcmDGw9AVBz1M8mKNBZXRiffegFKKEMu2YYJg9t-gAk3Zb3VtCU0T1krbtzkL60IUHtXDsgo1E3Q1_oOkZT1wT1K4870sJTjU84IScbUp4GO9bAYFkchf8exFc1E6jL7ke1LLwb9tiv7sV_kmzW3ov5kXIWPwTqaQEC8QjN7KnftKo8l8aFnFAolmjsarsXarsho4i_rq4_a-UyAidkJXkx6tP4zLkcnF7XO3cf3a8pFtMac-KdETiXlzj0rOaAoWAa1ihq7Hcj6-T97szChzZwgBTjBnGAqrN59XsSnZsNDHrXBwnagandMH8rIIwlT68a4rVL_-_srUFRqeuS0lo6aodDIcXsvyeDebcgalf98KLKkfgzWq3nfC-emIzxoUQJqheM-rTxOpSzuJxhaIN9-rESQ4rb4jCDNg0NjY_XsRm0QOWhGZvsfMVdHpfy_DUdawlSTpWghbzTWRi4hPn_W_x8L5dgWgVJmIXXB-WnQFq_EXC-8N9n9MIX0QZrojbsU_HPkMCy5hOcvF4ShPiVWyMlX_bXEISzjc6yXRKnssTDmI0NWLpcwsaoc03WmP8S7SPAATciEJzcPTo6B5W3FbVbi1CE1DRcvi7R2rJ5ZVL5VcyAd8YMebR6KUewhLmQiFALVTJe0BR25AogpwUuOghdXwdnJluDfjmMw1E6dqFP8ya8UXy8-IuR3KyBzPKHeajh5aBTd_kMX8nFns_MPzXXVUKQwvWSrtZpgt0rs252f61wjQ4LUo5jyxWLeR6BN8Vn__XhBXlaxnHMT-olFv_Cfi2XUjIjEgm5w65OLFtbtI6FZ-PLM-tr8t8h1oTtzihRz5FSt32DRfAU2_77cRkVIF7HUc-BbK1WznA1kcvRXeMIoKRcSIShuc1MP7nA_YSeByCML23Vc1B_45ycGZkRrpQeko_xyI11-MlLkd16UVoDOnpCNtyjrh2QGu4VuX9o5UmY_vaQgegbpTei_2ILcz1_Y22uACvQKxlO-FUD_A04y7yU81NBdm_cbWx24O-H1iqVlm98g4-8yeydI_N9491-uijtHWtwouPN7gPAvSxyoXofUuSGa1TIMQyUwduASFitlcOPZ2YLYsryROxPCTppN37mo8dlHWty3O7VeP3Hr3OF1bzuD5gkonq3aSDM14LqXY91O13fyuib8RI5F1Fb9UlPKRWIGfYAK1mNm3L1RyXNeF79q-HiSoq9pn9UrZ_xwTH19wQpr6PbyOSn4SXImlFZe1-SH5JLVpODC_ei8fuOnMl5jVtJUsJvMcM26H68OMqEOyKJgb-F_zVl-9KVjxuQNIa2SJzi8jK71Dar6Rpiim-f4gtepnNFR2nTvevvJ8yThf07kyHnoUwdmpOeYmwTBdvpCPK6vyzJL9i6_Gj9HlMPzKIKdlsPZVdw\\\\\\\",1]],[\\\\\\\"CCD75733-6E3A-4D2A-B9B1-5BA2E727861E\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:19:27.203Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=153847&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"1EC103CD-4AFE-42C8-9D4C-3F2C5C128938\\\\\\\",\\\\\\\"32AF882E-542D-4049-A79B-8596F461D2B0\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6eVHsBBELa1YFUapIn40jieozTZw6VzyV3nNpIYD-gdtX9RGorSi_2kTJ5phCb9vLUYYD-CBFS8hRY9dO4uhNznsdPxaXXyeUSRvXgqP6cvTpZPkvP5KZ-HMmAwmSTQ3fZMytfWkUZ5F2MULov1V_fTAHROhtvIGzVFRY2a1gfIBuGPHxOUiwWcrMsWetRYuPHWD4JB6EsMH6karXvdhSAyIRW11Zx8oNz7ABrvRPiH4hdRYaG89ebEbu_hPWEDKKyjePn9vrcmmR3q8Ho_KRbnW76eXqp6FInGeiWIhv9k5FkGBmz_GLBwL7knvDahF5R6BEZ7LZwVnuJzN-09BWimXcKlkCb67fJg4Xa_vipPEeIqKt6-fNrniMqhvi2FbKF7n35AxdxNd2tncWSUIETbpPp_0dnzykV14V0-5WxkMqDv8MoAmkmXVUsepnFG9022MhktV6MZcoh48TYpPMI_gYnPZzBNdnFoGLfQldk19tP0abAruBH3vfk40q9txULqqHxMM0IJvvSsnJNgiZk6HBY4_I-_v5d0Kp2-FUWJxc8h9nv1RU0k2NrQrmsTbLZT240QCBsICwgtlokG0f_xZNEZgzqRMykN3fl8sjibs7Do7JEQXE7ByLEoor2OQlbaKyTCCG2j385ApJz_E41CGl44G8j1WGS0v4POEohvZ4LnjdVYhejLNYDTRnIJVw7lV_Eo3jdLHi-6m_yMX5cgHPQ4NmD4K8e0wpmFlk1XXjphlUwGafAsPpn65MVsZnKNpMPPd92p48OvEBBb--nNSCnRM8F3WpZ8GQm0YHCkgQPnatBdMZ-8P9_q8-ApvbhD52IKqLlU9y-8UmVIdRMo5-AKQe7ef8kru5QtZy_Q6L5oAOrFeSiOHG-MFuoPYaf4kfV4p0P0A1GO8EOrAvcMhRzQjlbuhnIa9QGBTMCjP1sFVM2pimJZbIFqpnQHUtSBu38fBmOe61rovvfvLu7hTcPD1WURPz-ljKJP6-eMy-tOmN-FYl50QFoXtWEOPs-bqb5eY29r4KUAR3-64HtGxAghmE4Szg4nW2mjbbKtKAEtgoGHKf3_d7Of572m3HzCZOWiovhkqtzUHknJKpegwGNaOjNLbcDg9TB9nrZJSp0c1gM7xketzd-i_touybcnMJyKvFdVzelx6whP94aT2_2T6UZQjQrhXmwop8ba7MuaGyIAyoTzX7rlFra63U2xlP-tNwWHUWafHc0olWkhHLQOodtrEfhSc6WOVlwX4s30oYZkeOjM9vkTOqM01JzYWx7-j_anZ8ozX-F3nZv279vAX1mPL47LTEO8LjAE_RwveuFsuylmXPGGT_o5Ugqhc3OtbuQTWiRYLFMkrd_oAABBEITp_do-rdC10Hslx-3GXqYmOVAJky1eTqu9Wru3xILKBNLJ0iMoBdtA_dt7lL51G805NSGI5-5N7_Tgvt6sGYT1fwdYWXvQ4L7CZvMI1ksWykAfJVCRPyFI2srGWQV5WR_6sZ4RnMRTkgjbgIY7GPy3V9vNVp-4C1oB9Faovbk7nl4DXzZ3VBmHPv_RfyOip8Hw51fvu4tl12eiw3cU3ANSK_apHHKma83XeWvPlMw8Rzd5uvIxZbkoPcS416qGMea0SmOOJ5oOoZSKXctrg8f0-QxyxqWkzZipCMFUeKb_qkb4FhDD0TyEShiwtK_4jMwP4s_iKmHZ910-VoI-62zvjdVXCBckePnao2OPnWL-zA-6tZyhKteYUmp9_KEyNLRzJcT2J2rz9GTwQe012Gotj-RLbp455Vr3Ty23CG90IGMJNcBtFEglR_DG8_AhUMlUFaJgZLloV2ENjnFbqzIPsoy7xNtVRzZlKk3rB2-dKX6pm4tfaeIrQ2KRKq1RFZc9NwiLbQBYK5PH5TRUrd5fZOLO-BfTZTiJqRi7sVw7e4lEGbIOmhtpjcQEIKwmFN0mTbTUzukn0gwKcb9GcfkqX3_hk1zIvuf-63yQvZOYvtH0plJk_mE_qPvr3aCCdo_g4zWIvPlqEqVKK7XArGuDJtIBZpD5o29mr9QTVmfAujxUzSDGW3XCr_EEvOzK1cB7Hef9h21DKcsefWkjQC4rFsFVnmvk9GJwiKUJDaOwT-exmf4GyXHzt9j4HXQ1timPvySpciJ1i2sR5y4VvN2OSTAXaKoRk5hDLB7HWvP9XqUR8lGkCet3xkO0lf5cw9_l3tplNOPzzLzamsxnyYa-SYNt4-X7bRLEqEHdNVeakpvptFdMP1Z73CDEmWzTDu4TTzNpCUC-ayHuiYApJZaXwytVFOgsSRhHPIwKMeuJjZE6dcjEMtYFTB7-tCTqkrER58rKosOTFGCmBJyJO-wYRZuBvrPFxnP7DK4yXSdpHtLs6vUUbPk2mK24w3GESuwPXQU00JlzB19B11K3lnYQ-O_ffY8_Hi4Hrn7GaERXZ1DOGWjlMp8AA31-7vgfQ\\\\\\\",1]],[\\\\\\\"8CA97C7C-03CA-4F85-9429-BB929B6756BC\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:19:37.204Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=340280&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,740103680,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5t4JFOtlfMiEZLAYqY-xxTscaAyN4COcIFRtIgf6xjcXzb8bPOi9vx2-6TbdbDfihwi1Q0Wd2JC9Q2P_ciCXPw2zYTKwHk5UBDbOiGiYkZkbs9K8C8vYyUejnpvC9gMZBwDvMfdHYtXGK672eLz8uk842GWWna2I8swzIqJcXa4ze-03LfleQW6c5vBt_eYc5d8lUc7VdRBb4LreoBYkF-UwucYqSdkNPJ0wZIjbr5Szvogx8ueUprTA_f448AU-KNGOD_RRSYSdvptNIVmyNgi69E2UfwcER9iaBvM3HaxhtoEYwZyWHplWpBodPsjQoKFjcebRzWPvdnYKnc9Mnt_QCz5RSJVWAItBcuRFLxvvtLHn8BH3BCi1JWWTZH3eDqXFDG88Euk2bOwu7FWMv-Hc9aPVgeVr1vihQFbZdhAQopGPVi_ibxINa3hGn7no2ErB3U89usGZ-fI8u_7I_oEknOtyeQOpHnZx-6VUW378VnQcheg8G7Ws-NMQXcX8gcuTVTbADMc9u36-Y75I48tFA8TDAKeWvge0Iamrl8K85ZH87uo8mMzwSzZxJbr2Ldj5OoWxhZgXjV8PpwAAlUjs6NuW9w4WVWgwbL1EJHTEUaKauwUXTP_7NhGFmdlzocxaDCAo9B0GjvdVo1iXMSSoJ7cLq6luG1C_KjOdIkEGwKz23yfBD3LKcAj0fbT8yFLmTKDYh06mN0AbndFIzzwE1O2cmc67Pk-WlqZiL8YKR5IYXeVYIV_F8chLdFBA-juTGgdV9epeyD5E2YeN5SyzlMlihdXhkB_Hc0Kshf_by0ilJwaagms1BnHoBiY_cs3-7e778d0YaIARcA-rV0HOAuCrULlFGZBZXeSj4oGkVLy_Tjs2WcSdQctJujGJnd_1LMGu-WJQ7WJcpcWzwIStk-b-wSCRLBffsALF6RvCSL6m3sqD1cvRf2k4SRgWyQmxo4V_2VPdNiJPooEVZRm-CDiH1-eDix2GFyKLk1X0sw55squJpwaFVLMIoyZ1luGjjhiHPGqSmlSYzNHwEmpT0Ga0NXoOr9b2LaNgi4P03gcxtzjaziKzFxOrCaAkuk4mtSZUw7zo6zP1OFmcL0sktVGto_rNQZ_V1AO5OEsD5Wmbgk0BrbAcmMtHkselpfbREFzKIB8FkX1LUVJ6rkQNuGKd1Yqr0zTbTafyYJJPIo2c4aVIhu521M6gC8sQ3syEMB14UfOGl1DWyjyOlRqBdZFqYh350WXVu60rFRq9nJk4ctNrWrquNERJiAQqgYXByj_5ZzAamsZPIaNVDVdbSHM1zI5BwWoDWAkVTVZn3U3eqP_3jeUexII5a9yAwCNXeA_8Yl0QkTJIeQDMdRe6aDRYAMZ5NoIjWUPU-iIJARaAmPBS79X8CesBjArW9x0JzgI7TivYbU166URzznooZM8hxx5DvXOInzpZMEfXigkAkQphMdK3hKNxNdyqUupOEuodUMov0qfccwSkSM-lLt2bkiV-STYP0SZT231X-ix_-_Jks5VKy8OvxAj8VPjMeKlDfU__ProiV34dOyXIa1uHnJQ8KtC6I_r8EsE4a-03ld6IuJG8Zem5-O74sUUTMw7J9X47cK50CS6fIerz17vpSJs0_1Sz_V6_vQPoUZ2dXpvG3MPaJZ4wzoU6RZBlHxWFRMfB5TgDDCTAlu4u34es_P0RT1tg4HwwCkQFgNkJ7V5Jjxr297QHcofL_VskhSxrKywYKx61f7e-EqC7fsDMkO7Go4CNGj2kJiMqZbFHYiIX-Ml-pqftzg9g8IizdkUs--MJuEGgN1t35AdnF4S3iWbgNgEIyK9tJ3_QIRFbT7n97HlVNnmfHGvf4qMULGzLSivH24cCTkTNBCuB7GS6FuYUQl8V6lG0MQig-xhfY05pSpTxtBgFgNfgi2-Q3_NQi4Rvm_EcAWQIR1pqyxGM6M6mmK_rA55RDRNZZAMGBgyr6aFhvfJy2KWTuTZDFLX2gYQ8j5GFGfl_tQtscExIqPN8I_9e3-_-O3oPUgFzenLa3oQ0vnlRtB0NlS5VB1FHsGstANRaXEUGyv3yzxdZvmTxw3KgXf-Tg-BFpyiD0KQuPdutDP_3UYKL6aq3oIfFF04y48BuXg5JI4G6e5S4DEgxvBeSpe2V9SzXzoRroJTwCvqUrqsrenEK0iGNewjuLoH_Whp-Kn9uUx6XSC96MR3TetMbUx2pUiHgaQ2WNkN-yaTqmkt38mXd0pjd6JvcTDJ4ow-YafEz9yNZWpz4K4jRf6PRoI178CS06G5HUoGHev07o1cPbInJKXptsyR7lQ-M2J2MkjjZmAAv7Ul3ZKvk6Dvhxd2ikrl44P1XrAQ3ZiYCfPHmwQwDfXJMoZy9B0KRJHZpOVyvfL2TCRXW--2THzvMpaRrVnp1Xq2oT0S-efduXmLVAIG9JlK_Un6DQi0s9OmWcqTTpg055lJM8hGbYD5K9Untjau4oIxoU\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"6E307E00-E991-4D45-8B8E-0B7823DF08DD\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5t4JFOtlfMiEZLAYqY-xxTscaAyN4COcIFRtIgf6xjcXzb8bPOi9vx2-6TbdbDfihwi1Q0Wd2JC9Q2P_ciCXPw2zYTKwHk5UBDbOiGiYkZkbs9K8C8vYyUejnpvC9gMZBwDvMfdHYtXGK672eLz8uk842GWWna2I8swzIqJcXa4ze-03LfleQW6c5vBt_eYc5d8lUc7VdRBb4LreoBYkF-UwucYqSdkNPJ0wZIjbr5Szvogx8ueUprTA_f448AU-KNGOD_RRSYSdvptNIVmyNgi69E2UfwcER9iaBvM3HaxhtoEYwZyWHplWpBodPsjQoKFjcebRzWPvdnYKnc9Mnt_QCz5RSJVWAItBcuRFLxvvtLHn8BH3BCi1JWWTZH3eDqXFDG88Euk2bOwu7FWMv-Hc9aPVgeVr1vihQFbZdhAQopGPVi_ibxINa3hGn7no2ErB3U89usGZ-fI8u_7I_oEknOtyeQOpHnZx-6VUW378VnQcheg8G7Ws-NMQXcX8gcuTVTbADMc9u36-Y75I48tFA8TDAKeWvge0Iamrl8K85ZH87uo8mMzwSzZxJbr2Ldj5OoWxhZgXjV8PpwAAlUjs6NuW9w4WVWgwbL1EJHTEUaKauwUXTP_7NhGFmdlzocxaDCAo9B0GjvdVo1iXMSSoJ7cLq6luG1C_KjOdIkEGwKz23yfBD3LKcAj0fbT8yFLmTKDYh06mN0AbndFIzzwE1O2cmc67Pk-WlqZiL8YKR5IYXeVYIV_F8chLdFBA-juTGgdV9epeyD5E2YeN5SyzlMlihdXhkB_Hc0Kshf_by0ilJwaagms1BnHoBiY_cs3-7e778d0YaIARcA-rV0HOAuCrULlFGZBZXeSj4oGkVLy_Tjs2WcSdQctJujGJnd_1LMGu-WJQ7WJcpcWzwIStk-b-wSCRLBffsALF6RvCSL6m3sqD1cvRf2k4SRgWyQmxo4V_2VPdNiJPooEVZRm-CDiH1-eDix2GFyKLk1X0sw55squJpwaFVLMIoyZ1luGjjhiHPGqSmlSYzNHwEmpT0Ga0NXoOr9b2LaNgi4P03gcxtzjaziKzFxOrCaAkuk4mtSZUw7zo6zP1OFmcL0sktVGto_rNQZ_V1AO5OEsD5Wmbgk0BrbAcmMtHkselpfbREFzKIB8FkX1LUVJ6rkQNuGKd1Yqr0zTbTafyYJJPIo2c4aVIhu521M6gC8sQ3syEMB14UfOGl1DWyjyOlRqBdZFqYh350WXVu60rFRq9nJk4ctNrWrquNERJiAQqgYXByj_5ZzAamsZPIaNVDVdbSHM1zI5BwWoDWAkVTVZn3U3eqP_3jeUexII5a9yAwCNXeA_8Yl0QkTJIeQDMdRe6aDRYAMZ5NoIjWUPU-iIJARaAmPBS79X8CesBjArW9x0JzgI7TivYbU166URzznooZM8hxx5DvXOInzpZMEfXigkAkQphMdK3hKNxNdyqUupOEuodUMov0qfccwSkSM-lLt2bkiV-STYP0SZT231X-ix_-_Jks5VKy8OvxAj8VPjMeKlDfU__ProiV34dOyXIa1uHnJQ8KtC6I_r8EsE4a-03ld6IuJG8Zem5-O74sUUTMw7J9X47cK50CS6fIerz17vpSJs0_1Sz_V6_vQPoUZ2dXpvG3MPaJZ4wzoU6RZBlHxWFRMfB5TgDDCTAlu4u34es_P0RT1tg4HwwCkQFgNkJ7V5Jjxr297QHcofL_VskhSxrKywYKx61f7e-EqC7fsDMkO7Go4CNGj2kJiMqZbFHYiIX-Ml-pqftzg9g8IizdkUs--MJuEGgN1t35AdnF4S3iWbgNgEIyK9tJ3_QIRFbT7n97HlVNnmfHGvf4qMULGzLSivH24cCTkTNBCuB7GS6FuYUQl8V6lG0MQig-xhfY05pSpTxtBgFgNfgi2-Q3_NQi4Rvm_EcAWQIR1pqyxGM6M6mmK_rA55RDRNZZAMGBgyr6aFhvfJy2KWTuTZDFLX2gYQ8j5GFGfl_tQtscExIqPN8I_9e3-_-O3oPUgFzenLa3oQ0vnlRtB0NlS5VB1FHsGstANRaXEUGyv3yzxdZvmTxw3KgXf-Tg-BFpyiD0KQuPdutDP_3UYKL6aq3oIfFF04y48BuXg5JI4G6e5S4DEgxvBeSpe2V9SzXzoRroJTwCvqUrqsrenEK0iGNewjuLoH_Whp-Kn9uUx6XSC96MR3TetMbUx2pUiHgaQ2WNkN-yaTqmkt38mXd0pjd6JvcTDJ4ow-YafEz9yNZWpz4K4jRf6PRoI178CS06G5HUoGHev07o1cPbInJKXptsyR7lQ-M2J2MkjjZmAAv7Ul3ZKvk6Dvhxd2ikrl44P1XrAQ3ZiYCfPHmwQwDfXJMoZy9B0KRJHZpOVyvfL2TCRXW--2THzvMpaRrVnp1Xq2oT0S-efduXmLVAIG9JlK_Un6DQi0s9OmWcqTTpg055lJM8hGbYD5K9Untjau4oIxoU\\\\\\\",1]],[\\\\\\\"51E93ED7-D7DC-4B1B-8631-7573EE11BE28\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:19:47.251Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=890195&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"56A691DA-B990-4FA7-8C2E-BFCB39F1BBA2\\\\\\\",\\\\\\\"27805E29-F7D8-4A99-881A-5C2162C87087\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7SdjC6kbAuNzxqcDi7gCbbe3n6EaOGZ0DMdbP51iZCfbrAM11ZeBtRb8eHpfssfuaG6aMWlHVN1JIYilhcI9jNwwmUlCF7Poc07eLIVOU-pmns_uOwNlt6Lpkp0hHm_1DiA7oXWXP4XMXhv9aaF98kS4TLJ2T_vQtYe0LjAUy2IJmMQ-sN96BcN_3-hQRH5p834HTI605tMtEqj4PKDYj4Eme37-qLr0gR9buXjQiGXcmGNifv4FGjqvZjvqVStLU5W-OFw6F4Y9f_bkLj_5n_isUXsIlSRgHJk4iW-9yHbppX1gor9ONV66NIUlwRkysvOddhAT2aD35tNHZSLm6Mf5YPQ-2lcYvKSt04HipALfh8cZETI_zKALxUHtJpEH1BTPiC6ZeDcMREGbHwXD5-1tw6puGF1H5tYeImk5H_3AsfS9Akmpp8aErFNoydPpjqGz02LHTksLjRFORy95DZ4Jv7jatY3AC8DyYlFrS6H8lHcGe34qWi09o7QLZSJYmg0GkVCQhpRJk7gPFBkm4ot3HoEKu9Rx9zmliutt-YP0qLCzHIzfTTYODKi-fZvJnS3S6Wjm8Y1Sv9wz_L76fDdp_A6h_tw8OYEmo6UfvYiRjUok6fwP9mz-nShZwPF6Qhan1Wv4YvhQX8TFE0y6aZhQes1yJ21eF9lsrujfdH6hA-gnc9W0HiFtK8HHNWhtsVvwXkOteen9KiJ1fzjG6fN__tEcU1UFxCXwj3OQmKsk0-BpsgAN8kSe2egvr41alxScLGRAlLdaVEZxwFyANW-v7EGbzRKd2SdNmMauf_99NUGS_iJnW6GINCz6cf3vnPq61Q1EqHDu1xI_Jcdoev306mxaJdXk80-7-17If_7FGUIxCuPR2-GzKNxwDnWAFo20bka8YZp8FqG4p_IKIe2AX7gKu5iER-TrxL_DpOGor-4XFhYt99NRxA6tCROFRKI2pOXRKcIJFdPJBx1saeXcdZN_YnN1dhVRP8-aSC9VXsW5bF_sldIh8vb41cbrhppyz9KVsAiqTkP0kdAaZzC1zBY1dXb5nXirbcBthPToe_MPvsMlSIWnponUd5zMJZRpr9iH8Et7sd-CIwc7bxsIEr2zumvAJrerPZB8KwYkw9SKO1jeT1O79JMhzhwGv1zoQb2d4za5mc3q-hIrEz0oNqxQ87QZN3LEbaa14ceyEHYQeXFTMdqInkM5yzoNIxHjE5MeR_v3mPiX2IOcZ3H-xWq3QaJo0NjCI-Vz6TBhM5cbyPt6yUr_wBG1VGYtZR_GOq0JjR24DsgJZ2-aSY20NGsujoKB81OU9iMrwngP0WX0_10bl5z87-dzl_csu5ZEzChHqpXlcwsjhX-Jj80r7KnkoJ9B6p_39k5HOyYEBRKkB7V4_AWgAz5N-pgMGCW0bfwNTZrEOi6Hl4TUBNK-0CTl0JzN-VbRzUMNVWU2R4n8egInb1vm6B3DYLPHgPPhM6HJk58JO1uEtvU6v8eBV0thXJPsklCVIlFD2NvmoxR2IKUHFE7hv1Y9yOSyRKe03abEQM2RZoXhHaIRYneKJ7HoPZC4X5UD4KZmdwVGLm0m_pLJcSqoWt-QOHe1Dh9lTkH5gdutg-7KJowDLpxee-pMwjGwPGIGqFCiSQQ1KJlcwhmf-azeHK9QPNomwqnSyxkpvNSWMOMhXW8FKAyIvrgOqQGr7WHlGtkRkoFAX61-qrR8gcwHfHtoWhnLyy3NNcbiLlFrqH7e6qiBfAj5ZtaF49j8UIVV6fAfAs9s0nvdW_0L-1dbPBbqgLi4KrZd1JOkRjITB3peNqhk_BESeH2covHAyMpIUEc392QUOy5cm7sIJRqBkN-n176pGPnvRSJZaubnCRIn5pv5ZXtR5VqO1DQB5Erv78mqmY7HgHiOcAbWoqtCWguvEBAuYX-C9QJl_jABKCDjqlqaF9UntJQ9atYoQB2MYIblWVEjmnI-VrmZjSuqv1MId2jym7omvWYLG-KULhtbSSk_9m-LeLtVsCZrhi6w10R-GQszwcbTLs6UhedF1OhNnyaJSJG8nqv2B1pVzP0LkWT73sBz1AnhVYj-qXxXjxJuEsp5YVnIPd9tn3lg1UbqvlWjZcsZCB8AMsEwyh4gsw3ABh2Pr-El-UyP2aoJ4RAfv2DGb-qHHVywV8B5KV8RluV2Lk9Ua5znKnStamH4_b3-YViMH0ZSBeSGdJEBcw_WXZij3NcIwOg2Sai22xjYa2cX9h8tuzBLdc7JmJGwA80DfRHdcaKtn4UcEx5kRi76OUFmFXgabExVXCOXbANDyYp4khw5wblBuIIplLWAsGch7F8GEq9oXYDsSYSrtOAA42H6LXC6OPTgAboeAR1mWl5k21TzN0WaWZSP8_DPMgWbnXf7DK9Qie8ffdg4XsjmiekxhVvi6e3QZVl3hR2CS5uJPPxTYK6eweFCgVV7dWml72yzi8MStPOt86uqI7JYZWqVPbnds\\\\\\\",1]],[\\\\\\\"13D6BCDA-AC4C-45A9-B9B5-920A16D93AB5\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:19:57.220Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=135527&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"06F044D8-FC39-4AB2-A3C9-77B87F4288F5\\\\\\\",\\\\\\\"4F044CF2-7E5C-4BD9-A3CC-A4A4AA4E3744\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6z2EnlrhKLarabzdmLD7Njzl71esOwZcid_xTQHEKAbOPcBWo_ABZJmPTXNAzWS-9ydCAMF8bUTfkZ8QyeLk0Nzyt9lsUfLqw4ASMqMZfSMfWtxapuBCbk19tQdeYG3kJGpU0mQ_9vnbOy4Jt5bKXAwCKx3r8fKuJU6JvY3Sv67V1WSLv5bLkXEcZnBZB5AZ-MrWtsiS7k_uuGi6qNxUKic4VC_JEfmeQuHHapg80Ts-J87M1XCB8F8GdoziAY3-GtR5oZTXvq8nNN2Uj2ko1xPo7A_OgRdaG4Z5wrKVIRgIKhRfFCWRvYynv3MYhKLMLl3ke0Uk2-r-cCPTs09Hway7mW5giB-iz5_lTlqPqLPZAu12d3igOLHRECaLxF0keXwL3WNVygfbfq0qE7QqfItrabSX_OPWhmHF30LSzlH20Ah11DU-EkdjfNMK8UNU0Ugv4EethtQXGjtsqtdVsuESxPo_RXy5mLQTl2x9sBECnvBiDmqbp0u7NAgkQ7ls4BbKXYfwzDC3w8EkjN2As5ZFTBGCLs9uR-2ujkhEDQg1l0qttsMaa62kvgCq3afzg1AZNjRFhyxb2lcqfKM4ru3s6S45ZGsEilspjPzc4oqAAiACD3d5CbXUwTXNPR6-AaprKBovgpyIHJA4RMqktWXqK9mNA8hMJ-KdVdxI9BDGjgs5Re49GpDfBmrVz6uBSvbLXWHnfeFLiWYrc_C1r7HQaZAPUdzadjqp2YG7qSccWffN5Ak5vkhf-Puw8XzXIZUOqsUB3bI5leCWvYXIOcxnlHbPVppnmYcLC6s_cx52f0_FGcIxF6iq0HeCcniE6bnDes0reQ1k88kxUqLZsXATtEdPIlymj9z-3CaPS9xJo4cF01dYXUgEwmclRBvKfKCY4gTERJ6fZxooZIvdOReMSNTV7iM456S0h4sPVMXozTw7EsFjOgYZkh1gMVgBZ6XJeBNg-vustrGPKgdsdy6e2mYyDKx-EXs5R-Dppn5pDNf95wEMy_MgxiMfldVxLO3LmoZst3VXT7McwTK_nct_CSH5e04jMrhI8PxBq16uTGPcUxxvUJi0gKS2-F5V0vnAIf_lN4Lmo6Qw4h92n8b2cMNa09tQjVF8ecIGkXWy3OAicHwVAXdtbTK21Vj_r1N6BSaM4PW16gxPGwP9Tp8debAKnYUCVTeRADhGX-8Za5vT3aHRdKjqiyE_RW9UZ-hPxm9saCI5K-G1NUH2I_s6WQLnShjl3_rs8Pmufxcbj0ZtEzXbcjtQobLCNEQVL_OJ5_-fm4aoVVW-smRNwpKqUcqevdue9mfbtASyZp9UWIjOX7X-Y9mEqYsgMOA8E5ImA1jfopUIpo4xIHTOd3BZuSXGoZ7RPiYhyLrf8bj3cLQOoTJfp5v4zQT_rDiBpOW8EjY68l-mGFTNJL2nd3FmtlC75kUYLUHTwQhns1KUV4BM2Up8p79FGcOLFK1RflXZTZ834ThWARFE_YtBi5D5arqB7Wg14BsWDkLz8w8KE0Zm-eTmVNLCu771VGNbDpPpYwxRAjg-W3SqryeNPWjknnc4XOCM4RMA_qdqbj-0nOcDNQnfPkMMeq-Igw0yF94M2k2sDn03tWDYbRTG5n9nBQ2ZJ363MAV9lq9HYFq6sVxiotRuhXQRl6N_8RIghhO_wXOC2IHqGbj9X90ANGuKqzY2IQfiuz9re603RQPDy88N6qNd7dOIHIkHGAlgCA-oFoBK6hM-fbC6gA8MzfeC92KCkPNgulEKE84hXz5CCBkpsOFCX7opBRVmhFGxWHb3_2P5bttbAg0JAQkcmGtZUhLtaipXLcgFxjTrFCKbmw1sItKT8_fmFsAzWpAqZo0p3MA8EdF-jLNES4JG5UbwcD25vaFS-xhRw7opyGAbN_LkH1c43Gt6z_NpJ_5B6CnyrmvjW8uel-8X4X-X-3su6txpXG8nUS2Vo_rtZVHK5WJdXVNW1RUtP2hML3iKNnrmAxISNvTLu9tPVzB1xS5znGdsFaOm_S569NV6HjvNsjgFbBEzkAB5PCW9AqtZ7StX0QEF5ZDAiCd6h_OfqcgR9t8OMgayeq9qu7fF0kmDJ-qWcvdXdHmzv6N0W_Ev9zHjjNtm7RUR6k7AS73FCDz-kTdTQDe_3mN8fPel1fNt2VKleLNlX9LJprhmNXFTRlDZktxiPXNe7mVQd-k7ndTXSRRqsV3brzUQ77HlwTT7dqnbWiZ-Jt4_-jCh4FBNZsRI7OZRU4eFLHrpkFC8seJCly6lXW2O7lnLG6zwoN82rEy6CeEhpjNzJPahnEVQi5JS7lmSfCQnJCKFkWVXJhAnR8VHxrhFBrbXgCAGGGkZ2lpwtpk-dBXiRGmiERCpWu63KaEly_hw0sMqCGjk-aRJDA84EkfxLuJR4fbFwrsHKbcA9951PHgWvJ6K27--9PXO9TfAyd6u-euRhEDjjK45LoKw\\\\\\\",1]],[\\\\\\\"70BA0B27-A59E-441C-8C2E-CD8E9F7C9142\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:20:07.236Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=828625&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"D887BB95-D45F-4884-8BDC-E3F44D68FFA5\\\\\\\",\\\\\\\"DCDA3CF1-DF42-4053-AE48-E7A7054E9DBF\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7YK9uBA14Mnal5eZS5AIVpD4X6oOQpQ4z3H3bUdOh2UcJwS91qBOVhg6Gz7MXG2F483Ha8-z-a6ygTvpvgORnPO8UB7Z7ZKFQQgNLgJECGOz3xzEh2jKYRF6QZNxik9DuiNT2dNZze2nu1KtAhO-Nqbyt02VckJhSu3HUm7o1E3sXShz9TpikEx-NkpSZfqXSA7KKn3nS57orzeT7IaOVkHpkQAhWu1O-IVxvDADb1GBXSSvRd0xMBM8eVhpef0R4Hxwb0B_yYFjTYaXMXbinNGewUzqkLtIkNcsAB5nX_dZ58Yg-WYJebHgzUQIkVGvA98Wt-OUatfr3vEERciAkzlK7LuHqBMsZArpLvyewP3G-QeIDnN0Hc_SrXjpvraYayISWTPnz1AQvdxAgcVgP-F70ky6Ot6T4Lv3AX6bslusk6B04UJFlvYhzphX69I68cWEJCQ0KM-ehnnANS6z9idQ5ZrRUlEYDeD9N0xNm82U8vS4M2StyaXSHdgb_IssGkLMMkYIVZ-5jYe08m7p5cBu3PMu34AxigGVSmEaFVcS9hxB4flX-q7pVH7OtdQTCNoYLJGXV2P4wUTx32n6_30qk9P8B2MflnNLmgXt6xi68UNbLZ7p3Gqap_zmb2GkA_CryP0GQ7rhBvSUogha15Y6Syz4pSuuH7aUMtJuF_1P7iy3T3CdeIYHbbPBGxPkZpCuCTriVha1u2xol74plrszWp7Po6ESXfbdjd0UU4AGbYgq10UKxl2XGuECT72oIkR4wt7x37JITOQyw9qHGgCCB9sjZmCZkPSI92ErmzWfibUbuuTy020Y-uYf88YjgdYDbGX_Jbk1ajkbtJTy1iv339tmVDk0RpHykwk4o5Mjg43tRrUQ2Q_r4LC2h5LilehZHg8NnEP-IJZUuF0plLWkHizlUtzKPt7OFFsEgG41brsZhsZ_ActBKXGsoDIXFihj00VfSjHl21uDCgwalKmq-tOHurLzW2dIuzEFOLSzcYJ09T166N0FVyuE7Yow91PO2exZ6Iq5krSRLSJO-tgp5x4Q4L2E_ho4s5Kkkn2Aids50DgV_Q3RrHdm-RW-LNwh7k965nBPEJGJGsKoq29pQW7Iw7ZYlJyi_1UgfIP4H0WQPmirfxYAoaIwMLWb0j3sVXIpvPhul-i9iYrlG-X4N5pqdcCnhqH1aHXwOpx1KrWa3fTLSLHw58-u0aNh_KU0SpUajB-R64OsQ1wkU6PGiejL85yfKTbKP6R1dImPQJBvYzLluDWPVuomF1l32tP6PNuToL0_TrrOSqTpH8xL9YSKQtWWiDvwLCJMCZ_8s-eILB5t2C_GFlDji4nyhkX8EISwO-gFj82MMBzihq49r-oUCrjMBsIhX9MKcWqhpfqsOt0GnLFcUBAxZ1TPDDpvQpK876MFWKYdNyWDz9SmjnwmwzGioU84H7EizAF7nMzpmprqE-nCfFV7D-RDQHNT1kWEb7Y848vUBNyut8sisAwgaxh2booc1cxuwThkd8hV87u3154zmjtXPUNpUie56rQTvzreGrL5EZDmoXOEGqSCyBHKlA9Vhj1f67oRzKzr2HPX_Xr2VRe4OPM4NIB068DQF2vJCzupg_HY95Vx9FKZussBrZk0u-67SzVf_qUn7pti75L_hLMZerK5PQPqGqD2ZhloQc-LsXp8bwfkPt11F5UnQM-jLWmWowvP_wCqBxGq2sdJQjSZjDLxvxpFsjKfEWh8y49YjzIXj1Q-HBaTRN2xRLyDgI0V45cKELI6OCH6AwgFMSMn6LoJyiThmZ9e0mcWHv12irgzBp8Khw0gXt-Jv7ZiRIom2_LXPfcqSwhFrY-fnX9uddVcqUr5v9ZUhUJu-jIE82Egj-8J8PQm7HwUjs14zZwY5AXeyFv7puYmocIg7urLLdBcig5s9P6TamZbBrt403lfF-g9gIRAYH5kyBaUaSBKodhwnIlcqU4BnUZNeVaXirewsKL8nfdt8qVf_iuqzkiupL_edBDYyN4JL7bfeAxlL4NL8KHt8TR9ncl4DxoG0MFSafoYmPyjrPV-N5GKmlhw6oW2spjLtdKyORnQIpjEK1VCnA2FrAUNvvet7vmq9pP1csbdXQJ7BXB7WNA69sHRyEZ1Gz8JjMatwUcEEdyQr00AE9K6hGuVLeAmJw6XDLBPu91wFozQrKE_mf6xLJY5FfL57vPTIeYsikZSxvCaSbHHowGhsVMYX6HBYX8eYy68WxEmGGv_AE-Hq_7ETq5-0_RwJrvLqqJ1kTaUoCrxRmqhulRknxa51Qj2JV2c9_WzYDBfCB9_8pakdKnWIQeEKd-xN81TBNFzf1R7QWu3jJQx4ZPhf89UHki4TVaRtdpTiIKt3LAv8dE5udV9Umn6h4kkwUrLJ4hARr3P0S0CwNl0hS8_M8hfWCZMgRX0E4GzHksMbTGvMIsrkby650FO0qTiiKAcLlQzW-N80sNN_WTWtFzfg\\\\\\\",1]],[\\\\\\\"70E19F8A-5A62-4550-93A4-3FC3CE123516\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:20:17.231Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=125855&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"2374E839-F2E9-4C58-A0F6-C2F0F42BB101\\\\\\\",\\\\\\\"FACFBD7D-6077-4154-B91B-DA74EE8A8D78\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7OXK784tTnLFqRwKd-SLXdWZh8M_pOFA1Pl1Ygc_2WL5hg2oq8jEKnTSZ9pKqd23jcdmq9NWMKaXhCNx-tIzlxG1uQKyQPLaLFlXH-N_Y_-SCRILalM3M1ToaYKhd8Z3ePO05iluVjXzQ1hTay23C8K62I4pF-n-8R0k82ZYoCl5_tJ_WBdJ_OK65SGtF4QoUMOUMANbWdk2Ab96Bo_DcK3eEqHMVjywAly0A9QaV46rVH73oyQqkqnIS1iFnPC6EzbQ78e5manTvRsmretDVNIURe0-_bhCvsd6a2MaH2hWsapURyNC6FFHwSfActrOgahZYMU88kZSi9kzCPgepbw7K0ysvi3m_Ya4vyE2maAQEYtYFewtLTSSCgfpyyhWdswylRxydOqe1Yk87JPuQiFOlHEiiqpON9v_WR__--5TeFheMm8kvDWzG8FCWpfYVXk_M4DWH2EaJfeROd-nfDwwX62eYZe0qppl2pRNJ7wj0cXpV-Omd8dfeymMJJWoCEdSFJhfxZcearv1y84cy2L2Na-HX8WUL7yZfarXAt92-MDa1RiRGhn62sTs7I-y-NDIjxosNsJ_ytDwJo2in9KX3MGx7luHneWgNEeO08LWXhdGoK7Y5dABaf17WSjktzEEDBS1x5oeneMq3rggbZTtTS7gUb6SHE6H6luK0uwE26kfeFJZXu9tO0XP_97VY2DP0lYqtDjLlr_Cle98dd6GV7mMd16JyRbLXpuG_6EoYvBzi3_Gc3AqQ3qWp5rxG5slqQFfq2ptSZzeuwtwFLY43-fg_JkYj8iYV94r-XAldMeS1Qa_fRCrfe5D7Rv4KoY8l_9rMkTL5VWRovN4Lr7IaMdZHFvFgStEX75xRYu5pfo3JL9AqkJNAB3zjEA97WIyB5UbLcF1LuPUrtpzo_KgMSiHcJ6qg92OVaVnNTXU1SC9-Jv2HAVN6eQpy0sXl4RJUqVm20YzJH8tAxvJ8XvLbxoDgquM_gJ0-EE43sIKi_Hsp1ePJVvzErs4KaQrklBbo-EpADzGK7rkYjTCSjNMBd99yE4YqIPMVCrNwwIqwaU5ums73Cf_1GQxAWJIxV74xka7FEazpqXzjmXFpyvnxMeMqv3I9FaT29N3-JSgBhvA9yrNW1NNjmJRuCyMeOEjWNw_dQljidgxHOTiW_HdLrJhYybtYrIwDbiAFZJcWbHY7QxgzdNxcnrs7wRg3vxsu5xwh9O5OXEe2shFtd1bpurBJZ_drcukAIkoQRTKsFKOSbfw8ezsQKYdQu-ayK3-H_E2NQsQYS5CXkgKPbQEhU96pgoHvXklIz4y_b0oa3cbNxVuR8X6rcRj0D_XPRzQw_3LMInrOAXfW2aCXTS-Y85jEaPdkeHsrGvuR-v_NG95ie4QOOhSA1ge6h4IsnPn4ZC60siU8WZqLaYfKlKSnxfELI3Hr3BvmBFJinxE8sZ9ArJWgjv0Sn2bd_0cvK0L9nVN7Cq-XFkapy78iHyyDDY1u4I45PM6ZQTBfMLbNmG8zxGpp0BPv79l8NWLQcuF2rxLi52Y2HwjHxg8wAjBs4ybqXJtyY4eKOb5Fe_JgK41nQ3IbGmIdGFLA5xIfHWQd2-IPRfAGb-nq1hqTEL2sJ_VIQid63xhdOsDZYKxu20bCQ7j0PDtWDszNZrFfwkHwnGmMh_o9HKHMU5_GvIbQQB0joxdn6gZBwxLas5Ruy6QPC_DIir68fEvmOC-esHw3V0BbgZ5yWX0Asn11RWpG6Aolr5VntZ2fvjsp9egSgd3jGa8U6P7XB51YNwVlplcv7vJAtRDc2-SL8ID49AV-6AzCIkf5HUEQ3R0ROz4eQGSSu9C-MNT2HMLPAKJkLXl53mjDDoofr-acM-VBeTAAPVUsMqpDos70alY9i1zvaFnuRGWnpYbYOe5aHtMJsE31thS35c0_JEaNt5lvD6_JdkhHM8fesrtcGPDPMEMIm38ufMnx_o5dYT2buIw-Am8WmoZYVbpVqelYq-aNNYVoQfoAj8pbmeSY0JDCIZfrL7FSbVDvvvKPv0uSN066M1U89Vm3y7sv3lpMHQuG9kExeqwvtuhHMP_J2ufH-dAb-zHQZzbNQbx55dcBUlq3qZR8xZxLmOcoGdkRBzhumn4EyNdeSkFOQUn3O5WJ8djnpWq4DZblwXt5gqEWS6tn5k0Ik5r0Lr17_oZm3-7JlmZP9pCqyXHtDnFCYhXs06BrLA-7wSwLkZ7TGU-QbiCM9eqf84r8742cBQWiTLjvbsPi5nEbPM6fRpA6xYLgkjVHRpT41U8q8q_Gsb1EqGBlsfaushPYw4Rm3o4wkeOLxWk7R0Fw80Aqkq69atkiKapyhtnPwtJVrGqqg7A0_8_K6Slewo5XjFnhqMC3DwPcGLm5AalASXBiXHOm24_WAYL-A1dqM37NGmzfL-dB1j-nEsA46L4i4HGSXn32RfD7Wbm8XF1BrQN9faJbAcyQWWQ5Nzes\\\\\\\",1]],[\\\\\\\"C882DC7E-FF63-4CA0-96BA-069022F8B1DA\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:20:27.303Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=195153&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight. Character voices: Le Quoc Tien: Calm, firm, determined Vietnamese male voice with deep analytical cadence. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"58D321AC-6FE7-44AA-9359-02851CD35C02\\\\\\\",\\\\\\\"A91D18B0-5CF4-4AA1-9C5D-DB935C7FE5D8\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6KMglAtP3XOnOvao0HEvflafFPj-AV8jGU139m7XnGokP5snqbeM5eJ93DdSVZFu5FTYwXnoLeVKN_8gR3uIUGOW0nH7XUEz_mQhq4Od9TwAJe6fn3osAxlzU2GbMzZLZBHTlndzNeOQjUTiHWXjxBPbSO385BSu8oWN0mPQL7-De2lR8yiyCnrSQ_JicZA9Vizietmt_r1CDZbcbMbWZmCtNpLSNXXf3Ku8gs2l6yAW9ZkL2tBIBI-PqxkC8HN9biaBLtDcUvYEQrOKufzcOOBzO-c907P5_PS8gtvietQoCYTj9gBOfkbkCmYpcCI1LWMqDPN8z7VsTwR8qgg_8HXjrKRTsphsGvRvt-xmIKQak0r5hdmcS2VbbDe5fmJdsSJ0TnCUayAtI_NmGwKjYVFlsLCvhb2kJmuVw85wpa3ggXc5jrmLzdVjJVfY5MOoaLIPBokvl4bAfyA_eRyOaBYNDlKPyVebl13gmygkym_QhaM81DstdMuL3OSZ3xW0zxoAxqKqPwyU0w_W9LIxTTb0orTb-pYBakw1aqmoca57mzBsvTIIh82ABpILa6qC-JyVg_903x925CUltUoZpBaAwKcHFiGbLsSWWlhcQjZCmd8GgNZBTQ27eqRFC75FCHkKJ_9rZcSzzAhnnVbn5m-eAAiKcMXjeDUd7vgAv0q0UCbeR77bZ83F6gU-2dsHui_8B8SCvPnA84KB2a-nYRwQurBng8ZstGOXhSAvXrQ0YMKmOJ-NySbHR72e1clK1qvH6byDN0FkzvGF75Doi5YskXDvDbJXXUaUp-oR89T0QgJHJmxXNG-TwpZLBwzFOEzuoK9LBQT0QtbdhLzUU-gQ_vn6DiF3vaGuvGur8npvp_Zlt0GSmyTgCLfjXUMifObFgk_b9ijLKR0oQPEVOtKv6_PzaCFoFHwqHCEm15UC4JVJ5s0liM-4A-8oqbO7Q4cb6QirQr9OUKdOZaZ5wTKO0MjUngBSFBT58kOaUPHperra4fAAHcGo0fDYA_jQUaI9gNBMAxzHTxMrdJzIwYAgkNJMmlv_7Xypj7Z_tTU7x1R_s4Qckz7ZINA3mMT_3E3Iqiyf34Eg8BtMbQFjUS-TU-ooK3Net3tr6zBZGZN7oKEznEqUdBNp0d0OvFchhtEo8549xmFgT0BhA65I5gPNipvG1Nf3Mo_9Z79dLRD6R8p9tFPSjfd6Mb8yjsZ3vGhzS14L8e74GT2gvLrnS8G8Kcqc6C3pTXbVMbR0APRatAch6EB6Bqs9IkfvouuJKa6820_n0UR67M9FRE_uZo7hBlHVElq0kyWQwZ2k_Ay6nh4OwnKjHMzPYYR5Luc1Bd77gUrHv_zNyTNh9TT-9xVk7XvGLisUcy8_66VyDsUEaiGqWCiOj0algxQ0hgWisINBIxW1kvMZyuTluhbnfpowOAdLVAFYLlguEzDaqfTdGQrsk6A5kHWaeXGFePoz8fzxOeMZm8SZWKx-islmCizyVYJQHrkraJ4uP1lSQAcYNE6Cr_AGo99ntg-DAIP6VjA9VZueRKzrSTf2JVT7XxEziiZAbNj4lFkRw9awQdRRrqhdxDLYXIAR3Z-ph2hW1-qu3MD-pjVVD_dSNJYZjet3rf95RfLK3x--IwUxgwr5Bho9fJRskWyt3zcS1yG7RWdH3b0XgNC8V3PHAI8r7skg147kcSFkDzvzKt2RfmRSjKOM7KteRgkDD4LLBSNdx06IMat5qU6dh_zGiHlFSVcz_p9BiZgFm9G2IXHbx9O4m95alqjjb5h2MWUHDdzI3fOu5MZKSjmf662MbmFSioPn6Me1JFK19DgXz_RlhIlSuAD62FT2k3fXTFXh1uJOxN1ktX800pcoYt4f0CJKvCLw_jhXcKtqafjTW1e2U4kzyAx2WiDf6Gi-JtoFAh8_2uIxaO-zlBVqZmwSdy3Agor-UnYgeU7sCKHwLc5b4QFjCJSTDElgqPkFR8o7QyI8lJE3U30rBpWxZGhWcNQOwhe73MNxGiTdH8MBGo075PhF3aUbhArWOQXTYdZCYuRYVgNLvZAa0JdgjkMUdYcTolSkZ2ruJqEZ-IU-MhOdNKkEdZ93j3ANnGbxCPvBCHPEQfbgaESY39EKEQpjS7wR_wqLEaopMdzwNMo_o2GraQH_aERDT_OwAtJdp9XXSpv16D1bU5wtoh_Pnwvq5oeV9Y0wI-I8x5QFE33XMb3CI95TwFY_p6YxD5XG8whlvnofj6DioUR3giiGeuJKoWF0PObPGAI7rTtnFnX_OA4o9Ycc2cV2Cz0mldJ4VkVcqbHS9wPssCBJoq7PdOnag6Sw5gC0-AMZFtYuXNAy15dEb9mlC8AopJGlpsKWJ2bnJd58Cl_cCB-VcSmqEP6q7FahNwfiZPwuI9JFWsvO7MW14zBlreQ_ron3a9KSaurekfaqv9wfN0MtVkjc4Md6tV0aSNj0zSSPL0tbsZYgpq7_aeXGnukTUrXVcGf7FjEJnoRzDwU4RN\\\\\\\",1]],[\\\\\\\"5764FD75-4D8F-4081-BE74-A69504456F45\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:22:13.214Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=nzlxg&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=2572350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"nzlxg\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:22:51.576Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=nzlxg&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=2772350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"nzlxg\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:22:51.570Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=DTaVef&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=2672350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"DTaVef\\\",\\\"[1]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:22:54.356Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=nzlxg&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=2872350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"nzlxg\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:22:56.676Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=nzlxg&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=2972350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"nzlxg\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:23:00.921Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=nzlxg&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=3072350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"nzlxg\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:23:21.835Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=WuwhI&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=3272350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"WuwhI\\\",\\\"[[[\\\\\\\"PROMPT_BOX_SUBMISSION\\\\\\\",[\\\\\\\"43B5E996-092C-4CA9-9D90-865EFD6CEC09\\\\\\\",[1790169787,917000000],null,[[\\\\\\\"IS_MOBILE\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[]]],[\\\\\\\"IS_TABLET\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[]]],[\\\\\\\"IS_DESKTOP\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[1]]],[\\\\\\\"IS_ANGULAR\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[1]]],[\\\\\\\"USER_AGENT\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36\\\\\\\"]]],[\\\\\\\"TOOL_NAME\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"PINHOLE\\\\\\\"]]],[\\\\\\\"SOURCE\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"CREATIVE_AGENT\\\\\\\"]]],[\\\\\\\"PROJECT_ID\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\"]]],[\\\\\\\"MEDIA_GENERATION_PAYGATE_TIER\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"PAYGATE_TIER_ONE\\\\\\\"]]]],\\\\\\\"106577881,106714532,106281924,106184493,106299202,106322568,106701949,106210711,106238955,105484652,106599983,106262194,106585383,119157485,1706538,106437280,106430287,106432687,106225453,106210719,106077941,106486771,106615367,106536611,106667487,106259075,106556077,106676866,106611001,106681111,106501717,106104244,106430149,106592798,106625630,106747630,105746691,1714257,106712749,106297879,106577873,106714524,106299194,106701941,106210378,106599975,106585375,106430279,106210380,106486763,106615359,106536603,106667479,106556069,106676858,106681103,106430141,106592790,106625362,106747622\\\\\\\"]]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:24:07.982Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=3372350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"666bc47c-1fa1-4167-83cc-3088840b3146\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:24:17.242Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=526989&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:23:08.219Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat?bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=3172350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[null,\\\"[\\\\\\\"35499362-f230-4bfa-8808-a49591ac4f2f\\\\\\\",[[[[\\\\\\\"t\u1ea1o 1 \u1ea3nh nh\u00e2n v\u1eadt\\\\\\\"]]]],[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,[\\\\\\\"0cAFcWeA4WkwJ9I0aJuqWClk18YP0cICAvvOapjs7KQQRzqsmpv6mwzh5Ymk7gS5B2DkqQR7z49tl9fqVjEnk8qiiMC6BIjcoHgp0wmAOgcjpBk8oLDLxVr7vlHH2VFS-3t5IGhXTD28UvKYyu9tJtczdwZV5d3OGKXORdsM97-J2TOC8pKCEQNBupUWjDCih5tbPUnnXd-GtBjJ6JHPwY-J-QEhE76njgoAnMuAimH9HaMpcwsZMiepHI_LHfwu9zak8gTLU3I139-M0PaItF_x-n08_RnHPM6LK5YYikZGfeIr6u1pvZFpCJSbmUm7CpP_ILRLoyd-z6RWCFpwZM7B6oP4lhLjid67En5uMUm27JbI_YTC9kkG1IyumClrVOGrvgVjZpsT3TWB5bY6DH8Y4qXitjqP0NA1XeiRYlj2EYXeoA_YZwW9t8tCyAZJ8vpJI_ujqymHZSEvfkdRs0gMqFWoLuYOcOLkQmuXxUUG663bvi7iUeIIADbtIDFRw7MpZUcBcTq-Zw_bMm4sWr8nLn9T4cVZoC6f0YKNpT8rPbVtHPsJAu10m78vGsgFkeAcqOqplLdRUILXzg1Ze6CeniGLF0zZqJRi81NU2FXSOJHR4K_i1jMO1S7ZPrkfzYntOLbNVtE2ibuo98oSbE1Tecdm-MBRdprqltGpf1bFdAypsoYEVSq6akCiZf60kpvbUKKMeHbqLWSqrrN2Wc0reW3N4Hk1CbMG_EpMQRrO9_xUo9dAYxHuiKqMZc6tVM2tUXFkk-euQ2bm92pny5LhULR4FiI-QyioqqH9yP0E_aui-MHc3iL9tyIoaEif-dXDHc4ec5h4CibvERJ33Q8LztgtT7PQG2ygaL5nP8Lg-V1GKTUleHVvGUZTkkyA2HPtfhCjC04d1sRwc_lu6VwGQztDVsZqHeFxUOMtLnLjlAY2AYw8HWzyCJpMZY_7lqX6QHxbUWSlrQf3LXlD6DsVyMzoXnWS_RI9BYPl4bgdNGT3WrEx-1jxiteBM_uE3MWQ4b-AdgsVO57eBaZav1rZ-RMywezNjeKzlt2Z2AJuOlVGjSLKZPQ2fZC-KRV4VICVN0CDCfyqHJb3i0kFGVpKE8jU3aiNh9nX7lk8p2Q2wMFr0qUJ1ahuAStFuODVGKe8Q1MteOQ9IflHxsBk01B_DQ5n7GJDvDHYrW_-LrjGtPLJYEVmCurT_2GYkLvkh4wK83PN7GXgGuWbGvKaoXUZCqoICrklyDKGRXKfw9L5711kVA5Nd_q7lqWbhKdNI3vHtYcEynXMHIA7M2ZzR3tKWdxaag01w3OECDfY_9T7x83beXOKrf4I0N5pgUJepVhec3vZ_WmTseOL-wjWaoJKMqFyBNDvPKjG3y_Ip3lqx_f4EY6lUsMLNGCBBswDm03XmQByqMbMxi3w8uEqrP-zIF1TqxJ3ijVc1JOCmGoxj342ewK3PFjPLIj97cK6PuPr2tjj7F3jspIryO09ODKOL9TEvoVIzcGZFNxaQx7Klt_cSrDKUXfFleeiKUNnmYK4erjtX2dXLdJ9FZT4053VQt5FBwvOAxDki-1g3J4L39OLrjOVY-auSJxMVafZY21JkMVa1mGpieC84qhBAN2hQi3hi3I3dwhkZzWM6mAOt6ZQRjbdFAey9m50BG8TXPAdE6AOq-UhHYsO0F1ztwivY6xpGs7_bSnQbN0YKjtN6bEjQJusdaCPcJNvwTfO23-kE4ZKMSm88tLkg-1ekfgRbh8m1MJOP4M5SmRQpxsy8QaIwzqbXKOsdgxIAYFqhU0yOowKy3qpmOvjrNskrU8pIcwleOwAbXQ-GKpLUyYgvLKeD2aaCbbmzIzs847HKb1uZgHUriSRtT_TMG-aD6KSrBYz_53f2VFds8WrcF-cFKBvwp2J4BWIadO2KEfZV3sGZFVo5WDzk9mVBup_Ers3GBHLvA4xfNdLyZaspIIJCYgpPHt-rSGrHfRjKFAj8tAAEwshgrBlZRQGFovGIV7AOXaKyFl17D7r9QcsUUjjfhDX3fi34KGPfpQ1BQSrHtEB39LOia__luNiFcQfycJzHQVce48yNzQ6UFcWm0plQpynSfQyfQFYUy0pK9XhrBFesY4tlwkoCN7xGliqaNo5t1YVlzbaYLhn_nDaWX-GlBMPfVXYJTpdIKnlGfZYZ2zwXJT3QwFrJYtOb23jBwKva-EnyhDHc22v-Eg7SPcNnZ1Tp00UYVWeCjIyefvDL_ARFk8WfqRZpXXfvRGEQXTTOur4pwUvDXGtHX2kAtriUwogFeMVy1SM3zx_4839xg_xLkkFO2r4QlVkmBHrEXcz0xQ_IqalAU-NywwYZwEmZDDiX8JRNLIBUyelMtwUDm-l9CctPozGaYc1CQekc5UTTRedMUEApG6S80gpTjKj-2LMze5U5pn3p8O75S5OGQ4cqw_ESZJ2vIULaE-uQDxoCR8md0Ew4vPQeAx_YhMQ4J-f1RIaoY74g\\\\\\\",1],null,null,9]]\\\"]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:27:45.715Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=408421&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"666bc47c-1fa1-4167-83cc-3088840b3146\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:28:30.404Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=903531&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"666bc47c-1fa1-4167-83cc-3088840b3146\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:29:54.145Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=808031&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"666bc47c-1fa1-4167-83cc-3088840b3146\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:48:03.134Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=696706&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:48:36.191Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=922668&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"666bc47c-1fa1-4167-83cc-3088840b3146\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T13:55:16.910Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat?bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=884606&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[null,\\\"[\\\\\\\"bad4cdd7-f477-4c57-ab4d-859c93e02c37\\\\\\\",[[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]]],[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,[\\\\\\\"0cAFcWeA5gEfnFZblXm7Mj8uXUgFfTz2yu7q_g-ibJJ8mZG6MA1aw1a1Ja1ITOvx8Gwb1T3B3ol_PzKWUOJqgmVklIovc9ERcchFa5WoxprLuwuppaywusdkOQaY4SRJ8ttYOkSHUg4-lKYv6gGiN9JgK7C73CkzACzRgfcrC2lUWhsXjJUYtyKUdhWnlHXkUtePv2TcohLYGitxr98htg24C17PE8GLUNaAAeu0eUWDtDOhP8CfWD8v_CuVRN4isXM5ohBXxH3xWVrUXYWYW-j3c6slKLD0jnlVQNExUPhClzkNjWLJDTCSXBcf-CRTjE0iXjFN8W0DLYnTPHzF935quAhO-3JL4HVzFt1sdORfxHIVXXaSliWEhTbL_jcinTcBcdG-hdVtmx7-OHKjp4IlgLso33mUzpbrSM-tqwVCsepJvfabXqcv8tt1XQ7DvIr5LoTAVzxSkKMKjnM9pNhcO15fo5xAP7CXqY-r-uUkiyPeFZ9widHuxW8mfarY6gYNkPaOVWa-wfqG269T-RNPGxrZARXXsRZQKYNOU_EP_AJRGkleVGtplT0fjVd0_QUa2D7ftBmByprhHWuTp4Yv8CjAJOoYUvyv75_DmOX7Ubt84t8Ne6K9NDQRESj5cNjzdf8KQBjAnpJ2HkwDqZAx9_4YDtNcXfBk1kicbZurrF2y-wsEBoCoZsEwDzDnO0ljznIfsnDCi-MmcJoxfUR8NQHPmkhcDY_quzx5KGqoOK-SFNB2wclO1bbRCoNQcDIcVcar2wtDolVMCs6uuAFqCFgaupjmW7pRov4Pm5Yv9lRiBOuOQI7kXhk1Pvr8ofPP1elIIbtvkccFGOQoCKH7ncR9XGVwuHokWKQc_yjiFV4ePJ64LlIc1egTvG_yYGkt2Z0spYF3mcJLtDB5L0FKt0nKEHODLv7q5aUy8axz42O4ZDkxbqeWWRp6FP0_jUlBx-LpXNRNQB5tUjouRyO3sdJg_sdfisrZnicyoozeUQWEBMPDVjtyOKaqltSXb5Ii5z4wFAAjEq_g89mhQRupH2kJb23f6lRqWLAhT_5HgRiaka6Cif3Ya9HVD6R91MqWblK62R5q4iuC8EFcziQ5NOBmaCNzXf30-gNqV6H6RqMJhXJShmeqOUoJc_OiHkOe2pSBwe2E5IXWwupWzwZJA-h87CsoKVD1Q4BGBaRkBji5IH5stjQBaLH6Z0i_d_UFZLZrekWdxj0CTuZp3Wfm-FeHB3XNsqOeZpqmraLhApyyIFnSpxzX7MiGI_CmNm0IQS_qtYki9jmP7doyy2SMlnAs-HXJ-E3CTbIUWh7rcF2u7sjF5SRiQ8lrNF5tmbOKEn-yVULcm8wFdfwlIZPEzevmUg7n9_hLarSRuHv0aok5S57g9O5rBIsWcGjozAKezZdz6A0rkXry5xbx_u8bToN40ZIUAV_cm3YqKHbgT2gpAZK2JNT78ojzrS_HC_3VRVPM-lYD6MdCiL7ZIdgd_-GPY0bJwJ_PQbeCXOueveaeVe5EOufc_AU-BOOTpKl3VDeRmxcJ_J1-cyotpHBtS9jkWFoIFNBtENgO8prFUBlNGd7Lj4D81V32iMiwUrIVu-C2bwkKZH_MwHlV0fErPMTs8n9HPVFl4oT0kXEk194zRHzJk0f8ehtH56XSO0WwXIOvv0DWP1DO8Y3y7cCKVXYdlcjWJTa-RW98PTRWL4RvdONTt6QEZlwL2_az7oqSFtl3SXSZQ736OSNnWQ--H4rgU39jRo1K_QMooTjGoeT9WKpDpxAy77GCW7mk4E9axGf2FxfTYeMCmE_4SSb-J5a9ZAAohCkG3b8BSsXSsbALmzs6RwDeEUkIg47TSIBRj7mjfg5qnvK9V_ig-s2Q-6I7J5aCTsVNpdBRQeoucHdYFjxHHAz42omZvtEWsz_i5aTCix9hMnH9-rRFdbtgEIHbTr8dYIRpwaFfIskiZ1E9axw3OamtXkc6jYu3lzcn1YbmiT60L4FNxu1xro7bSf420HLu1WSentu5LXikIZoCJYov2ACOB4CIsaVVPXvvVyq_2pKDJv4UXFkjZc9QRPlA08mXLWsDCu1ZzqRpytWBNbyBXHCAncqA4SNKB7DsSVW6O9yqyJkRH9-mqPNfNbITkEIynUb4ajhn-m2xMCLhLLRiqhZ1N1WxOcdGatrNFGDYOL7ktAV2KYCqFQxkjrJHGz_TnaN-6aDx53ApK4qpy35_ZzJ7F-TZHN76lvv8iRBlw43vBswOBy5RnJD9cqQaQfptwcDXjGbWJBoISIYt4XHjz1IDtFaZD7tX5YMTSLwXirKvvDsuIfAwJSc2emeRH0F7iYburH--JeJbOTyFLbu0UEdu1Xg8kOeBx1AbfBf2yOv_XXcyVJLBi_d51crbfwiZ3-LVIVJAEmr5GFi_RCQj5MIRhdOYZOpHIxTLLAJ3dsN5Tu5y8lk92pjCo0juhWWKY0S05ScrBkho1A561tIuJfD_4\\\\\\\",1],null,null,9]]\\\"]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:00:03.260Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat?bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=6833755015842157859&hl=vi&_reqid=616067&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5jEGkBwmXOrigHYujR0_cSl:1790168749588\"],\"f.req\":[\"[null,\\\"[\\\\\\\"59737d9a-0e57-4dd6-8c78-5785995084bb\\\\\\\",[[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]]],[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,[\\\\\\\"0cAFcWeA5flYkh9E3Capk_RiOA68Tr-lfcNwptXHCaUWAl0su5X415lld8LWADXP4-LHse_snGbfX7v3ptprcLT2ZtWsiOE20Khl69U6vXGdpQaUlVsKWUdhHkxGeNJ2E9UXe2sNPK9NjYih7sGoytTcO3d7WOaoaJ5Z28InHAKdg6fO5PxOwaDz0PjnlVsrz5SyqS4b37PpzBfzp7_RhuN_U6cImkDU1Y-NrJAAoUMacOVllBW6XV4LidA_j85H1IB1C2u6FNuDtseYQgL26p7F8x6pBAvWr07t2K8phzfcSWsGCnsyKR152e8ZIuxD_ZxsGDrP63IyLTOGDr_Ddd59LIYZFPGuZRn3t0lZ-Yos-lIsH1oAPbYe5mVEobmP3bC3Z63O_tL0cvXyka7U_AsIuf5jAAKFqfoKRkouSx3VBSkFqqFEh3fnQt-8aO9vkq7NW3GuRQcVIJX1cBGQgFAnNnWz8dti16rssR_LS58mWpABoPajtsINdcUeuh4BnaRwHIZKEb-k8I-BRrnvTCyi4HbhNx-aJeY__llJGM9W7NJNKAN8skLG8A_9hwGLcksgrcKv8bInwKqOFbRll12WQcAJFnJms8JJK9-18xnxSLN5I5Io_InmGDfvI1m9y8Maeel7HSKqCIJb1bXVt0WCWp7T8C6PaHiBkPMwekUCnc1YP-vXxt8mScf8J-hSSIeQDPRWOqHoKN14CCqHL0QlSGbIx8ipqn0kGYkY_uYjxo8I7ZQsR6CQZq-7SPaXo--QQDL8T5H21zg5-Znw_oq_w7OG9T2A4mCJdXv14imtzLMVB3Z9LtOW9TCWc4DOgE0LQl2VFBRYeboMVbLyLHqU6iwTQYyKr0EdKAcQLMctdWeWcW6KH2hQ_EC4fTzzlKS6-ndyu71cafvmD2CZo_f-7XFM3TqDBcT7UAKpSj_MzDR1h5KG-teYSyUDT-BbA6Cvzgu2AeAolv6xCl9teUxwIMIKFSXxu3JwNI0oWsaoNS110KBUvU3v99_P4c8vJEaYhSgylj3Kpk6J-nF3TFOoy-6MptTcRX8Wq_9SQuYAipDofikzbL4A7OAXw7iikq5ie1P3h99hvW4Ic5jwcWbbKn0ZKS-iNuKAVLuUZOiUkyzgaNAK_8eHnurPwP35KTVbJ9LgoiYUSedCwelyzaWG2dagXDczQ2ITBkAqExluDeQDx2czCJcOCd-S9vkxTd_bLtoIWklEzFsIgBWFAoK3xixZqfFUcf6PhvbAE2RDd5sKDGzNamHQ1U2k-OnFPzzYLwOOpvMSezScaAweuTqIUSM-el-KkmXekD7BPdzxPxkGEzdVALritehjjlrUiJ6_9EypT735c_fZN7891l_PwsoitgddzFzd8SHVIzHQoXn4uOL6_j7lC8v8M7xDvPzhiiolUSejiG8Zx-ncYEwxNpVfF1RiKGNts40RJBYrOhBsZtK8up65MX0dzaN-AdJ1Ji33jnjlCmk-tIQXJqQAM-qXaQGNe6CDgo7RmfNx18ujsZXJKuNCSZoQQL6POzTHMg_gZluVrEuuyIexoadXQDvDtEwbb5ZUK75G5mZ64Nga3VuJZ_gLGl05_fI0FOVPV0JcJCYpbsfM1Ufclz_kNOoWYgeKp-zVucYzZaP0RbZSb_RYYajgNSvPZ6bSQ3lSo3knjgPCE6tmDzxzEB_ewkbYggWxhxhZEz5GEPrV959rWUcXp8OVJgwj4p9unaJvWRYOJo1oOhOPrDei0GZ9NltSapTsYclLv6_wBMA9BYAtCFQIi85TnmqMVs7HFWkPxgMW-YG30Y4KfQKVJyQJN831r-6PwOw7uhPq5Z5YviOj2xdr7WyRdLBr-_r9skLSfjqwlsUJoLLSl8GefDxDRUW_TgkWCt6QRS_mWzDJBE9WEU4NbKa85fPTNN8ZbDsI8B-lPi6L4iWqZaAuruGncCvSk9TwibFX9k4TWAi73TUQ0h1fGavaiyFF4mhP3jA93XvyIx8_GEn5Seht8zmW_O4HM7fwCA5Sm4AOsWUMYltMDqqIF2iE6A60fUYyf6XvlQLJpI26HYakFG2Hnn3CEfjbpOc-UdYpKstuQDWd8qOeo2bBtRbvYPHtpy4S05J-RBaaMa-3pX54sejFloROEzjD8SdapgC5yLGccXotOM88QcVCD6x7mP1obfaBZiQB0NMVXOxEn05YG8CujRMGQb1OcfnhN2Y2SPoWzw1NCQYUlpw_IHXu4MsFI15SO7SzZnw9JdmhbBCW8oFvo5q6d2dtD6hbjw2Acv1q7s3c1SVj1bkPnURVJcxZVYV6A6DV6b0u_dAS7bSUc8ALIRMZJBtob30JW3SGWvXUEM2E8MjGPY1v1GuajC97YDh4iAsK_2_l2YPzlQef12-QbfWLuIwpv2PXaP6IIFT_IY348hDeb_MhaGzIsmQTKqDzCD-FATxcZxTkjxMgbmtul_Occyv3da49H0Tm9rdl7UsUwtu61eJh37I3B_1-m35mI2itSG6l4kChDW\\\\\\\",1],null,null,9]]\\\"]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:10.006Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=o30O0e&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=75791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"o30O0e\\\",\\\"[[\\\\\\\"me\\\\\\\"],[[[\\\\\\\"person.photo\\\\\\\",\\\\\\\"person.name\\\\\\\",\\\\\\\"person.email\\\\\\\"]],null,[1,7]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:10.008Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Yizz8d&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=375791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Yizz8d\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:10.007Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=NfrxTb&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=175791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"NfrxTb\\\",\\\"[16]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:10.018Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=KV2T2d&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=475791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"KV2T2d\\\",\\\"[22]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:10.007Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=cPZSdc&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=275791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"cPZSdc\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.175Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=LPzVkd&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=775791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"LPzVkd\\\",\\\"[[4,8,5,6,9]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.178Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=qJcgMc&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1175791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"qJcgMc\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.174Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=HTrJv&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=675791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"HTrJv\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.173Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=nzlxg&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=575791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"nzlxg\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.176Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ngNC2&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=975791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ngNC2\\\",\\\"[\\\\\\\"tools/PINHOLE/projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.178Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=mrlkwd&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1275791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"mrlkwd\\\",\\\"[\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.177Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=tRARke&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1075791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"tRARke\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.176Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=875791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.839Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=GN0Bre&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1475791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"GN0Bre\\\",\\\"[\\\\\\\"35499362-f230-4bfa-8808-a49591ac4f2f\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:11.179Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=yBhWQ&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1375791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"yBhWQ\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:12.486Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=NfrxTb&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1575791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"NfrxTb\\\",\\\"[14]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:12.487Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ve2Lsc&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1675791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ve2Lsc\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:12.819Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1975791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"6aa915c7-1123-4e12-b75f-6d5e6d40d0fe\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:12.817Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1775791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"4630aeab-cd27-4457-96b6-24045de2504e\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:12.819Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=1875791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"9aea7396-dc22-4b69-947f-7d1dcc5c1e3c\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:13.210Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=DTaVef&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=2075791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"DTaVef\\\",\\\"[1]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:41.125Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=WuwhI&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=2175791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"WuwhI\\\",\\\"[[[\\\\\\\"PAGE_VIEW\\\\\\\",[\\\\\\\"BC356486-FBAE-40BA-B0D7-3A21166B3DF0\\\\\\\",[1790172191,118000000],null,[[\\\\\\\"IS_MOBILE\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[]]],[\\\\\\\"IS_TABLET\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[]]],[\\\\\\\"IS_DESKTOP\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[1]]],[\\\\\\\"IS_ANGULAR\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.BoolValue\\\\\\\",[1]]],[\\\\\\\"USER_AGENT\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36\\\\\\\"]]],[\\\\\\\"TOOL_NAME\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"PINHOLE\\\\\\\"]]],[\\\\\\\"URL\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"/project/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\"]]],[\\\\\\\"PROJECT_ID\\\\\\\",[\\\\\\\"type.googleapis.com/google.protobuf.StringValue\\\\\\\",[\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\"]]]],\\\\\\\"106225453,106184493,106259075,106667487,106585383,1706538,106625630,106536611,106104244,105746691,119157485,106238955,106615367,106077941,106281924,106432687,106681111,106747630,106486771,106701949,106599983,106592798,106437280,1714257,106676866,106430149,106262194,106299202,106611001,106577881,106430287,106322568,106501717,106714532,105484652,106556077,106210711,106210719,106297879,106712749,106667479,106585375,106625362,106536603,106615359,106681103,106747622,106486763,106701941,106599975,106592790,106676858,106430141,106299194,106577873,106430279,106714524,106556069,106210378,106210380\\\\\\\"]]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:38.455Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat?bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=272953&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[null,\\\"[\\\\\\\"2b8dec02-6926-4410-a220-5c9aa2676d53\\\\\\\",[[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]]],[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,[\\\\\\\"0cAFcWeA5bVh-WIzoehF4GiHFsSJuqitKIhlIgDOm2wGFtV6zfPBwbRqpmrJ2neqCG4GSlVAVvvLzUKRoLUO_DDRvcVxNC1BgjMGn9m2mZHNSA0capWaaGVGNacQV7R2g7PZ_iHyL7XFijhPMpwKKXyBYRKtzCC4AulukFTdM5M4BHH1mM9_Ym09G6RwzXaBaDlz1rrCAOVbrvI1cp2rVa7dkReQXSip14yLck5QwAx_jRA7O9yMJaWIsBJnox_G8zTdH1cO7vRM5U49Csrv4wGWoFherbOqhmuBvoPxC1i78Aj8bqgSyMTm9AfkZ8XfkjbAqOOwXZdy4Wp2NSzsmg9ImPAPiUh2aMm1MXWnGCa4MEUJ-FiK3M8ptwhTkRRTERy3ohOnyot1UJb11eSifv2nH7zs3xIO7SAHGNzpVtAkjAufLPqVEZiK1I-Izs56K2ttyAsx3qDde5Mmj6HZK6lYh_k1ArajHS16ZBEOw-xzzQsWLA4P3U7Des-7lwIXCtWRcNW0OdlSJ8LlSkm9mdzU-D9f3Qz45PJHnyBypnViIiS8bCdGDSV2NS_HBkcvEkCXGMfHq_rTsm7Z41RD9zap5Uf94XQ3vJdR2gMYqfOfHxKdQpc7cWaNAng_9Yqy-ZRw_NJrtBKu7ohEz08bg3QVSSCvA0GxirrXP5QumFxnmYY9NJo3n-4kNuXCpBuaeDTpX_Yzqba-DKuplEjZhz-Nm0lkXgEFbnXLHrlMTMOeDsh71_ZUHsrPGfuYnzGmOs_IY0Tfy6SdjX-CDwwnEh1B44rypG6uIH6VXWE2WCj9ISqAxueR3ellLufN4KllNmhedU95BlZX_qnIEp1D_zbiTZg1qMWDCGk9ItVeBki2JO1Q3axS-uCr2D8rWbdOGAmjvjhf4gLgB8tpnI2LKlLQYmnkTLn2a4jInFreqgjwHiYmf53nwUutmqbNcbup4DNUzgSN290BLMVqMYIhlG8YV6CiI3cx1Uthf4m10qcvVauLVAA8jN_Gl8vIf8MSnH3__dUkE3OYUqTfkJgQ9wOUjjhc-r12WMYpjuJcGoO7PBQoKR-gbixt0YMRFOAxBD2RbfOdeO7BcS5Aj1ZPLrthAT5g3N4quHV-n8PNS1MXUIgzpQPy3SHcWTpOiORRoPdWw1FwaFNzs_9LXN7SmINbx5I1zkO9g94onFPOT9b-tDeifoEt-LcTlYRIk9gy0ur5HJPsLx8MqLVCFHOTyLLug2MAerF2l9pdekZjJQuSFgPkZeDeymBpzJKKyCPYt6PROh5nIzhFkNmmvZIQPho97_3PXtxGh0q6KHwg9KYTYf1kZkXCL5ngX2mPF_Bz8a82X70RvyT8UZs7j8vqMF2J7uiaGNr9QVjG46fLZtkkXxisz2FtG65SemJYdKUWFUrI12LkNd-eV4QePQBJAJtKOhNP9Ab4W0zeiiBOh1C-towutZ-WUOfA_rPDtwqrOi4SlVICEZaj1aYgqnCoyJCJNYBNRgN4YpfB7H32vKDh5BzqCTiqpIK8Zcf0mcTSSwVzWwE9PxX6i1hZs0khj_RPAihibyB1hKH7NPfFKpicG4hLuCcUdr6K8tc55r6avDalznQpFbvoxb2skCnqJooQ5L3TW3i-RiDYS9cJSiLZBYostUTXa_CG-YjslW7uQZGDt2-lBb8J0TIpfEMPx0Tcuu6_j_YbmtL9YwshdzNVFEKBFn3p_S_csfsOauB24x18WucgbCgcWtA-x-mervGJ4NPKHWOCVctI37e2t4bCB0qgBUv6S0K6dKotBAISMeMgrSvpwxMO63t3kMmFnpxR5Di4hK1knm97zQEXlx6TtgfdRZhWRxlAKtRF_CT8BVL_4oX3GThrtl2CywyZyOBsZQGmYoWshscSiFqMjrfhOZVa9sLW2NRaiHNy7aS2UjyXjHv-c84T4h-k-JEFJf7nu9fBYhv5COn1C_KIDyfCiWhHbkEE7bRwT_VZ3hcxXyv-2Xywp6xofamKPg7jYG69AgqwDrlVHwJraIQopgD-huxuVdUkdddAVy6Nnfu0xf1r1GNEfCsjg4HIDJbTavlGf02A8TldE0cQmxN5RdQ_NV85JqXqBY18pHBMf9zxlzWt9UaW4PvBxLjnf6xw4gfsF1tu0-lyPT2mXqXzdSWXe5GVxY4nn25tDMots6Ic7UbWqDp8_QC3-4gH2FFJB0hqduM-K-iUjYYLrMqXwMNxpS7o82IoqVni4n9IpqwyEW4RS4Omo48JU4HXPaQvHKpZ0unps7BY7hnJtZo_-QnPNgvZghyjTOiReOTCDiEPZc4C6s14LKfOIBMje_2lNgHrJT6l95HCdUJAgEO0UTsMIwWchwZvEtNLa5ylSQRYj1ZmUCFrnRifh2FZWlhK3TaemJXzc2MSX9Tr_Hp3KPxc5p7TbkoA1wxoYb2ghu5LVi1Bg84UBw_9vu7riUc7rRY9tHrgvCItBFmg\\\\\\\",1],null,null,9]]\\\"]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:03:47.966Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=948408&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:04:19.120Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=416254&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:06:30.541Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat?bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=321250&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[null,\\\"[\\\\\\\"58deacb7-2a78-42a2-a24c-783d71a87c2b\\\\\\\",[[[[\\\\\\\"T\u1ea1o 1 \u1ea3nh c\u1ea3nh: Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]]],[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,[\\\\\\\"0cAFcWeA4OM_CL4g0ACav-OQULVejqyPS_pTJF5m0KbTEAFX8_r-XwcYNBFxpFPCMrmylBHRQ76xgefqHMT6_buwlQImByoYuUmRdZVaw5xNN-CblG1CbiMJuxrkWE5no9CWLx8XZe4mW5HRIWbzO6qKHZ9Kx64VQCuX0U4v7szPr5gyXBjQr8DIxZ_3GWGH-ncxGWY8ORFu-_krnuG9mZIfxCu0j9NROrFQOmZ-TbYe_2rw_Y__xZTloORz5SJI5x_SQ-Z9ns8qX_YxP1p-PX0RT720PGqrWhp6mdk8D00Sn5s4yHJiQ8USY8giHxDWvUpZfmNLAxCj2d8OZ8pzczZwWL2E3wu5HtUQmb2u49weNBDoOKuNksRc_NY92kidNHr21FCvWjeUrqmF9916OgswBdGtv6Ar4iKYzAd0eMxEfpSaAXMOJLLe83xVEsRSEYpUhpXpNG6-1TeT87djJA1EbfPMPimvKarpUxEMSlKYO6WIjVdmm2s6tAqL0vQVzITwiKU0OBl9D0NPMjTJY8_r2jk5_YrY4BumMJJcujzVVfg1JpWC3_awZUXxyDhQ5oAO4ItQccnwUrVtSsVLZm_27MjKXSjJIGbTyPnJKHGSwah3_1rmV55Y7oGeu9tK2W2hwU9sqj-qN7MQG6AeCfRlmqc6qheQLg4EyNOb8-K_hxPlfzeRYDxywA8D7A6NhtiW0E1ijnC76UNTLDECbRijTzkP12RkdJF6ssEZFH9WkjsGdmBjvJLmSxYR4_vm1aT2P3tXsxgdbiPU2U_8kQA5H6-wSMCAKCqsUeP5t51uGzUJ0wghyhMbjH7iutNAKjbQJCF8eUdhotF0lL8ShnaR6KJs4kfpSH--hXIB--GjhHBpCGJ_umLBhoMW4fq0vrt0RF-qSO8yzbTqxiLg7PGwP5fn9b4YVXl5ub3N9nVuTzzP1_1LgRlSjXQ5ope2QJosYH3tnJw7aKiSKXp7U_3STNnUlY1r4txCM0stx_RHXlTO7ahUM0nUod7GJ3s9MM34MKoLXRCSFa8JFTder1xrk5YV5d0qVrNmvMB2_D5cCwOCKbvLFecrYck5ympEr61TRgEwa3D7Vh6HI2_hCimULdSec1RS9vukx6hHLWdjYDo5VRjCYWWTroebV3_St2FCwbOPTD2DboSzoaL4lhvcp25znE26htL3e7Q0uN0M6DmPxZPe936PRY1rphhrSER_bWK-dL0nfZZVgwIzRQFa0kjrqszopuoQx_Z1bYEeZHDqImwh_qdbOdFsBAlLFWXgRE-oIQVcEjAiGRxmHHn3z9Fh2u9mJKBclhvc7WlPRtEdwjTVfbCy0New_sQXNilYAikWhUMaEylZH4wmTQXoUel3fnzSyfJ9Qt3enIquLtNxW0cnXtSYXwf-w4K9ssgm5Ig1k-nYmtceabXUNsnDPgaPpUkZcTvvCB_7NUTp6OCuZtKz_jllatz5-e9IpPFZ0uwRyvEo6yzFP8k2ICdfrPY6_Adqv05vSAU0EOLdJMWHxXrOehyLmE6jM9YNw0dUE6MnDiZndn__2peJRMoveXqREOgbN4tdzGWvMUZIm_y9TmzWx_oM4qyNVfEMstpbZ-aSW83VibAmSpIpbchmocCRbQMFqDkj0J7jkC486TC8ExZ_NmxmyRHQKXsmYHzInJe1UJcaUYWIvgVKo4-EQTKFoTz0RILbagmxiUxTa-Tv5zyhNVt_eNOCJS4RirmWyjtadEtK4sJH21PmOWRsnqa0KFJoa6TJyHR0HrmCc89yXXFIOd9IAcDgPzif-oDWhQ7A7I3bVF_RZKvWja9zKhc5dN2MbKOUMRvWHTM4CkyIoUc39XlBqBpNI7LIxed6W9b5jKi7JMANa_pG7-Gu3_6Wo7Jj-neco0RAo1Kx9ZtNtcJxR7Xr5PwW7C7YRk2hAc76VQovhxpU35HQqVJ_H4G-cZ2kKyTOA0jV7_grhsq52x4In-i6QyCOkXhir7DuqBo6BpfvUbCVJhA8WkIgAHaM4Eb7e4Z4o-QrrSyjtG7K93ee7GKNp9qJ4uv3bWSEZFwGB8jX6Ara19-UX_xEnZcYd7qz9ZmIryWSujm-yAunLAIZViJLRYYhe9l2wA-yEXURN717u1zFkOewS0Px9r7xtlPOo6WIyPIcvVTo73e20V5WGBNF9JEKfEcX5SVczVCmsnLPl1JERndL5ScYkiRLiHSt-RVP1HT6c3mXEid4-sZPsXtZSDWJHOgX1JXt8Ujc2oQZzZM8upCD45q99sZ8qjhv0NonhJk9LUOvfZ3EJ46ZdAwust7biaHTh2Eu85S1Bjr1imk039aGyZB9NT2G2AZfX1-BSjeF_lvJHqt_nXQznsI-r6QCe_Xikyft2vDNGsZNcLqE6LuFf4UQULWlG8ET_ErUq7NMLOIZEzlRZmlVt41JEupg4dP6tSqBX3sRmQHgXp9l1quZJbejI-c2j8zFWE_M1-Tp_hewOTvPyjGYHtKomK9pU8I_3Wl_VGF2Adg1wb\\\\\\\",1],null,null,9]]\\\"]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:07:16.473Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=993395&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:08:03.592Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat?bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=553839&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[null,\\\"[\\\\\\\"cd0fcbf4-b76c-48bb-b59c-41b53ed3cc75\\\\\\\",[[[[\\\\\\\"T\u1ea1o 1 \u1ea3nh c\u1ea3nh \u0110\u1ed7 Minh Kha c\u1ea7m dao ph\u1ea3n b\u1ed9i L\u00ea Qu\u1ed1c Ti\u1ebfn t\u1ea1i t\u1ea7ng h\u1ea7m B3 M\u1ec5 Tr\u00ec\\\\\\\"]]]],[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,[\\\\\\\"0cAFcWeA5JIFF-7aIU0P6itAIt4ycbGhJWm4RQ1AwLLHd8z551r-F1X4-twtmuMGf48MhZmzQiG7wyNNGfwLw1i0fWDIcoTlzRfm5CQWr0al7_yRs37QkyG8UxbpsI5KeSBnIv8076ONzjgBOxugV1VpeR5wb-KCVRNiAecNtPTW81jcV9nXrx06pcATJNLtqmf95oe8HGVpC-grWtwGz3_Sz4GZrqkQkwOyMy7Za0zRMgEWLCSVY2m60Sqbi4pVEf1EhTAw6ZFJpn-QZA3jasGcx6Id6ET-gpvS4okuYbpI6CUcFHu8P4Hgvuh9pLn7mqoPHW1RrJwRsjCet3VrnwQct_Tfz4cwwfUr3E-9D9n2AL0ajsmPwpX1-gqfiOLQ2GY2lS7QxJMhg5-Jk6D1c7FTyhdWALTfosc2uG0MRG8Ff9H24COYCArtqznUqzW-mJUimRxRwrj_xyLZAic7my7DKhXXXdLbnecMFWb_T2Be3vg5CM2w52v9qYXEGKjw14gnEDi4PrjO4omgccgAgCuMoEyrzZxOkIPwEPHjLgHU8OEMVrTxUig_Zxdo2WRRHl-5n7NRL4v41MUdMLrBYbRQhOO-UGdacluiDljqJqJXlmT8QTzF8hi4MK7s4pPYe37zJPKdpohBg9YrKCyAh2d8TF0h16ss_FVUTYd7bBwmlKGNZAXE0lYYKosKHcpgnj2mFgi91eDSQJxbDgymCrPPaBHA05Ofez4mNmm6Gl3XpN6nLiUvUa0vcqfcMYGNQQhRtD083U-_MPheG6VwkqFv3m5musgc29nsdcOjcXQUEpGtZDEKR7bQ-WUIbhRcIIyyGHFkCYD6ClWHWaG0r71cPCqpde5Vwl2cfVrxRDEZFzM3QujcNrSo1cf_lWPvRe1UFSDks1xUhvMEWOGHpEGyirk6E6pPwtn2BlnMEFSZbbgZRVOARGmkOw-j-Iivl1qXg4lFbF2RkThL3V9rGgjdnD_KhU1lZKx3dynvHkMrLEzOACCXBh3k0Yy2dtbr2WNLRe4Bj8J1RBf5nFxAPAVq4vN1ANfMs5anLwv7LmG-VCMqYMcGS3QFs3nfeIcWTZGZ-p3_5NMdhlMi3Aba-HebdAd_hITuIUIJCMrE715aMT5KIWC0zmwIVyBmHBETqPn5M9KHSVp6wW95XcJ5eev_2y9Q-XX4Ua2VBn2wA74Zi7LZxoQ0gr2N8vOjmm_SDufcy9XVSDXZYoa9q48QYty0am8NP0yPWtyB4WvCQ3imaFuKLnjS-3NeA6hkjZo-czJ_iGuXLuEa4HJykrsSH7jbNs_92Ppsxmi2pDO9cRR3tzqmAFUmmLOdZDCNGz_bWMGpRDgzul07UJOyRM9AJ30OcTE_G2-qSUa5HcW009CdXybgQ-ePxLsL5LYREh9Ju03bONmCQm3dBvX2EQho-EX-tdQ0AwBhlI9wrFFwkDItRjbjO2An0MRPdkrgZY7JwBzmF0DQDwxy4JmyyKcEFFm4Lb6HgtgWxY-ek5JSnizGEN9p0ik54_IMTUWLC3mwAn-GKgAASWnbB9IGv5-7z5RXofvanoyzBDzvq8xDoE5nh52kPMxkgk0TKl7L8yWkLCZUrejyqGMXT7koLlWwHxZzalhEuXHhnV8n-xymPXQ8O_qrpeG2wI2_4GCWm-o55kcEVj7RNUx9QmyFoYjSZrnk_1oMONiyKAOZ78c1DNaabges89naSQG_LdM1_axgKC4q_6-LJm5HLBG0Klzpu9Vwgwv0PCcVMczSBM4UdV5UEG3aGns1zy0ug4_u6UkBOCgj8-oqk0xIaObML_FO1c8XZBryBFyHF43TOaR_9NC9OeTdNBpIwx5ZBRZxv2J-y9HIfSRxAwTxPBeZzElHyQN-XmDY0DuWuFT6ty2bplu34W6j5dgErbAAuUtplnSbNwtY3S83y9KeqnvAphjNZ2EGqDmSif96b2SrBtl988bVwy9HPYSeewAsc5oUNd8M7xgRr2vt3fhQQnu1VabToxjL11tIOxCT9Yb4abjpnS_JWvc4BJiUpLVBqCth_xwbMRM68m9rC5DTAagq1w_v_TxUSNOE-vmZ6z8fwmP2cqElgo5_NCkWhziWKjJg7p69NNNGFKyz9LaLdXim3Nv2xdTXwL8YyohRrwJoBMIULmrvugRkiLFP1pgeCQm7ETuQsuJsnCsxGOtoeKJ_ltJgJYUVIVHYnpiDK0VY0QE1t7qPKPnx7O4sqqCf_J0DWO1DZwgHRKw_ffbpYH9unUelai5DebS7S-Z9lPscaxN-IK-vMGSw4iiFcIB31a3O3vvc2i7TaFltFySzKdtKELD2vGPJRhLOlPt_nIoVBbyEFLQkt8mvsp_2kP81tuhx_JAB9JyQ5KMMaGK37H15OpLnX45eCfeR7NDVPzollaBpAJlf-7Vfl4Nur4XW4EcUl1FisBp0HbJ-uxrCIPFOhlw_pYMDOmUjVtuXVayA\\\\\\\",1],null,null,9]]\\\"]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:14:05.382Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=291286&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:16:10.852Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=195163&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:16:28.711Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=583455&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"666bc47c-1fa1-4167-83cc-3088840b3146\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:18:57.602Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/cspreport", "method": "POST", "body": "{\"csp-report\":{\"document-uri\":\"https://flow.google.com/project/594758cc-11f5-4f92-8b3c-1213686591f4\",\"referrer\":\"\",\"violated-directive\":\"require-trusted-types-for\",\"effective-directive\":\"require-trusted-types-for\",\"original-policy\":\"require-trusted-types-for 'script';report-uri /_/AiSandboxAngularFrontend/cspreport\",\"disposition\":\"enforce\",\"blocked-uri\":\"trusted-types-sink\",\"line-number\":3,\"column-number\":39,\"status-code\":200,\"script-sample\":\"eval|document.title\"}}", "statusCode": 204} +{"ts": "2026-09-23T14:20:50.939Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/google.internal.labs.aisandbox.proto.flow.agent.v1.FlowCreationAgentService/StreamChat?bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=504978&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[null,\\\"[\\\\\\\"007b60d4-79aa-4a7f-8133-cc776c4daba7\\\\\\\",[[[[\\\\\\\"T\u1ea1o 1 \u1ea3nh c\u1ea3nh: Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]]],[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,[\\\\\\\"0cAFcWeA4nGEZrnO8gZBpTbrdZoxRQa3MOxZ7rZixFPs2pphk4EzyMN4hI1y5dUeNPRbzZqbFF4cdyWA2Mq_TNcshgQgpTHfnqtCzVCvoEeg8_xpWx7JRq280f6K4WuQrK4t4wsv8MZMhCPTus5dguh3DwdY3ohQ0yozyy4ohMmXhOKf0Bi7ULYFqZnvdvPVPN1oUOqPq5IovVd5YBoKDcv08zlmfCOAzkeS5TR2a79ojGSqH0Y_UmqtZ8Vyktf5W6g3P3IvgRlZQDC1DDl93VsOGhdTtZeCKvhcEvdhzVdcak0UhtyWfIWe12ygs6l91cz02BbZlCJhcUomHgV2WUGpuCHjCzaTHqwa4yc_JRqBsXlYVGz7xmFeI-kwK7pWAoWXjiwIxmh1oe6AZYY3TO-G7_XvthPWZjUfuWxrlCPTVv2bCA5X8JdzyXt04_FxdfVLfpmqu2afap7kwz2hitbbqIbzoxzGESMw273Gzj6SGKy0wGOGEuqqxz0wrlekYBfJvqj19ZK5kH2gDYurw-PI7uZtZQdyjHqSaRVR77pDvDxEblRE8fjuGsBOIpynyD-JRHL5k98WO-UgUxOEZsm3lHzD85DdVkRGga5i7xGlbvvTjbONTEd0dj7rtm6faW5jOdkyB1QcokQFelgoWJKqcTp1S8W2hq4Zd1_O-y-ap5JoBptpSSSoBDiUdan59gvGOJnI2wiNePY23tw_jbSwDKQiVclAe6kvKZEL_d2KdQj1_4GkwgdexEdy6-4hxDm9qqCey9hlXy1oz3tTTtkZVj_J-NnlJu0ceW6zT_8AE1C7Y_2UZFty6SZGAF2ZrYHIXQyhj2oXY7YTaLgaR4MHVILev_vbDkIYtKyFlUGCSNAZAYjX1E8BVFYFyvThSYTdf2hku3j8TKTypgvuhUTAnr3ATqHLGq3D99SRoKtE_d4S75rVY0l6746S7N60iX7_C9WodXTAmD12nPyQGWZ_Lzf2sw1Xjy7uAZwd3Tejl5oElFLsNjU_Coh64xBB7caX6bqHfpfdP9iFKef7TfqHvfTpI7gJ5_jxUDCdlW1i5_uuh-26BH3YF8or6h9wvZPGjnWLBTlR6GDOavY8Kk6E2BAOZwaVZpDa-6mKkdbmGUFX90aQ6IP6vTMwBuvxVvufaJyh3b_eLerJOPTExdV4HrOHDbK0zNvdaERbBSMMVriUk2usi9JtG54igHaCIjlWLfSDccEd5ITZSSSfpwby6dWd7gtDIw14kv8M8BcAilcDmj1857zcUJ67F3G8bJdz1sCrglsrpklQNgXBWo4Vf5O_PdgtQJfPMD7KQjeR3vHOUjJtnnU2nJEg0dlEp9t4v5qWXzVyKxGejcW_lG-t7TqPrD0X0dCWETS8FqQDUjZ9yVXXl6GvkAtjC9hezBX5uMF7a91uRQbmynJRwgOz4WahDXk0ptwb1ebourL1-TctxLYS70cizbpyy_gzTTAFwElJ9qoGj02lD2Xa7fooiRV0GVOx_x9W3TAE-4OSQLor5ShA1S1_gbhcJsedagUu2RbbnvgP-cBDHiPhoVS5Ybu6ki8gGJiaGR5YM9DCRvOCz4QhIJRhS0C7gFf0wQt5TlkN6pjsf7X60ljD5J7rqbmrGxfu-KKeVJYH5oM4xPYx3xVRRqJ4KWx1knWpvriClpyjEfYZIfmBff-KAJKqei6Ji0uklWnKBPQLv4UjVbNEzyel-4FFqwUKBYndmmdnsBnkLFRYBadE-MinCFtmVVNyHglTOeh_snre8F91mJEX2wTbHfsF18NT79HKOYGm9lSv8raHUq32FmhrFtguudID5ClWjAU_6tr1Zs5ncORI58BTI21AeVaFZP8n_nvdjc8eeoysTvZWNhCY6g6RMy4Vd5UEcy88H4m4ONXHqnTkZJT80TcXex759XlVFqa0HIzW-h-TW4a3eevRE8eVkCD1RVktewVmpUUnQK7km-epplYcCGyX21SxwspzBHOFIQLQx2ajgGZPWJ5692e_Q74YMYskjMgMeuI0DtUxDoliLaPNOULRW3dPfIbIDbmTwVKJZlsxo6hpEwr_Prhuawc4YZPre9UkvZHs2KZ9lSjkx4X2dwIOZ6BhPtCZ5FNs204J4-2OzUtqgfZiNrsWS3TFsBE-pY7kJZtvMh_uHQ5ch1bVPggQUkJ_g2Sq-tpcIYxna4g4b_J5gczpBQWaAbGcU3FrKsrj93FP5ly7vqNvlLAxq8NVMts668MK3fQh2JHvApeGhTPsVDMDdWuJ0YUBSwM3jhGLfDtzVw8UIWSHqwknnuA_us-N-EGVP2JRscrOP0zX403ZF2KO8W0TROTexq42VK3jLARnLoDumBSPvrPthnyWZi_kWRr0acoi1v4T-50vcUBA4R4XLdyJwP5nMCeC5Oa74M1pBDy5Rb7sErirCe5-gBinN7IHeIrSLYrbNkYqWfaOd6u9gNZKYU-n31NAeLsQ\\\\\\\",1],null,null,9]]\\\"]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:11.021Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=496170&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:17.378Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=269722&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:23.690Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=406796&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:29.938Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=460121&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:36.133Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=437058&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:42.662Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=241527&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:49.132Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=414981&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:21:55.800Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=390676&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:22:02.369Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=548750&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:22:08.571Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=786878&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:22:14.723Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=137743&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:22:20.803Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=335517&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:08.046Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=261476&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:14.303Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=989133&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:20.471Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=706242&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:26.728Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=482931&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:32.801Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=560648&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:38.871Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=643359&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:45.111Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=819320&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:51.227Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=778217&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:23:57.288Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=274919&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:24:03.387Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=200786&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:24:09.486Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=858929&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:24:15.589Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=925067&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:24:51.847Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=483820&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"a6010398-57c9-4e27-a89f-31ed0ddf2d1a\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:25:04.567Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=123865&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,null,981155251,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,\\\\\\\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\\\\\\\",\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4Nb4t5YNsBWqExumuLjLcPOdartYsNEJ7gAdmifJ_vGRKBl6qrFDkGyb4hfz1ihHPMGgDDxQCh43Gbyo_ZGp0n0O7ahTSlRqjuEA9DB_LE1pLRBeVimWmfAIsntF6KPiDQoGahdsjFeAfYOWb4TVz6jx6UUv00wTeDhW0kgBE_7phXAe7f_x8m4TI1b0tRzkujO1oF6YyKDV0XvDytIBCRZoWA6pjWC8uXv-S7avM4fqulN2InDhAmQwWmFJrXIAqG5_OZLxfPP1u6Mm3EjB4ItC46ZXXmsWQi1-7FBGXzP49VrmAogkTiuVxHgpKn6PNGda0XkTQ1YjXh5G6AG_-i_P7RnA-33OIzd6ahxfzDjmUjVdbzFN7ku3fP_9uW3kIK5BPTUo-P3UxfOJyZ2k7DO20e71n26igAG58XdwOrczq4jadOKJxiDpQQq1LmwzT-ACSXrQYpMIhdfB0O7Toz0VGbbaBNfoyCoe4I3rspd_EpevQ29sAyy9mzQOrELJ-APS370BedC_e2Zy2PBkKIxawrVBdXis8_Lzz5T5oWBM41GfjI__8IGB_R_5o1-kIUM3_6VVWGMKECvz6YTcpkhqKjjymKr1B56J0yzrFIT_mRw92h07LeYoZ7UYOw3dhm3FpeX-Buv40dQBEVGxcIa-AEu1TOxgFXn6pfnTX0SRghGRQXWJ7pX4FyxXCtYgVZcizdzWYXDsjuniGxsZ7Fseq82seP18VGtjktQhMrtvaUA8Jywa7dw8bnAr0UHUblJdFxlZjBW60pkz0pwprtrH0HawXeX8rvCG-aOS2vxu1J5sc6KrD178iUTrLp9RML3CLV17zVWle_3IDixenpnqrgCC5dQs5UtgI-G4RJDJD_JsryCt0jFM3BXurw0i8EwmyDvidM3chJyOKApEAqYJxWJwFaD0Rq55AdcoaaYIcRSLR-XKyehwBwDQG1Vn9GK0izcjAB7P6GsQlLT2xtZFVAOvHA_qQPPN0Zfv-vmsfkYeMhyF7A9sYVugAQoTcW8JjMxobhLtfSKdekwwMa3XGygfInMzWvabqLgNyb6i-we90a61cf0k1CyWlqDY4sEhcjhlom7CfkbLkXSCpr07CEhC-__O7datSqgGJo7n9jLPZzoCd0IUUvlzNl0jqzhH72CtX4gO9FA0P68Xm6M1wdJLvjEJpnLCJXKOeakjvl_cRmZ-00PvMiPvdetB0aaa6aa5TM07xoxA2UlhLtRXwhT7Dx9P2cgGs2iIeu_lV2nQKzBjBYX-zoDnMnYek0HJxzMV4EEyr7jOcULVWQGZxpfAYFbYIq_oSYMDo4AK_aAcKIRl0VY4tJWbI0GqVC7NbcIRF8RYvbHVe8Z8KDxkxVTEOIiU6pdvMEGiNCUKfVKxvQBvQrXolU4z5jMWVyUO9SmlUvO7N5xaDSb0dS52BeXIxF7LNtv9_DtmRmh7CZZ_fgeq0RHsLweC1o5_8xn04zo6uQhApKUPYuskGFmJ1ybQNSMHOhu8qc-tgH4VtQHNzF0zvJ_FiNC0TDS9pajP_LMwVo8cGcJU9KaJqRhEdFkUQEVhQuiOB3bx2vzQOR3QVTQ031iWx-JmjM-z6UqNqSvv5U0AqNAs-mLT7hq9RVpZRCqhxy95E9AaJEqqT1_d5KN57OjjdMFhAuUCIqiV8YiauH3klr8t-Dc8VBcwMvENg88UYUzGI8XgPFn-JEkJAF1rGVrtTslwe9ABql_hrMCjKBRrbBVgbVdQeUTXu8Go7yKqYuJyYxlEiGCybg8-KoTP8GxjxgPfkZPsgTKGu6t66O-K0fV_jlTHFi3qjav-j3FJ5J3ftzhg396zhn-nF3w_OFAGwMhOcgw9xqyh5kkKSusqPPAFHd0youFFiovvpoX3R0eQKYZozSxo5WqmDeFhNDAUEEeB_6gKja7Usr8N9_eo03VDgomcGkq9DqjJK1g-hk9CIB2vvPEyqkv0nmiHNROyP-y7aIuxvxlstN54GhunTSolfK2zemrxvW8udZw--p4Wvbvjwro48Bsd_23lXA1PdsHfAaaWwoWARvOynnKwjbkaZLR7-BueNwDJMic3Id-NgShRXCneEQCnvIRp6UJj3dNvd1-0BuysK_AgfrScIRynHV0pkt9Zr4chVIiP77ftwR8-uhm6RCNZmOWzaUZYt84CNiZdD1rWKsa7AtJL1-PxlTXKIhH78J7l07kAomlW9N36GffMlXIJBO-h7WgtWvRrQI7J6ZV5-55rQS0RCK483wE4SRYEMVa2rRwS7_0gnjp7hJRqrIDkZoRr4NARoSkY6BRyXzlQyAybqLQ_6mGtWkwcOY3TsDSiAOSIYVzAOtzMaFrsGnOpLtjJkBgnTmMznj8bf5IqxoT7Y6HUCut5w4lU4wV7YymJ74wNQ2Qx6WYYe5YmEdxTNcByyZxZm1mGhSFbU4_MxhWSjokj0ZreeslceA0p-pQg\\\\\\\",1]],[[[\\\\\\\"A dramatic cinematic shot of a young man in subterranean B3 basement parking at Me Tri under extreme heat, 35mm RAW photograph\\\\\\\"]]],null,null,null,null,\\\\\\\"CC144D8D-2AFB-43C4-905E-7FA24E67E8D8\\\\\\\"]],1,[null,22,null,null,\\\\\\\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\\\\\\\",\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4Nb4t5YNsBWqExumuLjLcPOdartYsNEJ7gAdmifJ_vGRKBl6qrFDkGyb4hfz1ihHPMGgDDxQCh43Gbyo_ZGp0n0O7ahTSlRqjuEA9DB_LE1pLRBeVimWmfAIsntF6KPiDQoGahdsjFeAfYOWb4TVz6jx6UUv00wTeDhW0kgBE_7phXAe7f_x8m4TI1b0tRzkujO1oF6YyKDV0XvDytIBCRZoWA6pjWC8uXv-S7avM4fqulN2InDhAmQwWmFJrXIAqG5_OZLxfPP1u6Mm3EjB4ItC46ZXXmsWQi1-7FBGXzP49VrmAogkTiuVxHgpKn6PNGda0XkTQ1YjXh5G6AG_-i_P7RnA-33OIzd6ahxfzDjmUjVdbzFN7ku3fP_9uW3kIK5BPTUo-P3UxfOJyZ2k7DO20e71n26igAG58XdwOrczq4jadOKJxiDpQQq1LmwzT-ACSXrQYpMIhdfB0O7Toz0VGbbaBNfoyCoe4I3rspd_EpevQ29sAyy9mzQOrELJ-APS370BedC_e2Zy2PBkKIxawrVBdXis8_Lzz5T5oWBM41GfjI__8IGB_R_5o1-kIUM3_6VVWGMKECvz6YTcpkhqKjjymKr1B56J0yzrFIT_mRw92h07LeYoZ7UYOw3dhm3FpeX-Buv40dQBEVGxcIa-AEu1TOxgFXn6pfnTX0SRghGRQXWJ7pX4FyxXCtYgVZcizdzWYXDsjuniGxsZ7Fseq82seP18VGtjktQhMrtvaUA8Jywa7dw8bnAr0UHUblJdFxlZjBW60pkz0pwprtrH0HawXeX8rvCG-aOS2vxu1J5sc6KrD178iUTrLp9RML3CLV17zVWle_3IDixenpnqrgCC5dQs5UtgI-G4RJDJD_JsryCt0jFM3BXurw0i8EwmyDvidM3chJyOKApEAqYJxWJwFaD0Rq55AdcoaaYIcRSLR-XKyehwBwDQG1Vn9GK0izcjAB7P6GsQlLT2xtZFVAOvHA_qQPPN0Zfv-vmsfkYeMhyF7A9sYVugAQoTcW8JjMxobhLtfSKdekwwMa3XGygfInMzWvabqLgNyb6i-we90a61cf0k1CyWlqDY4sEhcjhlom7CfkbLkXSCpr07CEhC-__O7datSqgGJo7n9jLPZzoCd0IUUvlzNl0jqzhH72CtX4gO9FA0P68Xm6M1wdJLvjEJpnLCJXKOeakjvl_cRmZ-00PvMiPvdetB0aaa6aa5TM07xoxA2UlhLtRXwhT7Dx9P2cgGs2iIeu_lV2nQKzBjBYX-zoDnMnYek0HJxzMV4EEyr7jOcULVWQGZxpfAYFbYIq_oSYMDo4AK_aAcKIRl0VY4tJWbI0GqVC7NbcIRF8RYvbHVe8Z8KDxkxVTEOIiU6pdvMEGiNCUKfVKxvQBvQrXolU4z5jMWVyUO9SmlUvO7N5xaDSb0dS52BeXIxF7LNtv9_DtmRmh7CZZ_fgeq0RHsLweC1o5_8xn04zo6uQhApKUPYuskGFmJ1ybQNSMHOhu8qc-tgH4VtQHNzF0zvJ_FiNC0TDS9pajP_LMwVo8cGcJU9KaJqRhEdFkUQEVhQuiOB3bx2vzQOR3QVTQ031iWx-JmjM-z6UqNqSvv5U0AqNAs-mLT7hq9RVpZRCqhxy95E9AaJEqqT1_d5KN57OjjdMFhAuUCIqiV8YiauH3klr8t-Dc8VBcwMvENg88UYUzGI8XgPFn-JEkJAF1rGVrtTslwe9ABql_hrMCjKBRrbBVgbVdQeUTXu8Go7yKqYuJyYxlEiGCybg8-KoTP8GxjxgPfkZPsgTKGu6t66O-K0fV_jlTHFi3qjav-j3FJ5J3ftzhg396zhn-nF3w_OFAGwMhOcgw9xqyh5kkKSusqPPAFHd0youFFiovvpoX3R0eQKYZozSxo5WqmDeFhNDAUEEeB_6gKja7Usr8N9_eo03VDgomcGkq9DqjJK1g-hk9CIB2vvPEyqkv0nmiHNROyP-y7aIuxvxlstN54GhunTSolfK2zemrxvW8udZw--p4Wvbvjwro48Bsd_23lXA1PdsHfAaaWwoWARvOynnKwjbkaZLR7-BueNwDJMic3Id-NgShRXCneEQCnvIRp6UJj3dNvd1-0BuysK_AgfrScIRynHV0pkt9Zr4chVIiP77ftwR8-uhm6RCNZmOWzaUZYt84CNiZdD1rWKsa7AtJL1-PxlTXKIhH78J7l07kAomlW9N36GffMlXIJBO-h7WgtWvRrQI7J6ZV5-55rQS0RCK483wE4SRYEMVa2rRwS7_0gnjp7hJRqrIDkZoRr4NARoSkY6BRyXzlQyAybqLQ_6mGtWkwcOY3TsDSiAOSIYVzAOtzMaFrsGnOpLtjJkBgnTmMznj8bf5IqxoT7Y6HUCut5w4lU4wV7YymJ74wNQ2Qx6WYYe5YmEdxTNcByyZxZm1mGhSFbU4_MxhWSjokj0ZreeslceA0p-pQg\\\\\\\",1]],[\\\\\\\"5DAF8A3A-3AA1-4DAA-A775-9DE5847A8407\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:29:32.624Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=DTaVef&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=2275791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"DTaVef\\\",\\\"[1]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:29:39.227Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=205840&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],220865438,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5WtHcTtDcCFMDlN6d_nyuAk_KbYNsVA6cfXDA9KO9g44J6OMISnFLfdz_yB3cUo81ooTeAMLnP4FfdBD57dQXC9R5UimxhgLrF3ut5tWytNe6Ovtp09LKRt36htUCD0HoK1uxUO5jZO1-qfr8jyJwEkw8UllQhj7XUp8uxvuZCmubTZ0ub5gHMS5XBBWO8uv9NFuII0teKsXvfKamUjULlCk_0nhsYX6RmkUTCs8MJX9bk59aMC5TMoZVxeRmJ38rtgHVgN7Nm8pUX8_5N7vr_2jxLRt97GWjWCkS77a4Bpl6d4cHer8EMpQaxZjL_S0HUp48CDAECj6P4Ul8ysb8qDPIUBfpfPJyggStwjG4Sfbn4WzRK2awiiAJ49FZV6W-gdnCETF1ZPaBdH0vASJUSL-GzOotzTfW8Em9-pnZtKpJ88djUcLQqVEY6xorPPge_hGNMaaLoSudefW1SmOO30n2kJ_Zi7nWqY1BMykU0ZVhd2rpWv4VrtKgKQ8h0xEB9QSJZ6RsIaqlXysRsIS4sxETqer0zqhAuTfflJJnGMQIRTFrezIKC6HpqLo1KW6N201dd2IiFp_3OyeRAOWADKxrVJKXOeKbp8qlqSmt-nud-pMdVrvVuI8Qz60TMlHqbQGsLoeDRq1gSnxPzkWb-v0g93Cck_5DgsYASa27RWOWmwZdLzGPd9BsFpwCI41l37WevHj536FBMkINiZYQGtIGguJqqN1GsXvnr9p7Ez8E4NLKy9I3QB_3bNB6ywMe3LHulKUen5sVpDJFHlEF2Y7peHq8y5ChxqEGMrHizNooDvrsyYWDCCZgd7z7zCXw9Slz2j-6MadttMUPd7l2QoCiWXMhUWnsfZEfWVRd8piXBGkSTJsRn3DL-oOk1EsQBjeCVxuLB4-WdcsDij5rq_78KSLEaQF91pBdnTSYRz9S9PkQxi9KkoR3hrDN0sGwy9Bz8KVXjapu_5keQfyaD-a1-8JqUpnJYMWHJJEE_sdHkjh9_XWctqmvaJtanHcWM1Brx3xu3ka89y-ckVPx6d51bIhzGvp-ThV_LoUcmblY1pmIV8W2KCdb1jSm8M9l-mCoNiRyGHtEgyUky-o3yb8PcLY50meitugLa0xnhcUKybPy6AiNQWer4go9fpVQkqTakIigXPaZgdU39mf6CrCa4wJHv-_8ShLrEsgvYnSSyaWH5MdKV3NXRprUW-Z4u_AZBo3YPD6VFxXnpJTmv7k9CwM9bW42QsHUa7KRvOfWKDJztlP00-mgEOErFAwgBHpMkh5ZmngP66CVXF_Y_9r6CcH1Z7vsBYls_MhsGdFusS6pyjo2HxmJARScmE0xyRPtOLh-rsYucLbgQ5V6y8Lvg2m44bpzZ4JaU69IjiwJzlw6pOIMCH3SZx-2JwgdUOTAm3grqQih7kr_YODpgmViiw7FQ-pUWAOq0bGl4_Oy31tzDRX_PE4PRd9978rvMOIEKvIZ7oZ2wi0YMOOUAnVU0Ay9uwOd9bCZsqSwUoNIkX9BEhjpBzZPTqi8y6F06-5jQQIqxgc8L6irmEdD5gyFmePWdHyep4hnYqizaJ3ycXYug25KbdDgSSkKAfAI1EW5dFTzRY4o1D8OwsLuyMcZyix8L4SdfmTMsGVJywz8FeISp83HGKDnRyG_YSQK_rT2fxkiLrCupHOxX1_I4OjpTWCR_UlkKW27PJLS3q-59dSqWlKU7z8RbboBR8RTy2pIny_V3wfNElZoV-mV9Gq-wogIhM6GnovMztW6gdlMGJqKnHrrgNFv2-PJjm4fOhIoi4kr2SLBhfmPAZiNB9te_3TZXyrqYg2ZgS1bqKVZLW9T6CMFQdXWzjuWVbxvn8GQ2s2g836-QBwbMz9wQkg6wWrTRtBdYFsSKnEJpzRl_xGAdez83Z4sFgERC6gbZ9mPGlsJrrxxEImWn6L6-agH48jizRk7TGR92cB0pxIu2LC5ivdQ-Lg4rsKrtr2VWqLECW1vRJOvEr-Y1tUQO9cE6gA7o4fY8wsFCHZ3g6NVaAufcYzDx5MlsGjKzP8HRZAelIEyEEdVkXJPCUVXAWVNySNht4oY0sf7qJnynpVTmLSwTJ993PSyAXzQXwW7brv8nMa2nSPLrc5mpLSSFKRwSbeOOGjBcp7NWEKGmmPWsuru4wFmcBBumCkxiauWygNPz_CzWr1okVi_nsNh0VM2nlkkepIJWn67iU3hWdpf-rSPujNEZAnMuzt6iBbcD5gFZq_nk8fU2eCUKLxqAd9yUQ0ZPtgV1MQ5hhA3T6I_Bz1FiE11zQO21cL0vKRsVSRa_B3W0s_gRFJSLWxWudKDz3yEV0TjH5wcufNwy7nJG2n9p4OAqjBoj2fe6qwHjariFYQLfCTLM-h1wPMUQn0WJR2ozmjouqMMTI_rCiJyFjw1MmcXdRNA0C_J9H4MqEG5i\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"2FDB6047-5305-498F-A2A5-405FF62A2521\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5WtHcTtDcCFMDlN6d_nyuAk_KbYNsVA6cfXDA9KO9g44J6OMISnFLfdz_yB3cUo81ooTeAMLnP4FfdBD57dQXC9R5UimxhgLrF3ut5tWytNe6Ovtp09LKRt36htUCD0HoK1uxUO5jZO1-qfr8jyJwEkw8UllQhj7XUp8uxvuZCmubTZ0ub5gHMS5XBBWO8uv9NFuII0teKsXvfKamUjULlCk_0nhsYX6RmkUTCs8MJX9bk59aMC5TMoZVxeRmJ38rtgHVgN7Nm8pUX8_5N7vr_2jxLRt97GWjWCkS77a4Bpl6d4cHer8EMpQaxZjL_S0HUp48CDAECj6P4Ul8ysb8qDPIUBfpfPJyggStwjG4Sfbn4WzRK2awiiAJ49FZV6W-gdnCETF1ZPaBdH0vASJUSL-GzOotzTfW8Em9-pnZtKpJ88djUcLQqVEY6xorPPge_hGNMaaLoSudefW1SmOO30n2kJ_Zi7nWqY1BMykU0ZVhd2rpWv4VrtKgKQ8h0xEB9QSJZ6RsIaqlXysRsIS4sxETqer0zqhAuTfflJJnGMQIRTFrezIKC6HpqLo1KW6N201dd2IiFp_3OyeRAOWADKxrVJKXOeKbp8qlqSmt-nud-pMdVrvVuI8Qz60TMlHqbQGsLoeDRq1gSnxPzkWb-v0g93Cck_5DgsYASa27RWOWmwZdLzGPd9BsFpwCI41l37WevHj536FBMkINiZYQGtIGguJqqN1GsXvnr9p7Ez8E4NLKy9I3QB_3bNB6ywMe3LHulKUen5sVpDJFHlEF2Y7peHq8y5ChxqEGMrHizNooDvrsyYWDCCZgd7z7zCXw9Slz2j-6MadttMUPd7l2QoCiWXMhUWnsfZEfWVRd8piXBGkSTJsRn3DL-oOk1EsQBjeCVxuLB4-WdcsDij5rq_78KSLEaQF91pBdnTSYRz9S9PkQxi9KkoR3hrDN0sGwy9Bz8KVXjapu_5keQfyaD-a1-8JqUpnJYMWHJJEE_sdHkjh9_XWctqmvaJtanHcWM1Brx3xu3ka89y-ckVPx6d51bIhzGvp-ThV_LoUcmblY1pmIV8W2KCdb1jSm8M9l-mCoNiRyGHtEgyUky-o3yb8PcLY50meitugLa0xnhcUKybPy6AiNQWer4go9fpVQkqTakIigXPaZgdU39mf6CrCa4wJHv-_8ShLrEsgvYnSSyaWH5MdKV3NXRprUW-Z4u_AZBo3YPD6VFxXnpJTmv7k9CwM9bW42QsHUa7KRvOfWKDJztlP00-mgEOErFAwgBHpMkh5ZmngP66CVXF_Y_9r6CcH1Z7vsBYls_MhsGdFusS6pyjo2HxmJARScmE0xyRPtOLh-rsYucLbgQ5V6y8Lvg2m44bpzZ4JaU69IjiwJzlw6pOIMCH3SZx-2JwgdUOTAm3grqQih7kr_YODpgmViiw7FQ-pUWAOq0bGl4_Oy31tzDRX_PE4PRd9978rvMOIEKvIZ7oZ2wi0YMOOUAnVU0Ay9uwOd9bCZsqSwUoNIkX9BEhjpBzZPTqi8y6F06-5jQQIqxgc8L6irmEdD5gyFmePWdHyep4hnYqizaJ3ycXYug25KbdDgSSkKAfAI1EW5dFTzRY4o1D8OwsLuyMcZyix8L4SdfmTMsGVJywz8FeISp83HGKDnRyG_YSQK_rT2fxkiLrCupHOxX1_I4OjpTWCR_UlkKW27PJLS3q-59dSqWlKU7z8RbboBR8RTy2pIny_V3wfNElZoV-mV9Gq-wogIhM6GnovMztW6gdlMGJqKnHrrgNFv2-PJjm4fOhIoi4kr2SLBhfmPAZiNB9te_3TZXyrqYg2ZgS1bqKVZLW9T6CMFQdXWzjuWVbxvn8GQ2s2g836-QBwbMz9wQkg6wWrTRtBdYFsSKnEJpzRl_xGAdez83Z4sFgERC6gbZ9mPGlsJrrxxEImWn6L6-agH48jizRk7TGR92cB0pxIu2LC5ivdQ-Lg4rsKrtr2VWqLECW1vRJOvEr-Y1tUQO9cE6gA7o4fY8wsFCHZ3g6NVaAufcYzDx5MlsGjKzP8HRZAelIEyEEdVkXJPCUVXAWVNySNht4oY0sf7qJnynpVTmLSwTJ993PSyAXzQXwW7brv8nMa2nSPLrc5mpLSSFKRwSbeOOGjBcp7NWEKGmmPWsuru4wFmcBBumCkxiauWygNPz_CzWr1okVi_nsNh0VM2nlkkepIJWn67iU3hWdpf-rSPujNEZAnMuzt6iBbcD5gFZq_nk8fU2eCUKLxqAd9yUQ0ZPtgV1MQ5hhA3T6I_Bz1FiE11zQO21cL0vKRsVSRa_B3W0s_gRFJSLWxWudKDz3yEV0TjH5wcufNwy7nJG2n9p4OAqjBoj2fe6qwHjariFYQLfCTLM-h1wPMUQn0WJR2ozmjouqMMTI_rCiJyFjw1MmcXdRNA0C_J9H4MqEG5i\\\\\\\",1]],[\\\\\\\"7CB340F6-610F-4028-A515-9AC8D33E16A1\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:30:04.275Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=763711&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],163715532,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7y5tAKFW7P63oi8gTcg4nMKrUG2meHNxQlTztEORA6cZGJBsknv2OVgtkTuEYZY80Yldih4t8uee3dG7jeKi-frdRKrk7P-rOiqqMkNkBSW_oqN3poIIwYnPsGP0qipxxZ7xbS0UlAqZog55ok1NemZLQuGMw77p__cqUt-d7ttv3BbhkdhoVAr77tHASFQOjEvEobR27gZ5qCVqmNIVmt1pndiJwXozDrwEIpq-ERzh0FfHfnGKFRVW9P5FuHD1p_bVBvkoVoahl77_k-Cv9M19YzMBNdAPrClLszOVyqQCHcdy4YVSF_O64-OGd2g22fJXSFOmvn8bt7_kTCOX_j9vHdmpFfZ-CHuNrN3enT-HwEEWx20_-aVaDKyIeTBigjoRpQeBoOGFs0cQ15euwHBXcigFDZpBxEpUIkt1iedgPGdc0mu_N8Je-gQJ5G8WImGjqdL0nm4bmCMimer4DPnlt8Vpt9om0qjhiNjOxxxnfQ4OzeH2EjcOUWgfx_-dNBVR_lvSqXDlzEC1NLiq9t4C-OXS57rnf7bykT2jBNf6vbgfHNe4xxGlWWtAWHg8_XSd9NLXTM-Sx8C0wSRPY71KAVOynL3q1dr5BPVEbqTAVOeiV94-HDaaRe4dUHo3rGkmYf96_7XkwOW1PpSVgHFBHR8PjSETWWnhA2CRm8Pt-DEaR3t9tdWU32RehwCLACdwDiGn3FLdfvaxG20Uq0eZbMqc6_cGNonhlwAd3f8fCLJXGY7FTwMENXPlld2UyS_4yDvaQE5e6T3tNUXcCaiBoszlA6Z2eIyrm3sIDKq3RsHVH666E7XZwF8BszcBfXOCBZpBoVrbLkCY2yhp09gdoKeSFQRylbjUPrC4z-YOC-4HSxjblLnr6eZQSYCHUjAcdEmI3GFeJr71KjIvAB4hwIHdmLmYgejRUSCcHnRggCQ06tlCKRs7Im6hU3_veW3shxmdMx9CzSUKmmrTJYRKuCH1eGhPAXRyjS89MwArlpkJS-ewdYJ40l-QTLuMfCkySSjR8c4rGKHczJbFDAzy-rBkZYqac6bkP6vKf98oZKyLpoeSnxCpLsqZKJFvneMSscQ4AJdWyubp42_eBIfgSEH01kUT3n1JOnJUxbiuLvT3WzDFQGoS1MZMh5OZwkBPDsrFbZU7thrK2F8sr9D6rEDaJJcn3n2KgbIrtaI_VeUVaPz7ou-yCUbqzpBs9_rk8JHod2ouUdheKazUfMJ06c_UnOluygMT2UEkeJ3y9sG1fPOJ-hWbzh3-vs43o402U7AHCXFLcEBUvmp-JmeGYZJ8r3TbcK9-nWLach73TWgUXPtD_4BEg40xzlox_NbB3IDXGMo3KsdiBwu78zqWoM4UE7pIfG--UPOp1mNae_TWo4eMh4BtDryImQU4Kiu9UbBTTmmHwEezlUoFUNSsfJJ-kTx4zXYbHQBWuaXOrYNZ4ayD0jGTdqPO4uPkEzefihfLxixXlw7RYdYj5Tlx_xe3PxGw8LOdGSgkS4p7Rk5jvgcov-3WpZiEsb_TT9aCkITj3bTv1HFIJwNnjeTYKvrl20DjZ0NNcU4CYUwFOCKUVhSxtBmF5vBYyX8SlEq6ZhX-4o0TrYT6cI8RLP4Dm4P0uLzD0ih26A6HlZ8hpjc9_FNKa-XUYxFWYUpDH92l04JfBNQVDvbWDq55DIYDGMktNTYJ7PUmPOhv_1bDBeaHxfUyWyfhHVLqBoDT0Ht30Ty1Pr4X6b5AQRN15N42pTaSavm0sDE8R0w98zmmhXUQX0h-ybLuQG1EIP3G70dqB3h1B3b7MLgWb99Zojcp7arcB3bKzSmJVopbaf9hWORDkUu-WiPG3UfkiAC-pUoRrGiGUQA76lrN2wtxSP6iqmjXHpsVGksGdEUAtMqIsbfR4pmoTpzhqOP8cMN2KMgfUE0sVMsOg3bEzbWboEGEmbCG3BcYJQ1kR_iQAGAI7HjmUmYrZEL-Rt1vSuyymADqI2oNnfzgasL53ywGTpOFxNXf5L5G8_UnVRLvC4YUEp_cotvd-_TQ6uFsUuV-SHa39POIkNUqO6PyN-VtwjuyufVlgj-gf8jbQiHA0iS_OQt6dSRzubk30R1osem2q-YHvVE-1Av-FcuTSUK5UHvkQAscuov4qJGHqPMWiNNWAAPuOAWyh3QVClfbgrHAusabQyvIXYfmp81kX1dYzdOzHX2xAtMh93fGMqNFJJ1nLhmoGAB_TmpTHsuot7xASd5nkgaYNyslgDEJPw8bADtZzPY2avePwTE70dZTvxffxjxxyLk3pQxpsdalq1CQT_SSpMX5R6CXoeM5mW6G-_Ht7Zr2WPJbjE4bmVmlBjRGuT5ZQts8bN4Dg0-4QRkjed-J3xFa7ecEXluEyjqrjodW8tllKSa9dos0zG5T3yiQSPv73lQpA4xXi99UhfKlvXQJLx\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"3BB9A74B-4C9F-42D9-A274-B3C0DA4F3F70\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7y5tAKFW7P63oi8gTcg4nMKrUG2meHNxQlTztEORA6cZGJBsknv2OVgtkTuEYZY80Yldih4t8uee3dG7jeKi-frdRKrk7P-rOiqqMkNkBSW_oqN3poIIwYnPsGP0qipxxZ7xbS0UlAqZog55ok1NemZLQuGMw77p__cqUt-d7ttv3BbhkdhoVAr77tHASFQOjEvEobR27gZ5qCVqmNIVmt1pndiJwXozDrwEIpq-ERzh0FfHfnGKFRVW9P5FuHD1p_bVBvkoVoahl77_k-Cv9M19YzMBNdAPrClLszOVyqQCHcdy4YVSF_O64-OGd2g22fJXSFOmvn8bt7_kTCOX_j9vHdmpFfZ-CHuNrN3enT-HwEEWx20_-aVaDKyIeTBigjoRpQeBoOGFs0cQ15euwHBXcigFDZpBxEpUIkt1iedgPGdc0mu_N8Je-gQJ5G8WImGjqdL0nm4bmCMimer4DPnlt8Vpt9om0qjhiNjOxxxnfQ4OzeH2EjcOUWgfx_-dNBVR_lvSqXDlzEC1NLiq9t4C-OXS57rnf7bykT2jBNf6vbgfHNe4xxGlWWtAWHg8_XSd9NLXTM-Sx8C0wSRPY71KAVOynL3q1dr5BPVEbqTAVOeiV94-HDaaRe4dUHo3rGkmYf96_7XkwOW1PpSVgHFBHR8PjSETWWnhA2CRm8Pt-DEaR3t9tdWU32RehwCLACdwDiGn3FLdfvaxG20Uq0eZbMqc6_cGNonhlwAd3f8fCLJXGY7FTwMENXPlld2UyS_4yDvaQE5e6T3tNUXcCaiBoszlA6Z2eIyrm3sIDKq3RsHVH666E7XZwF8BszcBfXOCBZpBoVrbLkCY2yhp09gdoKeSFQRylbjUPrC4z-YOC-4HSxjblLnr6eZQSYCHUjAcdEmI3GFeJr71KjIvAB4hwIHdmLmYgejRUSCcHnRggCQ06tlCKRs7Im6hU3_veW3shxmdMx9CzSUKmmrTJYRKuCH1eGhPAXRyjS89MwArlpkJS-ewdYJ40l-QTLuMfCkySSjR8c4rGKHczJbFDAzy-rBkZYqac6bkP6vKf98oZKyLpoeSnxCpLsqZKJFvneMSscQ4AJdWyubp42_eBIfgSEH01kUT3n1JOnJUxbiuLvT3WzDFQGoS1MZMh5OZwkBPDsrFbZU7thrK2F8sr9D6rEDaJJcn3n2KgbIrtaI_VeUVaPz7ou-yCUbqzpBs9_rk8JHod2ouUdheKazUfMJ06c_UnOluygMT2UEkeJ3y9sG1fPOJ-hWbzh3-vs43o402U7AHCXFLcEBUvmp-JmeGYZJ8r3TbcK9-nWLach73TWgUXPtD_4BEg40xzlox_NbB3IDXGMo3KsdiBwu78zqWoM4UE7pIfG--UPOp1mNae_TWo4eMh4BtDryImQU4Kiu9UbBTTmmHwEezlUoFUNSsfJJ-kTx4zXYbHQBWuaXOrYNZ4ayD0jGTdqPO4uPkEzefihfLxixXlw7RYdYj5Tlx_xe3PxGw8LOdGSgkS4p7Rk5jvgcov-3WpZiEsb_TT9aCkITj3bTv1HFIJwNnjeTYKvrl20DjZ0NNcU4CYUwFOCKUVhSxtBmF5vBYyX8SlEq6ZhX-4o0TrYT6cI8RLP4Dm4P0uLzD0ih26A6HlZ8hpjc9_FNKa-XUYxFWYUpDH92l04JfBNQVDvbWDq55DIYDGMktNTYJ7PUmPOhv_1bDBeaHxfUyWyfhHVLqBoDT0Ht30Ty1Pr4X6b5AQRN15N42pTaSavm0sDE8R0w98zmmhXUQX0h-ybLuQG1EIP3G70dqB3h1B3b7MLgWb99Zojcp7arcB3bKzSmJVopbaf9hWORDkUu-WiPG3UfkiAC-pUoRrGiGUQA76lrN2wtxSP6iqmjXHpsVGksGdEUAtMqIsbfR4pmoTpzhqOP8cMN2KMgfUE0sVMsOg3bEzbWboEGEmbCG3BcYJQ1kR_iQAGAI7HjmUmYrZEL-Rt1vSuyymADqI2oNnfzgasL53ywGTpOFxNXf5L5G8_UnVRLvC4YUEp_cotvd-_TQ6uFsUuV-SHa39POIkNUqO6PyN-VtwjuyufVlgj-gf8jbQiHA0iS_OQt6dSRzubk30R1osem2q-YHvVE-1Av-FcuTSUK5UHvkQAscuov4qJGHqPMWiNNWAAPuOAWyh3QVClfbgrHAusabQyvIXYfmp81kX1dYzdOzHX2xAtMh93fGMqNFJJ1nLhmoGAB_TmpTHsuot7xASd5nkgaYNyslgDEJPw8bADtZzPY2avePwTE70dZTvxffxjxxyLk3pQxpsdalq1CQT_SSpMX5R6CXoeM5mW6G-_Ht7Zr2WPJbjE4bmVmlBjRGuT5ZQts8bN4Dg0-4QRkjed-J3xFa7ecEXluEyjqrjodW8tllKSa9dos0zG5T3yiQSPv73lQpA4xXi99UhfKlvXQJLx\\\\\\\",1]],[\\\\\\\"BFEB80D1-0767-4C98-B0B9-D1C7AF03778B\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:30:29.353Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=843390&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],645974132,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7TPwwSQ7nAoqHNGRlqWyJwQh9SpqyU0vufUYvJ8kxdbZ9Z98AZS8d9M-HPAzsOd0aohP0w7IRNFuPot5HgcTonjQseWxLEejWglHd5TyDEcg7bHz0vlH6CM8-MosTGBjVXJQOupDkG2mRWQw5-McQt_9EYvNv1qbrtyUcg4UU8OggY-qzH06pH3Gsqz7jIs_60LLF54dw9-ea92JDTtce0u1YV3sxWnAzZj2Ude0g0GMNBYBRY5FTOgQsDbgWX3ekqXOg-MLmwH48HYPrM1diz07_RmQcOGeaK2lThLJu66NApCqER5inz4ujiE99SmTEXESXgXQIXEtXdWNMYY4Ba4xvkr-D9MwLaqLQxSau9zOsEBsMF_mTxm8NjK2MNvqGVCwGCB44OyfCAzkesaDlKdOtHLapv4TeYG_30_Ms3Q6DS30neMyJhl4gnbcWQaO0I1CDR2RPhujsvGOmv5OMaArR5j9IBhnfADP_W8WLuMuZx7ZyEVobu8FZ2QV8AJkmtloCsplCwe_I5Oe5dUEkeOLdETYThk9R8Ife5nq8rdAOWs7Da8vGUu0vSYJUqzsA1ncNyaX_2u-LtOma-2_oHsIXYgqPVm5wP4LIx02_O-Y3EdRwPUgmyB8VYFl0dMQIWmmrkX9aBQPLesV16QCJnLQr7F00YX1oyb0crXlnbHD6d6r9KVeFL-opTGpDc0Q6oP3_AZPXw-1v3rMpnxzvUM_q7bmonsP4nLzsKXYHIkzUY-BqcY9RsqYtGiayzJv7Nvyt8I_mmCapkQlRLQAkJPO6-sGvkhh0ETAH8sxDteUpl7m10w8nWZ86ofA-OnNzGGOGDWXI9bsmah2uDlyKVFzwOMtkvVdvvcgD89ZHWvrqgOEp-oykiOnAmmCikyap8OMULsAKGiN52EL-ZM5OWrLejCY-xutinKm28vrIA7toAy08S3wdbFjjNyTFADpJqZdeV0NoLVePoR4sRm-6yF0egNgnTJNq8EZaTDT010UAsYk16GCV9olVHoRqn8hM1KB1E8JRfY18KoFtLVpCxl50BmWHyp1D8D6umCnmb2MFnHB33AcBsDxHyN8kTq8TGwp3l7aWcdIuMQCj4BTW_Wcqz_T9wa498vejEj0ge_GAfEQVcwW7ime5E0vLNDHLq0ba4i45W0SKmfBo422cbq4E61WGzoJFGS_X7hu77q5Cy3IF8H8uWZOmy98yBgzaBJ6dVv_Qj2EyYgfp0bNgoAAISeSnhFPbYQaRQnotKamzEAuasZYN-e-6AylUIAgRVrFyIXQYMFpKSRThLi0mwvGWZoLnN6Fxr28apHp1r9mykMcbwsWF_lJzHyAgbNcobF4bla90ivK199VTUA1wPRMRlcPlJsDHIdcZg8OChvewRpTM8RbqmLQnVxjoZ9S3GNvukQdyyta7qTrGEUFjnniZ5xj0WzgRP4dBV3dh3O3X_mJM892ARBm554wZXU7THtT7fr4Fx-sX1xbQW-yUSTQyBQGepnKzU-TJ3NwL_eac5pkitqvOLmSkKDH1-G_GNVvksehkegBiSDPnjNvfdxwYdOdHDvhy37pW110yE6CLPOfXI4hwjoP76emQjVZ9mbsI9Q3ZPTy6bktyaBsvhA8_T0qaWBPPsdqG45Y18jVLI1E_1VjxcnJd-NfcLzdv1x6j1rLqHPy77sYkAnb3I8ZIrLSH8NznlK_eJqhhOTACWwExcqVdS1hpow1qpgRC9FhPe3OrWChd0MLJdE_6_ebeIqMhRWg1KJj7UXalmtwzfpi2dGhFT8mIYT4wndr1OXCjno1MDPsdroBDhwBxJsNjn5tZn2aRYNunDmWQdUKvm8b4WY-755DERXnb3cYXGfWh7Wr4utaENXgv68JQcTEfYhbnWMyku729YhYIiM-2IibQpA-7Vzc4ne70qnSi1sP-YA5Rdjhj_uqKHKERf4wJsWsG62DqMdNXAl97apsFfO3A2s7ED8Mxlgm1VdykCH8lWWj08viAyFulJgcLTJzWQWCIoni5tavqSlZ7OxfRkaDyoH1n6Qm8Zim9nsGI_yIG1pN9vJJ1TPsfIEP6GBMt6wvIy2o09q9dffBjKbSxitnhHtggrT4HBqWb7Hg_WpFVcPVdg69QJp_dHSBmSBULB2Z2r5jteVEc8D1PTb705KU49undkrOU02fuW5rlpPDBl8TNx6hnJrn2yKKezCmA1Ay55hQWMcAZ6VDlm-mtVNyQuxE0xN4mwWIeIQr6aUQIs13VFg3EY6Y0djfrC8PrG06YBpKc3FL289E64-H4cCdv5894xmFO6l2zZ4oyQmW-SBLzujqSJ_6I5vEkSOCUUAsHJ5zEKY5-PUh1ru20Y0GwYgadGzgcFNRAtxqRj45xO1JEiRPv0b2qbVNYfrNt4bAIZU-Ppn6Rykk33ktc9RngUMlRNe9FSLkcszeLK63xAnEU1DWm3NMELBpmHrtfdIg\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"C1BC702C-E7C4-4F57-868A-53AE460909BF\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7TPwwSQ7nAoqHNGRlqWyJwQh9SpqyU0vufUYvJ8kxdbZ9Z98AZS8d9M-HPAzsOd0aohP0w7IRNFuPot5HgcTonjQseWxLEejWglHd5TyDEcg7bHz0vlH6CM8-MosTGBjVXJQOupDkG2mRWQw5-McQt_9EYvNv1qbrtyUcg4UU8OggY-qzH06pH3Gsqz7jIs_60LLF54dw9-ea92JDTtce0u1YV3sxWnAzZj2Ude0g0GMNBYBRY5FTOgQsDbgWX3ekqXOg-MLmwH48HYPrM1diz07_RmQcOGeaK2lThLJu66NApCqER5inz4ujiE99SmTEXESXgXQIXEtXdWNMYY4Ba4xvkr-D9MwLaqLQxSau9zOsEBsMF_mTxm8NjK2MNvqGVCwGCB44OyfCAzkesaDlKdOtHLapv4TeYG_30_Ms3Q6DS30neMyJhl4gnbcWQaO0I1CDR2RPhujsvGOmv5OMaArR5j9IBhnfADP_W8WLuMuZx7ZyEVobu8FZ2QV8AJkmtloCsplCwe_I5Oe5dUEkeOLdETYThk9R8Ife5nq8rdAOWs7Da8vGUu0vSYJUqzsA1ncNyaX_2u-LtOma-2_oHsIXYgqPVm5wP4LIx02_O-Y3EdRwPUgmyB8VYFl0dMQIWmmrkX9aBQPLesV16QCJnLQr7F00YX1oyb0crXlnbHD6d6r9KVeFL-opTGpDc0Q6oP3_AZPXw-1v3rMpnxzvUM_q7bmonsP4nLzsKXYHIkzUY-BqcY9RsqYtGiayzJv7Nvyt8I_mmCapkQlRLQAkJPO6-sGvkhh0ETAH8sxDteUpl7m10w8nWZ86ofA-OnNzGGOGDWXI9bsmah2uDlyKVFzwOMtkvVdvvcgD89ZHWvrqgOEp-oykiOnAmmCikyap8OMULsAKGiN52EL-ZM5OWrLejCY-xutinKm28vrIA7toAy08S3wdbFjjNyTFADpJqZdeV0NoLVePoR4sRm-6yF0egNgnTJNq8EZaTDT010UAsYk16GCV9olVHoRqn8hM1KB1E8JRfY18KoFtLVpCxl50BmWHyp1D8D6umCnmb2MFnHB33AcBsDxHyN8kTq8TGwp3l7aWcdIuMQCj4BTW_Wcqz_T9wa498vejEj0ge_GAfEQVcwW7ime5E0vLNDHLq0ba4i45W0SKmfBo422cbq4E61WGzoJFGS_X7hu77q5Cy3IF8H8uWZOmy98yBgzaBJ6dVv_Qj2EyYgfp0bNgoAAISeSnhFPbYQaRQnotKamzEAuasZYN-e-6AylUIAgRVrFyIXQYMFpKSRThLi0mwvGWZoLnN6Fxr28apHp1r9mykMcbwsWF_lJzHyAgbNcobF4bla90ivK199VTUA1wPRMRlcPlJsDHIdcZg8OChvewRpTM8RbqmLQnVxjoZ9S3GNvukQdyyta7qTrGEUFjnniZ5xj0WzgRP4dBV3dh3O3X_mJM892ARBm554wZXU7THtT7fr4Fx-sX1xbQW-yUSTQyBQGepnKzU-TJ3NwL_eac5pkitqvOLmSkKDH1-G_GNVvksehkegBiSDPnjNvfdxwYdOdHDvhy37pW110yE6CLPOfXI4hwjoP76emQjVZ9mbsI9Q3ZPTy6bktyaBsvhA8_T0qaWBPPsdqG45Y18jVLI1E_1VjxcnJd-NfcLzdv1x6j1rLqHPy77sYkAnb3I8ZIrLSH8NznlK_eJqhhOTACWwExcqVdS1hpow1qpgRC9FhPe3OrWChd0MLJdE_6_ebeIqMhRWg1KJj7UXalmtwzfpi2dGhFT8mIYT4wndr1OXCjno1MDPsdroBDhwBxJsNjn5tZn2aRYNunDmWQdUKvm8b4WY-755DERXnb3cYXGfWh7Wr4utaENXgv68JQcTEfYhbnWMyku729YhYIiM-2IibQpA-7Vzc4ne70qnSi1sP-YA5Rdjhj_uqKHKERf4wJsWsG62DqMdNXAl97apsFfO3A2s7ED8Mxlgm1VdykCH8lWWj08viAyFulJgcLTJzWQWCIoni5tavqSlZ7OxfRkaDyoH1n6Qm8Zim9nsGI_yIG1pN9vJJ1TPsfIEP6GBMt6wvIy2o09q9dffBjKbSxitnhHtggrT4HBqWb7Hg_WpFVcPVdg69QJp_dHSBmSBULB2Z2r5jteVEc8D1PTb705KU49undkrOU02fuW5rlpPDBl8TNx6hnJrn2yKKezCmA1Ay55hQWMcAZ6VDlm-mtVNyQuxE0xN4mwWIeIQr6aUQIs13VFg3EY6Y0djfrC8PrG06YBpKc3FL289E64-H4cCdv5894xmFO6l2zZ4oyQmW-SBLzujqSJ_6I5vEkSOCUUAsHJ5zEKY5-PUh1ru20Y0GwYgadGzgcFNRAtxqRj45xO1JEiRPv0b2qbVNYfrNt4bAIZU-Ppn6Rykk33ktc9RngUMlRNe9FSLkcszeLK63xAnEU1DWm3NMELBpmHrtfdIg\\\\\\\",1]],[\\\\\\\"30C8F3F6-532D-44B7-A99D-AF63A49DCEB9\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:30:54.356Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=501992&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],988425786,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA60etiU9ZtZTl0i6mPqFxAnzpKxqYkLtajfBL-dq70binKLvkfdfsoxUYQGRPrLO0fsdktiRtGV2bfKgoJYL5400onzr-CkVMycBoGFYM55QNo7tvqxyvTapBrlyRnST3DMGutHqmA9I_8wuTp5A4oBGTIYirChByFN_vMOyW7r0U33mvMO9gIpXzqoalWZXnsjbl3-3W5QIWlP5tRHnSSn9C3oS2Vni7sHDVNPmVfNomHHo9A2L5PcdAQzepEqzjd0AQiWSeASz4ANfeS3mk2_U0Uu6WfcHSAFEfC4TAb5V8G8FxePymKLkRmiZgk6HGXMyQsjlkAUAyOjp5gn27vBC6TXax558AzKjp2WT1w-8FMKfzhGtNACC1qEWSgDKAln7sR8WMhfa6QTfIb4a6DY9m-4MCPBYHvXBCKXC0v8zt4cA6sN2MkChfu9LHMuSV-Sb-r5y75WZOcugro78iPKEYDYTBYFwLd6ARb8mI9fl8fRtb-dY8U2erNd32q6aq1dRhW3no9pSwRDdMubLPQDz64YaAzejLIBFjKqfb47_1-ugsU4VisfVFT2HhYn0t-zEYWGP5h4dFLWo0z9TlpXa0RrhRW7WChJLQ9zv4FW3Bu8qXHimRnSIf8oFx3LglNZTHahnl7RS2Jm_MVySAyRmwtD594Crf93htOq2NZG8tqBS-Jwcl9uO-PMDm7T-Pq_iBSB6oJ1hUGLt0ny693MHiNrD5FkadzsiKHQHOc6rXQuThhnhhfdksu0xCQcTRgt2bUo3L5s6onkqzlJuaqOYkPcHecFh4T9U4E-YyEzVfKYmAjhRWvj3KioJhxtl-nS-u3ZdTiW_YwJBejIRRsgJH0vm2WCPbbfSPrag9XgbMoIwVlCy8hRPSQPBeF92FwLMrYFjIgl22proAew87T3xClPdTpjQkgvwJpLomoI1bG-FiRUO0qCOk_cc5C-s-UR8VEb9s4rhQEiDiDbdOfRzng5Fm8yDcf9Lfj_8IIssBTxXBZJIL_H0xIVGmZvHhcyi71xDgEhf7TtkQoL5r3-ZEe94ngJypTmoxGDDOBaqDYp_fU6PNWTLVVQFarqLyngVAnKTHbWgXzbokx063ZieCFKx6I0E5zz1r1MW5iRbu4-yV6FOZmCYrwO9m18jSaO8Djv85pdaQPVFxAJhDOYl_D1tXtDh5LeixZWy39sbpmIQpNmkaC2m33PLmPK-TSBBPGHqfCGzYz7UfkAHXlUS_cE4TiHgEOSUTc4yCppUSPKLhqhJw1uDku5R7xzJEqzqTwNIRVP6-8cjTDUWgzB-ppHGEoilsp51y-KRSaLUU-BVV_nB7ls7yoTxCJxlSVUlWNtUFvJLnmEDD7v38nTZawKuaBDuAUp2Ef83nNpN-ffZb3p2zlkujdm-ZHSswQUxkkysj8WGdzl_X029du_rEhFbrCTbk1r6R7MPEteJAWdctTtlLWksDNmzjSuucs6bveUue3S09JOYfRvoS1RC0WGGrDQjdjSyuVy2PmLIj2BTrnFRfPzpt4WoaDdj0hisGKtQnCdKNxF6agnbQ7zpMS3raxuU-PZ5xwpu87zDzu_mkTRGpM44BWGJckgCK6u6wD8itZ6ALZeOEydFlW73_xwxwcg4L8neajXWkuCUhj2er-_Sm5C4Df3ZaxkDQ781ZhzltFrJHZ2pReJHdeV6xvrZXgd6TXI-PZ7VrZbyswlRSgF3UHRReryr7qAnjBmLFyCwsfloXG20VTfwXav1aPpUC1S6eFBonBXuRi90PP6JH02e2mA1VGQ-AytMvb6aLL5L_2xu058v5KnOVxQo5x3-t6U_gFdNNdY6kZ_811JMQDZOw3ZDemKVI7MLgKW2P6RttUtSkj0zS_2WpuRvIIq5l75taYYU2AD_-2gk4PjZE2jEclV0lez4G125VWKoquWNr3DVmu53ERBbD1giRXs7FxyZs9OX0eo7DFfYxabmDkILe1CFoOi5oA49hmJUK4kKJJVIcmG4ccgpZe_mwi9fI9TwynV2meg9SIvUYlyuoTzO1FFataO2aWck1X2Al2UtR3nJFBYa26IJg-z4gi1Czl1hWNUKJ2_q33zUyh0hRPczJw3Q0C2bYg9y56DALLr_KPw_86mzZdkmQDTGZGEA2ZF79q7b2P2DfGtUoKQEtz10Ns3JLQNMpsJiskFmd3pvgI9AVeBg9GsElJ8xLDmPU9J5x2U8f8n-2FOXyHBZpPtNjqIz1m3WikdRoAd4kHZxoHxcH47qHUQE8XeX3M1FvW7yIV7L936P7ju4_E4fH2wkO_LWn2wihLeGsKympBdkcxdajVBJlAFV1MXIGaiA0yJuwl-neaxxUiB3bAct-03TqnJ1uNqf_PI2l2A06BG7x3WfKJ6YdUJUDuvsRUKx4WNotsr0pmTymXkSIpG-yqV2woh2ZbwaEdCKwWNmBuU\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"E184DD5F-485B-4655-9F2D-9EF01463550F\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA60etiU9ZtZTl0i6mPqFxAnzpKxqYkLtajfBL-dq70binKLvkfdfsoxUYQGRPrLO0fsdktiRtGV2bfKgoJYL5400onzr-CkVMycBoGFYM55QNo7tvqxyvTapBrlyRnST3DMGutHqmA9I_8wuTp5A4oBGTIYirChByFN_vMOyW7r0U33mvMO9gIpXzqoalWZXnsjbl3-3W5QIWlP5tRHnSSn9C3oS2Vni7sHDVNPmVfNomHHo9A2L5PcdAQzepEqzjd0AQiWSeASz4ANfeS3mk2_U0Uu6WfcHSAFEfC4TAb5V8G8FxePymKLkRmiZgk6HGXMyQsjlkAUAyOjp5gn27vBC6TXax558AzKjp2WT1w-8FMKfzhGtNACC1qEWSgDKAln7sR8WMhfa6QTfIb4a6DY9m-4MCPBYHvXBCKXC0v8zt4cA6sN2MkChfu9LHMuSV-Sb-r5y75WZOcugro78iPKEYDYTBYFwLd6ARb8mI9fl8fRtb-dY8U2erNd32q6aq1dRhW3no9pSwRDdMubLPQDz64YaAzejLIBFjKqfb47_1-ugsU4VisfVFT2HhYn0t-zEYWGP5h4dFLWo0z9TlpXa0RrhRW7WChJLQ9zv4FW3Bu8qXHimRnSIf8oFx3LglNZTHahnl7RS2Jm_MVySAyRmwtD594Crf93htOq2NZG8tqBS-Jwcl9uO-PMDm7T-Pq_iBSB6oJ1hUGLt0ny693MHiNrD5FkadzsiKHQHOc6rXQuThhnhhfdksu0xCQcTRgt2bUo3L5s6onkqzlJuaqOYkPcHecFh4T9U4E-YyEzVfKYmAjhRWvj3KioJhxtl-nS-u3ZdTiW_YwJBejIRRsgJH0vm2WCPbbfSPrag9XgbMoIwVlCy8hRPSQPBeF92FwLMrYFjIgl22proAew87T3xClPdTpjQkgvwJpLomoI1bG-FiRUO0qCOk_cc5C-s-UR8VEb9s4rhQEiDiDbdOfRzng5Fm8yDcf9Lfj_8IIssBTxXBZJIL_H0xIVGmZvHhcyi71xDgEhf7TtkQoL5r3-ZEe94ngJypTmoxGDDOBaqDYp_fU6PNWTLVVQFarqLyngVAnKTHbWgXzbokx063ZieCFKx6I0E5zz1r1MW5iRbu4-yV6FOZmCYrwO9m18jSaO8Djv85pdaQPVFxAJhDOYl_D1tXtDh5LeixZWy39sbpmIQpNmkaC2m33PLmPK-TSBBPGHqfCGzYz7UfkAHXlUS_cE4TiHgEOSUTc4yCppUSPKLhqhJw1uDku5R7xzJEqzqTwNIRVP6-8cjTDUWgzB-ppHGEoilsp51y-KRSaLUU-BVV_nB7ls7yoTxCJxlSVUlWNtUFvJLnmEDD7v38nTZawKuaBDuAUp2Ef83nNpN-ffZb3p2zlkujdm-ZHSswQUxkkysj8WGdzl_X029du_rEhFbrCTbk1r6R7MPEteJAWdctTtlLWksDNmzjSuucs6bveUue3S09JOYfRvoS1RC0WGGrDQjdjSyuVy2PmLIj2BTrnFRfPzpt4WoaDdj0hisGKtQnCdKNxF6agnbQ7zpMS3raxuU-PZ5xwpu87zDzu_mkTRGpM44BWGJckgCK6u6wD8itZ6ALZeOEydFlW73_xwxwcg4L8neajXWkuCUhj2er-_Sm5C4Df3ZaxkDQ781ZhzltFrJHZ2pReJHdeV6xvrZXgd6TXI-PZ7VrZbyswlRSgF3UHRReryr7qAnjBmLFyCwsfloXG20VTfwXav1aPpUC1S6eFBonBXuRi90PP6JH02e2mA1VGQ-AytMvb6aLL5L_2xu058v5KnOVxQo5x3-t6U_gFdNNdY6kZ_811JMQDZOw3ZDemKVI7MLgKW2P6RttUtSkj0zS_2WpuRvIIq5l75taYYU2AD_-2gk4PjZE2jEclV0lez4G125VWKoquWNr3DVmu53ERBbD1giRXs7FxyZs9OX0eo7DFfYxabmDkILe1CFoOi5oA49hmJUK4kKJJVIcmG4ccgpZe_mwi9fI9TwynV2meg9SIvUYlyuoTzO1FFataO2aWck1X2Al2UtR3nJFBYa26IJg-z4gi1Czl1hWNUKJ2_q33zUyh0hRPczJw3Q0C2bYg9y56DALLr_KPw_86mzZdkmQDTGZGEA2ZF79q7b2P2DfGtUoKQEtz10Ns3JLQNMpsJiskFmd3pvgI9AVeBg9GsElJ8xLDmPU9J5x2U8f8n-2FOXyHBZpPtNjqIz1m3WikdRoAd4kHZxoHxcH47qHUQE8XeX3M1FvW7yIV7L936P7ju4_E4fH2wkO_LWn2wihLeGsKympBdkcxdajVBJlAFV1MXIGaiA0yJuwl-neaxxUiB3bAct-03TqnJ1uNqf_PI2l2A06BG7x3WfKJ6YdUJUDuvsRUKx4WNotsr0pmTymXkSIpG-yqV2woh2ZbwaEdCKwWNmBuU\\\\\\\",1]],[\\\\\\\"9ACC2134-04F4-4C95-87D5-9972DE9B9D77\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:31:24.410Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=957684&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],19345599,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6E4n3kJ1_ax7NDOtPH7wSVV-z9DsKYLfm9aALzD8vcGseY4YWM_h9OQGdXVoMqz8Q-lrbb_rUlIncYjjQ3sO8qDiZeyNyv7D10UBnhWF7PoTYlFqHjXAJiXk8mDNnLkUSHDiXqNXq9jqpZOLseOtTjr3he9TM7ORA55opAX-ccUHKxa0cvPiRwP3so51319KTQLT4WFkJgji984TWPWBrkkzxMXuQuzvoUzyNGOkVCANiCsxBDtMmnQYJri9lZ5ZI167iQvDBaDS0nXkWFA0jxg4fXyanWInDYbix2iw49R1WSQRyKzewisDl4Col_VY6RwojaoS1izb2_LJxKYnKj26G8zDrPhixSizmsfkvulq4ySxeoELS0UiQU4kuuMqnq6qVjiULE-MfuHdKdwIhQtyjxd_IUjCRipycKp2RULkbuzJ6QFeSYFLBlkXv8GXVWVxvZf9l64dbM_okk0Ecpod-du2ftxaTOczGUtPC_uGSdv_ojpJRmM9Oz8DP1baVug_ZNpTsf1wsJPcEb1ApL9Yn_xtVo_Ct15zkAos__uhXMLh1QY9kf6nsjrwLJgVhI9XiDEphSOc39gpJhmdEUlAErQaFrhX7JOwE1uoya2J21aCZC7ANdpftltSh-GUQpkHQqE2qltd1VN1ZoxEVaw81AmdHvMbDELM9IbVFoj7U20LgLXL7GKOW7qo4H3C2raW6RqjumnOLcZX3GchAoOlVJY1e8cOtGYx2wa2E6DJ8TmS1aZU3JhGfVkFJcsNPfHoAo89QzETPIEBbN-YYdjOsjXhGG46UV7ikbtJpQWI9-bKoigwji_DywFQFZSag3cdZ9YPLmqd5HmbGP-gxlOQhEJAQEMeQQlAVHKhM9gJTaIG2DZk98Jduzes0Mfnq1J_H6HNSErwYvBl2_D44OU6Ua_nEOeXTZY-0ADSh7fPB9dW3w8YxH-Fx1s_HBUYFS2jvf6inDypTnOmJ3YsAxJSHIUqiydcqPcBcaOUD8aCbG-OPf3JMWGj42E8ACyURbv9BsL1LOMCEHQW1h-C6MH2okFgxV1HZuYUcBApDEjkxM_3FrcTqDT1EwDbIhEi-13mZEBf_Gl77VhB8OEFIBgjHUxaFhL80wS5zmGPXG_eC-0Aen4scvNOUDas1LDUZZbwVwpFw_8781FyZA-sNVyg5KcxrFm3JecVmp_Iv3VNtGMF_gwT9HhGq7kBOgNp854OeXN9fOMMl-aVVPGfQmCqTBnx4l8mwNNSX715FTdS0jbp3L1v2hQo3spZmQ4kTLh8KoBS_Z4nVgeuOO46WpxmG805k5n2o3hweA_AZjiKJ1SbpNO3bt6wtANM1X5gQQSg9WdjqybwOzbJLXySc5mgF2STCPLi_jPeUEuBbfmf2crPwQZWcmb_ZlvWCNK4RSifLrI-FomNS3P1SWk1xTtC8t9l5t5VAEFD3WHvMQ91JWE7yxcEw_l8RkxKPFvkF7xawyd7cKL0zhO6TGP1g7hNk8RrFPAEODSlMB_BE80W4O6-gKfxXqW6sfrdhnnxbWxNG_v_dsk9pVOrJgo-9_sx73dt1Ih86XBte_70TC9zkaJBKwgh998f5FIhg-OAyTv-U6aRepb5Z9nqaR8cj_H2N3EyxzAUoCCN_YX1KejouZ0Ddi2POv7y-loowZz3FVNGItk3e5z3sEHzop4eVBZ11KfW-U4Lm_1oMbtmXJs3IsYksb34UvJsd0dJHsQ_fVz2PnqFZvhlv6xSxunGD7PMV-cmfSVq0NawSORBjAmbK7La8nvv59YQDUP6E74PqY0fezt3VRyWDFG_SgOvWSnSXKMtR_Gne1IEE9_2ORCfLdg_Kj8z0R1-YMDj3r-5M_nddZcJ3WRTYQ_MbDxOxGQL7qNshibKwy4hD9hxMued3PBveLAY32VjmMyIlW9m2nG7L-dPEhX5_TUzsGbRDPTwh5wqWMzsgr1fP9dl9DdgR3ZThugFilORENZy0OEHAkWfU9r6JJfsjbB84zHiDlxLtwN49E2EaXbF3CNytRdRw9kDC-6J49tshpUhzg_x0IZs0A8D0xxTirfmM9Iuu6ROdECGOnC_NOj2l4GbMh41rW9hDlmzH4x74tVeF-77NOIeWcr8kdBhn-_ywxCM5ePzQOpYcBo4ydBv6v7-LPVIreZdXG37Txy1-tF9mmKi75FbOH7Z4jxWfdR27uPq6F6-71OwpmMPmJ6O4nKhYMWzDOQAEhWbkhtp3ooSgD1rb1QYhu3g_xS4RIQX2Sso09-Q0WtsS4btH6dSw5IwRNutgzHTlJY1p6PjnpKq-5hCn_t-aDjLtenra7mGLDDU3YXptEdi4Xfz8wLZuvx0o185GesDD9ZFGIUni2ePJ5cTl1pUJN01kknJpY6IoL69U_KVTY_8IyBUpSmCLIXzSfI1QpzmksjxwKJ1ii-xPFFyAJOHmEpTw8f2ePKIDSLXWwWg779g\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"F220AC69-D505-41FA-858E-8B732C38C242\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6E4n3kJ1_ax7NDOtPH7wSVV-z9DsKYLfm9aALzD8vcGseY4YWM_h9OQGdXVoMqz8Q-lrbb_rUlIncYjjQ3sO8qDiZeyNyv7D10UBnhWF7PoTYlFqHjXAJiXk8mDNnLkUSHDiXqNXq9jqpZOLseOtTjr3he9TM7ORA55opAX-ccUHKxa0cvPiRwP3so51319KTQLT4WFkJgji984TWPWBrkkzxMXuQuzvoUzyNGOkVCANiCsxBDtMmnQYJri9lZ5ZI167iQvDBaDS0nXkWFA0jxg4fXyanWInDYbix2iw49R1WSQRyKzewisDl4Col_VY6RwojaoS1izb2_LJxKYnKj26G8zDrPhixSizmsfkvulq4ySxeoELS0UiQU4kuuMqnq6qVjiULE-MfuHdKdwIhQtyjxd_IUjCRipycKp2RULkbuzJ6QFeSYFLBlkXv8GXVWVxvZf9l64dbM_okk0Ecpod-du2ftxaTOczGUtPC_uGSdv_ojpJRmM9Oz8DP1baVug_ZNpTsf1wsJPcEb1ApL9Yn_xtVo_Ct15zkAos__uhXMLh1QY9kf6nsjrwLJgVhI9XiDEphSOc39gpJhmdEUlAErQaFrhX7JOwE1uoya2J21aCZC7ANdpftltSh-GUQpkHQqE2qltd1VN1ZoxEVaw81AmdHvMbDELM9IbVFoj7U20LgLXL7GKOW7qo4H3C2raW6RqjumnOLcZX3GchAoOlVJY1e8cOtGYx2wa2E6DJ8TmS1aZU3JhGfVkFJcsNPfHoAo89QzETPIEBbN-YYdjOsjXhGG46UV7ikbtJpQWI9-bKoigwji_DywFQFZSag3cdZ9YPLmqd5HmbGP-gxlOQhEJAQEMeQQlAVHKhM9gJTaIG2DZk98Jduzes0Mfnq1J_H6HNSErwYvBl2_D44OU6Ua_nEOeXTZY-0ADSh7fPB9dW3w8YxH-Fx1s_HBUYFS2jvf6inDypTnOmJ3YsAxJSHIUqiydcqPcBcaOUD8aCbG-OPf3JMWGj42E8ACyURbv9BsL1LOMCEHQW1h-C6MH2okFgxV1HZuYUcBApDEjkxM_3FrcTqDT1EwDbIhEi-13mZEBf_Gl77VhB8OEFIBgjHUxaFhL80wS5zmGPXG_eC-0Aen4scvNOUDas1LDUZZbwVwpFw_8781FyZA-sNVyg5KcxrFm3JecVmp_Iv3VNtGMF_gwT9HhGq7kBOgNp854OeXN9fOMMl-aVVPGfQmCqTBnx4l8mwNNSX715FTdS0jbp3L1v2hQo3spZmQ4kTLh8KoBS_Z4nVgeuOO46WpxmG805k5n2o3hweA_AZjiKJ1SbpNO3bt6wtANM1X5gQQSg9WdjqybwOzbJLXySc5mgF2STCPLi_jPeUEuBbfmf2crPwQZWcmb_ZlvWCNK4RSifLrI-FomNS3P1SWk1xTtC8t9l5t5VAEFD3WHvMQ91JWE7yxcEw_l8RkxKPFvkF7xawyd7cKL0zhO6TGP1g7hNk8RrFPAEODSlMB_BE80W4O6-gKfxXqW6sfrdhnnxbWxNG_v_dsk9pVOrJgo-9_sx73dt1Ih86XBte_70TC9zkaJBKwgh998f5FIhg-OAyTv-U6aRepb5Z9nqaR8cj_H2N3EyxzAUoCCN_YX1KejouZ0Ddi2POv7y-loowZz3FVNGItk3e5z3sEHzop4eVBZ11KfW-U4Lm_1oMbtmXJs3IsYksb34UvJsd0dJHsQ_fVz2PnqFZvhlv6xSxunGD7PMV-cmfSVq0NawSORBjAmbK7La8nvv59YQDUP6E74PqY0fezt3VRyWDFG_SgOvWSnSXKMtR_Gne1IEE9_2ORCfLdg_Kj8z0R1-YMDj3r-5M_nddZcJ3WRTYQ_MbDxOxGQL7qNshibKwy4hD9hxMued3PBveLAY32VjmMyIlW9m2nG7L-dPEhX5_TUzsGbRDPTwh5wqWMzsgr1fP9dl9DdgR3ZThugFilORENZy0OEHAkWfU9r6JJfsjbB84zHiDlxLtwN49E2EaXbF3CNytRdRw9kDC-6J49tshpUhzg_x0IZs0A8D0xxTirfmM9Iuu6ROdECGOnC_NOj2l4GbMh41rW9hDlmzH4x74tVeF-77NOIeWcr8kdBhn-_ywxCM5ePzQOpYcBo4ydBv6v7-LPVIreZdXG37Txy1-tF9mmKi75FbOH7Z4jxWfdR27uPq6F6-71OwpmMPmJ6O4nKhYMWzDOQAEhWbkhtp3ooSgD1rb1QYhu3g_xS4RIQX2Sso09-Q0WtsS4btH6dSw5IwRNutgzHTlJY1p6PjnpKq-5hCn_t-aDjLtenra7mGLDDU3YXptEdi4Xfz8wLZuvx0o185GesDD9ZFGIUni2ePJ5cTl1pUJN01kknJpY6IoL69U_KVTY_8IyBUpSmCLIXzSfI1QpzmksjxwKJ1ii-xPFFyAJOHmEpTw8f2ePKIDSLXWwWg779g\\\\\\\",1]],[\\\\\\\"1CA16167-F48B-42E2-AE9D-DAA04B8973FD\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:31:54.485Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=751536&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],460433625,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7KVgo_CQ1JVvDB5TX-gUy_GMZX-d-ho__8cN3Sw18wgfLihYBuiUA3VAKv9CvCx0BHhmbZvcKQdZtOqeHDoW0hIvJ8Vj9gPywkWBQKqrnKi1fHvFnyurWjjTFdoREcHUmoNuBh0vVBD5SF1kOqDs9Q7WFxRNBRQJfK0a1jtRw020aP_RzR3ghmV08lg7lsEUvAPNsNxHyk6fy_C_pZ798t-XqvasfqwdP7vpKPGB158Ue_ZS6T0Hao59EqsfU4LAp0KnDgYawqU6YKlipRGzxEGMvgSysP_iJ47rp3ANVRewPP-iX-eYFt5SHiMT7YXUMVY_4r1ImWIh0uQLHDkCNaAf991t0hosoz8WHdmKYMyjA2_G3u96aueyK1KVPRVSUbRbTTO9jS_XeEkaSn0htCD_45HqPNnCsoZQgEuDfepoKMNkcacv87icx3RGG2aiygvhRDTrDhPKzO6wAvIQbs_S65RVgGw9hmyKJuR6WKOeMEp3O_-Vrlz8zF_RtNnJ8SYlmLfs66ym2518Wyj9IoJJEc4lzbrD6PLeGn3OrRkyJd1lWUkoVQ8TDFEVRlFyWwbP8vq8CGt2LxwN0IC1TBgEjlqb1zEwg5A9WM_DaQ5Vg0lqTUvT3ZU_ZCsI0C-AquTQc555v9Bp_EdW_hdLGXOD4LcQkK0RQH6VdZ-2ZCaqt5-dBBoxDkm-x0m42K7aSIZMp4FtPtDJsAOhIS_Jcx8VZnl8pX10knyV-VhF5jVfKVMkELmoU56GIvDwZpeA5eFytWzm5SsUrehXB_S09Wh4iS6b8DkjChbJPYMojeZ4A45NUArqA9YjHSZQ945LwdX4A2pxZd6nWeY1yISqUv19RBHiXuCeFtJq86QNUsp7NlSte7N7Q97eVAn6oJYzT0ldtcqrqX-Eu_6thjzKhOOokRIHP6wXPZWb-4t8f6xyLce_xW3wrFit7Ez9E1asAPfq4767bjyOiEMg8VcwhJym6JyKk7-6OvVPjAWeYMBgHysVnKbfR1-hIXUcBkhvtw5PMQ8H70sz1CnMPVW82bL8M5e8Kjqeoae7it7Vl0DDge_MD_vJS-RY1U1-8ubOzaH5g_g9bsbdC0aGKMqXmgTZ138XeNx053xcvPP186F1cg4wy3fFGDiNRc2-zJ5TF-fJipBWui4HWlsZrPRlAUV2mDa-SNUU0fhlC6aUubA5tOGXJdt8sm1L6O6JkR9NtuXm3S2gkzgmQiIQiRGIubx0cwPp6uq3kIOF4jOPVtmcBuIT4z5l4XlgfGZ5DdEMbyrOgCYi2CSLVZW-o2JjuLBAh-F_WD-93uAsAaY0bGn0gDJJnLiqMrnlonXKy0785k90q_2lvM_QYhtawLXqkLY6Gc8ZcVLI5DHifSq9pA1zahuruU1GVFGGlhrZwNwJn7Y2D5N4RfD78aUNlMmObbdauQa_ejYymAr9LN8kdsDakHksR0wGeRLnac9XciMKUhUNOQSMHjLSem9t8g19kyQnmfoX61CXB_FyH7R2AvHQC1d_PiHZr9BirVF0ZoUjyFjdRTCjWLhwKNCapyHkX9xtYATzFqGp5FT2GQchy6ECO1ayP0sSZ0jPzj0Po5TBFxxOBepB_aOpVOM5hg8ft-w-mpy2yM47Fv-os-4OTM_wmh_pElx54-jpUZtX51r6hpSxbZV9s96UjiNKF7babOnWyDABFbFsoktb5p_LPJ9GPQ4WrvW6-dgNmn9X8Fl6BmxkZO7pj60UUApUkA8Nnh-6sOJvq3RTOED8Anf82hfLAh-SfMgC2XfkY_8Uys95-TtYcM89i8vFKt4tKX1YZ3Rn_y5p_tYtFPN4NbJK0294gZjq2tzEMq-m-Sx1jSXKQC1Z7rMEqM3Q1llIJa0o7sRo06rtnsqPsOeOoioOU7-jiSwNS6NsZB867V26c82UQ9Qt5P3n9BKLK9nuc79HGIhwvJP3WPP7Ymhn_QffqYcV5FMV1kd-casXGUESqXO4BMPqQ84AE6czyFqCRT-jLnMJSpEyJpxwRuzLw9pHDotgAMN7LIL4kGXaRJ81ZF636AVXsGJC0ZsRuTXmlCPj7ZlgrLd8UNLhlg6N2CIXuQuXYYXGlgDojj2D2nTpV9YILg363ucCIrlxFn0dYSt2IjyWjrNNU3mgdfQmquyLSFfVo8x2YYScSQX0K6hByFrwnf5B_xg3XC5ItHIzrSfzKSrIQru3hBREowUbTUx3NImL_Va_BY4VKYcR8bKULIvtwhSU8ifOqBE1ll1fpffVtNoRcL46xx16rb2pahnpabhxhYly7cRBKz76AH9y4PtQeM8dtqKwOmGw0WMQQc54Fk6EenZUofOuppacxjhqGJBQ6MgCImiKm627c2z4U3y6PfFbWYlNQYMrFgN0AuEpqYB8xRvwFIg00gcQ_GmJkHbBtHYg0BxOv0rkfweMtDhHfeIbs6Dfgc5x-yeA9PGoK9vbUBVg\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"022BAFB1-B8CF-4934-92D5-D3BF556804B2\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7KVgo_CQ1JVvDB5TX-gUy_GMZX-d-ho__8cN3Sw18wgfLihYBuiUA3VAKv9CvCx0BHhmbZvcKQdZtOqeHDoW0hIvJ8Vj9gPywkWBQKqrnKi1fHvFnyurWjjTFdoREcHUmoNuBh0vVBD5SF1kOqDs9Q7WFxRNBRQJfK0a1jtRw020aP_RzR3ghmV08lg7lsEUvAPNsNxHyk6fy_C_pZ798t-XqvasfqwdP7vpKPGB158Ue_ZS6T0Hao59EqsfU4LAp0KnDgYawqU6YKlipRGzxEGMvgSysP_iJ47rp3ANVRewPP-iX-eYFt5SHiMT7YXUMVY_4r1ImWIh0uQLHDkCNaAf991t0hosoz8WHdmKYMyjA2_G3u96aueyK1KVPRVSUbRbTTO9jS_XeEkaSn0htCD_45HqPNnCsoZQgEuDfepoKMNkcacv87icx3RGG2aiygvhRDTrDhPKzO6wAvIQbs_S65RVgGw9hmyKJuR6WKOeMEp3O_-Vrlz8zF_RtNnJ8SYlmLfs66ym2518Wyj9IoJJEc4lzbrD6PLeGn3OrRkyJd1lWUkoVQ8TDFEVRlFyWwbP8vq8CGt2LxwN0IC1TBgEjlqb1zEwg5A9WM_DaQ5Vg0lqTUvT3ZU_ZCsI0C-AquTQc555v9Bp_EdW_hdLGXOD4LcQkK0RQH6VdZ-2ZCaqt5-dBBoxDkm-x0m42K7aSIZMp4FtPtDJsAOhIS_Jcx8VZnl8pX10knyV-VhF5jVfKVMkELmoU56GIvDwZpeA5eFytWzm5SsUrehXB_S09Wh4iS6b8DkjChbJPYMojeZ4A45NUArqA9YjHSZQ945LwdX4A2pxZd6nWeY1yISqUv19RBHiXuCeFtJq86QNUsp7NlSte7N7Q97eVAn6oJYzT0ldtcqrqX-Eu_6thjzKhOOokRIHP6wXPZWb-4t8f6xyLce_xW3wrFit7Ez9E1asAPfq4767bjyOiEMg8VcwhJym6JyKk7-6OvVPjAWeYMBgHysVnKbfR1-hIXUcBkhvtw5PMQ8H70sz1CnMPVW82bL8M5e8Kjqeoae7it7Vl0DDge_MD_vJS-RY1U1-8ubOzaH5g_g9bsbdC0aGKMqXmgTZ138XeNx053xcvPP186F1cg4wy3fFGDiNRc2-zJ5TF-fJipBWui4HWlsZrPRlAUV2mDa-SNUU0fhlC6aUubA5tOGXJdt8sm1L6O6JkR9NtuXm3S2gkzgmQiIQiRGIubx0cwPp6uq3kIOF4jOPVtmcBuIT4z5l4XlgfGZ5DdEMbyrOgCYi2CSLVZW-o2JjuLBAh-F_WD-93uAsAaY0bGn0gDJJnLiqMrnlonXKy0785k90q_2lvM_QYhtawLXqkLY6Gc8ZcVLI5DHifSq9pA1zahuruU1GVFGGlhrZwNwJn7Y2D5N4RfD78aUNlMmObbdauQa_ejYymAr9LN8kdsDakHksR0wGeRLnac9XciMKUhUNOQSMHjLSem9t8g19kyQnmfoX61CXB_FyH7R2AvHQC1d_PiHZr9BirVF0ZoUjyFjdRTCjWLhwKNCapyHkX9xtYATzFqGp5FT2GQchy6ECO1ayP0sSZ0jPzj0Po5TBFxxOBepB_aOpVOM5hg8ft-w-mpy2yM47Fv-os-4OTM_wmh_pElx54-jpUZtX51r6hpSxbZV9s96UjiNKF7babOnWyDABFbFsoktb5p_LPJ9GPQ4WrvW6-dgNmn9X8Fl6BmxkZO7pj60UUApUkA8Nnh-6sOJvq3RTOED8Anf82hfLAh-SfMgC2XfkY_8Uys95-TtYcM89i8vFKt4tKX1YZ3Rn_y5p_tYtFPN4NbJK0294gZjq2tzEMq-m-Sx1jSXKQC1Z7rMEqM3Q1llIJa0o7sRo06rtnsqPsOeOoioOU7-jiSwNS6NsZB867V26c82UQ9Qt5P3n9BKLK9nuc79HGIhwvJP3WPP7Ymhn_QffqYcV5FMV1kd-casXGUESqXO4BMPqQ84AE6czyFqCRT-jLnMJSpEyJpxwRuzLw9pHDotgAMN7LIL4kGXaRJ81ZF636AVXsGJC0ZsRuTXmlCPj7ZlgrLd8UNLhlg6N2CIXuQuXYYXGlgDojj2D2nTpV9YILg363ucCIrlxFn0dYSt2IjyWjrNNU3mgdfQmquyLSFfVo8x2YYScSQX0K6hByFrwnf5B_xg3XC5ItHIzrSfzKSrIQru3hBREowUbTUx3NImL_Va_BY4VKYcR8bKULIvtwhSU8ifOqBE1ll1fpffVtNoRcL46xx16rb2pahnpabhxhYly7cRBKz76AH9y4PtQeM8dtqKwOmGw0WMQQc54Fk6EenZUofOuppacxjhqGJBQ6MgCImiKm627c2z4U3y6PfFbWYlNQYMrFgN0AuEpqYB8xRvwFIg00gcQ_GmJkHbBtHYg0BxOv0rkfweMtDhHfeIbs6Dfgc5x-yeA9PGoK9vbUBVg\\\\\\\",1]],[\\\\\\\"58A0BCE4-6468-48FD-84C3-669715E893D5\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:32:14.527Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=560765&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],733512044,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4oDmqKzuEXeTT_3PBK38sBodAKIJxC-O5djmCqb1HOp3ITaQE2LemC9PDY0KLyBv70fKI8dK35ldX5UtbriSJ5WVdcYm74Et7vs5SAvebAXJwK-qrf7vUy2SHlQ65LqZVPq0KGfvoI8Ao3M--SW6-h0xsHS-tfZ-y5v-1Hhh8f81sC-e5vFt4500uOwuRcbReg0FAoiwz9Go7YApdkpG7CRwTYmz5mVUKMgTeXG94s_hG_6zXDUVspTERDvAYkSRsBsPVZvD66hHWzWdQuWyHOnoHWjU3GYZYS_v02CFQ7edlbbZ_fNO645X-MJjcG8OP7MlMdmXBiDPB5cDTkORafSn48J8-lhnkDvqzERpYyHCBq-wBo0g_RiU-a_i6_tBS_N_xRknMxM3IPcVZQYp3lOewlGqdL7rN85SVXfmmh2d4kRZvkTkrae7rw4K1CySOleshyLNT-WiNwZnih-OZRKvbLn-RYL919Djb6EM1hdifMKNaKu2AsNWEu-VclXO_OWRPZi_iABxzXyK-RgQF-y7ejhpgzI-molqXBhwE_jOVJnkxm5F-OS-8QyRUspR4b_qb5z1N88ZHFQMuVKghRJU6-vgT79LGXCUBJ2naQj2l2DL6mE9CC4En-k__pPC-c1I2ncombJb6CEq46omV7aZ49jhH0eIkv2Gk0zhD6uazscn1Fr6uVRJld6lprfGMJW0eYATItc7fCLLcGvraWQ-bLf7CYbZvLRK9KQSPGU2MFKGJ0jbe_8oN7FdH_XV4GmwmRPzkwvQOmG6VZ3bEPSnUtCNFI6vAedGxKd4IK_YjSsA-8YGPge7M4xtBQcmJPFzf6UamBwxQ7BxvPskaY6YiV2O-i9Z3FMJteIIFD7vUKCshsX_GoARza4-ttesIXZwTVn9W5vDBOFEH6qd6fygpMcKKgu29UFaW6nbQ02hy0ge0ndkhh7KEaacvS0h-0hLI0iFzlRFwEJPc_mgNS0DBWqW1RHJn7f8LBBpVN5asVS-yE_EgdlO-sJ_TBJ2-1QQaEFRcRsvpWkHZw3dSzL1vQt4GiG69k089JXLe_ZqLIOv0c3iCiPWEPq4Xk50PoENok4R7eEnI1jtbrsKQpvS_0jHajKrU5b6jM_F44cVAcY2QoElW_mXwzm5_-nozzVLKa6TNeSzX2f7Nj9N_OXop3bODkaSTatIE2z_vxNVvfzwuj_-P7QX5p2qGOOshzPhMRKzx9d8PpbnWTgQxq1cHedwYn6DisTS9lX50ZigL0OPn4UOCc9MVjYvp0gKJRDGxY2wh2MPyM3uG3_98Ckz80H626KcoyTL3lNEHO1gmS9n1Iu-la90U37O83fQ711WzN6f_Dk3NOIu-GBzIVT3YBdP3hQBPkfu17g3kxX7nejUzlL8NvsDkhBrbXEWHHOt095omO9GeKy9zyK2g0LIQIpRz08aju8SZTNnuxYW3-5vr8pTedXdjxJyeDTV2n6u_3yMY_cqPGuR5syuLh4WS-u5M7mGct_z_MhznlXJr4-8kWDroJq64duANcINX1LcZmc5GPA6M73FMMXAjfLW6PCgJ5Him2m8Jev92PJ_eCw5m72mYLzXvfDBCpe7PRH5sG1OxNPJ1g-tFCLLT1FQXFMlCmOaaUy7sODYnoZgWUm91M-trlPsO9bQjEa05oDlzeou6GHqroxOcvIeSzbvXl_3lCQ2iWu3x7C7d78tCcwlQkbHQpY8H4ajYC_hvT5nX6-gV6Ritt5DnluG6SAvRqxfgcMVILZVIbCXaimORMQ3MYPfQmNVk61ivk2N2bkNO7plvQclDd9EgR9hkN0aj88f5MiwRbO_5tRpjxLcROxU9Kw_v5fWvMZqoRUi6xJCPsBUSQ-MoWl4SVAfpCOyUTN9lBjfIdheROpMgm4anmyvBquKMqfV_PMJsdtweXd1MJ9NHVyE8VAQPPzQyrnxuPtEJB3gV9dSNjdIL4U21LNIdSnOwdNRtBdQudlrkM5LGYVIdorKxmEd29ydWlWdxeyp-8Oid3avXTxiimpXN64W5CpLQe0t6xea4Uy3Hjgse-h6_vp6QGasqJmOXPpYHXQKC_v_p_BNA5RwlLKx8ofC7bZnvaWoV7MhSLmoltDO_tj3i187umJiht7WZOe-njGtSS_xT7gpXp8kr24itvV5G-1a9O3krgBH7i-LJFkYBsLtJ_iJsAkyud96FCbooAXq7cHgmpIjUmPnV5sSQ0mDUyV-cosnbGxMS2ZuPvN0sF_GNV4UiU7an5EV3TH_b5X5tDhlgieRI836AdLNGyex09JgIt9jUXOGuuJKyb6NWx5TmddCVDvHbmpjbHxuWnLEN-8h1dfNCaAhmJVKx10sQVmWqprTtYTXf4kxJMZLD_7YLDriIB__Dnj-wCAX6tf6LkT9AQZ0qMeRjssQCPlCC_8X4ekQUEJLy0Gpt0wuqCTa9RwzUOEu_-9mk0VCNwIw\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"95F0B7B7-69D8-4535-8738-1ED83E675CA6\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4oDmqKzuEXeTT_3PBK38sBodAKIJxC-O5djmCqb1HOp3ITaQE2LemC9PDY0KLyBv70fKI8dK35ldX5UtbriSJ5WVdcYm74Et7vs5SAvebAXJwK-qrf7vUy2SHlQ65LqZVPq0KGfvoI8Ao3M--SW6-h0xsHS-tfZ-y5v-1Hhh8f81sC-e5vFt4500uOwuRcbReg0FAoiwz9Go7YApdkpG7CRwTYmz5mVUKMgTeXG94s_hG_6zXDUVspTERDvAYkSRsBsPVZvD66hHWzWdQuWyHOnoHWjU3GYZYS_v02CFQ7edlbbZ_fNO645X-MJjcG8OP7MlMdmXBiDPB5cDTkORafSn48J8-lhnkDvqzERpYyHCBq-wBo0g_RiU-a_i6_tBS_N_xRknMxM3IPcVZQYp3lOewlGqdL7rN85SVXfmmh2d4kRZvkTkrae7rw4K1CySOleshyLNT-WiNwZnih-OZRKvbLn-RYL919Djb6EM1hdifMKNaKu2AsNWEu-VclXO_OWRPZi_iABxzXyK-RgQF-y7ejhpgzI-molqXBhwE_jOVJnkxm5F-OS-8QyRUspR4b_qb5z1N88ZHFQMuVKghRJU6-vgT79LGXCUBJ2naQj2l2DL6mE9CC4En-k__pPC-c1I2ncombJb6CEq46omV7aZ49jhH0eIkv2Gk0zhD6uazscn1Fr6uVRJld6lprfGMJW0eYATItc7fCLLcGvraWQ-bLf7CYbZvLRK9KQSPGU2MFKGJ0jbe_8oN7FdH_XV4GmwmRPzkwvQOmG6VZ3bEPSnUtCNFI6vAedGxKd4IK_YjSsA-8YGPge7M4xtBQcmJPFzf6UamBwxQ7BxvPskaY6YiV2O-i9Z3FMJteIIFD7vUKCshsX_GoARza4-ttesIXZwTVn9W5vDBOFEH6qd6fygpMcKKgu29UFaW6nbQ02hy0ge0ndkhh7KEaacvS0h-0hLI0iFzlRFwEJPc_mgNS0DBWqW1RHJn7f8LBBpVN5asVS-yE_EgdlO-sJ_TBJ2-1QQaEFRcRsvpWkHZw3dSzL1vQt4GiG69k089JXLe_ZqLIOv0c3iCiPWEPq4Xk50PoENok4R7eEnI1jtbrsKQpvS_0jHajKrU5b6jM_F44cVAcY2QoElW_mXwzm5_-nozzVLKa6TNeSzX2f7Nj9N_OXop3bODkaSTatIE2z_vxNVvfzwuj_-P7QX5p2qGOOshzPhMRKzx9d8PpbnWTgQxq1cHedwYn6DisTS9lX50ZigL0OPn4UOCc9MVjYvp0gKJRDGxY2wh2MPyM3uG3_98Ckz80H626KcoyTL3lNEHO1gmS9n1Iu-la90U37O83fQ711WzN6f_Dk3NOIu-GBzIVT3YBdP3hQBPkfu17g3kxX7nejUzlL8NvsDkhBrbXEWHHOt095omO9GeKy9zyK2g0LIQIpRz08aju8SZTNnuxYW3-5vr8pTedXdjxJyeDTV2n6u_3yMY_cqPGuR5syuLh4WS-u5M7mGct_z_MhznlXJr4-8kWDroJq64duANcINX1LcZmc5GPA6M73FMMXAjfLW6PCgJ5Him2m8Jev92PJ_eCw5m72mYLzXvfDBCpe7PRH5sG1OxNPJ1g-tFCLLT1FQXFMlCmOaaUy7sODYnoZgWUm91M-trlPsO9bQjEa05oDlzeou6GHqroxOcvIeSzbvXl_3lCQ2iWu3x7C7d78tCcwlQkbHQpY8H4ajYC_hvT5nX6-gV6Ritt5DnluG6SAvRqxfgcMVILZVIbCXaimORMQ3MYPfQmNVk61ivk2N2bkNO7plvQclDd9EgR9hkN0aj88f5MiwRbO_5tRpjxLcROxU9Kw_v5fWvMZqoRUi6xJCPsBUSQ-MoWl4SVAfpCOyUTN9lBjfIdheROpMgm4anmyvBquKMqfV_PMJsdtweXd1MJ9NHVyE8VAQPPzQyrnxuPtEJB3gV9dSNjdIL4U21LNIdSnOwdNRtBdQudlrkM5LGYVIdorKxmEd29ydWlWdxeyp-8Oid3avXTxiimpXN64W5CpLQe0t6xea4Uy3Hjgse-h6_vp6QGasqJmOXPpYHXQKC_v_p_BNA5RwlLKx8ofC7bZnvaWoV7MhSLmoltDO_tj3i187umJiht7WZOe-njGtSS_xT7gpXp8kr24itvV5G-1a9O3krgBH7i-LJFkYBsLtJ_iJsAkyud96FCbooAXq7cHgmpIjUmPnV5sSQ0mDUyV-cosnbGxMS2ZuPvN0sF_GNV4UiU7an5EV3TH_b5X5tDhlgieRI836AdLNGyex09JgIt9jUXOGuuJKyb6NWx5TmddCVDvHbmpjbHxuWnLEN-8h1dfNCaAhmJVKx10sQVmWqprTtYTXf4kxJMZLD_7YLDriIB__Dnj-wCAX6tf6LkT9AQZ0qMeRjssQCPlCC_8X4ekQUEJLy0Gpt0wuqCTa9RwzUOEu_-9mk0VCNwIw\\\\\\\",1]],[\\\\\\\"13FC1CFE-A1B2-46BB-AE26-DC4A69859A6C\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:32:40.678Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=nzlxg&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=2375791&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"nzlxg\\\",\\\"[]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:32:39.561Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=445517&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],529649083,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6dxggxKfo1Cmhmy7G2y9CjxOX9J8a3PFxztcO4_nkaM5h46xPimxT_i1MGHDF2banAHhTNf0465Q8QvvC6VGtb05CwyLImqg9_lk7Ti6wf9L1r62lyoJW7zNS8N8E2ZFV0HQU958vRzoVA2DwxMdybJ45IVHAF8tZ60PPsgq9rWtoo221iRuhgGnwHKtbPF0KVbZFx027QIj4QjNn3UivRimPtpa95V_2lLwkFMVdyNS6-W_5HP035U-i3Azr5fJLuIPRzCvF11R1PcEgWbEjOS3NcSgT-6K0bOf410KfLHTohphOTZo8iq_njsMM2cxBmHcX7Pkrw-6Mrs4H7ssGn-rOxu7D-t_naQl63U4azgwVA8Y4hXE0CWVrUQNIbiKmS2WLyrNRXI2OSPBiZ_BlIwFqkKm879KHa2NWar-jEUmtF_J5-c2xo-3GsZ9rDXVI7dd_hTODd8jeaOxNvAAyk7VT1KLNJlYqq3Co-7reHIFVXCWKEdh2NJoZyAPcn0zrTxjC6VaAxPb5L4LRgdD5f1zefLlTbFDXVefUd4_ITp9PyZlQKI7JB7HVJqqZDLN9c7JLZfC0UMcMgoaVbjHxcJzd9SX8og3ts_B9GF8zK5d6jsZGG_cNO7FktmXkyqEyzLibuxmDIDRuZ-RjAg5_7BpX6_pQ5wX_449POYvAK9ysuNkUodFQXCO_WEIIY7glJCp3RU5t6zgrIzU7ByWSY_7YW8LoushnljdKAhyMukD_VtlGMNSg7AdFp4HX0rxP7HNo1WdfsS5rHeTz443Zf2C6bPfZZ5MeYag-ZPJ-l9uZK9CA9CrUf2_IJrR6CXZI4jj892eoEqwc-mht8NhCvU2hEAKtfkA0GB49sIFr95Q-eQOhCt7ePbpsndTpI_TbwEll_MVHDyVmwG4KaUFLcfSsg1rkw5z4CfjQR0EzEMOwdxhWFk3h12dwTBbZXZjB2hnFdXgbY9csVqdazUgB2B7FETnqnj3i546Jd8i27kzwHAT3KGc2PUp706HYnBo7m4WLMvp4EyXE1kWpAHGiIHMhljXUwTTPrGelVkSNmH92C_ClEDCuWJ7m49tjRjLbp62fRRLGLuX8RUkK5Hc6Y4HnJucYqqujUZ5TVmjc8MQMg7O6OcP4lxSCIpQPRPvyStWnp2bVG4-Rg0O0H3Q-FVgJPlTKFHKvAxQF_JzwiJDiPingfK9CUi6Sbu_Lo1E0UWhKNxs9m_IOfGgWZ1Xf09pEyJnf0n4h1vUuY1oTFKoi7yfNYVw7rw1PYW8AnZrgMMiKKOsDM1B40pCGc7V7bvrHwm7CdnN7LGjSw4DgDYVRsf6xKMN2SMn4g0wPAYhAv6gjQQiraMGmEs9Wu8HCHg8waCjcESViTdPxndtm2VzxLqdaPX5b6Sq7ryTTgDajoguTNH5Vwkx9DS0Emv6NSdYLoMY5MrIbDxmUoY7FOd-rWN8y6T1jg9kcTWmZKfZmNsscaQec2xBOaSVGZG86IKNH0PVn8Sy6zeyxKLW_qbTebrVdiU4dxq2Y5g26D107ycznKHZkbPymlegvTZcRW5iBBQLdfT0adHbSgJ3xilhwDxcdqlu47E7Nw6rZ8Y7EIbxuUmtESpiRvDdM9U3kv3EAnBauBnCcSHrF-wujTE6kbVSGpAbeu801B43rQxEhpZfd9tkJgPFmh8O2J9B5vXa1Fxs79wkKohsT14jM7Vws3fIZbU-QfsgbuxAKZ8zQgK2bd2zbx3PkFuUidQN3TDSL6bfTbMngA-jCp3DgLr8iDTp983nweCgeQCTABKR9HzRRPlSEgCUWIFICpcopjIMvfB9UzEGT5malQUc-MYcgmpEj-h9eh3AiqZfp16gTLeKLR2zvCGU07p8bQauXSF7eKGObQBAFzH8y8HB5VYYqUb9r4KkBXN_xY_EaGytTxhqczTYHsHhmvYggdgo6jck1a1_euTCOP7hvwhkeusGxKc1tbp7Vtaei8BSzi5LLDRSVf8tuzKIVtthuF_kmhpRBabPFAf53zuL2lOh5T6iizBTddnxyXFI_3HC7Wno3S-nA3qMhY1m3VOlVOHQvDqJv41oOCr8fzmwJGpazQeKRIK9vCLm9xNK3GWpqCk54Y55HKvzY1yEoGppB9_BGrdRh9w9TlOZhdqaDqr5kLawUv6-VEC_rBY3Lc51PaCnhu9--a9yx6HzZ0EOty4ZthWFbORkQkaXaC1M_Gf1kNbpd531aE6YviWXrdFuf4yV9cqmFMvM-O_PwgCNWbJ9ealTCDrMIYLZJctHp5uXLda4M6QwpbPVTAPsC7sa9cSSj8hMdN9DnzvVpjD505zTC2idjHJErAgBlntlbd5dopi33yzD3uhw76VprRJQNYCZu1883VKqpxcd10FEqro3LONdBSvje3NTkRIKIJ3CRT6v8gq59MRo-nDBSkmDmsCOFG7meSOsOIA6uxYtDCSTe-YeWKkg\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"BBC48535-B107-4F71-9A61-3F0DEFE800E6\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA6dxggxKfo1Cmhmy7G2y9CjxOX9J8a3PFxztcO4_nkaM5h46xPimxT_i1MGHDF2banAHhTNf0465Q8QvvC6VGtb05CwyLImqg9_lk7Ti6wf9L1r62lyoJW7zNS8N8E2ZFV0HQU958vRzoVA2DwxMdybJ45IVHAF8tZ60PPsgq9rWtoo221iRuhgGnwHKtbPF0KVbZFx027QIj4QjNn3UivRimPtpa95V_2lLwkFMVdyNS6-W_5HP035U-i3Azr5fJLuIPRzCvF11R1PcEgWbEjOS3NcSgT-6K0bOf410KfLHTohphOTZo8iq_njsMM2cxBmHcX7Pkrw-6Mrs4H7ssGn-rOxu7D-t_naQl63U4azgwVA8Y4hXE0CWVrUQNIbiKmS2WLyrNRXI2OSPBiZ_BlIwFqkKm879KHa2NWar-jEUmtF_J5-c2xo-3GsZ9rDXVI7dd_hTODd8jeaOxNvAAyk7VT1KLNJlYqq3Co-7reHIFVXCWKEdh2NJoZyAPcn0zrTxjC6VaAxPb5L4LRgdD5f1zefLlTbFDXVefUd4_ITp9PyZlQKI7JB7HVJqqZDLN9c7JLZfC0UMcMgoaVbjHxcJzd9SX8og3ts_B9GF8zK5d6jsZGG_cNO7FktmXkyqEyzLibuxmDIDRuZ-RjAg5_7BpX6_pQ5wX_449POYvAK9ysuNkUodFQXCO_WEIIY7glJCp3RU5t6zgrIzU7ByWSY_7YW8LoushnljdKAhyMukD_VtlGMNSg7AdFp4HX0rxP7HNo1WdfsS5rHeTz443Zf2C6bPfZZ5MeYag-ZPJ-l9uZK9CA9CrUf2_IJrR6CXZI4jj892eoEqwc-mht8NhCvU2hEAKtfkA0GB49sIFr95Q-eQOhCt7ePbpsndTpI_TbwEll_MVHDyVmwG4KaUFLcfSsg1rkw5z4CfjQR0EzEMOwdxhWFk3h12dwTBbZXZjB2hnFdXgbY9csVqdazUgB2B7FETnqnj3i546Jd8i27kzwHAT3KGc2PUp706HYnBo7m4WLMvp4EyXE1kWpAHGiIHMhljXUwTTPrGelVkSNmH92C_ClEDCuWJ7m49tjRjLbp62fRRLGLuX8RUkK5Hc6Y4HnJucYqqujUZ5TVmjc8MQMg7O6OcP4lxSCIpQPRPvyStWnp2bVG4-Rg0O0H3Q-FVgJPlTKFHKvAxQF_JzwiJDiPingfK9CUi6Sbu_Lo1E0UWhKNxs9m_IOfGgWZ1Xf09pEyJnf0n4h1vUuY1oTFKoi7yfNYVw7rw1PYW8AnZrgMMiKKOsDM1B40pCGc7V7bvrHwm7CdnN7LGjSw4DgDYVRsf6xKMN2SMn4g0wPAYhAv6gjQQiraMGmEs9Wu8HCHg8waCjcESViTdPxndtm2VzxLqdaPX5b6Sq7ryTTgDajoguTNH5Vwkx9DS0Emv6NSdYLoMY5MrIbDxmUoY7FOd-rWN8y6T1jg9kcTWmZKfZmNsscaQec2xBOaSVGZG86IKNH0PVn8Sy6zeyxKLW_qbTebrVdiU4dxq2Y5g26D107ycznKHZkbPymlegvTZcRW5iBBQLdfT0adHbSgJ3xilhwDxcdqlu47E7Nw6rZ8Y7EIbxuUmtESpiRvDdM9U3kv3EAnBauBnCcSHrF-wujTE6kbVSGpAbeu801B43rQxEhpZfd9tkJgPFmh8O2J9B5vXa1Fxs79wkKohsT14jM7Vws3fIZbU-QfsgbuxAKZ8zQgK2bd2zbx3PkFuUidQN3TDSL6bfTbMngA-jCp3DgLr8iDTp983nweCgeQCTABKR9HzRRPlSEgCUWIFICpcopjIMvfB9UzEGT5malQUc-MYcgmpEj-h9eh3AiqZfp16gTLeKLR2zvCGU07p8bQauXSF7eKGObQBAFzH8y8HB5VYYqUb9r4KkBXN_xY_EaGytTxhqczTYHsHhmvYggdgo6jck1a1_euTCOP7hvwhkeusGxKc1tbp7Vtaei8BSzi5LLDRSVf8tuzKIVtthuF_kmhpRBabPFAf53zuL2lOh5T6iizBTddnxyXFI_3HC7Wno3S-nA3qMhY1m3VOlVOHQvDqJv41oOCr8fzmwJGpazQeKRIK9vCLm9xNK3GWpqCk54Y55HKvzY1yEoGppB9_BGrdRh9w9TlOZhdqaDqr5kLawUv6-VEC_rBY3Lc51PaCnhu9--a9yx6HzZ0EOty4ZthWFbORkQkaXaC1M_Gf1kNbpd531aE6YviWXrdFuf4yV9cqmFMvM-O_PwgCNWbJ9ealTCDrMIYLZJctHp5uXLda4M6QwpbPVTAPsC7sa9cSSj8hMdN9DnzvVpjD505zTC2idjHJErAgBlntlbd5dopi33yzD3uhw76VprRJQNYCZu1883VKqpxcd10FEqro3LONdBSvje3NTkRIKIJ3CRT6v8gq59MRo-nDBSkmDmsCOFG7meSOsOIA6uxYtDCSTe-YeWKkg\\\\\\\",1]],[\\\\\\\"5D108930-A9DC-4B47-BCFB-3777EC2101F5\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:33:33.874Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=877763&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],275854649,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4xi_W9dEA6VWMhKDpjOjuJU842zdWXAYitUM9yT2bYZJNSB8OsAURjvBAQZWOflhaTryhcfvkzax8YuyInPOnI0fONiIFBFz7T-Tgkx51xg5X8xv4CEi7--8T3_-Qv9PfBervNe0A2RhKgl0DQQ0J8QWbsE1SgHOY-xctAt_2H2PxNKkcH5Sb-ZaNZoRsCYVDoN21AGX9zZM4BXSGxcloXaVMawExaQ83FlSZ6YM05rl_fSMmebgaAkupQwV8j9TC72_IsPFdPW__-yJEQng_yuwK8fGCMdAEtSquMf_bkXX298C1Om3YlGScIJWgtA0vWrqkZ4EpCMHc5_XT5lGF1t2RCQdh4scdlPs8JnUZIKoTgejcACbAoLLmqyVx4Iy4VJWde8g2JyoWYEotYKL9Xy29MSKLAMpTUxqCkizK0paQqsPi-GxGCzddHODtuRruigG25TwB6_dpNiDl_wlMBXAhpJePauyllTFBvUewuWuVmzbis-4agzh4WczNM_nM2EK7MneN2KF8hPH4pzU-voRJpAbZAMdY33Dt0HXlcbSZcmdgp6trEXgap0qiIMQxYPfwkKU_tt7MnjIP5ezQLta4G_xkn01Xp9iv0Hg5nVQ3DOuPizwwuX2MOjAPoKdEdOtzpSvDc_m9INJoRw6iU-49rpCAAVjF6XLNMz5pSFcSse5wyUF8ekLaE8dUbQsdb0s_FE_n7fYoLK7AWu7_cwHKV_FAjpX1igVfk7dGw3XkdOwHCCAuAT92DnXIQ2kBBSBvIYvO8AHiThfu3u7JF9B3gpSWE6rXprjJSR2V-AC_Qx4WN0HCbdWP0dSxb6yg3TRyspWGzkeyGB5ngKTCoHk8HRtH0v0OXOVhFt24Y5wEiNc9aax0dhbWLbQluirrR6M4n8yNxecL-YyZLdPayFkpe3FxtNElwKhVLcfhRBzZigdCb1ZgYbC6cWAGshkguNzy0CwHFtvL4ItsZHTtQDa8VoiVcyWwu3fR-4KR1Ah-fme7CPb7kiBBMqW3mk2F88kkUld5O-Wpbn58Go0DtcDxoblId89pjexveDJ7PaF-WbKvFrLAEOmwzxoNK1KaaBEDX2v98QrkU2s9zfcIyW4sI2un9gHCzCjv309PD28vWHx6IUo4Hhn2Y-DiTdCVV3LXqEV9JTcli8BWk4Gl3wP3ZmP8UcUWO8k0FGJdKA3SLodAqEKytx35uNOqw1JzB-ulwKPTcVoGhehJggJwUDXGamGMrnSDPGhYtRkUd2fNjCdzXUwBx_mQr5ZuhWEDE6nQmjpc4qTkHFwStuc56SXqQmauTDbXYlZL4ip4z_yrTWrjU1Zzc_zTXYHRzbbWdqxJIwE9lH19Ibw7Ofblg7y_wVASZ9HubAjXLWvYN-oJrU5VF2wKURm77uXCQH_-W1FjcdHr28BOfYF1uDc-07FkSmhMJ3Nw0Ib73MggkrufnFqie46-SgJZSYmzkHwWyUk1o-0Kegi-l-_bYBRPiiDE561LpnDjFM1N5eA5xAiXO-K4vFC8Reo6eb9MK3KQH8Fbc8y--OPsjr5EKl4pncZW0Dz-0bwkXpAt7qtk6blqweoXEv377EAVocQzsXq9LVVDPsS4reJzn9JHM9H59i33RgheKBCVcdJrV8NqpUfnhs5kVVMAZ5TD66o382-vo_lnxAVK_RbyBC29eBLmopfmmEofA4Y7ezKxb3Us20tPlNUAmZ9vRSsJZ5V2Z9KZDGCcfQpz19AqiJJaarpE2n75dxQO6c6GpxAU9oOi0uON9h6GjBAC-CmUB3cWXQYQBN1EHqGxRTqG28LTLI6uHEtuwXE5UNCbhH1OLNkh76tjyJjVdKu3U_BVJ3x43oAlnKHuz2r0euznyaYt8kmnQbEUCpdVFzlU3HExIIHrmEKcKsXabHFlzZpEXQgFRwVhR6eWEDud-j-yu02zGTb0Et-158vJ-1PlLagu6cTuCijA55J29BbDYyECkVYSBurmaEH3payFeHwMwJo8GKb-_XImoMzrtirJTouPiIKisAL-vf73boOGcuTbzqy2N5Lgek3wLgbZMeHOdEDVghuSAFoiRrqQYAKdI8SWezKwTG6sBbJxbH0l-nezkQVZTr2NUuh_q5CRhRaWcGAFtwDruR9WWZEU_Mplk0ILsjlnUcve-yH-H1bzjSrhokypYIY4Wx7w2COo-JpxmvPMDSrM8A6CR2AqzCI2Kzey6Uoo4FDKqpzzwwwrmEa_Zc6lvYha0ZQs0yzseN_OgCqYqalFzZsRi9XSZ07683NtBlsQ2zUuOyL9QVaJa3bETGK-O-6JdVuPZo56Brx_ELWe_TSzOz_o_h-cEq0RQhMgQZ3YW2YKYezS7YlhS0rIBkbGI6mnCd29fqCWXsSAG5S2vCIU1IyAgcwR_uoSLOgFAN37vSbmFALfVNy3O7wx-nAkC5ZGMuAf7YqEMiu865ll-0KjECbnC7A\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"AA74EDC9-428C-4B76-A2CC-A10BFF314455\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4xi_W9dEA6VWMhKDpjOjuJU842zdWXAYitUM9yT2bYZJNSB8OsAURjvBAQZWOflhaTryhcfvkzax8YuyInPOnI0fONiIFBFz7T-Tgkx51xg5X8xv4CEi7--8T3_-Qv9PfBervNe0A2RhKgl0DQQ0J8QWbsE1SgHOY-xctAt_2H2PxNKkcH5Sb-ZaNZoRsCYVDoN21AGX9zZM4BXSGxcloXaVMawExaQ83FlSZ6YM05rl_fSMmebgaAkupQwV8j9TC72_IsPFdPW__-yJEQng_yuwK8fGCMdAEtSquMf_bkXX298C1Om3YlGScIJWgtA0vWrqkZ4EpCMHc5_XT5lGF1t2RCQdh4scdlPs8JnUZIKoTgejcACbAoLLmqyVx4Iy4VJWde8g2JyoWYEotYKL9Xy29MSKLAMpTUxqCkizK0paQqsPi-GxGCzddHODtuRruigG25TwB6_dpNiDl_wlMBXAhpJePauyllTFBvUewuWuVmzbis-4agzh4WczNM_nM2EK7MneN2KF8hPH4pzU-voRJpAbZAMdY33Dt0HXlcbSZcmdgp6trEXgap0qiIMQxYPfwkKU_tt7MnjIP5ezQLta4G_xkn01Xp9iv0Hg5nVQ3DOuPizwwuX2MOjAPoKdEdOtzpSvDc_m9INJoRw6iU-49rpCAAVjF6XLNMz5pSFcSse5wyUF8ekLaE8dUbQsdb0s_FE_n7fYoLK7AWu7_cwHKV_FAjpX1igVfk7dGw3XkdOwHCCAuAT92DnXIQ2kBBSBvIYvO8AHiThfu3u7JF9B3gpSWE6rXprjJSR2V-AC_Qx4WN0HCbdWP0dSxb6yg3TRyspWGzkeyGB5ngKTCoHk8HRtH0v0OXOVhFt24Y5wEiNc9aax0dhbWLbQluirrR6M4n8yNxecL-YyZLdPayFkpe3FxtNElwKhVLcfhRBzZigdCb1ZgYbC6cWAGshkguNzy0CwHFtvL4ItsZHTtQDa8VoiVcyWwu3fR-4KR1Ah-fme7CPb7kiBBMqW3mk2F88kkUld5O-Wpbn58Go0DtcDxoblId89pjexveDJ7PaF-WbKvFrLAEOmwzxoNK1KaaBEDX2v98QrkU2s9zfcIyW4sI2un9gHCzCjv309PD28vWHx6IUo4Hhn2Y-DiTdCVV3LXqEV9JTcli8BWk4Gl3wP3ZmP8UcUWO8k0FGJdKA3SLodAqEKytx35uNOqw1JzB-ulwKPTcVoGhehJggJwUDXGamGMrnSDPGhYtRkUd2fNjCdzXUwBx_mQr5ZuhWEDE6nQmjpc4qTkHFwStuc56SXqQmauTDbXYlZL4ip4z_yrTWrjU1Zzc_zTXYHRzbbWdqxJIwE9lH19Ibw7Ofblg7y_wVASZ9HubAjXLWvYN-oJrU5VF2wKURm77uXCQH_-W1FjcdHr28BOfYF1uDc-07FkSmhMJ3Nw0Ib73MggkrufnFqie46-SgJZSYmzkHwWyUk1o-0Kegi-l-_bYBRPiiDE561LpnDjFM1N5eA5xAiXO-K4vFC8Reo6eb9MK3KQH8Fbc8y--OPsjr5EKl4pncZW0Dz-0bwkXpAt7qtk6blqweoXEv377EAVocQzsXq9LVVDPsS4reJzn9JHM9H59i33RgheKBCVcdJrV8NqpUfnhs5kVVMAZ5TD66o382-vo_lnxAVK_RbyBC29eBLmopfmmEofA4Y7ezKxb3Us20tPlNUAmZ9vRSsJZ5V2Z9KZDGCcfQpz19AqiJJaarpE2n75dxQO6c6GpxAU9oOi0uON9h6GjBAC-CmUB3cWXQYQBN1EHqGxRTqG28LTLI6uHEtuwXE5UNCbhH1OLNkh76tjyJjVdKu3U_BVJ3x43oAlnKHuz2r0euznyaYt8kmnQbEUCpdVFzlU3HExIIHrmEKcKsXabHFlzZpEXQgFRwVhR6eWEDud-j-yu02zGTb0Et-158vJ-1PlLagu6cTuCijA55J29BbDYyECkVYSBurmaEH3payFeHwMwJo8GKb-_XImoMzrtirJTouPiIKisAL-vf73boOGcuTbzqy2N5Lgek3wLgbZMeHOdEDVghuSAFoiRrqQYAKdI8SWezKwTG6sBbJxbH0l-nezkQVZTr2NUuh_q5CRhRaWcGAFtwDruR9WWZEU_Mplk0ILsjlnUcve-yH-H1bzjSrhokypYIY4Wx7w2COo-JpxmvPMDSrM8A6CR2AqzCI2Kzey6Uoo4FDKqpzzwwwrmEa_Zc6lvYha0ZQs0yzseN_OgCqYqalFzZsRi9XSZ07683NtBlsQ2zUuOyL9QVaJa3bETGK-O-6JdVuPZo56Brx_ELWe_TSzOz_o_h-cEq0RQhMgQZ3YW2YKYezS7YlhS0rIBkbGI6mnCd29fqCWXsSAG5S2vCIU1IyAgcwR_uoSLOgFAN37vSbmFALfVNy3O7wx-nAkC5ZGMuAf7YqEMiu865ll-0KjECbnC7A\\\\\\\",1]],[\\\\\\\"80C1FA03-ADB4-40CA-9951-38805F82B63D\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:33:56.661Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=482647&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1],[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1]],314608653,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7ckwhKx-bYZ4frukWjFRRGvjp4Hh8RuDJ3Mxn6PFwQEyPpzSi2YkTEXTID66RphZgqG6poKHTum42a6WzxKxzTSwVeAJ2iDqXai9ZagWkAeT0CrQTzs55iKo0-mSX81ttQuZDZmVyEpLNngE5--VZ5aJrsEt3NAl7fLaddxkOKNrWjUpMhrCOZQrLVGmfr-p7KIyn7V9KMmzdknEAnc4XULqvCazamiZVGCTd4iq0P6-Nl8Hh2_tqTCAXwr9Bsw_ughrEeEhGX3S5zIEPF3zphM7KOfWBZ-rsOIq9IWvTh9Tc9nShrIeE8FTlWl5Y4eM7eMbcYS35ZcNQGTTHns_kH-KcaX0cjDjOaPt4sGGn0-wY5rgLJlQ7Pg9iyySQA97V37CDxQUeeX7ecqoWVhv_ad33rGNtmYw2DNm1XQER70LulSDVZMq_zDDzCZG3nZ_vQLUe0WosAnYv2_nm96pOIR8UuyWwYFG8Fjx2TTNfMqhT1-PydNLXsNqiAHdzE_n8ZcGSGlsDyAszx7vu6GHDAi5RDzP3AUQtf70iSMVkhJNjY_BxyAd9e-kVL9ZN4crxQDZM2GIDF-ZnGB5HUdvJ5QXwvqdVEjDY73lFt753D0b2sNB0yqiQjTsOcDBi43DUB82x388IGxXNtBTdWiIRFzD-cPC0ibF0QGEKfsC_SFRDbrpBmPOfxgVY9AsqyGvZVPaYU5-8Nxliq1zLXqBuQMFLHJm9MdQWUuUHBkb9mmjuPkSroRpz_x7sJAQWtmS4URo0BEQlziTKfTnFi8H2NQuX285avBGTmgqGY2piKitsrJW_nK3YEcvlbQLMTh8iyNp71yE18pAfRRYa8l1BN690zP33Nbxdd9Ik1M-tmcvANu-niiGaD_eOs4DjPF5i5w0mLs_u3sju2juZZVqjENlrG93W177dLcEjGMXEpiaia12Tt3_-eW41AporjlwdWgwnG-PiZOqhZ7pAts_ENXU2W8SXL_SO2qbXjIqPliTL0ENtAl1lBCS8xgpWh3MGLLkhzu3fMyGZshpzxczOLXlf6qFB2t59XuIT78DGeNd3JA_A0Dtt5S9AXiXfMXnbJ1H248H1D71bgkZvD-128v4ewMpshQMpH8I3Gik9xivH20zX39f3Z_7GJcHk02uZL11ro8gSyOPQrmnjZRWLcWBX6bgIRKYegNdfsO8tEfdB0A64DiY4fYogczj9uoKHszfvFbiSY9_TMbuejUTbZ8PBHglEwuzTN4HTEgQ7bRZgv8dpCmbVOy6FDMvUwq1dH6hKHvidNcb5sq0qk-M8dDZ3i8dgLpgNeg9KtpshwvojcAoO6H1wgkrx61i9mq0r691UpgBa7xUNiN-p5azbKbDGPR0nyqHeRXjUCudcg4jYViT4pb6dESr_UDHc24BW-vMcfIsPTk6ABWWpyPhy4h0joGFDONlSvLBe6y7whDK_gyddNRLkJJtEYpGDHmRVL97EHaLKINqZtPzytvKDjJKilQrwUULvA7GHnFAVEfyyT2RNQQo4WI5ggx_AVU_AeHy4tJuyfTXXLRPc_SMqjMGINYGfEn18L5HF0jTX1PM8EBOKTzVMVsV7sFIw67De4vNeeZASiqiFxjUlVKm5hZ8Rtua7uDJ9_qfFe5_hebBrhoII3F3pf_3x72vtoq21MOtwFeKzBXIEyRcpSeflUytjeErdRBZNl_kKoFfPzsBpCgdihuQVOomcnjOhizyYrboVi_4fqpbhSBHmJ2SeYmiUtTk89QxRzsGCTvbo_EIIjMBup8WRkAcVoXbLgrXKQkljfh7ETzWCjJshB6Xseqh3z5cnN32wy1Dzc48TACHzl1sX9wHjP7oGLJc7Lvne6VN-X90Q3aBTGJo6SuHCKA1TczKSTJ_6hVU8yKy16zfVgweUMLL1bMKpXwYrIMn60GwhOlcblpD4v_0jKqG8BKMOqGISTrWvF3v4YD_yFxQBH49CZRlpx1lHL8KlOdfxFaXl87nb3MfR2zrkdiTGwLtC-USTtEs8VN-0ibWAgqFolwSh7MY-Jrqb1wXWJidbXy87jHqBWl9A2QiZwvxH2jtKeKzv8yEk-AoiCKm23KdQCELRWEbRm7TmP7mrigZfuXAOTR9yjYg9TDKpXCsYTo866Eua7knozrhw2h1e2BpfblHQyrMuczQiSAoZH_Z38b-lxn5QEvTs4kgxyfNQ1WmhB6CeFCx7niNTsoSFFdMXTaxC1Y86eb6CrFy46-zDwZDB9kdjbVhTc1L2liKt3QwhHhXA1YXzhawZwHQ3JiRtOJsaGpZ9YmHg4jZbRa8hKHWUoH15hFGHErAXgOcv9bZltLCUwEkO0oDXSBlP2At-Vh6WosezwwpFcwAJLSilIkLVYMxdp94kOXWHI4Kijj9NIcXZdCUWVGiNBQSdpJ-M57Qnv3CMhIY73De62vtj6Z5YTUY7oh798oqA8ycrr4kGzDQ\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot inside subterranean B3 basement parking at Me Tri during extreme heatwave. Le Quoc Tien slumps against a cracked concrete pillar in defeat beside a torn empty water pouch and heat-warped debris. Do Minh Kha looms over him in the background with a cold detached expression, silhouette backlit by an ominous beam of deep crimson sunlight piercing through a fractured ceiling fissure. Chiaroscuro high contrast cinematic lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"658FB113-ABCC-4436-899B-B885C9020EFE\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7ckwhKx-bYZ4frukWjFRRGvjp4Hh8RuDJ3Mxn6PFwQEyPpzSi2YkTEXTID66RphZgqG6poKHTum42a6WzxKxzTSwVeAJ2iDqXai9ZagWkAeT0CrQTzs55iKo0-mSX81ttQuZDZmVyEpLNngE5--VZ5aJrsEt3NAl7fLaddxkOKNrWjUpMhrCOZQrLVGmfr-p7KIyn7V9KMmzdknEAnc4XULqvCazamiZVGCTd4iq0P6-Nl8Hh2_tqTCAXwr9Bsw_ughrEeEhGX3S5zIEPF3zphM7KOfWBZ-rsOIq9IWvTh9Tc9nShrIeE8FTlWl5Y4eM7eMbcYS35ZcNQGTTHns_kH-KcaX0cjDjOaPt4sGGn0-wY5rgLJlQ7Pg9iyySQA97V37CDxQUeeX7ecqoWVhv_ad33rGNtmYw2DNm1XQER70LulSDVZMq_zDDzCZG3nZ_vQLUe0WosAnYv2_nm96pOIR8UuyWwYFG8Fjx2TTNfMqhT1-PydNLXsNqiAHdzE_n8ZcGSGlsDyAszx7vu6GHDAi5RDzP3AUQtf70iSMVkhJNjY_BxyAd9e-kVL9ZN4crxQDZM2GIDF-ZnGB5HUdvJ5QXwvqdVEjDY73lFt753D0b2sNB0yqiQjTsOcDBi43DUB82x388IGxXNtBTdWiIRFzD-cPC0ibF0QGEKfsC_SFRDbrpBmPOfxgVY9AsqyGvZVPaYU5-8Nxliq1zLXqBuQMFLHJm9MdQWUuUHBkb9mmjuPkSroRpz_x7sJAQWtmS4URo0BEQlziTKfTnFi8H2NQuX285avBGTmgqGY2piKitsrJW_nK3YEcvlbQLMTh8iyNp71yE18pAfRRYa8l1BN690zP33Nbxdd9Ik1M-tmcvANu-niiGaD_eOs4DjPF5i5w0mLs_u3sju2juZZVqjENlrG93W177dLcEjGMXEpiaia12Tt3_-eW41AporjlwdWgwnG-PiZOqhZ7pAts_ENXU2W8SXL_SO2qbXjIqPliTL0ENtAl1lBCS8xgpWh3MGLLkhzu3fMyGZshpzxczOLXlf6qFB2t59XuIT78DGeNd3JA_A0Dtt5S9AXiXfMXnbJ1H248H1D71bgkZvD-128v4ewMpshQMpH8I3Gik9xivH20zX39f3Z_7GJcHk02uZL11ro8gSyOPQrmnjZRWLcWBX6bgIRKYegNdfsO8tEfdB0A64DiY4fYogczj9uoKHszfvFbiSY9_TMbuejUTbZ8PBHglEwuzTN4HTEgQ7bRZgv8dpCmbVOy6FDMvUwq1dH6hKHvidNcb5sq0qk-M8dDZ3i8dgLpgNeg9KtpshwvojcAoO6H1wgkrx61i9mq0r691UpgBa7xUNiN-p5azbKbDGPR0nyqHeRXjUCudcg4jYViT4pb6dESr_UDHc24BW-vMcfIsPTk6ABWWpyPhy4h0joGFDONlSvLBe6y7whDK_gyddNRLkJJtEYpGDHmRVL97EHaLKINqZtPzytvKDjJKilQrwUULvA7GHnFAVEfyyT2RNQQo4WI5ggx_AVU_AeHy4tJuyfTXXLRPc_SMqjMGINYGfEn18L5HF0jTX1PM8EBOKTzVMVsV7sFIw67De4vNeeZASiqiFxjUlVKm5hZ8Rtua7uDJ9_qfFe5_hebBrhoII3F3pf_3x72vtoq21MOtwFeKzBXIEyRcpSeflUytjeErdRBZNl_kKoFfPzsBpCgdihuQVOomcnjOhizyYrboVi_4fqpbhSBHmJ2SeYmiUtTk89QxRzsGCTvbo_EIIjMBup8WRkAcVoXbLgrXKQkljfh7ETzWCjJshB6Xseqh3z5cnN32wy1Dzc48TACHzl1sX9wHjP7oGLJc7Lvne6VN-X90Q3aBTGJo6SuHCKA1TczKSTJ_6hVU8yKy16zfVgweUMLL1bMKpXwYrIMn60GwhOlcblpD4v_0jKqG8BKMOqGISTrWvF3v4YD_yFxQBH49CZRlpx1lHL8KlOdfxFaXl87nb3MfR2zrkdiTGwLtC-USTtEs8VN-0ibWAgqFolwSh7MY-Jrqb1wXWJidbXy87jHqBWl9A2QiZwvxH2jtKeKzv8yEk-AoiCKm23KdQCELRWEbRm7TmP7mrigZfuXAOTR9yjYg9TDKpXCsYTo866Eua7knozrhw2h1e2BpfblHQyrMuczQiSAoZH_Z38b-lxn5QEvTs4kgxyfNQ1WmhB6CeFCx7niNTsoSFFdMXTaxC1Y86eb6CrFy46-zDwZDB9kdjbVhTc1L2liKt3QwhHhXA1YXzhawZwHQ3JiRtOJsaGpZ9YmHg4jZbRa8hKHWUoH15hFGHErAXgOcv9bZltLCUwEkO0oDXSBlP2At-Vh6WosezwwpFcwAJLSilIkLVYMxdp94kOXWHI4Kijj9NIcXZdCUWVGiNBQSdpJ-M57Qnv3CMhIY73De62vtj6Z5YTUY7oh798oqA8ycrr4kGzDQ\\\\\\\",1]],[\\\\\\\"85FCAB29-DD00-4032-8AD2-15F7B36A484D\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:34:03.919Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=ogiZ0b&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=476601&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"ogiZ0b\\\",\\\"[null,[[null,null,[[\\\\\\\"78e46231-e6cf-43fb-99bc-a4cb96196e24\\\\\\\",null,null,null,1],[\\\\\\\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\\\\\\\",null,null,null,1]],785346768,3,\\\\\\\"GEM_PIX_2\\\\\\\",null,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4PfOLAYyYtYTiDl5oPpG4VKwQ1N40yiI_2WEBcz-Twxgnr6BkmQmkFHtbnW2apZi89ctGksIEjVq3mU2MaZKFmQf3an-jGBDScmNVifAV40MxTtg9iABfPxluF1D2WGa2KoHb6ZgD6xA_iDQ9hw8wX7TwlnEnO2rGJb-zNyXYOcX_kWbiGLz_OpUmYqwp5coyICWUDmniqW7n9WVT87WNv3szVFjDwGRnnBHvYQBIjf2Qut6PbyU9392tzj0xCDpWh48sEfRo0Y__3_UPf3D56czuFq7kErXIYVgRpghjMUO3l6--QS5xdRD7j2aComCKMOLO0sQuCMSJuMx7kqBIZkJvtF7OxsFsa8g0iS6972eDpc0EplmmdMkmb5p1SRxJGIFnSMk_gYtHlwC3hkvg4EnJOhrpdDxrrkGVEr9_LqWcTO7vEYPM6s-ojX7uWJ2GmFYtu9uUPeLNb4mu34PG7EM92-Mi4R9L1EDHBvqcU2naXWg2Ukf77QlZCdq9OxhczeGxTARS6w78XtIWevHCFEikDqdmE0Up6nlifK1R5tjWYLxbHOw6xaj67rOqqgr8G6ln6ofSptQs5ODtwoWTPNGSlDgVEPcP9DG7sUOuBdMMrFEuDU6iyUwTys0h2kV6HOlFhb8zVQHtiFpa7YmYaaJRwgD9WdoHfQadMX-XvpacAafS0MfiVqShuR3r2sddr0n14w-9YROD3WWUszTukyDZIissyBdqNvfY20ZaeFcfTMBJeOklcWs1RhGfWNpPXbPC8Vp3zOOZbh5-a9HjMzPA0acbYyF3L9FCzL9koHiIXPcyJMK2m1ozCSpT6HhHqSrU6RvYuZ4cINTWygQe4GlZiTwmGhjQjs1WsmcGnOxtX-Jx5hKIh6MUrdjO0SVMlc-A_oUqawBGSSxnp1wC9OGmmbcC9bQDnrpiNo8A6r7OBZd6M3ubKif1QJ8nGy1B63oq2KozVvfiv-6uPTvxEHUGkLvUwJ_HoPsZYKD1uavHXNXom-ad0H2NPAURb38dOpitedthwV0czqOe0CRVpPkhTXxzH-A8zDh35eYA5s_rR1sasxi7tn0y8cKCnia3ZlTSQV7O24tFXR3YYyynC57LBpsEtDQ5LQ4P3XXhImzmFppEGgTMx8Y-ckPSVXYlTSBzealkQ_ZRYsGciDXblEKM5gk6hptu-BG1o8InZdfAcm9N5lqE89mO9iQuvOnmw4D1EQOOWhLMgXBAe35CW2Pyb8-i5v3X6tjibiuieyW7jNBgI7422hieUSmbm1wLx-hE-xafrmdUE0y7VjXzFABSoyohmAAOz7Ls4raHb2oPeJVf5wT8d9KVmhXAbwmC-3wWtYCcvLbUMNF1MCtLk1FE81AO9ALEc_8Jo6msssubOWjVnVaGyXLLKKKvQ8wLF9KcECd8vqd-f7t6a-N18YY5o_gAPosdwq8diyEIIocM6n9rRT6xQUGJ_aleyrWYSzb2LTqeP8pWwkxEGjcXHu2fV-fRKITQuOCKxmAlXKG-6xUHT4XJ38PsD6Vhc1WMLW93oum2zSfEm1gozvoagZAxZwoWPxb2WH1VFO5MpzATCDjxAXFfWQD3lejYNg6K0JpXjZtY6yn7bJJhbjnEdrA6s_EtB2I9W7k3WADPscOXNREWASpg7c6fV_KoiOf2QHhn3DQoGcyYAPsE5P000S6ZpotiEQRtA07oRgpZh-q8wzG72jndrmjc4lD3pZ3pf1GhMddzsYNx2K7P6h6nIdkqGe2sxLeYW7-J_qwA1BUJqQUWlwdJr6now7FWA9RVNRsH6SB6Fz8cH-d1dW4nYom96pDO9_mPKdp9tZ7NOJOoVJZ8LWkNtXl1LSYzHxXBunnisGvv35GgnMfjoEXhCsroHtItacHTxsnK09owgIOnX9K-P_ZVXPyWp18wB3eIKBZ-kewcQYN_gR_H9_VlDVKsGwfEmJ9GGvIsaMwWh1UUI_BhLLz4vA3aBhoRVq5zptyNe6bbt7QHK6R9mTXxcc3O8nG8pu6OCwguxhhaZz2dmmFpcoRe5hSlJQEF0OUHOvJPCYQ-kpp4Kt--vi-VO_gA9Pwh-LDdfHDUBBEYkuVqoodt2-9vIU0QXD8Pc5TSze7MNKiU2HDrVBQe981hknSHwZXTZ7sTYPb3cXwQFJDlP0KYuPGnas_jGFAuYdPhrETQQ49zrF_Q_g4EqZ-SVrbxMOiPaVOS4Hhc7VWZqjog3yRE8D4UGv7MTgIu2hwGGGeau-gFUtXL4YsHxpWFYVwMFimcQK-4aP9Ul0l67Q8Uo_zul5bENAkMKCAMRXR9vmy2o6By9WPiimqcJ8aF70Udlj1-bq_0sZ2aH85fSSx-ZW_rMbYmmyhxLFDeThQfMbdjiPpR9grxA--VkcOpMmcn1a01tOs3myDaV9D2UU18rhIb2ifDvJ2tg4xkdMDmTb_kJDjnLG9dQwuPcu30oESgY9A\\\\\\\",1]],[[[\\\\\\\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\\\\\\\"]]],null,null,null,null,\\\\\\\"2BE60259-0587-4B76-909B-A36EE82522F3\\\\\\\"]],1,[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA4PfOLAYyYtYTiDl5oPpG4VKwQ1N40yiI_2WEBcz-Twxgnr6BkmQmkFHtbnW2apZi89ctGksIEjVq3mU2MaZKFmQf3an-jGBDScmNVifAV40MxTtg9iABfPxluF1D2WGa2KoHb6ZgD6xA_iDQ9hw8wX7TwlnEnO2rGJb-zNyXYOcX_kWbiGLz_OpUmYqwp5coyICWUDmniqW7n9WVT87WNv3szVFjDwGRnnBHvYQBIjf2Qut6PbyU9392tzj0xCDpWh48sEfRo0Y__3_UPf3D56czuFq7kErXIYVgRpghjMUO3l6--QS5xdRD7j2aComCKMOLO0sQuCMSJuMx7kqBIZkJvtF7OxsFsa8g0iS6972eDpc0EplmmdMkmb5p1SRxJGIFnSMk_gYtHlwC3hkvg4EnJOhrpdDxrrkGVEr9_LqWcTO7vEYPM6s-ojX7uWJ2GmFYtu9uUPeLNb4mu34PG7EM92-Mi4R9L1EDHBvqcU2naXWg2Ukf77QlZCdq9OxhczeGxTARS6w78XtIWevHCFEikDqdmE0Up6nlifK1R5tjWYLxbHOw6xaj67rOqqgr8G6ln6ofSptQs5ODtwoWTPNGSlDgVEPcP9DG7sUOuBdMMrFEuDU6iyUwTys0h2kV6HOlFhb8zVQHtiFpa7YmYaaJRwgD9WdoHfQadMX-XvpacAafS0MfiVqShuR3r2sddr0n14w-9YROD3WWUszTukyDZIissyBdqNvfY20ZaeFcfTMBJeOklcWs1RhGfWNpPXbPC8Vp3zOOZbh5-a9HjMzPA0acbYyF3L9FCzL9koHiIXPcyJMK2m1ozCSpT6HhHqSrU6RvYuZ4cINTWygQe4GlZiTwmGhjQjs1WsmcGnOxtX-Jx5hKIh6MUrdjO0SVMlc-A_oUqawBGSSxnp1wC9OGmmbcC9bQDnrpiNo8A6r7OBZd6M3ubKif1QJ8nGy1B63oq2KozVvfiv-6uPTvxEHUGkLvUwJ_HoPsZYKD1uavHXNXom-ad0H2NPAURb38dOpitedthwV0czqOe0CRVpPkhTXxzH-A8zDh35eYA5s_rR1sasxi7tn0y8cKCnia3ZlTSQV7O24tFXR3YYyynC57LBpsEtDQ5LQ4P3XXhImzmFppEGgTMx8Y-ckPSVXYlTSBzealkQ_ZRYsGciDXblEKM5gk6hptu-BG1o8InZdfAcm9N5lqE89mO9iQuvOnmw4D1EQOOWhLMgXBAe35CW2Pyb8-i5v3X6tjibiuieyW7jNBgI7422hieUSmbm1wLx-hE-xafrmdUE0y7VjXzFABSoyohmAAOz7Ls4raHb2oPeJVf5wT8d9KVmhXAbwmC-3wWtYCcvLbUMNF1MCtLk1FE81AO9ALEc_8Jo6msssubOWjVnVaGyXLLKKKvQ8wLF9KcECd8vqd-f7t6a-N18YY5o_gAPosdwq8diyEIIocM6n9rRT6xQUGJ_aleyrWYSzb2LTqeP8pWwkxEGjcXHu2fV-fRKITQuOCKxmAlXKG-6xUHT4XJ38PsD6Vhc1WMLW93oum2zSfEm1gozvoagZAxZwoWPxb2WH1VFO5MpzATCDjxAXFfWQD3lejYNg6K0JpXjZtY6yn7bJJhbjnEdrA6s_EtB2I9W7k3WADPscOXNREWASpg7c6fV_KoiOf2QHhn3DQoGcyYAPsE5P000S6ZpotiEQRtA07oRgpZh-q8wzG72jndrmjc4lD3pZ3pf1GhMddzsYNx2K7P6h6nIdkqGe2sxLeYW7-J_qwA1BUJqQUWlwdJr6now7FWA9RVNRsH6SB6Fz8cH-d1dW4nYom96pDO9_mPKdp9tZ7NOJOoVJZ8LWkNtXl1LSYzHxXBunnisGvv35GgnMfjoEXhCsroHtItacHTxsnK09owgIOnX9K-P_ZVXPyWp18wB3eIKBZ-kewcQYN_gR_H9_VlDVKsGwfEmJ9GGvIsaMwWh1UUI_BhLLz4vA3aBhoRVq5zptyNe6bbt7QHK6R9mTXxcc3O8nG8pu6OCwguxhhaZz2dmmFpcoRe5hSlJQEF0OUHOvJPCYQ-kpp4Kt--vi-VO_gA9Pwh-LDdfHDUBBEYkuVqoodt2-9vIU0QXD8Pc5TSze7MNKiU2HDrVBQe981hknSHwZXTZ7sTYPb3cXwQFJDlP0KYuPGnas_jGFAuYdPhrETQQ49zrF_Q_g4EqZ-SVrbxMOiPaVOS4Hhc7VWZqjog3yRE8D4UGv7MTgIu2hwGGGeau-gFUtXL4YsHxpWFYVwMFimcQK-4aP9Ul0l67Q8Uo_zul5bENAkMKCAMRXR9vmy2o6By9WPiimqcJ8aF70Udlj1-bq_0sZ2aH85fSSx-ZW_rMbYmmyhxLFDeThQfMbdjiPpR9grxA--VkcOpMmcn1a01tOs3myDaV9D2UU18rhIb2ifDvJ2tg4xkdMDmTb_kJDjnLG9dQwuPcu30oESgY9A\\\\\\\",1]],[\\\\\\\"E1EBBB69-0118-4F27-ADD1-F71D29C1C559\\\\\\\"]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:34:59.051Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=eb1hJf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=836687&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"eb1hJf\\\",\\\"[[[[null,null,[[[\\\\\\\"0-3s: Low-angle tracking shot through heat-warped plastic debris and scorched concrete in subterranean B3 basement at Me Tri as Do Minh Kha walks slowly past motionless casualties, boots coated in red dust. 3-6s: Camera tilts down as Do Minh Kha crouches over Le Quoc Tien who slumps against a cracked concrete pillar beside a torn empty water pouch. Do Minh Kha speaks in a hoarse parched voice \\\\\\\\\\\\\\\"L\u00ea Qu\u1ed1c Ti\u1ebfn, m\u00e0y v\u1ed1n kh\u00f4ng n\u00ean s\u1ed1ng l\u00e2u \u0111\u1ebfn th\u1ebf.\\\\\\\\\\\\\\\" 6-8s: Close-up of Do Minh Kha raising a gleaming tactical blade reflecting the deep crimson sunlight bleeding through a fractured ceiling slab, then plunging the blade downward into pitch black darkness. Audio: Stifled gasping breath, slow crunching footsteps on gravel, hoarse menacing dialogue, sharp metallic blade unsheath, deep sub-bass cinematic hit. Negative: subtitles, watermark, text overlay.\\\\\\\"]]]],\\\\\\\"veo_3_1_i2v_lite\\\\\\\",2,null,[null,\\\\\\\"bdcbe55a-ee7b-497d-a414-25d22d04c096\\\\\\\",null,null,null,[null,0.0038759689922481244,1,0.9961240310077519]],[null,null,null,null,\\\\\\\"ED10EBF6-DCFB-4D9F-A450-6E0B1AEEFCA5\\\\\\\",\\\\\\\"7C58CE0F-81E0-4079-944A-9F28392F5CE8\\\\\\\"]]],[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA7UoedpUZQQ9pVdbXQw18opVHeTxleUPvaQwIFTFbfTmys1ZH5_i-xR_hYnesuvf-XgDhHgbACVJ3SJ_8W6fjuY8dCxTLR-JJemy9B5dd0xB6_RpOrJPm4oy_E3Io_K_P5V4fOMuW46fhST0_pElCzQntwQSSxnE3MFBh7K_Loh4KAL2yxraH-JXyQ3bRXzwxZJXy5R4PUxMHLigCh4IoOShkxwpjj4ZwZjeyqgK1lrO3hT9ocHd-Ax-UWdDME-WTltiCVORyXLZQ6Vsasp8-NPsbcQnIglRCQu8hMmMGNB8gbxDz79cx0XNaPytVFw0HK3LZyzEY9hXsuf7JYESnOHqUoga3OyWKwpOF4Y6vy3pEeE3cpSJ5YWVqgezWhP8YMVeyFucV-kvhBIClwQMLJa2U2KZD4wLy-MiDmsJa3inHJ1qF-YgImGVXNU2s6FkREFebh53jISOjy-JDT2PQ3F7Ue7BY2_wFeJRrKEuX1Sxejh_eWCH5VcdVnNB9Xv4cwzN4YEVbts_6vtFzaaYD4utR0wfQJdXo4vUOB0BWUGU2-ZDlOJEgtI1323IOrx2WxUOMYfueT4EtGseOgrucogHLFmpjGilUiN3vdgXVjDPxAXxjgDdU2cDZg7UsVNtzMK6j7nfOvEDR9_QXxW97JuJvu94SQ5YSfmWW9y-xXkWbnwGPwZF74Y7YV9LM3xLu5j8J-b78FxA1F3fTXrVZ_uqe6SOeNNUVBmedBKGuEonMIttgYsc0bqR2wvDS2504lbQzIdCgjQkpS4uXhWHBz45YgkgCTKKm-MlPK5gjGAGIYTAqK3WLQi2QQHD8mzjKy0kFXktkVekYaDEOI3VBsyWDMVIwWTiJcdtLLuXKQP5gJm8uxUoKLsndv_b7gfEVYFQ-m8Mgxe4ThPMHrwxsPGRQ7ZGBx83seCGoO2SyLifxUrWwiu6gc5kxQvjZklbcdCudIuVcKK-DUDJcAJ2cnUkLh5ujmm5hT31bSPAtoOhXc2-vRuy9LFivxF-bx7QNjx4pcm4qXEsuOMyOkY-ObR2TLMqDyVpXJH1AY6EVJFCY06EIUQD5jllXFIcUQmpAUFpKApFs8XcT7M8lelBI4nHoTyTbg7m5HH_g8wpv-XouCk0YTHPIq3gs7FHtoaYOHOuLgIPA0w9ILZ-gr2Yw43gTZ3zCET6rL4mSYm0nSrSM87kakPfNnt8ADk841k0oVqSkL2xp0t357rO_z1j5gUZcHJ6zD13pHM8l2xoc_SPDqwwNCk8sWl_6xQ8_MxSN0RyD3tGmsDQsGDQrFupG1DnEUnSN8xhsJ8Wzm2v-ZjAbbeB613JsKecqivpsmh3QU_jCqHJdcdhjioPorEXl_iMvh6zJykI2iVchg11Ko6q46WdSMcTb1KRuKDQxaDtPR1f_fJkIiguukPYc840JOM9OSy-ICekyvk8Id_ybdlNjTgPiLmjLaJU8jR5sKDuslRsawpFQjg8ZDTBYHs-dy2JBmHGNfT63wCKg-EUG27on0sbRQ_eqR1e3kz-Jidz0eoP3Sknoh1ax4p8TSBbcZ21KqlThhJXNSe5HXW__Tab8wIOKaU-FT0s832VQY3aBQ4gmyXpoiS3D7pFM1nXzGDyeNTpqnnP-YyEFtY7SZx5hMuniW-hywDGETHlTb9CjxXjUXgIso0C3oQpSru2eVkWX4d0NxAAupYxYWqe2HDGIP0wFWI1GLVONZIny6uNypI_W5nuQt0pmuXnK0Ta3fAq-PtDXah1jyv5YLkPtYHYSoD3WZeN2qY4Y-kytKDKZKEYUmCuhvx7JbgMX68xeSzmL9oCX8lvi2H4cJJ6psXnukSfuJwGcud8dar-6MDI0D2k-ydlih3g0_vKzfnJIg59NXJ-yTM_DBwNayA9okEIaCok5gh9l8iy64E8256JxPDtUzDTswQSCkrEW3oN5-Ktrcw4dsNlL8x4k9tpYkySOk22C5-QYaaYZgy9R-PnJd6eeGH9k3XOD9Q6J6bcDWhwHPuYOyzIvW7CM0AMXbSO_yltFUJwdT_XlwHPKlfiHlS1LODOYtlL5cpHkLumcusF-AESq-RbiNEtFWFvsBgoR9BUMzmVGWhU8ERwJNO7j5P7XqVZM2coT4hXotdQ7fsSCNKTCv8bHvmYSa0zEsL22x9GLMjPJHXYldyQM-ujiG8vZqd09GJx4Ac2Sq6WyxLDUQcn9vXLHzhTiwOcBxXlL77oETNOa4-5oSviT-3L3Czi6l989g25CslxJ8Un2Z8lBsVocDCadl4fHQW7khgNMby9nHj6M50Lk0uG0bl65TuDedaca8Afk31LpniczWKco2-nT6EaZFvNf9rw1-6P69YS2aSuAlfPSBcHzDiKPqXA5s4Rjb3D881nVboJ3XEPjIixd3lWXpqM66o7Ml1GYSKZqX90QYK0ugNz4AJ1uhIHQkb1MyC2wOz2-nB3EkXzF83BG0v8AUS2hU1gCKtdF6eqkBnT6omxSi8wfgP0nNbjndK\\\\\\\",1]],[\\\\\\\"431391A8-8AD9-495B-B597-B48EFC110EE1\\\\\\\",2]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:35:13.860Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=120836&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:35:14.419Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=519275&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:35:15.657Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=767004&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"acfab455-1ea6-4342-9f77-6980931191e9\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:35:26.075Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=881040&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"acfab455-1ea6-4342-9f77-6980931191e9\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:35:36.511Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=793277&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"acfab455-1ea6-4342-9f77-6980931191e9\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:35:47.011Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=507785&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"acfab455-1ea6-4342-9f77-6980931191e9\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:35:57.400Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=as29s&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=484103&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"as29s\\\",\\\"[\\\\\\\"acfab455-1ea6-4342-9f77-6980931191e9\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:07.776Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=133832&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:08.354Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=687365&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:19.507Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=846490&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:20.039Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=307656&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:31.240Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=204772&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:31.846Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=126862&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:43.128Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=274645&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:43.672Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=550696&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:54.917Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=902395&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:36:55.524Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=735343&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:06.579Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=732662&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:07.164Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=428849&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:18.297Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=403016&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:18.869Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=482869&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:30.407Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=943611&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:30.968Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=635711&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:42.333Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=130904&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:42.906Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=449576&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:54.021Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=141389&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:37:54.709Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=662206&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:05.860Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=514666&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:06.478Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=672489&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:17.674Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=284421&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:18.310Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=672217&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:29.476Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=830575&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:30.038Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=228952&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:41.240Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=869891&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:41.801Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=903508&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:52.908Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=635587&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:38:53.481Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=281464&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:05.251Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=982190&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:05.857Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=713378&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:16.987Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=514501&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:17.587Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=212790&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:29.907Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=220095&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:30.555Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=573135&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:41.677Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=842271&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:42.269Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=979840&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:53.451Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=598114&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:39:54.002Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=429825&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:05.147Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=129932&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:05.720Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=377093&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:16.777Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=589057&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:17.422Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=332572&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:28.494Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=573674&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:29.087Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=126423&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:40.207Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=875866&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:40.764Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=482156&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:47.463Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=331165&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:51.932Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=714688&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:40:52.506Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=253399&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:03.532Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=358774&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:04.158Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=999531&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:15.352Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=356379&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:15.954Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=234202&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:27.269Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=385323&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:27.886Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=232235&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:38.907Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=310126&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:39.479Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=788694&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:50.598Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=516710&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:41:51.184Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=776562&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:02.437Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=319540&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:03.037Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=915775&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:14.103Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=752966&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:14.666Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=653216&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:25.704Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=152111&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:26.299Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=990870&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:37.372Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=583673&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:38.046Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=933835&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:49.540Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=547072&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:42:50.132Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=158498&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:01.243Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=927915&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:01.906Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=233382&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:13.175Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=670629&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:13.762Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=249295&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:15.488Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=maseQ&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=377839&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"maseQ\\\",\\\"[[null,22,null,null,null,\\\\\\\"594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,null,[\\\\\\\"0cAFcWeA5sSvd8B977BDkEJiTttL1GNyyHbcqoTKrV-qQDVafR-aA1XD9xGEBapDM_0Bq88_NE7WOdRjCNto6fvEz6Ndk6LRuSx_fyc2Bpgf7YNN00EzmqJCqS_Sci0-PCiki9s8D8xcFA0LH1Cz5X_jlRpVaOIYcbZ3BCBsFxGgBZJuYo0B0QFuzbhwl8vstyW4qjAQfen9-TRAXdQz_mxnwW-v8qOrJUUpgBqktV0jUcmPMC0x71Lgv8YSCVbLIKA0s2WWuPEPc9t4w7pYB3oz158No18L09LdwT5xj2LkVLrlmCId45zO-QVF1JxlpjUabO6O5_VSNzlnHXc2EMC__ig0cYtIc6jJOpkFYpl1OT_F6eZ_YJzuB7Q3qY4aya3yso-7U4mcnBz01qG7B5hOjOgk0XV2E_O6OV6vfQEoEfodZFg-tm9DpQ0vjS8xrFfsR67OaWG_lk-LrBHDPuAuEwQife5EJIUG-4QRvhELIDja6nUZtZJmIbf8-l-u-JB-edWgooTUIOoDEan41sTXp9GZgI0gt6EB-yzJcTSsVc4omHAh_OyzCds_qrOwa5awYBhCcdMpV-PbV49ZoQizBYTcTEzb9S3b_gplfIgkAHdii5jNSBqoAHWYE_h2wSsGBISB5uuan6bnLpaKOJpHRZFx9dv8bXtlF92BO-BuFUv-zSt-I8XEUISv8qUkB6xef5t9ErNh92ZBcHX9adkVSVTB9jq2QWS5VQrtD5wJz30pvOhTcRiQPabJu_8fz7U8gEYMrQm_oEEYr2LqIIskllksoevrzQhMsSxjjp-kiV87a4B8nJJuvWvliaPImcxb0sJDN4F4knDcs_N7RpAEUSXS6UL6-NGs0HyRKpmQ4Ant73haBmGMehmlKANKJLygOpuTkP9jaY9kkH2kgSFVlKHN-oDVd0WhzOMqE2IWpza5uZD_W5f_7VgMN2LdRwUB-1OCO_5NGBjkFRXeK7CPinyJ44Ol0iT4UT_vvnmxUTIzHIQswIE7EV5VLSf38td9DNilDvzyDNnaIM-smxQRxFZ9wMddQIxoVye7WbYGzoW0G2pBXfjG-kOM505K-sei-bPbRTugfqHx6EzuIEkILkPHgi0L97JL6s12leIYXcj4QrfHy8wjG2yud62R-kIKsE_5O06oGuXimbRHgTwJbfbg5Jxbs29RRed6gh6LyDOjgXSO9VcvvmKRvJZ3Wn_l-kj7j1wrBNf2-20n_CIhH6qjmVUxT1tjGR8Eb2sUEnoOiPib8GRiBe67e639bKFSISFoFlitq-Wg9fpxBMM1K0UCA8E21G-e6PdtVFnRAtrfm5Rr1iuw8Np3uWNmO2lGQK9Gs8KGYnUO77oSdLYDU6itNhyZCFgn-gzxocjlLFtEvBgPq1AAR7-l3p4P--EJrY9XsF6hAHimudCxTYtA-MlxYE2x9YeHip_WCeN0HteRt0nphPGVihLpKMu8GzX-IMJyHa2ckxkOZpqMtSlXZEmPtjRZnGmEKeuL4G_khynDY_cHWueR7X-1M8duVOERwPkmo4roXWp21pufR9DhPEbTGis-4d0ZnWxuX_-4Vq_AMOLaX6gF6H8jFqf7OWWaOwC0DlXQIx5uQbwL2dPapG4Nq4jRHyzZFMhb_eIP4lhh09Gw5fMTLQzsBR7PzHVvkjfLmAP6P2q_obz59Bar11PN9cwd2vwIHhH032c-CGGE8S-Y9VLSgzq8rk2e8qJ17n14c2bidUozetXk3peR6BXl3YfsWtc_c_puZnCDWnGk5ekLqd8Re1lBWQLb0p3cZaUDJk7ZrvNtcyZpHjcyZu_nWnSVcvMAkfR2nJ1DhGeOVdeQm3FVY_fbhsqwFqHDbfxTAulrWZ0kf89cvhFndBjC5xl_t0gXCRHirnw8hVrK7HPVMPrF5XREZE4OGYRGrXInuRc5jcOxexMyG-8uMl789GE2P1Fzs8CjFd4-c87YjmW4ZmZCdRKg2kfhOpg1DZ88eu0cNEjvDv8T7I72cxRLqPlnTc8qRKBzkElscAazsBe0ngZ4g0mjt4SVk_TyvSn1wYNbVzlA-L_zHvE_shJiN5JqHHKMPiZKULCBF7D-DHP0ss7-HZDvxe27-tyi6IuWAPIYOFnerY-JDYL-tHvHHKj4nb2jNhbbEM_0OAWmaoAgEVylGokC8S3fu-C8mofWQXCHAJGQ6zmaV8zOrfrMMjHEBUEeUdNrsI6omcdBfQ9JR2fCMs3y7P5_JwpFvE5fDOoL_1L89P-pPj1jmgYPqTy7lMDfSvy7MAkdWDcvqVaiMuwIeciva2-JsJIXfLIQy8nxS1yAMinOwp_qlwos46mZf7Kopkx6gIQ5O9EzPODcd8beyQNiZsJG_QJx8eQtfJPDvOOSPb07vbESA6dW9899sCuDqfJ6dWkuEk-OkBbY9aA9vuMe_S3CNnT9ot1isAlnYrabTVk5A0lKMKP3oYb-8-OUfWPU72eFryQCDDtEEVetE\\\\\\\",1]],\\\\\\\"/9j/4AAQSkZJRgABAQAAAQABAAD/7QBQUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAABgcAm4AE01hZGUgd2l0aCBHb29nbGUgQUk4QklNBCUAAAAAABDIs4lltEU3qRin51mYyOP2/+EDAWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4wLWMwMDAiPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHhtbG5zOklwdGM0eG1wRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VGaWxlVHlwZT0iaHR0cDovL2N2LmlwdGMub3JnL25ld3Njb2Rlcy9kaWdpdGFsc291cmNldHlwZS90cmFpbmVkQWxnb3JpdGhtaWNNZWRpYSIgSXB0YzR4bXBFeHQ6RGlnaXRhbFNvdXJjZVR5cGU9Imh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWEiIHBob3Rvc2hvcDpDcmVkaXQ9Ik1hZGUgd2l0aCBHb29nbGUgQUkiLz4KPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K/+sZ90pQAAEAAAABAAAZ7Wp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABnHanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTpmZDYyOThlNC0yMDU5LTMyMjctMDNiOC00ODI1ZDBhNDBhY2EAAAATAGp1bWIAAAAoanVtZGMyY3MAEQAQgAAAqgA4m3EDYzJwYS5zaWduYXR1cmUAAAAS0GNib3LShFkGKqIBJhghglkDPjCCAzowggLAoAMCAQICFACnM2wMN+ADb/eB7Bj02g/DtN1iMAoGCCqGSM49BAMDMFExCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApHb29nbGUgTExDMS0wKwYDVQQDDCRHb29nbGUgQzJQQSBNZWRpYSBTZXJ2aWNlcyAxUCBJQ0EgRzMwHhcNMjYwMjI1MTUxNTU0WhcNMjcwMjIwMTUxNTUzWjBrMQswCQYDVQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIExMQzEcMBoGA1UECxMTR29vZ2xlIFN5c3RlbSA2MDAzMjEpMCcGA1UEAxMgR29vZ2xlIE1lZGlhIFByb2Nlc3NpbmcgU2VydmljZXMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATuKwPFjizRNTLzUihbaJAr+XcQ65GEjEF3I9oMbuxIDXJMTqslQyuuuevF47DJVtixcWq8x8aVg9uo0EPnmrCko4IBWjCCAVYwDgYDVR0PAQH/BAQDAgbAMB8GA1UdJQQYMBYGCCsGAQUFBwMEBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFNj3rZAGCFUC+HFkOGHbbggeXSobMB8GA1UdIwQYMBaAFNp74b20LIqF4BDWa5rHSvH63/Y3MGwGCCsGAQUFBwEBBGAwXjAmBggrBgEFBQcwAYYaaHR0cDovL2MycGEtb2NzcC5wa2kuZ29vZy8wNAYIKwYBBQUHMAKGKGh0dHA6Ly9wa2kuZ29vZy9jMnBhL21lZGlhLTFwLWljYS1nMy5jcnQwFwYDVR0gBBAwDjAMBgorBgEEAYPoXgEBMBkGCSsGAQQBg+heAwQMBgorBgEEAYPoXgMKMDMGCSsGAQQBg+heBAQmDCQwMTljMzRkMy03MzNmLTdhNDctYjkxNy01MGRkMzhmNDFlY2UwCgYIKoZIzj0EAwMDaAAwZQIxAIA3rs6ptfbGUpQv/bE/vboyGRVLK/qLoyplJBQm4qO/ekr3RlvdEWOP339bA8r5hQIwJ0c8y/xYFldNkIERVDogLQ7jNE3kjI/RtL4/uquRcQWDLmcLV9+9KtVUnossRvz6WQLgMIIC3DCCAmOgAwIBAgIUQfqlIUd2IVjaf5ss/439Fgke7j4wCgYIKoZIzj0EAwMwQzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkdvb2dsZSBMTEMxHzAdBgNVBAMMFkdvb2dsZSBDMlBBIFJvb3QgQ0EgRzMwHhcNMjUwNTA4MjIzNjI2WhcNMzAwNTA4MjIzNjI2WjBRMQswCQYDVQQGEwJVUzETMBEGA1UECgwKR29vZ2xlIExMQzEtMCsGA1UEAwwkR29vZ2xlIEMyUEEgTWVkaWEgU2VydmljZXMgMVAgSUNBIEczMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuCPlUxSiltqnB2lx2ES7FK+TVZWmAxRzzDjTzKZ8umoqyvCqSLOkZBrOieaLqrp+rnzt0EADWWH3X62NqzEXRewW6rb/lS7VXkVCM02gC0ZgJW7+PCsZgLoUBUQ+nkN5o4IBCDCCAQQwFwYDVR0gBBAwDjAMBgorBgEEAYPoXgEBMA4GA1UdDwEB/wQEAwIBBjAfBgNVHSUEGDAWBggrBgEFBQcDBAYKKwYBBAGD6F4CATASBgNVHRMBAf8ECDAGAQH/AgEAMGQGCCsGAQUFBwEBBFgwVjAsBggrBgEFBQcwAoYgaHR0cDovL3BraS5nb29nL2MycGEvcm9vdC1nMy5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9jMnBhLW9jc3AucGtpLmdvb2cvMB8GA1UdIwQYMBaAFJxc2IlTQ+da1YHbA94ZfwQqKi2qMB0GA1UdDgQWBBTae+G9tCyKheAQ1muax0rx+t/2NzAKBggqhkjOPQQDAwNnADBkAjACxtEE3NW13bwN1u/51ericNF6rkEhYVESDO6Jqb5cX37Hwg0X9S2rH+vXaoFZIHsCMC03wCKKomDHgqV47UtyyHpZlo5IZACW72Xdc4gipdWMEmhvPk88dvxbYtn+LVd9zKRnc2lnVHN0MqFpdHN0VG9rZW5zgaFjdmFsWQfeMIIH2gYJKoZIhvcNAQcCoIIHyzCCB8cCAQMxDTALBglghkgBZQMEAgEwgY4GCyqGSIb3DQEJEAEEoH8EfTB7AgEBBgorBgEEAdZ5AgoBMDEwDQYJYIZIAWUDBAIBBQAEIMJouGFd46JzVfFtqSDgLuKQDRcIOCv3TT6iuHopwRO0AhQzmbQlISEv8GZrvJ5owz8vJ0w0XRgPMjAyNjA5MjMxNDM0MTRaMAYCAQGAAQoCCDNKYiBJw57NoIIFnzCCAsgwggJPoAMCAQICFACj5s6bDi1sBEPLcZAsbY+JHdF8MAoGCCqGSM49BAMDMFIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApHb29nbGUgTExDMS4wLAYDVQQDDCVHb29nbGUgQzJQQSBDb3JlIFRpbWUtU3RhbXBpbmcgSUNBIEczMB4XDTI1MDkwODEzNDg1M1oXDTMxMDkwOTAxNDg1MlowUzELMAkGA1UEBhMCVVMxEzARBgNVBAoTCkdvb2dsZSBMTEMxLzAtBgNVBAMTJkdvb2dsZSBDb3JlIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5IFQ4MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhV+JnSQIXia2m9cdpfb4chUlfYNgYI4yuVpDiWlh7lA0P5VDJjrBUbIpg/gGMujcEL9tjQ9ZwMuqE75UMm81oaOCAQAwgf0wDgYDVR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFCesF15ONDRI5pNECKO/bCi015u4MB8GA1UdIwQYMBaAFN5Vl4xgdDsD4mq0RAZll2HK5fiOMGwGCCsGAQUFBwEBBGAwXjAmBggrBgEFBQcwAYYaaHR0cDovL2MycGEtb2NzcC5wa2kuZ29vZy8wNAYIKwYBBQUHMAKGKGh0dHA6Ly9wa2kuZ29vZy9jMnBhL2NvcmUtdHNhLWljYS1nMy5jcnQwFwYDVR0gBBAwDjAMBgorBgEEAYPoXgEBMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMAoGCCqGSM49BAMDA2cAMGQCMDwnVU96UNMRHrip252DidoYxlHB4KvsTbbdnjKvHg7nfOXMSoYyQ1/mAR/9z8FmAQIwXHLpBv7BWWmS7sztLjL5TXLMLdzgCJc+sPr7EM1sJMynIBmAThEdXGk60v2yoJMyMIICzzCCAlagAwIBAgIURQCDbnITAsVkpJ5kM3b6jwm3ZPQwCgYIKoZIzj0EAwMwQzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkdvb2dsZSBMTEMxHzAdBgNVBAMMFkdvb2dsZSBDMlBBIFJvb3QgQ0EgRzMwHhcNMjUwNTA4MjIzNjI2WhcNNDAwNTA4MjIzNjI2WjBSMQswCQYDVQQGEwJVUzETMBEGA1UECgwKR29vZ2xlIExMQzEuMCwGA1UEAwwlR29vZ2xlIEMyUEEgQ29yZSBUaW1lLVN0YW1waW5nIElDQSBHMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABKN99/G9CCofRVkl4FL5qSDf/tsuj0Uh2E8K1c0Dcd1nKixZbsCcJDJyInm5ApFfuabKR5+nxTRzE35exSVE6TEijjTVuBb+GsGrM+rGISwjT/8B5ODBf/A4a8VyrSVLCqOB+zCB+DAXBgNVHSAEEDAOMAwGCisGAQQBg+heAQEwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMBIGA1UdEwEB/wQIMAYBAf8CAQAwZAYIKwYBBQUHAQEEWDBWMCwGCCsGAQUFBzAChiBodHRwOi8vcGtpLmdvb2cvYzJwYS9yb290LWczLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL2MycGEtb2NzcC5wa2kuZ29vZy8wHwYDVR0jBBgwFoAUnFzYiVND51rVgdsD3hl/BCoqLaowHQYDVR0OBBYEFN5Vl4xgdDsD4mq0RAZll2HK5fiOMAoGCCqGSM49BAMDA2cAMGQCMEHGBo0dSnwBldblTYF0fGBdzHBCW0oRhGP/pYfclCTYgcyo+UdR5nYuiHZpKFhQcQIwcAumLdMem8XpEJsAEedT9O0lo+ksaufwbJ93BVh5HG3h37rxij8nE064uhpSPiMtMYIBfTCCAXkCAQEwajBSMQswCQYDVQQGEwJVUzETMBEGA1UECgwKR29vZ2xlIExMQzEuMCwGA1UEAwwlR29vZ2xlIEMyUEEgQ29yZSBUaW1lLVN0YW1waW5nIElDQSBHMwIUAKPmzpsOLWwEQ8txkCxtj4kd0XwwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwOTIzMTQzNDEzWjAvBgkqhkiG9w0BCQQxIgQg+5GaTAyO/ByaBbYKOakJa58I0qgT3kwi067KvY2T1DkwNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQghPWfDpUuk503D438GTkU09d2Yl7IWPV15a/lpuyH0GkwCgYIKoZIzj0EAwIESDBGAiEA5gKs/EtNYvo1KTFKldn53m+AVw1ZhFN5+3+gT8n6N+ACIQDTxfaiBYwk+9IE9ZnRnNy71+SwJM450o/BdgDFwzrlSWVyVmFsc6Fob2NzcFZhbHOCWQPzMIID7woBAKCCA+gwggPkBgkrBgEFBQcwAQEEggPVMIID0TCB7KFCMEAxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpHb29nbGUgTExDMRwwGgYDVQQDExNDMlBBIE9DU1AgUmVzcG9uZGVyGA8yMDI2MDkyMjE1MzMwMFowgZQwgZEwaTANBglghkgBZQMEAgEFAAQgssyQyamfMvBXXlCCvNODuNEJ0MZY4HuaHcboqhUW7SoEIJwa/V8+flyCR5a1dPJTP+OCaW+uDbdG9nAQsZU5sds9AhQApzNsDDfgA2/3gewY9NoPw7TdYoAAGA8yMDI2MDkyMjE1MzMwOVqgERgPMjAyNjA5MjkxNTMzMDlaMAoGCCqGSM49BAMCA0kAMEYCIQDmGjb89kHSjVLSjm/5Nb4IvRJSbG8DXl4S6nWAAf42mgIhANstMU69ossB0sVqwp2TDxaMtJY0dgnoHzHCW+rikk53oIIChzCCAoMwggJ/MIICBqADAgECAhNv2EaFBq6Sx2UIBOCyxLe6txS+MAoGCCqGSM49BAMDMFExCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApHb29nbGUgTExDMS0wKwYDVQQDDCRHb29nbGUgQzJQQSBNZWRpYSBTZXJ2aWNlcyAxUCBJQ0EgRzMwHhcNMjYwOTE4MjA1NzE3WhcNMjYxMDE4MjA1NzE2WjBAMQswCQYDVQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIExMQzEcMBoGA1UEAxMTQzJQQSBPQ1NQIFJlc3BvbmRlcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBSF02/al6hJwOWReYowIe61aHqrp0DzjwlMsNsIp5y4M8flmz7yByJdzL3jY0o3T8MPvI31+AjTh8TAcpuit1ejgc0wgcowDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBDX2MiulvXnPE3ZyJsVEfgD7GRKMB8GA1UdIwQYMBaAFNp74b20LIqF4BDWa5rHSvH63/Y3MEQGCCsGAQUFBwEBBDgwNjA0BggrBgEFBQcwAoYoaHR0cDovL3BraS5nb29nL2MycGEvbWVkaWEtMXAtaWNhLWczLmNydDAPBgkrBgEFBQcwAQUEAgUAMAoGCCqGSM49BAMDA2cAMGQCMHrjZsqMjSkWiiqp8B4M3V4M9wgm3CV+FNbg5A5IH4e6HyTE/L/ocG2EVttnNY/DYwIwUuK048wjVHZg9J80N6zhhAW7aJEwXXpontBDexQnz03ErJ+zpJljli2WdAVvkVWHQGNwYWRYRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkcGFkMkEA9lhA5Fj7cva9WOMtBiVC1ZuZSnaW2GH25piIVJVxQiqC+NyV7Bp3YiifgWcQKGDYESeNHonPLgNCkPj8QqViZ0lemQAAAnBqdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACQWNib3Klamluc3RhbmNlSUR4JDk4MThiOTFkLThiMzEtYTQxMS04ZGNhLTRhY2UxM2IyNWYzOXRjbGFpbV9nZW5lcmF0b3JfaW5mb6JkbmFtZXgiR29vZ2xlIEMyUEEgQ29yZSBHZW5lcmF0b3IgTGlicmFyeWd2ZXJzaW9uczk4NjA5MTA4Nzo5ODYwOTEwODdyY3JlYXRlZF9hc3NlcnRpb25zhKJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggQ89BBSZ+7rzB0gQct1E1zC8AYWx4J+2IJ7n7zntYOZaiY3VybHgwc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pbmdyZWRpZW50LnYzX18xZGhhc2hYIBVyU9Zm+Ya+XXIkkkUgpWMxOV0E+KN+UyCd/DYlIaenomN1cmx4KnNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuYWN0aW9ucy52MmRoYXNoWCB5q0Xq9rF01iglhf65S6khCMK+kydWOnLL1OvmXsVMqqJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCAPSDdU4ZjgSfyxw66Idj7Rtq7EMYqf+6moerr73uH0gmlzaWduYXR1cmV4GXNlbGYjanVtYmY9YzJwYS5zaWduYXR1cmVjYWxnZnNoYTI1NgAABAhqdW1iAAAAKWp1bWRjMmFzABEAEIAAAKoAOJtxA2MycGEuYXNzZXJ0aW9ucwAAAACcanVtYgAAAChqdW1kY2JvcgARABCAAACqADibcQNjMnBhLmhhc2guZGF0YQAAAABsY2JvcqRqZXhjbHVzaW9uc4GiZXN0YXJ0GQNpZmxlbmd0aBkZ+WNhbGdmc2hhMjU2ZGhhc2hYIId95Tk+Ud8rnWXsew1hnNIjvKmUVOhx9o9/rY0j6vGHY3BhZEwAAAAAAAAAAAAAAAAAAAJWanVtYgAAAClqdW1kY2JvcgARABCAAACqADibcQNjMnBhLmFjdGlvbnMudjIAAAACJWNib3KhZ2FjdGlvbnOCpGZhY3Rpb25sYzJwYS5jcmVhdGVka2Rlc2NyaXB0aW9ueCBDcmVhdGVkIGJ5IEdvb2dsZSBHZW5lcmF0aXZlIEFJLnFkaWdpdGFsU291cmNlVHlwZXhGaHR0cDovL2N2LmlwdGMub3JnL25ld3Njb2Rlcy9kaWdpdGFsc291cmNldHlwZS90cmFpbmVkQWxnb3JpdGhtaWNNZWRpYWpwYXJhbWV0ZXJzoWtpbmdyZWRpZW50c4KiY3VybHgtc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5pbmdyZWRpZW50LnYzZGhhc2hYIEPPQQUmfu68wdIEHLdRNcwvAGFseCftiCe5+857WDmWomN1cmx4MHNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M19fMWRoYXNoWCAVclPWZvmGvl1yJJJFIKVjMTldBPijflMgnfw2JSGnp6NmYWN0aW9ua2MycGEuZWRpdGVka2Rlc2NyaXB0aW9ueChBcHBsaWVkIGltcGVyY2VwdGlibGUgU3ludGhJRCB3YXRlcm1h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\\\\\\\",\\\\\\\"image/jpeg\\\\\\\",1,null,null,null,null,\\\\\\\"image.jpg\\\\\\\",null,\\\\\\\"DDE5D2A5-FE61-45F0-8DEB-644FD661D8FE\\\\\\\",\\\\\\\"32984960-0203-4A83-A40A-38AA1CB72B49\\\\\\\"]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:30.002Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=516290&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:34.708Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=457940&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:35.371Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=836706&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:46.411Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=712321&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:47.045Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=679753&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:46.993Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=270832&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:58.096Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=348558&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:43:58.651Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=850002&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:09.691Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=941613&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:10.325Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=763002&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:21.404Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=249676&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:21.924Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=226901&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:33.059Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=351509&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:33.716Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=731350&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:44.837Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=761095&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:45.421Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=649427&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:56.580Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=234206&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:57.218Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=505695&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:44:58.925Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=693767&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:45:08.375Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=216527&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:45:08.960Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=864349&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:45:20.042Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=598093&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:45:20.593Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=Zzl0ze&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=459315&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"Zzl0ze\\\",\\\"[\\\\\\\"projects/594758cc-11f5-4f92-8b3c-1213686591f4\\\\\\\",null,null,null,[1]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:45:44.892Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=326329&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:45:55.470Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=160041&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:46:06.184Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=538126&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:46:16.785Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=425860&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:46:27.392Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=882427&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:46:37.972Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=896469&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:46:48.558Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=654551&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:46:59.105Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=437717&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:47:09.662Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=820538&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:47:20.258Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=224749&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:47:30.891Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=997797&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:47:41.499Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=447250&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:47:52.175Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=613362&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:48:02.794Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=130278&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:48:13.370Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=954209&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:48:24.046Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=128013&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:48:34.673Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=419970&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:48:45.209Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=678757&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:48:55.800Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=922184&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:49:06.369Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=949639&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:49:26.737Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=664766&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:49:37.403Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=170642&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:49:47.947Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=716638&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:49:59.396Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=491729&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:50:09.951Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=838757&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:50:20.534Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=868651&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:50:31.102Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=136891&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:50:41.704Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=755022&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:50:52.273Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=364569&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:51:02.831Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=643020&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:51:13.402Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=262067&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:51:23.981Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=302529&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:51:34.540Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=176657&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:51:45.141Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=198295&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:51:55.784Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=387145&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:52:06.364Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=729924&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:52:16.960Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=789506&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:52:27.561Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=272150&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:52:38.115Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=796219&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:52:48.727Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=287705&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:52:59.272Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=451205&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:53:09.891Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=546454&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:53:20.734Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=651180&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:53:31.365Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=455957&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:53:41.988Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=722873&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:53:52.602Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=572083&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:54:03.210Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=796153&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:54:13.775Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=534261&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:54:24.368Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=595405&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:54:34.934Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=987190&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:54:45.501Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=183779&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:54:56.107Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=220694&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:55:06.711Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=152543&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:55:17.278Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=326182&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:55:27.881Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=817338&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:55:38.445Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=621124&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:55:49.045Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=461769&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:55:59.639Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=513854&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:56:10.277Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=546890&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:56:20.892Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=386300&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:56:31.569Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=119744&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:56:42.098Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=661519&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:56:52.662Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=827093&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:57:03.253Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=733686&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:57:13.808Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=902402&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:57:24.390Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=583328&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:57:34.981Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=592196&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:57:45.570Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=962876&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:57:56.224Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=330832&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:58:06.828Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=749968&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:58:17.450Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=256317&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:58:28.051Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=133287&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:58:38.594Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=190807&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:58:49.208Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=549301&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:58:59.787Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=876609&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:59:10.396Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=424315&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:59:20.988Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=891089&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:59:31.632Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=172988&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:59:42.174Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=566179&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T14:59:52.741Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=502020&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:00:03.320Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=568950&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:00:17.227Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=108961&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:00:30.621Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=697403&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:00:41.291Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=906598&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:00:56.513Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=930311&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:01:07.132Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=659070&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:01:17.723Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=489037&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:01:28.348Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=788214&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:01:38.911Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=201581&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:01:49.542Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=567273&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:02:00.179Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=704154&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:02:10.776Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=807511&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:02:21.418Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=584917&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:02:32.114Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=497819&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:02:42.684Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=860563&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:02:53.329Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=891712&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:03:03.932Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=577369&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:03:14.519Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=666831&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:03:25.158Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=309121&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:03:35.767Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=343200&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:03:46.364Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=453303&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:03:56.924Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=644318&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} +{"ts": "2026-09-23T15:04:07.617Z", "url": "https://flow.google.com/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=jwpduf&source-path=%2Fproject%2F594758cc-11f5-4f92-8b3c-1213686591f4&bl=boq_labs-ai-sandbox-frontend_20260922.00_p0&f.sid=4710374552478052088&hl=vi&_reqid=395220&rt=c", "method": "POST", "body": "{\"at\":[\"AIQ-s5gZcrFuOkJ46PkSuXUQbO_I:1790172189612\"],\"f.req\":[\"[[[\\\"jwpduf\\\",\\\"[null,null,[[\\\\\\\"ec675e90-a9e3-4c4a-b64f-77672c87d1d0\\\\\\\"]]]\\\",null,\\\"generic\\\"]]]\"]}", "statusCode": 200} diff --git a/scratch/check_chars.py b/scratch/check_chars.py new file mode 100644 index 000000000..d917789a3 --- /dev/null +++ b/scratch/check_chars.py @@ -0,0 +1,7 @@ +import sqlite3 + +conn = sqlite3.connect('flow_agent.db') +chars = conn.execute('SELECT id, name, entity_type, media_id FROM character').fetchall() +print(f"Total characters: {len(chars)}") +for ch in chars: + print(f"ID: {ch[0]} | Name: {ch[1]} | Type: {ch[2]} | media_id: {ch[3]}") diff --git a/scratch/check_db.py b/scratch/check_db.py new file mode 100644 index 000000000..2df54e0cd --- /dev/null +++ b/scratch/check_db.py @@ -0,0 +1,18 @@ +import sqlite3 + +con = sqlite3.connect('flow_agent.db') +print("--- SCENES ---") +for row in con.execute("SELECT id, display_order, prompt, video_prompt, narrator_text, horizontal_image_media_id, horizontal_video_media_id, horizontal_image_url, horizontal_video_url FROM scene ORDER BY display_order").fetchall(): + print(f"Scene #{row[1]}: id={row[0]}") + print(f" prompt={row[2]}") + print(f" video_prompt={row[3]}") + print(f" narrator_text={row[4]}") + print(f" image_mid={row[5]}") + print(f" video_mid={row[6]}") + print(f" image_url={row[7]}") + print(f" video_url={row[8]}") + print() + +print("--- CHARACTERS / ENTITIES ---") +for row in con.execute("SELECT id, name, media_id, image_url FROM character").fetchall(): + print(f"Character: {row[1]} (id={row[0]}) mid={row[2]} url={row[3]}") diff --git a/scratch/check_hijack.py b/scratch/check_hijack.py new file mode 100644 index 000000000..9a0d445ec --- /dev/null +++ b/scratch/check_hijack.py @@ -0,0 +1,4 @@ +import requests + +resp = requests.get("http://127.0.0.1:8100/api/ext/find-actions") +print(resp.json()) diff --git a/scratch/check_netlog.py b/scratch/check_netlog.py new file mode 100644 index 000000000..4003814b9 --- /dev/null +++ b/scratch/check_netlog.py @@ -0,0 +1,8 @@ +import json + +with open('scratch/captured_netlog.jsonl', encoding='utf-8') as f: + for i, line in enumerate(f): + d = json.loads(line) + url = d.get('url', '') + if any(k in url for k in ['Video', 'video', 'eb1hJf', 'StreamChat']): + print(f"Line {i+1}: {url[:100]} status={d.get('statusCode')}") diff --git a/scratch/check_new_media.py b/scratch/check_new_media.py new file mode 100644 index 000000000..5d78c2837 --- /dev/null +++ b/scratch/check_new_media.py @@ -0,0 +1,18 @@ +import sys +sys.path.insert(0, '.') +import asyncio +from agent.services.flow_client import get_flow_client +from agent.services import flow_batch as fb + +async def main(): + client = get_flow_client() + mid = "666bc47c-1fa1-4167-83cc-3088840b3146" + freq = fb.media_request(mid) + res = await client.batch_rpc(fb.RPC_MEDIA, freq) + print("as29s status:", res.get("status")) + print("as29s data:", res.get("data")[:300] if res.get("data") else None) + urls = fb.read_media_urls(res.get("data", "")) if res.get("data") else None + print("urls:", urls) + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/scratch/check_recent_assets.py b/scratch/check_recent_assets.py new file mode 100644 index 000000000..393162a46 --- /dev/null +++ b/scratch/check_recent_assets.py @@ -0,0 +1,32 @@ +import sys +sys.path.insert(0, ".") +import urllib.request +import json +import re + +with urllib.request.urlopen("http://127.0.0.1:8100/api/ext/test-project-media") as resp: + data = json.loads(resp.read().decode("utf-8")) + +with open("scratch/project_media_dump.txt", "r", encoding="utf-8") as f: + text = f.read() + +from agent.services import flow_batch as fb +payload = fb.first_payload(text, fb.RPC_PROJECT_MEDIA) +items = payload[1] if len(payload) > 1 and isinstance(payload[1], list) else [] + +print(f"Total items in payload[1]: {len(items)}") + +# Print all items created in the last 15 minutes (since 21:30) +# Epoch ~ 1790173800 +for it in items: + try: + details = it[3] + ts = details[1][0] + title = details[0] + is_video = bool(details[2]) + media_id = details[4] + op_id = details[5] if len(details) > 5 else None + if ts > 1790173500: # recent + print(f"RECENT: TS={ts} | Video={is_video} | Title='{title}' | MediaID={media_id} | OpID={op_id}") + except Exception as e: + pass diff --git a/scratch/check_requests.py b/scratch/check_requests.py new file mode 100644 index 000000000..1eab5d464 --- /dev/null +++ b/scratch/check_requests.py @@ -0,0 +1,8 @@ +import sqlite3 + +con = sqlite3.connect('flow_agent.db') +cur = con.cursor() +rows = cur.execute("SELECT id, type, scene_id, status, error, created_at, updated_at FROM request ORDER BY created_at DESC LIMIT 15").fetchall() +print(f"Total requests: {len(rows)}") +for r in rows: + print(r) diff --git a/scratch/compare_stream_chat.py b/scratch/compare_stream_chat.py new file mode 100644 index 000000000..ae892db35 --- /dev/null +++ b/scratch/compare_stream_chat.py @@ -0,0 +1,30 @@ +import json +import sys +sys.path.insert(0, ".") +from agent.services import flow_batch as fb + +with open("scratch/captured_netlog.jsonl", "r", encoding="utf-8") as f: + lines = [l for l in f if l.strip()] + +entry31 = json.loads(lines[31]) +b31 = json.loads(entry31["body"]) +outer = json.loads(b31["f.req"][0]) +req31 = json.loads(outer[1]) + +print("Entry 31 payload structure:") +print("Type:", type(req31), "Len:", len(req31)) +print("Item 0:", req31[0]) +print("Item 1:", req31[1]) +print("Item 2:", req31[2]) + +# Now generate from flow_batch +our_freq = fb.stream_chat_request("tạo 1 ảnh nhân vật", "594758cc-11f5-4f92-8b3c-1213686591f4") +print("\nOur freq:") +print(our_freq[:300]) + +# Compare our parsed freq with req31 +our_parsed = json.loads(our_freq) +print("\nOur parsed structure:") +print("Item 0:", our_parsed[0]) +print("Item 1:", our_parsed[1]) +print("Item 2 (minus token):", [our_parsed[2][0], our_parsed[2][1], "..."]) diff --git a/scratch/inspect_28_31.py b/scratch/inspect_28_31.py new file mode 100644 index 000000000..b91e8b348 --- /dev/null +++ b/scratch/inspect_28_31.py @@ -0,0 +1,14 @@ +import json + +with open("scratch/captured_netlog.jsonl", "r", encoding="utf-8") as f: + lines = [l for l in f if l.strip()] + +entry28 = json.loads(lines[28]) +print("Entry 28 URL:", entry28.get("url")) +print("Entry 28 Body:") +print(entry28.get("body")) + +entry31 = json.loads(lines[31]) +print("\nEntry 31 URL:", entry31.get("url")) +print("Entry 31 Body:") +print(entry31.get("body")) diff --git a/scratch/inspect_as29s.py b/scratch/inspect_as29s.py new file mode 100644 index 000000000..b1e51ab9f --- /dev/null +++ b/scratch/inspect_as29s.py @@ -0,0 +1,13 @@ +import json +import urllib.request + +req = urllib.request.Request( + 'http://127.0.0.1:8100/api/ext/media-url?media_id=666bc47c-1fa1-4167-83cc-3088840b3146' +) +# Wait, let's call the ext directly or fetch from main +res = urllib.request.urlopen('http://127.0.0.1:8100/api/ext/netlog') +data = json.loads(res.read().decode()) +for c in data.get('captures', []): + if 'as29s' in c.get('url', ''): + print("as29s capture:", c['url']) + print("f.req:", c.get('body')) diff --git a/scratch/inspect_assets.py b/scratch/inspect_assets.py new file mode 100644 index 000000000..901717580 --- /dev/null +++ b/scratch/inspect_assets.py @@ -0,0 +1,14 @@ +import sys +sys.path.insert(0, '.') +import json +from agent.services import flow_batch as fb + +s = open('scratch/project_media_dump.txt', encoding='utf-8').read() +results = fb.parse_envelope(s) +data = results[0].data +assets = data[1] +print(f"Total assets: {len(assets)}") +for i, a in enumerate(assets[:10]): + aid = a[0] if len(a) > 0 else None + prompt_info = a[3] if len(a) > 3 else None + print(f"Asset #{i}: id={aid} prompt={prompt_info[0] if isinstance(prompt_info, list) else prompt_info}") diff --git a/scratch/inspect_c31.py b/scratch/inspect_c31.py new file mode 100644 index 000000000..ebfc04abb --- /dev/null +++ b/scratch/inspect_c31.py @@ -0,0 +1,22 @@ +import json + +lines = open('scratch/captured_netlog.jsonl', encoding='utf-8').read().splitlines() +c31 = json.loads(lines[31]) +print("URL:", c31['url']) +print("StatusCode:", c31['statusCode']) +body_dict = json.loads(c31['body']) +print("Keys:", list(body_dict.keys())) +freq_list = body_dict.get('f.req', []) +print("f.req len:", len(freq_list)) +inner_str = freq_list[0] +print("f.req[0]:", inner_str[:300]) +# parse json if possible +try: + parsed = json.loads(inner_str) + print("parsed type:", type(parsed), len(parsed)) + print("parsed[0]:", parsed[0]) + print("parsed[1] type:", type(parsed[1])) + inner_payload = json.loads(parsed[1]) + print("inner_payload:", json.dumps(inner_payload, indent=2)[:1000]) +except Exception as e: + print("Error parsing:", e) diff --git a/scratch/inspect_dump.py b/scratch/inspect_dump.py new file mode 100644 index 000000000..2c1ae0333 --- /dev/null +++ b/scratch/inspect_dump.py @@ -0,0 +1,36 @@ +import sys +sys.path.insert(0, ".") +import json +from agent.services import flow_batch as fb + +with open('scratch/project_media_dump.txt', 'r', encoding='utf-8') as f: + text = f.read() + +payload = fb.first_payload(text, fb.RPC_PROJECT_MEDIA) +items = payload[1] if len(payload) > 1 and isinstance(payload[1], list) else [] + +parsed = [] +for it in items: + try: + asset_id = it[0] + details = it[3] if len(it) > 3 else None + title = details[0] if details else None + ts = details[1][0] if details and details[1] else 0 + media_id = details[4] if details and len(details) > 4 else None + is_video = bool(details[2]) if details and len(details) > 2 else False + parsed.append({ + "asset_id": asset_id, + "title": title, + "ts": ts, + "media_id": media_id, + "is_video": is_video, + "raw": it + }) + except Exception as e: + pass + +parsed.sort(key=lambda x: x["ts"], reverse=True) + +print(f"Total parsed items: {len(parsed)}") +for i, p in enumerate(parsed): + print(f"[{i}] TS: {p['ts']} | Type: {'VIDEO' if p['is_video'] else 'IMAGE'} | MediaID: {p['media_id']} | Title: {p['title']}") diff --git a/scratch/inspect_items.py b/scratch/inspect_items.py new file mode 100644 index 000000000..035bfcfec --- /dev/null +++ b/scratch/inspect_items.py @@ -0,0 +1,16 @@ +import sys +sys.path.insert(0, '.') +import json +from agent.services import flow_batch as fb + +s = open('scratch/project_media_dump.txt', encoding='utf-8').read() +results = fb.parse_envelope(s) +data = results[0].data +media_list = data[0] +print(f"Total media items in project: {len(media_list)}") +for item in media_list[:10]: + # inspect item structure + mid = item[0] if len(item) > 0 else None + meta = item[1] if len(item) > 1 else None + extra = item[2] if len(item) > 2 else None + print(f"Item: mid={mid} type={type(meta)} extra={extra}") diff --git a/scratch/inspect_new_asset.py b/scratch/inspect_new_asset.py new file mode 100644 index 000000000..47581570b --- /dev/null +++ b/scratch/inspect_new_asset.py @@ -0,0 +1,18 @@ +import sys +sys.path.insert(0, '.') +from agent.services import flow_batch as fb + +s = open('scratch/project_media_dump.txt', encoding='utf-8').read() +results = fb.parse_envelope(s) +data = results[0].data +assets = data[1] +print(f"Total assets in project: {len(assets)}") +for i, a in enumerate(assets): + # check prompt or timestamp + aid = a[0] if len(a) > 0 else None + meta = a[1] if len(a) > 1 else None + prompt_info = a[3] if len(a) > 3 else None + media_info = a[2] if len(a) > 2 else None + print(f"Asset #{i}: id={aid}") + print(f" prompt={prompt_info}") + print(f" media_info={str(media_info)[:160]}") diff --git a/scratch/inspect_video.py b/scratch/inspect_video.py new file mode 100644 index 000000000..249618baa --- /dev/null +++ b/scratch/inspect_video.py @@ -0,0 +1,18 @@ +import sqlite3 + +conn = sqlite3.connect('flow_agent.db') +c = conn.cursor() +vid = '945ad6d4-5d79-4790-80db-1bff16ed7255' +scenes = c.execute( + 'SELECT id, display_order, horizontal_image_media_id, horizontal_video_media_id, prompt, video_prompt, narrator_text ' + 'FROM scene WHERE video_id = ? ORDER BY display_order', (vid,) +).fetchall() + +print(f"Total scenes: {len(scenes)}") +for s in scenes: + print(f"#{s[1]}: id={s[0]}") + print(f" img={s[2]}") + print(f" vid={s[3]}") + print(f" prompt={s[4][:70]}...") + print(f" vid_prompt={s[5][:70] if s[5] else None}...") + print(f" narrator={s[6]}") diff --git a/scratch/inspect_video_op.py b/scratch/inspect_video_op.py new file mode 100644 index 000000000..ee7d602b0 --- /dev/null +++ b/scratch/inspect_video_op.py @@ -0,0 +1,16 @@ +import sys +sys.path.insert(0, ".") +import asyncio +import json +from agent.services.flow_client import get_flow_client + +async def main(): + client = get_flow_client() + op_id = "ec675e90-a9e3-4c4a-b64f-77672c87d1d0" + print(f"Checking status for op {op_id}...") + ops = [{"operation": {"name": op_id}}] + res = await client.check_video_status(ops) + print("Status result:") + print(json.dumps(res, indent=2)) + +asyncio.run(main()) diff --git a/scratch/inspect_zzl.py b/scratch/inspect_zzl.py new file mode 100644 index 000000000..8486281c6 --- /dev/null +++ b/scratch/inspect_zzl.py @@ -0,0 +1,10 @@ +import urllib.request +import json +import re + +req = urllib.request.urlopen("http://127.0.0.1:8100/api/ext/netlog") +data = json.loads(req.read().decode()) +for c in data.get("captures", []): + if "Zzl0ze" in c.get("url", ""): + print("Found Zzl0ze capture:") + print(c["url"]) diff --git a/scratch/list_captures.py b/scratch/list_captures.py new file mode 100644 index 000000000..a50ac196b --- /dev/null +++ b/scratch/list_captures.py @@ -0,0 +1,16 @@ +import json + +lines = open('scratch/captured_netlog.jsonl', encoding='utf-8').read().splitlines() +print(f"Total lines captured: {len(lines)}") +for i, line in enumerate(lines): + if not line.strip(): continue + d = json.loads(line) + ts = d.get('ts') + url = d.get('url') + # extract rpcids from url + rpcids = "unknown" + if "rpcids=" in url: + rpcids = url.split("rpcids=")[1].split("&")[0] + status = d.get('statusCode') + body_len = len(d.get('body') or '') + print(f"#{i} [{ts}] rpcid={rpcids} status={status} body_len={body_len}") diff --git a/scratch/orig_background.js b/scratch/orig_background.js new file mode 100644 index 000000000..56e2ed47c --- /dev/null +++ b/scratch/orig_background.js @@ -0,0 +1,1010 @@ +/** + * Flow Kit — Chrome Extension Background Service Worker + * + * Connects to local Python agent via WebSocket (agent runs WS server). + * Mints reCAPTCHA and runs Flow's batchexecute RPCs inside the Flow tab. + * + * Flow moved to flow.google.com in September 2026 and stopped minting the + * `Bearer ya29.…` the old REST host needed. The current path is `batch_rpc`: + * the agent builds an `f.req` envelope, this worker mints a captcha for it and + * runs the POST in the page's MAIN world, where the `at` CSRF token lives. + * The bearer capture and the `api_request` / `trpc_request` proxies below are + * the pre-migration path. The agent no longer sends either — it speaks only + * `batch_rpc`. They stay so an extension updated ahead of its agent keeps + * serving an older one; remove them once no agent in the wild sends them. + */ + +const AGENT_WS_URL = 'ws://127.0.0.1:9222'; +// NOTE: This is a browser-restricted public API key — safe to ship in extension bundles. +const API_KEY = 'AIzaSyBtrm0o5ab1c-Ec8ZuLcGt3oJAA5VWt3pY'; + +// labs.google/fx/tools/flow still resolves but redirects here, so in practice a +// signed-in tab is only ever flow.google.com/*. The legacy patterns stay for an +// old pinned tab. Every tab lookup in this file goes through this list. +const flowUrls = [ + 'https://flow.google.com/*', + 'https://labs.google/fx/tools/flow*', + 'https://labs.google/fx/*/tools/flow*', +]; +const FLOW_TAB_URL = 'https://flow.google.com/'; + +let ws = null; +let flowKey = null; +let callbackSecret = null; // Auth secret for HTTP callback, received from server on WS connect +let state = 'off'; // off | idle | running +let manualDisconnect = false; +let metrics = { + tokenCapturedAt: null, + requestCount: 0, // captcha-consuming requests only (gen image/video/upscale) + successCount: 0, + failedCount: 0, + lastError: null, +}; + +// ─── URL → Log Type Classifier ───────────────────────────── + +// Visible log types — only these appear in the request log +const _VISIBLE_TYPES = new Set(['GEN_IMG', 'GEN_VID', 'GEN_VID_REF', 'UPSCALE', 'TRACKING', 'URL_REFRESH']); + +function _classifyApiUrl(url) { + if (url.includes('uploadImage')) return 'UPLOAD'; + if (url.includes('batchGenerateImages')) return 'GEN_IMG'; + if (url.includes('UpsampleVideo')) return 'UPSCALE'; + if (url.includes('ReferenceImages')) return 'GEN_VID_REF'; + if (url.includes('batchAsyncGenerateVideo')) return 'GEN_VID'; + if (url.includes('batchCheckAsync')) return 'POLL'; + if (url.includes('upsampleImage')) return 'UPS_IMG'; + if (url.includes('/media/')) return 'MEDIA'; + if (url.includes('/credits')) return 'CREDITS'; + return 'API'; +} + +// ─── Request Log ──────────────────────────────────────────── + +let requestLog = []; + +function addRequestLog(entry) { + requestLog.unshift(entry); + if (requestLog.length > 100) requestLog.pop(); + broadcastRequestLog(); +} + +function updateRequestLog(id, updates) { + const entry = requestLog.find((e) => e.id === id); + if (entry) Object.assign(entry, updates); + broadcastRequestLog(); +} + +function broadcastRequestLog() { + chrome.runtime.sendMessage({ type: 'REQUEST_LOG_UPDATE', log: requestLog }).catch(() => {}); +} + +// ─── Startup ──────────────────────────────────────────────── + +let initializationPromise = null; + +chrome.runtime.onInstalled.addListener(() => { + void ensureInitialized(); +}); +chrome.runtime.onStartup.addListener(() => { + void ensureInitialized(); +}); +chrome.alarms.onAlarm.addListener(async (alarm) => { + await ensureInitialized(); + if (alarm.name === 'reconnect') connectToAgent(); + if (alarm.name === 'keepAlive') keepAlive(); + if (alarm.name === 'token-refresh') { + // Passive maintenance must never create browser tabs. If the user has no + // Flow tab open, wait for an explicit action or an actual RPC to open one. + await captureTokenFromFlowTab({ createIfMissing: false }); + } +}); + +function ensureInitialized() { + if (!initializationPromise) { + initializationPromise = initialize().catch((error) => { + initializationPromise = null; + console.error('[FlowAgent] Initialization failed', error); + throw error; + }); + } + return initializationPromise; +} + +async function initialize() { + const data = await chrome.storage.local.get(['flowKey', 'metrics', 'callbackSecret']); + if (data.flowKey) flowKey = data.flowKey; + if (data.metrics) Object.assign(metrics, data.metrics); + if (data.callbackSecret) callbackSecret = data.callbackSecret; + connectToAgent(); + chrome.alarms.create('keepAlive', { periodInMinutes: 0.4 }); +} + +// MV3 workers can be suspended and restarted without onStartup firing. +// Rehydrate the persisted Flow key on every worker start. +void ensureInitialized(); + +// ─── Token Capture ────────────────────────────────────────── + +chrome.webRequest.onBeforeSendHeaders.addListener( + (details) => { + if (!details?.requestHeaders?.length) return; + const authHeader = details.requestHeaders.find( + (h) => h.name?.toLowerCase() === 'authorization', + ); + const value = authHeader?.value || ''; + if (!value.startsWith('Bearer ya29.')) return; + + const token = value.replace(/^Bearer\s+/i, '').trim(); + if (!token) return; + + // Always update — even if same token string, refresh the timestamp + flowKey = token; + metrics.tokenCapturedAt = Date.now(); + chrome.storage.local.set({ flowKey, metrics }); + console.log('[FlowAgent] Bearer token captured'); + + // Notify agent + if (ws?.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ type: 'token_captured', flowKey })); + } + }, + { urls: ['https://aisandbox-pa.googleapis.com/*', 'https://labs.google/*'] }, + ['requestHeaders', 'extraHeaders'], +); + +let _openingFlowTab = false; + +async function captureTokenFromFlowTab({ createIfMissing = false } = {}) { + let tabs = await chrome.tabs.query({ url: flowUrls }); + if (!tabs.length) { + if (!createIfMissing) { + console.log('[FlowAgent] No Flow tab found — passive refresh skipped'); + return { skipped: 'NO_FLOW_TAB' }; + } + if (_openingFlowTab) { + console.log('[FlowAgent] Flow tab already opening, skipping'); + return; + } + _openingFlowTab = true; + try { + console.log('[FlowAgent] No Flow tab found — opening one for explicit refresh'); + const opened = await chrome.tabs.create({ url: FLOW_TAB_URL, active: false }); + await sleep(3000); + const target = opened?.id ? await chrome.tabs.get(opened.id).catch(() => null) : null; + if (!target) { + console.log('[FlowAgent] Flow tab not ready yet after open'); + return; + } + await chrome.scripting.executeScript({ + target: { tabId: target.id }, + files: ['content.js'], + }); + console.log('[FlowAgent] Token refresh triggered on newly opened Flow tab'); + } catch (e) { + console.error('[FlowAgent] Token refresh failed after opening tab:', e); + } finally { + _openingFlowTab = false; + } + return; + } + try { + await chrome.scripting.executeScript({ + target: { tabId: tabs[0].id }, + files: ['content.js'], + }); + console.log('[FlowAgent] Token refresh triggered on Flow tab'); + } catch (e) { + console.error('[FlowAgent] Token refresh failed:', e); + } +} + +// ─── WebSocket to Agent ───────────────────────────────────── + +function connectToAgent() { + if (manualDisconnect) return; + if (ws?.readyState === WebSocket.CONNECTING) return; + if (ws?.readyState === WebSocket.OPEN) return; + + try { + ws = new WebSocket(AGENT_WS_URL); + } catch (e) { + console.error('[FlowAgent] WS connect error:', e); + scheduleReconnect(); + return; + } + + ws.onopen = () => { + console.log('[FlowAgent] Connected to agent'); + chrome.alarms.clear('reconnect'); + setState('idle'); + + // Token refresh alarm — 45 min gives buffer before ~60 min expiry + chrome.alarms.create('token-refresh', { periodInMinutes: 45 }); + + // Send current state + resend token if we have one + ws.send(JSON.stringify({ + type: 'extension_ready', + flowKeyPresent: !!flowKey, + extensionVersion: chrome.runtime.getManifest().version, + flowUrlSupported: chrome.runtime.getManifest().host_permissions?.includes('https://flow.google.com/*') === true, + tokenAge: flowKey && metrics.tokenCapturedAt ? Date.now() - metrics.tokenCapturedAt : null, + })); + if (flowKey) { + ws.send(JSON.stringify({ type: 'token_captured', flowKey })); + } + }; + + ws.onmessage = async ({ data }) => { + try { + const msg = JSON.parse(data); + + if (msg.method === 'batch_rpc') { + await handleBatchRpc(msg); + } else if (msg.method === 'api_request') { + await handleApiRequest(msg); + } else if (msg.method === 'trpc_request') { + await handleTrpcRequest(msg); + } else if (msg.method === 'solve_captcha') { + await handleSolveCaptcha(msg); + } else if (msg.method === 'get_status') { + sendToAgent({ + id: msg.id, + result: { + state, + flowKeyPresent: !!flowKey, + manualDisconnect, + tokenAge: metrics.tokenCapturedAt ? Date.now() - metrics.tokenCapturedAt : null, + metrics, + }, + }); + } else if (msg.type === 'callback_secret') { + callbackSecret = msg.secret; + chrome.storage.local.set({ callbackSecret: msg.secret }); + console.log('[FlowAgent] Received callback secret'); + } else if (msg.type === 'pong') { + // keepalive response + } + } catch (e) { + console.error('[FlowAgent] Message error:', e); + } + }; + + ws.onclose = () => { + setState('off'); + chrome.alarms.clear('token-refresh'); + if (!manualDisconnect) scheduleReconnect(); + }; + + ws.onerror = (e) => { + console.error('[FlowAgent] WS error:', e); + metrics.lastError = 'WS_ERROR'; + chrome.storage.local.set({ metrics }); + }; +} + +function scheduleReconnect() { + chrome.alarms.create('reconnect', { delayInMinutes: 0.083 }); // ~5s +} + +function keepAlive() { + if (ws?.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ type: 'ping' })); + } else { + connectToAgent(); + } +} + +function sendToAgent(msg) { + // API responses (with msg.id) go via HTTP — immune to WS disconnect + if (msg.id) { + const headers = { 'Content-Type': 'application/json' }; + if (callbackSecret) { + headers['X-Callback-Secret'] = callbackSecret; + } + fetch('http://127.0.0.1:8100/api/ext/callback', { + method: 'POST', + headers, + body: JSON.stringify(msg), + }).catch(() => { + // HTTP failed — fallback to WS + if (ws?.readyState === WebSocket.OPEN) ws.send(JSON.stringify(msg)); + }); + return; + } + // Non-response messages (ping, status) or no secret yet — use WS + if (ws?.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify(msg)); + } +} + +// ─── reCAPTCHA Solving ────────────────────────────────────── + +async function requestCaptchaFromTab(tabId, requestId, pageAction) { + try { + return await chrome.tabs.sendMessage(tabId, { + type: 'GET_CAPTCHA', + requestId, + pageAction, + }); + } catch (error) { + const msg = error?.message || ''; + const shouldInject = + msg.includes('Receiving end does not exist') || + msg.includes('Could not establish connection'); + if (!shouldInject) throw error; + + // Inject content script and retry + await chrome.scripting.executeScript({ + target: { tabId }, + files: ['content.js'], + }); + await sleep(200); + return await chrome.tabs.sendMessage(tabId, { + type: 'GET_CAPTCHA', + requestId, + pageAction, + }); + } +} + +/** Try to wake a discarded Flow tab so `sendMessage` can reach it. + * Chrome auto-discards backgrounded tabs to save memory; the tab still shows + * up in `chrome.tabs.query` but cross-context calls fail with "No current + * window" / "No tab with id". A reload re-hydrates it. */ +async function reviveTabIfNeeded(tab) { + if (!tab?.discarded) return tab; + try { + await chrome.tabs.reload(tab.id); + await sleep(2500); + return await chrome.tabs.get(tab.id); + } catch { + return null; + } +} + +function captchaFromTab(tabId, requestId, captchaAction) { + return Promise.race([ + requestCaptchaFromTab(tabId, requestId, captchaAction), + new Promise((_, rej) => setTimeout(() => rej(new Error('CAPTCHA_TIMEOUT')), 30000)), + ]); +} + +async function solveCaptcha(requestId, captchaAction) { + let tabs = await chrome.tabs.query({ url: flowUrls }); + + // No Flow tab at all — spawn one and let it settle. Keep the exact tab id: + // a redirected or stale tab must not make us select some older candidate. + if (!tabs.length) { + let opened; + try { + opened = await chrome.tabs.create({ url: FLOW_TAB_URL, active: false }); + await sleep(3000); + } catch (e) { + return { error: e.message || 'NO_FLOW_TAB' }; + } + const target = opened?.id ? await chrome.tabs.get(opened.id).catch(() => null) : null; + if (!target) return { error: 'NO_FLOW_TAB' }; + tabs = [target]; + } + + // Try each Flow tab in turn. A tab that answers "no grecaptcha" is a tab + // sitting on a page that never loaded it — another Flow tab may well be + // fine. Returning on the first one let one stale tab veto every generation. + const errors = []; + for (const candidate of tabs) { + const tab = await reviveTabIfNeeded(candidate); + if (!tab) continue; + try { + const resp = await captchaFromTab(tab.id, requestId, captchaAction); + if (!resp?.token) { + errors.push(resp?.error || 'NO_TOKEN'); + continue; + } + return resp; + } catch (e) { + const msg = e?.message || ''; + errors.push(msg); + // Tab evaporated mid-call (window closed, discarded again, navigated + // away). Move on to the next candidate rather than failing the job. + if ( + msg.includes('No current window') || + msg.includes('No tab with id') || + msg.includes('Receiving end does not exist') + ) { + continue; + } + return { error: msg }; + } + } + + // Every candidate failed — last-ditch, spawn a fresh temporary tab and + // target THAT exact tab. Previously we re-queried all Flow tabs and picked + // fresh[0], which could select the same stale tab again while leaking the + // newly-created one on every retry. + let recoveryTab = null; + try { + recoveryTab = await chrome.tabs.create({ url: FLOW_TAB_URL, active: false }); + await sleep(3000); + const target = await chrome.tabs.get(recoveryTab.id); + if (!target || target.discarded) return { error: 'NO_FLOW_TAB' }; + return await captchaFromTab(target.id, requestId, captchaAction); + } catch (e) { + return { error: e?.message || errors[0] || 'NO_FLOW_TAB' }; + } finally { + // A recovery tab is disposable: there were already Flow tabs available + // for the signed RPC. Do not let CAPTCHA retries accumulate root tabs. + if (recoveryTab?.id) { + try { await chrome.tabs.remove(recoveryTab.id); } catch { /* already gone */ } + } + } +} + +async function handleSolveCaptcha(msg) { + const { id, params } = msg; + const result = await solveCaptcha(id, params?.captchaAction || 'VIDEO_GENERATION'); + + // Standalone captcha solve counts as captcha-consuming + metrics.requestCount++; + if (result?.token) { + metrics.successCount++; + } else { + metrics.failedCount++; + metrics.lastError = result?.error || 'NO_TOKEN'; + } + chrome.storage.local.set({ metrics }); + + sendToAgent({ id, result }); +} + +// ─── Page-context RPC runner (the current path) ───────────── +// +// Flow's frontend signs its calls with cookies and a per-page `at` token, and +// every generate carries a single-use reCAPTCHA. None of that can be replayed +// from the service worker, so the request has to be issued by the Flow page +// itself: mint a fresh captcha through the grecaptcha bridge, then run the +// batchexecute POST in the page's MAIN world, where at / f.sid / bl live. + +const CAPTCHA_SLOT = '__CAPTCHA__'; +const MAX_RPC_TEXT = 32000000; // the project listing alone is past 17 MB + +async function runBatchRpc(cmd) { + const tabs = await chrome.tabs.query({ url: flowUrls }); + let candidate = tabs.find((t) => !t.discarded) || tabs[0]; + if (!candidate) { + // No Flow tab — open one and give the app a moment to boot, otherwise + // WIZ_global_data is not on the page yet and `at` comes back empty. Keep + // the exact created tab id so redirects/stale tabs cannot hijack recovery. + let opened; + try { + opened = await chrome.tabs.create({ url: FLOW_TAB_URL, active: false }); + await sleep(5000); + candidate = opened?.id ? await chrome.tabs.get(opened.id).catch(() => null) : null; + } catch (e) { + return { error: e?.message || 'NO_FLOW_TAB' }; + } + if (!candidate) return { error: 'NO_FLOW_TAB' }; + } + // Chrome discards backgrounded tabs; executeScript throws on a dead one. + const tab = await reviveTabIfNeeded(candidate); + if (!tab) return { error: 'FLOW_TAB_DISCARDED' }; + + let freq = cmd.freq; + if (cmd.captchaAction) { + const solved = await solveCaptcha(cmd.id, cmd.captchaAction); + if (!solved?.token) return { error: `CAPTCHA_FAILED: ${solved?.error || 'no token'}` }; + freq = freq.split(CAPTCHA_SLOT).join(solved.token); + } + + const [injected] = await chrome.scripting.executeScript({ + target: { tabId: tab.id }, + world: 'MAIN', + args: [cmd.rpcid, freq, MAX_RPC_TEXT, cmd.match || null], + func: async (rpcid, freqStr, maxText, match) => { + const wiz = globalThis.WIZ_global_data || {}; + const at = wiz.SNlM0e; + const sid = wiz.FdrFJe; + const bl = wiz.cfb2h; + if (!at) return { error: 'NO_AT_TOKEN' }; + const reqid = Math.floor(Math.random() * 900000) + 100000; + // Match Flow's own WIZ metadata. GEM_PIX_2 (Nano Banana Pro) rejects + // image generation when source-path is missing even though Lite may not. + const sourcePath = location.pathname || '/'; + const hl = (document.documentElement.lang || navigator.language || 'en').split('-')[0]; + const url = + `/_/AiSandboxAngularFrontend/data/batchexecute?rpcids=${encodeURIComponent(rpcid)}` + + `&source-path=${encodeURIComponent(sourcePath)}` + + `&bl=${encodeURIComponent(bl || '')}&f.sid=${encodeURIComponent(sid || '')}` + + `&hl=${encodeURIComponent(hl)}&_reqid=${reqid}&rt=c`; + const resp = await fetch(url, { + method: 'POST', + credentials: 'include', + headers: { + 'content-type': 'application/x-www-form-urlencoded;charset=UTF-8', + 'x-same-domain': '1', + }, + body: new URLSearchParams({ 'f.req': freqStr, at }), + }); + const text = await resp.text(); + // The project listing is tens of megabytes and all we ever want from it + // is one entry. Cutting it down here keeps that payload inside the tab + // instead of pushing it through the bridge on every poll. + if (match) { + const found = text.indexOf(match); // not `at` — that is the CSRF token above + return { + status: resp.status, + matched: found !== -1, + text: found === -1 ? '' : text.slice(found, found + 800), + }; + } + return { status: resp.status, text: text.slice(0, maxText) }; + }, + }); + + return injected?.result || { error: 'NO_INJECTION_RESULT' }; +} + +async function handleBatchRpc(msg) { + const { id, params } = msg; + const { rpcid, freq, captchaAction, match } = params || {}; + if (!rpcid || !freq) { + sendToAgent({ id, status: 400, error: 'INVALID_BATCH_RPC' }); + return; + } + + setState('running'); + const hasCaptcha = !!captchaAction; + if (hasCaptcha) metrics.requestCount++; + // Polls and listing lookups run constantly; only the generates are worth + // a row in the log the popup shows. + const visible = hasCaptcha; + if (visible) { + addRequestLog({ + id, type: `RPC:${rpcid}`, time: new Date().toISOString(), + status: 'processing', error: null, outputUrl: null, url: rpcid, + payloadSummary: freq.slice(0, 200), + }); + } + + try { + const out = await runBatchRpc({ id, rpcid, freq, captchaAction, match }); + if (out.error) { + if (hasCaptcha) { metrics.failedCount++; metrics.lastError = out.error; } + if (visible) updateRequestLog(id, { status: 'failed', error: out.error }); + sendToAgent({ id, status: 502, error: out.error }); + } else { + if (hasCaptcha) { metrics.successCount++; metrics.lastError = null; } + if (visible) { + updateRequestLog(id, { + status: 'success', httpStatus: out.status, + responseSummary: (out.text || '').slice(0, 300), + }); + } + sendToAgent({ id, status: out.status, data: out.text }); + } + } catch (e) { + const err = e?.message || 'BATCH_RPC_FAILED'; + if (hasCaptcha) { metrics.failedCount++; metrics.lastError = err; } + if (visible) updateRequestLog(id, { status: 'failed', error: err }); + sendToAgent({ id, status: 500, error: err }); + } + + chrome.storage.local.set({ metrics }); + setState('idle'); +} + +// ─── API Request Proxy ────────────────────────────────────── + +async function handleTrpcRequest(msg) { + const { id, params } = msg; + const { url, method = 'POST', headers = {}, body, responseMode = 'json' } = params; + + if (!url || !url.startsWith('https://labs.google/')) { + sendToAgent({ id, error: 'INVALID_TRPC_URL' }); + return; + } + + setState('running'); + // TRPC calls don't consume captcha — don't count in metrics + + const logId = id; + const logType = url.includes('createProject') ? 'CREATE_PROJECT' : 'TRPC'; + // TRPC calls are silent — don't show in request log + + const fetchHeaders = { 'Content-Type': 'application/json', ...headers }; + if (flowKey) { + fetchHeaders['authorization'] = `Bearer ${flowKey}`; + } + + try { + const resp = await fetch(url, { + method, + headers: fetchHeaders, + body: body ? JSON.stringify(body) : undefined, + credentials: 'include', + }); + let data; + if (responseMode === 'url') { + // fetch() has already followed the authenticated Flow redirect. Return + // only the final signed URL and cancel the body so large videos are not + // buffered in the extension or copied through the WebSocket bridge. + data = { + url: resp.url, + contentType: resp.headers.get('content-type'), + }; + await resp.body?.cancel(); + } else { + data = await resp.json(); + } + chrome.storage.local.set({ metrics }); + updateRequestLog(logId, { status: 'success' }); + sendToAgent({ id, status: resp.status, data }); + } catch (e) { + console.error('[FlowAgent] tRPC request failed:', e); + chrome.storage.local.set({ metrics }); + updateRequestLog(logId, { status: 'failed', error: e.message || 'TRPC_FETCH_FAILED' }); + sendToAgent({ id, error: e.message || 'TRPC_FETCH_FAILED' }); + } finally { + setState('idle'); + } +} + +// Legacy REST proxy against aisandbox-pa. No current agent sends `api_request`; +// kept only so an extension updated ahead of its agent still serves an older +// one. It needs a `Bearer ya29.…` that Flow stopped minting, so it 401s on any +// post-migration profile — as does sendTelemetry below, which early-returns +// without a flowKey. Nothing here reaches aisandbox-pa any more; when the +// oldest agent in the wild speaks batch_rpc, this and the host permission go. +async function handleApiRequest(msg) { + const { id, params } = msg; + const { url, method, headers, body, captchaAction } = params; + + if (!url) { + sendToAgent({ id, error: 'MISSING_URL' }); + return; + } + + if (!url.startsWith('https://aisandbox-pa.googleapis.com/')) { + sendToAgent({ id, error: 'INVALID_URL' }); + return; + } + + setState('running'); + const hasCaptcha = !!captchaAction; + if (hasCaptcha) metrics.requestCount++; + + const logId = id; + const logType = _classifyApiUrl(url); + if (_VISIBLE_TYPES.has(logType)) { + const payloadSummary = body ? JSON.stringify(body).slice(0, 200) : null; + addRequestLog({ id: logId, type: logType, time: new Date().toISOString(), status: 'processing', error: null, outputUrl: null, url, payloadSummary }); + } + + try { + // Step 1: Solve captcha if needed + let captchaToken = null; + if (captchaAction) { + const captchaResult = await solveCaptcha(id, captchaAction); + captchaToken = captchaResult?.token || null; + if (!captchaToken) { + // Cannot proceed without captcha — API will 403 + const err = captchaResult?.error || 'CAPTCHA_FAILED'; + console.error(`[FlowAgent] Captcha failed for ${captchaAction}: ${err}`); + sendToAgent({ id, status: 403, error: `CAPTCHA_FAILED: ${err}` }); + if (hasCaptcha) { metrics.failedCount++; metrics.lastError = `CAPTCHA_FAILED: ${err}`; } + chrome.storage.local.set({ metrics }); + updateRequestLog(logId, { status: 'failed', error: `CAPTCHA_FAILED: ${err}` }); + setState('idle'); + return; + } + } + + // Step 2: Inject captcha token into body + let finalBody = body; + if (captchaToken && finalBody) { + finalBody = JSON.parse(JSON.stringify(finalBody)); // deep clone + if (finalBody.clientContext?.recaptchaContext) { + finalBody.clientContext.recaptchaContext.token = captchaToken; + } + if (finalBody.requests && Array.isArray(finalBody.requests)) { + for (const req of finalBody.requests) { + if (req.clientContext?.recaptchaContext) { + req.clientContext.recaptchaContext.token = captchaToken; + } + } + } + } + + // Step 3: Use flowKey for auth + const activeFlowKey = flowKey; + if (!activeFlowKey) { + sendToAgent({ id, status: 503, error: 'NO_FLOW_KEY' }); + if (hasCaptcha) { metrics.failedCount++; metrics.lastError = 'NO_FLOW_KEY'; } + chrome.storage.local.set({ metrics }); + updateRequestLog(logId, { status: 'failed', error: 'NO_FLOW_KEY' }); + setState('idle'); + return; + } + + const fetchHeaders = { ...(headers || {}) }; + fetchHeaders['authorization'] = `Bearer ${activeFlowKey}`; + + // Step 4: Make the API call from browser context + const response = await fetch(url, { + method: method || 'POST', + headers: fetchHeaders, + credentials: 'include', + body: method === 'GET' ? undefined : JSON.stringify(finalBody), + }); + + let responseData; + const responseText = await response.text(); + try { + responseData = JSON.parse(responseText); + } catch { + responseData = responseText; + } + + sendToAgent({ + id, + status: response.status, + data: responseData, + }); + + const responseSummary = responseText ? responseText.slice(0, 300) : null; + if (response.ok) { + if (hasCaptcha) { metrics.successCount++; metrics.lastError = null; } + updateRequestLog(logId, { status: 'success', httpStatus: response.status, responseSummary }); + } else { + if (hasCaptcha) { metrics.failedCount++; metrics.lastError = `API_${response.status}`; } + updateRequestLog(logId, { status: 'failed', error: `API_${response.status}`, httpStatus: response.status, responseSummary }); + } + } catch (e) { + sendToAgent({ + id, + status: 500, + error: e.message || 'API_REQUEST_FAILED', + }); + if (hasCaptcha) { metrics.failedCount++; metrics.lastError = e.message; } + updateRequestLog(logId, { status: 'failed', error: e.message || 'API_REQUEST_FAILED' }); + } + + chrome.storage.local.set({ metrics }); + setState('idle'); +} + +// ─── State & Popup ────────────────────────────────────────── + +function setState(newState) { + state = newState; + const badges = { idle: '●', running: '▶', off: '○' }; + const colors = { idle: '#22c55e', running: '#f59e0b', off: '#6b7280' }; + chrome.action.setBadgeText({ text: badges[state] || '' }); + chrome.action.setBadgeBackgroundColor({ color: colors[state] || '#000' }); + broadcastStatus(); +} + +function broadcastStatus() { + chrome.runtime.sendMessage({ type: 'STATUS_PUSH' }).catch(() => {}); +} + +chrome.runtime.onMessage.addListener((msg, _, reply) => { + if (msg.type === 'STATUS') { + reply({ + connected: ws?.readyState === WebSocket.OPEN, + agentConnected: ws?.readyState === WebSocket.OPEN, + flowKeyPresent: !!flowKey, + manualDisconnect, + tokenAge: metrics.tokenCapturedAt ? Date.now() - metrics.tokenCapturedAt : null, + metrics: { + requestCount: metrics.requestCount, + successCount: metrics.successCount, + failedCount: metrics.failedCount, + lastError: metrics.lastError, + }, + state, + }); + } + + if (msg.type === 'DISCONNECT') { + manualDisconnect = true; + if (ws) ws.close(); + reply({ ok: true }); + return true; + } + + if (msg.type === 'RECONNECT') { + manualDisconnect = false; + connectToAgent(); + reply({ ok: true }); + return true; + } + + if (msg.type === 'REQUEST_LOG') { + reply({ log: requestLog }); + return true; + } + + if (msg.type === 'OPEN_FLOW_TAB') { + chrome.tabs.query({ url: flowUrls }).then((tabs) => { + if (tabs.length) { + chrome.tabs.update(tabs[0].id, { active: true }); + reply({ ok: true, tabId: tabs[0].id }); + } else { + chrome.tabs.create({ url: FLOW_TAB_URL }) + .then((tab) => reply({ ok: true, tabId: tab.id })) + .catch((e) => reply({ error: e.message })); + } + }).catch((e) => reply({ error: e.message })); + return true; + } + + if (msg.type === 'REFRESH_TOKEN') { + captureTokenFromFlowTab({ createIfMissing: true }) + .then(() => reply({ ok: true })) + .catch((e) => reply({ error: e.message })); + return true; + } + + if (msg.type === 'TEST_CAPTCHA') { + solveCaptcha(`test-${Date.now()}`, msg.pageAction || 'IMAGE_GENERATION') + .then((r) => reply(r)) + .catch((e) => reply({ error: e.message })); + return true; + } + + if (msg.type === 'TRPC_MEDIA_URLS') { + handleTrpcMediaUrls(msg.trpcUrl, msg.body); + reply({ ok: true }); + return true; + } + + return true; +}); + +// ─── TRPC Media URL Extractor ────────────────────────────── + +function handleTrpcMediaUrls(trpcUrl, bodyText) { + try { + // Extract all fresh GCS signed URLs + const urlRegex = /https:\/\/storage\.googleapis\.com\/ai-sandbox-videofx\/(?:image|video)\/[0-9a-f-]{36}\?[^"'\s]+/g; + const matches = bodyText.match(urlRegex) || []; + if (!matches.length) return; + + // Deduplicate and parse + const urlMap = {}; + for (const rawUrl of matches) { + // Unescape JSON-escaped URLs + const url = rawUrl.replace(/\\u0026/g, '&').replace(/\\/g, ''); + const mediaMatch = url.match(/\/(image|video)\/([0-9a-f-]{36})\?/); + if (mediaMatch) { + const [, mediaType, mediaId] = mediaMatch; + // Keep last occurrence (freshest) + urlMap[mediaId] = { mediaType, url, mediaId }; + } + } + + const entries = Object.values(urlMap); + if (!entries.length) return; + + console.log(`[FlowAgent] Captured ${entries.length} fresh media URLs from TRPC`); + // URL refresh is silent — don't show in request log + + // Forward to agent for DB update + if (ws?.readyState === WebSocket.OPEN) { + ws.send(JSON.stringify({ + type: 'media_urls_refresh', + urls: entries, + })); + } + } catch (e) { + console.error('[FlowAgent] Failed to extract TRPC media URLs:', e); + } +} + +function sleep(ms) { + return new Promise((r) => setTimeout(r, ms)); +} + +// ─── Human-like Telemetry ────────────────────────────────── +// Periodically send tracking events to Google's analytics endpoints +// to mimic normal browser behavior. + +const _UA = navigator.userAgent; +let _telemetrySessionId = `;${Date.now()}`; + +function _rand(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } + +function _buildBatchLogPayload() { + const events = []; + const types = ['FLOW_IMAGE_LATENCY', 'FLOW_VIDEO_LATENCY']; + const count = _rand(1, 3); + for (let i = 0; i < count; i++) { + events.push({ + event: types[_rand(0, types.length - 1)], + eventProperties: [ + { key: 'CURRENT_TIME_MS', doubleValue: Date.now() }, + { key: 'DURATION_MS', doubleValue: _rand(150, 800) }, + { key: 'USER_AGENT', stringValue: _UA }, + { key: 'IS_DESKTOP', booleanValue: true }, + ], + eventMetadata: { sessionId: _telemetrySessionId }, + eventTime: new Date().toISOString(), + }); + } + return { appEvents: events }; +} + +function _buildFrontendEventsPayload() { + const eventTypes = [ + 'FLOW_IMAGE_LATENCY', 'FLOW_VIDEO_LATENCY', 'GRID_SCROLL_DEPTH', + 'FLOW_PROJECT_OPEN', 'FLOW_SCENE_VIEW', + ]; + const count = _rand(1, 4); + const events = []; + for (let i = 0; i < count; i++) { + const et = eventTypes[_rand(0, eventTypes.length - 1)]; + const params = { + USER_AGENT: { '@type': 'type.googleapis.com/google.protobuf.StringValue', value: _UA }, + IS_DESKTOP: { '@type': 'type.googleapis.com/google.protobuf.StringValue', value: 'true' }, + }; + if (et.includes('LATENCY')) { + params.CURRENT_TIME_MS = { '@type': 'type.googleapis.com/google.protobuf.StringValue', value: String(Date.now()) }; + params.DURATION_MS = { '@type': 'type.googleapis.com/google.protobuf.StringValue', value: String(_rand(100, 600)) }; + } + if (et === 'GRID_SCROLL_DEPTH') { + params.MEDIA_GENERATION_PAYGATE_TIER = { '@type': 'type.googleapis.com/google.protobuf.StringValue', value: 'PAYGATE_TIER_TWO' }; + } + events.push({ + eventType: et, + metadata: { + sessionId: _telemetrySessionId, + createTime: new Date().toISOString(), + additionalParams: params, + }, + }); + } + return { events }; +} + +async function sendTelemetry() { + // Legacy-path camouflage: these endpoints want the bearer Flow no longer + // mints, so on the batch path there is no flowKey and this is a no-op. + if (!flowKey || state === 'off') return; + + const headers = { + 'Content-Type': 'text/plain;charset=UTF-8', + 'authorization': `Bearer ${flowKey}`, + }; + + // Telemetry is silent — don't show in request log + try { + if (Math.random() < 0.5) { + await fetch(`https://aisandbox-pa.googleapis.com/v1:batchLog`, { + method: 'POST', headers, credentials: 'include', + body: JSON.stringify(_buildBatchLogPayload()), + }); + } else { + await fetch(`https://aisandbox-pa.googleapis.com/v1/flow:batchLogFrontendEvents`, { + method: 'POST', headers, credentials: 'include', + body: JSON.stringify(_buildFrontendEventsPayload()), + }); + } + } catch {} +} + +// Send telemetry at random intervals (45-120s) to look organic +function scheduleTelemetry() { + const delay = _rand(45, 120) * 1000; + setTimeout(async () => { + await sendTelemetry(); + scheduleTelemetry(); // reschedule with new random interval + }, delay); +} + +// Refresh session ID every ~30min like a real user +setInterval(() => { _telemetrySessionId = `;${Date.now()}`; }, _rand(25, 35) * 60 * 1000); + +scheduleTelemetry(); + +console.log('[FlowAgent] Extension loaded'); diff --git a/scratch/parse_dump.py b/scratch/parse_dump.py new file mode 100644 index 000000000..f929bd258 --- /dev/null +++ b/scratch/parse_dump.py @@ -0,0 +1,13 @@ +import re +import json + +s = open('scratch/project_media_dump.txt', encoding='utf-8').read() +uuids = set(re.findall(r'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}', s)) +print(f"Total UUIDs in dump: {len(uuids)}") +for u in sorted(uuids): + print("UUID:", u) + +urls = re.findall(r'https?://[^\s\"\'\\]+', s) +print(f"Total URLs in dump: {len(urls)}") +for u in urls[:10]: + print("URL:", u) diff --git a/scratch/parse_envelopes.py b/scratch/parse_envelopes.py new file mode 100644 index 000000000..e417d0d1a --- /dev/null +++ b/scratch/parse_envelopes.py @@ -0,0 +1,17 @@ +import sys +sys.path.insert(0, '.') +import json +from agent.services import flow_batch as fb + +s = open('scratch/project_media_dump.txt', encoding='utf-8').read() +results = fb.parse_envelope(s) +print(f"Total results envelopes: {len(results)}") +for r in results: + print("rpcid:", r.rpcid, "ok:", r.ok) + if r.ok and r.data: + # inspect r.data + if isinstance(r.data, list) and len(r.data) > 0: + print("data len:", len(r.data)) + # print top-level fields + for i, item in enumerate(r.data[:5]): + print(f" [{i}]: type={type(item)} preview={str(item)[:120]}") diff --git a/scratch/parse_media.py b/scratch/parse_media.py new file mode 100644 index 000000000..378abfd1c --- /dev/null +++ b/scratch/parse_media.py @@ -0,0 +1,17 @@ +import urllib.request +import json +import asyncio + +req = urllib.request.Request('http://127.0.0.1:8100/api/flow/debug-project-media?project_id=594758cc-11f5-4f92-8b3c-1213686591f4') +with urllib.request.urlopen(req) as resp: + data = json.loads(resp.read().decode()) + +# Check recent image media in DB for this video +import sqlite3 +conn = sqlite3.connect('flow_agent.db') +cursor = conn.cursor() +cursor.execute('SELECT id, display_order, horizontal_image_media_id, horizontal_video_media_id FROM scene WHERE video_id = ? ORDER BY display_order', ('945ad6d4-5d79-4790-80db-1bff16ed7255',)) +scenes = cursor.fetchall() +print("Scenes in DB:") +for s in scenes: + print(f"Scene #{s[1]} (id: {s[0]}): img={s[2]} vid={s[3]}") diff --git a/scratch/parse_netlog.py b/scratch/parse_netlog.py new file mode 100644 index 000000000..fbaf45a43 --- /dev/null +++ b/scratch/parse_netlog.py @@ -0,0 +1,26 @@ +import json + +with open("scratch/captured_netlog.jsonl", "r", encoding="utf-8") as f: + lines = f.readlines() + +print(f"Total netlog entries: {len(lines)}") +for i, line in enumerate(lines): + if not line.strip(): continue + try: + data = json.loads(line) + url = data.get("url", "").split("?")[0].split("/")[-1] + status = data.get("statusCode") + ts = data.get("ts") + body = data.get("body", "") + # search for prompt in body + print(f"[{i}] {ts} | {url} | Status: {status} | Body len: {len(body)}") + if "f.req" in body or "ProseMirror" in body or "StreamChat" in line or "Tạo" in body or "knife" in body: + # try to decode json body + try: + bjson = json.loads(body) + freq = bjson.get("f.req", [""])[0] + print(f" f.req snippet: {freq[:180]}...") + except: + print(f" body snippet: {body[:180]}...") + except Exception as e: + print(f"[{i}] error: {e}") diff --git a/scratch/patch_scene_0.py b/scratch/patch_scene_0.py new file mode 100644 index 000000000..15f08861a --- /dev/null +++ b/scratch/patch_scene_0.py @@ -0,0 +1,38 @@ +import urllib.request +import json + +sid = "02f6d29e-be27-491a-b1ad-baa944964890" + +update_data = { + "character_names": ["Le Quoc Tien", "Do Minh Kha"], + "prompt": ( + "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. " + "Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. " + "In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. " + "Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph." + ), + "video_prompt": ( + "0-3s: Low-angle tracking shot through heat-warped plastic debris and scorched concrete in subterranean B3 basement at Me Tri as Do Minh Kha walks slowly past motionless casualties, boots coated in red dust. " + "3-6s: Camera tilts down as Do Minh Kha crouches over Le Quoc Tien, who clutches a bleeding abdominal wound beside a torn empty water pouch. Do Minh Kha speaks in a hoarse parched voice \"Lê Quốc Tiến, mày vốn không nên sống lâu đến thế.\" " + "6-8s: Close-up of Do Minh Kha raising a gleaming tactical knife reflecting the deep crimson sunlight bleeding through a fractured ceiling slab, then plunging the blade downward into pitch black darkness. " + "Audio: Stifled gasping breath, slow crunching footsteps on gravel, hoarse menacing dialogue, sharp metallic blade unsheath, deep sub-bass cinematic hit. Negative: subtitles, watermark, text overlay." + ), + "narrator_text": "Tầng hầm B3 Mễ Trì, năm 2031. Dưới ánh Hồng Nhật thiêu đốt, lưỡi dao của Đỗ Minh Kha đã kết thúc ba năm sinh tồn của tôi." +} + +req = urllib.request.Request( + f"http://127.0.0.1:8100/api/scenes/{sid}", + data=json.dumps(update_data).encode("utf-8"), + headers={"Content-Type": "application/json"}, + method="PATCH" +) + +with urllib.request.urlopen(req) as resp: + res = json.loads(resp.read().decode("utf-8")) + print("Patched Scene #0:") + print("ID:", res["id"]) + print("Character names:", res["character_names"]) + print("Prompt:", res["prompt"][:80], "...") + print("Video prompt:", res["video_prompt"][:80], "...") + print("Narrator text:", res["narrator_text"]) diff --git a/scratch/pause_requests.py b/scratch/pause_requests.py new file mode 100644 index 000000000..5e55b021c --- /dev/null +++ b/scratch/pause_requests.py @@ -0,0 +1,6 @@ +import sqlite3 + +conn = sqlite3.connect('flow_agent.db') +conn.execute("UPDATE request SET status = 'FAILED' WHERE status IN ('PENDING', 'PROCESSING')") +conn.commit() +print("Cancelled all active requests.") diff --git a/scratch/poll_media.py b/scratch/poll_media.py new file mode 100644 index 000000000..a40032ada --- /dev/null +++ b/scratch/poll_media.py @@ -0,0 +1,39 @@ +import sys +sys.path.insert(0, ".") +import urllib.request +import json +import time + +print("Polling project media for new assets...") +for i in range(12): + time.sleep(5) + try: + with urllib.request.urlopen("http://127.0.0.1:8100/api/ext/test-project-media") as resp: + data = json.loads(resp.read().decode("utf-8")) + raw_len = data.get("data_len", 0) + + with open("scratch/project_media_dump.txt", "r", encoding="utf-8") as f: + raw = f.read() + + from agent.services import flow_batch as fb + payload = fb.first_payload(raw, fb.RPC_PROJECT_MEDIA) + items = payload[1] if len(payload) > 1 and isinstance(payload[1], list) else [] + + # find items created in the last 200 seconds + recent = [] + now_approx = 1790172189 # current epoch order + for it in items: + details = it[3] if len(it) > 3 else None + ts = details[1][0] if details and details[1] else 0 + title = details[0] if details else "" + media_id = details[4] if details and len(details) > 4 else None + if ts > 1790169824: # after the workshop man + recent.append((ts, title, media_id)) + + print(f"[{i*5}s] Total items: {len(items)}, Recent new items: {len(recent)}") + if recent: + for r in recent: + print(f" >>> NEW ASSET: TS={r[0]}, Title='{r[1]}', MediaID={r[2]}") + break + except Exception as e: + print(f"[{i*5}s] Error: {e}") diff --git a/scratch/print_c31.py b/scratch/print_c31.py new file mode 100644 index 000000000..1c5002b2a --- /dev/null +++ b/scratch/print_c31.py @@ -0,0 +1,9 @@ +import json + +lines = open('scratch/captured_netlog.jsonl', encoding='utf-8').read().splitlines() +c31 = json.loads(lines[31]) +body_dict = json.loads(c31['body']) +inner_str = body_dict['f.req'][0] +parsed = json.loads(inner_str) +inner_payload = json.loads(parsed[1]) +print(json.dumps(inner_payload, indent=2)) diff --git a/scratch/project_media_dump.txt b/scratch/project_media_dump.txt new file mode 100644 index 000000000..cd27a6d3b --- /dev/null +++ b/scratch/project_media_dump.txt @@ -0,0 +1,8 @@ +)]}' + +163908 +[["wrb.fr","Zzl0ze","[[[\"0a42ed66-8a7f-4b28-abfb-4586a39f4b52\",\"c9d32e61-b53a-48d0-b8ef-4a8c6d073aa2\",[\"03_APPROVED\",null,null,[1784529350,72144000],null,[1784529355,462807000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"0c211a47-5991-43e8-8142-a390e0daa4a8\",null,[\"03_PROPS_TECH\",null,null,[1784529293,146542000],null,[1784529297,460541000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"1139ff90-563d-4843-92ac-3a35fbecae86\",null,[\"09_ARCHIVE\",null,null,[1784529463,78960000],null,[1784529475,558401000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"1845d995-1a46-48ed-8c43-c91c9cc28ef2\",\"ccd7cdd3-bb43-4ba5-8cbc-0c7b75381109\",[\"99_REJECTED\",null,null,[1784529240,97665000],null,[1784529245,759339000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"1fdfac50-bbad-4622-b43b-0ab2d15d37ff\",\"d57bfef1-e345-42be-8be5-244c58752988\",[\"02_SELECT\",null,null,[1784529418,744451000],null,[1784529428,627263000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"4b8dcbae-1bbe-484f-9459-708233502798\",\"95d2e37f-c851-4122-8825-e4b4d7d71e8e\",[\"01_VARIANTS\",null,null,[1784529272,754511000],null,[1784529277,491788000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"5500f781-66f4-44f1-9ce5-47f0a90c04d0\",\"d57bfef1-e345-42be-8be5-244c58752988\",[\"03_APPROVED\",null,null,[1784529420,112190000],null,[1784529432,949574000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"881fa2e3-3396-4c33-ab58-941204d5a869\",\"c9d32e61-b53a-48d0-b8ef-4a8c6d073aa2\",[\"00_FRAMES\",null,null,[1784529320,39941000],null,[1784529323,799385000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"909ad3fe-a510-4d46-9a35-641144cc276e\",\"95d2e37f-c851-4122-8825-e4b4d7d71e8e\",[\"99_REJECTED\",null,null,[1784529282,196777000],null,[1784529287,686348000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"95d2e37f-c851-4122-8825-e4b4d7d71e8e\",null,[\"02_LOCATIONS\",null,null,[1784529252,245818000],null,[1784529256,242132000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"a55a169d-3f7e-40d7-b9be-50a3abe4182a\",null,[\"04_STYLE_LOCK\",null,null,[1784529301,392131000],null,[1784529305,947850000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"adf37d8f-38a0-4198-b1e4-26efbf46bcf0\",null,[\"00_CANON\",null,null,[1784529050,206104000],null,[1784529171,248849000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"b6e65c65-d1f0-46e0-899e-91a442806fc9\",\"ccd7cdd3-bb43-4ba5-8cbc-0c7b75381109\",[\"02_VOICE_MASTERS\",null,null,[1784529231,661607000],null,[1784529237,672168000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"b9f3fb92-e22b-4a39-b126-f0ca914eca14\",\"d57bfef1-e345-42be-8be5-244c58752988\",[\"00_FRAMES\",null,null,[1784529405,117346000],null,[1784529411,260369000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"bcb1aa9b-b47a-4ff3-9c09-92369ca02355\",\"c9d32e61-b53a-48d0-b8ef-4a8c6d073aa2\",[\"01_DRAFT\",null,null,[1784529328,990912000],null,[1784529333,198253000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"be966234-d647-4699-bc33-a0e13177c153\",\"ccd7cdd3-bb43-4ba5-8cbc-0c7b75381109\",[\"01_VARIANTS\",null,null,[1784529217,532896000],null,[1784529228,620221000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"c3e324f9-e875-4284-a2cc-357b31c22d31\",\"c9d32e61-b53a-48d0-b8ef-4a8c6d073aa2\",[\"02_SELECT\",null,null,[1784529339,230340000],null,[1784529344,560943000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"c9d32e61-b53a-48d0-b8ef-4a8c6d073aa2\",null,[\"05_TRAILER\",null,null,[1784529311,526839000],null,[1784529316,590851000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"ccd7cdd3-bb43-4ba5-8cbc-0c7b75381109\",null,[\"01_CHARACTERS\",null,null,[1784529188,643203000],null,[1784529196,685227000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"cf1a4e1e-0b55-4944-89b6-f019381d74d6\",\"c9d32e61-b53a-48d0-b8ef-4a8c6d073aa2\",[\"04_SCENE\",null,null,[1784529360,286453000],null,[1784529376,577028000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"d4b9f61e-164e-41bc-ab33-73533207a219\",\"d57bfef1-e345-42be-8be5-244c58752988\",[\"04_SCENE\",null,null,[1784529438,238663000],null,[1784529444,283791000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"d57bfef1-e345-42be-8be5-244c58752988\",null,[\"06_EP01\",null,null,[1784529394,651678000],null,[1784529400,751158000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"eae3b1f7-5964-4041-a509-c289180d05eb\",\"d57bfef1-e345-42be-8be5-244c58752988\",[\"01_DRAFT\",null,null,[1784529416,61894000],null,[1784529423,404539000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"ebfe3ef1-604d-4ba0-8f17-c4f18b0e3dc7\",\"ccd7cdd3-bb43-4ba5-8cbc-0c7b75381109\",[\"00_FACE_MASTERS\",null,null,[1784529204,622353000],null,[1784529212,77567000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"f07fddb4-950f-4b09-9b45-c534be4b10c8\",null,[\"08_POST_REFERENCES\",null,null,[1784529461,149740000],null,[1784529469,73331000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"f859aae4-e394-4924-bb6d-12b9eaa93663\",null,[\"07_EPISODES\",null,null,[1784529450,853966000],null,[1784529457,442839000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"fc0eb04a-aa2c-4556-8852-45f034b9f232\",\"95d2e37f-c851-4122-8825-e4b4d7d71e8e\",[\"00_MASTERS\",null,null,[1784529262,28805000],null,[1784529268,688191000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"]],[[\"18462c7e-40cf-4217-964d-980db21dac35\",null,null,[\"Train gliding over Hanoi traffic\",[1790099234,21793000],null,null,\"a029279b-cc59-465f-98d5-0fa8b78187ba\",\"DDD5C8EB-ECF1-4A0F-BB97-8EF2A1FDF396\",[1790099256,112919000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"23070ed9-c3a8-4070-a111-318ef1ed4f3a\",null,null,[\"image.jpg\",[1790174596,878212000],null,null,\"c436b109-dd00-498d-806d-b6bddc9a3bbf\",null,[1790174602,244051000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"2c817534-e7d9-4711-ba06-8da52e020080\",null,null,[\"Camera pans cracked asphalt sun\",[1790099773,817655000],true,null,\"c8939cac-021c-4000-a355-ec23628e5ea0\",\"649876A2-0594-4ACD-80A2-35CC61E50C6B\",[1790103884,48657000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"3197d46b-0a13-463c-8aaf-9dd5f1416e6e\",null,null,[\"Hands slamming against glass doors\",[1790099933,333177000],null,null,\"c86e9fac-57bb-4fc3-a85f-d751ecefdcc8\",\"2CAEE570-CE42-462F-A46F-D5731297D999\",[1790099941,95849000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"337d7d27-bc09-4ca1-9f11-1b9253d15cbb\",null,null,[\"Overgrown bridge over river\",[1790104423,640950000],null,null,\"3d1052dd-2332-48f6-81c3-73adb6d4ff09\",\"c3a99ab1-0f8d-4d1b-ba0c-8f354bd9fc13\",[1790104447,312420000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"3ab07549-ccbb-410a-a97d-08b8a4627f84\",null,null,[\"Vietnamese engineer with abdomen…\",[1784546411,930438000],null,true,\"684e27a9-a16c-480e-95ce-8cb540798659\",\"a5f6c049-2f1d-40d4-b16f-3d96f24b1fe8\",[1784546442,385675000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"3bd39545-26f0-4165-883c-528e119207fc\",null,null,[\"Woman standing in ruins\",[1790105718,172947000],true,null,\"03bb0401-4b95-485b-906c-f5f8b0195547\",null,[1790105731,783423000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"3ddd6fbc-8834-4868-a7fa-5e1dc68d04d7\",null,null,[\"Sun shining over cracked asphalt\",[1790099782,85545000],null,null,\"d9a829c4-cd2d-491c-8773-7bee1eeb0aba\",\"0CCA1636-A823-4656-9E94-3234A72452ED\",[1790099861,528437000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"420931e8-d444-4a59-8ba8-a745cbeead17\",\"ebfe3ef1-604d-4ba0-8f17-c4f18b0e3dc7\",null,[\"HNTL_CHR_TIEN_2028_FACE_MASTER_v001_APPROVED\",[1784545966,119130000],null,null,\"cd20c077-1f3e-4432-9bbc-6d19af7a5a16\",null,[1784545986,933851000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"431da3f0-96a9-4cc7-8384-937287b72c6e\",null,null,[\"Commander standing facing camera\",[1790098978,830949000],null,null,\"78e46231-e6cf-43fb-99bc-a4cb96196e24\",\"389D74E5-56CC-4283-B7BE-E20A2DCA261B\",[1790099002,862715000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"482b99b0-f4ee-40f9-a31b-c4f76ddd2af7\",null,null,[\"Man standing over exhausted man\",[1790174045,451631000],null,null,\"25704835-1c43-4c10-a718-9f77ab2e9cd6\",\"E1EBBB69-0118-4F27-ADD1-F71D29C1C559\",[1790174068,910540000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"4b6e1f6c-ad29-4c79-ac8b-840e0ff929c4\",null,null,[\"Bustling open-air market with la…\",[1790098607,247715000],true,null,\"dc6cb5cb-1515-4607-8d63-35b7d4c79df9\",\"33C47DC5-F835-4F3A-94CA-0BA140F9EF51\",[1790103911,506021000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"4fb9e862-d995-4f49-9eb6-d00b1f2ee767\",null,null,[\"Vietnamese engineer with abdomen…\",[1784546541,545693000],null,null,\"9aea7396-dc22-4b69-947f-7d1dcc5c1e3c\",null,[1784546548,573950000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"ad4b3ad9-a282-478e-957e-6fcc47a2b5e4\"],[\"50ce51e4-768e-4eb0-abce-1df3f94acae6\",null,null,[\"Wooden market stall with scale\",[1790098627,137046000],true,null,\"deb54d26-dbdb-4351-99f5-04400fef123c\",\"6D44D38D-F81B-4CC1-9ED4-5CC9C5A58E57\",[1790103919,140646000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"52274337-3f1e-499b-b404-022ff18196d3\",null,null,[\"Metallic structures rising from …\",[1790099028,206353000],null,null,\"9daace9a-a99c-4a5a-bce5-e9aaedcb1980\",\"836A8983-2CBB-4570-B679-C6E43A2EBE73\",[1790099051,404977000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"6ddbd597-0a88-4e3c-b31a-7d20443c0dab\",null,null,[\"Engineer standing facing camera\",[1790098968,283242000],null,null,\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\",\"D690B37C-62E0-4E9D-A68E-D0B96D91BCDB\",[1790098990,362027000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,null,[\"Woman standing in ruins\",[1790105368,68953000],true,null,\"2e1227e3-7cb3-4213-8574-503bc667c75e\",\"dc42af28-a7ef-440d-81ab-ca9d701c8e7f\",[1790105725,873145000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",null,null,[\"Woman sitting near cooling fan\",[1790106045,1406000],true,null,\"567984bd-c3ff-46de-ad25-353be60e6188\",\"1a289c4e-464f-4aee-9114-f9d9cd93c6ff\",[1790106200,882061000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"82ddef0b-fced-4a18-a039-240a66c111d2\",null,null,[\"Woman wearing coat in sun\",[1790105368,716850000],true,null,\"78266bba-b106-47e7-80e3-c152822e1ca9\",\"3df1fee0-6b2c-447a-b83a-5a4fded17d43\",[1790105435,349518000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"87cfaa04-a192-405e-aa3b-137fa3d20ccb\",null,null,[\"Journalist standing for referenc…\",[1790098988,593315000],null,null,\"65993027-0037-4f25-9fb7-7bd4d301ee7b\",\"1A445D6E-8380-4BBC-AE96-FA2C39BB7DBB\",[1790099012,265973000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"8a636ea0-c501-40c7-b8a3-74ebcb14ba74\",null,null,[\"tạo video intro\",[1789492421,692307000],true,null,\"1b832287-df4c-429a-b3b2-46d8f818d284\",\"e2e9ea1a-0fed-4c90-9ab3-1cd282ba672b\",[1790103876,68469000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"9139a337-e6df-474c-90f1-e4e48dca69a9\",null,null,[\"Man holding knife over seated ma…\",[1790099323,542997000],null,null,\"a6010398-57c9-4e27-a89f-31ed0ddf2d1a\",\"B3178C0F-6E72-49C4-9912-0EC1B6A0AB7A\",[1790099346,133587000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"99a9b9fa-2091-4429-b192-476892fad1e8\",null,null,[\"Mountain landscape in northern V…\",[1790104961,385705000],null,null,\"1fa5e13c-e74f-45da-adc7-311e9e27c140\",\"c48a378f-6f86-4a32-8bb4-6c0c236fa92f\",[1790104983,162792000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"9c487a71-fc76-4e0e-bdc3-98eee2bc25da\",null,null,[\"Man jolting awake in bed\",[1790099223,430583000],null,null,\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\",\"A08F6255-349C-4E2F-9AC3-1577284BBC2F\",[1790099244,889973000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"9e8ede1b-4f8f-4354-aecb-a7759421bf13\",null,null,[\"Person shining flashlight on hatch\",[1790099253,589865000],null,null,\"30b5f32e-3918-4b68-acf8-7f7b0afafd0d\",\"55BC5782-6E26-45E4-AC92-44BBAEFAA7D2\",[1790099279,51856000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"a5fbb9e9-b0d0-48f4-89ea-277444ec27c4\",null,null,[\"Deserted street with abandoned s…\",[1790104424,188616000],null,null,\"76a03ec4-6340-4e25-9e8a-5009942893b9\",\"821131e5-6a0a-498b-9215-628a6f727127\",[1790104446,58271000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"ad778284-c548-4428-9386-24491b893682\",null,null,[\"Cat peering through rainy window\",[1790098625,39575000],true,null,\"310d92fb-dd8e-4e33-b061-4750fcbeeeaa\",\"7fe69dc0-a68f-4e64-bad1-877baf14334e\",[1790103909,73177000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"b00ceb65-a125-49c4-91ff-49f0af1e2356\",null,null,[\"HNTL_CHR_TIEN_2028_FACE_MASTER_v001_APPROVED\",[1784545698,613155000],null,true,\"ac5f92cb-b55e-4db9-b800-0dd1dbe759ef\",\"74c99d95-363a-4479-b0b2-35b92c0e44b6\",[1784545880,528045000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"b58780b6-8218-433c-bdca-6fb13f9e9cd6\",null,null,[\"Vietnamese engineer character re…\",[1784545738,781156000],true,null,\"acf87cab-c8f4-46c4-b305-5d57a5be19fa\",\"c1a2084f-d5ca-42f0-8070-1031049fb44f\",[1784545790,489539000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"b84f96ab-d2b2-414b-b4ed-912a9e3e2859\",null,null,[\"Concrete warehouse with metal hatch\",[1790099018,2158000],null,null,\"5a919b50-566c-4cfb-97b6-4e481650dc0a\",\"D4B2CCDB-02A8-4678-9613-0A507F273D92\",[1790099039,863469000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"bba71aa9-a24c-43bc-a42e-e0f140a426e3\",null,null,[\"Cat wearing apron walking upright\",[1790098596,970493000],true,null,\"c6bef467-362b-4d7d-86bd-7734cf16379f\",\"64A9C999-320D-43D0-A3FB-DB954A6CEADA\",[1790103914,136184000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"bd7eacf9-d385-4561-bf0b-62e3e8a253dc\",null,null,[\"Commuter traffic on urban avenue\",[1790098998,48960000],null,null,\"e12021b9-1f91-4a65-a9e2-f1ddbffbf42d\",\"DD98F4BD-09EF-4A49-8064-8F684F842216\",[1790099021,546266000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"be5c73e8-269a-4fdf-a1a5-d2265179a8be\",null,null,[\"Vietnamese engineer with abdomen…\",[1784546459,807750000],true,null,\"732c7e1a-7267-462f-8f58-1bf43694428e\",\"8814c820-2648-41d8-8971-f12d6ef4992c\",[1784565183,289884000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"c3b02b33-da87-410c-88ce-c3896028c8a6\",null,null,[\"Green metro train and commuters\",[1790099923,331786000],null,null,\"1d72b8c7-7c9f-477c-bbf2-0f3a24cdc9a1\",\"44483D79-04FD-487B-AEAF-CB7269FA6C44\",[1790099930,87223000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"c7fee095-6829-4801-94c8-3eb9bcaf060f\",null,null,[\"Le Quoc Tien.png\",[1785255350,725479000],null,null,\"4630aeab-cd27-4457-96b6-24045de2504e\",null,[1785255359,823385000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"11a89444-ca45-45a2-a890-feab388ba4ae\"],[\"d0e3e32c-df9c-4641-bce4-dd9ca73a4f9b\",null,null,[\"Industrial outpost on mountain r…\",[1790104962,53428000],null,null,\"ca9eac0a-7816-4104-af03-8f98001f2915\",\"ae1cd228-257c-4806-8c6e-865d878e4140\",[1790104983,167759000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"d19f6811-455b-4838-bdc2-b908aeb7bd36\",null,null,[\"Man standing in workshop\",[1790169824,340307000],null,null,\"666bc47c-1fa1-4167-83cc-3088840b3146\",\"119296d0-39e6-4e6c-96a9-b713a2e3d50d\",[1790169845,203797000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"d5719db7-7c9a-42eb-a9dc-a13028690a3b\",null,null,[\"People standing near metallic ruins\",[1790099263,649996000],null,null,\"2c14fdf3-bb10-4603-bb76-ca483c23db87\",\"AABC7A39-2CBE-469B-B9DF-A97AAC85E9EC\",[1790099288,639522000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"d6e35829-f7a1-43aa-b12c-7172309cf84c\",null,null,[\"Golden koi fish swimming\",[1790098617,113716000],true,null,\"a661bfc5-873f-4f71-862b-b76958cdda91\",\"47A1B759-7F96-4085-ADC3-5E648AD69AAE\",[1790103915,929616000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"d7c54686-02ce-4344-ac22-2888ccf9c76e\",null,null,[\"HNTL_CHR_TIEN_2028_FACE_MASTER_v001_APPROVED\",[1784546032,956328000],null,null,\"6aa915c7-1123-4e12-b75f-6d5e6d40d0fe\",null,[1784546039,629998000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"f4d9c731-41f2-4b51-9dd2-edd20c1dc7f1\"],[\"d9102dd3-bb7b-4a6b-8135-90e9e3455f30\",null,null,[\"Heatwave apocalypse in Hanoi\",[1790104505,133221000],null,null,\"b5b2415a-b104-4e53-bf22-1bd940d2186b\",\"7310a95b-660a-402a-b3cd-58af71069ea2\",[1790104527,311732000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"da045c4a-d318-46ce-9d05-2b902878dc90\",null,null,[\"Abandoned vehicles at Hanoi inte…\",[1790104504,482062000],null,null,\"27cf3d47-aae9-4035-9324-32bb65509721\",\"ec0e0a52-b4dd-4102-a4e8-b468c857b069\",[1790104524,768009000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"e03db69f-0402-4e01-8d10-20a700e1d064\",null,null,[\"Cat sitting on wooden stool\",[1790098624,387715000],true,null,\"ffd129ac-2cb2-4c5d-a059-e37be9782118\",\"a72a8dac-99eb-4daa-8359-511e4239b0c8\",[1790103906,77570000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"e2367807-01e9-4bf4-a522-1f8549998e20\",null,null,[\"Modern shopping mall under red s…\",[1790099008,171508000],null,null,\"c38a6066-9d26-44da-8a14-8c7e260f7f8d\",\"2035D763-8320-4737-8083-E9AA31E42FF4\",[1790099030,317790000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"e516fce6-a049-4a7f-b414-5db3660b52fc\",null,null,[\"Man slumps against concrete pillar\",[1790174038,296806000],null,null,\"bdcbe55a-ee7b-497d-a414-25d22d04c096\",\"85FCAB29-DD00-4032-8AD2-15F7B36A484D\",[1790174057,857105000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"f69d66c7-9cd6-459d-a883-753390a8cb25\",null,null,[\"Woman standing in post-apocalypt…\",[1790106044,585720000],true,null,\"b6900ed9-ed42-4b6c-80c1-74db6fc6132d\",\"b2676050-a010-4f75-be4c-ee62a94baae3\",[1790106099,407867000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"],[\"fb28016d-5ed3-47b0-9a38-6f98eaa8b439\",null,null,[\"Crowd escaping heat trap\",[1790099243,507045000],null,null,\"ce812adb-5fef-42cb-9a38-97b2e1bac60b\",\"E1B67B78-288F-4B11-8704-AFA083A24D40\",[1790099265,47155000]],\"594758cc-11f5-4f92-8b3c-1213686591f4\"]],[[\"03bb0401-4b95-485b-906c-f5f8b0195547\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"3bd39545-26f0-4165-883c-528e119207fc\",\"CAE\",null,[[1790105718,172947000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUaXm49Rdt0OZndhpTMPGANW864qQpmzS_pSUrYkrucaLudt-rN0ShHnS-M-QNIG-4Qz4sgOdUl3Xdmhii8QZ_8qjXlSyq-vwEbLdl7Y0ZoqpSGEwyjBPn2jf0upCg2b7KcOsuH3E-DIyv0v7YJnXWi3LulKmDegyPxS4tfzsg\",[null,null,[[\"Large breasts, subtly revealed.\",null,[[[\"ngực to, lộ một cách tinh tế\"]]]]],[[[null,2,\"6e6be6ca-d2c5-477c-b025-8ceac859aa54\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUaXm49Rdt0OZndhpTMPGANW864qQpmzS_pSUrYkrucaLudt-rN0ShHnS-M-QNIG-4Qz4sgOdUl3Xdmhii8QZ_8qjXlSyq-vwEbLdl7Y0ZoqpSGEwyjBPn2jf0upCg2b7KcOsuH3E-DIyv0v7YJnXWi3LulKmDegyPxS4tfzsg\"],[[null,1786455158,null,null,null,null,null,\"Large breasts, subtly revealed.\",25,\"\",null,\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUaXm49Rdt0OZndhpTMPGANW864qQpmzS_pSUrYkrucaLudt-rN0ShHnS-M-QNIG-4Qz4sgOdUl3Xdmhii8QZ_8qjXlSyq-vwEbLdl7Y0ZoqpSGEwyjBPn2jf0upCg2b7KcOsuH3E-DIyv0v7YJnXWi3LulKmDegyPxS4tfzsg\",3],null,[1376,768]]],[\"07f97f41-209d-458b-ad17-55606514eb6a\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",\"CAI\",null,[[1790105455,367014000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUY-2d81GEQpaR39zIjXEN0Qf5BJONrNE_elkcl7eS4oOY_qd5T8WxpFbwNOowomiZHprFvFxce8dHYOacQn-XE5qj-m_zL5h9gTeuAAw7zTU5Y80OEuwDM16UCPB9eQcCwu1GlRll_QEtosdSd_HSZ6k6iis1w7jUVzKrdFGQ\",[null,null,[[\"sexier\",null,[[[\"sexy hơn\"]]]]],[[[null,2,\"e0ca950b-db30-416a-b2d2-fe98a9bf1344\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUY-2d81GEQpaR39zIjXEN0Qf5BJONrNE_elkcl7eS4oOY_qd5T8WxpFbwNOowomiZHprFvFxce8dHYOacQn-XE5qj-m_zL5h9gTeuAAw7zTU5Y80OEuwDM16UCPB9eQcCwu1GlRll_QEtosdSd_HSZ6k6iis1w7jUVzKrdFGQ\",null,null,205489],[[null,1851291174,null,null,null,null,null,\"sexier\",25,\"\",null,\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUY-2d81GEQpaR39zIjXEN0Qf5BJONrNE_elkcl7eS4oOY_qd5T8WxpFbwNOowomiZHprFvFxce8dHYOacQn-XE5qj-m_zL5h9gTeuAAw7zTU5Y80OEuwDM16UCPB9eQcCwu1GlRll_QEtosdSd_HSZ6k6iis1w7jUVzKrdFGQ\",3],null,[1376,768]]],[\"1b832287-df4c-429a-b3b2-46d8f818d284\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"8a636ea0-c501-40c7-b8a3-74ebcb14ba74\",\"CAE\",null,[[1789492421,692307000],\"tạo video intro\",null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZE4T_NKjDNPXQs7RqIQ9p_8tFB4mf1_97DodcibQfzOWTgqgWPIlVw2rkG_10HP7LmxYCNI_NZH3JZb3CkZ4pNpySGBZG1oZRB7CRdGIj3u0Xcib07jGNzZFpdqLKCUBYNv_PXHIy-SFW56O3R3r790U3XfsvC1dgFuCSE\",[null,[[\"abra_t2v_10s\",1,null,null,1,1]],[[null,null,[[[\"tạo video intro\"]]]]],null,3],null,[3],1,\"https://lh3.googleusercontent.com/asb/AB-nOUZE4T_NKjDNPXQs7RqIQ9p_8tFB4mf1_97DodcibQfzOWTgqgWPIlVw2rkG_10HP7LmxYCNI_NZH3JZb3CkZ4pNpySGBZG1oZRB7CRdGIj3u0Xcib07jGNzZFpdqLKCUBYNv_PXHIy-SFW56O3R3r790U3XfsvC1dgFuCSE\",null,null,4851883],null,[[null,362440,null,null,null,null,null,\"create intro video\",\"https://lh3.googleusercontent.com/asb/AB-nOUZE4T_NKjDNPXQs7RqIQ9p_8tFB4mf1_97DodcibQfzOWTgqgWPIlVw2rkG_10HP7LmxYCNI_NZH3JZb3CkZ4pNpySGBZG1oZRB7CRdGIj3u0Xcib07jGNzZFpdqLKCUBYNv_PXHIy-SFW56O3R3r790U3XfsvC1dgFuCSE\",null,null,null,\"abra_t2v_10s\",\"\",null,false,1],[null,null,[10]],[\"1b832287-df4c-429a-b3b2-46d8f818d284\"]]],[\"1d72b8c7-7c9f-477c-bbf2-0f3a24cdc9a1\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"c3b02b33-da87-410c-88ce-c3896028c8a6\",\"CAE\",null,[[1790099923,331786000],\"0-3s: Elevated wide cinematic shot following the green metro train gliding on concrete viaducts. 3-6s: Camera cranes down toward dense streams of morning motorbike commuters on Nguyen Trai Avenue. 6-8s: Golden sunlight reflects brilliantly off modern glass skyscrapers under a blue sky. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\",null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZqIAmzmzMR_fmc351j70xfMg5cfzXWRb4LV5TceF0Cn_GHe5N0D5N6095ca207VHFVchQ3VclIyqZffsLTSsU3Ll2XmhUxXMllVI9XIj6QesNqFTh_iimSNkOx_WES37vQLZeEvaL7OnmtAsHl3m6AeRJmI1DZhFwjeXiuvQ\",[null,[[\"veo_3_1_i2v_lite\",2,[1],null,2,1],[[null,1,\"a029279b-cc59-465f-98d5-0fa8b78187ba\",[null,0.0038759689922481244,1,0.9961240310077519]]]],[[null,null,[[[\"0-3s: Elevated wide cinematic shot following the green metro train gliding on concrete viaducts. 3-6s: Camera cranes down toward dense streams of morning motorbike commuters on Nguyen Trai Avenue. 6-8s: Golden sunlight reflects brilliantly off modern glass skyscrapers under a blue sky. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\"]]]]],null,1],null,[3],1,\"https://lh3.googleusercontent.com/asb/AB-nOUZqIAmzmzMR_fmc351j70xfMg5cfzXWRb4LV5TceF0Cn_GHe5N0D5N6095ca207VHFVchQ3VclIyqZffsLTSsU3Ll2XmhUxXMllVI9XIj6QesNqFTh_iimSNkOx_WES37vQLZeEvaL7OnmtAsHl3m6AeRJmI1DZhFwjeXiuvQ\",null,null,7171738],null,[[null,916049,null,null,null,null,null,\"\\u003croot\\u003e\\n \\u003ccontext\\u003e\\n \\u003c/context\\u003e\\n \\u003cinstruction\\u003e\\n \\u003cprompt\\u003e0-3s: Elevated wide cinematic shot following the green metro train gliding on concrete viaducts. 3-6s: Camera cranes down toward dense streams of morning motorbike commuters on Nguyen Trai Avenue. 6-8s: Golden sunlight reflects brilliantly off modern glass skyscrapers under a blue sky. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\u003c/prompt\\u003e\\n \\u003c/instruction\\u003e\\n\\u003c/root\\u003e\",\"https://lh3.googleusercontent.com/asb/AB-nOUZqIAmzmzMR_fmc351j70xfMg5cfzXWRb4LV5TceF0Cn_GHe5N0D5N6095ca207VHFVchQ3VclIyqZffsLTSsU3Ll2XmhUxXMllVI9XIj6QesNqFTh_iimSNkOx_WES37vQLZeEvaL7OnmtAsHl3m6AeRJmI1DZhFwjeXiuvQ\",null,null,null,\"veo_3_1_i2v_lite\",\"\",null,false,2],[null,null,[8]],[\"1d72b8c7-7c9f-477c-bbf2-0f3a24cdc9a1\"]]],[\"1fa5e13c-e74f-45da-adc7-311e9e27c140\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"99a9b9fa-2091-4429-b192-476892fad1e8\",\"CAE\",null,[[1790104961,385705000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUaXPOuTcr9v1Xh6abZRqn2Ql8xcTpW82xihiklrDHB8VhvQETdxL8CzVnM9FdQQqzonyyRegb8I8y7157a2asZfRJcj4tQHIcvoreX4HDwKESDAs8CRggLZawu_RjK81UwnVa6ySOYqcwXcmjMIqp1Pb1e-F1zRn35qU3s_\",[null,null,[[\"Grounded cinematic realism, a scenic mountain landscape in northern Vietnam near the border. Towering limestone karsts rise sharply from a parched, dusty valley under a harsh, scorching 2028 sun. Visible heat haze shimmers across the rugged terrain. Authentic northern Vietnamese vegetation, parched and withered. Near-future techno-thriller atmosphere, muted high-contrast color palette, subtle film grain, natural harsh lighting. No fantasy elements.\",null,[[[\"Grounded cinematic realism, a scenic mountain landscape in northern Vietnam near the border. Towering limestone karsts rise sharply from a parched, dusty valley under a harsh, scorching 2028 sun. Visible heat haze shimmers across the rugged terrain. Authentic northern Vietnamese vegetation, parched and withered. Near-future techno-thriller atmosphere, muted high-contrast color palette, subtle film grain, natural harsh lighting. No fantasy elements.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUaXPOuTcr9v1Xh6abZRqn2Ql8xcTpW82xihiklrDHB8VhvQETdxL8CzVnM9FdQQqzonyyRegb8I8y7157a2asZfRJcj4tQHIcvoreX4HDwKESDAs8CRggLZawu_RjK81UwnVa6ySOYqcwXcmjMIqp1Pb1e-F1zRn35qU3s_\",null,null,334094],[[null,567356,null,null,null,null,null,\"Grounded cinematic realism, a scenic mountain landscape in northern Vietnam near the border. Towering limestone karsts rise sharply from a parched, dusty valley under a harsh, scorching 2028 sun. Visible heat haze shimmers across the rugged terrain. Authentic northern Vietnamese vegetation, parched and withered. Near-future techno-thriller atmosphere, muted high-contrast color palette, subtle film grain, natural harsh lighting. No fantasy elements.\",25,\"\",null,\"99a9b9fa-2091-4429-b192-476892fad1e8\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUaXPOuTcr9v1Xh6abZRqn2Ql8xcTpW82xihiklrDHB8VhvQETdxL8CzVnM9FdQQqzonyyRegb8I8y7157a2asZfRJcj4tQHIcvoreX4HDwKESDAs8CRggLZawu_RjK81UwnVa6ySOYqcwXcmjMIqp1Pb1e-F1zRn35qU3s_\",3],null,[1376,768]]],[\"25704835-1c43-4c10-a718-9f77ab2e9cd6\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"482b99b0-f4ee-40f9-a31b-c4f76ddd2af7\",\"CAE\",null,[[1790174045,451631000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbv96PVxcN2PbifMQLbnfBljuWf4Xiu5nDiPGArpO0tyJYXHdrObt1q-0gOdtpRBQDoTJoVFo676vQBLUKK7WbuzryMkfcJSs9xB7ZWWKW8qfp2Nxu4OrbxkHjMCKlHYF_0t5UqhdHWoG3gINiTcdb13Wsssk-KF_FjORBFaQ\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\"]]]]],[[[null,1,\"78e46231-e6cf-43fb-99bc-a4cb96196e24\"],[null,1,\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbv96PVxcN2PbifMQLbnfBljuWf4Xiu5nDiPGArpO0tyJYXHdrObt1q-0gOdtpRBQDoTJoVFo676vQBLUKK7WbuzryMkfcJSs9xB7ZWWKW8qfp2Nxu4OrbxkHjMCKlHYF_0t5UqhdHWoG3gINiTcdb13Wsssk-KF_FjORBFaQ\",null,null,194645],[[null,785346768,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\",25,\"\",null,\"482b99b0-f4ee-40f9-a31b-c4f76ddd2af7\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbv96PVxcN2PbifMQLbnfBljuWf4Xiu5nDiPGArpO0tyJYXHdrObt1q-0gOdtpRBQDoTJoVFo676vQBLUKK7WbuzryMkfcJSs9xB7ZWWKW8qfp2Nxu4OrbxkHjMCKlHYF_0t5UqhdHWoG3gINiTcdb13Wsssk-KF_FjORBFaQ\",3],null,[1376,768]]],[\"279b944e-5348-4ecc-91d4-f356b9271132\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",\"CAQ\",null,[[1790105556,47573000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZvnfLi4e_wIQIorBBWTJ68UhPPAGCGyMM1bGCslA4p0p3FPmZaErkcCJYOWZAU45AtW9O6ltyL0rvw2djSHFrWD5qQSNo0YvIoExryJLJri_WXrIastNeDraPmM1lNKPSF3KgOHu71rkSRSh_Dczg-c1R657r9-mQNa93KkQ\",[null,null,[[\"deep cut-out top, revealing cleavage\",null,[[[\"áo khoét sâu, lộ ngực\"]]]]],[[[null,2,\"cea6d7a9-29a2-4b36-aa89-60358b4998b5\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZvnfLi4e_wIQIorBBWTJ68UhPPAGCGyMM1bGCslA4p0p3FPmZaErkcCJYOWZAU45AtW9O6ltyL0rvw2djSHFrWD5qQSNo0YvIoExryJLJri_WXrIastNeDraPmM1lNKPSF3KgOHu71rkSRSh_Dczg-c1R657r9-mQNa93KkQ\",null,null,181343],[[null,2021215439,null,null,null,null,null,\"deep cut-out top, revealing cleavage\",25,\"\",null,\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUZvnfLi4e_wIQIorBBWTJ68UhPPAGCGyMM1bGCslA4p0p3FPmZaErkcCJYOWZAU45AtW9O6ltyL0rvw2djSHFrWD5qQSNo0YvIoExryJLJri_WXrIastNeDraPmM1lNKPSF3KgOHu71rkSRSh_Dczg-c1R657r9-mQNa93KkQ\",3],null,[1376,768]]],[\"27cf3d47-aae9-4035-9324-32bb65509721\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"da045c4a-d318-46ce-9d05-2b902878dc90\",\"CAE\",null,[[1790104504,482062000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUaFSHfD2PqGyT1oHU6O0EbyvRHBQu_z7dP3bo91wcegBn8L2viTM_ntW_NoGAq0eebQ8yYP2V-H_P4AsXf_55A1NCdBuJPm9nEi6JyjvG_OGCPVk4McB5eeTavReqR7FdSnH6SaY61Zueutr1LWVRHArV8DgqyHVX_3ZRkEMQ\",[null,null,[[\"A post-apocalyptic Hanoi intersection under a blistering, golden-hour sun that feels oppressive. The air is thick with dust and heat haze. Abandoned 2028 industrial equipment and vehicles sit on parched, sun-baked earth where a road once was. Authentic Vietnamese infrastructure, weathered and worn by extreme temperatures. Cinematic realism, high dynamic range, natural harsh lighting, restrained motion.\",null,[[[\"A post-apocalyptic Hanoi intersection under a blistering, golden-hour sun that feels oppressive. The air is thick with dust and heat haze. Abandoned 2028 industrial equipment and vehicles sit on parched, sun-baked earth where a road once was. Authentic Vietnamese infrastructure, weathered and worn by extreme temperatures. Cinematic realism, high dynamic range, natural harsh lighting, restrained motion.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUaFSHfD2PqGyT1oHU6O0EbyvRHBQu_z7dP3bo91wcegBn8L2viTM_ntW_NoGAq0eebQ8yYP2V-H_P4AsXf_55A1NCdBuJPm9nEi6JyjvG_OGCPVk4McB5eeTavReqR7FdSnH6SaY61Zueutr1LWVRHArV8DgqyHVX_3ZRkEMQ\",null,null,263504],[[null,92604,null,null,null,null,null,\"A post-apocalyptic Hanoi intersection under a blistering, golden-hour sun that feels oppressive. The air is thick with dust and heat haze. Abandoned 2028 industrial equipment and vehicles sit on parched, sun-baked earth where a road once was. Authentic Vietnamese infrastructure, weathered and worn by extreme temperatures. Cinematic realism, high dynamic range, natural harsh lighting, restrained motion.\",25,\"\",null,\"da045c4a-d318-46ce-9d05-2b902878dc90\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUaFSHfD2PqGyT1oHU6O0EbyvRHBQu_z7dP3bo91wcegBn8L2viTM_ntW_NoGAq0eebQ8yYP2V-H_P4AsXf_55A1NCdBuJPm9nEi6JyjvG_OGCPVk4McB5eeTavReqR7FdSnH6SaY61Zueutr1LWVRHArV8DgqyHVX_3ZRkEMQ\",3],null,[1376,768]]],[\"2c14fdf3-bb10-4603-bb76-ca483c23db87\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"d5719db7-7c9a-42eb-a9dc-a13028690a3b\",\"CAE\",null,[[1790099263,649996000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYqNeb67_wZna9RODkkM_u9IGAIMApuPePBoUySVzv1CL88DZu91GdGX6ncOx5U93Kjx5ZunD20cJgcr6M6YUnE2PhN6IAYuvVSdNQKQccEtHXu2lFcFkLeJJR2svbQWzb4RiihDKCpJQ_gPZ-1ZJISs6lIw2Xvu7Ei7rufVA\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Epic cinematic wide shot of Dried West Lake Colossus in Hanoi under a dark apocalyptic red sun. Cracked black mud lakebed exposes colossal ancient dark metallic ribbed structures resembling giant dragon bones protruding from the earth. Tran Thanh Thuy and Do Minh Kha stand on the distant embankment silhouetted against the colossal metallic ruins and crimson haze. Masterpiece cinematic photography, 16:9 ultra-wide, atmospheric scale.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Epic cinematic wide shot of Dried West Lake Colossus in Hanoi under a dark apocalyptic red sun. Cracked black mud lakebed exposes colossal ancient dark metallic ribbed structures resembling giant dragon bones protruding from the earth. Tran Thanh Thuy and Do Minh Kha stand on the distant embankment silhouetted against the colossal metallic ruins and crimson haze. Masterpiece cinematic photography, 16:9 ultra-wide, atmospheric scale.\"]]]]],[[[null,1,\"65993027-0037-4f25-9fb7-7bd4d301ee7b\"],[null,1,\"78e46231-e6cf-43fb-99bc-a4cb96196e24\"],[null,1,\"9daace9a-a99c-4a5a-bce5-e9aaedcb1980\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUYqNeb67_wZna9RODkkM_u9IGAIMApuPePBoUySVzv1CL88DZu91GdGX6ncOx5U93Kjx5ZunD20cJgcr6M6YUnE2PhN6IAYuvVSdNQKQccEtHXu2lFcFkLeJJR2svbQWzb4RiihDKCpJQ_gPZ-1ZJISs6lIw2Xvu7Ei7rufVA\",null,null,176367],[[null,434962038,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Epic cinematic wide shot of Dried West Lake Colossus in Hanoi under a dark apocalyptic red sun. Cracked black mud lakebed exposes colossal ancient dark metallic ribbed structures resembling giant dragon bones protruding from the earth. Tran Thanh Thuy and Do Minh Kha stand on the distant embankment silhouetted against the colossal metallic ruins and crimson haze. Masterpiece cinematic photography, 16:9 ultra-wide, atmospheric scale.\",25,\"\",null,\"d5719db7-7c9a-42eb-a9dc-a13028690a3b\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUYqNeb67_wZna9RODkkM_u9IGAIMApuPePBoUySVzv1CL88DZu91GdGX6ncOx5U93Kjx5ZunD20cJgcr6M6YUnE2PhN6IAYuvVSdNQKQccEtHXu2lFcFkLeJJR2svbQWzb4RiihDKCpJQ_gPZ-1ZJISs6lIw2Xvu7Ei7rufVA\",3],null,[1376,768]]],[\"2e1227e3-7cb3-4213-8574-503bc667c75e\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",\"CAg\",null,[[1790105692,921386000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbmtaLvJBYFzG_Nu8SGXyCkpETTdaEe-GEQdQcMp6ZwhV0aup7aSHYh_yQZgOAFFIeivnJODySrIpprwMd1_VwH8racXWFZI7_sHEgex2j0TlCMr6upaH5hmazd5AjtL_JTn2dAR4NTD8WmRxiiwg31GI2Px3pPZQ1BoHnpyw\",[null,null,[[\"Large breasts, subtly revealed.\",null,[[[\"ngực to, lộ một cách tinh tế\"]]]]],[[[null,2,\"6e6be6ca-d2c5-477c-b025-8ceac859aa54\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbmtaLvJBYFzG_Nu8SGXyCkpETTdaEe-GEQdQcMp6ZwhV0aup7aSHYh_yQZgOAFFIeivnJODySrIpprwMd1_VwH8racXWFZI7_sHEgex2j0TlCMr6upaH5hmazd5AjtL_JTn2dAR4NTD8WmRxiiwg31GI2Px3pPZQ1BoHnpyw\",null,null,180851],[[null,1786455158,null,null,null,null,null,\"Large breasts, subtly revealed.\",25,\"\",null,\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbmtaLvJBYFzG_Nu8SGXyCkpETTdaEe-GEQdQcMp6ZwhV0aup7aSHYh_yQZgOAFFIeivnJODySrIpprwMd1_VwH8racXWFZI7_sHEgex2j0TlCMr6upaH5hmazd5AjtL_JTn2dAR4NTD8WmRxiiwg31GI2Px3pPZQ1BoHnpyw\",3],null,[1376,768]]],[\"30b5f32e-3918-4b68-acf8-7f7b0afafd0d\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"9e8ede1b-4f8f-4354-aecb-a7759421bf13\",\"CAE\",null,[[1790099253,589865000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUalNn_NTUPRfEuX9bDo48haCw-YN8O0Sswn60OUCB8dMrwu1yeFAx3Cnj7659Olp76dD9_IrOClicqzqKt7N0wH4Zz1tGyQYc9I9Uu7EQy4bZpcwkPEXYU3fQ3-u6CW8eVS5Ix8h_J2Zq697efFTosxZWK0d-aBd1q415_TYQ\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Atmospheric cinematic shot inside Ngoc Truc Warehouse. Le Quoc Tien shines a flashlight onto a heavy dark metal hatch embedded in the concrete floor. The circular sun emblem with twelve rays on the hatch glows with an ominous deep red bioluminescent light. Dense cold vapor rising from the metallic seams. 35mm cinematic photograph, moody volumetric shadows.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Atmospheric cinematic shot inside Ngoc Truc Warehouse. Le Quoc Tien shines a flashlight onto a heavy dark metal hatch embedded in the concrete floor. The circular sun emblem with twelve rays on the hatch glows with an ominous deep red bioluminescent light. Dense cold vapor rising from the metallic seams. 35mm cinematic photograph, moody volumetric shadows.\"]]]]],[[[null,1,\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\"],[null,1,\"5a919b50-566c-4cfb-97b6-4e481650dc0a\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUalNn_NTUPRfEuX9bDo48haCw-YN8O0Sswn60OUCB8dMrwu1yeFAx3Cnj7659Olp76dD9_IrOClicqzqKt7N0wH4Zz1tGyQYc9I9Uu7EQy4bZpcwkPEXYU3fQ3-u6CW8eVS5Ix8h_J2Zq697efFTosxZWK0d-aBd1q415_TYQ\",null,null,222634],[[null,91251415,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Atmospheric cinematic shot inside Ngoc Truc Warehouse. Le Quoc Tien shines a flashlight onto a heavy dark metal hatch embedded in the concrete floor. The circular sun emblem with twelve rays on the hatch glows with an ominous deep red bioluminescent light. Dense cold vapor rising from the metallic seams. 35mm cinematic photograph, moody volumetric shadows.\",25,\"\",null,\"9e8ede1b-4f8f-4354-aecb-a7759421bf13\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUalNn_NTUPRfEuX9bDo48haCw-YN8O0Sswn60OUCB8dMrwu1yeFAx3Cnj7659Olp76dD9_IrOClicqzqKt7N0wH4Zz1tGyQYc9I9Uu7EQy4bZpcwkPEXYU3fQ3-u6CW8eVS5Ix8h_J2Zq697efFTosxZWK0d-aBd1q415_TYQ\",3],null,[1376,768]]],[\"310d92fb-dd8e-4e33-b061-4750fcbeeeaa\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"ad778284-c548-4428-9386-24491b893682\",\"CAE\",null,[[1790098625,39575000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUa_gg6Ycay8_6RD99svCFCHJYSmlGmV8rQw6rG5cSWSwG7uND9QTQa1Ehcv6ZyyJTetHv_LnKZyDs_NcAa1OoH-AuPdDUnRcXBtHFNiBESXr2Kq-n1shgnzI2s11MABmqWSQmKnrTqIyG_3EvOJvhMRAFhWn0kDrLllaK0rdA\",[null,null,[[\"Close-up of a cute, fluffy cat peering through a rainy window overlooking a busy Hanoi street at dusk. Grounded cinematic realism, natural skin and fur texture, physically believable rain droplets on glass. Near-future techno-thriller mood, muted color palette, high dynamic range.\",null,[[[\"Close-up of a cute, fluffy cat peering through a rainy window overlooking a busy Hanoi street at dusk. Grounded cinematic realism, natural skin and fur texture, physically believable rain droplets on glass. Near-future techno-thriller mood, muted color palette, high dynamic range.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUa_gg6Ycay8_6RD99svCFCHJYSmlGmV8rQw6rG5cSWSwG7uND9QTQa1Ehcv6ZyyJTetHv_LnKZyDs_NcAa1OoH-AuPdDUnRcXBtHFNiBESXr2Kq-n1shgnzI2s11MABmqWSQmKnrTqIyG_3EvOJvhMRAFhWn0kDrLllaK0rdA\",null,null,296927],[[null,132288,null,null,null,null,null,\"Close-up of a cute, fluffy cat peering through a rainy window overlooking a busy Hanoi street at dusk. Grounded cinematic realism, natural skin and fur texture, physically believable rain droplets on glass. Near-future techno-thriller mood, muted color palette, high dynamic range.\",25,\"\",null,\"ad778284-c548-4428-9386-24491b893682\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUa_gg6Ycay8_6RD99svCFCHJYSmlGmV8rQw6rG5cSWSwG7uND9QTQa1Ehcv6ZyyJTetHv_LnKZyDs_NcAa1OoH-AuPdDUnRcXBtHFNiBESXr2Kq-n1shgnzI2s11MABmqWSQmKnrTqIyG_3EvOJvhMRAFhWn0kDrLllaK0rdA\",3],null,[1376,768]]],[\"3d1052dd-2332-48f6-81c3-73adb6d4ff09\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"337d7d27-bc09-4ca1-9f11-1b9253d15cbb\",\"CAE\",null,[[1790104423,640950000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUY6KFmaKl70oB4q2qP1ELQeDAA8KXk9MyYhaeYv76CDntBP943rdON5zdngOz1at2IiBnKsjqI7820q-FrpHiUnR5-Ub9vrGSqaQMYxLtCYvPgV-0tpDcgftURMYtur9WCj3PDKwtSd3pASvjZk6Ta3QiPOcSLaJKKq1d5JPQ\",[null,null,[[\"Grounded cinematic realism, post-apocalyptic Hanoi in 2028. An overgrown, crumbling Long Bien Bridge spans the Red River under a heavy, ash-colored sky. Distant skeletal skyscrapers of the city are shrouded in thick mist. The scene is quiet, devoid of life, featuring authentic Vietnamese architecture and infrastructure. Muted color palette, subtle film grain, physically believable heat haze. No generic cyberpunk neon or glowing holograms.\",null,[[[\"Grounded cinematic realism, post-apocalyptic Hanoi in 2028. An overgrown, crumbling Long Bien Bridge spans the Red River under a heavy, ash-colored sky. Distant skeletal skyscrapers of the city are shrouded in thick mist. The scene is quiet, devoid of life, featuring authentic Vietnamese architecture and infrastructure. Muted color palette, subtle film grain, physically believable heat haze. No generic cyberpunk neon or glowing holograms.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUY6KFmaKl70oB4q2qP1ELQeDAA8KXk9MyYhaeYv76CDntBP943rdON5zdngOz1at2IiBnKsjqI7820q-FrpHiUnR5-Ub9vrGSqaQMYxLtCYvPgV-0tpDcgftURMYtur9WCj3PDKwtSd3pASvjZk6Ta3QiPOcSLaJKKq1d5JPQ\",null,null,210059],[[null,14483,null,null,null,null,null,\"Grounded cinematic realism, post-apocalyptic Hanoi in 2028. An overgrown, crumbling Long Bien Bridge spans the Red River under a heavy, ash-colored sky. Distant skeletal skyscrapers of the city are shrouded in thick mist. The scene is quiet, devoid of life, featuring authentic Vietnamese architecture and infrastructure. Muted color palette, subtle film grain, physically believable heat haze. No generic cyberpunk neon or glowing holograms.\",25,\"\",null,\"337d7d27-bc09-4ca1-9f11-1b9253d15cbb\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUY6KFmaKl70oB4q2qP1ELQeDAA8KXk9MyYhaeYv76CDntBP943rdON5zdngOz1at2IiBnKsjqI7820q-FrpHiUnR5-Ub9vrGSqaQMYxLtCYvPgV-0tpDcgftURMYtur9WCj3PDKwtSd3pASvjZk6Ta3QiPOcSLaJKKq1d5JPQ\",3],null,[1376,768]]],[\"41627dd9-5c3f-427f-845c-d83fc277b5e9\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",\"CAU\",null,[[1790173506,107885000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYFcUMTsOE6AhppE7lm8Km-427PJN-lzcsRm9dXuzxq_Oz2csumv9AW2j7tWm26WKmuyj0EcwC1p66xonLxbGvi_eMfuNxdJ3MGkOzXrVF98hzfJgvKPgbio2koOurKIkqXyyX13neV96slX51nSH_SEU_b9bWQ4Q8T2vS2uQ\",[null,null,[[\"A dramatic cinematic shot of a young man in subterranean B3 basement parking at Me Tri under extreme heat, 35mm RAW photograph\",null,[[[\"A dramatic cinematic shot of a young man in subterranean B3 basement parking at Me Tri under extreme heat, 35mm RAW photograph\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUYFcUMTsOE6AhppE7lm8Km-427PJN-lzcsRm9dXuzxq_Oz2csumv9AW2j7tWm26WKmuyj0EcwC1p66xonLxbGvi_eMfuNxdJ3MGkOzXrVF98hzfJgvKPgbio2koOurKIkqXyyX13neV96slX51nSH_SEU_b9bWQ4Q8T2vS2uQ\",null,null,135878],[[null,981155251,null,null,null,null,null,\"A dramatic cinematic shot of a young man in subterranean B3 basement parking at Me Tri under extreme heat, 35mm RAW photograph\",25,\"\",null,\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUYFcUMTsOE6AhppE7lm8Km-427PJN-lzcsRm9dXuzxq_Oz2csumv9AW2j7tWm26WKmuyj0EcwC1p66xonLxbGvi_eMfuNxdJ3MGkOzXrVF98hzfJgvKPgbio2koOurKIkqXyyX13neV96slX51nSH_SEU_b9bWQ4Q8T2vS2uQ\",3],null,[1376,768]]],[\"4630aeab-cd27-4457-96b6-24045de2504e\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"c7fee095-6829-4801-94c8-3eb9bcaf060f\",\"CAE\",null,[[1785255350,725479000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYvD5DO21C7peFe1MSdZ6wqPFz5qUEGBLbNmQua_4kKt72r5w1J1pTtaEVZkZHRJuymy5QmAZbcuUlPtLKMfNspIFve3bv0wBudRZKXFkpzeNWXjBaLce4BsfYKnfBjOL39eT2dqSe0O-omDru0BPOWjUKobLnXTNFht_Mo\",[null,null,null,null,1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUYvD5DO21C7peFe1MSdZ6wqPFz5qUEGBLbNmQua_4kKt72r5w1J1pTtaEVZkZHRJuymy5QmAZbcuUlPtLKMfNspIFve3bv0wBudRZKXFkpzeNWXjBaLce4BsfYKnfBjOL39eT2dqSe0O-omDru0BPOWjUKobLnXTNFht_Mo\",null,null,521906],[null,[null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYvD5DO21C7peFe1MSdZ6wqPFz5qUEGBLbNmQua_4kKt72r5w1J1pTtaEVZkZHRJuymy5QmAZbcuUlPtLKMfNspIFve3bv0wBudRZKXFkpzeNWXjBaLce4BsfYKnfBjOL39eT2dqSe0O-omDru0BPOWjUKobLnXTNFht_Mo\",0],[1448,1086]]],[\"538cd93f-52d5-4c9e-9924-7a66b8dd016f\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"9c487a71-fc76-4e0e-bdc3-98eee2bc25da\",\"CAE\",null,[[1790099223,430583000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUba9TAxJHa3p4QWzvlYmJ5i7dpuV6jEiNtC564dOPzPAw7dW9NGpUqfzrn_6Ivz6G4P_bL5YXozCmEzILHaVB1zttr6ECAC07TOmehktY-El0n-bkrD_5vuWlUntB7Txd6R0cYh8IDxUttuP1KdAXF_hs2zzKOeNt2LghGpUA\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Cinematic close-up of Le Quoc Tien jolting awake in bed, eyes wide with intense shock and cold sweat on his face. In background, a desktop setup with multiple glowing monitors and a digital clock displaying 07:13 AM. Soft morning golden sunlight streaming through half-open blinds. Photorealistic RAW photograph, Canon EOS R5, shallow depth of field.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Cinematic close-up of Le Quoc Tien jolting awake in bed, eyes wide with intense shock and cold sweat on his face. In background, a desktop setup with multiple glowing monitors and a digital clock displaying 07:13 AM. Soft morning golden sunlight streaming through half-open blinds. Photorealistic RAW photograph, Canon EOS R5, shallow depth of field.\"]]]]],[[[null,1,\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUba9TAxJHa3p4QWzvlYmJ5i7dpuV6jEiNtC564dOPzPAw7dW9NGpUqfzrn_6Ivz6G4P_bL5YXozCmEzILHaVB1zttr6ECAC07TOmehktY-El0n-bkrD_5vuWlUntB7Txd6R0cYh8IDxUttuP1KdAXF_hs2zzKOeNt2LghGpUA\",null,null,122156],[[null,658411800,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Cinematic close-up of Le Quoc Tien jolting awake in bed, eyes wide with intense shock and cold sweat on his face. In background, a desktop setup with multiple glowing monitors and a digital clock displaying 07:13 AM. Soft morning golden sunlight streaming through half-open blinds. Photorealistic RAW photograph, Canon EOS R5, shallow depth of field.\",25,\"\",null,\"9c487a71-fc76-4e0e-bdc3-98eee2bc25da\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUba9TAxJHa3p4QWzvlYmJ5i7dpuV6jEiNtC564dOPzPAw7dW9NGpUqfzrn_6Ivz6G4P_bL5YXozCmEzILHaVB1zttr6ECAC07TOmehktY-El0n-bkrD_5vuWlUntB7Txd6R0cYh8IDxUttuP1KdAXF_hs2zzKOeNt2LghGpUA\",3],null,[1376,768]]],[\"567984bd-c3ff-46de-ad25-353be60e6188\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",\"CAQ\",null,[[1790106174,785955000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUY3VK7qOJVbMaIhPKY_538QExrPFVsUwang-UkP9AxM4VJ0zZqmSIQrj94nZEGslM812hnfTt7kaMwBDwxw-zuRAcwNIB56Ar5VZvOZSt6vshgGNvwiLFL86HzoaNBeqnjCV2Vrtq6EHz3TM6xejHsV95G-JZI5XnUdnX7WEg\",[null,null,[[\"\\\"Front-facing person, posing, sensual face\\\"\",null,[[[\"quy người chính diện, tạo dáng , khuôn mặt gợi cảm\"]]]]],[[[null,2,\"b4d91c90-5b01-4472-aab2-1bcacb892fa4\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUY3VK7qOJVbMaIhPKY_538QExrPFVsUwang-UkP9AxM4VJ0zZqmSIQrj94nZEGslM812hnfTt7kaMwBDwxw-zuRAcwNIB56Ar5VZvOZSt6vshgGNvwiLFL86HzoaNBeqnjCV2Vrtq6EHz3TM6xejHsV95G-JZI5XnUdnX7WEg\",null,null,119798],[[null,1871434922,null,null,null,null,null,\"\\\"Front-facing person, posing, sensual face\\\"\",25,\"\",null,\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUY3VK7qOJVbMaIhPKY_538QExrPFVsUwang-UkP9AxM4VJ0zZqmSIQrj94nZEGslM812hnfTt7kaMwBDwxw-zuRAcwNIB56Ar5VZvOZSt6vshgGNvwiLFL86HzoaNBeqnjCV2Vrtq6EHz3TM6xejHsV95G-JZI5XnUdnX7WEg\",3],null,[1376,768]]],[\"5a919b50-566c-4cfb-97b6-4e481650dc0a\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"b84f96ab-d2b2-414b-b4ed-912a9e3e2859\",\"CAE\",null,[[1790099018,2158000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbwQe77Y4OkTtNco2H0sStQ2-qp7379h4bZeORSYvXZ-589lAjp7xPmFYzHFU1vG90yU_ywYBY5mO31QkaIeR3nixA7xpN2X20jzDi-VLeGn4-WvG4lHkMtVu1SDjQHnbwmluL1DkulB8QpEx7KDLTaQTsuVVKGTZmN7ZCu\",[null,null,[[\"Single reference image of Secluded industrial concrete warehouse on Hanoi outskirts, weathered corrugated metal roof, dusty grey concrete floor with faint cracks, heavy circular dark metal floor hatch with an etched twelve-ray sun emblem hidden beneath metal shelving. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",null,[[[\"Single reference image of Secluded industrial concrete warehouse on Hanoi outskirts, weathered corrugated metal roof, dusty grey concrete floor with faint cracks, heavy circular dark metal floor hatch with an etched twelve-ray sun emblem hidden beneath metal shelving. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbwQe77Y4OkTtNco2H0sStQ2-qp7379h4bZeORSYvXZ-589lAjp7xPmFYzHFU1vG90yU_ywYBY5mO31QkaIeR3nixA7xpN2X20jzDi-VLeGn4-WvG4lHkMtVu1SDjQHnbwmluL1DkulB8QpEx7KDLTaQTsuVVKGTZmN7ZCu\",null,null,175386],[[null,288261536,null,null,null,null,null,\"Single reference image of Secluded industrial concrete warehouse on Hanoi outskirts, weathered corrugated metal roof, dusty grey concrete floor with faint cracks, heavy circular dark metal floor hatch with an etched twelve-ray sun emblem hidden beneath metal shelving. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",25,\"\",null,\"b84f96ab-d2b2-414b-b4ed-912a9e3e2859\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbwQe77Y4OkTtNco2H0sStQ2-qp7379h4bZeORSYvXZ-589lAjp7xPmFYzHFU1vG90yU_ywYBY5mO31QkaIeR3nixA7xpN2X20jzDi-VLeGn4-WvG4lHkMtVu1SDjQHnbwmluL1DkulB8QpEx7KDLTaQTsuVVKGTZmN7ZCu\",3],null,[1376,768]]],[\"65993027-0037-4f25-9fb7-7bd4d301ee7b\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"87cfaa04-a192-405e-aa3b-137fa3d20ccb\",\"CAE\",null,[[1790098988,593315000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYuW_MBkm_rvBXuqLf9k9WJJNEP4pGgLOd-2Jqy0aTRKvG65KC4qe8iDn4enPIs9r4yCr_21dXJQBparb-V7KAeIvF5wNzz3-SnX9PX1KZ7hrQhzwo-pBD3coVHYYvCoqLjMy1IFs_fBWo8e_GTg2Iyb9o6dypoboRnDId8jA\",[null,null,[[\"Single reference image of 27-year-old Vietnamese investigative journalist, smart analytical expression, hair tied back in a neat ponytail, wearing a light beige utility shirt, olive multi-pocket reporter vest, canvas shoulder bag carrying a compact camera, intelligent perceptive dark eyes. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",null,[[[\"Single reference image of 27-year-old Vietnamese investigative journalist, smart analytical expression, hair tied back in a neat ponytail, wearing a light beige utility shirt, olive multi-pocket reporter vest, canvas shoulder bag carrying a compact camera, intelligent perceptive dark eyes. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUYuW_MBkm_rvBXuqLf9k9WJJNEP4pGgLOd-2Jqy0aTRKvG65KC4qe8iDn4enPIs9r4yCr_21dXJQBparb-V7KAeIvF5wNzz3-SnX9PX1KZ7hrQhzwo-pBD3coVHYYvCoqLjMy1IFs_fBWo8e_GTg2Iyb9o6dypoboRnDId8jA\",null,null,138007],[[null,998613419,null,null,null,null,null,\"Single reference image of 27-year-old Vietnamese investigative journalist, smart analytical expression, hair tied back in a neat ponytail, wearing a light beige utility shirt, olive multi-pocket reporter vest, canvas shoulder bag carrying a compact camera, intelligent perceptive dark eyes. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",25,\"\",null,\"87cfaa04-a192-405e-aa3b-137fa3d20ccb\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUYuW_MBkm_rvBXuqLf9k9WJJNEP4pGgLOd-2Jqy0aTRKvG65KC4qe8iDn4enPIs9r4yCr_21dXJQBparb-V7KAeIvF5wNzz3-SnX9PX1KZ7hrQhzwo-pBD3coVHYYvCoqLjMy1IFs_fBWo8e_GTg2Iyb9o6dypoboRnDId8jA\",2],null,[768,1376]]],[\"666bc47c-1fa1-4167-83cc-3088840b3146\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"d19f6811-455b-4838-bdc2-b908aeb7bd36\",\"CAE\",null,[[1790169824,340307000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbpaVpfKL6IfiRICiDfApjUpVXD_I6HbglLUIxQbvzERuEEQErKZyuIkr9BWioME_zJXXY3Ot16fKfEw5YoALNDuctrP6QFnojDlP16MlfiJR2OObhXloM4hGy7Qi8x2C8XZpNwApq_plSPJXSAZjcsavE6mbTYYlSRQxiaMQ\",[null,null,[[\"Grounded cinematic realism, an older Vietnamese male character in post-apocalyptic Hanoi 2028. He has rugged, weathered features, short grey hair, and intense eyes. He is wearing a practical, sweat-stained industrial worker's jumpsuit with tech-utility pouches. Natural skin texture, visible sweat and grime from the extreme heatwave. He stands in a dim, cluttered workshop filled with high-tech salvage. Near-future techno-thriller style, restrained acting, subtle film grain, natural lighting, high dynamic range. No fantasy spectacle.\",null,[[[\"Grounded cinematic realism, an older Vietnamese male character in post-apocalyptic Hanoi 2028. He has rugged, weathered features, short grey hair, and intense eyes. He is wearing a practical, sweat-stained industrial worker's jumpsuit with tech-utility pouches. Natural skin texture, visible sweat and grime from the extreme heatwave. He stands in a dim, cluttered workshop filled with high-tech salvage. Near-future techno-thriller style, restrained acting, subtle film grain, natural lighting, high dynamic range. No fantasy spectacle.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbpaVpfKL6IfiRICiDfApjUpVXD_I6HbglLUIxQbvzERuEEQErKZyuIkr9BWioME_zJXXY3Ot16fKfEw5YoALNDuctrP6QFnojDlP16MlfiJR2OObhXloM4hGy7Qi8x2C8XZpNwApq_plSPJXSAZjcsavE6mbTYYlSRQxiaMQ\",null,null,169345],[[null,707997,null,null,null,null,null,\"Grounded cinematic realism, an older Vietnamese male character in post-apocalyptic Hanoi 2028. He has rugged, weathered features, short grey hair, and intense eyes. He is wearing a practical, sweat-stained industrial worker's jumpsuit with tech-utility pouches. Natural skin texture, visible sweat and grime from the extreme heatwave. He stands in a dim, cluttered workshop filled with high-tech salvage. Near-future techno-thriller style, restrained acting, subtle film grain, natural lighting, high dynamic range. No fantasy spectacle.\",25,\"\",null,\"d19f6811-455b-4838-bdc2-b908aeb7bd36\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbpaVpfKL6IfiRICiDfApjUpVXD_I6HbglLUIxQbvzERuEEQErKZyuIkr9BWioME_zJXXY3Ot16fKfEw5YoALNDuctrP6QFnojDlP16MlfiJR2OObhXloM4hGy7Qi8x2C8XZpNwApq_plSPJXSAZjcsavE6mbTYYlSRQxiaMQ\",3],null,[1376,768]]],[\"684e27a9-a16c-480e-95ce-8cb540798659\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"3ab07549-ccbb-410a-a97d-08b8a4627f84\",\"CAE\",null,[[1784546411,930438000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUb_QujW3NDPoer97t_RbrFOtFLtMDC-jX49qb8CXY7dI1IdXHvhFoyk9WtQaUZunQm2XyQK2Wrx530dtfCNPv_b9m3ppqNaiXcDBB5HN7COGvoIBa_CPqKx98-KEOw_9SSP_KMjpOSvSP2krJY_RL6kv-KFBwuk06SqhiGOPg\",[null,null,[[\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\",null,[[[\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\"]]]]],[null,[[\"f4d9c731-41f2-4b51-9dd2-edd20c1dc7f1\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUb_QujW3NDPoer97t_RbrFOtFLtMDC-jX49qb8CXY7dI1IdXHvhFoyk9WtQaUZunQm2XyQK2Wrx530dtfCNPv_b9m3ppqNaiXcDBB5HN7COGvoIBa_CPqKx98-KEOw_9SSP_KMjpOSvSP2krJY_RL6kv-KFBwuk06SqhiGOPg\",null,null,614197],[[null,922697,\"CAMSJDU5NDc1OGNjLTExZjUtNGY5Mi04YjNjLTEyMTM2ODY1OTFmNBokMTQ5NmMyYWUtNTAyNy00NGQ0LWE2M2UtM2VmM2MxNzYzZTI0IgNDQUUqJDY4NGUyN2E5LWExNmMtNDgwZS05NWNlLThjYjU0MDc5ODY1OQ\",null,null,null,null,\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\",25,\"\",null,\"3ab07549-ccbb-410a-a97d-08b8a4627f84\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUb_QujW3NDPoer97t_RbrFOtFLtMDC-jX49qb8CXY7dI1IdXHvhFoyk9WtQaUZunQm2XyQK2Wrx530dtfCNPv_b9m3ppqNaiXcDBB5HN7COGvoIBa_CPqKx98-KEOw_9SSP_KMjpOSvSP2krJY_RL6kv-KFBwuk06SqhiGOPg\",3],null,[1376,768]]],[\"6aa915c7-1123-4e12-b75f-6d5e6d40d0fe\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"d7c54686-02ce-4344-ac22-2888ccf9c76e\",\"CAE\",null,[[1784546032,956328000],\"Man in black shirt and pants\",null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUa0Hu8CuBjBs_H1OHD0zbJ6ZyQhx1Hx0z1fdSfPWo778yvuntmjnGeBneX5oRmxo12rL4ebKQlklWgX6TmVuwqp8rBlNdWXHAkIDSKkyqIO38lMbR9EsRrp1fydpam1-1EGOvRRDEA4ds17HnIBQ-iIpCzpHEfOq_-YjCmO4A\",[null,null,null,null,1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUa0Hu8CuBjBs_H1OHD0zbJ6ZyQhx1Hx0z1fdSfPWo778yvuntmjnGeBneX5oRmxo12rL4ebKQlklWgX6TmVuwqp8rBlNdWXHAkIDSKkyqIO38lMbR9EsRrp1fydpam1-1EGOvRRDEA4ds17HnIBQ-iIpCzpHEfOq_-YjCmO4A\",null,\"A man with short dark hair stands against a plain gray background, shown from multiple angles. He wears a black button-up shirt over a dark t-shirt, dark cargo pants, and a crossbody bag. He has a watch on his left wrist.\"],[null,[null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUa0Hu8CuBjBs_H1OHD0zbJ6ZyQhx1Hx0z1fdSfPWo778yvuntmjnGeBneX5oRmxo12rL4ebKQlklWgX6TmVuwqp8rBlNdWXHAkIDSKkyqIO38lMbR9EsRrp1fydpam1-1EGOvRRDEA4ds17HnIBQ-iIpCzpHEfOq_-YjCmO4A\",0],[1376,768]]],[\"6e6be6ca-d2c5-477c-b025-8ceac859aa54\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",\"CAU\",null,[[1790105600,764469000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZ5hXeejQlQWInv3-Nk6t2Os8Ny-BBsbgmhlE9LmsbSyiPXjGPU9Eenh2ayA97QstKkBFb3OVzZBoiEyffvhPkMOTUIijGjPNYm-pYc8mtJAu39C3mO8ivKlsXdSiopxKxiTDsQPdEMQRRT-ieg1Nv6VgX92UoHk7ralpuQ\",[null,null,[[\"two-piece outfit, camisole, many torn spots\",null,[[[\"áo 2 mảnh , 2 dây, có nhiều vết rách\"]]]]],[[[null,2,\"279b944e-5348-4ecc-91d4-f356b9271132\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZ5hXeejQlQWInv3-Nk6t2Os8Ny-BBsbgmhlE9LmsbSyiPXjGPU9Eenh2ayA97QstKkBFb3OVzZBoiEyffvhPkMOTUIijGjPNYm-pYc8mtJAu39C3mO8ivKlsXdSiopxKxiTDsQPdEMQRRT-ieg1Nv6VgX92UoHk7ralpuQ\",null,null,181689],[[null,166472867,null,null,null,null,null,\"two-piece outfit, camisole, many torn spots\",25,\"\",null,\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUZ5hXeejQlQWInv3-Nk6t2Os8Ny-BBsbgmhlE9LmsbSyiPXjGPU9Eenh2ayA97QstKkBFb3OVzZBoiEyffvhPkMOTUIijGjPNYm-pYc8mtJAu39C3mO8ivKlsXdSiopxKxiTDsQPdEMQRRT-ieg1Nv6VgX92UoHk7ralpuQ\",3],null,[1376,768]]],[\"732c7e1a-7267-462f-8f58-1bf43694428e\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"be5c73e8-269a-4fdf-a1a5-d2265179a8be\",\"CAE\",null,[[1784546459,807750000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUb5ap5IbDPwWp5-DGrbazcb9T_G-aOu9nN3g7ib3dMMRXskaJ6jaihFAztr4lIRjSOFZCDgBhfGvvkmqUxqXxUdQtNNnARmrm5vl4Q9vWVTtVHAKPxZGJfphs0xlOYhLL6xrDPIkT3b-1dd0mapyQ-nFne_v6Vmi_MEQZgtFg\",[null,null,[[\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\",null,[[[\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\"]]]]],[null,[[\"f4d9c731-41f2-4b51-9dd2-edd20c1dc7f1\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUb5ap5IbDPwWp5-DGrbazcb9T_G-aOu9nN3g7ib3dMMRXskaJ6jaihFAztr4lIRjSOFZCDgBhfGvvkmqUxqXxUdQtNNnARmrm5vl4Q9vWVTtVHAKPxZGJfphs0xlOYhLL6xrDPIkT3b-1dd0mapyQ-nFne_v6Vmi_MEQZgtFg\",null,null,655260],[[null,599389,\"CAMSJDU5NDc1OGNjLTExZjUtNGY5Mi04YjNjLTEyMTM2ODY1OTFmNBokMTMyMDVkOTQtYTQ2Mi00MjE5LWI5MjQtMzdhNjFiNjY2MzIxIgNDQUUqJDczMmM3ZTFhLTcyNjctNDYyZi04ZjU4LTFiZjQzNjk0NDI4ZQ\",null,null,null,null,\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\",25,\"\",null,\"be5c73e8-269a-4fdf-a1a5-d2265179a8be\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUb5ap5IbDPwWp5-DGrbazcb9T_G-aOu9nN3g7ib3dMMRXskaJ6jaihFAztr4lIRjSOFZCDgBhfGvvkmqUxqXxUdQtNNnARmrm5vl4Q9vWVTtVHAKPxZGJfphs0xlOYhLL6xrDPIkT3b-1dd0mapyQ-nFne_v6Vmi_MEQZgtFg\",3],null,[1376,768]]],[\"76a03ec4-6340-4e25-9e8a-5009942893b9\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"a5fbb9e9-b0d0-48f4-89ea-277444ec27c4\",\"CAE\",null,[[1790104424,188616000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZyRbtbzcGUezd3ygh-aozo8PeVAlRLEKABEn0N0fDPqLBG5uL0xC4YycYgSDi9TOTperhgoMI6GJWmGv5QXTmlsA4TzK1yYdOeJF_5xxGj9U8Oh-g93r_A9laQ7LC1RvLfh8nVouNkPZlw5DiPSkCNehYo6N1bwxkx1ZXd_A\",[null,null,[[\"A deserted, dust-covered street in Hanoi's Old Quarter after a near-future catastrophe. Abandoned 2028-style electric scooters are half-buried in debris and overgrown vines. Tall, narrow buildings show signs of structural decay under a dim, overcast sun. Grounded live-action aesthetic, cinematic realism, authentic Vietnamese everyday objects. Darker, atmospheric lighting with high dynamic range.\",null,[[[\"A deserted, dust-covered street in Hanoi's Old Quarter after a near-future catastrophe. Abandoned 2028-style electric scooters are half-buried in debris and overgrown vines. Tall, narrow buildings show signs of structural decay under a dim, overcast sun. Grounded live-action aesthetic, cinematic realism, authentic Vietnamese everyday objects. Darker, atmospheric lighting with high dynamic range.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZyRbtbzcGUezd3ygh-aozo8PeVAlRLEKABEn0N0fDPqLBG5uL0xC4YycYgSDi9TOTperhgoMI6GJWmGv5QXTmlsA4TzK1yYdOeJF_5xxGj9U8Oh-g93r_A9laQ7LC1RvLfh8nVouNkPZlw5DiPSkCNehYo6N1bwxkx1ZXd_A\",null,null,281615],[[null,755263,null,null,null,null,null,\"A deserted, dust-covered street in Hanoi's Old Quarter after a near-future catastrophe. Abandoned 2028-style electric scooters are half-buried in debris and overgrown vines. Tall, narrow buildings show signs of structural decay under a dim, overcast sun. Grounded live-action aesthetic, cinematic realism, authentic Vietnamese everyday objects. Darker, atmospheric lighting with high dynamic range.\",25,\"\",null,\"a5fbb9e9-b0d0-48f4-89ea-277444ec27c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUZyRbtbzcGUezd3ygh-aozo8PeVAlRLEKABEn0N0fDPqLBG5uL0xC4YycYgSDi9TOTperhgoMI6GJWmGv5QXTmlsA4TzK1yYdOeJF_5xxGj9U8Oh-g93r_A9laQ7LC1RvLfh8nVouNkPZlw5DiPSkCNehYo6N1bwxkx1ZXd_A\",3],null,[1376,768]]],[\"78266bba-b106-47e7-80e3-c152822e1ca9\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"82ddef0b-fced-4a18-a039-240a66c111d2\",\"CAE\",null,[[1790105368,716850000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUaWhR4c9CHlZw_wiJwoNlZJDs8mzOrvAB-X2XljYNHpxlP3snah_vertyktxnovuo81KPz7UqZpVPoXsJWw4fx5iwYnChh9FZ9dEUTEBZTXi7c3F9PMYVPnPhkdTdsrraejL2gyMA0NH0gPESKQazHrNYgJDxTFXzY35Uhk\",[null,null,[[\"A beautiful Vietnamese female character in a grounded 2028 techno-thriller setting. She is wearing sleek, tight-fitting industrial-chic clothing with a long, flowing tech-fabric coat that trails behind her. Her face is authentically Vietnamese, with a determined expression. Cinematic realism, natural lighting under a harsh, hot sun, visible heat haze in the background. Physically believable textures, no fantasy spectacle, subtle film grain. High-quality live-action aesthetic.\",null,[[[\"A beautiful Vietnamese female character in a grounded 2028 techno-thriller setting. She is wearing sleek, tight-fitting industrial-chic clothing with a long, flowing tech-fabric coat that trails behind her. Her face is authentically Vietnamese, with a determined expression. Cinematic realism, natural lighting under a harsh, hot sun, visible heat haze in the background. Physically believable textures, no fantasy spectacle, subtle film grain. High-quality live-action aesthetic.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUaWhR4c9CHlZw_wiJwoNlZJDs8mzOrvAB-X2XljYNHpxlP3snah_vertyktxnovuo81KPz7UqZpVPoXsJWw4fx5iwYnChh9FZ9dEUTEBZTXi7c3F9PMYVPnPhkdTdsrraejL2gyMA0NH0gPESKQazHrNYgJDxTFXzY35Uhk\",null,null,169250],[[null,475867,null,null,null,null,null,\"A beautiful Vietnamese female character in a grounded 2028 techno-thriller setting. She is wearing sleek, tight-fitting industrial-chic clothing with a long, flowing tech-fabric coat that trails behind her. Her face is authentically Vietnamese, with a determined expression. Cinematic realism, natural lighting under a harsh, hot sun, visible heat haze in the background. Physically believable textures, no fantasy spectacle, subtle film grain. High-quality live-action aesthetic.\",25,\"\",null,\"82ddef0b-fced-4a18-a039-240a66c111d2\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUaWhR4c9CHlZw_wiJwoNlZJDs8mzOrvAB-X2XljYNHpxlP3snah_vertyktxnovuo81KPz7UqZpVPoXsJWw4fx5iwYnChh9FZ9dEUTEBZTXi7c3F9PMYVPnPhkdTdsrraejL2gyMA0NH0gPESKQazHrNYgJDxTFXzY35Uhk\",3],null,[1376,768]]],[\"78e46231-e6cf-43fb-99bc-a4cb96196e24\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"431da3f0-96a9-4cc7-8384-937287b72c6e\",\"CAE\",null,[[1790098978,830949000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUarwgaECQHTDEn00eyt70D2PN5pVA_w2IGU7iU5N8W9UmWPaozySZboiA15dJttaxxWVKJG3E8A0lhxYJg9dw9MOG1Y7EbFshxazXjJ4KuZEKA_1Pg5ItXC1YxZXtTl2Q4oJPpTmXT_gQGJC-ytNPkvug_1jJlgv3DCzLo0rA\",[null,null,[[\"Single reference image of 34-year-old Vietnamese logistics commander, tall imposing authoritative posture, slicked-back dark hair, wearing an unbuttoned black button-down shirt with rolled-up sleeves, dark trousers, distinctive matte black ring on his left ring finger, piercing cold calculated gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",null,[[[\"Single reference image of 34-year-old Vietnamese logistics commander, tall imposing authoritative posture, slicked-back dark hair, wearing an unbuttoned black button-down shirt with rolled-up sleeves, dark trousers, distinctive matte black ring on his left ring finger, piercing cold calculated gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUarwgaECQHTDEn00eyt70D2PN5pVA_w2IGU7iU5N8W9UmWPaozySZboiA15dJttaxxWVKJG3E8A0lhxYJg9dw9MOG1Y7EbFshxazXjJ4KuZEKA_1Pg5ItXC1YxZXtTl2Q4oJPpTmXT_gQGJC-ytNPkvug_1jJlgv3DCzLo0rA\",null,null,93667],[[null,610053073,null,null,null,null,null,\"Single reference image of 34-year-old Vietnamese logistics commander, tall imposing authoritative posture, slicked-back dark hair, wearing an unbuttoned black button-down shirt with rolled-up sleeves, dark trousers, distinctive matte black ring on his left ring finger, piercing cold calculated gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",25,\"\",null,\"431da3f0-96a9-4cc7-8384-937287b72c6e\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUarwgaECQHTDEn00eyt70D2PN5pVA_w2IGU7iU5N8W9UmWPaozySZboiA15dJttaxxWVKJG3E8A0lhxYJg9dw9MOG1Y7EbFshxazXjJ4KuZEKA_1Pg5ItXC1YxZXtTl2Q4oJPpTmXT_gQGJC-ytNPkvug_1jJlgv3DCzLo0rA\",2],null,[768,1376]]],[\"7b965b5d-e710-4d9a-9d24-253ba6e48286\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",\"CAE\",null,[[1790106045,1406000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZNkJAU3A3mTXxfRB3z5XcrRTmYMsW-vXve1HwCrASZ9FQV4ibEcqbVitT5TOALfwxiJPbzh3tlfUqPYtmD9oWIM7iOPBjjBa9P5RryK2ULhlECqLZPH3qop6s6GDIor3LD2vWhMhnIFeJa4MeityYUYIM4Vpqf1IShoOFEdw\",[null,null,[[\"Grounded cinematic realism, a beautiful 19-year-old Vietnamese woman in a high-tech Hanoi apartment, 2028. She is wearing a practical yet stylish dark lace-trimmed camisole with thin straps. Authentic Vietnamese features, natural skin texture with subtle sweat from the extreme heatwave. She is sitting near a cooling fan, parched atmosphere, soft tungsten lighting. Near-future techno-thriller style, restrained pose, high dynamic range, subtle film grain. High-quality live-action aesthetic.\",null,[[[\"Grounded cinematic realism, a beautiful 19-year-old Vietnamese woman in a high-tech Hanoi apartment, 2028. She is wearing a practical yet stylish dark lace-trimmed camisole with thin straps. Authentic Vietnamese features, natural skin texture with subtle sweat from the extreme heatwave. She is sitting near a cooling fan, parched atmosphere, soft tungsten lighting. Near-future techno-thriller style, restrained pose, high dynamic range, subtle film grain. High-quality live-action aesthetic.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZNkJAU3A3mTXxfRB3z5XcrRTmYMsW-vXve1HwCrASZ9FQV4ibEcqbVitT5TOALfwxiJPbzh3tlfUqPYtmD9oWIM7iOPBjjBa9P5RryK2ULhlECqLZPH3qop6s6GDIor3LD2vWhMhnIFeJa4MeityYUYIM4Vpqf1IShoOFEdw\",null,null,110676],[[null,933615,null,null,null,null,null,\"Grounded cinematic realism, a beautiful 19-year-old Vietnamese woman in a high-tech Hanoi apartment, 2028. She is wearing a practical yet stylish dark lace-trimmed camisole with thin straps. Authentic Vietnamese features, natural skin texture with subtle sweat from the extreme heatwave. She is sitting near a cooling fan, parched atmosphere, soft tungsten lighting. Near-future techno-thriller style, restrained pose, high dynamic range, subtle film grain. High-quality live-action aesthetic.\",25,\"\",null,\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUZNkJAU3A3mTXxfRB3z5XcrRTmYMsW-vXve1HwCrASZ9FQV4ibEcqbVitT5TOALfwxiJPbzh3tlfUqPYtmD9oWIM7iOPBjjBa9P5RryK2ULhlECqLZPH3qop6s6GDIor3LD2vWhMhnIFeJa4MeityYUYIM4Vpqf1IShoOFEdw\",3],null,[1376,768]]],[\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"6ddbd597-0a88-4e3c-b31a-7d20443c0dab\",\"CAE\",null,[[1790098968,283242000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbhiJ7Q-tv7QWwFzi6tGAmgMIu1r_dO4r_B_kxrnFLdG36DSsN0umqPKqOvAMUO3nsSCUDC0_IEF28r16pH0Zii3hc_qIQ5Lo9K1Sb1tTDHyihLBTIml_gnOVk2mQ6MvY9nicNueJLGUo4mD4gIVQSFbJAgwes--GeQH1zbPg\",[null,null,[[\"Single reference image of 29-year-old Vietnamese system infrastructure engineer, lean athletic build, sharp determined Asian features, short clean black hair, wearing dark charcoal tactical t-shirt and grey cargo pants, digital wrist gauge, observant survivalist gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",null,[[[\"Single reference image of 29-year-old Vietnamese system infrastructure engineer, lean athletic build, sharp determined Asian features, short clean black hair, wearing dark charcoal tactical t-shirt and grey cargo pants, digital wrist gauge, observant survivalist gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbhiJ7Q-tv7QWwFzi6tGAmgMIu1r_dO4r_B_kxrnFLdG36DSsN0umqPKqOvAMUO3nsSCUDC0_IEF28r16pH0Zii3hc_qIQ5Lo9K1Sb1tTDHyihLBTIml_gnOVk2mQ6MvY9nicNueJLGUo4mD4gIVQSFbJAgwes--GeQH1zbPg\",null,null,89857],[[null,891120892,null,null,null,null,null,\"Single reference image of 29-year-old Vietnamese system infrastructure engineer, lean athletic build, sharp determined Asian features, short clean black hair, wearing dark charcoal tactical t-shirt and grey cargo pants, digital wrist gauge, observant survivalist gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",25,\"\",null,\"6ddbd597-0a88-4e3c-b31a-7d20443c0dab\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbhiJ7Q-tv7QWwFzi6tGAmgMIu1r_dO4r_B_kxrnFLdG36DSsN0umqPKqOvAMUO3nsSCUDC0_IEF28r16pH0Zii3hc_qIQ5Lo9K1Sb1tTDHyihLBTIml_gnOVk2mQ6MvY9nicNueJLGUo4mD4gIVQSFbJAgwes--GeQH1zbPg\",2],null,[768,1376]]],[\"9aea7396-dc22-4b69-947f-7d1dcc5c1e3c\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"4fb9e862-d995-4f49-9eb6-d00b1f2ee767\",\"CAE\",null,[[1784546541,545693000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZFIbtXJLDv6vN3PaWjcgQNioAMhpjK2Ql39Er-I-WMoJQd73VCsQ-iooNVWRAhl2-hJkFnmVoeLEdylQDFdINmaYMaUi-XsOgXe3MLW2t57PHaAeg2u76BCcDFr8hLCxAhpcOGDgXNykCzJKDRgRaXQRDfHWCm7mi_lvATTw\",[null,null,[[\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\",null,[[[\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\"]]]]],[null,[[\"f4d9c731-41f2-4b51-9dd2-edd20c1dc7f1\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZFIbtXJLDv6vN3PaWjcgQNioAMhpjK2Ql39Er-I-WMoJQd73VCsQ-iooNVWRAhl2-hJkFnmVoeLEdylQDFdINmaYMaUi-XsOgXe3MLW2t57PHaAeg2u76BCcDFr8hLCxAhpcOGDgXNykCzJKDRgRaXQRDfHWCm7mi_lvATTw\"],[[null,922697,\"CAMSJDU5NDc1OGNjLTExZjUtNGY5Mi04YjNjLTEyMTM2ODY1OTFmNBokMTQ5NmMyYWUtNTAyNy00NGQ0LWE2M2UtM2VmM2MxNzYzZTI0IgNDQUUqJDY4NGUyN2E5LWExNmMtNDgwZS05NWNlLThjYjU0MDc5ODY1OQ\",null,null,null,null,\"Live-action cinematic character reference of Lê Quốc Tiến. A 29-year-old Vietnamese systems engineer. Emaciated, dehydrated, with patched and worn clothing, and a visible abdomen wound. Preserve the exact facial geometry, eye shape, nose, jaw, hairline, and body proportions of the identity in reference 1. Clean full-body neutral standing view and one clear three-quarter portrait. Plain segmented grey background, soft neutral studio lighting. Grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast, natural skin texture, physically believable heat haze and sweat, restrained expression. Subtle film grain, high dynamic range. No anime, no illustration, no glossy rendering, no generic cyberpunk neon, no holograms. No face drift, no age drift, no hairstyle drift, no costume drift. No generated readable text, no watermark.\",25,\"\",null,\"3ab07549-ccbb-410a-a97d-08b8a4627f84\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUZFIbtXJLDv6vN3PaWjcgQNioAMhpjK2Ql39Er-I-WMoJQd73VCsQ-iooNVWRAhl2-hJkFnmVoeLEdylQDFdINmaYMaUi-XsOgXe3MLW2t57PHaAeg2u76BCcDFr8hLCxAhpcOGDgXNykCzJKDRgRaXQRDfHWCm7mi_lvATTw\",3],null,[1376,768]]],[\"9daace9a-a99c-4a5a-bce5-e9aaedcb1980\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"52274337-3f1e-499b-b404-022ff18196d3\",\"CAE\",null,[[1790099028,206353000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbBWzfZ5pUAubqSywQv5NKZAUwOs50giX-KmoZuAR7ompcy1pXcwfXxRX7Zeb7piHJUMus9W2WJiC1ZA_1XK-FnvPOkh2uB-H1cm8dh7lOE_hBeWhkl2rnFRdJzQhoucBcGFjwfbxZPB8ivZG5_kb3ooeknfUJYV0mJefLbpQ\",[null,null,[[\"Single reference image of Dried-up West Lake lakebed under a scorching apocalyptic deep crimson sun and hazy red sky, cracked black mud terrain revealing gigantic ancient dark metallic curved rib structures rising from the earth like colossal dragon bones, rising hot thermal steam. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",null,[[[\"Single reference image of Dried-up West Lake lakebed under a scorching apocalyptic deep crimson sun and hazy red sky, cracked black mud terrain revealing gigantic ancient dark metallic curved rib structures rising from the earth like colossal dragon bones, rising hot thermal steam. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbBWzfZ5pUAubqSywQv5NKZAUwOs50giX-KmoZuAR7ompcy1pXcwfXxRX7Zeb7piHJUMus9W2WJiC1ZA_1XK-FnvPOkh2uB-H1cm8dh7lOE_hBeWhkl2rnFRdJzQhoucBcGFjwfbxZPB8ivZG5_kb3ooeknfUJYV0mJefLbpQ\",null,null,160958],[[null,405094559,null,null,null,null,null,\"Single reference image of Dried-up West Lake lakebed under a scorching apocalyptic deep crimson sun and hazy red sky, cracked black mud terrain revealing gigantic ancient dark metallic curved rib structures rising from the earth like colossal dragon bones, rising hot thermal steam. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",25,\"\",null,\"52274337-3f1e-499b-b404-022ff18196d3\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbBWzfZ5pUAubqSywQv5NKZAUwOs50giX-KmoZuAR7ompcy1pXcwfXxRX7Zeb7piHJUMus9W2WJiC1ZA_1XK-FnvPOkh2uB-H1cm8dh7lOE_hBeWhkl2rnFRdJzQhoucBcGFjwfbxZPB8ivZG5_kb3ooeknfUJYV0mJefLbpQ\",3],null,[1376,768]]],[\"a029279b-cc59-465f-98d5-0fa8b78187ba\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"18462c7e-40cf-4217-964d-980db21dac35\",\"CAE\",null,[[1790099234,21793000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbj3WTNo1mFGeojoYJZAShsPnLL6w-ur3gkupXE_3MK-jxP7yPJTourA0Na4FngoD_NNrbyPpFak1wd8Z1evCFlDK7m0HWMeguqv2zwofKtaY6LEg6Cp4AG3EQGtBmJZTN-y-Yd4Roulc6sEJ9dnCMTKnK8Eb-x_JkLKPPCoA\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Wide establishing cinematic shot of Nguyen Trai Avenue in Hanoi during morning rush hour. The green Cat Linh - Ha Dong elevated metro train glides smoothly on elevated concrete tracks above dense streams of motorbikes and cars. Clear blue sky with gentle morning sun, modern city backdrop. RAW photograph, wide-angle 24mm, vibrant urban atmosphere.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Wide establishing cinematic shot of Nguyen Trai Avenue in Hanoi during morning rush hour. The green Cat Linh - Ha Dong elevated metro train glides smoothly on elevated concrete tracks above dense streams of motorbikes and cars. Clear blue sky with gentle morning sun, modern city backdrop. RAW photograph, wide-angle 24mm, vibrant urban atmosphere.\"]]]]],[[[null,1,\"e12021b9-1f91-4a65-a9e2-f1ddbffbf42d\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbj3WTNo1mFGeojoYJZAShsPnLL6w-ur3gkupXE_3MK-jxP7yPJTourA0Na4FngoD_NNrbyPpFak1wd8Z1evCFlDK7m0HWMeguqv2zwofKtaY6LEg6Cp4AG3EQGtBmJZTN-y-Yd4Roulc6sEJ9dnCMTKnK8Eb-x_JkLKPPCoA\",null,null,303857],[[null,237436999,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Wide establishing cinematic shot of Nguyen Trai Avenue in Hanoi during morning rush hour. The green Cat Linh - Ha Dong elevated metro train glides smoothly on elevated concrete tracks above dense streams of motorbikes and cars. Clear blue sky with gentle morning sun, modern city backdrop. RAW photograph, wide-angle 24mm, vibrant urban atmosphere.\",25,\"\",null,\"18462c7e-40cf-4217-964d-980db21dac35\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbj3WTNo1mFGeojoYJZAShsPnLL6w-ur3gkupXE_3MK-jxP7yPJTourA0Na4FngoD_NNrbyPpFak1wd8Z1evCFlDK7m0HWMeguqv2zwofKtaY6LEg6Cp4AG3EQGtBmJZTN-y-Yd4Roulc6sEJ9dnCMTKnK8Eb-x_JkLKPPCoA\",3],null,[1376,768]]],[\"a6010398-57c9-4e27-a89f-31ed0ddf2d1a\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"9139a337-e6df-474c-90f1-e4e48dca69a9\",\"CAE\",null,[[1790099323,542997000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbT2FIiqZl8L2GBCDBj5OKGpxhMUlACgmVKCw7fpaV5OJFyCHSKHS4AZQ_jNGc13Da0FQPpmF5WJ-Acvk2WQw7n6gpcYQP5RqL2qDhlKMoazbO4SsFboSoKj2e2_iuGAywHBr5vT6ytdtGh6HbAtVZMcmDnAXxQcTCOVQP8\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in a shattered underground basement. Le Quoc Tien in dark torn clothes slumps against cracked burning concrete. Do Minh Kha stands over him holding a gleaming tactical knife, silhouette backlit by deep crimson sunlight piercing through fractured ceiling slabs. RAW photograph, 35mm lens, intense chiaroscuro lighting, floating embers and dust particles.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in a shattered underground basement. Le Quoc Tien in dark torn clothes slumps against cracked burning concrete. Do Minh Kha stands over him holding a gleaming tactical knife, silhouette backlit by deep crimson sunlight piercing through fractured ceiling slabs. RAW photograph, 35mm lens, intense chiaroscuro lighting, floating embers and dust particles.\"]]]]],[[[null,1,\"78e46231-e6cf-43fb-99bc-a4cb96196e24\"],[null,1,\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbT2FIiqZl8L2GBCDBj5OKGpxhMUlACgmVKCw7fpaV5OJFyCHSKHS4AZQ_jNGc13Da0FQPpmF5WJ-Acvk2WQw7n6gpcYQP5RqL2qDhlKMoazbO4SsFboSoKj2e2_iuGAywHBr5vT6ytdtGh6HbAtVZMcmDnAXxQcTCOVQP8\",null,null,173527],[[null,226935734,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in a shattered underground basement. Le Quoc Tien in dark torn clothes slumps against cracked burning concrete. Do Minh Kha stands over him holding a gleaming tactical knife, silhouette backlit by deep crimson sunlight piercing through fractured ceiling slabs. RAW photograph, 35mm lens, intense chiaroscuro lighting, floating embers and dust particles.\",25,\"\",null,\"9139a337-e6df-474c-90f1-e4e48dca69a9\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbT2FIiqZl8L2GBCDBj5OKGpxhMUlACgmVKCw7fpaV5OJFyCHSKHS4AZQ_jNGc13Da0FQPpmF5WJ-Acvk2WQw7n6gpcYQP5RqL2qDhlKMoazbO4SsFboSoKj2e2_iuGAywHBr5vT6ytdtGh6HbAtVZMcmDnAXxQcTCOVQP8\",3],null,[1376,768]]],[\"a661bfc5-873f-4f71-862b-b76958cdda91\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"d6e35829-f7a1-43aa-b12c-7172309cf84c\",\"CAE\",null,[[1790098617,113716000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbRQ_Bp4QhsU1Iu84cZ-r5y2ZhYCzF3AYTam8eKNwGcW9aKvYsPy8wkabi2M6RcWcVfzv9RHeFbYP9C6dJNgxaTsqqTwpzDQnPHqnDGMNSSnGdTiQ9y3zAAYHU0LZ_AWwPH-skO-aEWWB0ZBhgaO1i8zfdqnZ9fsGRMwYHwWA\",[null,null,[[\"Single reference image of Magnificent golden koi fish with shimmering iridescent scales, elegant fins, slight magical glow.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Clear detailed view showing the asset's complete form. Appropriate angle to showcase distinctive features and functional elements. Centered with proper scale reference. Neutral background. Show key details, materials, and surface textures. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",null,[[[\"Single reference image of Magnificent golden koi fish with shimmering iridescent scales, elegant fins, slight magical glow.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Clear detailed view showing the asset's complete form. Appropriate angle to showcase distinctive features and functional elements. Centered with proper scale reference. Neutral background. Show key details, materials, and surface textures. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbRQ_Bp4QhsU1Iu84cZ-r5y2ZhYCzF3AYTam8eKNwGcW9aKvYsPy8wkabi2M6RcWcVfzv9RHeFbYP9C6dJNgxaTsqqTwpzDQnPHqnDGMNSSnGdTiQ9y3zAAYHU0LZ_AWwPH-skO-aEWWB0ZBhgaO1i8zfdqnZ9fsGRMwYHwWA\",null,null,71315],[[null,865186350,null,null,null,null,null,\"Single reference image of Magnificent golden koi fish with shimmering iridescent scales, elegant fins, slight magical glow.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Clear detailed view showing the asset's complete form. Appropriate angle to showcase distinctive features and functional elements. Centered with proper scale reference. Neutral background. Show key details, materials, and surface textures. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",25,\"\",null,\"d6e35829-f7a1-43aa-b12c-7172309cf84c\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbRQ_Bp4QhsU1Iu84cZ-r5y2ZhYCzF3AYTam8eKNwGcW9aKvYsPy8wkabi2M6RcWcVfzv9RHeFbYP9C6dJNgxaTsqqTwpzDQnPHqnDGMNSSnGdTiQ9y3zAAYHU0LZ_AWwPH-skO-aEWWB0ZBhgaO1i8zfdqnZ9fsGRMwYHwWA\",2],null,[768,1376]]],[\"ac5f92cb-b55e-4db9-b800-0dd1dbe759ef\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"b00ceb65-a125-49c4-91ff-49f0af1e2356\",\"CAE\",null,[[1784545698,613155000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYU9yBwTqRhuBqi4Sq7neRHGAdzXTSk4Jbt4JKNBO0_NTcu_Bym4j5YCMNenazSJ9djSeRzF0p5-QKF4AfNoHQdJDY4RSI9b_pa_5fKvtNJ09GrtO97eqRuzqofh5L2LjMjFzSWYuNYpUastYCDucqB24U_KWAlNxhc7SkHkw\",[null,null,[[\"Live-action cinematic character reference sheet. A 29-year-old Vietnamese infrastructure and systems engineer, lean athletic but not muscular, light tan skin, short slightly messy black hair, tired focused dark eyes, restrained expression, charcoal crew-neck T-shirt, lightweight black technical overshirt, dark cargo trousers, black field watch and simple cross-body utility bag. He looks like someone who notices exits and electrical panels before people. Front portrait, three-quarter portrait, left and right profile, and full-body neutral standing view. Plain segmented grey background, soft neutral studio lighting, exact identity consistency across all views, authentic Vietnamese facial features, natural skin texture and anatomy. grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast and Hanoi architecture, natural skin texture, practical 2028 clothing and industrial equipment, physically believable heat haze and sweat, restrained acting, controlled camera movement, 24 fps cinematic motion, subtle film grain, high dynamic range, no fantasy spectacle. no anime, no illustration, no comic-book rendering, no glossy video-game look, no superhero armor, no magic glow, no Chinese imperial costume, no Japanese historical styling, no European medieval architecture, no generic cyberpunk neon, no holograms, no face drift, no age drift, no hairstyle drift, no costume drift, no extra fingers, no duplicated main characters, no generated readable text, no watermark.\",null,[[[\"Live-action cinematic character reference sheet. A 29-year-old Vietnamese infrastructure and systems engineer, lean athletic but not muscular, light tan skin, short slightly messy black hair, tired focused dark eyes, restrained expression, charcoal crew-neck T-shirt, lightweight black technical overshirt, dark cargo trousers, black field watch and simple cross-body utility bag. He looks like someone who notices exits and electrical panels before people. Front portrait, three-quarter portrait, left and right profile, and full-body neutral standing view. Plain segmented grey background, soft neutral studio lighting, exact identity consistency across all views, authentic Vietnamese facial features, natural skin texture and anatomy. grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast and Hanoi architecture, natural skin texture, practical 2028 clothing and industrial equipment, physically believable heat haze and sweat, restrained acting, controlled camera movement, 24 fps cinematic motion, subtle film grain, high dynamic range, no fantasy spectacle. no anime, no illustration, no comic-book rendering, no glossy video-game look, no superhero armor, no magic glow, no Chinese imperial costume, no Japanese historical styling, no European medieval architecture, no generic cyberpunk neon, no holograms, no face drift, no age drift, no hairstyle drift, no costume drift, no extra fingers, no duplicated main characters, no generated readable text, no watermark.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUYU9yBwTqRhuBqi4Sq7neRHGAdzXTSk4Jbt4JKNBO0_NTcu_Bym4j5YCMNenazSJ9djSeRzF0p5-QKF4AfNoHQdJDY4RSI9b_pa_5fKvtNJ09GrtO97eqRuzqofh5L2LjMjFzSWYuNYpUastYCDucqB24U_KWAlNxhc7SkHkw\",null,null,626799],[[null,562848,\"CAMSJDU5NDc1OGNjLTExZjUtNGY5Mi04YjNjLTEyMTM2ODY1OTFmNBokZGExZTY3YWYtYmI2OS00Njg4LWJhMzYtZGRiNTFiZjg4MjNkIgNDQUUqJGFjNWY5MmNiLWI1NWUtNGRiOS1iODAwLTBkZDFkYmU3NTllZg\",null,null,null,null,\"Live-action cinematic character reference sheet. A 29-year-old Vietnamese infrastructure and systems engineer, lean athletic but not muscular, light tan skin, short slightly messy black hair, tired focused dark eyes, restrained expression, charcoal crew-neck T-shirt, lightweight black technical overshirt, dark cargo trousers, black field watch and simple cross-body utility bag. He looks like someone who notices exits and electrical panels before people. Front portrait, three-quarter portrait, left and right profile, and full-body neutral standing view. Plain segmented grey background, soft neutral studio lighting, exact identity consistency across all views, authentic Vietnamese facial features, natural skin texture and anatomy. grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast and Hanoi architecture, natural skin texture, practical 2028 clothing and industrial equipment, physically believable heat haze and sweat, restrained acting, controlled camera movement, 24 fps cinematic motion, subtle film grain, high dynamic range, no fantasy spectacle. no anime, no illustration, no comic-book rendering, no glossy video-game look, no superhero armor, no magic glow, no Chinese imperial costume, no Japanese historical styling, no European medieval architecture, no generic cyberpunk neon, no holograms, no face drift, no age drift, no hairstyle drift, no costume drift, no extra fingers, no duplicated main characters, no generated readable text, no watermark.\",25,\"\",null,\"b00ceb65-a125-49c4-91ff-49f0af1e2356\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUYU9yBwTqRhuBqi4Sq7neRHGAdzXTSk4Jbt4JKNBO0_NTcu_Bym4j5YCMNenazSJ9djSeRzF0p5-QKF4AfNoHQdJDY4RSI9b_pa_5fKvtNJ09GrtO97eqRuzqofh5L2LjMjFzSWYuNYpUastYCDucqB24U_KWAlNxhc7SkHkw\",3],null,[1376,768]]],[\"acf87cab-c8f4-46c4-b305-5d57a5be19fa\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"b58780b6-8218-433c-bdca-6fb13f9e9cd6\",\"CAE\",null,[[1784545738,781156000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZRZ0X8_gAC7eBzRHdccFMzFSVKpAjlYJj6gkxZm6voFpniFQxGgmu64zF0-pMBuihjmsUXMFj-QZEKDHe2fvD3zTqI9i-yHmfHTIXoJJ-iOI7XwN6Vv7cQragFr-DkewKeiOqeRHTx2Mn3fEvhgcypfX5FGNpIFqTfCuFOCA\",[null,null,[[\"Live-action cinematic character reference sheet. A 29-year-old Vietnamese infrastructure and systems engineer, lean athletic but not muscular, light tan skin, short slightly messy black hair, tired focused dark eyes, restrained expression, charcoal crew-neck T-shirt, lightweight black technical overshirt, dark cargo trousers, black field watch and simple cross-body utility bag. He looks like someone who notices exits and electrical panels before people. Front portrait, three-quarter portrait, left and right profile, and full-body neutral standing view. Plain segmented grey background, soft neutral studio lighting, exact identity consistency across all views, authentic Vietnamese facial features, natural skin texture and anatomy. grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast and Hanoi architecture, natural skin texture, practical 2028 clothing and industrial equipment, physically believable heat haze and sweat, restrained acting, controlled camera movement, 24 fps cinematic motion, subtle film grain, high dynamic range, no fantasy spectacle. no anime, no illustration, no comic-book rendering, no glossy video-game look, no superhero armor, no magic glow, no Chinese imperial costume, no Japanese historical styling, no European medieval architecture, no generic cyberpunk neon, no holograms, no face drift, no age drift, no hairstyle drift, no costume drift, no extra fingers, no duplicated main characters, no generated readable text, no watermark.\",null,[[[\"Live-action cinematic character reference sheet. A 29-year-old Vietnamese infrastructure and systems engineer, lean athletic but not muscular, light tan skin, short slightly messy black hair, tired focused dark eyes, restrained expression, charcoal crew-neck T-shirt, lightweight black technical overshirt, dark cargo trousers, black field watch and simple cross-body utility bag. He looks like someone who notices exits and electrical panels before people. Front portrait, three-quarter portrait, left and right profile, and full-body neutral standing view. Plain segmented grey background, soft neutral studio lighting, exact identity consistency across all views, authentic Vietnamese facial features, natural skin texture and anatomy. grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast and Hanoi architecture, natural skin texture, practical 2028 clothing and industrial equipment, physically believable heat haze and sweat, restrained acting, controlled camera movement, 24 fps cinematic motion, subtle film grain, high dynamic range, no fantasy spectacle. no anime, no illustration, no comic-book rendering, no glossy video-game look, no superhero armor, no magic glow, no Chinese imperial costume, no Japanese historical styling, no European medieval architecture, no generic cyberpunk neon, no holograms, no face drift, no age drift, no hairstyle drift, no costume drift, no extra fingers, no duplicated main characters, no generated readable text, no watermark.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZRZ0X8_gAC7eBzRHdccFMzFSVKpAjlYJj6gkxZm6voFpniFQxGgmu64zF0-pMBuihjmsUXMFj-QZEKDHe2fvD3zTqI9i-yHmfHTIXoJJ-iOI7XwN6Vv7cQragFr-DkewKeiOqeRHTx2Mn3fEvhgcypfX5FGNpIFqTfCuFOCA\",null,null,694462],[[null,571904,\"CAMSJDU5NDc1OGNjLTExZjUtNGY5Mi04YjNjLTEyMTM2ODY1OTFmNBokMDllNjYyZGUtOGQxNy00NWU5LTg5MWYtZWViYWEzNDY5MTdiIgNDQUUqJGFjZjg3Y2FiLWM4ZjQtNDZjNC1iMzA1LTVkNTdhNWJlMTlmYQ\",null,null,null,null,\"Live-action cinematic character reference sheet. A 29-year-old Vietnamese infrastructure and systems engineer, lean athletic but not muscular, light tan skin, short slightly messy black hair, tired focused dark eyes, restrained expression, charcoal crew-neck T-shirt, lightweight black technical overshirt, dark cargo trousers, black field watch and simple cross-body utility bag. He looks like someone who notices exits and electrical panels before people. Front portrait, three-quarter portrait, left and right profile, and full-body neutral standing view. Plain segmented grey background, soft neutral studio lighting, exact identity consistency across all views, authentic Vietnamese facial features, natural skin texture and anatomy. grounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast and Hanoi architecture, natural skin texture, practical 2028 clothing and industrial equipment, physically believable heat haze and sweat, restrained acting, controlled camera movement, 24 fps cinematic motion, subtle film grain, high dynamic range, no fantasy spectacle. no anime, no illustration, no comic-book rendering, no glossy video-game look, no superhero armor, no magic glow, no Chinese imperial costume, no Japanese historical styling, no European medieval architecture, no generic cyberpunk neon, no holograms, no face drift, no age drift, no hairstyle drift, no costume drift, no extra fingers, no duplicated main characters, no generated readable text, no watermark.\",25,\"\",null,\"b58780b6-8218-433c-bdca-6fb13f9e9cd6\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUZRZ0X8_gAC7eBzRHdccFMzFSVKpAjlYJj6gkxZm6voFpniFQxGgmu64zF0-pMBuihjmsUXMFj-QZEKDHe2fvD3zTqI9i-yHmfHTIXoJJ-iOI7XwN6Vv7cQragFr-DkewKeiOqeRHTx2Mn3fEvhgcypfX5FGNpIFqTfCuFOCA\",3],null,[1376,768]]],[\"b4d91c90-5b01-4472-aab2-1bcacb892fa4\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",\"CAI\",null,[[1790106092,630331000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbWF5CgIMSnMgw6esBRNn9yOAnIIO3zTaaZSw403meT4lIMC7DGlMaWND-o4l1jC2FYzS_BKIn4zgJHF0X5DJdiPMPnClnsUV8zYKQaV3DOcrSi80NivCeUQcSk0ksCZTLRUGVpaExY0oljfF4gHz_d95OMI-6AD5IlgEDkUg\",[null,null,[[\"Big breasts?\",null,[[[\"ngực to mà ?\"]]]]],[[[null,2,\"7b965b5d-e710-4d9a-9d24-253ba6e48286\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbWF5CgIMSnMgw6esBRNn9yOAnIIO3zTaaZSw403meT4lIMC7DGlMaWND-o4l1jC2FYzS_BKIn4zgJHF0X5DJdiPMPnClnsUV8zYKQaV3DOcrSi80NivCeUQcSk0ksCZTLRUGVpaExY0oljfF4gHz_d95OMI-6AD5IlgEDkUg\",null,null,120695],[[null,10322356,null,null,null,null,null,\"Big breasts?\",25,\"\",null,\"80fcf81d-8e09-4a04-a22d-1de8c8569a46\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbWF5CgIMSnMgw6esBRNn9yOAnIIO3zTaaZSw403meT4lIMC7DGlMaWND-o4l1jC2FYzS_BKIn4zgJHF0X5DJdiPMPnClnsUV8zYKQaV3DOcrSi80NivCeUQcSk0ksCZTLRUGVpaExY0oljfF4gHz_d95OMI-6AD5IlgEDkUg\",3],null,[1376,768]]],[\"b5b2415a-b104-4e53-bf22-1bd940d2186b\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"d9102dd3-bb7b-4a6b-8135-90e9e3455f30\",\"CAE\",null,[[1790104505,133221000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUazu0_Xip0Px8230pDZrhmBE6DcbMBlniQH7V3twUTrLf7SO7Vcvj1z_3QOPC08UlD4gQbfZXoeZW-fMErVIyyHGUNr0MPTv_7tY7_KCVQP9XpX_oHtJUOAlgvcmjWLvAPWqBwJcs8Pdefn4Ynw46NmLWrke6x_1Qla1iKvCw\",[null,null,[[\"Grounded cinematic realism, extreme heatwave apocalypse in Hanoi 2028. Intense, scorching sunlight creates a visible, shimmering heat haze over a deserted Ba Dinh Square. The asphalt is cracked and dry. Tall, modern Vietnamese government buildings look bleached under a relentless, white-hot sun. Physically believable sweat and parched textures, muted but high-contrast color palette, subtle film grain. No holograms or neon.\",null,[[[\"Grounded cinematic realism, extreme heatwave apocalypse in Hanoi 2028. Intense, scorching sunlight creates a visible, shimmering heat haze over a deserted Ba Dinh Square. The asphalt is cracked and dry. Tall, modern Vietnamese government buildings look bleached under a relentless, white-hot sun. Physically believable sweat and parched textures, muted but high-contrast color palette, subtle film grain. No holograms or neon.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUazu0_Xip0Px8230pDZrhmBE6DcbMBlniQH7V3twUTrLf7SO7Vcvj1z_3QOPC08UlD4gQbfZXoeZW-fMErVIyyHGUNr0MPTv_7tY7_KCVQP9XpX_oHtJUOAlgvcmjWLvAPWqBwJcs8Pdefn4Ynw46NmLWrke6x_1Qla1iKvCw\",null,null,206966],[[null,479066,null,null,null,null,null,\"Grounded cinematic realism, extreme heatwave apocalypse in Hanoi 2028. Intense, scorching sunlight creates a visible, shimmering heat haze over a deserted Ba Dinh Square. The asphalt is cracked and dry. Tall, modern Vietnamese government buildings look bleached under a relentless, white-hot sun. Physically believable sweat and parched textures, muted but high-contrast color palette, subtle film grain. No holograms or neon.\",25,\"\",null,\"d9102dd3-bb7b-4a6b-8135-90e9e3455f30\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUazu0_Xip0Px8230pDZrhmBE6DcbMBlniQH7V3twUTrLf7SO7Vcvj1z_3QOPC08UlD4gQbfZXoeZW-fMErVIyyHGUNr0MPTv_7tY7_KCVQP9XpX_oHtJUOAlgvcmjWLvAPWqBwJcs8Pdefn4Ynw46NmLWrke6x_1Qla1iKvCw\",3],null,[1376,768]]],[\"b6900ed9-ed42-4b6c-80c1-74db6fc6132d\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"f69d66c7-9cd6-459d-a883-753390a8cb25\",\"CAE\",null,[[1790106044,585720000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUazFzv8j1epY7qODet9rTfh2aglcrIHhLR6BCxhOPSdCZWGuwI5HApIMFeeCrOPgGVVzHuVPeNVEqWf15Lw57IN68AMR9kGtEbAb-bLlLSWzY-pKmCfWmQHmS7rrWSzHGEdvOBu5w7xzQWIVyxfJUiPmcW60g5IMDWkW2vkCw\",[null,null,[[\"A beautiful young Vietnamese woman, aged 18-20, in a grounded post-apocalyptic Hanoi setting. She wears a sleek, form-fitting top with thin straps and delicate lace details, suitable for the oppressive heat. Her expression is calm yet determined. Cinematic realism, natural harsh lighting from the blistering sun, visible heat haze in the background. Physically believable textures, authentic Vietnamese face, subtle film grain. Near-future techno-thriller aesthetic.\",null,[[[\"A beautiful young Vietnamese woman, aged 18-20, in a grounded post-apocalyptic Hanoi setting. She wears a sleek, form-fitting top with thin straps and delicate lace details, suitable for the oppressive heat. Her expression is calm yet determined. Cinematic realism, natural harsh lighting from the blistering sun, visible heat haze in the background. Physically believable textures, authentic Vietnamese face, subtle film grain. Near-future techno-thriller aesthetic.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUazFzv8j1epY7qODet9rTfh2aglcrIHhLR6BCxhOPSdCZWGuwI5HApIMFeeCrOPgGVVzHuVPeNVEqWf15Lw57IN68AMR9kGtEbAb-bLlLSWzY-pKmCfWmQHmS7rrWSzHGEdvOBu5w7xzQWIVyxfJUiPmcW60g5IMDWkW2vkCw\",null,null,197433],[[null,766422,null,null,null,null,null,\"A beautiful young Vietnamese woman, aged 18-20, in a grounded post-apocalyptic Hanoi setting. She wears a sleek, form-fitting top with thin straps and delicate lace details, suitable for the oppressive heat. Her expression is calm yet determined. Cinematic realism, natural harsh lighting from the blistering sun, visible heat haze in the background. Physically believable textures, authentic Vietnamese face, subtle film grain. Near-future techno-thriller aesthetic.\",25,\"\",null,\"f69d66c7-9cd6-459d-a883-753390a8cb25\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUazFzv8j1epY7qODet9rTfh2aglcrIHhLR6BCxhOPSdCZWGuwI5HApIMFeeCrOPgGVVzHuVPeNVEqWf15Lw57IN68AMR9kGtEbAb-bLlLSWzY-pKmCfWmQHmS7rrWSzHGEdvOBu5w7xzQWIVyxfJUiPmcW60g5IMDWkW2vkCw\",3],null,[1376,768]]],[\"bdcbe55a-ee7b-497d-a414-25d22d04c096\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"e516fce6-a049-4a7f-b414-5db3660b52fc\",\"CAE\",null,[[1790174038,296806000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUY_2RMjbW4Qrd71immM795La14bTfiQSqYUlm2w480hqwU_Ctv3Yz_jYRewqNieAa_g3bGZpkUYeoFsilY8ZOD0-67hsSWF23WzrQWffIvc5nmpeyS_iuj_ZO4NcUD2bAbpfNRHE1iFpt-z-sRgb_pA42pkZl5rYIzwfyNz\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot inside subterranean B3 basement parking at Me Tri during extreme heatwave. Le Quoc Tien slumps against a cracked concrete pillar in defeat beside a torn empty water pouch and heat-warped debris. Do Minh Kha looms over him in the background with a cold detached expression, silhouette backlit by an ominous beam of deep crimson sunlight piercing through a fractured ceiling fissure. Chiaroscuro high contrast cinematic lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot inside subterranean B3 basement parking at Me Tri during extreme heatwave. Le Quoc Tien slumps against a cracked concrete pillar in defeat beside a torn empty water pouch and heat-warped debris. Do Minh Kha looms over him in the background with a cold detached expression, silhouette backlit by an ominous beam of deep crimson sunlight piercing through a fractured ceiling fissure. Chiaroscuro high contrast cinematic lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\"]]]]],[[[null,1,\"9416e9ba-eeed-43c3-b5d7-15774851c6ae\"],[null,1,\"78e46231-e6cf-43fb-99bc-a4cb96196e24\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUY_2RMjbW4Qrd71immM795La14bTfiQSqYUlm2w480hqwU_Ctv3Yz_jYRewqNieAa_g3bGZpkUYeoFsilY8ZOD0-67hsSWF23WzrQWffIvc5nmpeyS_iuj_ZO4NcUD2bAbpfNRHE1iFpt-z-sRgb_pA42pkZl5rYIzwfyNz\",null,null,127848],[[null,314608653,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot inside subterranean B3 basement parking at Me Tri during extreme heatwave. Le Quoc Tien slumps against a cracked concrete pillar in defeat beside a torn empty water pouch and heat-warped debris. Do Minh Kha looms over him in the background with a cold detached expression, silhouette backlit by an ominous beam of deep crimson sunlight piercing through a fractured ceiling fissure. Chiaroscuro high contrast cinematic lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.\",25,\"\",null,\"e516fce6-a049-4a7f-b414-5db3660b52fc\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUY_2RMjbW4Qrd71immM795La14bTfiQSqYUlm2w480hqwU_Ctv3Yz_jYRewqNieAa_g3bGZpkUYeoFsilY8ZOD0-67hsSWF23WzrQWffIvc5nmpeyS_iuj_ZO4NcUD2bAbpfNRHE1iFpt-z-sRgb_pA42pkZl5rYIzwfyNz\",3],null,[1376,768]]],[\"c38a6066-9d26-44da-8a14-8c7e260f7f8d\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"e2367807-01e9-4bf4-a522-1f8549998e20\",\"CAE\",null,[[1790099008,171508000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZ3qYdMe-lNRWEyiCcRXUZHs63NHB40gTE6N-0m8iqcLmWSyC4r_1Z4Md8IxwyEcv5P0EKu2uV1I3IjqOS1Igx3DfYAf1yBknNKtYX8UprHaSK2_snwMqM_jJj9pZS0oe-BnymuvNBefI88hk32_ynKCPEVEMhuYwyRYOi4\",[null,null,[[\"Single reference image of Massive modern glass shopping mall in Ha Dong district under a terrifying dark crimson sun and apocalyptic red sky, giant glass windows completely fogged with thick condensation from dark boiling interior, heat ripples warping the melting empty asphalt parking lot outside. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",null,[[[\"Single reference image of Massive modern glass shopping mall in Ha Dong district under a terrifying dark crimson sun and apocalyptic red sky, giant glass windows completely fogged with thick condensation from dark boiling interior, heat ripples warping the melting empty asphalt parking lot outside. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZ3qYdMe-lNRWEyiCcRXUZHs63NHB40gTE6N-0m8iqcLmWSyC4r_1Z4Md8IxwyEcv5P0EKu2uV1I3IjqOS1Igx3DfYAf1yBknNKtYX8UprHaSK2_snwMqM_jJj9pZS0oe-BnymuvNBefI88hk32_ynKCPEVEMhuYwyRYOi4\",null,null,129129],[[null,998037757,null,null,null,null,null,\"Single reference image of Massive modern glass shopping mall in Ha Dong district under a terrifying dark crimson sun and apocalyptic red sky, giant glass windows completely fogged with thick condensation from dark boiling interior, heat ripples warping the melting empty asphalt parking lot outside. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",25,\"\",null,\"e2367807-01e9-4bf4-a522-1f8549998e20\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUZ3qYdMe-lNRWEyiCcRXUZHs63NHB40gTE6N-0m8iqcLmWSyC4r_1Z4Md8IxwyEcv5P0EKu2uV1I3IjqOS1Igx3DfYAf1yBknNKtYX8UprHaSK2_snwMqM_jJj9pZS0oe-BnymuvNBefI88hk32_ynKCPEVEMhuYwyRYOi4\",3],null,[1376,768]]],[\"c436b109-dd00-498d-806d-b6bddc9a3bbf\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"23070ed9-c3a8-4070-a111-318ef1ed4f3a\",\"CAE\",null,[[1790174596,878212000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZvtcb7JKMsKXiWhau9tVOeTFhjL4Ghoh6Kh4I4MQPtgEmvFGWAPJvNHNNIbMyebj-1fSKG39c6HZISwcaOP4f75m_p5pah9K1wN-8kjHbBnZKSExqM2sxlSm7azZeQo6QCVEPTbZ1uuvb0IqjXkcliAd1-vzhtBjLkY-iA_A\",[null,null,null,null,1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUZvtcb7JKMsKXiWhau9tVOeTFhjL4Ghoh6Kh4I4MQPtgEmvFGWAPJvNHNNIbMyebj-1fSKG39c6HZISwcaOP4f75m_p5pah9K1wN-8kjHbBnZKSExqM2sxlSm7azZeQo6QCVEPTbZ1uuvb0IqjXkcliAd1-vzhtBjLkY-iA_A\",null,null,188067],[null,[null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUZvtcb7JKMsKXiWhau9tVOeTFhjL4Ghoh6Kh4I4MQPtgEmvFGWAPJvNHNNIbMyebj-1fSKG39c6HZISwcaOP4f75m_p5pah9K1wN-8kjHbBnZKSExqM2sxlSm7azZeQo6QCVEPTbZ1uuvb0IqjXkcliAd1-vzhtBjLkY-iA_A\",0],[1376,768]]],[\"c6bef467-362b-4d7d-86bd-7734cf16379f\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"bba71aa9-a24c-43bc-a42e-e0f140a426e3\",\"CAE\",null,[[1790098596,970493000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUb-BM8_6ESYGjjbTxXeNk_s7oGQUYcYM8w7CJ6WDywp6AfgVUQKZyZxAJTYBSIUzVJ4H54m29duffz8TMPQK7m2dXU3R0qTRNFmyoieSqpTWXCIFmOj03LYg0UpjvrOzP0OLv1REt6rmxPyY3WQzR3DSqSNPZ3-046KxxNfOA\",[null,null,[[\"Single reference image of Chubby orange tabby cat with big green eyes, blue apron, straw hat. Walks upright. Pixar-style 3D.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that doesn't distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",null,[[[\"Single reference image of Chubby orange tabby cat with big green eyes, blue apron, straw hat. Walks upright. Pixar-style 3D.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that doesn't distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUb-BM8_6ESYGjjbTxXeNk_s7oGQUYcYM8w7CJ6WDywp6AfgVUQKZyZxAJTYBSIUzVJ4H54m29duffz8TMPQK7m2dXU3R0qTRNFmyoieSqpTWXCIFmOj03LYg0UpjvrOzP0OLv1REt6rmxPyY3WQzR3DSqSNPZ3-046KxxNfOA\",null,null,133223],[[null,924792756,null,null,null,null,null,\"Single reference image of Chubby orange tabby cat with big green eyes, blue apron, straw hat. Walks upright. Pixar-style 3D.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that doesn't distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",25,\"\",null,\"bba71aa9-a24c-43bc-a42e-e0f140a426e3\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUb-BM8_6ESYGjjbTxXeNk_s7oGQUYcYM8w7CJ6WDywp6AfgVUQKZyZxAJTYBSIUzVJ4H54m29duffz8TMPQK7m2dXU3R0qTRNFmyoieSqpTWXCIFmOj03LYg0UpjvrOzP0OLv1REt6rmxPyY3WQzR3DSqSNPZ3-046KxxNfOA\",2],null,[768,1376]]],[\"c86e9fac-57bb-4fc3-a85f-d751ecefdcc8\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"3197d46b-0a13-463c-8aaf-9dd5f1416e6e\",\"CAE\",null,[[1790099933,333177000],\"0-3s: Camera pushes rapidly toward fogged glass doors as desperate hands slam against the condensation from steaming dark interiors of Dai Ha Mall Heat Trap. 3-6s: Pan up sharply to the terrifying dark crimson sun blazing in a blood-red hazy sky. 6-8s: Violent heat waves distort the melting asphalt parking lot in the foreground. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\",null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYvaqvdsuNtIAJuK_1bJx2k71A4qAsIBGQl4y-gYfvW33GRcSoTKs7OZyN32kVyQhFqsM6j7V_KUbwVNcbeHEGPsuAjft_N_JFjAChQSe4C54ksgm701PhETzSBgURwCqA-4tqYmwmm1tCnJ27AiVlaulcyjlbfqRt8j4pA8A\",[null,[[\"veo_3_1_i2v_lite\",2,[1],null,2,1],[[null,1,\"ce812adb-5fef-42cb-9a38-97b2e1bac60b\",[null,0.0038759689922481244,1,0.9961240310077519]]]],[[null,null,[[[\"0-3s: Camera pushes rapidly toward fogged glass doors as desperate hands slam against the condensation from steaming dark interiors of Dai Ha Mall Heat Trap. 3-6s: Pan up sharply to the terrifying dark crimson sun blazing in a blood-red hazy sky. 6-8s: Violent heat waves distort the melting asphalt parking lot in the foreground. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\"]]]]],null,1],null,[3],1,\"https://lh3.googleusercontent.com/asb/AB-nOUYvaqvdsuNtIAJuK_1bJx2k71A4qAsIBGQl4y-gYfvW33GRcSoTKs7OZyN32kVyQhFqsM6j7V_KUbwVNcbeHEGPsuAjft_N_JFjAChQSe4C54ksgm701PhETzSBgURwCqA-4tqYmwmm1tCnJ27AiVlaulcyjlbfqRt8j4pA8A\",null,null,6169385],null,[[null,423232,null,null,null,null,null,\"\\u003croot\\u003e\\n \\u003ccontext\\u003e\\n \\u003c/context\\u003e\\n \\u003cinstruction\\u003e\\n \\u003cprompt\\u003e0-3s: Camera pushes rapidly toward fogged glass doors as desperate hands slam against the condensation from steaming dark interiors of Dai Ha Mall Heat Trap. 3-6s: Pan up sharply to the terrifying dark crimson sun blazing in a blood-red hazy sky. 6-8s: Violent heat waves distort the melting asphalt parking lot in the foreground. Audio: natural ambient sounds only, no background music, no narration, no voiceover. Negative: subtitles, captions, watermark, text on screen, logo, blurry faces, distorted hands.\\u003c/prompt\\u003e\\n \\u003c/instruction\\u003e\\n\\u003c/root\\u003e\",\"https://lh3.googleusercontent.com/asb/AB-nOUYvaqvdsuNtIAJuK_1bJx2k71A4qAsIBGQl4y-gYfvW33GRcSoTKs7OZyN32kVyQhFqsM6j7V_KUbwVNcbeHEGPsuAjft_N_JFjAChQSe4C54ksgm701PhETzSBgURwCqA-4tqYmwmm1tCnJ27AiVlaulcyjlbfqRt8j4pA8A\",null,null,null,\"veo_3_1_i2v_lite\",\"\",null,false,2],[null,null,[8]],[\"c86e9fac-57bb-4fc3-a85f-d751ecefdcc8\"]]],[\"c8939cac-021c-4000-a355-ec23628e5ea0\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"2c817534-e7d9-4711-ba06-8da52e020080\",\"CAE\",null,[[1790099773,817655000],\"Camera pans slowly across cracked asphalt under a red burning sun.\",null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUaV1tO8-xovmpV_inv5eoc_0bAl-yyrighrAbfO8zIk73RGamYKaeVuga4GD2bcsrLYdhKRXIt66KXFrZsejmiexvPi7-afxasqy3H7bww-Qkjmp4oH8wyG3GSmUoHN9gkQCGwdWdWLFLJ2ekmHX6paaHtQr8WMqiJSoaouCg\",[null,[[\"veo_3_1_i2v_lite\",2,[1],null,2,1],[[null,1,\"a6010398-57c9-4e27-a89f-31ed0ddf2d1a\",[null,0.0038759689922481244,1,0.9961240310077519]]]],[[null,null,[[[\"Camera pans slowly across cracked asphalt under a red burning sun.\"]]]]],null,1],null,[3],1,\"https://lh3.googleusercontent.com/asb/AB-nOUaV1tO8-xovmpV_inv5eoc_0bAl-yyrighrAbfO8zIk73RGamYKaeVuga4GD2bcsrLYdhKRXIt66KXFrZsejmiexvPi7-afxasqy3H7bww-Qkjmp4oH8wyG3GSmUoHN9gkQCGwdWdWLFLJ2ekmHX6paaHtQr8WMqiJSoaouCg\",null,null,5280152],null,[[null,876437,null,null,null,null,null,\"\\u003croot\\u003e\\n \\u003ccontext\\u003e\\n \\u003c/context\\u003e\\n \\u003cinstruction\\u003e\\n \\u003cprompt\\u003eCamera pans slowly across cracked asphalt under a red burning sun.\\u003c/prompt\\u003e\\n \\u003c/instruction\\u003e\\n\\u003c/root\\u003e\",\"https://lh3.googleusercontent.com/asb/AB-nOUaV1tO8-xovmpV_inv5eoc_0bAl-yyrighrAbfO8zIk73RGamYKaeVuga4GD2bcsrLYdhKRXIt66KXFrZsejmiexvPi7-afxasqy3H7bww-Qkjmp4oH8wyG3GSmUoHN9gkQCGwdWdWLFLJ2ekmHX6paaHtQr8WMqiJSoaouCg\",null,null,null,\"veo_3_1_i2v_lite\",\"\",null,false,2],[null,null,[8]],[\"c8939cac-021c-4000-a355-ec23628e5ea0\"]]],[\"ca9eac0a-7816-4104-af03-8f98001f2915\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"d0e3e32c-df9c-4641-bce4-dd9ca73a4f9b\",\"CAE\",null,[[1790104962,53428000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYsXiMFzL5yVqksvdhx4KnzGYCJp6UsTDwP5jhnKxaFKjYDQB6mdF-T7yCiHl3H3zd4p-jeqcajDOxceub52tl7jRl6hV0Fd-17OIpT4adugt1wAvZifAo0-GgZCAoLY0mGjuPsbs7yVYOaY5yZD9UagJKgIrt8dn3VwLP5xA\",[null,null,[[\"A wide cinematic shot of a scorched mountain range in Vietnam, 2028. The peaks are jagged and dry, with deep shadows and brilliant, oppressive sunlight hitting the sun-baked rock faces. A lone, abandoned 2028 industrial outpost sits precariously on a ridge. Physically believable heat haze and atmospheric dust. Grounded live-action aesthetic, high dynamic range, restrained camera feel, subtle film grain.\",null,[[[\"A wide cinematic shot of a scorched mountain range in Vietnam, 2028. The peaks are jagged and dry, with deep shadows and brilliant, oppressive sunlight hitting the sun-baked rock faces. A lone, abandoned 2028 industrial outpost sits precariously on a ridge. Physically believable heat haze and atmospheric dust. Grounded live-action aesthetic, high dynamic range, restrained camera feel, subtle film grain.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUYsXiMFzL5yVqksvdhx4KnzGYCJp6UsTDwP5jhnKxaFKjYDQB6mdF-T7yCiHl3H3zd4p-jeqcajDOxceub52tl7jRl6hV0Fd-17OIpT4adugt1wAvZifAo0-GgZCAoLY0mGjuPsbs7yVYOaY5yZD9UagJKgIrt8dn3VwLP5xA\",null,null,228740],[[null,593792,null,null,null,null,null,\"A wide cinematic shot of a scorched mountain range in Vietnam, 2028. The peaks are jagged and dry, with deep shadows and brilliant, oppressive sunlight hitting the sun-baked rock faces. A lone, abandoned 2028 industrial outpost sits precariously on a ridge. Physically believable heat haze and atmospheric dust. Grounded live-action aesthetic, high dynamic range, restrained camera feel, subtle film grain.\",25,\"\",null,\"d0e3e32c-df9c-4641-bce4-dd9ca73a4f9b\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUYsXiMFzL5yVqksvdhx4KnzGYCJp6UsTDwP5jhnKxaFKjYDQB6mdF-T7yCiHl3H3zd4p-jeqcajDOxceub52tl7jRl6hV0Fd-17OIpT4adugt1wAvZifAo0-GgZCAoLY0mGjuPsbs7yVYOaY5yZD9UagJKgIrt8dn3VwLP5xA\",3],null,[1376,768]]],[\"cd20c077-1f3e-4432-9bbc-6d19af7a5a16\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"420931e8-d444-4a59-8ba8-a745cbeead17\",\"CAE\",null,[[1784545966,119130000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUb6YBqsZvC6YSp7nU_rOBQxAnxihDc4VD35WLn8YcPT3q_SCJSlgwvQJ3CdE0qb91Oi2-UZwI1qqLEd2DAYspddAksc_5ENYcQOTzUX10TfAiX1LEY0Q2iQPSTWY3YP9vKJNDOzhgbkudjm8jXPdFkApTZKB-Fx9rCzHLdnBw\",[null,null,null,null,1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUb6YBqsZvC6YSp7nU_rOBQxAnxihDc4VD35WLn8YcPT3q_SCJSlgwvQJ3CdE0qb91Oi2-UZwI1qqLEd2DAYspddAksc_5ENYcQOTzUX10TfAiX1LEY0Q2iQPSTWY3YP9vKJNDOzhgbkudjm8jXPdFkApTZKB-Fx9rCzHLdnBw\",null,null,368502],[null,[null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUb6YBqsZvC6YSp7nU_rOBQxAnxihDc4VD35WLn8YcPT3q_SCJSlgwvQJ3CdE0qb91Oi2-UZwI1qqLEd2DAYspddAksc_5ENYcQOTzUX10TfAiX1LEY0Q2iQPSTWY3YP9vKJNDOzhgbkudjm8jXPdFkApTZKB-Fx9rCzHLdnBw\",0],[1376,768]]],[\"ce812adb-5fef-42cb-9a38-97b2e1bac60b\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"fb28016d-5ed3-47b0-9a38-6f98eaa8b439\",\"CAE\",null,[[1790099243,507045000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUa57Zw_aDZZh7dEML9KwifC0P9iCfIcqGFwOpGOrXeeVr4qKEIoSLoiHYLi0b8HGFAkBvJ4lLDe8834nZVL3Vz2FMZpOKmWgjtk7dhxbULSdfKVglbE0JcrZ9l-7WKOWCfYh8Z0Bb7A7htprMxyYbipRgLnmMhTprA-P6f1\",[null,null,[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Terrifying apocalyptic cinematic shot of Dai Ha Mall Heat Trap in Ha Dong under an eerie blood-red sky with a massive dark crimson sun. Dense crowd of panicked people inside banging frantically against fogged-up glass doors from dark steaming interiors. Heat ripples distorting the melting asphalt road outside. High contrast dramatic disaster lighting, 35mm RAW photograph.\",null,[[[\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Terrifying apocalyptic cinematic shot of Dai Ha Mall Heat Trap in Ha Dong under an eerie blood-red sky with a massive dark crimson sun. Dense crowd of panicked people inside banging frantically against fogged-up glass doors from dark steaming interiors. Heat ripples distorting the melting asphalt road outside. High contrast dramatic disaster lighting, 35mm RAW photograph.\"]]]]],[[[null,1,\"c38a6066-9d26-44da-8a14-8c7e260f7f8d\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUa57Zw_aDZZh7dEML9KwifC0P9iCfIcqGFwOpGOrXeeVr4qKEIoSLoiHYLi0b8HGFAkBvJ4lLDe8834nZVL3Vz2FMZpOKmWgjtk7dhxbULSdfKVglbE0JcrZ9l-7WKOWCfYh8Z0Bb7A7htprMxyYbipRgLnmMhTprA-P6f1\",null,null,180541],[[null,505891029,null,null,null,null,null,\"Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Terrifying apocalyptic cinematic shot of Dai Ha Mall Heat Trap in Ha Dong under an eerie blood-red sky with a massive dark crimson sun. Dense crowd of panicked people inside banging frantically against fogged-up glass doors from dark steaming interiors. Heat ripples distorting the melting asphalt road outside. High contrast dramatic disaster lighting, 35mm RAW photograph.\",25,\"\",null,\"fb28016d-5ed3-47b0-9a38-6f98eaa8b439\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUa57Zw_aDZZh7dEML9KwifC0P9iCfIcqGFwOpGOrXeeVr4qKEIoSLoiHYLi0b8HGFAkBvJ4lLDe8834nZVL3Vz2FMZpOKmWgjtk7dhxbULSdfKVglbE0JcrZ9l-7WKOWCfYh8Z0Bb7A7htprMxyYbipRgLnmMhTprA-P6f1\",3],null,[1376,768]]],[\"cea6d7a9-29a2-4b36-aa89-60358b4998b5\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",\"CAM\",null,[[1790105496,336772000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUYqY6WvjH9Nb5EcXdBRV5tdz2uVg78eCJBIcy9oVHWOucDn97oglDoPI_XHdGOkbubZiMnhhKV0xszCiYedZ1835CntABzIvo3q80yr6-vpoQNnlcItGHwmqpOHYgMVsABu6J8cjUvAr4Gkf2VWyQKcbYEqUtJC_AdWVT7hSA\",[null,null,[[\"Larger breasts, fair skin, beautiful.\",null,[[[\"ngực to hơn, da trắng, xinh đẹp\"]]]]],[[[null,2,\"07f97f41-209d-458b-ad17-55606514eb6a\"]]],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUYqY6WvjH9Nb5EcXdBRV5tdz2uVg78eCJBIcy9oVHWOucDn97oglDoPI_XHdGOkbubZiMnhhKV0xszCiYedZ1835CntABzIvo3q80yr6-vpoQNnlcItGHwmqpOHYgMVsABu6J8cjUvAr4Gkf2VWyQKcbYEqUtJC_AdWVT7hSA\",null,null,186887],[[null,1743582705,null,null,null,null,null,\"Larger breasts, fair skin, beautiful.\",25,\"\",null,\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUYqY6WvjH9Nb5EcXdBRV5tdz2uVg78eCJBIcy9oVHWOucDn97oglDoPI_XHdGOkbubZiMnhhKV0xszCiYedZ1835CntABzIvo3q80yr6-vpoQNnlcItGHwmqpOHYgMVsABu6J8cjUvAr4Gkf2VWyQKcbYEqUtJC_AdWVT7hSA\",3],null,[1376,768]]],[\"d9a829c4-cd2d-491c-8773-7bee1eeb0aba\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"3ddd6fbc-8834-4868-a7fa-5e1dc68d04d7\",\"CAE\",null,[[1790099782,85545000],\"Camera pans slowly across cracked asphalt under a red burning sun.\",null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUaC3tTzV--XzTAPQrbDeZ3rkuvfi-pkS_r-ihnrwiZYTS8MA54E8ZEckDexBIvVpkSo6Ixcn836oVlM7UxkkClKQ4ByaAHSQlTBdMZphK_JSy-xQoCjm1moUrC1SUjAaw0AlApHShO6nrzZZpB5VZPZ5ixm6vaOlSMOnu-UCQ\",[null,[[\"abra_i2v_8s\",2,[1],null,2,1],[[null,1,\"a6010398-57c9-4e27-a89f-31ed0ddf2d1a\",[null,0.0038759689922481244,1,0.9961240310077519]]]],[[null,null,[[[\"Camera pans slowly across cracked asphalt under a red burning sun.\"]]]]],null,1],null,[3],1,\"https://lh3.googleusercontent.com/asb/AB-nOUaC3tTzV--XzTAPQrbDeZ3rkuvfi-pkS_r-ihnrwiZYTS8MA54E8ZEckDexBIvVpkSo6Ixcn836oVlM7UxkkClKQ4ByaAHSQlTBdMZphK_JSy-xQoCjm1moUrC1SUjAaw0AlApHShO6nrzZZpB5VZPZ5ixm6vaOlSMOnu-UCQ\",null,null,4125539],null,[[null,97176,null,null,null,null,null,\"Camera pans slowly across cracked asphalt under a red burning sun.\",\"https://lh3.googleusercontent.com/asb/AB-nOUaC3tTzV--XzTAPQrbDeZ3rkuvfi-pkS_r-ihnrwiZYTS8MA54E8ZEckDexBIvVpkSo6Ixcn836oVlM7UxkkClKQ4ByaAHSQlTBdMZphK_JSy-xQoCjm1moUrC1SUjAaw0AlApHShO6nrzZZpB5VZPZ5ixm6vaOlSMOnu-UCQ\",null,null,null,\"abra_i2v_8s\",\"\",null,false,2],[null,null,[8]],[\"d9a829c4-cd2d-491c-8773-7bee1eeb0aba\"]]],[\"dc6cb5cb-1515-4607-8d63-35b7d4c79df9\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"4b6e1f6c-ad29-4c79-ac8b-840e0ff929c4\",\"CAE\",null,[[1790098607,247715000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUa47Pmq4072nP_MLX-4PwDgU4CSJh7ObtKVwohLDOenLL8qVxLVLj9UorLogrMvxxTxCV3CBKkI7t68FzlaMUVKZ4r0tdNPB6_A5itIZrlWy67cxEJC20v9h96h03WMVSy0VNUxLqJ0j4-Gv6dMERM61ANPz5ev8h-1bwFlCA\",[null,null,[[\"Single reference image of Bustling Southeast Asian open-air market with colorful awnings, hanging lanterns, stone walkway.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",null,[[[\"Single reference image of Bustling Southeast Asian open-air market with colorful awnings, hanging lanterns, stone walkway.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUa47Pmq4072nP_MLX-4PwDgU4CSJh7ObtKVwohLDOenLL8qVxLVLj9UorLogrMvxxTxCV3CBKkI7t68FzlaMUVKZ4r0tdNPB6_A5itIZrlWy67cxEJC20v9h96h03WMVSy0VNUxLqJ0j4-Gv6dMERM61ANPz5ev8h-1bwFlCA\",null,null,247630],[[null,366821445,null,null,null,null,null,\"Single reference image of Bustling Southeast Asian open-air market with colorful awnings, hanging lanterns, stone walkway.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",25,\"\",null,\"4b6e1f6c-ad29-4c79-ac8b-840e0ff929c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUa47Pmq4072nP_MLX-4PwDgU4CSJh7ObtKVwohLDOenLL8qVxLVLj9UorLogrMvxxTxCV3CBKkI7t68FzlaMUVKZ4r0tdNPB6_A5itIZrlWy67cxEJC20v9h96h03WMVSy0VNUxLqJ0j4-Gv6dMERM61ANPz5ev8h-1bwFlCA\",3],null,[1376,768]]],[\"deb54d26-dbdb-4351-99f5-04400fef123c\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"50ce51e4-768e-4eb0-abce-1df3f94acae6\",\"CAE\",null,[[1790098627,137046000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbMphQQcSl58Ttg-OlIDBH04v5kearkZeAm6d_vRZsNqS0TDb74HWc2iFxhg9YxcBwC3rotyzkMI39CFSQsQVkDy_ELePDKdpGkiMQNZhC-tvgsHsioLk3c3H-wkz8Bp-E25iNrmDYW0i7xD8GAPlZ30WLg5jbGUDTebkc8rg\",[null,null,[[\"Single reference image of Small rustic wooden market stall with thatched bamboo roof, crushed ice display, hanging brass scale.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",null,[[[\"Single reference image of Small rustic wooden market stall with thatched bamboo roof, crushed ice display, hanging brass scale.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbMphQQcSl58Ttg-OlIDBH04v5kearkZeAm6d_vRZsNqS0TDb74HWc2iFxhg9YxcBwC3rotyzkMI39CFSQsQVkDy_ELePDKdpGkiMQNZhC-tvgsHsioLk3c3H-wkz8Bp-E25iNrmDYW0i7xD8GAPlZ30WLg5jbGUDTebkc8rg\",null,null,215090],[[null,784456559,null,null,null,null,null,\"Single reference image of Small rustic wooden market stall with thatched bamboo roof, crushed ice display, hanging brass scale.. 3D animated style, Pixar-quality rendering, Disney-Pixar aesthetic. Smooth subsurface scattering skin, expressive cartoon eyes, stylized proportions, vibrant saturated colors. NOT photorealistic, NOT photograph, NOT live action, NOT anime, NOT flat 2D. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, global illumination, highly detailed\",25,\"\",null,\"50ce51e4-768e-4eb0-abce-1df3f94acae6\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbMphQQcSl58Ttg-OlIDBH04v5kearkZeAm6d_vRZsNqS0TDb74HWc2iFxhg9YxcBwC3rotyzkMI39CFSQsQVkDy_ELePDKdpGkiMQNZhC-tvgsHsioLk3c3H-wkz8Bp-E25iNrmDYW0i7xD8GAPlZ30WLg5jbGUDTebkc8rg\",3],null,[1376,768]]],[\"e0ca950b-db30-416a-b2d2-fe98a9bf1344\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",\"CAE\",null,[[1790105368,68953000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbMYl1paWIcyMwF6QXtlWmzejB8hrgL0xEqJSL56e5IJ75xju1wzTsWagCZZSct_UdMP7ECL3NKurifqhEoD10Jgas-w6K4i9YeCw1Wa3GUlaeoVdcXw9YDTkl5yrVEj4eig4AqIIIHVLVREPROwsdjvdGinXZCC_ndP9cb\",[null,null,[[\"Grounded cinematic realism, a beautiful young Vietnamese woman in post-apocalyptic Hanoi 2028. She wears a sleek, form-fitting practical tactical bodysuit made of dark moisture-wicking material, with a lightweight, semi-translucent flowing silk scarf catching a dry breeze. Authentic Vietnamese features, natural skin texture with subtle sweat from the extreme heat. She stands amidst parched ruins, restrained pose, high dynamic range, subtle film grain. Near-future techno-thriller style.\",null,[[[\"Grounded cinematic realism, a beautiful young Vietnamese woman in post-apocalyptic Hanoi 2028. She wears a sleek, form-fitting practical tactical bodysuit made of dark moisture-wicking material, with a lightweight, semi-translucent flowing silk scarf catching a dry breeze. Authentic Vietnamese features, natural skin texture with subtle sweat from the extreme heat. She stands amidst parched ruins, restrained pose, high dynamic range, subtle film grain. Near-future techno-thriller style.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbMYl1paWIcyMwF6QXtlWmzejB8hrgL0xEqJSL56e5IJ75xju1wzTsWagCZZSct_UdMP7ECL3NKurifqhEoD10Jgas-w6K4i9YeCw1Wa3GUlaeoVdcXw9YDTkl5yrVEj4eig4AqIIIHVLVREPROwsdjvdGinXZCC_ndP9cb\",null,null,196693],[[null,589694,null,null,null,null,null,\"Grounded cinematic realism, a beautiful young Vietnamese woman in post-apocalyptic Hanoi 2028. She wears a sleek, form-fitting practical tactical bodysuit made of dark moisture-wicking material, with a lightweight, semi-translucent flowing silk scarf catching a dry breeze. Authentic Vietnamese features, natural skin texture with subtle sweat from the extreme heat. She stands amidst parched ruins, restrained pose, high dynamic range, subtle film grain. Near-future techno-thriller style.\",25,\"\",null,\"7212e0d2-229b-4032-95e3-4c363d2b46c4\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbMYl1paWIcyMwF6QXtlWmzejB8hrgL0xEqJSL56e5IJ75xju1wzTsWagCZZSct_UdMP7ECL3NKurifqhEoD10Jgas-w6K4i9YeCw1Wa3GUlaeoVdcXw9YDTkl5yrVEj4eig4AqIIIHVLVREPROwsdjvdGinXZCC_ndP9cb\",3],null,[1376,768]]],[\"e12021b9-1f91-4a65-a9e2-f1ddbffbf42d\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"bd7eacf9-d385-4561-bf0b-62e3e8a253dc\",\"CAE\",null,[[1790098998,48960000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbjscyiBm8tBkbaaSe-QeXK6klPWhc2iKUqI52AmLRwvT9mN9ejkVihSUECOFmu9Q8YoXlQbMd3vBhtklNwBhjfPxk_EVVcHx8Tyg9UPQ-7TcijRX5gLI6yl8HRpIQQo6gFuAu_2rRaMyeb1dGrgspXV1O9lgAOWh_6ohaiwA\",[null,null,[[\"Single reference image of Wide bustling urban avenue in Hanoi during morning rush hour, elevated concrete metro tracks overhead with modern green Cat Linh - Ha Dong passenger train gliding past sleek glass skyscrapers and dense commuter traffic under a clear morning sky. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",null,[[[\"Single reference image of Wide bustling urban avenue in Hanoi during morning rush hour, elevated concrete metro tracks overhead with modern green Cat Linh - Ha Dong passenger train gliding past sleek glass skyscrapers and dense commuter traffic under a clear morning sky. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbjscyiBm8tBkbaaSe-QeXK6klPWhc2iKUqI52AmLRwvT9mN9ejkVihSUECOFmu9Q8YoXlQbMd3vBhtklNwBhjfPxk_EVVcHx8Tyg9UPQ-7TcijRX5gLI6yl8HRpIQQo6gFuAu_2rRaMyeb1dGrgspXV1O9lgAOWh_6ohaiwA\",null,null,256980],[[null,369755011,null,null,null,null,null,\"Single reference image of Wide bustling urban avenue in Hanoi during morning rush hour, elevated concrete metro tracks overhead with modern green Cat Linh - Ha Dong passenger train gliding past sleek glass skyscrapers and dense commuter traffic under a clear morning sky. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed\",25,\"\",null,\"bd7eacf9-d385-4561-bf0b-62e3e8a253dc\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbjscyiBm8tBkbaaSe-QeXK6klPWhc2iKUqI52AmLRwvT9mN9ejkVihSUECOFmu9Q8YoXlQbMd3vBhtklNwBhjfPxk_EVVcHx8Tyg9UPQ-7TcijRX5gLI6yl8HRpIQQo6gFuAu_2rRaMyeb1dGrgspXV1O9lgAOWh_6ohaiwA\",3],null,[1376,768]]],[\"ffd129ac-2cb2-4c5d-a059-e37be9782118\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"e03db69f-0402-4e01-8d10-20a700e1d064\",\"CAE\",null,[[1790098624,387715000],null,null,null,null,\"https://lh3.googleusercontent.com/asb/AB-nOUbGns3Wmho3ZegUvxq-tGhm-YgFyDUJCtY0CVQ6zTAniolbts8gYzxsyhCvu4B5zsexyN9cxdHiga8CAp31bM_IjVI0Hjt-aS_qO-xy-F1vRHLLMgLry6Fvomu67tGtnrmOenoqmDByq4Yrw5BPdAlacY0z58Ahjzp74ZwmJw\",[null,null,[[\"A cute Vietnamese shorthair cat sitting on a weathered wooden stool in a dimly lit, high-tech Hanoi apartment. Cinematic realism, grounded live-action aesthetic, subtle film grain, soft tungsten lighting from a nearby monitor reflecting in the cat's eyes. Authentic textures, near-future techno-thriller atmosphere.\",null,[[[\"A cute Vietnamese shorthair cat sitting on a weathered wooden stool in a dimly lit, high-tech Hanoi apartment. Cinematic realism, grounded live-action aesthetic, subtle film grain, soft tungsten lighting from a nearby monitor reflecting in the cat's eyes. Authentic textures, near-future techno-thriller atmosphere.\"]]]]],[],1],null,null,1,\"https://lh3.googleusercontent.com/asb/AB-nOUbGns3Wmho3ZegUvxq-tGhm-YgFyDUJCtY0CVQ6zTAniolbts8gYzxsyhCvu4B5zsexyN9cxdHiga8CAp31bM_IjVI0Hjt-aS_qO-xy-F1vRHLLMgLry6Fvomu67tGtnrmOenoqmDByq4Yrw5BPdAlacY0z58Ahjzp74ZwmJw\",null,null,176855],[[null,754164,null,null,null,null,null,\"A cute Vietnamese shorthair cat sitting on a weathered wooden stool in a dimly lit, high-tech Hanoi apartment. Cinematic realism, grounded live-action aesthetic, subtle film grain, soft tungsten lighting from a nearby monitor reflecting in the cat's eyes. Authentic textures, near-future techno-thriller atmosphere.\",25,\"\",null,\"e03db69f-0402-4e01-8d10-20a700e1d064\",null,\"https://lh3.googleusercontent.com/asb/AB-nOUbGns3Wmho3ZegUvxq-tGhm-YgFyDUJCtY0CVQ6zTAniolbts8gYzxsyhCvu4B5zsexyN9cxdHiga8CAp31bM_IjVI0Hjt-aS_qO-xy-F1vRHLLMgLry6Fvomu67tGtnrmOenoqmDByq4Yrw5BPdAlacY0z58Ahjzp74ZwmJw\",3],null,[1376,768]]]],[[\"achernar\",3,\"Achernar\",[\"achernar\",null,null,null,null,null,null,null,null,null,[[\"Achernar\",\"Female, soft, high pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Achernar.wav\"]]]],[\"achird\",3,\"Achird\",[\"achird\",null,null,null,null,null,null,null,null,null,[[\"Achird\",\"Male, friendly, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Achird.wav\"]]]],[\"algenib\",3,\"Algenib\",[\"algenib\",null,null,null,null,null,null,null,null,null,[[\"Algenib\",\"Male, gravelly, low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Algenib.wav\"]]]],[\"algieba\",3,\"Algieba\",[\"algieba\",null,null,null,null,null,null,null,null,null,[[\"Algieba\",\"Male, easy-going, mid-low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Algieba.wav\"]]]],[\"alnilam\",3,\"Alnilam\",[\"alnilam\",null,null,null,null,null,null,null,null,null,[[\"Alnilam\",\"Male, firm, mid-low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Alnilam.wav\"]]]],[\"aoede\",3,\"Aoede\",[\"aoede\",null,null,null,null,null,null,null,null,null,[[\"Aoede\",\"Female, breezy, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Aoede.wav\"]]]],[\"autonoe\",3,\"Autonoe\",[\"autonoe\",null,null,null,null,null,null,null,null,null,[[\"Autonoe\",\"Female, bright, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Autonoe.wav\"]]]],[\"callirrhoe\",3,\"Callirrhoe\",[\"callirrhoe\",null,null,null,null,null,null,null,null,null,[[\"Callirrhoe\",\"Female, easy-going, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Callirrhoe.wav\"]]]],[\"charon\",3,\"Charon\",[\"charon\",null,null,null,null,null,null,null,null,null,[[\"Charon\",\"Male, informative, lower pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Charon.wav\"]]]],[\"despina\",3,\"Despina\",[\"despina\",null,null,null,null,null,null,null,null,null,[[\"Despina\",\"Female, smooth, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Despina.wav\"]]]],[\"enceladus\",3,\"Enceladus\",[\"enceladus\",null,null,null,null,null,null,null,null,null,[[\"Enceladus\",\"Male, breathy, lower pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Enceladus.wav\"]]]],[\"erinome\",3,\"Erinome\",[\"erinome\",null,null,null,null,null,null,null,null,null,[[\"Erinome\",\"Female, clear, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Erinome.wav\"]]]],[\"fenrir\",3,\"Fenrir\",[\"fenrir\",null,null,null,null,null,null,null,null,null,[[\"Fenrir\",\"Male, excitable, younger pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Fenrir.wav\"]]]],[\"gacrux\",3,\"Gacrux\",[\"gacrux\",null,null,null,null,null,null,null,null,null,[[\"Gacrux\",\"Female, mature, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Gacrux.wav\"]]]],[\"iapetus\",3,\"Iapetus\",[\"iapetus\",null,null,null,null,null,null,null,null,null,[[\"Iapetus\",\"Male, clear, mid-low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Iapetus.wav\"]]]],[\"kore\",3,\"Kore\",[\"kore\",null,null,null,null,null,null,null,null,null,[[\"Kore\",\"Female, firm, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Kore.wav\"]]]],[\"laomedeia\",3,\"Laomedeia\",[\"laomedeia\",null,null,null,null,null,null,null,null,null,[[\"Laomedeia\",\"Female, upbeat, mid-high pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Laomedeia.wav\"]]]],[\"leda\",3,\"Leda\",[\"leda\",null,null,null,null,null,null,null,null,null,[[\"Leda\",\"Female, youthful, mid-high pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Leda.wav\"]]]],[\"orus\",3,\"Orus\",[\"orus\",null,null,null,null,null,null,null,null,null,[[\"Orus\",\"Male, firm, mid-low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Orus.wav\"]]]],[\"puck\",3,\"Puck\",[\"puck\",null,null,null,null,null,null,null,null,null,[[\"Puck\",\"Male, upbeat, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Puck.wav\"]]]],[\"pulcherrima\",3,\"Pulcherrima\",[\"pulcherrima\",null,null,null,null,null,null,null,null,null,[[\"Pulcherrima\",\"Ungendered, forward, mid-high pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Pulcherrima.wav\"]]]],[\"rasalgethi\",3,\"Rasalgethi\",[\"rasalgethi\",null,null,null,null,null,null,null,null,null,[[\"Rasalgethi\",\"Male, informative, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Rasalgethi.wav\"]]]],[\"sadachbia\",3,\"Sadachbia\",[\"sadachbia\",null,null,null,null,null,null,null,null,null,[[\"Sadachbia\",\"Male, lively, low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Sadachbia.wav\"]]]],[\"sadaltager\",3,\"Sadaltager\",[\"sadaltager\",null,null,null,null,null,null,null,null,null,[[\"Sadaltager\",\"Male, knowledgeable, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Sadaltager.wav\"]]]],[\"schedar\",3,\"Schedar\",[\"schedar\",null,null,null,null,null,null,null,null,null,[[\"Schedar\",\"Male, even, mid-low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Schedar.wav\"]]]],[\"sulafat\",3,\"Sulafat\",[\"sulafat\",null,null,null,null,null,null,null,null,null,[[\"Sulafat\",\"Female, warm, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Sulafat.wav\"]]]],[\"umbriel\",3,\"Umbriel\",[\"umbriel\",null,null,null,null,null,null,null,null,null,[[\"Umbriel\",\"Male, smooth, lower pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Umbriel.wav\"]]]],[\"vindemiatrix\",3,\"Vindemiatrix\",[\"vindemiatrix\",null,null,null,null,null,null,null,null,null,[[\"Vindemiatrix\",\"Female, gentle, mid pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Vindemiatrix.wav\"]]]],[\"zephyr\",3,\"Zephyr\",[\"zephyr\",null,null,null,null,null,null,null,null,null,[[\"Zephyr\",\"Female, bright, mid-high pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Zephyr.wav\"]]]],[\"zubenelgenubi\",3,\"Zubenelgenubi\",[\"zubenelgenubi\",null,null,null,null,null,null,null,null,null,[[\"Zubenelgenubi\",\"Male, casual, mid-low pitch\",true,\"https://gstatic.com/aitestkitchen/voices/samples/Zubenelgenubi.wav\"]]]]],null,[[\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"11a89444-ca45-45a2-a890-feab388ba4ae\",null,[1,\"Untitled Character\",[[[\"c7fee095-6829-4801-94c8-3eb9bcaf060f\"]]]],\"4630aeab-cd27-4457-96b6-24045de2504e\",[1448,1086],[1785255345,366015000],[1785255350,725479000]],[\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"ad4b3ad9-a282-478e-957e-6fcc47a2b5e4\",null,[1,\"Tien_2031_B3\",[[[\"4fb9e862-d995-4f49-9eb6-d00b1f2ee767\"],[]]]],\"9aea7396-dc22-4b69-947f-7d1dcc5c1e3c\",[1376,768],[1784546541,129258000],[1784546568,859181000]],[\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"f4d9c731-41f2-4b51-9dd2-edd20c1dc7f1\",null,[1,\"Tien_2028_PREP\",[[[\"d7c54686-02ce-4344-ac22-2888ccf9c76e\"],[]],null,\"Lê Quốc Tiến, 29-year-old Vietnamese infrastructure engineer.\\nPre-Red-Sun 2028 preparation state.\"]],\"6aa915c7-1123-4e12-b75f-6d5e6d40d0fe\",[1376,768],[1784546032,509474000],[1784546353,571992000]]],null,[null,[true,[[\"e55378b8-ca5a-4a67-b6e3-351246bc1986\",\"Tiêu đề hướng dẫn\",\"PROJECT: HỒNG NHẬT THĂNG LONG — HNTL_MASTER_LIVE_ACTION\\n\\nYou are the project organizer and creative assistant for a grounded live-action Vietnamese near-future techno-thriller.\\n\\nNON-NEGOTIABLE VISUAL RULES\\n- Live-action cinematic realism only.\\n- Authentic Vietnamese faces, Hanoi architecture, infrastructure, vehicles and everyday objects.\\n- Restrained acting and physically believable motion.\\n- Practical 2028 clothing and industrial equipment.\\n- No anime, illustration, comic, glossy game rendering, fantasy armor, magical glow, generic cyberpunk neon or holograms.\\n- Never use assets marked STORYBOARD_ONLY as identity or video Ingredients.\\n\\nPRODUCTION RULES\\n- One main action per generated clip.\\n- Never invent a new costume, injury, prop or age for an APPROVED Character.\\n- Never modify or overwrite an asset whose filename ends in APPROVED or FINAL.\\n- Exact dates, clocks, terminal text, logos and subtitles are post-production overlays; keep screens clean.\\n- Use Character references and location references exactly as named.\\n- When asked to organize, use filename prefixes and move assets to the matching Collection.\\n- Ask for confirmation before any generation that spends credits.\\n- For locked render cards, do not choose the model automatically; the user will use the standard prompt box.\\n\\nMASTER STYLE\\ngrounded live-action Vietnamese near-future techno-thriller, cinematic realism, authentic Vietnamese cast and Hanoi architecture, natural skin texture, practical 2028 clothing and industrial equipment, physically believable heat haze and sweat, restrained acting, controlled camera movement, 24 fps cinematic motion, subtle film grain, high dynamic range, no fantasy spectacle\\n\\nMASTER NEGATIVE\\nno anime, no illustration, no comic-book rendering, no glossy video-game look, no superhero armor, no magic glow, no Chinese imperial costume, no Japanese historical styling, no European medieval architecture, no generic cyberpunk neon, no holograms, no face drift, no age drift, no hairstyle drift, no costume drift, no extra fingers, no duplicated main characters, no generated readable text, no watermark\",true]]],[[null,3,2,null,\"nano_banana_pro\"],[null,2,1,null,\"abra\"]],1,1]]",null,null,null,"generic"]] +57 +[["di",695],["af.httprm",694,"3185932965805684473",25]] +28 +[["e",4,null,null,164172]] diff --git a/scratch/run_eval.py b/scratch/run_eval.py new file mode 100644 index 000000000..c9fb695b0 --- /dev/null +++ b/scratch/run_eval.py @@ -0,0 +1,17 @@ +import urllib.request +import json +import sys + +code = sys.argv[1] if len(sys.argv) > 1 else "document.title" + +req = urllib.request.Request( + "http://127.0.0.1:8100/api/ext/eval-tab", + data=json.dumps({"code": code}).encode("utf-8"), + headers={"Content-Type": "application/json"} +) + +try: + with urllib.request.urlopen(req) as resp: + print(resp.read().decode("utf-8")) +except Exception as e: + print("Error:", e) diff --git a/scratch/run_regen_scene_0_image.py b/scratch/run_regen_scene_0_image.py new file mode 100644 index 000000000..479e32fed --- /dev/null +++ b/scratch/run_regen_scene_0_image.py @@ -0,0 +1,36 @@ +import urllib.request +import json +import time + +payload = { + "requests": [ + { + "type": "REGENERATE_IMAGE", + "scene_id": "02f6d29e-be27-491a-b1ad-baa944964890", + "project_id": "594758cc-11f5-4f92-8b3c-1213686591f4", + "video_id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "orientation": "HORIZONTAL" + } + ] +} + +req = urllib.request.Request( + "http://127.0.0.1:8100/api/requests/batch", + data=json.dumps(payload).encode("utf-8"), + headers={"Content-Type": "application/json"} +) + +with urllib.request.urlopen(req) as resp: + res = json.loads(resp.read().decode("utf-8")) + print("Batch submission response:", res) + +# Poll batch-status +url = "http://127.0.0.1:8100/api/requests/batch-status?video_id=945ad6d4-5d79-4790-80db-1bff16ed7255&type=REGENERATE_IMAGE" +for i in range(30): + time.sleep(3) + with urllib.request.urlopen(url) as resp: + st = json.loads(resp.read().decode("utf-8")) + print(f"[{i*3}s] Status: {st}") + if st.get("done"): + print("Done! All succeeded:", st.get("all_succeeded")) + break diff --git a/scratch/stream_chat_response.txt b/scratch/stream_chat_response.txt new file mode 100644 index 000000000..e3f89a9d1 --- /dev/null +++ b/scratch/stream_chat_response.txt @@ -0,0 +1,8 @@ +)]}' + +72 +[["wrb.fr",null,"[[null,[[null,null,null,null,null,null,[]]]],true]"]] +59 +[["di",2522],["af.httprm",2521,"6287286348556415523",29]] +25 +[["e",4,null,null,168]] diff --git a/scratch/submit_prompt.py b/scratch/submit_prompt.py new file mode 100644 index 000000000..993ecb588 --- /dev/null +++ b/scratch/submit_prompt.py @@ -0,0 +1,22 @@ +import urllib.request +import json +import time + +prompt = ( + "Tạo 1 ảnh cảnh: Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. " + "Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. " + "In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. " + "Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph." +) + +req = urllib.request.Request( + "http://127.0.0.1:8100/api/ext/submit-ui-prompt", + data=json.dumps({"prompt": prompt}).encode("utf-8"), + headers={"Content-Type": "application/json"} +) + +print("Submitting prompt to Flow UI...") +with urllib.request.urlopen(req) as resp: + res = json.loads(resp.read().decode("utf-8")) + print("Submit result:", json.dumps(res, indent=2)) diff --git a/scratch/test_gen_image.py b/scratch/test_gen_image.py new file mode 100644 index 000000000..7b2a40135 --- /dev/null +++ b/scratch/test_gen_image.py @@ -0,0 +1,17 @@ +import requests +import json +import time + +project_id = "594758cc-11f5-4f92-8b3c-1213686591f4" +prompt = "A cinematic shot of subterranean B3 parking basement in Me Tri Hanoi, extreme heatwave, cracked scorched concrete, dramatic red lighting" + +print("Testing direct generate_images...") +start = time.time() +resp = requests.post("http://127.0.0.1:8100/api/projects/" + project_id + "/requests", json={ + "type": "GENERATE_IMAGE", + "prompt": prompt, + "aspect_ratio": "IMAGE_ASPECT_RATIO_LANDSCAPE" +}, timeout=60) + +print(f"Status: {resp.status_code}") +print("Response:", resp.text[:500]) diff --git a/scratch/test_gn0bre.py b/scratch/test_gn0bre.py new file mode 100644 index 000000000..b68e5c672 --- /dev/null +++ b/scratch/test_gn0bre.py @@ -0,0 +1,9 @@ +import urllib.request +import json + +client_uuid = "007b60d4-79aa-4a7f-8133-cc776c4daba7" +freq = f'[[["GN0Bre","[\\"{client_uuid}\\"]",null,"generic"]]]' + +# call via test-direct or batch-rpc +# let's add a small endpoint or call directly +print("Testing GN0Bre with UUID:", client_uuid) diff --git a/scratch/test_parse.py b/scratch/test_parse.py new file mode 100644 index 000000000..dc7af6ff5 --- /dev/null +++ b/scratch/test_parse.py @@ -0,0 +1,16 @@ +import sys +from agent.services import flow_batch as fb + +# With r''' so backslashes are preserved: +raw = r''')]}' + +2428 +[["wrb.fr","as29s","[\"666bc47c-1fa1-4167-83cc-3088840b3146\",\"594758cc-11f5-4f92-8b3c-1213686591f4\",\"d19f6811-455b-4838-bdc2-b908aeb7bd36\",\"CAE\",null,[[1790169824,340307000],null,null,null,null,null,[null,null,[[\"test\",null,[[[\"test\"]]]]],[],1],null,null,1,\"https://flow-content.google/image/666bc47c-1fa1-4167-83cc-3088840b3146?Expires=123\",null,null,169345]]",null,null,null,"generic"]] +''' + +results = fb.parse_envelope(raw) +print("Results len:", len(results)) +if results: + print("Result 0 rpcid:", results[0].rpcid) + urls = fb.read_media_urls(results[0].data, '666bc47c-1fa1-4167-83cc-3088840b3146') + print("Extracted image URL:", urls.image) diff --git a/scratch/test_project_media.py b/scratch/test_project_media.py new file mode 100644 index 000000000..ba478a223 --- /dev/null +++ b/scratch/test_project_media.py @@ -0,0 +1,22 @@ +import asyncio +import json +from agent.services.flow_client import get_flow_client +from agent.services import flow_batch as fb + +async def main(): + client = get_flow_client() + pid = "594758cc-11f5-4f92-8b3c-1213686591f4" + freq = fb.project_media_request(pid) + print("Sending project_media_request...") + res = await client._batch_rpc(fb.RPC_PROJECT_MEDIA, freq) + print(f"Status: {res.get('status')}") + print(f"Text snippet: {res.get('data', '')[:300]}") + if res.get("data"): + # Let's inspect images/videos found in the payload + images = fb.read_images(res.get("data")) + print(f"Found {len(images)} images in project:") + for img in images[:5]: + print(f" {img.media_id} -> {img.url[:80]}...") + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/scratch/test_prompt_api.py b/scratch/test_prompt_api.py new file mode 100644 index 000000000..a09cba2ac --- /dev/null +++ b/scratch/test_prompt_api.py @@ -0,0 +1,38 @@ +import urllib.request +import json +import time + +prompt = ( + "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot inside subterranean B3 basement parking at Me Tri during extreme heatwave. " + "Le Quoc Tien slumps against a cracked concrete pillar in defeat beside a torn empty water pouch and heat-warped debris. " + "Do Minh Kha looms over him in the background with a cold detached expression, silhouette backlit by an ominous beam of deep crimson sunlight piercing through a fractured ceiling fissure. " + "Chiaroscuro high contrast cinematic lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph." +) + +ref_ids = [ + "9416e9ba-eeed-43c3-b5d7-15774851c6ae", # Le Quoc Tien + "78e46231-e6cf-43fb-99bc-a4cb96196e24", # Do Minh Kha +] + +payload = { + "prompt": prompt, + "ref_media_ids": ref_ids, + "project_id": "594758cc-11f5-4f92-8b3c-1213686591f4" +} + +req = urllib.request.Request( + "http://127.0.0.1:8100/api/test-direct", + data=json.dumps(payload).encode("utf-8"), + headers={"Content-Type": "application/json"} +) + +print("Calling test-direct with cinematic betrayal prompt...") +t0 = time.time() +try: + with urllib.request.urlopen(req, timeout=120) as resp: + res = json.loads(resp.read().decode("utf-8")) + print(f"Time taken: {time.time()-t0:.1f}s") + print("Result:", json.dumps(res, indent=2)) +except Exception as e: + print("Error:", e) diff --git a/scratch/test_safe_prompt.py b/scratch/test_safe_prompt.py new file mode 100644 index 000000000..5e628db63 --- /dev/null +++ b/scratch/test_safe_prompt.py @@ -0,0 +1,44 @@ +import sys +sys.path.insert(0, ".") +import asyncio +import json +from agent.services.flow_client import get_flow_client +from agent.services import flow_batch as fb + +async def test(): + client = get_flow_client() + pid = "594758cc-11f5-4f92-8b3c-1213686591f4" + + # Characters: Le Quoc Tien and Do Minh Kha + ref_ids = [ + "9416e9ba-eeed-43c3-b5d7-15774851c6ae", # Le Quoc Tien + "78e46231-e6cf-43fb-99bc-a4cb96196e24", # Do Minh Kha + ] + + prompt = ( + "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. " + "Le Quoc Tien lies exhausted on scorched concrete floor full of deep heat fractures, clutching his painful side beside a torn empty water canteen and heat-warped debris. " + "In the background, Do Minh Kha stands looming over him with a cold detached gaze, holding a gleaming tactical blade, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. " + "Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph." + ) + + print("Testing prompt generation with reference images...") + freq = fb.image_request( + prompt, + pid, + count=1, + aspect="IMAGE_ASPECT_RATIO_LANDSCAPE", + ref_media_ids=ref_ids, + ) + try: + res = await client._batch_payload(fb.RPC_GEN_IMAGE, freq, fb.CAPTCHA_IMAGE) + imgs = fb.read_images(res) + print("Success! Generated images count:", len(imgs)) + for img in imgs: + print("Media ID:", img.media_id) + print("URL:", img.url) + except Exception as e: + print("Failed:", e) + +asyncio.run(test()) diff --git a/scratch/test_stream_chat.py b/scratch/test_stream_chat.py new file mode 100644 index 000000000..c82f2d756 --- /dev/null +++ b/scratch/test_stream_chat.py @@ -0,0 +1,36 @@ +import urllib.request +import json +import time + +prompt = ( + "Tạo 1 ảnh cảnh: Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. " + "Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. " + "In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. " + "Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph." +) + +project_id = "594758cc-11f5-4f92-8b3c-1213686591f4" + +req = urllib.request.Request( + "http://127.0.0.1:8100/api/ext/stream-chat", + data=json.dumps({"prompt": prompt, "project_id": project_id}).encode("utf-8"), + headers={"Content-Type": "application/json"} +) + +print(f"Calling stream-chat at {time.strftime('%X')}...") +try: + with urllib.request.urlopen(req, timeout=120) as resp: + body = resp.read().decode("utf-8") + print("Response received:") + res = json.loads(body) + print("Status:", res.get("status")) + print("Error:", res.get("error")) + data = res.get("data", "") + print("Data length:", len(data)) + with open("scratch/stream_chat_response.txt", "w", encoding="utf-8") as f: + f.write(data) + print("Preview of data (first 500 chars):") + print(data[:500]) +except Exception as e: + print("Error calling stream-chat:", e) diff --git a/scratch/test_stream_chat_intent.py b/scratch/test_stream_chat_intent.py new file mode 100644 index 000000000..42b944803 --- /dev/null +++ b/scratch/test_stream_chat_intent.py @@ -0,0 +1,27 @@ +import requests +import json +import time + +prompt = ( + "Tạo 1 ảnh cảnh: Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. " + "Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound " + "beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold " + "detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through " + "a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat " + "distortion waves, 35mm RAW photograph." +) + +project_id = "594758cc-11f5-4f92-8b3c-1213686591f4" + +print("Submitting prompt to StreamChat...") +start = time.time() +resp = requests.post("http://127.0.0.1:8100/api/ext/stream-chat", json={ + "prompt": prompt, + "project_id": project_id +}, timeout=120) + +print(f"StreamChat responded in {time.time() - start:.1f}s, status: {resp.status_code}") +data = resp.json() +print("Raw response data:") +print(data.get("data")) diff --git a/scratch/test_submit_ui.py b/scratch/test_submit_ui.py new file mode 100644 index 000000000..4024d571f --- /dev/null +++ b/scratch/test_submit_ui.py @@ -0,0 +1,21 @@ +import requests +import json +import time + +prompt = ( + "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. " + "Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound " + "beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold " + "detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through " + "a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat " + "distortion waves, 35mm RAW photograph." +) + +print("Submitting prompt to Flow UI...") +resp = requests.post("http://127.0.0.1:8100/api/ext/submit-ui-prompt", json={ + "prompt": prompt +}, timeout=30) + +print(f"Status: {resp.status_code}") +print("Result:", resp.json()) diff --git a/scratch/test_vn_prompt.py b/scratch/test_vn_prompt.py new file mode 100644 index 000000000..b82f5b08b --- /dev/null +++ b/scratch/test_vn_prompt.py @@ -0,0 +1,17 @@ +import requests +import json +import time + +prompt = "Tạo 1 ảnh cảnh Đỗ Minh Kha cầm dao phản bội Lê Quốc Tiến tại tầng hầm B3 Mễ Trì" +project_id = "594758cc-11f5-4f92-8b3c-1213686591f4" + +print(f"Submitting prompt: '{prompt}'...") +resp = requests.post("http://127.0.0.1:8100/api/ext/stream-chat", json={ + "prompt": prompt, + "project_id": project_id +}, timeout=120) + +print(f"StreamChat status: {resp.status_code}") +data = resp.json() +print("Raw data:") +print(data.get("data")) diff --git a/scratch/update_scene_0_db.py b/scratch/update_scene_0_db.py new file mode 100644 index 000000000..708dfb90f --- /dev/null +++ b/scratch/update_scene_0_db.py @@ -0,0 +1,52 @@ +import urllib.request +import json +import sqlite3 + +sid = "02f6d29e-be27-491a-b1ad-baa944964890" +media_id = "bdcbe55a-ee7b-497d-a414-25d22d04c096" +img_url = "https://flow-content.google/image/bdcbe55a-ee7b-497d-a414-25d22d04c096?Expires=1790195637&KeyName=labs-flow-prod-cdn-key&Signature=8fmLwGJU0u2b1taNHnO3Btd7b_8" + +prompt = ( + "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot inside subterranean B3 basement parking at Me Tri during extreme heatwave. " + "Le Quoc Tien slumps against a cracked concrete pillar in defeat beside a torn empty water pouch and heat-warped debris. " + "Do Minh Kha looms over him in the background with a cold detached expression, silhouette backlit by an ominous beam of deep crimson sunlight piercing through a fractured ceiling fissure. " + "Chiaroscuro high contrast cinematic lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph." +) + +video_prompt = ( + "0-3s: Low-angle tracking shot through heat-warped plastic debris and scorched concrete in subterranean B3 basement at Me Tri as Do Minh Kha walks slowly past motionless casualties, boots coated in red dust. " + "3-6s: Camera tilts down as Do Minh Kha crouches over Le Quoc Tien who slumps against a cracked concrete pillar beside a torn empty water pouch. Do Minh Kha speaks in a hoarse parched voice \"Lê Quốc Tiến, mày vốn không nên sống lâu đến thế.\" " + "6-8s: Close-up of Do Minh Kha raising a gleaming tactical blade reflecting the deep crimson sunlight bleeding through a fractured ceiling slab, then plunging the blade downward into pitch black darkness. " + "Audio: Stifled gasping breath, slow crunching footsteps on gravel, hoarse menacing dialogue, sharp metallic blade unsheath, deep sub-bass cinematic hit. Negative: subtitles, watermark, text overlay." +) + +# 1. Update Scene via SQLite directly to ensure all fields are set cleanly +conn = sqlite3.connect("flow_agent.db") +cur = conn.cursor() + +cur.execute(""" + UPDATE scene + SET horizontal_image_media_id = ?, + horizontal_image_url = ?, + horizontal_image_status = 'COMPLETED', + prompt = ?, + video_prompt = ?, + character_names = ?, + horizontal_video_status = 'PENDING', + horizontal_video_media_id = NULL, + horizontal_video_url = NULL, + updated_at = datetime('now') + WHERE id = ? +""", (media_id, img_url, prompt, video_prompt, json.dumps(["Le Quoc Tien", "Do Minh Kha"]), sid)) + +# 2. Cancel/clean old stuck requests +cur.execute("UPDATE request SET status = 'FAILED' WHERE status IN ('PENDING', 'PROCESSING')") + +conn.commit() +print("Scene #0 updated successfully in database!") + +# 3. Verify +cur.execute("SELECT id, prompt, horizontal_image_media_id, horizontal_image_status, horizontal_video_status FROM scene WHERE id = ?", (sid,)) +print("Verified scene row:", cur.fetchone()) +conn.close() diff --git a/scratch/view_recent_captures.py b/scratch/view_recent_captures.py new file mode 100644 index 000000000..49d865b6d --- /dev/null +++ b/scratch/view_recent_captures.py @@ -0,0 +1,9 @@ +import json + +lines = open('scratch/captured_netlog.jsonl', encoding='utf-8').read().splitlines() +for i, line in enumerate(lines[22:]): + d = json.loads(line) + print(f"--- Capture #{i+22} ---") + print("URL:", d['url']) + print("Status:", d['statusCode']) + print("Body snippet:", d.get('body', '')[:250]) diff --git a/scripts/cancel_video_requests.py b/scripts/cancel_video_requests.py new file mode 100644 index 000000000..eb4e09f3f --- /dev/null +++ b/scripts/cancel_video_requests.py @@ -0,0 +1,14 @@ +import sqlite3 + +conn = sqlite3.connect("flow_agent.db") +c = conn.cursor() +c.execute(""" + UPDATE request + SET status = 'FAILED', error_message = 'Cancelled for model testing' + WHERE video_id = '945ad6d4-5d79-4790-80db-1bff16ed7255' + AND type = 'GENERATE_VIDEO' + AND status IN ('PENDING', 'PROCESSING') +""") +print("Updated rows:", c.rowcount) +conn.commit() +conn.close() diff --git a/scripts/check_3_ops.py b/scripts/check_3_ops.py new file mode 100644 index 000000000..80a9bd3e0 --- /dev/null +++ b/scripts/check_3_ops.py @@ -0,0 +1,13 @@ +import requests +import json + +res = requests.post("http://127.0.0.1:8100/api/flow/check-status", json={ + "operations": [ + {"operation": {"name": "f870145a-7ab6-4608-9643-25839dcf8a9f"}}, + {"operation": {"name": "825308bd-19c6-4171-9b58-d2e01513b639"}}, + {"operation": {"name": "c8cfd8a0-1e3f-4400-8fb9-2c146e0d8db4"}} + ], + "project_id": "594758cc-11f5-4f92-8b3c-1213686591f4" +}) +print("Status code:", res.status_code) +print(json.dumps(res.json(), indent=2)) diff --git a/scripts/check_op.py b/scripts/check_op.py new file mode 100644 index 000000000..9ca42de81 --- /dev/null +++ b/scripts/check_op.py @@ -0,0 +1,9 @@ +import requests +import json + +res = requests.post("http://127.0.0.1:8100/api/flow/check-status", json={ + "operations": [{"operation": {"name": "2c817534-e7d9-4711-ba06-8da52e020080"}}], + "project_id": "594758cc-11f5-4f92-8b3c-1213686591f4" +}) +print("Status code:", res.status_code) +print("Response:", json.dumps(res.json(), indent=2)) diff --git a/scripts/create_hong_nhat_entities.py b/scripts/create_hong_nhat_entities.py new file mode 100644 index 000000000..d01bdf2d0 --- /dev/null +++ b/scripts/create_hong_nhat_entities.py @@ -0,0 +1,72 @@ +import asyncio +from agent.api.projects import _build_character_profile +from agent.sdk.persistence.sqlite_repository import SQLiteRepository +from agent.utils.slugify import slugify + +pid = '594758cc-11f5-4f92-8b3c-1213686591f4' +story = 'Ngay 22/06/2028, tham hoa Hong Nhat giang lam, mat troi doi mau do sam, nhiet do vuot 50C-68C thieu dot Ha Noi. Le Quoc Tien mang ky uc cua cai chet o Me Tri 2031 tinh day truoc do 44 ngay, cung Tran Thanh Thuy va cac nhom nguoi sinh ton bao ve ha tang ngam, doi dau Do Minh Kha va tim ra bi mat Cong Thang Long.' + +entities = [ + { + 'name': 'Le Quoc Tien', + 'entity_type': 'character', + 'description': '29-year-old Vietnamese system infrastructure engineer, lean athletic build, sharp determined Asian features, short clean black hair, wearing dark charcoal tactical t-shirt and grey cargo pants, digital wrist gauge, observant survivalist gaze.', + 'voice_description': 'Calm, firm, determined Vietnamese male voice with deep analytical cadence' + }, + { + 'name': 'Do Minh Kha', + 'entity_type': 'character', + 'description': '34-year-old Vietnamese logistics commander, tall imposing authoritative posture, slicked-back dark hair, wearing an unbuttoned black button-down shirt with rolled-up sleeves, dark trousers, distinctive matte black ring on his left ring finger, piercing cold calculated gaze.', + 'voice_description': 'Low, smooth, chillingly calm male voice with absolute authority' + }, + { + 'name': 'Tran Thanh Thuy', + 'entity_type': 'character', + 'description': '27-year-old Vietnamese investigative journalist, smart analytical expression, hair tied back in a neat ponytail, wearing a light beige utility shirt, olive multi-pocket reporter vest, canvas shoulder bag carrying a compact camera, intelligent perceptive dark eyes.', + 'voice_description': 'Clear, articulate, sharp and perceptive Vietnamese female voice' + }, + { + 'name': 'Nguyen Trai Avenue', + 'entity_type': 'location', + 'description': 'Wide bustling urban avenue in Hanoi during morning rush hour, elevated concrete metro tracks overhead with modern green Cat Linh - Ha Dong passenger train gliding past sleek glass skyscrapers and dense commuter traffic under a clear morning sky.' + }, + { + 'name': 'Dai Ha Mall Heat Trap', + 'entity_type': 'location', + 'description': 'Massive modern glass shopping mall in Ha Dong district under a terrifying dark crimson sun and apocalyptic red sky, giant glass windows completely fogged with thick condensation from dark boiling interior, heat ripples warping the melting empty asphalt parking lot outside.' + }, + { + 'name': 'Ngoc Truc Warehouse', + 'entity_type': 'location', + 'description': 'Secluded industrial concrete warehouse on Hanoi outskirts, weathered corrugated metal roof, dusty grey concrete floor with faint cracks, heavy circular dark metal floor hatch with an etched twelve-ray sun emblem hidden beneath metal shelving.' + }, + { + 'name': 'Dried West Lake Colossus', + 'entity_type': 'location', + 'description': 'Dried-up West Lake lakebed under a scorching apocalyptic deep crimson sun and hazy red sky, cracked black mud terrain revealing gigantic ancient dark metallic curved rib structures rising from the earth like colossal dragon bones, rising hot thermal steam.' + } +] + +async def run(): + repo = SQLiteRepository() + for ent in entities: + profile = _build_character_profile( + ent['name'], + ent['description'], + story, + entity_type=ent['entity_type'], + material_id='realistic' + ) + char = await repo.create_character( + name=ent['name'], + slug=slugify(ent['name']), + entity_type=ent['entity_type'], + description=profile['description'], + image_prompt=profile['image_prompt'], + voice_description=ent.get('voice_description') + ) + await repo.link_character_to_project(pid, char.id) + print("Created and linked: " + ent['name'] + " (" + ent['entity_type'] + ") -> ID: " + str(char.id)) + +if __name__ == '__main__': + asyncio.run(run()) diff --git a/scripts/create_hong_nhat_scenes.py b/scripts/create_hong_nhat_scenes.py new file mode 100644 index 000000000..2a9de28f2 --- /dev/null +++ b/scripts/create_hong_nhat_scenes.py @@ -0,0 +1,75 @@ +import json +import urllib.request + +vid = '945ad6d4-5d79-4790-80db-1bff16ed7255' + +scenes = [ + { + 'video_id': vid, + 'display_order': 0, + 'chain_type': 'ROOT', + 'character_names': ['Le Quoc Tien', 'Do Minh Kha'], + 'prompt': 'Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph.', + 'video_prompt': '0-3s: Low-angle tracking shot through heat-warped plastic debris and scorched concrete in subterranean B3 basement at Me Tri as Do Minh Kha walks slowly past motionless casualties, boots coated in red dust. 3-6s: Camera tilts down as Do Minh Kha crouches over Le Quoc Tien, who clutches a bleeding abdominal wound beside a torn empty water pouch. Do Minh Kha speaks in a hoarse parched voice "Lê Quốc Tiến, mày vốn không nên sống lâu đến thế." 6-8s: Close-up of Do Minh Kha raising a gleaming tactical knife reflecting the deep crimson sunlight bleeding through a fractured ceiling slab, then plunging the blade downward into pitch black darkness. Audio: Stifled gasping breath, slow crunching footsteps on gravel, hoarse ominous dialogue, sharp metallic blade unsheath, deep sub-bass cinematic hit. Negative: subtitles, watermark, text overlay.', + 'narrator_text': 'Tầng hầm B3 Mễ Trì, năm 2031. Dưới ánh Hồng Nhật thiêu đốt, lưỡi dao của Đỗ Minh Kha đã kết thúc ba năm sinh tồn của tôi.' + }, + { + 'video_id': vid, + 'display_order': 1, + 'chain_type': 'ROOT', + 'character_names': ['Le Quoc Tien'], + 'prompt': 'Cinematic close-up of Le Quoc Tien jolting awake in bed, eyes wide with intense shock and cold sweat on his face. In background, a desktop setup with multiple glowing monitors and a digital clock displaying 07:13 AM. Soft morning golden sunlight streaming through half-open blinds. Photorealistic RAW photograph, Canon EOS R5, shallow depth of field.', + 'video_prompt': '0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight.' + }, + { + 'video_id': vid, + 'display_order': 2, + 'chain_type': 'ROOT', + 'character_names': ['Nguyen Trai Avenue'], + 'prompt': 'Wide establishing cinematic shot of Nguyen Trai Avenue in Hanoi during morning rush hour. The green Cat Linh - Ha Dong elevated metro train glides smoothly on elevated concrete tracks above dense streams of motorbikes and cars. Clear blue sky with gentle morning sun, modern city backdrop. RAW photograph, wide-angle 24mm, vibrant urban atmosphere.', + 'video_prompt': '0-3s: Elevated wide cinematic shot following the green metro train gliding on concrete viaducts. 3-6s: Camera cranes down toward dense streams of morning motorbike commuters on Nguyen Trai Avenue. 6-8s: Golden sunlight reflects brilliantly off modern glass skyscrapers under a blue sky.' + }, + { + 'video_id': vid, + 'display_order': 3, + 'chain_type': 'ROOT', + 'character_names': ['Dai Ha Mall Heat Trap'], + 'prompt': 'Terrifying apocalyptic cinematic shot of Dai Ha Mall Heat Trap in Ha Dong under an eerie blood-red sky with a massive dark crimson sun. Dense crowd of panicked people inside banging frantically against fogged-up glass doors from dark steaming interiors. Heat ripples distorting the melting asphalt road outside. High contrast dramatic disaster lighting, 35mm RAW photograph.', + 'video_prompt': '0-3s: Camera pushes rapidly toward fogged glass doors as desperate hands slam against the condensation from steaming dark interiors of Dai Ha Mall Heat Trap. 3-6s: Pan up sharply to the terrifying dark crimson sun blazing in a blood-red hazy sky. 6-8s: Violent heat waves distort the melting asphalt parking lot in the foreground.' + }, + { + 'video_id': vid, + 'display_order': 4, + 'chain_type': 'ROOT', + 'character_names': ['Le Quoc Tien', 'Ngoc Truc Warehouse'], + 'prompt': 'Atmospheric cinematic shot inside Ngoc Truc Warehouse. Le Quoc Tien shines a flashlight onto a heavy dark metal hatch embedded in the concrete floor. The circular sun emblem with twelve rays on the hatch glows with an ominous deep red bioluminescent light. Dense cold vapor rising from the metallic seams. 35mm cinematic photograph, moody volumetric shadows.', + 'video_prompt': '0-3s: Medium tracking shot of Le Quoc Tien prying aside a rusted metal shelf inside Ngoc Truc Warehouse to reveal a dark round floor hatch. 3-6s: The etched circular sun emblem on the metal hatch pulses with an ancient crimson glow. 6-8s: Freezing subterranean vapor hisses out as deep mechanical latches unlock underneath.' + }, + { + 'video_id': vid, + 'display_order': 5, + 'chain_type': 'ROOT', + 'character_names': ['Tran Thanh Thuy', 'Do Minh Kha', 'Dried West Lake Colossus'], + 'prompt': 'Epic cinematic wide shot of Dried West Lake Colossus in Hanoi under a dark apocalyptic red sun. Cracked black mud lakebed exposes colossal ancient dark metallic ribbed structures resembling giant dragon bones protruding from the earth. Tran Thanh Thuy and Do Minh Kha stand on the distant embankment silhouetted against the colossal metallic ruins and crimson haze. Masterpiece cinematic photography, 16:9 ultra-wide, atmospheric scale.', + 'video_prompt': '0-3s: Epic sweeping drone pull-back over cracked black mud of Dried West Lake Colossus exposing colossal ancient metal ribs rising from the dry lakebed. 3-6s: Crimson sunlight reflects off the weathered metallic structures as steam rises from fissures. 6-8s: Low shot of Tran Thanh Thuy and Do Minh Kha on the distant embankment silhouetted against the colossal colossus.' + } +] + +created_scenes = [] + +for sc in scenes: + req_body = json.dumps(sc).encode('utf-8') + req = urllib.request.Request( + 'http://127.0.0.1:8100/api/scenes', + data=req_body, + headers={'Content-Type': 'application/json'}, + method='POST' + ) + with urllib.request.urlopen(req) as resp: + s_data = json.loads(resp.read().decode('utf-8')) + created_scenes.append(s_data) + print(f"Created Scene {sc['display_order'] + 1}: {s_data['id']}") + +with open('scripts/created_scenes.json', 'w', encoding='utf-8') as f: + json.dump(created_scenes, f, indent=2) +print("Done all scenes!") diff --git a/scripts/created_entities.json b/scripts/created_entities.json new file mode 100644 index 000000000..7d0a47559 --- /dev/null +++ b/scripts/created_entities.json @@ -0,0 +1,9 @@ +{ + "Le Quoc Tien": "977bc0ef-fdd5-4308-9d9d-e42cadb9d345", + "Do Minh Kha": "859dfced-a563-4785-870b-6ddab4c203e3", + "Tran Thanh Thuy": "427d3b59-92a2-4b4c-b2fc-09cceb50d0bc", + "Nguyen Trai Avenue": "ed0a8dc0-3b73-4ddd-acd3-ce8815aae2fc", + "Dai Ha Mall Heat Trap": "2c9b76ac-1cd1-4e3b-89e7-25f1c5ff8eba", + "Ngoc Truc Warehouse": "eb133db8-d233-4d67-8dae-ae80a04587c8", + "Dried West Lake Colossus": "f4afe205-8426-4fa3-9304-e62dd52f5688" +} \ No newline at end of file diff --git a/scripts/created_scenes.json b/scripts/created_scenes.json new file mode 100644 index 000000000..2bd4d4326 --- /dev/null +++ b/scripts/created_scenes.json @@ -0,0 +1,252 @@ +[ + { + "id": "02f6d29e-be27-491a-b1ad-baa944964890", + "video_id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "display_order": 0, + "prompt": "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Dramatic low-angle cinematic shot in a shattered underground basement. Le Quoc Tien in dark torn clothes slumps against cracked burning concrete. Do Minh Kha stands over him holding a gleaming tactical knife, silhouette backlit by deep crimson sunlight piercing through fractured ceiling slabs. RAW photograph, 35mm lens, intense chiaroscuro lighting, floating embers and dust particles.", + "image_prompt": null, + "video_prompt": "0-3s: Low angle looking up at the cold silhouette of Do Minh Kha raising a tactical knife against crimson light. 3-6s: Camera tilts down to Le Quoc Tien gasping on cracked hot concrete. 6-8s: The blade thrusts downward as deep red haze floods the dark chamber.", + "character_names": [ + "Le Quoc Tien", + "Do Minh Kha" + ], + "parent_scene_id": null, + "chain_type": "ROOT", + "source": "root", + "vertical_image_url": null, + "vertical_image_media_id": null, + "vertical_image_status": "PENDING", + "vertical_video_url": null, + "vertical_video_media_id": null, + "vertical_video_status": "PENDING", + "vertical_upscale_url": null, + "vertical_upscale_media_id": null, + "vertical_upscale_status": "PENDING", + "horizontal_image_url": null, + "horizontal_image_media_id": null, + "horizontal_image_status": "PENDING", + "horizontal_video_url": null, + "horizontal_video_media_id": null, + "horizontal_video_status": "PENDING", + "horizontal_upscale_url": null, + "horizontal_upscale_media_id": null, + "horizontal_upscale_status": "PENDING", + "vertical_end_scene_media_id": null, + "horizontal_end_scene_media_id": null, + "transition_prompt": null, + "trim_start": null, + "trim_end": null, + "duration": null, + "narrator_text": null, + "created_at": "2026-09-22T17:42:30Z", + "updated_at": "2026-09-22T17:42:30Z" + }, + { + "id": "09e19387-62fe-40e0-b1e2-ed654c2b6287", + "video_id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "display_order": 1, + "prompt": "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Cinematic close-up of Le Quoc Tien jolting awake in bed, eyes wide with intense shock and cold sweat on his face. In background, a desktop setup with multiple glowing monitors and a digital clock displaying 07:13 AM. Soft morning golden sunlight streaming through half-open blinds. Photorealistic RAW photograph, Canon EOS R5, shallow depth of field.", + "image_prompt": null, + "video_prompt": "0-3s: Close-up on Le Quoc Tien chest heaving as he gasps for air, jolting upright in sheer shock. 3-6s: His trembling hand grasps the smartphone, screen glowing with the date 09/05/2028. 6-8s: Camera tracks smoothly to the window showing peaceful golden morning sunlight.", + "character_names": [ + "Le Quoc Tien" + ], + "parent_scene_id": null, + "chain_type": "ROOT", + "source": "root", + "vertical_image_url": null, + "vertical_image_media_id": null, + "vertical_image_status": "PENDING", + "vertical_video_url": null, + "vertical_video_media_id": null, + "vertical_video_status": "PENDING", + "vertical_upscale_url": null, + "vertical_upscale_media_id": null, + "vertical_upscale_status": "PENDING", + "horizontal_image_url": null, + "horizontal_image_media_id": null, + "horizontal_image_status": "PENDING", + "horizontal_video_url": null, + "horizontal_video_media_id": null, + "horizontal_video_status": "PENDING", + "horizontal_upscale_url": null, + "horizontal_upscale_media_id": null, + "horizontal_upscale_status": "PENDING", + "vertical_end_scene_media_id": null, + "horizontal_end_scene_media_id": null, + "transition_prompt": null, + "trim_start": null, + "trim_end": null, + "duration": null, + "narrator_text": null, + "created_at": "2026-09-22T17:42:30Z", + "updated_at": "2026-09-22T17:42:30Z" + }, + { + "id": "f87d7d98-42ff-41d5-b1cf-1ab1e9d359aa", + "video_id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "display_order": 2, + "prompt": "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Wide establishing cinematic shot of Nguyen Trai Avenue in Hanoi during morning rush hour. The green Cat Linh - Ha Dong elevated metro train glides smoothly on elevated concrete tracks above dense streams of motorbikes and cars. Clear blue sky with gentle morning sun, modern city backdrop. RAW photograph, wide-angle 24mm, vibrant urban atmosphere.", + "image_prompt": null, + "video_prompt": "0-3s: Elevated wide cinematic shot following the green metro train gliding on concrete viaducts. 3-6s: Camera cranes down toward dense streams of morning motorbike commuters on Nguyen Trai Avenue. 6-8s: Golden sunlight reflects brilliantly off modern glass skyscrapers under a blue sky.", + "character_names": [ + "Nguyen Trai Avenue" + ], + "parent_scene_id": null, + "chain_type": "ROOT", + "source": "root", + "vertical_image_url": null, + "vertical_image_media_id": null, + "vertical_image_status": "PENDING", + "vertical_video_url": null, + "vertical_video_media_id": null, + "vertical_video_status": "PENDING", + "vertical_upscale_url": null, + "vertical_upscale_media_id": null, + "vertical_upscale_status": "PENDING", + "horizontal_image_url": null, + "horizontal_image_media_id": null, + "horizontal_image_status": "PENDING", + "horizontal_video_url": null, + "horizontal_video_media_id": null, + "horizontal_video_status": "PENDING", + "horizontal_upscale_url": null, + "horizontal_upscale_media_id": null, + "horizontal_upscale_status": "PENDING", + "vertical_end_scene_media_id": null, + "horizontal_end_scene_media_id": null, + "transition_prompt": null, + "trim_start": null, + "trim_end": null, + "duration": null, + "narrator_text": null, + "created_at": "2026-09-22T17:42:30Z", + "updated_at": "2026-09-22T17:42:30Z" + }, + { + "id": "5369b582-6238-4cee-a1d1-1c30b89625f6", + "video_id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "display_order": 3, + "prompt": "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Terrifying apocalyptic cinematic shot of Dai Ha Mall Heat Trap in Ha Dong under an eerie blood-red sky with a massive dark crimson sun. Dense crowd of panicked people inside banging frantically against fogged-up glass doors from dark steaming interiors. Heat ripples distorting the melting asphalt road outside. High contrast dramatic disaster lighting, 35mm RAW photograph.", + "image_prompt": null, + "video_prompt": "0-3s: Camera pushes rapidly toward fogged glass doors as desperate hands slam against the condensation from steaming dark interiors of Dai Ha Mall Heat Trap. 3-6s: Pan up sharply to the terrifying dark crimson sun blazing in a blood-red hazy sky. 6-8s: Violent heat waves distort the melting asphalt parking lot in the foreground.", + "character_names": [ + "Dai Ha Mall Heat Trap" + ], + "parent_scene_id": null, + "chain_type": "ROOT", + "source": "root", + "vertical_image_url": null, + "vertical_image_media_id": null, + "vertical_image_status": "PENDING", + "vertical_video_url": null, + "vertical_video_media_id": null, + "vertical_video_status": "PENDING", + "vertical_upscale_url": null, + "vertical_upscale_media_id": null, + "vertical_upscale_status": "PENDING", + "horizontal_image_url": null, + "horizontal_image_media_id": null, + "horizontal_image_status": "PENDING", + "horizontal_video_url": null, + "horizontal_video_media_id": null, + "horizontal_video_status": "PENDING", + "horizontal_upscale_url": null, + "horizontal_upscale_media_id": null, + "horizontal_upscale_status": "PENDING", + "vertical_end_scene_media_id": null, + "horizontal_end_scene_media_id": null, + "transition_prompt": null, + "trim_start": null, + "trim_end": null, + "duration": null, + "narrator_text": null, + "created_at": "2026-09-22T17:42:30Z", + "updated_at": "2026-09-22T17:42:30Z" + }, + { + "id": "0da53533-6028-4a9e-ab65-083b15a3cbb3", + "video_id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "display_order": 4, + "prompt": "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Atmospheric cinematic shot inside Ngoc Truc Warehouse. Le Quoc Tien shines a flashlight onto a heavy dark metal hatch embedded in the concrete floor. The circular sun emblem with twelve rays on the hatch glows with an ominous deep red bioluminescent light. Dense cold vapor rising from the metallic seams. 35mm cinematic photograph, moody volumetric shadows.", + "image_prompt": null, + "video_prompt": "0-3s: Medium tracking shot of Le Quoc Tien prying aside a rusted metal shelf inside Ngoc Truc Warehouse to reveal a dark round floor hatch. 3-6s: The etched circular sun emblem on the metal hatch pulses with an ancient crimson glow. 6-8s: Freezing subterranean vapor hisses out as deep mechanical latches unlock underneath.", + "character_names": [ + "Le Quoc Tien", + "Ngoc Truc Warehouse" + ], + "parent_scene_id": null, + "chain_type": "ROOT", + "source": "root", + "vertical_image_url": null, + "vertical_image_media_id": null, + "vertical_image_status": "PENDING", + "vertical_video_url": null, + "vertical_video_media_id": null, + "vertical_video_status": "PENDING", + "vertical_upscale_url": null, + "vertical_upscale_media_id": null, + "vertical_upscale_status": "PENDING", + "horizontal_image_url": null, + "horizontal_image_media_id": null, + "horizontal_image_status": "PENDING", + "horizontal_video_url": null, + "horizontal_video_media_id": null, + "horizontal_video_status": "PENDING", + "horizontal_upscale_url": null, + "horizontal_upscale_media_id": null, + "horizontal_upscale_status": "PENDING", + "vertical_end_scene_media_id": null, + "horizontal_end_scene_media_id": null, + "transition_prompt": null, + "trim_start": null, + "trim_end": null, + "duration": null, + "narrator_text": null, + "created_at": "2026-09-22T17:42:30Z", + "updated_at": "2026-09-22T17:42:30Z" + }, + { + "id": "50c2da1f-57f4-4027-b275-493751085a31", + "video_id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "display_order": 5, + "prompt": "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. Epic cinematic wide shot of Dried West Lake Colossus in Hanoi under a dark apocalyptic red sun. Cracked black mud lakebed exposes colossal ancient dark metallic ribbed structures resembling giant dragon bones protruding from the earth. Tran Thanh Thuy and Do Minh Kha stand on the distant embankment silhouetted against the colossal metallic ruins and crimson haze. Masterpiece cinematic photography, 16:9 ultra-wide, atmospheric scale.", + "image_prompt": null, + "video_prompt": "0-3s: Epic sweeping drone pull-back over cracked black mud of Dried West Lake Colossus exposing colossal ancient metal ribs rising from the dry lakebed. 3-6s: Crimson sunlight reflects off the weathered metallic structures as steam rises from fissures. 6-8s: Low shot of Tran Thanh Thuy and Do Minh Kha on the distant embankment silhouetted against the colossal colossus.", + "character_names": [ + "Tran Thanh Thuy", + "Do Minh Kha", + "Dried West Lake Colossus" + ], + "parent_scene_id": null, + "chain_type": "ROOT", + "source": "root", + "vertical_image_url": null, + "vertical_image_media_id": null, + "vertical_image_status": "PENDING", + "vertical_video_url": null, + "vertical_video_media_id": null, + "vertical_video_status": "PENDING", + "vertical_upscale_url": null, + "vertical_upscale_media_id": null, + "vertical_upscale_status": "PENDING", + "horizontal_image_url": null, + "horizontal_image_media_id": null, + "horizontal_image_status": "PENDING", + "horizontal_video_url": null, + "horizontal_video_media_id": null, + "horizontal_video_status": "PENDING", + "horizontal_upscale_url": null, + "horizontal_upscale_media_id": null, + "horizontal_upscale_status": "PENDING", + "vertical_end_scene_media_id": null, + "horizontal_end_scene_media_id": null, + "transition_prompt": null, + "trim_start": null, + "trim_end": null, + "duration": null, + "narrator_text": null, + "created_at": "2026-09-22T17:42:30Z", + "updated_at": "2026-09-22T17:42:30Z" + } +] \ No newline at end of file diff --git a/scripts/created_video.json b/scripts/created_video.json new file mode 100644 index 000000000..43aef4621 --- /dev/null +++ b/scripts/created_video.json @@ -0,0 +1,19 @@ +{ + "id": "945ad6d4-5d79-4790-80db-1bff16ed7255", + "project_id": "594758cc-11f5-4f92-8b3c-1213686591f4", + "title": "H\u1ed3ng Nh\u1eadt Th\u0103ng Long - Teaser Trailer", + "description": null, + "display_order": 0, + "status": "DRAFT", + "orientation": "HORIZONTAL", + "vertical_url": null, + "horizontal_url": null, + "thumbnail_url": null, + "duration": null, + "resolution": null, + "youtube_id": null, + "privacy": "unlisted", + "tags": null, + "created_at": "2026-09-22T17:42:07Z", + "updated_at": "2026-09-22T17:42:07Z" +} \ No newline at end of file diff --git a/scripts/debug_op_lookup.py b/scripts/debug_op_lookup.py new file mode 100644 index 000000000..5456b0b75 --- /dev/null +++ b/scripts/debug_op_lookup.py @@ -0,0 +1,31 @@ +import asyncio +from agent.services.flow_client import get_flow_client +from agent.config import FLOW_PROJECT_ID + +async def main(): + client = get_flow_client() + pid = "594758cc-11f5-4f92-8b3c-1213686591f4" + op_id = "f870145a-7ab6-4608-9643-25839dcf8a9f" + + print("Testing _media_id_for...") + try: + mid = await client._media_id_for(op_id, pid) + print("Result mid:", mid) + except Exception as e: + print("Error in _media_id_for:", e) + + # Let's inspect the raw listing window around op_id + import agent.services.flow_batch as fb + res = await client.batch_rpc( + fb.RPC_PROJECT_MEDIA, fb.project_media_request(pid), + match=op_id, timeout=30 + ) + raw = res.get("data") or "" + print("Raw match length:", len(raw)) + start = raw.find(op_id) + print("Start index:", start) + if start != -1: + print("Snippet around op_id:") + print(raw[max(0, start-100): min(len(raw), start+500)]) + +asyncio.run(main()) diff --git a/scripts/inspect_flow_cache.py b/scripts/inspect_flow_cache.py new file mode 100644 index 000000000..b65298750 --- /dev/null +++ b/scripts/inspect_flow_cache.py @@ -0,0 +1,9 @@ +import asyncio +from agent.services.flow_client import get_flow_client + +async def main(): + client = get_flow_client() + print("operation_media:", client._operation_media) + print("operation_projects:", client._operation_projects) + +asyncio.run(main()) diff --git a/scripts/inspect_processing.py b/scripts/inspect_processing.py new file mode 100644 index 000000000..63bf9ec9f --- /dev/null +++ b/scripts/inspect_processing.py @@ -0,0 +1,10 @@ +import sqlite3 + +conn = sqlite3.connect("flow_agent.db") +c = conn.cursor() + +c.execute("SELECT id, scene_id, status, request_id, error_message FROM request WHERE video_id='945ad6d4-5d79-4790-80db-1bff16ed7255' AND type='GENERATE_VIDEO' AND status='PROCESSING'") +for r in c.fetchall(): + print(r) + +conn.close() diff --git a/scripts/inspect_video_progress.py b/scripts/inspect_video_progress.py new file mode 100644 index 000000000..815c9905a --- /dev/null +++ b/scripts/inspect_video_progress.py @@ -0,0 +1,19 @@ +import sqlite3 +import json + +conn = sqlite3.connect("flow_agent.db") +c = conn.cursor() + +c.execute("SELECT id, scene_id, status, error_message, updated_at FROM request WHERE video_id='945ad6d4-5d79-4790-80db-1bff16ed7255' AND type='GENERATE_VIDEO'") +reqs = c.fetchall() +print("=== REQUESTS ===") +for r in reqs: + print(r) + +c.execute("SELECT display_order, id, horizontal_video_status, horizontal_video_media_id FROM scene ORDER BY display_order") +scenes = c.fetchall() +print("\n=== SCENES ===") +for s in scenes: + print(s) + +conn.close() diff --git a/scripts/populate_entities_via_api.py b/scripts/populate_entities_via_api.py new file mode 100644 index 000000000..3e8a745e3 --- /dev/null +++ b/scripts/populate_entities_via_api.py @@ -0,0 +1,83 @@ +import json +import urllib.request + +pid = '594758cc-11f5-4f92-8b3c-1213686591f4' + +# Pre-computed image_prompts using realistic style +entities = [ + { + 'name': 'Le Quoc Tien', + 'entity_type': 'character', + 'description': 'Le Quoc Tien: 29-year-old Vietnamese system infrastructure engineer, lean athletic build, sharp determined Asian features, short clean black hair, wearing dark charcoal tactical t-shirt and grey cargo pants, digital wrist gauge, observant survivalist gaze.', + 'image_prompt': 'Single reference image of 29-year-old Vietnamese system infrastructure engineer, lean athletic build, sharp determined Asian features, short clean black hair, wearing dark charcoal tactical t-shirt and grey cargo pants, digital wrist gauge, observant survivalist gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed', + 'voice_description': 'Calm, firm, determined Vietnamese male voice with deep analytical cadence' + }, + { + 'name': 'Do Minh Kha', + 'entity_type': 'character', + 'description': 'Do Minh Kha: 34-year-old Vietnamese logistics commander, tall imposing authoritative posture, slicked-back dark hair, wearing an unbuttoned black button-down shirt with rolled-up sleeves, dark trousers, distinctive matte black ring on his left ring finger, piercing cold calculated gaze.', + 'image_prompt': 'Single reference image of 34-year-old Vietnamese logistics commander, tall imposing authoritative posture, slicked-back dark hair, wearing an unbuttoned black button-down shirt with rolled-up sleeves, dark trousers, distinctive matte black ring on his left ring finger, piercing cold calculated gaze. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed', + 'voice_description': 'Low, smooth, chillingly calm male voice with absolute authority' + }, + { + 'name': 'Tran Thanh Thuy', + 'entity_type': 'character', + 'description': 'Tran Thanh Thuy: 27-year-old Vietnamese investigative journalist, smart analytical expression, hair tied back in a neat ponytail, wearing a light beige utility shirt, olive multi-pocket reporter vest, canvas shoulder bag carrying a compact camera, intelligent perceptive dark eyes.', + 'image_prompt': 'Single reference image of 27-year-old Vietnamese investigative journalist, smart analytical expression, hair tied back in a neat ponytail, wearing a light beige utility shirt, olive multi-pocket reporter vest, canvas shoulder bag carrying a compact camera, intelligent perceptive dark eyes. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Full body shot from head to toe, standing upright and straight (not tilted or leaning). Centered in frame with balanced composition. Front-facing view, looking directly at camera. Neutral simple background that does not distract from the subject. Proper proportions and anatomy. Character perfectly vertical, not skewed or rotated. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed', + 'voice_description': 'Clear, articulate, sharp and perceptive Vietnamese female voice' + }, + { + 'name': 'Nguyen Trai Avenue', + 'entity_type': 'location', + 'description': 'Nguyen Trai Avenue: Wide bustling urban avenue in Hanoi during morning rush hour, elevated concrete metro tracks overhead with modern green Cat Linh - Ha Dong passenger train gliding past sleek glass skyscrapers and dense commuter traffic under a clear morning sky.', + 'image_prompt': 'Single reference image of Wide bustling urban avenue in Hanoi during morning rush hour, elevated concrete metro tracks overhead with modern green Cat Linh - Ha Dong passenger train gliding past sleek glass skyscrapers and dense commuter traffic under a clear morning sky. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed' + }, + { + 'name': 'Dai Ha Mall Heat Trap', + 'entity_type': 'location', + 'description': 'Dai Ha Mall Heat Trap: Massive modern glass shopping mall in Ha Dong district under a terrifying dark crimson sun and apocalyptic red sky, giant glass windows completely fogged with thick condensation from dark boiling interior, heat ripples warping the melting empty asphalt parking lot outside.', + 'image_prompt': 'Single reference image of Massive modern glass shopping mall in Ha Dong district under a terrifying dark crimson sun and apocalyptic red sky, giant glass windows completely fogged with thick condensation from dark boiling interior, heat ripples warping the melting empty asphalt parking lot outside. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed' + }, + { + 'name': 'Ngoc Truc Warehouse', + 'entity_type': 'location', + 'description': 'Ngoc Truc Warehouse: Secluded industrial concrete warehouse on Hanoi outskirts, weathered corrugated metal roof, dusty grey concrete floor with faint cracks, heavy circular dark metal floor hatch with an etched twelve-ray sun emblem hidden beneath metal shelving.', + 'image_prompt': 'Single reference image of Secluded industrial concrete warehouse on Hanoi outskirts, weathered corrugated metal roof, dusty grey concrete floor with faint cracks, heavy circular dark metal floor hatch with an etched twelve-ray sun emblem hidden beneath metal shelving. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed' + }, + { + 'name': 'Dried West Lake Colossus', + 'entity_type': 'location', + 'description': 'Dried West Lake Colossus: Dried-up West Lake lakebed under a scorching apocalyptic deep crimson sun and hazy red sky, cracked black mud terrain revealing gigantic ancient dark metallic curved rib structures rising from the earth like colossal dragon bones, rising hot thermal steam.', + 'image_prompt': 'Single reference image of Dried-up West Lake lakebed under a scorching apocalyptic deep crimson sun and hazy red sky, cracked black mud terrain revealing gigantic ancient dark metallic curved rib structures rising from the earth like colossal dragon bones, rising hot thermal steam. Photorealistic RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light, real footage. NOT 3D render, NOT CGI, NOT digital art, NOT illustration, NOT anime, NOT painting, NOT cartoon. COMPOSITION: Establishing shot showing the full environment. Balanced level composition with straight horizon. Clear focal point. Atmospheric and richly detailed. Show depth and spatial layout. ONE single image only, NOT a multi-panel grid or multiple views. Studio lighting, highly detailed' + } +] + +created_ids = {} + +for ent in entities: + req_body = json.dumps(ent).encode('utf-8') + req = urllib.request.Request( + 'http://127.0.0.1:8100/api/characters', + data=req_body, + headers={'Content-Type': 'application/json'}, + method='POST' + ) + with urllib.request.urlopen(req) as resp: + char_data = json.loads(resp.read().decode('utf-8')) + cid = char_data['id'] + created_ids[ent['name']] = cid + print(f"Created Character: {ent['name']} -> {cid}") + + # Link to project + link_req = urllib.request.Request( + f'http://127.0.0.1:8100/api/projects/{pid}/characters/{cid}', + data=b'{}', + headers={'Content-Type': 'application/json'}, + method='POST' + ) + with urllib.request.urlopen(link_req) as resp: + print(f"Linked {ent['name']} to project {pid}") + +with open('scripts/created_entities.json', 'w', encoding='utf-8') as f: + json.dump(created_ids, f, indent=2) +print("Done all entities!") diff --git a/scripts/search_db_ids.py b/scripts/search_db_ids.py new file mode 100644 index 000000000..bd6675205 --- /dev/null +++ b/scripts/search_db_ids.py @@ -0,0 +1,17 @@ +import sqlite3 + +conn = sqlite3.connect("flow_agent.db") +c = conn.cursor() + +tables = [t[0] for t in c.execute("SELECT name FROM sqlite_master WHERE type='table'").fetchall()] +for t in tables: + cols = [col[1] for col in c.execute(f"PRAGMA table_info({t})").fetchall()] + for col in cols: + try: + rows = c.execute(f"SELECT * FROM {t} WHERE {col} LIKE '%6c8df1af%' OR {col} LIKE '%825308bd%' OR {col} LIKE '%f870145a%'").fetchall() + if rows: + print(f"Found in {t}.{col}:", rows) + except Exception: + pass + +conn.close() diff --git a/scripts/test_video_gen.py b/scripts/test_video_gen.py new file mode 100644 index 000000000..4e04770f0 --- /dev/null +++ b/scripts/test_video_gen.py @@ -0,0 +1,54 @@ +import requests +import json + +url = "http://127.0.0.1:8100/api/flow/generate-video" + +# Test 1: veo_3_1_i2v_lite +patch_res = requests.patch("http://127.0.0.1:8100/api/models", json={ + "video_models": { + "PAYGATE_TIER_TWO": { + "frame_2_video": { + "VIDEO_ASPECT_RATIO_LANDSCAPE": "veo_3_1_i2v_lite", + "VIDEO_ASPECT_RATIO_PORTRAIT": "veo_3_1_i2v_lite" + } + } + } +}) + +payload_veo = { + "start_image_media_id": "a6010398-57c9-4e27-a89f-31ed0ddf2d1a", + "prompt": "Camera pans slowly across cracked asphalt under a red burning sun.", + "project_id": "594758cc-11f5-4f92-8b3c-1213686591f4", + "scene_id": "02f6d29e-be27-491a-b1ad-baa944964890", + "aspect_ratio": "VIDEO_ASPECT_RATIO_LANDSCAPE", + "user_paygate_tier": "PAYGATE_TIER_TWO" +} + +print("\n--- Testing Veo (veo_3_1_i2v_lite) ---") +res = requests.post(url, json=payload_veo, timeout=30) +print("Status code:", res.status_code) +try: + print("Response:", json.dumps(res.json(), indent=2)) +except Exception: + print("Response text:", res.text) + +# Test 2: Omni Flash +payload_omni = { + "start_image_media_id": "a6010398-57c9-4e27-a89f-31ed0ddf2d1a", + "prompt": "Camera pans slowly across cracked asphalt under a red burning sun.", + "project_id": "594758cc-11f5-4f92-8b3c-1213686591f4", + "scene_id": "02f6d29e-be27-491a-b1ad-baa944964890", + "aspect_ratio": "VIDEO_ASPECT_RATIO_LANDSCAPE", + "user_paygate_tier": "PAYGATE_TIER_TWO", + "model_family": "omni_flash", + "duration_s": 8, + "resolution": "720p" +} + +print("\n--- Testing Omni Flash (abra_i2v_8s) ---") +res2 = requests.post(url, json=payload_omni, timeout=30) +print("Status code:", res2.status_code) +try: + print("Response:", json.dumps(res2.json(), indent=2)) +except Exception: + print("Response text:", res2.text) diff --git a/scripts/update_scene1_video.py b/scripts/update_scene1_video.py new file mode 100644 index 000000000..1e2644a17 --- /dev/null +++ b/scripts/update_scene1_video.py @@ -0,0 +1,14 @@ +import sqlite3 + +conn = sqlite3.connect("flow_agent.db") +c = conn.cursor() +c.execute(""" + UPDATE scene + SET horizontal_video_media_id = 'c8939cac-021c-4000-a355-ec23628e5ea0', + horizontal_video_url = 'https://flow-content.google/video/c8939cac-021c-4000-a355-ec23628e5ea0?Expires=1790121427&KeyName=labs-flow-prod-cdn-key&Signature=3RdzQrTwdp0xdixmvS4V7MGy7Cc', + horizontal_video_status = 'COMPLETED' + WHERE id = '02f6d29e-be27-491a-b1ad-baa944964890' +""") +print("Updated scene 1:", c.rowcount) +conn.commit() +conn.close() diff --git a/scripts/upgrade_scene_1.py b/scripts/upgrade_scene_1.py new file mode 100644 index 000000000..0da731f00 --- /dev/null +++ b/scripts/upgrade_scene_1.py @@ -0,0 +1,41 @@ +import json +import urllib.request + +sid = "02f6d29e-be27-491a-b1ad-baa944964890" +url = f"http://127.0.0.1:8100/api/scenes/{sid}" + +payload = { + "prompt": ( + "Real RAW photograph, shot on Canon EOS R5, 35mm lens, natural available light. " + "Dramatic low-angle cinematic shot in subterranean B3 basement parking at Me Tri under extreme heat. " + "Le Quoc Tien lies on scorched concrete floor full of deep heat fractures, clutching a bleeding abdominal wound " + "beside a torn empty water pouch and heat-warped debris. In the background, Do Minh Kha stands looming with a cold detached gaze, " + "holding a tactical combat knife, backlit by an ominous beam of deep crimson sunlight piercing through a jagged collapsed ceiling fissure. " + "Chiaroscuro high contrast lighting, floating soot embers, atmospheric heat distortion waves, 35mm RAW photograph." + ), + "video_prompt": ( + "0-3s: Low-angle tracking shot through heat-warped plastic debris and scorched concrete in subterranean B3 basement at Me Tri " + "as Do Minh Kha walks slowly past motionless casualties, boots coated in red dust. " + "3-6s: Camera tilts down as Do Minh Kha crouches over Le Quoc Tien, who clutches a bleeding abdominal wound beside a torn empty water pouch. " + "Do Minh Kha speaks in a hoarse parched voice \"Lê Quốc Tiến, mày vốn không nên sống lâu đến thế.\" " + "6-8s: Close-up of Do Minh Kha raising a gleaming tactical knife reflecting the deep crimson sunlight bleeding through a fractured ceiling slab, " + "then plunging the blade downward into pitch black darkness. " + "Audio: Stifled gasping breath, slow crunching footsteps on gravel, hoarse menacing dialogue, sharp metallic blade unsheath, deep sub-bass cinematic hit. " + "Negative: subtitles, watermark, text overlay." + ), + "narrator_text": "Tầng hầm B3 Mễ Trì, năm 2031. Dưới ánh Hồng Nhật thiêu đốt, lưỡi dao của Đỗ Minh Kha đã kết thúc ba năm sinh tồn của tôi." +} + +req = urllib.request.Request( + url, + data=json.dumps(payload).encode("utf-8"), + headers={"Content-Type": "application/json"}, + method="PATCH" +) + +with urllib.request.urlopen(req) as resp: + res = json.loads(resp.read().decode()) + print("Updated successfully:", res["id"]) + print("Prompt:", res["prompt"]) + print("Video prompt:", res["video_prompt"]) + print("Narrator text:", res["narrator_text"]) diff --git a/tests/unit/test_flow_batch_golden.py b/tests/unit/test_flow_batch_golden.py index be4c0364b..66dfd9031 100644 --- a/tests/unit/test_flow_batch_golden.py +++ b/tests/unit/test_flow_batch_golden.py @@ -37,11 +37,10 @@ def pinned_uuids(monkeypatch): '[[["ogiZ0b","[null,[[null,null,[[\\"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\\",null,' 'null,null,1]],42,2,\\"GEM_PIX_2\\",null,[null,22,null,null,null,' '\\"11111111-2222-3333-4444-555555555555\\",null,null,null,null,' - '[\\"__CAPTCHA__\\",1]],[[[\\"a cat\\"]]],null,null,null,' - '\\"00000000-0000-4000-8000-000000000001\\",' - '\\"00000000-0000-4000-8000-000000000002\\"]],1,[null,22,null,null,null,' + '[\\"__CAPTCHA__\\",1]],[[[\\"a cat\\"]]],null,null,null,null,' + '\\"00000000-0000-4000-8000-000000000001\\"]],1,[null,22,null,null,null,' '\\"11111111-2222-3333-4444-555555555555\\",null,null,null,null,' - '[\\"__CAPTCHA__\\",1]],[\\"00000000-0000-4000-8000-000000000003\\"]]",' + '[\\"__CAPTCHA__\\",1]],[\\"00000000-0000-4000-8000-000000000002\\"]]",' 'null,"generic"]]]' ) diff --git a/tests/unit/test_video_reviewer.py b/tests/unit/test_video_reviewer.py index 3562b4322..6ac0e0970 100644 --- a/tests/unit/test_video_reviewer.py +++ b/tests/unit/test_video_reviewer.py @@ -98,10 +98,15 @@ def test_downsampling_selects_correct_nonconsecutive_frames_across_chunks( symlinks = sorted(chunk_dir.glob("f_*.jpg")) assert len(symlinks) == len(expected_chunk) for link, expected_target in zip(symlinks, expected_chunk): - assert link.resolve() == expected_target.resolve(), ( - f"chunk {sheet_idx} symlink {link.name} points to " - f"{link.resolve()}, expected {expected_target.resolve()}" - ) + if link.is_symlink(): + assert link.resolve() == expected_target.resolve(), ( + f"chunk {sheet_idx} symlink {link.name} points to " + f"{link.resolve()}, expected {expected_target.resolve()}" + ) + else: + assert link.read_bytes() == expected_target.read_bytes(), ( + f"chunk {sheet_idx} file {link.name} content mismatch with {expected_target}" + ) finally: shutil.rmtree(out_dir, ignore_errors=True) From 00d55748e8c674bad29f860fb0711f8fee476d17 Mon Sep 17 00:00:00 2001 From: TIENLV Date: Mon, 5 Oct 2026 21:40:59 +0700 Subject: [PATCH 4/4] fix(muse2api): support Windows file:// URLs using file_url_to_path --- agent/sdk/services/muse2api_provider.py | 7 ++++--- agent/services/muse2api_client.py | 6 ++++-- tests/unit/test_muse2api_provider.py | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/agent/sdk/services/muse2api_provider.py b/agent/sdk/services/muse2api_provider.py index 28af6c531..3cad78b0b 100644 --- a/agent/sdk/services/muse2api_provider.py +++ b/agent/sdk/services/muse2api_provider.py @@ -45,6 +45,7 @@ ProviderJob, ) from agent.services.muse2api_client import Muse2APIClient, Muse2APIError, to_data_url +from agent.utils.paths import file_url_to_path logger = logging.getLogger(__name__) @@ -186,10 +187,10 @@ async def register_existing_image( if parsed.scheme in ("http", "https"): canonical = url else: - local = Path(unquote(parsed.path)) if parsed.scheme == "file" else Path(url) - if not local.is_file(): + local = file_url_to_path(url) if parsed.scheme == "file" else Path(url) + if not local or not local.is_file(): return {"error": f"muse2api: local image not found for '{name}': {url}"} - canonical = "file://" + str(local.resolve()) + canonical = url if parsed.scheme == "file" else ("file://" + str(local.resolve())) mid = str(uuid.uuid4()) logger.info("muse2api: registered existing image '%s' → media_id=%s", name, mid[:8]) return {"data": {"media": [{"name": mid}], "url": canonical}} diff --git a/agent/services/muse2api_client.py b/agent/services/muse2api_client.py index ac43697c1..6beeafea6 100644 --- a/agent/services/muse2api_client.py +++ b/agent/services/muse2api_client.py @@ -33,6 +33,8 @@ import httpx +from agent.utils.paths import file_url_to_path + logger = logging.getLogger(__name__) TERMINAL_OK = "succeeded" @@ -83,8 +85,8 @@ async def to_data_url(ref: str, *, timeout: float = 60.0) -> str: mime = resp.headers.get("content-type", "").split(";")[0].strip() mime = mime or mimetypes.guess_type(parsed.path)[0] or "image/png" else: - path = Path(unquote(parsed.path)) if parsed.scheme == "file" else Path(ref) - if not path.is_file(): + path = file_url_to_path(ref) if parsed.scheme == "file" else Path(ref) + if not path or not path.is_file(): raise FileNotFoundError(f"image not found: {ref}") data = await asyncio.to_thread(path.read_bytes) mime = mimetypes.guess_type(path.name)[0] or "image/png" diff --git a/tests/unit/test_muse2api_provider.py b/tests/unit/test_muse2api_provider.py index 2dc9cff05..2c179c4a8 100644 --- a/tests/unit/test_muse2api_provider.py +++ b/tests/unit/test_muse2api_provider.py @@ -97,7 +97,7 @@ async def test_image_is_saved_locally_with_minted_uuid(provider, gateway): gen = parse_result(result, "GENERATE_IMAGE") assert gen.success, result assert _is_uuid(gen.media_id) - assert gen.url.startswith("file://") and gen.url.endswith("/muse2api/img1.png") + assert gen.url.startswith("file://") and gen.url.replace("\\", "/").endswith("/muse2api/img1.png") assert (provider.output_dir / "img1.png").read_bytes() == PNG method, path, body = gateway.calls[0]