From 5f00c02e9903b23fca73277fcdd3b6aa4fe2ea5a Mon Sep 17 00:00:00 2001 From: clover caruso Date: Tue, 8 Sep 2026 01:47:36 -0700 Subject: [PATCH] feat: split ordinary paragraphs with stable identities Publish text partitions, child transfer, list clones, tags and title metadata in one revision. Retain original left identities and history; reject generated fields and unsupported run metadata before I/O. Validated at every scalar boundary across twelve native cases, ordinary/checkpoint publication interruptions, 29,316 ASan executions, cold OneNote rendering and four subsequent native typing actions. The full public regression lane passes. Assisted-by: gpt-6-astra --- corpus/paragraph-edit/README.md | 12 +- .../rust-split/candidate/synthetic.one | Bin 0 -> 110224 bytes .../paragraph-edit/rust-split/manifest.json | 352 ++++++++++++++++ .../native/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../rust-split/native/notebook/synthetic.one | Bin 0 -> 110224 bytes .../rust-split/native/read/environment.json | 7 + .../rust-split/native/read/hierarchy.xml | 2 + .../rust-split/native/read/page-000.xml | 6 + .../rust-split/native/read/page-001.xml | 3 + .../rust-split/native/read/page-002.xml | 6 + .../rust-split/native/read/page-003.xml | 5 + .../rust-split/native/read/page-004.xml | 20 + .../rust-split/native/read/page-005.xml | 6 + .../rust-split/native/read/page-006.xml | 6 + .../rust-split/native/read/page-007.xml | 6 + .../rust-split/native/read/page-008.xml | 2 + .../rust-split/native/read/page-009.xml | 5 + .../rust-split/native/read/page-010.xml | 3 + .../rust-split/native/read/page-011.xml | 6 + .../rust-split/native/read/page-012.xml | 6 + .../rust-split/native/read/page-013.xml | 5 + .../rust-split/native/read/payloads.json | 1 + .../paragraph-edit/rust-split/native/run.json | 18 + .../rust-split/native/source.json | 8 + .../rust-split/native/teardown.json | 1 + .../typed/before-read/environment.json | 7 + .../typed/before-read/hierarchy.xml | 2 + .../rust-split/typed/before-read/page-000.xml | 5 + .../rust-split/typed/before-read/page-001.xml | 6 + .../rust-split/typed/before-read/page-002.xml | 3 + .../rust-split/typed/before-read/page-003.xml | 6 + .../rust-split/typed/before-read/page-004.xml | 20 + .../rust-split/typed/before-read/page-005.xml | 6 + .../rust-split/typed/before-read/page-006.xml | 6 + .../rust-split/typed/before-read/page-007.xml | 6 + .../rust-split/typed/before-read/page-008.xml | 2 + .../rust-split/typed/before-read/page-009.xml | 5 + .../rust-split/typed/before-read/page-010.xml | 3 + .../rust-split/typed/before-read/page-011.xml | 6 + .../rust-split/typed/before-read/page-012.xml | 6 + .../rust-split/typed/before-read/page-013.xml | 5 + .../typed/before-read/payloads.json | 1 + .../typed/notebook/Open Notebook.onetoc2 | 1 + .../rust-split/typed/notebook/synthetic.one | Bin 0 -> 119912 bytes .../rust-split/typed/read/environment.json | 7 + .../rust-split/typed/read/hierarchy.xml | 2 + .../rust-split/typed/read/page-000.xml | 5 + .../rust-split/typed/read/page-001.xml | 1 + .../rust-split/typed/read/page-002.xml | 1 + .../rust-split/typed/read/page-003.xml | 1 + .../rust-split/typed/read/page-004.xml | 20 + .../rust-split/typed/read/page-005.xml | 1 + .../rust-split/typed/read/page-006.xml | 1 + .../rust-split/typed/read/page-007.xml | 1 + .../rust-split/typed/read/page-008.xml | 2 + .../rust-split/typed/read/page-009.xml | 1 + .../rust-split/typed/read/page-010.xml | 1 + .../rust-split/typed/read/page-011.xml | 1 + .../rust-split/typed/read/page-012.xml | 1 + .../rust-split/typed/read/page-013.xml | 5 + .../rust-split/typed/read/payloads.json | 1 + .../paragraph-edit/rust-split/typed/run.json | 18 + .../rust-split/typed/source.json | 14 + .../rust-split/typed/teardown.json | 1 + .../rust-split/typed/ui/selections.json | 30 ++ .../rust-split/typed/ui/split-empty-0.ahk | 23 ++ .../rust-split/typed/ui/split-empty-0.json | 1 + .../rust-split/typed/ui/split-empty-0.png | Bin 0 -> 47514 bytes .../rust-split/typed/ui/split-empty-1.ahk | 23 ++ .../rust-split/typed/ui/split-empty-1.json | 1 + .../rust-split/typed/ui/split-empty-1.png | Bin 0 -> 47726 bytes .../rust-split/typed/ui/split-end-1.ahk | 23 ++ .../rust-split/typed/ui/split-end-1.json | 1 + .../rust-split/typed/ui/split-end-1.png | Bin 0 -> 47953 bytes .../rust-split/typed/ui/split-start-0.ahk | 23 ++ .../rust-split/typed/ui/split-start-0.json | 1 + .../rust-split/typed/ui/split-start-0.png | Bin 0 -> 47959 bytes crates/onestore/README.md | 9 + crates/onestore/src/commit.rs | 13 + crates/onestore/src/lib.rs | 2 + crates/onestore/src/paragraph.rs | 383 ++++++++++++++++++ crates/onestore/src/write.rs | 92 ++++- crates/onestore/src/write/tests.rs | 54 +++ crates/onestore/tests/paragraph.rs | 343 ++++++++++++++++ fuzz/Cargo.toml | 7 + fuzz/fuzz_targets/paragraph.rs | 144 +++++++ tools/test_paragraph_edit.py | 61 ++- 87 files changed, 1889 insertions(+), 12 deletions(-) create mode 100644 corpus/paragraph-edit/rust-split/candidate/synthetic.one create mode 100644 corpus/paragraph-edit/rust-split/manifest.json create mode 100644 corpus/paragraph-edit/rust-split/native/notebook/Open Notebook.onetoc2 create mode 100644 corpus/paragraph-edit/rust-split/native/notebook/synthetic.one create mode 100644 corpus/paragraph-edit/rust-split/native/read/environment.json create mode 100644 corpus/paragraph-edit/rust-split/native/read/hierarchy.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-000.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-001.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-002.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-003.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-004.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-005.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-006.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-007.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-008.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-009.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-010.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-011.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-012.xml create mode 100644 corpus/paragraph-edit/rust-split/native/read/page-013.xml create mode 120000 corpus/paragraph-edit/rust-split/native/read/payloads.json create mode 100644 corpus/paragraph-edit/rust-split/native/run.json create mode 100644 corpus/paragraph-edit/rust-split/native/source.json create mode 120000 corpus/paragraph-edit/rust-split/native/teardown.json create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/environment.json create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/hierarchy.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-000.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-001.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-002.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-003.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-004.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-005.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-006.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-007.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-008.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-009.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-010.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-011.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-012.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/before-read/page-013.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/before-read/payloads.json create mode 120000 corpus/paragraph-edit/rust-split/typed/notebook/Open Notebook.onetoc2 create mode 100644 corpus/paragraph-edit/rust-split/typed/notebook/synthetic.one create mode 100644 corpus/paragraph-edit/rust-split/typed/read/environment.json create mode 100644 corpus/paragraph-edit/rust-split/typed/read/hierarchy.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/read/page-000.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-001.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-002.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-003.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/read/page-004.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-005.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-006.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-007.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/read/page-008.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-009.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-010.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-011.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/page-012.xml create mode 100644 corpus/paragraph-edit/rust-split/typed/read/page-013.xml create mode 120000 corpus/paragraph-edit/rust-split/typed/read/payloads.json create mode 100644 corpus/paragraph-edit/rust-split/typed/run.json create mode 100644 corpus/paragraph-edit/rust-split/typed/source.json create mode 120000 corpus/paragraph-edit/rust-split/typed/teardown.json create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/selections.json create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.ahk create mode 120000 corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.json create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.png create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.ahk create mode 120000 corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.json create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.png create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-end-1.ahk create mode 120000 corpus/paragraph-edit/rust-split/typed/ui/split-end-1.json create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-end-1.png create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-start-0.ahk create mode 120000 corpus/paragraph-edit/rust-split/typed/ui/split-start-0.json create mode 100644 corpus/paragraph-edit/rust-split/typed/ui/split-start-0.png create mode 100644 crates/onestore/src/paragraph.rs create mode 100644 crates/onestore/tests/paragraph.rs create mode 100644 fuzz/fuzz_targets/paragraph.rs diff --git a/corpus/paragraph-edit/README.md b/corpus/paragraph-edit/README.md index 14333fa67ce761a4c93017134f400497e767249c..a79e9aa4b4ff5b1ccd19c5624b398bc504a4e85d 100644 --- a/corpus/paragraph-edit/README.md +++ b/corpus/paragraph-edit/README.md @@ -26,6 +26,14 @@ notebook before completing inspection. Cold-open the split notebook for the join pass. Captured COM IDs belong to their originating sessions; discover fresh IDs when regenerating the corpus. -`tools/test_paragraph_edit.py` verifies these native controls without a VM. They -establish application behavior; they do not advertise a library split/join API. +`rust-split` retains twelve `ParagraphSplit` outputs, their cold native captures, +and a second native session typing into four empty boundary paragraphs. The +hyperlink case stays unchanged because this operation rejects fields. The Rust +test `export_native_paragraph_splits` generates candidate notebooks; its output +directory comes from `ONESTORE_PARAGRAPH_OUTPUT`. Native character/style comparisons +use both the keyboard-generated controls and the Rust-written notebooks. Empty +typing checks extend the preexisting empty run in an independent expected model. + +`tools/test_paragraph_edit.py` verifies these controls without a VM. The native +join captures establish behavior for subsequent join implementation. Identical captured files link to one canonical copy within this corpus. diff --git a/corpus/paragraph-edit/rust-split/candidate/synthetic.one b/corpus/paragraph-edit/rust-split/candidate/synthetic.one new file mode 100644 index 0000000000000000000000000000000000000000..b531feed7f641011262d6bc9eafaad31bdb863e9 GIT binary patch literal 110224 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%0D=IS((Q@t}Hry9OXf;J9~5ZnS(cnpP74SfS;LV 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 literal 0 HcmV?d00001 diff --git a/corpus/paragraph-edit/rust-split/manifest.json b/corpus/paragraph-edit/rust-split/manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..22e5a0ebff3be8f6c8d1969b8ce4e45311969948 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/manifest.json @@ -0,0 +1,352 @@ +{ + "cases": [ + { + "case": "Split middle", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 228, + 60, + 65, + 246, + 194, + 244, + 184, + 76, + 170, + 5, + 19, + 130, + 32, + 122, + 148, + 241 + ], + "offset": 2, + "text": "{DFE950EF-6BEB-0F5B-2403-7B74F1AE5002},44" + }, + "new_paragraph": "{F6413CE4-F4C2-4CB8-AA05-1382207A94F1},1", + "new_text": "{F6413CE4-F4C2-4CB8-AA05-1382207A94F1},2" + }, + { + "case": "Split style boundary", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 163, + 91, + 197, + 73, + 195, + 225, + 53, + 68, + 140, + 152, + 83, + 168, + 172, + 124, + 226, + 213 + ], + "offset": 4, + "text": "{5FB484E2-1E3E-0A9D-1989-271A3EBBEC42},44" + }, + "new_paragraph": "{49C55BA3-E1C3-4435-8C98-53A8AC7CE2D5},1", + "new_text": "{49C55BA3-E1C3-4435-8C98-53A8AC7CE2D5},2" + }, + { + "case": "Split start", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 135, + 16, + 214, + 248, + 73, + 35, + 2, + 69, + 148, + 213, + 125, + 28, + 43, + 124, + 81, + 35 + ], + "offset": 0, + "text": "{012ED94B-43B3-079A-3050-B1CBE25C1C09},44" + }, + "new_paragraph": "{F8D61087-2349-4502-94D5-7D1C2B7C5123},1", + "new_text": "{F8D61087-2349-4502-94D5-7D1C2B7C5123},2" + }, + { + "case": "Split end", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 37, + 220, + 149, + 138, + 85, + 3, + 106, + 69, + 168, + 172, + 49, + 82, + 247, + 99, + 160, + 139 + ], + "offset": 22, + "text": "{DAF723A3-C2A3-0798-2EAB-34613166A794},44" + }, + "new_paragraph": "{8A95DC25-0355-456A-A8AC-3152F763A08B},1", + "new_text": "{8A95DC25-0355-456A-A8AC-3152F763A08B},2" + }, + { + "case": "Split empty", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 232, + 204, + 91, + 132, + 180, + 27, + 239, + 79, + 158, + 115, + 213, + 165, + 40, + 35, + 189, + 93 + ], + "offset": 0, + "text": "{0B467F31-D287-08CD-09F4-A6FBB2F5418F},45" + }, + "new_paragraph": "{845BCCE8-1BB4-4FEF-9E73-D5A52823BD5D},1", + "new_text": "{845BCCE8-1BB4-4FEF-9E73-D5A52823BD5D},2" + }, + { + "case": "Split parent", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 54, + 186, + 114, + 171, + 44, + 189, + 95, + 71, + 135, + 190, + 71, + 95, + 23, + 246, + 37, + 157 + ], + "offset": 2, + "text": "{3860EA13-D444-0598-35D6-CF96769C6A21},44" + }, + "new_paragraph": "{AB72BA36-BD2C-475F-87BE-475F17F6259D},1", + "new_text": "{AB72BA36-BD2C-475F-87BE-475F17F6259D},2" + }, + { + "case": "Split child", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 160, + 247, + 235, + 152, + 30, + 98, + 166, + 77, + 157, + 204, + 141, + 45, + 114, + 151, + 225, + 195 + ], + "offset": 2, + "text": "{B587CBC6-0BCC-0A23-16F6-E1B0B3C5D061},49" + }, + "new_paragraph": "{98EBF7A0-621E-4DA6-9DCC-8D2D7297E1C3},1", + "new_text": "{98EBF7A0-621E-4DA6-9DCC-8D2D7297E1C3},2" + }, + { + "case": "Split bullet", + "intent": { + "author": "Rust split author", + "created": 1473324660, + "guid": [ + 53, + 245, + 214, + 76, + 159, + 56, + 134, + 76, + 178, + 90, + 131, + 182, + 74, + 114, + 31, + 24 + ], + "offset": 2, + "text": "{8C65E427-477C-02ED-1807-2F10E277019D},44" + }, + "new_paragraph": "{4CD6F535-389F-4C86-B25A-83B64A721F18},1", + "new_text": "{4CD6F535-389F-4C86-B25A-83B64A721F18},2" + }, + { + "case": "Split number", + "intent": { + "author": "Rust split author", + "created": 1473324661, + "guid": [ + 196, + 133, + 251, + 251, + 193, + 175, + 8, + 65, + 175, + 180, + 126, + 16, + 31, + 185, + 237, + 66 + ], + "offset": 2, + "text": "{D4ABBE4F-2165-0122-1F9F-ACE3FE92C703},44" + }, + "new_paragraph": "{FBFB85C4-AFC1-4108-AFB4-7E101FB9ED42},1", + "new_text": "{FBFB85C4-AFC1-4108-AFB4-7E101FB9ED42},2" + }, + { + "case": "Split tag", + "intent": { + "author": "Rust split author", + "created": 1473324661, + "guid": [ + 40, + 122, + 110, + 77, + 185, + 255, + 122, + 69, + 128, + 15, + 14, + 166, + 54, + 156, + 154, + 91 + ], + "offset": 2, + "text": "{37AA5877-2980-0227-169F-8B1E8EE0795A},44" + }, + "new_paragraph": "{4D6E7A28-FFB9-457A-800F-0EA6369C9A5B},1", + "new_text": "{4D6E7A28-FFB9-457A-800F-0EA6369C9A5B},2" + }, + { + "case": "Split cell", + "intent": { + "author": "Rust split author", + "created": 1473324661, + "guid": [ + 150, + 222, + 89, + 134, + 80, + 167, + 167, + 67, + 179, + 23, + 93, + 176, + 27, + 184, + 119, + 185 + ], + "offset": 2, + "text": "{F0832BC9-1578-0A96-08AF-99344644FFB8},50" + }, + "new_paragraph": "{8659DE96-A750-43A7-B317-5DB01BB877B9},1", + "new_text": "{8659DE96-A750-43A7-B317-5DB01BB877B9},2" + }, + { + "case": "Split soft break", + "intent": { + "author": "Rust split author", + "created": 1473324661, + "guid": [ + 199, + 62, + 94, + 81, + 29, + 157, + 236, + 77, + 159, + 34, + 22, + 137, + 163, + 57, + 215, + 79 + ], + "offset": 2, + "text": "{88189BA1-2F19-0282-05ED-A0B83153F143},44" + }, + "new_paragraph": "{515E3EC7-9D1D-4DEC-9F22-1689A339D74F},1", + "new_text": "{515E3EC7-9D1D-4DEC-9F22-1689A339D74F},2" + } + ] +} diff --git a/corpus/paragraph-edit/rust-split/native/notebook/Open Notebook.onetoc2 b/corpus/paragraph-edit/rust-split/native/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..d098f9c144e2d763a97f3afb08dd64fbf40ca2ce GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x8c?`GhPcu?lBb+w{H(B+@^7|?+I-B|+C6Tf;cy&yjE z?TK|aq=E9t7^eI`5P;aMFaanH6Gsz9;eynF09cR%D#Ze%K^O#pG(-hN%>f~ZFpSK1 zzNgvn@~X?yZ7jQmTv_|Mp%U4TKGXy=T=$$TwPM0&^`qBd>ao#VG#BzCV{B?h#YRJ5 zsE5FjFWrC%m#!ZJs4|T)xJt%`;p2`#e;xhrUAP|GZKsdc~mM@485(ibaFmapY zdy7GQE~uDkwn#FFF9PMK=yJn0crX6cNrn_iXsgS z3@X5&2Psv!%rdEl#l&w{hCk24#|$?#1R5H8fO3YRajq$`n><%ZE#Pv_JD~{Ds_Vhf zdxDV>RssXd=9UzO9%PSzOay`Tkp>M7Fm*COBmWC9G=OD@CJyjHm9j7}!0Hd6NCQX| z=oql+Obp*-7*zJjFo=Mhw`Cqu2eN^MVTvq+%ub+OHjoCX0oOjS7Bb8b-sZPRbB<|i zwc<07J{ce`W~gMyV<=(BU`Pd$nGDGcdJOqMkyM}@$b&!%2$16kq!Sbe4nLE)uRLRM zSkGrUQ?02t9VCt|UJ@p}z!e7*4_%$myGYk>Vm7yV#bzZXRbb!&O#xSZu=vO|(b=bI zebQsoME>~NJp$)J)_~&UEF(88oPin~4H$Y)GO}<1Wm&PtO^qhQFHn4dj2{J~Aut*O MxIzHASc8>60P$ZtbN~PV literal 0 HcmV?d00001 diff --git a/corpus/paragraph-edit/rust-split/native/notebook/synthetic.one b/corpus/paragraph-edit/rust-split/native/notebook/synthetic.one new file mode 100644 index 0000000000000000000000000000000000000000..d94fcd2d93f08baf60705f2f6efaf3382771ac60 GIT binary patch literal 110224 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 literal 0 HcmV?d00001 diff --git a/corpus/paragraph-edit/rust-split/native/read/environment.json b/corpus/paragraph-edit/rust-split/native/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..811feab20c52431eac39f4fd8a9941c2792dab1e --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-AA441F91", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/paragraph-edit/rust-split/native/read/hierarchy.xml b/corpus/paragraph-edit/rust-split/native/read/hierarchy.xml new file mode 100644 index 0000000000000000000000000000000000000000..1a1fa721e275b1ad6dba521965ab3465b036cb4b --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/hierarchy.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/paragraph-edit/rust-split/native/read/page-000.xml b/corpus/paragraph-edit/rust-split/native/read/page-000.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9668c8465aaa3402ee6ed0d137a7e9392c836dd --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-000.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-001.xml b/corpus/paragraph-edit/rust-split/native/read/page-001.xml new file mode 100644 index 0000000000000000000000000000000000000000..f17994e11b3e8151253fe9d0fb30a61ea082985c --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-001.xml @@ -0,0 +1,3 @@ + +Link label tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-002.xml b/corpus/paragraph-edit/rust-split/native/read/page-002.xml new file mode 100644 index 0000000000000000000000000000000000000000..0bf5f878baccf05bb7b1018097bb1c70a34ac26e --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-002.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-003.xml b/corpus/paragraph-edit/rust-split/native/read/page-003.xml new file mode 100644 index 0000000000000000000000000000000000000000..1edfd62909024b699557b53a4160cf85a18f90f2 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-003.xml @@ -0,0 +1,5 @@ + +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-004.xml b/corpus/paragraph-edit/rust-split/native/read/page-004.xml new file mode 100644 index 0000000000000000000000000000000000000000..2d11ba8bb4ef29fc5d176c5965c193c71c8586c1 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-004.xml @@ -0,0 +1,20 @@ + +Bold 🦀 italic é color 東京
+End
]]>
Fictitious: café, 東京, مرحبا]]>
diff --git a/corpus/paragraph-edit/rust-split/native/read/page-005.xml b/corpus/paragraph-edit/rust-split/native/read/page-005.xml new file mode 100644 index 0000000000000000000000000000000000000000..842263609e2e64c135bb2a723336f4f123605a7a --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-005.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-006.xml b/corpus/paragraph-edit/rust-split/native/read/page-006.xml new file mode 100644 index 0000000000000000000000000000000000000000..44cff92fdb875ec70dca04e86c13cac1202bf029 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-006.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-007.xml b/corpus/paragraph-edit/rust-split/native/read/page-007.xml new file mode 100644 index 0000000000000000000000000000000000000000..d0478450f77cd743ee35fa7b24a8226a1c58da3f --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-007.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-008.xml b/corpus/paragraph-edit/rust-split/native/read/page-008.xml new file mode 100644 index 0000000000000000000000000000000000000000..2404f24838a0e02484aefc92fa9fcc210be4df32 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-008.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/paragraph-edit/rust-split/native/read/page-009.xml b/corpus/paragraph-edit/rust-split/native/read/page-009.xml new file mode 100644 index 0000000000000000000000000000000000000000..03a8e82cd85b0c700a3eabe7361f012e8281f8a1 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-009.xml @@ -0,0 +1,5 @@ + +Bold]]> italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-010.xml b/corpus/paragraph-edit/rust-split/native/read/page-010.xml new file mode 100644 index 0000000000000000000000000000000000000000..f53de11177ec872120eb26097e1bbe56479b0e33 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-010.xml @@ -0,0 +1,3 @@ + + +soft break]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-011.xml b/corpus/paragraph-edit/rust-split/native/read/page-011.xml new file mode 100644 index 0000000000000000000000000000000000000000..b4669863a60eda90fcea80955dce12ca279fb445 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-011.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-012.xml b/corpus/paragraph-edit/rust-split/native/read/page-012.xml new file mode 100644 index 0000000000000000000000000000000000000000..60c49da4442fb8967b0338bb261888c5d42f6cdb --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-012.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/page-013.xml b/corpus/paragraph-edit/rust-split/native/read/page-013.xml new file mode 100644 index 0000000000000000000000000000000000000000..e5b3cb0a2c43e8e62a5d55b50f90a9841e5f625a --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/page-013.xml @@ -0,0 +1,5 @@ + +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/native/read/payloads.json b/corpus/paragraph-edit/rust-split/native/read/payloads.json new file mode 120000 index 0000000000000000000000000000000000000000..3cf45dc1acb611d7f764e0340d73e87192f81407 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/read/payloads.json @@ -0,0 +1 @@ +../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/native/run.json b/corpus/paragraph-edit/rust-split/native/run.json new file mode 100644 index 0000000000000000000000000000000000000000..75cde082d61b20c444453d6e556ac188337f6644 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/Users/clo/dev/one/evidence/m10/paragraph-rust-split-01/candidate", + "expected_pages": 14, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/paragraph-edit/rust-split/native/source.json b/corpus/paragraph-edit/rust-split/native/source.json new file mode 100644 index 0000000000000000000000000000000000000000..8c94d98a7932d0c052fdab6a0838b23b034786b3 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "synthetic.one", + "bytes": 110224, + "sha256": "c07cf1d31c658534b7cd3c6f77dd48dd52a1b9be4ef037b3d016b24336a4c3f4", + "mtime_ns": 1788857461138239881 + } +] diff --git a/corpus/paragraph-edit/rust-split/native/teardown.json b/corpus/paragraph-edit/rust-split/native/teardown.json new file mode 120000 index 0000000000000000000000000000000000000000..b0d2ee26322df655cbbf9e42f6c30b72a4d110a5 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/native/teardown.json @@ -0,0 +1 @@ +../../joined/teardown.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/environment.json b/corpus/paragraph-edit/rust-split/typed/before-read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..85febdc32b4c62e1097a8a3e8093d4a8a867ece6 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-02D586B5", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/hierarchy.xml b/corpus/paragraph-edit/rust-split/typed/before-read/hierarchy.xml new file mode 100644 index 0000000000000000000000000000000000000000..d06f27e3d2490f6ba635ca49f278b8e75251af56 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/hierarchy.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-000.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-000.xml new file mode 100644 index 0000000000000000000000000000000000000000..1f527e736cdfc381990e9305fa39195e5aeee6e6 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-000.xml @@ -0,0 +1,5 @@ + +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-001.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-001.xml new file mode 100644 index 0000000000000000000000000000000000000000..ee57a8f384bdb5c38bcf79afa057bb436b2c6334 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-001.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-002.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-002.xml new file mode 100644 index 0000000000000000000000000000000000000000..19fdd7bc8f33e638e160766c0d86c187e88aa070 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-002.xml @@ -0,0 +1,3 @@ + +Link label tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-003.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-003.xml new file mode 100644 index 0000000000000000000000000000000000000000..ecafe255e8a8c3b04adcade2b7a0556a6720c734 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-003.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-004.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-004.xml new file mode 100644 index 0000000000000000000000000000000000000000..9e064f0a16b64644a69d3776f3ed051dce651d62 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-004.xml @@ -0,0 +1,20 @@ + +Bold 🦀 italic é color 東京
+End
]]>
Fictitious: café, 東京, مرحبا]]>
diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-005.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-005.xml new file mode 100644 index 0000000000000000000000000000000000000000..5243351b67b5be8d005d15c516caa5bc0faefc7c --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-005.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-006.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-006.xml new file mode 100644 index 0000000000000000000000000000000000000000..4ef49e6e614a744a497f4e378556c0889ad34627 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-006.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-007.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-007.xml new file mode 100644 index 0000000000000000000000000000000000000000..377b10aa1567c2c493d94c393b4f2ec75e698665 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-007.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-008.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-008.xml new file mode 100644 index 0000000000000000000000000000000000000000..99aa56a3aa5af936111fb180369103a8ffcf4b0e --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-008.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-009.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-009.xml new file mode 100644 index 0000000000000000000000000000000000000000..997b60af44673400616150639a200ba051b04221 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-009.xml @@ -0,0 +1,5 @@ + +Bold]]> italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-010.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-010.xml new file mode 100644 index 0000000000000000000000000000000000000000..526b4eabee04951b37345a30b8271320d99c1137 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-010.xml @@ -0,0 +1,3 @@ + + +soft break]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-011.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-011.xml new file mode 100644 index 0000000000000000000000000000000000000000..d0479a4a7ba278852ec7bd0f477b32558f531b28 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-011.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-012.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-012.xml new file mode 100644 index 0000000000000000000000000000000000000000..6971a83b841b68f68153e456bc9f364da7ee1f8d --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-012.xml @@ -0,0 +1,6 @@ + +Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/page-013.xml b/corpus/paragraph-edit/rust-split/typed/before-read/page-013.xml new file mode 100644 index 0000000000000000000000000000000000000000..59689f1af558b09919de7f39bf4cd5c7fef83341 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/page-013.xml @@ -0,0 +1,5 @@ + +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/before-read/payloads.json b/corpus/paragraph-edit/rust-split/typed/before-read/payloads.json new file mode 120000 index 0000000000000000000000000000000000000000..3cf45dc1acb611d7f764e0340d73e87192f81407 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/before-read/payloads.json @@ -0,0 +1 @@ +../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/notebook/Open Notebook.onetoc2 b/corpus/paragraph-edit/rust-split/typed/notebook/Open Notebook.onetoc2 new file mode 120000 index 0000000000000000000000000000000000000000..a36d6b55613d6521df68617616a6bc584ff3bf48 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/notebook/Open Notebook.onetoc2 @@ -0,0 +1 @@ +../../native/notebook/Open Notebook.onetoc2 \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/notebook/synthetic.one b/corpus/paragraph-edit/rust-split/typed/notebook/synthetic.one new file mode 100644 index 0000000000000000000000000000000000000000..a76c576ffb1abf83c1ac548f076b71077274db13 GIT binary patch literal 119912 zcmeHQ2S60Z*I#-s3P=&8oeEY|6e|LPU_&gicg0>%Q0$%^dx-^&y|>t7@3FwCt3#;@G{ zgN<|<#CZJ&3_i)u^HI8S+WbnT@=6fgBG`A2g2-IE1~R~F8K zPmkj)8r|#@^3!VXkh;IVx$c`MtWsH(7;8*dbIEVq!_gJxz~Q#zc>`Qhoa=AB&ks2; zBWiE&MLoGUaZRR*(FOB`72a6bIDFTV^;TO}-g%XhLE%TjmW6hk{WV@8i9Sfrf&V-Q z4*v7%#fJV3me`9eG4IMvR~x8$ovage?#Q~@JDPcQfADCg5uPC9R%*3UII?UuRQ(g| z(#|z{k9DOANgtgrjB`g8L^)Zh+D7<%aQ-RS(5Ck+;|dY*Z#=&tKnQliSR^ zn}zSdWZzI0_1;cZ>Yi&q3-e2ybNxkmMtC=B#iAPKR$2HBnOf1gyHU`VR?8YpO7vw> z0ZytD2QS?j7jw?I%&9}$emVEyAd4F8tg2b5O#cJ%dn_$V{O@I<$=h47s0Xg9s|OEM zbc_APtoVSSX6@VleT+pla#!7XQEb}Tk9X{R&n5VenVz_tMV-y3`WUiyiTaum=hwjb zl7F+jQ&?0vZ`HU>bK}c}4YVv!H@a?f?-^xT)Iwj?!`mgpTedK^^fte@X#arUAF`;x z0;>21w=T6<;%MRTme}EEpW?18YP6qfM4kP;#w0f}D-b*CYV=>zmLp2<^c=_p2Lz2N z=*${BN)7wj>A*Pl++#R}J)Y%?dqeWM$RiBibb2KR+#@`<7>4j`w_2CRy%~82@=(K?mYp$y<^~xXPmIN;kT~;r`X)-;d)Szu}*6 zKGhlbpa=JDez|iM_l({N7d=c-589TOJgfh7SCcO8bdP#aFL;9dzwWF*8u?+q;NB~6 z(h=O7i1(orj|bu2RJ@;4ceESIM_WC}v-T|974$qG-6Nf+c=Zym-s06qy!wh)m3Ylh zSMaX@c^mQt$y<>36R)T*fIR3c`oF(wfqwAZpL`g3gg-fCa0Rv=euE~~o{*V|j}Q)i z6()~(_~g6$T+uF!58R(JELauyY@GBvz3L$DK?mYX_dY)b_pF~9T&*z-_pHB1wmuSr zdp4eWwV&&Z`Y=9Hi3r5?I!F6_RIlDW2?8$o# zV}i#0yIx(Z`9Bq}3B{otwGlVWgL51g$T{wD=N$bg2!8B}JM@?F+kt+=ZKm<4#2z1N zjf&!sM$QdCiW^UHOX{|)@~qmj2=(OeCSI$%zBx!(63$IHWnc`3l>o~O5OCDM6kIaH z6KSxGa?{Nh;H2Hp_)Tq4TN2$yDLnUb=TzzOU0^)^rg-{c%(eC4im-kQ3*=OYMLFZj zAAR@F{GPQo4mxnU@;{|k#7uA60{w@0-lr3=M#-LD2nGpYu!~K7Z z+K~TnjXR544nc0#)2u|KW&I6Z3Wxr#yJBzh&;=0&{?`gR>`RDAMqX)uANsJqs%zhv z=&{9H);sxZ&p#LkNF$$tARH7KTm5t7iSto2{mu9T`Gd+K zG3*UhN-P?oBr)DTYCnxV`8#J7ZLui6p_OZ&+5T%bb#mi*rXURvF4SaTta2N8$Mej0 z^X;7TjQD3uz=Pw6RICZIiPcmyOf~PabsJm%$BV+t%yGDgOiHzDYPxQss`H{sAJ>w> zhQSwV?64m2%1o!4LK}ImvkO^blDkrVSKB}R4kMFN?V6fmEmcJ)`nVZcPUXys)>*uF zzb`*kRcuq|3fniLO;o7f={b1(|oOe(&G>2FL1EW zl=y=HTkLToO$>6CmK>gl?Bg*P^lp?6PAZ^ z+*$hwzc~M=k!y z5jzc-1RTc6i+2xhwN`z{8Ro8#c=%S|HlRW}P7ZFVR4`ysKhv`F=WdO;IrWZ;@*s`2 z@iS<{7AKDbGb7Z#aew_%tw9vhV*FGvvV^^^vAfC}834lwCk_Y(d}$*Suq`OX5K|fD z0=KMkWQ1iThd?(ZM}(0|iA9Q%Bj#DFA0Zv&JY%yrr8w!VPo59_!PtRRX-4HLNfpr9 ze4nyRRO%;$L56lORA}C$||tm;1Lw|mH>R6D|jnkJa4u59@EtaFn)R*p-f z`>o5hv<6?(0?BL|!U*opl^MBnBQ_WPF|fxkR4f&#NTzps4y5A1nF!(5iv|+Yvlu)n zo_^%a{2HiaRjw1)mP??&@IAQRq%FL-IIb(#n(n*P?*uNE>q~!;8Z&xb=HhIg37i}b z@?B}_CzbD?IuB=dL*ToIamFS5qBf1Ho9}Uh5?#SZ$o=O=cKE50`}d3_^X;6&X_VwU z(UFcm&AEOd2B?8LIPx|Ku%1t`L+r?ou_s@V?2;a2lYqTc!6(=y$bIs}iQvq0fUg?Q zjM|F+SfsQsH{nVS?wqv|`MhLDxs!J!??j%_473Q^jT~$zav^jjPbI~K&YtDUw+M96 zBdWHcP)N_gcdvxlz6r%p9P=po>u^k7;C&3-fo9wU zGZWK^z5Q4Btyt%_>Bnd*?%CaY2(~e?HLJR`tpD82;lGEOb>E!$_AG+)nwXeBS@1A+ zeDk|y&4vVZ40KqD;9jPdd9S_n*%g1$Z12mBPf7>&9Esq8re-G>p75*G>GJLE;~p)^ zlWYG21P?d0v}m-t-;DV~+yB{Nsh>Ka{vZU8v@+{#Q{(mI$MbfN4{f#WpZwK%0_$3v z&USA*|CZ(a#l$Tw|;l!;3?kj2<~HTI`nA%y`5}cEe|kk8MJxf zq%H_f@UduCpk3tH?QXsQ*!kee5WmrH5L~m6Y2xl)d7E4w-}CPXiwldZgylzY-9n~| z`>ZZ-xWX4&*!swCO{0 zE>Awrd{rQ4?nu`PBnu5ZIBNsCHz99I-a-`8JdJ8wt_jIbW10_}kT)f7O?fOy-dmAe zEk^Hyijxl@Z$@!86lXzKbMh!APG~4u=NwmsY@M!T?X=-~(O+TJfDkSI{YY1}A&2=l z=HbYXS#;{THPSLU#-J0}JxWs*sof)=Yq5E4)Qs~+T}{mGO8#Q3x?8RLAZFj>T{H5b zd*8(9q_Pp#32j|kK^q(#!An4>B?BxLFqF$eBp}HN9aIYm4CFEt2}t5XK?w=uvKJ;) zTVpF|JzLUy2K*a}X2xbvw>Er$Y^LK?2pl0t>|%DUls}Y@x65LTtznW_rxY4!?9OJ} zLM{1??KCs?oHNvTV)cLY9ME$hJ2;>u=kd&^c>0ku^V+ghi_*NdJm*Do-PT-t?jEi1 z@#1=RSQCwFglP%WqNaYP1?h#ot}|SLLrk7wofaJAz0!+Esl3mwdG7jAb&bpYKBU?d z=fXWpw3u^_*vZS&lO~Yzl6meylP`3h`}z8b81kQ(_kIdTF#ga^C}c~W=D)ki7K#(+ z?b_$S|6AWCWJ{~#c$>h_%~6kZ9-NzCbM5nBl&_fw)7m(G9_&DQ9LeMAMBY5roY;qK zxZL?t&x=uxh4H8G2Q~%PJ)otSU&D&Sg985*JGB)@Hgb|^TPMM`hMmmpYuL+D8{0Fw zA7?vQljJEYN|xqim__dSsS&qrbfgkmMbcyI9W( z2f3>R)Jx^Au68!;ZyJ)^^2V1Nu6__@Ws$dCk6E?O&S&=b@(rV3RWBbGwyV<7)4T1@ z^QhNBvYrV%z>pTKXE}_31Oz%@yz>bRF} zJcMwMB;X&AsoF6QCRed90B&jWixh zi(l^2*R%GtD%0*pznB~DM{$QXb4f|%5X*7U*~lY^HTtp2EwbXsse8PCD7$L?%_U}a zw+V}awY9@6RXZ5o1D(TTI_b3sxD9*?F5`(Ca%k7dx267hcfU>Kh+d0-J6gvuT;49P znT5=122HB5@$&u1(XKV7uy)0i7s`mDOR9GH{kWxK%h^Y|Eot-fi(g= zNdh*dTmN_oB=GHsd=}ie%o(p*6At(-dwS+getA0*`s9zV-s4r(HG|s?pFgv}ebx@Y z3PK@i`lnCBO2^B$NZ#_@RoC5n*IZhjsdm8DAS^CPw|00-+A*#1m7dA*9ct|K`YxgD zpjevn+NjnPX-8ay?R{4maldEydBB)*HpO@RjbORdFAalyuI$o+Oe&o zmi};gP%Px)WwR5x+jM<9U_o5jOtmB9=fv8lEbV_5>SoWsucSTYw{N~P;QHl|9W7qZ zv$fxRLf)RGyQ@4hEL)}O%E%{{5BDVou=c1c35A5v1$k1Q|9PudmFm8BZ{SShCBM!c z0&^Q{u9)^s z58{0x-WxW1bfzJE%7S>c0SAoPg>u#&=XwA7)zU%h9 zVc!-UwIJW7iZvLa>eL z_m?&HG=8!9QPU0k7tMT6!q3kl*Ig0>VE%NZB}M?xC(hkzs5a1k^) zX-B!SR?5N{Z2|*OBX&%glgCsByQ{GA1v61+^5|#0^%UM1u;;G;g}|Yo#@@3jH9EFI z)!kc63ZH&^a0)dym0Xnf6ZA6D$mJ!%F(&2X9^u3?PA-=ajuy!EJHpW_`E!qObe>$_ zAl!_?mGmjbQ(Oo|k~>2l^a-;Y`jO7_MX^+uwtXYmotBk8)E)gJ{^k&##LEJrpDLiI z1D*?k&)oV>~)5t{8cj?lp5(x)BEr{Zf(_RG->_27Bf(GV}>3 z)g2>ae1jN-!*g76d+=}72R^U9r>lR@5r0g`o85c^Kk*#P-bE85mYr&!FXlw+w`hmb%1VUOD$2>+4!Gk|xWR zq`t9t&x*V?c^mS!7iGw;u`t~Kn5 zE?w4#^7PZAt?8+d6;C(Ke*gUVfSU(vwCq$_xBa8AtLpJ z5ro`{EVOoHx5ZKnX!Q=*v+T_r>!>Ada#uNXaqz#O2QnL;)kHr9I>}t)=_Qj*JH1_> z^t+Y!?@QH3g#El>Tfx6CdJV|kT333pU_wf7JW<_`r`C(sreJL@EX>wqbM~W@pnv!4 zqU}4a?Haz+>hH5RANCwArJvPI$ppG-(-%)a33KiA_Xw%m?`p9%k>9uPzGCh0wbgE3 zET}X6uw~`+gW3cN2esoG7cOTw*e!hFhXuKuZ@;@GrIyu0$;k0^(xz?xN@`a-y+e~{ zj_aSNUX`8I{eHF?8Cg4ERA-&(g+7lH9scHKu$+5j2L@sK(cX{Iq$0tZBW;LbIOA{)dUJ`@a>D_s1&z#`s z^);vTI_&G`{@%dL?1awr%K3{qcPD-ZDDZdwRQnR0j~az8w|Qf<=DAf}DYdK~p1lH{ zWUTV^l3l8u-uq)hu0O6@C}hI5gZ*QDta9Hxe_LmI<@{|!lA$XvCm4UL*}84Da9AF( z@s;Cb=YSzMq!hE7Qus>;rttLAayISsUf=NicA4l|VUwbKs$2-2SX14_x{a=KO-^rj zqPH7Kv{)X^z|&?_zv4BEYQNWzyK|}4EOX+1brO->0NuFNw^ynS7rp~g;bH~=$ z{L7jF4Rdwu7IM^EXL{vw0ki)OR6Qu2GxU1vmE+q+B=zYz(AwYsxs*~?he#hyl6g95 zQmmb?7uJRCm=)F|a`|olj+1X(yTQ#Ur!$?f%BAwFEpZg%K%jKk?}zP{8=S4Rx0~Pc zWPg(qQc9(@U_QjtNt1o;bS6Aw)ur^yKDnH7Ny}vFz^~TVV z`D$2IUTfg_`^M${5svv`*oFa=sbi2Gq_NC)RwcqSk{_$ zc=5=38^XRrIN$>LDSQYAZuiKzb3V6v1tXGs+!9jacm)pGpmu;U1abdsM~h;Z!bH}v1o)FQY{*n*JWJ6f1@OF}rLg#7SBgadsH ztUmDFh6?W@_V&9zY1ytkD-jNDC_hIL;bg9Jbw`f9>OA~R$d1<0E4pm(JcV#bclnWw z2nV9MXi3$9ZR@u)cfRg;Z`63dM1<4yg;QDsN7EU_GgoMOrFiCwCxvS}b7ipo^A{Da zTGUwfwq%WQZ@H@&Ls;_Az*4pctd^yPu>Odhxl-BE76MVTORS8g1(tPaPGu=%X>CBy zg(ii!r3L17niNiyf}R9T3TsOX%>FbfK3doq(0JCQcxhpQIie=TJxW0%Sd-$Wg#~7k zniRiM3L3MT6vr$qFyGXq*i9*Dlxk9Jwy?mgRFh&krJ!-CNiomD0&`bQim4XX1~d{i zDaKe>V1}znF_6ljv8PE9Z()IXuqH)23p)cEZJHEKEhH-v(J#?d28}OGiU>+U14vUw zX$yNyd^IVGPzo9vniTmgY%OU_q&Y1|Y2MD{3tOU&b1>v%7-I(KV3e~`(XX%9rN^Jb zVzY4$h7x}ejXm4}!!C5HHszeT)#Il}V;*1T=g~?WgPsv~R=2iN{d4_Fn|llC4bhyU z!D~A^{04@PP&#!eJI=v4SY*N&lh{A4oRS;Y*|5y#ASzRG0)Bmek}ExQTaZ~&Ghbmm-|^-GYWlQFRp8+ z1g~zL+O_K%3;r=r4CM7PbaVccGL`moZlv;9nJ8CyUrXhvy(yoq;(A-`HGM<*Sl%i0 z`yqvWq$}I+$(KbXK&u;<-t&MiBHD^qspJiW{il;dD29L4fh*$!bZq+jNd+FDeKEaa z<70dEiEZZ<->FU4PTe~&Cg3VMDL(=!O#8ZCl&j$b*@Jw)6s0_%36?Xi#mT4cC#AK$ z0*%O{d25&YovZL3R(SJ@*%)T$!Yl`a16C@mJy=rs%^D`GQ%2k2@hqm_o*gOu3jP8E z3?Q%DUShO?a;4Lcn!Uta2=y#^p&tv<6}G2lPj*X>?Ae#i_YajUbTHl}!lQQW?-OCY z_96ZPwd+ls2A{#>2IP?+Zxw}~+TXv*=lfa5U5TT-or)A8UK=QAZ%H%|e;*!n04= z_~#IIbo%uDlreoMpnmVz_;#)P74fPU8K$Rc4-W@_73G#7v(S&2M?uO7@`~-jXXQO3x#&gv z=20#s;+-|Mk2%!EkK_=@b8;d4Q%-*}I=9Fo&3bhuJ(Hqk)D|4pe(AgymC{SoYFi7R zJ5YFnSWki3;i=PQPu%?^Yg7>N1NB&NodS5H3 zRFVNgPG&bl&cgw>@XUX>aW}u6=9LOp4Qmm3;yqd@wQHWl+`I9hOH(_Q(SU?!Yhw&C z2Sgfe_Ri48kB5(~T(!!!ka3$5UR}L_w3s8%3MDi=91k78`Lw3B?3ku1))o+?MM%sW z7#tkIZ)nAX#jh(ek#A^40@`K|)xfV(vXpPQN2R5$ZNWF;U3n_2kRyf*j>MxJw}9OY zx^ZsPKx>r}ixe&0oe9S(;cO;3&wz2DJf%2jK0F;tabOsvH#@gU$qGifIJZg3hDV&d zpAaVF1cm6Go&(<&2RgRKlfZFabdf**kdKIk2q|K10aYt3lSDv1Yg_1UVVxVK5S;-6 zBZ3!GhVs)uki*H^LeSJ~-@T=^70edRM*R0yHjo1vc;tUp&QO#%vQF4Uf7!|gmZl)d zQ0O@;GnlvXk~?&iKglEtn6S~Xc{)d%G^6umho1W`BSo>RyxoH zGf06f`Oz-=0|tmSdY2&w(!9aS3mHBdFi|xszkuFwBZFgffMcr?m#tzT45|H&$snBA={ym zb2y;}_r!S198QRS#B5D_KYo6kkc};jFKWBO}f4!`_?<6Uoyt!lyE}6 z)^VLf6H9YthN}-WIX!SKo))Q|{bR)DmcjYvTDp!Y=oY;5VOT~u*Sg(J-o4L%s@k;H zWBWEwaOjKjpnosf%5bh$ANC(T$gQCN-R>e zyco_U=b04elE+DLE_s|B=TfrDKqqi6C7Tj)aytoOQhSYV^-j-$Z;k_(_!q^TBF+W* zi01@yYm==E=UQr;S)6N*tqkXyVk^VBhS^Gvf<&!dY-KoC3tJh^)zDUkbA{V}fjCzs zTN%z((pH9Z`P#~GuDrG~oXg(UN{@4WbI)f^H#j{Ur=(apa4z{8Q^*D2T;BGooF?)A zwfyw>Q%a-^IF}NC5DlEGcIfZT-uV_ab{KeI|Mh8&K7e;hPMG<_+Nx%+8rtzU%SGdA zS~=PGyi>L3oC?UKXl-Q&&Xs&@>Fq5}V~xvP3oX=nnL%Ls6iV%;ZDYljNbE-nQH!DJ z;#@%b;ec}~HCJkX%k4LYb8VjVKfm)WZ9><-d0M0TftK?@IW$LAdl}9ZVgFU*T(F-R z&eghC0@%QOs`W5m0>0IQh*O>y>hUc-zNPDT(%AP&{=e`o`MyHnTUpx=s~cXV$FtIY zhXrfb*!sO3$Fm@{w8$->QUdO$+d8hS+RN~) z2lg^N>$<&c-PRF%8J@MnUWR9FvX|jm3+%r@JZqM{49}WqFT=Bj*vs&&M0**Y)y-bN zZVMw-@3NBv>EShH#EO7t$@f@8E&$JZn_HEg@9-)bzY&gl@jGsC)I5Zvz7X=LFOKi%tLn+*|`i@Q*)*HWJ z3x<(L9{5XrMnvEq^;8kV5PqR)Z&Tq#%Ms7&>u+k3ANQ=j4r_+Z zt4jAM3t_M`@%yJ+kES3T^+k$d2oK$5I}!J&FN!?st41E99PtAy%s7sCR^Q6WA3EZm z)mN|1>52G_`Av25$OAv*h=C36QC|%)4B?(#mnPMstB)9tdTWwLy@-Eq@6`(FS$$2~ zy?Tv%R-f_J0zuJYT7+TC2lDxj^bJ5b>Z>h=A^dEC_BCNovvghZ_xTm^s5gc@>a9Z_ z^dSAdi|q~~p4A`V+;|`ES^YIarYsK1^VhVVU8qiWZuE9&`< zydQbQBR}FRdB*m|J*%(lFegjgv-&PqE>#)3a*!5bEL}Crr}q(#`Wli)Jp8JBw@cz4 zUvI>-a<)%;(ggRczH*J`v~CoElE~2<369N=f`nUs-KLU!L^SYh zhv8H0!b0LqyvGfz=5#OkrC6GnTXPYL$85{jLDg|W%=``&?irX(T4=SoArI&40F`J&hOLqbqhQ|`?7amcWOSE5+8C?9Yx9KC0|Uu z7N={*`?>`hk>~$!Uw7*EkgU|N*Ua+1Zj5E=ddWjr`z z`o8*gnbbq%V8oIOp(}au9EvXk$HqJZ4tg}IU9O#TqxzYtt`%~*)Xxncs7-}qFZO+P zW$}Szvtp|QTbF3Rd|F00_NcZiIyQAGU1jfI20f?cn`nmepkJ*VWjMB}qYTG>?~v^{ z_7exKIJSBzI6zKfhe+)-&<)GV+EJy%B1OxJ;n;GXNpWm>9Of6WL9zc>9w*1Km8>q% z2^?F=W<;Fa4nmmJ9-~{m({tdP<3K=fJPDlQx=hGN#6oWU&q0P`UvkJSj(yrehGQRe zkm1>PBX$~?RdxC=u$L{a&1>)H84l*3Oqk{~`ZtNh#vFkXta7vTXlFs&J-{rp0@$Bitd2Adj@40cWO#>Im38}s-F{G;1=yNB{E&f^d zcH@iCNg3fyZ*KitKa>j(8F{wEhn9ImE1^8-!Nz%HcvJm6GQ6oqo^?zOotRC5^JMkg5*e5pH_5+!1GxaaX_2#vPxH0@Nsm9`t5hCuQsNJI0=y}7 zXuFfM%sQKuFrIfSxU1VELE@(67@1(?U~L_9R&{+nvXl~^f(tXDOy|E zfj3>V??1}&{Rk`0JE6jFp;33zr%;MFH9Eo*oyvZs5VaVZF5VO(CW8H~)Lg0kEw|s; zx+#kRv-XV*e^7Prte+2@+VSshP!4@{#94+n9d`bz@g}U(6!50F*1cl8r`iZC#XI!t zrc&cSc&DZ-{_~}-n*!dzaIo~h8zSHfSR<-gU)Hu`r>?12+DXStU?%uO@+)P1UI67Q zLSCRpex@S63E)XS6$X(abkH8)Y}mJx6`ZXH<&&>-`F76V!)#f)o-6C$Y1IwKQre#^ zj59sXhVP4{8siw5JU;j>;cTINs|B3xQ2ZFHE5@F-`G4u~Q)I3Ahw;!$^}NIVR%OG_ zC!3W1?evU3b2@uxgtNIOooU|v)TM~6M@l+ZnenUv)BlHEWH{S?7a7jB%_SY2%`_vN z&06WZ602Oa;%tqMi%cLP$<~)MoDFs)=!WHY#6_jVB1OyZ;?(B01kR>p(;`l8ry)#gFVd~v={fMtaUg0Ko&;r_EtJ9$i+RgJ7a7j>y-Q|s zwy`cUoNb7U3}@@*BE#95y2x<0XcrmI7U5z6lS~7W1-r-2F|uV+IQkl_g|T-e5;uCJ5>5-LE@(61({&v zU~L7tsjjqo(IKCDuc_Z5L%SCP8XiR^MQbZNaJEUEn{2<;c%H3~Q}DFh52N|F%ser& zKLUkPyJ_DQF^R-}q!6_jnl8>3E+zubrqo=i{VliO7|v$7*?Upv1@ToTguc7F&+*C= zrmq6sWH?(Xx33y!)2!=CA2;~|aJGN$KA?_Q-0w3v1VaLtAzWthqpa*t%nZ(!S$eR? zS%YV##XlKthnIR-Qd3I2!d&@M_B)m!T6D!BNd%T$LR z8d-4A^B;=j8uzN$RL<&SQ`P+K8~N|8O7;BVqQ-;7CZyaW>eIpc|H7 zU|y9Hixe%t-EJ!j180--Op3F~Ub)F|wuf#qob8623}-v)Cd1iwy2)_1jcziW zZM7S}o=pQ-CA&GmSk&Nb^g&lxvch*ywS3SOCa;h{%LiRy8w&|C`k<>KlsD1M5>}`N zMH}rV!`TM9$#AxAZZe!L)=h@9HFeYDY{XQ(%LE6~!;x@K8XR!8J1>e&JNxmDo$t8> z|1r}O`E^6U*#^3+ghXHI-}Lx{^WWfrvnlZhalqOBHW-?B(K8CPija>meX{)ok6iS~x6^*!aqEvU9+Y8(=y^@@}5Lor2`)aXdYa zM?-@gjRbNuPC~?YEFl;(IEB)X!@Ac2fm|RT!l$D@YW!g9!EjD59PEhxr50Z+LUaEj-kK|UfD za%;4Q49Dx|ky#us&O?Ud#d^qayha`}952*EhT{c#$Z)(u9+of>G_akghZStR++>|| z2B6%uK8tCteyA0Sn=Pm>Gj=JlCJz|;O zY3D$CI8}8q8*sdjA#0bYuNiTE4V*9eH_JN(asfEri+n2Wg?|Mx>G7wA*goKRO8h}I zaJ&PzpGSEA5NMa5JO4CnrN=En;-+PeFnfiy<>9GXQ*ETT`up>?#c$^~I@-O~@5rQR zZDj|J*DCkner^5DE&bhQem~rI^5FC-l-f;4g(Kfn*^fl2T5O#rlNiiu!YYY zf6MJRhU4{^cil99^sbs4svq6@ymzZ#Ksltoo2LxNbM^d6alAeJ+1?r)uY2!qZDM9-;)o5hE5nzUuR8{Evs$B_F zYr`XJgmDQ12~)!q9IXhY1D2+|-xPCh;Ag4$hGED%hM(cJY8LP_#c}iPtb>!|XWa=u z>qdPA1XRG!jOtgsW>M|;nv+(HX)tK0eRD9L;b-bD)@|5IxUA!6!Wbr8m3P^5u3M_H z!k4QXeM;xL$>__`bKR8bcA^#lp|;`rdvK1xlylQF=s;Mu5qWod20=GR9^clzE`DE^ zouP;_foVCC7au-FIVr3u2A^!j)WY-VNaZ_`XXQPk-=G2IQbOKk-??tJ#1f&uKkhB{ z{I6?&8~V&1FzL9W@cf8+Df)KZAXUSXgvU zUMeLPDOz;XN-wAj{7lX>DSjr8v!Z%1a+LDP@iQfB4|D=QQ?gYNC%3;4Cba|UR`2v2 z_~tlpX(pZoW&8~C5wVb4PdsJ#*)7k^;%ApUW%$`iPZ@r;&r^nqyQO+@eu<&2cJw083}gB7Vk$J%)Eu%8AUtLG_0 z$7*=W(6LZYJvv4_)VojNKzjI4v{*3kvvHf|#+M5lXj!0cblv9OGs;3P06%N)t@@Pe zzxcfA@u#*(J@7Ln{vaCo*^_=34pjSLh*ka~Z&g09jJ$pS_ zU#pu@p~OKYTfGaJh)jysR(9ZL`>+0K*)wvLp~}iNYJAaF-O{H}YB!lXiD@PFBT=dr zTbC|=79%Et{jJnosr@at-xz-O@y(y>eV;6=y{Fa8#w&ij#ecaJ`f8ZB3_ly{{Z->< zn(tvIw3e^^`oi!tq1P4Xg_A=NDXxXUd_c$Z%7l4yPUB~0B0Wm$;9zqIm=OE6fDg@^ zbLXSEGks%VOduD+=ClH>*^8s)GUvjLxg`3kL3cVuzX$oaK+b;Y*5De?4+YmSNI_D; z-PGsW0T0s^KSX~3kI~~_U5N{j*7yQ5F{Sd!6DNd2P}Qc~-_-8`H4t*LMuB^m_7M9L$9}9IlgT~QlFj!t^NI6vmt$ z_rf`A-~~K;@gwYO{}ymB8a8SZEu8tl#Zs&*y|K8nUz7tMKpVqCDvJcpn*l*4;;jpT+uQJAT&CM=O42 z?h4AtN$elSAJ~V8g+({WN2SCfMT?H%XL6oN@iTdx6hD*4$?-EKYY%h+KU1<*5hu65 z5GJ()=~nOb9Qfuquznt%1ZDgT@)5C+ThTr;{4B&Lv-nw%j|@L6;v>V)ynJNe;k59P z;b-r>W%$_(Z`pSdu6nz|CKQ0EgM?)z_*lTWtwN9*XV9!byU4NI-FpAA^TCrLexu(Y z0qrX-P6^W8R|<1C-F>C7sdd{|s)(mu@Rs3e$Gl~D+D>m7p0>$bhNrFc*5hf^3woCs z4y1<<)fEc@e)jNo$?%pfj4i#*?=9Lt;P;1+3&76~`KmHg-G44^di<#;wg&i_5`Pd4 z{On-)!-d_KO*P9uJJ*vpag+865;rX?Fe4MJtw+A9C*GB6n$2{vtS~?9ZJYYO0m!6i zZDj|3=Ji9H+t>2$F*a*H?bg3H0&k^Hq10|#;4h|?*pEc1nmk;(_*s1+jqn{#h2~1_ zZ@K-(@Uyv17kT>iSzdE$i@m3RY#w+S)IeX|_m$yi_k6!<{0z3Wu#dEDY}c;f0`sZy z68-wK)cgn|PGtr^!fP?$7s7fEhLt7L98~%(P64mL+7QioZRz(5zCooc9n`aG%{g=O zH7-+VO$)xqiT>x;u^8`qKtE-8C52FZ0zN4{Ck}1Hn!Jq9ixb+Iy*MCfPTfBx={_@j z0X;(c4Eb_T>D)ln51gtnU9tY(Fl8MP`^G8%WT^{LoPd`$B#f*P`4%2rQhN{1eGqwu zm4XJ=7gQ?c;7eZ+vM2IsWds=VD30b)rJ&U9_osVZ+Yh>dx&g||!umeSMJ~-ai3y!O z%N3y^^q;)IpMrF?A@7*NpOzk+>MD)BiR5e2x~E#?qsiAMZ$RFV{5eC9@>*<{1V23nrene?OaIAgyo?ex0XClC*r8F>R@1yeF*mH#lt>WMVWbg zGY{pF;+t&=Ji`810pT3>`(eA~24`#S?dG>U+24de7mOjC+>CNO!U_KC@y(KDgq}-1 zj=^1FOv=BJf;FpHi)T&G&$o?lGTiMu;uRcl$BvmJu#lz4Dt{ad&1%42x{z|M#&s%TONdCA<7GT+%YX43{*> zpAIgW;ddl#mDctBtcJ=#eu`&wOkxLX6U z(ZD6+8{E3oVu_=LzguF5pM8q+Z!>{QHY%X{T3N%lD?R?OttP-FmH2}KfJ;uV@O{v+ z&RZ<d}lk}(Hg znizfzx2ss>;?Vq2GkMgRCr0*1pipWzm8~eYMq)owCbgJRo!-9KMq(n^-%8Du+TU{f zjp33@ezX|Uv`LGol}kE&Kl4(;d8V%h6_DYQ0}FiBxFlxg0xlWfqkV!`n_jW4yMPzW zgVkTy`o0|ao`isvWo3OI)~aO&|H%wKiSy*bdUS1Pqor%4{epL@nV|#N2;PZi0f+j= z_nG<-*Q7X9Je{@Io^UNMeqV4bEoSOMDezqV_QGXB*}~02HU{s!b8AueBY375Cbd3a z1O0x}gjj6F_X;SR9p|;-8HWG%*4;7Or7?{!IOxS=?bN^3o&CYmIktA<#=+-#v_`5I z7yjUq_s=awuy)ad)(K|7gF~4h5P=-r2FDS#M z>K9B0mom=Me$%Q2wc=7`LqHihiCw|?1G@{cu$0;sR4K7Y(Ne1DF#aI+jmmi@#iitN zQd~+NCftSHb4TuR9XM4a5NL73FOqFcSwbKslfK-`ab5;(>4+8`eh3%OOPpbVEP zUNEz`RDpsrTqfAPawVERJPS1h=Zw{n~yEGAr11>e9&i-CwlAD+nh#hq``mbrrAs2v474}#C ze>WjV>sR6r<|^>u5BR|IqJY7Irs8jelLX_#hqk>G3Ht?WXOM21wdWw*W3Gz(rjr*g zMn1$hBX3T=Ie9Pgh;Mf8LNwx8`ZF^|Zo)n4NBn_%PnNf!E3JLuT9SwSY$aX`(-mjO zAl=L^vHM!n73tcLhb`8YJkn#eFiV&JqSvqO=-z^SEO~44?a9+#JO2BNEZzLBEB0fz z6w2#J9_4fruR(NW>F&S!X<%nDyo-3n8U*C4K%S-B(%VhdO^oj@UVG3L>9AaarQ78< ze^8tl-jlANuNQgLUxhqNSIqO-y?8M^fv!l`n>@;kB+t?`XRaJ6_H zN>}8A-ObW{+;sFKUT9!T&@l4AL(rckcCR>wam2aoSc!Up%pfw75mn9Cc`4OH&IN;Js@)2>srFS_0xclNlZ*%96x$D;c+vp(pujGvR zK+Lx4`K!jSdoZGA?Jl+^PvhH<2;F)GnG|PR*?~(pXl))E*KRada`BXk+q#T8mOh2j zdDG2$Vp<}eomWJZs`;kSH9cIqnV1OkZ>8o+=il=A8^fii?C4;$a9zL1;l=0P+fd_f zB~SxqotfGaGTzCi+*j3HB`W7`UiZPjBx!WwvR)&>-2Lf(`-JNZ>iZ?0Q1f9U?m26_f$?ZIZ>7AYf-#Q1Ba47ctLq6g; zf!r!kNQTq96v`}4Z&yf$(;F9(;q)*3?H~sC+OM{$A7cPsf7<1$4E%X> z)0^UX+nicOaY%EgV(7~Q|7@$d%EV!qSO00x{OmdPq0L;%#0Zvy0-oshUArjz7=#)AvIT!#54KVKKsw&Fh?K--5YUL*GD1|>~yLqEu& z+7t;-%;n_k_r)=Uv`XU$_=FMVgEu6v9iKp7@Z*AK2K7lwKLWpDI1ca%UHi2VrR~bK zCKm{DT7i;-1hX$ylHp#PYZafJ^X3H|zxM z!UM?fl~%;o!+5pxNpvY1a;?^g@vjd~^eGq$24`iw zVjP1*N^%DS>S+tU>v*{X{s=mqG9c2gr4X4+_ZSF*eitM6iII3~1*v1ro&Y{)D^0N& z-zmkip{F$N7#|8#2GE@ED5oCm^eUwIf??Hmetgm}BDy`ldi!9J31duR|Fm*SZd_-> zG9UgufKc7~$=qZY@yVP_B`8Vb5pi6Sw026yyXSGwN+JJx@evE5B9)|uw){hycRh#v zt;D9AQ+}mh)RsTyS*su21>sKgNGX)Q5BL;4)mm&R#@9CM6LWJVG^@6%vWZEhz+M-? zKk4{d-1JbjpKp~8AD>)r#hQVCTwr=CsSQ%<^^~si3>X0P6l9vkJvqSSXlC_~^gTjWbWZ^yQa8N=jgN+zk+&reb&Y$WvDu(+s4Q}@ugHba zl{^)m`pgB!C*AbTt~C0ltx!C#Z#p|ZT{zPFMzziTr}lYLZ6tsCwNxJHI^LMRQIa1} z3~{jnkIGWrY4ptsF*1oF)99Ok_CiiYeUmIkqS#F98`vjI->l8^{m~iy%ZIFeyw@RM z`$9|9X<29y03*`MiQ6fU$C`naq@}B9NR^lUKPem#{_1f|u z8#Dek>OUhk9r{M87q#WjSll%1jrWo-2G$x8>|4$J$_01ypLBfJ zxLnL&QrIZt0(?g?NBcb1C-j&=m*q_=L7R2`*t?bcLOiio_@-9@v(D*!$E)Yv8A`SIE^(f zb1k$`=Vb`#wZxUJoerDJFr~^?1hjG!t)%l#$#J16UdTcvCZ$Lpb zHkH1}e|7rU?~FP}tXNZ`?yI&7#~z6-(-S<;SDWZFxKo3;eEj#N zq;{vS%|vO{AT7hqg%JaFFO^{^fvUwO;M6grj$z3 zSeu?;^QwK~qY*;IDn0Gm@-rOIFG1ia=2c3)s4YL6SBa~8_X(wN5oj5 zXr3sH5j>uFZ<7ME>mZkzJjA>t3-2{37r9KxL(rH0`yh=x{8YV>-Q%na-&jE|zZ!le zw^bkSsJ%m<*RVZWs#;dZ8I#L*Pc$8|Iq#F&^WrZo_4D1`oXxM2`wD%lC|$XJLL`KC zD(Q+*QC1R}Mxw`wk!d748!}3ECDo$N%KV8vr(Grd+y7_oRt>Aw3)%kq=-^)e9Gfra zpAtXtU>xnQX)>luTIWsa*vE{X3Y4Gemo{NH|1@jcAadEUF{2s;Kkz{2L1u{lgoQUQeJRU6i5b1^(-dGa{n@z=faw?PX2^X#jTBwUWiXdO67UDO zP)YLHspos5aB_IgR~M5u{eBGNudQ!H4T5}BSpXMCta8NgKFgY#@lj9XdwQ0OAJ8|MPv{=%i`_RCDJ*w1; z+VV4ekjN&d^xQ!{7Nj^E^7?h$4VJ`%QRMKv9I4T9%G%)@swAD>xBvc+SKKfjq|Zyi zJF(*jMm{ohF)MEWN20;pjO2RUSYbqcX1VS+PN){5`?Jj7%1}jFnZHrC40Sr2hd~~q zF|Z$$Wh&-i1;lw+3Qj0+g7QE0#~_%fLuf?$IF0Y-{z zX5L5TgdQRi)B=Cp=zHpQ$=iBx_WRs9Yiru`Yvs<_gEz!gl6J@QyU?`?tsuo`t2^;K z)V=6DgINBQ9i$-{fc7VD+cqpuMR8IPkZSk*njB%dw#w##)x2^x$uPt|sNL62D-cotY%i zUY5$q>O6z>cO;cT&FA&#z1yRPy#3=)l}!!G=RIK2p(SeRcp!Jsr06Zy20=FGTo;}> zgD|0Xem*FQq7VvFlCIkH7@JS75PQLo@*h_iZQAm)^&sYx1zMoTmAI)bf5!7k;z*|cXxQVb9D1c5exk$zhbvkl9k;dj ztUe#>?PK6Mf6eU=Q;!&Bq(`?+5qfbOm19l*GrVVm{TVk^sP?nzQP}&s=~46xo^0Ls z56Sf?bYS{=6m_JWJuPs8^00E)`bfyejLYH2Gs;LQ=hO73FfMaSe+o7M^e5Aqmh{`0 zz87dh9%pBOFXq%7Bkui2177z-QQA{T6;9Y!)`r)p)SrSHP0^o;lm-sZNl5$fLo4&m zthH-Xv5iye=1;SJL)Yho>Cb~B-@e_y&OCJ8=E3%!+aHB7{mD%e*siEQJBpEt`g6S` zGL8OxEk-Kp&&kt;IzPAm>?^RB=Wo@;<;Q-Q*)Mu&)N+59*_~CONGgYv_yzrGKU1K+ zET#Wc{aJ&`VEXgv|4LQb?h{mf@$@3=YE`e!v#(X|!~NR&n_K$3&HR42?_?es7ix$8 z+$V}4=uai7s!e~fbtZSkUV#2o8g1J0GyNGQasv8OiJRK;XRJS|K=r5CNjT>b4$skF zX3m}g=BFaZ&G>od@gHu5fq&9|_Uqrh*7lG6Bh+@b%gW4|-IU?6uagB%e@Z|9SM2~A z*E~*&`3rP`pm*4}h1ohAti2f%$c34ZZ+b{!YjzxbaYYVFK(zge%kt9Q%$F|pCAAhmx% z!#wlH<(qi3Uz3dNhJCYy`nFN|pV4mUJ6ot$P1WY;{F}{ZF_+bj6Qa*j^zSFWkIXr} zi}C1341<=*NjnJjfNu;>NS|*h_D{-q9Y8d~VZ64#JlXD)^`I)tTm!Bi9{9m4tK*gF zZzVYeL$vH1VL(AnrP0E1Vq`K!rh4m%oaS?doQj%1PK-pcV11_W)!L|zJn+?iXI}L` zy>?9K;-+&uRB?Fq0Cn!a`ln^j$W?~)S;MIDMO$@4m_Q5kT7dXuLa!)E@AUKv^1l`z zu@EX!Nor`z&-CI7vFX59m3mQI{*3WeYLNO<^x8lw01o4;<^8G8R<7z)WlnLUYVRAz zCxCxay*A@|<54lomsi>3+X}S@$DNnkR66Lx85DHQ;5+WqtEw(j4>9$Zk6ZaSjWg2Y$qR(Kwo&=I z>2bW>_~dm^F$;xi6@}+EF*1$tgxGy5Mz$g{FgSz{u+k4i#_;>?IL?diF@qI8#wtd} ziIFjMk5`;pU%R6JGI;H(h)**8$L8-cAOfs&lZNQzq`3{Z^0G!~UwDWolbqTPuie15U%unUxWQCt3u?E;L`g4C*h0upkI;kd)8N7Fb{DR#BIeoc&|BB!oPvrJ~j(IF(Z6d>*;ROy#o(|9O-kd z#1G)IE7k~vqsbVxpR&KBA?0U!>T26Xr8=paMlY^4@Q1dqdPJZWZQm~x_0&p%k`THm zNhxi5g6;2EAa()tjM8Y*mY=PYy(w}6dQyp-+VW?N%i=lZrJy;9Ri&f@^=EbzJ3Z6afc15T7wlGtlpBL(Ta^lqE%8 zq_#_?x(d4MS|FE%ys7sQLNV2+&vLZ$0u_*N8k`g|NV?7=wLWC}Pg;+r4&=-3vpqnc z_V&v4vxXM%G^STKUvFLyK9*P61eD82aY?S$67 zc*sIhsz9$Zr2#Lkx&9uUBQWRdR0e(iC@G1&wFj5<6J0;hT9u<@$FurS2m0B<7#mmM zj8I7Z-m&rRTK6mBRWCM9;oH05Psa6))~!A>s;@-(fO1};wZvfxGBV|uJ{czF!g=|> zy=wGm`?A5t_C+77pH&*v1Z7Ll%TIfLkXns2^7BJ*jy|=Q3*L1lsLB21wgsOD);YgC z>`(R`p7L+^G;SYytJ=;nKOP;}bU%-Q;XLXhWvpE(n=sczK)y1P^QaNvP)73UL7I5QJlp9Kii++8mCkB$KG4f*(lc75u zj!(b!PR{{72Xc-BDUTvmA%FfMAMrdwa@;6wjL%ktld>}~I5>iv(8t;owgGSd8Om`! z6It=xoxHuM_DQhoW4pJbywbS> z#uas!+F7Lcv)T0-)|Yj=o{Cmm^6g^tQ?>v2wzByt#b=CXfqyCc2ZZ?=6^?mQ>VB2Z z8_^e9o?3T|@De7}MHUAwk_FXV@tc_Iqj#%!%1}Uo^HMs6@kxI;WPX1bc;jwY` ztjdjgd;UU|4m{#1o$nMGG4FDGSX&Frn8ACFG~f=g?}Md1&q|o@q&>HazEw)~v@IQ0 z_rjyx(KAh_&R8_qYY+Gc^Wj2}8Q9OiJ~Ozya!J&={H=Qgor|v!8{Ya7%!fTemKtCT z0b7I2G%y+hHU$~uwN7f2gvwMlN!Z6&d8CU{Da?0*D45N6Ja1Gu@6zO?U5WbZmwlX8 z?+EBtI^zoA!WYG^2C0;oI%2$JzC%wa@8ase{SH#jfFHX0sgB4N{YB4#9Oi(My~FSh z$VWWS5H8Dutg&Z8gQd(0vdxn!U}BI}{!{_OgRBBm1@s7VERrgqO^{7N3J~5Q=%++E z+|~Nx^&CjU0j1}kpYKpg19~F1}uC%_)p&-tD}R-eLq0`xO`pN04H+TWY2iT5e{mxcKPr3XTt zy5E%M3&@-P`z&I#?7f?M_~TgFyoLq~kAqWU?Q{-HJFn51PUKCWPAV!>j_J`6VlK=x z<`ozgd1Og#bHlvtU8aW~`U!(fI?qUZ-ly|FI-&*@ilG9$0kbca=boH!f$H`khGKa%OnWg#}ee5nWD#Y$71MoFztw zM)g-JCwXgfa71eC(@2he3KNZv{4QK7Mq!>&fr8mQqw`6lM{CyiHL+2}P3v~{7{6;+ z>8wNWO_*nNDyLFn>WIFQd4`ah_A6D1?2l1opr2y!{L}x@bKvuEK*`RK%11n*5H=;s s$=>_=mXp2rbtxx%?`u=eO0z5(WpL&6Z(2T2uj*^jb3iu^C_VrG2TCBYzW@LL literal 0 HcmV?d00001 diff --git a/corpus/paragraph-edit/rust-split/typed/read/environment.json b/corpus/paragraph-edit/rust-split/typed/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..5ca67f6fb1d036ac95773ceb0f63fa4054269c43 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-02D586B5", + "cold": false, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/paragraph-edit/rust-split/typed/read/hierarchy.xml b/corpus/paragraph-edit/rust-split/typed/read/hierarchy.xml new file mode 100644 index 0000000000000000000000000000000000000000..128219ee630ac2ac04188f22df8e05fe06a732ea --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/hierarchy.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-000.xml b/corpus/paragraph-edit/rust-split/typed/read/page-000.xml new file mode 100644 index 0000000000000000000000000000000000000000..3917e00aded6a5e2fdd79d873ddf1d9b2354e5f9 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-000.xml @@ -0,0 +1,5 @@ + +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-001.xml b/corpus/paragraph-edit/rust-split/typed/read/page-001.xml new file mode 120000 index 0000000000000000000000000000000000000000..145194458110015f127fb3a46bc43b26504912ca --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-001.xml @@ -0,0 +1 @@ +../before-read/page-001.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-002.xml b/corpus/paragraph-edit/rust-split/typed/read/page-002.xml new file mode 120000 index 0000000000000000000000000000000000000000..7abfb30faff0251ae0ef47e7ecd825b352db3681 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-002.xml @@ -0,0 +1 @@ +../before-read/page-002.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-003.xml b/corpus/paragraph-edit/rust-split/typed/read/page-003.xml new file mode 120000 index 0000000000000000000000000000000000000000..39c1498839527129786dde8c7a2ea388309c5e98 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-003.xml @@ -0,0 +1 @@ +../before-read/page-003.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-004.xml b/corpus/paragraph-edit/rust-split/typed/read/page-004.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0e354a605e0c94cc1b063cc0aec6977d7141c09 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-004.xml @@ -0,0 +1,20 @@ + +Bold 🦀 italic é color 東京
+End
]]>
Fictitious: café, 東京, مرحبا]]>
diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-005.xml b/corpus/paragraph-edit/rust-split/typed/read/page-005.xml new file mode 120000 index 0000000000000000000000000000000000000000..28293914b5e97a92909e2dd758ae7ec90d626069 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-005.xml @@ -0,0 +1 @@ +../before-read/page-005.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-006.xml b/corpus/paragraph-edit/rust-split/typed/read/page-006.xml new file mode 120000 index 0000000000000000000000000000000000000000..d238f4bffd7ce07f0077616b2fd91132f21cecf5 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-006.xml @@ -0,0 +1 @@ +../before-read/page-006.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-007.xml b/corpus/paragraph-edit/rust-split/typed/read/page-007.xml new file mode 120000 index 0000000000000000000000000000000000000000..8ca327c46e02e25ad46fd0cd632c0246b69b2858 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-007.xml @@ -0,0 +1 @@ +../before-read/page-007.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-008.xml b/corpus/paragraph-edit/rust-split/typed/read/page-008.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc6661a5df25bff662c77431973d37e3248542f3 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-008.xml @@ -0,0 +1,2 @@ + + diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-009.xml b/corpus/paragraph-edit/rust-split/typed/read/page-009.xml new file mode 120000 index 0000000000000000000000000000000000000000..d7a70e4fc176f81797798e161c6ffaac7dd4f066 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-009.xml @@ -0,0 +1 @@ +../before-read/page-009.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-010.xml b/corpus/paragraph-edit/rust-split/typed/read/page-010.xml new file mode 120000 index 0000000000000000000000000000000000000000..037ed30fb57e17b3e19d3f9af87d476c2ff02e77 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-010.xml @@ -0,0 +1 @@ +../before-read/page-010.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-011.xml b/corpus/paragraph-edit/rust-split/typed/read/page-011.xml new file mode 120000 index 0000000000000000000000000000000000000000..5d6e25667baca93299dffa8ee65a1f002997b4b0 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-011.xml @@ -0,0 +1 @@ +../before-read/page-011.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-012.xml b/corpus/paragraph-edit/rust-split/typed/read/page-012.xml new file mode 120000 index 0000000000000000000000000000000000000000..9c9cfd64e953f4b49f8c3868dea5d3b4ba24dfc2 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-012.xml @@ -0,0 +1 @@ +../before-read/page-012.xml \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/read/page-013.xml b/corpus/paragraph-edit/rust-split/typed/read/page-013.xml new file mode 100644 index 0000000000000000000000000000000000000000..364cc0e312597602131d3875b21b9be6068f1c6d --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/page-013.xml @@ -0,0 +1,5 @@ + +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/rust-split/typed/read/payloads.json b/corpus/paragraph-edit/rust-split/typed/read/payloads.json new file mode 120000 index 0000000000000000000000000000000000000000..3cf45dc1acb611d7f764e0340d73e87192f81407 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/read/payloads.json @@ -0,0 +1 @@ +../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/run.json b/corpus/paragraph-edit/rust-split/typed/run.json new file mode 100644 index 0000000000000000000000000000000000000000..57b54ecb5b215fd335e95ac18d3ff92d09e84f99 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/Users/clo/dev/one/evidence/m10/paragraph-rust-split-01/native/notebook", + "expected_pages": 14, + "author": null, + "author_timeout_seconds": 600, + "inspect": true, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/paragraph-edit/rust-split/typed/source.json b/corpus/paragraph-edit/rust-split/typed/source.json new file mode 100644 index 0000000000000000000000000000000000000000..50ad111d8faa56e60244e599c7a1a972e49ddcb3 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/source.json @@ -0,0 +1,14 @@ +[ + { + "path": "Open Notebook.onetoc2", + "bytes": 4800, + "sha256": "7c258d318aaa6089989a7beb427a820beb99ebd7833f2a76ecbbb3713df07dbb", + "mtime_ns": 1788857651415033964 + }, + { + "path": "synthetic.one", + "bytes": 110224, + "sha256": "29a64584c4d7ac72958595769854a3df199156cb89541df354d9e9f484450712", + "mtime_ns": 1788857651415524756 + } +] diff --git a/corpus/paragraph-edit/rust-split/typed/teardown.json b/corpus/paragraph-edit/rust-split/typed/teardown.json new file mode 120000 index 0000000000000000000000000000000000000000..b0d2ee26322df655cbbf9e42f6c30b72a4d110a5 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/teardown.json @@ -0,0 +1 @@ +../../joined/teardown.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/ui/selections.json b/corpus/paragraph-edit/rust-split/typed/ui/selections.json new file mode 100644 index 0000000000000000000000000000000000000000..604e7b9f345a4899dc0fc581056828633618a509 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/ui/selections.json @@ -0,0 +1,30 @@ +[ + { + "case": "Split start", + "index": 0, + "page": "{058E24C9-6521-4913-9088-94646869E7EC}{1}{B0}", + "object": "{7DB914B1-2E9B-4E51-B78C-87B90E14A385}{40}{B0}", + "text": "Typed " + }, + { + "case": "Split end", + "index": 1, + "page": "{EEE8E5F3-7A14-4AA5-B06A-56D4BAC7C8AF}{1}{B0}", + "object": "{F60211DF-6E7D-0CA1-2F70-07201B2B1F07}{1}{B0}", + "text": "Typed " + }, + { + "case": "Split empty", + "index": 0, + "page": "{984F0936-3DA3-4D19-B112-F3CA259A4148}{1}{B0}", + "object": "{77D1B2CB-BFAF-4106-8E28-90895EBDFE03}{40}{B0}", + "text": "Typed " + }, + { + "case": "Split empty", + "index": 1, + "page": "{984F0936-3DA3-4D19-B112-F3CA259A4148}{1}{B0}", + "object": "{F8CC0112-769C-0624-19AF-E3D7C46B02D1}{1}{B0}", + "text": "Typed " + } +] \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.ahk b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.ahk new file mode 100644 index 0000000000000000000000000000000000000000..cd7e3139b8b371dbfccc8e6df83d5240bbadee8c --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.ahk @@ -0,0 +1,23 @@ +#Requires AutoHotkey v2.0 +OnError((exception, mode) => (FileAppend(exception.Message, "**"), ExitApp(1))) +dm := Buffer(220, 0) +NumPut("UShort", 220, dm, 68) +if !DllCall("EnumDisplaySettingsW", "Ptr", 0, "UInt", 0xFFFFFFFF, "Ptr", dm) + throw Error("Cannot inspect display mode") +NumPut("UInt", NumGet(dm, 72, "UInt") | 0x180000, dm, 72) +NumPut("UInt", 1280, dm, 172) +NumPut("UInt", 720, dm, 176) +if DllCall("ChangeDisplaySettingsW", "Ptr", dm, "UInt", 0, "Int") != 0 + throw Error("Display mode rejected") +app := ComObject("OneNote.Application") +app.NavigateTo("{984F0936-3DA3-4D19-B112-F3CA259A4148}{1}{B0}", "{77D1B2CB-BFAF-4106-8E28-90895EBDFE03}{40}{B0}", false) +hwnd := WinWait("ahk_class Framework::CFrame ahk_exe ONENOTE.EXE",, 10) +if !hwnd + throw Error("OneNote window did not appear") +WinMaximize(hwnd) +WinActivate(hwnd) +if !WinWaitActive(hwnd,, 10) + throw Error("OneNote window did not become active") +Sleep 300 +Send "{Left}" +SendText "Typed " diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.json b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.json new file mode 120000 index 0000000000000000000000000000000000000000..e05935d2e8052dbcef4ce8e5a4c0f7cc6af8ce3c --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.json @@ -0,0 +1 @@ +../../../joined/ui/split-empty.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.png b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-0.png new file mode 100644 index 0000000000000000000000000000000000000000..94c12d501890f4c760c0db9b34c087eba3420ed6 GIT binary patch literal 47514 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 S_Um#8IE4?YGF4KhA^!s (FileAppend(exception.Message, "**"), ExitApp(1))) +dm := Buffer(220, 0) +NumPut("UShort", 220, dm, 68) +if !DllCall("EnumDisplaySettingsW", "Ptr", 0, "UInt", 0xFFFFFFFF, "Ptr", dm) + throw Error("Cannot inspect display mode") +NumPut("UInt", NumGet(dm, 72, "UInt") | 0x180000, dm, 72) +NumPut("UInt", 1280, dm, 172) +NumPut("UInt", 720, dm, 176) +if DllCall("ChangeDisplaySettingsW", "Ptr", dm, "UInt", 0, "Int") != 0 + throw Error("Display mode rejected") +app := ComObject("OneNote.Application") +app.NavigateTo("{984F0936-3DA3-4D19-B112-F3CA259A4148}{1}{B0}", "{F8CC0112-769C-0624-19AF-E3D7C46B02D1}{1}{B0}", false) +hwnd := WinWait("ahk_class Framework::CFrame ahk_exe ONENOTE.EXE",, 10) +if !hwnd + throw Error("OneNote window did not appear") +WinMaximize(hwnd) +WinActivate(hwnd) +if !WinWaitActive(hwnd,, 10) + throw Error("OneNote window did not become active") +Sleep 300 +Send "{Left}" +SendText "Typed " diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.json b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.json new file mode 120000 index 0000000000000000000000000000000000000000..e05935d2e8052dbcef4ce8e5a4c0f7cc6af8ce3c --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.json @@ -0,0 +1 @@ +../../../joined/ui/split-empty.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.png b/corpus/paragraph-edit/rust-split/typed/ui/split-empty-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b933ccf1c78cbe39065f091bb8a541e5553524 GIT binary patch literal 47726 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 literal 0 HcmV?d00001 diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.ahk b/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.ahk new file mode 100644 index 0000000000000000000000000000000000000000..c2961c0d7722b32680ba53bc822a8d2641d6e031 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.ahk @@ -0,0 +1,23 @@ +#Requires AutoHotkey v2.0 +OnError((exception, mode) => (FileAppend(exception.Message, "**"), ExitApp(1))) +dm := Buffer(220, 0) +NumPut("UShort", 220, dm, 68) +if !DllCall("EnumDisplaySettingsW", "Ptr", 0, "UInt", 0xFFFFFFFF, "Ptr", dm) + throw Error("Cannot inspect display mode") +NumPut("UInt", NumGet(dm, 72, "UInt") | 0x180000, dm, 72) +NumPut("UInt", 1280, dm, 172) +NumPut("UInt", 720, dm, 176) +if DllCall("ChangeDisplaySettingsW", "Ptr", dm, "UInt", 0, "Int") != 0 + throw Error("Display mode rejected") +app := ComObject("OneNote.Application") +app.NavigateTo("{EEE8E5F3-7A14-4AA5-B06A-56D4BAC7C8AF}{1}{B0}", "{F60211DF-6E7D-0CA1-2F70-07201B2B1F07}{1}{B0}", false) +hwnd := WinWait("ahk_class Framework::CFrame ahk_exe ONENOTE.EXE",, 10) +if !hwnd + throw Error("OneNote window did not appear") +WinMaximize(hwnd) +WinActivate(hwnd) +if !WinWaitActive(hwnd,, 10) + throw Error("OneNote window did not become active") +Sleep 300 +Send "{Left}" +SendText "Typed " diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.json b/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.json new file mode 120000 index 0000000000000000000000000000000000000000..09fdbf0e38d0228a3e637bd7e9644b9d366549f9 --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.json @@ -0,0 +1 @@ +../../../joined/ui/split-end.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.png b/corpus/paragraph-edit/rust-split/typed/ui/split-end-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c38f66a9dbee53b087821b60b7498a42661dc1b0 GIT binary patch literal 47953 zcmY(qbzIZm7eBs{79fgrh$u)4NXJw}R7ya)K{^H!BR4SUcmooWiiC96#@LXOmK-%e zV072${f7Gae!suhKigxwuk$+hoO7S&JkPzauvhBJR9Bd<000207tfz+0RZI0uOz=N zkq|!~al8Zq00_nxPanVbPFq7>_Mlt*`egz#)m;ysO2togr;BZ-*EdNpPTb`VbDNcF zc}ep5uBm0}bxJ2Eo*=1uHzyv3hT9V&^c9Z<=p#n;E(g)tS;XpJvk|c@Z{;JiBNr?V zApg)LKw-35TClNVh%hQngc}|=?y_OEJOyEr@WuIEGo5t@X&CL_s~ofHV2=p>dyTH% z3;g%9#?sZ9EJ3A{>G9OFh&@kyZV_9Vr5XWO2sTUfov8Q(GfCM2B^8|#=t~bdB9hMV zN-BhjAL{8}y0H}&FzX-3S)&PgA1xoB^67fvSya^es@>l-_)T8RY@UvL$ic~rG!ZvV z9#^oiKlyMMUw7AD*zNk)iqd(q2(H_AF0L$h5Aj-)>lwW=XC0Z4p^dj@AlUk9DQct4 zcAHT7XiRC;_k8x_L0_weXH-+QUnh@%;7=hth-7uG+2-|d@@>bpPHjZA&cwR)qV2uK z!2^@-!+Fcz@`w|4GY?EAzOww12_%0)i?-y2tZZC`>@2P#{l9Uck>r@$a7po6MJ*=* zu<+)cRKE3lzTRn;S||UZ=o!6e4uAjE&QfE=!3FuMF6a5sCWD|}sp;v??g|U0( z(rxv1d-1zyqjp&rw&gmXdB?B%i6n;v)B9eUbV2wP$5JyVg0aarPYZPehZ3WwrA)C+ zv-iq_aM6iE6K*2Vd|9s?S+7`G7az|bhWIQ2i1oS;VqFQq@Ch!+hR1mKNzHRJgo`IC zmoXlDPMaF`C~pz|X?4IoH)|^|ems3GJi(Kyhn6F?;L^-4<`L3+H0E>69*5QxKE8sPp0(r?|;E&_OmSb<# z9_0Xf&#jO5cQFd3joUgely_pLGy=?bb~aH6+nqLkoSqHAW8Cq*DGWD-K^^ZD9w3u) z0Oz2^LfMEmBe>I1t4bydwV~ngLks&L!f}F7h|A{n)UYT)W!=GFGC~THE`}E{AsuuiuGWz$NmU0`y*7^fi-~{42dYxU6badxJ<*SueR&p&aHCU&v zmSo$-#Y}Lonbb3bOA~+w<&8a4%Lb!st1-gf61j*r``!8|18=$SeG)d^@8V6MF<%38 zLqkVTs;|xj=O&hMnDLr6r5y=Z)Glqna~MWnHg4i7@XvEtuVLJKr*`&CQGPVIbmwI zQVR8*5)+IpMol~?Bj35b*to1R(caxC{KwiP$vrc{m@i)7nuZ($X8?;=?TPDk+Ww`>wBhBc4PCpH>ouPSS3eNM zzcP)xWh2`nMQC`rx#hlHu>pwOtUPNZ&xa20^DM^1GS}^HYRapi`}m9rcS1uM$wx*c zk&d2Yl`A^+Dyu9;KiGZ! zT7XQwgx%YZ2ri6=J;Y6KWZWjH^VLotbvh>qk<_X6i*<~h*TbKQSeR%AA+Xq~uir;X z;m>r6Zm_U;>9H}H-Igzxe&IViWJZYH-?qiAs5BE&PW0FEKX{6JoxB7(y}yCxoAR%g zddG|&ktBt9ERpKhB95Bf3@jv}Pg@kSL#srt#*j~mDo67Z9G{3)%{}*1OFLXkCO?AX zMMWf3zpV_F2~Iyb_s=&Gca$R(e~r)kX)4u*rE>vW1>lh^paf7Zc(}O&d-0Sv&G(1pbx= zd*W7m&>R@s;3KMj+|v15ziS59&Qc_e#Q~Z2NSRt64yIEX_n0 zqmq+Fc6aw3Gtz4fhEn{0mn`1%!MS-p9`9;yVZ{Pt{JbJ*%kws*rrqzAZ9Z)uo)g|< zudi&@4gQ*@lneq#Ry>nc-@n(FJTvHZxtP-HMq+XGF=3O*PCN{+by!MW^66HjAJ06qQ;M?a|4oce_K$fB&EDfh( z!1N_Tu_T9}Fo26rgR3UI6K{EP&oe5^ZhUee+PF5G8BLL(*J|??P-`gT|0HPM%snKs zi(Qo4@8|Qrd<}X`Xad(9*3s+J#5&8`wJlF^Gr{PYRA9}3D@~aN1VKYdOIy6RH^q{g zU{*Q(-=@AiUt)|f<4rM}DL3mJ>^t3_&YtqOH66;S$;CynR^9Gba30Ew5$>rmH(&LI zJ!SO`77XT#8k3V-#&&S^ZxohnN44N>TBQFTwe=Y&L}P6&&zDa9 z4B z^!5RaSii=Lq2X9T5Nq>(-|u7DM^D%8y=2Q-_$<8G@R7+F&_%h;DW0K|usr)qG`l)P z>-g7~?N>E(pQ5d#-YrBP>&a8bYOF^*>vDc~*?i7N2{4gVK#1uboF4&qT0W;&j@aX1 zBt~jQJIUeIp8g>-o#`kIy3~(2Hl`I!8S5KT1apd^-hMpE;X-UFO3Hh#6oO>NM|@aa zm%I|!*Rb7uxVU*ZAy$h#MLfO}h?1)jFuO8Cc%ZkI<$Z36uxq%=Ae`?=Cx%bRTc}~E zlYKo*F;YUuz3veaMTMZ;qlu@9N$YR)cmJB{d`jtxu%{T^xwO&@Cl+PmK&MgcPBX8p zQOQWD{>B=M^3%0__E@l?vt69*N^*r(M%Cm{fq}j0FK^W=l~M3!2gzL_j`)K8&{m43 z!i{@+IPU$x+}}qWap%KPHxndR&mLONn-$lV`3S=h>DN!rp%&i#V8;jE1k{@{W-Y7fN6#pRRm4p{J(G24Z!Un$O zXYS39Blwv=9Ziv-77|~Yy}v6#eJ;BGVkI# z%+O_Px%Ov)DBGK_Fwpid=8})MFpGiAHtt(DRg9fdlzEv=GrQmK)Z6NG^L|=SCbI{i z2XjiaL9}+ahVa&scfq+SS(=e*XOC1T$gY`No38+?Gb7h+EkWwIArX;WnqSc8!QVLV zSoYQ1g`xZcTMJDzA-7le~^+SxM zgz#AVVIqC3vKDWQOG@OYM!k^9HL)9epovJrSY6HNXZux)bn%I=aPJn|Ww4W28Y&w` zs^5+JT-Q`LB7YF-<4etU%DoaW!jq#FibrK+9zBH~UQ(eT`K?htQn`)|A2fqu$@%AH? z6VtAP68r*f>pg%CcH41R*OLTjkhc*Jbsm;Y+zD`3nTW5zcGV_%des>zIHuRuH&j(9 z%p|H`G6!)`-??)BL8({hA^*E^6}U zJwjg{6TIeJ6?Jk_{He?e%J;Z~!dyb|Tde3RxZ3%;{ zv5n!xvbAktq-K{PCBI|p#kwUond=bI#>;D*^j=FIvYL##vrP{Ts&n(8&-S&n}qpCL*46{br${^b1vLup2j8XO4(6d? z+Sa)8*PQ7K?LM~#N9Y=)R+p^GjXnzZ9={n+X^7eF6p$p+qUPVcD(uD&HqXZrxv5^L zGK=yrpFj2C)D-Auo8510kyd=O8J{LQPm0sCZ#o&6Jb5@lqe&yGB9oiFSBTC3cwrK< z2Y;>aAg^i6HGnT4C7rXOi&WubtbHw!Z~n%=$!e}vU8O@-b6#TY4*Av!2aj+AY$~lO z%*J+F*8Kp<@tpenks-UB`v_9ZmKT)sktuAa&j24z{CuCs6E6N9_t7sWVZhgZj>$4< zY)9yrl&`l+t~!e`nUNhB`8Og8vYib|^ud`63(+ENaKmo4ND$ z_&5@89BJ3$q?n&CVc8}R8~b2A+J5l(>djo5|Bzx9BX{xXTh`&pCXT&)XX2m&gjL-TK#$vB$NR!!X4Q@_c*mzwfR znDe&;E^mHlB9D7gVgF2aDgq^6Sk|npGLUt6{#l7l=`-mp557-e&939j`t*c!Ds>#z zIV3B`Jt^W@AoVHRU)B0CYyI?VoJR%RB9s`)ADPjqrZG%n_)u(VujpzNV;HfT{oz`* z0n20IY4d)iK0n&0drh^OCH0Pc2Kv2!fYp|tT6g&AOb*Bdo7_4byl1=i={F}al(OQ} z5q3vEMdm(OHk}rxFD#pBqB@JfM8n$N@D8r(*{b!3M?WSj%hN-40$E`veqd~@TfsLU zd~^KN24Mq4@pEd~z7VrvY!9;+?ACV zB{0oxvz?4NPrqLc<24fs)SF_Vw3B+%jy^GE?=NhUobnG zLXO}#fd@6o3;rI{H{=~oH)c-h-c@%9yR_WsqwbvQlln`N!>-}W&_kjNHeRIcrk{^ZH>36~$lUE5Z9n1nlKu)S-y68L*R5-< zHKNSKR##W`DXIS0g00YNM9&CyE*x|~QRcFtSAU`>hA&JmygIYE;qBZSpkhmtEWU1* zr$z{#-D5hFQztz85jl~|tBx{x+r~C%yO((|#il*Q{GSjX1j7}7?zV`Cr)WdEFCxIy zpGMZ8d+DP=Z!d#nma##f^TcEQk8ySR5Y=1C$-J_260Pe1OqjwLd4gZ!0H%?G}8SJQ1KXD95*53O9ewWOts94LOjyWn{ zK->P?;JA(1#mRSG0cS7qfK{O&=y^0IE<`{D?mp5D9R$5xo@vyO z27x;BzmpBo9>p>!hOj@hS*q{dHz^JAe^5)Hbf@(H@8NAtsZI6YMcJ~TWXY}fK9HUi zh+fvAG-0E~2h#TvZaYE=>GQ^ysM6ME%1QVv$PX_1yDvmO9-Kn*>_#q4wa-p9@-$bv z;(y57%BCy|r+M|gE*~rMv*|`IzW2d*-=O>~%;ucvF&|Xf61EU_^9AT;LS=+S=)cnA ztc1YA84z8A2TT}~IAf4ni5`Ug&rPqhWHfEqRP382qRxi z)AYR2EdZ@tz5x;q1$T<9|@lOjI=uw=fcN{tjUy*x+~Y!_P(-Zrhvn*qxpx1#y__ z&Onn=IiKpDG${+|sBP)XzW4s4duv}kp1X}^+%@;xJ$x8`@!GlhZ-`A_BgE!Zva%%w z8KaT0r>6NsFjG!J+U3=0c00b>yChHu3kA<+f%^>j*zUeK_5lxQE&qHmz}uK`H`Ap= zs+uv7F_(GKH)9Bo|vZUT+4`M!YgY1uvU@RjIP}RdwhLh)BeyRyny2>@@A_`um-SZ+4p< zVaYqDP0DrIz4;QX#8UVD+Uz0Raf$rG9xv6)#pd$LPU z{aOA@b}-Lh)}qt=_v`I}DzHXsz_jYN*zbwUVvSAW!Hy%1vjionPqvyl1dPPrXs(<^XrpSq_wh+ZN9O}H9Qu5^(8KpRjvU4{ z2O&Rj_CGj^pP$6;?KX1=s`U2`CxF-vd`#9Iiw)w{CQ5EC(8ZUi6%9^SNaS zxFv>YwY+G}Zw0hGXfbd3uLa$*)kbyq-zHH1(t$?TQwk6VAuQDNtN!)nLgc1iAsw1S zzQSU6tC|Jc;M=S*;&i&4qSmZHhq584CMWKqMsTO4)zTod+I@!An)A2Vkq`_xKq_E@ zYxScMhuZYP(s6N2HrP)fVD%f*1pA9=KEcra)mk}jUO`X=wCmgQY+k!^Lcn0He1qvu z(rWFg<*#R`KlGi&MT}<^NGNh6EDtzR&GJ`qjOQ#|f}eR&Ww{^I`{D1#*6 zupSwbG3Dtx)cgJ$gq`_pJ5K|4x-5oJxEVc`j$hko?hDIAP=jh$f9@h^K&X?SyMEE< zE`9x=HTi=Oq;mU)e2G*q;(^y@m|NUR>63Dt$Z}p)(){K@=zG>9tjls>Ul`XWZTQWw z!Layn?Fb;N@3EB#qsU#62O@GABvF64lF88i)L#8#=FA5ZtE};r>t@x)n+8m$V}JP~ zEy9wAL|-Qp0Uf|-+>LMid(Y@McuJqyU#3dzuH8WY`BkY z9;?Z=mT{f;UzGB9?i{#%Bep)%1WZv!bBgWZeY)bcX7!#&4j%egZ@1${SoJ*a@a)i;MFxIK@&|1;RW7Pk5*Gh1N!QY{l&!3%UsYiMZqjJ7qo=Hom zROkXtKykWfN5ZRy;HODZi{LsIp)R4pi()gLUu z%y=Chp#t|aq)9Kb; zqLk$i<)|RZfy`Ift_FnM)72=1qxbJ|a%57^(3OYhW1srk`l$698+HcT z2Ah-ULo=oGRzLRTbf8>h1$#&#ardcbI@?x}Xy*DLv3)B4`8RII3+b6`@&P4T8v{9o znXoB)#}z{fC#>S1$yy3)GoZ&698Z_NZPB@254+!+`d?h!7i>2Sz;oA5Q54M!-*I>( zQ;FD#0vKsQ+r?KsKG8hZVsjo92lC2R^@l8gGt&3Cq42~D&afD9@7&XyNo z^~iwA_VXnrKxQFggsQXuB+N(pr^%Bc?2_Y*pezlmw5G@M07G$cW^I-66@zkFsy`hF zr0UtdUjqqMZU60I%P*C@#v+(H!X3y`Eo?_Go^;Ev zuY{v`dwuj;pEoNaVcd<+Q7tp+x3kyieyPRxagE_E&d@U|gb{fejXi)bsb?7Zt5`m)->}m}39EVU<|LUde+K!|qHP^ZJ>P5foClQtQM=IZ8bIm{~el z)k-fF=uF?hvqkmPk8F3M|C&Z^1kP=Zx`fxT%SW&Iszee`YOsUOVa8bx@D!q5W<-T6 zjE-MqCZ^Ss$-Vbci^3|BXH#oZ7;l3j+Lw;1NsmtQr=z!~NCj5#co-CihcQl&!uIY2 zb~%(Di4!*Qb#&||cLYK3mXm?FJY&4-xM}La_e&T|hE`4eYW1n8eN+<9K<6i_L{)fK zZBWCBX&-aaYQ9e*VojU|O?V}*+ey^`-7S&WmPnmQO%bBll-+Cu*PF72P+Tzi7SnJ0 z+FyocUyHkEz+Y%%D^suCEQ50M2y*j9NwzuIB#@GqrFc(?A6NRF^!Y;dW%~=#AqS0) zgKldy8DE^CM|8SAg*4`?FKbSUs=!;D3$W{{j@iXBC%WzRD{a4TR@|C4GP?UZ5d+m) zNxeB@rH5j(xMqGY!0!t*6$vypbRW*lddp$vc;q-Rm-W2$hhe@+0)B|sn&cyrCMi91wd}n*Ry6e9nJQ|wx zQ~oC=))qes%Y&VtQbbVnX8l3sRW+^!K96uU0-vA!$){{dnSNTxr7f+*XK$1SGhxu?X+kArZBcl

