diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
index 7bfcfcff..ffa1f067 100644
--- a/docs/.vitepress/config.mts
+++ b/docs/.vitepress/config.mts
@@ -1,4 +1,5 @@
import { defineConfig } from 'vitepress'
+import nodePolyfills from 'rollup-plugin-polyfill-node';
// https://vitepress.dev/reference/site-config
export default defineConfig({
@@ -24,5 +25,8 @@ export default defineConfig({
socialLinks: [
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
]
+ },
+ vite: {
+ plugins: [nodePolyfills({ include: ['fs'] })]
}
})
diff --git a/docs/.vitepress/theme/components/Downloader.vue b/docs/.vitepress/theme/components/Downloader.vue
new file mode 100644
index 00000000..33f021db
--- /dev/null
+++ b/docs/.vitepress/theme/components/Downloader.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
index e69de29b..6d6f5e15 100644
--- a/docs/.vitepress/theme/index.ts
+++ b/docs/.vitepress/theme/index.ts
@@ -0,0 +1,13 @@
+import type { Theme } from "vitepress";
+import DefaultTheme from "vitepress/theme";
+import Downloader from "./components/Downloader.vue";
+import ytParsePlugin from "./plugins/yt-parse";
+
+export default {
+ extends: DefaultTheme,
+ enhanceApp({ app }) {
+ // register your custom global components
+ app.component("Downloader", Downloader);
+ app.use(ytParsePlugin);
+ },
+} satisfies Theme;
diff --git a/docs/.vitepress/theme/plugins/yt-parse.ts b/docs/.vitepress/theme/plugins/yt-parse.ts
new file mode 100644
index 00000000..1c11fda7
--- /dev/null
+++ b/docs/.vitepress/theme/plugins/yt-parse.ts
@@ -0,0 +1,41 @@
+import { type Plugin, type ViteDevServer } from "vite";
+import { readFileSync, mkdirSync, writeFileSync } from "fs";
+
+export default function ytParsePlugin(): Plugin {
+ return {
+ name: "clipboard-server-spawn",
+ configureServer(server: ViteDevServer) {
+ server.ws.on("download-q", ({ q }) => {
+ try {
+ mkdirSync(`docs/${q}`);
+ } catch (e) {}
+
+ let outMd = "";
+
+ const re = /^(?\d{1,2}):(?\d{2})\s*$/;
+
+ for (const line of readFileSync(`docs/${q}.md`, "utf-8").trimEnd().split("\n")) {
+ const m = re.exec(line);
+ if (m) {
+ const { min, sec } = m.groups!;
+ const t = parseInt(min) * 60 + parseInt(sec);
+ server.ws.send("seek-q", { t });
+ outMd += `[${line}](./${q}/${t}.png)`;
+ } else {
+ outMd += line + "\n";
+ }
+ }
+
+ writeFileSync(`docs/${q}.md`, outMd);
+ });
+
+ server.ws.on("timed-q", ({ q, t, data }) => {
+ writeFileSync(
+ `docs/${q}/${t}.png`,
+ data.replace(/^data:image\/png;base64,/, ""),
+ "base64",
+ );
+ });
+ },
+ };
+}
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
index 4d967ada..61ce5f52 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -23,4 +23,4 @@ features:
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
---
-
\ No newline at end of file
+
diff --git a/docs/public/.gitignore b/docs/public/.gitignore
index 2ea56adb..7c9d611b 100644
--- a/docs/public/.gitignore
+++ b/docs/public/.gitignore
@@ -1,2 +1,3 @@
+*
!.gitignore
!README.md
diff --git a/docs/qVVhBGT0K7Y.md b/docs/qVVhBGT0K7Y.md
new file mode 100644
index 00000000..a8e249d8
--- /dev/null
+++ b/docs/qVVhBGT0K7Y.md
@@ -0,0 +1,581 @@
+
+0:14
+Aren't you a forensic? What brings you to our squad? What's your connections to the Raw Diamond case?
+0:25
+None. Then why'd you show up at the trading spot?
+0:34
+Answer me! Why did you come here?
+2:20
+Not just me. Anyone here, and even anyone Lanzi might have met after she left,
+2:26
+could be the killer. We're gonna check
+2:32
+every suspect. But right now, you're our prime suspect.
+2:41
+In the autopsy report, was there any erosive bleeding?
+2:52
+Or any foreign objects in Lanzi's stomach?
+2:58
+Please go ahead. You've got a person dead from cyanide poisoning,
+3:03
+but you can't figure out when or where the poison got slipped to her?
+3:09
+It means the poison was already in her body.
+3:16
+You mean there's no killer? Qiu Lanzi poisoned and killed herself?
+3:25
+You found my fingerprints on that bottle of water. But it's because
+3:30
+that one wasn't for Lanzi.
+3:36
+Ms. Zhu! Ms. Zhu, what did Mr. Qi say? He thinks the cyanide
+3:42
+was already in Qiu Lanzi's body. How did he know? The report was turned in just now.
+3:50
+Have you heard of remote case-solving? It's to find out the truth by analyzing crime scenes
+3:55
+and examining bodies without physical presence. Only a few forensic doctors can do this,
+4:00
+and Qi Sizhe is one of them.
+4:06
+Gao Yuan. Check the stuff he used in the lab. Then compare them with that bottle of water.
+4:12
+Okay. I go with you.
+4:20
+Did you transfer here because of what happened before?
+4:27
+You followed Jiang Fei, went to the bar, and visited Li Yiqi in the hospital.
+4:33
+What do you wanna do? I've told you. That's not truth.
+4:45
+Han Feng. You really think I'd kill a forensic intern
+4:51
+I just met?
+4:57
+You know very well it couldn't be me. What I think matters not.
+5:02
+Figuring out the truth matters.
+5:22
+Since he's helping with the case, maybe you could clue him in on some of the stuff we've dug up,
+5:29
+just enough to speed things along and catch the killer faster.
+5:36
+Okay. Mr. Gao. Please test Mr. Qi's water
+5:42
+and effervescent tablets. Tell us what you find out. Okay. Thank you.
+6:03
+Mr. Han. Ms. Zhu. The results come out. The report shows each of their saliva
+6:08
+in the other's water. So Qiu Lanzi took his water by mistake.
+6:13
+Yes. The water Lanzi drank should be Mr. Qi's soda water. And in Mr. Qi's bag
+6:19
+was just mineral water. Okay.
+6:25
+Gotta go.
+6:33
+Mr. Han. Ms. Zhu.
+6:42
+I've sure you've known why my fingerprints were on that bottle of water.
+6:49
+I wanna know why you said the cyanide was already in Qiu Lanzi's body.
+6:55
+I think Lanzi was usually on meds.
+7:01
+We did find some stomach meds in her bag. What meds? Omeprazole.
+7:07
+What else did the autopsy find? Found two drug capsules in her stomach. The shells looked melted,
+7:13
+and one of them had cracked open. Last question.
+7:20
+How many pills are left in her medicine bottle? Just one.
+7:39
+I think I know how Lanzi was murdered. Lanzi's stomach med, omeprazole, is an enteric-coated capsule.
+7:46
+It's designed to pass through the stomach without breaking down in the acid, then get absorbed
+7:52
+in the intestines where things are more alkaline. However, it was found in her stomach.
+7:59
+Why? Qiu Lanzi took your water by mistake. It was soda water,
+8:05
+making the capsule dissolve quicker. The coating on the capsules is slow-release,
+8:10
+so they should start working within 4 to 12 hours. But she drank soda, and that cut the time
+8:16
+way short. So the cyanide was hidden in Lanzi's stomach med capsules.
+8:24
+One of the two capsules in her stomach had cracked open.
+8:29
+The killer must've noticed it too when slipping cyanide into the capsules. Once the capsule coating
+8:35
+gets partly dissolved by the soda, the cyanide inside comes into contact with the stomach lining.
+8:41
+The corrosive poison will definitely cause erosive bleeding in there.
+8:48
+How to prove it? There's still one pill left in her medicine bottle.
+8:55
+Su.
+9:09
+I'm sorry, Ms. Zhao. The cooperation with He City is about to end, and you're going abroad. Sorry we have to call you back.
+9:14
+It's fine. I'll be there if you need me. So what happened? What do you want me to check?
+9:22
+Mr. Qi figured the victim might take omeprazole capsules laced with cyanide, but then drank soda by accident.
+9:27
+That made the capsule dissolve in the stomach instead of the intestines. We've found the capsules in her stomach.
+9:34
+So we need you here to test one last pill in the victim's medicine bottle.
+9:41
+I got this. Thank you.
+10:13
+How is it? Ms. Zhao is testing the pill. It needs some time.
+10:20
+Cross-check all the evidence and don't miss any details. I'll wait here. Okay.
+10:34
+The dosage of omeprazole is three pills a day, one in the morning and two in the evening.
+10:40
+If the killer wanted to make sure Lanzi died that very night, he must've made certain
+10:46
+at least one of the two pills she took was poisoned.
+10:52
+If he only poisoned one pill, Lanzi might not take it until the second morning.
+10:57
+That's a one-in-three chance. But if he poisoned three pills, then there'd always be
+11:03
+one poisoned pill left as evidence. So, poisoning exactly
+11:10
+two pills was the sweet spot. But if Qiu Lanzi
+11:16
+took both the poisoned ones, we couldn't find anything in the left one as evidence.
+11:21
+She's got a one-in-three chance of swallowing both poisoned pills, which means
+11:27
+the killer only has that same shot at not leaving evidence in the medicine.
+11:33
+So we're just gambling on the last one.
+11:47
+We've got the result. The pill indeed contains cyanide, same as Mr. Qi supposed.
+12:04
+Mr. Qi, you're off the hook for now. You can go.
+12:12
+Ms. Zhu. I wanna help with the case and find out Lanzi's murderer.
+12:17
+And, something's off with Jiang Fei's autopsy report.
+12:24
+I'm afraid you gotta stay outta Jiang Fei and Qiu Lanzi's case.
+12:32
+I wanna see Jiang Fei's autopsy report. You're not the only forensic here. You don't gotta handle every single case.
+13:02
+Come in. Mr. Bai.
+13:12
+Qi Sizhe is off the hook now? Yes. And he found out how Qiu Lanzi died?
+13:22
+Qi Sizhe is a brilliant forensic doctor. And he's quite reasonable.
+13:28
+So he won't blame you for the necessity of your interrogation of him.
+13:36
+Mr. Bai. Do you know about his past?
+13:43
+He had a severe car accident. And I thought we'd lose a talented forensic doctor.
+13:49
+But I never thought he'd manage to hit rehab milestones in just a year that usually
+13:54
+take others three to five years. You can imagine how much this position means to him.
+14:03
+But he's quite stubborn. So is Han Feng. Among you three,
+14:10
+you're the calmest and most rational one. So I hope you can get them together
+14:15
+and handle cases.
+14:26
+Where's Xi? I had her check 788 Bar's security footage. I still have some doubts.
+14:32
+We found the cyanide in Qiu Lanzi's stomach meds. The killer could
+14:38
+get close to her and switch her meds. So it could be someone she knew all along.
+14:46
+Qiu Lanzi said something was off with Jiang Fei's body. Ask Mr. Gao to check his autopsy report again.
+14:54
+Su. Dig deeper into the social circles around Qiu Lanzi, Jiang Fei, and Li Yiqi,
+14:59
+especially Qiu Lanzi's connections. Okay. Mr. Han. Anything to add?
+15:05
+Nothing, for now.
+16:05
+Xi, got anything? Yeah. Half a month before Li Yiqi's case,
+16:10
+Mr. Qi showed up at 788 Bar quite a few times. I cross-checked a few security footages. Every time Mr. Qi showed up,
+16:16
+Jiang Fei was there too. Looks like Mr. Qi was following Jiang Fei.
+16:35
+Ms. Zhu. Here's Qi Sizhe's info. He had a severe
+16:41
+accident two years ago. A woman riding in his car died on the spot.
+16:49
+Ms. Zhu. Anything wrong with him? Get back to work. Yes.
+18:24
+Why did you come? Why did you follow Li Yiqi and Jiang Fei?
+18:40
+You know why. 'Cause it's related to Fei's death.
+18:47
+Raw Diamond...
+18:57
+You came for the Raw Diamond case. Jiang Fei's death isn't an accident.
+19:05
+It's a murder.
+19:14
+His body was found at 11:30 or so in the morning. It's the same as room temperature,
+19:20
+22 degrees. He's got these little square marks on his chest, bright red.
+19:25
+And the lividity on the side of the body is all patchy, dark red. Any problems? The bright red lividity
+19:30
+doesn't match the estimated time of death, and the body's cooling rate is way off. There are two possibilities.
+19:36
+First, the killer was trying to mess with the time of death. Second, the way the murder was done
+19:43
+messed with the body's temperature. And I think the second one's way more likely.
+19:49
+So my guess is, Jiang Fei probably... Froze to death?
+19:54
+At his own home? But his place doesn't have such an environment. There is one.
+20:09
+No way. It's too small.
+20:16
+If the killer stuffed Jiang Fei into the fridge, there gotta be
+20:21
+a lot of scratches and marks on Jiang Fei's body. But so far, there aren't any
+20:27
+such marks on the body. Only lividity. Lividity is the marks formed by blood
+20:33
+due to gravity at the dripping points. Jiang Fei was lying on his side when he died.
+20:38
+So, the lividity should only have formed on the side. But look here.
+20:45
+There are bright red marks on Jiang Fei's chest. Also, when Jiang Fei died,
+20:51
+his clothes were all wrinkled. His clothes look like they got wet and then dried off...
+20:58
+His fingers and toes were all wrinkled, a result of prolonged soaking in water
+21:04
+and osmosis. Jiang Fei was always a slob, so it's no wonder his clothes were wrinkled.
+21:11
+When we found the body, there was water at the bottom of the bathtub. The wrinkles on his skin were probably caused by soaking in the water.
+21:17
+Well, going by your logic, his fingers and toes shouldn't have gotten wrinkly since they haven't touched
+21:23
+the water at the bottom of the tub. But turns out that's not what happened.
+21:35
+So Jiang Fei didn't freeze to death in a freezer, but in the...
+21:40
+In the bathtub.
+21:49
+The window in Jiang Fei's bathroom has always been open.
+22:13
+When the body was found, the ice had already melted, but there were frostbite
+22:18
+marks on the body. The bright red mark on his chest is
+22:23
+the best proof. This is also caused by the failure of
+22:29
+various organs at low temperatures.
+22:34
+Judging from the traces at the scene, everything matches what Mr. Qi said.
+22:39
+Got it. Han Feng.
+22:45
+Are you buying that Jiang Fei's death wasn't an accident but murder now?
+23:02
+If Mr. Qi's reasoning holds up, we gotta check this place for any signs of
+23:07
+a second person. Search more thoroughly.
+24:07
+I wanna learn more from you and become a great forensic doctor like you!
+24:30
+Ms. Zhu. Any progress in Jiang Fei's case?
+24:37
+You've been cleared of suspicion. So why still look into Jiang Fei? I know you're really concerned about Jiang Fei's case
+24:43
+and Li Yiqi's case. I also know you can lead us closer to the truth.
+24:49
+But so far, you haven't explained the coincidences of your appearance
+24:55
+in these two cases. And this time,
+25:00
+why did you go to investigate Jiang Fei alone?
+25:06
+I want you to answer my question. And I'm not gonna answer any questions related to this case
+25:12
+until I trust you. Ms. Zhu.
+25:18
+I'm a forensic doctor. When someone dies, only forensic doctors can tell what they
+25:26
+went through before they died. And I believe whoever it is,
+25:33
+even drug dealers like Jiang Fei, they all deserve the truth.
+25:39
+I saw the possibility of homicide in Jiang Fei's case. So I gotta figure out the truth.
+25:48
+But he's quite stubborn. So is Han Feng.
+25:54
+So I hope you can get them together and handle cases.
+26:03
+So Jiang Fei died a little after 4 am? Yes.
+26:08
+If he froze to death, his body temperature was lower than normal. So the time it takes to cool down
+26:13
+would be shorter. Mr. Han.
+26:19
+Mr. Qi inferred that Jiang Fei froze to death. Let him tell us about it.
+26:33
+All we know is that Jiang Fei was frozen to death by the killer, but there aren't any clues
+26:39
+to find the killer. The killer made Jiang Fei
+26:45
+take cephalosporin when he was drunk, causing a disulfiram-like reaction.
+26:50
+Then, when he was unconscious, the killer froze his body with ice, which led to the failure of all his
+26:56
+internal organs, especially his heart, and he died. It shows that the killer has some knowledge human physiology.
+27:02
+Mr. Gao, after the first autopsy and test, what was in his stomach as food residue?
+27:09
+Wine and sausage, no cephalosporin. But the cephalosporin on his table was already opened,
+27:15
+and the pharmacological test detected it. The sausage wasn't digested, which means the last thing
+27:22
+the victim ate was the sausage.
+27:33
+Have you found a knife there? No. There are cuts on the sausage
+27:39
+but no knife around. Could someone have taken it? Jiang Fei's body didn't have
+27:45
+a scratch on it. The knife couldn't be the murder weapon. So why'd the killer take it away?
+27:52
+Did you guys do luminol at the scene?
+28:02
+There are no cuts on the body, but the killer had to take the knife from the scene.
+28:07
+That means... The knife wasn't used on the victim. But on the killer.
+28:48
+If this isn't Jiang Fei's blood, then it gotta be the killer's.
+29:01
+Why didn't you ask Mr. Qi to do the bloodstain comparison?
+29:06
+The results are out. No records matching in the database. Thank you.
+29:24
+So here's the timeline of these cases. On the evening of the 7th, Qiu Lanzi joined us investigating
+29:29
+the 788 Bar assault case. Then she teamed up with Mr. Gao and Mr. Qi
+29:35
+for the Li Yiqi's blood sample analysis until the next day. We found Jiang Fei's body at noon the next day,
+29:42
+and Qiu Lanzi showed up later. That night, she, Mr. Qi and Mr. Gao dissected Jiang Fei's body.
+29:49
+We found the remains of stomach meds in Qiu Lanzi's stomach. Based on the dissolution rate of the meds
+29:55
+and the timeline, Qiu Lanzi should've taken the stomach meds between the time
+30:00
+after the dissection of Jiang Fei's body and her death. The first time Qiu Lanzi left the station
+30:06
+and met me was around 9 pm. Two hours later, I got a call from Qiu Lanzi.
+30:12
+She said she'd found a lead on Jiang Fei's body. Ten minutes later, when Mr. Han and I got to the forensic office,
+30:19
+we found her body. The stomach medicine was found among her belongings.
+30:24
+She usually kept her stuff in the locker in the changing room. Got anything from the surveillance over there?
+30:29
+No cameras on the floor. There are just people going to and from work there. And Mr. Bai means we shouldn't
+30:35
+expand the investigation for now. He wants us to narrow down the suspects first.
+30:46
+So the most likely time for Qiu Lanzi to take the pills is between the time
+30:51
+she left the station and came back. We just don't know where she went and who she met.
+31:04
+What about Jiang Fei? Don't forget Qiu Lanzi said she had info about
+31:10
+Jiang Fei's cause of death before she died. Jiang Fei went home after getting drunk.
+31:16
+Where did he drink and who did he drink with? Have you found out? He didn't use mobile payment or cards. He always used cash,
+31:22
+so it's hard to find his consumption records. People like him are always afraid of leaving any clues.
+31:31
+Wan, let's go to the bar to check Jiang Fei's movements before he drank.
+31:36
+Xi, go and find out who Qiu Lanzi met after she left the station. Let's split up.
+31:42
+Okay. Do as Mr. Han says.
+32:04
+It's here, Mr. Han.
+32:10
+No, Mr. Han...
+32:46
+You're in charge here? This is legit business. Legit business? Then why so serious,
+32:52
+needing a guide to find here? Oh, come on! This is a gimmick. More people will wanna come in
+32:58
+if they need someone to bring them in. That's smart. Since it's so complicated to get here,
+33:04
+you should know who came here the day before yesterday, right? Sir. How the heck can I remember
+33:10
+all these guests every day? Take us to the security room. Sir. You need a warrant to do so.
+33:17
+A warrant, huh? I'm gonna call my buddies from Public Security Brigade and let them check it out.
+33:28
+Sir. You can check whatever you want.
+33:35
+We checked Jiang Fei's social circles. Super complicated. He's lived in cities all over the country. A drug dealer like him's gonna
+33:41
+have a lot of enemies. If we just look at the motives for murder, there are a bunch of suspects.
+33:46
+Here's his hidden ledger we found. There are up to 40 drug addicts listed in it, not to mention those
+33:53
+who bought imitation guns, plasma, and illegal drugs. Ms. Zhu. This is Qiu Lanzi's phone.
+33:59
+Got anything? I checked Qiu Lanzi's call records. After she left at 9 o'clock,
+34:05
+she made four consecutive calls within five minutes, and they were all to the same person. Who?
+34:11
+It's a chemical factory's lab. But it was off-work time then, and she called the switchboard,
+34:16
+so we still can't find out who she contacted. We gotta find out what relationship this factory has with Qiu Lanzi.
+34:22
+Okay. Ms. Zhu. Have you checked Qiu Lanzi's phone?
+34:28
+Xi just gave it to me. I watched the videos of Qiu Lanzi before and after she left here. She never stopped checking her phone.
+34:36
+I remembered that Mr. Han told me when he saw Qiu Lanzi that day, she was also anxiously checking her phone.
+34:43
+There must be some clues on her phone. She just didn't have time to tell us then.
+34:54
+Stop. Who's the girl drinking with Jiang Fei?
+35:01
+Jiang Fei had introduced her to us. Zhang Lu, I remember. She's into Lolita fashion, close to Jiang Fei.
+35:08
+She took photos of Jiang Fei's body? But phones are forbidden in the dissection room...
+35:14
+Maybe she had some reason. Check out these last three photos.
+35:20
+The first two are of the tattoo on Jiang Fei's arm, one taken without a black light,
+35:26
+and the other with a black light. And the last one is of the skin on his wrist.
+35:32
+Also, the first two were taken at the same time. But there's a gap of over 20 minutes before the last one.
+35:38
+Why did she wait over 20 minutes to take a photo of the skin on the wrist
+35:44
+without a black light? What did she find out?
+35:51
+I saw some illegal stuff in the bar near Ruixi Building. I just saw it when working.
+35:57
+It's fine. You're welcome. Treat me to dinner then.
+36:05
+Wan. Thank you. It's nothing.
+36:11
+Ms. Zhu asked me to investigate with you. No need to say that.
+36:24
+I saw Qiu Lanzi taking those photos, but I just glanced and left.
+36:30
+I was in the next room with Ms. Zhao taking samples for toxicology testing. If you also left,
+36:37
+then Lanzi was the only one left in the autopsy room. But when she was taking the photos,
+36:45
+she asked me what this was. What is this? It should be an old injury
+36:51
+or a mark left after having a tattoo removed. No. It seems to be a fluorescent tattoo.
+37:10
+There are two photos of the tattoo on the left forearm, one in natural color and the other under a black light.
+37:17
+If we follow the logic of the previous two photos, there should be another black-light photo.
+37:28
+There are lots of group photos of Jiang Fei with different girls on his phone, and one of them is Zhang Lu, the girl we've been looking for.
+37:35
+Zhang Lu, 24 years old, living in Xinhua Road, He City, an intern researcher at an inorganic chemistry institute,
+37:40
+majored in chemistry. She knows Qiu Lanzi. They were high school classmates, so they rented an room
+37:46
+and were roommates shortly. In the call records we retrieved, the last call Qiu Lanzi made
+37:52
+was to Zhang Lu's workplace.
+38:08
+You said you saw Zhang Lu and Qiu Lanzi arguing that day, right? Yeah.
+38:15
+I did see them arguing. But I didn't catch what they were arguing about.
+38:25
+When I left, I saw that girl wasn't feeling well and took some medicine.
+38:32
+Are you sure Qiu Lanzi took medicine at that time? I'm sure.
+38:46
+Where's Zhang Lu? Mr. Han. We've been searching for her with your info.
+39:00
+Excuse me. Your ID card and driving license please. Please open your trunk.
+39:12
+You're Zhang Lu, right? Zhang Lu. Please cooperate with us.
+39:34
+Zhang Lu, 24 years old. A researcher of the chemistry institute in He City. Were you at the basement bar
+39:41
+in Yunjin Building with Jiang Fei on the evening of August 7th? Yeah.
+39:47
+Then did you go home with him? No. I just had a few drinks and went back to my own place.
+39:53
+Is there anyone who can prove it? Prove it? Why? I live alone.
+39:59
+How can there be a witness? So no one can prove you stayed at your own place that night.
+40:09
+What was Jiang Fei's state when you saw him for the last time? He...
+40:17
+He seemed to catch cold. You're out drinking with a cold?
+40:26
+Do you even know that mixing antibiotics with alcohol could kill you?
+40:32
+But I just really wanted to have a drink with you.
+40:41
+How'd you hurt your finger? Cut it during an experiment.
+40:46
+What did Qiu Lanzi say when she came to the lab? What'd she tell you guys?
+40:52
+Isn't she interning here? Call her over! I'll confront her! Qiu Lanzi's dead.
+40:59
+Did you kill her? Dead... How... How come...
+41:12
+Zhang Lu, now we suspect you're the prime suspect in the murder cases of Qiu Lanzi and Jiang Fei. Got anything to say?
+41:20
+If Zhang Lu's blood sample matches the one we took from Jiang Fei's place, she's most likely
+41:26
+the killer. I didn't! I never killed anyone!
+41:31
+I didn't... I really didn't! Then just answer our questions! What did she say to you?
+41:37
+She... She told me Jiang Fei was dead,
+41:44
+and she saw my name on the body...
+41:59
+How is it? Wait a moment.
+42:17
+Ms. Zhu. The result is out.
+42:23
+Mr. Han. It matches.
+42:30
+Su. Arrest her. Xi, untie her. It's her.
+42:36
+No... Not me! I didn't kill them! I didn't!
+42:42
+It's not me! It's really not me! I never killed anyone! It's not me! I didn't!
+42:47
+Don't arrest me! Please! It's not me! You got the wrong person! It's not me! Not me!
+42:52
+Really not! I didn't kill them! You got the wrong person! It's not me! Not me!
+43:06
+We got the wrong person. It's not her.
+43:33
+Raw Diamond case is over! You just can't deal with reality! You never figured out Fei's death!
+43:39
+Li Yiqi. Jiang Fei. They're the clue from the case! Hey! Stop!
+43:45
+There's an opening here. The kidnapped girl was probably taken inside.
+43:50
+The killer set this up to throw us off about the cause of death. He knows way too much about
+43:56
+forensic, autopsies, even our police procedures. Wait, are you saying... The killer is one of us?
diff --git a/package.json b/package.json
index 528f702e..7f96f166 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,11 @@
"main": "index.js",
"license": "MIT",
"devDependencies": {
- "vitepress": "2.0.0-alpha.15"
+ "@types/node": "^20.19.30",
+ "rollup-plugin-polyfill-node": "^0.13.0",
+ "vite": "^7.3.1",
+ "vitepress": "2.0.0-alpha.15",
+ "vue": "^3.5.27"
},
"scripts": {
"dev": "vitepress dev docs",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 28c873bb..9babbfe4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,9 +8,21 @@ importers:
.:
devDependencies:
+ '@types/node':
+ specifier: ^20.19.30
+ version: 20.19.30
+ rollup-plugin-polyfill-node:
+ specifier: ^0.13.0
+ version: 0.13.0(rollup@4.55.2)
+ vite:
+ specifier: ^7.3.1
+ version: 7.3.1(@types/node@20.19.30)
vitepress:
specifier: 2.0.0-alpha.15
- version: 2.0.0-alpha.15(@algolia/client-search@5.46.3)(postcss@8.5.6)(react@19.2.3)(search-insights@2.17.3)
+ version: 2.0.0-alpha.15(@algolia/client-search@5.46.3)(@types/node@20.19.30)(postcss@8.5.6)(react@19.2.3)(search-insights@2.17.3)
+ vue:
+ specifier: ^3.5.27
+ version: 3.5.27
packages:
@@ -336,6 +348,24 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.53':
resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
+ '@rollup/plugin-inject@5.0.5':
+ resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
'@rollup/rollup-android-arm-eabi@4.55.2':
resolution: {integrity: sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==}
cpu: [arm]
@@ -506,6 +536,9 @@ packages:
'@types/mdurl@2.0.0':
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+ '@types/node@20.19.30':
+ resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
+
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -792,6 +825,11 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ rollup-plugin-polyfill-node@0.13.0:
+ resolution: {integrity: sha512-FYEvpCaD5jGtyBuBFcQImEGmTxDTPbiHjJdrYIp+mFIwgXiXabxvKUK7ZT9P31ozu2Tqm9llYQMRWsfvTMTAOw==}
+ peerDependencies:
+ rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
+
rollup@4.55.2:
resolution: {integrity: sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -840,6 +878,9 @@ packages:
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
unist-util-is@6.0.1:
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
@@ -1207,6 +1248,22 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.53': {}
+ '@rollup/plugin-inject@5.0.5(rollup@4.55.2)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.55.2)
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 4.55.2
+
+ '@rollup/pluginutils@5.3.0(rollup@4.55.2)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.55.2
+
'@rollup/rollup-android-arm-eabi@4.55.2':
optional: true
@@ -1341,6 +1398,10 @@ snapshots:
'@types/mdurl@2.0.0': {}
+ '@types/node@20.19.30':
+ dependencies:
+ undici-types: 6.21.0
+
'@types/unist@3.0.3': {}
'@types/web-bluetooth@0.0.21': {}
@@ -1349,10 +1410,10 @@ snapshots:
'@vercel/oidc@3.1.0': {}
- '@vitejs/plugin-vue@6.0.3(vite@7.3.1)(vue@3.5.27)':
+ '@vitejs/plugin-vue@6.0.3(vite@7.3.1(@types/node@20.19.30))(vue@3.5.27)':
dependencies:
'@rolldown/pluginutils': 1.0.0-beta.53
- vite: 7.3.1
+ vite: 7.3.1(@types/node@20.19.30)
vue: 3.5.27
'@vue/compiler-core@3.5.27':
@@ -1648,6 +1709,11 @@ snapshots:
rfdc@1.4.1: {}
+ rollup-plugin-polyfill-node@0.13.0(rollup@4.55.2):
+ dependencies:
+ '@rollup/plugin-inject': 5.0.5(rollup@4.55.2)
+ rollup: 4.55.2
+
rollup@4.55.2:
dependencies:
'@types/estree': 1.0.8
@@ -1724,6 +1790,8 @@ snapshots:
trim-lines@3.0.1: {}
+ undici-types@6.21.0: {}
+
unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
@@ -1761,7 +1829,7 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vite@7.3.1:
+ vite@7.3.1(@types/node@20.19.30):
dependencies:
esbuild: 0.27.2
fdir: 6.5.0(picomatch@4.0.3)
@@ -1770,9 +1838,10 @@ snapshots:
rollup: 4.55.2
tinyglobby: 0.2.15
optionalDependencies:
+ '@types/node': 20.19.30
fsevents: 2.3.3
- vitepress@2.0.0-alpha.15(@algolia/client-search@5.46.3)(postcss@8.5.6)(react@19.2.3)(search-insights@2.17.3):
+ vitepress@2.0.0-alpha.15(@algolia/client-search@5.46.3)(@types/node@20.19.30)(postcss@8.5.6)(react@19.2.3)(search-insights@2.17.3):
dependencies:
'@docsearch/css': 4.4.0
'@docsearch/js': 4.4.0(@algolia/client-search@5.46.3)(react@19.2.3)(search-insights@2.17.3)
@@ -1781,7 +1850,7 @@ snapshots:
'@shikijs/transformers': 3.21.0
'@shikijs/types': 3.21.0
'@types/markdown-it': 14.1.2
- '@vitejs/plugin-vue': 6.0.3(vite@7.3.1)(vue@3.5.27)
+ '@vitejs/plugin-vue': 6.0.3(vite@7.3.1(@types/node@20.19.30))(vue@3.5.27)
'@vue/devtools-api': 8.0.5
'@vue/shared': 3.5.27
'@vueuse/core': 14.1.0(vue@3.5.27)
@@ -1790,7 +1859,7 @@ snapshots:
mark.js: 8.11.1
minisearch: 7.2.0
shiki: 3.21.0
- vite: 7.3.1
+ vite: 7.3.1(@types/node@20.19.30)
vue: 3.5.27
optionalDependencies:
postcss: 8.5.6