diff --git a/research/k8-frame-antichain/BASELINE-REPLAY.json b/research/k8-frame-antichain/BASELINE-REPLAY.json new file mode 100644 index 0000000000..7952f87c56 --- /dev/null +++ b/research/k8-frame-antichain/BASELINE-REPLAY.json @@ -0,0 +1,262 @@ +{ + "base": [ + { + "step": "shadow-early", + "exit_code": 0, + "seconds": 0.312 + }, + { + "step": "shadow-prefix", + "exit_code": 0, + "seconds": 0.472 + }, + { + "step": "gauge-forward", + "exit_code": 0, + "seconds": 0.45 + }, + { + "step": "port0", + "exit_code": 0, + "seconds": 0.346 + }, + { + "step": "port1", + "exit_code": 0, + "seconds": 0.356 + }, + { + "step": "port2", + "exit_code": 0, + "seconds": 0.354 + }, + { + "step": "port3", + "exit_code": 0, + "seconds": 0.442 + } + ], + "cell": [ + { + "step": "gauge-forward", + "exit_code": 0, + "seconds": 0.395 + }, + { + "step": "port0", + "exit_code": 0, + "seconds": 0.374 + }, + { + "step": "port1", + "exit_code": 0, + "seconds": 0.482 + }, + { + "step": "port2", + "exit_code": 0, + "seconds": 0.517 + }, + { + "step": "port3", + "exit_code": 0, + "seconds": 0.442 + }, + { + "step": "cold44", + "exit_code": 0, + "seconds": 2.81 + } + ], + "chain": [ + { + "step": "pivot-swap", + "exit_code": 0, + "seconds": 10.172 + }, + { + "step": "cold44-exact", + "exit_code": 0, + "seconds": 2.01 + }, + { + "step": "lec-p6n", + "exit_code": 0, + "seconds": 117.763 + }, + { + "step": "promotion", + "exit_code": 0, + "seconds": 0.264 + }, + { + "step": "promo-controls", + "exit_code": 0, + "seconds": 7.186 + }, + { + "step": "lec-promo", + "exit_code": 0, + "seconds": 81.834 + }, + { + "step": "jx", + "exit_code": 0, + "seconds": 0.174 + }, + { + "step": "jx-control-C0_identity", + "exit_code": 0, + "seconds": 0.127 + }, + { + "step": "jx-control-C1_741_only", + "exit_code": 0, + "seconds": 0.128 + }, + { + "step": "jx-control-N3_plain_join_moved_reads", + "exit_code": 0, + "seconds": 0.133 + }, + { + "step": "lec-jx", + "exit_code": 0, + "seconds": 105.512 + }, + { + "step": "hybrids", + "exit_code": 0, + "seconds": 0.105 + }, + { + "step": "hybrid-controls", + "exit_code": 0, + "seconds": 13.119 + }, + { + "step": "lec-hyb", + "exit_code": 0, + "seconds": 88.857 + }, + { + "step": "frames", + "exit_code": 0, + "seconds": 0.521 + }, + { + "step": "lec-frames", + "exit_code": 0, + "seconds": 90.473 + }, + { + "step": "native", + "exit_code": 0, + "seconds": 1.243 + }, + { + "step": "ledgers", + "exit_code": 0, + "seconds": 0.822 + }, + { + "step": "local-replay", + "exit_code": 0, + "seconds": 5.213 + }, + { + "step": "wrappers", + "exit_code": 0, + "seconds": 2.337 + }, + { + "step": "phases", + "exit_code": 0, + "seconds": 191.38 + } + ], + "slots": [ + { + "step": "slots", + "command": [ + "python3", + "-B", + "SOURCES/research/gauge44-leaver8/construction/barch/build_tri.py", + "CHAIN/frames/FULL-WORD.json.gz", + "SOURCES/research/gauge44-slots/construction/slots/RECIPE-SLOTS-k8.json", + "SLOTS/FULL-WORD.json.gz" + ], + "exit_code": 0, + "seconds": 0.14077299972996116 + }, + { + "step": "native", + "command": [ + "python3", + "-B", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/code/run_portable.py", + "SOURCES/research/complex-571-cold14-st2/code/hpe_audit_and_transport.py", + "--raw", + "SLOTS/FULL-WORD.json.gz", + "--routing", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/vendor/pr558/vendor/pr552/complex-local/inputs/phase-baseline/CANONICAL-WORD.json.gz", + "--out", + "SLOTS/local" + ], + "exit_code": 0, + "seconds": 1.8713445831090212 + }, + { + "step": "ledgers", + "command": [ + "python3", + "-B", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/code/run_portable.py", + "SOURCES/research/complex-571-cold14-st2/code/hpe_emit_local.py", + "SLOTS/local" + ], + "exit_code": 0, + "seconds": 1.0618331669829786 + }, + { + "step": "local-replay", + "command": [ + "python3", + "-B", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/code/run_portable.py", + "SOURCES/research/complex-571-cold14-st2/code/hpe_audit_local.py", + "SLOTS/local" + ], + "exit_code": 0, + "seconds": 6.432917749974877 + }, + { + "step": "wrappers", + "command": [ + "python3", + "-B", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/code/run_portable.py", + "SOURCES/research/complex-571-cold14-st2/code/hpe_adapters_local.py", + "SLOTS/local/CANONICAL-WORD.json.gz", + "SLOTS/local/RESIDUAL-ADAPTERS.json", + "SLOTS/local/WRAPPER-CHECKS.json" + ], + "exit_code": 0, + "seconds": 2.5233489158563316 + }, + { + "step": "exact-phases", + "command": [ + "python3", + "-B", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/code/run_portable.py", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/vendor/pr558/code/phases_full.py", + "SLOTS/local", + "MAIN/research/complex-k492-owner-repair/vendor/multicold/vendor/pr558/vendor/pr552/complex-global/vendor531/vendor/clifford" + ], + "exit_code": 0, + "seconds": 339.10877466667444, + "clifford_recipes_sha256": "d0768f2164d5f64a2fdbec422f1cfde4e400818792f1904ca541958377243731" + } + ] +} diff --git a/research/k8-frame-antichain/BASELINE-REPLAY.md b/research/k8-frame-antichain/BASELINE-REPLAY.md new file mode 100644 index 0000000000..3611b9d264 --- /dev/null +++ b/research/k8-frame-antichain/BASELINE-REPLAY.md @@ -0,0 +1,61 @@ +# Separate baseline rebuild + +The native baseline was rebuilt with unchanged source files and one CPU +thread. Output went to separate directories. No source assertion was +removed, replaced, or patched at runtime. + +The roles in the recorded commands are: + +| Role | Exact source | +| --- | --- | +| MAIN | base `abdc6a7002abdbcd9e21bfc5e1a795784deacfdf` | +| SOURCES, gauge44-leaver8 and gauge44-slots | PR1074 `052afc128954f7b6a2b3c409eb4d72248e4020f2` | +| SOURCES, complex-571-cold14-st2 | PR635 `a6895a69f8ad98ab45777b03e9e6f48888c39f6f` | +| BASE, CELL, CHAIN, SLOTS | separate generated output directories | + +The scalar chain used these commands, with each role replaced by its path: + +```sh +python3 -B SOURCES/research/gauge44-leaver8/construction/reproduce.py \ + --main MAIN --pr635 SOURCES --out BASE --until word --frozen-cold +python3 -B SOURCES/research/gauge44-leaver8/construction/leaver/reproduce_leaver.py \ + --main MAIN --pr635 SOURCES --word-dir BASE --id k8 --out CELL --word-only +python3 -B SOURCES/research/gauge44-leaver8/construction/leaver/reproduce_leaver_chain.py \ + --main MAIN --pr635 SOURCES --leaver-dir CELL --hamming BASE/hamming \ + --id k8 --out CHAIN +python3 -B SOURCES/research/gauge44-leaver8/construction/barch/build_tri.py \ + CHAIN/frames/FULL-WORD.json.gz \ + SOURCES/research/gauge44-slots/construction/slots/RECIPE-SLOTS-k8.json \ + SLOTS/FULL-WORD.json.gz +``` + +The base driver, cell driver, and all 21 k8 chain steps exited zero. +The last chain step checked its exact phases. The seven-slot word then +passed the unchanged PR635 native transport, local emission, local +endpoint audit, and residual-adapter checks. The unchanged PR558 +`phases_full.py` checked all 2,896 exact phase edges. The recipe digest +matched the seven-slot source pin. `BASELINE-REPLAY.json` records every +command and exit code with the role names above. + +The native tools were called through MAIN's retained +`research/complex-k492-owner-repair/vendor/multicold/code/run_portable.py`. +`MULTICOLD_SOURCE` and `GAIN_PR564_SOURCE` both named that `multicold` +directory. `OPENBLAS_NUM_THREADS`, `OMP_NUM_THREADS`, and +`VECLIB_MAXIMUM_THREADS` were set to one. + +| Output | Content SHA256 | +| --- | --- | +| Raw seven-slot word | `c2b294300760e1fd6eeab8c22c4d13e4633dca40e52cac8da0d68163a76e3ca8` | +| Canonical seven-slot word | `4ddb29fb9bc6f27e0c0fbfcf19a2a93a3496ad900d0f6d89059d0305c9576c0c` | +| Exact Clifford recipes | `d0768f2164d5f64a2fdbec422f1cfde4e400818792f1904ca541958377243731` | + +The raw word is the bundled input. A gzip input is bound by its +decompressed content, not its compression stream. This avoids a false +failure from a different Python or zlib version. + +The seven-slot-specific 34 controls and its old owner-map global replay +were not rerun by this lane. The new package's five controls are different +checks of its mathematical claims. The separate owner-packing lane uses +the same completed native baseline for its own full supplier replay. +No new full supplier, outer assembly, or repository-wide cold replay is +claimed by this package. diff --git a/research/k8-frame-antichain/CERTIFICATE.json b/research/k8-frame-antichain/CERTIFICATE.json new file mode 100644 index 0000000000..a3f0624c61 --- /dev/null +++ b/research/k8-frame-antichain/CERTIFICATE.json @@ -0,0 +1,11371 @@ +{ + "status": "PASS_K8_FRAME_ANTICHAIN", + "base_commit": "abdc6a7002abdbcd9e21bfc5e1a795784deacfdf", + "scope": "fixed factory value/frame interface; no kappa claim", + "factory": { + "demand_frame_count": 168, + "demand_value_count": 192, + "frame_ranks": { + "2": 24, + "3": 144 + }, + "source_registers": 112, + "register_lower_bound": 336, + "helper_lower_bound": 224, + "attained_helpers": 224, + "upper_witness": { + "modules": 14, + "registers_per_module": 24, + "source_partition": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + "executed_adds": 728 + }, + "witnesses": [ + { + "phase": "A", + "event": 1594, + "register": 18, + "frame": [ + 8, + 6 + ], + "clean_row": [ + [ + 17, + "-1/2" + ], + [ + 18, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1593, + "register": 17, + "frame": [ + 8, + 6 + ], + "clean_row": [ + [ + 17, + "1" + ], + [ + 18, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1280, + "register": 59, + "frame": [ + 32, + 6 + ], + "clean_row": [ + [ + 56, + "-1/2" + ], + [ + 59, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1279, + "register": 56, + "frame": [ + 32, + 6 + ], + "clean_row": [ + [ + 56, + "1" + ], + [ + 59, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 3150, + "register": 429, + "frame": [ + 49, + 6 + ], + "clean_row": [ + [ + 85, + "-1/2" + ], + [ + 86, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3149, + "register": 427, + "frame": [ + 49, + 6 + ], + "clean_row": [ + [ + 85, + "1" + ], + [ + 86, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1302, + "register": 237, + "frame": [ + 56, + 6 + ], + "clean_row": [ + [ + 61, + "-1/2" + ], + [ + 62, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1301, + "register": 235, + "frame": [ + 56, + 6 + ], + "clean_row": [ + [ + 61, + "1" + ], + [ + 62, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 3128, + "register": 83, + "frame": [ + 73, + 6 + ], + "clean_row": [ + [ + 80, + "-1/2" + ], + [ + 83, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3127, + "register": 80, + "frame": [ + 73, + 6 + ], + "clean_row": [ + [ + 80, + "1" + ], + [ + 83, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1608, + "register": 271, + "frame": [ + 104, + 6 + ], + "clean_row": [ + [ + 20, + "-1/2" + ], + [ + 23, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1607, + "register": 265, + "frame": [ + 104, + 6 + ], + "clean_row": [ + [ + 20, + "1" + ], + [ + 23, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 2980, + "register": 90, + "frame": [ + 137, + 6 + ], + "clean_row": [ + [ + 89, + "-1/2" + ], + [ + 90, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2979, + "register": 89, + "frame": [ + 137, + 6 + ], + "clean_row": [ + [ + 89, + "1" + ], + [ + 90, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 3304, + "register": 445, + "frame": [ + 161, + 6 + ], + "clean_row": [ + [ + 53, + "-1/2" + ], + [ + 54, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3303, + "register": 443, + "frame": [ + 161, + 6 + ], + "clean_row": [ + [ + 53, + "1" + ], + [ + 54, + "1" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1456, + "register": 253, + "frame": [ + 168, + 6 + ], + "clean_row": [ + [ + 29, + "-1/2" + ], + [ + 30, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1455, + "register": 251, + "frame": [ + 168, + 6 + ], + "clean_row": [ + [ + 29, + "1" + ], + [ + 30, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 3282, + "register": 51, + "frame": [ + 185, + 6 + ], + "clean_row": [ + [ + 48, + "-1/2" + ], + [ + 51, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3281, + "register": 48, + "frame": [ + 185, + 6 + ], + "clean_row": [ + [ + 48, + "1" + ], + [ + 51, + "1" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1434, + "register": 27, + "frame": [ + 208, + 6 + ], + "clean_row": [ + [ + 24, + "-1/2" + ], + [ + 27, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1433, + "register": 24, + "frame": [ + 208, + 6 + ], + "clean_row": [ + [ + 24, + "1" + ], + [ + 27, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2994, + "register": 415, + "frame": [ + 233, + 6 + ], + "clean_row": [ + [ + 92, + "-1/2" + ], + [ + 95, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2993, + "register": 409, + "frame": [ + 233, + 6 + ], + "clean_row": [ + [ + 92, + "1" + ], + [ + 95, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "B", + "event": 853, + "register": 97, + "frame": [ + 259, + 131, + 24 + ], + "clean_row": [ + [ + 96, + "1" + ], + [ + 97, + "1" + ], + [ + 98, + "1" + ], + [ + 99, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2845, + "register": 390, + "frame": [ + 259, + 131, + 96 + ], + "clean_row": [ + [ + 97, + "1" + ], + [ + 99, + "1" + ], + [ + 101, + "1" + ], + [ + 103, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2849, + "register": 396, + "frame": [ + 259, + 131, + 120 + ], + "clean_row": [ + [ + 97, + "-1/2" + ], + [ + 99, + "-1/2" + ], + [ + 100, + "1/2" + ], + [ + 102, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2848, + "register": 102, + "frame": [ + 259, + 155, + 96 + ], + "clean_row": [ + [ + 96, + "-1/2" + ], + [ + 97, + "-1/2" + ], + [ + 102, + "1/2" + ], + [ + 103, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2844, + "register": 386, + "frame": [ + 259, + 155, + 120 + ], + "clean_row": [ + [ + 96, + "1" + ], + [ + 97, + "1" + ], + [ + 100, + "1" + ], + [ + 101, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "B", + "event": 854, + "register": 98, + "frame": [ + 259, + 227, + 24 + ], + "clean_row": [ + [ + 97, + "-1/2" + ], + [ + 98, + "1/2" + ], + [ + 101, + "-1/2" + ], + [ + 102, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2974, + "register": 91, + "frame": [ + 265, + 6 + ], + "clean_row": [ + [ + 88, + "-1/2" + ], + [ + 91, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2973, + "register": 88, + "frame": [ + 265, + 6 + ], + "clean_row": [ + [ + 88, + "1" + ], + [ + 91, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2998, + "register": 402, + "frame": [ + 265, + 137, + 96 + ], + "clean_row": [ + [ + 88, + "1" + ], + [ + 89, + "1" + ], + [ + 92, + "1" + ], + [ + 93, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 3002, + "register": 94, + "frame": [ + 265, + 137, + 102 + ], + "clean_row": [ + [ + 88, + "-1/2" + ], + [ + 89, + "-1/2" + ], + [ + 94, + "1/2" + ], + [ + 95, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 3004, + "register": 414, + "frame": [ + 265, + 143, + 96 + ], + "clean_row": [ + [ + 88, + "-1/2" + ], + [ + 90, + "-1/2" + ], + [ + 93, + "1/2" + ], + [ + 95, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 3000, + "register": 404, + "frame": [ + 265, + 143, + 102 + ], + "clean_row": [ + [ + 88, + "1" + ], + [ + 90, + "1" + ], + [ + 92, + "1" + ], + [ + 94, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "B", + "event": 779, + "register": 105, + "frame": [ + 266, + 138, + 30 + ], + "clean_row": [ + [ + 104, + "1" + ], + [ + 105, + "1" + ], + [ + 106, + "1" + ], + [ + 107, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2229, + "register": 326, + "frame": [ + 266, + 138, + 96 + ], + "clean_row": [ + [ + 105, + "1" + ], + [ + 107, + "1" + ], + [ + 109, + "1" + ], + [ + 111, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2233, + "register": 332, + "frame": [ + 266, + 138, + 126 + ], + "clean_row": [ + [ + 105, + "-1/2" + ], + [ + 107, + "-1/2" + ], + [ + 108, + "1/2" + ], + [ + 110, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2232, + "register": 110, + "frame": [ + 266, + 148, + 96 + ], + "clean_row": [ + [ + 104, + "-1/2" + ], + [ + 105, + "-1/2" + ], + [ + 110, + "1/2" + ], + [ + 111, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2228, + "register": 322, + "frame": [ + 266, + 148, + 126 + ], + "clean_row": [ + [ + 104, + "1" + ], + [ + 105, + "1" + ], + [ + 108, + "1" + ], + [ + 109, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "B", + "event": 780, + "register": 106, + "frame": [ + 266, + 234, + 30 + ], + "clean_row": [ + [ + 105, + "-1/2" + ], + [ + 106, + "1/2" + ], + [ + 109, + "-1/2" + ], + [ + 110, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 3003, + "register": 412, + "frame": [ + 271, + 137, + 96 + ], + "clean_row": [ + [ + 89, + "-1/2" + ], + [ + 91, + "-1/2" + ], + [ + 92, + "1/2" + ], + [ + 94, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2999, + "register": 406, + "frame": [ + 271, + 137, + 102 + ], + "clean_row": [ + [ + 89, + "1" + ], + [ + 91, + "1" + ], + [ + 93, + "1" + ], + [ + 95, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2997, + "register": 407, + "frame": [ + 271, + 143, + 96 + ], + "clean_row": [ + [ + 90, + "1" + ], + [ + 91, + "1" + ], + [ + 94, + "1" + ], + [ + 95, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 3001, + "register": 408, + "frame": [ + 271, + 143, + 102 + ], + "clean_row": [ + [ + 90, + "-1/2" + ], + [ + 91, + "-1/2" + ], + [ + 92, + "1/2" + ], + [ + 93, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2231, + "register": 328, + "frame": [ + 276, + 138, + 96 + ], + "clean_row": [ + [ + 106, + "-1/2" + ], + [ + 107, + "-1/2" + ], + [ + 108, + "1/2" + ], + [ + 109, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2227, + "register": 327, + "frame": [ + 276, + 138, + 126 + ], + "clean_row": [ + [ + 106, + "1" + ], + [ + 107, + "1" + ], + [ + 110, + "1" + ], + [ + 111, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2230, + "register": 324, + "frame": [ + 276, + 148, + 96 + ], + "clean_row": [ + [ + 104, + "1" + ], + [ + 106, + "1" + ], + [ + 108, + "1" + ], + [ + 110, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2234, + "register": 334, + "frame": [ + 276, + 148, + 126 + ], + "clean_row": [ + [ + 104, + "-1/2" + ], + [ + 106, + "-1/2" + ], + [ + 109, + "1/2" + ], + [ + 111, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2847, + "register": 392, + "frame": [ + 283, + 131, + 96 + ], + "clean_row": [ + [ + 98, + "-1/2" + ], + [ + 99, + "-1/2" + ], + [ + 100, + "1/2" + ], + [ + 101, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2843, + "register": 391, + "frame": [ + 283, + 131, + 120 + ], + "clean_row": [ + [ + 98, + "1" + ], + [ + 99, + "1" + ], + [ + 102, + "1" + ], + [ + 103, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2846, + "register": 388, + "frame": [ + 283, + 155, + 96 + ], + "clean_row": [ + [ + 96, + "1" + ], + [ + 98, + "1" + ], + [ + 100, + "1" + ], + [ + 102, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2850, + "register": 398, + "frame": [ + 283, + 155, + 120 + ], + "clean_row": [ + [ + 96, + "-1/2" + ], + [ + 98, + "-1/2" + ], + [ + 101, + "1/2" + ], + [ + 103, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 3288, + "register": 50, + "frame": [ + 289, + 6 + ], + "clean_row": [ + [ + 49, + "-1/2" + ], + [ + 50, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3287, + "register": 49, + "frame": [ + 289, + 6 + ], + "clean_row": [ + [ + 49, + "1" + ], + [ + 50, + "1" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3306, + "register": 434, + "frame": [ + 289, + 161, + 24 + ], + "clean_row": [ + [ + 48, + "1" + ], + [ + 49, + "1" + ], + [ + 52, + "1" + ], + [ + 53, + "1" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3307, + "register": 438, + "frame": [ + 289, + 161, + 30 + ], + "clean_row": [ + [ + 49, + "1" + ], + [ + 51, + "1" + ], + [ + 53, + "1" + ], + [ + 55, + "1" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3311, + "register": 444, + "frame": [ + 289, + 167, + 24 + ], + "clean_row": [ + [ + 49, + "-1/2" + ], + [ + 51, + "-1/2" + ], + [ + 52, + "1/2" + ], + [ + 54, + "1/2" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3310, + "register": 54, + "frame": [ + 289, + 167, + 30 + ], + "clean_row": [ + [ + 48, + "-1/2" + ], + [ + 49, + "-1/2" + ], + [ + 54, + "1/2" + ], + [ + 55, + "1/2" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "B", + "event": 738, + "register": 299, + "frame": [ + 290, + 162, + 24 + ], + "clean_row": [ + [ + 36, + "1" + ], + [ + 37, + "1" + ], + [ + 38, + "1" + ], + [ + 39, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 1921, + "register": 294, + "frame": [ + 290, + 162, + 102 + ], + "clean_row": [ + [ + 33, + "1" + ], + [ + 35, + "1" + ], + [ + 37, + "1" + ], + [ + 39, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 1926, + "register": 302, + "frame": [ + 290, + 162, + 126 + ], + "clean_row": [ + [ + 32, + "-1/2" + ], + [ + 34, + "-1/2" + ], + [ + 37, + "1/2" + ], + [ + 39, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 1923, + "register": 296, + "frame": [ + 290, + 186, + 102 + ], + "clean_row": [ + [ + 34, + "-1/2" + ], + [ + 35, + "-1/2" + ], + [ + 36, + "1/2" + ], + [ + 37, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 1920, + "register": 290, + "frame": [ + 290, + 186, + 126 + ], + "clean_row": [ + [ + 32, + "1" + ], + [ + 33, + "1" + ], + [ + 36, + "1" + ], + [ + 37, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "B", + "event": 740, + "register": 34, + "frame": [ + 290, + 196, + 24 + ], + "clean_row": [ + [ + 33, + "-1/2" + ], + [ + 34, + "1/2" + ], + [ + 37, + "-1/2" + ], + [ + 38, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 3312, + "register": 446, + "frame": [ + 295, + 161, + 24 + ], + "clean_row": [ + [ + 48, + "-1/2" + ], + [ + 50, + "-1/2" + ], + [ + 53, + "1/2" + ], + [ + 55, + "1/2" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3309, + "register": 440, + "frame": [ + 295, + 161, + 30 + ], + "clean_row": [ + [ + 50, + "-1/2" + ], + [ + 51, + "-1/2" + ], + [ + 52, + "1/2" + ], + [ + 53, + "1/2" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3305, + "register": 439, + "frame": [ + 295, + 167, + 24 + ], + "clean_row": [ + [ + 50, + "1" + ], + [ + 51, + "1" + ], + [ + 54, + "1" + ], + [ + 55, + "1" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3308, + "register": 436, + "frame": [ + 295, + 167, + 30 + ], + "clean_row": [ + [ + 48, + "1" + ], + [ + 50, + "1" + ], + [ + 52, + "1" + ], + [ + 54, + "1" + ] + ], + "kind": "face", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1454, + "register": 255, + "frame": [ + 296, + 6 + ], + "clean_row": [ + [ + 28, + "-1/2" + ], + [ + 31, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1453, + "register": 249, + "frame": [ + 296, + 6 + ], + "clean_row": [ + [ + 28, + "1" + ], + [ + 31, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1458, + "register": 242, + "frame": [ + 296, + 168, + 120 + ], + "clean_row": [ + [ + 24, + "1" + ], + [ + 25, + "1" + ], + [ + 28, + "1" + ], + [ + 29, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1461, + "register": 248, + "frame": [ + 296, + 168, + 126 + ], + "clean_row": [ + [ + 26, + "-1/2" + ], + [ + 27, + "-1/2" + ], + [ + 28, + "1/2" + ], + [ + 29, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1463, + "register": 252, + "frame": [ + 296, + 174, + 120 + ], + "clean_row": [ + [ + 25, + "-1/2" + ], + [ + 27, + "-1/2" + ], + [ + 28, + "1/2" + ], + [ + 30, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1460, + "register": 244, + "frame": [ + 296, + 174, + 126 + ], + "clean_row": [ + [ + 24, + "1" + ], + [ + 26, + "1" + ], + [ + 28, + "1" + ], + [ + 30, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "B", + "event": 816, + "register": 363, + "frame": [ + 301, + 173, + 30 + ], + "clean_row": [ + [ + 44, + "1" + ], + [ + 45, + "1" + ], + [ + 46, + "1" + ], + [ + 47, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2537, + "register": 358, + "frame": [ + 301, + 173, + 102 + ], + "clean_row": [ + [ + 41, + "1" + ], + [ + 43, + "1" + ], + [ + 45, + "1" + ], + [ + 47, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2542, + "register": 366, + "frame": [ + 301, + 173, + 120 + ], + "clean_row": [ + [ + 40, + "-1/2" + ], + [ + 42, + "-1/2" + ], + [ + 45, + "1/2" + ], + [ + 47, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2539, + "register": 360, + "frame": [ + 301, + 179, + 102 + ], + "clean_row": [ + [ + 42, + "-1/2" + ], + [ + 43, + "-1/2" + ], + [ + 44, + "1/2" + ], + [ + 45, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2536, + "register": 354, + "frame": [ + 301, + 179, + 120 + ], + "clean_row": [ + [ + 40, + "1" + ], + [ + 41, + "1" + ], + [ + 44, + "1" + ], + [ + 45, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "B", + "event": 818, + "register": 42, + "frame": [ + 301, + 203, + 30 + ], + "clean_row": [ + [ + 41, + "-1/2" + ], + [ + 42, + "1/2" + ], + [ + 45, + "-1/2" + ], + [ + 46, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 1464, + "register": 254, + "frame": [ + 302, + 168, + 120 + ], + "clean_row": [ + [ + 24, + "-1/2" + ], + [ + 26, + "-1/2" + ], + [ + 29, + "1/2" + ], + [ + 31, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1459, + "register": 246, + "frame": [ + 302, + 168, + 126 + ], + "clean_row": [ + [ + 25, + "1" + ], + [ + 27, + "1" + ], + [ + 29, + "1" + ], + [ + 31, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1457, + "register": 247, + "frame": [ + 302, + 174, + 120 + ], + "clean_row": [ + [ + 26, + "1" + ], + [ + 27, + "1" + ], + [ + 30, + "1" + ], + [ + 31, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1462, + "register": 30, + "frame": [ + 302, + 174, + 126 + ], + "clean_row": [ + [ + 24, + "-1/2" + ], + [ + 25, + "-1/2" + ], + [ + 30, + "1/2" + ], + [ + 31, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2540, + "register": 46, + "frame": [ + 307, + 173, + 102 + ], + "clean_row": [ + [ + 40, + "-1/2" + ], + [ + 41, + "-1/2" + ], + [ + 46, + "1/2" + ], + [ + 47, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2535, + "register": 359, + "frame": [ + 307, + 173, + 120 + ], + "clean_row": [ + [ + 42, + "1" + ], + [ + 43, + "1" + ], + [ + 46, + "1" + ], + [ + 47, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2538, + "register": 356, + "frame": [ + 307, + 179, + 102 + ], + "clean_row": [ + [ + 40, + "1" + ], + [ + 42, + "1" + ], + [ + 44, + "1" + ], + [ + 46, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 2541, + "register": 364, + "frame": [ + 307, + 179, + 120 + ], + "clean_row": [ + [ + 41, + "-1/2" + ], + [ + 43, + "-1/2" + ], + [ + 44, + "1/2" + ], + [ + 46, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 3302, + "register": 447, + "frame": [ + 313, + 6 + ], + "clean_row": [ + [ + 52, + "-1/2" + ], + [ + 55, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3301, + "register": 441, + "frame": [ + 313, + 6 + ], + "clean_row": [ + [ + 52, + "1" + ], + [ + 55, + "1" + ] + ], + "kind": "leaver", + "block": [ + 4, + 5, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1924, + "register": 38, + "frame": [ + 314, + 162, + 102 + ], + "clean_row": [ + [ + 32, + "-1/2" + ], + [ + 33, + "-1/2" + ], + [ + 38, + "1/2" + ], + [ + 39, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 1919, + "register": 295, + "frame": [ + 314, + 162, + 126 + ], + "clean_row": [ + [ + 34, + "1" + ], + [ + 35, + "1" + ], + [ + 38, + "1" + ], + [ + 39, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 1922, + "register": 292, + "frame": [ + 314, + 186, + 102 + ], + "clean_row": [ + [ + 32, + "1" + ], + [ + 34, + "1" + ], + [ + 36, + "1" + ], + [ + 38, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 1925, + "register": 300, + "frame": [ + 314, + 186, + 126 + ], + "clean_row": [ + [ + 33, + "-1/2" + ], + [ + 35, + "-1/2" + ], + [ + 36, + "1/2" + ], + [ + 38, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "B", + "event": 741, + "register": 303, + "frame": [ + 324, + 162, + 24 + ], + "clean_row": [ + [ + 32, + "-1/2" + ], + [ + 35, + "1/2" + ], + [ + 36, + "-1/2" + ], + [ + 39, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "B", + "event": 739, + "register": 33, + "frame": [ + 324, + 196, + 24 + ], + "clean_row": [ + [ + 32, + "1" + ], + [ + 33, + "1" + ], + [ + 34, + "1" + ], + [ + 35, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 5, + 7 + ] + }, + { + "phase": "B", + "event": 819, + "register": 367, + "frame": [ + 331, + 173, + 30 + ], + "clean_row": [ + [ + 40, + "-1/2" + ], + [ + 43, + "1/2" + ], + [ + 44, + "-1/2" + ], + [ + 47, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "B", + "event": 817, + "register": 41, + "frame": [ + 331, + 203, + 30 + ], + "clean_row": [ + [ + 40, + "1" + ], + [ + 41, + "1" + ], + [ + 42, + "1" + ], + [ + 43, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 5, + 6 + ] + }, + { + "phase": "A", + "event": 1440, + "register": 26, + "frame": [ + 336, + 6 + ], + "clean_row": [ + [ + 25, + "-1/2" + ], + [ + 26, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 1439, + "register": 25, + "frame": [ + 336, + 6 + ], + "clean_row": [ + [ + 25, + "1" + ], + [ + 26, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 4, + 5 + ] + }, + { + "phase": "B", + "event": 855, + "register": 399, + "frame": [ + 355, + 131, + 24 + ], + "clean_row": [ + [ + 96, + "-1/2" + ], + [ + 99, + "1/2" + ], + [ + 100, + "-1/2" + ], + [ + 103, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "B", + "event": 852, + "register": 395, + "frame": [ + 355, + 227, + 24 + ], + "clean_row": [ + [ + 100, + "1" + ], + [ + 101, + "1" + ], + [ + 102, + "1" + ], + [ + 103, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 5, + 7 + ] + }, + { + "phase": "A", + "event": 2996, + "register": 413, + "frame": [ + 361, + 6 + ], + "clean_row": [ + [ + 93, + "-1/2" + ], + [ + 94, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "A", + "event": 2995, + "register": 411, + "frame": [ + 361, + 6 + ], + "clean_row": [ + [ + 93, + "1" + ], + [ + 94, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 4, + 5 + ] + }, + { + "phase": "B", + "event": 781, + "register": 335, + "frame": [ + 362, + 138, + 30 + ], + "clean_row": [ + [ + 104, + "-1/2" + ], + [ + 107, + "1/2" + ], + [ + 108, + "-1/2" + ], + [ + 111, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "B", + "event": 778, + "register": 331, + "frame": [ + 362, + 234, + 30 + ], + "clean_row": [ + [ + 108, + "1" + ], + [ + 109, + "1" + ], + [ + 110, + "1" + ], + [ + 111, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 5, + 6 + ] + }, + { + "phase": "B", + "event": 720, + "register": 9, + "frame": [ + 388, + 24, + 2 + ], + "clean_row": [ + [ + 8, + "1" + ], + [ + 9, + "1" + ], + [ + 10, + "1" + ], + [ + 11, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 1768, + "register": 276, + "frame": [ + 388, + 96, + 2 + ], + "clean_row": [ + [ + 8, + "1" + ], + [ + 10, + "1" + ], + [ + 12, + "1" + ], + [ + 14, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 1769, + "register": 280, + "frame": [ + 388, + 96, + 26 + ], + "clean_row": [ + [ + 10, + "-1/2" + ], + [ + 11, + "-1/2" + ], + [ + 12, + "1/2" + ], + [ + 13, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "B", + "event": 721, + "register": 10, + "frame": [ + 388, + 98, + 24 + ], + "clean_row": [ + [ + 9, + "-1/2" + ], + [ + 10, + "1/2" + ], + [ + 13, + "-1/2" + ], + [ + 14, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 1765, + "register": 279, + "frame": [ + 388, + 98, + 26 + ], + "clean_row": [ + [ + 10, + "1" + ], + [ + 11, + "1" + ], + [ + 14, + "1" + ], + [ + 15, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 1772, + "register": 286, + "frame": [ + 388, + 120, + 2 + ], + "clean_row": [ + [ + 8, + "-1/2" + ], + [ + 10, + "-1/2" + ], + [ + 13, + "1/2" + ], + [ + 15, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "B", + "event": 799, + "register": 1, + "frame": [ + 390, + 19, + 13 + ], + "clean_row": [ + [ + 0, + "1" + ], + [ + 1, + "1" + ], + [ + 2, + "1" + ], + [ + 3, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "B", + "event": 834, + "register": 379, + "frame": [ + 390, + 37, + 24 + ], + "clean_row": [ + [ + 76, + "1" + ], + [ + 77, + "1" + ], + [ + 78, + "1" + ], + [ + 79, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "B", + "event": 758, + "register": 315, + "frame": [ + 390, + 44, + 30 + ], + "clean_row": [ + [ + 68, + "1" + ], + [ + 69, + "1" + ], + [ + 70, + "1" + ], + [ + 71, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "B", + "event": 835, + "register": 73, + "frame": [ + 390, + 67, + 24 + ], + "clean_row": [ + [ + 72, + "1" + ], + [ + 73, + "1" + ], + [ + 74, + "1" + ], + [ + 75, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2692, + "register": 372, + "frame": [ + 390, + 67, + 37 + ], + "clean_row": [ + [ + 72, + "1" + ], + [ + 74, + "1" + ], + [ + 76, + "1" + ], + [ + 78, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2696, + "register": 382, + "frame": [ + 390, + 67, + 61 + ], + "clean_row": [ + [ + 72, + "-1/2" + ], + [ + 74, + "-1/2" + ], + [ + 77, + "1/2" + ], + [ + 79, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "B", + "event": 759, + "register": 65, + "frame": [ + 390, + 74, + 30 + ], + "clean_row": [ + [ + 64, + "1" + ], + [ + 65, + "1" + ], + [ + 66, + "1" + ], + [ + 67, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2076, + "register": 308, + "frame": [ + 390, + 74, + 44 + ], + "clean_row": [ + [ + 64, + "1" + ], + [ + 66, + "1" + ], + [ + 68, + "1" + ], + [ + 70, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2080, + "register": 318, + "frame": [ + 390, + 74, + 50 + ], + "clean_row": [ + [ + 64, + "-1/2" + ], + [ + 66, + "-1/2" + ], + [ + 69, + "1/2" + ], + [ + 71, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2079, + "register": 316, + "frame": [ + 390, + 84, + 44 + ], + "clean_row": [ + [ + 65, + "-1/2" + ], + [ + 67, + "-1/2" + ], + [ + 68, + "1/2" + ], + [ + 70, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2075, + "register": 310, + "frame": [ + 390, + 84, + 50 + ], + "clean_row": [ + [ + 65, + "1" + ], + [ + 67, + "1" + ], + [ + 69, + "1" + ], + [ + 71, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2695, + "register": 380, + "frame": [ + 390, + 91, + 37 + ], + "clean_row": [ + [ + 73, + "-1/2" + ], + [ + 75, + "-1/2" + ], + [ + 76, + "1/2" + ], + [ + 78, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2691, + "register": 374, + "frame": [ + 390, + 91, + 61 + ], + "clean_row": [ + [ + 73, + "1" + ], + [ + 75, + "1" + ], + [ + 77, + "1" + ], + [ + 79, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2384, + "register": 340, + "frame": [ + 390, + 96, + 13 + ], + "clean_row": [ + [ + 0, + "1" + ], + [ + 2, + "1" + ], + [ + 4, + "1" + ], + [ + 6, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2383, + "register": 342, + "frame": [ + 390, + 96, + 19 + ], + "clean_row": [ + [ + 1, + "1" + ], + [ + 3, + "1" + ], + [ + 5, + "1" + ], + [ + 7, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 1767, + "register": 278, + "frame": [ + 390, + 96, + 26 + ], + "clean_row": [ + [ + 9, + "1" + ], + [ + 11, + "1" + ], + [ + 13, + "1" + ], + [ + 15, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "B", + "event": 719, + "register": 283, + "frame": [ + 390, + 98, + 24 + ], + "clean_row": [ + [ + 12, + "1" + ], + [ + 13, + "1" + ], + [ + 14, + "1" + ], + [ + 15, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 1771, + "register": 284, + "frame": [ + 390, + 98, + 26 + ], + "clean_row": [ + [ + 9, + "-1/2" + ], + [ + 11, + "-1/2" + ], + [ + 12, + "1/2" + ], + [ + 14, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2387, + "register": 348, + "frame": [ + 390, + 109, + 19 + ], + "clean_row": [ + [ + 1, + "-1/2" + ], + [ + 3, + "-1/2" + ], + [ + 4, + "1/2" + ], + [ + 6, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "B", + "event": 798, + "register": 347, + "frame": [ + 390, + 109, + 30 + ], + "clean_row": [ + [ + 4, + "1" + ], + [ + 5, + "1" + ], + [ + 6, + "1" + ], + [ + 7, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2388, + "register": 350, + "frame": [ + 390, + 115, + 13 + ], + "clean_row": [ + [ + 0, + "-1/2" + ], + [ + 2, + "-1/2" + ], + [ + 5, + "1/2" + ], + [ + 7, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2385, + "register": 344, + "frame": [ + 395, + 96, + 19 + ], + "clean_row": [ + [ + 2, + "-1/2" + ], + [ + 3, + "-1/2" + ], + [ + 4, + "1/2" + ], + [ + 5, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2381, + "register": 343, + "frame": [ + 395, + 109, + 19 + ], + "clean_row": [ + [ + 2, + "1" + ], + [ + 3, + "1" + ], + [ + 6, + "1" + ], + [ + 7, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "B", + "event": 800, + "register": 2, + "frame": [ + 395, + 109, + 30 + ], + "clean_row": [ + [ + 1, + "-1/2" + ], + [ + 2, + "1/2" + ], + [ + 5, + "-1/2" + ], + [ + 6, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 1588, + "register": 19, + "frame": [ + 400, + 6 + ], + "clean_row": [ + [ + 16, + "-1/2" + ], + [ + 19, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1587, + "register": 16, + "frame": [ + 400, + 6 + ], + "clean_row": [ + [ + 16, + "1" + ], + [ + 19, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1612, + "register": 258, + "frame": [ + 400, + 96, + 8 + ], + "clean_row": [ + [ + 16, + "1" + ], + [ + 17, + "1" + ], + [ + 20, + "1" + ], + [ + 21, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1618, + "register": 270, + "frame": [ + 400, + 96, + 14 + ], + "clean_row": [ + [ + 16, + "-1/2" + ], + [ + 18, + "-1/2" + ], + [ + 21, + "1/2" + ], + [ + 23, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1616, + "register": 22, + "frame": [ + 400, + 102, + 8 + ], + "clean_row": [ + [ + 16, + "-1/2" + ], + [ + 17, + "-1/2" + ], + [ + 22, + "1/2" + ], + [ + 23, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1614, + "register": 260, + "frame": [ + 400, + 102, + 14 + ], + "clean_row": [ + [ + 16, + "1" + ], + [ + 18, + "1" + ], + [ + 20, + "1" + ], + [ + 22, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 2386, + "register": 6, + "frame": [ + 405, + 96, + 13 + ], + "clean_row": [ + [ + 0, + "-1/2" + ], + [ + 1, + "-1/2" + ], + [ + 6, + "1/2" + ], + [ + 7, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2382, + "register": 338, + "frame": [ + 405, + 115, + 13 + ], + "clean_row": [ + [ + 0, + "1" + ], + [ + 1, + "1" + ], + [ + 4, + "1" + ], + [ + 5, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 1617, + "register": 268, + "frame": [ + 406, + 96, + 8 + ], + "clean_row": [ + [ + 17, + "-1/2" + ], + [ + 19, + "-1/2" + ], + [ + 20, + "1/2" + ], + [ + 22, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1611, + "register": 263, + "frame": [ + 406, + 96, + 14 + ], + "clean_row": [ + [ + 18, + "1" + ], + [ + 19, + "1" + ], + [ + 22, + "1" + ], + [ + 23, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1613, + "register": 262, + "frame": [ + 406, + 102, + 8 + ], + "clean_row": [ + [ + 17, + "1" + ], + [ + 19, + "1" + ], + [ + 21, + "1" + ], + [ + 23, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1615, + "register": 264, + "frame": [ + 406, + 102, + 14 + ], + "clean_row": [ + [ + 18, + "-1/2" + ], + [ + 19, + "-1/2" + ], + [ + 20, + "1/2" + ], + [ + 21, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3152, + "register": 418, + "frame": [ + 408, + 73, + 49 + ], + "clean_row": [ + [ + 80, + "1" + ], + [ + 81, + "1" + ], + [ + 84, + "1" + ], + [ + 85, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3156, + "register": 86, + "frame": [ + 408, + 73, + 55 + ], + "clean_row": [ + [ + 80, + "-1/2" + ], + [ + 81, + "-1/2" + ], + [ + 86, + "1/2" + ], + [ + 87, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 2077, + "register": 312, + "frame": [ + 408, + 74, + 44 + ], + "clean_row": [ + [ + 66, + "-1/2" + ], + [ + 67, + "-1/2" + ], + [ + 68, + "1/2" + ], + [ + 69, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2073, + "register": 311, + "frame": [ + 408, + 74, + 50 + ], + "clean_row": [ + [ + 66, + "1" + ], + [ + 67, + "1" + ], + [ + 70, + "1" + ], + [ + 71, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 3155, + "register": 424, + "frame": [ + 408, + 79, + 49 + ], + "clean_row": [ + [ + 82, + "-1/2" + ], + [ + 83, + "-1/2" + ], + [ + 84, + "1/2" + ], + [ + 85, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3151, + "register": 423, + "frame": [ + 408, + 79, + 55 + ], + "clean_row": [ + [ + 82, + "1" + ], + [ + 83, + "1" + ], + [ + 86, + "1" + ], + [ + 87, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 2074, + "register": 306, + "frame": [ + 408, + 84, + 44 + ], + "clean_row": [ + [ + 64, + "1" + ], + [ + 65, + "1" + ], + [ + 68, + "1" + ], + [ + 69, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 2078, + "register": 70, + "frame": [ + 408, + 84, + 50 + ], + "clean_row": [ + [ + 64, + "-1/2" + ], + [ + 65, + "-1/2" + ], + [ + 70, + "1/2" + ], + [ + 71, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 1770, + "register": 14, + "frame": [ + 412, + 96, + 2 + ], + "clean_row": [ + [ + 8, + "-1/2" + ], + [ + 9, + "-1/2" + ], + [ + 14, + "1/2" + ], + [ + 15, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 1766, + "register": 274, + "frame": [ + 412, + 120, + 2 + ], + "clean_row": [ + [ + 8, + "1" + ], + [ + 9, + "1" + ], + [ + 12, + "1" + ], + [ + 13, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2693, + "register": 376, + "frame": [ + 414, + 67, + 37 + ], + "clean_row": [ + [ + 74, + "-1/2" + ], + [ + 75, + "-1/2" + ], + [ + 76, + "1/2" + ], + [ + 77, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2689, + "register": 375, + "frame": [ + 414, + 67, + 61 + ], + "clean_row": [ + [ + 74, + "1" + ], + [ + 75, + "1" + ], + [ + 78, + "1" + ], + [ + 79, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 3158, + "register": 430, + "frame": [ + 414, + 73, + 49 + ], + "clean_row": [ + [ + 80, + "-1/2" + ], + [ + 82, + "-1/2" + ], + [ + 85, + "1/2" + ], + [ + 87, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3154, + "register": 420, + "frame": [ + 414, + 73, + 55 + ], + "clean_row": [ + [ + 80, + "1" + ], + [ + 82, + "1" + ], + [ + 84, + "1" + ], + [ + 86, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3153, + "register": 422, + "frame": [ + 414, + 79, + 49 + ], + "clean_row": [ + [ + 81, + "1" + ], + [ + 83, + "1" + ], + [ + 85, + "1" + ], + [ + 87, + "1" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3157, + "register": 428, + "frame": [ + 414, + 79, + 55 + ], + "clean_row": [ + [ + 81, + "-1/2" + ], + [ + 83, + "-1/2" + ], + [ + 84, + "1/2" + ], + [ + 86, + "1/2" + ] + ], + "kind": "face", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 2690, + "register": 370, + "frame": [ + 414, + 91, + 37 + ], + "clean_row": [ + [ + 72, + "1" + ], + [ + 73, + "1" + ], + [ + 76, + "1" + ], + [ + 77, + "1" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 2694, + "register": 78, + "frame": [ + 414, + 91, + 61 + ], + "clean_row": [ + [ + 72, + "-1/2" + ], + [ + 73, + "-1/2" + ], + [ + 78, + "1/2" + ], + [ + 79, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "B", + "event": 836, + "register": 74, + "frame": [ + 419, + 67, + 24 + ], + "clean_row": [ + [ + 73, + "-1/2" + ], + [ + 74, + "1/2" + ], + [ + 77, + "-1/2" + ], + [ + 78, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 3148, + "register": 431, + "frame": [ + 425, + 6 + ], + "clean_row": [ + [ + 84, + "-1/2" + ], + [ + 87, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3147, + "register": 425, + "frame": [ + 425, + 6 + ], + "clean_row": [ + [ + 84, + "1" + ], + [ + 87, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "B", + "event": 760, + "register": 66, + "frame": [ + 426, + 74, + 30 + ], + "clean_row": [ + [ + 65, + "-1/2" + ], + [ + 66, + "1/2" + ], + [ + 69, + "-1/2" + ], + [ + 70, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 1286, + "register": 58, + "frame": [ + 448, + 6 + ], + "clean_row": [ + [ + 57, + "-1/2" + ], + [ + 58, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1285, + "register": 57, + "frame": [ + 448, + 6 + ], + "clean_row": [ + [ + 57, + "1" + ], + [ + 58, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1304, + "register": 226, + "frame": [ + 448, + 32, + 24 + ], + "clean_row": [ + [ + 56, + "1" + ], + [ + 57, + "1" + ], + [ + 60, + "1" + ], + [ + 61, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1308, + "register": 62, + "frame": [ + 448, + 32, + 30 + ], + "clean_row": [ + [ + 56, + "-1/2" + ], + [ + 57, + "-1/2" + ], + [ + 62, + "1/2" + ], + [ + 63, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1309, + "register": 236, + "frame": [ + 448, + 38, + 24 + ], + "clean_row": [ + [ + 57, + "-1/2" + ], + [ + 59, + "-1/2" + ], + [ + 60, + "1/2" + ], + [ + 62, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1305, + "register": 230, + "frame": [ + 448, + 38, + 30 + ], + "clean_row": [ + [ + 57, + "1" + ], + [ + 59, + "1" + ], + [ + 61, + "1" + ], + [ + 63, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "B", + "event": 837, + "register": 383, + "frame": [ + 453, + 37, + 24 + ], + "clean_row": [ + [ + 72, + "-1/2" + ], + [ + 75, + "1/2" + ], + [ + 76, + "-1/2" + ], + [ + 79, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 3, + 4, + 6 + ] + }, + { + "phase": "A", + "event": 1310, + "register": 238, + "frame": [ + 454, + 32, + 24 + ], + "clean_row": [ + [ + 56, + "-1/2" + ], + [ + 58, + "-1/2" + ], + [ + 61, + "1/2" + ], + [ + 63, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1306, + "register": 228, + "frame": [ + 454, + 32, + 30 + ], + "clean_row": [ + [ + 56, + "1" + ], + [ + 58, + "1" + ], + [ + 60, + "1" + ], + [ + 62, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1303, + "register": 231, + "frame": [ + 454, + 38, + 24 + ], + "clean_row": [ + [ + 58, + "1" + ], + [ + 59, + "1" + ], + [ + 62, + "1" + ], + [ + 63, + "1" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1307, + "register": 232, + "frame": [ + 454, + 38, + 30 + ], + "clean_row": [ + [ + 58, + "-1/2" + ], + [ + 59, + "-1/2" + ], + [ + 60, + "1/2" + ], + [ + 61, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "B", + "event": 761, + "register": 319, + "frame": [ + 460, + 44, + 30 + ], + "clean_row": [ + [ + 64, + "-1/2" + ], + [ + 67, + "1/2" + ], + [ + 68, + "-1/2" + ], + [ + 71, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 3, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 3134, + "register": 82, + "frame": [ + 465, + 6 + ], + "clean_row": [ + [ + 81, + "-1/2" + ], + [ + 82, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 3133, + "register": 81, + "frame": [ + 465, + 6 + ], + "clean_row": [ + [ + 81, + "1" + ], + [ + 82, + "1" + ] + ], + "kind": "leaver", + "block": [ + 2, + 3, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1300, + "register": 239, + "frame": [ + 472, + 6 + ], + "clean_row": [ + [ + 60, + "-1/2" + ], + [ + 63, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "A", + "event": 1299, + "register": 233, + "frame": [ + 472, + 6 + ], + "clean_row": [ + [ + 60, + "1" + ], + [ + 63, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 2, + 3 + ] + }, + { + "phase": "B", + "event": 722, + "register": 287, + "frame": [ + 484, + 24, + 2 + ], + "clean_row": [ + [ + 8, + "-1/2" + ], + [ + 11, + "1/2" + ], + [ + 12, + "-1/2" + ], + [ + 15, + "1/2" + ] + ], + "kind": "face", + "block": [ + 0, + 2, + 4, + 6 + ] + }, + { + "phase": "B", + "event": 801, + "register": 351, + "frame": [ + 486, + 19, + 13 + ], + "clean_row": [ + [ + 0, + "-1/2" + ], + [ + 3, + "1/2" + ], + [ + 4, + "-1/2" + ], + [ + 7, + "1/2" + ] + ], + "kind": "face", + "block": [ + 1, + 2, + 4, + 7 + ] + }, + { + "phase": "A", + "event": 1610, + "register": 269, + "frame": [ + 496, + 6 + ], + "clean_row": [ + [ + 21, + "-1/2" + ], + [ + 22, + "1/2" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + }, + { + "phase": "A", + "event": 1609, + "register": 267, + "frame": [ + 496, + 6 + ], + "clean_row": [ + [ + 21, + "1" + ], + [ + 22, + "1" + ] + ], + "kind": "leaver", + "block": [ + 0, + 1, + 6, + 7 + ] + } + ] + }, + "whole_block_target_exclusion": [ + { + "frame": [ + 259, + 131, + 96, + 24 + ], + "odd_vectors_by_target": [ + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 131, + 131, + 131, + 131, + 131, + 131, + 131, + 131, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 131, + 259, + 259, + 131, + 259, + 131, + 131, + 259, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + }, + { + "frame": [ + 266, + 138, + 96, + 30 + ], + "odd_vectors_by_target": [ + 138, + 138, + 138, + 138, + 138, + 138, + 138, + 138, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 96, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 138, + 266, + 266, + 138, + 266, + 138, + 138, + 266 + ] + }, + { + "frame": [ + 290, + 162, + 102, + 24 + ], + "odd_vectors_by_target": [ + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 290, + 162, + 162, + 290, + 162, + 290, + 290, + 162, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 162, + 162, + 162, + 162, + 162, + 162, + 162, + 162, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + }, + { + "frame": [ + 301, + 173, + 102, + 30 + ], + "odd_vectors_by_target": [ + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 301, + 173, + 173, + 301, + 173, + 301, + 301, + 173, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 173, + 173, + 173, + 173, + 173, + 173, + 173, + 173, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 102, + 102, + 102, + 102, + 102, + 102, + 102, + 102 + ] + }, + { + "frame": [ + 388, + 96, + 24, + 2 + ], + "odd_vectors_by_target": [ + 24, + 24, + 2, + 2, + 2, + 2, + 24, + 24, + 2, + 388, + 388, + 2, + 388, + 2, + 2, + 388, + 24, + 24, + 2, + 2, + 24, + 24, + 2, + 2, + 24, + 24, + 2, + 2, + 24, + 24, + 2, + 2, + 96, + 96, + 96, + 96, + 2, + 2, + 2, + 2, + 24, + 2, + 24, + 2, + 2, + 24, + 2, + 24, + 96, + 96, + 2, + 2, + 96, + 96, + 2, + 2, + 96, + 96, + 2, + 2, + 96, + 96, + 2, + 2, + 24, + 24, + 2, + 2, + 24, + 24, + 2, + 2, + 96, + 2, + 2, + 96, + 96, + 2, + 2, + 96, + 24, + 24, + 2, + 2, + 24, + 24, + 2, + 2, + 24, + 24, + 2, + 2, + 24, + 24, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 24, + 2, + 24, + 2, + 24, + 2, + 24, + 2 + ] + }, + { + "frame": [ + 390, + 67, + 37, + 24 + ], + "odd_vectors_by_target": [ + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 67, + 37, + 37, + 67, + 67, + 37, + 37, + 67, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 37, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 67, + 67, + 37, + 37, + 67, + 67, + 37, + 37, + 37, + 67, + 37, + 67, + 67, + 37, + 67, + 37, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 390, + 37, + 37, + 390, + 37, + 390, + 390, + 37, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 37, + 37, + 37, + 37, + 67, + 67, + 67, + 67, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24 + ] + }, + { + "frame": [ + 390, + 74, + 44, + 30 + ], + "odd_vectors_by_target": [ + 74, + 44, + 44, + 74, + 74, + 44, + 44, + 74, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 74, + 44, + 74, + 44, + 74, + 44, + 74, + 44, + 44, + 74, + 44, + 74, + 44, + 74, + 44, + 74, + 390, + 44, + 44, + 390, + 44, + 390, + 390, + 44, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 44, + 44, + 44, + 44, + 74, + 74, + 74, + 74 + ] + }, + { + "frame": [ + 390, + 96, + 19, + 13 + ], + "odd_vectors_by_target": [ + 13, + 390, + 390, + 13, + 390, + 13, + 13, + 390, + 19, + 19, + 13, + 13, + 13, + 13, + 19, + 19, + 19, + 13, + 19, + 13, + 13, + 19, + 13, + 19, + 19, + 19, + 13, + 13, + 13, + 13, + 19, + 19, + 19, + 13, + 19, + 13, + 13, + 19, + 13, + 19, + 96, + 96, + 96, + 96, + 13, + 13, + 13, + 13, + 96, + 13, + 96, + 13, + 96, + 13, + 96, + 13, + 96, + 96, + 13, + 13, + 13, + 13, + 96, + 96, + 96, + 13, + 13, + 96, + 96, + 13, + 13, + 96, + 19, + 19, + 13, + 13, + 19, + 19, + 13, + 13, + 19, + 13, + 19, + 13, + 19, + 13, + 19, + 13, + 19, + 19, + 13, + 13, + 19, + 19, + 13, + 13, + 19, + 13, + 19, + 13, + 19, + 13, + 19, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13, + 13 + ] + } + ], + "center_target_exclusion": [ + { + "frame": [ + 256, + 128, + 64, + 32, + 16, + 8, + 4, + 2 + ], + "odd_vectors_by_target": [ + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 4, + 2, + 4, + 4, + 2, + 4, + 2, + 2, + 4, + 16, + 8, + 2, + 2, + 8, + 16, + 2, + 2, + 16, + 16, + 2, + 2, + 8, + 8, + 2, + 2, + 4, + 4, + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 2, + 4, + 2, + 4, + 8, + 32, + 2, + 2, + 8, + 32, + 2, + 2, + 32, + 64, + 2, + 2, + 8, + 8, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 8, + 16, + 2, + 2, + 8, + 16, + 2, + 2, + 8, + 8, + 2, + 2, + 8, + 8, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 4, + 2, + 4, + 2 + ] + }, + { + "frame": [ + 256, + 128, + 64, + 32, + 16, + 8, + 5, + 3 + ], + "odd_vectors_by_target": [ + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 5, + 16, + 8, + 3, + 3, + 8, + 16, + 3, + 3, + 16, + 16, + 3, + 3, + 8, + 8, + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 3, + 3, + 5, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 3, + 32, + 8, + 3, + 3, + 32, + 8, + 32, + 64, + 3, + 3, + 8, + 8, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 16, + 8, + 3, + 3, + 16, + 8, + 3, + 3, + 8, + 8, + 3, + 3, + 8, + 8, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 3, + 5, + 3, + 5, + 3, + 5, + 3 + ] + }, + { + "frame": [ + 256, + 128, + 64, + 32, + 17, + 9, + 4, + 2 + ], + "odd_vectors_by_target": [ + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 4, + 2, + 4, + 4, + 2, + 4, + 2, + 2, + 4, + 17, + 9, + 2, + 2, + 9, + 17, + 2, + 2, + 17, + 17, + 2, + 2, + 9, + 9, + 2, + 2, + 4, + 4, + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 2, + 4, + 2, + 4, + 32, + 9, + 2, + 2, + 32, + 9, + 2, + 2, + 32, + 64, + 2, + 2, + 9, + 9, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 17, + 9, + 2, + 2, + 17, + 9, + 2, + 2, + 17, + 17, + 2, + 2, + 17, + 17, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 4, + 2, + 4, + 2 + ] + }, + { + "frame": [ + 256, + 128, + 64, + 32, + 17, + 9, + 5, + 3 + ], + "odd_vectors_by_target": [ + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 5, + 17, + 9, + 3, + 3, + 9, + 17, + 3, + 3, + 17, + 17, + 3, + 3, + 9, + 9, + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 3, + 3, + 5, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 3, + 9, + 32, + 3, + 3, + 9, + 32, + 32, + 64, + 3, + 3, + 9, + 9, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 9, + 17, + 3, + 3, + 9, + 17, + 3, + 3, + 17, + 17, + 3, + 3, + 17, + 17, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 3, + 5, + 3, + 5, + 3, + 5, + 3 + ] + }, + { + "frame": [ + 256, + 128, + 65, + 33, + 17, + 9, + 4, + 2 + ], + "odd_vectors_by_target": [ + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 4, + 2, + 4, + 4, + 2, + 4, + 2, + 2, + 4, + 17, + 9, + 2, + 2, + 9, + 17, + 2, + 2, + 17, + 17, + 2, + 2, + 9, + 9, + 2, + 2, + 4, + 4, + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 2, + 4, + 2, + 4, + 65, + 9, + 2, + 2, + 65, + 9, + 2, + 2, + 33, + 65, + 2, + 2, + 9, + 9, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 17, + 9, + 2, + 2, + 17, + 9, + 2, + 2, + 17, + 17, + 2, + 2, + 17, + 17, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 4, + 2, + 4, + 2 + ] + }, + { + "frame": [ + 256, + 128, + 65, + 33, + 17, + 9, + 5, + 3 + ], + "odd_vectors_by_target": [ + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 5, + 17, + 9, + 3, + 3, + 9, + 17, + 3, + 3, + 17, + 17, + 3, + 3, + 9, + 9, + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 3, + 3, + 5, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 3, + 9, + 65, + 3, + 3, + 9, + 65, + 33, + 65, + 3, + 3, + 9, + 9, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 9, + 17, + 3, + 3, + 9, + 17, + 3, + 3, + 17, + 17, + 3, + 3, + 17, + 17, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 3, + 5, + 3, + 5, + 3, + 5, + 3 + ] + }, + { + "frame": [ + 256, + 128, + 65, + 33, + 16, + 8, + 4, + 2 + ], + "odd_vectors_by_target": [ + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 4, + 2, + 4, + 4, + 2, + 4, + 2, + 2, + 4, + 16, + 8, + 2, + 2, + 8, + 16, + 2, + 2, + 16, + 16, + 2, + 2, + 8, + 8, + 2, + 2, + 4, + 4, + 4, + 4, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 2, + 4, + 2, + 4, + 8, + 65, + 2, + 2, + 8, + 65, + 2, + 2, + 33, + 65, + 2, + 2, + 8, + 8, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 2, + 2, + 4, + 4, + 2, + 2, + 4, + 8, + 16, + 2, + 2, + 8, + 16, + 2, + 2, + 8, + 8, + 2, + 2, + 8, + 8, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 4, + 2, + 4, + 2, + 4, + 2, + 4, + 2 + ] + }, + { + "frame": [ + 256, + 128, + 65, + 33, + 16, + 8, + 5, + 3 + ], + "odd_vectors_by_target": [ + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 5, + 16, + 8, + 3, + 3, + 8, + 16, + 3, + 3, + 16, + 16, + 3, + 3, + 8, + 8, + 3, + 3, + 5, + 5, + 5, + 5, + 3, + 3, + 3, + 3, + 3, + 5, + 3, + 5, + 5, + 3, + 5, + 3, + 3, + 3, + 65, + 8, + 3, + 3, + 65, + 8, + 33, + 65, + 3, + 3, + 8, + 8, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 5, + 5, + 3, + 3, + 5, + 5, + 3, + 3, + 3, + 16, + 8, + 3, + 3, + 16, + 8, + 3, + 3, + 8, + 8, + 3, + 3, + 8, + 8, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 3, + 5, + 3, + 5, + 3, + 5, + 3 + ] + } + ], + "early_scalar_restoration": [ + { + "frame": [ + 259, + 131, + 96, + 24 + ], + "helpers": [ + 385, + 387, + 389, + 394 + ], + "tail_indices": [ + 77, + 78, + 79, + 80, + 81, + 82 + ], + "arbitrary_columns": 704 + }, + { + "frame": [ + 266, + 138, + 96, + 30 + ], + "helpers": [ + 321, + 323, + 325, + 330 + ], + "tail_indices": [ + 53, + 54, + 55, + 56, + 57, + 58 + ], + "arbitrary_columns": 704 + }, + { + "frame": [ + 290, + 162, + 102, + 24 + ], + "helpers": [ + 289, + 291, + 293, + 298 + ], + "tail_indices": [ + 41, + 42, + 43, + 44, + 45, + 46 + ], + "arbitrary_columns": 704 + }, + { + "frame": [ + 301, + 173, + 102, + 30 + ], + "helpers": [ + 353, + 355, + 357, + 362 + ], + "tail_indices": [ + 65, + 66, + 67, + 68, + 69, + 70 + ], + "arbitrary_columns": 704 + }, + { + "frame": [ + 388, + 96, + 24, + 2 + ], + "helpers": [ + 273, + 275, + 277, + 282 + ], + "tail_indices": [ + 35, + 36, + 37, + 38, + 39, + 40 + ], + "arbitrary_columns": 704 + }, + { + "frame": [ + 390, + 67, + 37, + 24 + ], + "helpers": [ + 369, + 371, + 373, + 378 + ], + "tail_indices": [ + 71, + 72, + 73, + 74, + 75, + 76 + ], + "arbitrary_columns": 704 + }, + { + "frame": [ + 390, + 74, + 44, + 30 + ], + "helpers": [ + 305, + 307, + 309, + 314 + ], + "tail_indices": [ + 47, + 48, + 49, + 50, + 51, + 52 + ], + "arbitrary_columns": 704 + }, + { + "frame": [ + 390, + 96, + 19, + 13 + ], + "helpers": [ + 337, + 339, + 341, + 346 + ], + "tail_indices": [ + 59, + 60, + 61, + 62, + 63, + 64 + ], + "arbitrary_columns": 704 + } + ], + "split_carriers": [ + { + "block": [ + 0, + 2, + 4, + 6 + ], + "sources": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + }, + { + "mask": 15, + "targets": [ + 32, + 33, + 34, + 35, + 56, + 57, + 60, + 61 + ] + }, + { + "mask": 51, + "targets": [ + 24, + 25, + 28, + 29, + 64, + 65, + 68, + 69 + ] + }, + { + "mask": 60, + "targets": [ + 2, + 3, + 4, + 5, + 90, + 91, + 94, + 95 + ] + }, + { + "mask": 85, + "targets": [ + 16, + 17, + 20, + 21, + 104, + 106, + 108, + 110 + ] + }, + { + "mask": 90, + "targets": [ + 41, + 43, + 44, + 46, + 82, + 83, + 86, + 87 + ] + }, + { + "mask": 102, + "targets": [ + 50, + 51, + 54, + 55, + 73, + 74, + 77, + 78 + ] + }, + { + "mask": 105, + "targets": [ + 9, + 10, + 12, + 15 + ] + }, + { + "mask": 150, + "targets": [ + 8, + 11, + 13, + 14 + ] + }, + { + "mask": 153, + "targets": [ + 48, + 49, + 52, + 53, + 72, + 75, + 76, + 79 + ] + }, + { + "mask": 165, + "targets": [ + 40, + 42, + 45, + 47, + 80, + 81, + 84, + 85 + ] + }, + { + "mask": 170, + "targets": [ + 18, + 19, + 22, + 23, + 105, + 107, + 109, + 111 + ] + }, + { + "mask": 195, + "targets": [ + 0, + 1, + 6, + 7, + 88, + 89, + 92, + 93 + ] + }, + { + "mask": 204, + "targets": [ + 26, + 27, + 30, + 31, + 66, + 67, + 70, + 71 + ] + }, + { + "mask": 240, + "targets": [ + 36, + 37, + 38, + 39, + 58, + 59, + 62, + 63 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 32, + 36, + 48, + 50 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + }, + { + "block": [ + 0, + 2, + 5, + 7 + ], + "sources": [ + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + }, + { + "mask": 15, + "targets": [ + 8, + 9, + 10, + 11, + 56, + 57, + 60, + 61 + ] + }, + { + "mask": 51, + "targets": [ + 24, + 26, + 28, + 30, + 104, + 105, + 108, + 109 + ] + }, + { + "mask": 60, + "targets": [ + 42, + 43, + 44, + 45, + 89, + 91, + 93, + 95 + ] + }, + { + "mask": 85, + "targets": [ + 16, + 18, + 20, + 22, + 64, + 66, + 68, + 70 + ] + }, + { + "mask": 90, + "targets": [ + 1, + 3, + 4, + 6, + 81, + 83, + 85, + 87 + ] + }, + { + "mask": 102, + "targets": [ + 49, + 51, + 52, + 54, + 97, + 98, + 101, + 102 + ] + }, + { + "mask": 105, + "targets": [ + 33, + 34, + 36, + 39 + ] + }, + { + "mask": 150, + "targets": [ + 32, + 35, + 37, + 38 + ] + }, + { + "mask": 153, + "targets": [ + 48, + 50, + 53, + 55, + 96, + 99, + 100, + 103 + ] + }, + { + "mask": 165, + "targets": [ + 0, + 2, + 5, + 7, + 80, + 82, + 84, + 86 + ] + }, + { + "mask": 170, + "targets": [ + 17, + 19, + 21, + 23, + 65, + 67, + 69, + 71 + ] + }, + { + "mask": 195, + "targets": [ + 40, + 41, + 46, + 47, + 88, + 90, + 92, + 94 + ] + }, + { + "mask": 204, + "targets": [ + 25, + 27, + 29, + 31, + 106, + 107, + 110, + 111 + ] + }, + { + "mask": 240, + "targets": [ + 12, + 13, + 14, + 15, + 58, + 59, + 62, + 63 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 8, + 12, + 48, + 49 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + }, + { + "block": [ + 0, + 3, + 4, + 7 + ], + "sources": [ + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ] + }, + { + "mask": 15, + "targets": [ + 56, + 58, + 60, + 62, + 104, + 105, + 106, + 107 + ] + }, + { + "mask": 51, + "targets": [ + 8, + 9, + 12, + 13, + 24, + 25, + 28, + 29 + ] + }, + { + "mask": 60, + "targets": [ + 74, + 75, + 76, + 77, + 90, + 91, + 92, + 93 + ] + }, + { + "mask": 85, + "targets": [ + 16, + 18, + 20, + 22, + 32, + 34, + 36, + 38 + ] + }, + { + "mask": 90, + "targets": [ + 81, + 83, + 84, + 86, + 97, + 99, + 100, + 102 + ] + }, + { + "mask": 102, + "targets": [ + 1, + 2, + 5, + 6, + 49, + 51, + 53, + 55 + ] + }, + { + "mask": 105, + "targets": [ + 65, + 66, + 68, + 71 + ] + }, + { + "mask": 150, + "targets": [ + 64, + 67, + 69, + 70 + ] + }, + { + "mask": 153, + "targets": [ + 0, + 3, + 4, + 7, + 48, + 50, + 52, + 54 + ] + }, + { + "mask": 165, + "targets": [ + 80, + 82, + 85, + 87, + 96, + 98, + 101, + 103 + ] + }, + { + "mask": 170, + "targets": [ + 17, + 19, + 21, + 23, + 33, + 35, + 37, + 39 + ] + }, + { + "mask": 195, + "targets": [ + 72, + 73, + 78, + 79, + 88, + 89, + 94, + 95 + ] + }, + { + "mask": 204, + "targets": [ + 10, + 11, + 14, + 15, + 26, + 27, + 30, + 31 + ] + }, + { + "mask": 240, + "targets": [ + 57, + 59, + 61, + 63, + 108, + 109, + 110, + 111 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 56, + 57, + 0, + 1 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + }, + { + "block": [ + 0, + 3, + 5, + 6 + ], + "sources": [ + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ] + }, + { + "mask": 15, + "targets": [ + 56, + 58, + 60, + 62, + 64, + 65, + 66, + 67 + ] + }, + { + "mask": 51, + "targets": [ + 24, + 26, + 28, + 30, + 32, + 33, + 36, + 37 + ] + }, + { + "mask": 60, + "targets": [ + 89, + 91, + 92, + 94, + 98, + 99, + 100, + 101 + ] + }, + { + "mask": 85, + "targets": [ + 8, + 10, + 12, + 14, + 16, + 17, + 20, + 21 + ] + }, + { + "mask": 90, + "targets": [ + 73, + 75, + 76, + 78, + 82, + 83, + 84, + 85 + ] + }, + { + "mask": 102, + "targets": [ + 41, + 42, + 45, + 46, + 50, + 51, + 52, + 53 + ] + }, + { + "mask": 105, + "targets": [ + 105, + 106, + 108, + 111 + ] + }, + { + "mask": 150, + "targets": [ + 104, + 107, + 109, + 110 + ] + }, + { + "mask": 153, + "targets": [ + 40, + 43, + 44, + 47, + 48, + 49, + 54, + 55 + ] + }, + { + "mask": 165, + "targets": [ + 72, + 74, + 77, + 79, + 80, + 81, + 86, + 87 + ] + }, + { + "mask": 170, + "targets": [ + 9, + 11, + 13, + 15, + 18, + 19, + 22, + 23 + ] + }, + { + "mask": 195, + "targets": [ + 88, + 90, + 93, + 95, + 96, + 97, + 102, + 103 + ] + }, + { + "mask": 204, + "targets": [ + 25, + 27, + 29, + 31, + 34, + 35, + 38, + 39 + ] + }, + { + "mask": 240, + "targets": [ + 57, + 59, + 61, + 63, + 68, + 69, + 70, + 71 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 56, + 57, + 40, + 41 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + }, + { + "block": [ + 1, + 2, + 4, + 7 + ], + "sources": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + }, + { + "mask": 15, + "targets": [ + 40, + 41, + 42, + 43, + 56, + 57, + 62, + 63 + ] + }, + { + "mask": 51, + "targets": [ + 24, + 25, + 30, + 31, + 72, + 73, + 76, + 77 + ] + }, + { + "mask": 60, + "targets": [ + 10, + 11, + 12, + 13, + 90, + 91, + 94, + 95 + ] + }, + { + "mask": 85, + "targets": [ + 16, + 18, + 21, + 23, + 96, + 98, + 100, + 102 + ] + }, + { + "mask": 90, + "targets": [ + 33, + 35, + 36, + 38, + 81, + 83, + 85, + 87 + ] + }, + { + "mask": 102, + "targets": [ + 49, + 51, + 53, + 55, + 65, + 66, + 69, + 70 + ] + }, + { + "mask": 105, + "targets": [ + 1, + 2, + 4, + 7 + ] + }, + { + "mask": 150, + "targets": [ + 0, + 3, + 5, + 6 + ] + }, + { + "mask": 153, + "targets": [ + 48, + 50, + 52, + 54, + 64, + 67, + 68, + 71 + ] + }, + { + "mask": 165, + "targets": [ + 32, + 34, + 37, + 39, + 80, + 82, + 84, + 86 + ] + }, + { + "mask": 170, + "targets": [ + 17, + 19, + 20, + 22, + 97, + 99, + 101, + 103 + ] + }, + { + "mask": 195, + "targets": [ + 8, + 9, + 14, + 15, + 88, + 89, + 92, + 93 + ] + }, + { + "mask": 204, + "targets": [ + 26, + 27, + 28, + 29, + 74, + 75, + 78, + 79 + ] + }, + { + "mask": 240, + "targets": [ + 44, + 45, + 46, + 47, + 58, + 59, + 60, + 61 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 40, + 44, + 48, + 49 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + }, + { + "block": [ + 1, + 2, + 5, + 6 + ], + "sources": [ + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ] + }, + { + "mask": 15, + "targets": [ + 0, + 1, + 2, + 3, + 56, + 57, + 62, + 63 + ] + }, + { + "mask": 51, + "targets": [ + 24, + 26, + 29, + 31, + 96, + 97, + 100, + 101 + ] + }, + { + "mask": 60, + "targets": [ + 34, + 35, + 36, + 37, + 89, + 91, + 93, + 95 + ] + }, + { + "mask": 85, + "targets": [ + 16, + 17, + 22, + 23, + 72, + 74, + 76, + 78 + ] + }, + { + "mask": 90, + "targets": [ + 9, + 11, + 12, + 14, + 82, + 83, + 86, + 87 + ] + }, + { + "mask": 102, + "targets": [ + 50, + 51, + 52, + 53, + 105, + 106, + 109, + 110 + ] + }, + { + "mask": 105, + "targets": [ + 41, + 42, + 44, + 47 + ] + }, + { + "mask": 150, + "targets": [ + 40, + 43, + 45, + 46 + ] + }, + { + "mask": 153, + "targets": [ + 48, + 49, + 54, + 55, + 104, + 107, + 108, + 111 + ] + }, + { + "mask": 165, + "targets": [ + 8, + 10, + 13, + 15, + 80, + 81, + 84, + 85 + ] + }, + { + "mask": 170, + "targets": [ + 18, + 19, + 20, + 21, + 73, + 75, + 77, + 79 + ] + }, + { + "mask": 195, + "targets": [ + 32, + 33, + 38, + 39, + 88, + 90, + 92, + 94 + ] + }, + { + "mask": 204, + "targets": [ + 25, + 27, + 28, + 30, + 98, + 99, + 102, + 103 + ] + }, + { + "mask": 240, + "targets": [ + 4, + 5, + 6, + 7, + 58, + 59, + 60, + 61 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 0, + 4, + 48, + 50 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + }, + { + "block": [ + 1, + 3, + 4, + 6 + ], + "sources": [ + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ] + }, + { + "mask": 15, + "targets": [ + 56, + 58, + 61, + 63, + 96, + 97, + 98, + 99 + ] + }, + { + "mask": 51, + "targets": [ + 0, + 1, + 4, + 5, + 24, + 25, + 30, + 31 + ] + }, + { + "mask": 60, + "targets": [ + 66, + 67, + 68, + 69, + 90, + 91, + 92, + 93 + ] + }, + { + "mask": 85, + "targets": [ + 16, + 17, + 22, + 23, + 40, + 42, + 44, + 46 + ] + }, + { + "mask": 90, + "targets": [ + 82, + 83, + 84, + 85, + 105, + 107, + 108, + 110 + ] + }, + { + "mask": 102, + "targets": [ + 9, + 10, + 13, + 14, + 50, + 51, + 54, + 55 + ] + }, + { + "mask": 105, + "targets": [ + 73, + 74, + 76, + 79 + ] + }, + { + "mask": 150, + "targets": [ + 72, + 75, + 77, + 78 + ] + }, + { + "mask": 153, + "targets": [ + 8, + 11, + 12, + 15, + 48, + 49, + 52, + 53 + ] + }, + { + "mask": 165, + "targets": [ + 80, + 81, + 86, + 87, + 104, + 106, + 109, + 111 + ] + }, + { + "mask": 170, + "targets": [ + 18, + 19, + 20, + 21, + 41, + 43, + 45, + 47 + ] + }, + { + "mask": 195, + "targets": [ + 64, + 65, + 70, + 71, + 88, + 89, + 94, + 95 + ] + }, + { + "mask": 204, + "targets": [ + 2, + 3, + 6, + 7, + 26, + 27, + 28, + 29 + ] + }, + { + "mask": 240, + "targets": [ + 57, + 59, + 60, + 62, + 100, + 101, + 102, + 103 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 56, + 57, + 8, + 9 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + }, + { + "block": [ + 1, + 3, + 5, + 7 + ], + "sources": [ + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + "target_masks": [ + { + "mask": 0, + "targets": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ] + }, + { + "mask": 15, + "targets": [ + 56, + 58, + 61, + 63, + 72, + 73, + 74, + 75 + ] + }, + { + "mask": 51, + "targets": [ + 24, + 26, + 29, + 31, + 40, + 41, + 44, + 45 + ] + }, + { + "mask": 60, + "targets": [ + 89, + 91, + 92, + 94, + 106, + 107, + 108, + 109 + ] + }, + { + "mask": 85, + "targets": [ + 0, + 2, + 4, + 6, + 16, + 18, + 21, + 23 + ] + }, + { + "mask": 90, + "targets": [ + 65, + 67, + 68, + 70, + 81, + 83, + 84, + 86 + ] + }, + { + "mask": 102, + "targets": [ + 33, + 34, + 37, + 38, + 49, + 51, + 52, + 54 + ] + }, + { + "mask": 105, + "targets": [ + 97, + 98, + 100, + 103 + ] + }, + { + "mask": 150, + "targets": [ + 96, + 99, + 101, + 102 + ] + }, + { + "mask": 153, + "targets": [ + 32, + 35, + 36, + 39, + 48, + 50, + 53, + 55 + ] + }, + { + "mask": 165, + "targets": [ + 64, + 66, + 69, + 71, + 80, + 82, + 85, + 87 + ] + }, + { + "mask": 170, + "targets": [ + 1, + 3, + 5, + 7, + 17, + 19, + 20, + 22 + ] + }, + { + "mask": 195, + "targets": [ + 88, + 90, + 93, + 95, + 104, + 105, + 110, + 111 + ] + }, + { + "mask": 204, + "targets": [ + 25, + 27, + 28, + 30, + 42, + 43, + 46, + 47 + ] + }, + { + "mask": 240, + "targets": [ + 57, + 59, + 60, + 62, + 76, + 77, + 78, + 79 + ] + } + ], + "two_cap_partitions": [ + { + "masks": [ + 15, + 240 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 51, + 204 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 60, + 195 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 85, + 170 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 90, + 165 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 102, + 153 + ], + "ranks": [ + 3, + 3 + ], + "target_pairs": 64 + }, + { + "masks": [ + 105, + 150 + ], + "ranks": [ + 4, + 4 + ], + "target_pairs": 16 + } + ], + "four_cap_escape": { + "targets": [ + 56, + 57, + 32, + 33 + ], + "rows": [ + [ + 2, + 2, + 2, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2 + ], + [ + 2, + 0, + 0, + -2, + 2, + 0, + 0, + -2 + ], + [ + 0, + 2, + -2, + 0, + 0, + 2, + -2, + 0 + ] + ], + "rational_rank": 4, + "frame_ranks": [ + 3, + 3, + 3, + 3 + ] + } + } + ], + "descent_only_cost_screen": [ + { + "stages": 9, + "parent_rank": 73, + "max_b": "1/32", + "max_removed_width": 9, + "extra_rank_per_reused_role": 2, + "integer_slack": 1860718755653901874165592270692408 + }, + { + "stages": 37, + "parent_rank": 297, + "max_b": "1/32", + "max_removed_width": 9, + "extra_rank_per_reused_role": 2, + "integer_slack": 1091573579908379077602234074693464 + } + ], + "negative_controls": [ + "duplicate demand frame", + "comparable demand frames", + "demand row mismatch", + "frame fits a target cap", + "cold dirt not restored" + ] +} diff --git a/research/k8-frame-antichain/LICENSE b/research/k8-frame-antichain/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/k8-frame-antichain/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/k8-frame-antichain/NOTICE.md b/research/k8-frame-antichain/NOTICE.md new file mode 100644 index 0000000000..39f7795196 --- /dev/null +++ b/research/k8-frame-antichain/NOTICE.md @@ -0,0 +1,36 @@ +# Attribution and license + +This package is by Ali Romman. The proof, checker, and research record +were prepared with substantial OpenAI Codex assistance. The work is +under Apache-2.0. A copy of the repository license is included. + +The binary geometry and packet programs come from the retained +`complex-k492-owner-repair` source tree. The exact path and commit are +pinned in `SOURCES.json`. Their prior attribution and license apply. + +The rebuilt word uses icekylinx's gauge44 construction and its retained +predecessors. PR1005 supplies the k8 work credited to LeaverSAT and +LeaverSAT2, together with the signed layer, promotion, hybrid, and frame +builders and their recorded reviewers. PR1074 supplies the seven-slot +recipe. These names identify the roles recorded in the source packages; +they are not claims of external human review of this contribution. +The seven-slot lineage retains Rohan Arun's PR987 search and NewBArch's +PR869 delivery mechanism. Jeremy Kothe maintains the k8 package lineage. +Chafreaky's frame and owner work, G44Pack's owner work, and the PR635 +native interfaces retain their predecessor credit. + +PR899 is the direct prior helper-minimality result. This package changes +its circuit class: the first-formation theorem permits arbitrary scalar +operations and block mixing, while retaining an explicit value/frame +interface. No PR899 code was copied. + +Concurrent PR1103, by steph4n-gh with AI assistance, studies rectangular +output borrowing. PR1105, by woklerx with AI assistance, studies projected +cleanup after target feedback. They informed the stated scope, but their +code is not imported. The concurrent owner-packing lane independently +uses the same rebuilt seven-slot word. Its construction and bound are +separate from this package. + +Concurrent PR1126, also by woklerx with AI assistance, proves a 21-ADD +minimum for the eight cell cores in a fixed positive-lift class. Its +different operation alphabet and cost objective are not used here. diff --git a/research/k8-frame-antichain/PROOF.md b/research/k8-frame-antichain/PROOF.md new file mode 100644 index 0000000000..e4972cf3fa --- /dev/null +++ b/research/k8-frame-antichain/PROOF.md @@ -0,0 +1,192 @@ +# Proof and scope + +## 1. The register model + +Let `x_0,...,x_111` be independent scalar inputs. Input `x_i` has binary +label `p_i` in `GF(2)^9`. A register has a scalar value and a binary frame. +Its clean row is the coefficient row of the x inputs after all other +arbitrary inputs have been set to zero. The support hull of that row is +the span of the labels with nonzero coefficients. + +Initially, the 112 source rows are the coordinate rows and their frames +contain the corresponding labels. All other clean rows are zero. A +scalar ADD uses two distinct registers at a common frame that contains +both preceding frames. A scale leaves its row support unchanged. Frames +can grow but cannot decrease. No operation injects a new source form +through a cut or a private descending query. Target registers are not +available as extra registers in this class. + +These rules imply that each clean support hull lies in its register's +frame. This follows by induction on the scalar gates. Cancellation can +remove support, but cannot add a label outside the common frame. + +The coefficients can be arbitrary elements of a characteristic-zero +field. The gate count, order, intermediate rows, coefficient size, and +mixing between the 14 blocks are unrestricted. In particular, the proof +does not use the fixed-operation-multiset hypothesis of PR899. It does +not assume the shipped end-of-A frames for individual helper registers. +It does retain the value/frame demands below. + +## 2. First formation and the antichain bound + +Suppose a required value has support hull `F`, with `dim(F)>=2`, and must +occur in a register whose frame is contained in F. Select the first time +in the whole computation that any clean row with support hull F occurs +at a frame contained in F. + +That event is an ADD. It cannot be an initial row or a scale. Neither +operand already has support hull F: its frame was contained in F before +the event, which would contradict the choice of the first time. The +resulting row has support hull F. Thus the common ADD frame contains F. +It is also contained in F, so it equals F. Both distinct operand +registers reach F at this event. + +Let A be a set of pairwise incomparable required frames. Assign the two +registers from the preceding argument to each F in A. One register +cannot be assigned to two different frames in A. Its frame can only +grow, so those two frames would have to be comparable. Therefore: + +```text +number of registers >= 2 * |A|. +``` + +The certificate derives the demands from the 14 pinned packet programs. +For each of the eight all-K cells, the omitted face operations expose +leaver operands at rank two. Across the six K blocks, these give 48 +leaver values at 24 distinct frames. The retained faces give 144 values +at 144 distinct rank-three frames. The checker tests every pair of the +168 frames and finds no containment in either direction. + +The checker then replays the actual final seven-slot word. It finds all +192 required clean rows, up to nonzero scale, at their specified frames +in A or B. Each witness records the phase, event, register, exact row, +and frame. No value is inferred from a helper name or a reported count. +The source clean rows do not depend on the omitted target cut because +the word has no target feedback into source-side registers in A or B. + +It follows that at least 336 registers are needed for this interface. +Only 112 are input registers, so at least 224 extra registers are needed. +The 14 packet programs each use eight input registers and 16 helpers. +They supply all the specified forms at their frames. Thus 224 is sharp +for the clean formation interface. This upper witness does not assert +an independently optimal complete dirty-word implementation. + +The bound concerns the total available registers for this interface. +Helpers from a different stage count if that stage lends them. The proof +does not add 224 to a separate lower bound for another stage unless the +two resource uses are independently shown to be disjoint. + +## 3. Whole-block target borrowing + +The final frame of target t is `H_t={z:z dot p_t=0}`. A register with +monotone frames can reach a frame F only if `F` is contained in its final +frame. For each of the eight rank-four cold-block frames and each of the +112 targets, the certificate gives an explicit vector in F with odd +pairing against `p_t`. It checks all 896 cases. No whole block can use a +target register, regardless of scalar cancellation or later restoration. + +The same check applies to all eight rank-eight center-query frames. +It rejects all 896 center/target pairs. Thus a target cannot hold a +complete retained center query or participate at that query's full frame. +Earlier staged reads at smaller frames are outside this statement. + +The scalar restoration check is separate. It starts with the full +704-by-704 identity matrix, replays A over exact rationals, then applies +the recorded low tails for each group of four cold helpers. All four +helper rows return to their exact input rows. These helpers have no B +uses. A missing-tail control fails restoration. This is a scalar fact, +not a claim that an altered native schedule has been admitted. + +The frame result is not based on rational orthogonality of complementary +root tetrads. The retained binary Gram relation has a constant term: +`p_s dot p_t = 1 + (root_s dot root_t / 2) mod 2`. The finite cap check +uses the actual binary labels and does not omit that term. + +## 4. Splits and a boundary counterexample + +Project a cold block onto its eight independent source inputs. Each +target cap admits either none or four of these source labels. Across +all 112 targets there are 15 different masks. The nonempty masks form +seven complementary pairs. + +Restrict the split mechanism to two disjoint support masks whose union +is the block. Every carrier is assigned to one of the two masks. Other +block columns can be present, but are removed by projection here. On +each side, the carriers must span the restriction of the four coordinate +totals to that side. Their number is at least the rational rank of that +restriction. The checker computes these ranks by exact elimination. +Six complementary pairs have ranks 3 and 3. The last pair has ranks 4 +and 4. This proves the six-carrier minimum in the two-cap class, with +eight needed for the last partition. It covers all possible target +choices, not a sampled set. + +That restriction matters. Write the four coordinate rows as a,b,c,d. +The four rows `a+b`, `a-b`, `c+d`, and `c-d` each fit an allowed rank-three +target cap. They are independent and recover a,b,c,d by sums and +differences divided by two. The certificate gives distinct target +choices for all eight blocks. Hence a claim that every split needs six +carriers would be false. These four algebraic carriers still need a +scalar circuit with arbitrary target dirt, valid frame paths, restoration, +and a complete supplier invoice. They do not constitute such a circuit. + +## 5. Cost of descent between local formation jobs + +This subsection uses an additional restriction. Each demand still has +its first formation inside its own frame, as in section 2. Descents are +allowed only to reuse registers between these local formation jobs. +This excludes forming a query above its delivery frame and descending +a private copy. The native center mechanism uses that excluded behavior. + +There are 336 assigned register/frame occurrences. With delta fewer +registers, at least delta transitions on reused registers go from one +antichain frame to another. Such a transition has at least one downward +rank step. Total frame variation equals final rank minus initial rank +plus twice the total downward rank. Therefore this reuse adds at least +`2*delta` paid rank above the same endpoint rises. + +For a limited invoice screen, retain all other paid and idle charges. +Grant each removed helper the largest possible width, nine. Grant that +all nine of its paid ranks were rank-one children, and return those nine +ranks as idle work at the full parent rank m. Both grants favor removal. +With `w_r(b)=r*(m/r)^b`, the largest saving is + +```text +9 * (m^b - 1) +``` + +per removed helper. The extra two ranks cost at least two because every +allowed child rank is at most m. At stage counts 9 and 37, m is 73 and +297. For `0 order[j] for i in range(size) for j in range(i + 1, size)) + value = sign + for i, j in enumerate(order): + value *= matrix[i][j] + total += value + return total + + +def minor_rank(matrix): + for size in range(min(len(matrix), len(matrix[0])), 0, -1): + for rows in combinations(range(len(matrix)), size): + for columns in combinations(range(len(matrix[0])), size): + if determinant([[matrix[i][j] for j in columns] for i in rows]): + return size + return 0 + + +def main(): + certificate = json.loads((ROOT / "CERTIFICATE.json").read_text()) + word = json.loads(gzip.decompress((ROOT / "inputs/SEVEN-SLOT-WORD.json.gz").read_bytes())) + witnesses = certificate["factory"]["witnesses"] + check(len(witnesses) == 192, "demand count") + visits = {} + for witness in witnesses: + visits.setdefault((witness["phase"], witness["event"]), []).append(witness) + stream = [(phase, index, event) for phase in ("A", "B") for index, event in enumerate(word[phase])] + for column in range(112): + values = [Fraction(0)] * 704 + values[column] = Fraction(1) + for phase, index, event in stream: + if event[0] == "add": + target, source, numerator, denominator = event[1:5] + values[target] += values[source] * Fraction(numerator, denominator) + else: + target, numerator, denominator = event[1:4] + values[target] *= Fraction(numerator, denominator) + for witness in visits.get((phase, index), []): + expected = dict(witness["clean_row"]).get(column, "0") + check(values[witness["register"]] == Fraction(expected), "column witness") + check(span(witness["frame"]) == span(event[-1]), "event frame") + frames = set() + for witness in witnesses: + labels = [word["ports"][i] for i, coefficient in witness["clean_row"] if Fraction(coefficient)] + frame = frozenset(span(witness["frame"])) + check(span(labels) == frame, "support hull") + frames.add(frame) + check(len(frames) == 168, "frame count") + check(sum(len(frame) == 4 for frame in frames) == 24, "rank two count") + check(sum(len(frame) == 8 for frame in frames) == 144, "rank three count") + for first, second in combinations(frames, 2): + check(not first <= second and not second <= first, "antichain") + check(2 * len(frames) - 112 == certificate["factory"]["helper_lower_bound"] == 224, + "register bound") + cap_pairs = 0 + for key in ("whole_block_target_exclusion", "center_target_exclusion"): + if key == "whole_block_target_exclusion": + expected_frames = {frozenset(span(frame)) for register, frame in word["helper_final"].items() + if len(frame) == 4 and register not in word["start_extra"]} + else: + expected_frames = {frozenset(span(frame)) for frame in word["center_frames"]} + check(len(certificate[key]) == 8 and + {frozenset(span(record["frame"])) for record in certificate[key]} == expected_frames, + "cap frame inventory") + for record in certificate[key]: + frame = span(record["frame"]) + check(len(record["odd_vectors_by_target"]) == 112, "cap target inventory") + for port, vector in zip(word["ports"], record["odd_vectors_by_target"]): + check(vector in frame and bin(vector & port).count("1") % 2 == 1, "cap witness") + cap_pairs += 1 + check(cap_pairs == 1792, "cap coverage") + split_ranks = 0 + for record in certificate["split_carriers"]: + sources = record["sources"] + labels = [word["ports"][i] for i in sources] + matrix = [[word["root_lines"][j][i] for j in sources] for i in record["block"]] + masks = {} + for target, port in enumerate(word["ports"]): + mask = sum(1 << i for i, label in enumerate(labels) if bin(label & port).count("1") % 2 == 0) + masks.setdefault(mask, []).append(target) + check(record["target_masks"] == [{"mask": m, "targets": masks[m]} for m in sorted(masks)], + "mask inventory") + pairs = [(m, 255 ^ m) for m in masks if m < (255 ^ m) and (255 ^ m) in masks] + check(len(pairs) == 7, "partition coverage") + check(len(record["two_cap_partitions"]) == 7 and + {tuple(p["masks"]) for p in record["two_cap_partitions"]} == set(pairs), + "partition inventory") + for partition in record["two_cap_partitions"]: + check(tuple(partition["masks"]) in pairs, "partition masks") + for mask, expected in zip(partition["masks"], partition["ranks"]): + restricted = [[row[j] for j in range(8) if mask >> j & 1] for row in matrix] + check(minor_rank(restricted) == expected, "split determinant rank") + split_ranks += 1 + escape = record["four_cap_escape"] + check(len(set(escape["targets"])) == 4 and minor_rank(escape["rows"]) == 4, "escape rank") + for row, target in zip(escape["rows"], escape["targets"]): + support = [labels[i] for i, value in enumerate(row) if value] + check(len(span(support)) == 8, "escape frame") + check(all(bin(x & word["ports"][target]).count("1") % 2 == 0 for x in support), + "escape target") + for pair in range(2): + plus, minus = escape["rows"][2 * pair:2 * pair + 2] + check([Fraction(x + y, 2) for x, y in zip(plus, minus)] == matrix[2 * pair], "escape sum") + check([Fraction(x - y, 2) for x, y in zip(plus, minus)] == matrix[2 * pair + 1], "escape difference") + check(split_ranks == 112, "split rank coverage") + print("PASS_K8_ANTICHAIN_INDEPENDENT columns=112 values=192 antichain=168 split_ranks=112 cap_pairs=1792") + + +if __name__ == "__main__": + main() diff --git a/research/k8-frame-antichain/inputs/PACKET-PROGRAMS.json.gz b/research/k8-frame-antichain/inputs/PACKET-PROGRAMS.json.gz new file mode 100644 index 0000000000..e98ce5d879 Binary files /dev/null and b/research/k8-frame-antichain/inputs/PACKET-PROGRAMS.json.gz differ diff --git a/research/k8-frame-antichain/inputs/SEVEN-SLOT-WORD.json.gz b/research/k8-frame-antichain/inputs/SEVEN-SLOT-WORD.json.gz new file mode 100644 index 0000000000..723decbca8 Binary files /dev/null and b/research/k8-frame-antichain/inputs/SEVEN-SLOT-WORD.json.gz differ diff --git a/research/k8-frame-antichain/inputs/SLOT-PINS-k8.json b/research/k8-frame-antichain/inputs/SLOT-PINS-k8.json new file mode 100644 index 0000000000..2702c368f4 --- /dev/null +++ b/research/k8-frame-antichain/inputs/SLOT-PINS-k8.json @@ -0,0 +1,47 @@ +{ + "base_sha256": "db2c7cfb3f8eee2b76c2e0154fc530520fb4d90cd9511a002cab527b16033b83", + "word_sha256": "c2b294300760e1fd6eeab8c22c4d13e4633dca40e52cac8da0d68163a76e3ca8", + "canonical_sha256": "4ddb29fb9bc6f27e0c0fbfcf19a2a93a3496ad900d0f6d89059d0305c9576c0c", + "program_sha256": { + "forward": "071ecdacc0bb3ac16046aad4119ed551a945cb0ed6c57002a548a3e2232503d8", + "backward": "f36c5831106f5637102c6bedeec76ed2b223c6671ce42fd0eceed9ef24725b23" + }, + "clifford_recipes_sha256": "d0768f2164d5f64a2fdbec422f1cfde4e400818792f1904ca541958377243731", + "slot_controls": [ + "C0_identity", + "donation_after", + "donation_after@236", + "donation_after@238", + "donation_after@434", + "donation_after@436", + "donation_after@439", + "donation_after@444", + "donation_after@446", + "drop_preread", + "drop_preread@236", + "drop_preread@238", + "drop_preread@434", + "drop_preread@436", + "drop_preread@439", + "drop_preread@444", + "drop_preread@446", + "drop_restore", + "drop_restore@236", + "drop_restore@238", + "drop_restore@434", + "drop_restore@436", + "drop_restore@439", + "drop_restore@444", + "drop_restore@446", + "recipe", + "restore_full", + "restore_full@236", + "restore_full@238", + "restore_full@434", + "restore_full@436", + "restore_full@439", + "restore_full@444", + "restore_full@446" + ], + "kappa_decimal": "0.00167166528321877" +} diff --git a/research/k8-frame-antichain/verify.py b/research/k8-frame-antichain/verify.py new file mode 100644 index 0000000000..542ed6674c --- /dev/null +++ b/research/k8-frame-antichain/verify.py @@ -0,0 +1,373 @@ +#!/usr/bin/env python3 +"""Check the fixed factory interface and its frame obstructions.""" + +import argparse +from collections import Counter, defaultdict +from fractions import Fraction as Q +import gzip +import hashlib +from itertools import combinations +import json +from pathlib import Path + + +HERE = Path(__file__).resolve().parent + + +def require(test, message): + if not test: + raise ValueError(message) + + +def basis(vectors): + pivots = {} + for vector in vectors: + for p in sorted(pivots, reverse=True): + if vector >> p & 1: + vector ^= pivots[p] + if vector: + p = vector.bit_length() - 1 + for k in pivots: + if pivots[k] >> p & 1: + pivots[k] ^= vector + pivots[p] = vector + return tuple(pivots[p] for p in sorted(pivots, reverse=True)) + + +def points(frame): + result = {0} + for vector in frame: + result |= {x ^ vector for x in result} + return result + + +def contained(first, second): + return points(first) <= points(second) + + +def antichain(frames): + require(len(set(frames)) == len(frames), "duplicate demand frame") + for first, second in combinations(frames, 2): + require(not contained(first, second) and not contained(second, first), + "comparable demand frames") + + +def rank(matrix): + rows = [[Q(x) for x in row] for row in matrix] + pivot = 0 + for column in range(len(rows[0])): + found = next((i for i in range(pivot, len(rows)) if rows[i][column]), None) + if found is None: + continue + rows[pivot], rows[found] = rows[found], rows[pivot] + scale = rows[pivot][column] + rows[pivot] = [x / scale for x in rows[pivot]] + for i in range(len(rows)): + if i != pivot: + scale = rows[i][column] + rows[i] = [x - scale * y for x, y in zip(rows[i], rows[pivot])] + pivot += 1 + return pivot + + +def apply(event, rows): + target = event[1] + if event[0] == "scale": + q = Q(event[2], event[3]) + rows[target] = {k: q * x for k, x in rows[target].items()} + return [target] + require(event[0] == "add", "unknown scalar event") + source = event[2] + q = Q(event[3], event[4]) + for k, x in list(rows[source].items()): + value = rows[target].get(k, Q(0)) + q * x + if value: + rows[target][k] = value + else: + rows[target].pop(k, None) + return [target, source] + + +def serialized_row(row): + return [[k, str(q)] for k, q in sorted(row.items())] + + +def normalized(row): + scale = row[min(row)] + return tuple((k, q / scale) for k, q in sorted(row.items())) + + +def factory_demands(modules, word): + demands = {} + k_pairs = {(0, 1), (2, 3), (4, 5), (6, 7)} + require(len(modules) == 14, "factory block count") + all_sources = [s - 8 for module in modules for s in module["receipt"]["source_lines"]] + require(sorted(all_sources) == list(range(112)), "factory source partition") + for module in modules: + block = module["receipt"]["block"] + keys = [(pair, sign) for pair in combinations(block, 2) for sign in (-1, 1)] + frames = [basis(x) for x in module["start_frames"]] + require(len(frames) == 24 and all(not frame for frame in frames[8:]), "factory helper allocation") + labels = [basis(x)[0] for x in module["start_frames"][:8]] + require(labels == [word["ports"][s - 8] for s in module["receipt"]["source_lines"]], + "factory labels do not match word") + rows = [{r: Q(1)} if r < 8 else {} for r in range(24)] + for index, event in enumerate(module["events"]): + if index == 40: + pair_frames, pair_rows = frames[:], [dict(row) for row in rows] + target, source = event[:2] + require(0 <= target < 24 and 0 <= source < 24 and target != source, + "factory register allocation") + frame = basis(module["event_frames"][index]) + require(contained(frames[target], frame) and contained(frames[source], frame), + "factory frame descent") + apply(["add"] + event + [list(frame)], rows) + frames[target] = frames[source] = frame + for register in (target, source): + require(contained(basis(labels[k] for k in rows[register]), frame), + "factory support outside frame") + if index < 40: + continue + pair, sign = keys[index - 40] + if pair in k_pairs: + choices = [(r, pair_frames[r], pair_rows[r], "leaver") for r in (target, source)] + else: + choices = [(target, frame, rows[target], "face")] + for register, wanted, row, kind in choices: + require(basis(labels[k] for k in row) == wanted, "factory support hull") + global_row = {module["receipt"]["source_lines"][k] - 8: q for k, q in row.items()} + demand = demands.setdefault(wanted, {"kind": kind, "block": block, "clean_rows": set()}) + demand["clean_rows"].add(normalized(global_row)) + antichain(list(demands)) + require(Counter(x["kind"] for x in demands.values()) == {"face": 144, "leaver": 24}, + "factory interface changed") + require(sum(len(x["clean_rows"]) for x in demands.values()) == 192, "factory value count changed") + return demands + + +def word_witnesses(word, demands): + v = word["report"]["v"] + n = 2 * v + word["report"]["R"] + rows = [{r: Q(1)} if r < v else {} for r in range(n)] + frames = [(p,) for p in word["ports"]] + [()] * (n - v) + for register, frame in word["start_extra"].items(): + frames[int(register)] = basis(frame) + found = {} + for phase in ("A", "B"): + for index, event in enumerate(word[phase]): + if event[0] == "add": + require(not (v <= event[2] < 2 * v and not v <= event[1] < 2 * v), + "target feedback into source circuit") + touched = apply(event, rows) + frame = basis(event[-1]) + for register in touched: + require(contained(frames[register], frame), "word frame descent") + frames[register] = frame + if v <= register < 2 * v: + continue + hull = basis(word["ports"][k] for k in rows[register]) + require(contained(hull, frame), "source support outside frame") + if frame in demands and hull == frame: + clean = normalized(rows[register]) + key = frame, clean + if clean in demands[frame]["clean_rows"] and key not in found: + found[key] = {"phase": phase, "event": index, "register": register, + "frame": list(frame), "clean_row": serialized_row(rows[register]), + "kind": demands[frame]["kind"], "block": demands[frame]["block"]} + expected = {(frame, row) for frame, demand in demands.items() for row in demand["clean_rows"]} + require(set(found) == expected, "word does not supply the demand interface") + return [found[key] for key in sorted(found)] + + +def check_witness(word, witness): + v = word["report"]["v"] + n = 2 * v + word["report"]["R"] + rows = [{r: Q(1)} if r < v else {} for r in range(n)] + for phase in ("A", "B"): + for index, event in enumerate(word[phase]): + apply(event, rows) + if (phase, index) == (witness["phase"], witness["event"]): + require(serialized_row(rows[witness["register"]]) == witness["clean_row"], + "demand row mismatch") + require(basis(event[-1]) == tuple(witness["frame"]), "demand frame mismatch") + return + raise ValueError("demand event missing") + + +def cap_witnesses(frames, ports): + result = [] + for frame in frames: + witnesses = [] + for port in ports: + odd = next((x for x in sorted(points(frame)) if (x & port).bit_count() % 2), None) + require(odd is not None, "frame fits a target cap") + witnesses.append(odd) + result.append({"frame": list(frame), "odd_vectors_by_target": witnesses}) + return result + + +def cold_groups(word): + groups = defaultdict(list) + for register, frame in word["helper_final"].items(): + if len(frame) == 4 and register not in word["start_extra"]: + groups[basis(frame)].append(int(register)) + require(len(groups) == 8 and all(len(hs) == 4 for hs in groups.values()), "cold groups changed") + return groups + + +def cold_restoration(word, groups, omit=None): + v = word["report"]["v"] + n = 2 * v + word["report"]["R"] + rows = [{r: Q(1)} for r in range(n)] + for event in word["A"]: + apply(event, rows) + results = [] + for frame, helpers in sorted(groups.items()): + require(all(not set(event[1:3] if event[0] == "add" else event[1:2]) & set(helpers) + for event in word["B"]), "cold helper has a B use") + tails = [(index, word["cleanup"][index][:-1] + [level]) + for index, level in word["early_cleanup"] + if word["cleanup"][index][1] in helpers] + fresh = [dict(row) for row in rows] + for index, event in tails: + if index != omit: + apply(event, fresh) + require(all(fresh[h] == {h: Q(1)} for h in helpers), "cold dirt not restored") + results.append({"frame": list(frame), "helpers": sorted(helpers), + "tail_indices": [index for index, event in tails], "arbitrary_columns": n}) + return results + + +def split_carriers(word, modules, groups): + results = [] + for module in modules: + sources = [i - 8 for i in module["receipt"]["source_lines"]] + labels = [word["ports"][i] for i in sources] + frame = basis(labels) + if frame not in groups: + continue + block = module["receipt"]["block"] + matrix = [[word["root_lines"][j][i] for j in sources] for i in block] + masks = defaultdict(list) + for target, port in enumerate(word["ports"]): + mask = sum(1 << j for j, label in enumerate(labels) if (label & port).bit_count() % 2 == 0) + masks[mask].append(target) + require(len(masks) == 15 and 255 not in masks, "target mask class changed") + require(all(mask.bit_count() in (0, 4) for mask in masks), "target mask support size") + partitions = [] + for mask in sorted(masks): + other = 255 ^ mask + if mask >= other or other not in masks: + continue + ranks = [rank([[row[j] for j in range(8) if side >> j & 1] for row in matrix]) + for side in (mask, other)] + partitions.append({"masks": [mask, other], "ranks": ranks, + "target_pairs": len(masks[mask]) * len(masks[other])}) + require(Counter(tuple(item["ranks"]) for item in partitions) == {(3, 3): 6, (4, 4): 1}, + "two-cap split ranks changed") + carriers, targets = [], [] + for a, b in ((0, 1), (2, 3)): + for sign in (1, -1): + row = [matrix[a][j] + sign * matrix[b][j] for j in range(8)] + mask = sum(1 << j for j, q in enumerate(row) if q) + target = next(t for t in masks[mask] if t not in targets) + targets.append(target) + require(len(basis(labels[j] for j, q in enumerate(row) if q)) == 3, "mixed carrier rank") + carriers.append(row) + require(rank(carriers) == 4, "mixed carriers dependent") + for pair, (a, b) in enumerate(((0, 1), (2, 3))): + plus, minus = carriers[2 * pair:2 * pair + 2] + require([Q(x + y, 2) for x, y in zip(plus, minus)] == matrix[a], "mixed sum decoder") + require([Q(x - y, 2) for x, y in zip(plus, minus)] == matrix[b], "mixed difference decoder") + results.append({"block": block, "sources": sources, + "target_masks": [{"mask": mask, "targets": masks[mask]} for mask in sorted(masks)], + "two_cap_partitions": partitions, + "four_cap_escape": {"targets": targets, "rows": carriers, + "rational_rank": 4, "frame_ranks": [3] * 4}}) + require(len(results) == 8, "split block coverage") + return results + + +def expect_failure(operation, reason): + try: + operation() + except ValueError as error: + require(str(error) == reason, "wrong control rejection: " + str(error)) + return reason + raise ValueError("control accepted: " + reason) + + +def controls(word, demands, witnesses, groups): + frames = list(demands) + result = [expect_failure(lambda: antichain([frames[0], frames[0]]), "duplicate demand frame")] + larger = basis(list(frames[0]) + [x for x in range(1, 512) if x not in points(frames[0])][:1]) + result.append(expect_failure(lambda: antichain([frames[0], larger]), "comparable demand frames")) + changed = dict(witnesses[0]) + changed["clean_row"] = [list(entry) for entry in changed["clean_row"]] + changed["clean_row"][0][1] = str(Q(changed["clean_row"][0][1]) + 1) + result.append(expect_failure(lambda: check_witness(word, changed), "demand row mismatch")) + full_frame = next(iter(groups)) + orthogonal = next(p for p in range(1, 512) if all((x & p).bit_count() % 2 == 0 for x in full_frame)) + result.append(expect_failure(lambda: cap_witnesses([full_frame], [orthogonal]), "frame fits a target cap")) + tails = cold_restoration(word, groups) + result.append(expect_failure(lambda: cold_restoration(word, groups, tails[0]["tail_indices"][0]), + "cold dirt not restored")) + return result + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--write-certificate", action="store_true") + args = parser.parse_args() + pins = json.loads((HERE / "SOURCES.json").read_text()) + inputs = {} + for name, pin in pins["inputs"].items(): + data = (HERE / "inputs" / name).read_bytes() + if name.endswith(".gz"): + data = gzip.decompress(data) + require(hashlib.sha256(data).hexdigest() == pin["content_sha256"], "input pin mismatch: " + name) + inputs[name] = json.loads(data) + word = inputs["SEVEN-SLOT-WORD.json.gz"] + modules = inputs["PACKET-PROGRAMS.json.gz"] + slot_pins = inputs["SLOT-PINS-k8.json"] + require(slot_pins["word_sha256"] == pins["inputs"]["SEVEN-SLOT-WORD.json.gz"]["content_sha256"], + "word does not match slot source pin") + require(word["report"]["v"] == 112 and word["report"]["R"] == 480, "word size changed") + require(len(word["center_frames"]) == 8 and all(len(basis(x)) == 8 for x in word["center_frames"]), + "center frame inventory changed") + demands = factory_demands(modules, word) + witnesses = word_witnesses(word, demands) + groups = cold_groups(word) + prices = [] + for stages in (9, 37): + m = 8 * stages + 1 + require(m * 9 ** 32 < 11 ** 32, "descent cost screen failed") + prices.append({"stages": stages, "parent_rank": m, "max_b": "1/32", + "max_removed_width": 9, "extra_rank_per_reused_role": 2, + "integer_slack": 11 ** 32 - m * 9 ** 32}) + result = {"status": "PASS_K8_FRAME_ANTICHAIN", "base_commit": pins["base_commit"], + "scope": "fixed factory value/frame interface; no kappa claim", + "factory": {"demand_frame_count": 168, "demand_value_count": 192, + "frame_ranks": {"2": 24, "3": 144}, + "source_registers": 112, "register_lower_bound": 336, + "helper_lower_bound": 224, "attained_helpers": 14 * 16, + "upper_witness": {"modules": len(modules), "registers_per_module": 24, + "source_partition": list(range(112)), + "executed_adds": sum(len(m["events"]) for m in modules)}, + "witnesses": witnesses}, + "whole_block_target_exclusion": cap_witnesses(sorted(groups), word["ports"]), + "center_target_exclusion": cap_witnesses([basis(x) for x in word["center_frames"]], word["ports"]), + "early_scalar_restoration": cold_restoration(word, groups), + "split_carriers": split_carriers(word, modules, groups), + "descent_only_cost_screen": prices, + "negative_controls": controls(word, demands, witnesses, groups)} + certificate = HERE / "CERTIFICATE.json" + if args.write_certificate: + certificate.write_text(json.dumps(result, indent=2) + "\n") + else: + require(result == json.loads(certificate.read_text()), "certificate differs from replay") + print("PASS_K8_FRAME_ANTICHAIN demands=168 helpers=224 cold_caps=896 center_caps=896 split_blocks=8 controls=5") + + +if __name__ == "__main__": + main()