eW8bx!P0>5%^97z;-+1o-$ZFbO`7~|Ix9ISwbK0zWGPivD9U?dE zudD3z2-k~Zs(8Pfau%uZi&qzwiqtfajVlC3@ehe!6Ac`Gq1jdViAoS_;Td0P6Xn9t zH8;vG7n=7Vm3`;d4DT-!YV+nxE*%V@7!@{A?*09G4zr`3msWE)jpzjE+oJQGqb@IZ z6!5YJAY$*VCwcl{o&$Ml=0`yxu;=rZpk{uIz>WY-n(LDzUKC&JN*AJJB}q`vArXQU z`?Wvhgf)0KS#&d_7^%xCS%!eumu&d!JK25tYx@;(5LuTuPyRuL(Yj85qp*%}VW!{VPIF2S~2D3C&FL9GFwWuv?Mt%DG=)m7VX?WUsUZH*>#l@gD&q`N-J`L!mM#d3#A=%L6h+Bf$>EV21DW&TFc<-k zF@;(;z!zxd&i76?+oOCo@QD)`%;29S%7`5|A))%+elVtog;fxtGaj@7^7yezcz!Sh zP7a*~D3~051TiS!kg7-d22%-@P~6+I6~#>nj&S{eWvjW0swkDQZr}HV94N6@NHRl( zlrtfAcGD%ucZrv^WSI26DYq|K73FZaxWLG8dTGI5EEh4n7wC6mBG2q2%iL}aDly}r zK|+kDVSj>l80cRx8_}C`$d75hDudJ`6D)2tH02lHs^2*-D6mn1;ZH!}nHr$ohQp)O zyk`^6xrW+ zl(cFj45d32qOSOP_HhW!!FFHPNKdo>&2lMp-w}}{;E6Ee!~QK0o_!{J;6ZKzkgPTl z9UUEKcVjUWVt!3>*fPc+(Eg)9xc3EB1FEX1q@h7Xpn%F)bHeWYzl$_S%Vy_roLCBY zqI7!pJ!g4m5Q*Kcb%cx_FI+9~R9o!f1Nt|tz09mA+lg=&*CI{&G?F2UxlUhLkdi>5 zpl1R;()?4-$aH@491Atkj8daTum5Npi722FWT0D3?So`?Zm*_{f2fWsj-wJ3r|JnG z-dCeY04Nyx)|dLgXT$Ag)F$u@w=ka)hC^Dz!*gFk6rUZm=Ol1v_r zX>V_$FCYx2qe^Q$n)^|4rHh93uT02&QSFussr68*%8CL9Nyy7H+Pm`DiCnl$k(DVTS%b~8}YG^ls5SeCvQxEn5vSG(F7KxM3@#Xv7l)nLE4 zJ*YH$^KUP`a{NKlckS$)ORBM-??@=Ug;(wK->EcGQ=7h1R1&}7hpoO7z@l3;Rwf|s z?$&v%#E%iwZ}d8^5PzYfwJ2mNZmSvIgj8Nt5Ik)V_FEb{60=<$dE>Gg4P)4)jQ&$B zdxhIH*=aspXvis4atfc{BX5$4S5DxoM&${!u2ASWz4TgWkWV{Ze)x4Lb_VnxhdjcsRDWbJZR`$R#HEamBm9cQ8`g9ba8#Vh3g!+Zo;3vk(B+}#W83!C1L%S3Uq{8NB+5x9DZpr$sLg1m z1V1osd-1nOv)SbJr+`deX-L8My_WneE*|wxpaAv^vH7%XYEF&p!G$1z6g{oL1kLM> z(;^$pZ(r*h`t>)H0nzjb-^+V%`q8jn=w?T9GEW|51DPS2YbWt6-tpoMTC|VyZUUfJ ze(a!QdqG~A<+Ax7S*`+i^lRobCZJ^wwx-3Rmy3+a)d0#7jert+JL+}z8Si{(9=SVB z*$s4FL?5w%|LQwM+1s<-4KAwxM;YnNPtLNh%6BW7`-MAoev!G-F+Blj_}yuXrUh;S zbx98oJH#^Cq&Z3S>w(^z+qototN+jAB{l`e;3)t0ykX+Kwq6wBch-X&vw|nRP>-L2$4aleTUT&w825?PidGGX zy_Q#rtZeOVKikI+UQG)D3ACH?50@eV3jGy}jKFJuBt$uNJmx)WH-Q52U!9#GVg zK4n%g9qqL}n2t5Wii*oaetw&?GtV1q1&kO|%byAxm|UGn_o@DWX3nA@)P0oQy~|o; z1!tOxKDg`ImAyAP*-U;+VR|N()V06mpcWG*KJCvbJD(O$v-Fj}eOb}#USOpeqr&OO zYn#`$+ECYMW*z^#^w%AsTK+))FItypwEbq4@bJnLgi8Flia0PWMQ}w=GZjHf0f$P+ zMgrHy&YF`@%gl!dA+fz(KaWSUdBLsf%Z-4HgO)9r%B~4X`tIWIuL@)l|1*~rwRyj2 zzU);2NqVZHH)SPywkUbDUV#OXD{&M^9@dWX!Xg58!8fPYasj#RpD88PO@sCG*g(ZM# zj+5#oW{`MKz==tnhuy(*-Wc1Mz4^jJ&l$-C^Ybkn*tctp5viN>$dP8F!`@yDA@&UJ zclOXV@8H(H>IgG0XBOU$Y%cnk1 zIQ1nAXtV2`!0NVY@+xxiAS$@ z#h(MBaXYv!_r+e~317o(%8PUFfE&c)GGb@^!(cy`plQGe?)!Pl8{E4$W=$(eXOv}f zwE`lp^L-Q!C3Oe*>jFHcBv`c_@#pN+>~i{AS~v15Nk_~5@Eca`(MrB_7vgTy-VPj& z$Rr+%u5+hhAsGceYfk9H@)3_H^^cFIBqw_x?chSw*e-?wvPeL{BLCG=17-5EJ*pRN zEMX^!{#0=x5e&l5R)zq;F}No`A?RZEw`WI*z- z*M5Vww=v+vYi*QvS@S~fo~Hn*K3z|cHUmwDON=+x;?d=q=$4k2wzjqmknp3e$p)YJ zh(Frip$4+9dkF@L5uEiunUMsnkBf7UT!;YNX1p|GC+TnYp00W(7 z{>7ii56N7sCNL-p`{~92qLrJXBOuRh@@kB#6LEPXNjY6F8YKHZ%C7k-~n? zEEpuswIURhA?Nd!CY{&4std==YBs8vw|ed4_WRb+XSUCLSubP*dV>McUW%8@*Y!A< zLMxbN95E$09FDxcoV83rCOzU9pqnztDX$73y%M;H`vPUghMA7WmX&u#);EIz2MXlJVfj0XWm)StmWalQ zi;D|P_1V#5$J`~H_kI^ubVCSkQJd|*=iPs^v$!~{^!mnX+RS0@s;mmB|Nfo~)ZO_7=IGq!1Ajs48=^uuUBywp>enathv89FM)}RZ zT;6!z?YW42q0?+q!80WW7lsVncn63U(%bxQlp4!X14t}=cc1|D zJv6I$=YJ{Dilpu(ce3C*kJrBN34D0)b7HIGw&R1ONBp+^X;V^?>nu5t1bezE=b-?9 zqGx0|NG{OpcExoxw%~hQnbSA8i^lG36*ZN_K|#+1z18|VwA0O#eGXXd}AXfZM`@^rK$zJGR)(l}rCOLyq@xJjJV zi2-Z-xkr#J4CJpi?hspNv)Bn&wR>>dY0%I)kfSw(BU-o)ZAISV9n|j3a1U{LDMFrY;&Pv2$d*@v6{i|J0BL1BN6-ppz_6; zM9SquEr&D7XrEwbinLJ=YsGQg5w9_HIz3abm}J!Dt9I-pDY5ztOTOMn(ZLI3rEBsB zmtfE8p*G$So ziNg>;d8SoIDs@;#RpE!=`u~?D9Otva->+OC5>bl4me;~oRl~SJ(U6OMbrcFPQl0M{ z#e6J2Q!8R%GUdc<%?)H_3k4{+FQ{fKUlhE*Aj`xfsN16E_bwrJZ`kdxMiiC4pkBCP zhe#qZC2>C4C^D@UG(zkRmsA;T1Ocdz9RFjbLl5R@&@=}XalE^DTMGa{h7(mDd6==8 zWm#zZ)K6HihG=NFCqqJkNSemD68!^(yaGb#S1&R2@%sr7nF{Q370&d0I-Q_bJfKHq zs7S%Whar?=%9JEFWwYV{W8y0-9{@4)=L=fi{Vls^O5mcLBv$h z`?F6S6j$ql;tXhhd)Y%(xQ>#MNNkRYxzNekIco3G#qdX#KrwVQq^B4D$ytZL;)?q~ z%m>Lo3A{RVG+7}4zN1sfAZ(f@=OfxBpzKv&P{1cFEF1}&zqt9=txGfa-|DFQ=(f52 zMJvE3&bB@HYbtt_qfO8y!7@(IH`C0>rZ3(iqf2c;@^_a`QKMK z>DxoHvQ+zY8|9s8?8mWaMWt+k+#( z$g?ltF-apQ!{4ido(m#kgNSc7q5~6lDan<>kJq22xUFd1rxL~>w5E*3_?kCYgd*O$ ziw)~!{I-`FbbW-tH{KU>k6nLS()bMtzV{O_f;5{}wsCt@C|DoPa`F5pt;9tdn^Xd| zqG9S16ROGd*QvtaQ;dG;=fjxjRJ-}BZltCBz41u9CU<5+lI2-R)oAPH@Hnzvozis{ zBvGU$lbDv)VAGSrBI)9PFlM{E(4$S_{kfa?tFuvUSZ1n(%NhdcL@f}}yW{!UI5PK| zwi(9RPS&WfDu2^D;%B^sNKdRo%`PIs-@iI8pxz}-r&=m>|6~xFF|HRt`5>Xn%s-@D z{>#ya0mq1Lg8iSu_V(=qnkJct1*kl|;kyT_S5I8V#QWOE)h2xL31GnkkJ755yMNG=Fn2MRpFpB~kW)adrZ5s=MBuQPaDb=aOmJvjt4ntR*CESK0W35F^?(Ea2k<@~wD>Q0s_#0rU3HFy zc1g%ZnH@ND`B41%Kz8BlgmKpd?vQjkbii!qq7eBO*fe=>Uu7;nK3)kY(G@zPGpNUc z?mPEw*b?q*+dm+(VIRj0{RrgnO9|rpD1M0v=QW1QLWUEObfqkLAi*|s&(?~sm4aT| z9B3j>W1+e6eX?4oK!}Av8kCu5{@Jur?#sUB9+=-LX8(^OQ!&KzQI^%k{APMZ_57ol zwBOV-*M)<;_CNAxHeW|~B?=-umgBxp2L}hYMleJy$-^4eSkU(N_P1``ny3Y%HjPA( zGJyd!C2<@K){Svv9*-*|bmWcb@`0;K!p=y5_)a5;pi|yi-Fg z$wf%lHaYbd+G?6tQbPsUFWErn+BS1V<;}ZyMBYen+#LLame=K=M0iGh*T2&HwONj) zbYPOvX>Dq|*@^w#t=E8)MwmX4EJY+F(lpK9usZ>i5RT?v0wjNi0_Z{2K>wqiTeN6P z>(Xm8q2|72ZkNhOu9j@AlY{@@mhWYta8OOSeq=VM0-58G*{sqYAJEvu#F^TBdmu&J zaR_j}9d=4+$d#WD@tQUoZceEXWTcv7iim;;mm+GdiypTpm16^ z-S8mnFTV{mRs02vjCS3RPN|B#`IXGo&8<9?IG&%6Pk_`L7k=ws2V_r|2+VJBZL{y~ zDP@R+wNgQwwC;(`LigtdfGOM~j2W%NPdLKB?)*~(PgEo}e`0cV&~p%#erZPR=MmBQa0@5SLxmmPpFBPP?xI~NSBeU(Ar6{&Z?>QD%D-}Ya^@TKZt;!z^~7H^Uso0$&13&uhfk9|q%N|ybd zt&G$Z3lY6Cfy$>lF`)CNxzbZki~dhBw!LY@{ZtiEOP{F*pC+=c{2vvkgRRQD8XTPw z833Wq$e7xrC!9z3J}T7<<|Z_HLSya+tj5|~;qLoWUB6H_kV_wZt!&PuvQo&}XgIv+ zN7^12(L41kxk*s`xiD;JPuTKVkGELB!P?lJz-ic~d_VjIzp0_3a?_E%>pSoi4S^lR zU}0n2BC+-AVlh{VVkb0nqLPo>#)(NI9H9O@nU6k>xSmPD9UWth0f@uTv9aZx zV%lU|rHcgrB`eqp8?fjLjX4;TG7|o7_@K1pzkuiUh10K0wLdvNw>)FMm?9wbE}5%` z{Wjgw3~60afyL=nj)p`3(`=MrJc+mEcz3Pn>%8_7y)=5nMkBcObZZ;+u*!G|30!+T z4bLbU?mMp0zguK0yZ%`1g_FyhzY^~gCD!{YW5**;f05QzX*tX&LuD4)X--%Crq7ql zIHF&jF2C0}KctK)jP^g&m@NyC4D`g48%S2FrPC9Q)m+64YHdZ@x0$2(lUuG$N@T+||B4s#tX;huMg+Ec!0?AdPI zbG0L5-H>n=ivqWnEKyo?`;Nv<^q)|>u0(dqeAiy)b-0G}A={2AoYfdm*k0~n zUv64ezB8zwT|@JwhFKLt^kMR>06qBE!^1|}i?%mCUE=kBB1}f*$oO?rlip(Oh0gY^ zEr^GtdX(lQw0xo&$ES~~G z`^dIF$GH=?G-5L4cE@P{K~@$8h^DE+=P(|}mFsV?2Qc(>Fr5VlT}cFYLY~uX1fy>-_-dm>_TR2q7QE`u##vz^ zLOz7Al#j1aO50z8@afXb&3~}}^lB`PIku;^-{vj_m<8Q=x6E#)z%W0EzhHIvnl2qV z%e$403`L#SNoj?A0@6vaf~CrDNB`$uS}JoK$s9W}NMf8avj*W4CLQP*kDj8?71QVa zEwm!5uH$T9kEpAXBY3z?iTuwz!Cy!j*?zCEiQ6;r6p@bpLT|vIebxH$@>)pI!tJae z$3ETH3`sg^a@ubX4`2N6Ci4G7pMVhniHBu8?{PPDb>iwO9b#@X*JZ)ajdh&2$2#Br z7~tZ$^1lu|J&}KidZzjXz+H~@uFM1{UR|Kjef?4@5{{z~f?yKT3T1R&|7}tL9?=n* z$VW%7kvu1%|Bt=*j%vF5-b6!3MNkotZUdC6^p3t3lp-plP zLQNo$5W4i#mvqT$p@5=j^lhv!DI!b50&NOFsJy z>%SUMayG{zANHok+#OtGH4(am?{dK{P8Fu^W&ZVwk0MV(DIfBbOJ7rvAv_vG5Q4UP zDe}L)I?Kf-7|oZ>XUo#WoAo=q1Q~CUEqejgn)0Al$<^#zJcN)+(2jcb)b@vkj~1hPZL=P}C_fpSW0uHBbhf z);lhPio$L?g7)?4TZ|0H3+Wyo!x`w!YxkpPZAYroa6LUW;qaHHP7$yC^?^46A1?RO zuCsK&e?zl#EVk#4CSw{>mPWa6+1E+~(!TV~x!%5>PGtEiyUjxWT|ogv>bCpukw49c zP{(BI1=sI=91sy${sl$3eXcO)Yg-hyQqXL<*HZZ(e&ZwyNfN0*NnRHk!N{)AlHcVB zoQ&>l;laSMa`w%Bjm6SJ~moIxCY7M7!%{T!uFBegk4ptk!&~W`X2nIOR z%w5qb80w4WaTL?$-p?wbC&>}b$2|pP!c2Qz11(k12@HWIYufMSAIQclxtiq{=*iKQ zbd7D<;+0;sijU2kZFAo4F{K<>vH}~Oc=6?nfLxOM*p%Ch{dXXrJ5BD?^OrqIfyy^y z#lh&0-v++(5AybVoinfeC7k}Xs6fg5Aj82Gs@AVc1X_FJe%~5$j)YprA34_i+25rM z{dR7gtZOHrJTm}7aB^YUb%E*oFNXdeozf`N{UfS{T5Ji;QP=OAXYTsFqya_`3^!+^ z%mpwWpTMOA{*#A+kjWL@XKi7zCutVcu|HS}_p2GRIhiuZM`|^wUEL-0WMM%Ivj)VC zzNsAb-_zOs2?*i0q`Su-22P)mkv=_5#dl^>7VJeg;H&ee(VgFxICYe5^)GQc>Z9jW z&T5xlK*LUu95i`t;NW_|HPFeJ&OJ;!^L3kqm&w}Vz+^AWYE9WDgZB)oIU~GZmC46r z3w7C%b8T?MGv$x%T`YM%`|p8xVQas`U(S|le(CXSfL;lZv9oXx;}cPAR^I6BVH6i= zoaYY6y-l^g$590IwGpVY!i;Y@DR?*M!OnxSyGwW7S6!TDD1wqP=!}C&~<}astpI53>uT>N(sH8w?E%jjV<$ z;dDJ)rIxRSLRNV_AKbflFO7&l%Ac3tJE<0`Uk*t8nX3=y&2AbNk}xV8dkyYTHWp3f z6CxaJwqGN}QXhTv#Ve4VA$~`X1tDWY5j&p* z>d5npZa^jbyR?SO30D0mV9!Hs{K}Mz(9@en-)5m)=?`KB4H1BZb)9(ixXPkn#l<)d z=&OQc!lph}kmv8IRBfbi}mE zGdnxvkH0?&NPPy;>PgYg2_O%)U^>o-t#jy`AqtegVhCMu zgzHV=byVH7=g@7hL6i)~e{cLJ-do-U1)l!p9}_Q+D!I|5xjJSFz`B_r=dSu}z_0mVQ8sESj^gNB+39by1p(VYfaqP=HX0E4-AE|0r76iY? zGBXXUp?HV(KkB75y)KRoe$j{^!odCcQc_)=^4nA8GRb!Kd%&O38#qEgHMK=#GiWkgz8RY0~^e&zMc?|-pb*5suJ%}G656!z<}cl1Y}v0V-zB(x3p5)^4x z#^*W09)M&bI)JuudX`qYN04Utb1*17o`yqi$b-_$Eu%2%@F~hYa9U)V%C@hGN}H)z ze<@I#)`SqoNRlH5_aF|%sVNYI=)C-_ymO25u41mNeNkB5vC9lUNg>rC$w1E?kn(Hi zJ6rYIdUloq(hYi_bAp~1pU_KUOcG|uxHDgR!@N}0jIc@-qz)l-JEos zRj984(o5fUXSKExN_PZmXP55*;5Tk7943ZDmJBfXZkAp8a6SHl)i^~fLOH%w%xC4pm@3p>pgUTyBH$%_Ao|6MM%u zk5NmAf2S_RkCJ3U#*e!8T#0l#^_g{Lw7;xzV|;k zrVAa&`<5U+)kB8kEH4u-NS>cz3Usu3MbG+B>Zs}yK0$v3iEXwaPMHwt+BPWj zEsOvjN|1Z3$Am7Q|K8b5^K0YK7U(Y3E$Qmx&cnhlIV4iIyJIQOHt)N`4FRaUriRB1 zISGGfG)R1`Cp(_GZ;UR-`h@~;I8X(|x=PcRtVks1Z}m4#{AM2Lb=oaJQO$O3yO%Qm zBH}n5x``YW^DbuCs$wz#7pU9i(Ck5&;B9&sBT&R8&Dc?!*n^kIboUo5jJe{I1JYUF z{O}0e=P)6dcLc>EBf(lg{CGk)Z2LHm*J#1wA7nfh@u&c}d%9h=-UrRkQT}g09#{VcDd6!}wP!zBnzQi) zumf3?_tzW)q5vYLoJ6{E|L<4P9JLv5W5Xa8{)NqFxL zQof5>8Jih+=In8M?yL#K7SYQgpLp$h0K1|kspMKDoh(7<;rvU_hJ5OYM<+Rj`EUII z0<;qZ0W=9g_c{5mBv3ld&I$YesOS>*1tITp~f)>r!98G?7j#JPj3yP zWt}NokRB{T;#lnVE}O|QSu|4>$QTL%i^OI~H*tcE70})`Km1~FOn=iEQ&#sb9oCjE zaYp)|T`!QVLOj3O*ThReKyU}x{Y`;?Q+ILo!kGP~P07KhqhF?L!`El?E+D!HjbC`h zlk#GLtPydm1+f(RG?oW7mZq1jwk;pz3tLUGSX+(Ct6&J`NErpQEnb}0WqCJ zvrm?h>n-&vtj5Hoeci6jy;$6&v?jhG$he<{5i6=PAZ0&wlDz2GZU4N`Kr6hRDJsQg z1MK(`CP8!do^|F28S06jzgH_h*rd+J zR})D(=n5``K9O-gRqSlMEv3)Mq=E6g0@NG9^hv=cH#gx3T>}LXv=&{21?2$A@5~C6 z7IsNb%}Z|&TuMn&)Q{tMZ9dfR8d;DHbV=u!Cy@B;ul9iAEPK3CFMLiHm7wFM)v?s*isQL&Wcsj4QKP79Adkk3J34HeB!DqgePf%g99C->o z8B8|#bTPLZSX;39-VJ4MaI`YgLBzEs6xs9f|I?hr29lL_v9uh)V0umnr z2MUPxXm)ZZ(UXiF_m5hi+QjmF251LN|B;DQ5`Pj0zXEPV$M4n(h-8_++T)byeTBcH z^JkC!>h>aH(U^4L{6A;_sU)vKQIWj4>tnt8ch$v6^8D$4fWiMjFus6(0_64Iyouk0 zasd0!tuW_F2j2bb@&BM>NQD3q#d699CdzX67Y8Q&3o4izoyv}|e~f?Qq7_fqASgz< zLs9hN3!uk?yxA`P3OIG|>=<~$CjL@J{Q!~-X!kaR#{~-qlophdRwwTE&q_VM|}4p2IcP_GfU*#5g}pIUsTLdHfLPiwlJwcUjJzRPnhAn`#g=|F6X z(&pZCH5ucj;U*iOULWNe5`x{!0zLho8_vZfY$h~H?6$Ns;3~lYRfd)QH+Gg$iNA>_ zAQ;#@JL#LE%mQ09i1FtERa67WLVY7=>Bvqu~KT8l?x>iHtTl}oNetNeJwaNthM z=iO;}b!|I9@87-zBkj5EK68To08XAL3~XlPPUJ^E7z+e~^Q-*#JJm01GR9(yU30Yb zSscr@5Azn4%fYQHcHf`YTp}gUpYJyz8_0@FrTA?N15yE-?q0{`D`t@Tx}7MZA{56Z zrW8$KEksxIahpmOXgSVDe{;Uep*nV3ca%E@#2vt{)DLW0$P*{eCvFri=t8J8B7cmI zIT#axXw9U?(KuZkJLLNvBLF+~{^)L%AoNbIyP8n~qgRrB_%tJ7heH)Hs8cpFv|*J* zay^25<|+{RmR$lQb_nUgH(w$=^uJiD%?eP_iMzo@Q3z%W%(vZ*-f=nfQ2e{VQzlrE zro#T?(r@A=sVs$FQowfWpwGVR!L1sg#LPja4ltpYEOw~Q%i!~BfqpLlO>Sx+&r3p2 z`{a3>C8cai(tBrXnmk^$r|1i)v9PXQ6c4{UUJUR&vGVw_7hjdXuH;>aB>e~MrTx%e z^s%sqD2V`UfJ6o4yI=i4q(cAo`{5AOQaJ2H*Kxz{~V5ep( zDXC<|E`$wM^Lq^eR=CJ%$@O5d<3*q-U18xW&~f7jgl3tqi?3}e8CD3=rW~&UZVKSS z$Ub1@Flij+5$AOOjV^lt(HgzdjX!=t46 zH*MgSnohGaaVyLg*(mCcoXH(_d;~z*&A+iGj-mx5GX^xqp2IYAfAY3GR`>%X0|?2# zD=6UcAF^GVii9KR(GdWc{Dv@~^y30Hq+L~vhr4&}w*|5t5fhl7}aFV~_d5BHtm^IVL7;9i1CXv9?E2gHLWB*?@*I z6k1@;;}Z>F0c4ECKwF!qiHD1eOITQ#MnMEP$I{r?2%LpQ@3LFIn!lW(v+nrX=&_*vj%#4KI{r+ zz;k7@hT3rz<4KN5>VtL$>?NpoyfUQE@ z_)Jm-Wdi~&P_OK}uk&_%DT02Xbcjg|3e+DNcmaZM4tPX%yW!#393hes;efE!L6?m) zMJ_^Vmh)Wc=85mrXv0Feeie~FQ))N^Us`t%VapoHY^ye)@xuXHveLTdr}XGwE(3Bi zVikIAo->?%mWe~cZ{I=vlgHGBg<+0io$4XZvYs}sj$E*WFn}0G3do(z;?1i%t;V)W ziHU)fxc;$>&G0IL@_r{LjL>WMVKaCCo^=zjxzKA($UxsOTm0HOj!3Cd{_1{hXWnnD z1o!?|{tU>w3=|m0>X+eNP_r1-c=gK3h+a*BERd$Kv3d4{)RRg>lvF2Ams5$x1K2!q zw31)DsZHL&`bCC2e+&Xt;@4X~T@6V8oT!EhxBVFC>Q)h`aPstTE)fi8TYNU{63s>u zs_)^bU_iwF`i68>s0bSA?;-Cko}^oDI5nDBee%Amq&g`p&T5{{5hw5Cqc$n4&%X1^ z2u$bEF0Fks?PF3w$8&jdEns%Yzp~oC&GHy>7mCGyIa(6xMZ8=FOIkmqH0$Rx^AW}U zhj1p78j&5hke!LzO5u}X9! zI7VHTEyvks0tz%MH*H7HzfP6RamQ)^_dB zqaWBOeCw6fimzRA6mYQV=_4(j)D<0nV~||h%F){v{0)^kcLh#$pk{fpbPuSYfMi*e zWj$eGZYx<@7tT)U#LDB#Fgh@Y#VEYb=&lUsNrp6OE1lHO4D5%Ou5Um1DG>D>>{7}^ z?o<=}ZU3WTuI#j${qINq@=w+{0U=(8(`_=RCh9}`j3#qr1M~^E^!6jnf1B#zN(Hsn zW^9p-pY9LF@k=AZ24|_@*sD5lOZ(|a7LJ_pA0lWt_);tM^=Vyd65| zlkDjfajXL!xn`LK_{QylDStpSUDBUmFOAAKaT6^s-p-c<1SP`gnKU*RZ2dXpkGN zlREA)ABEN|3zYQi5qufm2VzTqP1bk*(uuQ$gJNv=38&#w$;Y|;Yxn;xJj;y+D+IrT zn4b(z4?~heI~264$xJ6<&sWbvT8h*kLVR#{{=HHd61yyDfB!(?^rdS7z9zr_d<38` zdw&6F?Oy;|U)YQK_6tHs?=6m5N$$e-zq8QUs_>o|R$$2ge2#j}epag6pFf^7*r=V6 z05>>>fdrRYm`z55dlbUb??U8$FaByrRrVd*wpN>^V%=I6S_fw{OVZNC*%B6`JK2ja zwt_LMN+4r|Wpi8kXK&PH0X~V_Vj|*#H${byBlvO{ErjMHJ|_pSXFe*b2_U5@NCH_A zBT0P%d}w4>eV7R|29`G`fKR9yf4(nX1d}%9IgtoctNO6sg z{XFB_YXQ;6N6!NCto}mG6usfH2b0t$>Bn2GzVZ!~lIv-FH{uLb7a;5HDUF=VS_twi z`L4B{x^z}cOkv{3Bp5R;^2k?SR}=C*NI3`41dj8U`Y@2vl5@6^S&ygi-PNk&SYO`~ z*ca&1y^@dJLr1B5?7>L~u_IC1i@~bZTThit0`t74O2ENR!q~ksRcAimr}YWbUuie< z$m7!Q66ap&rOBoGHjs==)usRa!sDcjI2(II!k~WS6Vwyf&#TV_$c`sL73cwY)Lygh zk8-z;iNjW-pIId~Vr(NzVJ2ei>o6u@uiJvmnTdo0Wt^RE8Iy?1>E|M@^yvI)Mp{e;VAMyMGT=FR{>7rrM!2)8i&I2|=lTg^@oBUbq`cB~ zOv-hAAFuAUaENAHJpRTV9vx@O(*E`~p7weXTexyXxw_;1mfcxe=(Ti(prta&FH6G6I>$CeiSKlU{ZZ#9pyTXkgHlyNZEbHAZSro#t#FdWPc z+b1o>z5=SNUk4aH^#Rz+Zg1GRE!iu~t{T2?l^5#ZrER8WGyYT|Ys@6N%}nj=nm)vp zAZ4UUaAt9^_A%ikn--_-nxnd9u!#tUlhgR9*C&zAOZ!xeJ7!Q*y6BztG zgk$f8sH!aOSWYu*n3IfnvDqt+zXhQPWLDk-bMTOTOv3HeVdJi_%Eenkn$KWQz$ zi0pEQ4zG|Hc(unw`(C-mqae2FXR7qDrR@H3s=p7UdOf&;Ig#WKh4BBq{f9x3-uRlVNbI*a`UoMJ;o^bXjwsHZzulhTXywj5zP0G;T9ra6ZrW||%hy3!! zE~4djPK3@5O#q>PpbES5J>>${lq7(CbiZ00BN^e!Uwe7X_5s?;?EV*RE!ZkPp{=P6 zHtix3M&_ei19%xxBph3ukCy~eDYTNee6Yq5({7>WY2#&_=-RyP4V_7~!KMlLSDtme zv>>tnGad=ApgR z!`F(ileuz<`1nvUcD^wy>Sr}oL)Z9---k{g&b=GnHP~LWHyS-2`&JIE5rv+sbnz9Y z_$IB)D-4wD_L03(Rl`p8I`a;Q@i!w)-6i;St>h;-GTZOn`0R2S;xqU4eR~hHWR$>@ zZzr@SRr=ueqZmqpBL-dX8gEEF5!4{AHWK5hei3btly%R3mUS2&a<%txs4g-K*rU>) z=}0X1$GT!j5)!omAND@{!^gv4sebRx%=^zp@2*T956-$6AiDJk^MMVei43LXTA*l? zgOxanID|ePRsO0kYnV;92AlEr_CgRV$^8X zPPgfNm4eqpa__+!#4E>2XCGUP;$T`uxv~|hpgw;)Rors5Vs9C+omzfLhEPy{vcP8n zGBc{D*@OsE{xN&V{yU%)QbAh4UIt%bt-kT|CwPwC1kP1Py4hf{%6l>{>jEQBj!R6Y z8?+{Ud=?n+Se4Y5zXUf^0N_kx}CdYNr5 zBNImR7%A_ZC)L?Gp2k;d68`;T{CoNa6azk<@{K=0&GN^ix_BkP{G>n&J%=ug{55#c z18S2&#p85%l{|m>|J`GgsVBm4c5(A(x{5ZR3%gwS*lpIv{pOA0@g!dY1@wP@4F9RA z8ELK7`NG~Oyxz*GnAu9$P1{-!Ih9#+Z0WAc|1q2XhvxIY^szjoyVY{~51;t^XgRp} zc=$cn+lt%mesMyPbpMOJ@V|6w$d*l})j`0YyM{n&dyrb`v>zpy?Rj_ z@aFnjir|w%{(|2dTT zUrEURXUzNmnLhRd7rVuNI^I&gTL!R9<4iK0o;B%cZKwMNc7D>o81=;bk!gV|JpNp` zejYtU5tNA0pgiV>GY>$`s2$SMD{gXiP}@4zz9d^Qc+Y4SefE!B`wvx(%w@k!7m&;g zkX`q4=&5n%L>)uJTpxJhW+)4pPWcc5PqVWXd9Jd)HvM=u{vQEa+kY37&8Mx7C@FET z>sPK5i0d#;B`jyAfYIFdHmOed!(BGG;mQ}K%1h_KnNQwO!2ABd+G)gSp?GslQ$A=JlEB6VZlv-uv z3w>)l1pmRk2P>k-O3fW3z`rpQG*0fShUq$*hR?97qrj~`v3ZO}Wr7Yjp?1g6x~}gB!c#(rL-m6eQ2%gVu1>u8*$WqV7`)z zSQ=vKL{8ab$EH}*mqgGK&Ba1zN2daAGD|fs>S7xgfe5KiZ6{BnJ+2LY9wp+V!D~Oz z%ncc-&gKdif|&bCKGLsDpJga~2c+>54o=p0=Yz5HRv00ja^;SF zf#=8~Ho*#?RAKm2@N7}haOV!^@dm9w znSgaeaG*_JU3r$`JNFHZ$Ao}qrHrBiu~m_N>=3)h~Im8zfk z-;o{uC$O~NjD(E?9CJLE4;diZwyOc=26W_3el9`O6Cn$(0;Ib-R>wVzul*OQTo$}u zH#BOTN2eH5n=E>)kx7={4hVdr*hA%{@&R)3*P4FSrmu1tka$ME-l;yAVtl_YB<4y0 zmmY9BZ*UhNDy0*DJ{kqdbHu3qDy$bu?&p`{dDu^>;DGIx__si}4ksF*F5D(T;RM{g zzkcaF`mQB3l-QXN!n<`==y)T_mflsJ5w$cgO7q<}2~32mybp`t-(XqNj@iBg;z@g% zr1~gaKK>F5bN1PZfPv;Ih_wHCreo@YjG<o7GcV7i_9M;^6{Ell-kh`(7o@z=b zw=o~gvDeH=yuQ;P%*lY+{F%&2zu#?qxRY6VxYAiEe`uAAf-w3nzpFgRO&%~N?#vi- zLbBA13o?O!2Fx4p?fWLbU%)De)?YGvf4lzrkh0@}dXZ<3FCmes*H?e}ZGY_{wmO@5 zX?IDV%=nqwh^o-l*{(!>;gSWFx#->H?055FQEg0_bB6Tvjv0M;VyEEa^zS394CHbXqh}txM$@Ni&vn@C&=OpNln4((E zixT^j?(t{@tFhR7>{;!^WLE0-tzpuMYh>4MV}o`Tom0JHO9M;eON+chKF-_NHp3A7 z!yX-e``>0wWoV%TiwKw4@;Zk|&8%zLnn|`hY$YQYWZ%w!bh#M@x98xrK3+6v|)7-3Tp_^6`kol_BMwVGUC&e)PCK?!kSo z;r&d>ghzvrtM0@`(S`sw?rkHlZO&-TUM_P@2^MX=O3Ze4&uB?}tJX;A$EIv922*VZ z4Fkq+0&W3%x~45KZ*%LiNqAK6w;D;KiHxMPDp zmlC5f>Ej2t;0?r%UyJF}Sj#js)$D?;E8D$b==V(!Wx!-y940hc$Fx4x?1inX*!^ha z_d*C&!DKuWCbV70bTHNIkFBeG1UgT8mFoV*5Ycn5E(_nSef@~?JndD^`}adWox6Lb z@Q>QJk7&-bT$Q-*HuAVApJNcNaA}Y7&GNu>v1ZA*4V)0P0>i*o3r14(kb^^}(}J5N z!?AgTHn1TZ;@$RdsTns;Po%f9>h$CUD*oA-K}M!10I}QsC=@#c^*pl~+D5JN^UP!9 z4eqgX#L_mgtusYna8UeNHl)FbuIzo;{KOiV0_kV>7izL1>wUTU{rb(L;`-WA#h(uN;wWOH3eU7<%s%9qzt3gNChAS(bz%{h~njfpkZ(*v7Nk%Ld#_YJ<>RjlB5=*2!UAk^Z;t~>)i=6%Y z>L;;@raO>fYvMoz80;}b0IoYUh7BKj?)_;}v099Ag%Q2Kzob`$57)pCM$R zaPyUb%-VP%0jG6}d8%l_CT!K7e~e~3&laL8RBH5GYrFM+8%X3R?t3Fa7E0o#2mI&J zwmBNv;wwgFFEa6;ptD*=ub&(Ad1s&BAl|Y~;om*Xrd}?p1z{s~k5t1ZhoOche-l?)*FreT`}$@snI=Dbwj~{Z7|J zNP4&ZdBL@(uTH23`?9bI@;(w1MBS?|hcl+ z^tW7CEJvFn8aJ%#=hWu}M~k~xr=j&XPfzrgkKQN9V|%BNV=pGLi@{GG4sxC;!b&5X zr+Yl$U+sg*;2g9AF5hQs!>0_VXr~;e+NQ1?FFpaK$4@)p#i7%P5DL&tD!}aQ2@FqK zAQl4_GXgO<_A_C!Pg(YKt3DiZv{^(nq&g5aw%iRF?TOBwkm}_1Q6`L>LSOTZK3j+P z^CJt_TvH=j-fewmpOlxWw%01f)}SSK}*sl?=J zXF}uB7mR8s_$*tDvD31fkBeF#J`u+IR4+qO$>wEsb2UO|rD-PsXc;V{s1UVCCt%mj zzFFefP7V1i)IPMVEZL9LA7D4MSwVPZcOR(kY>Kbyo6MRZrYAP!k{I{>v<5lp^#$gf z?80lX?h&ZpmY#Yl#LUkWY=7WCLEFzxVuz}+AHY52gvfZ;zm8_j#mV5`>?OEG%HU^n z=^?Fd#Q8K%p7uhgVr+!tb`dtGwRsdjxVo|y&0IF8_ex0!UTJh7;*+^Q=Kt1yF};S1 zqOX55H_(8_@ZhS?f#Y|hQl4b+hK>Em7gXuMZW%>4RZIMCapz~A`H(nox=6l0R>Px^P-Y#CjP$*e7QKlT+plP`kNEsURwXCFB2HhoC9%l& zK-a?o{_lE`JbC3yTMKjeL_Jk#Gg|Xerf-~0g&i=}#kt}sy zt>HTftc$mKs=*$m!#Pj;<1*=3lccRK%?MAYbw{Fh)GO>Ek_a3XRE}OwlU_Ebp?p|H zW@6HV?l4Pl>Y{K>z2n@N$?Y1sDv=#>RrsldjMJZO*l$_GiD`!Z^d9)|aeu#Mm>K1; z-$Q+Gh^70M3?I}{+}j_C{n^hN@qTbw%+TF5*S5!Kdl3R{pIm>z%dh&h9j}q+U@qlV(>eg)g{kG<*_W3yQz|IX3(XY|M$K7=AYa4fhh znz5lj$ZZ}t&oca&Dv~YvHYEMgH~@w87GL~DoLBp&E#U)&CBq84rYckO~Y5t7bOO(zz{7ZE^!5I{%vd`k#~hSAv;1m#*3~?iIr~;_p$kO_#oQ7__chd z{`Mr{!D@@S46>pe+P1NjxZWx$ttG0^;IP1ud+*3XYeECZ4~stNjT+KSNHJzLB!f4z zA3xMLP+OMv_sGT#UMp~Bipq6Js>x!;O+d36^G>l=wENUCaJ+BSeml<@ zQoii6T4-w%H}I|JV~w?hVYgD9tT10iVfKhflbmpqY*+J0cXPzcPu{bA;1}#x&Y}*r zW8LaGYJyTuik7fs@S;1`@*{L_u!1SCkNDkarC6c#(SA`_?Ez%{W~d;4rPdVyP;L!R z=JpB#{;@x=7Yi3y8P_XW8^<(f zbV)0A{kA(upI}i$xRR`1u!tShj$R&WZ93%|gPVYu9W&@&>WL(ykU|inr|m&QALrF- zor{G#+M|IyX^UeiQu8BP?r@}9WzvM(?!v`X^Qd`#!VB17KmA;>bhoA!Ck^YU5h&i# z)p?!T=f#!_(|89%UvRki3bC`xp~kk2$Jpu(y;`@K}kFJ+KzNKK|{6#f|zcUkro*|tR{$aCmSTpR9^0M zy!(3Xz-xTZxk0s!J>Ij=a*Ww=y60(gb+P+R;|ks-iRBd@)^41OgGO5Lv(K2E?qExs zb}}kyHHF2k>34+g1GWqfc(PxM!^i%lcT|3)h<#|*V+U*&Jyx-OM*5Ap{n!Kd>i2g(6hDXeTXQ zFc~yYs@IH1rOe)=B*^UAlo~gD!NRDs^`JR@=t5uOPQy;9XIUji!yCC_^RR$=q9q{V zC>f^MvJlnxyB+Bu`{MCe6ih$1L4ck~EC3 zS{!4ZGK?o$MvdNG`}(=qRag7ddyvHux^%OXjC9)?6{S2WvGj}=eAS22mIwfo=8Y(= zTRXEkr_LoUZKA{HgG;C!u{tXPiDxF%9=;#?-m_<5&yxwP79ez{X$GRSKmELeQ8W3J8w7I>;N9t1FKsbQr#^&?aN^(SQv8-CAfhl6-~Gvf)U zv1Q?=Cg&N-{YiaVI`uuUjVC@3d4)I#o+|iohVpDVQ>I$oeVkF7$IYff!KR^J(^z4+ zv5LO_pQYCo{O|f7__eBROwZ3Ii$ur^@9QPCepiQ&ts}N&8W`u_@-+)N2$tvHl<_EQ z7>gSvV2KlqnbIE?zn4xR##Fw4OO~n-)2p2Cf7Ev7W zZs)(-W((!TVzLV!%j!OOe0*gKoHMS}v2!VXX=8_LI(O=lO_qBsg%7S3(rjE(SZ zneht1FUhw!&gC)%Gf*+9T}k?0Gv1p>l^?CVz8M&FfZdKvx>U6Bt|0rpCVf;L@7d{k>wlYa4W!STYHgwSfK z^VF$S$#E&&+n6k<%$9p)Iz00a$GSlag1)w{$BTQ`heIDXv*mIcJaG+Bc`~*?XXrgA zP2AeFDtFnnY+d{5vW)hv>gMK~U??pFA-qcf8lA_fV~-u!>xFu+jOGtrJ8(Lfy|!o$ zY(O*S*fKI4&CLmuC_JNF>mn!?o$oPa->SrxJivAMwMSv~(dO&+6tCQIgC8u#&kqpO z;SBM{B5*(NcMYc6E6MXcmUH2dCaYrZfIx{iUai|$arrs;Lha44Kc6 zEcVCmAlS}^JPB_t&3Q?F>!?uuyy~w+axnTb%2VM`>A(k0Tk1qWIR`1%LPxhqFyb~1 zo>sCv2{Gq7HimuZ7L4|C9Om#$s4nju?nqXp(r%K2$yiDmd%E{Y(vTUthX9iu?wk9Z zXDt+}`aQkqfhzMa}-b41On?c;CxYzUAuIV2Qh4Wew-<1z$<^Ak25Gt`Wh# z<@dDTds((rs9EG(0DK36YjB@>SKD1eEJtjDk}9mG!E_3H@wf~*;p&%Vg!QzXcjlI7 zF{G46;XbVu%NNM)V(ssO#gn~iHwNxCj~sdy z?-?7hX4#aUL+r<}nCN{%RAv=_EnIdnxBg%e%d32*j#o)Y>yy#paOll_MI1&U4ejagl0``tcIqr&&I-{jf;89fgk8G0b8SHTPrjr+M!P4 z1h6OM;A#MloO_?kK=#syk{XxBaMgA#eK}p&Jo0(=e6xgtCThEPBUdO^pJ2RKAKTQo zRf#$%poe8k_%tB6jAcGPTaD2YSJC7|D~ha&1{gyuAK4ow?kKKV7?pnT#s-N8xr*M- zN#cHAw}a~?cM6!}A>b|T{oLbvF?0IH5^$eZg9`h-jjmatI063`*xmzEXZT|^)^M=P zswcss*Ld#(R^MBKNByZbBUY@0DrTDo9D z)!?)Cw03X7VN;VsT6etBj@M*p`>AFy(bLgr;*JqrlmlT+q2# zB=RFwX(~J`Lcus{Yba!mSX4h(x@&MD`PtN_lAp)B_JU~f2F}mrxWltmko+xh$Hp$F z76)>CYkdtea@ahtaM)?kJDR*?{VF3`Vsk0$Duy=#CN9(}i)o7Ni7D%kLG)?e|70Bb z=(G{@v_0Fb`Nc^oi54@D@54FWc|ldd7UUcW{u}6G`X}lH_RRZUtxlt2dF2X+jSg5} zwe&<4-jSR_K_i^a_D(~Sp=Ag$z2D$Twj0Yc)DCuIyFD7psRM{JF3s~w+VbiZQ#UaJ z7&ty@TSlBivW*f84`+YG8!;mnYD2Uy@X-F$lg>98 z4vS4NuJAdio0?z>y_Y0(%6~HcrpSAk!0E?^7*2RCp9RcyKvHv}L(GV?Wt3R8V7LY; zn+=peCGRwqrcVV-I8TMBDR;vPbKBkH+=hPYwN_5`PGW=b@O5 zG+nZm9-7RGRW_L>hw>@%3YIgbugO=K*?AH*0d8`We-x+ESEgy)x9a!9ZQ7XkHN3}K zs2=5>Ep4T~n8ni^vvX5l?5o{&k$EX8wV3#&ewHAb2KuH#G*VP}csXO(n%oS?0GqX$|F2wmfZoChID1;@G{bDm( zmB}`s__(+dym{Kkuf4hB4rfiaBk$Uz2@K#rZCm?jH*=Eu=@XU?-lWxw8BpZ1BBnmG zS46n&lT=uQwf=luzv75Lh~_-YIcx!11N3zC4cAnGeFYH%!VcXW)Zg*2>y4(6ik`wm z@U}5n?uz$}Ix{_OQ^UNgLHCsX9C(UDHG`uTiZu zWb#QaBSKY1{G~<@QP^R~ZPVy6TQfXzV^T13!GWORC=(F5l(d^$=KVdRHXR@2y1h-% z>|f3fwdaElY4jN%RA_EyX)p05D~oB%$IkHcHH!0wK-{>)dW}(G80w^ zY4DnCK;1ZXuUN?`DQ)_8CZ0qlW&?g<9sO$Sz5WueoJ4}z5U|ghn6Q*+u{Cnw-7a*o z+aDcq#sH94;)ce(rn+4lg$2*-R9+>E%Qj?X~4|qS(Zj8rv=9#Z8?nJNfX;{1C6*YMx3_ zJ()#tbYrj@^Cd-#Y||o-x9JX&%#N$fBEvV`S|Xy71zq<|vPS=ewC%5|)u`aZ#hFgl z{7TXzS;PIxY#Ew~Zg z^RGm&(OJBr6I38fWaTU5oZ1^jgb;N(H?wE&;sn<5v&CSdm`zdA;RR$r%_?N7^=!oG ze$<;TQbz3s?o+P8F4x4WW6Cz&BhT^#)Z!iMiAh zrOVkVuUJJ&7vDHdOHCeN_Bn>X(V7r*N^4Ff@ewj`$(E8PNg-o+q9Y%1Db4bIy@Fi- zL}Lbi~^IHi3j zB)B8}gf}5UEfs62-jy8^`*oIKt3;c<8j)qZLr8~bqqwY=39~oYcjT-YeBf17Kk=|! zlT%Ra@z3Gd1V^S1D6U(bQ&u@2Tz5-HN$~%ztE=#ey6v_zv~-7bH;9Ocw4|hjG&7Vm z(j_p2(kVztjdXYC05WuUch}Gzm-qedx7J~66EiPh z*Ouw;e*H@)>OC+|q}O)mo(va_0mE>~2O0 zLGpe1{st~k+ueAfA$pPhynU8*`9xnMKDXgO*K6&{NRAaUov>BX>IuoY>_kKk$V~Gq zmF7{zr!KqX-#vqV?O9ZM&kbLTYy7Obuy8Ls8;i~ntzVrSQp23cap?oDJ;(_Y!ZR%Q z@P)79cUQ@P7h0ZM7xq7PB4{P&>vtfHj!+?Z=mo`sX2;!QqoKD*XmG4l?GG=mv$X5# zpKMFd1X2K!Kh>pTdOLVix?J4#T>bobHx1Koi+i^AtT5zSn}+j>gkS9uHw@ z!pd4rS6&=z&?n+&f55>BLreGFG1hl@QEf!>YuEz?kHN$9E88L3F+Nd?VE0Z7pB~~c z6y~vf+^R~tAZR=L^!%{U6SlH!7vlZV_3JO^QzXOzwK3TuQCa#xBY{K4Ew4tM$o)fK z9ob;{i&uEcRhY_#>tupYMjO|5tidYo*E=n6Dc`G214n#EHb)6Zos0HmD#rAD{pZac zs~W5U%2Rd}gtTIHYw}O}88G3EcN?v|2Nz4fZ@^I9`>~w~`+?zyudeq9?zkf`^gK9{ z-2~58>G7elb6KzR(cE#xclh)gUN8C$th3i*pLw<5(6TI6JI`ILFFvWE!d1xCG@}XI zOt0Cbnf%Ni`J4ehe=7<_KsTYw`@3hQIYTW8ulHrAtP}0f79X@HHS18iV?QabPD=0z1yDyI%w#J?nVAWO{u-a#5mb1!B^uyZcwU_&u z>y@Q5R!HxprTeAHXI@G8$`Z>|$b_onRcfCuG|$E?wjzfa(p(Qy@d zYo{Htn8K+TMkl{#*Pn8X{}HhEnfFD3#U;yydwPfOC)?%}6Ys3fUhW?A zi6~p7RvFC+;>xYEAqmB8=Bm>_5(I)k(IbP+tG69_kkx5G6;SofwB|3nAX{|Hibba~8ubNttO7z}>l zecr$>d?7ZIDQI@Wn@iWSzY(@zEwVT^o?N+g7z8)Y8pA}wsI9+L$^BZJq>JF zA%fMeYgc-E2Ww`3*RpBt&A5ciU6uaje;&T_dz;KxcH(z~L}JZFGYN8S?en&o~)Cx4D5BV{WgJEAqZsxsIlunx%TiA$S5vRmt7qmE)Vl zu{O_Y9(^EaV+J!1^>WCHuJw}Jdp4npJDUjoy7T6$bph0~jG6 z1av$VI2zHlu5u3K-Ia z2;BO7g@EH!=YFd80ke@_Nb1EL-Q=v&wHVr`Gg!7{yW99 zkgmlnrL?ql_F+n3I<*|-Yo*7&2}sfWE&BX*thO-f?b_#(XNM@qURwaNATK56S85am z16jS8;XmS)sPBdw*!Eah7Pzb~$Potz2M$*uYZii95de)ay+Xnl*ZF&nx1A;qhK`Ko zV813`TO~9xSgms;5?6+8{VwzkJ_ZVszXYBB4{nCGHrM@LyCUGGO=2}NEd;xj8FIOK zRn+4CfMoD_@@%}DE9EBk{9K3_^B&7hG9!BTLHTNIx~rhyNmeULTVSxk)NIowAslcg zYYr(n>U8c1*%p>rGJW5ir+mY+G|OV`*!IRa+VghF3)Q~i^F8Iqm`El{Q@z8prhCp^ zUqPoU>`%XURLJ)+DC{qc)DQzdtG7bPwyYodQhY4|4|xb|yIMo%?KsEPCKoa$6e~%m zkxrOEs^HFB`6IOk&rL~`F)8bQAK5NJ{ud!ZKg7cglw}Pfr0-4Y2LD*rsSfL#OySb& z7NK5?_r3KU#}X>sgGdi;u8{0sK_-0>NqfT3doGSr;^dDDBc&<>&3wH(Nfe5y>1S_~CtZ<2hrFh4j2#I_~iXFuGVWEpQ zzmb$JR6^N7%jc>u{}cWg?haA{qtB+@<0g$yLOI8aCq-0kZ`pvGyqs;mciVLa3G5In zU~SDI(bI3yW8t#a19VJOH%a45q27OUpiFxM$6gpT-r7sePdV)zTR2Q&G>so|`{0o7 z?C#O3y(L=O@3n=t960aAT)h0IJtWEKYO!~A{nNK+7)xWQ(I?x+&RHkT+_XlS+Ei?L zG$A~y9;C+)d%O0zG6!51eRKPxRE)(3PHy(>ND>b@fb*q|XNDE1|3xvl2lo>|3VfehV&tqi`Ft=b*Gh{PW2+%Gcg$7eXxq+Xn-S;QU1g7W8 zYBXQHSe+o3g-;*vcRh+$fl#EdD~hB6mJYv4p|VRe?yAUrPn7(8-S5_C)p;|89Vwu% z2vwpq%f)@g_n-6aix$PJAf*TeBg#|v;_IjR%&ienLO>!Qt?{W~i9 zttx+J9?Q#5&x=c5XmL6x3-AjH@e95cRkRqyRT*%L9T!aB3 za}nGzm>+*7LVav+E4_DTW&%}rQ28nQx$^(h0A?9%34jo02b7tyF{g{V?#*bjrKz3; zdX%K&0Aw;UcPauMQPh{jXygkIcIXC52Jaa3c=mSl#@=tU!EG?)`>72==yDy?^|*E; z+`wv;yZ{dCU;@W<|_7folxMi5pdeGS*_^KFn z*(y$TAai*nWYIW@%Pg70iC=1l#Xj2k1_+(w{oVuBMKN?&hcdG(6O<`WDpq1xZDN%*BzbJ!zxjjMa~A4bBg#C%)^dPkBDwR{|~i-+u6D^17?b&iPNs85pD^QoFen26o_uW)p~^jjXa;D% zxmfS@DSF{yV~pvdZ>L?aOXy&v0!v9t`-07XmyB+?cn&8TpSaf4_7UWZGa&xKi`f-- zmXZjqEjFWyfYo%(l3e=`9YlATCH#cWu35`==M5K*>SlUW6 z3W9jln%9OzSaGh0bVEXxA;U~=!2!c6sJuWDammOwL%sHSS4Ov`p*h5o!^i}BqJwqr zW8Q8fLRSE+s{NSu`SiqW>Ssl#RK)T3nshl_idzgy){}kNBhAxUmK#6By>d)~b_c~j zY!L$(C9lX^gu~5x?M_fL=Upcn=G#w{_V|EG)X91p!rw#P_1P0PS_GYigWBl0T%W%HwP1Zc>VQvFAi_oC#JHRAcib+J)%XKyup3X~_j7nWIIW0l# zTHE6lGz&2BDrtMBlsbo$IwzI-B$b|xmhUzFE%fah{<|2;gU#zp{CV-r8dXPS+R4S% zy5S)q?k+v_Nes^c$y$lNCHukm9`_`GP^L+WN( zCN`1xqd&HUX=Pu}u#F39+vKnUoBjXG7~cNSl4qmTZ{pa~ckUkI-U%pX5d_v=M&PRUJxL7t%k_mKs&`8{r-YdgQHVv{z;cL& zP?FkSg62e44?(G8*#)t)&gidR!|{;UhW7+TJL?7a(JWQb5vI8OCSuvaG})doqAd@n zXvmMANKMI>e8axhd4B+u57`Q@Z}vNjgcK!x+sQlIj{=RUAqPAy6B|)%VegT@1$w!h zOmDm5L)nfCHjW_jp1d0;f>zc2*A@E{y)l)Y2~gEXSSO#!(m2f z=(WLJVv*oqQ1}B>f*Sfb4C6%h*Rt^*XuF+Mw%MBv##UKK<9a?kTlY(A8HgRY-q*{z5DRnRxxyB(br zwd`0y^{oYj-){OrVQPLP=fyh`e%obtCE4f5KnTsFedG5tm275~{xZvp`|b9qRk@33 z%F1NrSy7vN zVyPidMqGPk5yw|@KM|wek7MhPrMIH%i(9>aGGjnYuu25(3*i|2Y}DTA*Y{0gK$QXI z;i3@EGCa@J3)AnM3^aC_-%xibK@~ZPH8dCxmT*QWy-V~tu<&YIB*7tB*@{mYw26Y1ZUI=jC|GQr<5Rp`zjxIGWOcvs);Yn^Nh3?Xq&NRrI{ zf6~U1CIyTV6z$l59&p0|7?rTf(eAQHs}J#SwqtIyINpB`V{4buw6&A__7${Q!f)6} z8_C`>S>%|%v>`2n`!+LXB~~lE!(DpnGJ}J*s^F09qF*@!8+z65h%&=VFiih0^0-ni zGus{qrQZB;3{2N%aJ<-0x^j7QGt4|X3_`adtao9^U?T_Pf6@!LB0r!4QU7gtD1+m< z)q9~v38x}6YB+A19Vzp6q#C6)a@GA`Qv1XLeDnckyITdF#fFm-K^ACOdZOFWv z?mjYVMp4vv|MzONy;eA*14f$$oFPn4p>rEm=Uf1zT*0NrLQ>H{8LzRKv9J;=&>oLB zLpI)>Y3eHP&8UWcQh}zqh$CHYDQ|JHXmO!%b)_)I6Go^nvF03s`XcMz_rGuXhdeFv z)F}viki5*oEL>VSIXK@`t$vA??p@(Y6Z$;=xc$LmT4}txncGNQF7f8e*Hx$G?P!2F>sG-}i=)&;ttuz%i8t;mQ5FshUpyDdu*xId zZRI~4sgdLv%2psLEOj&zG}-68SmGsgDf?%p^ZdiH zRQSMEv3^wYbJ7uun2&)VNzj&C-O%!|n3eWDZ-46g)v4<2M&FFZZ*)?Rya_u6ZQk%{ z3vA-3t9l$UCk+Lb>(4b5*@CFg(^!>lkBe-H!aLpLxMY+4Zuf8mt?>jbv8Re~34fvO z5u;g`T}<~t4x?}iE!CpwEz1kA*s>t&QC92($d`BDP-d98p3Kcgaa=M!dbA2P9=lO3 z0rj`jXIJ7CG1>m0#8;ywR?}e>06m$WM4Z@KMYF2~@}F&8bEKcfUWOpvBhpYYhwoOt z!dGh;k7?9y@-I}x(2HC|ZjYfW1;4tekg!F^02tGeYXV6mT~~!?+`rHU{GdCW1K+x0I2aM~aPW)1=Paq6 zNOr>ex$494O3XsdZ*<1Mz}!-*bN5spemsFRk~m}bCdmA!1TC`Yq3e(*NK&oect zf$`OYPLZdAue@@cE`ASmDlh6!r8DX%l$luucdlOaUow%iY32XWAn@TW_18D#)+5x# z)8xe(k7GEL5%y})#p5Bx8gkR9zdk)3*3z|!USstHQ}VRs8(5QW?{mx!HVy(7+(k?H2Uxh4@nuljTEv>G? zan0Fj!_{fc(Fvt_b>lcFOB8To5MZi)#*y-jz~G7(Q^VWYZ}$z+|F$`eM|5-A-L3{VnsWnpRZUE3r9%7JdPfhz?)Z}HIr zBuPFIXg(=TqCU&G;Jrz3Fu+TC6NS|xFvq;p%vAma7Ryagqk^u;_^W@t+PY&{5Y5|P z$|i#-OX3OGf^p6~k|hB{YOxtdea8*Yqucrh`sMas?+LSTp{!blv9_J1N|(8CsVx7- zOhWP(^jkpLhtxWQi0K;3=%SxTm6qBRzrtPWt6cKqCRp8){5s4xN8abe=)qU?5F&dP zcziT&V~=jy0Dm66GDK<(05x6;r(3PVQ8{CFV}(oo6KOAR)~G;E7k$O^niXIE%4@X7 z9}QX?H8k^b!SlE|D2{umU=P3Ak*BaozB?yW2&7@U3r(CzM4c+4a7~y z+S8nXOy_`dUEG=br1szPg7L|(4jbN?7i(IP zqE{TJ#*=bsVYouXJPbtYHM_8$+&}rg=ok(@^CO6Wie4+Ww*OV)!zF-0#es@W@0ap5 ztAgc^q)kqlf8l^t{DkU*j5^{@FVYyJ^WP!rqZUYXxRU0Fz^e00V(@WMtbYR)kmt68 zPOasN*8ZpOCBoxeX^OjTWfAWdu=4_@0Svk)B|b0q0}#yzL&zeefIr)T;1z$;qsYm$um~tLpmv0LLY?t@te+2>{<|{L9 z1GRb@s_3T8fHf5*y^~v1kDpB-KAv`RM9BG{dMXKN1$w_K98ALxujp3d@3lVp(eJk{ z@G-q&IXeNQb)|0f5&I1p+lG$Hbj`k+DJL~n5rLBjf5aW9>Y5(FkKCn9&;NSqFb;n6 zUwIqppFhOcXr@X36|686Ezd4tikVd|Gin8wa5o)S)S}C=zSl>+t^uNwSK_uoPZO{d zW=CZ87Bv+HQJUA8KSwZWVn2rg9*^Bgd?9Jyz*Xj@tFle_>>h^~>5-WU@b*}T^yNbn zwS-x7zG (FileAppend(exception.Message, "**"), ExitApp(1))) +dm := Buffer(220, 0) +NumPut("UShort", 220, dm, 68) +if !DllCall("EnumDisplaySettingsW", "Ptr", 0, "UInt", 0xFFFFFFFF, "Ptr", dm) + throw Error("Cannot inspect display mode") +NumPut("UInt", NumGet(dm, 72, "UInt") | 0x180000, dm, 72) +NumPut("UInt", 1280, dm, 172) +NumPut("UInt", 720, dm, 176) +if DllCall("ChangeDisplaySettingsW", "Ptr", dm, "UInt", 0, "Int") != 0 + throw Error("Display mode rejected") +app := ComObject("OneNote.Application") +app.NavigateTo("{058E24C9-6521-4913-9088-94646869E7EC}{1}{B0}", "{7DB914B1-2E9B-4E51-B78C-87B90E14A385}{40}{B0}", false) +hwnd := WinWait("ahk_class Framework::CFrame ahk_exe ONENOTE.EXE",, 10) +if !hwnd + throw Error("OneNote window did not appear") +WinMaximize(hwnd) +WinActivate(hwnd) +if !WinWaitActive(hwnd,, 10) + throw Error("OneNote window did not become active") +Sleep 300 +Send "{Left}" +SendText "Typed " diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-start-0.json b/corpus/paragraph-edit/rust-split/typed/ui/split-start-0.json new file mode 120000 index 0000000000000000000000000000000000000000..3d98eda4565545331e305ce936e9c787448aa0dc --- /dev/null +++ b/corpus/paragraph-edit/rust-split/typed/ui/split-start-0.json @@ -0,0 +1 @@ +../../../joined/ui/split-start.json \ No newline at end of file diff --git a/corpus/paragraph-edit/rust-split/typed/ui/split-start-0.png b/corpus/paragraph-edit/rust-split/typed/ui/split-start-0.png new file mode 100644 index 0000000000000000000000000000000000000000..576e945b2a98eed8e208d7e7d847d6251430f33d GIT binary patch literal 47959 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 literal 0 HcmV?d00001 diff --git a/crates/onestore/README.md b/crates/onestore/README.md index 2e63064f53df82ca64ab15fb2a70604d78bd5ce6..e029c43cadc0257e54ea518ef6d1e30f6632f27c 100644 --- a/crates/onestore/README.md +++ b/crates/onestore/README.md @@ -49,6 +49,7 @@ harness also accepts `--client-profile release`. | `replace_property_bytes` | Append one scalar-property revision; preserve prior revisions and unrelated property values and references | | `replace_text`, `commit_text`, `commit_file_text` | Replace a UTF-16 range across ordinary text runs; publish text, run boundaries and modification time together | | `Insertion`, `PreparedEdit::insert` | Insert paragraphs into editable containers or positioned outlines into a page, retaining intent identities across rebases | +| `ParagraphSplit`, `PreparedEdit::split` | Split ordinary text at a UTF-16 scalar boundary, retaining the original left identities and moving children to the right | | `TextAttribute`, `PreparedEdit::format` | Change character formatting over a UTF-16 range while sharing immutable styles; preserve unselected runs | | `PreparedEdit::commit`, `PreparedEdit::commit_file` | Publish the exact prepared image under caller-held exclusion or the conservative filesystem adapter | | `read_file` | Read a snapshot under whole-file exclusion | @@ -77,6 +78,13 @@ accepts one `0..0` span for subsequent typing. Retain the `Insertion` value for value creates different object identities. Duplicate insertion identities require reconciliation. Formatting accepts explicit attributes, preserves inherited values, and gives retired immutable styles zero current references while retaining history. +Paragraph splits preserve character formatting, retain tags on the left, and clone +mutable list objects without restarting numbering. The new right paragraph/text +identities belong to the retained `ParagraphSplit` intent. Its publication includes +the complete child graph and title metadata; repeating an existing identity requires +reconciliation. Title containers, generated fields, recording-linked text and +associated run metadata are rejected before I/O. Native split controls and subsequent +typing checks reside in [the paragraph corpus](../../corpus/paragraph-edit/README.md). Generated fields, protected targets and unsupported run-data boundary changes are rejected before publication. Local caches expose text, insertion and formatting edits; the [document-writer acceptance](../../evidence/MILESTONE9.md#document-writer-and-offline-acceptance) @@ -215,6 +223,7 @@ subsets of unflushed bytes and is shared with the stateful commit fuzzer. ```sh cargo +nightly fuzz run revisions -- -max_total_time=120 -max_len=262144 -rss_limit_mb=2048 cargo +nightly fuzz run commit -- -max_total_time=300 -max_len=4096 -rss_limit_mb=2048 +cargo +nightly fuzz run paragraph -- -max_total_time=120 -max_len=160 -rss_limit_mb=2048 ``` Fuzz targets cover storage, properties, revisions, scalar edits, creation, and diff --git a/crates/onestore/src/commit.rs b/crates/onestore/src/commit.rs index ccd041f819c516faa7c76dfc7740d4e69ef687cc..dbc621e4e78b394a7cf6df0fd6cf7a56099b682c 100644 --- a/crates/onestore/src/commit.rs +++ b/crates/onestore/src/commit.rs @@ -183,6 +183,19 @@ pub struct PreparedEdit<'a> { } impl<'a> PreparedEdit<'a> { + /// Splits a paragraph and updates its children, lists, tags and title metadata atomically. + /// Fields and associated run metadata are rejected before I/O. + pub fn split( + source: &'a [u8], + space: ExGuid, + split: &crate::ParagraphSplit, + ) -> Result { + Ok(Self { + source, + written: split.apply(source, space)?, + }) + } + /// Prepares an insertion and its dependent metadata in one revision, without I/O. pub fn insert( source: &'a [u8], diff --git a/crates/onestore/src/lib.rs b/crates/onestore/src/lib.rs index 70eb0e618e32bc1e3f9eea14ea1ad90ba1bbd717..9eac9aa570e7f35e36f497f9f2d791d773d38af8 100644 --- a/crates/onestore/src/lib.rs +++ b/crates/onestore/src/lib.rs @@ -11,6 +11,7 @@ mod flush; mod formatting; mod insertion; mod objects; +mod paragraph; mod properties; #[cfg(feature = "protected")] pub mod protected; @@ -31,6 +32,7 @@ pub use files::FileDataReference; pub use formatting::TextAttribute; pub use insertion::Insertion; pub use objects::{Object, ObjectData, ObjectReferences, ResolvedRevision}; +pub use paragraph::ParagraphSplit; pub use properties::{IdStream, Property, PropertySets, Value}; pub use revisions::{ExGuid, ObjectSpace, Revision, RevisionIndex}; pub use snapshot::{read_snapshot, read_storage_snapshot}; diff --git a/crates/onestore/src/paragraph.rs b/crates/onestore/src/paragraph.rs new file mode 100644 index 0000000000000000000000000000000000000000..0d96074ac3ecbddf7b3f14376fb6d2c37914d625 --- /dev/null +++ b/crates/onestore/src/paragraph.rs @@ -0,0 +1,383 @@ +use crate::{ + Error, ExGuid, Object, ObjectData, PropertySets, RevisionIndex, Store, + create::{current_timestamps, properties, string}, + document::{Document, Element, Kind}, + edit::{editable_parents, page_title}, + write::{PropertyObject, fresh_guid, write_revision}, +}; +use serde::{Deserialize, Serialize}; +use std::{ + collections::{BTreeMap, BTreeSet}, + ops::Range, + sync::Arc, +}; + +fn invalid(message: &'static str) -> Error { + Error { offset: 0, message } +} + +/// Splits ordinary paragraph text while retaining the new objects' identities across retries. +/// The original paragraph/text remain on the left; nested children move to the right. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(deny_unknown_fields)] +pub struct ParagraphSplit { + guid: [u8; 16], + text: ExGuid, + offset: u32, + author: String, + created: u32, +} + +impl ParagraphSplit { + /// The offset is measured in UTF-16 code units and must lie between Unicode scalars. + pub fn new(text: ExGuid, offset: u32, author: &str) -> Result { + if text.guid == [0; 16] || author.contains('\0') { + return Err(invalid( + "Choose paragraph text and an author name without NUL", + )); + } + Ok(Self { + guid: fresh_guid()?, + text, + offset, + author: author.to_owned(), + created: current_timestamps()?.0, + }) + } + + /// Identity of the new right paragraph. + pub fn object(&self) -> ExGuid { + ExGuid { + guid: self.guid, + n: 1, + } + } + + /// Identity of the new right paragraph's text. + pub fn text_object(&self) -> ExGuid { + ExGuid { + guid: self.guid, + n: 2, + } + } + + pub(crate) fn apply(&self, source: &[u8], space: ExGuid) -> Result, Error> { + if self.guid == [0; 16] || self.text.guid == [0; 16] || self.author.contains('\0') { + return Err(invalid( + "Choose paragraph text and an author name without NUL", + )); + } + let store = Store::parse(source)?; + let index = RevisionIndex::parse(&store)?; + index.validate_current()?; + let mut document = Document::parse(&index)?; + let pages: Vec<_> = document + .pages()? + .into_iter() + .filter_map(|(sid, page)| (sid == space).then_some(page)) + .collect(); + let [page] = pages.as_slice() else { + return Err(invalid("Splitting requires a single active page")); + }; + let semantic = document + .spaces + .remove(&space) + .ok_or_else(|| invalid("The active page is unavailable"))?; + let rid = semantic.contexts[&ExGuid::default()]; + let mut view = semantic + .revisions + .into_iter() + .find_map(|(id, view)| (id == rid).then_some(view)) + .unwrap(); + let parents = editable_parents(&view, &pages, self.text)?; + let [paragraph] = parents + .get(&self.text) + .map(Vec::as_slice) + .unwrap_or_default() + else { + return Err(invalid("Select text belonging to one paragraph")); + }; + let [parent] = parents + .get(paragraph) + .map(Vec::as_slice) + .unwrap_or_default() + else { + return Err(invalid("Select a paragraph with one parent")); + }; + let left = &view.nodes[paragraph]; + let Kind::Paragraph { lists, .. } = &left.kind else { + return Err(invalid("Select ordinary paragraph text")); + }; + if left.content != [self.text] + || !matches!( + view.nodes[parent].kind, + Kind::Outline { .. } + | Kind::OutlineGroup + | Kind::Paragraph { .. } + | Kind::Cell { .. } + ) + { + return Err(invalid( + "Select ordinary paragraph text inside an outline or table cell", + )); + } + let mut ancestors = BTreeSet::new(); + let mut pending = vec![*paragraph]; + while let Some(id) = pending.pop() { + if !ancestors.insert(id) { + continue; + } + if matches!(view.nodes[&id].kind, Kind::Title) { + return Err(invalid( + "Title containers cannot be split into ordinary paragraphs", + )); + } + pending.extend(parents.get(&id).into_iter().flatten().copied()); + } + let node = &view.nodes[&self.text]; + let Kind::RichText { + text, + runs, + boilerplate, + .. + } = &node.kind + else { + return Err(invalid("Select ordinary paragraph text")); + }; + if *boilerplate || !node.media_ids.is_empty() || node.media_time_ms.is_some() { + return Err(invalid( + "Generated or recording-linked text cannot be split", + )); + } + for run in view.text_runs(self.text)? { + if [ + run.format.hidden, + run.format.hyperlink, + run.format.math, + run.format.embedded_object, + ] + .contains(&Some(true)) + || run.text.contains(['\u{fffc}', '\u{fddf}']) + { + return Err(invalid( + "This paragraph contains a field or embedded object that cannot be split", + )); + } + } + let raw = index.resolve(space, rid)?; + let ObjectData::Properties(blob) = raw.objects[&self.text].data else { + unreachable!() + }; + if PropertySets::parse(blob)?.sets[0] + .iter() + .any(|p| matches!(p.id, 0x40003499 | 0x24003458)) + { + return Err(invalid( + "This paragraph contains run metadata that cannot be split", + )); + } + let length = u32::try_from(text.encode_utf16().count()) + .map_err(|_| invalid("Paragraph exceeds the UTF-16 offset range"))?; + if self.offset > length || lists.len() > 251 { + return Err(invalid( + "Choose a position within the paragraph and at most 251 list levels", + )); + } + let author_id = ExGuid { + guid: self.guid, + n: 3, + }; + let normal_id = ExGuid { + guid: self.guid, + n: 4, + }; + let typing = runs.last().and_then(|run| run.format).unwrap_or(normal_id); + let modified = current_timestamps()?.0.to_le_bytes(); + let mut changed = BTreeMap::new(); + if (self.offset == 0 && !text.is_empty()) || runs.iter().any(|run| run.format.is_none()) { + changed.insert( + normal_id, + PropertyObject { + jcid: 0x12004d, + bytes: properties(&[])?, + global_ids: Arc::new(BTreeMap::from([(0, self.guid)])), + }, + ); + } + let mut prefix = fragment( + &raw.objects[&self.text], + node, + 0..self.offset, + if text.is_empty() { typing } else { normal_id }, + )?; + let mut suffix = fragment(&raw.objects[&self.text], node, self.offset..length, typing)?; + prefix.set(&[(0x14001d7a, &modified)])?; + suffix.remove(&[0x40003489])?; + suffix.set(&[(0x14001d7a, &modified)])?; + suffix.reference(self.text_object())?; + changed.insert(self.text, prefix); + changed.insert(self.text_object(), suffix); + changed.insert( + author_id, + PropertyObject { + jcid: 0x120001, + bytes: properties(&[(0x1c001d75, string(&self.author))])?, + global_ids: Arc::new(BTreeMap::from([(0, self.guid)])), + }, + ); + let mut right = PropertyObject::from_object(&raw.objects[paragraph])?; + let content = right.reference(self.text_object())?; + let author = right.reference(author_id)?; + right.set(&[ + (0x24001c1f, &content), + (0x14001d09, &self.created.to_le_bytes()), + (0x20001d78, &author), + (0x20001d79, &author), + (0x14001d7a, &modified), + ])?; + if !lists.is_empty() { + let mut references = Vec::new(); + for (i, old) in lists.iter().enumerate() { + if !matches!(view.nodes[old].kind, Kind::List { .. }) { + return Err(invalid("The paragraph list is unavailable")); + } + let id = ExGuid { + guid: self.guid, + n: 5 + u32::try_from(i).unwrap(), + }; + let mut list = PropertyObject::from_object(&raw.objects[old])?; + list.remove(&[0x14001cb7])?; + list.reference(id)?; + references.extend_from_slice(&right.reference(id)?); + changed.insert(id, list); + } + right.set(&[(0x24001c26, &references)])?; + } + changed.insert(self.object(), right); + let mut original = PropertyObject::from_object(&raw.objects[paragraph])?; + original.remove(&[0x24001c20])?; + let author = original.reference(author_id)?; + original.set(&[(0x20001d79, &author), (0x14001d7a, &modified)])?; + changed.insert(*paragraph, original); + let mut parent_object = PropertyObject::from_object(&raw.objects[parent])?; + let mut children = Vec::new(); + for child in &view.nodes[parent].children { + children.extend_from_slice(&parent_object.reference(*child)?); + if child == paragraph { + children.extend_from_slice(&parent_object.reference(self.object())?); + } + } + parent_object.set(&[(0x24001c20, &children)])?; + changed.insert(*parent, parent_object); + if changed + .keys() + .any(|id| id.guid == self.guid && raw.objects.contains_key(id)) + { + return Err(invalid( + "A split identity already exists; reconcile the existing edit", + )); + } + for id in ancestors { + let object = match changed.entry(id) { + std::collections::btree_map::Entry::Occupied(entry) => entry.into_mut(), + std::collections::btree_map::Entry::Vacant(entry) => { + entry.insert(PropertyObject::from_object(&raw.objects[&id])?) + } + }; + object.set(&[(0x14001d7a, &modified)])?; + } + for (id, object) in &changed { + view.nodes.insert( + *id, + Element::parse( + &Object { + jcid: object.jcid, + reference_count: 0, + data: ObjectData::Properties(&object.bytes), + global_ids: Arc::clone(&object.global_ids), + }, + &store, + )?, + ); + } + let title = page_title(&view, &pages, None)?; + drop(view); + if let Some((_, automatic, title)) = title { + let metadata = raw + .roots + .get(&2) + .ok_or_else(|| invalid("Page title metadata is unavailable"))?; + if raw.objects[metadata].jcid != 0x20030 { + return Err(invalid("Page title metadata is unavailable")); + } + let title = string(&title); + let mut object = PropertyObject::from_object(&raw.objects[metadata])?; + object.set(&[(0x1c001cf3, &title)])?; + changed.insert(*metadata, object); + changed + .get_mut(page) + .unwrap() + .set(&[(0x1c001d3c, if automatic { &title } else { &[0, 0] })])?; + } + write_revision(source, space, |_| Ok(changed)) + } +} + +fn fragment( + raw: &Object<'_>, + node: &Element<'_>, + range: Range, + empty: ExGuid, +) -> Result { + let Kind::RichText { text, runs, .. } = &node.kind else { + return Err(invalid("Select ordinary paragraph text")); + }; + let units: Vec<_> = text.encode_utf16().collect(); + let start = usize::try_from(range.start) + .map_err(|_| invalid("Choose a position within the paragraph"))?; + let end = usize::try_from(range.end) + .map_err(|_| invalid("Choose a position within the paragraph"))?; + let slice = units + .get(start..end) + .ok_or_else(|| invalid("Choose a position within the paragraph"))?; + let text = String::from_utf16(slice) + .map_err(|_| invalid("Choose a position between Unicode scalars"))?; + let mut segments = Vec::new(); + for run in runs { + if run.start < range.end && range.start < run.end { + segments.push(( + run.end.min(range.end) - range.start, + run.format.unwrap_or(empty), + )); + } + } + if segments.is_empty() { + segments.push((0, empty)); + } + if !range.is_empty() && end == units.len() { + let last = runs.last().unwrap(); + if last.start == last.end { + segments.push((range.end - range.start, last.format.unwrap_or(empty))); + } + } + if segments[..segments.len() - 1] + .windows(2) + .any(|pair| pair[0].0 >= pair[1].0) + { + return Err(invalid("Text-run boundaries must be strictly increasing")); + } + let mut object = PropertyObject::from_object(raw)?; + let mut ends = Vec::new(); + let mut references = Vec::new(); + for (end, id) in segments { + ends.extend_from_slice(&end.to_le_bytes()); + references.extend_from_slice(&object.reference(id)?); + } + ends.truncate(ends.len() - 4); + object.set(&[ + (0x1c001c22, &string(&text)), + (0x1c001e12, &ends), + (0x24001e13, &references), + ])?; + Ok(object) +} diff --git a/crates/onestore/src/write.rs b/crates/onestore/src/write.rs index 19d078326fd9404b759eb1b861369da66a22a77d..581a72460722c325de61b9e9bbef0b5e00bcf1a3 100644 --- a/crates/onestore/src/write.rs +++ b/crates/onestore/src/write.rs @@ -120,6 +120,15 @@ fn field_length(property: &crate::Property<'_>, set_lengths: &[usize]) -> usize } } +fn property_set_lengths(properties: &PropertySets<'_>) -> Vec { + let mut lengths = vec![0; properties.sets.len()]; + for (i, set) in properties.sets.iter().enumerate().rev() { + lengths[i] = + 2 + set.len() * 4 + set.iter().map(|p| field_length(p, &lengths)).sum::(); + } + lengths +} + fn patch_properties( blob: &[u8], updates: &[(u32, &[u8])], @@ -130,15 +139,7 @@ fn patch_properties( let ids = properties.root_ids.as_ptr().addr() - blob.as_ptr().addr(); let ids_end = ids + properties.root_ids.len(); let body_end = blob.len() - properties.padding.len(); - let mut set_lengths = vec![0; properties.sets.len()]; - for (i, set) in properties.sets.iter().enumerate().rev() { - set_lengths[i] = 2 - + set.len() * 4 - + set - .iter() - .map(|p| field_length(p, &set_lengths)) - .sum::(); - } + let set_lengths = property_set_lengths(&properties); let mut offsets = Vec::with_capacity(root.len()); let mut offset = ids_end; for property in root { @@ -379,6 +380,79 @@ impl PropertyObject { Ok(()) } + pub fn remove(&mut self, ids: &[u32]) -> Result<()> { + let properties = PropertySets::parse(&self.bytes)?; + let removed = |id: u32| { + ids.iter() + .any(|wanted| id & 0x7fffffff == wanted & 0x7fffffff) + }; + if !properties.sets[0].iter().any(|p| removed(p.id)) { + return Ok(()); + } + let lengths = property_set_lengths(&properties); + let mut offset = properties.root_ids.as_ptr().addr() - self.bytes.as_ptr().addr() + + properties.root_ids.len(); + let mut retained_ids = Vec::new(); + let mut fields = Vec::new(); + let mut references: [Vec; 3] = std::array::from_fn(|_| Vec::new()); + for property in &properties.sets[0] { + let end = offset + field_length(property, &lengths); + if !removed(property.id) { + retained_ids.extend_from_slice(&property.id.to_le_bytes()); + fields.extend_from_slice(&self.bytes[offset..end]); + let mut pending = vec![property]; + while let Some(field) = pending.pop() { + match &field.value { + Value::References { + stream, + compact_ids, + } => { + let index = match stream { + crate::IdStream::Objects => 0, + crate::IdStream::ObjectSpaces => 1, + crate::IdStream::Contexts => 2, + }; + references[index].extend_from_slice(compact_ids); + } + Value::Sets(children) => { + for child in children.clone().rev() { + pending.extend(properties.sets[child].iter().rev()); + } + } + _ => {} + } + } + } + offset = end; + } + let mut cursor = crate::bytes::Cursor { + bytes: &self.bytes, + offset: 0, + }; + let streams = crate::properties::reference_streams(&mut cursor)?; + let mut bytes = Vec::new(); + for (stream, retained) in streams.iter().zip(&references) { + if stream.offset == 0 { + continue; + } + let header = u32::from_le_bytes( + self.bytes[stream.offset - 4..stream.offset] + .try_into() + .unwrap(), + ); + let count = u32::try_from(retained.len() / 4).unwrap(); + bytes.extend_from_slice(&((header & 0xff000000) | count).to_le_bytes()); + bytes.extend_from_slice(retained); + } + bytes.extend_from_slice(&u16::try_from(retained_ids.len() / 4).unwrap().to_le_bytes()); + bytes.extend_from_slice(&retained_ids); + bytes.extend_from_slice(&fields); + bytes.resize(bytes.len().next_multiple_of(8), 0); + PropertySets::parse(&bytes)?; + self.bytes = bytes; + Ok(()) + } + pub fn reference(&mut self, id: ExGuid) -> Result<[u8; 4]> { if !self.global_ids.values().any(|guid| *guid == id.guid) { let mut index = 0; diff --git a/crates/onestore/src/write/tests.rs b/crates/onestore/src/write/tests.rs index 845064f1c0da2afbadca12938a8496554f36eb78..5e996875596247be4c62f01f55f8f8c6c619c30a 100644 --- a/crates/onestore/src/write/tests.rs +++ b/crates/onestore/src/write/tests.rs @@ -46,6 +46,8 @@ fn document_insertions_and_formatting_respect_readonly_ancestors() { .iter() .find_map(|(id, object)| (object.jcid == 0x6000e).then_some(*id)) .unwrap(); + let split = crate::ParagraphSplit::new(text, 1, "Author").unwrap(); + assert!(PreparedEdit::split(&protected, sid, &split).is_err()); assert!( PreparedEdit::format( &protected, @@ -531,6 +533,45 @@ fn nested_fields_and_other_reference_streams_remain_byte_exact() { ); assert_eq!(&changed[20..36], &original[16..32]); assert_eq!(parsed.sets[0][3].value, Value::Bytes(&[96, 97, 98, 99])); + + for removed in 0..16 { + let ids: Vec<_> = previous.sets[0] + .iter() + .enumerate() + .filter_map(|(i, property)| (removed & (1 << i) != 0).then_some(property.id)) + .collect(); + let mut object = super::PropertyObject { + jcid: 0x6000e, + bytes: original.clone(), + global_ids: Default::default(), + }; + object.remove(&ids).unwrap(); + let parsed = PropertySets::parse(&object.bytes).unwrap(); + assert!( + parsed.sets[0] + .iter() + .eq(previous.sets[0].iter().filter(|p| !ids.contains(&p.id))) + ); + if removed & 2 == 0 { + assert_eq!(parsed.sets[1], previous.sets[1]); + assert_eq!( + object + .bytes + .windows(nested.len()) + .filter(|bytes| *bytes == nested) + .count(), + 1 + ); + } else { + assert_eq!(parsed.sets.len(), 1); + } + if removed == 0 { + assert_eq!(object.bytes, original); + } + let before = object.bytes.clone(); + object.remove(&ids).unwrap(); + assert_eq!(object.bytes, before); + } } #[test] @@ -549,6 +590,19 @@ fn deep_property_splices_do_not_use_the_call_stack() { &changed[14..changed.len() - parsed.padding.len()], &bytes[10..] ); + let mut object = super::PropertyObject { + jcid: 0x6000e, + bytes: changed, + global_ids: Default::default(), + }; + object.remove(&[0x08000002]).unwrap(); + let parsed = PropertySets::parse(&object.bytes).unwrap(); + assert_eq!(parsed.sets.len(), 100_001); + assert_eq!(&object.bytes[..bytes.len()], &bytes); + object.remove(&[0x44000001]).unwrap(); + let parsed = PropertySets::parse(&object.bytes).unwrap(); + assert_eq!(parsed.sets.len(), 1); + assert!(parsed.sets[0].is_empty()); } #[test] diff --git a/crates/onestore/tests/paragraph.rs b/crates/onestore/tests/paragraph.rs new file mode 100644 index 0000000000000000000000000000000000000000..4767022d053c4b677a6cd49151b564757c906bd9 --- /dev/null +++ b/crates/onestore/tests/paragraph.rs @@ -0,0 +1,343 @@ +use onestore::{ + ExGuid, ParagraphSplit, PreparedEdit, RevisionIndex, Store, + document::{Document, Kind, Revision}, +}; +use serde_json::Value; + +#[path = "support/checkpoint.rs"] +mod checkpoint; +#[path = "support/current.rs"] +mod current; +#[path = "support/disk.rs"] +mod disk; + +const SOURCE: &[u8] = + include_bytes!("../../../corpus/paragraph-edit/before/notebook/synthetic.one"); + +fn characters(view: &Revision<'_>, id: ExGuid) -> Vec<(char, Value)> { + view.text_runs(id) + .unwrap() + .into_iter() + .flat_map(|run| { + let format = serde_json::to_value(run.format).unwrap(); + run.text.chars().map(move |c| (c, format.clone())) + }) + .collect() +} + +#[test] +fn splits_partition_native_paragraphs_at_every_scalar_boundary() { + let manifest: Value = + serde_json::from_str(include_str!("../../../corpus/paragraph-edit/manifest.json")).unwrap(); + let store = Store::parse(SOURCE).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let document = Document::parse(&index).unwrap(); + for case in manifest["cases"].as_array().unwrap() { + let text: ExGuid = serde_json::from_value(case["original_text"].clone()).unwrap(); + let paragraph: ExGuid = serde_json::from_value(case["original_paragraph"].clone()).unwrap(); + let (sid, space) = document + .spaces + .iter() + .find(|(_, space)| { + space.revisions[&space.contexts[&ExGuid::default()]] + .nodes + .contains_key(&text) + }) + .unwrap(); + let before = &space.revisions[&space.contexts[&ExGuid::default()]]; + let (parent, parent_node) = before + .nodes + .iter() + .find(|(_, node)| node.children.contains(¶graph)) + .unwrap(); + let expected = characters(before, text); + let offsets: Vec = std::iter::once(0) + .chain(expected.iter().scan(0, |offset, (c, _)| { + *offset += u32::try_from(c.len_utf16()).unwrap(); + Some(*offset) + })) + .collect(); + for (position, offset) in offsets.iter().enumerate() { + let intent = ParagraphSplit::new(text, *offset, "Split author").unwrap(); + let restored = serde_json::from_value(serde_json::to_value(&intent).unwrap()).unwrap(); + assert_eq!(intent, restored); + let edited = PreparedEdit::split(SOURCE, *sid, &restored); + if case["case"] == "Split before hyperlink" { + assert!(edited.is_err()); + continue; + } + let edited = + edited.unwrap_or_else(|error| panic!("{} at {offset}: {error}", case["case"])); + let current_store = Store::parse(edited.as_bytes()).unwrap(); + assert_eq!( + current_store.header.transaction_count, + store.header.transaction_count + 1 + ); + let current_index = RevisionIndex::parse(¤t_store).unwrap(); + current_index.validate_current().unwrap(); + let current_document = Document::parse(¤t_index).unwrap(); + let current_space = ¤t_document.spaces[sid]; + let after = ¤t_space.revisions[¤t_space.contexts[&ExGuid::default()]]; + let mut changed = std::collections::BTreeSet::from([text, before.roots[&2]]); + let mut pending = vec![paragraph]; + while let Some(id) = pending.pop() { + if !changed.insert(id) { + continue; + } + pending.extend(before.nodes.iter().filter_map(|(parent, node)| { + node.children + .iter() + .chain(&node.content) + .chain(&node.structure) + .any(|child| *child == id) + .then_some(*parent) + })); + } + let old_raw = index + .resolve(*sid, space.contexts[&ExGuid::default()]) + .unwrap(); + let new_raw = current_index + .resolve(*sid, current_space.contexts[&ExGuid::default()]) + .unwrap(); + for (id, object) in old_raw.objects { + if !changed.contains(&id) { + assert_eq!(object.data, new_raw.objects[&id].data, "untouched {id}"); + } + } + assert_eq!( + characters(after, text), + expected[..position], + "{} prefix at {offset}", + case["case"] + ); + assert_eq!( + characters(after, intent.text_object()), + expected[position..], + "{} suffix at {offset}", + case["case"] + ); + let mut children = parent_node.children.clone(); + children.insert( + children.iter().position(|id| *id == paragraph).unwrap() + 1, + intent.object(), + ); + assert_eq!(after.nodes[parent].children, children); + assert_eq!(after.nodes[¶graph].content, [text]); + assert!(after.nodes[¶graph].children.is_empty()); + assert_eq!( + after.nodes[&intent.object()].content, + [intent.text_object()] + ); + assert_eq!( + after.nodes[&intent.object()].children, + before.nodes[¶graph].children + ); + assert_eq!( + serde_json::to_value(&after.nodes[&text].tags).unwrap(), + serde_json::to_value(&before.nodes[&text].tags).unwrap() + ); + assert!(after.nodes[&intent.text_object()].tags.is_empty()); + let Kind::Paragraph { + lists: old_lists, .. + } = &before.nodes[¶graph].kind + else { + panic!() + }; + let Kind::Paragraph { lists, .. } = &after.nodes[&intent.object()].kind else { + panic!() + }; + assert_eq!(old_lists.len(), lists.len()); + for (old, new) in old_lists.iter().zip(lists) { + assert_ne!(old, new); + let mut old = serde_json::to_value(&before.nodes[old]).unwrap(); + old["kind"]["restart"] = Value::Null; + assert_eq!(serde_json::to_value(&after.nodes[new]).unwrap(), old); + } + for (space_id, old_space) in &index.spaces { + for revision in old_space.revisions.keys() { + let old = index.resolve(*space_id, *revision).unwrap(); + let retained = current_index.resolve(*space_id, *revision).unwrap(); + assert_eq!(old.roots, retained.roots); + for (id, object) in old.objects { + assert_eq!(object.data, retained.objects[&id].data); + } + } + } + assert!(PreparedEdit::split(edited.as_bytes(), *sid, &intent).is_err()); + } + for offset in 0..=*offsets.last().unwrap() + 1 { + if offsets.contains(&offset) { + continue; + } + let intent = ParagraphSplit::new(text, offset, "Author").unwrap(); + assert!(PreparedEdit::split(SOURCE, *sid, &intent).is_err()); + } + } +} + +#[test] +fn invalid_split_identities_and_title_targets_are_rejected() { + assert!(ParagraphSplit::new(ExGuid::default(), 0, "Author").is_err()); + let manifest: Value = + serde_json::from_str(include_str!("../../../corpus/paragraph-edit/manifest.json")).unwrap(); + let text: ExGuid = + serde_json::from_value(manifest["cases"][0]["original_text"].clone()).unwrap(); + assert!(ParagraphSplit::new(text, 0, "a\0b").is_err()); + let store = Store::parse(SOURCE).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let document = Document::parse(&index).unwrap(); + let sid = *document + .spaces + .iter() + .find(|(_, space)| { + space.revisions[&space.contexts[&ExGuid::default()]] + .nodes + .contains_key(&text) + }) + .unwrap() + .0; + let intent = ParagraphSplit::new(text, 1, "Author").unwrap(); + for (field, value) in [ + ("guid", serde_json::to_value([0_u8; 16]).unwrap()), + ("guid", serde_json::to_value(text.guid).unwrap()), + ("text", serde_json::to_value(ExGuid::default()).unwrap()), + ("author", serde_json::json!("a\0b")), + ("offset", serde_json::json!(u32::MAX)), + ] { + let mut encoded = serde_json::to_value(&intent).unwrap(); + encoded[field] = value; + let forged = serde_json::from_value(encoded).unwrap(); + assert!(PreparedEdit::split(SOURCE, sid, &forged).is_err()); + } + let mut titles = 0; + for (sid, _) in document.pages().unwrap() { + let space = &document.spaces[&sid]; + let view = &space.revisions[&space.contexts[&ExGuid::default()]]; + let mut pending: Vec<_> = view + .nodes + .iter() + .filter_map(|(id, n)| matches!(n.kind, Kind::Title).then_some(*id)) + .collect(); + let mut seen = std::collections::BTreeSet::new(); + while let Some(id) = pending.pop() { + if !seen.insert(id) { + continue; + } + let node = &view.nodes[&id]; + pending.extend(node.children.iter().chain(&node.content).copied()); + if matches!(node.kind, Kind::RichText { .. }) { + let intent = ParagraphSplit::new(id, 0, "Author").unwrap(); + assert!(PreparedEdit::split(SOURCE, sid, &intent).is_err()); + titles += 1; + } + } + } + assert!(titles >= 14); +} + +#[test] +#[ignore = "exports paragraph splits for independent native validation"] +fn export_native_paragraph_splits() { + use std::{fs, path::PathBuf}; + let output = PathBuf::from(std::env::var_os("ONESTORE_PARAGRAPH_OUTPUT").unwrap()); + assert!(output.is_absolute()); + fs::create_dir(&output).unwrap(); + let manifest: Value = + serde_json::from_str(include_str!("../../../corpus/paragraph-edit/manifest.json")).unwrap(); + let mut source = SOURCE.to_vec(); + let mut written = Vec::new(); + for case in manifest["cases"].as_array().unwrap() { + if case["case"] == "Split before hyperlink" { + continue; + } + let text: ExGuid = serde_json::from_value(case["original_text"].clone()).unwrap(); + let store = Store::parse(&source).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let document = Document::parse(&index).unwrap(); + let sid = *document + .spaces + .iter() + .find(|(_, space)| { + space.revisions[&space.contexts[&ExGuid::default()]] + .nodes + .contains_key(&text) + }) + .unwrap() + .0; + let intent = ParagraphSplit::new( + text, + serde_json::from_value(case["offset_utf16"].clone()).unwrap(), + "Rust split author", + ) + .unwrap(); + let edited = PreparedEdit::split(&source, sid, &intent).unwrap(); + written.push(serde_json::json!({"case": case["case"], "intent": intent, + "new_paragraph": intent.object(), "new_text": intent.text_object()})); + source = edited.as_bytes().to_vec(); + } + let candidate = output.join("candidate"); + fs::create_dir(&candidate).unwrap(); + fs::write(candidate.join("synthetic.one"), source).unwrap(); + fs::write( + output.join("manifest.json"), + serde_json::to_vec_pretty(&serde_json::json!({"cases": written})).unwrap(), + ) + .unwrap(); +} + +#[test] +fn interrupted_splits_publish_a_complete_graph_or_retain_the_original() { + let original = onestore::create_section("split.one", "Original", "Author").unwrap(); + let store = Store::parse(&original).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let document = Document::parse(&index).unwrap(); + let (sid, page) = document.pages().unwrap()[0]; + let space = &document.spaces[&sid]; + let view = &space.revisions[&space.contexts[&ExGuid::default()]]; + let outline = view.nodes[&page] + .children + .iter() + .find(|id| matches!(view.nodes[id].kind, Kind::Outline { .. })) + .unwrap(); + let paragraph = view.nodes[outline].children[0]; + let insertion = onestore::Insertion::paragraph(paragraph, None, "a🦀b", "Author") + .unwrap() + .with_formatting(1..3, &[onestore::TextAttribute::Bold(true)]) + .unwrap(); + let inserted = PreparedEdit::insert(&original, sid, &insertion).unwrap(); + let source = inserted.as_bytes(); + let checkpoint = checkpoint::pending(source, sid, insertion.text_object(), 0x14001d7a); + for source in [source, &checkpoint] { + let intent = ParagraphSplit::new(insertion.text_object(), 1, "Author").unwrap(); + let edit = PreparedEdit::split(source, sid, &intent).unwrap(); + let before = current::current(source); + let after = current::current(edit.as_bytes()); + for write_limit in [17, 4096] { + let disk = |fail_at| disk::Disk { + visible: source.to_vec(), + durable: source.to_vec(), + operation: 0, + fail_at, + write_limit, + random: 347, + }; + let mut successful = disk(None); + edit.commit(&mut successful).unwrap(); + assert_eq!(successful.durable, edit.as_bytes()); + for at in 1..=successful.operation { + let mut interrupted = disk(Some(at)); + let error = edit.commit(&mut interrupted).unwrap_err(); + let recovered = current::current(&interrupted.durable); + assert!( + recovered == before || recovered == after, + "interruption {at}" + ); + match error.state { + onestore::CommitState::NotCommitted => assert_eq!(recovered, before), + onestore::CommitState::Committed => assert_eq!(recovered, after), + onestore::CommitState::Unknown => {} + } + } + } + } +} diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index edaf899d52a4762dbc9615ddefbf58c2baed74ef..3c0a6bb007fa7d2349e20ebf0db8b3539a536c65 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -84,3 +84,10 @@ path = "fuzz_targets/insert.rs" test = false doc = false bench = false + +[[bin]] +name = "paragraph" +path = "fuzz_targets/paragraph.rs" +test = false +doc = false +bench = false diff --git a/fuzz/fuzz_targets/paragraph.rs b/fuzz/fuzz_targets/paragraph.rs new file mode 100644 index 0000000000000000000000000000000000000000..fcc5b46163d65f926a61b277abe432623a0410df --- /dev/null +++ b/fuzz/fuzz_targets/paragraph.rs @@ -0,0 +1,144 @@ +#![no_main] +use libfuzzer_sys::fuzz_target; +use onestore::{ + CommitState, ExGuid, Insertion, ParagraphSplit, PreparedEdit, RevisionIndex, Store, + TextAttribute as A, + document::{Document, Kind}, +}; +use std::sync::LazyLock; + +#[path = "../../crates/onestore/tests/support/current.rs"] +mod current; +#[path = "../../crates/onestore/tests/support/disk.rs"] +mod disk; + +static SOURCE: LazyLock<(Vec, ExGuid, ExGuid)> = LazyLock::new(|| { + let source = onestore::create_section("paragraph.one", "Original", "Author").unwrap(); + let store = Store::parse(&source).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let document = Document::parse(&index).unwrap(); + let (sid, page) = document.pages().unwrap()[0]; + let space = &document.spaces[&sid]; + let view = &space.revisions[&space.contexts[&ExGuid::default()]]; + let outline = *view.nodes[&page] + .children + .iter() + .find(|id| matches!(view.nodes[id].kind, Kind::Outline { .. })) + .unwrap(); + let parent = view.nodes[&outline].children[0]; + let intent = Insertion::paragraph(parent, None, "a🦀 e\u{301} 東京\rEnd", "Author") + .unwrap() + .with_formatting(0..4, &[A::Bold(true)]) + .unwrap() + .with_formatting(4..7, &[A::Italic(true), A::Color(Some([12, 34, 56]))]) + .unwrap(); + let edited = PreparedEdit::insert(&source, sid, &intent).unwrap(); + (edited.as_bytes().to_vec(), sid, outline) +}); + +fuzz_target!(|input: &[u8]| { + let (source, sid, outline) = &*SOURCE; + if let Ok(intent) = serde_json::from_slice::(input) + && let Ok(edit) = PreparedEdit::split(source, *sid, &intent) + { + current::current(edit.as_bytes()); + } + let mut persisted = source.clone(); + let mut caches = std::array::from_fn::<_, 12, _>(|_| source.clone()); + for step in input.chunks_exact(8).take(20) { + let actor = usize::from(step[0]) % caches.len(); + if step[1] % 3 == 0 { + caches[actor].clone_from(&persisted); + } + let source = &caches[actor]; + let store = Store::parse(source).unwrap(); + let index = RevisionIndex::parse(&store).unwrap(); + let document = Document::parse(&index).unwrap(); + let space = &document.spaces[sid]; + let view = &space.revisions[&space.contexts[&ExGuid::default()]]; + let mut pending = vec![*outline]; + let mut paragraphs = Vec::new(); + while let Some(id) = pending.pop() { + let node = &view.nodes[&id]; + pending.extend(node.children.iter().copied()); + if matches!(node.kind, Kind::Paragraph { .. }) { + paragraphs.push(id); + } + } + let paragraph = paragraphs[usize::from(step[2]) % paragraphs.len()]; + let text = view.nodes[¶graph].content[0]; + let characters: Vec<_> = view + .text_runs(text) + .unwrap() + .into_iter() + .flat_map(|run| { + let style = serde_json::to_value(run.format).unwrap(); + run.text.chars().map(move |c| (c, style.clone())) + }) + .collect(); + let offsets: Vec = std::iter::once(0) + .chain(characters.iter().scan(0, |n, (c, _)| { + *n += u32::try_from(c.len_utf16()).unwrap(); + Some(*n) + })) + .collect(); + let offset = u32::from(step[3]) % (offsets.last().unwrap() + 2); + let intent = ParagraphSplit::new(text, offset, "Paragraph fuzz").unwrap(); + let intent = serde_json::from_value(serde_json::to_value(intent).unwrap()).unwrap(); + let edit = PreparedEdit::split(source, *sid, &intent); + let Some(position) = offsets.iter().position(|n| *n == offset) else { + assert!(edit.is_err()); + continue; + }; + let edit = edit.unwrap(); + let after_store = Store::parse(edit.as_bytes()).unwrap(); + let after_index = RevisionIndex::parse(&after_store).unwrap(); + let after_document = Document::parse(&after_index).unwrap(); + let space = &after_document.spaces[sid]; + let after_view = &space.revisions[&space.contexts[&ExGuid::default()]]; + for (id, expected) in [ + (text, &characters[..position]), + (intent.text_object(), &characters[position..]), + ] { + let actual: Vec<_> = after_view + .text_runs(id) + .unwrap() + .into_iter() + .flat_map(|run| { + let style = serde_json::to_value(run.format).unwrap(); + run.text.chars().map(move |c| (c, style.clone())) + }) + .collect(); + assert_eq!(actual, expected); + } + assert!(after_view.nodes[¶graph].children.is_empty()); + assert_eq!( + after_view.nodes[&intent.object()].children, + view.nodes[¶graph].children + ); + let before = current::current(&persisted); + let after = current::current(edit.as_bytes()); + let mut disk = disk::Disk { + visible: persisted.clone(), + durable: persisted.clone(), + operation: 0, + fail_at: (step[4] != 0).then_some(usize::from(u16::from_le_bytes([step[4], step[5]]))), + write_limit: if step[6] & 1 == 0 { 17 } else { 4096 }, + random: u64::from(step[7]) + 1, + }; + let result = edit.commit(&mut disk); + let observed = current::current(&disk.durable); + match result { + Ok(()) => assert_eq!(observed, after), + Err(error) => { + assert!(observed == before || observed == after); + match error.state { + CommitState::NotCommitted => assert_eq!(observed, before), + CommitState::Committed => assert_eq!(observed, after), + CommitState::Unknown => {} + } + } + } + persisted = disk.durable; + } +}); diff --git a/tools/test_paragraph_edit.py b/tools/test_paragraph_edit.py index 04e36e9ca80be005699aa8ec842c10225bf4f286..e14d5c3ae8d591f8d8469a6dd4cee120ea85e337 100644 --- a/tools/test_paragraph_edit.py +++ b/tools/test_paragraph_edit.py @@ -8,7 +8,7 @@ import unittest import xml.etree.ElementTree as ET from document_model import EXPORTER, ordered_pages, walk -from native_format import native_characters +from native_format import compare_formats, native_characters from native_xml import ns ROOT = Path(__file__).resolve().parent.parent @@ -17,6 +17,65 @@ compare = runpy.run_path(str(ROOT / 'tools/verify-document.py'))['compare'] class ParagraphEditTest(unittest.TestCase): + def test_rust_splits_match_native_controls_and_preserve_empty_typing_styles(self): + fixture = FIXTURE / 'rust-split' + manifest = json.loads((fixture / 'manifest.json').read_text()) + with TemporaryDirectory() as temporary: + for source, capture in [('candidate', 'native'), ('native/notebook', 'native'), + ('typed/notebook', 'typed')]: + native = Path(temporary) / source.replace('/', '-') / 'read' + shutil.copytree(fixture / capture / 'read', native) + compare(fixture / source, native) + subprocess.run([EXPORTER, fixture / 'candidate/synthetic.one', Path(temporary) / 'model'], check=True) + model = json.loads((Path(temporary) / 'model/document.json').read_text()) + subprocess.run([EXPORTER, fixture / 'native/notebook/synthetic.one', Path(temporary) / 'saved'], check=True) + saved = json.loads((Path(temporary) / 'saved/document.json').read_text()) + views = {r['nodes'][r['roots']['2']]['kind']['title']: (r, page) + for _, _, r, page in ordered_pages(model)} + saved_views = {r['nodes'][r['roots']['2']]['kind']['title']: (r, page) + for _, _, r, page in ordered_pages(saved)} + text_nodes = {} + for name, (revision, page) in views.items(): + current, current_page = saved_views[name] + self.assertEqual(page, current_page) + text_nodes[name] = [] + for outline in revision['nodes'][page]['children']: + if revision['nodes'][outline]['kind']['type'] != 'Outline': continue + for oid, node in walk(revision, outline): + self.assertEqual(current['nodes'][oid]['children'], node['children']) + self.assertEqual(current['nodes'][oid]['content'], node['content']) + if node['kind']['type'] == 'RichText': text_nodes[name].append(node) + captures = {} + for phase, folder in [('native', fixture / 'native/read'), ('typed', fixture / 'typed/read'), + ('control', FIXTURE / 'cold-split/read')]: + captures[phase] = {} + for path in folder.glob('page-*.xml'): + page = ET.parse(path).getroot() + captures[phase][page.get('name')] = native_characters(page, page.findall('one:Outline', ns)) + self.assertEqual(len(captures[phase]), 14) + cases = [c for c in manifest['cases'] if 'intent' in c] + self.assertEqual(len(cases), 12) + for case in cases: + name = case['case'] + with self.subTest(case=name): + for a, b in zip(captures['native'][name], captures['control'][name], strict=True): + for (c, left), (d, right) in zip(a, b, strict=True): + self.assertEqual(c, d) + for key in left.keys() | right.keys(): + default = 'automatic' if key in ('color', 'highlight') else False + self.assertEqual(left.get(key, default), right.get(key, default)) + selections = json.loads((fixture / 'typed/ui/selections.json').read_text()) + self.assertEqual(len(selections), 4) + for selection in selections: + node = text_nodes[selection['case']][selection['index']] + self.assertEqual(node['kind']['text'], '') + self.assertEqual(len(node['kind']['runs']), 1) + node['kind']['text'] = selection['text'] + node['kind']['runs'][0]['end'] = len(selection['text'].encode('utf-16-le')) // 2 + for name, (revision, page) in views.items(): + _, differences = compare_formats(revision, text_nodes[name], captures['typed'][name]) + self.assertEqual(differences, [], name) + def test_native_split_join_graphs_styles_and_identity_boundaries(self): manifest = json.loads((FIXTURE / 'manifest.json').read_text()) models, native = {}, {} -- 2.54.0