@quartzds/core 1.0.0-beta.123 → 1.0.0-beta.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/components/index.js +1 -1
- package/components/{p-BvRd7jA2.js → p-2tdMcXmA.js} +5 -5
- package/components/{p-BvRd7jA2.js.map → p-2tdMcXmA.js.map} +1 -1
- package/components/{p-CVuTVnQo.js → p-B6ToH-uM.js} +4 -4
- package/components/p-B6ToH-uM.js.map +1 -0
- package/components/{p-C93kOEAe.js → p-BRpaYGSM.js} +5 -5
- package/components/{p-C93kOEAe.js.map → p-BRpaYGSM.js.map} +1 -1
- package/components/{p-CbY4T0d2.js → p-B_CYrw-t.js} +3 -3
- package/components/{p-CbY4T0d2.js.map → p-B_CYrw-t.js.map} +1 -1
- package/components/{p-BoSYRCNp.js → p-BceRDckL.js} +4 -4
- package/components/{p-BoSYRCNp.js.map → p-BceRDckL.js.map} +1 -1
- package/components/{p-BZlKeCFb.js → p-BuCcV5P1.js} +9 -9
- package/components/p-BuCcV5P1.js.map +1 -0
- package/components/{p-B7s906mS.js → p-CG_jPYOl.js} +5 -5
- package/components/{p-B7s906mS.js.map → p-CG_jPYOl.js.map} +1 -1
- package/components/p-CaibVX_2.js +3539 -0
- package/components/p-CaibVX_2.js.map +1 -0
- package/components/{p-CowZ-pDD.js → p-CgQQYnEy.js} +75 -39
- package/components/p-CgQQYnEy.js.map +1 -0
- package/components/{p-yb0Kv4Y6.js → p-DTMrBXCl.js} +24 -9
- package/components/p-DTMrBXCl.js.map +1 -0
- package/components/{p-C9R8N06B.js → p-EjoVBa5a.js} +3 -3
- package/components/{p-C9R8N06B.js.map → p-EjoVBa5a.js.map} +1 -1
- package/components/{p-CKp062X8.js → p-ox2syNht.js} +6 -6
- package/components/{p-CKp062X8.js.map → p-ox2syNht.js.map} +1 -1
- package/components/qds-action-item.js +3 -3
- package/components/qds-avatar-media.js +1 -1
- package/components/qds-breadcrumb-item.js +11 -6
- package/components/qds-breadcrumb-item.js.map +1 -1
- package/components/qds-button.js +9 -9
- package/components/qds-button.js.map +1 -1
- package/components/qds-checkbox.js +1 -1
- package/components/qds-chip.js +5 -5
- package/components/qds-chip.js.map +1 -1
- package/components/qds-dialog.js +5 -5
- package/components/qds-dialog.js.map +1 -1
- package/components/qds-divider.js +1 -1
- package/components/qds-dropdown.js +1 -1
- package/components/qds-form-message.js +23 -17
- package/components/qds-form-message.js.map +1 -1
- package/components/qds-icon-button.js +1 -1
- package/components/qds-icon-tab.js +4 -4
- package/components/qds-icon.js +1 -1
- package/components/qds-inline-link.js +5 -5
- package/components/qds-inline-link.js.map +1 -1
- package/components/qds-input.js +3 -3
- package/components/qds-label.js +2 -2
- package/components/qds-list-item.js +16 -13
- package/components/qds-list-item.js.map +1 -1
- package/components/qds-loader.js +1 -1
- package/components/qds-menu-item.js +38 -12
- package/components/qds-menu-item.js.map +1 -1
- package/components/qds-mini-button.js +1 -1
- package/components/qds-progress-bar.js +1 -1
- package/components/qds-radio.js +1 -1
- package/components/qds-select.js +3 -3
- package/components/qds-standalone-link.js +4 -4
- package/components/qds-switch.js +6 -6
- package/components/qds-switch.js.map +1 -1
- package/components/qds-tab.js +7 -7
- package/components/qds-tabbar.js +59 -38
- package/components/qds-tabbar.js.map +1 -1
- package/components/qds-table-cell.js +2 -2
- package/components/qds-table-head-cell.js +2 -2
- package/components/qds-table-row.js +1 -1
- package/components/qds-table.js +1 -1
- package/components/qds-tag.js +1 -1
- package/components/qds-textarea.js +3 -3
- package/components/qds-title.js +1 -1
- package/components/qds-tooltip.js +1 -1
- package/dist/cjs/helpers-DjUgyTKn.js +3559 -0
- package/dist/cjs/helpers-DjUgyTKn.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/qds-action-item.cjs.entry.js +1 -1
- package/dist/cjs/qds-avatar-media.qds-checkbox.qds-radio.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-avatar-media_3.cjs.entry.js +72 -36
- package/dist/cjs/qds-breadcrumb-item.cjs.entry.js +9 -4
- package/dist/cjs/qds-breadcrumb-item.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-button.cjs.entry.js +7 -7
- package/dist/cjs/qds-button.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-chip.cjs.entry.js +2 -2
- package/dist/cjs/qds-chip.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-dialog.cjs.entry.js +2 -2
- package/dist/cjs/qds-dialog.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-divider.qds-icon-button.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-divider_2.cjs.entry.js +3 -3
- package/dist/cjs/qds-dropdown.cjs.entry.js +20 -6
- package/dist/cjs/qds-dropdown.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-form-message.cjs.entry.js +26 -16
- package/dist/cjs/qds-form-message.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-icon-tab.cjs.entry.js +1 -1
- package/dist/cjs/qds-icon.cjs.entry.js +1 -1
- package/dist/cjs/qds-inline-link.cjs.entry.js +4 -4
- package/dist/cjs/qds-inline-link.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-input.cjs.entry.js +1 -1
- package/dist/cjs/qds-label.cjs.entry.js +1 -1
- package/dist/cjs/qds-list-item.cjs.entry.js +8 -5
- package/dist/cjs/qds-list-item.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-menu-item.cjs.entry.js +34 -8
- package/dist/cjs/qds-menu-item.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-mini-button.cjs.entry.js +2 -2
- package/dist/cjs/qds-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/qds-select.cjs.entry.js +2 -2
- package/dist/cjs/qds-standalone-link.cjs.entry.js +3 -3
- package/dist/cjs/qds-switch.cjs.entry.js +5 -5
- package/dist/cjs/qds-switch.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-tab.cjs.entry.js +4 -4
- package/dist/cjs/qds-tabbar.cjs.entry.js +57 -33
- package/dist/cjs/qds-tabbar.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-table-cell.cjs.entry.js +2 -2
- package/dist/cjs/qds-table-head-cell.cjs.entry.js +2 -2
- package/dist/cjs/qds-table-row.cjs.entry.js +1 -1
- package/dist/cjs/qds-table.cjs.entry.js +1 -1
- package/dist/cjs/qds-tag.cjs.entry.js +3 -3
- package/dist/cjs/qds-textarea.cjs.entry.js +3 -3
- package/dist/cjs/qds-title.cjs.entry.js +2 -2
- package/dist/cjs/qds-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/qds.cjs.js +1 -1
- package/dist/custom-elements.json +224 -70
- package/dist/docs.json +48 -6
- package/dist/esm/helpers-mPQzhx-O.js +3539 -0
- package/dist/esm/helpers-mPQzhx-O.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/qds-action-item.entry.js +1 -1
- package/dist/esm/qds-avatar-media.qds-checkbox.qds-radio.entry.js.map +1 -1
- package/dist/esm/qds-avatar-media_3.entry.js +72 -36
- package/dist/esm/qds-breadcrumb-item.entry.js +9 -4
- package/dist/esm/qds-breadcrumb-item.entry.js.map +1 -1
- package/dist/esm/qds-button.entry.js +7 -7
- package/dist/esm/qds-button.entry.js.map +1 -1
- package/dist/esm/qds-chip.entry.js +2 -2
- package/dist/esm/qds-chip.entry.js.map +1 -1
- package/dist/esm/qds-dialog.entry.js +2 -2
- package/dist/esm/qds-dialog.entry.js.map +1 -1
- package/dist/esm/qds-divider.qds-icon-button.entry.js.map +1 -1
- package/dist/esm/qds-divider_2.entry.js +3 -3
- package/dist/esm/qds-dropdown.entry.js +20 -6
- package/dist/esm/qds-dropdown.entry.js.map +1 -1
- package/dist/esm/qds-form-message.entry.js +26 -16
- package/dist/esm/qds-form-message.entry.js.map +1 -1
- package/dist/esm/qds-icon-tab.entry.js +1 -1
- package/dist/esm/qds-icon.entry.js +1 -1
- package/dist/esm/qds-inline-link.entry.js +4 -4
- package/dist/esm/qds-inline-link.entry.js.map +1 -1
- package/dist/esm/qds-input.entry.js +1 -1
- package/dist/esm/qds-label.entry.js +1 -1
- package/dist/esm/qds-list-item.entry.js +8 -5
- package/dist/esm/qds-list-item.entry.js.map +1 -1
- package/dist/esm/qds-menu-item.entry.js +34 -8
- package/dist/esm/qds-menu-item.entry.js.map +1 -1
- package/dist/esm/qds-mini-button.entry.js +2 -2
- package/dist/esm/qds-progress-bar.entry.js +1 -1
- package/dist/esm/qds-select.entry.js +2 -2
- package/dist/esm/qds-standalone-link.entry.js +3 -3
- package/dist/esm/qds-switch.entry.js +5 -5
- package/dist/esm/qds-switch.entry.js.map +1 -1
- package/dist/esm/qds-tab.entry.js +4 -4
- package/dist/esm/qds-tabbar.entry.js +57 -33
- package/dist/esm/qds-tabbar.entry.js.map +1 -1
- package/dist/esm/qds-table-cell.entry.js +2 -2
- package/dist/esm/qds-table-head-cell.entry.js +2 -2
- package/dist/esm/qds-table-row.entry.js +1 -1
- package/dist/esm/qds-table.entry.js +1 -1
- package/dist/esm/qds-tag.entry.js +3 -3
- package/dist/esm/qds-textarea.entry.js +3 -3
- package/dist/esm/qds-title.entry.js +2 -2
- package/dist/esm/qds-tooltip.entry.js +1 -1
- package/dist/esm/qds.js +1 -1
- package/dist/types/components/checkbox/checkbox.d.ts +9 -9
- package/dist/types/components/dropdown/dropdown.d.ts +1 -0
- package/dist/types/components/form-message/form-message.d.ts +2 -0
- package/dist/types/components/menu-item/menu-item.d.ts +1 -0
- package/dist/types/components/tabbar/tabbar.d.ts +2 -0
- package/dist/types/components.d.ts +3 -2
- package/dist/types/helpers.d.ts +6 -1
- package/dist/vscode.html-custom-data.json +1 -1
- package/hydrate/index.js +3560 -193
- package/hydrate/index.mjs +3560 -193
- package/package.json +2 -1
- package/components/p-BZlKeCFb.js.map +0 -1
- package/components/p-BalM52S_.js +0 -291
- package/components/p-BalM52S_.js.map +0 -1
- package/components/p-CVuTVnQo.js.map +0 -1
- package/components/p-CowZ-pDD.js.map +0 -1
- package/components/p-yb0Kv4Y6.js.map +0 -1
- package/dist/cjs/helpers-Qs3cpKiI.js +0 -308
- package/dist/cjs/helpers-Qs3cpKiI.js.map +0 -1
- package/dist/esm/helpers-Fe2AA6uo.js +0 -291
- package/dist/esm/helpers-Fe2AA6uo.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"p-CaibVX_2.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AAEO,MAAM,eAAe,GAAG;AAC/B,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,CAAC;AACM,MAAM,mBAAmB,GAAG;AACnC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO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","names":["sharedGraphemeSegmenter","getSharedGraphemeSegmenter"],"sources":["../../node_modules/@chenglou/pretext/dist/generated/bidi-data.js","../../node_modules/@chenglou/pretext/dist/bidi.js","../../node_modules/@chenglou/pretext/dist/analysis.js","../../node_modules/@chenglou/pretext/dist/measurement.js","../../node_modules/@chenglou/pretext/dist/line-break.js","../../node_modules/@chenglou/pretext/dist/layout.js","src/helpers.ts"],"sourcesContent":["// Generated by scripts/generate-bidi-data.ts from scripts/unicode/DerivedBidiClass-17.0.0.txt.\n// Do not edit by hand. Regenerate with `bun run generate:bidi-data`.\n// Formatting and isolate controls are projected onto `BN` because the rich\n// bidi helper consumes a simplified class set and does not model UBA isolates.\nexport const unicodeBidiDataVersion = '17.0.0';\nexport const latin1BidiTypes = [\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'S',\n 'B',\n 'S',\n 'WS',\n 'B',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'B',\n 'B',\n 'B',\n 'S',\n 'WS',\n 'ON',\n 'ON',\n 'ET',\n 'ET',\n 'ET',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ES',\n 'CS',\n 'ES',\n 'CS',\n 'CS',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'CS',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'B',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'CS',\n 'ON',\n 'ET',\n 'ET',\n 'ET',\n 'ET',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'ON',\n 'ON',\n 'BN',\n 'ON',\n 'ON',\n 'ET',\n 'ET',\n 'EN',\n 'EN',\n 'ON',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'EN',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n];\nexport const nonLatin1BidiRanges = [\n [0x2B9, 0x2BA, 'ON'],\n [0x2C2, 0x2CF, 'ON'],\n [0x2D2, 0x2DF, 'ON'],\n [0x2E5, 0x2ED, 'ON'],\n [0x2EF, 0x2FF, 'ON'],\n [0x300, 0x36F, 'NSM'],\n [0x374, 0x375, 'ON'],\n [0x37E, 0x37E, 'ON'],\n [0x384, 0x385, 'ON'],\n [0x387, 0x387, 'ON'],\n [0x3F6, 0x3F6, 'ON'],\n [0x483, 0x489, 'NSM'],\n [0x58A, 0x58A, 'ON'],\n [0x58D, 0x58E, 'ON'],\n [0x58F, 0x58F, 'ET'],\n [0x590, 0x590, 'R'],\n [0x591, 0x5BD, 'NSM'],\n [0x5BE, 0x5BE, 'R'],\n [0x5BF, 0x5BF, 'NSM'],\n [0x5C0, 0x5C0, 'R'],\n [0x5C1, 0x5C2, 'NSM'],\n [0x5C3, 0x5C3, 'R'],\n [0x5C4, 0x5C5, 'NSM'],\n [0x5C6, 0x5C6, 'R'],\n [0x5C7, 0x5C7, 'NSM'],\n [0x5C8, 0x5FF, 'R'],\n [0x600, 0x605, 'AN'],\n [0x606, 0x607, 'ON'],\n [0x608, 0x608, 'AL'],\n [0x609, 0x60A, 'ET'],\n [0x60B, 0x60B, 'AL'],\n [0x60C, 0x60C, 'CS'],\n [0x60D, 0x60D, 'AL'],\n [0x60E, 0x60F, 'ON'],\n [0x610, 0x61A, 'NSM'],\n [0x61B, 0x64A, 'AL'],\n [0x64B, 0x65F, 'NSM'],\n [0x660, 0x669, 'AN'],\n [0x66A, 0x66A, 'ET'],\n [0x66B, 0x66C, 'AN'],\n [0x66D, 0x66F, 'AL'],\n [0x670, 0x670, 'NSM'],\n [0x671, 0x6D5, 'AL'],\n [0x6D6, 0x6DC, 'NSM'],\n [0x6DD, 0x6DD, 'AN'],\n [0x6DE, 0x6DE, 'ON'],\n [0x6DF, 0x6E4, 'NSM'],\n [0x6E5, 0x6E6, 'AL'],\n [0x6E7, 0x6E8, 'NSM'],\n [0x6E9, 0x6E9, 'ON'],\n [0x6EA, 0x6ED, 'NSM'],\n [0x6EE, 0x6EF, 'AL'],\n [0x6F0, 0x6F9, 'EN'],\n [0x6FA, 0x710, 'AL'],\n [0x711, 0x711, 'NSM'],\n [0x712, 0x72F, 'AL'],\n [0x730, 0x74A, 'NSM'],\n [0x74B, 0x7A5, 'AL'],\n [0x7A6, 0x7B0, 'NSM'],\n [0x7B1, 0x7BF, 'AL'],\n [0x7C0, 0x7EA, 'R'],\n [0x7EB, 0x7F3, 'NSM'],\n [0x7F4, 0x7F5, 'R'],\n [0x7F6, 0x7F9, 'ON'],\n [0x7FA, 0x7FC, 'R'],\n [0x7FD, 0x7FD, 'NSM'],\n [0x7FE, 0x815, 'R'],\n [0x816, 0x819, 'NSM'],\n [0x81A, 0x81A, 'R'],\n [0x81B, 0x823, 'NSM'],\n [0x824, 0x824, 'R'],\n [0x825, 0x827, 'NSM'],\n [0x828, 0x828, 'R'],\n [0x829, 0x82D, 'NSM'],\n [0x82E, 0x858, 'R'],\n [0x859, 0x85B, 'NSM'],\n [0x85C, 0x85F, 'R'],\n [0x860, 0x88F, 'AL'],\n [0x890, 0x891, 'AN'],\n [0x892, 0x896, 'AL'],\n [0x897, 0x89F, 'NSM'],\n [0x8A0, 0x8C9, 'AL'],\n [0x8CA, 0x8E1, 'NSM'],\n [0x8E2, 0x8E2, 'AN'],\n [0x8E3, 0x902, 'NSM'],\n [0x93A, 0x93A, 'NSM'],\n [0x93C, 0x93C, 'NSM'],\n [0x941, 0x948, 'NSM'],\n [0x94D, 0x94D, 'NSM'],\n [0x951, 0x957, 'NSM'],\n [0x962, 0x963, 'NSM'],\n [0x981, 0x981, 'NSM'],\n [0x9BC, 0x9BC, 'NSM'],\n [0x9C1, 0x9C4, 'NSM'],\n [0x9CD, 0x9CD, 'NSM'],\n [0x9E2, 0x9E3, 'NSM'],\n [0x9F2, 0x9F3, 'ET'],\n [0x9FB, 0x9FB, 'ET'],\n [0x9FE, 0x9FE, 'NSM'],\n [0xA01, 0xA02, 'NSM'],\n [0xA3C, 0xA3C, 'NSM'],\n [0xA41, 0xA42, 'NSM'],\n [0xA47, 0xA48, 'NSM'],\n [0xA4B, 0xA4D, 'NSM'],\n [0xA51, 0xA51, 'NSM'],\n [0xA70, 0xA71, 'NSM'],\n [0xA75, 0xA75, 'NSM'],\n [0xA81, 0xA82, 'NSM'],\n [0xABC, 0xABC, 'NSM'],\n [0xAC1, 0xAC5, 'NSM'],\n [0xAC7, 0xAC8, 'NSM'],\n [0xACD, 0xACD, 'NSM'],\n [0xAE2, 0xAE3, 'NSM'],\n [0xAF1, 0xAF1, 'ET'],\n [0xAFA, 0xAFF, 'NSM'],\n [0xB01, 0xB01, 'NSM'],\n [0xB3C, 0xB3C, 'NSM'],\n [0xB3F, 0xB3F, 'NSM'],\n [0xB41, 0xB44, 'NSM'],\n [0xB4D, 0xB4D, 'NSM'],\n [0xB55, 0xB56, 'NSM'],\n [0xB62, 0xB63, 'NSM'],\n [0xB82, 0xB82, 'NSM'],\n [0xBC0, 0xBC0, 'NSM'],\n [0xBCD, 0xBCD, 'NSM'],\n [0xBF3, 0xBF8, 'ON'],\n [0xBF9, 0xBF9, 'ET'],\n [0xBFA, 0xBFA, 'ON'],\n [0xC00, 0xC00, 'NSM'],\n [0xC04, 0xC04, 'NSM'],\n [0xC3C, 0xC3C, 'NSM'],\n [0xC3E, 0xC40, 'NSM'],\n [0xC46, 0xC48, 'NSM'],\n [0xC4A, 0xC4D, 'NSM'],\n [0xC55, 0xC56, 'NSM'],\n [0xC62, 0xC63, 'NSM'],\n [0xC78, 0xC7E, 'ON'],\n [0xC81, 0xC81, 'NSM'],\n [0xCBC, 0xCBC, 'NSM'],\n [0xCCC, 0xCCD, 'NSM'],\n [0xCE2, 0xCE3, 'NSM'],\n [0xD00, 0xD01, 'NSM'],\n [0xD3B, 0xD3C, 'NSM'],\n [0xD41, 0xD44, 'NSM'],\n [0xD4D, 0xD4D, 'NSM'],\n [0xD62, 0xD63, 'NSM'],\n [0xD81, 0xD81, 'NSM'],\n [0xDCA, 0xDCA, 'NSM'],\n [0xDD2, 0xDD4, 'NSM'],\n [0xDD6, 0xDD6, 'NSM'],\n [0xE31, 0xE31, 'NSM'],\n [0xE34, 0xE3A, 'NSM'],\n [0xE3F, 0xE3F, 'ET'],\n [0xE47, 0xE4E, 'NSM'],\n [0xEB1, 0xEB1, 'NSM'],\n [0xEB4, 0xEBC, 'NSM'],\n [0xEC8, 0xECE, 'NSM'],\n [0xF18, 0xF19, 'NSM'],\n [0xF35, 0xF35, 'NSM'],\n [0xF37, 0xF37, 'NSM'],\n [0xF39, 0xF39, 'NSM'],\n [0xF3A, 0xF3D, 'ON'],\n [0xF71, 0xF7E, 'NSM'],\n [0xF80, 0xF84, 'NSM'],\n [0xF86, 0xF87, 'NSM'],\n [0xF8D, 0xF97, 'NSM'],\n [0xF99, 0xFBC, 'NSM'],\n [0xFC6, 0xFC6, 'NSM'],\n [0x102D, 0x1030, 'NSM'],\n [0x1032, 0x1037, 'NSM'],\n [0x1039, 0x103A, 'NSM'],\n [0x103D, 0x103E, 'NSM'],\n [0x1058, 0x1059, 'NSM'],\n [0x105E, 0x1060, 'NSM'],\n [0x1071, 0x1074, 'NSM'],\n [0x1082, 0x1082, 'NSM'],\n [0x1085, 0x1086, 'NSM'],\n [0x108D, 0x108D, 'NSM'],\n [0x109D, 0x109D, 'NSM'],\n [0x135D, 0x135F, 'NSM'],\n [0x1390, 0x1399, 'ON'],\n [0x1400, 0x1400, 'ON'],\n [0x1680, 0x1680, 'WS'],\n [0x169B, 0x169C, 'ON'],\n [0x1712, 0x1714, 'NSM'],\n [0x1732, 0x1733, 'NSM'],\n [0x1752, 0x1753, 'NSM'],\n [0x1772, 0x1773, 'NSM'],\n [0x17B4, 0x17B5, 'NSM'],\n [0x17B7, 0x17BD, 'NSM'],\n [0x17C6, 0x17C6, 'NSM'],\n [0x17C9, 0x17D3, 'NSM'],\n [0x17DB, 0x17DB, 'ET'],\n [0x17DD, 0x17DD, 'NSM'],\n [0x17F0, 0x17F9, 'ON'],\n [0x1800, 0x180A, 'ON'],\n [0x180B, 0x180D, 'NSM'],\n [0x180E, 0x180E, 'BN'],\n [0x180F, 0x180F, 'NSM'],\n [0x1885, 0x1886, 'NSM'],\n [0x18A9, 0x18A9, 'NSM'],\n [0x1920, 0x1922, 'NSM'],\n [0x1927, 0x1928, 'NSM'],\n [0x1932, 0x1932, 'NSM'],\n [0x1939, 0x193B, 'NSM'],\n [0x1940, 0x1940, 'ON'],\n [0x1944, 0x1945, 'ON'],\n [0x19DE, 0x19FF, 'ON'],\n [0x1A17, 0x1A18, 'NSM'],\n [0x1A1B, 0x1A1B, 'NSM'],\n [0x1A56, 0x1A56, 'NSM'],\n [0x1A58, 0x1A5E, 'NSM'],\n [0x1A60, 0x1A60, 'NSM'],\n [0x1A62, 0x1A62, 'NSM'],\n [0x1A65, 0x1A6C, 'NSM'],\n [0x1A73, 0x1A7C, 'NSM'],\n [0x1A7F, 0x1A7F, 'NSM'],\n [0x1AB0, 0x1ADD, 'NSM'],\n [0x1AE0, 0x1AEB, 'NSM'],\n [0x1B00, 0x1B03, 'NSM'],\n [0x1B34, 0x1B34, 'NSM'],\n [0x1B36, 0x1B3A, 'NSM'],\n [0x1B3C, 0x1B3C, 'NSM'],\n [0x1B42, 0x1B42, 'NSM'],\n [0x1B6B, 0x1B73, 'NSM'],\n [0x1B80, 0x1B81, 'NSM'],\n [0x1BA2, 0x1BA5, 'NSM'],\n [0x1BA8, 0x1BA9, 'NSM'],\n [0x1BAB, 0x1BAD, 'NSM'],\n [0x1BE6, 0x1BE6, 'NSM'],\n [0x1BE8, 0x1BE9, 'NSM'],\n [0x1BED, 0x1BED, 'NSM'],\n [0x1BEF, 0x1BF1, 'NSM'],\n [0x1C2C, 0x1C33, 'NSM'],\n [0x1C36, 0x1C37, 'NSM'],\n [0x1CD0, 0x1CD2, 'NSM'],\n [0x1CD4, 0x1CE0, 'NSM'],\n [0x1CE2, 0x1CE8, 'NSM'],\n [0x1CED, 0x1CED, 'NSM'],\n [0x1CF4, 0x1CF4, 'NSM'],\n [0x1CF8, 0x1CF9, 'NSM'],\n [0x1DC0, 0x1DFF, 'NSM'],\n [0x1FBD, 0x1FBD, 'ON'],\n [0x1FBF, 0x1FC1, 'ON'],\n [0x1FCD, 0x1FCF, 'ON'],\n [0x1FDD, 0x1FDF, 'ON'],\n [0x1FED, 0x1FEF, 'ON'],\n [0x1FFD, 0x1FFE, 'ON'],\n [0x2000, 0x200A, 'WS'],\n [0x200B, 0x200D, 'BN'],\n [0x200F, 0x200F, 'R'],\n [0x2010, 0x2027, 'ON'],\n [0x2028, 0x2028, 'WS'],\n [0x2029, 0x2029, 'B'],\n [0x202A, 0x202E, 'BN'],\n [0x202F, 0x202F, 'CS'],\n [0x2030, 0x2034, 'ET'],\n [0x2035, 0x2043, 'ON'],\n [0x2044, 0x2044, 'CS'],\n [0x2045, 0x205E, 'ON'],\n [0x205F, 0x205F, 'WS'],\n [0x2060, 0x206F, 'BN'],\n [0x2070, 0x2070, 'EN'],\n [0x2074, 0x2079, 'EN'],\n [0x207A, 0x207B, 'ES'],\n [0x207C, 0x207E, 'ON'],\n [0x2080, 0x2089, 'EN'],\n [0x208A, 0x208B, 'ES'],\n [0x208C, 0x208E, 'ON'],\n [0x20A0, 0x20CF, 'ET'],\n [0x20D0, 0x20F0, 'NSM'],\n [0x2100, 0x2101, 'ON'],\n [0x2103, 0x2106, 'ON'],\n [0x2108, 0x2109, 'ON'],\n [0x2114, 0x2114, 'ON'],\n [0x2116, 0x2118, 'ON'],\n [0x211E, 0x2123, 'ON'],\n [0x2125, 0x2125, 'ON'],\n [0x2127, 0x2127, 'ON'],\n [0x2129, 0x2129, 'ON'],\n [0x212E, 0x212E, 'ET'],\n [0x213A, 0x213B, 'ON'],\n [0x2140, 0x2144, 'ON'],\n [0x214A, 0x214D, 'ON'],\n [0x2150, 0x215F, 'ON'],\n [0x2189, 0x218B, 'ON'],\n [0x2190, 0x2211, 'ON'],\n [0x2212, 0x2212, 'ES'],\n [0x2213, 0x2213, 'ET'],\n [0x2214, 0x2335, 'ON'],\n [0x237B, 0x2394, 'ON'],\n [0x2396, 0x2429, 'ON'],\n [0x2440, 0x244A, 'ON'],\n [0x2460, 0x2487, 'ON'],\n [0x2488, 0x249B, 'EN'],\n [0x24EA, 0x26AB, 'ON'],\n [0x26AD, 0x27FF, 'ON'],\n [0x2900, 0x2B73, 'ON'],\n [0x2B76, 0x2BFF, 'ON'],\n [0x2CE5, 0x2CEA, 'ON'],\n [0x2CEF, 0x2CF1, 'NSM'],\n [0x2CF9, 0x2CFF, 'ON'],\n [0x2D7F, 0x2D7F, 'NSM'],\n [0x2DE0, 0x2DFF, 'NSM'],\n [0x2E00, 0x2E5D, 'ON'],\n [0x2E80, 0x2E99, 'ON'],\n [0x2E9B, 0x2EF3, 'ON'],\n [0x2F00, 0x2FD5, 'ON'],\n [0x2FF0, 0x2FFF, 'ON'],\n [0x3000, 0x3000, 'WS'],\n [0x3001, 0x3004, 'ON'],\n [0x3008, 0x3020, 'ON'],\n [0x302A, 0x302D, 'NSM'],\n [0x3030, 0x3030, 'ON'],\n [0x3036, 0x3037, 'ON'],\n [0x303D, 0x303F, 'ON'],\n [0x3099, 0x309A, 'NSM'],\n [0x309B, 0x309C, 'ON'],\n [0x30A0, 0x30A0, 'ON'],\n [0x30FB, 0x30FB, 'ON'],\n [0x31C0, 0x31E5, 'ON'],\n [0x31EF, 0x31EF, 'ON'],\n [0x321D, 0x321E, 'ON'],\n [0x3250, 0x325F, 'ON'],\n [0x327C, 0x327E, 'ON'],\n [0x32B1, 0x32BF, 'ON'],\n [0x32CC, 0x32CF, 'ON'],\n [0x3377, 0x337A, 'ON'],\n [0x33DE, 0x33DF, 'ON'],\n [0x33FF, 0x33FF, 'ON'],\n [0x4DC0, 0x4DFF, 'ON'],\n [0xA490, 0xA4C6, 'ON'],\n [0xA60D, 0xA60F, 'ON'],\n [0xA66F, 0xA672, 'NSM'],\n [0xA673, 0xA673, 'ON'],\n [0xA674, 0xA67D, 'NSM'],\n [0xA67E, 0xA67F, 'ON'],\n [0xA69E, 0xA69F, 'NSM'],\n [0xA6F0, 0xA6F1, 'NSM'],\n [0xA700, 0xA721, 'ON'],\n [0xA788, 0xA788, 'ON'],\n [0xA802, 0xA802, 'NSM'],\n [0xA806, 0xA806, 'NSM'],\n [0xA80B, 0xA80B, 'NSM'],\n [0xA825, 0xA826, 'NSM'],\n [0xA828, 0xA82B, 'ON'],\n [0xA82C, 0xA82C, 'NSM'],\n [0xA838, 0xA839, 'ET'],\n [0xA874, 0xA877, 'ON'],\n [0xA8C4, 0xA8C5, 'NSM'],\n [0xA8E0, 0xA8F1, 'NSM'],\n [0xA8FF, 0xA8FF, 'NSM'],\n [0xA926, 0xA92D, 'NSM'],\n [0xA947, 0xA951, 'NSM'],\n [0xA980, 0xA982, 'NSM'],\n [0xA9B3, 0xA9B3, 'NSM'],\n [0xA9B6, 0xA9B9, 'NSM'],\n [0xA9BC, 0xA9BD, 'NSM'],\n [0xA9E5, 0xA9E5, 'NSM'],\n [0xAA29, 0xAA2E, 'NSM'],\n [0xAA31, 0xAA32, 'NSM'],\n [0xAA35, 0xAA36, 'NSM'],\n [0xAA43, 0xAA43, 'NSM'],\n [0xAA4C, 0xAA4C, 'NSM'],\n [0xAA7C, 0xAA7C, 'NSM'],\n [0xAAB0, 0xAAB0, 'NSM'],\n [0xAAB2, 0xAAB4, 'NSM'],\n [0xAAB7, 0xAAB8, 'NSM'],\n [0xAABE, 0xAABF, 'NSM'],\n [0xAAC1, 0xAAC1, 'NSM'],\n [0xAAEC, 0xAAED, 'NSM'],\n [0xAAF6, 0xAAF6, 'NSM'],\n [0xAB6A, 0xAB6B, 'ON'],\n [0xABE5, 0xABE5, 'NSM'],\n [0xABE8, 0xABE8, 'NSM'],\n [0xABED, 0xABED, 'NSM'],\n [0xFB1D, 0xFB1D, 'R'],\n [0xFB1E, 0xFB1E, 'NSM'],\n [0xFB1F, 0xFB28, 'R'],\n [0xFB29, 0xFB29, 'ES'],\n [0xFB2A, 0xFB4F, 'R'],\n [0xFB50, 0xFBC2, 'AL'],\n [0xFBC3, 0xFBD2, 'ON'],\n [0xFBD3, 0xFD3D, 'AL'],\n [0xFD3E, 0xFD4F, 'ON'],\n [0xFD50, 0xFD8F, 'AL'],\n [0xFD90, 0xFD91, 'ON'],\n [0xFD92, 0xFDC7, 'AL'],\n [0xFDC8, 0xFDCF, 'ON'],\n [0xFDD0, 0xFDEF, 'BN'],\n [0xFDF0, 0xFDFC, 'AL'],\n [0xFDFD, 0xFDFF, 'ON'],\n [0xFE00, 0xFE0F, 'NSM'],\n [0xFE10, 0xFE19, 'ON'],\n [0xFE20, 0xFE2F, 'NSM'],\n [0xFE30, 0xFE4F, 'ON'],\n [0xFE50, 0xFE50, 'CS'],\n [0xFE51, 0xFE51, 'ON'],\n [0xFE52, 0xFE52, 'CS'],\n [0xFE54, 0xFE54, 'ON'],\n [0xFE55, 0xFE55, 'CS'],\n [0xFE56, 0xFE5E, 'ON'],\n [0xFE5F, 0xFE5F, 'ET'],\n [0xFE60, 0xFE61, 'ON'],\n [0xFE62, 0xFE63, 'ES'],\n [0xFE64, 0xFE66, 'ON'],\n [0xFE68, 0xFE68, 'ON'],\n [0xFE69, 0xFE6A, 'ET'],\n [0xFE6B, 0xFE6B, 'ON'],\n [0xFE70, 0xFEFE, 'AL'],\n [0xFEFF, 0xFEFF, 'BN'],\n [0xFF01, 0xFF02, 'ON'],\n [0xFF03, 0xFF05, 'ET'],\n [0xFF06, 0xFF0A, 'ON'],\n [0xFF0B, 0xFF0B, 'ES'],\n [0xFF0C, 0xFF0C, 'CS'],\n [0xFF0D, 0xFF0D, 'ES'],\n [0xFF0E, 0xFF0F, 'CS'],\n [0xFF10, 0xFF19, 'EN'],\n [0xFF1A, 0xFF1A, 'CS'],\n [0xFF1B, 0xFF20, 'ON'],\n [0xFF3B, 0xFF40, 'ON'],\n [0xFF5B, 0xFF65, 'ON'],\n [0xFFE0, 0xFFE1, 'ET'],\n [0xFFE2, 0xFFE4, 'ON'],\n [0xFFE5, 0xFFE6, 'ET'],\n [0xFFE8, 0xFFEE, 'ON'],\n [0xFFF0, 0xFFF8, 'BN'],\n [0xFFF9, 0xFFFD, 'ON'],\n [0xFFFE, 0xFFFF, 'BN'],\n [0x10101, 0x10101, 'ON'],\n [0x10140, 0x1018C, 'ON'],\n [0x10190, 0x1019C, 'ON'],\n [0x101A0, 0x101A0, 'ON'],\n [0x101FD, 0x101FD, 'NSM'],\n [0x102E0, 0x102E0, 'NSM'],\n [0x102E1, 0x102FB, 'EN'],\n [0x10376, 0x1037A, 'NSM'],\n [0x10800, 0x1091E, 'R'],\n [0x1091F, 0x1091F, 'ON'],\n [0x10920, 0x10A00, 'R'],\n [0x10A01, 0x10A03, 'NSM'],\n [0x10A04, 0x10A04, 'R'],\n [0x10A05, 0x10A06, 'NSM'],\n [0x10A07, 0x10A0B, 'R'],\n [0x10A0C, 0x10A0F, 'NSM'],\n [0x10A10, 0x10A37, 'R'],\n [0x10A38, 0x10A3A, 'NSM'],\n [0x10A3B, 0x10A3E, 'R'],\n [0x10A3F, 0x10A3F, 'NSM'],\n [0x10A40, 0x10AE4, 'R'],\n [0x10AE5, 0x10AE6, 'NSM'],\n [0x10AE7, 0x10B38, 'R'],\n [0x10B39, 0x10B3F, 'ON'],\n [0x10B40, 0x10CFF, 'R'],\n [0x10D00, 0x10D23, 'AL'],\n [0x10D24, 0x10D27, 'NSM'],\n [0x10D28, 0x10D2F, 'AL'],\n [0x10D30, 0x10D39, 'AN'],\n [0x10D3A, 0x10D3F, 'AL'],\n [0x10D40, 0x10D49, 'AN'],\n [0x10D4A, 0x10D68, 'R'],\n [0x10D69, 0x10D6D, 'NSM'],\n [0x10D6E, 0x10D6E, 'ON'],\n [0x10D6F, 0x10E5F, 'R'],\n [0x10E60, 0x10E7E, 'AN'],\n [0x10E7F, 0x10EAA, 'R'],\n [0x10EAB, 0x10EAC, 'NSM'],\n [0x10EAD, 0x10EBF, 'R'],\n [0x10EC0, 0x10ECF, 'AL'],\n [0x10ED0, 0x10ED8, 'ON'],\n [0x10ED9, 0x10EF9, 'AL'],\n [0x10EFA, 0x10EFF, 'NSM'],\n [0x10F00, 0x10F2F, 'R'],\n [0x10F30, 0x10F45, 'AL'],\n [0x10F46, 0x10F50, 'NSM'],\n [0x10F51, 0x10F6F, 'AL'],\n [0x10F70, 0x10F81, 'R'],\n [0x10F82, 0x10F85, 'NSM'],\n [0x10F86, 0x10FFF, 'R'],\n [0x11001, 0x11001, 'NSM'],\n [0x11038, 0x11046, 'NSM'],\n [0x11052, 0x11065, 'ON'],\n [0x11070, 0x11070, 'NSM'],\n [0x11073, 0x11074, 'NSM'],\n [0x1107F, 0x11081, 'NSM'],\n [0x110B3, 0x110B6, 'NSM'],\n [0x110B9, 0x110BA, 'NSM'],\n [0x110C2, 0x110C2, 'NSM'],\n [0x11100, 0x11102, 'NSM'],\n [0x11127, 0x1112B, 'NSM'],\n [0x1112D, 0x11134, 'NSM'],\n [0x11173, 0x11173, 'NSM'],\n [0x11180, 0x11181, 'NSM'],\n [0x111B6, 0x111BE, 'NSM'],\n [0x111C9, 0x111CC, 'NSM'],\n [0x111CF, 0x111CF, 'NSM'],\n [0x1122F, 0x11231, 'NSM'],\n [0x11234, 0x11234, 'NSM'],\n [0x11236, 0x11237, 'NSM'],\n [0x1123E, 0x1123E, 'NSM'],\n [0x11241, 0x11241, 'NSM'],\n [0x112DF, 0x112DF, 'NSM'],\n [0x112E3, 0x112EA, 'NSM'],\n [0x11300, 0x11301, 'NSM'],\n [0x1133B, 0x1133C, 'NSM'],\n [0x11340, 0x11340, 'NSM'],\n [0x11366, 0x1136C, 'NSM'],\n [0x11370, 0x11374, 'NSM'],\n [0x113BB, 0x113C0, 'NSM'],\n [0x113CE, 0x113CE, 'NSM'],\n [0x113D0, 0x113D0, 'NSM'],\n [0x113D2, 0x113D2, 'NSM'],\n [0x113E1, 0x113E2, 'NSM'],\n [0x11438, 0x1143F, 'NSM'],\n [0x11442, 0x11444, 'NSM'],\n [0x11446, 0x11446, 'NSM'],\n [0x1145E, 0x1145E, 'NSM'],\n [0x114B3, 0x114B8, 'NSM'],\n [0x114BA, 0x114BA, 'NSM'],\n [0x114BF, 0x114C0, 'NSM'],\n [0x114C2, 0x114C3, 'NSM'],\n [0x115B2, 0x115B5, 'NSM'],\n [0x115BC, 0x115BD, 'NSM'],\n [0x115BF, 0x115C0, 'NSM'],\n [0x115DC, 0x115DD, 'NSM'],\n [0x11633, 0x1163A, 'NSM'],\n [0x1163D, 0x1163D, 'NSM'],\n [0x1163F, 0x11640, 'NSM'],\n [0x11660, 0x1166C, 'ON'],\n [0x116AB, 0x116AB, 'NSM'],\n [0x116AD, 0x116AD, 'NSM'],\n [0x116B0, 0x116B5, 'NSM'],\n [0x116B7, 0x116B7, 'NSM'],\n [0x1171D, 0x1171D, 'NSM'],\n [0x1171F, 0x1171F, 'NSM'],\n [0x11722, 0x11725, 'NSM'],\n [0x11727, 0x1172B, 'NSM'],\n [0x1182F, 0x11837, 'NSM'],\n [0x11839, 0x1183A, 'NSM'],\n [0x1193B, 0x1193C, 'NSM'],\n [0x1193E, 0x1193E, 'NSM'],\n [0x11943, 0x11943, 'NSM'],\n [0x119D4, 0x119D7, 'NSM'],\n [0x119DA, 0x119DB, 'NSM'],\n [0x119E0, 0x119E0, 'NSM'],\n [0x11A01, 0x11A06, 'NSM'],\n [0x11A09, 0x11A0A, 'NSM'],\n [0x11A33, 0x11A38, 'NSM'],\n [0x11A3B, 0x11A3E, 'NSM'],\n [0x11A47, 0x11A47, 'NSM'],\n [0x11A51, 0x11A56, 'NSM'],\n [0x11A59, 0x11A5B, 'NSM'],\n [0x11A8A, 0x11A96, 'NSM'],\n [0x11A98, 0x11A99, 'NSM'],\n [0x11B60, 0x11B60, 'NSM'],\n [0x11B62, 0x11B64, 'NSM'],\n [0x11B66, 0x11B66, 'NSM'],\n [0x11C30, 0x11C36, 'NSM'],\n [0x11C38, 0x11C3D, 'NSM'],\n [0x11C92, 0x11CA7, 'NSM'],\n [0x11CAA, 0x11CB0, 'NSM'],\n [0x11CB2, 0x11CB3, 'NSM'],\n [0x11CB5, 0x11CB6, 'NSM'],\n [0x11D31, 0x11D36, 'NSM'],\n [0x11D3A, 0x11D3A, 'NSM'],\n [0x11D3C, 0x11D3D, 'NSM'],\n [0x11D3F, 0x11D45, 'NSM'],\n [0x11D47, 0x11D47, 'NSM'],\n [0x11D90, 0x11D91, 'NSM'],\n [0x11D95, 0x11D95, 'NSM'],\n [0x11D97, 0x11D97, 'NSM'],\n [0x11EF3, 0x11EF4, 'NSM'],\n [0x11F00, 0x11F01, 'NSM'],\n [0x11F36, 0x11F3A, 'NSM'],\n [0x11F40, 0x11F40, 'NSM'],\n [0x11F42, 0x11F42, 'NSM'],\n [0x11F5A, 0x11F5A, 'NSM'],\n [0x11FD5, 0x11FDC, 'ON'],\n [0x11FDD, 0x11FE0, 'ET'],\n [0x11FE1, 0x11FF1, 'ON'],\n [0x13440, 0x13440, 'NSM'],\n [0x13447, 0x13455, 'NSM'],\n [0x1611E, 0x16129, 'NSM'],\n [0x1612D, 0x1612F, 'NSM'],\n [0x16AF0, 0x16AF4, 'NSM'],\n [0x16B30, 0x16B36, 'NSM'],\n [0x16F4F, 0x16F4F, 'NSM'],\n [0x16F8F, 0x16F92, 'NSM'],\n [0x16FE2, 0x16FE2, 'ON'],\n [0x16FE4, 0x16FE4, 'NSM'],\n [0x1BC9D, 0x1BC9E, 'NSM'],\n [0x1BCA0, 0x1BCA3, 'BN'],\n [0x1CC00, 0x1CCD5, 'ON'],\n [0x1CCF0, 0x1CCF9, 'EN'],\n [0x1CCFA, 0x1CCFC, 'ON'],\n [0x1CD00, 0x1CEB3, 'ON'],\n [0x1CEBA, 0x1CED0, 'ON'],\n [0x1CEE0, 0x1CEF0, 'ON'],\n [0x1CF00, 0x1CF2D, 'NSM'],\n [0x1CF30, 0x1CF46, 'NSM'],\n [0x1D167, 0x1D169, 'NSM'],\n [0x1D173, 0x1D17A, 'BN'],\n [0x1D17B, 0x1D182, 'NSM'],\n [0x1D185, 0x1D18B, 'NSM'],\n [0x1D1AA, 0x1D1AD, 'NSM'],\n [0x1D1E9, 0x1D1EA, 'ON'],\n [0x1D200, 0x1D241, 'ON'],\n [0x1D242, 0x1D244, 'NSM'],\n [0x1D245, 0x1D245, 'ON'],\n [0x1D300, 0x1D356, 'ON'],\n [0x1D6C1, 0x1D6C1, 'ON'],\n [0x1D6DB, 0x1D6DB, 'ON'],\n [0x1D6FB, 0x1D6FB, 'ON'],\n [0x1D715, 0x1D715, 'ON'],\n [0x1D735, 0x1D735, 'ON'],\n [0x1D74F, 0x1D74F, 'ON'],\n [0x1D76F, 0x1D76F, 'ON'],\n [0x1D789, 0x1D789, 'ON'],\n [0x1D7A9, 0x1D7A9, 'ON'],\n [0x1D7C3, 0x1D7C3, 'ON'],\n [0x1D7CE, 0x1D7FF, 'EN'],\n [0x1DA00, 0x1DA36, 'NSM'],\n [0x1DA3B, 0x1DA6C, 'NSM'],\n [0x1DA75, 0x1DA75, 'NSM'],\n [0x1DA84, 0x1DA84, 'NSM'],\n [0x1DA9B, 0x1DA9F, 'NSM'],\n [0x1DAA1, 0x1DAAF, 'NSM'],\n [0x1E000, 0x1E006, 'NSM'],\n [0x1E008, 0x1E018, 'NSM'],\n [0x1E01B, 0x1E021, 'NSM'],\n [0x1E023, 0x1E024, 'NSM'],\n [0x1E026, 0x1E02A, 'NSM'],\n [0x1E08F, 0x1E08F, 'NSM'],\n [0x1E130, 0x1E136, 'NSM'],\n [0x1E2AE, 0x1E2AE, 'NSM'],\n [0x1E2EC, 0x1E2EF, 'NSM'],\n [0x1E2FF, 0x1E2FF, 'ET'],\n [0x1E4EC, 0x1E4EF, 'NSM'],\n [0x1E5EE, 0x1E5EF, 'NSM'],\n [0x1E6E3, 0x1E6E3, 'NSM'],\n [0x1E6E6, 0x1E6E6, 'NSM'],\n [0x1E6EE, 0x1E6EF, 'NSM'],\n [0x1E6F5, 0x1E6F5, 'NSM'],\n [0x1E800, 0x1E8CF, 'R'],\n [0x1E8D0, 0x1E8D6, 'NSM'],\n [0x1E8D7, 0x1E943, 'R'],\n [0x1E944, 0x1E94A, 'NSM'],\n [0x1E94B, 0x1EC6F, 'R'],\n [0x1EC70, 0x1ECBF, 'AL'],\n [0x1ECC0, 0x1ECFF, 'R'],\n [0x1ED00, 0x1ED4F, 'AL'],\n [0x1ED50, 0x1EDFF, 'R'],\n [0x1EE00, 0x1EEEF, 'AL'],\n [0x1EEF0, 0x1EEF1, 'ON'],\n [0x1EEF2, 0x1EEFF, 'AL'],\n [0x1EF00, 0x1EFFF, 'R'],\n [0x1F000, 0x1F02B, 'ON'],\n [0x1F030, 0x1F093, 'ON'],\n [0x1F0A0, 0x1F0AE, 'ON'],\n [0x1F0B1, 0x1F0BF, 'ON'],\n [0x1F0C1, 0x1F0CF, 'ON'],\n [0x1F0D1, 0x1F0F5, 'ON'],\n [0x1F100, 0x1F10A, 'EN'],\n [0x1F10B, 0x1F10F, 'ON'],\n [0x1F12F, 0x1F12F, 'ON'],\n [0x1F16A, 0x1F16F, 'ON'],\n [0x1F1AD, 0x1F1AD, 'ON'],\n [0x1F260, 0x1F265, 'ON'],\n [0x1F300, 0x1F6D8, 'ON'],\n [0x1F6DC, 0x1F6EC, 'ON'],\n [0x1F6F0, 0x1F6FC, 'ON'],\n [0x1F700, 0x1F7D9, 'ON'],\n [0x1F7E0, 0x1F7EB, 'ON'],\n [0x1F7F0, 0x1F7F0, 'ON'],\n [0x1F800, 0x1F80B, 'ON'],\n [0x1F810, 0x1F847, 'ON'],\n [0x1F850, 0x1F859, 'ON'],\n [0x1F860, 0x1F887, 'ON'],\n [0x1F890, 0x1F8AD, 'ON'],\n [0x1F8B0, 0x1F8BB, 'ON'],\n [0x1F8C0, 0x1F8C1, 'ON'],\n [0x1F8D0, 0x1F8D8, 'ON'],\n [0x1F900, 0x1FA57, 'ON'],\n [0x1FA60, 0x1FA6D, 'ON'],\n [0x1FA70, 0x1FA7C, 'ON'],\n [0x1FA80, 0x1FA8A, 'ON'],\n [0x1FA8E, 0x1FAC6, 'ON'],\n [0x1FAC8, 0x1FAC8, 'ON'],\n [0x1FACD, 0x1FADC, 'ON'],\n [0x1FADF, 0x1FAEA, 'ON'],\n [0x1FAEF, 0x1FAF8, 'ON'],\n [0x1FB00, 0x1FB92, 'ON'],\n [0x1FB94, 0x1FBEF, 'ON'],\n [0x1FBF0, 0x1FBF9, 'EN'],\n [0x1FBFA, 0x1FBFA, 'ON'],\n [0x1FFFE, 0x1FFFF, 'BN'],\n [0x2FFFE, 0x2FFFF, 'BN'],\n [0x3FFFE, 0x3FFFF, 'BN'],\n [0x4FFFE, 0x4FFFF, 'BN'],\n [0x5FFFE, 0x5FFFF, 'BN'],\n [0x6FFFE, 0x6FFFF, 'BN'],\n [0x7FFFE, 0x7FFFF, 'BN'],\n [0x8FFFE, 0x8FFFF, 'BN'],\n [0x9FFFE, 0x9FFFF, 'BN'],\n [0xAFFFE, 0xAFFFF, 'BN'],\n [0xBFFFE, 0xBFFFF, 'BN'],\n [0xCFFFE, 0xCFFFF, 'BN'],\n [0xDFFFE, 0xE00FF, 'BN'],\n [0xE0100, 0xE01EF, 'NSM'],\n [0xE01F0, 0xE0FFF, 'BN'],\n [0xEFFFE, 0xEFFFF, 'BN'],\n [0xFFFFE, 0xFFFFF, 'BN'],\n [0x10FFFE, 0x10FFFF, 'BN'],\n];\n","// Simplified bidi metadata helper for the rich prepareWithSegments() path,\n// forked from pdf.js via Sebastian's text-layout. It classifies characters\n// into bidi types, computes embedding levels, and maps them onto prepared\n// segments for custom rendering. The line-breaking engine does not consume\n// these levels.\nimport { latin1BidiTypes, nonLatin1BidiRanges, } from './generated/bidi-data.js';\nfunction classifyCodePoint(codePoint) {\n if (codePoint <= 0x00FF)\n return latin1BidiTypes[codePoint];\n let lo = 0;\n let hi = nonLatin1BidiRanges.length - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const range = nonLatin1BidiRanges[mid];\n if (codePoint < range[0]) {\n hi = mid - 1;\n continue;\n }\n if (codePoint > range[1]) {\n lo = mid + 1;\n continue;\n }\n return range[2];\n }\n return 'L';\n}\nfunction computeBidiLevels(str) {\n const len = str.length;\n if (len === 0)\n return null;\n // eslint-disable-next-line unicorn/no-new-array\n const types = new Array(len);\n let sawBidi = false;\n // Keep the resolved bidi classes aligned to UTF-16 code-unit offsets,\n // because the rich prepared segments index back into the normalized string\n // with JavaScript string offsets.\n for (let i = 0; i < len;) {\n const first = str.charCodeAt(i);\n let codePoint = first;\n let codeUnitLength = 1;\n if (first >= 0xD800 && first <= 0xDBFF && i + 1 < len) {\n const second = str.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n codeUnitLength = 2;\n }\n }\n const t = classifyCodePoint(codePoint);\n if (t === 'R' || t === 'AL' || t === 'AN')\n sawBidi = true;\n for (let j = 0; j < codeUnitLength; j++) {\n types[i + j] = t;\n }\n i += codeUnitLength;\n }\n if (!sawBidi)\n return null;\n // Use the first strong character to pick the paragraph base direction.\n // Rich-path bidi metadata is only an approximation, but this keeps mixed\n // LTR/RTL text aligned with the common UBA paragraph rule.\n let startLevel = 0;\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'L') {\n startLevel = 0;\n break;\n }\n if (t === 'R' || t === 'AL') {\n startLevel = 1;\n break;\n }\n }\n const levels = new Int8Array(len);\n for (let i = 0; i < len; i++)\n levels[i] = startLevel;\n const e = (startLevel & 1) ? 'R' : 'L';\n const sor = e;\n // W1-W7\n let lastType = sor;\n for (let i = 0; i < len; i++) {\n if (types[i] === 'NSM')\n types[i] = lastType;\n else\n lastType = types[i];\n }\n lastType = sor;\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'EN')\n types[i] = lastType === 'AL' ? 'AN' : 'EN';\n else if (t === 'R' || t === 'L' || t === 'AL')\n lastType = t;\n }\n for (let i = 0; i < len; i++) {\n if (types[i] === 'AL')\n types[i] = 'R';\n }\n for (let i = 1; i < len - 1; i++) {\n if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') {\n types[i] = 'EN';\n }\n if (types[i] === 'CS' &&\n (types[i - 1] === 'EN' || types[i - 1] === 'AN') &&\n types[i + 1] === types[i - 1]) {\n types[i] = types[i - 1];\n }\n }\n for (let i = 0; i < len; i++) {\n if (types[i] !== 'EN')\n continue;\n let j;\n for (j = i - 1; j >= 0 && types[j] === 'ET'; j--)\n types[j] = 'EN';\n for (j = i + 1; j < len && types[j] === 'ET'; j++)\n types[j] = 'EN';\n }\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS')\n types[i] = 'ON';\n }\n lastType = sor;\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'EN')\n types[i] = lastType === 'L' ? 'L' : 'EN';\n else if (t === 'R' || t === 'L')\n lastType = t;\n }\n // N1-N2\n for (let i = 0; i < len; i++) {\n if (types[i] !== 'ON')\n continue;\n let end = i + 1;\n while (end < len && types[end] === 'ON')\n end++;\n const before = i > 0 ? types[i - 1] : sor;\n const after = end < len ? types[end] : sor;\n const bDir = before !== 'L' ? 'R' : 'L';\n const aDir = after !== 'L' ? 'R' : 'L';\n if (bDir === aDir) {\n for (let j = i; j < end; j++)\n types[j] = bDir;\n }\n i = end - 1;\n }\n for (let i = 0; i < len; i++) {\n if (types[i] === 'ON')\n types[i] = e;\n }\n // I1-I2\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if ((levels[i] & 1) === 0) {\n if (t === 'R')\n levels[i]++;\n else if (t === 'AN' || t === 'EN')\n levels[i] += 2;\n }\n else if (t === 'L' || t === 'AN' || t === 'EN') {\n levels[i]++;\n }\n }\n return levels;\n}\nexport function computeSegmentLevels(normalized, segStarts) {\n const bidiLevels = computeBidiLevels(normalized);\n if (bidiLevels === null)\n return null;\n const segLevels = new Int8Array(segStarts.length);\n for (let i = 0; i < segStarts.length; i++) {\n segLevels[i] = bidiLevels[segStarts[i]];\n }\n return segLevels;\n}\n","const collapsibleWhitespaceRunRe = /[ \\t\\n\\r\\f]+/g;\nconst needsWhitespaceNormalizationRe = /[\\t\\n\\r\\f]| {2,}|^ | $/;\nfunction getWhiteSpaceProfile(whiteSpace) {\n const mode = whiteSpace ?? 'normal';\n return mode === 'pre-wrap'\n ? { mode, preserveOrdinarySpaces: true, preserveHardBreaks: true }\n : { mode, preserveOrdinarySpaces: false, preserveHardBreaks: false };\n}\nexport function normalizeWhitespaceNormal(text) {\n if (!needsWhitespaceNormalizationRe.test(text))\n return text;\n let normalized = text.replace(collapsibleWhitespaceRunRe, ' ');\n if (normalized.charCodeAt(0) === 0x20) {\n normalized = normalized.slice(1);\n }\n if (normalized.length > 0 && normalized.charCodeAt(normalized.length - 1) === 0x20) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\nfunction normalizeWhitespacePreWrap(text) {\n if (!/[\\r\\f]/.test(text))\n return text;\n return text\n .replace(/\\r\\n/g, '\\n')\n .replace(/[\\r\\f]/g, '\\n');\n}\nlet sharedWordSegmenter = null;\nlet segmenterLocale;\nfunction getSharedWordSegmenter() {\n if (sharedWordSegmenter === null) {\n sharedWordSegmenter = new Intl.Segmenter(segmenterLocale, { granularity: 'word' });\n }\n return sharedWordSegmenter;\n}\nexport function clearAnalysisCaches() {\n sharedWordSegmenter = null;\n}\nexport function setAnalysisLocale(locale) {\n const nextLocale = locale && locale.length > 0 ? locale : undefined;\n if (segmenterLocale === nextLocale)\n return;\n segmenterLocale = nextLocale;\n sharedWordSegmenter = null;\n}\nconst arabicScriptRe = /\\p{Script=Arabic}/u;\nconst combiningMarkRe = /\\p{M}/u;\nconst decimalDigitRe = /\\p{Nd}/u;\nfunction containsArabicScript(text) {\n return arabicScriptRe.test(text);\n}\nfunction isCJKCodePoint(codePoint) {\n return ((codePoint >= 0x4E00 && codePoint <= 0x9FFF) ||\n (codePoint >= 0x3400 && codePoint <= 0x4DBF) ||\n (codePoint >= 0x20000 && codePoint <= 0x2A6DF) ||\n (codePoint >= 0x2A700 && codePoint <= 0x2B73F) ||\n (codePoint >= 0x2B740 && codePoint <= 0x2B81F) ||\n (codePoint >= 0x2B820 && codePoint <= 0x2CEAF) ||\n (codePoint >= 0x2CEB0 && codePoint <= 0x2EBEF) ||\n (codePoint >= 0x2EBF0 && codePoint <= 0x2EE5D) ||\n (codePoint >= 0x2F800 && codePoint <= 0x2FA1F) ||\n (codePoint >= 0x30000 && codePoint <= 0x3134F) ||\n (codePoint >= 0x31350 && codePoint <= 0x323AF) ||\n (codePoint >= 0x323B0 && codePoint <= 0x33479) ||\n (codePoint >= 0xF900 && codePoint <= 0xFAFF) ||\n (codePoint >= 0x3000 && codePoint <= 0x303F) ||\n (codePoint >= 0x3040 && codePoint <= 0x309F) ||\n (codePoint >= 0x30A0 && codePoint <= 0x30FF) ||\n (codePoint >= 0x3130 && codePoint <= 0x318F) ||\n (codePoint >= 0xAC00 && codePoint <= 0xD7AF) ||\n (codePoint >= 0xFF00 && codePoint <= 0xFFEF));\n}\nexport function isCJK(s) {\n for (let i = 0; i < s.length; i++) {\n const first = s.charCodeAt(i);\n if (first < 0x3000)\n continue;\n if (first >= 0xD800 && first <= 0xDBFF && i + 1 < s.length) {\n const second = s.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n const codePoint = ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n if (isCJKCodePoint(codePoint))\n return true;\n i++;\n continue;\n }\n }\n if (isCJKCodePoint(first))\n return true;\n }\n return false;\n}\nfunction endsWithLineStartProhibitedText(text) {\n const last = getLastCodePoint(text);\n return last !== null && (kinsokuStart.has(last) || leftStickyPunctuation.has(last));\n}\nconst keepAllGlueChars = new Set([\n '\\u00A0',\n '\\u202F',\n '\\u2060',\n '\\uFEFF',\n]);\nfunction containsCJKText(text) {\n return isCJK(text);\n}\nfunction endsWithKeepAllGlueText(text) {\n const last = getLastCodePoint(text);\n return last !== null && keepAllGlueChars.has(last);\n}\nexport function canContinueKeepAllTextRun(previousText) {\n return (!endsWithLineStartProhibitedText(previousText) &&\n !endsWithKeepAllGlueText(previousText));\n}\nexport const kinsokuStart = new Set([\n '\\uFF0C',\n '\\uFF0E',\n '\\uFF01',\n '\\uFF1A',\n '\\uFF1B',\n '\\uFF1F',\n '\\u3001',\n '\\u3002',\n '\\u30FB',\n '\\uFF09',\n '\\u3015',\n '\\u3009',\n '\\u300B',\n '\\u300D',\n '\\u300F',\n '\\u3011',\n '\\u3017',\n '\\u3019',\n '\\u301B',\n '\\u30FC',\n '\\u3005',\n '\\u303B',\n '\\u309D',\n '\\u309E',\n '\\u30FD',\n '\\u30FE',\n]);\nexport const kinsokuEnd = new Set([\n '\"',\n '(', '[', '{',\n '“', '‘', '«', '‹',\n '\\uFF08',\n '\\u3014',\n '\\u3008',\n '\\u300A',\n '\\u300C',\n '\\u300E',\n '\\u3010',\n '\\u3016',\n '\\u3018',\n '\\u301A',\n]);\nconst forwardStickyGlue = new Set([\n \"'\", '’',\n]);\nexport const leftStickyPunctuation = new Set([\n '.', ',', '!', '?', ':', ';',\n '\\u060C',\n '\\u061B',\n '\\u061F',\n '\\u0964',\n '\\u0965',\n '\\u104A',\n '\\u104B',\n '\\u104C',\n '\\u104D',\n '\\u104F',\n ')', ']', '}',\n '%',\n '\"',\n '”', '’', '»', '›',\n '…',\n]);\nconst arabicNoSpaceTrailingPunctuation = new Set([\n ':',\n '.',\n '\\u060C',\n '\\u061B',\n]);\nconst myanmarMedialGlue = new Set([\n '\\u104F',\n]);\nconst closingQuoteChars = new Set([\n '”', '’', '»', '›',\n '\\u300D',\n '\\u300F',\n '\\u3011',\n '\\u300B',\n '\\u3009',\n '\\u3015',\n '\\uFF09',\n]);\nfunction isLeftStickyPunctuationSegment(segment) {\n if (isEscapedQuoteClusterSegment(segment))\n return true;\n let sawPunctuation = false;\n for (const ch of segment) {\n if (leftStickyPunctuation.has(ch)) {\n sawPunctuation = true;\n continue;\n }\n if (sawPunctuation && combiningMarkRe.test(ch))\n continue;\n return false;\n }\n return sawPunctuation;\n}\nfunction isCJKLineStartProhibitedSegment(segment) {\n for (const ch of segment) {\n if (!kinsokuStart.has(ch) && !leftStickyPunctuation.has(ch))\n return false;\n }\n return segment.length > 0;\n}\nfunction isForwardStickyClusterSegment(segment) {\n if (isEscapedQuoteClusterSegment(segment))\n return true;\n for (const ch of segment) {\n if (!kinsokuEnd.has(ch) && !forwardStickyGlue.has(ch) && !combiningMarkRe.test(ch))\n return false;\n }\n return segment.length > 0;\n}\nfunction isEscapedQuoteClusterSegment(segment) {\n let sawQuote = false;\n for (const ch of segment) {\n if (ch === '\\\\' || combiningMarkRe.test(ch))\n continue;\n if (kinsokuEnd.has(ch) || leftStickyPunctuation.has(ch) || forwardStickyGlue.has(ch)) {\n sawQuote = true;\n continue;\n }\n return false;\n }\n return sawQuote;\n}\nfunction previousCodePointStart(text, end) {\n const last = end - 1;\n if (last <= 0)\n return Math.max(last, 0);\n const lastCodeUnit = text.charCodeAt(last);\n if (lastCodeUnit < 0xDC00 || lastCodeUnit > 0xDFFF)\n return last;\n const maybeHigh = last - 1;\n if (maybeHigh < 0)\n return last;\n const highCodeUnit = text.charCodeAt(maybeHigh);\n return highCodeUnit >= 0xD800 && highCodeUnit <= 0xDBFF ? maybeHigh : last;\n}\nfunction getLastCodePoint(text) {\n if (text.length === 0)\n return null;\n const start = previousCodePointStart(text, text.length);\n return text.slice(start);\n}\nfunction splitTrailingForwardStickyCluster(text) {\n const chars = Array.from(text);\n let splitIndex = chars.length;\n while (splitIndex > 0) {\n const ch = chars[splitIndex - 1];\n if (combiningMarkRe.test(ch)) {\n splitIndex--;\n continue;\n }\n if (kinsokuEnd.has(ch) || forwardStickyGlue.has(ch)) {\n splitIndex--;\n continue;\n }\n break;\n }\n if (splitIndex <= 0 || splitIndex === chars.length)\n return null;\n return {\n head: chars.slice(0, splitIndex).join(''),\n tail: chars.slice(splitIndex).join(''),\n };\n}\nfunction getRepeatableSingleCharRunChar(text, isWordLike, kind) {\n return kind === 'text' && !isWordLike && text.length === 1 && text !== '-' && text !== '—'\n ? text\n : null;\n}\nfunction materializeDeferredSingleCharRun(texts, chars, lengths, index) {\n const ch = chars[index];\n const text = texts[index];\n if (ch == null)\n return text;\n const length = lengths[index];\n if (text.length === length)\n return text;\n const materialized = ch.repeat(length);\n texts[index] = materialized;\n return materialized;\n}\nfunction hasArabicNoSpacePunctuation(containsArabic, lastCodePoint) {\n return containsArabic && lastCodePoint !== null && arabicNoSpaceTrailingPunctuation.has(lastCodePoint);\n}\nfunction endsWithMyanmarMedialGlue(segment) {\n const lastCodePoint = getLastCodePoint(segment);\n return lastCodePoint !== null && myanmarMedialGlue.has(lastCodePoint);\n}\nfunction splitLeadingSpaceAndMarks(segment) {\n if (segment.length < 2 || segment[0] !== ' ')\n return null;\n const marks = segment.slice(1);\n if (/^\\p{M}+$/u.test(marks)) {\n return { space: ' ', marks };\n }\n return null;\n}\nexport function endsWithClosingQuote(text) {\n let end = text.length;\n while (end > 0) {\n const start = previousCodePointStart(text, end);\n const ch = text.slice(start, end);\n if (closingQuoteChars.has(ch))\n return true;\n if (!leftStickyPunctuation.has(ch))\n return false;\n end = start;\n }\n return false;\n}\nfunction classifySegmentBreakChar(ch, whiteSpaceProfile) {\n if (whiteSpaceProfile.preserveOrdinarySpaces || whiteSpaceProfile.preserveHardBreaks) {\n if (ch === ' ')\n return 'preserved-space';\n if (ch === '\\t')\n return 'tab';\n if (whiteSpaceProfile.preserveHardBreaks && ch === '\\n')\n return 'hard-break';\n }\n if (ch === ' ')\n return 'space';\n if (ch === '\\u00A0' || ch === '\\u202F' || ch === '\\u2060' || ch === '\\uFEFF') {\n return 'glue';\n }\n if (ch === '\\u200B')\n return 'zero-width-break';\n if (ch === '\\u00AD')\n return 'soft-hyphen';\n return 'text';\n}\n// All characters that classifySegmentBreakChar maps to a non-'text' kind.\nconst breakCharRe = /[\\x20\\t\\n\\xA0\\xAD\\u200B\\u202F\\u2060\\uFEFF]/;\nfunction joinTextParts(parts) {\n return parts.length === 1 ? parts[0] : parts.join('');\n}\nfunction joinReversedPrefixParts(prefixParts, tail) {\n const parts = [];\n for (let i = prefixParts.length - 1; i >= 0; i--) {\n parts.push(prefixParts[i]);\n }\n parts.push(tail);\n return joinTextParts(parts);\n}\nfunction splitSegmentByBreakKind(segment, isWordLike, start, whiteSpaceProfile) {\n if (!breakCharRe.test(segment)) {\n return [{ text: segment, isWordLike, kind: 'text', start }];\n }\n const pieces = [];\n let currentKind = null;\n let currentTextParts = [];\n let currentStart = start;\n let currentWordLike = false;\n let offset = 0;\n for (const ch of segment) {\n const kind = classifySegmentBreakChar(ch, whiteSpaceProfile);\n const wordLike = kind === 'text' && isWordLike;\n if (currentKind !== null && kind === currentKind && wordLike === currentWordLike) {\n currentTextParts.push(ch);\n offset += ch.length;\n continue;\n }\n if (currentKind !== null) {\n pieces.push({\n text: joinTextParts(currentTextParts),\n isWordLike: currentWordLike,\n kind: currentKind,\n start: currentStart,\n });\n }\n currentKind = kind;\n currentTextParts = [ch];\n currentStart = start + offset;\n currentWordLike = wordLike;\n offset += ch.length;\n }\n if (currentKind !== null) {\n pieces.push({\n text: joinTextParts(currentTextParts),\n isWordLike: currentWordLike,\n kind: currentKind,\n start: currentStart,\n });\n }\n return pieces;\n}\nfunction isTextRunBoundary(kind) {\n return (kind === 'space' ||\n kind === 'preserved-space' ||\n kind === 'zero-width-break' ||\n kind === 'hard-break');\n}\nconst urlSchemeSegmentRe = /^[A-Za-z][A-Za-z0-9+.-]*:$/;\nfunction isUrlLikeRunStart(segmentation, index) {\n const text = segmentation.texts[index];\n if (text.startsWith('www.'))\n return true;\n return (urlSchemeSegmentRe.test(text) &&\n index + 1 < segmentation.len &&\n segmentation.kinds[index + 1] === 'text' &&\n segmentation.texts[index + 1] === '//');\n}\nfunction isUrlQueryBoundarySegment(text) {\n return text.includes('?') && (text.includes('://') || text.startsWith('www.'));\n}\nfunction mergeUrlLikeRuns(segmentation) {\n const texts = segmentation.texts.slice();\n const isWordLike = segmentation.isWordLike.slice();\n const kinds = segmentation.kinds.slice();\n const starts = segmentation.starts.slice();\n for (let i = 0; i < segmentation.len; i++) {\n if (kinds[i] !== 'text' || !isUrlLikeRunStart(segmentation, i))\n continue;\n const mergedParts = [texts[i]];\n let j = i + 1;\n while (j < segmentation.len && !isTextRunBoundary(kinds[j])) {\n mergedParts.push(texts[j]);\n isWordLike[i] = true;\n const endsQueryPrefix = texts[j].includes('?');\n kinds[j] = 'text';\n texts[j] = '';\n j++;\n if (endsQueryPrefix)\n break;\n }\n texts[i] = joinTextParts(mergedParts);\n }\n let compactLen = 0;\n for (let read = 0; read < texts.length; read++) {\n const text = texts[read];\n if (text.length === 0)\n continue;\n if (compactLen !== read) {\n texts[compactLen] = text;\n isWordLike[compactLen] = isWordLike[read];\n kinds[compactLen] = kinds[read];\n starts[compactLen] = starts[read];\n }\n compactLen++;\n }\n texts.length = compactLen;\n isWordLike.length = compactLen;\n kinds.length = compactLen;\n starts.length = compactLen;\n return {\n len: compactLen,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction mergeUrlQueryRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n texts.push(text);\n isWordLike.push(segmentation.isWordLike[i]);\n kinds.push(segmentation.kinds[i]);\n starts.push(segmentation.starts[i]);\n if (!isUrlQueryBoundarySegment(text))\n continue;\n const nextIndex = i + 1;\n if (nextIndex >= segmentation.len ||\n isTextRunBoundary(segmentation.kinds[nextIndex])) {\n continue;\n }\n const queryParts = [];\n const queryStart = segmentation.starts[nextIndex];\n let j = nextIndex;\n while (j < segmentation.len && !isTextRunBoundary(segmentation.kinds[j])) {\n queryParts.push(segmentation.texts[j]);\n j++;\n }\n if (queryParts.length > 0) {\n texts.push(joinTextParts(queryParts));\n isWordLike.push(true);\n kinds.push('text');\n starts.push(queryStart);\n i = j - 1;\n }\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nconst numericJoinerChars = new Set([\n ':', '-', '/', '×', ',', '.', '+',\n '\\u2013',\n '\\u2014',\n]);\nconst asciiPunctuationChainSegmentRe = /^[A-Za-z0-9_]+[,:;]*$/;\nconst asciiPunctuationChainTrailingJoinersRe = /[,:;]+$/;\nfunction segmentContainsDecimalDigit(text) {\n for (const ch of text) {\n if (decimalDigitRe.test(ch))\n return true;\n }\n return false;\n}\nexport function isNumericRunSegment(text) {\n if (text.length === 0)\n return false;\n for (const ch of text) {\n if (decimalDigitRe.test(ch) || numericJoinerChars.has(ch))\n continue;\n return false;\n }\n return true;\n}\nfunction mergeNumericRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n const kind = segmentation.kinds[i];\n if (kind === 'text' && isNumericRunSegment(text) && segmentContainsDecimalDigit(text)) {\n const mergedParts = [text];\n let j = i + 1;\n while (j < segmentation.len &&\n segmentation.kinds[j] === 'text' &&\n isNumericRunSegment(segmentation.texts[j])) {\n mergedParts.push(segmentation.texts[j]);\n j++;\n }\n texts.push(joinTextParts(mergedParts));\n isWordLike.push(true);\n kinds.push('text');\n starts.push(segmentation.starts[i]);\n i = j - 1;\n continue;\n }\n texts.push(text);\n isWordLike.push(segmentation.isWordLike[i]);\n kinds.push(kind);\n starts.push(segmentation.starts[i]);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction mergeAsciiPunctuationChains(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n const kind = segmentation.kinds[i];\n const wordLike = segmentation.isWordLike[i];\n if (kind === 'text' && wordLike && asciiPunctuationChainSegmentRe.test(text)) {\n const mergedParts = [text];\n let endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(text);\n let j = i + 1;\n while (endsWithJoiners &&\n j < segmentation.len &&\n segmentation.kinds[j] === 'text' &&\n segmentation.isWordLike[j] &&\n asciiPunctuationChainSegmentRe.test(segmentation.texts[j])) {\n const nextText = segmentation.texts[j];\n mergedParts.push(nextText);\n endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(nextText);\n j++;\n }\n texts.push(joinTextParts(mergedParts));\n isWordLike.push(true);\n kinds.push('text');\n starts.push(segmentation.starts[i]);\n i = j - 1;\n continue;\n }\n texts.push(text);\n isWordLike.push(wordLike);\n kinds.push(kind);\n starts.push(segmentation.starts[i]);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction splitHyphenatedNumericRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n if (segmentation.kinds[i] === 'text' && text.includes('-')) {\n const parts = text.split('-');\n let shouldSplit = parts.length > 1;\n for (let j = 0; j < parts.length; j++) {\n const part = parts[j];\n if (!shouldSplit)\n break;\n if (part.length === 0 ||\n !segmentContainsDecimalDigit(part) ||\n !isNumericRunSegment(part)) {\n shouldSplit = false;\n }\n }\n if (shouldSplit) {\n let offset = 0;\n for (let j = 0; j < parts.length; j++) {\n const part = parts[j];\n const splitText = j < parts.length - 1 ? `${part}-` : part;\n texts.push(splitText);\n isWordLike.push(true);\n kinds.push('text');\n starts.push(segmentation.starts[i] + offset);\n offset += splitText.length;\n }\n continue;\n }\n }\n texts.push(text);\n isWordLike.push(segmentation.isWordLike[i]);\n kinds.push(segmentation.kinds[i]);\n starts.push(segmentation.starts[i]);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction mergeGlueConnectedTextRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n let read = 0;\n while (read < segmentation.len) {\n const textParts = [segmentation.texts[read]];\n let wordLike = segmentation.isWordLike[read];\n let kind = segmentation.kinds[read];\n let start = segmentation.starts[read];\n if (kind === 'glue') {\n const glueParts = [textParts[0]];\n const glueStart = start;\n read++;\n while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n glueParts.push(segmentation.texts[read]);\n read++;\n }\n const glueText = joinTextParts(glueParts);\n if (read < segmentation.len && segmentation.kinds[read] === 'text') {\n textParts[0] = glueText;\n textParts.push(segmentation.texts[read]);\n wordLike = segmentation.isWordLike[read];\n kind = 'text';\n start = glueStart;\n read++;\n }\n else {\n texts.push(glueText);\n isWordLike.push(false);\n kinds.push('glue');\n starts.push(glueStart);\n continue;\n }\n }\n else {\n read++;\n }\n if (kind === 'text') {\n while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n const glueParts = [];\n while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n glueParts.push(segmentation.texts[read]);\n read++;\n }\n const glueText = joinTextParts(glueParts);\n if (read < segmentation.len && segmentation.kinds[read] === 'text') {\n textParts.push(glueText, segmentation.texts[read]);\n wordLike = wordLike || segmentation.isWordLike[read];\n read++;\n continue;\n }\n textParts.push(glueText);\n }\n }\n texts.push(joinTextParts(textParts));\n isWordLike.push(wordLike);\n kinds.push(kind);\n starts.push(start);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction carryTrailingForwardStickyAcrossCJKBoundary(segmentation) {\n const texts = segmentation.texts.slice();\n const isWordLike = segmentation.isWordLike.slice();\n const kinds = segmentation.kinds.slice();\n const starts = segmentation.starts.slice();\n for (let i = 0; i < texts.length - 1; i++) {\n if (kinds[i] !== 'text' || kinds[i + 1] !== 'text')\n continue;\n if (!isCJK(texts[i]) || !isCJK(texts[i + 1]))\n continue;\n const split = splitTrailingForwardStickyCluster(texts[i]);\n if (split === null)\n continue;\n texts[i] = split.head;\n texts[i + 1] = split.tail + texts[i + 1];\n starts[i + 1] = starts[i] + split.head.length;\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction buildMergedSegmentation(normalized, profile, whiteSpaceProfile) {\n const wordSegmenter = getSharedWordSegmenter();\n let mergedLen = 0;\n const mergedTexts = [];\n const mergedTextParts = [];\n const mergedWordLike = [];\n const mergedKinds = [];\n const mergedStarts = [];\n // Track repeatable single-char punctuation runs structurally so identical\n // merges stay O(1) instead of re-scanning the accumulated segment each time.\n const mergedSingleCharRunChars = [];\n const mergedSingleCharRunLengths = [];\n const mergedContainsCJK = [];\n const mergedContainsArabicScript = [];\n const mergedEndsWithClosingQuote = [];\n const mergedEndsWithMyanmarMedialGlue = [];\n const mergedHasArabicNoSpacePunctuation = [];\n for (const s of wordSegmenter.segment(normalized)) {\n for (const piece of splitSegmentByBreakKind(s.segment, s.isWordLike ?? false, s.index, whiteSpaceProfile)) {\n const isText = piece.kind === 'text';\n const repeatableSingleCharRunChar = getRepeatableSingleCharRunChar(piece.text, piece.isWordLike, piece.kind);\n const pieceContainsCJK = isCJK(piece.text);\n const pieceContainsArabicScript = containsArabicScript(piece.text);\n const pieceLastCodePoint = getLastCodePoint(piece.text);\n const pieceEndsWithClosingQuote = endsWithClosingQuote(piece.text);\n const pieceEndsWithMyanmarMedialGlue = endsWithMyanmarMedialGlue(piece.text);\n const prevIndex = mergedLen - 1;\n function appendPieceToPrevious() {\n if (mergedSingleCharRunChars[prevIndex] !== null) {\n mergedTextParts[prevIndex] = [\n materializeDeferredSingleCharRun(mergedTexts, mergedSingleCharRunChars, mergedSingleCharRunLengths, prevIndex),\n ];\n mergedSingleCharRunChars[prevIndex] = null;\n }\n mergedTextParts[prevIndex].push(piece.text);\n mergedWordLike[prevIndex] = mergedWordLike[prevIndex] || piece.isWordLike;\n mergedContainsCJK[prevIndex] = mergedContainsCJK[prevIndex] || pieceContainsCJK;\n mergedContainsArabicScript[prevIndex] =\n mergedContainsArabicScript[prevIndex] || pieceContainsArabicScript;\n mergedEndsWithClosingQuote[prevIndex] = pieceEndsWithClosingQuote;\n mergedEndsWithMyanmarMedialGlue[prevIndex] = pieceEndsWithMyanmarMedialGlue;\n mergedHasArabicNoSpacePunctuation[prevIndex] = hasArabicNoSpacePunctuation(mergedContainsArabicScript[prevIndex], pieceLastCodePoint);\n }\n // First-pass keeps: no-space script-specific joins and punctuation glue\n // that depend on the immediately preceding text run.\n if (profile.carryCJKAfterClosingQuote &&\n isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n pieceContainsCJK &&\n mergedContainsCJK[prevIndex] &&\n mergedEndsWithClosingQuote[prevIndex]) {\n appendPieceToPrevious();\n }\n else if (isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n isCJKLineStartProhibitedSegment(piece.text) &&\n mergedContainsCJK[prevIndex]) {\n appendPieceToPrevious();\n }\n else if (isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n mergedEndsWithMyanmarMedialGlue[prevIndex]) {\n appendPieceToPrevious();\n }\n else if (isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n piece.isWordLike &&\n pieceContainsArabicScript &&\n mergedHasArabicNoSpacePunctuation[prevIndex]) {\n appendPieceToPrevious();\n mergedWordLike[prevIndex] = true;\n }\n else if (repeatableSingleCharRunChar !== null &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n mergedSingleCharRunChars[prevIndex] === repeatableSingleCharRunChar) {\n mergedSingleCharRunLengths[prevIndex] = (mergedSingleCharRunLengths[prevIndex] ?? 1) + 1;\n }\n else if (isText &&\n !piece.isWordLike &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n !mergedContainsCJK[prevIndex] &&\n (isLeftStickyPunctuationSegment(piece.text) ||\n (piece.text === '-' && mergedWordLike[prevIndex]))) {\n appendPieceToPrevious();\n }\n else {\n mergedTexts[mergedLen] = piece.text;\n mergedTextParts[mergedLen] = [piece.text];\n mergedWordLike[mergedLen] = piece.isWordLike;\n mergedKinds[mergedLen] = piece.kind;\n mergedStarts[mergedLen] = piece.start;\n mergedSingleCharRunChars[mergedLen] = repeatableSingleCharRunChar;\n mergedSingleCharRunLengths[mergedLen] = repeatableSingleCharRunChar === null ? 0 : 1;\n mergedContainsCJK[mergedLen] = pieceContainsCJK;\n mergedContainsArabicScript[mergedLen] = pieceContainsArabicScript;\n mergedEndsWithClosingQuote[mergedLen] = pieceEndsWithClosingQuote;\n mergedEndsWithMyanmarMedialGlue[mergedLen] = pieceEndsWithMyanmarMedialGlue;\n mergedHasArabicNoSpacePunctuation[mergedLen] = hasArabicNoSpacePunctuation(pieceContainsArabicScript, pieceLastCodePoint);\n mergedLen++;\n }\n }\n }\n for (let i = 0; i < mergedLen; i++) {\n if (mergedSingleCharRunChars[i] !== null) {\n mergedTexts[i] = materializeDeferredSingleCharRun(mergedTexts, mergedSingleCharRunChars, mergedSingleCharRunLengths, i);\n continue;\n }\n mergedTexts[i] = joinTextParts(mergedTextParts[i]);\n }\n // Later passes operate on the merged text stream itself: contextual escaped\n // quote glue, forward-sticky carry, compaction, then the broader URL/numeric\n // and Arabic-leading-mark fixes.\n for (let i = 1; i < mergedLen; i++) {\n if (mergedKinds[i] === 'text' &&\n !mergedWordLike[i] &&\n isEscapedQuoteClusterSegment(mergedTexts[i]) &&\n mergedKinds[i - 1] === 'text' &&\n !mergedContainsCJK[i - 1]) {\n mergedTexts[i - 1] += mergedTexts[i];\n mergedWordLike[i - 1] = mergedWordLike[i - 1] || mergedWordLike[i];\n mergedTexts[i] = '';\n }\n }\n const forwardStickyPrefixParts = Array.from({ length: mergedLen }, () => null);\n let nextLiveIndex = -1;\n for (let i = mergedLen - 1; i >= 0; i--) {\n const text = mergedTexts[i];\n if (text.length === 0)\n continue;\n if (mergedKinds[i] === 'text' &&\n !mergedWordLike[i] &&\n isForwardStickyClusterSegment(text) &&\n nextLiveIndex >= 0 &&\n mergedKinds[nextLiveIndex] === 'text') {\n const prefixParts = forwardStickyPrefixParts[nextLiveIndex] ?? [];\n prefixParts.push(text);\n forwardStickyPrefixParts[nextLiveIndex] = prefixParts;\n mergedStarts[nextLiveIndex] = mergedStarts[i];\n mergedTexts[i] = '';\n continue;\n }\n nextLiveIndex = i;\n }\n for (let i = 0; i < mergedLen; i++) {\n const prefixParts = forwardStickyPrefixParts[i];\n if (prefixParts == null)\n continue;\n mergedTexts[i] = joinReversedPrefixParts(prefixParts, mergedTexts[i]);\n }\n let compactLen = 0;\n for (let read = 0; read < mergedLen; read++) {\n const text = mergedTexts[read];\n if (text.length === 0)\n continue;\n if (compactLen !== read) {\n mergedTexts[compactLen] = text;\n mergedWordLike[compactLen] = mergedWordLike[read];\n mergedKinds[compactLen] = mergedKinds[read];\n mergedStarts[compactLen] = mergedStarts[read];\n }\n compactLen++;\n }\n mergedTexts.length = compactLen;\n mergedWordLike.length = compactLen;\n mergedKinds.length = compactLen;\n mergedStarts.length = compactLen;\n const compacted = mergeGlueConnectedTextRuns({\n len: compactLen,\n texts: mergedTexts,\n isWordLike: mergedWordLike,\n kinds: mergedKinds,\n starts: mergedStarts,\n });\n const withMergedUrls = carryTrailingForwardStickyAcrossCJKBoundary(mergeAsciiPunctuationChains(splitHyphenatedNumericRuns(mergeNumericRuns(mergeUrlQueryRuns(mergeUrlLikeRuns(compacted))))));\n for (let i = 0; i < withMergedUrls.len - 1; i++) {\n const split = splitLeadingSpaceAndMarks(withMergedUrls.texts[i]);\n if (split === null)\n continue;\n if ((withMergedUrls.kinds[i] !== 'space' && withMergedUrls.kinds[i] !== 'preserved-space') ||\n withMergedUrls.kinds[i + 1] !== 'text' ||\n !containsArabicScript(withMergedUrls.texts[i + 1])) {\n continue;\n }\n withMergedUrls.texts[i] = split.space;\n withMergedUrls.isWordLike[i] = false;\n withMergedUrls.kinds[i] = withMergedUrls.kinds[i] === 'preserved-space' ? 'preserved-space' : 'space';\n withMergedUrls.texts[i + 1] = split.marks + withMergedUrls.texts[i + 1];\n withMergedUrls.starts[i + 1] = withMergedUrls.starts[i] + split.space.length;\n }\n return withMergedUrls;\n}\nfunction compileAnalysisChunks(segmentation, whiteSpaceProfile) {\n if (segmentation.len === 0)\n return [];\n if (!whiteSpaceProfile.preserveHardBreaks) {\n return [{\n startSegmentIndex: 0,\n endSegmentIndex: segmentation.len,\n consumedEndSegmentIndex: segmentation.len,\n }];\n }\n const chunks = [];\n let startSegmentIndex = 0;\n for (let i = 0; i < segmentation.len; i++) {\n if (segmentation.kinds[i] !== 'hard-break')\n continue;\n chunks.push({\n startSegmentIndex,\n endSegmentIndex: i,\n consumedEndSegmentIndex: i + 1,\n });\n startSegmentIndex = i + 1;\n }\n if (startSegmentIndex < segmentation.len) {\n chunks.push({\n startSegmentIndex,\n endSegmentIndex: segmentation.len,\n consumedEndSegmentIndex: segmentation.len,\n });\n }\n return chunks;\n}\nfunction mergeKeepAllTextSegments(segmentation) {\n if (segmentation.len <= 1)\n return segmentation;\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n let pendingTextParts = null;\n let pendingWordLike = false;\n let pendingStart = 0;\n let pendingContainsCJK = false;\n let pendingCanContinue = false;\n function flushPendingText() {\n if (pendingTextParts === null)\n return;\n texts.push(joinTextParts(pendingTextParts));\n isWordLike.push(pendingWordLike);\n kinds.push('text');\n starts.push(pendingStart);\n pendingTextParts = null;\n }\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n const kind = segmentation.kinds[i];\n const wordLike = segmentation.isWordLike[i];\n const start = segmentation.starts[i];\n if (kind === 'text') {\n const textContainsCJK = containsCJKText(text);\n const textCanContinue = canContinueKeepAllTextRun(text);\n if (pendingTextParts !== null && pendingContainsCJK && pendingCanContinue) {\n pendingTextParts.push(text);\n pendingWordLike = pendingWordLike || wordLike;\n pendingContainsCJK = pendingContainsCJK || textContainsCJK;\n pendingCanContinue = textCanContinue;\n continue;\n }\n flushPendingText();\n pendingTextParts = [text];\n pendingWordLike = wordLike;\n pendingStart = start;\n pendingContainsCJK = textContainsCJK;\n pendingCanContinue = textCanContinue;\n continue;\n }\n flushPendingText();\n texts.push(text);\n isWordLike.push(wordLike);\n kinds.push(kind);\n starts.push(start);\n }\n flushPendingText();\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nexport function analyzeText(text, profile, whiteSpace = 'normal', wordBreak = 'normal') {\n const whiteSpaceProfile = getWhiteSpaceProfile(whiteSpace);\n const normalized = whiteSpaceProfile.mode === 'pre-wrap'\n ? normalizeWhitespacePreWrap(text)\n : normalizeWhitespaceNormal(text);\n if (normalized.length === 0) {\n return {\n normalized,\n chunks: [],\n len: 0,\n texts: [],\n isWordLike: [],\n kinds: [],\n starts: [],\n };\n }\n const segmentation = wordBreak === 'keep-all'\n ? mergeKeepAllTextSegments(buildMergedSegmentation(normalized, profile, whiteSpaceProfile))\n : buildMergedSegmentation(normalized, profile, whiteSpaceProfile);\n return {\n normalized,\n chunks: compileAnalysisChunks(segmentation, whiteSpaceProfile),\n ...segmentation,\n };\n}\n","import { isCJK } from './analysis.js';\nlet measureContext = null;\nconst segmentMetricCaches = new Map();\nlet cachedEngineProfile = null;\n// Safari's prefix-fit policy is useful for ordinary word-sized runs, but letting\n// it measure every growing prefix of a giant segment recreates a pathological\n// superlinear prepare-time path. Past this size, switch to the cheaper\n// pair-context model and keep the public behavior linear.\nconst MAX_PREFIX_FIT_GRAPHEMES = 96;\nconst emojiPresentationRe = /\\p{Emoji_Presentation}/u;\nconst maybeEmojiRe = /[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\p{Regional_Indicator}\\uFE0F\\u20E3]/u;\nlet sharedGraphemeSegmenter = null;\nconst emojiCorrectionCache = new Map();\nexport function getMeasureContext() {\n if (measureContext !== null)\n return measureContext;\n if (typeof OffscreenCanvas !== 'undefined') {\n measureContext = new OffscreenCanvas(1, 1).getContext('2d');\n return measureContext;\n }\n if (typeof document !== 'undefined') {\n measureContext = document.createElement('canvas').getContext('2d');\n return measureContext;\n }\n throw new Error('Text measurement requires OffscreenCanvas or a DOM canvas context.');\n}\nexport function getSegmentMetricCache(font) {\n let cache = segmentMetricCaches.get(font);\n if (!cache) {\n cache = new Map();\n segmentMetricCaches.set(font, cache);\n }\n return cache;\n}\nexport function getSegmentMetrics(seg, cache) {\n let metrics = cache.get(seg);\n if (metrics === undefined) {\n const ctx = getMeasureContext();\n metrics = {\n width: ctx.measureText(seg).width,\n containsCJK: isCJK(seg),\n };\n cache.set(seg, metrics);\n }\n return metrics;\n}\nexport function getEngineProfile() {\n if (cachedEngineProfile !== null)\n return cachedEngineProfile;\n if (typeof navigator === 'undefined') {\n cachedEngineProfile = {\n lineFitEpsilon: 0.005,\n carryCJKAfterClosingQuote: false,\n preferPrefixWidthsForBreakableRuns: false,\n preferEarlySoftHyphenBreak: false,\n };\n return cachedEngineProfile;\n }\n const ua = navigator.userAgent;\n const vendor = navigator.vendor;\n const isSafari = vendor === 'Apple Computer, Inc.' &&\n ua.includes('Safari/') &&\n !ua.includes('Chrome/') &&\n !ua.includes('Chromium/') &&\n !ua.includes('CriOS/') &&\n !ua.includes('FxiOS/') &&\n !ua.includes('EdgiOS/');\n const isChromium = ua.includes('Chrome/') ||\n ua.includes('Chromium/') ||\n ua.includes('CriOS/') ||\n ua.includes('Edg/');\n cachedEngineProfile = {\n lineFitEpsilon: isSafari ? 1 / 64 : 0.005,\n carryCJKAfterClosingQuote: isChromium,\n preferPrefixWidthsForBreakableRuns: isSafari,\n preferEarlySoftHyphenBreak: isSafari,\n };\n return cachedEngineProfile;\n}\nexport function parseFontSize(font) {\n const m = font.match(/(\\d+(?:\\.\\d+)?)\\s*px/);\n return m ? parseFloat(m[1]) : 16;\n}\nfunction getSharedGraphemeSegmenter() {\n if (sharedGraphemeSegmenter === null) {\n sharedGraphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n }\n return sharedGraphemeSegmenter;\n}\nfunction isEmojiGrapheme(g) {\n return emojiPresentationRe.test(g) || g.includes('\\uFE0F');\n}\nexport function textMayContainEmoji(text) {\n return maybeEmojiRe.test(text);\n}\nfunction getEmojiCorrection(font, fontSize) {\n let correction = emojiCorrectionCache.get(font);\n if (correction !== undefined)\n return correction;\n const ctx = getMeasureContext();\n ctx.font = font;\n const canvasW = ctx.measureText('\\u{1F600}').width;\n correction = 0;\n if (canvasW > fontSize + 0.5 &&\n typeof document !== 'undefined' &&\n document.body !== null) {\n const span = document.createElement('span');\n span.style.font = font;\n span.style.display = 'inline-block';\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.textContent = '\\u{1F600}';\n document.body.appendChild(span);\n const domW = span.getBoundingClientRect().width;\n document.body.removeChild(span);\n if (canvasW - domW > 0.5) {\n correction = canvasW - domW;\n }\n }\n emojiCorrectionCache.set(font, correction);\n return correction;\n}\nfunction countEmojiGraphemes(text) {\n let count = 0;\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n for (const g of graphemeSegmenter.segment(text)) {\n if (isEmojiGrapheme(g.segment))\n count++;\n }\n return count;\n}\nfunction getEmojiCount(seg, metrics) {\n if (metrics.emojiCount === undefined) {\n metrics.emojiCount = countEmojiGraphemes(seg);\n }\n return metrics.emojiCount;\n}\nexport function getCorrectedSegmentWidth(seg, metrics, emojiCorrection) {\n if (emojiCorrection === 0)\n return metrics.width;\n return metrics.width - getEmojiCount(seg, metrics) * emojiCorrection;\n}\nexport function getSegmentGraphemeWidths(seg, cache, emojiCorrection) {\n const widths = [];\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n for (const gs of graphemeSegmenter.segment(seg)) {\n const graphemeMetrics = getSegmentMetrics(gs.segment, cache);\n widths.push(getCorrectedSegmentWidth(gs.segment, graphemeMetrics, emojiCorrection));\n }\n return widths.length > 1 ? widths : null;\n}\nexport function getSegmentBreakableFitAdvances(seg, metrics, cache, emojiCorrection, mode) {\n if (metrics.breakableFitAdvances !== undefined && metrics.breakableFitMode === mode) {\n return metrics.breakableFitAdvances;\n }\n metrics.breakableFitMode = mode;\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n const graphemes = [];\n for (const gs of graphemeSegmenter.segment(seg)) {\n graphemes.push(gs.segment);\n }\n if (graphemes.length <= 1) {\n metrics.breakableFitAdvances = null;\n return metrics.breakableFitAdvances;\n }\n if (mode === 'sum-graphemes') {\n const advances = [];\n for (const grapheme of graphemes) {\n const graphemeMetrics = getSegmentMetrics(grapheme, cache);\n advances.push(getCorrectedSegmentWidth(grapheme, graphemeMetrics, emojiCorrection));\n }\n metrics.breakableFitAdvances = advances;\n return metrics.breakableFitAdvances;\n }\n if (mode === 'pair-context' || graphemes.length > MAX_PREFIX_FIT_GRAPHEMES) {\n const advances = [];\n let previousGrapheme = null;\n let previousWidth = 0;\n for (const grapheme of graphemes) {\n const graphemeMetrics = getSegmentMetrics(grapheme, cache);\n const currentWidth = getCorrectedSegmentWidth(grapheme, graphemeMetrics, emojiCorrection);\n if (previousGrapheme === null) {\n advances.push(currentWidth);\n }\n else {\n const pair = previousGrapheme + grapheme;\n const pairMetrics = getSegmentMetrics(pair, cache);\n advances.push(getCorrectedSegmentWidth(pair, pairMetrics, emojiCorrection) - previousWidth);\n }\n previousGrapheme = grapheme;\n previousWidth = currentWidth;\n }\n metrics.breakableFitAdvances = advances;\n return metrics.breakableFitAdvances;\n }\n const advances = [];\n let prefix = '';\n let prefixWidth = 0;\n for (const grapheme of graphemes) {\n prefix += grapheme;\n const prefixMetrics = getSegmentMetrics(prefix, cache);\n const nextPrefixWidth = getCorrectedSegmentWidth(prefix, prefixMetrics, emojiCorrection);\n advances.push(nextPrefixWidth - prefixWidth);\n prefixWidth = nextPrefixWidth;\n }\n metrics.breakableFitAdvances = advances;\n return metrics.breakableFitAdvances;\n}\nexport function getFontMeasurementState(font, needsEmojiCorrection) {\n const ctx = getMeasureContext();\n ctx.font = font;\n const cache = getSegmentMetricCache(font);\n const fontSize = parseFontSize(font);\n const emojiCorrection = needsEmojiCorrection ? getEmojiCorrection(font, fontSize) : 0;\n return { cache, fontSize, emojiCorrection };\n}\nexport function clearMeasurementCaches() {\n segmentMetricCaches.clear();\n emojiCorrectionCache.clear();\n sharedGraphemeSegmenter = null;\n}\n","import { getEngineProfile } from './measurement.js';\nfunction consumesAtLineStart(kind) {\n return kind === 'space' || kind === 'zero-width-break' || kind === 'soft-hyphen';\n}\nfunction breaksAfter(kind) {\n return (kind === 'space' ||\n kind === 'preserved-space' ||\n kind === 'tab' ||\n kind === 'zero-width-break' ||\n kind === 'soft-hyphen');\n}\nfunction normalizeLineStartSegmentIndex(prepared, segmentIndex, endSegmentIndex = prepared.widths.length) {\n while (segmentIndex < endSegmentIndex) {\n const kind = prepared.kinds[segmentIndex];\n if (!consumesAtLineStart(kind))\n break;\n segmentIndex++;\n }\n return segmentIndex;\n}\nfunction getTabAdvance(lineWidth, tabStopAdvance) {\n if (tabStopAdvance <= 0)\n return 0;\n const remainder = lineWidth % tabStopAdvance;\n if (Math.abs(remainder) <= 1e-6)\n return tabStopAdvance;\n return tabStopAdvance - remainder;\n}\nfunction getLeadingLetterSpacing(prepared, hasContent, segmentIndex) {\n return (prepared.letterSpacing !== 0 &&\n hasContent &&\n prepared.spacingGraphemeCounts[segmentIndex] > 0)\n ? prepared.letterSpacing\n : 0;\n}\nfunction getLineEndContribution(leadingSpacing, segmentContribution) {\n return segmentContribution === 0 ? 0 : leadingSpacing + segmentContribution;\n}\nfunction getTabTrailingLetterSpacing(prepared, segmentIndex) {\n return (prepared.letterSpacing !== 0 &&\n prepared.spacingGraphemeCounts[segmentIndex] > 0)\n ? prepared.letterSpacing\n : 0;\n}\nfunction getWholeSegmentFitContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth) {\n const segmentContribution = kind === 'tab'\n ? segmentWidth + getTabTrailingLetterSpacing(prepared, segmentIndex)\n : prepared.lineEndFitAdvances[segmentIndex];\n return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing) {\n const segmentContribution = kind === 'tab' ? 0 : prepared.lineEndFitAdvances[segmentIndex];\n return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth) {\n const segmentContribution = kind === 'tab' ? segmentWidth : prepared.lineEndPaintAdvances[segmentIndex];\n return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getBreakableGraphemeAdvance(prepared, hasContent, baseAdvance) {\n return prepared.letterSpacing !== 0 && hasContent\n ? baseAdvance + prepared.letterSpacing\n : baseAdvance;\n}\nfunction getBreakableCandidateFitWidth(prepared, candidatePaintWidth) {\n return prepared.letterSpacing === 0\n ? candidatePaintWidth\n : candidatePaintWidth + prepared.letterSpacing;\n}\nfunction fitSoftHyphenBreak(graphemeFitAdvances, initialWidth, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, letterSpacing) {\n let fitCount = 0;\n let fittedWidth = initialWidth;\n while (fitCount < graphemeFitAdvances.length) {\n const nextWidth = fittedWidth + graphemeFitAdvances[fitCount] + letterSpacing;\n const nextLineWidth = fitCount + 1 < graphemeFitAdvances.length\n ? nextWidth + discretionaryHyphenWidth\n : nextWidth;\n if (nextLineWidth > maxWidth + lineFitEpsilon)\n break;\n fittedWidth = nextWidth;\n fitCount++;\n }\n return { fitCount, fittedWidth };\n}\nfunction findChunkIndexForStart(prepared, segmentIndex) {\n let lo = 0;\n let hi = prepared.chunks.length;\n while (lo < hi) {\n const mid = Math.floor((lo + hi) / 2);\n if (segmentIndex < prepared.chunks[mid].consumedEndSegmentIndex) {\n hi = mid;\n }\n else {\n lo = mid + 1;\n }\n }\n return lo < prepared.chunks.length ? lo : -1;\n}\nfunction normalizeLineStartInChunk(prepared, chunkIndex, cursor) {\n let segmentIndex = cursor.segmentIndex;\n if (cursor.graphemeIndex > 0)\n return chunkIndex;\n const chunk = prepared.chunks[chunkIndex];\n if (chunk.startSegmentIndex === chunk.endSegmentIndex && segmentIndex === chunk.startSegmentIndex) {\n cursor.segmentIndex = segmentIndex;\n cursor.graphemeIndex = 0;\n return chunkIndex;\n }\n if (segmentIndex < chunk.startSegmentIndex)\n segmentIndex = chunk.startSegmentIndex;\n segmentIndex = normalizeLineStartSegmentIndex(prepared, segmentIndex, chunk.endSegmentIndex);\n if (segmentIndex < chunk.endSegmentIndex) {\n cursor.segmentIndex = segmentIndex;\n cursor.graphemeIndex = 0;\n return chunkIndex;\n }\n if (chunk.consumedEndSegmentIndex >= prepared.widths.length)\n return -1;\n cursor.segmentIndex = chunk.consumedEndSegmentIndex;\n cursor.graphemeIndex = 0;\n return chunkIndex + 1;\n}\nfunction normalizeLineStartChunkIndex(prepared, cursor) {\n if (cursor.segmentIndex >= prepared.widths.length)\n return -1;\n const chunkIndex = findChunkIndexForStart(prepared, cursor.segmentIndex);\n if (chunkIndex < 0)\n return -1;\n return normalizeLineStartInChunk(prepared, chunkIndex, cursor);\n}\nfunction normalizeLineStartChunkIndexFromHint(prepared, chunkIndex, cursor) {\n if (cursor.segmentIndex >= prepared.widths.length)\n return -1;\n let nextChunkIndex = chunkIndex;\n while (nextChunkIndex < prepared.chunks.length &&\n cursor.segmentIndex >= prepared.chunks[nextChunkIndex].consumedEndSegmentIndex) {\n nextChunkIndex++;\n }\n if (nextChunkIndex >= prepared.chunks.length)\n return -1;\n return normalizeLineStartInChunk(prepared, nextChunkIndex, cursor);\n}\nexport function normalizeLineStart(prepared, start) {\n const cursor = {\n segmentIndex: start.segmentIndex,\n graphemeIndex: start.graphemeIndex,\n };\n const chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n return chunkIndex < 0 ? null : cursor;\n}\nexport function countPreparedLines(prepared, maxWidth) {\n return walkPreparedLinesRaw(prepared, maxWidth);\n}\nfunction walkPreparedLinesSimple(prepared, maxWidth, onLine) {\n const { widths, kinds, breakableFitAdvances } = prepared;\n if (widths.length === 0)\n return 0;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineCount = 0;\n let lineW = 0;\n let hasContent = false;\n let lineStartSegmentIndex = 0;\n let lineStartGraphemeIndex = 0;\n let lineEndSegmentIndex = 0;\n let lineEndGraphemeIndex = 0;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakPaintWidth = 0;\n function clearPendingBreak() {\n pendingBreakSegmentIndex = -1;\n pendingBreakPaintWidth = 0;\n }\n function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n lineCount++;\n onLine?.(width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);\n lineW = 0;\n hasContent = false;\n clearPendingBreak();\n }\n function startLineAtSegment(segmentIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = 0;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n lineW = width;\n }\n function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = graphemeIndex;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = graphemeIndex + 1;\n lineW = width;\n }\n function appendWholeSegment(segmentIndex, width) {\n if (!hasContent) {\n startLineAtSegment(segmentIndex, width);\n return;\n }\n lineW += width;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n const fitAdvances = breakableFitAdvances[segmentIndex];\n for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n const gw = fitAdvances[g];\n if (!hasContent) {\n startLineAtGrapheme(segmentIndex, g, gw);\n }\n else if (lineW + gw > fitLimit) {\n emitCurrentLine();\n startLineAtGrapheme(segmentIndex, g, gw);\n }\n else {\n lineW += gw;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = g + 1;\n }\n }\n if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n }\n let i = 0;\n while (i < widths.length) {\n if (!hasContent) {\n i = normalizeLineStartSegmentIndex(prepared, i);\n if (i >= widths.length)\n break;\n }\n const w = widths[i];\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n if (!hasContent) {\n if (w > fitLimit && breakableFitAdvances[i] !== null) {\n appendBreakableSegmentFrom(i, 0);\n }\n else {\n startLineAtSegment(i, w);\n }\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n i++;\n continue;\n }\n const newW = lineW + w;\n if (newW > fitLimit) {\n if (breakAfter) {\n appendWholeSegment(i, w);\n emitCurrentLine(i + 1, 0, lineW - w);\n i++;\n continue;\n }\n if (pendingBreakSegmentIndex >= 0) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n emitCurrentLine();\n continue;\n }\n emitCurrentLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n continue;\n }\n if (w > fitLimit && breakableFitAdvances[i] !== null) {\n emitCurrentLine();\n appendBreakableSegmentFrom(i, 0);\n i++;\n continue;\n }\n emitCurrentLine();\n continue;\n }\n appendWholeSegment(i, w);\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n i++;\n }\n if (hasContent)\n emitCurrentLine();\n return lineCount;\n}\nexport function walkPreparedLinesRaw(prepared, maxWidth, onLine) {\n if (prepared.simpleLineWalkFastPath) {\n return walkPreparedLinesSimple(prepared, maxWidth, onLine);\n }\n const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth, chunks, } = prepared;\n if (widths.length === 0 || chunks.length === 0)\n return 0;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineCount = 0;\n let lineW = 0;\n let hasContent = false;\n let lineStartSegmentIndex = 0;\n let lineStartGraphemeIndex = 0;\n let lineEndSegmentIndex = 0;\n let lineEndGraphemeIndex = 0;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakFitWidth = 0;\n let pendingBreakPaintWidth = 0;\n let pendingBreakKind = null;\n function clearPendingBreak() {\n pendingBreakSegmentIndex = -1;\n pendingBreakFitWidth = 0;\n pendingBreakPaintWidth = 0;\n pendingBreakKind = null;\n }\n function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n lineCount++;\n onLine?.(width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);\n lineW = 0;\n hasContent = false;\n clearPendingBreak();\n }\n function startLineAtSegment(segmentIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = 0;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n lineW = width;\n }\n function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = graphemeIndex;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = graphemeIndex + 1;\n lineW = width;\n }\n function appendWholeSegment(segmentIndex, advance) {\n if (!hasContent) {\n startLineAtSegment(segmentIndex, advance);\n return;\n }\n lineW += advance;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n function updatePendingBreakForWholeSegment(kind, breakAfter, segmentIndex, segmentWidth, leadingSpacing, advance) {\n if (!breakAfter)\n return;\n const fitAdvance = getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing);\n const paintAdvance = getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth);\n pendingBreakSegmentIndex = segmentIndex + 1;\n pendingBreakFitWidth = lineW - advance + fitAdvance;\n pendingBreakPaintWidth = lineW - advance + paintAdvance;\n pendingBreakKind = kind;\n }\n function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n const fitAdvances = breakableFitAdvances[segmentIndex];\n for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n const baseGw = fitAdvances[g];\n if (!hasContent) {\n startLineAtGrapheme(segmentIndex, g, baseGw);\n }\n else {\n const gw = getBreakableGraphemeAdvance(prepared, true, baseGw);\n const candidatePaintWidth = lineW + gw;\n if (getBreakableCandidateFitWidth(prepared, candidatePaintWidth) > fitLimit) {\n emitCurrentLine();\n startLineAtGrapheme(segmentIndex, g, baseGw);\n }\n else {\n lineW = candidatePaintWidth;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = g + 1;\n }\n }\n }\n if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n }\n function continueSoftHyphenBreakableSegment(segmentIndex) {\n if (pendingBreakKind !== 'soft-hyphen')\n return false;\n const fitWidths = breakableFitAdvances[segmentIndex];\n if (fitWidths == null)\n return false;\n const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);\n if (fitCount === 0)\n return false;\n lineW = fittedWidth;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = fitCount;\n clearPendingBreak();\n if (fitCount === fitWidths.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n return true;\n }\n emitCurrentLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);\n appendBreakableSegmentFrom(segmentIndex, fitCount);\n return true;\n }\n function emitEmptyChunk(chunk) {\n lineCount++;\n onLine?.(0, chunk.startSegmentIndex, 0, chunk.consumedEndSegmentIndex, 0);\n clearPendingBreak();\n }\n for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {\n const chunk = chunks[chunkIndex];\n if (chunk.startSegmentIndex === chunk.endSegmentIndex) {\n emitEmptyChunk(chunk);\n continue;\n }\n hasContent = false;\n lineW = 0;\n lineStartSegmentIndex = chunk.startSegmentIndex;\n lineStartGraphemeIndex = 0;\n lineEndSegmentIndex = chunk.startSegmentIndex;\n lineEndGraphemeIndex = 0;\n clearPendingBreak();\n let i = chunk.startSegmentIndex;\n while (i < chunk.endSegmentIndex) {\n if (!hasContent) {\n i = normalizeLineStartSegmentIndex(prepared, i, chunk.endSegmentIndex);\n if (i >= chunk.endSegmentIndex)\n break;\n }\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n const leadingSpacing = getLeadingLetterSpacing(prepared, hasContent, i);\n const w = kind === 'tab'\n ? getTabAdvance(lineW + leadingSpacing, prepared.tabStopAdvance)\n : widths[i];\n const advance = leadingSpacing + w;\n const fitAdvance = getWholeSegmentFitContribution(prepared, kind, i, leadingSpacing, w);\n if (kind === 'soft-hyphen') {\n if (hasContent) {\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n pendingBreakSegmentIndex = i + 1;\n pendingBreakFitWidth = lineW + discretionaryHyphenWidth;\n pendingBreakPaintWidth = lineW + discretionaryHyphenWidth;\n pendingBreakKind = kind;\n }\n i++;\n continue;\n }\n if (!hasContent) {\n if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n appendBreakableSegmentFrom(i, 0);\n }\n else {\n startLineAtSegment(i, w);\n }\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n i++;\n continue;\n }\n const newFitW = lineW + fitAdvance;\n if (newFitW > fitLimit) {\n const currentBreakFitWidth = lineW + getBreakOpportunityFitContribution(prepared, kind, i, leadingSpacing);\n const currentBreakPaintWidth = lineW + getLineEndPaintContribution(prepared, kind, i, leadingSpacing, w);\n if (pendingBreakKind === 'soft-hyphen' &&\n engineProfile.preferEarlySoftHyphenBreak &&\n pendingBreakFitWidth <= fitLimit) {\n emitCurrentLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n continue;\n }\n if (pendingBreakKind === 'soft-hyphen' && continueSoftHyphenBreakableSegment(i)) {\n i++;\n continue;\n }\n if (breakAfter && currentBreakFitWidth <= fitLimit) {\n appendWholeSegment(i, advance);\n emitCurrentLine(i + 1, 0, currentBreakPaintWidth);\n i++;\n continue;\n }\n if (pendingBreakSegmentIndex >= 0 && pendingBreakFitWidth <= fitLimit) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n emitCurrentLine();\n continue;\n }\n const nextSegmentIndex = pendingBreakSegmentIndex;\n emitCurrentLine(nextSegmentIndex, 0, pendingBreakPaintWidth);\n i = nextSegmentIndex;\n continue;\n }\n if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n emitCurrentLine();\n appendBreakableSegmentFrom(i, 0);\n i++;\n continue;\n }\n emitCurrentLine();\n continue;\n }\n appendWholeSegment(i, advance);\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n i++;\n }\n if (hasContent) {\n const finalPaintWidth = pendingBreakSegmentIndex === chunk.consumedEndSegmentIndex\n ? pendingBreakPaintWidth\n : lineW;\n emitCurrentLine(chunk.consumedEndSegmentIndex, 0, finalPaintWidth);\n }\n }\n return lineCount;\n}\nexport function walkPreparedLines(prepared, maxWidth, onLine) {\n if (onLine === undefined)\n return walkPreparedLinesRaw(prepared, maxWidth);\n return walkPreparedLinesRaw(prepared, maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n onLine({\n startSegmentIndex,\n startGraphemeIndex,\n endSegmentIndex,\n endGraphemeIndex,\n width,\n });\n });\n}\nfunction stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth) {\n const chunk = prepared.chunks[chunkIndex];\n if (chunk.startSegmentIndex === chunk.endSegmentIndex) {\n cursor.segmentIndex = chunk.consumedEndSegmentIndex;\n cursor.graphemeIndex = 0;\n return 0;\n }\n const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth, } = prepared;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineW = 0;\n let hasContent = false;\n let lineEndSegmentIndex = cursor.segmentIndex;\n let lineEndGraphemeIndex = cursor.graphemeIndex;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakFitWidth = 0;\n let pendingBreakPaintWidth = 0;\n let pendingBreakKind = null;\n function clearPendingBreak() {\n pendingBreakSegmentIndex = -1;\n pendingBreakFitWidth = 0;\n pendingBreakPaintWidth = 0;\n pendingBreakKind = null;\n }\n function finishLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n if (!hasContent)\n return null;\n cursor.segmentIndex = endSegmentIndex;\n cursor.graphemeIndex = endGraphemeIndex;\n return width;\n }\n function startLineAtSegment(segmentIndex, width) {\n hasContent = true;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n lineW = width;\n }\n function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n hasContent = true;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = graphemeIndex + 1;\n lineW = width;\n }\n function appendWholeSegment(segmentIndex, advance) {\n if (!hasContent) {\n startLineAtSegment(segmentIndex, advance);\n return;\n }\n lineW += advance;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n function updatePendingBreakForWholeSegment(kind, breakAfter, segmentIndex, segmentWidth, leadingSpacing, advance) {\n if (!breakAfter)\n return;\n const fitAdvance = getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing);\n const paintAdvance = getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth);\n pendingBreakSegmentIndex = segmentIndex + 1;\n pendingBreakFitWidth = lineW - advance + fitAdvance;\n pendingBreakPaintWidth = lineW - advance + paintAdvance;\n pendingBreakKind = kind;\n }\n function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n const fitAdvances = breakableFitAdvances[segmentIndex];\n for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n const baseGw = fitAdvances[g];\n if (!hasContent) {\n startLineAtGrapheme(segmentIndex, g, baseGw);\n }\n else {\n const gw = getBreakableGraphemeAdvance(prepared, true, baseGw);\n const candidatePaintWidth = lineW + gw;\n if (getBreakableCandidateFitWidth(prepared, candidatePaintWidth) > fitLimit) {\n return finishLine();\n }\n lineW = candidatePaintWidth;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = g + 1;\n }\n }\n if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n return null;\n }\n function maybeFinishAtSoftHyphen(segmentIndex) {\n if (pendingBreakKind !== 'soft-hyphen' || pendingBreakSegmentIndex < 0)\n return null;\n const fitWidths = breakableFitAdvances[segmentIndex] ?? null;\n if (fitWidths !== null) {\n const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);\n if (fitCount === fitWidths.length) {\n lineW = fittedWidth;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n clearPendingBreak();\n return null;\n }\n if (fitCount > 0) {\n return finishLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);\n }\n }\n if (pendingBreakFitWidth <= fitLimit) {\n return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n }\n return null;\n }\n for (let i = cursor.segmentIndex; i < chunk.endSegmentIndex; i++) {\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n const startGraphemeIndex = i === cursor.segmentIndex ? cursor.graphemeIndex : 0;\n const leadingSpacing = getLeadingLetterSpacing(prepared, hasContent, i);\n const w = kind === 'tab'\n ? getTabAdvance(lineW + leadingSpacing, prepared.tabStopAdvance)\n : widths[i];\n const advance = leadingSpacing + w;\n const fitAdvance = getWholeSegmentFitContribution(prepared, kind, i, leadingSpacing, w);\n if (kind === 'soft-hyphen' && startGraphemeIndex === 0) {\n if (hasContent) {\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n pendingBreakSegmentIndex = i + 1;\n pendingBreakFitWidth = lineW + discretionaryHyphenWidth;\n pendingBreakPaintWidth = lineW + discretionaryHyphenWidth;\n pendingBreakKind = kind;\n }\n continue;\n }\n if (!hasContent) {\n if (startGraphemeIndex > 0) {\n const line = appendBreakableSegmentFrom(i, startGraphemeIndex);\n if (line !== null)\n return line;\n }\n else if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n const line = appendBreakableSegmentFrom(i, 0);\n if (line !== null)\n return line;\n }\n else {\n startLineAtSegment(i, w);\n }\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n continue;\n }\n const newFitW = lineW + fitAdvance;\n if (newFitW > fitLimit) {\n const currentBreakFitWidth = lineW + getBreakOpportunityFitContribution(prepared, kind, i, leadingSpacing);\n const currentBreakPaintWidth = lineW + getLineEndPaintContribution(prepared, kind, i, leadingSpacing, w);\n if (pendingBreakKind === 'soft-hyphen' &&\n engineProfile.preferEarlySoftHyphenBreak &&\n pendingBreakFitWidth <= fitLimit) {\n return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n }\n const softBreakLine = maybeFinishAtSoftHyphen(i);\n if (softBreakLine !== null)\n return softBreakLine;\n if (breakAfter && currentBreakFitWidth <= fitLimit) {\n appendWholeSegment(i, advance);\n return finishLine(i + 1, 0, currentBreakPaintWidth);\n }\n if (pendingBreakSegmentIndex >= 0 && pendingBreakFitWidth <= fitLimit) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n return finishLine();\n }\n return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n }\n if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n const currentLine = finishLine();\n if (currentLine !== null)\n return currentLine;\n const line = appendBreakableSegmentFrom(i, 0);\n if (line !== null)\n return line;\n }\n return finishLine();\n }\n appendWholeSegment(i, advance);\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n }\n if (pendingBreakSegmentIndex === chunk.consumedEndSegmentIndex && lineEndGraphemeIndex === 0) {\n return finishLine(chunk.consumedEndSegmentIndex, 0, pendingBreakPaintWidth);\n }\n return finishLine(chunk.consumedEndSegmentIndex, 0, lineW);\n}\nfunction stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth) {\n const { widths, kinds, breakableFitAdvances } = prepared;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineW = 0;\n let hasContent = false;\n let lineEndSegmentIndex = cursor.segmentIndex;\n let lineEndGraphemeIndex = cursor.graphemeIndex;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakPaintWidth = 0;\n for (let i = cursor.segmentIndex; i < widths.length; i++) {\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n const startGraphemeIndex = i === cursor.segmentIndex ? cursor.graphemeIndex : 0;\n const breakableFitAdvance = breakableFitAdvances[i];\n const w = widths[i];\n if (!hasContent) {\n if (startGraphemeIndex > 0 || (w > fitLimit && breakableFitAdvance !== null)) {\n const fitAdvances = breakableFitAdvance;\n const firstGraphemeWidth = fitAdvances[startGraphemeIndex];\n hasContent = true;\n lineW = firstGraphemeWidth;\n lineEndSegmentIndex = i;\n lineEndGraphemeIndex = startGraphemeIndex + 1;\n for (let g = startGraphemeIndex + 1; g < fitAdvances.length; g++) {\n const gw = fitAdvances[g];\n if (lineW + gw > fitLimit) {\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n }\n lineW += gw;\n lineEndSegmentIndex = i;\n lineEndGraphemeIndex = g + 1;\n }\n if (lineEndSegmentIndex === i && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n }\n }\n else {\n hasContent = true;\n lineW = w;\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n }\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n continue;\n }\n if (lineW + w > fitLimit) {\n if (breakAfter) {\n cursor.segmentIndex = i + 1;\n cursor.graphemeIndex = 0;\n return lineW;\n }\n if (pendingBreakSegmentIndex >= 0) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n }\n cursor.segmentIndex = pendingBreakSegmentIndex;\n cursor.graphemeIndex = 0;\n return pendingBreakPaintWidth;\n }\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n }\n lineW += w;\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n }\n if (!hasContent)\n return null;\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n}\nexport function layoutNextLineRange(prepared, start, maxWidth) {\n const end = {\n segmentIndex: start.segmentIndex,\n graphemeIndex: start.graphemeIndex,\n };\n const chunkIndex = normalizeLineStartChunkIndex(prepared, end);\n if (chunkIndex < 0)\n return null;\n const lineStartSegmentIndex = end.segmentIndex;\n const lineStartGraphemeIndex = end.graphemeIndex;\n const width = prepared.simpleLineWalkFastPath\n ? stepPreparedSimpleLineGeometry(prepared, end, maxWidth)\n : stepPreparedChunkLineGeometry(prepared, end, chunkIndex, maxWidth);\n if (width === null)\n return null;\n return {\n startSegmentIndex: lineStartSegmentIndex,\n startGraphemeIndex: lineStartGraphemeIndex,\n endSegmentIndex: end.segmentIndex,\n endGraphemeIndex: end.graphemeIndex,\n width,\n };\n}\nexport function stepPreparedLineGeometry(prepared, cursor, maxWidth) {\n const chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n if (chunkIndex < 0)\n return null;\n if (prepared.simpleLineWalkFastPath) {\n return stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth);\n }\n return stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);\n}\nexport function measurePreparedLineGeometry(prepared, maxWidth) {\n if (prepared.widths.length === 0) {\n return {\n lineCount: 0,\n maxLineWidth: 0,\n };\n }\n const cursor = {\n segmentIndex: 0,\n graphemeIndex: 0,\n };\n let lineCount = 0;\n let maxLineWidth = 0;\n if (!prepared.simpleLineWalkFastPath) {\n let chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n while (chunkIndex >= 0) {\n const lineWidth = stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);\n if (lineWidth === null) {\n return {\n lineCount,\n maxLineWidth,\n };\n }\n lineCount++;\n if (lineWidth > maxLineWidth)\n maxLineWidth = lineWidth;\n chunkIndex = normalizeLineStartChunkIndexFromHint(prepared, chunkIndex, cursor);\n }\n return {\n lineCount,\n maxLineWidth,\n };\n }\n while (true) {\n const lineWidth = stepPreparedLineGeometry(prepared, cursor, maxWidth);\n if (lineWidth === null) {\n return {\n lineCount,\n maxLineWidth,\n };\n }\n lineCount++;\n if (lineWidth > maxLineWidth)\n maxLineWidth = lineWidth;\n }\n}\n","// Text measurement for browser environments using canvas measureText.\n//\n// Problem: DOM-based text measurement (getBoundingClientRect, offsetHeight)\n// forces synchronous layout reflow. When components independently measure text,\n// each measurement triggers a reflow of the entire document. This creates\n// read/write interleaving that can cost 30ms+ per frame for 500 text blocks.\n//\n// Solution: two-phase measurement centered around canvas measureText.\n// prepare(text, font) — segments text via Intl.Segmenter, measures each word\n// via canvas, caches widths, and does one cached DOM calibration read per\n// font when emoji correction is needed. Call once when text first appears.\n// layout(prepared, maxWidth, lineHeight) — walks cached word widths with pure\n// arithmetic to count lines and compute height. Call on every resize.\n// ~0.0002ms per text.\n//\n// i18n: Intl.Segmenter handles CJK (per-character breaking), Thai, Arabic, etc.\n// Bidi: simplified rich-path metadata for mixed LTR/RTL custom rendering.\n// Punctuation merging: \"better.\" measured as one unit (matches CSS behavior).\n// Trailing whitespace: hangs past line edge without triggering breaks (CSS behavior).\n// overflow-wrap: pre-measured grapheme widths enable character-level word breaking.\n//\n// Emoji correction: Chrome/Firefox canvas measures emoji wider than DOM at font\n// sizes <24px on macOS (Apple Color Emoji). The inflation is constant per emoji\n// grapheme at a given size, font-independent. Auto-detected by comparing canvas\n// vs actual DOM emoji width (one cached DOM read per font). Safari canvas and\n// DOM agree (both wider than fontSize), so correction = 0 there.\n//\n// Limitations:\n// - system-ui font: canvas resolves to different optical variants than DOM on macOS.\n// Use named fonts (Helvetica, Inter, etc.) for guaranteed accuracy.\n// See RESEARCH.md \"Discovery: system-ui font resolution mismatch\".\n//\n// Based on Sebastian Markbage's text-layout research (github.com/chenglou/text-layout).\nimport { computeSegmentLevels } from './bidi.js';\nimport { analyzeText, canContinueKeepAllTextRun, clearAnalysisCaches, endsWithClosingQuote, isCJK, isNumericRunSegment, kinsokuEnd, kinsokuStart, leftStickyPunctuation, setAnalysisLocale, } from './analysis.js';\nimport { clearMeasurementCaches, getCorrectedSegmentWidth, getSegmentBreakableFitAdvances, getEngineProfile, getFontMeasurementState, getSegmentMetrics, textMayContainEmoji, } from './measurement.js';\nimport { countPreparedLines, measurePreparedLineGeometry, normalizeLineStart, stepPreparedLineGeometry, walkPreparedLinesRaw, } from './line-break.js';\nimport { buildLineTextFromRange, clearLineTextCaches, getLineTextCache, } from './line-text.js';\nlet sharedGraphemeSegmenter = null;\nfunction getSharedGraphemeSegmenter() {\n if (sharedGraphemeSegmenter === null) {\n sharedGraphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n }\n return sharedGraphemeSegmenter;\n}\n// --- Public API ---\nfunction createEmptyPrepared(includeSegments) {\n if (includeSegments) {\n return {\n widths: [],\n lineEndFitAdvances: [],\n lineEndPaintAdvances: [],\n kinds: [],\n simpleLineWalkFastPath: true,\n segLevels: null,\n breakableFitAdvances: [],\n letterSpacing: 0,\n spacingGraphemeCounts: [],\n discretionaryHyphenWidth: 0,\n tabStopAdvance: 0,\n chunks: [],\n segments: [],\n };\n }\n return {\n widths: [],\n lineEndFitAdvances: [],\n lineEndPaintAdvances: [],\n kinds: [],\n simpleLineWalkFastPath: true,\n segLevels: null,\n breakableFitAdvances: [],\n letterSpacing: 0,\n spacingGraphemeCounts: [],\n discretionaryHyphenWidth: 0,\n tabStopAdvance: 0,\n chunks: [],\n };\n}\nfunction buildBaseCjkUnits(segText, engineProfile) {\n const units = [];\n let unitParts = [];\n let unitStart = 0;\n let unitContainsCJK = false;\n let unitEndsWithClosingQuote = false;\n let unitIsSingleKinsokuEnd = false;\n function pushUnit() {\n if (unitParts.length === 0)\n return;\n units.push({\n text: unitParts.length === 1 ? unitParts[0] : unitParts.join(''),\n start: unitStart,\n });\n unitParts = [];\n unitContainsCJK = false;\n unitEndsWithClosingQuote = false;\n unitIsSingleKinsokuEnd = false;\n }\n function startUnit(grapheme, start, graphemeContainsCJK) {\n unitParts = [grapheme];\n unitStart = start;\n unitContainsCJK = graphemeContainsCJK;\n unitEndsWithClosingQuote = endsWithClosingQuote(grapheme);\n unitIsSingleKinsokuEnd = kinsokuEnd.has(grapheme);\n }\n function appendToUnit(grapheme, graphemeContainsCJK) {\n unitParts.push(grapheme);\n unitContainsCJK = unitContainsCJK || graphemeContainsCJK;\n const graphemeEndsWithClosingQuote = endsWithClosingQuote(grapheme);\n if (grapheme.length === 1 && leftStickyPunctuation.has(grapheme)) {\n unitEndsWithClosingQuote = unitEndsWithClosingQuote || graphemeEndsWithClosingQuote;\n }\n else {\n unitEndsWithClosingQuote = graphemeEndsWithClosingQuote;\n }\n unitIsSingleKinsokuEnd = false;\n }\n for (const gs of getSharedGraphemeSegmenter().segment(segText)) {\n const grapheme = gs.segment;\n const graphemeContainsCJK = isCJK(grapheme);\n if (unitParts.length === 0) {\n startUnit(grapheme, gs.index, graphemeContainsCJK);\n continue;\n }\n if (unitIsSingleKinsokuEnd ||\n kinsokuStart.has(grapheme) ||\n leftStickyPunctuation.has(grapheme) ||\n (engineProfile.carryCJKAfterClosingQuote &&\n graphemeContainsCJK &&\n unitEndsWithClosingQuote)) {\n appendToUnit(grapheme, graphemeContainsCJK);\n continue;\n }\n if (!unitContainsCJK && !graphemeContainsCJK) {\n appendToUnit(grapheme, graphemeContainsCJK);\n continue;\n }\n pushUnit();\n startUnit(grapheme, gs.index, graphemeContainsCJK);\n }\n pushUnit();\n return units;\n}\nfunction mergeKeepAllTextUnits(units) {\n if (units.length <= 1)\n return units;\n const merged = [];\n let currentTextParts = [units[0].text];\n let currentStart = units[0].start;\n let currentContainsCJK = isCJK(units[0].text);\n let currentCanContinue = canContinueKeepAllTextRun(units[0].text);\n function flushCurrent() {\n merged.push({\n text: currentTextParts.length === 1 ? currentTextParts[0] : currentTextParts.join(''),\n start: currentStart,\n });\n }\n for (let i = 1; i < units.length; i++) {\n const next = units[i];\n const nextContainsCJK = isCJK(next.text);\n const nextCanContinue = canContinueKeepAllTextRun(next.text);\n if (currentContainsCJK && currentCanContinue) {\n currentTextParts.push(next.text);\n currentContainsCJK = currentContainsCJK || nextContainsCJK;\n currentCanContinue = nextCanContinue;\n continue;\n }\n flushCurrent();\n currentTextParts = [next.text];\n currentStart = next.start;\n currentContainsCJK = nextContainsCJK;\n currentCanContinue = nextCanContinue;\n }\n flushCurrent();\n return merged;\n}\nfunction countRenderedSpacingGraphemes(text, kind) {\n if (kind === 'zero-width-break' ||\n kind === 'soft-hyphen' ||\n kind === 'hard-break') {\n return 0;\n }\n if (kind === 'tab')\n return 1;\n let count = 0;\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n for (const _ of graphemeSegmenter.segment(text))\n count++;\n return count;\n}\nfunction addInternalLetterSpacing(width, graphemeCount, letterSpacing) {\n return graphemeCount > 1 ? width + (graphemeCount - 1) * letterSpacing : width;\n}\nfunction measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpacing) {\n const engineProfile = getEngineProfile();\n const { cache, emojiCorrection } = getFontMeasurementState(font, textMayContainEmoji(analysis.normalized));\n const discretionaryHyphenWidth = getCorrectedSegmentWidth('-', getSegmentMetrics('-', cache), emojiCorrection) +\n (letterSpacing === 0 ? 0 : letterSpacing);\n const spaceWidth = getCorrectedSegmentWidth(' ', getSegmentMetrics(' ', cache), emojiCorrection);\n const tabStopAdvance = spaceWidth * 8;\n const hasLetterSpacing = letterSpacing !== 0;\n if (analysis.len === 0)\n return createEmptyPrepared(includeSegments);\n const widths = [];\n const lineEndFitAdvances = [];\n const lineEndPaintAdvances = [];\n const kinds = [];\n let simpleLineWalkFastPath = analysis.chunks.length <= 1 && !hasLetterSpacing;\n const segStarts = includeSegments ? [] : null;\n const breakableFitAdvances = [];\n const spacingGraphemeCounts = [];\n const segments = includeSegments ? [] : null;\n const preparedStartByAnalysisIndex = Array.from({ length: analysis.len });\n function pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, breakableFitAdvance, spacingGraphemeCount) {\n if (kind !== 'text' && kind !== 'space' && kind !== 'zero-width-break') {\n simpleLineWalkFastPath = false;\n }\n widths.push(width);\n lineEndFitAdvances.push(lineEndFitAdvance);\n lineEndPaintAdvances.push(lineEndPaintAdvance);\n kinds.push(kind);\n segStarts?.push(start);\n breakableFitAdvances.push(breakableFitAdvance);\n if (hasLetterSpacing)\n spacingGraphemeCounts.push(spacingGraphemeCount);\n if (segments !== null)\n segments.push(text);\n }\n function pushMeasuredTextSegment(text, kind, start, wordLike, allowOverflowBreaks) {\n const textMetrics = getSegmentMetrics(text, cache);\n const spacingGraphemeCount = hasLetterSpacing\n ? countRenderedSpacingGraphemes(text, kind)\n : 0;\n const width = addInternalLetterSpacing(getCorrectedSegmentWidth(text, textMetrics, emojiCorrection), spacingGraphemeCount, letterSpacing);\n const baseLineEndFitAdvance = kind === 'space' || kind === 'preserved-space' || kind === 'zero-width-break'\n ? 0\n : width;\n const lineEndFitAdvance = baseLineEndFitAdvance === 0\n ? 0\n : baseLineEndFitAdvance + (spacingGraphemeCount > 0 ? letterSpacing : 0);\n const lineEndPaintAdvance = kind === 'space' || kind === 'zero-width-break'\n ? 0\n : width;\n if (allowOverflowBreaks && wordLike && text.length > 1) {\n let fitMode = 'sum-graphemes';\n if (letterSpacing !== 0) {\n fitMode = 'segment-prefixes';\n }\n else if (isNumericRunSegment(text)) {\n fitMode = 'pair-context';\n }\n else if (engineProfile.preferPrefixWidthsForBreakableRuns) {\n fitMode = 'segment-prefixes';\n }\n const fitAdvances = getSegmentBreakableFitAdvances(text, textMetrics, cache, emojiCorrection, fitMode);\n pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, fitAdvances, spacingGraphemeCount);\n return;\n }\n pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, null, spacingGraphemeCount);\n }\n for (let mi = 0; mi < analysis.len; mi++) {\n preparedStartByAnalysisIndex[mi] = widths.length;\n const segText = analysis.texts[mi];\n const segWordLike = analysis.isWordLike[mi];\n const segKind = analysis.kinds[mi];\n const segStart = analysis.starts[mi];\n if (segKind === 'soft-hyphen') {\n pushMeasuredSegment(segText, 0, discretionaryHyphenWidth, discretionaryHyphenWidth, segKind, segStart, null, 0);\n continue;\n }\n if (segKind === 'hard-break') {\n pushMeasuredSegment(segText, 0, 0, 0, segKind, segStart, null, 0);\n continue;\n }\n if (segKind === 'tab') {\n pushMeasuredSegment(segText, 0, 0, 0, segKind, segStart, null, hasLetterSpacing ? countRenderedSpacingGraphemes(segText, segKind) : 0);\n continue;\n }\n const segMetrics = getSegmentMetrics(segText, cache);\n if (segKind === 'text' && segMetrics.containsCJK) {\n const baseUnits = buildBaseCjkUnits(segText, engineProfile);\n const measuredUnits = wordBreak === 'keep-all'\n ? mergeKeepAllTextUnits(baseUnits)\n : baseUnits;\n for (let i = 0; i < measuredUnits.length; i++) {\n const unit = measuredUnits[i];\n pushMeasuredTextSegment(unit.text, 'text', segStart + unit.start, segWordLike, wordBreak === 'keep-all' || !isCJK(unit.text));\n }\n continue;\n }\n pushMeasuredTextSegment(segText, segKind, segStart, segWordLike, true);\n }\n const chunks = mapAnalysisChunksToPreparedChunks(analysis.chunks, preparedStartByAnalysisIndex, widths.length);\n const segLevels = segStarts === null ? null : computeSegmentLevels(analysis.normalized, segStarts);\n if (segments !== null) {\n return {\n widths,\n lineEndFitAdvances,\n lineEndPaintAdvances,\n kinds,\n simpleLineWalkFastPath,\n segLevels,\n breakableFitAdvances,\n letterSpacing,\n spacingGraphemeCounts,\n discretionaryHyphenWidth,\n tabStopAdvance,\n chunks,\n segments,\n };\n }\n return {\n widths,\n lineEndFitAdvances,\n lineEndPaintAdvances,\n kinds,\n simpleLineWalkFastPath,\n segLevels,\n breakableFitAdvances,\n letterSpacing,\n spacingGraphemeCounts,\n discretionaryHyphenWidth,\n tabStopAdvance,\n chunks,\n };\n}\nfunction mapAnalysisChunksToPreparedChunks(chunks, preparedStartByAnalysisIndex, preparedEndSegmentIndex) {\n const preparedChunks = [];\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n const startSegmentIndex = chunk.startSegmentIndex < preparedStartByAnalysisIndex.length\n ? preparedStartByAnalysisIndex[chunk.startSegmentIndex]\n : preparedEndSegmentIndex;\n const endSegmentIndex = chunk.endSegmentIndex < preparedStartByAnalysisIndex.length\n ? preparedStartByAnalysisIndex[chunk.endSegmentIndex]\n : preparedEndSegmentIndex;\n const consumedEndSegmentIndex = chunk.consumedEndSegmentIndex < preparedStartByAnalysisIndex.length\n ? preparedStartByAnalysisIndex[chunk.consumedEndSegmentIndex]\n : preparedEndSegmentIndex;\n preparedChunks.push({\n startSegmentIndex,\n endSegmentIndex,\n consumedEndSegmentIndex,\n });\n }\n return preparedChunks;\n}\nfunction prepareInternal(text, font, includeSegments, options) {\n const wordBreak = options?.wordBreak ?? 'normal';\n const letterSpacing = options?.letterSpacing ?? 0;\n const analysis = analyzeText(text, getEngineProfile(), options?.whiteSpace, wordBreak);\n return measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpacing);\n}\n// Prepare text for layout. Segments the text, measures each segment via canvas,\n// and stores the widths for fast relayout at any width. Call once per text block\n// (e.g. when a comment first appears). The result is width-independent — the\n// same PreparedText can be laid out at any maxWidth and lineHeight via layout().\n//\n// Steps:\n// 1. Normalize collapsible whitespace (CSS white-space: normal behavior)\n// 2. Segment via Intl.Segmenter (handles CJK, Thai, etc.)\n// 3. Merge punctuation into preceding word (\"better.\" as one unit)\n// 4. Split CJK words into individual graphemes (per-character line breaks)\n// 5. Measure each segment via canvas measureText, cache by (segment, font)\n// 6. Pre-measure graphemes of long words (for overflow-wrap: break-word)\n// 7. Correct emoji canvas inflation (auto-detected per font size)\n// 8. Optionally compute rich-path bidi metadata for custom renderers\nexport function prepare(text, font, options) {\n return prepareInternal(text, font, false, options);\n}\n// Rich variant used by callers that need enough information to render the\n// laid-out lines themselves.\nexport function prepareWithSegments(text, font, options) {\n return prepareInternal(text, font, true, options);\n}\nfunction getInternalPrepared(prepared) {\n return prepared;\n}\n// Layout prepared text at a given max width and caller-provided lineHeight.\n// Pure arithmetic on cached widths — no canvas calls, no DOM reads, no string\n// operations, no allocations.\n// ~0.0002ms per text block. Call on every resize.\n//\n// Line breaking rules (matching CSS white-space: normal + overflow-wrap: break-word):\n// - Break before any non-space segment that would overflow the line\n// - Trailing whitespace hangs past the line edge (doesn't trigger breaks)\n// - Segments wider than maxWidth are broken at grapheme boundaries\nexport function layout(prepared, maxWidth, lineHeight) {\n // Keep the resize hot path specialized. `layoutWithLines()` shares the same\n // break semantics but also tracks line ranges; the extra bookkeeping is too\n // expensive to pay on every hot-path `layout()` call.\n const lineCount = countPreparedLines(getInternalPrepared(prepared), maxWidth);\n return { lineCount, height: lineCount * lineHeight };\n}\nfunction createLayoutLine(prepared, cache, width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {\n return {\n text: buildLineTextFromRange(prepared, cache, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex),\n width,\n start: {\n segmentIndex: startSegmentIndex,\n graphemeIndex: startGraphemeIndex,\n },\n end: {\n segmentIndex: endSegmentIndex,\n graphemeIndex: endGraphemeIndex,\n },\n };\n}\nfunction createLayoutLineRange(width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {\n return {\n width,\n start: {\n segmentIndex: startSegmentIndex,\n graphemeIndex: startGraphemeIndex,\n },\n end: {\n segmentIndex: endSegmentIndex,\n graphemeIndex: endGraphemeIndex,\n },\n };\n}\nexport function materializeLineRange(prepared, line) {\n return createLayoutLine(prepared, getLineTextCache(prepared), line.width, line.start.segmentIndex, line.start.graphemeIndex, line.end.segmentIndex, line.end.graphemeIndex);\n}\n// Batch low-level line-range pass. This is the non-materializing counterpart\n// to layoutWithLines(), useful for shrinkwrap and other aggregate stats work.\nexport function walkLineRanges(prepared, maxWidth, onLine) {\n if (prepared.widths.length === 0)\n return 0;\n return walkPreparedLinesRaw(getInternalPrepared(prepared), maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n onLine(createLayoutLineRange(width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex));\n });\n}\nexport function measureLineStats(prepared, maxWidth) {\n return measurePreparedLineGeometry(getInternalPrepared(prepared), maxWidth);\n}\n// Intrinsic-width helper for rich/userland layout work. This asks \"how wide is\n// the prepared text when container width is not the thing forcing wraps?\".\n// Explicit hard breaks still count, so this returns the widest forced line.\nexport function measureNaturalWidth(prepared) {\n let maxWidth = 0;\n walkPreparedLinesRaw(getInternalPrepared(prepared), Number.POSITIVE_INFINITY, width => {\n if (width > maxWidth)\n maxWidth = width;\n });\n return maxWidth;\n}\nexport function layoutNextLine(prepared, start, maxWidth) {\n const internal = getInternalPrepared(prepared);\n const normalizedStart = normalizeLineStart(internal, start);\n if (normalizedStart === null)\n return null;\n const end = {\n segmentIndex: normalizedStart.segmentIndex,\n graphemeIndex: normalizedStart.graphemeIndex,\n };\n const width = stepPreparedLineGeometry(internal, end, maxWidth);\n if (width === null)\n return null;\n return createLayoutLine(prepared, getLineTextCache(prepared), width, normalizedStart.segmentIndex, normalizedStart.graphemeIndex, end.segmentIndex, end.graphemeIndex);\n}\nexport function layoutNextLineRange(prepared, start, maxWidth) {\n const internal = getInternalPrepared(prepared);\n const normalizedStart = normalizeLineStart(internal, start);\n if (normalizedStart === null)\n return null;\n const end = {\n segmentIndex: normalizedStart.segmentIndex,\n graphemeIndex: normalizedStart.graphemeIndex,\n };\n const width = stepPreparedLineGeometry(internal, end, maxWidth);\n if (width === null)\n return null;\n return createLayoutLineRange(width, normalizedStart.segmentIndex, normalizedStart.graphemeIndex, end.segmentIndex, end.graphemeIndex);\n}\n// Rich layout API for callers that want the actual line contents and widths.\n// Caller still supplies lineHeight at layout time. Mirrors layout()'s break\n// decisions, but keeps extra per-line bookkeeping so it should stay off the\n// resize hot path.\nexport function layoutWithLines(prepared, maxWidth, lineHeight) {\n const lines = [];\n if (prepared.widths.length === 0)\n return { lineCount: 0, height: 0, lines };\n const graphemeCache = getLineTextCache(prepared);\n const lineCount = walkPreparedLinesRaw(getInternalPrepared(prepared), maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n lines.push(createLayoutLine(prepared, graphemeCache, width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex));\n });\n return { lineCount, height: lineCount * lineHeight, lines };\n}\nexport function clearCache() {\n clearAnalysisCaches();\n sharedGraphemeSegmenter = null;\n clearLineTextCaches();\n clearMeasurementCaches();\n}\nexport function setLocale(locale) {\n setAnalysisLocale(locale);\n clearCache();\n}\n","// SPDX-FileCopyrightText: © 2024 Schneider Electric\n//\n// SPDX-License-Identifier: Apache-2.0\n\nimport { layout, prepare } from '@chenglou/pretext'\nimport type {\n MiddlewareState,\n OffsetOptions as LibraryOffsetOptions,\n ReferenceElement,\n} from '@floating-ui/dom'\nimport type { Except, Replace } from 'type-fest'\n\nimport type { LinkIcon } from './components/shared'\n\nexport type Attributes = Record<string, string | undefined>\n\nconst inheritAttributes = (\n element: Element,\n attributes: string[] = [],\n): Attributes => {\n const attributeObject: Attributes = {}\n\n for (const attribute of attributes) {\n const value = element.getAttribute(attribute)\n if (value !== null) {\n attributeObject[attribute] = value\n element.removeAttribute(attribute)\n }\n }\n\n return attributeObject\n}\n\ntype ARIAAttribute =\n | Replace<Lowercase<keyof ARIAMixin>, 'aria', 'aria-'>\n | 'aria-activedescendant'\n | 'aria-braillelabel'\n | 'aria-brailleroledescription'\n | 'aria-colindextext'\n | 'aria-controls'\n | 'aria-describedby'\n | 'aria-description'\n | 'aria-details'\n | 'aria-errormessage'\n | 'aria-flowto'\n | 'aria-labelledby'\n | 'aria-owns'\n | 'aria-relevant'\n | 'aria-rowindextext'\n\nconst ariaAttributes: ARIAAttribute[] = [\n 'aria-activedescendant',\n 'aria-atomic',\n 'aria-autocomplete',\n 'aria-braillelabel',\n 'aria-brailleroledescription',\n 'aria-busy',\n 'aria-checked',\n 'aria-colcount',\n 'aria-colindex',\n 'aria-colindextext',\n 'aria-colspan',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-description',\n 'aria-details',\n 'aria-disabled',\n 'aria-errormessage',\n 'aria-expanded',\n 'aria-flowto',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-level',\n 'aria-live',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-orientation',\n 'aria-owns',\n 'aria-placeholder',\n 'aria-posinset',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-relevant',\n 'aria-required',\n 'aria-roledescription',\n 'aria-rowcount',\n 'aria-rowindex',\n 'aria-rowindextext',\n 'aria-rowspan',\n 'aria-selected',\n 'aria-setsize',\n 'aria-sort',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext',\n 'role',\n]\n\n/**\n * Returns an array of aria attributes that should be copied from\n * the shadow host element to a target within the light DOM.\n *\n * @param element The element that the attributes should be copied from.\n */\nexport const inheritAriaAttributes = (\n element: Element,\n): ReturnType<typeof inheritAttributes> =>\n inheritAttributes(element, ariaAttributes)\n\nconst isProduction = process.env.NODE_ENV === 'production'\nconst prefix = 'Invariant failed'\n\n/**\n * Throws an error if the value is falsy.\n *\n * @param value Value to test.\n * @param message Optional message to display in development builds.\n */\nexport function invariant(value: unknown, message?: string): asserts value {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (value) return\n if (isProduction) throw new Error(prefix)\n\n const error = message === undefined ? prefix : `${prefix}: ${message}`\n throw new Error(error)\n}\n\n/**\n * From an object pick a set of keys.\n *\n * @param object Object to pick from.\n * @param keys They keys to pick.\n * @returns New object with only the picked keys.\n */\nexport const pick = <T, K extends keyof T>(\n object: T,\n ...keys: K[]\n): Pick<T, K> => {\n const returnValue: Partial<Pick<T, K>> = {}\n for (const key of keys) returnValue[key] = object[key]\n return returnValue as Pick<T, K>\n}\n\nexport type QdsFocusEventDetail = Pick<FocusEvent, 'relatedTarget'>\nexport type QdsInputEventDetail = Pick<\n InputEvent,\n 'data' | 'inputType' | 'isComposing'\n>\nexport const pickFocusEventAttributes = (\n event: FocusEvent,\n): QdsFocusEventDetail => pick(event, 'relatedTarget')\nexport const pickInputEventAttributes = (\n event: InputEvent,\n): QdsInputEventDetail => pick(event, 'data', 'inputType', 'isComposing')\n\nconst getConversionFactor = (\n element: Element,\n unit: string,\n): number | undefined => {\n switch (unit) {\n case 'cm': {\n return 96 / 2.54\n }\n case 'em': {\n return Number.parseFloat(\n globalThis.getComputedStyle(\n element.parentElement ?? document.documentElement,\n ).fontSize,\n )\n }\n case 'in': {\n return 96\n }\n case 'mm': {\n return 96 / 25.4\n }\n case 'pc': {\n return 16\n }\n case 'pt': {\n return 96 / 72\n }\n case 'px': {\n return 1\n }\n case 'rem': {\n return Number.parseFloat(\n globalThis.getComputedStyle(document.documentElement).fontSize,\n )\n }\n default: {\n return undefined\n }\n }\n}\n\nexport const propertyToPx = (\n element: Element,\n property: string,\n): number | undefined => {\n const value = globalThis.getComputedStyle(element).getPropertyValue(property)\n const number = Number.parseFloat(value)\n if (Number.isNaN(number)) return undefined\n const unit = /\\s*[\\d+.-]*\\s*(.*)/.exec(value)?.[1] ?? ''\n\n const conversionFactor = getConversionFactor(element, unit) ?? 1\n return number * conversionFactor\n}\n\nexport const ignorePromise = <T>(promise: Promise<T>): void => {\n promise.catch(() => {\n invariant(false)\n })\n}\n\nexport const isTouchDevice = (): boolean =>\n 'ontouchstart' in globalThis ||\n ('maxTouchPoints' in globalThis && globalThis.navigator.maxTouchPoints > 0)\n\nconst toPretextWhiteSpace = (\n value: string,\n): NonNullable<Parameters<typeof prepare>[2]>['whiteSpace'] =>\n value === 'pre-wrap' ? 'pre-wrap' : 'normal'\n\nconst toPretextWordBreak = (\n value: string,\n): NonNullable<Parameters<typeof prepare>[2]>['wordBreak'] =>\n value === 'keep-all' ? 'keep-all' : 'normal'\n\n/**\n * Checks if an element's ellipsis is active.\n *\n * @param element The element to check.\n * @returns `true` if ellipsis is active, `false` otherwise.\n */\nexport const isEllipsisActive = (element: Element): boolean => {\n const computedStyle = globalThis.getComputedStyle(element)\n const {\n webkitLineClamp,\n lineHeight,\n font,\n fontStyle,\n fontWeight,\n fontSize,\n fontFamily,\n paddingLeft,\n paddingRight,\n borderLeftWidth,\n borderRightWidth,\n whiteSpace,\n wordBreak,\n } = computedStyle\n\n // `font` shorthand returns \"\" in Chromium/Firefox for shadow DOM elements\n // whose font was set via CSS custom properties. Build it from the individual\n // sub-properties which are always reliably populated.\n const resolvedFont =\n font === ''\n ? `${fontStyle} ${fontWeight} ${fontSize} ${fontFamily}`.trim()\n : font\n\n const parsedLineClamp = Number.parseInt(webkitLineClamp, 10)\n if (Number.isNaN(parsedLineClamp)) {\n return element.scrollWidth > element.clientWidth\n }\n\n const parsedLineHeight = Number.parseFloat(lineHeight)\n if (Number.isNaN(parsedLineHeight)) {\n return element.scrollHeight > element.clientHeight\n }\n\n const contentWidth =\n element.getBoundingClientRect().width -\n Number.parseFloat(paddingLeft) -\n Number.parseFloat(paddingRight) -\n Number.parseFloat(borderLeftWidth) -\n Number.parseFloat(borderRightWidth)\n if (contentWidth <= 0) return false\n\n const text = element.textContent ?? ''\n if (text.trim() === '') return false\n\n const parsedLetterSpacing = Number.parseFloat(computedStyle.letterSpacing)\n const letterSpacing = Number.isNaN(parsedLetterSpacing)\n ? undefined\n : parsedLetterSpacing\n\n try {\n const prepared = prepare(text, resolvedFont, {\n letterSpacing,\n whiteSpace: toPretextWhiteSpace(whiteSpace),\n wordBreak: toPretextWordBreak(wordBreak),\n })\n const { lineCount } = layout(prepared, contentWidth, parsedLineHeight)\n return lineCount > parsedLineClamp\n } catch {\n return element.scrollHeight > parsedLineClamp * parsedLineHeight\n }\n}\n\nexport const determineLinkIcon = (\n target?: string,\n // eslint-disable-next-line unicorn/prevent-abbreviations\n rel?: string,\n): LinkIcon | undefined => {\n if (!(rel?.split(' ') ?? []).includes('external')) return undefined\n return target === '_blank' ? 'external-new-tab-link' : 'external-link'\n}\n\nexport const resolveTarget = (\n target?: ReferenceElement | string | (() => ReferenceElement | string),\n): ReferenceElement | undefined => {\n const resolvedTarget = typeof target === 'function' ? target() : target\n if (typeof resolvedTarget !== 'string') return resolvedTarget\n\n const element = document.querySelector(resolvedTarget)\n if (element === null) throw new Error('String must resolve to an Element.')\n return element\n}\n\n/**\n * Patched version of requestAnimationFrame that avoids ngzone\n * Use only when you know ngzone should not run\n */\nconst raf = (h: FrameRequestCallback): number => {\n const win = window as Window & {\n ['__zone_symbol__requestAnimationFrame']?: (\n callback: FrameRequestCallback,\n ) => number\n }\n // eslint-disable-next-line no-underscore-dangle\n if (typeof win.__zone_symbol__requestAnimationFrame === 'function') {\n // eslint-disable-next-line no-underscore-dangle\n return win.__zone_symbol__requestAnimationFrame(h)\n }\n if (typeof requestAnimationFrame === 'function') {\n return requestAnimationFrame(h)\n }\n return setTimeout(h)\n}\n\n/**\n * Waits for a component to be ready for\n * both custom element and non-custom element builds.\n * If non-custom element build, el.componentOnReady\n * will be used.\n * For custom element builds, we wait a frame\n * so that the inner contents of the component\n * have a chance to render.\n *\n * Use this utility rather than calling\n * el.componentOnReady yourself.\n *\n * Reference: https://stenciljs.com/docs/api#componentonready\n */\nexport const componentOnReady = <\n T extends { componentOnReady?: () => Promise<T> },\n>(\n element: T,\n callback: (element_: T) => void,\n): void => {\n if (element.componentOnReady === undefined) {\n raf(() => {\n callback(element)\n })\n } else {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n element.componentOnReady().then((resolvedElement) => {\n callback(resolvedElement)\n })\n }\n}\n\nconst resolvePanelFromValue = (value: unknown): HTMLElement | undefined => {\n if (value instanceof HTMLElement) {\n return value\n }\n\n if (typeof value === 'string') {\n const element = document.querySelector(value)\n return element instanceof HTMLElement ? element : undefined\n }\n\n return undefined\n}\n\nexport const resolvePanelElement = (tab: {\n panel: Element | string | (() => Element | string)\n}): HTMLElement | undefined => {\n const panelValue = typeof tab.panel === 'function' ? tab.panel() : tab.panel\n return resolvePanelFromValue(panelValue)\n}\n\ntype OffsetValue = Except<\n Exclude<\n LibraryOffsetOptions,\n // eslint-disable-next-line @typescript-eslint/ban-types\n Function | number\n >,\n 'mainAxis'\n>\ntype OffsetFunction = (state: MiddlewareState) => OffsetValue\nexport type OffsetOptions = OffsetFunction | OffsetValue\n\nexport const HORIZONTAL_MOVE_KEYS: ReadonlySet<string> = new Set([\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n])\n\nexport const VERTICAL_MOVE_KEYS: ReadonlySet<string> = new Set([\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n])\n\nexport const closestElement = (\n selector: string,\n base: Element,\n): Element | undefined => {\n function closestFrom(\n element: Document | Element | typeof globalThis,\n ): Element | undefined {\n if (element === document || element === globalThis) return undefined\n const { assignedSlot } = element as Slottable\n // eslint-disable-next-line no-param-reassign\n if (assignedSlot) element = assignedSlot\n const found = (element as Element).closest(selector)\n return (\n found ??\n closestFrom(((element as Element).getRootNode() as ShadowRoot).host)\n )\n }\n return closestFrom(base)\n}\n\nexport const isRTL = (element: Element): boolean =>\n getComputedStyle(element).direction === 'rtl'\n\nexport const getSubmenuOpenKey = (element: Element): string =>\n isRTL(element) ? 'ArrowLeft' : 'ArrowRight'\n\nexport const getSubmenuCloseKey = (element: Element): string =>\n isRTL(element) ? 'ArrowRight' : 'ArrowLeft'\n\nexport const isCurrentPage = (url: string): boolean => {\n try {\n const currentUrl = new URL(window.location.href)\n const targetUrl = new URL(url)\n return (\n currentUrl.origin === targetUrl.origin &&\n currentUrl.pathname === targetUrl.pathname\n )\n } catch {\n return false\n }\n}\n"],"version":3}
|