nmarshall commited on
Commit
eb82d5d
·
1 Parent(s): 7c1c408

qvm: recover string formatter policy

Browse files
docs/FINDINGS.md CHANGED
@@ -1436,3 +1436,6 @@ RE-791–800 adds exact Rust source-sort/ranking parity, mixed count/prefix sema
1436
 
1437
 
1438
  RE-802–811 adds opt-in coherent memory, original string/scoreboard control flow, Rust stateful packet/broadcast contracts and actual stat-award composition. [Batch evidence](research/QVM_SCOREBOARD_MEMORY_BATCH.md).
 
 
 
 
1436
 
1437
 
1438
  RE-802–811 adds opt-in coherent memory, original string/scoreboard control flow, Rust stateful packet/broadcast contracts and actual stat-award composition. [Batch evidence](research/QVM_SCOREBOARD_MEMORY_BATCH.md).
1439
+
1440
+
1441
+ **RE-813:** 37768 truncates non-null strings by precision, always pads on the right, and ignores supplied precision for null strings by using its source fallback literal. [Evidence](research/QVM_FORMAT_STRING.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1446,3 +1446,6 @@ RE-802–811 advances source/Rust scoreboard packet and shared-stat contracts. N
1446
 
1447
 
1448
  RE-802–811 validation: 1,587 Python and109 Rust tests pass;320 affected producers reproduce byte-identically. Opt-in coherent memory, source/Rust scoreboard packet streams and shared stat-award contracts advance the rewrite. Actual formatter/native copy/send parity, exit-rule behavior, full runtime integration and macOS/Linux Bevy/Solari acceptance remain open. [Evidence](research/QVM_SCOREBOARD_MEMORY_BATCH.md).
 
 
 
 
1446
 
1447
 
1448
  RE-802–811 validation: 1,587 Python and109 Rust tests pass;320 affected producers reproduce byte-identically. Opt-in coherent memory, source/Rust scoreboard packet streams and shared stat-award contracts advance the rewrite. Actual formatter/native copy/send parity, exit-rule behavior, full runtime integration and macOS/Linux Bevy/Solari acceptance remain open. [Evidence](research/QVM_SCOREBOARD_MEMORY_BATCH.md).
1449
+
1450
+
1451
+ RE-813: 37768 truncates non-null strings by precision, always pads on the right, and ignores supplied precision for null strings by using its source fallback literal. Full runtime completion remains open. [Evidence](research/QVM_FORMAT_STRING.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -1728,3 +1728,8 @@ RE-811 final focused recheck passes5 Python tests plus deterministic reports/sto
1728
  ## 2026-10-26 — RE-802–811 full batch validation
1729
 
1730
  After exactly ten task commits from `744c236f`, the single `cargo xtask test-full --since 744c236f` run passed 1,587 Python tests (509+347+320+331+80) and109 Rust tests (10 assets,71 gameplay,28 xtask). All320 affected report producers regenerated twice byte-identically. Storage policy,370 documentation files and whitespace checks passed; regeneration left a clean working tree. Final documentation notes are checked separately and amended into task ten without repeating the full suite. [Batch contracts and RE-812 work](research/QVM_SCOREBOARD_MEMORY_BATCH.md).
 
 
 
 
 
 
1728
  ## 2026-10-26 — RE-802–811 full batch validation
1729
 
1730
  After exactly ten task commits from `744c236f`, the single `cargo xtask test-full --since 744c236f` run passed 1,587 Python tests (509+347+320+331+80) and109 Rust tests (10 assets,71 gameplay,28 xtask). All320 affected report producers regenerated twice byte-identically. Storage policy,370 documentation files and whitespace checks passed; regeneration left a clean working tree. Final documentation notes are checked separately and amended into task ten without repeating the full suite. [Batch contracts and RE-812 work](research/QVM_SCOREBOARD_MEMORY_BATCH.md).
1731
+
1732
+
1733
+ ## 2026-10-27 — RE-813 Actual string formatter precision padding and null-pointer policy
1734
+
1735
+ 37768 truncates non-null strings by precision, always pads on the right, and ignores supplied precision for null strings by using its source fallback literal. Focused `cargo xtask test-group format-string` passes (5 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1486,3 +1486,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1486
 
1487
 
1488
  - [ ] RE-812 Recover actual formatter/native copy/send and exit-rule behavior, continue legacy/coherent-memory audits, complete leaderboard/lifecycle/runtime integration and macOS/Linux Bevy/Solari acceptance. [Next work](research/QVM_SCOREBOARD_MEMORY_BATCH.md#next-work--re-812).
 
 
 
 
1486
 
1487
 
1488
  - [ ] RE-812 Recover actual formatter/native copy/send and exit-rule behavior, continue legacy/coherent-memory audits, complete leaderboard/lifecycle/runtime integration and macOS/Linux Bevy/Solari acceptance. [Next work](research/QVM_SCOREBOARD_MEMORY_BATCH.md#next-work--re-812).
1489
+
1490
+
1491
+ - [x] RE-813 Actual string formatter precision padding and null-pointer policy ([evidence](research/QVM_FORMAT_STRING.md)).
docs/research/QVM_FORMAT_STRING.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Actual string formatter precision padding and null-pointer policy
2
+
3
+ RE-813. Reproduce with `python3 scripts/analyze_qvm_format_string.py`; focused validation: `cargo xtask test-group format-string`. [Machine report](qvm-format-string.json).
4
+
5
+ 96 source fixtures vary NUL placement, opaque bytes, null pointers, width and precision. Actual strlen36038 executes on unbounded-precision paths. Independent byte oracles verify output and cursor advancement. These semantics differ from assuming a standard host printf implementation; central formatting and native/runtime parity remain open.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/README.md CHANGED
@@ -1026,3 +1026,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1026
 
1027
 
1028
  [RE-802–811 batch: coherent memory and scoreboard packets](QVM_SCOREBOARD_MEMORY_BATCH.md).
 
 
 
 
1026
 
1027
 
1028
  [RE-802–811 batch: coherent memory and scoreboard packets](QVM_SCOREBOARD_MEMORY_BATCH.md).
1029
+
1030
+
1031
+ [RE-813: Actual string formatter precision padding and null-pointer policy](QVM_FORMAT_STRING.md).
docs/research/qvm-format-string.json ADDED
@@ -0,0 +1,1372 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "fallback_hex": "286e756c6c2900",
3
+ "limits": "Actual37768 and actual36038 for unbounded precision. String width always trails with spaces; null pointer replaces precision with-minus-one and source literal55135. Finite initialized byte inputs; no central formatter/host ABI parity yet.",
4
+ "probes": [
5
+ {
6
+ "child_memory_bytes": {},
7
+ "cursor": 2072784896,
8
+ "output_hex": "",
9
+ "precision": -1,
10
+ "source_hex": "",
11
+ "trace_sha256": "b67f9a32925adcbb96d8d7c39a25a7be504509d478bd752c5f35deb7e7332476",
12
+ "width": -1
13
+ },
14
+ {
15
+ "child_memory_bytes": {},
16
+ "cursor": 2072784896,
17
+ "output_hex": "",
18
+ "precision": 0,
19
+ "source_hex": "",
20
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
21
+ "width": -1
22
+ },
23
+ {
24
+ "child_memory_bytes": {},
25
+ "cursor": 2072784896,
26
+ "output_hex": "",
27
+ "precision": 2,
28
+ "source_hex": "",
29
+ "trace_sha256": "e1fe76bc0aec128d2a33e8af93812e120b049deda9c9f6c77e246ae7acede1ab",
30
+ "width": -1
31
+ },
32
+ {
33
+ "child_memory_bytes": {},
34
+ "cursor": 2072784896,
35
+ "output_hex": "",
36
+ "precision": 9,
37
+ "source_hex": "",
38
+ "trace_sha256": "e1fe76bc0aec128d2a33e8af93812e120b049deda9c9f6c77e246ae7acede1ab",
39
+ "width": -1
40
+ },
41
+ {
42
+ "child_memory_bytes": {},
43
+ "cursor": 2072784896,
44
+ "output_hex": "",
45
+ "precision": -1,
46
+ "source_hex": "",
47
+ "trace_sha256": "b67f9a32925adcbb96d8d7c39a25a7be504509d478bd752c5f35deb7e7332476",
48
+ "width": 0
49
+ },
50
+ {
51
+ "child_memory_bytes": {},
52
+ "cursor": 2072784896,
53
+ "output_hex": "",
54
+ "precision": 0,
55
+ "source_hex": "",
56
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
57
+ "width": 0
58
+ },
59
+ {
60
+ "child_memory_bytes": {},
61
+ "cursor": 2072784896,
62
+ "output_hex": "",
63
+ "precision": 2,
64
+ "source_hex": "",
65
+ "trace_sha256": "e1fe76bc0aec128d2a33e8af93812e120b049deda9c9f6c77e246ae7acede1ab",
66
+ "width": 0
67
+ },
68
+ {
69
+ "child_memory_bytes": {},
70
+ "cursor": 2072784896,
71
+ "output_hex": "",
72
+ "precision": 9,
73
+ "source_hex": "",
74
+ "trace_sha256": "e1fe76bc0aec128d2a33e8af93812e120b049deda9c9f6c77e246ae7acede1ab",
75
+ "width": 0
76
+ },
77
+ {
78
+ "child_memory_bytes": {
79
+ "2072784896": 32,
80
+ "2072784897": 32,
81
+ "2072784898": 32
82
+ },
83
+ "cursor": 2072784899,
84
+ "output_hex": "202020",
85
+ "precision": -1,
86
+ "source_hex": "",
87
+ "trace_sha256": "f3fe07f03918ce095c841e1164ab1c1d6d358cbed5bb0152cd39e52acafd8966",
88
+ "width": 3
89
+ },
90
+ {
91
+ "child_memory_bytes": {
92
+ "2072784896": 32,
93
+ "2072784897": 32,
94
+ "2072784898": 32
95
+ },
96
+ "cursor": 2072784899,
97
+ "output_hex": "202020",
98
+ "precision": 0,
99
+ "source_hex": "",
100
+ "trace_sha256": "51d35a23808240c273fde6aaf8d6f94ca5c02c5c196b4f6175d237608f5dc4b9",
101
+ "width": 3
102
+ },
103
+ {
104
+ "child_memory_bytes": {
105
+ "2072784896": 32,
106
+ "2072784897": 32,
107
+ "2072784898": 32
108
+ },
109
+ "cursor": 2072784899,
110
+ "output_hex": "202020",
111
+ "precision": 2,
112
+ "source_hex": "",
113
+ "trace_sha256": "24ededa8a26f151a746eeb436cfb82171295c2c28c07f6ec93a00d6c01d6fbba",
114
+ "width": 3
115
+ },
116
+ {
117
+ "child_memory_bytes": {
118
+ "2072784896": 32,
119
+ "2072784897": 32,
120
+ "2072784898": 32
121
+ },
122
+ "cursor": 2072784899,
123
+ "output_hex": "202020",
124
+ "precision": 9,
125
+ "source_hex": "",
126
+ "trace_sha256": "24ededa8a26f151a746eeb436cfb82171295c2c28c07f6ec93a00d6c01d6fbba",
127
+ "width": 3
128
+ },
129
+ {
130
+ "child_memory_bytes": {
131
+ "2072784896": 32,
132
+ "2072784897": 32,
133
+ "2072784898": 32,
134
+ "2072784899": 32,
135
+ "2072784900": 32,
136
+ "2072784901": 32,
137
+ "2072784902": 32,
138
+ "2072784903": 32
139
+ },
140
+ "cursor": 2072784904,
141
+ "output_hex": "2020202020202020",
142
+ "precision": -1,
143
+ "source_hex": "",
144
+ "trace_sha256": "e5c3b3d7b82f3a05928405aa76c27102b26b28978fc23c4d9779b285e33f8166",
145
+ "width": 8
146
+ },
147
+ {
148
+ "child_memory_bytes": {
149
+ "2072784896": 32,
150
+ "2072784897": 32,
151
+ "2072784898": 32,
152
+ "2072784899": 32,
153
+ "2072784900": 32,
154
+ "2072784901": 32,
155
+ "2072784902": 32,
156
+ "2072784903": 32
157
+ },
158
+ "cursor": 2072784904,
159
+ "output_hex": "2020202020202020",
160
+ "precision": 0,
161
+ "source_hex": "",
162
+ "trace_sha256": "8559f220ea0db1adddf794ccc045d3f2278d2d10b642ba506df5d2a63317248d",
163
+ "width": 8
164
+ },
165
+ {
166
+ "child_memory_bytes": {
167
+ "2072784896": 32,
168
+ "2072784897": 32,
169
+ "2072784898": 32,
170
+ "2072784899": 32,
171
+ "2072784900": 32,
172
+ "2072784901": 32,
173
+ "2072784902": 32,
174
+ "2072784903": 32
175
+ },
176
+ "cursor": 2072784904,
177
+ "output_hex": "2020202020202020",
178
+ "precision": 2,
179
+ "source_hex": "",
180
+ "trace_sha256": "cfd49ba6f9dee0ca9ae7138997b95eb121e629c143744f809b51c71d8e6f4458",
181
+ "width": 8
182
+ },
183
+ {
184
+ "child_memory_bytes": {
185
+ "2072784896": 32,
186
+ "2072784897": 32,
187
+ "2072784898": 32,
188
+ "2072784899": 32,
189
+ "2072784900": 32,
190
+ "2072784901": 32,
191
+ "2072784902": 32,
192
+ "2072784903": 32
193
+ },
194
+ "cursor": 2072784904,
195
+ "output_hex": "2020202020202020",
196
+ "precision": 9,
197
+ "source_hex": "",
198
+ "trace_sha256": "cfd49ba6f9dee0ca9ae7138997b95eb121e629c143744f809b51c71d8e6f4458",
199
+ "width": 8
200
+ },
201
+ {
202
+ "child_memory_bytes": {
203
+ "2072784896": 65
204
+ },
205
+ "cursor": 2072784897,
206
+ "output_hex": "41",
207
+ "precision": -1,
208
+ "source_hex": "41",
209
+ "trace_sha256": "5476bf459f861778191057038715167a66ef72960f3bed5be1162d70cd218ee3",
210
+ "width": -1
211
+ },
212
+ {
213
+ "child_memory_bytes": {},
214
+ "cursor": 2072784896,
215
+ "output_hex": "",
216
+ "precision": 0,
217
+ "source_hex": "41",
218
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
219
+ "width": -1
220
+ },
221
+ {
222
+ "child_memory_bytes": {
223
+ "2072784896": 65
224
+ },
225
+ "cursor": 2072784897,
226
+ "output_hex": "41",
227
+ "precision": 2,
228
+ "source_hex": "41",
229
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
230
+ "width": -1
231
+ },
232
+ {
233
+ "child_memory_bytes": {
234
+ "2072784896": 65
235
+ },
236
+ "cursor": 2072784897,
237
+ "output_hex": "41",
238
+ "precision": 9,
239
+ "source_hex": "41",
240
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
241
+ "width": -1
242
+ },
243
+ {
244
+ "child_memory_bytes": {
245
+ "2072784896": 65
246
+ },
247
+ "cursor": 2072784897,
248
+ "output_hex": "41",
249
+ "precision": -1,
250
+ "source_hex": "41",
251
+ "trace_sha256": "5476bf459f861778191057038715167a66ef72960f3bed5be1162d70cd218ee3",
252
+ "width": 0
253
+ },
254
+ {
255
+ "child_memory_bytes": {},
256
+ "cursor": 2072784896,
257
+ "output_hex": "",
258
+ "precision": 0,
259
+ "source_hex": "41",
260
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
261
+ "width": 0
262
+ },
263
+ {
264
+ "child_memory_bytes": {
265
+ "2072784896": 65
266
+ },
267
+ "cursor": 2072784897,
268
+ "output_hex": "41",
269
+ "precision": 2,
270
+ "source_hex": "41",
271
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
272
+ "width": 0
273
+ },
274
+ {
275
+ "child_memory_bytes": {
276
+ "2072784896": 65
277
+ },
278
+ "cursor": 2072784897,
279
+ "output_hex": "41",
280
+ "precision": 9,
281
+ "source_hex": "41",
282
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
283
+ "width": 0
284
+ },
285
+ {
286
+ "child_memory_bytes": {
287
+ "2072784896": 65,
288
+ "2072784897": 32,
289
+ "2072784898": 32
290
+ },
291
+ "cursor": 2072784899,
292
+ "output_hex": "412020",
293
+ "precision": -1,
294
+ "source_hex": "41",
295
+ "trace_sha256": "bf1ed2bcc2ca607ca6e61597ebcd16b6c324fd4b7a359eb3bfca6a22e9cabd3a",
296
+ "width": 3
297
+ },
298
+ {
299
+ "child_memory_bytes": {
300
+ "2072784896": 32,
301
+ "2072784897": 32,
302
+ "2072784898": 32
303
+ },
304
+ "cursor": 2072784899,
305
+ "output_hex": "202020",
306
+ "precision": 0,
307
+ "source_hex": "41",
308
+ "trace_sha256": "51d35a23808240c273fde6aaf8d6f94ca5c02c5c196b4f6175d237608f5dc4b9",
309
+ "width": 3
310
+ },
311
+ {
312
+ "child_memory_bytes": {
313
+ "2072784896": 65,
314
+ "2072784897": 32,
315
+ "2072784898": 32
316
+ },
317
+ "cursor": 2072784899,
318
+ "output_hex": "412020",
319
+ "precision": 2,
320
+ "source_hex": "41",
321
+ "trace_sha256": "44f2016eecba3fc4265263e1a1409ea491f27e6edcb38af0bda48fd3ea6b23a3",
322
+ "width": 3
323
+ },
324
+ {
325
+ "child_memory_bytes": {
326
+ "2072784896": 65,
327
+ "2072784897": 32,
328
+ "2072784898": 32
329
+ },
330
+ "cursor": 2072784899,
331
+ "output_hex": "412020",
332
+ "precision": 9,
333
+ "source_hex": "41",
334
+ "trace_sha256": "44f2016eecba3fc4265263e1a1409ea491f27e6edcb38af0bda48fd3ea6b23a3",
335
+ "width": 3
336
+ },
337
+ {
338
+ "child_memory_bytes": {
339
+ "2072784896": 65,
340
+ "2072784897": 32,
341
+ "2072784898": 32,
342
+ "2072784899": 32,
343
+ "2072784900": 32,
344
+ "2072784901": 32,
345
+ "2072784902": 32,
346
+ "2072784903": 32
347
+ },
348
+ "cursor": 2072784904,
349
+ "output_hex": "4120202020202020",
350
+ "precision": -1,
351
+ "source_hex": "41",
352
+ "trace_sha256": "13f265a8f1e68f4ea1b0c373e37f6d3760463abe6cc33e53d3e1c99fbc464d5b",
353
+ "width": 8
354
+ },
355
+ {
356
+ "child_memory_bytes": {
357
+ "2072784896": 32,
358
+ "2072784897": 32,
359
+ "2072784898": 32,
360
+ "2072784899": 32,
361
+ "2072784900": 32,
362
+ "2072784901": 32,
363
+ "2072784902": 32,
364
+ "2072784903": 32
365
+ },
366
+ "cursor": 2072784904,
367
+ "output_hex": "2020202020202020",
368
+ "precision": 0,
369
+ "source_hex": "41",
370
+ "trace_sha256": "8559f220ea0db1adddf794ccc045d3f2278d2d10b642ba506df5d2a63317248d",
371
+ "width": 8
372
+ },
373
+ {
374
+ "child_memory_bytes": {
375
+ "2072784896": 65,
376
+ "2072784897": 32,
377
+ "2072784898": 32,
378
+ "2072784899": 32,
379
+ "2072784900": 32,
380
+ "2072784901": 32,
381
+ "2072784902": 32,
382
+ "2072784903": 32
383
+ },
384
+ "cursor": 2072784904,
385
+ "output_hex": "4120202020202020",
386
+ "precision": 2,
387
+ "source_hex": "41",
388
+ "trace_sha256": "adb5e52b15f2b45ba693c40320571d15dfda208dadc1c724ba8e50848499dbf7",
389
+ "width": 8
390
+ },
391
+ {
392
+ "child_memory_bytes": {
393
+ "2072784896": 65,
394
+ "2072784897": 32,
395
+ "2072784898": 32,
396
+ "2072784899": 32,
397
+ "2072784900": 32,
398
+ "2072784901": 32,
399
+ "2072784902": 32,
400
+ "2072784903": 32
401
+ },
402
+ "cursor": 2072784904,
403
+ "output_hex": "4120202020202020",
404
+ "precision": 9,
405
+ "source_hex": "41",
406
+ "trace_sha256": "adb5e52b15f2b45ba693c40320571d15dfda208dadc1c724ba8e50848499dbf7",
407
+ "width": 8
408
+ },
409
+ {
410
+ "child_memory_bytes": {
411
+ "2072784896": 97,
412
+ "2072784897": 98,
413
+ "2072784898": 99,
414
+ "2072784899": 100,
415
+ "2072784900": 101,
416
+ "2072784901": 102
417
+ },
418
+ "cursor": 2072784902,
419
+ "output_hex": "616263646566",
420
+ "precision": -1,
421
+ "source_hex": "616263646566",
422
+ "trace_sha256": "b87ad17b5e65446ad343935e6114b0ca5a9c61aac8cc6d9f97b5efffc406425c",
423
+ "width": -1
424
+ },
425
+ {
426
+ "child_memory_bytes": {},
427
+ "cursor": 2072784896,
428
+ "output_hex": "",
429
+ "precision": 0,
430
+ "source_hex": "616263646566",
431
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
432
+ "width": -1
433
+ },
434
+ {
435
+ "child_memory_bytes": {
436
+ "2072784896": 97,
437
+ "2072784897": 98
438
+ },
439
+ "cursor": 2072784898,
440
+ "output_hex": "6162",
441
+ "precision": 2,
442
+ "source_hex": "616263646566",
443
+ "trace_sha256": "03b994ad6c5961112728416682c468e6d81be35542a2f5d019693294e659e823",
444
+ "width": -1
445
+ },
446
+ {
447
+ "child_memory_bytes": {
448
+ "2072784896": 97,
449
+ "2072784897": 98,
450
+ "2072784898": 99,
451
+ "2072784899": 100,
452
+ "2072784900": 101,
453
+ "2072784901": 102
454
+ },
455
+ "cursor": 2072784902,
456
+ "output_hex": "616263646566",
457
+ "precision": 9,
458
+ "source_hex": "616263646566",
459
+ "trace_sha256": "95eac90c3c572714ca9eaa120048b5832bcc98aaff36c874bf505fe1cb275b11",
460
+ "width": -1
461
+ },
462
+ {
463
+ "child_memory_bytes": {
464
+ "2072784896": 97,
465
+ "2072784897": 98,
466
+ "2072784898": 99,
467
+ "2072784899": 100,
468
+ "2072784900": 101,
469
+ "2072784901": 102
470
+ },
471
+ "cursor": 2072784902,
472
+ "output_hex": "616263646566",
473
+ "precision": -1,
474
+ "source_hex": "616263646566",
475
+ "trace_sha256": "b87ad17b5e65446ad343935e6114b0ca5a9c61aac8cc6d9f97b5efffc406425c",
476
+ "width": 0
477
+ },
478
+ {
479
+ "child_memory_bytes": {},
480
+ "cursor": 2072784896,
481
+ "output_hex": "",
482
+ "precision": 0,
483
+ "source_hex": "616263646566",
484
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
485
+ "width": 0
486
+ },
487
+ {
488
+ "child_memory_bytes": {
489
+ "2072784896": 97,
490
+ "2072784897": 98
491
+ },
492
+ "cursor": 2072784898,
493
+ "output_hex": "6162",
494
+ "precision": 2,
495
+ "source_hex": "616263646566",
496
+ "trace_sha256": "03b994ad6c5961112728416682c468e6d81be35542a2f5d019693294e659e823",
497
+ "width": 0
498
+ },
499
+ {
500
+ "child_memory_bytes": {
501
+ "2072784896": 97,
502
+ "2072784897": 98,
503
+ "2072784898": 99,
504
+ "2072784899": 100,
505
+ "2072784900": 101,
506
+ "2072784901": 102
507
+ },
508
+ "cursor": 2072784902,
509
+ "output_hex": "616263646566",
510
+ "precision": 9,
511
+ "source_hex": "616263646566",
512
+ "trace_sha256": "95eac90c3c572714ca9eaa120048b5832bcc98aaff36c874bf505fe1cb275b11",
513
+ "width": 0
514
+ },
515
+ {
516
+ "child_memory_bytes": {
517
+ "2072784896": 97,
518
+ "2072784897": 98,
519
+ "2072784898": 99,
520
+ "2072784899": 100,
521
+ "2072784900": 101,
522
+ "2072784901": 102
523
+ },
524
+ "cursor": 2072784902,
525
+ "output_hex": "616263646566",
526
+ "precision": -1,
527
+ "source_hex": "616263646566",
528
+ "trace_sha256": "b87ad17b5e65446ad343935e6114b0ca5a9c61aac8cc6d9f97b5efffc406425c",
529
+ "width": 3
530
+ },
531
+ {
532
+ "child_memory_bytes": {
533
+ "2072784896": 32,
534
+ "2072784897": 32,
535
+ "2072784898": 32
536
+ },
537
+ "cursor": 2072784899,
538
+ "output_hex": "202020",
539
+ "precision": 0,
540
+ "source_hex": "616263646566",
541
+ "trace_sha256": "51d35a23808240c273fde6aaf8d6f94ca5c02c5c196b4f6175d237608f5dc4b9",
542
+ "width": 3
543
+ },
544
+ {
545
+ "child_memory_bytes": {
546
+ "2072784896": 97,
547
+ "2072784897": 98,
548
+ "2072784898": 32
549
+ },
550
+ "cursor": 2072784899,
551
+ "output_hex": "616220",
552
+ "precision": 2,
553
+ "source_hex": "616263646566",
554
+ "trace_sha256": "323588eece052789c2c80c092f841c8f4213a4ec4200fb509e0c3f8392865004",
555
+ "width": 3
556
+ },
557
+ {
558
+ "child_memory_bytes": {
559
+ "2072784896": 97,
560
+ "2072784897": 98,
561
+ "2072784898": 99,
562
+ "2072784899": 100,
563
+ "2072784900": 101,
564
+ "2072784901": 102
565
+ },
566
+ "cursor": 2072784902,
567
+ "output_hex": "616263646566",
568
+ "precision": 9,
569
+ "source_hex": "616263646566",
570
+ "trace_sha256": "95eac90c3c572714ca9eaa120048b5832bcc98aaff36c874bf505fe1cb275b11",
571
+ "width": 3
572
+ },
573
+ {
574
+ "child_memory_bytes": {
575
+ "2072784896": 97,
576
+ "2072784897": 98,
577
+ "2072784898": 99,
578
+ "2072784899": 100,
579
+ "2072784900": 101,
580
+ "2072784901": 102,
581
+ "2072784902": 32,
582
+ "2072784903": 32
583
+ },
584
+ "cursor": 2072784904,
585
+ "output_hex": "6162636465662020",
586
+ "precision": -1,
587
+ "source_hex": "616263646566",
588
+ "trace_sha256": "87cf549544cdf3cc07ed3554bdc38b6f97f60716dd6afeca577d74ac4aade63b",
589
+ "width": 8
590
+ },
591
+ {
592
+ "child_memory_bytes": {
593
+ "2072784896": 32,
594
+ "2072784897": 32,
595
+ "2072784898": 32,
596
+ "2072784899": 32,
597
+ "2072784900": 32,
598
+ "2072784901": 32,
599
+ "2072784902": 32,
600
+ "2072784903": 32
601
+ },
602
+ "cursor": 2072784904,
603
+ "output_hex": "2020202020202020",
604
+ "precision": 0,
605
+ "source_hex": "616263646566",
606
+ "trace_sha256": "8559f220ea0db1adddf794ccc045d3f2278d2d10b642ba506df5d2a63317248d",
607
+ "width": 8
608
+ },
609
+ {
610
+ "child_memory_bytes": {
611
+ "2072784896": 97,
612
+ "2072784897": 98,
613
+ "2072784898": 32,
614
+ "2072784899": 32,
615
+ "2072784900": 32,
616
+ "2072784901": 32,
617
+ "2072784902": 32,
618
+ "2072784903": 32
619
+ },
620
+ "cursor": 2072784904,
621
+ "output_hex": "6162202020202020",
622
+ "precision": 2,
623
+ "source_hex": "616263646566",
624
+ "trace_sha256": "b5e05f9c843476c9c495dc3e3e93c4caed8dd9001c84d3bebd4b9605f4e5f2db",
625
+ "width": 8
626
+ },
627
+ {
628
+ "child_memory_bytes": {
629
+ "2072784896": 97,
630
+ "2072784897": 98,
631
+ "2072784898": 99,
632
+ "2072784899": 100,
633
+ "2072784900": 101,
634
+ "2072784901": 102,
635
+ "2072784902": 32,
636
+ "2072784903": 32
637
+ },
638
+ "cursor": 2072784904,
639
+ "output_hex": "6162636465662020",
640
+ "precision": 9,
641
+ "source_hex": "616263646566",
642
+ "trace_sha256": "fe91e2ce93cfdf41dc36829fedb4979031fa875489a62b4bcfb97a5fc0ee02de",
643
+ "width": 8
644
+ },
645
+ {
646
+ "child_memory_bytes": {
647
+ "2072784896": 65
648
+ },
649
+ "cursor": 2072784897,
650
+ "output_hex": "41",
651
+ "precision": -1,
652
+ "source_hex": "4100737566666978",
653
+ "trace_sha256": "5476bf459f861778191057038715167a66ef72960f3bed5be1162d70cd218ee3",
654
+ "width": -1
655
+ },
656
+ {
657
+ "child_memory_bytes": {},
658
+ "cursor": 2072784896,
659
+ "output_hex": "",
660
+ "precision": 0,
661
+ "source_hex": "4100737566666978",
662
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
663
+ "width": -1
664
+ },
665
+ {
666
+ "child_memory_bytes": {
667
+ "2072784896": 65
668
+ },
669
+ "cursor": 2072784897,
670
+ "output_hex": "41",
671
+ "precision": 2,
672
+ "source_hex": "4100737566666978",
673
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
674
+ "width": -1
675
+ },
676
+ {
677
+ "child_memory_bytes": {
678
+ "2072784896": 65
679
+ },
680
+ "cursor": 2072784897,
681
+ "output_hex": "41",
682
+ "precision": 9,
683
+ "source_hex": "4100737566666978",
684
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
685
+ "width": -1
686
+ },
687
+ {
688
+ "child_memory_bytes": {
689
+ "2072784896": 65
690
+ },
691
+ "cursor": 2072784897,
692
+ "output_hex": "41",
693
+ "precision": -1,
694
+ "source_hex": "4100737566666978",
695
+ "trace_sha256": "5476bf459f861778191057038715167a66ef72960f3bed5be1162d70cd218ee3",
696
+ "width": 0
697
+ },
698
+ {
699
+ "child_memory_bytes": {},
700
+ "cursor": 2072784896,
701
+ "output_hex": "",
702
+ "precision": 0,
703
+ "source_hex": "4100737566666978",
704
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
705
+ "width": 0
706
+ },
707
+ {
708
+ "child_memory_bytes": {
709
+ "2072784896": 65
710
+ },
711
+ "cursor": 2072784897,
712
+ "output_hex": "41",
713
+ "precision": 2,
714
+ "source_hex": "4100737566666978",
715
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
716
+ "width": 0
717
+ },
718
+ {
719
+ "child_memory_bytes": {
720
+ "2072784896": 65
721
+ },
722
+ "cursor": 2072784897,
723
+ "output_hex": "41",
724
+ "precision": 9,
725
+ "source_hex": "4100737566666978",
726
+ "trace_sha256": "8314f734d75b044364ae3ae88e17bc59ccf540b64c8f2c9dcebbbff39a110989",
727
+ "width": 0
728
+ },
729
+ {
730
+ "child_memory_bytes": {
731
+ "2072784896": 65,
732
+ "2072784897": 32,
733
+ "2072784898": 32
734
+ },
735
+ "cursor": 2072784899,
736
+ "output_hex": "412020",
737
+ "precision": -1,
738
+ "source_hex": "4100737566666978",
739
+ "trace_sha256": "bf1ed2bcc2ca607ca6e61597ebcd16b6c324fd4b7a359eb3bfca6a22e9cabd3a",
740
+ "width": 3
741
+ },
742
+ {
743
+ "child_memory_bytes": {
744
+ "2072784896": 32,
745
+ "2072784897": 32,
746
+ "2072784898": 32
747
+ },
748
+ "cursor": 2072784899,
749
+ "output_hex": "202020",
750
+ "precision": 0,
751
+ "source_hex": "4100737566666978",
752
+ "trace_sha256": "51d35a23808240c273fde6aaf8d6f94ca5c02c5c196b4f6175d237608f5dc4b9",
753
+ "width": 3
754
+ },
755
+ {
756
+ "child_memory_bytes": {
757
+ "2072784896": 65,
758
+ "2072784897": 32,
759
+ "2072784898": 32
760
+ },
761
+ "cursor": 2072784899,
762
+ "output_hex": "412020",
763
+ "precision": 2,
764
+ "source_hex": "4100737566666978",
765
+ "trace_sha256": "44f2016eecba3fc4265263e1a1409ea491f27e6edcb38af0bda48fd3ea6b23a3",
766
+ "width": 3
767
+ },
768
+ {
769
+ "child_memory_bytes": {
770
+ "2072784896": 65,
771
+ "2072784897": 32,
772
+ "2072784898": 32
773
+ },
774
+ "cursor": 2072784899,
775
+ "output_hex": "412020",
776
+ "precision": 9,
777
+ "source_hex": "4100737566666978",
778
+ "trace_sha256": "44f2016eecba3fc4265263e1a1409ea491f27e6edcb38af0bda48fd3ea6b23a3",
779
+ "width": 3
780
+ },
781
+ {
782
+ "child_memory_bytes": {
783
+ "2072784896": 65,
784
+ "2072784897": 32,
785
+ "2072784898": 32,
786
+ "2072784899": 32,
787
+ "2072784900": 32,
788
+ "2072784901": 32,
789
+ "2072784902": 32,
790
+ "2072784903": 32
791
+ },
792
+ "cursor": 2072784904,
793
+ "output_hex": "4120202020202020",
794
+ "precision": -1,
795
+ "source_hex": "4100737566666978",
796
+ "trace_sha256": "13f265a8f1e68f4ea1b0c373e37f6d3760463abe6cc33e53d3e1c99fbc464d5b",
797
+ "width": 8
798
+ },
799
+ {
800
+ "child_memory_bytes": {
801
+ "2072784896": 32,
802
+ "2072784897": 32,
803
+ "2072784898": 32,
804
+ "2072784899": 32,
805
+ "2072784900": 32,
806
+ "2072784901": 32,
807
+ "2072784902": 32,
808
+ "2072784903": 32
809
+ },
810
+ "cursor": 2072784904,
811
+ "output_hex": "2020202020202020",
812
+ "precision": 0,
813
+ "source_hex": "4100737566666978",
814
+ "trace_sha256": "8559f220ea0db1adddf794ccc045d3f2278d2d10b642ba506df5d2a63317248d",
815
+ "width": 8
816
+ },
817
+ {
818
+ "child_memory_bytes": {
819
+ "2072784896": 65,
820
+ "2072784897": 32,
821
+ "2072784898": 32,
822
+ "2072784899": 32,
823
+ "2072784900": 32,
824
+ "2072784901": 32,
825
+ "2072784902": 32,
826
+ "2072784903": 32
827
+ },
828
+ "cursor": 2072784904,
829
+ "output_hex": "4120202020202020",
830
+ "precision": 2,
831
+ "source_hex": "4100737566666978",
832
+ "trace_sha256": "adb5e52b15f2b45ba693c40320571d15dfda208dadc1c724ba8e50848499dbf7",
833
+ "width": 8
834
+ },
835
+ {
836
+ "child_memory_bytes": {
837
+ "2072784896": 65,
838
+ "2072784897": 32,
839
+ "2072784898": 32,
840
+ "2072784899": 32,
841
+ "2072784900": 32,
842
+ "2072784901": 32,
843
+ "2072784902": 32,
844
+ "2072784903": 32
845
+ },
846
+ "cursor": 2072784904,
847
+ "output_hex": "4120202020202020",
848
+ "precision": 9,
849
+ "source_hex": "4100737566666978",
850
+ "trace_sha256": "adb5e52b15f2b45ba693c40320571d15dfda208dadc1c724ba8e50848499dbf7",
851
+ "width": 8
852
+ },
853
+ {
854
+ "child_memory_bytes": {
855
+ "2072784896": 255,
856
+ "2072784897": 254,
857
+ "2072784898": 253
858
+ },
859
+ "cursor": 2072784899,
860
+ "output_hex": "fffefd",
861
+ "precision": -1,
862
+ "source_hex": "fffefd",
863
+ "trace_sha256": "7a9bff3390934abebdfb17424406a67dc6e9a1845d453791028a2d59cd76442f",
864
+ "width": -1
865
+ },
866
+ {
867
+ "child_memory_bytes": {},
868
+ "cursor": 2072784896,
869
+ "output_hex": "",
870
+ "precision": 0,
871
+ "source_hex": "fffefd",
872
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
873
+ "width": -1
874
+ },
875
+ {
876
+ "child_memory_bytes": {
877
+ "2072784896": 255,
878
+ "2072784897": 254
879
+ },
880
+ "cursor": 2072784898,
881
+ "output_hex": "fffe",
882
+ "precision": 2,
883
+ "source_hex": "fffefd",
884
+ "trace_sha256": "03b994ad6c5961112728416682c468e6d81be35542a2f5d019693294e659e823",
885
+ "width": -1
886
+ },
887
+ {
888
+ "child_memory_bytes": {
889
+ "2072784896": 255,
890
+ "2072784897": 254,
891
+ "2072784898": 253
892
+ },
893
+ "cursor": 2072784899,
894
+ "output_hex": "fffefd",
895
+ "precision": 9,
896
+ "source_hex": "fffefd",
897
+ "trace_sha256": "dd9fe7a4863f3b5b388d5f33932318b4cad6f253ad26b1ce0909da52dd56af69",
898
+ "width": -1
899
+ },
900
+ {
901
+ "child_memory_bytes": {
902
+ "2072784896": 255,
903
+ "2072784897": 254,
904
+ "2072784898": 253
905
+ },
906
+ "cursor": 2072784899,
907
+ "output_hex": "fffefd",
908
+ "precision": -1,
909
+ "source_hex": "fffefd",
910
+ "trace_sha256": "7a9bff3390934abebdfb17424406a67dc6e9a1845d453791028a2d59cd76442f",
911
+ "width": 0
912
+ },
913
+ {
914
+ "child_memory_bytes": {},
915
+ "cursor": 2072784896,
916
+ "output_hex": "",
917
+ "precision": 0,
918
+ "source_hex": "fffefd",
919
+ "trace_sha256": "cf1d895cb861e37d4256c7c790c248b3603ad3572949373fbc56b0bc26b1a567",
920
+ "width": 0
921
+ },
922
+ {
923
+ "child_memory_bytes": {
924
+ "2072784896": 255,
925
+ "2072784897": 254
926
+ },
927
+ "cursor": 2072784898,
928
+ "output_hex": "fffe",
929
+ "precision": 2,
930
+ "source_hex": "fffefd",
931
+ "trace_sha256": "03b994ad6c5961112728416682c468e6d81be35542a2f5d019693294e659e823",
932
+ "width": 0
933
+ },
934
+ {
935
+ "child_memory_bytes": {
936
+ "2072784896": 255,
937
+ "2072784897": 254,
938
+ "2072784898": 253
939
+ },
940
+ "cursor": 2072784899,
941
+ "output_hex": "fffefd",
942
+ "precision": 9,
943
+ "source_hex": "fffefd",
944
+ "trace_sha256": "dd9fe7a4863f3b5b388d5f33932318b4cad6f253ad26b1ce0909da52dd56af69",
945
+ "width": 0
946
+ },
947
+ {
948
+ "child_memory_bytes": {
949
+ "2072784896": 255,
950
+ "2072784897": 254,
951
+ "2072784898": 253
952
+ },
953
+ "cursor": 2072784899,
954
+ "output_hex": "fffefd",
955
+ "precision": -1,
956
+ "source_hex": "fffefd",
957
+ "trace_sha256": "7a9bff3390934abebdfb17424406a67dc6e9a1845d453791028a2d59cd76442f",
958
+ "width": 3
959
+ },
960
+ {
961
+ "child_memory_bytes": {
962
+ "2072784896": 32,
963
+ "2072784897": 32,
964
+ "2072784898": 32
965
+ },
966
+ "cursor": 2072784899,
967
+ "output_hex": "202020",
968
+ "precision": 0,
969
+ "source_hex": "fffefd",
970
+ "trace_sha256": "51d35a23808240c273fde6aaf8d6f94ca5c02c5c196b4f6175d237608f5dc4b9",
971
+ "width": 3
972
+ },
973
+ {
974
+ "child_memory_bytes": {
975
+ "2072784896": 255,
976
+ "2072784897": 254,
977
+ "2072784898": 32
978
+ },
979
+ "cursor": 2072784899,
980
+ "output_hex": "fffe20",
981
+ "precision": 2,
982
+ "source_hex": "fffefd",
983
+ "trace_sha256": "323588eece052789c2c80c092f841c8f4213a4ec4200fb509e0c3f8392865004",
984
+ "width": 3
985
+ },
986
+ {
987
+ "child_memory_bytes": {
988
+ "2072784896": 255,
989
+ "2072784897": 254,
990
+ "2072784898": 253
991
+ },
992
+ "cursor": 2072784899,
993
+ "output_hex": "fffefd",
994
+ "precision": 9,
995
+ "source_hex": "fffefd",
996
+ "trace_sha256": "dd9fe7a4863f3b5b388d5f33932318b4cad6f253ad26b1ce0909da52dd56af69",
997
+ "width": 3
998
+ },
999
+ {
1000
+ "child_memory_bytes": {
1001
+ "2072784896": 255,
1002
+ "2072784897": 254,
1003
+ "2072784898": 253,
1004
+ "2072784899": 32,
1005
+ "2072784900": 32,
1006
+ "2072784901": 32,
1007
+ "2072784902": 32,
1008
+ "2072784903": 32
1009
+ },
1010
+ "cursor": 2072784904,
1011
+ "output_hex": "fffefd2020202020",
1012
+ "precision": -1,
1013
+ "source_hex": "fffefd",
1014
+ "trace_sha256": "caeb42ec471e4c4d6405cfd031cc8c28361a53e957390167b2972f198105fe8a",
1015
+ "width": 8
1016
+ },
1017
+ {
1018
+ "child_memory_bytes": {
1019
+ "2072784896": 32,
1020
+ "2072784897": 32,
1021
+ "2072784898": 32,
1022
+ "2072784899": 32,
1023
+ "2072784900": 32,
1024
+ "2072784901": 32,
1025
+ "2072784902": 32,
1026
+ "2072784903": 32
1027
+ },
1028
+ "cursor": 2072784904,
1029
+ "output_hex": "2020202020202020",
1030
+ "precision": 0,
1031
+ "source_hex": "fffefd",
1032
+ "trace_sha256": "8559f220ea0db1adddf794ccc045d3f2278d2d10b642ba506df5d2a63317248d",
1033
+ "width": 8
1034
+ },
1035
+ {
1036
+ "child_memory_bytes": {
1037
+ "2072784896": 255,
1038
+ "2072784897": 254,
1039
+ "2072784898": 32,
1040
+ "2072784899": 32,
1041
+ "2072784900": 32,
1042
+ "2072784901": 32,
1043
+ "2072784902": 32,
1044
+ "2072784903": 32
1045
+ },
1046
+ "cursor": 2072784904,
1047
+ "output_hex": "fffe202020202020",
1048
+ "precision": 2,
1049
+ "source_hex": "fffefd",
1050
+ "trace_sha256": "b5e05f9c843476c9c495dc3e3e93c4caed8dd9001c84d3bebd4b9605f4e5f2db",
1051
+ "width": 8
1052
+ },
1053
+ {
1054
+ "child_memory_bytes": {
1055
+ "2072784896": 255,
1056
+ "2072784897": 254,
1057
+ "2072784898": 253,
1058
+ "2072784899": 32,
1059
+ "2072784900": 32,
1060
+ "2072784901": 32,
1061
+ "2072784902": 32,
1062
+ "2072784903": 32
1063
+ },
1064
+ "cursor": 2072784904,
1065
+ "output_hex": "fffefd2020202020",
1066
+ "precision": 9,
1067
+ "source_hex": "fffefd",
1068
+ "trace_sha256": "f39783698e76f5ff454f2ed5d250c8f985367067d04a75c966a1017f6a47a43a",
1069
+ "width": 8
1070
+ },
1071
+ {
1072
+ "child_memory_bytes": {
1073
+ "2072784896": 40,
1074
+ "2072784897": 110,
1075
+ "2072784898": 117,
1076
+ "2072784899": 108,
1077
+ "2072784900": 108,
1078
+ "2072784901": 41
1079
+ },
1080
+ "cursor": 2072784902,
1081
+ "output_hex": "286e756c6c29",
1082
+ "precision": -1,
1083
+ "source_hex": null,
1084
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1085
+ "width": -1
1086
+ },
1087
+ {
1088
+ "child_memory_bytes": {
1089
+ "2072784896": 40,
1090
+ "2072784897": 110,
1091
+ "2072784898": 117,
1092
+ "2072784899": 108,
1093
+ "2072784900": 108,
1094
+ "2072784901": 41
1095
+ },
1096
+ "cursor": 2072784902,
1097
+ "output_hex": "286e756c6c29",
1098
+ "precision": 0,
1099
+ "source_hex": null,
1100
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1101
+ "width": -1
1102
+ },
1103
+ {
1104
+ "child_memory_bytes": {
1105
+ "2072784896": 40,
1106
+ "2072784897": 110,
1107
+ "2072784898": 117,
1108
+ "2072784899": 108,
1109
+ "2072784900": 108,
1110
+ "2072784901": 41
1111
+ },
1112
+ "cursor": 2072784902,
1113
+ "output_hex": "286e756c6c29",
1114
+ "precision": 2,
1115
+ "source_hex": null,
1116
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1117
+ "width": -1
1118
+ },
1119
+ {
1120
+ "child_memory_bytes": {
1121
+ "2072784896": 40,
1122
+ "2072784897": 110,
1123
+ "2072784898": 117,
1124
+ "2072784899": 108,
1125
+ "2072784900": 108,
1126
+ "2072784901": 41
1127
+ },
1128
+ "cursor": 2072784902,
1129
+ "output_hex": "286e756c6c29",
1130
+ "precision": 9,
1131
+ "source_hex": null,
1132
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1133
+ "width": -1
1134
+ },
1135
+ {
1136
+ "child_memory_bytes": {
1137
+ "2072784896": 40,
1138
+ "2072784897": 110,
1139
+ "2072784898": 117,
1140
+ "2072784899": 108,
1141
+ "2072784900": 108,
1142
+ "2072784901": 41
1143
+ },
1144
+ "cursor": 2072784902,
1145
+ "output_hex": "286e756c6c29",
1146
+ "precision": -1,
1147
+ "source_hex": null,
1148
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1149
+ "width": 0
1150
+ },
1151
+ {
1152
+ "child_memory_bytes": {
1153
+ "2072784896": 40,
1154
+ "2072784897": 110,
1155
+ "2072784898": 117,
1156
+ "2072784899": 108,
1157
+ "2072784900": 108,
1158
+ "2072784901": 41
1159
+ },
1160
+ "cursor": 2072784902,
1161
+ "output_hex": "286e756c6c29",
1162
+ "precision": 0,
1163
+ "source_hex": null,
1164
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1165
+ "width": 0
1166
+ },
1167
+ {
1168
+ "child_memory_bytes": {
1169
+ "2072784896": 40,
1170
+ "2072784897": 110,
1171
+ "2072784898": 117,
1172
+ "2072784899": 108,
1173
+ "2072784900": 108,
1174
+ "2072784901": 41
1175
+ },
1176
+ "cursor": 2072784902,
1177
+ "output_hex": "286e756c6c29",
1178
+ "precision": 2,
1179
+ "source_hex": null,
1180
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1181
+ "width": 0
1182
+ },
1183
+ {
1184
+ "child_memory_bytes": {
1185
+ "2072784896": 40,
1186
+ "2072784897": 110,
1187
+ "2072784898": 117,
1188
+ "2072784899": 108,
1189
+ "2072784900": 108,
1190
+ "2072784901": 41
1191
+ },
1192
+ "cursor": 2072784902,
1193
+ "output_hex": "286e756c6c29",
1194
+ "precision": 9,
1195
+ "source_hex": null,
1196
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1197
+ "width": 0
1198
+ },
1199
+ {
1200
+ "child_memory_bytes": {
1201
+ "2072784896": 40,
1202
+ "2072784897": 110,
1203
+ "2072784898": 117,
1204
+ "2072784899": 108,
1205
+ "2072784900": 108,
1206
+ "2072784901": 41
1207
+ },
1208
+ "cursor": 2072784902,
1209
+ "output_hex": "286e756c6c29",
1210
+ "precision": -1,
1211
+ "source_hex": null,
1212
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1213
+ "width": 3
1214
+ },
1215
+ {
1216
+ "child_memory_bytes": {
1217
+ "2072784896": 40,
1218
+ "2072784897": 110,
1219
+ "2072784898": 117,
1220
+ "2072784899": 108,
1221
+ "2072784900": 108,
1222
+ "2072784901": 41
1223
+ },
1224
+ "cursor": 2072784902,
1225
+ "output_hex": "286e756c6c29",
1226
+ "precision": 0,
1227
+ "source_hex": null,
1228
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1229
+ "width": 3
1230
+ },
1231
+ {
1232
+ "child_memory_bytes": {
1233
+ "2072784896": 40,
1234
+ "2072784897": 110,
1235
+ "2072784898": 117,
1236
+ "2072784899": 108,
1237
+ "2072784900": 108,
1238
+ "2072784901": 41
1239
+ },
1240
+ "cursor": 2072784902,
1241
+ "output_hex": "286e756c6c29",
1242
+ "precision": 2,
1243
+ "source_hex": null,
1244
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1245
+ "width": 3
1246
+ },
1247
+ {
1248
+ "child_memory_bytes": {
1249
+ "2072784896": 40,
1250
+ "2072784897": 110,
1251
+ "2072784898": 117,
1252
+ "2072784899": 108,
1253
+ "2072784900": 108,
1254
+ "2072784901": 41
1255
+ },
1256
+ "cursor": 2072784902,
1257
+ "output_hex": "286e756c6c29",
1258
+ "precision": 9,
1259
+ "source_hex": null,
1260
+ "trace_sha256": "c9e68627656f8048e75bca6bae7b0a00e1257a507b0bcc86a121d3ba9dd2e039",
1261
+ "width": 3
1262
+ },
1263
+ {
1264
+ "child_memory_bytes": {
1265
+ "2072784896": 40,
1266
+ "2072784897": 110,
1267
+ "2072784898": 117,
1268
+ "2072784899": 108,
1269
+ "2072784900": 108,
1270
+ "2072784901": 41,
1271
+ "2072784902": 32,
1272
+ "2072784903": 32
1273
+ },
1274
+ "cursor": 2072784904,
1275
+ "output_hex": "286e756c6c292020",
1276
+ "precision": -1,
1277
+ "source_hex": null,
1278
+ "trace_sha256": "3bb99886819e4190282bfc4ef4ef2dac4f0ff9b86919f303cff025d72ddff4f9",
1279
+ "width": 8
1280
+ },
1281
+ {
1282
+ "child_memory_bytes": {
1283
+ "2072784896": 40,
1284
+ "2072784897": 110,
1285
+ "2072784898": 117,
1286
+ "2072784899": 108,
1287
+ "2072784900": 108,
1288
+ "2072784901": 41,
1289
+ "2072784902": 32,
1290
+ "2072784903": 32
1291
+ },
1292
+ "cursor": 2072784904,
1293
+ "output_hex": "286e756c6c292020",
1294
+ "precision": 0,
1295
+ "source_hex": null,
1296
+ "trace_sha256": "3bb99886819e4190282bfc4ef4ef2dac4f0ff9b86919f303cff025d72ddff4f9",
1297
+ "width": 8
1298
+ },
1299
+ {
1300
+ "child_memory_bytes": {
1301
+ "2072784896": 40,
1302
+ "2072784897": 110,
1303
+ "2072784898": 117,
1304
+ "2072784899": 108,
1305
+ "2072784900": 108,
1306
+ "2072784901": 41,
1307
+ "2072784902": 32,
1308
+ "2072784903": 32
1309
+ },
1310
+ "cursor": 2072784904,
1311
+ "output_hex": "286e756c6c292020",
1312
+ "precision": 2,
1313
+ "source_hex": null,
1314
+ "trace_sha256": "3bb99886819e4190282bfc4ef4ef2dac4f0ff9b86919f303cff025d72ddff4f9",
1315
+ "width": 8
1316
+ },
1317
+ {
1318
+ "child_memory_bytes": {
1319
+ "2072784896": 40,
1320
+ "2072784897": 110,
1321
+ "2072784898": 117,
1322
+ "2072784899": 108,
1323
+ "2072784900": 108,
1324
+ "2072784901": 41,
1325
+ "2072784902": 32,
1326
+ "2072784903": 32
1327
+ },
1328
+ "cursor": 2072784904,
1329
+ "output_hex": "286e756c6c292020",
1330
+ "precision": 9,
1331
+ "source_hex": null,
1332
+ "trace_sha256": "3bb99886819e4190282bfc4ef4ef2dac4f0ff9b86919f303cff025d72ddff4f9",
1333
+ "width": 8
1334
+ }
1335
+ ],
1336
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1337
+ "source": {
1338
+ "archive": "zUrT43_qvm.pk3",
1339
+ "archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
1340
+ "member": {
1341
+ "bytes": 983300,
1342
+ "comment_hex": "",
1343
+ "compressed_bytes": 246560,
1344
+ "compression": 8,
1345
+ "crc32": "98ea1768",
1346
+ "create_system": 0,
1347
+ "create_version": 63,
1348
+ "date_time": [
1349
+ 2018,
1350
+ 6,
1351
+ 18,
1352
+ 22,
1353
+ 11,
1354
+ 50
1355
+ ],
1356
+ "directory": false,
1357
+ "entry_index": 2,
1358
+ "external_attr": 32,
1359
+ "extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
1360
+ "extract_version": 20,
1361
+ "flags": 0,
1362
+ "header_offset": 221309,
1363
+ "internal_attr": 0,
1364
+ "occurrence": 0,
1365
+ "output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
1366
+ "path": "vm/qagame.qvm",
1367
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1368
+ "type": "member",
1369
+ "volume": 0
1370
+ }
1371
+ }
1372
+ }
docs/research/qvm-resumer-audit.json CHANGED
@@ -8484,6 +8484,32 @@
8484
  "repeated_calls_opt_in": false,
8485
  "repeated_calls_setting": "default_false"
8486
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8487
  {
8488
  "backward_conditional_branches": [],
8489
  "calls": [],
@@ -9679,8 +9705,8 @@
9679
  }
9680
  },
9681
  "summary": {
9682
- "call_expressions": 193,
9683
- "files": 149,
9684
  "legacy_expressions": 158,
9685
  "nonliteral_ranges": 24,
9686
  "unresolved_mode_expressions": 3
 
8484
  "repeated_calls_opt_in": false,
8485
  "repeated_calls_setting": "default_false"
8486
  },
8487
+ {
8488
+ "backward_conditional_branches": [
8489
+ 37814,
8490
+ 37876,
8491
+ 37906
8492
+ ],
8493
+ "calls": [
8494
+ {
8495
+ "dynamic_store_requires_review": false,
8496
+ "implicit_local_offset": 20,
8497
+ "instruction": 37822,
8498
+ "stores_result": true,
8499
+ "target": 36038
8500
+ }
8501
+ ],
8502
+ "explicit_result_offsets": null,
8503
+ "helper": "qvm_trace_support.resume",
8504
+ "line": 13,
8505
+ "literal_range": [
8506
+ 37769,
8507
+ 37912
8508
+ ],
8509
+ "path": "scripts/qvm_formatter_support.py",
8510
+ "repeated_calls_opt_in": true,
8511
+ "repeated_calls_setting": "literal_true"
8512
+ },
8513
  {
8514
  "backward_conditional_branches": [],
8515
  "calls": [],
 
9705
  }
9706
  },
9707
  "summary": {
9708
+ "call_expressions": 194,
9709
+ "files": 150,
9710
  "legacy_expressions": 158,
9711
  "nonliteral_ranges": 24,
9712
  "unresolved_mode_expressions": 3
scripts/analyze_qvm_format_string.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import itertools
3
+ from pathlib import Path
4
+ from qvm_research_support import source
5
+ from qvm_formatter_support import T,image_bytes,string_field
6
+ from analyze_qvm import write_json
7
+ P=T+0x1000;SRC=P+0x1000;OUT=P+0x2000
8
+
9
+ def main():
10
+ q,raw,h,ins=source();fallback=image_bytes(raw,h,55135);rows=[]
11
+ for value,width,precision in itertools.product([b'',b'A',b'abcdef',b'A\0suffix',bytes([255,254,253]),None],[-1,0,3,8],[-1,0,2,9]):
12
+ b={55135+j:v for j,v in enumerate(raw[h['data_offset']+55135:h['data_offset']+55135+len(fallback)+4])}
13
+ if value is not None:b.update({SRC+j:v for j,v in enumerate(value+b'\0'+b'\0'*4)})
14
+ m,_,e=string_field(ins,{P:OUT},{8:P,12:SRC if value is not None else 0,16:width,20:precision},b);rows.append({'source_hex':None if value is None else value.hex(),'width':width,'precision':precision,**e})
15
+ write_json(Path('docs/research/qvm-format-string.json'),{'source':q['source'],'sha256':q['sha256'],'fallback_hex':fallback.hex(),'probes':rows,'limits':'Actual37768 and actual36038 for unbounded precision. String width always trails with spaces; null pointer replaces precision with-minus-one and source literal55135. Finite initialized byte inputs; no central formatter/host ABI parity yet.'})
16
+ if __name__=='__main__':main()
scripts/qvm_formatter_support.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Recovered formatter helpers; bounded byte interfaces, no host printf."""
2
+ from qvm_health_effects_support import H
3
+ from qvm_string_memory_support import frame_args,strlen
4
+ from qvm_byte_memory_support import read_bytes
5
+ from qvm_trace_support import resume
6
+ T=H+0x6c0000
7
+
8
+ def image_bytes(raw,h,address):
9
+ text=raw[h['data_offset']+address:];return text[:text.index(0)+1]
10
+
11
+ def string_field(ins,m,args,b):
12
+ before=int.from_bytes(read_bytes(m,b,args[8],4),'little');m,b=frame_args(m,b,{T+28+o:v for o,v in args.items()})
13
+ m,e=resume(ins,37769,37912,m,T,handlers={36038:strlen},byte_inputs=b,repeated_calls=True,sync_child_words=True,coherent_memory=True,byte_handlers=True,capture_byte_memory=True,limit=32768)
14
+ after=int.from_bytes(read_bytes(m,e['byte_memory'],args[8],4),'little');data=read_bytes(m,e['byte_memory'],before,after-before)
15
+ return m,0,{'child_memory_bytes':{before+j:v for j,v in enumerate(data)},'output_hex':data.hex(),'cursor':after,'trace_sha256':e['trace_sha256']}
scripts/test_qvm_format_string.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ class FormatStringTests(unittest.TestCase):
4
+ def test_independent_precision_null_and_trailing_width(self):
5
+ r=json.loads(Path('docs/research/qvm-format-string.json').read_text());self.assertEqual(len(r['probes']),96)
6
+ for p in r['probes']:
7
+ text=bytes.fromhex(r['fallback_hex']).split(b'\0')[0] if p['source_hex'] is None else bytes.fromhex(p['source_hex']).split(b'\0')[0]
8
+ if p['source_hex'] is not None and p['precision']>=0:text=text[:p['precision']]
9
+ expected=text+b' '*max(0,p['width']-len(text));self.assertEqual(p['output_hex'],expected.hex());self.assertEqual(p['cursor'],0x7b200000+0x6c0000+0x3000+len(expected))
10
+ def test_source_quirks_have_explicit_witnesses(self):
11
+ r=json.loads(Path('docs/research/qvm-format-string.json').read_text());p=next(p for p in r['probes'] if p['source_hex']=='41' and p['width']==3 and p['precision']==-1);self.assertEqual(bytes.fromhex(p['output_hex']),b'A ');self.assertTrue(any(p['source_hex'] is None and p['precision']==0 and p['output_hex'] for p in r['probes']))
12
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -1970,3 +1970,8 @@ edge scripts/analyze_qvm_stat_award_composition.py scripts/analyze_qvm_resumer_a
1970
  edge docs/research/qvm-scoreboard-rows.json scripts/analyze_rust_scoreboard_rows.py
1971
  edge docs/research/qvm-scoreboard-wire.json scripts/analyze_rust_scoreboard_packet.py
1972
  edge docs/research/qvm-scoreboard-stream.json scripts/analyze_rust_scoreboard_stream.py
 
 
 
 
 
 
1970
  edge docs/research/qvm-scoreboard-rows.json scripts/analyze_rust_scoreboard_rows.py
1971
  edge docs/research/qvm-scoreboard-wire.json scripts/analyze_rust_scoreboard_packet.py
1972
  edge docs/research/qvm-scoreboard-stream.json scripts/analyze_rust_scoreboard_stream.py
1973
+ report scripts/analyze_qvm_format_string.py docs/research/qvm-format-string.json
1974
+ edge docs/research/qvm-format-string.json scripts/test_qvm_format_string.py
1975
+ group format-string scripts/analyze_qvm_format_string.py
1976
+ edge scripts/analyze_qvm_format_string.py scripts/analyze_qvm_resumer_audit.py
1977
+ edge scripts/qvm_formatter_support.py scripts/analyze_qvm_resumer_audit.py