rea/website/locales/messages.pot

11995 lines
375 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#
msgid ""
msgstr ""
"Project-Id-Version: REA website\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: website/public/blog/index.html:103
msgctxt "page:blog/index.html"
msgid "Skip to content"
msgstr ""
#: website/public/blog/index.html:113
#: website/public/blog/reverse-engineering-models/index.html:113
#: website/public/blog/touhou-reconstruction/index.html:113
#: website/public/examples/dino-lab/index.html:114 website/public/faq/index.html:113
#: website/public/first-investigation/index.html:113
#: website/public/get-started/index.html:113
#: website/public/guides/browser/index.html:113 website/public/guides/index.html:113
#: website/public/guides/javascript/index.html:113
#: website/public/guides/native/index.html:113 website/public/index.html:115
#: website/public/showcase/aegis/index.html:114
#: website/public/showcase/ctf/index.html:113
#: website/public/showcase/dx-ball/index.html:113 website/public/showcase/index.html:113
#: website/public/showcase/notion/index.html:113
#: website/public/showcase/th04/index.html:113
msgctxt "shared"
msgid "Get started"
msgstr ""
#: website/public/blog/index.html:114
#: website/public/blog/reverse-engineering-models/index.html:114
#: website/public/blog/touhou-reconstruction/index.html:114
#: website/public/examples/dino-lab/index.html:115 website/public/faq/index.html:114
#: website/public/first-investigation/index.html:114
#: website/public/get-started/index.html:114
#: website/public/guides/browser/index.html:114 website/public/guides/index.html:114
#: website/public/guides/javascript/index.html:114
#: website/public/guides/native/index.html:114 website/public/index.html:116
#: website/public/showcase/aegis/index.html:115
#: website/public/showcase/ctf/index.html:114
#: website/public/showcase/dx-ball/index.html:114 website/public/showcase/index.html:114
#: website/public/showcase/notion/index.html:114
#: website/public/showcase/th04/index.html:114
msgctxt "shared"
msgid "Showcases"
msgstr ""
#: website/public/blog/index.html:115
#: website/public/blog/reverse-engineering-models/index.html:115
#: website/public/blog/touhou-reconstruction/index.html:115
#: website/public/examples/dino-lab/index.html:116 website/public/faq/index.html:115
#: website/public/first-investigation/index.html:115
#: website/public/get-started/index.html:115
#: website/public/guides/browser/index.html:115 website/public/guides/index.html:115
#: website/public/guides/javascript/index.html:115
#: website/public/guides/native/index.html:115 website/public/index.html:117
#: website/public/showcase/aegis/index.html:116
#: website/public/showcase/ctf/index.html:115
#: website/public/showcase/dx-ball/index.html:115 website/public/showcase/index.html:115
#: website/public/showcase/notion/index.html:115
#: website/public/showcase/th04/index.html:115
msgctxt "shared"
msgid "Blog"
msgstr ""
#: website/public/blog/index.html:116
#: website/public/blog/reverse-engineering-models/index.html:116
#: website/public/blog/touhou-reconstruction/index.html:116
#: website/public/examples/dino-lab/index.html:117 website/public/faq/index.html:116
#: website/public/first-investigation/index.html:116
#: website/public/get-started/index.html:116
#: website/public/guides/browser/index.html:116 website/public/guides/index.html:116
#: website/public/guides/javascript/index.html:116
#: website/public/guides/native/index.html:116 website/public/index.html:118
#: website/public/showcase/aegis/index.html:117
#: website/public/showcase/ctf/index.html:116
#: website/public/showcase/dx-ball/index.html:116 website/public/showcase/index.html:116
#: website/public/showcase/notion/index.html:116
#: website/public/showcase/th04/index.html:116
msgctxt "shared"
msgid "Guides"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/blog/index.html:194
#, python-brace-format
msgctxt "page:blog/index.html"
msgid "{ph0}Home{ph1} / Blog"
msgstr ""
#: website/public/blog/index.html:195
msgctxt "page:blog/index.html"
msgid "Blog."
msgstr ""
#: website/public/blog/index.html:196
msgctxt "page:blog/index.html"
msgid "Thoughts on reverse engineering."
msgstr ""
#. {ph0}: <br />
#: website/public/blog/index.html:200
#, python-brace-format
msgctxt "page:blog/index.html"
msgid "Model specialization{ph0}Essay"
msgstr ""
#: website/public/blog/index.html:202
msgctxt "page:blog/index.html"
msgid "Does reverse engineering need a bigger model?"
msgstr ""
#: website/public/blog/index.html:203
msgctxt "page:blog/index.html"
msgid ""
"What Touhou reconstruction suggests about general models, specialist models and "
"learning from compiler feedback."
msgstr ""
#: website/public/blog/index.html:207 website/public/blog/index.html:222
msgctxt "page:blog/index.html"
msgid "Read the article"
msgstr ""
#: website/public/blog/index.html:210
msgctxt "page:blog/index.html"
msgid "By N0zoM1z0 · 13 October 2026"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/index.html:214
#, python-brace-format
msgctxt "page:blog/index.html"
msgid "Game reconstruction{ph0}Essay"
msgstr ""
#: website/public/blog/index.html:216
msgctxt "page:blog/index.html"
msgid "The industrial revolution in reverse engineering"
msgstr ""
#: website/public/blog/index.html:217
msgctxt "page:blog/index.html"
msgid ""
"What manual RE and reconstructing TH08, TH095 and TH04 taught me about agents, "
"verification and knowledge that compounds across projects."
msgstr ""
#: website/public/blog/index.html:225
msgctxt "page:blog/index.html"
msgid "By N0zoM1z0 · 10 October 2026"
msgstr ""
#: website/public/blog/index.html:236
#: website/public/blog/reverse-engineering-models/index.html:868
#: website/public/blog/touhou-reconstruction/index.html:1072
#: website/public/examples/dino-lab/index.html:467 website/public/faq/index.html:565
#: website/public/first-investigation/index.html:515
#: website/public/get-started/index.html:874
#: website/public/guides/browser/index.html:499 website/public/guides/index.html:274
#: website/public/guides/javascript/index.html:495
#: website/public/guides/native/index.html:501 website/public/index.html:1183
#: website/public/showcase/aegis/index.html:800
#: website/public/showcase/ctf/index.html:769
#: website/public/showcase/dx-ball/index.html:777 website/public/showcase/index.html:309
#: website/public/showcase/notion/index.html:623
#: website/public/showcase/th04/index.html:792
msgctxt "shared"
msgid "Source"
msgstr ""
#: website/public/blog/index.html:237
#: website/public/blog/reverse-engineering-models/index.html:869
#: website/public/blog/touhou-reconstruction/index.html:1073
#: website/public/examples/dino-lab/index.html:468 website/public/faq/index.html:566
#: website/public/first-investigation/index.html:516
#: website/public/get-started/index.html:875
#: website/public/guides/browser/index.html:500 website/public/guides/index.html:275
#: website/public/guides/javascript/index.html:496
#: website/public/guides/native/index.html:502 website/public/index.html:1184
#: website/public/showcase/aegis/index.html:801
#: website/public/showcase/ctf/index.html:770
#: website/public/showcase/dx-ball/index.html:778 website/public/showcase/index.html:310
#: website/public/showcase/notion/index.html:624
#: website/public/showcase/th04/index.html:793
msgctxt "shared"
msgid "MIT license"
msgstr ""
#: website/public/blog/index.html:238
#: website/public/blog/reverse-engineering-models/index.html:870
#: website/public/blog/touhou-reconstruction/index.html:1074
#: website/public/examples/dino-lab/index.html:469 website/public/faq/index.html:567
#: website/public/first-investigation/index.html:517
#: website/public/get-started/index.html:876
#: website/public/guides/browser/index.html:501 website/public/guides/index.html:276
#: website/public/guides/javascript/index.html:497
#: website/public/guides/native/index.html:503 website/public/index.html:1185
#: website/public/showcase/aegis/index.html:802
#: website/public/showcase/ctf/index.html:771
#: website/public/showcase/dx-ball/index.html:779 website/public/showcase/index.html:311
#: website/public/showcase/notion/index.html:625
#: website/public/showcase/th04/index.html:794
msgctxt "shared"
msgid "Join the community"
msgstr ""
#: website/public/blog/index.html:239
#: website/public/blog/reverse-engineering-models/index.html:871
#: website/public/blog/touhou-reconstruction/index.html:1075
#: website/public/examples/dino-lab/index.html:470 website/public/faq/index.html:568
#: website/public/first-investigation/index.html:518
#: website/public/get-started/index.html:877
#: website/public/guides/browser/index.html:502 website/public/guides/index.html:277
#: website/public/guides/javascript/index.html:498
#: website/public/guides/native/index.html:504 website/public/index.html:1186
#: website/public/showcase/aegis/index.html:803
#: website/public/showcase/ctf/index.html:772
#: website/public/showcase/dx-ball/index.html:780 website/public/showcase/index.html:312
#: website/public/showcase/notion/index.html:626
#: website/public/showcase/th04/index.html:795
msgctxt "shared"
msgid "Follow us on X"
msgstr ""
#. {ph0}: <span aria-hidden="true">
#. {ph1}: </span>
#: website/public/blog/index.html:244
#: website/public/blog/reverse-engineering-models/index.html:876
#: website/public/blog/touhou-reconstruction/index.html:1080
#: website/public/examples/dino-lab/index.html:475 website/public/faq/index.html:573
#: website/public/first-investigation/index.html:523
#: website/public/get-started/index.html:882
#: website/public/guides/browser/index.html:507 website/public/guides/index.html:282
#: website/public/guides/javascript/index.html:503
#: website/public/guides/native/index.html:509 website/public/index.html:1191
#: website/public/showcase/aegis/index.html:808
#: website/public/showcase/ctf/index.html:777
#: website/public/showcase/dx-ball/index.html:785 website/public/showcase/index.html:317
#: website/public/showcase/notion/index.html:631
#: website/public/showcase/th04/index.html:800
#, python-brace-format
msgctxt "shared"
msgid "{ph0}↑{ph1} Top"
msgstr ""
#: website/public/blog/index.html:6
msgctxt "page:blog/index.html"
msgid "REA Blog — Thoughts on Reverse Engineering"
msgstr ""
#: website/public/blog/index.html:7
msgctxt "page:blog/index.html"
msgid ""
"Thoughts on reverse engineering, drawing on practical experience with REA and AI "
"agents."
msgstr ""
#: website/public/blog/index.html:75 website/public/blog/index.html:88
#: website/public/blog/reverse-engineering-models/index.html:75
#: website/public/blog/reverse-engineering-models/index.html:88
#: website/public/blog/touhou-reconstruction/index.html:75
#: website/public/blog/touhou-reconstruction/index.html:88
#: website/public/examples/dino-lab/index.html:75
#: website/public/examples/dino-lab/index.html:88 website/public/faq/index.html:75
#: website/public/faq/index.html:88 website/public/first-investigation/index.html:75
#: website/public/first-investigation/index.html:88
#: website/public/get-started/index.html:75 website/public/get-started/index.html:88
#: website/public/guides/browser/index.html:75
#: website/public/guides/browser/index.html:88 website/public/guides/index.html:75
#: website/public/guides/index.html:88 website/public/guides/javascript/index.html:75
#: website/public/guides/javascript/index.html:88
#: website/public/guides/native/index.html:75 website/public/guides/native/index.html:88
#: website/public/index.html:75 website/public/index.html:88
#: website/public/showcase/aegis/index.html:75
#: website/public/showcase/aegis/index.html:88 website/public/showcase/ctf/index.html:75
#: website/public/showcase/ctf/index.html:88
#: website/public/showcase/dx-ball/index.html:75
#: website/public/showcase/dx-ball/index.html:88 website/public/showcase/index.html:75
#: website/public/showcase/index.html:88 website/public/showcase/notion/index.html:75
#: website/public/showcase/notion/index.html:88
#: website/public/showcase/th04/index.html:75 website/public/showcase/th04/index.html:88
msgctxt "shared"
msgid "REA — Find out how software works. Reverse engineering with your coding agent."
msgstr ""
#: website/public/blog/index.html:108
#: website/public/blog/reverse-engineering-models/index.html:108
#: website/public/blog/touhou-reconstruction/index.html:108
#: website/public/examples/dino-lab/index.html:109 website/public/faq/index.html:108
#: website/public/first-investigation/index.html:108
#: website/public/get-started/index.html:108
#: website/public/guides/browser/index.html:108 website/public/guides/index.html:108
#: website/public/guides/javascript/index.html:108
#: website/public/guides/native/index.html:108 website/public/index.html:110
#: website/public/showcase/aegis/index.html:109
#: website/public/showcase/ctf/index.html:108
#: website/public/showcase/dx-ball/index.html:108 website/public/showcase/index.html:108
#: website/public/showcase/notion/index.html:108
#: website/public/showcase/th04/index.html:108
msgctxt "shared"
msgid "REA home"
msgstr ""
#: website/public/blog/index.html:112
#: website/public/blog/reverse-engineering-models/index.html:112
#: website/public/blog/touhou-reconstruction/index.html:112
#: website/public/examples/dino-lab/index.html:113 website/public/faq/index.html:112
#: website/public/first-investigation/index.html:112
#: website/public/get-started/index.html:112
#: website/public/guides/browser/index.html:112 website/public/guides/index.html:112
#: website/public/guides/javascript/index.html:112
#: website/public/guides/native/index.html:112 website/public/index.html:114
#: website/public/showcase/aegis/index.html:113
#: website/public/showcase/ctf/index.html:112
#: website/public/showcase/dx-ball/index.html:112 website/public/showcase/index.html:112
#: website/public/showcase/notion/index.html:112
#: website/public/showcase/th04/index.html:112
msgctxt "shared"
msgid "Main navigation"
msgstr ""
#: website/public/blog/index.html:130
#: website/public/blog/reverse-engineering-models/index.html:130
#: website/public/blog/touhou-reconstruction/index.html:130
#: website/public/examples/dino-lab/index.html:131 website/public/faq/index.html:130
#: website/public/first-investigation/index.html:130
#: website/public/get-started/index.html:130
#: website/public/guides/browser/index.html:130 website/public/guides/index.html:130
#: website/public/guides/javascript/index.html:130
#: website/public/guides/native/index.html:130 website/public/index.html:132
#: website/public/showcase/aegis/index.html:131
#: website/public/showcase/ctf/index.html:130
#: website/public/showcase/dx-ball/index.html:130 website/public/showcase/index.html:130
#: website/public/showcase/notion/index.html:130
#: website/public/showcase/th04/index.html:130
msgctxt "shared"
msgid "REA on GitHub"
msgstr ""
#: website/public/blog/index.html:150
#: website/public/blog/reverse-engineering-models/index.html:150
#: website/public/blog/touhou-reconstruction/index.html:150
#: website/public/examples/dino-lab/index.html:151 website/public/faq/index.html:150
#: website/public/first-investigation/index.html:150
#: website/public/get-started/index.html:150
#: website/public/guides/browser/index.html:150 website/public/guides/index.html:150
#: website/public/guides/javascript/index.html:150
#: website/public/guides/native/index.html:150 website/public/index.html:152
#: website/public/showcase/aegis/index.html:151
#: website/public/showcase/ctf/index.html:150
#: website/public/showcase/dx-ball/index.html:150 website/public/showcase/index.html:150
#: website/public/showcase/notion/index.html:150
#: website/public/showcase/th04/index.html:150
msgctxt "shared"
msgid "Join REA on Discord"
msgstr ""
#: website/public/blog/index.html:169
#: website/public/blog/reverse-engineering-models/index.html:169
#: website/public/blog/touhou-reconstruction/index.html:169
#: website/public/examples/dino-lab/index.html:170 website/public/faq/index.html:169
#: website/public/first-investigation/index.html:169
#: website/public/get-started/index.html:169
#: website/public/guides/browser/index.html:169 website/public/guides/index.html:169
#: website/public/guides/javascript/index.html:169
#: website/public/guides/native/index.html:169 website/public/index.html:171
#: website/public/showcase/aegis/index.html:170
#: website/public/showcase/ctf/index.html:169
#: website/public/showcase/dx-ball/index.html:169 website/public/showcase/index.html:169
#: website/public/showcase/notion/index.html:169
#: website/public/showcase/th04/index.html:169
msgctxt "shared"
msgid "Follow REA on X"
msgstr ""
#: website/public/blog/index.html:244
msgctxt "page:blog/index.html"
msgid "Back to top"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:103
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/blog/reverse-engineering-models/index.html:194
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Models and RE"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:197
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Essay"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:198
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Does reverse engineering need a bigger model?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:199
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "By N0zoM1z0 · 13 October 2026"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:201
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Takeaway"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:203
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Model capability changes the hypotheses an agent can find.{ph1} Later sessions "
"have solved problems that earlier work left unresolved."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:211
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}A familiar compiler gives specialization something concrete to learn.{ph1} Some "
"exact matches depend on narrow, reusable source patterns."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/reverse-engineering-models/index.html:218
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Give repository knowledge a fair comparison.{ph1} A smaller model with good "
"retrieval may already know enough to make progress."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:223
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Train the next useful experiment, and test its oracle.{ph1} The value of feedback"
" depends on what the checker actually verifies."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:230
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Measure accepted reconstruction against time and cost.{ph1} That is the result I "
"want from the whole agent."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:241
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "In this article"
msgstr ""
#. {ph0}: <a href="#model-capability">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:243
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}What better models changed{ph1}"
msgstr ""
#. {ph0}: <a href="#specialization">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:244
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Why specialize?{ph1}"
msgstr ""
#. {ph0}: <a href="#repository-knowledge">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:245
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Where experience lives{ph1}"
msgstr ""
#. {ph0}: <a href="#learning-search">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:246
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}Learning the next experiment{ph1}"
msgstr ""
#. {ph0}: <a href="#re-and-rl">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:247
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}RE and reinforcement learning{ph1}"
msgstr ""
#. {ph0}: <a href="#oracle">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:248
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}When the oracle is wrong{ph1}"
msgstr ""
#. {ph0}: <a href="#comparison">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:249
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}A comparison worth running{ph1}"
msgstr ""
#. {ph0}: <a href="#future-agent">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:250
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "{ph0}What kind of agent?{ph1}"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:258
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What better models changed"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:259
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Since August 2026, I have been exploring how much reverse engineering an agent can "
"carry out with access to a program and a way to check its work. Most of my experience "
"comes from reconstructing games, especially Touhou. As I have changed models, the "
"repositories have kept a record of what each session managed to recover."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:267
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Much of that work aims at exact reconstruction: we compile the maintained source under"
" a pinned historical toolchain and check whether it reproduces the target function. "
"When a later model succeeds where earlier work stalled, the source changes show what "
"made that progress possible."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:274
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "The temporary values had to stay alive together"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:275
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Much of a TH09 attack function's logic had already been reconstructed, but the "
"compiler still stored temporary results differently from the original. The remaining "
"problem was how long those results needed to stay alive and when their storage could "
"be reused."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/de63c0f9121963f3a6b1ab5471c4878625fd3425"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616"
#. >
#. {ph3}: </a >
#: website/public/blog/reverse-engineering-models/index.html:282
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A {ph0}GPT-6-Sol checkpoint{ph1} recorded this mismatch after testing several ordinary"
" source arrangements. When {ph2}GPT-6.1-Sol returned to the problem{ph3}, it found a "
"useful hypothesis about how long those temporary values needed to stay alive."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:296
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The function produced temporary results and copied them into animation positions. In "
"C++, a temporary result stays alive until the expression using it finishes. Grouping "
"the real operations into one expression kept those results alive together, so the "
"compiler could no longer reuse the same storage for all of them."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:303
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"One result still shared storage with a value used later for collision checks. Giving "
"that value its own lifetime resolved the remaining overlap. After several targeted "
"experiments, {ph0}a clean rebuild confirmed that the full function matched{ph1}."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:312
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"What interests me is how the discovery and the tests worked together. The lifetime "
"hypothesis gave the agent a new direction; compiler feedback helped it refine that "
"hypothesis into a source arrangement that matched."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:318
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A different control-flow graph"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/f8d12d72aaf02212ee1b585a8f3f86d7ed000269"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:319
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A second TH09 function shows why that new direction can matter. Here, the obstacle was"
" how several branches shared their final work. {ph0}GPT-6.1-Sol's earlier work{ph1} "
"got parts of the function to match, but the branches still joined up differently from "
"the original."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/da33a646221198ceb7f3df2b96e2ca0e9b2f705f"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0"
#. >
#. {ph3}: </a >
#: website/public/blog/reverse-engineering-models/index.html:330
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}GPT-6-Astra changed the surrounding control-flow graph{ph1}. The main paths now "
"led to a shared final update and return. In that source structure, the compiler "
"combined the branches in the same way as the original. The complete function matched, "
"and a {ph2}separate rebuild check confirmed it{ph3}."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:342
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Changing the representation opened a more productive search space.{ph1} Both "
"cases give me a reason to take general model capability seriously: an agent can keep "
"trying local variations for a long time before finding a better way to express the "
"surrounding work."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:351
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"At the same time, the later sessions started with earlier source and recorded "
"failures. That accumulated work was part of their advantage. The history lets us "
"inspect the discoveries and their checks; a controlled comparison would help separate "
"the effect of the model from the experience it inherited."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:358
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This is where the question becomes interesting to me. Some of the progress came from "
"finding a new representation, while much of the remaining work involved testing source"
" forms against a familiar compiler. How much needs broad reasoning ability, and how "
"much could a model learn through repeated experience with that compiler and code?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:368
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Why might a specialist do well?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:369
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Touhou gives us a concrete reason to expect that experience to help. Much of the game "
"code comes from the same author, ZUN, so recurring habits are a reasonable starting "
"assumption. The repositories back that up with useful examples: related loops and "
"helper arrangements have supplied hypotheses across games."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:376
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Those source patterns become more specific when we include the compiler. Under a "
"particular version and set of options, small changes in source can produce repeatable "
"differences in machine code. Some of those differences are surprisingly obscure."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th095/commit/26bb64bdb093a13f73abd0ee8ae7ce199ee4658f"
#. >
#. {ph3}: <code>Supervisor::LoadDat</code>
#. {ph4}: </a >
#: website/public/blog/reverse-engineering-models/index.html:382
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"In TH095, for example, {ph0}even the name used for a local variable could change where"
" VC7.1 stored it{ph1}. Moving the declaration alone did not solve the layout, but an "
"earlier background function had revealed a naming pattern that affected the compiler's"
" choice. That gave us a more promising hypothesis for {ph2}the reconstruction of "
"{ph3}{ph4}."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:396
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Reusing that pattern for the file-size variable produced the required layout without "
"adding storage. The full function then matched."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:401
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This is the sort of narrow detail a general model may not know when it arrives. A "
"specialist trained on this compiler could encounter many such cases and learn which "
"source variations are worth testing first."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:407
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The opportunity is especially clear in final matching problems where we already "
"understand the behavior. We are then asking which ordinary source form this compiler "
"turns into the observed instructions. Specialization could help the model propose "
"those forms more efficiently, while the target still determines which hypotheses "
"survive."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:415
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The useful patterns would have to retain their context, though. TH08 uses an earlier "
"Visual C++ version than TH095 and TH09. TH04 uses a different DOS-era compiler, and "
"its {ph0}player reconstruction{ph1} needed different hypotheses about source patterns "
"and how the compiled code was combined into an executable. Shared authorship gives us "
"a prior, but each target tells us whether it applies. Distinguishing those contexts is"
" part of what a specialist would need to learn."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:431
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Where should that experience live?"
msgstr ""
#. {ph0}: <a href="../touhou-reconstruction/">
#. {ph1}: </a>
#: website/public/blog/reverse-engineering-models/index.html:432
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Before deciding to teach those patterns through model training, I would look at the "
"knowledge we already keep in the repository. In the {ph0}previous essay{ph1}, I wrote "
"about it becoming the project's working memory. That memory includes compiler lessons,"
" along with the source and failed experiments that made them useful."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:441
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"By retrieving that record, an agent can start with a known result and inspect how we "
"reached it. It can also avoid alternatives that have already failed in the same "
"context. The starting point improves without changing the model's weights."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:447
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"When reconstructing TH09's enemy-spawn function, a {ph0}GPT-6-Luna-max session{ph1} "
"drew a hypothesis from TH08's corresponding source family. That earlier source "
"suggested how to structure the loop and handle failures within it. TH09's own evidence"
" supplied the game-specific details, and clean rebuilds confirmed the complete match."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:458
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}\"The model did not know that compiler quirk\" and \"the model could not use it\""
" are different problems.{ph1} Retrieval may solve the first, but turning that fact "
"into a useful candidate still takes work. And if the candidate fails, the model must "
"decide what the result means for its next attempt. Knowing the relevant pattern is "
"only the beginning of that process."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:468
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"For that reason, I would include a smaller general model with good retrieval in any "
"comparison. Giving it the same library of experience would help us identify what "
"training adds: better candidate generation, better decisions after feedback, or both."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:476
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Learning the next useful experiment"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:477
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Those decisions after feedback are what I would most like to study. In agentic "
"reconstruction, the model proposes an explanation and tests it against the program. "
"Even when the candidate fails, the result can narrow the remaining possibilities and "
"suggest a more useful next experiment."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:484
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Consider the temporary-results example again. Its final source shows the arrangement "
"that worked, but the route to that source contains more information. Each of the "
"following experiments helped identify what still needed to change."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:497
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Experiment"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:498
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What its result taught us"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:503
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Try a different way to copy the results"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:504
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "The copy code changes, but the function still differs."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:509
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Use the returned values directly"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:510
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Copying follows the original pattern, but temporary storage still differs."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:516
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Keep the temporary results alive together"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:517
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"They get separate storage, but one still overlaps a value used later for collision "
"checks."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:523
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Keep the collision-check value separate"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:524
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A clean rebuild confirms the complete match."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:529
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Selected experiments from the attack-function reconstruction above, grouped by what "
"they taught us."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:533
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A training record that keeps this sequence can teach more than the final source alone."
" It connects each proposed change to an observed result and the next decision. Keeping"
" ineffective variations matters too: they tell a later agent which hypotheses have "
"already been tested in that context."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:540
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}I would want the model to learn how to use feedback.{ph1} A neutral result is a "
"reason to reconsider the variation; a changed mismatch may point to another cause. "
"When local edits stop being informative, the agent should be able to revisit the "
"source representation or inspect the evidence again."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:549
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Learning to make those choices requires autonomy. Sometimes the useful next step is "
"inspecting another caller rather than compiling another edit. A rigid sequence of "
"required rewrites would remove that choice, along with part of the behavior we want "
"the model to learn."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:558
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Why RE is interesting for reinforcement learning"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:559
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Bounded reconstruction gives us a practical environment for studying these choices. "
"Once the target and compiler are pinned, many source experiments produce quick, "
"repeatable feedback. The agent can compile a candidate, inspect the mismatch and use "
"that observation to choose its next step."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:566
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Reinforcement learning could train that decision-making process through the feedback "
"it receives. A candidate accepted by a defined check gives us a concrete outcome, "
"while the sequence of attempts lets us observe how much work it took to reach it."
msgstr ""
#. {ph0}: <a href="https://aclanthology.org/2024.emnlp-main.203/" >
#. {ph1}: </a >
#. {ph2}: <a href="https://arxiv.org/html/2606.16162v1">
#. {ph3}: </a>
#: website/public/blog/reverse-engineering-models/index.html:572
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"There is already research supporting this direction. {ph0}LLM4Decompile{ph1} studies "
"models specialized for decompilation. {ph2}AutoDecompiler{ph3} trains multi-turn "
"refinement using compiler and execution feedback. Their studies focus on functional "
"recovery. For this work, I would use them as a starting point for the related task of "
"finding source that matches a historical compiler's output."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:584
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"To reach such a well-defined task, though, we may first need to establish what a "
"function owns or devise a new runtime measurement. In TH08, for example, a "
"{ph0}collision difference led back to how the original program handled floating-point "
"calculations{ph1}. Before the agent could test a useful correction, it had to work out"
" what to measure."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:595
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This suggests another role for a broadly capable model: helping make the problem "
"checkable in the first place. Once that check exists, we can investigate how far a "
"learned search policy can get with it."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:603
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "When the oracle is wrong"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:604
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Once we train against that check, its coverage becomes part of what the model learns. "
"I call the reference or checker an oracle. Even if it gives a repeatable answer, we "
"still need to understand what that answer covers."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:610
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"TH08 showed how much can hide outside that coverage. Some reconstructed functions "
"passed their exact comparisons with wrong floating constants. The comparator adjusted "
"relocated addresses before checking instructions, but it checked the values behind "
"those addresses only when they had been explicitly recorded for verification. Other "
"literal references could pass without their values being examined."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
#. >
#. {ph1}: </a >
#. {ph2}: <code>1.0f</code>
#. {ph3}: <code>32.0f</code>
#: website/public/blog/reverse-engineering-models/index.html:619
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"To close that gap, a {ph0}wider audit{ph1} found incorrect constants in functions that"
" had already been accepted. In one calculation, the reconstructed source added {ph2} "
"where the original added {ph3}."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:629
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}A learner rewarded by the old check could learn to produce the wrong "
"reconstruction.{ph1} We had not trained an RL model against this oracle; the observed "
"failure was in the check itself. But using that check as a reward would have made the "
"same blind spot part of the learning environment."
msgstr ""
#. {ph0}: <a href="https://arxiv.org/html/2609.05370v1" >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:639
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"A functional test can have a similar blind spot. {ph0}Differential-fuzzing research on"
" LLM decompilers{ph1} has found behavior differences beyond the supplied tests. "
"Passing those tests therefore needs to be read in terms of the cases they exercise, "
"just as an instruction match needs to be read in terms of the bytes and data it "
"checks."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:649
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Before using either kind of check as a reward, I would test it with deliberate "
"failures. I would also keep final acceptance outside the candidate's editable source, "
"so the model has to satisfy the check through its reconstruction. Otherwise, something"
" like a byte array copied from the target could satisfy a naive score without "
"recovering useful source."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:657
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Improving the learner and improving its oracle belong to the same research "
"problem.{ph1} As the learner gets better at optimizing the feedback we give it, "
"understanding that feedback becomes more important too."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:667
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "A comparison worth running"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:668
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"With those checks in place, I would start the comparison on a fixed VC7.1 task family."
" First, I would establish baselines for a strong general model and a smaller one. "
"Adding repository knowledge to the smaller model would show what retrieval changes. "
"From there, supervised specialization and an RL-trained version would let us examine "
"what training adds."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:676
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"To make those comparisons informative, each model would receive the same target "
"evidence and tools. For the training-specific comparisons, I would keep the base model"
" and available knowledge fixed as well. Repeated trials would help distinguish a "
"reliable search strategy from a lucky candidate."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:683
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"I would then separate two starting conditions: reconstructing a function from its "
"instructions, and closing the last few differences in maintained source. A specialist "
"might be excellent at the second task while a general model does much of the work "
"needed to reach it. Measuring them separately would reveal that division of work."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:691
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Both tasks need genuinely held-out examples. Because related Touhou games share engine"
" code, holding out a game's name would still allow nearly identical functions to "
"appear in training. I would instead hold out source families and keep their accepted "
"answers out of both training and retrieval."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:698
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"On those examples, the outcome would be complete, independently validated matches. "
"Giving each model the same candidate or compile budget would help compare search "
"quality. Measuring elapsed time and total cost, including compilation, would tell us "
"whether that quality produces an efficient workflow. Training costs would need their "
"own accounting too."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:706
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Both views matter because a cheaper proposal can become an expensive workflow if it "
"causes more uninformative compiles. Conversely, a slower model may pay for itself by "
"finding a useful experiment sooner. The comparison should capture those costs."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
#. >
#. {ph1}: </a >
#: website/public/blog/reverse-engineering-models/index.html:712
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"Counting accepted results also keeps intermediate progress in perspective. One TH09 "
"{ph0}replay-save candidate{ph1} looked promising because the compiled function had the"
" expected size, but a full comparison still found substantial differences. Changes in "
"how the compiler arranges instructions can also make a candidate look closer without "
"resolving the underlying problem. Such diagnostics can guide the next experiment, but "
"I would validate any reward for \"getting closer\" against the full acceptance check."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:727
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"I would be interested in the pattern across these results. If a specialist does well "
"within a familiar compiler family, does that advantage survive a toolchain change? And"
" once both models have good retrieval, how much does training still add? The answers "
"would help us decide where each kind of model is most useful."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:736
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "What kind of agent does this suggest?"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:737
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"If the models turn out to help at different stages, a useful arrangement might be a "
"broad agent with access to a specialist. Once a task becomes a familiar compiler "
"search, it could ask the specialist for candidates. If the results stop making sense, "
"the broader agent could return to the target evidence or investigate the measurement "
"itself."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:745
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"In that arrangement, specialization becomes a tool the agent can choose as the "
"investigation develops. The agent keeps the freedom to change direction that made the "
"earlier breakthroughs possible."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:750
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"This follows naturally from the industrial shift I described in the previous essay. "
"Being able to run many more experiments changes how we organize the work. It also "
"gives us a reason to ask which decisions need broad judgment and which improve through"
" repeated experience with a particular craft."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:757
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"For now, the strongest general model has earned its place in my workflow by opening "
"problems I had left unresolved. Those successes are what make me want to examine the "
"work more closely: how much depended on the model's breadth, and how much could be "
"handled by a model trained in this particular kind of reconstruction?"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/reverse-engineering-models/index.html:765
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}The repositories give us a way to test the question.{ph1} I would like to use "
"that record to build the comparison and see what we learn."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:775
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Evidence and model attribution"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:776
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The examples describe historical function-level comparisons recorded in the linked "
"commits. Whole-game runtime checks are separate milestones. Source and matching "
"records were reviewed on 13 October 2026."
msgstr ""
#. {ph0}: <code>gpt-dots</code>
#. {ph1}: <code>gpt-web</code>
#: website/public/blog/reverse-engineering-models/index.html:782
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The TH09 label {ph0} identifies GPT-6-Astra. {ph1} changed with the model used at the "
"time, so that label alone does not identify an individual run. Explicit model names in"
" the other cited commits establish their recorded attribution; the histories do not "
"contain uniform per-run cost or effort measurements."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/de63c0f9121963f3a6b1ab5471c4878625fd3425"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616"
#. >
#. {ph5}: </a >
#: website/public/blog/reverse-engineering-models/index.html:791
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}TH09 temporary lifetimes:{ph1} the {ph2}earlier context review{ph3} and "
"{ph4}complete cold reconstruction{ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/f8d12d72aaf02212ee1b585a8f3f86d7ed000269"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/da33a646221198ceb7f3df2b96e2ca0e9b2f705f"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0"
#. >
#. {ph7}: </a >
#: website/public/blog/reverse-engineering-models/index.html:803
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}TH09 Front callback:{ph1} {ph2}non-exact diagnostic regions{ph3}, {ph4}Astra's "
"new graph{ph5} and its {ph6}accepted recompile replay{ph7}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th095/commit/26bb64bdb093a13f73abd0ee8ae7ce199ee4658f"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
#. >
#. {ph7}: </a >
#: website/public/blog/reverse-engineering-models/index.html:819
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Compiler knowledge:{ph1} {ph2}TH095 identifier-bucket reuse{ph3}, {ph4}TH04 "
"player source and linker order{ph5} and {ph6}Luna's TH09 enemy-spawn closure{ph7}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
#. >
#. {ph7}: </a >
#: website/public/blog/reverse-engineering-models/index.html:835
#, python-brace-format
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"{ph0}Checks and diagnostics:{ph1} {ph2}TH08 floating-literal audit{ph3}, {ph4}TH08 "
"numerical investigation{ph5} and {ph6}TH09 replay-save reconstruction{ph7}."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:852
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"The proposed specialist and RL comparisons are future experiments. The project "
"histories motivate them; no trained specialist was evaluated for this essay."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:6
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Does reverse engineering need a bigger model? | REA"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:7
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid ""
"What Touhou reconstruction taught me about general models, specialist models and "
"learning to propose better hypotheses from compiler feedback."
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:240
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "On this page"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:253
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Models and reverse engineering essay"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:491
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Selected reconstruction experiments"
msgstr ""
#: website/public/blog/reverse-engineering-models/index.html:876
msgctxt "page:blog/reverse-engineering-models/index.html"
msgid "Back to top"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:103
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/blog/touhou-reconstruction/index.html:194
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:198
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Essay · Touhou reconstruction"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:199
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The industrial revolution in reverse engineering."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:200
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "By N0zoM1z0 · 10 October 2026"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:202
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Takeaway"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:204
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and acceptance"
" criteria, then let the agent decide what to try next."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:209
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning with the "
"code. Git checkpoints let the next session continue after the conversation ends."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:214
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still needs "
"testing. “Unknown” is a valid answer when the evidence is incomplete."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:219
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a bug, revisit"
" the earlier results that depended on it."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:224
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}We are in the early days of RE's industrial revolution.{ph1} The methods are "
"still taking shape. There is plenty left to explore."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:236
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "How experience compounds"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:237
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:325
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Autonomy"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:326
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Agent"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/touhou-reconstruction/index.html:327
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Choose an experiment.{ph0}Propose a hypothesis."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:330
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Verification"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:331
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Oracle"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/touhou-reconstruction/index.html:332
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Test against a{ph0}concrete reference."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:335
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Repository"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:336
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Working memory"
msgstr ""
#. {ph0}: <br />
#: website/public/blog/touhou-reconstruction/index.html:337
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Code, evidence,{ph0}checks and lessons."
msgstr ""
#. {ph0}: <br />
#. {ph1}: <strong>
#. {ph2}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:339
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}"
msgstr ""
#. {ph0}: <br />
#. {ph1}: <strong>
#. {ph2}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:342
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "A better{ph0}{ph1}starting point{ph2}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:345
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Reuse"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:346
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Pass{ph1} · Keep the result and its evidence"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:358
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Each project leaves the next with a better starting point. That includes fixing the "
"checks when we discover a gap."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:365
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "In this article"
msgstr ""
#. {ph0}: <a href="#august">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:367
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}August 2026{ph1}"
msgstr ""
#. {ph0}: <a href="#th08">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:368
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}TH08: the continuation{ph1}"
msgstr ""
#. {ph0}: <a href="#different-approaches">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:369
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Two approaches{ph1}"
msgstr ""
#. {ph0}: <a href="#th095">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:370
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}TH095: compounding{ph1}"
msgstr ""
#. {ph0}: <a href="#th04">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:371
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}TH04: across architectures{ph1}"
msgstr ""
#. {ph0}: <a href="#semantic-reconstruction">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:372
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}From exact to readable{ph1}"
msgstr ""
#. {ph0}: <a href="#industrial-shift">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:375
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}The industrial shift{ph1}"
msgstr ""
#. {ph0}: <a href="#possibilities">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:376
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}What becomes possible{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:381
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "What changed in August 2026"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:382
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Before this work, I had done a lot of manual reverse engineering. I would inspect a "
"function until I had an explanation, then test that explanation against the program. "
"Getting further meant spending more of my own time on the next function. It also meant"
" keeping an increasingly large picture in my head."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:389
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Most of my RE work is on games. I reconstruct them so their behavior can be understood"
" and eventually carried into a port or a mod. That is the experience behind this "
"article. The method can be useful elsewhere, but each field needs to establish what it"
" can check against a reliable reference."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:396
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In August 2026, I started exploring agent-driven RE seriously. I wanted to see how far"
" an agent could get with access to the program and ordinary development tools. Touhou "
"reconstruction gave me a substantial project in which to find out."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:402
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The early progress was startling. An investigation could keep moving without me "
"choosing every individual step. A failed comparison might send the agent to another "
"caller. It could write a small diagnostic and use the result to decide what to try "
"next. Giving it that freedom made a difference: I could spend more attention on the "
"project's direction and on whether its checks were trustworthy."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:411
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The pace got my attention first. Then I began wondering what would survive beyond the "
"current project. Would the next game benefit from everything we had just learned?"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:418
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH08: building on human work"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th08">
#. {ph1}: </a>
#. {ph2}: <a href="https://github.com/GensokyoClub/th08" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:419
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of {ph2}GensokyoClub's "
"reconstruction{ph3}. Their public source gave me a substantial foundation. It came "
"with knowledge of the build and a history of contributions that I preserved in the "
"continuation."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:428
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The imported history ends at the public 10 August checkpoint. My independent "
"continuation began on 13 August. By 19 August, the ledger recorded source for all "
"1,107 identified game functions."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:433
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A playable Linux reconstruction port was committed on 24 August, roughly eleven days "
"after the continuation began. A Web edition followed. The native Linux 64-bit release "
"arrived on 30 August."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:438
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"What struck me was that the work had reached a program people could run. Getting there"
" required following problems beyond an individual function. Even when two functions "
"looked correct in isolation, they could accidentally use separate copies of state that"
" should have been shared."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:445
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This made reference checks central to the work. I call them {ph0}oracles{ph1}. A code "
"comparison can tell us whether a reconstructed function reproduces the original "
"instructions. A runtime check can tell us whether an exercised route reaches the "
"expected state. The agent proposes an explanation and tests it; a mismatch gives it "
"something specific to investigate."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:453
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "An exact match with the wrong constant"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:454
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"An oracle is software someone wrote. TH08 gave me a clear reminder of how much can "
"depend on that software."
msgstr ""
#. {ph0}: <code>0.0</code>
#. {ph1}: <code>128.0</code>
#: website/public/blog/touhou-reconstruction/index.html:458
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In September, a bug reported by a downstream Switch port led back to item auto-"
"collection. The reconstructed source checked player power against {ph0}. The original "
"used {ph1}, the maximum-power threshold."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:464
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Normal power is non-negative, so the reconstructed power check was effectively always "
"satisfied. Above the collection line, the game could attract items without requiring "
"maximum power. The other exceptions in the condition were correct. This one constant "
"changed the behavior."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:471
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:477
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A rebuild can put a constant at a different address. The comparison tool accounted for"
" that by adjusting addresses in the compiled instructions before comparing them with "
"the original. But it never checked the floating-point value stored at the referenced "
"address."
msgstr ""
#. {ph0}: <code>128.0</code>
#. {ph1}: <code>0.0</code>
#: website/public/blog/touhou-reconstruction/index.html:484
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That left a hole in the check. It could point the reconstructed instruction at the "
"original's {ph0} while the source still said {ph1}. The instruction bytes matched. The"
" source meant something different."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th08/pull/11" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/th08/pull/13">
#. {ph3}: </a>
#: website/public/blog/touhou-reconstruction/index.html:490
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The {ph0}2 September fix{ph1} corrected the source and made the comparison check the "
"referenced constant's actual bytes. A {ph2}wider audit{ph3} then examined 1,548 "
"floating-literal references. It found another twelve incorrect references across five "
"accepted functions."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:501
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The comparison now checks every such floating literal. Its tests include deliberately "
"wrong values to make sure they are rejected. We also had to revisit results that had "
"passed the weaker check."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:506
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of repairing the"
" game."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:510
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That matters when the team is mostly one person working with agents. I cannot "
"personally inspect every line they produce, so much of my confidence rests on their "
"checks. A shared oracle's blind spot can affect many investigations before I notice "
"it. I have to understand what the checker actually verifies and test it against cases "
"that ought to fail."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:518
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"As the work continued, those checks became part of the repository. So did the reasons "
"for source changes and notes that let a later session pick up where an earlier one "
"stopped. {ph0}The repository was becoming the project's working memory.{ph1}"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:527
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}A successful batch gave us both recovered code and a better environment for the "
"next batch.{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:535
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Two different ideas of reconstruction"
msgstr ""
#. {ph0}: <a
#. href="https://web.archive.org/web/20260909051514/https://github.com/GensokyoClub/th08#important-
#. notice" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:536
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind of work "
"explicit. The notice announces that further development will happen privately until "
"completion. One passage reads:"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:547
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The rise of grifters (AI decompilations and ports) in this space taking from our work "
"paints a bad image for future decompilation efforts…"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:553
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The notice also describes the psychological toll on the maintainers. Their "
"contribution policy excludes pull requests produced primarily with AI. They have put "
"their free time into difficult work, and that work helped make my continuation "
"possible. I respect the effort behind it. The disagreement I want to discuss is about "
"how reconstruction should proceed and how a contribution should be judged."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:562
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In the manual workflow I knew, developing an understanding of a function and "
"reconstructing it usually fell to the same person. A project relied heavily on that "
"person's expertise. Trust in the contributor mattered because so much of the reasoning"
" happened while they worked."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:569
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Existing projects already preserve knowledge in their source and build tools. What "
"changed for me was that an agent could use that knowledge to pursue the next "
"investigation on its own."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:574
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"In my continuation, I decide the objective and the standard for accepting a result. "
"The agent has broad freedom to investigate. Its proposed reconstruction then has to "
"survive the relevant checks. I want another person to be able to examine why we chose "
"an implementation, even if an agent did most of the work."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:581
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This can be a difficult transition. Years of careful work may become the foundation "
"for a continuation that moves much faster. That raises real questions about credit. It"
" also changes what maintainers need to know before accepting a contribution."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:587
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The industrial analogy helps me think about this. In a craft, much of the process "
"depends on the skill of the person carrying it out. Machinery changes where that skill"
" is needed. Someone still has to design the process and recognize when its output is "
"wrong. Different communities can choose how much of that change they want to take on."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:595
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"My choice is to continue openly, with the inherited work credited and its history "
"preserved. I want the new work to be reviewable. That gives us a way to ask how far "
"this approach can go and to learn from what goes wrong along the way."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/GensokyoClub/th08/blob/e874b98e210b3be1ed21c5e03d54b883eac5069c/README.md#important-
#. notice" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/GensokyoClub/th08/blob/f345c7dee07b849f2ff93a0029ab5ede126bf12c/CODE_OF_CONDUCT.md"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/README.md#credits-
#. and-provenance" >
#. {ph5}: </a >
#: website/public/blog/touhou-reconstruction/index.html:601
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, and its "
"{ph2}contribution policy{ph3}. The quotation is a shortened excerpt. TH08's "
"{ph4}credits and provenance{ph5} record the continuation boundary."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:619
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH095: experience starts compounding"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th095">
#. {ph1}: </a>
#: website/public/blog/touhou-reconstruction/index.html:620
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much easier to "
"see. Its repository began on 29 August with zero confirmed game functions in the "
"ledger. We still had to learn the game. But we already knew much more about how to "
"begin a reconstruction and how to keep it moving."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:628
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"By 7 September, all 697 identified game functions had source. By 8 September, 696 had "
"been accepted as exact comparisons. The whole program linked on 9 September. The "
"Windows i386 reconstruction was marked playable on 10 September, about twelve days "
"after initialization."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:635
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I found this more exciting than the first project's speed. A fresh target could "
"benefit from work done on another game. The experience was already present in the "
"tools and in the way the project was organized."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:641
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"For example, TH08 had taught us to pay attention to the assembled program early. If "
"several recovered functions depend on the same state, their isolated comparisons leave"
" an important question open. We need to see them working together. That lesson helped "
"shape how we approached TH095's whole-program build."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:648
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A lesson that stays in my head is useful while I am there. Once it becomes a check "
"that another session can run, it can keep helping after I have moved on. The next "
"agent can use the result without repeating the investigation that led to it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:654
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The floating-literal bug belongs in that memory too. It explains why checking a "
"reference also requires checking the data behind it. Keeping that correction with the "
"code helps later projects avoid inheriting the old check's blind spot."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:660
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}The method becomes part of the starting material for the next game.{ph1} We can "
"spend more of the next project's effort on what is actually new about its target."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:668
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The same benefit is available to people joining later. They can inspect a decision and"
" rerun its check before continuing the work. They do not have to reconstruct the "
"entire project's history to find out why the source looks the way it does."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:676
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "TH04: the workflow survives a different architecture"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/th04">
#. {ph1}: </a>
#. {ph2}: <a href="https://github.com/nmlgc/ReC98">
#. {ph3}: </a>
#: website/public/blog/touhou-reconstruction/index.html:677
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The target "
"was now a 16-bit environment with four cooperating programs. Understanding its "
"hardware behavior required different evidence from the Windows games. Existing "
"{ph2}ReC98 work{ph3} gave us valuable knowledge and source material here too."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:686
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The DOS reconstruction is now working. In my manual testing, I played complete Normal "
"routes through their endings and checked saves. The current work is a native 64-bit "
"port. Establishing a working DOS version first gives that port a reference."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:692
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The architecture changed what we needed to investigate. It also changed the compiler "
"and runtime against which we checked our work. But the agent could still follow a "
"question through to a result and let that result guide the next experiment."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:698
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Consider the transition from gameplay to an ending. We need to know what state carries"
" across that boundary and which program is responsible for it. That is something we "
"can investigate against the DOS product. Once the evidence and checks are available, "
"an agent can work through the question much as it did on a Windows title."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:706
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This is why TH04 matters to the argument. A substantial platform change did not force "
"us to start over with a new way of working. The architecture defined the problem; the "
"workflow still gave us a way to solve it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:712
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"For the 64-bit port, we can now examine the new implementation against behavior "
"already recovered on DOS. The knowledge from reconstruction gives the port something "
"to build on."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md"
#. >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/th04/tree/port/modern-64" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:717
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual testing{ph1} ·"
" {ph2}64-bit port{ph3}. The port remains in development."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:730
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "From exact code to readable code"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:731
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Once a reconstruction works, I want someone else to be able to understand it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:735
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"To me, assembly and raw offsets can feel like old friends. I realise this is a "
"slightly unusual definition of “readable.” Most people would prefer to follow the "
"game's logic without keeping the executable's memory layout in their head."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:741
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field may still "
"be known mainly by its offset. We follow how the game uses it until we can explain its"
" role. Then we can give it a meaningful name and a type that fits the evidence. We "
"keep the reasoning with the source so the next person can see where that "
"interpretation came from."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:749
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"This becomes especially important for a port. An absolute address tells me where "
"something lived in the old executable. It gives a 64-bit implementation little help in"
" deciding which object should own that state. To move the behavior safely, we need to "
"recover the relationship behind the old memory access."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:756
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The order I now use is:"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:758
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with the "
"historical compiler. Compare the relevant code and data with the original executable. "
"Record unresolved differences so the next phase has a clear starting point."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:765
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Build and play it on the original platform.{ph1} Link those pieces into the real "
"program using the original architecture and compiler. Exercise important gameplay "
"paths. This is where we can find problems with shared state or initialization that an "
"isolated function comparison missed."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:772
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Reconstruct the semantics against both references.{ph1} Take one coherent part of"
" the game at a time and establish what its recovered source means. Improve its "
"representation while preserving the exact comparisons and the playable historical "
"build."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:781
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Make the modern port.{ph1} Move the established behavior into the new "
"environment, such as a native 64-bit build. The reconstructed original-platform game "
"remains a reference for comparing how the port behaves."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/blog/touhou-reconstruction/index.html:788
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The playable build from the second stage becomes a {ph0}second oracle{ph1} during the "
"third. The first oracle checks whether our changed source still reproduces the "
"relevant original code and data. The second checks that the reconstructed program "
"still builds and behaves correctly along the paths we exercise."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:796
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"They catch different mistakes. A type change can alter the generated instructions. An "
"ownership change can leave two parts of the game using different copies of state. "
"Keeping both checks available gives the agent a concrete failure to investigate before"
" carrying a refactor further."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:803
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"A name needs evidence of its own. An exact comparison cannot tell us whether a field "
"really means “invulnerability time.” We have to establish that from how the game "
"writes and uses it. If the meaning remains uncertain, a neutral name is more helpful "
"to the next reader than a confident guess."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
#. reconstruction.md" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:810
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"We learned this order through the projects. TH08 already had playable ports before "
"some of its later historical-platform audits. That made certain defects harder to see."
" The {ph0}Factory's current workflow{ph1} puts the original-platform build first, so "
"semantic work can use it as a reference before porting begins."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:821
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction makes the "
"recovered knowledge usable.{ph1} A port can then build on both."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:830
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "What makes this an industrial shift"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:831
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"These projects changed where I spent my attention. Once agents could carry much of an "
"investigation forward, improving their working environment became one of the most "
"useful things I could do. A better tool could help with every later function that "
"needed it."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:838
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Autonomy matters here. The useful next step often becomes clear only after a failed "
"experiment. An agent needs enough freedom to follow that result somewhere unexpected. "
"If it has to wait for me to prescribe each step, much of the work remains tied to my "
"attention."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:845
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I expect the agent to make wrong hypotheses. What matters is whether we can test them "
"and learn from the result. A failed check should help it understand the mistake well "
"enough to try again. I still have to decide whether the accumulated evidence supports "
"a project milestone."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:852
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"REA gives the agent access to analysis tools. A question about a function's caller can"
" lead straight into inspecting that caller. The reconstruction project supplies the "
"compiler and its own reference checks. The agent can use those to test the source it "
"proposes and see where its explanation holds up."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:859
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The TH08 bug shows why those checks deserve engineering attention of their own. When "
"the same comparison is used across hundreds of functions, a gap in it can spread much "
"further than a mistake in one implementation. Testing the checker improves the "
"feedback available to all that later work."
msgstr ""
#. {ph0}: <a href="https://collection.sciencemuseumgroup.org.uk/objects/co51439/watts-
#. steam-engine-indicator" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:866
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The industrial analogy has a useful historical example here. Boulton and Watt "
"introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust engine valves. A "
"recording version traced pressure through the piston stroke. It made the engine's "
"internal behavior available for inspection. Our comparison tools serve a similar "
"purpose: they let us examine what the machinery is doing while we improve it."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:879
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the "
"infrastructure is still immature. Agents can move faster than our checks were designed"
" to support, so the process has to develop alongside them. When we find a defect in a "
"shared tool, we have to repair it and revisit the results it affected. The next "
"project can then inherit a stronger tool."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:889
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"There is also a practical limit to any one conversation. It will end before a large "
"reconstruction is finished. The repository has to make it possible for another session"
" to continue without losing the reason for the last decision."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-factory" >
#. {ph1}: </a >
#: website/public/blog/touhou-reconstruction/index.html:895
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives projects a"
" shared way to carry their checks and lessons forward. Work on one game can improve "
"the starting conditions for another."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:905
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That is what makes the industrial analogy meaningful to me. Experience starts becoming"
" part of tools that others can use. Improving those tools changes how much the next "
"person—or the next agent—can get done."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:913
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "The projects we can now consider"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:914
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The pace matters because it changes the decision to begin. A game could be fascinating"
" to reverse engineer and still demand more of my own attention than I could "
"realistically give it. Many projects would stay ideas."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:920
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"Now I can see a way to keep such a project moving through repeated investigations. "
"Getting a working reconstruction makes a port more practical. Recovering readable "
"semantics makes it easier for someone else to explore a mod. The effort put into "
"understanding the game can keep paying off after the first version runs."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/blog/touhou-reconstruction/index.html:927
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"I now look at an unfamiliar program and ask: {ph0}what access, feedback and "
"accumulated knowledge would let an agent work on this reliably?{ph1}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:934
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"That question makes me consider projects I would previously have left alone. Each one "
"can improve the way we approach the next. I want to keep exploring how far that can "
"take us."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:942
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Project milestones and sources"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:943
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"The dates describe recorded project checkpoints, checked against public GitHub history"
" on 10 October 2026. Elapsed time is calendar time between commits. Source presence, "
"exact comparisons, a build and a runtime result each name a different milestone."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/001bf3e9c91cc35b79c7a0e36b3565b86f494362"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/blob/15caba73df6735fc44eac4783bc61b8d098ea830/docs/PROGRESS.md"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/da07b21c8cb63230142b0a66228d6aac66555f3f"
#. >
#. {ph7}: </a >
#. {ph8}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/529eb1a3afa05ae36467731eaccb12e3e50e132f"
#. >
#. {ph9}: </a >
#. {ph10}: <a href="https://github.com/N0zoM1z0/th08/releases/tag/v0.2.0-linux-64bit" >
#. {ph11}: </a >
#: website/public/blog/touhou-reconstruction/index.html:951
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source ledger{ph5}, "
"{ph6}24 August Linux port{ph7}, {ph8}26 August Web edition{ph9}, and {ph10}30 August "
"64-bit Linux release{ph11}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/8c31e6f892d945423b7f7b439747a2bd915f82d8/docs/PROGRESS.md"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/0fa857fb2b2ec6237732e4d6be8d0a28069c9330/docs/PROGRESS.md"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/74baddfccb712d1311a4d6e7487a63cd1100452e/docs/PROGRESS.md"
#. >
#. {ph7}: </a >
#. {ph8}: <a
#. href="https://github.com/N0zoM1z0/th095/commit/33d46a0ee48f37060d973125a1a7632a40f8d998"
#. >
#. {ph9}: </a >
#. {ph10}: <a
#. href="https://github.com/N0zoM1z0/th095/blob/3442dcf29d9e0b5bef384a49bd0c9ad32a711826/docs/WHOLE_BUILD_TODO.md"
#. >
#. {ph11}: </a >
#: website/public/blog/touhou-reconstruction/index.html:974
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source "
"ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September linkage{ph9}, and "
"{ph10}10 September playable-build record{ph11}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md"
#. >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:997
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS reconstruction, "
"the maintainer's complete Normal-route testing and the current 64-bit phase."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a href="https://github.com/N0zoM1z0/th08/issues/10" >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/7148a76ba224742677895c7160807a68897957d5"
#. >
#. {ph5}: </a >
#. {ph6}: <a
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
#. >
#. {ph7}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1006
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection bug{ph3}, {ph4}the"
" source and comparison fix{ph5}, and {ph6}the full floating-literal audit{ph7}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/docs/SEMANTIC_PLAYBOOK.md"
#. >
#. {ph3}: </a >
#. {ph4}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
#. reconstruction.md" >
#. {ph5}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1020
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and {ph4}the "
"Factory's phase order and two validation paths{ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a href="https://collection.sciencemuseumgroup.org.uk/objects/co51439/watts-
#. steam-engine-indicator" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1032
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine indicator "
"record{ph3} describes the 1796 introduction and the pressure-recording mechanism."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/038b6bed51d273c8b3680553b6f43e1b97d19bd1/docs/agent-autonomy.md" >
#. {ph3}: </a >
#. {ph4}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
#. factory/blob/038b6bed51d273c8b3680553b6f43e1b97d19bd1/docs/knowledge-base.md" >
#. {ph5}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1041
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game "
"knowledge{ph5} documents retain the working principles and lessons."
msgstr ""
#. {ph0}: <a class="text-link" href="../">
#. {ph1}: </a>
#. {ph2}: <a class="text-link" href="../../showcase/th04/" >
#. {ph3}: </a >
#: website/public/blog/touhou-reconstruction/index.html:1056
#, python-brace-format
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:6
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Reverse Engineering’s Industrial Revolution — REA"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:7
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid ""
"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with AI agents,"
" and how knowledge compounds across TH08, TH095 and PC-98 TH04."
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:350
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Experience carried between projects"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:364
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "On this page"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:379
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Touhou reconstruction essay"
msgstr ""
#: website/public/blog/touhou-reconstruction/index.html:1080
msgctxt "page:blog/touhou-reconstruction/index.html"
msgid "Back to top"
msgstr ""
#: website/public/examples/dino-lab/index.html:104
msgctxt "page:examples/dino-lab/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/examples/dino-lab/index.html:195
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab"
msgstr ""
#: website/public/examples/dino-lab/index.html:198
msgctxt "page:examples/dino-lab/index.html"
msgid "Inspect → rebuild → change"
msgstr ""
#: website/public/examples/dino-lab/index.html:199
msgctxt "page:examples/dino-lab/index.html"
msgid "Rebuild the dinosaur’s speed rule."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <mark class="prose-highlight">
#. {ph3}: </mark>
#: website/public/examples/dino-lab/index.html:200
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"To recreate the game’s acceleration, first find the rule that controls its speed. "
"{ph0}REA returned the running script;{ph1} we used its rule to build this mini-game "
"with {ph2}adjustable speed.{ph3}"
msgstr ""
#: website/public/examples/dino-lab/index.html:209
#: website/public/examples/dino-lab/index.html:208
msgctxt "page:examples/dino-lab/index.html"
msgid "On this page"
msgstr ""
#. {ph0}: <a href="#play">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:211
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Play and change the speed{ph1}"
msgstr ""
#. {ph0}: <a href="#rule">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:212
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Read the recovered rule{ph1}"
msgstr ""
#. {ph0}: <a href="#check">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:213
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Check the reconstruction{ph1}"
msgstr ""
#. {ph0}: <a href="#inspect">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:214
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Try the analysis{ph1}"
msgstr ""
#: website/public/examples/dino-lab/index.html:219
msgctxt "page:examples/dino-lab/index.html"
msgid "Play and change the speed"
msgstr ""
#: website/public/examples/dino-lab/index.html:220
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Press Play, then jump over the cactus. Move the speed slider to try a slower or faster"
" game; it switches to a fixed speed. Select the recovered rule to start at 6 and "
"gradually accelerate again."
msgstr ""
#: website/public/examples/dino-lab/index.html:226
msgctxt "page:examples/dino-lab/index.html"
msgid "Play the reconstruction"
msgstr ""
#: website/public/examples/dino-lab/index.html:258
msgctxt "page:examples/dino-lab/index.html"
msgid "Play"
msgstr ""
#: website/public/examples/dino-lab/index.html:261
msgctxt "page:examples/dino-lab/index.html"
msgid "Jump ↑"
msgstr ""
#: website/public/examples/dino-lab/index.html:262
msgctxt "page:examples/dino-lab/index.html"
msgid "Restart"
msgstr ""
#: website/public/examples/dino-lab/index.html:265
msgctxt "page:examples/dino-lab/index.html"
msgid "Speed"
msgstr ""
#: website/public/examples/dino-lab/index.html:275
msgctxt "page:examples/dino-lab/index.html"
msgid "Use the recovered acceleration rule"
msgstr ""
#: website/public/examples/dino-lab/index.html:279
msgctxt "page:examples/dino-lab/index.html"
msgid "Original rule: start at 6, then increase toward 13."
msgstr ""
#: website/public/examples/dino-lab/index.html:282
msgctxt "page:examples/dino-lab/index.html"
msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
msgstr ""
#: website/public/examples/dino-lab/index.html:287
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Enable JavaScript to play the reconstruction. The code and explanation above remain "
"readable."
msgstr ""
#: website/public/examples/dino-lab/index.html:295
msgctxt "page:examples/dino-lab/index.html"
msgid "Read the script REA returned"
msgstr ""
#. {ph0}: <a href="https://wayou.github.io/t-rex-runner/" >
#. {ph1}: </a >
#. {ph2}: <code>index.js</code>
#: website/public/examples/dino-lab/index.html:296
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It returned "
"the loaded {ph2}, including this branch in the game’s update function:"
msgstr ""
#: website/public/examples/dino-lab/index.html:306
msgctxt "page:examples/dino-lab/index.html"
msgid "REA · selected script source"
msgstr ""
#. {ph0}: <code>SPEED: 6</code>
#. {ph1}: <code>ACCELERATION: 0.001</code>
#. {ph2}: <code>MAX_SPEED: 13</code>
#: website/public/examples/dino-lab/index.html:312
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an update "
"without a collision."
msgstr ""
#: website/public/examples/dino-lab/index.html:317
msgctxt "page:examples/dino-lab/index.html"
msgid "Use the same rule in the new game"
msgstr ""
#. {ph0}: <span translate="no">dino-speed.js</span>
#: website/public/examples/dino-lab/index.html:320
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "Reconstruction · {ph0}"
msgstr ""
#: website/public/examples/dino-lab/index.html:323
#: website/public/examples/dino-lab/index.html:422
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy"
msgstr ""
#: website/public/examples/dino-lab/index.html:336
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"The mini-game uses this function for automatic acceleration. Moving the slider "
"supplies a fixed speed instead. Drawing, jump physics and rectangle collision checks "
"are new code for this teaching game; its simulation advances at 60 updates per second."
msgstr ""
#. {ph0}: <a href="../../assets/dino-speed.js" download >
#. {ph1}: </a >
#. {ph2}: <a href="../../assets/dino-demo.js">
#. {ph3}: </a>
#: website/public/examples/dino-lab/index.html:342
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}"
msgstr ""
#: website/public/examples/dino-lab/index.html:350
msgctxt "page:examples/dino-lab/index.html"
msgid "Check the reconstruction"
msgstr ""
#: website/public/examples/dino-lab/index.html:351
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"We called the original game’s update function with obstacles and automatic scheduling "
"disabled. Compare those recorded speeds with a replay of the recovered rule."
msgstr ""
#: website/public/examples/dino-lab/index.html:360
msgctxt "page:examples/dino-lab/index.html"
msgid "Updates"
msgstr ""
#: website/public/examples/dino-lab/index.html:361
msgctxt "page:examples/dino-lab/index.html"
msgid "Original game"
msgstr ""
#: website/public/examples/dino-lab/index.html:362
msgctxt "page:examples/dino-lab/index.html"
msgid "Reconstructed rule"
msgstr ""
#: website/public/examples/dino-lab/index.html:389
msgctxt "page:examples/dino-lab/index.html"
msgid "Run the speed check"
msgstr ""
#: website/public/examples/dino-lab/index.html:392
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Values rounded to three decimals. The branch checks before adding, so the final "
"increment can take speed just above 13."
msgstr ""
#: website/public/examples/dino-lab/index.html:398
msgctxt "page:examples/dino-lab/index.html"
msgid "Try the analysis yourself"
msgstr ""
#. {ph0}: <a href="../../get-started/">
#. {ph1}: </a>
#: website/public/examples/dino-lab/index.html:400
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}Set up REA{ph1} with your coding agent."
msgstr ""
#. {ph0}: <a href="../../guides/browser/#prepare" >
#. {ph1}: </a >
#. {ph2}: <code>https://wayou.github.io/t-rex-runner/</code>
#: website/public/examples/dino-lab/index.html:404
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL."
msgstr ""
#: website/public/examples/dino-lab/index.html:411
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Give your agent the page URL and local debugging endpoint, then copy this prompt."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/examples/dino-lab/index.html:418
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="lab-analysis-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/examples/dino-lab/index.html:431
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get faster? Show "
"the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/examples/dino-lab/index.html:440
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height control to "
"the new version.”{ph1}"
msgstr ""
#. {ph0}: <a href="https://github.com/wayou/t-rex-
#. runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571" >
#. {ph1}: </a >
#. {ph2}: <a href="../../assets/licenses/dinosaur.txt" >
#. {ph3}: </a >
#: website/public/examples/dino-lab/index.html:447
#, python-brace-format
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and BSD "
"license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome 150."
msgstr ""
#: website/public/examples/dino-lab/index.html:6
msgctxt "page:examples/dino-lab/index.html"
msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA"
msgstr ""
#: website/public/examples/dino-lab/index.html:7
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Read the dinosaur game’s speed rule with REA, rebuild it, then change the speed and "
"play."
msgstr ""
#: website/public/examples/dino-lab/index.html:217
msgctxt "page:examples/dino-lab/index.html"
msgid "Dinosaur speed reconstruction"
msgstr ""
#: website/public/examples/dino-lab/index.html:248
msgctxt "page:examples/dino-lab/index.html"
msgid ""
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
msgstr ""
#: website/public/examples/dino-lab/index.html:323
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy reconstructed speed rule"
msgstr ""
#: website/public/examples/dino-lab/index.html:422
msgctxt "page:examples/dino-lab/index.html"
msgid "Copy dinosaur analysis prompt"
msgstr ""
#: website/public/examples/dino-lab/index.html:475
msgctxt "page:examples/dino-lab/index.html"
msgid "Back to top"
msgstr ""
#: website/public/faq/index.html:103
msgctxt "page:faq/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/faq/index.html:194
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Home{ph1} / FAQ"
msgstr ""
#: website/public/faq/index.html:195
msgctxt "page:faq/index.html"
msgid "REA FAQ."
msgstr ""
#: website/public/faq/index.html:196
msgctxt "page:faq/index.html"
msgid "Setup, updates, analysis and troubleshooting."
msgstr ""
#: website/public/faq/index.html:200
msgctxt "page:faq/index.html"
msgid "Topics"
msgstr ""
#. {ph0}: <a href="#setup">
#. {ph1}: </a>
#: website/public/faq/index.html:202
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Setup and updates{ph1}"
msgstr ""
#. {ph0}: <a href="#analysis">
#. {ph1}: </a>
#: website/public/faq/index.html:203
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Analysis{ph1}"
msgstr ""
#. {ph0}: <a href="#troubleshooting">
#. {ph1}: </a>
#: website/public/faq/index.html:204
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Troubleshooting{ph1}"
msgstr ""
#. {ph0}: <a href="#sharing">
#. {ph1}: </a>
#: website/public/faq/index.html:205
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Data and sharing{ph1}"
msgstr ""
#: website/public/faq/index.html:214
msgctxt "page:faq/index.html"
msgid "Setup and updates"
msgstr ""
#: website/public/faq/index.html:217
msgctxt "page:faq/index.html"
msgid "How do I install REA?"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/faq/index.html:218
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"With {ph0} and npm available, run setup, choose your coding agent and review the "
"proposed changes."
msgstr ""
#: website/public/faq/index.html:225
msgctxt "page:faq/index.html"
msgid "Terminal · agent setup"
msgstr ""
#: website/public/faq/index.html:226 website/public/faq/index.html:267
#: website/public/faq/index.html:285 website/public/faq/index.html:369
#: website/public/faq/index.html:416 website/public/faq/index.html:456
#: website/public/faq/index.html:476
msgctxt "page:faq/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <a href="../get-started/">
#. {ph1}: </a>
#: website/public/faq/index.html:237
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Setup registers REA's MCP connection and installs the matching investigation skill. "
"Restart your agent when it finishes, then give it a target path and a question. "
"{ph0}Follow the setup guide{ph1} for prerequisites and your first analysis."
msgstr ""
#: website/public/faq/index.html:246
msgctxt "page:faq/index.html"
msgid "Which coding agents can use REA?"
msgstr ""
#: website/public/faq/index.html:247
msgctxt "page:faq/index.html"
msgid ""
"Any agent that supports local MCP servers. Setup includes Claude Code, Claude Desktop,"
" Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot "
"CLI, Command Code, Grok Build, OMP, and VS Code. Grok Bot's connector is added from "
"its chat."
msgstr ""
#. {ph0}: <a href="../get-started/#agent">
#. {ph1}: </a>
#: website/public/faq/index.html:254
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Connect your coding agent{ph1}."
msgstr ""
#: website/public/faq/index.html:259
msgctxt "page:faq/index.html"
msgid "How do I update REA?"
msgstr ""
#: website/public/faq/index.html:260
msgctxt "page:faq/index.html"
msgid "REA releases frequently, including bug fixes. If you installed the CLI with npm:"
msgstr ""
#: website/public/faq/index.html:266
msgctxt "page:faq/index.html"
msgid "Terminal · installed CLI"
msgstr ""
#. {ph0}: <code>npx</code>
#: website/public/faq/index.html:278
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Follow the setup refresh command printed by the update. If you set up your agent "
"through {ph0}, run:"
msgstr ""
#: website/public/faq/index.html:284
msgctxt "page:faq/index.html"
msgid "Terminal · refresh agent setup"
msgstr ""
#. {ph0}: <code>npx -y rea-agents@latest</code>
#: website/public/faq/index.html:296
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Review the changes and restart your agent. Its REA connection pins a package version, "
"so refreshing setup makes it use the new release. For one-off CLI commands, use {ph0} "
"followed by the command."
msgstr ""
#: website/public/faq/index.html:304
msgctxt "page:faq/index.html"
msgid "Is installing the skill from skills.sh enough?"
msgstr ""
#. {ph0}: <a href="#install">
#. {ph1}: </a>
#: website/public/faq/index.html:307
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"The skill gives your agent investigation instructions. Run {ph0}REA setup{ph1} to "
"connect the MCP server and install the matching skill, then restart your agent so it "
"can call the tools."
msgstr ""
#: website/public/faq/index.html:318
msgctxt "page:faq/index.html"
msgid "Analysis"
msgstr ""
#: website/public/faq/index.html:321
msgctxt "page:faq/index.html"
msgid "What can I analyze with REA?"
msgstr ""
#: website/public/faq/index.html:322
msgctxt "page:faq/index.html"
msgid "Start with the kind of software you have:"
msgstr ""
#. {ph0}: <a href="../guides/native/" >
#. {ph1}: </a >
#: website/public/faq/index.html:324
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode and "
"references."
msgstr ""
#. {ph0}: <a href="../guides/javascript/" >
#. {ph1}: </a >
#: website/public/faq/index.html:329
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source locations."
msgstr ""
#. {ph0}: <a href="../guides/browser/">
#. {ph1}: </a>
#: website/public/faq/index.html:334
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations."
msgstr ""
#. {ph0}: <a href="../showcase/">
#. {ph1}: </a>
#: website/public/faq/index.html:339
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"REA also has workflows for managed assemblies, Android APKs, firmware and packaged "
"resources. {ph0}See the case studies{ph1} for worked investigations."
msgstr ""
#: website/public/faq/index.html:347
msgctxt "page:faq/index.html"
msgid "Do I need Hopper, Ghidra or IDA?"
msgstr ""
#: website/public/faq/index.html:348
msgctxt "page:faq/index.html"
msgid ""
"Deep native analysis uses one of them. Static JavaScript and .NET inspection work with"
" the supplied files and do not need a native analysis engine."
msgstr ""
#. {ph0}: <a href="../get-started/#native">
#. {ph1}: </a>
#: website/public/faq/index.html:353
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Connect your existing Ghidra or IDA installation, or let setup detect Hopper and "
"propose an installation. Your host and target determine which provider can be used. "
"{ph0}Set up native analysis{ph1}."
msgstr ""
#: website/public/faq/index.html:361
msgctxt "page:faq/index.html"
msgid "Can I use REA without a coding agent?"
msgstr ""
#: website/public/faq/index.html:362
msgctxt "page:faq/index.html"
msgid ""
"Yes. The CLI uses the same analysis workflows. For a local JavaScript or Electron app:"
msgstr ""
#: website/public/faq/index.html:368
msgctxt "page:faq/index.html"
msgid "Terminal · static application analysis"
msgstr ""
#. {ph0}: <a href="../get-started/#terminal">
#. {ph1}: </a>
#: website/public/faq/index.html:381
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Replace the path with an extracted application folder or ASAR file. {ph0}Use the "
"CLI{ph1} for installation options."
msgstr ""
#: website/public/faq/index.html:388
msgctxt "page:faq/index.html"
msgid "What code does REA return?"
msgstr ""
#: website/public/faq/index.html:389
msgctxt "page:faq/index.html"
msgid ""
"Native analysis returns assembly and pseudocode, with calls, references and relevant "
"constants. JavaScript analysis returns modules, their relationships and source "
"locations."
msgstr ""
#. {ph0}: <a href="../showcase/dx-ball/#sound-pan" >
#. {ph1}: </a >
#. {ph2}: <a href="../showcase/ctf/">
#. {ph3}: </a>
#: website/public/faq/index.html:394
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Your agent uses these findings to explain the behavior or write and test an "
"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag checker{ph3} show "
"how that process works."
msgstr ""
#: website/public/faq/index.html:405
msgctxt "page:faq/index.html"
msgid "What should I ask my agent?"
msgstr ""
#: website/public/faq/index.html:406
msgctxt "page:faq/index.html"
msgid ""
"Give it a local target and one behavior to investigate. For a JavaScript or Electron "
"app:"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/faq/index.html:412
#, python-brace-format
msgctxt "page:faq/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="faq-analysis-prompt" >
#. {ph3}: <span translate="no">/absolute/path/to/app</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/faq/index.html:425
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. Show the "
"relevant code and source locations.{ph4}{ph5}{ph6}"
msgstr ""
#. {ph0}: <a href="../guides/">
#. {ph1}: </a>
#: website/public/faq/index.html:435
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Replace the path with your target. The {ph0}guides{ph1} provide prompts for native, "
"Electron and browser examples."
msgstr ""
#: website/public/faq/index.html:445
msgctxt "page:faq/index.html"
msgid "Troubleshooting"
msgstr ""
#: website/public/faq/index.html:448
msgctxt "page:faq/index.html"
msgid "Why can't my agent see the REA tools?"
msgstr ""
#. {ph0}: <code>doctor</code>
#: website/public/faq/index.html:449
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Restart or reconnect your agent after setup. Check its REA registration with {ph0}; "
"for Codex:"
msgstr ""
#: website/public/faq/index.html:455
msgctxt "page:faq/index.html"
msgid "Terminal · check one client"
msgstr ""
#. {ph0}: <code>codex</code>
#. {ph1}: <code>claude_code</code>
#. {ph2}: <code>cursor</code>
#: website/public/faq/index.html:467
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report shows a "
"missing or stale registration, run setup for that client:"
msgstr ""
#: website/public/faq/index.html:475
msgctxt "page:faq/index.html"
msgid "Terminal · repair one client's setup"
msgstr ""
#. {ph0}: <a href="../get-started/#help">
#. {ph1}: </a>
#: website/public/faq/index.html:487
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Review its plan and restart the client. If registration is healthy but tools remain "
"absent, check the client's MCP connection error. {ph0}More setup diagnostics{ph1}."
msgstr ""
#: website/public/faq/index.html:495
msgctxt "page:faq/index.html"
msgid "Do I need to start Hopper first?"
msgstr ""
#. {ph0}: <a href="../get-started/#native">
#. {ph1}: </a >
#: website/public/faq/index.html:496
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"REA starts Hopper when an operation needs it. On macOS, complete the first-run choice "
"of demo mode or license activation before unattended analysis. {ph0}See native "
"provider setup{ph1}."
msgstr ""
#: website/public/faq/index.html:505
msgctxt "page:faq/index.html"
msgid "What should I do if I hit a bug?"
msgstr ""
#. {ph0}: <a href="#update">
#. {ph1}: </a>
#: website/public/faq/index.html:506
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent release may"
" already fix the problem."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/issues/new/choose" >
#. {ph1}: </a >
#: website/public/faq/index.html:510
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"If it persists, {ph0}open an issue{ph1} with your REA version, operating system, "
"target type, steps to reproduce and error output. Include the provider name when the "
"problem involves native analysis."
msgstr ""
#: website/public/faq/index.html:524
msgctxt "page:faq/index.html"
msgid "Data and sharing"
msgstr ""
#: website/public/faq/index.html:527
msgctxt "page:faq/index.html"
msgid "Does REA upload my app?"
msgstr ""
#: website/public/faq/index.html:528
msgctxt "page:faq/index.html"
msgid ""
"REA analyzes targets on your machine. Your agent receives the results, and its model "
"provider's data policy applies to those results."
msgstr ""
#: website/public/faq/index.html:535
msgctxt "page:faq/index.html"
msgid "How can I share an example or contribute?"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/issues/new/choose" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/morluto/rea/pulls">
#. {ph3}: </a >
#: website/public/faq/index.html:536
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Have a useful REA example? We'd love to see it. Share the target, your question, the "
"findings and how you checked them in an {ph0}issue{ph1} or {ph2}pull request{ph3}. "
"Short code excerpts and figures help others follow the investigation."
msgstr ""
#. {ph0}: <a href="https://discord.gg/GkcryMnJDM">
#. {ph1}: </a>
#: website/public/faq/index.html:548
#, python-brace-format
msgctxt "page:faq/index.html"
msgid ""
"Bug reports, feature requests, documentation and code improvements are welcome too. "
"You can also discuss an example in the {ph0}community{ph1}."
msgstr ""
#: website/public/faq/index.html:6
msgctxt "page:faq/index.html"
msgid "REA FAQ: Setup, Updates and Troubleshooting"
msgstr ""
#: website/public/faq/index.html:7
msgctxt "page:faq/index.html"
msgid ""
"Answers to common REA questions: installation, updates, analysis tools, coding agents,"
" troubleshooting and sharing examples."
msgstr ""
#: website/public/faq/index.html:199
msgctxt "page:faq/index.html"
msgid "On this page"
msgstr ""
#: website/public/faq/index.html:208
msgctxt "page:faq/index.html"
msgid "Frequently asked questions about REA"
msgstr ""
#: website/public/faq/index.html:226
msgctxt "page:faq/index.html"
msgid "Copy REA setup command"
msgstr ""
#: website/public/faq/index.html:267
msgctxt "page:faq/index.html"
msgid "Copy REA update command"
msgstr ""
#: website/public/faq/index.html:285
msgctxt "page:faq/index.html"
msgid "Copy agent setup refresh command"
msgstr ""
#: website/public/faq/index.html:369
msgctxt "page:faq/index.html"
msgid "Copy REA CLI analysis command"
msgstr ""
#: website/public/faq/index.html:416
msgctxt "page:faq/index.html"
msgid "Copy example analysis prompt"
msgstr ""
#: website/public/faq/index.html:456
msgctxt "page:faq/index.html"
msgid "Copy client diagnosis command"
msgstr ""
#: website/public/faq/index.html:476
msgctxt "page:faq/index.html"
msgid "Copy scoped setup command"
msgstr ""
#: website/public/faq/index.html:573
msgctxt "page:faq/index.html"
msgid "Back to top"
msgstr ""
#: website/public/first-investigation/index.html:103
msgctxt "page:first-investigation/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:194
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Home{ph1} / Your first investigation"
msgstr ""
#. {ph0}: <br />
#: website/public/first-investigation/index.html:197
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "Find out where{ph0}exported notes go."
msgstr ""
#: website/public/first-investigation/index.html:198
msgctxt "page:first-investigation/index.html"
msgid ""
"Use REA to inspect a small app, follow its Export notes button and check one detail "
"yourself."
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/first-investigation/index.html:202
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "A supplied example · {ph0} and npm · Your coding agent"
msgstr ""
#: website/public/first-investigation/index.html:209
msgctxt "page:first-investigation/index.html"
msgid "In this exercise"
msgstr ""
#. {ph0}: <a href="#setup">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:211
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}1. Set up{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:212
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}2. Ask about export{ph1}"
msgstr ""
#. {ph0}: <a href="#answer">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:213
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}3. Follow the answer{ph1}"
msgstr ""
#. {ph0}: <a href="#check">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:214
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}4. Check a prediction{ph1}"
msgstr ""
#. {ph0}: <a href="#next">
#. {ph1}: </a>
#: website/public/first-investigation/index.html:215
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}5. Ask another question{ph1}"
msgstr ""
#: website/public/first-investigation/index.html:220
msgctxt "page:first-investigation/index.html"
msgid "1. Connect your agent to REA"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#. {ph1}: <a href="../get-started/">
#. {ph2}: </a >
#: website/public/first-investigation/index.html:221
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} and npm; "
"the {ph1}setup guide lists supported versions{ph2}."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/first-investigation/index.html:229
#: website/public/first-investigation/index.html:279
#: website/public/first-investigation/index.html:401
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/first-investigation/index.html:234
#: website/public/first-investigation/index.html:256
#: website/public/first-investigation/index.html:284
#: website/public/first-investigation/index.html:406
#: website/public/first-investigation/index.html:448
msgctxt "page:first-investigation/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="first-install-prompt" >
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/first-investigation/index.html:243
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/first-investigation/index.html:253
msgctxt "page:first-investigation/index.html"
msgid "Or run this command in your terminal:"
msgstr ""
#: website/public/first-investigation/index.html:265
msgctxt "page:first-investigation/index.html"
msgid ""
"Review the plan, approve the setup, then restart your agent. Already connected? "
"Continue below."
msgstr ""
#: website/public/first-investigation/index.html:271
msgctxt "page:first-investigation/index.html"
msgid "2. Ask where the CSV is written"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/first-investigation/index.html:272
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"The example is a six-file Electron app with an {ph0}Export notes{ph1} button. Your "
"agent can inspect its code without installing or launching Electron."
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="first-analysis-prompt" >
#. {ph3}: <span translate="no" >https://rea.tools/examples/notes-example.zip</span >
#. {ph4}: <span translate="no">notes.csv</span>
#. {ph5}: </span >
#. {ph6}: <span class="terminal-cursor" aria-hidden="true">
#. {ph7}: </span>
#: website/public/first-investigation/index.html:293
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use REA to "
"find what happens when I click Export notes. Show where {ph4} is written, which fields"
" it contains, and the relevant files and lines.{ph5}{ph6}{ph7}"
msgstr ""
#: website/public/first-investigation/index.html:307
msgctxt "page:first-investigation/index.html"
msgid ""
"Your agent downloads the files and gives the unpacked folder to REA for inspection."
msgstr ""
#. {ph0}: <a class="button" href="../examples/notes-example.zip" download="notes-
#. example.zip" >
#. {ph1}: </a >
#: website/public/first-investigation/index.html:311
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Download example ZIP{ph1}"
msgstr ""
#. {ph0}: <code>notes-example</code>
#: website/public/first-investigation/index.html:319
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"If your agent can’t download files, unzip this archive yourself. Give it the path to "
"the {ph0} folder and the same export question."
msgstr ""
#: website/public/first-investigation/index.html:326
msgctxt "page:first-investigation/index.html"
msgid "3. Follow the answer back to the code"
msgstr ""
#: website/public/first-investigation/index.html:327
msgctxt "page:first-investigation/index.html"
msgid "Look for a short explanation with file and line references:"
msgstr ""
#. {ph0}: <code>notes:export</code>
#. {ph1}: <code>notes.csv</code>
#. {ph2}: <code>id</code>
#. {ph3}: <code>title</code>
#: website/public/first-investigation/index.html:329
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"The button sends a {ph0} message. The main process formats the notes as CSV and writes"
" {ph1} in the user’s Downloads folder. The columns are {ph2} and {ph3}."
msgstr ""
#: website/public/first-investigation/index.html:337
msgctxt "page:first-investigation/index.html"
msgid "From the button to the file writer"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">renderer.js</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node">
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: <code>notes.exportCsv()</code>
#. {ph7}: </span >
#: website/public/first-investigation/index.html:339
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">preload.js</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node">
#. {ph4}: <code>notes:export</code>
#. {ph5}: </span >
#. {ph6}: <span class="flow-note" >
#. {ph7}: </span >
#: website/public/first-investigation/index.html:347
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the main "
"process.{ph7}"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">main.js</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node" >
#. {ph4}: <span translate="no">notes.csv</span>
#. {ph5}: </span >
#. {ph6}: <span class="flow-note" >
#. {ph7}: <code>csv.js</code>
#. {ph8}: </span >
#: website/public/first-investigation/index.html:355
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in {ph7} and "
"writes the file.{ph8}"
msgstr ""
#: website/public/first-investigation/index.html:366
msgctxt "page:first-investigation/index.html"
msgid ""
"REA’s static analysis pairs the message with its handler. The destination is read from"
" code."
msgstr ""
#. {ph0}: <span translate="no">main.js</span>
#: website/public/first-investigation/index.html:373
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0} · lines 8–12"
msgstr ""
#: website/public/first-investigation/index.html:374
msgctxt "page:first-investigation/index.html"
msgid "Source"
msgstr ""
#: website/public/first-investigation/index.html:382
msgctxt "page:first-investigation/index.html"
msgid ""
"The file path, formatter and write call are together in this handler. Ask your agent "
"to show these lines if its answer leaves them out."
msgstr ""
#. {ph0}: <a href="../guides/javascript/#follow" >
#. {ph1}: </a >
#: website/public/first-investigation/index.html:387
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0}See the full code trace and recorded REA result{ph1}."
msgstr ""
#: website/public/first-investigation/index.html:394
msgctxt "page:first-investigation/index.html"
msgid "4. Check a prediction"
msgstr ""
#: website/public/first-investigation/index.html:395
msgctxt "page:first-investigation/index.html"
msgid ""
"A comma separates CSV columns. What happens when a note title itself contains a comma "
"or quotation marks?"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="first-check-prompt" >
#. {ph3}: <span translate="no">Hello, "REA"</span>
#. {ph4}: <span translate="no">toCsv</span>
#. {ph5}: <span translate="no">Node.js</span>
#. {ph6}: </span >
#. {ph7}: <span class="terminal-cursor" aria-hidden="true">
#. {ph8}: </span>
#: website/public/first-investigation/index.html:415
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then run the "
"example’s {ph4} formatter with {ph5} to check it. Show the prediction and actual "
"output.{ph6}{ph7}{ph8}"
msgstr ""
#: website/public/first-investigation/index.html:428
msgctxt "page:first-investigation/index.html"
msgid "Expected formatter output"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/first-investigation/index.html:433
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"The title stays in one quoted field; each quotation mark is doubled. This checks the "
"formatter directly with {ph0}."
msgstr ""
#: website/public/first-investigation/index.html:439
msgctxt "page:first-investigation/index.html"
msgid "Run the check yourself"
msgstr ""
#. {ph0}: <code>notes-example</code>
#: website/public/first-investigation/index.html:440
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "Open a terminal in the unpacked {ph0} folder:"
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/first-investigation/index.html:446
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid "{ph0} · CSV formatter"
msgstr ""
#: website/public/first-investigation/index.html:462
msgctxt "page:first-investigation/index.html"
msgid ""
"This command uses a shell with here-document support, such as Bash or Zsh. Your agent "
"can run the same JavaScript in your platform’s shell."
msgstr ""
#: website/public/first-investigation/index.html:470
msgctxt "page:first-investigation/index.html"
msgid "5. Ask another question"
msgstr ""
#: website/public/first-investigation/index.html:471
msgctxt "page:first-investigation/index.html"
msgid "Try a follow-up in the same conversation:"
msgstr ""
#: website/public/first-investigation/index.html:473
msgctxt "page:first-investigation/index.html"
msgid "What happens if the file can’t be written? Follow the error back to the page."
msgstr ""
#: website/public/first-investigation/index.html:478
msgctxt "page:first-investigation/index.html"
msgid ""
"Or give your agent an app of your own and ask about one button, file or behavior."
msgstr ""
#. {ph0}: <a href="../showcase/notion/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/first-investigation/index.html:483
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in a packaged"
" Electron app.{ph3}"
msgstr ""
#. {ph0}: <a href="../showcase/dx-ball/" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/first-investigation/index.html:489
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original instructions and "
"the reconstruction’s checks.{ph3}"
msgstr ""
#. {ph0}: <a href="../faq/#troubleshooting" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/first-investigation/index.html:497
#, python-brace-format
msgctxt "page:first-investigation/index.html"
msgid ""
"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the connection if "
"you get stuck.{ph3}"
msgstr ""
#: website/public/first-investigation/index.html:6
msgctxt "page:first-investigation/index.html"
msgid "Your First Reverse Engineering Investigation — REA"
msgstr ""
#: website/public/first-investigation/index.html:7
msgctxt "page:first-investigation/index.html"
msgid ""
"Try REA on a small Notes app. Set up your agent, ask where exported notes go, and "
"check the CSV formatter with a sample title."
msgstr ""
#: website/public/first-investigation/index.html:208
msgctxt "page:first-investigation/index.html"
msgid "On this page"
msgstr ""
#: website/public/first-investigation/index.html:218
msgctxt "page:first-investigation/index.html"
msgid "Your first REA investigation"
msgstr ""
#: website/public/first-investigation/index.html:234
msgctxt "page:first-investigation/index.html"
msgid "Copy REA installation prompt"
msgstr ""
#: website/public/first-investigation/index.html:256
msgctxt "page:first-investigation/index.html"
msgid "Copy setup command"
msgstr ""
#: website/public/first-investigation/index.html:284
msgctxt "page:first-investigation/index.html"
msgid "Copy Notes investigation prompt"
msgstr ""
#: website/public/first-investigation/index.html:406
msgctxt "page:first-investigation/index.html"
msgid "Copy CSV check prompt"
msgstr ""
#: website/public/first-investigation/index.html:448
msgctxt "page:first-investigation/index.html"
msgid "Copy formatter check command"
msgstr ""
#: website/public/first-investigation/index.html:523
msgctxt "page:first-investigation/index.html"
msgid "Back to top"
msgstr ""
#: website/public/get-started/index.html:103
msgctxt "page:get-started/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/get-started/index.html:194
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Home{ph1} / Get started"
msgstr ""
#: website/public/get-started/index.html:195
msgctxt "page:get-started/index.html"
msgid "Set up REA."
msgstr ""
#: website/public/get-started/index.html:196
msgctxt "page:get-started/index.html"
msgid "Connect REA to your coding agent, or inspect a local app from your terminal."
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#. {ph1}: <span translate="no">Node.js</span>
#: website/public/get-started/index.html:200
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}."
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#: website/public/get-started/index.html:205
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Don't have {ph0}, or not sure?"
msgstr ""
#: website/public/get-started/index.html:208
msgctxt "page:get-started/index.html"
msgid "Open a terminal and check:"
msgstr ""
#: website/public/get-started/index.html:211 website/public/get-started/index.html:468
msgctxt "page:get-started/index.html"
msgid "Terminal"
msgstr ""
#: website/public/get-started/index.html:212 website/public/get-started/index.html:233
#: website/public/get-started/index.html:256 website/public/get-started/index.html:272
#: website/public/get-started/index.html:287 website/public/get-started/index.html:302
#: website/public/get-started/index.html:318 website/public/get-started/index.html:337
#: website/public/get-started/index.html:423 website/public/get-started/index.html:469
#: website/public/get-started/index.html:545 website/public/get-started/index.html:604
#: website/public/get-started/index.html:645 website/public/get-started/index.html:677
#: website/public/get-started/index.html:734 website/public/get-started/index.html:775
#: website/public/get-started/index.html:815 website/public/get-started/index.html:831
msgctxt "page:get-started/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <code>node -v</code>
#. {ph1}: <span translate="no">Node.js</span>
#: website/public/get-started/index.html:224
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an older version "
"or \"not recognized\" / \"command not found\", install {ph1} 24 LTS:"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/get-started/index.html:229
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Windows (PowerShell){ph1}"
msgstr ""
#. {ph0}: <code>node -v</code>
#: website/public/get-started/index.html:244
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Type Y if asked to accept the terms. Close PowerShell, open it again, then run {ph0}."
msgstr ""
#. {ph0}: <em>
#. {ph1}: </em>
#. {ph2}: <code>npx</code>
#: website/public/get-started/index.html:248
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"If PowerShell later says {ph0}\"running scripts is disabled on this system\"{ph1} when"
" you run {ph2}, run this once and try again:"
msgstr ""
#: website/public/get-started/index.html:268
msgctxt "page:get-started/index.html"
msgid "If you use Homebrew:"
msgstr ""
#: website/public/get-started/index.html:283
msgctxt "page:get-started/index.html"
msgid "Otherwise:"
msgstr ""
#: website/public/get-started/index.html:298
msgctxt "page:get-started/index.html"
msgid "Close Terminal, open it again, then:"
msgstr ""
#. {ph0}: <code>curl</code>
#. {ph1}: <code>unzip</code>
#. {ph2}: <code>sudo apt install curl unzip</code>
#: website/public/get-started/index.html:329
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the terminal, "
"open it again, then:"
msgstr ""
#. {ph0}: <code>nodejs</code>
#. {ph1}: <code>node -v</code>
#: website/public/get-started/index.html:349
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Your distribution's own {ph0} package is often older than 22.19, so check {ph1} if you"
" use it instead."
msgstr ""
#. {ph0}: <a href="https://nodejs.org/en/download">
#. {ph1}: </a>
#: website/public/get-started/index.html:353
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Prefer a regular installer? Download the LTS version from {ph0}nodejs.org{ph1}."
msgstr ""
#: website/public/get-started/index.html:361
msgctxt "page:get-started/index.html"
msgid "Setup options"
msgstr ""
#. {ph0}: <a href="#agent">
#. {ph1}: </a>
#: website/public/get-started/index.html:363
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Connect your coding agent{ph1}"
msgstr ""
#. {ph0}: <a href="#terminal">
#. {ph1}: </a>
#: website/public/get-started/index.html:364
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Use the CLI{ph1}"
msgstr ""
#. {ph0}: <a href="#native">
#. {ph1}: </a>
#: website/public/get-started/index.html:365
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Set up native analysis{ph1}"
msgstr ""
#. {ph0}: <a href="#help">
#. {ph1}: </a>
#: website/public/get-started/index.html:366
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Getting help{ph1}"
msgstr ""
#: website/public/get-started/index.html:371
msgctxt "page:get-started/index.html"
msgid "Connect your coding agent"
msgstr ""
#: website/public/get-started/index.html:372
msgctxt "page:get-started/index.html"
msgid ""
"Run setup to connect REA to your coding agent. Client choices include Claude Code, "
"Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported MCP clients. Grok"
" Bot's connector is added from its chat."
msgstr ""
#: website/public/get-started/index.html:379
msgctxt "page:get-started/index.html"
msgid "New to coding agents?"
msgstr ""
#: website/public/get-started/index.html:380
msgctxt "page:get-started/index.html"
msgid ""
"A coding agent is an AI assistant that works on your computer instead of in a browser "
"tab. It can read files and run commands, and it asks before making changes. REA gives "
"it reverse-engineering tools."
msgstr ""
#: website/public/get-started/index.html:386
msgctxt "page:get-started/index.html"
msgid "If you don't have one yet, pick one, follow its install page and sign in:"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: <a href="https://code.claude.com/docs/en/setup" >
#. {ph2}: </a >
#. {ph3}: </strong >
#: website/public/get-started/index.html:391
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: <a href="https://github.com/openai/codex">
#. {ph2}: </a>
#. {ph3}: </strong >
#: website/public/get-started/index.html:399
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: <a href="https://opencode.ai/docs">
#. {ph2}: </a>
#. {ph3}: </strong >
#: website/public/get-started/index.html:405
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of your choice."
msgstr ""
#: website/public/get-started/index.html:411
msgctxt "page:get-started/index.html"
msgid ""
"Then open it and copy the prompt below into it. The agent runs REA's setup and shows "
"you the plan before changing anything."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/get-started/index.html:418
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="agent-install-prompt" >
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/get-started/index.html:432
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/get-started/index.html:443
msgctxt "page:get-started/index.html"
msgid "Or run setup yourself"
msgstr ""
#: website/public/get-started/index.html:445
msgctxt "page:get-started/index.html"
msgid "How do I open a terminal?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/get-started/index.html:447
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press Enter."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <kbd>⌘</kbd>
#. {ph3}: <kbd>Space</kbd>
#. {ph4}: <em>
#. {ph5}: </em>
#: website/public/get-started/index.html:451
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <kbd>Ctrl</kbd>
#. {ph3}: <kbd>Alt</kbd>
#. {ph4}: <kbd>T</kbd>
#: website/public/get-started/index.html:455
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops."
msgstr ""
#. {ph0}: <kbd>Ctrl</kbd>
#. {ph1}: <kbd>V</kbd>
#. {ph2}: <kbd>⌘</kbd>
#. {ph3}: <kbd>V</kbd>
#. {ph4}: <kbd>Ctrl</kbd>
#. {ph5}: <kbd>Shift</kbd>
#. {ph6}: <kbd>V</kbd>
#: website/public/get-started/index.html:460
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4} {ph5} "
"{ph6}), then press Enter."
msgstr ""
#: website/public/get-started/index.html:481
msgctxt "page:get-started/index.html"
msgid ""
"Choose your client and review the setup plan. REA adds its MCP connection and the "
"matching investigation skill, keeping a backup of existing configuration. It asks "
"before applying the changes."
msgstr ""
#: website/public/get-started/index.html:486
msgctxt "page:get-started/index.html"
msgid "Restart your client when setup finishes."
msgstr ""
#: website/public/get-started/index.html:488
msgctxt "page:get-started/index.html"
msgid "How do I restart my client?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <kbd>⌘</kbd>
#. {ph3}: <kbd>Q</kbd>
#: website/public/get-started/index.html:489
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the app "
"completely, then open it again. Closing the window isn't enough. On macOS press {ph2} "
"{ph3}; on Windows, also quit from the tray icon if there is one."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/get-started/index.html:496
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session and start"
" it again."
msgstr ""
#: website/public/get-started/index.html:501
msgctxt "page:get-started/index.html"
msgid ""
"Give your agent a target path and a specific question. For a JavaScript or Electron "
"app, you might start with:"
msgstr ""
#. {ph0}: <code>/absolute/path/to/app</code>
#: website/public/get-started/index.html:506
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Look at {ph0} and find how it exports data. Show the entry points, calls and "
"dependencies involved, with the source locations for your findings."
msgstr ""
#: website/public/get-started/index.html:512
msgctxt "page:get-started/index.html"
msgid "Replace the path with your local target."
msgstr ""
#: website/public/get-started/index.html:514
msgctxt "page:get-started/index.html"
msgid "How do I get a folder's full path?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/get-started/index.html:516
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose {ph2}Copy as "
"path{ph3}. On Windows 10, hold Shift while right-clicking."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/get-started/index.html:521
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose {ph2}Copy "
"\"…\" as Pathname{ph3}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/get-started/index.html:525
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Any system:{ph1} drag the folder into a terminal window and its path appears."
msgstr ""
#: website/public/get-started/index.html:530
msgctxt "page:get-started/index.html"
msgid "In a terminal, put quotes around a path that contains spaces."
msgstr ""
#: website/public/get-started/index.html:537
msgctxt "page:get-started/index.html"
msgid "Use the CLI"
msgstr ""
#: website/public/get-started/index.html:538
msgctxt "page:get-started/index.html"
msgid ""
"Analyze a JavaScript or Electron application folder or ASAR archive without running "
"the app:"
msgstr ""
#: website/public/get-started/index.html:544
msgctxt "page:get-started/index.html"
msgid "Static application analysis"
msgstr ""
#. {ph0}: <code>.asar</code>
#. {ph1}: <code>"D:/apps/example"</code>
#: website/public/get-started/index.html:557
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Replace the path with your extracted app directory or {ph0} file. On Windows, a path "
"such as {ph1} works here."
msgstr ""
#: website/public/get-started/index.html:563
msgctxt "page:get-started/index.html"
msgid "Where do I find an app's .asar file?"
msgstr ""
#. {ph0}: <code>resources</code>
#: website/public/get-started/index.html:564
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Electron apps usually keep it in a {ph0} folder:"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code
#. >C:\Users\&lt;you&gt;\AppData\Local\Programs\&lt;App&gt;\resources\app.asar</code >
#: website/public/get-started/index.html:569
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Windows:{ph1} {ph2}"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code >/Applications/&lt;App&gt;.app/Contents/Resources/app.asar</code >
#. {ph3}: <em>
#. {ph4}: </em>
#: website/public/get-started/index.html:575
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package "
"Contents{ph4})"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>/opt/&lt;App&gt;/resources/app.asar</code>
#: website/public/get-started/index.html:583
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Linux:{ph1} often {ph2}"
msgstr ""
#. {ph0}: <code>app.asar</code>
#: website/public/get-started/index.html:588
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Some apps install elsewhere. Search the app's folder for {ph0}."
msgstr ""
#: website/public/get-started/index.html:593
msgctxt "page:get-started/index.html"
msgid ""
"The result identifies the app, shows connections between modules and gives their "
"source locations. Connections REA cannot resolve are marked in the result."
msgstr ""
#. {ph0}: <code>rea</code>
#: website/public/get-started/index.html:598
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "If you'd like a permanent {ph0} command in your shell:"
msgstr ""
#: website/public/get-started/index.html:603
msgctxt "page:get-started/index.html"
msgid "Install the CLI"
msgstr ""
#. {ph0}: <a href="../guides/javascript/" >
#. {ph1}: </a >
#: website/public/get-started/index.html:615
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}Continue with the JavaScript application guide{ph1}"
msgstr ""
#: website/public/get-started/index.html:623
msgctxt "page:get-started/index.html"
msgid "Set up native analysis"
msgstr ""
#: website/public/get-started/index.html:624
msgctxt "page:get-started/index.html"
msgid ""
"Native binaries need a local analysis tool. Choose and configure one below, then give "
"REA your executable or library."
msgstr ""
#: website/public/get-started/index.html:629
msgctxt "page:get-started/index.html"
msgid "Choose a tool: Ghidra, Hopper or IDA"
msgstr ""
#: website/public/get-started/index.html:634
msgctxt "page:get-started/index.html"
msgid ""
"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on Linux or "
"macOS, on x64 or arm64. Your Ghidra installation needs a native decompiler for your "
"host architecture. Set the paths before running setup:"
msgstr ""
#: website/public/get-started/index.html:641
msgctxt "page:get-started/index.html"
msgid "Connect your Ghidra installation"
msgstr ""
#: website/public/get-started/index.html:644
msgctxt "page:get-started/index.html"
msgid "Ghidra connection · macOS / Linux"
msgstr ""
#: website/public/get-started/index.html:659
msgctxt "page:get-started/index.html"
msgid ""
"Replace both paths with your existing installations. Setup checks them and records "
"valid settings for your selected client. On Linux arm64, you may need to build "
"Ghidra's native decompiler separately."
msgstr ""
#: website/public/get-started/index.html:667
msgctxt "page:get-started/index.html"
msgid "Connect Ghidra on Windows"
msgstr ""
#: website/public/get-started/index.html:668
msgctxt "page:get-started/index.html"
msgid ""
"Windows x64 has experimental, read-only support for native x86 and x64 PE applications"
" and DLLs on fixed local NTFS drives. Use an existing Ghidra 12.1.x installation and a"
" 64-bit JDK 21 or newer:"
msgstr ""
#: website/public/get-started/index.html:676
msgctxt "page:get-started/index.html"
msgid "Ghidra connection · Windows PowerShell"
msgstr ""
#: website/public/get-started/index.html:691
msgctxt "page:get-started/index.html"
msgid "Replace the two paths with your installations, then review setup's plan."
msgstr ""
#: website/public/get-started/index.html:701
msgctxt "page:get-started/index.html"
msgid ""
"Connect Hopper on macOS or Linux. Run the setup command above; it detects an existing "
"installation or offers an installation plan for your approval."
msgstr ""
#: website/public/get-started/index.html:706
msgctxt "page:get-started/index.html"
msgid ""
"On macOS, complete Hopper's first-run choice of demo mode or license activation before"
" an unattended analysis."
msgstr ""
#: website/public/get-started/index.html:715
msgctxt "page:get-started/index.html"
msgid ""
"The verified IDA setups use Windows, with an existing MCP registration for an attached"
" GUI or a headless database. Linux and macOS headless analysis remains unverified."
msgstr ""
#: website/public/get-started/index.html:721
msgctxt "page:get-started/index.html"
msgid "Connect an existing IDA MCP registration"
msgstr ""
#. {ph0}: <code>command</code>
#. {ph1}: <code>args</code>
#. {ph2}: <code>env</code>
#. {ph3}: <code>mcpServers</code>
#. {ph4}: <code>ida-pro-mcp</code>
#: website/public/get-started/index.html:724
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON file. An "
"existing {ph3} object with an {ph4} entry is also accepted. Point REA at that file "
"before setup:"
msgstr ""
#: website/public/get-started/index.html:733
msgctxt "page:get-started/index.html"
msgid "IDA connection · Windows PowerShell"
msgstr ""
#. {ph0}: <code>"mode": "headless"</code>
#: website/public/get-started/index.html:748
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"The attached profile uses upstream legacy 1.4.0 tools with the original binary already"
" open in IDA. The headless profile uses the upstream database-supervisor API and a "
"registration with {ph0}; real verification covers an IDA 9.3 Windows x64 supervisor. "
"Doctor checks the registration without starting IDA."
msgstr ""
#. {ph0}: <code>--provider ida</code>
#. {ph1}: <code>REA_IDA_MCP_CONFIG</code>
#: website/public/get-started/index.html:757
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Give REA the original executable path, with {ph0} in a CLI query. For an agent, "
"include {ph1} in the REA registration's environment and select IDA when opening the "
"binary."
msgstr ""
#: website/public/get-started/index.html:769
msgctxt "page:get-started/index.html"
msgid "For an existing Ghidra setup, inspect a function with:"
msgstr ""
#: website/public/get-started/index.html:774
msgctxt "page:get-started/index.html"
msgid "Function analysis"
msgstr ""
#. {ph0}: <code>main</code>
#: website/public/get-started/index.html:787
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "Replace {ph0} with the function name or address you want to inspect."
msgstr ""
#: website/public/get-started/index.html:792
msgctxt "page:get-started/index.html"
msgid "How native analysis sessions work"
msgstr ""
#: website/public/get-started/index.html:793
msgctxt "page:get-started/index.html"
msgid ""
"Each CLI command imports and analyzes the binary, then closes its session. Your "
"agent's MCP queries reuse the imported binary while that session is open."
msgstr ""
#. {ph0}: <a href="../guides/native/">
#. {ph1}: </a>
#: website/public/get-started/index.html:799
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Follow a native analysis example{ph1} to see how the function result leads to a "
"recovered calculation."
msgstr ""
#: website/public/get-started/index.html:806
msgctxt "page:get-started/index.html"
msgid "Getting help"
msgstr ""
#: website/public/get-started/index.html:807
msgctxt "page:get-started/index.html"
msgid "If your agent doesn't see REA"
msgstr ""
#. {ph0}: <code>doctor</code>
#: website/public/get-started/index.html:808
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"Restart or reconnect the client after setup. Check its REA connection with {ph0}; for "
"Codex:"
msgstr ""
#: website/public/get-started/index.html:814
msgctxt "page:get-started/index.html"
msgid "Check one client"
msgstr ""
#: website/public/get-started/index.html:826
msgctxt "page:get-started/index.html"
msgid "If a provider needs attention"
msgstr ""
#: website/public/get-started/index.html:827
msgctxt "page:get-started/index.html"
msgid "Check the provider you're using. For Ghidra:"
msgstr ""
#: website/public/get-started/index.html:830
msgctxt "page:get-started/index.html"
msgid "Check one provider"
msgstr ""
#: website/public/get-started/index.html:842
msgctxt "page:get-started/index.html"
msgid "The report gives the failed check and a suggested next step."
msgstr ""
#. {ph0}: <a href="../faq/">
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/get-started/index.html:844
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}"
msgstr ""
#. {ph0}: <a href="../guides/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/get-started/index.html:848
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an Electron "
"app and a browser.{ph3}"
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/issues">
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/get-started/index.html:855
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid ""
"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and diagnostics.{ph3}"
msgstr ""
#. {ph0}: <a href="https://discord.gg/GkcryMnJDM">
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/get-started/index.html:859
#, python-brace-format
msgctxt "page:get-started/index.html"
msgid "{ph0}REA community{ph1}{ph2}Questions, investigations and work in progress.{ph3}"
msgstr ""
#: website/public/get-started/index.html:6
msgctxt "page:get-started/index.html"
msgid "Install REA and Set Up Your Coding Agent"
msgstr ""
#: website/public/get-started/index.html:7
msgctxt "page:get-started/index.html"
msgid ""
"Connect REA to your coding agent or inspect a local JavaScript or Electron app from "
"the terminal. Setup, first questions and native provider guides."
msgstr ""
#: website/public/get-started/index.html:212
msgctxt "page:get-started/index.html"
msgid "Copy Node.js version check"
msgstr ""
#: website/public/get-started/index.html:233
msgctxt "page:get-started/index.html"
msgid "Copy Node.js installation command for Windows"
msgstr ""
#: website/public/get-started/index.html:256
msgctxt "page:get-started/index.html"
msgid "Copy PowerShell execution policy command"
msgstr ""
#: website/public/get-started/index.html:272
msgctxt "page:get-started/index.html"
msgid "Copy Homebrew Node.js installation command"
msgstr ""
#: website/public/get-started/index.html:287
msgctxt "page:get-started/index.html"
msgid "Copy fnm installation command for macOS"
msgstr ""
#: website/public/get-started/index.html:302
msgctxt "page:get-started/index.html"
msgid "Copy Node.js 24 commands for macOS"
msgstr ""
#: website/public/get-started/index.html:318
msgctxt "page:get-started/index.html"
msgid "Copy fnm installation command for Linux"
msgstr ""
#: website/public/get-started/index.html:337
msgctxt "page:get-started/index.html"
msgid "Copy Node.js 24 commands for Linux"
msgstr ""
#: website/public/get-started/index.html:360
msgctxt "page:get-started/index.html"
msgid "On this page"
msgstr ""
#: website/public/get-started/index.html:369
msgctxt "page:get-started/index.html"
msgid "REA getting started guide"
msgstr ""
#: website/public/get-started/index.html:423
msgctxt "page:get-started/index.html"
msgid "Copy REA installation prompt"
msgstr ""
#: website/public/get-started/index.html:469
msgctxt "page:get-started/index.html"
msgid "Copy agent setup command"
msgstr ""
#: website/public/get-started/index.html:545
msgctxt "page:get-started/index.html"
msgid "Copy JavaScript analysis command"
msgstr ""
#: website/public/get-started/index.html:604
msgctxt "page:get-started/index.html"
msgid "Copy CLI installation command"
msgstr ""
#: website/public/get-started/index.html:645
msgctxt "page:get-started/index.html"
msgid "Copy Ghidra connection for macOS and Linux"
msgstr ""
#: website/public/get-started/index.html:677
msgctxt "page:get-started/index.html"
msgid "Copy Ghidra connection for Windows PowerShell"
msgstr ""
#: website/public/get-started/index.html:734
msgctxt "page:get-started/index.html"
msgid "Copy IDA connection for Windows PowerShell"
msgstr ""
#: website/public/get-started/index.html:775
msgctxt "page:get-started/index.html"
msgid "Copy native function analysis command"
msgstr ""
#: website/public/get-started/index.html:815
msgctxt "page:get-started/index.html"
msgid "Copy client diagnosis command"
msgstr ""
#: website/public/get-started/index.html:831
msgctxt "page:get-started/index.html"
msgid "Copy provider diagnosis command"
msgstr ""
#: website/public/get-started/index.html:882
msgctxt "page:get-started/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/browser/index.html:103
msgctxt "page:guides/browser/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/guides/browser/index.html:194
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation"
msgstr ""
#. {ph0}: <br />
#: website/public/guides/browser/index.html:198
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "See what happens{ph0}when you click."
msgstr ""
#: website/public/guides/browser/index.html:199
msgctxt "page:guides/browser/index.html"
msgid ""
"Use a small browser app to connect an action, its network request and the JavaScript "
"that builds a download."
msgstr ""
#: website/public/guides/browser/index.html:206
msgctxt "page:guides/browser/index.html"
msgid "In this guide"
msgstr ""
#. {ph0}: <a href="#example">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:208
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}The example{ph1}"
msgstr ""
#. {ph0}: <a href="#prepare">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:209
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Open the browser{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:210
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#capture">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:211
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Capture from CLI{ph1}"
msgstr ""
#. {ph0}: <a href="#result">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:212
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Read the request and script{ph1}"
msgstr ""
#: website/public/guides/browser/index.html:217
msgctxt "page:guides/browser/index.html"
msgid "What happens when you click Export?"
msgstr ""
#. {ph0}: <a href="../../examples/notes-web/">
#. {ph1}: </a>
#. {ph2}: <strong>
#. {ph3}: </strong>
#. {ph4}: <code>notes.json</code>
#: website/public/guides/browser/index.html:218
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. Clicking it "
"loads {ph4}, formats the two notes as CSV, and starts a download."
msgstr ""
#: website/public/guides/browser/index.html:226
msgctxt "page:guides/browser/index.html"
msgid "From the click to the CSV download"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/guides/browser/index.html:228
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in your browser "
"while the capture is running.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/guides/browser/index.html:236
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, response "
"status and JSON structure from the selected page.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>fetch("./notes.json")</code>
#. {ph6}: <code>export.js</code>
#. {ph7}: </span >
#: website/public/guides/browser/index.html:244
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the observed "
"request to {ph5} in {ph6}.{ph7}"
msgstr ""
#: website/public/guides/browser/index.html:257
msgctxt "page:guides/browser/index.html"
msgid "Start the capture before clicking Export notes."
msgstr ""
#: website/public/guides/browser/index.html:263
msgctxt "page:guides/browser/index.html"
msgid "Open Chrome with remote debugging"
msgstr ""
#: website/public/guides/browser/index.html:264
msgctxt "page:guides/browser/index.html"
msgid ""
"Open the hosted Notes example with a separate browser profile and a local debugging "
"port. On Linux:"
msgstr ""
#: website/public/guides/browser/index.html:270
msgctxt "page:guides/browser/index.html"
msgid "Start the example browser"
msgstr ""
#: website/public/guides/browser/index.html:271
#: website/public/guides/browser/index.html:303
#: website/public/guides/browser/index.html:337
#: website/public/guides/browser/index.html:356
#: website/public/guides/browser/index.html:421
msgctxt "page:guides/browser/index.html"
msgid "Copy"
msgstr ""
#: website/public/guides/browser/index.html:285
msgctxt "page:guides/browser/index.html"
msgid ""
"Use your installed browser's executable path on macOS or Windows. You can replace the "
"page URL with another page you want to inspect."
msgstr ""
#: website/public/guides/browser/index.html:290
msgctxt "page:guides/browser/index.html"
msgid ""
"REA connects to this existing browser. You keep control of the page, perform the "
"action, and close the browser when finished."
msgstr ""
#: website/public/guides/browser/index.html:296
msgctxt "page:guides/browser/index.html"
msgid "Ask your agent to watch one action"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/guides/browser/index.html:299
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="browser-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/guides/browser/index.html:312
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. What request "
"does it make, and how is the CSV built?{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <code>http://127.0.0.1:9222</code>
#: website/public/guides/browser/index.html:320
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page URL. Let "
"it start the capture before you click."
msgstr ""
#: website/public/guides/browser/index.html:325
msgctxt "page:guides/browser/index.html"
msgid ""
"Your agent discovers the page target, starts an observation window, and reads the "
"resulting evidence. It can then inspect the script behind the export."
msgstr ""
#: website/public/guides/browser/index.html:332
msgctxt "page:guides/browser/index.html"
msgid "Or capture from the terminal"
msgstr ""
#: website/public/guides/browser/index.html:333
msgctxt "page:guides/browser/index.html"
msgid "Find the page's target ID:"
msgstr ""
#: website/public/guides/browser/index.html:336
msgctxt "page:guides/browser/index.html"
msgid "Find the page"
msgstr ""
#. {ph0}: <code>TARGET_ID</code>
#: website/public/guides/browser/index.html:349
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Choose the target with the Notes example URL. Replace {ph0} below with its ID, then "
"run:"
msgstr ""
#: website/public/guides/browser/index.html:355
msgctxt "page:guides/browser/index.html"
msgid "Capture the next ten seconds"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/browser/index.html:371
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Let the command connect for a few seconds, then click {ph0}Export notes{ph1} in that "
"browser. The result arrives after the observation window ends."
msgstr ""
#: website/public/guides/browser/index.html:376
msgctxt "page:guides/browser/index.html"
msgid ""
"The captured result includes the selected page, network activity during that window, "
"and the shape of the JSON response. Earlier requests are outside this capture."
msgstr ""
#: website/public/guides/browser/index.html:383
msgctxt "page:guides/browser/index.html"
msgid "Read the request and export script"
msgstr ""
#: website/public/guides/browser/index.html:386
msgctxt "page:guides/browser/index.html"
msgid "Recorded with REA 4.1.0 on the local Notes example"
msgstr ""
#: website/public/guides/browser/index.html:391
msgctxt "page:guides/browser/index.html"
msgid "Captured fact"
msgstr ""
#: website/public/guides/browser/index.html:392
msgctxt "page:guides/browser/index.html"
msgid "Value"
msgstr ""
#: website/public/guides/browser/index.html:397
msgctxt "page:guides/browser/index.html"
msgid "Request"
msgstr ""
#: website/public/guides/browser/index.html:401
msgctxt "page:guides/browser/index.html"
msgid "Response"
msgstr ""
#: website/public/guides/browser/index.html:405
msgctxt "page:guides/browser/index.html"
msgid "Request initiator"
msgstr ""
#. {ph0}: <code>export.js</code>
#: website/public/guides/browser/index.html:406
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} · script"
msgstr ""
#: website/public/guides/browser/index.html:409
msgctxt "page:guides/browser/index.html"
msgid "Response structure"
msgstr ""
#. {ph0}: <code>notes[]</code>
#. {ph1}: <code>id</code>
#. {ph2}: <code>title</code>
#: website/public/guides/browser/index.html:410
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} with {ph1} and {ph2} fields"
msgstr ""
#: website/public/guides/browser/index.html:420
msgctxt "page:guides/browser/index.html"
msgid "Read the loaded scripts"
msgstr ""
#. {ph0}: <code>export.js</code>
#: website/public/guides/browser/index.html:434
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"The request identifies the data source, and REA records {ph0} as its initiator. Read "
"the captured script source to see how the data is used:"
msgstr ""
#. {ph0}: <span translate="no">export.js</span>
#: website/public/guides/browser/index.html:441
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0} · example source excerpt"
msgstr ""
#. {ph0}: <code>notes.json</code>
#: website/public/guides/browser/index.html:454
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"The download is constructed in the page using the JSON response. The CSV formatting "
"step comes from the script; the network capture establishes that this click requested "
"{ph0}."
msgstr ""
#. {ph0}: <a href="../../examples/notes-web/">
#. {ph1}: </a>
#. {ph2}: <a href="../../examples/notes-web/export.js" download >
#. {ph3}: <span translate="no">export.js</span>
#. {ph4}: </a >
#. {ph5}: <a href="../../examples/notes-web/notes.json" download >
#. {ph6}: <span translate="no">notes.json</span>
#. {ph7}: </a >
#: website/public/guides/browser/index.html:459
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid "{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download {ph6}{ph7}"
msgstr ""
#. {ph0}: <code>notes.json</code>
#: website/public/guides/browser/index.html:470
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"Find the script that requests {ph0}. How does it escape titles containing commas or "
"quotation marks?"
msgstr ""
#. {ph0}: <a href="../javascript/">
#. {ph1}: </a>
#: website/public/guides/browser/index.html:475
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"For an installed JavaScript or Electron app, continue with the {ph0}application "
"workflow{ph1} to follow files and process boundaries."
msgstr ""
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/web-network-
#. captures.md" >
#. {ph1}: </a >
#: website/public/guides/browser/index.html:480
#, python-brace-format
msgctxt "page:guides/browser/index.html"
msgid ""
"For HTTP request and response bodies, use {ph0}Fiddler Everywhere: SAZ captures, MCP "
"and public skills{ph1}. Export SAZ or HAR 1.2 for offline REA capture Evidence, or "
"connect Everywhere's MCP server to inspect captured traffic with your agent."
msgstr ""
#: website/public/guides/browser/index.html:6
msgctxt "page:guides/browser/index.html"
msgid "Browser and Network Analysis — REA"
msgstr ""
#: website/public/guides/browser/index.html:7
msgctxt "page:guides/browser/index.html"
msgid ""
"Observe a Notes export with REA: select a browser page, capture a click, inspect the "
"request and follow the export script."
msgstr ""
#: website/public/guides/browser/index.html:205
msgctxt "page:guides/browser/index.html"
msgid "On this page"
msgstr ""
#: website/public/guides/browser/index.html:215
msgctxt "page:guides/browser/index.html"
msgid "Browser observation"
msgstr ""
#: website/public/guides/browser/index.html:271
msgctxt "page:guides/browser/index.html"
msgid "Copy start the example browser"
msgstr ""
#: website/public/guides/browser/index.html:303
msgctxt "page:guides/browser/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/guides/browser/index.html:337
msgctxt "page:guides/browser/index.html"
msgid "Copy find the page"
msgstr ""
#: website/public/guides/browser/index.html:356
msgctxt "page:guides/browser/index.html"
msgid "Copy capture the next ten seconds"
msgstr ""
#: website/public/guides/browser/index.html:421
msgctxt "page:guides/browser/index.html"
msgid "Copy read the loaded scripts"
msgstr ""
#: website/public/guides/browser/index.html:507
msgctxt "page:guides/browser/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/index.html:103
msgctxt "page:guides/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/guides/index.html:194
#, python-brace-format
msgctxt "page:guides/index.html"
msgid "{ph0}Home{ph1} / Guides"
msgstr ""
#: website/public/guides/index.html:195
msgctxt "page:guides/index.html"
msgid "REA guides."
msgstr ""
#: website/public/guides/index.html:196
msgctxt "page:guides/index.html"
msgid ""
"Analyze a native function, an Electron export or a browser request. Each guide "
"includes a prompt, code and results."
msgstr ""
#: website/public/guides/index.html:203
msgctxt "page:guides/index.html"
msgid "First investigation"
msgstr ""
#: website/public/guides/index.html:205
msgctxt "page:guides/index.html"
msgid "Set up REA"
msgstr ""
#: website/public/guides/index.html:206
msgctxt "page:guides/index.html"
msgid "Connect your coding agent or use REA from the terminal."
msgstr ""
#: website/public/guides/index.html:207
msgctxt "page:guides/index.html"
msgid "Get started with REA"
msgstr ""
#: website/public/guides/index.html:211
msgctxt "page:guides/index.html"
msgid "Native binaries"
msgstr ""
#: website/public/guides/index.html:213
msgctxt "page:guides/index.html"
msgid "Recover a sound-pan calculation"
msgstr ""
#: website/public/guides/index.html:214
msgctxt "page:guides/index.html"
msgid ""
"Start with a Windows game executable. Inspect instructions, follow a caller, read "
"numeric constants and check the recovered C."
msgstr ""
#: website/public/guides/index.html:219
msgctxt "page:guides/index.html"
msgid "Instructions"
msgstr ""
#: website/public/guides/index.html:220
msgctxt "page:guides/index.html"
msgid "Caller"
msgstr ""
#: website/public/guides/index.html:221
msgctxt "page:guides/index.html"
msgid "Constants"
msgstr ""
#: website/public/guides/index.html:222
msgctxt "page:guides/index.html"
msgid "C function"
msgstr ""
#: website/public/guides/index.html:224
msgctxt "page:guides/index.html"
msgid "Native analysis guide"
msgstr ""
#: website/public/guides/index.html:228
msgctxt "page:guides/index.html"
msgid "JavaScript & Electron"
msgstr ""
#: website/public/guides/index.html:230
msgctxt "page:guides/index.html"
msgid "Follow a CSV export"
msgstr ""
#: website/public/guides/index.html:231
msgctxt "page:guides/index.html"
msgid ""
"A small Notes app spreads one feature across the renderer, preload and main process. "
"Use REA to connect the API, IPC channel and file writer."
msgstr ""
#: website/public/guides/index.html:237
msgctxt "page:guides/index.html"
msgid "Button"
msgstr ""
#: website/public/guides/index.html:238
msgctxt "page:guides/index.html"
msgid "Preload API"
msgstr ""
#: website/public/guides/index.html:239
msgctxt "page:guides/index.html"
msgid "IPC"
msgstr ""
#: website/public/guides/index.html:239
msgctxt "page:guides/index.html"
msgid "CSV file"
msgstr ""
#: website/public/guides/index.html:241
msgctxt "page:guides/index.html"
msgid "JavaScript & Electron guide"
msgstr ""
#. {ph0}: <a href="../showcase/notion/">
#. {ph1}: </a>
#: website/public/guides/index.html:244
#, python-brace-format
msgctxt "page:guides/index.html"
msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}."
msgstr ""
#: website/public/guides/index.html:251
msgctxt "page:guides/index.html"
msgid "Browser behavior"
msgstr ""
#: website/public/guides/index.html:253
msgctxt "page:guides/index.html"
msgid "Observe a click"
msgstr ""
#: website/public/guides/index.html:254
msgctxt "page:guides/index.html"
msgid ""
"Open a working Notes example, capture an export request and find the code that turns "
"its response into a download."
msgstr ""
#: website/public/guides/index.html:259
msgctxt "page:guides/index.html"
msgid "Your click"
msgstr ""
#: website/public/guides/index.html:260
msgctxt "page:guides/index.html"
msgid "Captured request"
msgstr ""
#: website/public/guides/index.html:261
msgctxt "page:guides/index.html"
msgid "Export script"
msgstr ""
#: website/public/guides/index.html:263
msgctxt "page:guides/index.html"
msgid "Browser observation guide"
msgstr ""
#: website/public/guides/index.html:6
msgctxt "page:guides/index.html"
msgid "Reverse Engineering Guides — REA"
msgstr ""
#: website/public/guides/index.html:7
msgctxt "page:guides/index.html"
msgid ""
"Learn REA through short worked examples: a native calculation, an Electron CSV export "
"and a browser request."
msgstr ""
#: website/public/guides/index.html:282
msgctxt "page:guides/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/javascript/index.html:103
msgctxt "page:guides/javascript/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/guides/javascript/index.html:194
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron"
msgstr ""
#. {ph0}: <br />
#: website/public/guides/javascript/index.html:198
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "Trace an Electron{ph0}CSV export."
msgstr ""
#: website/public/guides/javascript/index.html:199
msgctxt "page:guides/javascript/index.html"
msgid ""
"Follow a button click from the page API, through Electron IPC, to the CSV file writer."
msgstr ""
#: website/public/guides/javascript/index.html:206
msgctxt "page:guides/javascript/index.html"
msgid "In this guide"
msgstr ""
#. {ph0}: <a href="#example">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:208
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}The example{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:209
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#follow">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:210
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Trace the export code{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:211
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Try the example{ph1}"
msgstr ""
#. {ph0}: <a href="#next">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:212
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Inspect the CSV writer{ph1}"
msgstr ""
#: website/public/guides/javascript/index.html:217
msgctxt "page:guides/javascript/index.html"
msgid "Where does “Export notes” go?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/javascript/index.html:218
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls an API in "
"the page, crosses into the main process, and writes a CSV. The behavior is spread "
"across several files."
msgstr ""
#: website/public/guides/javascript/index.html:225
msgctxt "page:guides/javascript/index.html"
msgid "The CSV export across Electron processes"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>notes.exportCsv()</code>
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: <code>renderer.js</code>
#. {ph7}: <code>preload.js</code>
#. {ph8}: </span >
#: website/public/guides/javascript/index.html:229
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed by "
"{ph7}.{ph8}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>notes:export</code>
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/guides/javascript/index.html:237
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC channel: a "
"named message to the main process.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>main.js</code>
#. {ph6}: </span >
#: website/public/guides/javascript/index.html:245
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that channel and "
"calls the CSV writer.{ph6}"
msgstr ""
#. {ph0}: <code>csv.js</code>
#. {ph1}: <code>main.js</code>
#. {ph2}: <code>downloads/notes.csv</code>
#: website/public/guides/javascript/index.html:254
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0} formats the notes → {ph1} writes {ph2}."
msgstr ""
#: website/public/guides/javascript/index.html:258
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA matches the literal IPC call to its handler and identifies the exposed API. The "
"path is inferred from code; a runtime capture can check what executes."
msgstr ""
#: website/public/guides/javascript/index.html:266
msgctxt "page:guides/javascript/index.html"
msgid "Ask about the CSV export"
msgstr ""
#. {ph0}: <a href="../../get-started/#agent">
#. {ph1}: </a>
#: website/public/guides/javascript/index.html:267
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR file:"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/guides/javascript/index.html:273
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/guides/javascript/index.html:277
#: website/public/guides/javascript/index.html:426
msgctxt "page:guides/javascript/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="javascript-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/guides/javascript/index.html:286
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this app. Where is"
" the CSV created?{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <code>app.asar</code>
#: website/public/guides/javascript/index.html:294
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "Example prompt. Include the absolute path to the application folder or {ph0}."
msgstr ""
#: website/public/guides/javascript/index.html:298
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA reads the application files and builds a map of entrypoints, modules and process "
"boundaries. Your agent uses that map to narrow the investigation to the export "
"feature."
msgstr ""
#: website/public/guides/javascript/index.html:305
msgctxt "page:guides/javascript/index.html"
msgid "Trace the export code"
msgstr ""
#: website/public/guides/javascript/index.html:306
msgctxt "page:guides/javascript/index.html"
msgid "The page calls a small API"
msgstr ""
#. {ph0}: <span translate="no">renderer.js</span>
#: website/public/guides/javascript/index.html:309
#: website/public/guides/javascript/index.html:325
#: website/public/guides/javascript/index.html:340
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0} · example source"
msgstr ""
#: website/public/guides/javascript/index.html:319
msgctxt "page:guides/javascript/index.html"
msgid ""
"The page knows the method name. The implementation lives in the preload, which exposes"
" it to the renderer."
msgstr ""
#. {ph0}: <code>notes.exportCsv</code>
#. {ph1}: <code>notes:export</code>
#: website/public/guides/javascript/index.html:333
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"REA records {ph0} and the literal channel {ph1}. It pairs that invocation with the "
"single matching handler in the main process."
msgstr ""
#. {ph0}: <code>csv.js</code>
#. {ph1}: <code>notes.csv</code>
#: website/public/guides/javascript/index.html:350
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Reading the handler answers the original question: {ph0} formats the notes, and the "
"main process writes {ph1} into the user's Downloads folder."
msgstr ""
#: website/public/guides/javascript/index.html:357
msgctxt "page:guides/javascript/index.html"
msgid "REA result · summary.ipc excerpt"
msgstr ""
#: website/public/guides/javascript/index.html:367
msgctxt "page:guides/javascript/index.html"
msgid ""
"Recorded by REA 4.1.0 on the downloadable example below. Source locations accompany "
"the API, channel and handler findings."
msgstr ""
#: website/public/guides/javascript/index.html:373
msgctxt "page:guides/javascript/index.html"
msgid "Analyze the example yourself"
msgstr ""
#. {ph0}: <code>notes-example</code>
#. {ph1}: <span translate="no">Node.js</span>
#: website/public/guides/javascript/index.html:374
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Download the example and unzip it. The archive contains the complete {ph0} folder. "
"Analyze it with {ph1} and npm; Electron is not needed for this example."
msgstr ""
#. {ph0}: <a class="button" href="../../examples/notes-example.zip" download="notes-
#. example.zip" >
#. {ph1}: </a >
#: website/public/guides/javascript/index.html:380
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid "{ph0}Download example ZIP{ph1}"
msgstr ""
#: website/public/guides/javascript/index.html:389
msgctxt "page:guides/javascript/index.html"
msgid "Browse the six source files"
msgstr ""
#: website/public/guides/javascript/index.html:425
msgctxt "page:guides/javascript/index.html"
msgid "Static application analysis"
msgstr ""
#. {ph0}: <code>normalized_result.summary.ipc</code>
#. {ph1}: <code>normalized_result.graph</code>
#: website/public/guides/javascript/index.html:438
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Replace the path with the folder you unzipped. You should find one IPC channel and one"
" matching handler in {ph0}. Source locations are in {ph1}."
msgstr ""
#: website/public/guides/javascript/index.html:444
msgctxt "page:guides/javascript/index.html"
msgid ""
"For your own app, use the same command with its directory or ASAR path. An agent can "
"follow a literal string, API name or IPC channel with REA's feature tracing tools."
msgstr ""
#: website/public/guides/javascript/index.html:451
msgctxt "page:guides/javascript/index.html"
msgid "Inspect the CSV writer"
msgstr ""
#. {ph0}: <code>notes:export</code>
#: website/public/guides/javascript/index.html:453
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what happens if "
"writing the file fails?"
msgstr ""
#: website/public/guides/javascript/index.html:459
msgctxt "page:guides/javascript/index.html"
msgid ""
"Use the source locations to inspect those details. Computed channel names and "
"ambiguous handlers can remain unresolved; runtime observations give you another way to"
" investigate them."
msgstr ""
#. {ph0}: <a href="../../showcase/notion/" >
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/guides/javascript/index.html:465
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a packaged "
"Electron app.{ph3}"
msgstr ""
#. {ph0}: <a href="../browser/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/guides/javascript/index.html:471
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which request it "
"makes.{ph3}"
msgstr ""
#. {ph0}: <a href="../native/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/guides/javascript/index.html:477
#, python-brace-format
msgctxt "page:guides/javascript/index.html"
msgid ""
"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature depends "
"on native code.{ph3}"
msgstr ""
#: website/public/guides/javascript/index.html:6
msgctxt "page:guides/javascript/index.html"
msgid "JavaScript and Electron Analysis — REA"
msgstr ""
#: website/public/guides/javascript/index.html:7
msgctxt "page:guides/javascript/index.html"
msgid ""
"Trace a Notes CSV export through a renderer API, preload and IPC handler with REA. "
"Includes downloadable example files and a verified analysis result."
msgstr ""
#: website/public/guides/javascript/index.html:205
msgctxt "page:guides/javascript/index.html"
msgid "On this page"
msgstr ""
#: website/public/guides/javascript/index.html:215
msgctxt "page:guides/javascript/index.html"
msgid "JavaScript & Electron"
msgstr ""
#: website/public/guides/javascript/index.html:277
msgctxt "page:guides/javascript/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/guides/javascript/index.html:426
msgctxt "page:guides/javascript/index.html"
msgid "Copy static application analysis"
msgstr ""
#: website/public/guides/javascript/index.html:503
msgctxt "page:guides/javascript/index.html"
msgid "Back to top"
msgstr ""
#: website/public/guides/native/index.html:103
msgctxt "page:guides/native/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/guides/native/index.html:194
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis"
msgstr ""
#. {ph0}: <br />
#: website/public/guides/native/index.html:197
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "Recover DX-Ball's{ph0}sound-pan calculation."
msgstr ""
#: website/public/guides/native/index.html:198
msgctxt "page:guides/native/index.html"
msgid ""
"Inspect the original instructions, identify the input and constants, then check the "
"recovered C."
msgstr ""
#: website/public/guides/native/index.html:205
msgctxt "page:guides/native/index.html"
msgid "In this guide"
msgstr ""
#. {ph0}: <a href="#example">
#. {ph1}: </a>
#: website/public/guides/native/index.html:207
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}The example{ph1}"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/guides/native/index.html:208
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#follow">
#. {ph1}: </a>
#: website/public/guides/native/index.html:209
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Read the REA results{ph1}"
msgstr ""
#. {ph0}: <a href="#result">
#. {ph1}: </a>
#: website/public/guides/native/index.html:210
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Recover and check{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/guides/native/index.html:211
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Use your own binary{ph1}"
msgstr ""
#: website/public/guides/native/index.html:216
msgctxt "page:guides/native/index.html"
msgid "Calculate left/right sound panning"
msgstr ""
#: website/public/guides/native/index.html:217
msgctxt "page:guides/native/index.html"
msgid ""
"In DX-Ball, a brick hit supplies a horizontal screen position. The sound code turns it"
" into a left/right panning value."
msgstr ""
#. {ph0}: <code>0x00406400</code>
#. {ph1}: <code>__ftol()</code>
#: website/public/guides/native/index.html:221
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"The starting function, {ph0}, has a short decompiler result: a call to {ph1}. REA also"
" returns its instructions and callers, which give the agent a way to investigate the "
"missing arithmetic."
msgstr ""
#: website/public/guides/native/index.html:228
msgctxt "page:guides/native/index.html"
msgid "New to these terms?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>MOV</code>
#. {ph3}: <code>ADD</code>
#: website/public/guides/native/index.html:230
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form such as "
"{ph2} or {ph3}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:235
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn "
"instructions back into C-like code. It can miss parts, as in this example."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:240
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Caller:{ph1} a function that calls this one. It shows which values are passed in."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>0x00406400</code>
#: website/public/guides/native/index.html:244
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such as {ph2}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:248
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes and "
"decoded."
msgstr ""
#: website/public/guides/native/index.html:255
msgctxt "page:guides/native/index.html"
msgid "Three pieces of evidence, one calculation"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/guides/native/index.html:259
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read supplies the "
"value used by the floating-point instructions.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>20 + 30 × tile_x</code>
#. {ph6}: </span >
#: website/public/guides/native/index.html:267
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller passes "
"{ph5}.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>1.5625</code>
#. {ph6}: <code>500.0</code>
#. {ph7}: </span >
#: website/public/guides/native/index.html:275
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced bytes decode "
"to {ph5}, {ph6} and a scale value.{ph7}"
msgstr ""
#: website/public/guides/native/index.html:287
msgctxt "page:guides/native/index.html"
msgid ""
"REA supplies the instructions, call relationship and bytes. The agent interprets them "
"together."
msgstr ""
#: website/public/guides/native/index.html:294
msgctxt "page:guides/native/index.html"
msgid "Ask about the behavior"
msgstr ""
#. {ph0}: <a href="../../get-started/#agent" >
#. {ph1}: </a >
#. {ph2}: <a href="../../get-started/#native" >
#. {ph3}: </a >
#: website/public/guides/native/index.html:295
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native analysis "
"tool{ph3}, provide the local executable and a question:"
msgstr ""
#: website/public/guides/native/index.html:306
msgctxt "page:guides/native/index.html"
msgid "Which analysis tool should I use?"
msgstr ""
#: website/public/guides/native/index.html:307
msgctxt "page:guides/native/index.html"
msgid "REA needs one of these to read native programs:"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:309
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to install it. On "
"macOS, open Hopper once and choose demo mode or activate a license before your first "
"analysis."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:315
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs an "
"existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:320
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration."
msgstr ""
#. {ph0}: <a href="../../get-started/#native">
#. {ph1}: </a>
#: website/public/guides/native/index.html:325
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "See {ph0}Set up native analysis{ph1} for the steps."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/guides/native/index.html:333
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/guides/native/index.html:337
#: website/public/guides/native/index.html:468
msgctxt "page:guides/native/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="native-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/guides/native/index.html:346
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the "
"calculation and show the code.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/guides/native/index.html:354
msgctxt "page:guides/native/index.html"
msgid ""
"Example prompt. Give your agent the path to your local DX-Ball 1.07 executable. REA "
"doesn't include DX-Ball, so use your own copy, or ask the same kind of question about "
"another small Windows program you have."
msgstr ""
#: website/public/guides/native/index.html:361
msgctxt "page:guides/native/index.html"
msgid "How do I get a file's full path?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/guides/native/index.html:363
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose {ph2}Copy as "
"path{ph3}. On Windows 10, hold Shift while right-clicking."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <em>
#. {ph3}: </em>
#: website/public/guides/native/index.html:368
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose {ph2}Copy "
"\"…\" as Pathname{ph3}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/guides/native/index.html:372
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}Any system:{ph1} drag the file into a terminal window and its path appears."
msgstr ""
#: website/public/guides/native/index.html:380
msgctxt "page:guides/native/index.html"
msgid "Read the REA results"
msgstr ""
#: website/public/guides/native/index.html:381
msgctxt "page:guides/native/index.html"
msgid "Read the input"
msgstr ""
#: website/public/guides/native/index.html:384
msgctxt "page:guides/native/index.html"
msgid "REA instruction excerpt · 0x406409"
msgstr ""
#: website/public/guides/native/index.html:390
msgctxt "page:guides/native/index.html"
msgid ""
"The instructions load an integer argument and convert it for floating-point "
"arithmetic. This is the input absent from the first pseudocode view."
msgstr ""
#: website/public/guides/native/index.html:395
msgctxt "page:guides/native/index.html"
msgid "Follow the caller"
msgstr ""
#: website/public/guides/native/index.html:398
msgctxt "page:guides/native/index.html"
msgid "REA caller excerpt · 0x411f5b"
msgstr ""
#. {ph0}: <code>0x14</code>
#: website/public/guides/native/index.html:404
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"REA identifies the brick-hit caller. Its earlier instructions multiply the tile "
"coordinate by 30; adding {ph0} (20) gives the brick's screen position."
msgstr ""
#: website/public/guides/native/index.html:409
msgctxt "page:guides/native/index.html"
msgid "Read the referenced constants"
msgstr ""
#: website/public/guides/native/index.html:412
msgctxt "page:guides/native/index.html"
msgid "REA byte results · interpreted as little-endian doubles"
msgstr ""
#: website/public/guides/native/index.html:420
msgctxt "page:guides/native/index.html"
msgid ""
"The arithmetic references these addresses. Reading the bytes supplies the actual "
"values; the instruction order tells the agent how they are used."
msgstr ""
#: website/public/guides/native/index.html:427
msgctxt "page:guides/native/index.html"
msgid "Write and check the recovered function"
msgstr ""
#: website/public/guides/native/index.html:429
msgctxt "page:guides/native/index.html"
msgid "Recovered C · excerpt"
msgstr ""
#: website/public/guides/native/index.html:436
msgctxt "page:guides/native/index.html"
msgid ""
"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 before "
"integer conversion. The calculation puts the center of the screen at the center of the"
" stereo field."
msgstr ""
#: website/public/guides/native/index.html:441
msgctxt "page:guides/native/index.html"
msgid ""
"The agent used REA's findings to write the C. Separate checks compared 3,205 inputs "
"against the original x86 function and reproduced all 63 compiled bytes of the complete"
" function."
msgstr ""
#. {ph0}: <a href="../../showcase/dx-ball/#sound-pan" >
#. {ph1}: </a >
#: website/public/guides/native/index.html:446
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}"
msgstr ""
#: website/public/guides/native/index.html:453
msgctxt "page:guides/native/index.html"
msgid "Try it with your own binary"
msgstr ""
#. {ph0}: <a href="../../get-started/#native" >
#. {ph1}: </a >
#: website/public/guides/native/index.html:454
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"{ph0}Connect a native analysis provider{ph1}, then give your agent a local executable "
"or library and a feature to investigate. Useful starting questions include “How is "
"this file parsed?” or “Which function handles this menu action?”"
msgstr ""
#: website/public/guides/native/index.html:461
msgctxt "page:guides/native/index.html"
msgid ""
"If you already know a function name or address, you can query it from the terminal. "
"For a configured Ghidra installation:"
msgstr ""
#: website/public/guides/native/index.html:467
msgctxt "page:guides/native/index.html"
msgid "Function analysis"
msgstr ""
#. {ph0}: <code>main</code>
#: website/public/guides/native/index.html:480
#, python-brace-format
msgctxt "page:guides/native/index.html"
msgid ""
"Replace the target path and {ph0} with your own function name or address. Each CLI "
"invocation imports and analyzes the binary, then closes its session. Your agent's MCP "
"queries reuse the imported binary while that session is open."
msgstr ""
#: website/public/guides/native/index.html:486
msgctxt "page:guides/native/index.html"
msgid ""
"Read the pseudocode alongside instructions and references. When a result leaves a call"
" or value unresolved, use that location as the next question."
msgstr ""
#: website/public/guides/native/index.html:6
msgctxt "page:guides/native/index.html"
msgid "Native Binary Analysis — REA"
msgstr ""
#: website/public/guides/native/index.html:7
msgctxt "page:guides/native/index.html"
msgid ""
"Recover a native calculation with REA: inspect instructions, follow a caller, read "
"constants and check reconstructed C."
msgstr ""
#: website/public/guides/native/index.html:204
msgctxt "page:guides/native/index.html"
msgid "On this page"
msgstr ""
#: website/public/guides/native/index.html:214
msgctxt "page:guides/native/index.html"
msgid "Native analysis"
msgstr ""
#: website/public/guides/native/index.html:337
msgctxt "page:guides/native/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/guides/native/index.html:468
msgctxt "page:guides/native/index.html"
msgid "Copy function analysis"
msgstr ""
#: website/public/guides/native/index.html:509
msgctxt "page:guides/native/index.html"
msgid "Back to top"
msgstr ""
#: website/public/index.html:105
msgctxt "page:index.html"
msgid "Skip to content"
msgstr ""
#: website/public/index.html:196 website/public/index.html:206
#: website/public/index.html:204
msgctxt "page:index.html"
msgid "On this page"
msgstr ""
#: website/public/index.html:197 website/public/index.html:251
msgctxt "page:index.html"
msgid "Set up REA"
msgstr ""
#. {ph0}: <a href="#setup" aria-current="location">
#. {ph1}: </a>
#: website/public/index.html:208
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Set up REA{ph1}"
msgstr ""
#. {ph0}: <a href="#what-is-re">
#. {ph1}: </a>
#: website/public/index.html:209
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}What is RE?{ph1}"
msgstr ""
#. {ph0}: <a href="#how-rea-helps">
#. {ph1}: </a>
#: website/public/index.html:210
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}How REA helps{ph1}"
msgstr ""
#. {ph0}: <a href="#dinosaur">
#. {ph1}: </a>
#: website/public/index.html:211
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Dinosaur game{ph1}"
msgstr ""
#. {ph0}: <a href="#calculator">
#. {ph1}: </a>
#: website/public/index.html:212
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Calculator{ph1}"
msgstr ""
#. {ph0}: <a href="#try-rea">
#. {ph1}: </a>
#: website/public/index.html:213
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Try REA{ph1}"
msgstr ""
#. {ph0}: <a href="#analyze">
#. {ph1}: </a>
#: website/public/index.html:214
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Go deeper{ph1}"
msgstr ""
#. {ph0}: <a href="#questions">
#. {ph1}: </a>
#: website/public/index.html:215
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Help & feedback{ph1}"
msgstr ""
#. {ph0}: <a href="#community">
#. {ph1}: </a>
#: website/public/index.html:216
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Community{ph1}"
msgstr ""
#: website/public/index.html:225
msgctxt "page:index.html"
msgid "Reverse engineering, with your coding agent"
msgstr ""
#. {ph0}: <br />
#: website/public/index.html:226
#, python-brace-format
msgctxt "page:index.html"
msgid "Find out how{ph0}software works."
msgstr ""
#: website/public/index.html:227
msgctxt "page:index.html"
msgid "REA gives your agent the tools to inspect a program and explain what it does."
msgstr ""
#: website/public/index.html:232
msgctxt "page:index.html"
msgid "See how REA works ↓"
msgstr ""
#. {ph0}: <span class="button-arrow" aria-hidden="true" data-i18n-skip >→</span >
#: website/public/index.html:233
#, python-brace-format
msgctxt "page:index.html"
msgid "Get started {ph0}"
msgstr ""
#: website/public/index.html:239
msgctxt "page:index.html"
msgid "Showcases →"
msgstr ""
#. {ph0}: <a href="#analysis-guides">
#. {ph1}: </a>
#: website/public/index.html:241
#, python-brace-format
msgctxt "page:index.html"
msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}"
msgstr ""
#. {ph0}: <a href="blog/">
#. {ph1}: </a>
#: website/public/index.html:245
#, python-brace-format
msgctxt "page:index.html"
msgid "Want to go deeper? {ph0}Read the Blog →{ph1}"
msgstr ""
#: website/public/index.html:252
msgctxt "page:index.html"
msgid "Copy this into your coding agent:"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:255
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/index.html:260 website/public/index.html:282
#: website/public/index.html:497 website/public/index.html:665
#: website/public/index.html:901 website/public/index.html:1063
#: website/public/index.html:1091
msgctxt "page:index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="home-install-prompt" >
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/index.html:269
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/index.html:279
msgctxt "page:index.html"
msgid "Or run this in your terminal:"
msgstr ""
#: website/public/index.html:291
msgctxt "page:index.html"
msgid "Approve the setup plan, then restart your agent."
msgstr ""
#. {ph0}: <span translate="no">Node.js</span>
#. {ph1}: <a href="get-started/">
#. {ph2}: </a>
#: website/public/index.html:294
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step setup "
"guide →{ph2}"
msgstr ""
#: website/public/index.html:306
msgctxt "page:index.html"
msgid "What is reverse engineering?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:307
#, python-brace-format
msgctxt "page:index.html"
msgid "Finding out how software works by {ph0}examining the program itself.{ph1}"
msgstr ""
#. {ph0}: <mark class="prose-highlight">
#. {ph1}: </mark>
#. {ph2}: <mark class="prose-highlight">
#. {ph3}: </mark>
#. {ph4}: <mark class="prose-highlight">
#. {ph5}: </mark>
#: website/public/index.html:312
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"The goal: understand a feature well enough to {ph0}explain it{ph1}, {ph2}change "
"it{ph3} or {ph4}rebuild it.{ph5}"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: <span translate="no">200 + 10%</span>
#. {ph2}: </strong >
#: website/public/index.html:318
#, python-brace-format
msgctxt "page:index.html"
msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}"
msgstr ""
#. {ph0}: <strong class="prose-highlight">
#. {ph1}: </strong>
#: website/public/index.html:330
#, python-brace-format
msgctxt "page:index.html"
msgid "Before REA · You investigate it {ph0}yourself{ph1}"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/index.html:339
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}01{ph1} Decode branches"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/index.html:347
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}02{ph1} Trace calls"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/index.html:355
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}03{ph1} Recover the rule"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#. {ph2}: <span class="assembly-disclosure" aria-hidden="true">
#. {ph3}: </span>
#: website/public/index.html:370
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}"
msgstr ""
#: website/public/index.html:409
msgctxt "page:index.html"
msgid "01 · Which branch?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:410
#, python-brace-format
msgctxt "page:index.html"
msgid "“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are these?”"
msgstr ""
#: website/public/index.html:414
msgctxt "page:index.html"
msgid "Look up the command IDs, then label the branch."
msgstr ""
#: website/public/index.html:420
msgctxt "page:index.html"
msgid "Divide ÷"
msgstr ""
#: website/public/index.html:424
msgctxt "page:index.html"
msgid "Multiply ×"
msgstr ""
#: website/public/index.html:429
msgctxt "page:index.html"
msgid "02 · What do the calls do?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong >
#: website/public/index.html:430
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which value goes "
"in?{ph1}”"
msgstr ""
#: website/public/index.html:435
msgctxt "page:index.html"
msgid "Inspect the helpers and trace the stored values."
msgstr ""
#: website/public/index.html:445
msgctxt "page:index.html"
msgid "Divide"
msgstr ""
#: website/public/index.html:450
msgctxt "page:index.html"
msgid "03 · What is the rule?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:451
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} after +.”"
msgstr ""
#: website/public/index.html:455
msgctxt "page:index.html"
msgid "Name the operands and check both operator paths."
msgstr ""
#: website/public/index.html:471 website/public/index.html:399
msgctxt "page:index.html"
msgid "Illustrative expert reasoning"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/index.html:474
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}You decode the instructions, follow the calls and reconstruct the "
"calculation.{ph1}"
msgstr ""
#. {ph0}: <strong class="prose-highlight">
#. {ph1}: </strong>
#: website/public/index.html:482
#, python-brace-format
msgctxt "page:index.html"
msgid "With REA · You ask {ph0}your agent{ph1}"
msgstr ""
#: website/public/index.html:486
msgctxt "page:index.html"
msgid "One prompt."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:487
#, python-brace-format
msgctxt "page:index.html"
msgid "Ask your agent {ph0}in plain English.{ph1}"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:492
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="home-analysis-prompt" >
#. {ph3}: <span translate="no">200 + 10%</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/index.html:506
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give "
"220?{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/index.html:514
msgctxt "page:index.html"
msgid "Example answer · based on the findings"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:517
#, python-brace-format
msgctxt "page:index.html"
msgid "After +, the % button takes {ph0}a percentage of the first number.{ph1}"
msgstr ""
#: website/public/index.html:529
msgctxt "page:index.html"
msgid "REA supplies"
msgstr ""
#: website/public/index.html:530
msgctxt "page:index.html"
msgid "The handler’s instructions, decompiled code and calls."
msgstr ""
#: website/public/index.html:535
msgctxt "page:index.html"
msgid "Your agent explains"
msgstr ""
#: website/public/index.html:536
msgctxt "page:index.html"
msgid "Which branch applies, what it calculates and how to rebuild it."
msgstr ""
#. {ph0}: <a href="#calculator">
#. {ph1}: </a>
#: website/public/index.html:543
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"Selected assembly from the installed Calculator DLL. The thoughts and reply illustrate"
" the findings. {ph0}Continue with the Calculator example ↓{ph1}"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:554
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to Calculator and"
" rebuild its % button."
msgstr ""
#: website/public/index.html:560
msgctxt "page:index.html"
msgid "Example 01 · Chrome’s dinosaur game"
msgstr ""
#: website/public/index.html:561
msgctxt "page:index.html"
msgid "Why does the dinosaur get faster?"
msgstr ""
#: website/public/index.html:565 website/public/index.html:803
msgctxt "page:index.html"
msgid "Goal"
msgstr ""
#. {ph0}: <mark class="prose-highlight">
#. {ph1}: </mark>
#: website/public/index.html:566
#, python-brace-format
msgctxt "page:index.html"
msgid "Rebuild the game with {ph0}adjustable speed.{ph1}"
msgstr ""
#: website/public/index.html:572 website/public/index.html:810
msgctxt "page:index.html"
msgid "Why reverse engineer it?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:573
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"To reproduce its acceleration, we need {ph0}the rule in the running game{ph1}: how "
"fast it starts, how much it increases and when it stops."
msgstr ""
#: website/public/index.html:582
msgctxt "page:index.html"
msgid "Play the reconstruction"
msgstr ""
#: website/public/index.html:614
msgctxt "page:index.html"
msgid "Play"
msgstr ""
#: website/public/index.html:617
msgctxt "page:index.html"
msgid "Jump ↑"
msgstr ""
#: website/public/index.html:618
msgctxt "page:index.html"
msgid "Restart"
msgstr ""
#: website/public/index.html:621
msgctxt "page:index.html"
msgid "Speed"
msgstr ""
#: website/public/index.html:631
msgctxt "page:index.html"
msgid "Use the recovered acceleration rule"
msgstr ""
#: website/public/index.html:635
msgctxt "page:index.html"
msgid "Original rule: start at 6, then increase toward 13."
msgstr ""
#: website/public/index.html:638
msgctxt "page:index.html"
msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
msgstr ""
#: website/public/index.html:643
msgctxt "page:index.html"
msgid ""
"Enable JavaScript to play the reconstruction. The code and explanation above remain "
"readable."
msgstr ""
#: website/public/index.html:651 website/public/index.html:881
msgctxt "page:index.html"
msgid "REA returned"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:652
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}The script actually running in the page.{ph1} The agent reads its update function"
" and speed settings, then uses that rule in a new game."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:660
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="dino-analysis-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/index.html:674
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect this dinosaur game. Why does it get faster? Show "
"the speed rule, then build a small version with an adjustable speed.{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <a href="https://wayou.github.io/t-rex-runner/" >
#. {ph1}: </a >
#: website/public/index.html:683
#, python-brace-format
msgctxt "page:index.html"
msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}."
msgstr ""
#. {ph0}: <span translate="no">index.js</span>
#: website/public/index.html:691
#, python-brace-format
msgctxt "page:index.html"
msgid "REA · loaded {ph0} · selected lines"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <strong>
#. {ph3}: </strong>
#. {ph4}: <strong>
#. {ph5}: </strong>
#: website/public/index.html:700
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, while speed"
" is below {ph4}13{ph5}."
msgstr ""
#: website/public/index.html:705
msgctxt "page:index.html"
msgid "Open the speed lab →"
msgstr ""
#: website/public/index.html:711
msgctxt "page:index.html"
msgid "What each part does"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:713
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its actual code "
"and settings to the agent.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:720
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use the "
"recovered acceleration in a small game with a speed slider.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:728
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original "
"acceleration, then choose your own pace.{ph5}"
msgstr ""
#: website/public/index.html:739
msgctxt "page:index.html"
msgid "See the script, checks and how to try the analysis"
msgstr ""
#. {ph0}: <code>index.js</code>
#: website/public/index.html:742
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"REA inspected the HTTP browser edition through a local debugging connection and "
"returned the loaded {ph0}, including its source and digest."
msgstr ""
#: website/public/index.html:749
msgctxt "page:index.html"
msgid "Selected settings from the inspected script"
msgstr ""
#: website/public/index.html:755
msgctxt "page:index.html"
msgid ""
"We called the original game’s update function in a controlled browser check, with "
"obstacles and automatic scheduling disabled. After 4,000 updates, speed was 10.0; "
"after 10,000, it was 13.0, rounded to one decimal."
msgstr ""
#. {ph0}: <a href="examples/dino-lab/">
#. {ph1}: </a>
#: website/public/index.html:761
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"The new mini-game keeps that speed rule. Its drawing, jumping and collision code are a"
" small teaching implementation. {ph0}Open the lab{ph1} to see the new code and run the"
" same speed check."
msgstr ""
#. {ph0}: <a href="guides/browser/#prepare">
#. {ph1}: </a>
#. {ph2}: <a href="https://wayou.github.io/t-rex-runner/" >
#. {ph3}: </a >
#: website/public/index.html:767
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"To inspect the target yourself, follow the {ph0}browser connection steps{ph1} using "
"{ph2}the dinosaur page{ph3}. Give your agent that page URL and your local debugging "
"endpoint, then copy the prompt above."
msgstr ""
#. {ph0}: <a href="https://github.com/wayou/t-rex-
#. runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571" >
#. {ph1}: </a >
#. {ph2}: <a href="assets/licenses/dinosaur.txt" >
#. {ph3}: </a >
#: website/public/index.html:776
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}"
msgstr ""
#: website/public/index.html:793
msgctxt "page:index.html"
msgid "Example 02 · Windows Calculator"
msgstr ""
#: website/public/index.html:794
msgctxt "page:index.html"
msgid "Rebuild Calculator’s % button."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: <span translate="no">200 + 10%</span>
#. {ph2}: </strong>
#: website/public/index.html:795
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both + and ×, "
"and try them."
msgstr ""
#. {ph0}: <mark class="prose-highlight">
#. {ph1}: </mark>
#: website/public/index.html:804
#, python-brace-format
msgctxt "page:index.html"
msgid "Build a small calculator that handles {ph0}both + and × correctly.{ph1}"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/index.html:811
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the installed"
" app to find which number the percentage is applied to."
msgstr ""
#: website/public/index.html:820
msgctxt "page:index.html"
msgid "Try the calculation"
msgstr ""
#: website/public/index.html:864
msgctxt "page:index.html"
msgid "Reset"
msgstr ""
#: website/public/index.html:872
msgctxt "page:index.html"
msgid "10% of 200 = 20. Then 200 + 20 = 220."
msgstr ""
#: website/public/index.html:875
msgctxt "page:index.html"
msgid "Interactive illustration of the inspected percentage rule."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/index.html:882
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}One branch divides by 100. The other also multiplies by the first number.{ph1} "
"The agent uses both to recreate the % button."
msgstr ""
#. {ph0}: <code>previous = 200</code>
#. {ph1}: <code>current = 10</code>
#: website/public/index.html:890
#, python-brace-format
msgctxt "page:index.html"
msgid "For this example, {ph0} and {ph1}."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:896
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % button"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="calculator-analysis-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/index.html:910
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover the rules "
"after + and ×, then build a small calculator that uses both.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/index.html:921
msgctxt "page:index.html"
msgid "Readable summary of the % handler"
msgstr ""
#: website/public/index.html:931
msgctxt "page:index.html"
msgid "With +"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong >
#. {ph2}: <code>10% of 200 = 20 → 200 + 20 = 220</code>
#: website/public/index.html:932
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Take 10% of the first number.{ph1}{ph2}"
msgstr ""
#: website/public/index.html:938
msgctxt "page:index.html"
msgid "With ×"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong >
#. {ph2}: <code>200 × 0.1 = 20</code>
#: website/public/index.html:939
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}"
msgstr ""
#: website/public/index.html:948
msgctxt "page:index.html"
msgid "From the installed app to a working % button"
msgstr ""
#. {ph0}: <span class="flow-label" >
#. {ph1}: <span translate="no">calc.exe</span>
#. {ph2}: </span >
#. {ph3}: <span class="flow-node">
#. {ph4}: </span >
#. {ph5}: <span class="flow-note" >
#. {ph6}: <code>ms-calculator:</code>
#. {ph7}: </span >
#: website/public/index.html:952
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator app{ph4}{ph5}The code "
"opens {ph6}. The agent then selects the installed app’s library.{ph7}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: <code>100</code>
#. {ph6}: </span >
#: website/public/index.html:961
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s code{ph3}{ph4}The "
"function checks the operator and uses the constant {ph5}.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <span class="flow-node">
#. {ph3}: </span >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/index.html:969
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the "
"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and × "
"above.{ph5}"
msgstr ""
#: website/public/index.html:980
msgctxt "page:index.html"
msgid "See the real code and how the answer was checked"
msgstr ""
#: website/public/index.html:985
msgctxt "page:index.html"
msgid "REA · selected original instructions"
msgstr ""
#: website/public/index.html:996
msgctxt "page:index.html"
msgid "Operator IDs · Microsoft’s source"
msgstr ""
#: website/public/index.html:1006
msgctxt "page:index.html"
msgid ""
"Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The readable summary "
"uses names from Microsoft’s public source to explain the recovered branch."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalcManager/CEngine/scifunc.cpp#L98-L111"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalculatorUnitTests/CalculatorManagerTest.cpp#L350-L370"
#. >
#. {ph3}: </a >
#. {ph4}: <a href="guides/native/">
#. {ph5}: </a>
#: website/public/index.html:1011
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · {ph4}Native "
"setup guide{ph5}"
msgstr ""
#: website/public/index.html:1030
msgctxt "page:index.html"
msgid "Your first investigation"
msgstr ""
#: website/public/index.html:1031
msgctxt "page:index.html"
msgid "Try REA on a small app."
msgstr ""
#: website/public/index.html:1032
msgctxt "page:index.html"
msgid "Download our Notes example, trace its CSV export, and check one changed input."
msgstr ""
#: website/public/index.html:1037
msgctxt "page:index.html"
msgid "Try the guided example"
msgstr ""
#: website/public/index.html:1046
msgctxt "page:index.html"
msgid "Want to go deeper?"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <strong>
#. {ph3}: </strong>
#: website/public/index.html:1047
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"Tell your agent what you want to understand or build. With REA, you can work together "
"on anything from {ph0}cloning this website{ph1} to {ph2}reconstructing a game from its"
" executable.{ph3}"
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:1058
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="website-project-prompt" >
#. {ph3}: <span translate="no">https://rea.tools/</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/index.html:1072
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for me.{ph4}{ph5}{ph6}"
msgstr ""
#: website/public/index.html:1081
msgctxt "page:index.html"
msgid "Yes, this one."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/index.html:1086
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="game-project-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/index.html:1100
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. Recover the "
"gameplay logic in C and test it against the original.{ph3}{ph4}{ph5}"
msgstr ""
#. {ph0}: <a href="showcase/dx-ball/">
#. {ph1}: </a>
#: website/public/index.html:1109
#, python-brace-format
msgctxt "page:index.html"
msgid "{ph0}See the DX-Ball case study →{ph1}"
msgstr ""
#: website/public/index.html:1114
msgctxt "page:index.html"
msgid "For setup and analysis steps, choose your target:"
msgstr ""
#: website/public/index.html:1119
msgctxt "page:index.html"
msgid "Native binaries"
msgstr ""
#: website/public/index.html:1120
msgctxt "page:index.html"
msgid ""
"Inspect functions, strings, references and call relationships in executables and "
"libraries."
msgstr ""
#: website/public/index.html:1124
msgctxt "page:index.html"
msgid "Native analysis guide"
msgstr ""
#: website/public/index.html:1127
msgctxt "page:index.html"
msgid "JavaScript & Electron"
msgstr ""
#: website/public/index.html:1128
msgctxt "page:index.html"
msgid ""
"Map modules, routes, IPC and native dependencies from an application folder or ASAR "
"archive."
msgstr ""
#: website/public/index.html:1132
msgctxt "page:index.html"
msgid "Application workflows"
msgstr ""
#: website/public/index.html:1135
msgctxt "page:index.html"
msgid "Browser & runtime activity"
msgstr ""
#: website/public/index.html:1136
msgctxt "page:index.html"
msgid ""
"Capture selected browser or process activity, then compare the results across runs."
msgstr ""
#: website/public/index.html:1140
msgctxt "page:index.html"
msgid "Browser observation guide"
msgstr ""
#: website/public/index.html:1147
msgctxt "page:index.html"
msgid "Any questions?"
msgstr ""
#. {ph0}: <a href="faq/">
#. {ph1}: </a>
#. {ph2}: <a href="https://discord.gg/GkcryMnJDM">
#. {ph3}: </a>
#. {ph4}: <a href="https://github.com/morluto/rea/issues/new/choose" >
#. {ph5}: </a >
#: website/public/index.html:1148
#, python-brace-format
msgctxt "page:index.html"
msgid ""
"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a GitHub "
"issue{ph5} for bugs and feature requests."
msgstr ""
#: website/public/index.html:1161 website/public/index.html:1167
msgctxt "page:index.html"
msgid "Join the community"
msgstr ""
#: website/public/index.html:1162
msgctxt "page:index.html"
msgid ""
"Share investigations and get help from other REA users on Discord. Follow REA on X for"
" project updates."
msgstr ""
#: website/public/index.html:1170
msgctxt "page:index.html"
msgid "Follow @reatools on X"
msgstr ""
#: website/public/index.html:6
msgctxt "page:index.html"
msgid "REA — Reverse Engineering for Your Coding Agent"
msgstr ""
#: website/public/index.html:7
msgctxt "page:index.html"
msgid ""
"Reverse engineer apps, binaries and browser behavior with your coding agent. Follow "
"clear guides and try interactive examples with REA."
msgstr ""
#: website/public/index.html:260
msgctxt "page:index.html"
msgid "Copy REA installation prompt"
msgstr ""
#: website/public/index.html:282
msgctxt "page:index.html"
msgid "Copy setup command"
msgstr ""
#: website/public/index.html:334
msgctxt "page:index.html"
msgid "Follow the manual Calculator analysis"
msgstr ""
#: website/public/index.html:497
msgctxt "page:index.html"
msgid "Copy Calculator percentage question"
msgstr ""
#: website/public/index.html:604
msgctxt "page:index.html"
msgid ""
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
msgstr ""
#: website/public/index.html:665
msgctxt "page:index.html"
msgid "Copy dinosaur analysis prompt"
msgstr ""
#: website/public/index.html:821
msgctxt "page:index.html"
msgid "Choose the calculation"
msgstr ""
#: website/public/index.html:901
msgctxt "page:index.html"
msgid "Copy Calculator analysis prompt"
msgstr ""
#: website/public/index.html:1063
msgctxt "page:index.html"
msgid "Copy website project prompt"
msgstr ""
#: website/public/index.html:1091
msgctxt "page:index.html"
msgid "Copy game reconstruction prompt"
msgstr ""
#: website/public/index.html:1191
msgctxt "page:index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/aegis/index.html:104
msgctxt "page:showcase/aegis/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/aegis/index.html:195
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android"
msgstr ""
#: website/public/showcase/aegis/index.html:198
msgctxt "page:showcase/aegis/index.html"
msgid "Case study · Aegis Authenticator"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/aegis/index.html:199
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "How does an authenticator{ph0}generate a login code?"
msgstr ""
#: website/public/showcase/aegis/index.html:200
msgctxt "page:showcase/aegis/index.html"
msgid ""
"A six-digit code changes every 30 seconds. Use REA to find the calculation in an "
"Android APK, then rebuild it with a clock you can control."
msgstr ""
#: website/public/showcase/aegis/index.html:205
msgctxt "page:showcase/aegis/index.html"
msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB"
msgstr ""
#: website/public/showcase/aegis/index.html:208
msgctxt "page:showcase/aegis/index.html"
msgid "View Aegis on GitHub"
msgstr ""
#: website/public/showcase/aegis/index.html:214
msgctxt "page:showcase/aegis/index.html"
msgid "From an APK to a code you can reproduce"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node" >
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/aegis/index.html:216
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating methods{ph3}{ph4}REA "
"searches the package and traces the code used by the display and copy actions.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/aegis/index.html:225
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six digits{ph3}{ph4}REA "
"returns the methods and defaults. The agent explains how they fit together.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/aegis/index.html:233
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the code.{ph3}{ph4}A new "
"browser demo reproduces the rule and checks it against public reference cases.{ph5}"
msgstr ""
#: website/public/showcase/aegis/index.html:246
msgctxt "page:showcase/aegis/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#ask">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:248
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Ask your agent{ph1}"
msgstr ""
#. {ph0}: <a href="#demo">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:249
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Try the code generator{ph1}"
msgstr ""
#. {ph0}: <a href="#find">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:250
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Find the code with REA{ph1}"
msgstr ""
#. {ph0}: <a href="#calculation">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:251
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Read the calculation{ph1}"
msgstr ""
#. {ph0}: <a href="#verify">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:252
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Check the reconstruction{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:253
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Inspect the APK yourself{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:258
msgctxt "page:showcase/aegis/index.html"
msgid "Ask your agent"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:259
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The app shows a changing login code. We want to find {ph0}what makes it change{ph1} "
"and reproduce that behavior."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/aegis/index.html:265
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/aegis/index.html:269
#: website/public/showcase/aegis/index.html:732
msgctxt "page:showcase/aegis/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="aegis-prompt" >
#. {ph3}: <span translate="no">aegis-v3.4.3.apk</span>
#. {ph4}: </span >
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
#. {ph6}: </span>
#: website/public/showcase/aegis/index.html:278
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Find how it generates the six-digit login "
"code, explain why it changes every 30 seconds, and rebuild a small demo where I can "
"change the time.{ph4}{ph5}{ph6}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:289
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"An example prompt for the downloaded APK, with REA's Android analysis configured. "
"{ph0}Get the APK and analysis setup ↓{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:297
msgctxt "page:showcase/aegis/index.html"
msgid "Try the code generator"
msgstr ""
#. {ph0}: <mark class="prose-highlight">
#. {ph1}: </mark>
#: website/public/showcase/aegis/index.html:298
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The app groups time into {ph0}30-second blocks.{ph1} It combines the block number with"
" the account key to generate a code. The same key and block produce the same code."
msgstr ""
#: website/public/showcase/aegis/index.html:305
msgctxt "page:showcase/aegis/index.html"
msgid "Move the clock across 60 seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:308
msgctxt "page:showcase/aegis/index.html"
msgid "Time"
msgstr ""
#: website/public/showcase/aegis/index.html:310
msgctxt "page:showcase/aegis/index.html"
msgid "seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:311
msgctxt "page:showcase/aegis/index.html"
msgid "Our adjustable example clock"
msgstr ""
#: website/public/showcase/aegis/index.html:314
msgctxt "page:showcase/aegis/index.html"
msgid "30-second block"
msgstr ""
#: website/public/showcase/aegis/index.html:316
#: website/public/showcase/aegis/index.html:643
msgctxt "page:showcase/aegis/index.html"
msgid "Block"
msgstr ""
#. {ph0}: <code data-aegis-division>floor(59 / 30)</code>
#. {ph1}: <br />
#. {ph2}: <span data-aegis-window >
#. {ph3}: </span >
#: website/public/showcase/aegis/index.html:317
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}"
msgstr ""
#: website/public/showcase/aegis/index.html:325
msgctxt "page:showcase/aegis/index.html"
msgid "Generated code"
msgstr ""
#: website/public/showcase/aegis/index.html:333
msgctxt "page:showcase/aegis/index.html"
msgid "Account key + block → six digits"
msgstr ""
#: website/public/showcase/aegis/index.html:339
msgctxt "page:showcase/aegis/index.html"
msgid "Example time, in seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:354
#: website/public/showcase/aegis/index.html:654
msgctxt "page:showcase/aegis/index.html"
msgid "59 seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:361
#: website/public/showcase/aegis/index.html:659
msgctxt "page:showcase/aegis/index.html"
msgid "60 seconds"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <strong>
#. {ph3}: </strong>
#: website/public/showcase/aegis/index.html:370
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving within one "
"block leaves the code unchanged."
msgstr ""
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:377
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements the "
"calculation recovered from the APK."
msgstr ""
#: website/public/showcase/aegis/index.html:384
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The diagram shows the result at 59 seconds. Enable JavaScript to change the clock."
msgstr ""
#: website/public/showcase/aegis/index.html:393
msgctxt "page:showcase/aegis/index.html"
msgid "Find the code with REA"
msgstr ""
#: website/public/showcase/aegis/index.html:396
msgctxt "page:showcase/aegis/index.html"
msgid "Narrow the APK to three classes"
msgstr ""
#: website/public/showcase/aegis/index.html:399
#: website/public/showcase/aegis/index.html:431
msgctxt "page:showcase/aegis/index.html"
msgid "Agent → REA"
msgstr ""
#: website/public/showcase/aegis/index.html:409
msgctxt "page:showcase/aegis/index.html"
msgid "REA → agent · selected results"
msgstr ""
#. {ph0}: <code>TotpInfo</code>
#: website/public/showcase/aegis/index.html:421
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0} is the calculation candidate; the other two concern the progress bar and "
"imported accounts. TOTP means a time-based one-time password."
msgstr ""
#: website/public/showcase/aegis/index.html:428
msgctxt "page:showcase/aegis/index.html"
msgid "Connect the generator to the app's display"
msgstr ""
#: website/public/showcase/aegis/index.html:445
msgctxt "page:showcase/aegis/index.html"
msgid "REA → agent · methods and callers"
msgstr ""
#. {ph0}: <code>EntryHolder.getOtp</code>
#. {ph1}: <code>TotpInfo.getOtp(timestamp)</code>
#: website/public/showcase/aegis/index.html:456
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"REA identifies the timestamp overload and finds the base method's callers. Inspecting "
"{ph0} then shows the display calling {ph1}."
msgstr ""
#. {ph0}: <code>com.beemdevelopment.aegis</code>
#: website/public/showcase/aegis/index.html:464
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Requests show a shortened input path. Result class names omit the common {ph0} prefix."
msgstr ""
#: website/public/showcase/aegis/index.html:471
msgctxt "page:showcase/aegis/index.html"
msgid "Read the calculation"
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/showcase/aegis/index.html:472
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"REA returns {ph0}the clock conversion, default settings and generating methods.{ph1} "
"The constructors set a 30-second interval and six digits; the timestamp method turns "
"seconds into a block number."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/aegis/index.html:487
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}01{ph1} Time block"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/aegis/index.html:495
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}02{ph1} Key + block"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/aegis/index.html:503
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}03{ph1} Six digits"
msgstr ""
#: website/public/showcase/aegis/index.html:515
msgctxt "page:showcase/aegis/index.html"
msgid "REA · selected decompiled Java"
msgstr ""
#: website/public/showcase/aegis/index.html:545
msgctxt "page:showcase/aegis/index.html"
msgid "Readable summary · agent's interpretation"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:562
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At 60 "
"seconds, the block becomes 2."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:568
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}The key matters too.{ph1} The generator combines the account key with the block. "
"An account with a different key can show a different code at the same time."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:575
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is padded with "
"zeroes when needed, so a code can begin with 0."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
#. >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:582
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Excerpts from several inspected methods, with line wrapping for display. The right "
"panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:591
msgctxt "page:showcase/aegis/index.html"
msgid "Inside the generator"
msgstr ""
#. {ph0}: <code>generateOTP</code>
#. {ph1}: <code>kotlin.ExceptionsKt</code>
#. {ph2}: <code>TotpInfo</code>
#. {ph3}: <code>HOTP</code>
#: website/public/showcase/aegis/index.html:592
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and returns this"
" body; the original source calls the helper {ph3}."
msgstr ""
#: website/public/showcase/aegis/index.html:600
msgctxt "page:showcase/aegis/index.html"
msgid "REA · generateOTP, complete body"
msgstr ""
#: website/public/showcase/aegis/index.html:614
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The last hash byte selects a position. Four bytes at that position provide a positive "
"31-bit number; formatting reduces it to the requested number of digits. The "
"constructor's last argument selects the code-formatting branch introduced by "
"compilation."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/HOTP.java"
#. >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:621
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}Compare with the matching release source{ph1}."
msgstr ""
#: website/public/showcase/aegis/index.html:631
msgctxt "page:showcase/aegis/index.html"
msgid "Check the reconstruction"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/aegis/index.html:632
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"We assembled the selected REA-returned Java methods in a small test program. Their "
"output matched an independent reconstruction on {ph0}133 test cases{ph1}, including "
"time-block boundaries and codes beginning with zero."
msgstr ""
#: website/public/showcase/aegis/index.html:642
msgctxt "page:showcase/aegis/index.html"
msgid "Example time"
msgstr ""
#: website/public/showcase/aegis/index.html:644
msgctxt "page:showcase/aegis/index.html"
msgid "Six-digit code"
msgstr ""
#: website/public/showcase/aegis/index.html:649
msgctxt "page:showcase/aegis/index.html"
msgid "30 seconds"
msgstr ""
#: website/public/showcase/aegis/index.html:664
msgctxt "page:showcase/aegis/index.html"
msgid "1,111,111,109 seconds"
msgstr ""
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
#. {ph1}: </a >
#: website/public/showcase/aegis/index.html:671
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The generator also matches the six published SHA-1 reference cases in {ph0}RFC "
"6238{ph1}. Check the browser implementation against them:"
msgstr ""
#: website/public/showcase/aegis/index.html:679
msgctxt "page:showcase/aegis/index.html"
msgid "Run reference checks"
msgstr ""
#: website/public/showcase/aegis/index.html:686
msgctxt "page:showcase/aegis/index.html"
msgid "Read the demo's calculation"
msgstr ""
#: website/public/showcase/aegis/index.html:690
msgctxt "page:showcase/aegis/index.html"
msgid ""
"The reference cases use eight digits. The check also verifies their six-digit results."
msgstr ""
#: website/public/showcase/aegis/index.html:699
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Verification runs extracted Java methods and the new demo. The Android APK was "
"inspected statically."
msgstr ""
#: website/public/showcase/aegis/index.html:706
msgctxt "page:showcase/aegis/index.html"
msgid "Inspect the APK yourself"
msgstr ""
#. {ph0}: <a href="../../get-started/">
#. {ph1}: </a>
#: website/public/showcase/aegis/index.html:707
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into the same "
"folder. On Windows, use a Linux environment such as WSL."
msgstr ""
#. {ph0}: <code>JAVA_HOME</code>
#. {ph1}: <code>PATH</code>
#: website/public/showcase/aegis/index.html:712
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Android analysis needs a full JDK 17 or later. Select it with {ph0} or {ph1}. This "
"case used JDK 21."
msgstr ""
#: website/public/showcase/aegis/index.html:718
msgctxt "page:showcase/aegis/index.html"
msgid "Download Aegis APK"
msgstr ""
#: website/public/showcase/aegis/index.html:722
msgctxt "page:showcase/aegis/index.html"
msgid "Download Android analysis provider"
msgstr ""
#: website/public/showcase/aegis/index.html:728
msgctxt "page:showcase/aegis/index.html"
msgid "Point REA at the provider file and inspect the APK:"
msgstr ""
#: website/public/showcase/aegis/index.html:731
msgctxt "page:showcase/aegis/index.html"
msgid "macOS / Linux"
msgstr ""
#. {ph0}: <code>REA_JADX_MCP_JAR</code>
#: website/public/showcase/aegis/index.html:745
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Your agent can continue through REA's CLI using the prompt above. For MCP, add {ph0} "
"to the REA server's environment and reconnect it."
msgstr ""
#. {ph0}: <strong >
#. {ph1}: </strong >
#: website/public/showcase/aegis/index.html:750
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"A next question: {ph0}what happens when an account uses eight digits or a different "
"time interval?{ph1}"
msgstr ""
#: website/public/showcase/aegis/index.html:760
msgctxt "page:showcase/aegis/index.html"
msgid "Sources"
msgstr ""
#. {ph0}: <a href="https://github.com/beemdevelopment/Aegis/releases/tag/v3.4.3" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/beemdevelopment/Aegis/tree/d6f4e5925a97e4e91593f1542085eae03432a759"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
#. >
#. {ph5}: </a >
#: website/public/showcase/aegis/index.html:762
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid ""
"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · "
"{ph4}GPL-3.0 license{ph5}"
msgstr ""
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
#. {ph1}: </a >
#. {ph2}: <a href="test-vectors.json">
#. {ph3}: </a>
#: website/public/showcase/aegis/index.html:778
#, python-brace-format
msgctxt "page:showcase/aegis/index.html"
msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}"
msgstr ""
#: website/public/showcase/aegis/index.html:785
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited to Aegis;"
" the diagram, readable summary and browser reconstruction are new teaching material."
msgstr ""
#: website/public/showcase/aegis/index.html:6
msgctxt "page:showcase/aegis/index.html"
msgid "Aegis APK Reverse Engineering: Login Codes — REA"
msgstr ""
#: website/public/showcase/aegis/index.html:7
msgctxt "page:showcase/aegis/index.html"
msgid ""
"Inspect the Aegis Android APK with REA, recover its six-digit login-code calculation "
"and try a reconstruction with an adjustable clock."
msgstr ""
#: website/public/showcase/aegis/index.html:245
msgctxt "page:showcase/aegis/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/aegis/index.html:256
msgctxt "page:showcase/aegis/index.html"
msgid "Aegis APK case study"
msgstr ""
#: website/public/showcase/aegis/index.html:269
msgctxt "page:showcase/aegis/index.html"
msgid "Copy Aegis example prompt"
msgstr ""
#: website/public/showcase/aegis/index.html:482
msgctxt "page:showcase/aegis/index.html"
msgid "Follow the login-code calculation"
msgstr ""
#: website/public/showcase/aegis/index.html:732
msgctxt "page:showcase/aegis/index.html"
msgid "Copy APK inspection command"
msgstr ""
#: website/public/showcase/aegis/index.html:808
msgctxt "page:showcase/aegis/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/ctf/index.html:103
msgctxt "page:showcase/ctf/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/ctf/index.html:194
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF"
msgstr ""
#: website/public/showcase/ctf/index.html:197
msgctxt "page:showcase/ctf/index.html"
msgid "Case study · DownUnderCTF 2023"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/ctf/index.html:198
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "Find the flag in{ph0}a CTF binary."
msgstr ""
#. {ph0}: <code>Correct!</code>
#: website/public/showcase/ctf/index.html:199
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Use REA to inspect a small flag checker, turn its rules into equations and find an "
"input that makes the original program print {ph0}."
msgstr ""
#: website/public/showcase/ctf/index.html:204
msgctxt "page:showcase/ctf/index.html"
msgid "masked squares flag checker · Easy · Linux x86-64"
msgstr ""
#: website/public/showcase/ctf/index.html:207
msgctxt "page:showcase/ctf/index.html"
msgid "View the original challenge"
msgstr ""
#: website/public/showcase/ctf/index.html:215
msgctxt "page:showcase/ctf/index.html"
msgid "From a binary to a checked answer"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/ctf/index.html:217
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA finds the "
"prompt, its references and the code that accepts or rejects an input.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/ctf/index.html:225
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA returns the "
"instructions and data behind each check. The agent turns them into equations.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/ctf/index.html:233
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python script "
"solves the equations. REA captures the original program accepting the result.{ph5}"
msgstr ""
#: website/public/showcase/ctf/index.html:242
msgctxt "page:showcase/ctf/index.html"
msgid "The challenge is by joseph, published in DownUnderCTF's official repository."
msgstr ""
#: website/public/showcase/ctf/index.html:250
msgctxt "page:showcase/ctf/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#find">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:252
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Find the checking code{ph1}"
msgstr ""
#. {ph0}: <a href="#mask">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:253
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Read one mask{ph1}"
msgstr ""
#. {ph0}: <a href="#code">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:254
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Assembly to readable code{ph1}"
msgstr ""
#. {ph0}: <a href="#solve">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:255
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Solve the equations{ph1}"
msgstr ""
#. {ph0}: <a href="#verify">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:256
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Check the answer{ph1}"
msgstr ""
#. {ph0}: <a href="#try">
#. {ph1}: </a>
#: website/public/showcase/ctf/index.html:257
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}Try it yourself{ph1}"
msgstr ""
#: website/public/showcase/ctf/index.html:262
msgctxt "page:showcase/ctf/index.html"
msgid "Find the checking code"
msgstr ""
#. {ph0}: <code>Correct!</code>
#. {ph1}: <code>Incorrect!</code>
#: website/public/showcase/ctf/index.html:263
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or {ph1}. "
"Start with a simple request to your agent."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/ctf/index.html:270
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/ctf/index.html:275 website/public/showcase/ctf/index.html:494
#: website/public/showcase/ctf/index.html:518 website/public/showcase/ctf/index.html:588
#: website/public/showcase/ctf/index.html:735
msgctxt "page:showcase/ctf/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="ctf-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/ctf/index.html:284
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. Explain how the "
"checks work, then verify the answer with the original program.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/ctf/index.html:293
msgctxt "page:showcase/ctf/index.html"
msgid ""
"An example prompt, with the downloaded challenge available locally and a native "
"analysis provider connected."
msgstr ""
#: website/public/showcase/ctf/index.html:299
msgctxt "page:showcase/ctf/index.html"
msgid "Follow the input prompt to its function"
msgstr ""
#: website/public/showcase/ctf/index.html:302 website/public/showcase/ctf/index.html:338
msgctxt "page:showcase/ctf/index.html"
msgid "Agent → REA"
msgstr ""
#: website/public/showcase/ctf/index.html:318
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · selected results"
msgstr ""
#: website/public/showcase/ctf/index.html:328
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The reference gives the agent a place to investigate, even though the executable's "
"original function names have been removed."
msgstr ""
#: website/public/showcase/ctf/index.html:335
msgctxt "page:showcase/ctf/index.html"
msgid "Read the checker and its two helpers"
msgstr ""
#: website/public/showcase/ctf/index.html:350
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · selected instructions"
msgstr ""
#. {ph0}: <code>0x18</code>
#. {ph1}: <code>0x270</code>
#: website/public/showcase/ctf/index.html:363
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The first loop copies 36 character codes. The checking loop decodes a mask, sums the "
"selected codes and compares the result with a stored number. Its {ph0}-byte steps "
"across {ph1} bytes give 26 masks."
msgstr ""
#: website/public/showcase/ctf/index.html:371
msgctxt "page:showcase/ctf/index.html"
msgid ""
"These are selected results from a fresh REA analysis. The local target path is "
"shortened for display; addresses refer to REA's imported image."
msgstr ""
#: website/public/showcase/ctf/index.html:379
msgctxt "page:showcase/ctf/index.html"
msgid "One check reveals one character"
msgstr ""
#: website/public/showcase/ctf/index.html:380
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The checker arranges the input in a 6×6 grid. A mask chooses which cells contribute to"
" a sum. Its compact encoding uses negative numbers to skip cells and positive numbers "
"to select them."
msgstr ""
#. {ph0}: <a href="../../assets/figures/ctf-mask-equation.svg" >
#. {ph1}: </a >
#: website/public/showcase/ctf/index.html:400
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "The seventh check selects just one position. {ph0}Open figure{ph1}."
msgstr ""
#: website/public/showcase/ctf/index.html:407
msgctxt "page:showcase/ctf/index.html"
msgid "Read the mask and its target from the binary"
msgstr ""
#: website/public/showcase/ctf/index.html:413
msgctxt "page:showcase/ctf/index.html"
msgid "Agent → REA · read_bytes"
msgstr ""
#: website/public/showcase/ctf/index.html:420
msgctxt "page:showcase/ctf/index.html"
msgid "REA → agent · seventh entries"
msgstr ""
#. {ph0}: <code>MOVSX</code>
#. {ph1}: <code>eb</code>
#. {ph2}: <code>code[21] = 55</code>
#. {ph3}: <code>7</code>
#: website/public/showcase/ctf/index.html:429
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} means −21. "
"The target is a little-endian integer. Together, these bytes tell the agent that "
"{ph2}, so that character is {ph3}."
msgstr ""
#: website/public/showcase/ctf/index.html:438
msgctxt "page:showcase/ctf/index.html"
msgid "From instructions to a readable check"
msgstr ""
#: website/public/showcase/ctf/index.html:439
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Select a step to connect the summing helper and its caller to the same rule in C."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:449
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}01{ph1} Start"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:457
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}02{ph1} Select"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:465
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}03{ph1} Add"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:473
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}04{ph1} Advance"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/ctf/index.html:481
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}05{ph1} Compare"
msgstr ""
#: website/public/showcase/ctf/index.html:493
msgctxt "page:showcase/ctf/index.html"
msgid "REA · selected original instructions"
msgstr ""
#: website/public/showcase/ctf/index.html:517
msgctxt "page:showcase/ctf/index.html"
msgid "Readable C · one-check summary"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>ECX</code>
#: website/public/showcase/ctf/index.html:546
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/ctf/index.html:550
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a nonzero value "
"includes it."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/ctf/index.html:554
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset is added "
"to the sum."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#: website/public/showcase/ctf/index.html:558
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes per "
"integer and visits six rows of six cells."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>EAX</code>
#. {ph3}: <code>Incorrect!</code>
#: website/public/showcase/ctf/index.html:563
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum in {ph2}. A"
" mismatch jumps to {ph3}."
msgstr ""
#: website/public/showcase/ctf/index.html:570
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The instructions come from the summing helper and its caller. The C is an explanatory "
"summary with descriptive names and a flattened 36-cell loop."
msgstr ""
#: website/public/showcase/ctf/index.html:578
msgctxt "page:showcase/ctf/index.html"
msgid "Solve the 26 equations"
msgstr ""
#: website/public/showcase/ctf/index.html:579
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Most masks select several cells. For example, the first check adds 16 character codes "
"and requires a total of 1441. The overlapping selections give equations that a small "
"Python script can solve together."
msgstr ""
#: website/public/showcase/ctf/index.html:587
msgctxt "page:showcase/ctf/index.html"
msgid "Python · solver excerpt"
msgstr ""
#. {ph0}: <code>DUCTF{…}</code>
#: website/public/showcase/ctf/index.html:615
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Z3 is a solver that finds values satisfying these equations. This excerpt uses the "
"extracted checks and assumes a {ph0} flag with letters, digits, underscores and "
"braces. The complete download includes all 26 masks and targets."
msgstr ""
#: website/public/showcase/ctf/index.html:621
msgctxt "page:showcase/ctf/index.html"
msgid "Download the complete solver"
msgstr ""
#: website/public/showcase/ctf/index.html:627
msgctxt "page:showcase/ctf/index.html"
msgid "Check the answer with the original program"
msgstr ""
#. {ph0}: <code>z</code>
#. {ph1}: <code>y</code>
#: website/public/showcase/ctf/index.html:628
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"REA's process capture records the original executable accepting the solved flag. "
"Changing one selected character from {ph0} to {ph1} makes the first sum 1440 instead "
"of 1441, and the program rejects it."
msgstr ""
#: website/public/showcase/ctf/index.html:638
msgctxt "page:showcase/ctf/index.html"
msgid "Input"
msgstr ""
#: website/public/showcase/ctf/index.html:639
msgctxt "page:showcase/ctf/index.html"
msgid "Observed output"
msgstr ""
#: website/public/showcase/ctf/index.html:640
msgctxt "page:showcase/ctf/index.html"
msgid "Exit code"
msgstr ""
#: website/public/showcase/ctf/index.html:645
msgctxt "page:showcase/ctf/index.html"
msgid "Solver's flag"
msgstr ""
#: website/public/showcase/ctf/index.html:650
msgctxt "page:showcase/ctf/index.html"
msgid "One character changed"
msgstr ""
#: website/public/showcase/ctf/index.html:658
msgctxt "page:showcase/ctf/index.html"
msgid "Show the recovered flag and captured output"
msgstr ""
#: website/public/showcase/ctf/index.html:661
msgctxt "page:showcase/ctf/index.html"
msgid "REA · original program output"
msgstr ""
#: website/public/showcase/ctf/index.html:662
msgctxt "page:showcase/ctf/index.html"
msgid "Copy flag"
msgstr ""
#: website/public/showcase/ctf/index.html:674
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The recovered value also matches the flag in the organizers' published challenge "
"metadata, checked after solving the binary."
msgstr ""
#: website/public/showcase/ctf/index.html:680
msgctxt "page:showcase/ctf/index.html"
msgid "Source, target identity and analysis details"
msgstr ""
#: website/public/showcase/ctf/index.html:681
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 with Ghidra"
" 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248 bytes."
msgstr ""
#: website/public/showcase/ctf/index.html:688
msgctxt "page:showcase/ctf/index.html"
msgid "Original executable · SHA-256"
msgstr ""
#: website/public/showcase/ctf/index.html:692
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The string references, functions and constants were inspected before reading the "
"organizers' source or solution. The Python solver and the diagram were built from "
"those REA results."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/DownUnderCTF/Challenges_2023_Public/blob/b48f83db2984bc7fa2ec7879a32d7efb1be8d333/rev/masked-
#. squares-flag-checker/src/ms_flag_checker.c" >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/DownUnderCTF/Challenges_2023_Public/blob/b48f83db2984bc7fa2ec7879a32d7efb1be8d333/rev/masked-
#. squares-flag-checker/ctfcli.yaml" >
#. {ph3}: </a >
#. {ph4}: <a href="https://github.com/morluto/rea/blob/main/website/evidence/ctf-masked-
#. squares.md" >
#. {ph5}: </a >
#: website/public/showcase/ctf/index.html:697
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and flag{ph3} "
"· {ph4}REA evidence notes{ph5}"
msgstr ""
#: website/public/showcase/ctf/index.html:717
msgctxt "page:showcase/ctf/index.html"
msgid "Try it yourself"
msgstr ""
#: website/public/showcase/ctf/index.html:718
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Download the original challenge and the solver into one folder. Use the prompt above "
"to investigate with your agent, or run the included script."
msgstr ""
#: website/public/showcase/ctf/index.html:724
msgctxt "page:showcase/ctf/index.html"
msgid "Download the original challenge"
msgstr ""
#: website/public/showcase/ctf/index.html:728
msgctxt "page:showcase/ctf/index.html"
msgid "Download solver"
msgstr ""
#: website/public/showcase/ctf/index.html:734
msgctxt "page:showcase/ctf/index.html"
msgid "Terminal · solve and run"
msgstr ""
#. {ph0}: <code>z3-solver</code>
#: website/public/showcase/ctf/index.html:751
#, python-brace-format
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The script prints a candidate flag; paste it at the program's prompt. Solving needs "
"Python and {ph0}. Running the original executable needs Linux x86-64."
msgstr ""
#: website/public/showcase/ctf/index.html:756
msgctxt "page:showcase/ctf/index.html"
msgid "Set up REA with your coding agent"
msgstr ""
#: website/public/showcase/ctf/index.html:6
msgctxt "page:showcase/ctf/index.html"
msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA"
msgstr ""
#: website/public/showcase/ctf/index.html:7
msgctxt "page:showcase/ctf/index.html"
msgid ""
"Use REA to solve DownUnderCTF's masked squares flag checker. Find the checking "
"functions, extract the masks and compare a recovered flag with the original program."
msgstr ""
#: website/public/showcase/ctf/index.html:249
msgctxt "page:showcase/ctf/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/ctf/index.html:260
msgctxt "page:showcase/ctf/index.html"
msgid "CTF flag-checker case study"
msgstr ""
#: website/public/showcase/ctf/index.html:275
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF example prompt"
msgstr ""
#: website/public/showcase/ctf/index.html:386
msgctxt "page:showcase/ctf/index.html"
msgid "CTF mask equation; scroll horizontally on smaller screens"
msgstr ""
#: website/public/showcase/ctf/index.html:392
msgctxt "page:showcase/ctf/index.html"
msgid ""
"The seventh mask skips 21 cells, selects position 21, then skips 14. Only that cell "
"contributes to the sum. Its required character code is 55, which means the character "
"is 7."
msgstr ""
#: website/public/showcase/ctf/index.html:444
msgctxt "page:showcase/ctf/index.html"
msgid "Follow the CTF check"
msgstr ""
#: website/public/showcase/ctf/index.html:494
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF assembly"
msgstr ""
#: website/public/showcase/ctf/index.html:518
msgctxt "page:showcase/ctf/index.html"
msgid "Copy readable CTF check"
msgstr ""
#: website/public/showcase/ctf/index.html:588
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF solver excerpt"
msgstr ""
#: website/public/showcase/ctf/index.html:662
msgctxt "page:showcase/ctf/index.html"
msgid "Copy recovered flag"
msgstr ""
#: website/public/showcase/ctf/index.html:735
msgctxt "page:showcase/ctf/index.html"
msgid "Copy CTF solver commands"
msgstr ""
#: website/public/showcase/ctf/index.html:777
msgctxt "page:showcase/ctf/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/dx-ball/index.html:103
msgctxt "page:showcase/dx-ball/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/dx-ball/index.html:194
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball"
msgstr ""
#: website/public/showcase/dx-ball/index.html:197
msgctxt "page:showcase/dx-ball/index.html"
msgid "Case study · DX-Ball 1.07"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/dx-ball/index.html:198
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Rebuilding DX-Ball{ph0}from its executable."
msgstr ""
#: website/public/showcase/dx-ball/index.html:199
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The goal is a maintainable C version of the 1996 Windows game. REA helps the agent "
"inspect the original, one function at a time."
msgstr ""
#: website/public/showcase/dx-ball/index.html:203
msgctxt "page:showcase/dx-ball/index.html"
msgid "Windows i386 · C · REA"
msgstr ""
#. {ph0}: <a href="../../assets/figures/dx-ball-sound-pan-investigation.svg" >
#. {ph1}: </a >
#: website/public/showcase/dx-ball/index.html:220
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"One function, from executable to checked C. REA supplies the instructions, callers and"
" data reads; the reconstruction project implements and tests the result. {ph0}Open "
"figure{ph1}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:231
msgctxt "page:showcase/dx-ball/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#progress">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:233
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}The project{ph1}"
msgstr ""
#. {ph0}: <a href="#sound-pan">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:234
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Sound pan{ph1}"
msgstr ""
#. {ph0}: <a href="#checking">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:235
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Checking the result{ph1}"
msgstr ""
#. {ph0}: <a href="#continue">
#. {ph1}: </a>
#: website/public/showcase/dx-ball/index.html:236
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Continue the work{ph1}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:244
msgctxt "page:showcase/dx-ball/index.html"
msgid "maintained C functions"
msgstr ""
#: website/public/showcase/dx-ball/index.html:248
msgctxt "page:showcase/dx-ball/index.html"
msgid "comparisons with original code"
msgstr ""
#: website/public/showcase/dx-ball/index.html:252
msgctxt "page:showcase/dx-ball/index.html"
msgid "functions with matching compiled bytes"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/PROGRESS.md" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/ORACLES.md" >
#. {ph3}: </a >
#: website/public/showcase/dx-ball/index.html:255
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test "
"coverage{ph3}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:267
msgctxt "page:showcase/dx-ball/index.html"
msgid "The project so far"
msgstr ""
#: website/public/showcase/dx-ball/index.html:268
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The recovered code covers board and resource handling, brick hits, animations, "
"particles and bonus production. Current builds provide inspection utilities and an "
"analysis library. Work on the playable game continues with ball and paddle physics, "
"power-up handling and Windows integration."
msgstr ""
#: website/public/showcase/dx-ball/index.html:278
msgctxt "page:showcase/dx-ball/index.html"
msgid "Finding the sound-pan calculation"
msgstr ""
#: website/public/showcase/dx-ball/index.html:279
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"When a brick is hit, its horizontal position is passed to the sound code. The "
"investigation needed to recover how that screen coordinate becomes a left/right "
"panning value."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/dx-ball/index.html:286
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/dx-ball/index.html:290
#: website/public/showcase/dx-ball/index.html:481
#: website/public/showcase/dx-ball/index.html:502
#: website/public/showcase/dx-ball/index.html:573
#: website/public/showcase/dx-ball/index.html:727
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="dxball-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/dx-ball/index.html:299
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the "
"calculation and show the code.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:307
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"An example prompt for your coding agent, with the local executable available. The "
"investigation below shows the REA queries and evidence behind the answer."
msgstr ""
#: website/public/showcase/dx-ball/index.html:312
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The agent used REA to inspect the function, follow its brick-hit caller and read the "
"constants from the executable. Those results supplied the input and arithmetic needed "
"to write the C function below."
msgstr ""
#. {ph0}: <code>0x406400</code>
#. {ph1}: <code>FUN_00406400(void)</code>
#. {ph2}: <code>__ftol()</code>
#: website/public/showcase/dx-ball/index.html:318
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The first function result for {ph0} included pseudocode declaring {ph1} and calling "
"{ph2}. Its instruction view showed a stack input and floating-point operations. That "
"discrepancy gave the agent a concrete reason to keep investigating."
msgstr ""
#: website/public/showcase/dx-ball/index.html:326
msgctxt "page:showcase/dx-ball/index.html"
msgid "The first decompiler view"
msgstr ""
#: website/public/showcase/dx-ball/index.html:329
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA result · pseudocode excerpt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:339
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The output shows a conversion call. Reading the instructions below reveals the input "
"and the calculation feeding that call."
msgstr ""
#: website/public/showcase/dx-ball/index.html:345
msgctxt "page:showcase/dx-ball/index.html"
msgid "Three questions answered through REA"
msgstr ""
#: website/public/showcase/dx-ball/index.html:348
msgctxt "page:showcase/dx-ball/index.html"
msgid "Recover the missing input"
msgstr ""
#. {ph0}: <code>analyze_function</code>
#: website/public/showcase/dx-ball/index.html:352
#: website/public/showcase/dx-ball/index.html:376
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Agent → REA · {ph0}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:358
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA → agent · instruction excerpt"
msgstr ""
#. {ph0}: <code>[EBP+8]</code>
#: website/public/showcase/dx-ball/index.html:365
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The function result includes instructions alongside pseudocode and callers. Here, "
"{ph0} exposes the integer input missing from the decompiler view."
msgstr ""
#: website/public/showcase/dx-ball/index.html:372
msgctxt "page:showcase/dx-ball/index.html"
msgid "Follow the caller to understand the input"
msgstr ""
#: website/public/showcase/dx-ball/index.html:382
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA → agent · caller excerpt"
msgstr ""
#. {ph0}: <code>tile_x</code>
#. {ph1}: <code>20 + 30 × tile_x</code>
#: website/public/showcase/dx-ball/index.html:389
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"REA identified this caller in the first result. Its preceding instructions scale {ph0}"
" by 30; adding 20 gives the brick's screen coordinate, {ph1}."
msgstr ""
#: website/public/showcase/dx-ball/index.html:396
msgctxt "page:showcase/dx-ball/index.html"
msgid "Read the values behind the memory addresses"
msgstr ""
#. {ph0}: <code>read_bytes</code>
#: website/public/showcase/dx-ball/index.html:400
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "Agent → REA · two {ph0} requests"
msgstr ""
#: website/public/showcase/dx-ball/index.html:410
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA byte results · decoded as doubles"
msgstr ""
#: website/public/showcase/dx-ball/index.html:417
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The returned bytes establish the two arithmetic constants and initial pan scale. The "
"agent now has the values needed for the C expression."
msgstr ""
#: website/public/showcase/dx-ball/index.html:425
msgctxt "page:showcase/dx-ball/index.html"
msgid "From REA's findings to C"
msgstr ""
#: website/public/showcase/dx-ball/index.html:426
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Follow the five steps below. Each selection highlights the original instructions and "
"the C lines they informed."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:436
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}01{ph1} Input"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:444
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}02{ph1} Multiply"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:452
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}03{ph1} Subtract"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:460
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}04{ph1} Scale"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/dx-ball/index.html:468
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}05{ph1} Return"
msgstr ""
#: website/public/showcase/dx-ball/index.html:480
msgctxt "page:showcase/dx-ball/index.html"
msgid "Original x86 · excerpt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:501
msgctxt "page:showcase/dx-ball/index.html"
msgid "Reconstructed C"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>[EBP+8]</code>
#. {ph3}: <code>FILD</code>
#. {ph4}: <code>x</code>
#: website/public/showcase/dx-ball/index.html:528
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result reads "
"{ph2} and uses {ph3} to load the integer. Following its caller through REA establishes"
" the screen-coordinate meaning of the C parameter {ph4}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>FMUL</code>
#. {ph3}: <code>0x420068</code>
#. {ph4}: <code>read_bytes</code>
#. {ph5}: <code>1.5625</code>
#: website/public/showcase/dx-ball/index.html:535
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The bytes returned"
" by REA's {ph4} decode to {ph5}; the C uses the same constant."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>FSUB</code>
#. {ph3}: <code>0x420070</code>
#. {ph4}: <code>500.0</code>
#. {ph5}: <code>320</code>
#: website/public/showcase/dx-ball/index.html:541
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte result "
"decodes to {ph4}, shifting the calculation's center to screen coordinate {ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>FMUL</code>
#. {ph3}: <code>0x4210a0</code>
#. {ph4}: <code>dxball_pan_scale</code>
#. {ph5}: <code>1.0</code>
#: website/public/showcase/dx-ball/index.html:547
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That global is "
"named {ph4} in the maintained source. REA's second byte read establishes its initial "
"value of {ph5}."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>0x406430</code>
#. {ph3}: <code>__ftol</code>
#. {ph4}: <code>DxBallInt</code>
#: website/public/showcase/dx-ball/index.html:554
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, identified in REA's"
" callee results. The C casts the result to {ph4}; original-x86 comparisons check the "
"returned value."
msgstr ""
#: website/public/showcase/dx-ball/index.html:563
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The assembly excerpt selects the input, arithmetic and return instructions. The full "
"listing below also includes the intervening stores and function setup and cleanup."
msgstr ""
#: website/public/showcase/dx-ball/index.html:569
msgctxt "page:showcase/dx-ball/index.html"
msgid "Full assembly and supporting evidence"
msgstr ""
#: website/public/showcase/dx-ball/index.html:572
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA result · 0x406400–0x40643e"
msgstr ""
#: website/public/showcase/dx-ball/index.html:606
msgctxt "page:showcase/dx-ball/index.html"
msgid "What the caller supplies"
msgstr ""
#. {ph0}: <code>0x411f40</code>
#: website/public/showcase/dx-ball/index.html:607
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, then pushes"
" it before the call:"
msgstr ""
#: website/public/showcase/dx-ball/index.html:621
msgctxt "page:showcase/dx-ball/index.html"
msgid "What the data reads establish"
msgstr ""
#: website/public/showcase/dx-ball/index.html:624
msgctxt "page:showcase/dx-ball/index.html"
msgid "REA byte reads, decoded as little-endian doubles"
msgstr ""
#: website/public/showcase/dx-ball/index.html:629
msgctxt "page:showcase/dx-ball/index.html"
msgid "Address"
msgstr ""
#: website/public/showcase/dx-ball/index.html:630
msgctxt "page:showcase/dx-ball/index.html"
msgid "Value"
msgstr ""
#: website/public/showcase/dx-ball/index.html:631
msgctxt "page:showcase/dx-ball/index.html"
msgid "Used for"
msgstr ""
#: website/public/showcase/dx-ball/index.html:638
msgctxt "page:showcase/dx-ball/index.html"
msgid "First multiplication"
msgstr ""
#: website/public/showcase/dx-ball/index.html:643
msgctxt "page:showcase/dx-ball/index.html"
msgid "Subtraction"
msgstr ""
#. {ph0}: <code>1.0</code>
#: website/public/showcase/dx-ball/index.html:647
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0} initially"
msgstr ""
#: website/public/showcase/dx-ball/index.html:648
msgctxt "page:showcase/dx-ball/index.html"
msgid "Stored pan scale"
msgstr ""
#: website/public/showcase/dx-ball/index.html:653
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked "
"investigation notes retain the Evidence IDs."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/src/gameplay.c#L41" >
#. {ph1}: </a >
#. {ph2}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/GAMEPLAY_OWNER.md" >
#. {ph3}: </a >
#: website/public/showcase/dx-ball/index.html:658
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence references{ph3}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:672
msgctxt "page:showcase/dx-ball/index.html"
msgid "Checking the recovered function"
msgstr ""
#: website/public/showcase/dx-ball/index.html:673
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The recovered function passes two checks: its return values match the original, and "
"its compiled bytes match the executable."
msgstr ""
#: website/public/showcase/dx-ball/index.html:679
msgctxt "page:showcase/dx-ball/index.html"
msgid "3,205 behavior cases"
msgstr ""
#: website/public/showcase/dx-ball/index.html:680
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The tests execute the original x86 function and compare its return value with the "
"maintained C. They cover every integer position from 0 to 640 at five pan scales: 0, "
"0.5, 1, 20 and −1."
msgstr ""
#: website/public/showcase/dx-ball/index.html:688
msgctxt "page:showcase/dx-ball/index.html"
msgid "63 matching bytes"
msgstr ""
#: website/public/showcase/dx-ball/index.html:689
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay matches "
"the complete function after applying the reviewed relocations and checking the "
"referenced constants."
msgstr ""
#: website/public/showcase/dx-ball/index.html:697
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 at the "
"center and 500 at the right edge. The next part of the audio work is integrating that "
"value with the game's sound backend."
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/BUILD_MATCHING.md" >
#. {ph1}: </a >
#: website/public/showcase/dx-ball/index.html:703
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}Read the compiler replay details{ph1}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:712
msgctxt "page:showcase/dx-ball/index.html"
msgid "Continue the investigation"
msgstr ""
#: website/public/showcase/dx-ball/index.html:713
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"The same approach is being used for particle updates, explosion queues and bonus "
"generation: inspect the relevant functions, recover their state and dependencies, then"
" compare the implementation with the original."
msgstr ""
#: website/public/showcase/dx-ball/index.html:719
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"To inspect the sound-pan function yourself, follow the DX-Ball project's setup "
"instructions and supply its matching original target. Then run:"
msgstr ""
#: website/public/showcase/dx-ball/index.html:726
msgctxt "page:showcase/dx-ball/index.html"
msgid "In the DX-Ball checkout"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-ball" >
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/showcase/dx-ball/index.html:740
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid "{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local setup.{ph3}"
msgstr ""
#. {ph0}: <a href="../../guides/native/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/dx-ball/index.html:745
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the same approach"
" with your own binary.{ph3}"
msgstr ""
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/ENTITIES_OWNER.md" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/dx-ball/index.html:752
#, python-brace-format
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into state, queues"
" and pixel writes.{ph3}"
msgstr ""
#: website/public/showcase/dx-ball/index.html:763
msgctxt "page:showcase/dx-ball/index.html"
msgid "Start with your own target"
msgstr ""
#: website/public/showcase/dx-ball/index.html:6
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball Reverse Engineering: Sound Panning — REA"
msgstr ""
#: website/public/showcase/dx-ball/index.html:7
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"Follow a DX-Ball reconstruction from binary analysis through REA to maintained C, "
"original-x86 tests and matching compiled function bytes."
msgstr ""
#: website/public/showcase/dx-ball/index.html:206
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball sound-pan investigation; scroll horizontally on smaller screens"
msgstr ""
#: website/public/showcase/dx-ball/index.html:212
msgctxt "page:showcase/dx-ball/index.html"
msgid ""
"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller supplies 20 "
"plus 30 times tile_x. Instructions load x, multiply by 1.5625, subtract 500.0, apply "
"pan_scale and return an integer. The maintained C is checked independently against the"
" original x86 in 3,205 cases and by VC4.0 compiler replay matching 63 bytes."
msgstr ""
#: website/public/showcase/dx-ball/index.html:230
msgctxt "page:showcase/dx-ball/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/dx-ball/index.html:239
msgctxt "page:showcase/dx-ball/index.html"
msgid "DX-Ball reconstruction case study"
msgstr ""
#: website/public/showcase/dx-ball/index.html:290
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy example prompt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:431
msgctxt "page:showcase/dx-ball/index.html"
msgid "Follow the sound-pan calculation"
msgstr ""
#: website/public/showcase/dx-ball/index.html:481
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy original assembly excerpt"
msgstr ""
#: website/public/showcase/dx-ball/index.html:502
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy sound-pan function"
msgstr ""
#: website/public/showcase/dx-ball/index.html:573
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy complete sound-pan assembly"
msgstr ""
#: website/public/showcase/dx-ball/index.html:727
msgctxt "page:showcase/dx-ball/index.html"
msgid "Copy DX-Ball analysis command"
msgstr ""
#: website/public/showcase/dx-ball/index.html:785
msgctxt "page:showcase/dx-ball/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/index.html:103
msgctxt "page:showcase/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../">
#. {ph1}: </a>
#: website/public/showcase/index.html:194
#, python-brace-format
msgctxt "page:showcase/index.html"
msgid "{ph0}Home{ph1} / Showcases"
msgstr ""
#: website/public/showcase/index.html:195
msgctxt "page:showcase/index.html"
msgid "REA case studies."
msgstr ""
#: website/public/showcase/index.html:196
msgctxt "page:showcase/index.html"
msgid ""
"Android, games, Electron and a CTF challenge, with code, figures and checked results."
msgstr ""
#: website/public/showcase/index.html:203
msgctxt "page:showcase/index.html"
msgid "Android · APK analysis"
msgstr ""
#: website/public/showcase/index.html:205
msgctxt "page:showcase/index.html"
msgid "How an authenticator generates a login code"
msgstr ""
#: website/public/showcase/index.html:206
msgctxt "page:showcase/index.html"
msgid ""
"Find Aegis's six-digit code calculation in its released APK. Trace the generating "
"methods with REA, then move a demo clock to see why the code changes every 30 seconds."
msgstr ""
#: website/public/showcase/index.html:212
msgctxt "page:showcase/index.html"
msgid "APK"
msgstr ""
#: website/public/showcase/index.html:213
msgctxt "page:showcase/index.html"
msgid "Generating code"
msgstr ""
#: website/public/showcase/index.html:214
msgctxt "page:showcase/index.html"
msgid "Recovered rule"
msgstr ""
#: website/public/showcase/index.html:215
msgctxt "page:showcase/index.html"
msgid "Adjustable clock"
msgstr ""
#: website/public/showcase/index.html:217
msgctxt "page:showcase/index.html"
msgid "Read the Android case study"
msgstr ""
#: website/public/showcase/index.html:221
msgctxt "page:showcase/index.html"
msgid "CTF · Native analysis"
msgstr ""
#: website/public/showcase/index.html:223
msgctxt "page:showcase/index.html"
msgid "Solve a CTF flag checker"
msgstr ""
#: website/public/showcase/index.html:224
msgctxt "page:showcase/index.html"
msgid ""
"Inspect an easy DownUnderCTF challenge with REA. Find its checking functions, turn "
"masks and sums into equations, then verify the solved flag with the original program."
msgstr ""
#: website/public/showcase/index.html:230
msgctxt "page:showcase/index.html"
msgid "Binary"
msgstr ""
#: website/public/showcase/index.html:231
msgctxt "page:showcase/index.html"
msgid "Checking code"
msgstr ""
#: website/public/showcase/index.html:232
msgctxt "page:showcase/index.html"
msgid "Equations"
msgstr ""
#: website/public/showcase/index.html:233
msgctxt "page:showcase/index.html"
msgid "Correct!"
msgstr ""
#: website/public/showcase/index.html:235
msgctxt "page:showcase/index.html"
msgid "Read the CTF case study"
msgstr ""
#: website/public/showcase/index.html:239
msgctxt "page:showcase/index.html"
msgid "Native · Reconstruction"
msgstr ""
#: website/public/showcase/index.html:241
msgctxt "page:showcase/index.html"
msgid "DX-Ball's sound-pan calculation"
msgstr ""
#: website/public/showcase/index.html:242
msgctxt "page:showcase/index.html"
msgid ""
"Recover a sound-pan calculation from a 1996 Windows game. REA's instructions, caller "
"references and numeric constants lead to a small C function, checked against the "
"original behavior and all 63 compiled bytes."
msgstr ""
#: website/public/showcase/index.html:249
msgctxt "page:showcase/index.html"
msgid "Executable"
msgstr ""
#: website/public/showcase/index.html:250
msgctxt "page:showcase/index.html"
msgid "REA findings"
msgstr ""
#: website/public/showcase/index.html:251
msgctxt "page:showcase/index.html"
msgid "Recovered C"
msgstr ""
#: website/public/showcase/index.html:252
msgctxt "page:showcase/index.html"
msgid "Validation"
msgstr ""
#: website/public/showcase/index.html:254
msgctxt "page:showcase/index.html"
msgid "Read the DX-Ball case study"
msgstr ""
#: website/public/showcase/index.html:258
msgctxt "page:showcase/index.html"
msgid "Electron · Feature tracing"
msgstr ""
#: website/public/showcase/index.html:260
msgctxt "page:showcase/index.html"
msgid "How Notion copies text and HTML"
msgstr ""
#: website/public/showcase/index.html:261
msgctxt "page:showcase/index.html"
msgid ""
"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC wrappers "
"to the system clipboard, then see how a small HTML marker keeps rich block data "
"connected to a copy."
msgstr ""
#: website/public/showcase/index.html:267
msgctxt "page:showcase/index.html"
msgid "Packaged app"
msgstr ""
#: website/public/showcase/index.html:268
msgctxt "page:showcase/index.html"
msgid "Exposed API"
msgstr ""
#: website/public/showcase/index.html:269
msgctxt "page:showcase/index.html"
msgid "IPC wrappers"
msgstr ""
#: website/public/showcase/index.html:270
msgctxt "page:showcase/index.html"
msgid "Clipboard"
msgstr ""
#: website/public/showcase/index.html:272
msgctxt "page:showcase/index.html"
msgid "Read the Notion case study"
msgstr ""
#: website/public/showcase/index.html:276
msgctxt "page:showcase/index.html"
msgid "PC-98 DOS · Reconstruction"
msgstr ""
#: website/public/showcase/index.html:278
msgctxt "page:showcase/index.html"
msgid "How TH04 aims a ring of bullets"
msgstr ""
#: website/public/showcase/index.html:279
msgctxt "page:showcase/index.html"
msgid ""
"Inspect the original 16-bit angle helper with REA. Match its multiply, divide and "
"coordinate operations to readable C++, then see how they produce a ring aimed at the "
"player."
msgstr ""
#: website/public/showcase/index.html:285
msgctxt "page:showcase/index.html"
msgid "Original DOS code"
msgstr ""
#: website/public/showcase/index.html:286
msgctxt "page:showcase/index.html"
msgid "REA instructions"
msgstr ""
#: website/public/showcase/index.html:287
msgctxt "page:showcase/index.html"
msgid "Angle calculation"
msgstr ""
#: website/public/showcase/index.html:288
msgctxt "page:showcase/index.html"
msgid "Bullet ring"
msgstr ""
#: website/public/showcase/index.html:290
msgctxt "page:showcase/index.html"
msgid "Read the TH04 case study"
msgstr ""
#: website/public/showcase/index.html:295
msgctxt "page:showcase/index.html"
msgid "Step-by-step guides"
msgstr ""
#: website/public/showcase/index.html:296
msgctxt "page:showcase/index.html"
msgid ""
"The guides walk through a native calculation, an Electron export and a browser "
"request. Each starts with a prompt and a concrete target."
msgstr ""
#: website/public/showcase/index.html:300
msgctxt "page:showcase/index.html"
msgid "Read the guides"
msgstr ""
#: website/public/showcase/index.html:6
msgctxt "page:showcase/index.html"
msgid "Reverse Engineering Case Studies — REA"
msgstr ""
#: website/public/showcase/index.html:7
msgctxt "page:showcase/index.html"
msgid ""
"Follow REA investigations through code, figures and demos: an Android authenticator, "
"DX-Ball, Notion, TH04 and a DownUnderCTF flag checker."
msgstr ""
#: website/public/showcase/index.html:317
msgctxt "page:showcase/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/notion/index.html:103
msgctxt "page:showcase/notion/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/notion/index.html:194
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion"
msgstr ""
#: website/public/showcase/notion/index.html:197
msgctxt "page:showcase/notion/index.html"
msgid "Case study · Electron"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/notion/index.html:198
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "How Notion copies{ph0}text and HTML."
msgstr ""
#: website/public/showcase/notion/index.html:199
msgctxt "page:showcase/notion/index.html"
msgid ""
"Trace a clipboard call from Notion's page API, through the preload and main process, "
"to Electron's clipboard writer."
msgstr ""
#: website/public/showcase/notion/index.html:203
msgctxt "page:showcase/notion/index.html"
msgid "Notion Desktop 7.6.1 · JavaScript · REA"
msgstr ""
#: website/public/showcase/notion/index.html:207
msgctxt "page:showcase/notion/index.html"
msgid "The bridge inside Notion's desktop package"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>clipboard.write(data)</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:209
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a callable "
"method.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>ipcRenderer.invoke</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:216
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the channel and "
"arguments.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>ipcMain.handle</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:223
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks which "
"page sent it.{ph6}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span>
#. {ph2}: <span class="flow-node">
#. {ph3}: <code>clipboard.write(data)</code>
#. {ph4}: </span>
#. {ph5}: <span class="flow-note" >
#. {ph6}: </span >
#: website/public/showcase/notion/index.html:230
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the supplied text"
" and HTML.{ph6}"
msgstr ""
#. {ph0}: <code class="notion-channel">notion:clipboard:write</code>
#: website/public/showcase/notion/index.html:238
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "One channel joins the two sides: {ph0}"
msgstr ""
#: website/public/showcase/notion/index.html:242
msgctxt "page:showcase/notion/index.html"
msgid ""
"The packaged code uses the same channel in the preload and main process. Resolving the"
" wrappers reveals the Electron calls behind those names."
msgstr ""
#: website/public/showcase/notion/index.html:251
msgctxt "page:showcase/notion/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#clipboard">
#. {ph1}: </a>
#: website/public/showcase/notion/index.html:253
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Follow the clipboard bridge{ph1}"
msgstr ""
#. {ph0}: <a href="#rich-clipboard">
#. {ph1}: </a>
#: website/public/showcase/notion/index.html:254
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}Keeping a block's structure{ph1}"
msgstr ""
#. {ph0}: <a href="#continue">
#. {ph1}: </a>
#: website/public/showcase/notion/index.html:255
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}More examples and sources{ph1}"
msgstr ""
#: website/public/showcase/notion/index.html:260
msgctxt "page:showcase/notion/index.html"
msgid "Where does the copy operation go?"
msgstr ""
#. {ph0}: <code>clipboard.write</code>
#: website/public/showcase/notion/index.html:261
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The page sees a method called {ph0}. Its implementation in the preload is a wrapper. "
"The useful question is what that wrapper sends, and which code receives it."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/notion/index.html:268
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/notion/index.html:272
#: website/public/showcase/notion/index.html:345
#: website/public/showcase/notion/index.html:374
#: website/public/showcase/notion/index.html:405
#: website/public/showcase/notion/index.html:433
msgctxt "page:showcase/notion/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="notion-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/notion/index.html:281
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the system "
"clipboard. Show the code at each step.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/notion/index.html:289
msgctxt "page:showcase/notion/index.html"
msgid ""
"An example prompt with Notion's local application package available to your coding "
"agent."
msgstr ""
#: website/public/showcase/notion/index.html:294
msgctxt "page:showcase/notion/index.html"
msgid "REA finds where to start reading"
msgstr ""
#: website/public/showcase/notion/index.html:295
msgctxt "page:showcase/notion/index.html"
msgid ""
"Analyzing the tab preload with REA locates the API exposed to the page and the call "
"that sends an IPC request. Both findings come with source ranges in the minified "
"bundle:"
msgstr ""
#: website/public/showcase/notion/index.html:301
msgctxt "page:showcase/notion/index.html"
msgid "REA findings → two places to open"
msgstr ""
#: website/public/showcase/notion/index.html:304
msgctxt "page:showcase/notion/index.html"
msgid "Exposed page API"
msgstr ""
#: website/public/showcase/notion/index.html:310
msgctxt "page:showcase/notion/index.html"
msgid "Renderer IPC call"
msgstr ""
#. {ph0}: <code>analyze_javascript_application</code>
#: website/public/showcase/notion/index.html:316
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded with REA "
"4.1.0. Positions use the original bundle's line and zero-based column."
msgstr ""
#. {ph0}: <code>invokerInMain</code>
#. {ph1}: <code class="notion-channel">notion:clipboard:write</code>
#: website/public/showcase/notion/index.html:323
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The agent opens those locations, finds the clipboard member in the assembled API, and "
"reads {ph0}. Its call site supplies {ph1}. That name gives the agent something precise"
" to look for in the main bundle. The four excerpts below show the route it connects."
msgstr ""
#: website/public/showcase/notion/index.html:332
msgctxt "page:showcase/notion/index.html"
msgid "Four short pieces of code"
msgstr ""
#: website/public/showcase/notion/index.html:333
msgctxt "page:showcase/notion/index.html"
msgid ""
"Simplified from the packaged JavaScript, with readable variable names. Unrelated "
"members are omitted."
msgstr ""
#: website/public/showcase/notion/index.html:339
msgctxt "page:showcase/notion/index.html"
msgid "Start at the API exposed to the page"
msgstr ""
#. {ph0}: <span translate="no">preload.js</span>
#: website/public/showcase/notion/index.html:342
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "tab_browser_view/{ph0} · API member"
msgstr ""
#. {ph0}: <code>invokerInMain</code>
#: website/public/showcase/notion/index.html:361
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"This member supplies the channel name. The implementation of {ph0} tells us how the "
"request leaves the page's process."
msgstr ""
#: website/public/showcase/notion/index.html:368
msgctxt "page:showcase/notion/index.html"
msgid "Resolve the preload's wrapper"
msgstr ""
#. {ph0}: <span translate="no">preload.js</span>
#: website/public/showcase/notion/index.html:371
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "tab_browser_view/{ph0} · IPC helper"
msgstr ""
#. {ph0}: <code class="notion-channel">notion:clipboard:write</code>
#: website/public/showcase/notion/index.html:391
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The returned function forwards the arguments through Electron's request-and-response "
"IPC. We can now look for {ph0} on the main-process side."
msgstr ""
#: website/public/showcase/notion/index.html:399
msgctxt "page:showcase/notion/index.html"
msgid "Check how the receiver is registered"
msgstr ""
#. {ph0}: <span translate="no">index.js</span>
#: website/public/showcase/notion/index.html:402
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "main/{ph0} · handler helper"
msgstr ""
#. {ph0}: <code>addListener</code>
#. {ph1}: <code>ipcMain.handle</code>
#: website/public/showcase/notion/index.html:420
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The main process uses another wrapper. Its {ph0} method registers an {ph1} receiver "
"for that channel."
msgstr ""
#: website/public/showcase/notion/index.html:427
msgctxt "page:showcase/notion/index.html"
msgid "Find the write and its sender check"
msgstr ""
#. {ph0}: <span translate="no">index.js</span>
#: website/public/showcase/notion/index.html:430
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid "main/{ph0} · clipboard receiver"
msgstr ""
#: website/public/showcase/notion/index.html:450
msgctxt "page:showcase/notion/index.html"
msgid ""
"This is the destination. After checking the sender, the handler passes the supplied "
"data to Electron's clipboard API. The channel and the two resolved wrappers connect "
"the exposed method to this call."
msgstr ""
#: website/public/showcase/notion/index.html:461
msgctxt "page:showcase/notion/index.html"
msgid "How does a copied block keep its structure?"
msgstr ""
#. {ph0}: <code>electronApi.clipboard.write</code>
#: website/public/showcase/notion/index.html:462
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"Notion's web editor sends text and HTML through {ph0}. It keeps the block data locally"
" and puts an ID in the copied HTML to connect them."
msgstr ""
#: website/public/showcase/notion/index.html:468
msgctxt "page:showcase/notion/index.html"
msgid "HTML links to saved block data"
msgstr ""
#: website/public/showcase/notion/index.html:472
msgctxt "page:showcase/notion/index.html"
msgid "Sent to the system clipboard"
msgstr ""
#: website/public/showcase/notion/index.html:480
msgctxt "page:showcase/notion/index.html"
msgid "Saved locally by Notion"
msgstr ""
#: website/public/showcase/notion/index.html:492
msgctxt "page:showcase/notion/index.html"
msgid "Read the HTML ID"
msgstr ""
#: website/public/showcase/notion/index.html:493
msgctxt "page:showcase/notion/index.html"
msgid "Find the same local ID"
msgstr ""
#: website/public/showcase/notion/index.html:494
msgctxt "page:showcase/notion/index.html"
msgid "Restore Notion block data"
msgstr ""
#: website/public/showcase/notion/index.html:496
msgctxt "page:showcase/notion/index.html"
msgid ""
"Illustrative text and ID. The recorded module test restores the block data when IDs "
"match; a stale entry returns only text and HTML."
msgstr ""
#: website/public/showcase/notion/index.html:502
msgctxt "page:showcase/notion/index.html"
msgid ""
"On paste, Notion looks for the HTML ID and checks it against the saved copy. Matching "
"IDs restore the block data."
msgstr ""
#: website/public/showcase/notion/index.html:506
msgctxt "page:showcase/notion/index.html"
msgid "Clipboard format recorded from web assets cached on July 13, 2026."
msgstr ""
#: website/public/showcase/notion/index.html:512
msgctxt "page:showcase/notion/index.html"
msgid "More examples and sources"
msgstr ""
#: website/public/showcase/notion/index.html:514
msgctxt "page:showcase/notion/index.html"
msgid "Another example: Markdown tables"
msgstr ""
#: website/public/showcase/notion/index.html:515
msgctxt "page:showcase/notion/index.html"
msgid ""
"Notion parses Markdown into block data. This example shows how a table becomes header "
"and data rows."
msgstr ""
#: website/public/showcase/notion/index.html:520
msgctxt "page:showcase/notion/index.html"
msgid "A table through Notion's Markdown parser"
msgstr ""
#: website/public/showcase/notion/index.html:525
msgctxt "page:showcase/notion/index.html"
msgid "Markdown input"
msgstr ""
#: website/public/showcase/notion/index.html:532
msgctxt "page:showcase/notion/index.html"
msgid "Structured parser output · excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:541
msgctxt "page:showcase/notion/index.html"
msgid ""
"Recorded output from an extracted Markdown parser. The table becomes rows and cells."
msgstr ""
#: website/public/showcase/notion/index.html:548
msgctxt "page:showcase/notion/index.html"
msgid "Another path: the offline SQLite connection"
msgstr ""
#. {ph0}: <code>getSqliteMeta</code>
#: website/public/showcase/notion/index.html:549
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"Notion's renderer requests {ph0} through IPC. The main process creates a message "
"channel and gives one port to the renderer and the other to a SQLite utility process. "
"Subsequent statement batches and results travel over that port."
msgstr ""
#: website/public/showcase/notion/index.html:555
msgctxt "page:showcase/notion/index.html"
msgid ""
"Following this handoff explains where the database work runs, and why tracing only the"
" initial IPC request misses the later conversation."
msgstr ""
#: website/public/showcase/notion/index.html:562
msgctxt "page:showcase/notion/index.html"
msgid "Sources and how to read the excerpts"
msgstr ""
#. {ph0}: <code>app.asar</code>
#. {ph1}: <code>main/index.js</code>
#. {ph2}: <code>isNotionWebContents</code>
#: website/public/showcase/notion/index.html:563
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab preload and "
"{ph1}. The excerpts expand minified variable names and omit unrelated code; the "
"sender-check helper is shown with its underlying {ph2} call."
msgstr ""
#. {ph0}: <code>747001</code>
#. {ph1}: <code>58169</code>
#. {ph2}: <code>736810</code>
#. {ph3}: <code>422457</code>
#: website/public/showcase/notion/index.html:571
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The virtual clipboard and Markdown examples come from web assets cached on July 13, "
"2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets have their own "
"version. Saved probes executed extracted modules and small harnesses; their outputs "
"describe those probes rather than a captured desktop UI session."
msgstr ""
#: website/public/showcase/notion/index.html:579
msgctxt "page:showcase/notion/index.html"
msgid ""
"The REA result shown here is a focused analysis of the saved tab preload, recorded "
"with the published REA 4.1.0 package. It locates the API and invoke operation. The "
"clipboard member and matching receiver are connected by reading their wrapper "
"implementations in the package."
msgstr ""
#. {ph0}: <code>422457</code>
#: website/public/showcase/notion/index.html:586
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"The Markdown example uses parser module {ph0}. Saved module tests show that both page "
"and chat filters preserve this table. The paste/import, structured Markdown and "
"AI/chat parsers have separate entry points and intermediate formats."
msgstr ""
#. {ph0}: <a href="../../guides/javascript/" >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/notion/index.html:594
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron application's "
"export feature.{ph3}"
msgstr ""
#. {ph0}: <a href="../dx-ball/">
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/notion/index.html:601
#, python-brace-format
msgctxt "page:showcase/notion/index.html"
msgid ""
"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked C "
"function.{ph3}"
msgstr ""
#: website/public/showcase/notion/index.html:609
msgctxt "page:showcase/notion/index.html"
msgid "Analyze your own app"
msgstr ""
#: website/public/showcase/notion/index.html:6
msgctxt "page:showcase/notion/index.html"
msgid "Notion Electron Reverse Engineering: Clipboard — REA"
msgstr ""
#: website/public/showcase/notion/index.html:7
msgctxt "page:showcase/notion/index.html"
msgid ""
"Follow Notion's clipboard API through Electron's preload, IPC wrappers and main "
"process, with short code excerpts and a look at its rich clipboard format."
msgstr ""
#: website/public/showcase/notion/index.html:250
msgctxt "page:showcase/notion/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/notion/index.html:258
msgctxt "page:showcase/notion/index.html"
msgid "Notion Electron case study"
msgstr ""
#: website/public/showcase/notion/index.html:272
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion analysis prompt"
msgstr ""
#: website/public/showcase/notion/index.html:345
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion preload excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:374
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion invoke wrapper excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:405
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion handler wrapper excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:433
msgctxt "page:showcase/notion/index.html"
msgid "Copy Notion clipboard receiver excerpt"
msgstr ""
#: website/public/showcase/notion/index.html:488
msgctxt "page:showcase/notion/index.html"
msgid "Restoring rich clipboard data on paste"
msgstr ""
#: website/public/showcase/notion/index.html:631
msgctxt "page:showcase/notion/index.html"
msgid "Back to top"
msgstr ""
#: website/public/showcase/th04/index.html:103
msgctxt "page:showcase/th04/index.html"
msgid "Skip to content"
msgstr ""
#. {ph0}: <a href="../../">
#. {ph1}: </a>
#. {ph2}: <a href="../">
#. {ph3}: </a>
#: website/public/showcase/th04/index.html:194
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04"
msgstr ""
#: website/public/showcase/th04/index.html:197
msgctxt "page:showcase/th04/index.html"
msgid "Case study · Touhou 4: Lotus Land Story"
msgstr ""
#. {ph0}: <br />
#: website/public/showcase/th04/index.html:198
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Reconstructing TH04's{ph0}bullet patterns."
msgstr ""
#: website/public/showcase/th04/index.html:199
msgctxt "page:showcase/th04/index.html"
msgid ""
"A ring of bullets starts with a short angle calculation. Use REA to inspect the "
"original DOS function, then follow its instructions into readable C++."
msgstr ""
#: website/public/showcase/th04/index.html:204
msgctxt "page:showcase/th04/index.html"
msgid "PC-98 · 16-bit DOS · C++ and assembly"
msgstr ""
#: website/public/showcase/th04/index.html:205
msgctxt "page:showcase/th04/index.html"
msgid "View the TH04 reconstruction"
msgstr ""
#: website/public/showcase/th04/index.html:211
msgctxt "page:showcase/th04/index.html"
msgid "From original instructions to checked source"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:213
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and its "
"bullet-angle helper.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:220
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + references{ph3}{ph4}Verify the "
"loaded DOS code and read the angle calculation from the executable.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:228
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each operation "
"to the maintained reconstruction.{ph5}"
msgstr ""
#. {ph0}: <span class="flow-label">
#. {ph1}: </span >
#. {ph2}: <strong class="flow-node">
#. {ph3}: </strong >
#. {ph4}: <span class="flow-note" >
#. {ph5}: </span >
#: website/public/showcase/th04/index.html:235
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded compiler "
"checks cover the bullet-generation code that contains this helper.{ph5}"
msgstr ""
#: website/public/showcase/th04/index.html:244
msgctxt "page:showcase/th04/index.html"
msgid ""
"REA returns the original code and its analysis evidence. The TH04 project supplies the"
" maintained source and compiler checks."
msgstr ""
#: website/public/showcase/th04/index.html:252
msgctxt "page:showcase/th04/index.html"
msgid "In this case study"
msgstr ""
#. {ph0}: <a href="#ring">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:254
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}The bullet ring{ph1}"
msgstr ""
#. {ph0}: <a href="#rea">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:255
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}What REA returns{ph1}"
msgstr ""
#. {ph0}: <a href="#source">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:256
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Assembly to C++{ph1}"
msgstr ""
#. {ph0}: <a href="#checking">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:257
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Checking the source{ph1}"
msgstr ""
#. {ph0}: <a href="#project">
#. {ph1}: </a>
#: website/public/showcase/th04/index.html:258
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}The full project{ph1}"
msgstr ""
#: website/public/showcase/th04/index.html:263
msgctxt "page:showcase/th04/index.html"
msgid "How a ring aims at the player"
msgstr ""
#: website/public/showcase/th04/index.html:264
msgctxt "page:showcase/th04/index.html"
msgid ""
"Elly's attack requests an aimed ring with an initial count of 16. One helper "
"calculates the direction of each bullet. The same ring can face a fixed direction or "
"turn toward the player."
msgstr ""
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
#. {ph1}: <i>
#. {ph2}: </i>
#. {ph3}: <i>
#. {ph4}: </i>
#. {ph5}: <i>
#. {ph6}: </i>
#. {ph7}: </span >
#: website/public/showcase/th04/index.html:271
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
msgstr ""
#: website/public/showcase/th04/index.html:276
#: website/public/showcase/th04/index.html:332
#: website/public/showcase/th04/index.html:509
#: website/public/showcase/th04/index.html:543
msgctxt "page:showcase/th04/index.html"
msgid "Copy"
msgstr ""
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
#. {ph1}: </span >
#. {ph2}: <span id="th04-prompt" >
#. {ph3}: </span >
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
#. {ph5}: </span>
#: website/public/showcase/th04/index.html:285
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims it at the "
"player. Explain the calculation and show the code.{ph3}{ph4}{ph5}"
msgstr ""
#: website/public/showcase/th04/index.html:294
msgctxt "page:showcase/th04/index.html"
msgid ""
"An example prompt, with the original executable and reconstruction checkout available "
"locally."
msgstr ""
#. {ph0}: <code>0, 16, 32, …, 240</code>
#: website/public/showcase/th04/index.html:298
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each index adds "
"16 units: {ph0}. Adding the player's direction rotates those positions together."
msgstr ""
#. {ph0}: <a href="../../assets/figures/th04-bullet-ring.svg" >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:318
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"An illustration of the recovered angle math for count 16, player direction 40 and "
"template rotation 0. {ph0}Open figure{ph1}"
msgstr ""
#: website/public/showcase/th04/index.html:326
msgctxt "page:showcase/th04/index.html"
msgid "The firing template in the recovered source"
msgstr ""
#: website/public/showcase/th04/index.html:331
msgctxt "page:showcase/th04/index.html"
msgid "Elly's ring attack · source excerpt"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/boss/elly_phase_ring16.cpp#L26"
#. >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:346
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"These lines select the pattern before difficulty and performance tuning. {ph0}Read the"
" attack's source{ph1}."
msgstr ""
#: website/public/showcase/th04/index.html:357
msgctxt "page:showcase/th04/index.html"
msgid "What REA returns"
msgstr ""
#. {ph0}: <code>bullet_velocity_and_angle_set()</code>
#: website/public/showcase/th04/index.html:358
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"We inspect {ph0}, the function that sets each bullet's velocity and angle. REA returns"
" its instructions, pseudocode and references. Three parts of that result explain the "
"pattern."
msgstr ""
#: website/public/showcase/th04/index.html:366
msgctxt "page:showcase/th04/index.html"
msgid "Check the DOS image before reading its code"
msgstr ""
#: website/public/showcase/th04/index.html:369
msgctxt "page:showcase/th04/index.html"
msgid "Agent → REA"
msgstr ""
#: website/public/showcase/th04/index.html:378
msgctxt "page:showcase/th04/index.html"
msgid "REA → agent · selected fields"
msgstr ""
#: website/public/showcase/th04/index.html:387
msgctxt "page:showcase/th04/index.html"
msgid ""
"The check ties the loaded code and relocation records to the supplied executable. The "
"path above is shortened for display."
msgstr ""
#: website/public/showcase/th04/index.html:393
msgctxt "page:showcase/th04/index.html"
msgid "Read the ring's multiply and divide"
msgstr ""
#. {ph0}: <code>analyze_function</code>
#: website/public/showcase/th04/index.html:397
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Agent → REA · {ph0}"
msgstr ""
#: website/public/showcase/th04/index.html:403
msgctxt "page:showcase/th04/index.html"
msgid "REA → agent · instruction excerpt"
msgstr ""
#. {ph0}: <code>SI</code>
#. {ph1}: <code>DS:53AF</code>
#. {ph2}: <code>bullet_template.count</code>
#: website/public/showcase/th04/index.html:411
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0} holds the bullet index. The shift multiplies it by 256, then the division uses "
"the count read from {ph1}. The maintained source names that field {ph2}. The complete "
"sequence appears below."
msgstr ""
#: website/public/showcase/th04/index.html:420
msgctxt "page:showcase/th04/index.html"
msgid "Find where the pattern turns toward the player"
msgstr ""
#: website/public/showcase/th04/index.html:424
msgctxt "page:showcase/th04/index.html"
msgid "Same function result · aim excerpt"
msgstr ""
#: website/public/showcase/th04/index.html:433
msgctxt "page:showcase/th04/index.html"
msgid "Corresponding maintained C++"
msgstr ""
#: website/public/showcase/th04/index.html:441
msgctxt "page:showcase/th04/index.html"
msgid ""
"The instruction operands expose two coordinate differences and a direction helper. Its"
" return value is added to the relative ring angle. Source names make those addresses "
"readable; REA lets the agent check the original operations behind them."
msgstr ""
#: website/public/showcase/th04/index.html:452
msgctxt "page:showcase/th04/index.html"
msgid "From assembly to readable C++"
msgstr ""
#: website/public/showcase/th04/index.html:453
msgctxt "page:showcase/th04/index.html"
msgid ""
"Select a step to match the original instructions with the angle calculation. This "
"summary follows the aimed-ring path; the full source also handles spreads, stacks and "
"random patterns."
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:464
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}01{ph1} Index"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:472
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}02{ph1} Space"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:480
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}03{ph1} Aim"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:488
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}04{ph1} Rotate"
msgstr ""
#. {ph0}: <span>
#. {ph1}: </span>
#: website/public/showcase/th04/index.html:496
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}05{ph1} Store"
msgstr ""
#: website/public/showcase/th04/index.html:508
msgctxt "page:showcase/th04/index.html"
msgid "REA · original 16-bit instructions"
msgstr ""
#: website/public/showcase/th04/index.html:542
msgctxt "page:showcase/th04/index.html"
msgid "Readable C++ · aimed-ring summary"
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>SI</code>
#: website/public/showcase/th04/index.html:571
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into {ph2}. In a "
"16-bullet ring, this member index runs from 0 through 15."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>SHL AX,8</code>
#. {ph3}: <code>IDIV</code>
#: website/public/showcase/th04/index.html:576
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by 256. The "
"count is zero-extended into a word, then {ph3} divides the product by that count. For "
"count 16, each index advances 16 angle units."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>AX</code>
#: website/public/showcase/th04/index.html:583
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-minus-origin"
" coordinates. The direction helper returns an angle in {ph2}; adding it turns the "
"whole ring toward the player."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>ADD AL,[0x53ad]</code>
#: website/public/showcase/th04/index.html:589
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. Elly's "
"initial template sets it to zero; other patterns can use the same helper with a "
"rotation."
msgstr ""
#. {ph0}: <strong>
#. {ph1}: </strong>
#. {ph2}: <code>AL</code>
#: website/public/showcase/th04/index.html:595
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to the spawn-"
"angle field. Values wrap after 255, just as the unsigned-byte cast does. The "
"surrounding source also converts this angle and speed into velocity."
msgstr ""
#: website/public/showcase/th04/index.html:604
msgctxt "page:showcase/th04/index.html"
msgid ""
"The assembly selects the aimed-ring branch, aim calculation and final store. The C++ "
"above is a readable summary. Compiler checks below apply to the maintained source in "
"the linked project."
msgstr ""
#: website/public/showcase/th04/index.html:610
msgctxt "page:showcase/th04/index.html"
msgid "Read the maintained ring and aim source"
msgstr ""
#: website/public/showcase/th04/index.html:613
msgctxt "page:showcase/th04/index.html"
msgid "Ring macro · TH04 branch, excerpt"
msgstr ""
#: website/public/showcase/th04/index.html:623
msgctxt "page:showcase/th04/index.html"
msgid "Angle and velocity · source excerpt"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add_impl.hpp#L4"
#. >
#. {ph1}: </a >
#. {ph2}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add.cpp#L422"
#. >
#. {ph3}: </a >
#. {ph4}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/types.hpp#L6"
#. >
#. {ph5}: </a >
#: website/public/showcase/th04/index.html:639
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle "
"representation{ph5}"
msgstr ""
#: website/public/showcase/th04/index.html:659
msgctxt "page:showcase/th04/index.html"
msgid "Checking the maintained source"
msgstr ""
#: website/public/showcase/th04/index.html:660
msgctxt "page:showcase/th04/index.html"
msgid ""
"The TH04 project's recorded checks compile the bullet-generation code, including this "
"helper, with its pinned Turbo C++ 4.0J toolchain."
msgstr ""
#: website/public/showcase/th04/index.html:667
msgctxt "page:showcase/th04/index.html"
msgid "2,139 matching bytes"
msgstr ""
#: website/public/showcase/th04/index.html:668
msgctxt "page:showcase/th04/index.html"
msgid ""
"The compiled bullet-generation code matches a 2,139-byte section of the original "
"executable."
msgstr ""
#: website/public/showcase/th04/index.html:674
msgctxt "page:showcase/th04/index.html"
msgid "Two clean builds"
msgstr ""
#: website/public/showcase/th04/index.html:675
msgctxt "page:showcase/th04/index.html"
msgid ""
"Two separate builds produce the same matching bytes. The recorded input hashes match "
"the maintained source shown here."
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/reconstruction/product/TH04_SEMANTIC_BULLET_GENERATION_V1236.md#validation"
#. >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:681
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}."
msgstr ""
#: website/public/showcase/th04/index.html:689
msgctxt "page:showcase/th04/index.html"
msgid "Target identity and analysis scope"
msgstr ""
#: website/public/showcase/th04/index.html:694
msgctxt "page:showcase/th04/index.html"
msgid "Original target"
msgstr ""
#. {ph0}: <code>MAIN.EXE</code>
#: website/public/showcase/th04/index.html:695
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}, 156,258 bytes, DOS MZ"
msgstr ""
#: website/public/showcase/th04/index.html:698
msgctxt "page:showcase/th04/index.html"
msgid "Helper entry"
msgstr ""
#. {ph0}: <code>0x2cfc8</code>
#: website/public/showcase/th04/index.html:699
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0} in REA's loaded image"
msgstr ""
#: website/public/showcase/th04/index.html:702
msgctxt "page:showcase/th04/index.html"
msgid "Original file offset"
msgstr ""
#. {ph0}: <code>0x1e7c8</code>
#. {ph1}: <code>address_to_file_offset</code>
#: website/public/showcase/th04/index.html:703
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}, returned by {ph1}"
msgstr ""
#: website/public/showcase/th04/index.html:709
msgctxt "page:showcase/th04/index.html"
msgid "Recorded code inspection"
msgstr ""
#: website/public/showcase/th04/index.html:710
msgctxt "page:showcase/th04/index.html"
msgid "REA 4.1.0 · 7 October 2026"
msgstr ""
#: website/public/showcase/th04/index.html:715
msgctxt "page:showcase/th04/index.html"
msgid ""
"Compiler checks cover the complete bullet-add code section, including this helper. "
"They also compare its MAP contribution and overlapping relocation."
msgstr ""
#. {ph0}: <code>0x1000</code>
#: website/public/showcase/th04/index.html:720
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"REA verified the static DOS load image at load segment {ph0}. Its addresses describe "
"that analysis image. The function result reports 503 body bytes in two ranges across a"
" 517-byte span; the selected instructions above lie in those reported ranges."
msgstr ""
#. {ph0}: <code>0d72e980</code>
#: website/public/showcase/th04/index.html:727
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"The source names and compiler checks come from TH04 checkpoint {ph0}. Earlier "
"reconstruction observations used the project's own analysis scripts; this page adds a "
"fresh REA inspection of the same original target. The supplied game's identity is "
"pinned by its repository manifest, with independent pristine-dump provenance still "
"open."
msgstr ""
#: website/public/showcase/th04/index.html:735
msgctxt "page:showcase/th04/index.html"
msgid ""
"The figure illustrates the angle calculation. Full-game controls, timing and PC-98 "
"hardware behavior have separate runtime checks in the reconstruction project."
msgstr ""
#: website/public/showcase/th04/index.html:744
msgctxt "page:showcase/th04/index.html"
msgid "The full TH04 reconstruction"
msgstr ""
#: website/public/showcase/th04/index.html:745
msgctxt "page:showcase/th04/index.html"
msgid ""
"The project builds the game's four DOS products from maintained C++ and assembly. "
"Beyond bullet generation, the source covers stages, bosses, rendering, input, menus, "
"endings and score handling."
msgstr ""
#. {ph0}: <a class="text-link" href="https://github.com/N0zoM1z0/th04" >
#. {ph1}: </a >
#: website/public/showcase/th04/index.html:751
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid "{ph0}Explore the TH04 repository{ph1}"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add.cpp#L292"
#. >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/th04/index.html:757
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern types and "
"template tuning.{ph3}"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/DOS_BUILD.md"
#. >
#. {ph1}: </a >
#. {ph2}: <span >
#. {ph3}: </span >
#: website/public/showcase/th04/index.html:766
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the project's "
"PC-98 emulator workflow.{ph3}"
msgstr ""
#. {ph0}: <a
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/RE_HANDOFF.md"
#. >
#. {ph1}: </a >
#. {ph2}: <span>
#. {ph3}: </span>
#: website/public/showcase/th04/index.html:775
#, python-brace-format
msgctxt "page:showcase/th04/index.html"
msgid ""
"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native x64 "
"port.{ph3}"
msgstr ""
#: website/public/showcase/th04/index.html:6
msgctxt "page:showcase/th04/index.html"
msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA"
msgstr ""
#: website/public/showcase/th04/index.html:7
msgctxt "page:showcase/th04/index.html"
msgid ""
"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and recovered "
"C++ to see how a ring of bullets is spaced and aimed at the player."
msgstr ""
#: website/public/showcase/th04/index.html:251
msgctxt "page:showcase/th04/index.html"
msgid "On this page"
msgstr ""
#: website/public/showcase/th04/index.html:261
msgctxt "page:showcase/th04/index.html"
msgid "TH04 bullet-pattern case study"
msgstr ""
#: website/public/showcase/th04/index.html:276
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 example prompt"
msgstr ""
#: website/public/showcase/th04/index.html:304
msgctxt "page:showcase/th04/index.html"
msgid "TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens"
msgstr ""
#: website/public/showcase/th04/index.html:310
msgctxt "page:showcase/th04/index.html"
msgid ""
"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. Adding a player"
" direction of 40 rotates every direction by the same amount; the highlighted first "
"bullet points toward the player. Both keep a spacing of 16 angle units, or 22.5 "
"degrees."
msgstr ""
#: website/public/showcase/th04/index.html:332
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 firing template"
msgstr ""
#: website/public/showcase/th04/index.html:459
msgctxt "page:showcase/th04/index.html"
msgid "Follow the TH04 aimed-ring calculation"
msgstr ""
#: website/public/showcase/th04/index.html:509
msgctxt "page:showcase/th04/index.html"
msgid "Copy TH04 assembly excerpt"
msgstr ""
#: website/public/showcase/th04/index.html:543
msgctxt "page:showcase/th04/index.html"
msgid "Copy readable aimed-ring calculation"
msgstr ""
#: website/public/showcase/th04/index.html:800
msgctxt "page:showcase/th04/index.html"
msgid "Back to top"
msgstr ""
#: scripts/website_i18n.py
msgctxt "runtime"
msgid "Translation is being updated. Read this page in English for now."
msgstr ""
#: website/public/assets/aegis-demo.js:22
#, python-brace-format
msgctxt "runtime"
msgid "{start}–{end} seconds"
msgstr ""
#: website/public/assets/aegis-demo.js:29
#, python-brace-format
msgctxt "runtime"
msgid "{seconds} seconds, time block {block}"
msgstr ""
#: website/public/assets/aegis-demo.js:35
msgctxt "runtime"
msgid ""
"Interactive calculation is unavailable in this browser. The example shows the code at "
"59 seconds."
msgstr ""
#: website/public/assets/aegis-demo.js:62
msgctxt "runtime"
msgid "Checking…"
msgstr ""
#: website/public/assets/aegis-demo.js:76
#, python-brace-format
msgctxt "runtime"
msgid "{passed} / {total} checks passed (six reference cases, at six and eight digits)."
msgstr ""
#: website/public/assets/aegis-demo.js:81
msgctxt "runtime"
msgid "Could not run the reference checks. Try again."
msgstr ""
#: website/public/assets/dino-demo.js:77
#, python-brace-format
msgctxt "runtime"
msgid "Distance {distance}"
msgstr ""
#: website/public/assets/dino-demo.js:87
msgctxt "runtime"
msgid "Hit a cactus. Try another speed."
msgstr ""
#: website/public/assets/dino-demo.js:87
msgctxt "runtime"
msgid "Space or Jump ↑"
msgstr ""
#: website/public/assets/dino-demo.js:97
msgctxt "runtime"
msgid "Play again"
msgstr ""
#: website/public/assets/dino-demo.js:97 website/public/assets/dino-demo.js:111
msgctxt "runtime"
msgid "Play"
msgstr ""
#: website/public/assets/dino-demo.js:112
msgctxt "runtime"
msgid "Press Play, then jump over the cactus."
msgstr ""
#: website/public/assets/dino-demo.js:147
msgctxt "runtime"
msgid "Hit a cactus. Press Play again, or change the speed and restart."
msgstr ""
#: website/public/assets/dino-demo.js:171
msgctxt "runtime"
msgid "Pause"
msgstr ""
#: website/public/assets/dino-demo.js:172
msgctxt "runtime"
msgid "Running. Space or Jump clears a cactus."
msgstr ""
#: website/public/assets/dino-demo.js:183 website/public/assets/dino-demo.js:219
#: website/public/assets/dino-demo.js:224
msgctxt "runtime"
msgid "Paused. Press Play to continue."
msgstr ""
#: website/public/assets/dino-demo.js:203
#, python-brace-format
msgctxt "runtime"
msgid "Fixed speed: {speed}. Space or Jump clears a cactus."
msgstr ""
#: website/public/assets/dino-demo.js:206
#, python-brace-format
msgctxt "runtime"
msgid "Fixed speed: {speed}. Press Play to try it."
msgstr ""
#: website/public/assets/dino-demo.js:215
msgctxt "runtime"
msgid "Recovered rule: start at 6, then increase toward 13."
msgstr ""
#: website/public/assets/dino-demo.js:216
#, python-brace-format
msgctxt "runtime"
msgid "Fixed speed: {speed}."
msgstr ""
#: website/public/assets/dino-demo.js:249
msgctxt "runtime"
msgid ""
"Replayed the recovered rule. All four values match the controlled original-game check "
"when rounded to three decimals."
msgstr ""
#: website/public/assets/dino-demo.js:252
msgctxt "runtime"
msgid ""
"The replay differs from the recorded original-game values. Compare the speed rule and "
"settings above."
msgstr ""
#: website/public/assets/home.js:29
msgctxt "runtime"
msgid "Press % to see what happens to 10."
msgstr ""
#: website/public/assets/home.js:32
msgctxt "runtime"
msgid "10% of 200 is 20. Press = to add it."
msgstr ""
#: website/public/assets/home.js:33
msgctxt "runtime"
msgid "For multiplication, 10 becomes 0.1. Press = to multiply."
msgstr ""
#: website/public/assets/main.js:21
msgctxt "runtime"
msgid "Copied"
msgstr ""
#: website/public/assets/main.js:23
msgctxt "runtime"
msgid "Code copied to clipboard."
msgstr ""
#: website/public/assets/main.js:32
msgctxt "runtime"
msgid "Selected"
msgstr ""
#: website/public/assets/main.js:34
msgctxt "runtime"
msgid "Code selected. Use your keyboard to copy it."
msgstr ""
#: website/public/assets/main.js:148
#, python-brace-format
msgctxt "runtime"
msgid "REA on GitHub ({count})"
msgstr ""
#: website/public/assets/theme.js:52
msgctxt "runtime"
msgid "Switch to light mode"
msgstr ""
#: website/public/assets/theme.js:53
msgctxt "runtime"
msgid "Switch to dark mode"
msgstr ""
#: website/public/assets/figures/analyst-thinking.svg:2
msgctxt "figure:analyst-thinking.svg"
msgid "An analyst thinking at a computer"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:2
#: website/public/assets/figures/ctf-mask-equation.svg:24
msgctxt "figure:ctf-mask-equation.svg"
msgid "One check reveals one character"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:3
msgctxt "figure:ctf-mask-equation.svg"
msgid ""
"The seventh mask selects only position 21 in the six by six input grid. Its character "
"code must equal 55, so the character is 7. The other masks select different positions "
"and give further equations."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:25
msgctxt "figure:ctf-mask-equation.svg"
msgid "The seventh check. Cell labels are input positions, starting at 0."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:27
msgctxt "figure:ctf-mask-equation.svg"
msgid "Encoded mask: −21, +1, −14, 0"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:28
msgctxt "figure:ctf-mask-equation.svg"
msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:32
msgctxt "figure:ctf-mask-equation.svg"
msgid "Only one cell contributes to this sum"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:35
msgctxt "figure:ctf-mask-equation.svg"
msgid "Position 21 in the flag must contain 7."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:37
msgctxt "figure:ctf-mask-equation.svg"
msgid "Selected: one cell"
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:38
msgctxt "figure:ctf-mask-equation.svg"
msgid "26 masks give 26 equations."
msgstr ""
#: website/public/assets/figures/ctf-mask-equation.svg:39
msgctxt "figure:ctf-mask-equation.svg"
msgid "Solve them together to find the flag."
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:20
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "DX-Ball sound-pan investigation"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid ""
"REA provides the instruction, caller and byte-read evidence for one DX-Ball function. "
"A stack input is multiplied by 1.5625, offset by 500, scaled, and converted to an "
"integer. Maintained C is checked in 3,205 original-x86 cases and a separate 63-byte "
"compiler replay."
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Stack"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "input x"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Integer"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:45
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "return"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:46
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Reconstructed function"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:47
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Maintained C"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:48
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Brick-hit caller"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:49
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "20 + 30 × tile_x"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:50
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "Original code"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:51
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:54
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "comparison"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:52
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "3,205 cases"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:53
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "VC4.0 build"
msgstr ""
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:55
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
msgid "63 matching bytes"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:2
#: website/public/assets/figures/rea-investigation-flow.svg:22
msgctxt "figure:rea-investigation-flow.svg"
msgid "REA investigation flow"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:3
msgctxt "figure:rea-investigation-flow.svg"
msgid ""
"Ask a question about a local target. REA inspects and traces through local analysis "
"adapters, returns evidence, and supports follow-up questions as your agent explains, "
"implements and tests."
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:31
msgctxt "figure:rea-investigation-flow.svg"
msgid "1. Ask"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:32
msgctxt "figure:rea-investigation-flow.svg"
msgid "Your agent + local target"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:33
msgctxt "figure:rea-investigation-flow.svg"
msgid "App / binary / browser"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:34
msgctxt "figure:rea-investigation-flow.svg"
msgid "2. Inspect & trace"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:36
msgctxt "figure:rea-investigation-flow.svg"
msgid "CLI / MCP"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:37
msgctxt "figure:rea-investigation-flow.svg"
msgid "3. Read the evidence"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:38
msgctxt "figure:rea-investigation-flow.svg"
msgid "Code / references /"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:39
msgctxt "figure:rea-investigation-flow.svg"
msgid "unknowns"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:40
msgctxt "figure:rea-investigation-flow.svg"
msgid "4. Use what you learn"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:41
msgctxt "figure:rea-investigation-flow.svg"
msgid "Your agent"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:42
msgctxt "figure:rea-investigation-flow.svg"
msgid "Explain / implement / test"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:43
msgctxt "figure:rea-investigation-flow.svg"
msgid "Analysis tools"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:44
msgctxt "figure:rea-investigation-flow.svg"
msgid "Local analysis adapters"
msgstr ""
#: website/public/assets/figures/rea-investigation-flow.svg:45
msgctxt "figure:rea-investigation-flow.svg"
msgid "Follow-up question"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:2
msgctxt "figure:th04-bullet-ring.svg"
msgid "TH04: spacing and aiming a ring of bullets"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:3
msgctxt "figure:th04-bullet-ring.svg"
msgid ""
"A full clockwise turn has 256 angle units. Sixteen bullets start at angles zero, "
"sixteen, thirty-two, through 240. Adding an example player direction of forty turns "
"all sixteen directions together; the first bullet points at the player. Template "
"rotation is zero."
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:24
msgctxt "figure:th04-bullet-ring.svg"
msgid "Fixed ring"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:25
msgctxt "figure:th04-bullet-ring.svg"
msgid "First bullet: angle 0"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:26
msgctxt "figure:th04-bullet-ring.svg"
msgid "Aimed ring"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:27
msgctxt "figure:th04-bullet-ring.svg"
msgid "First bullet: player direction"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:64
#: website/public/assets/figures/th04-bullet-ring.svg:102
msgctxt "figure:th04-bullet-ring.svg"
msgid "Origin"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:105
msgctxt "figure:th04-bullet-ring.svg"
msgid "Player"
msgstr ""
#: website/public/assets/figures/th04-bullet-ring.svg:110
msgctxt "figure:th04-bullet-ring.svg"
msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°"
msgstr ""