diff -Nru harfbuzz-8.0.1/BUILD.md harfbuzz-8.3.0/BUILD.md --- harfbuzz-8.0.1/BUILD.md 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/BUILD.md 2023-11-11 14:08:45.000000000 +0000 @@ -1,20 +1,23 @@ On Linux, install the development packages for FreeType, Cairo, and GLib. For example, on Ubuntu / Debian, you would do: -$ sudo apt-get install meson pkg-config ragel gtk-doc-tools gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev + $ sudo apt-get install meson pkg-config ragel gtk-doc-tools gcc g++ libfreetype6-dev libglib2.0-dev libcairo2-dev whereas on Fedora, RHEL, CentOS, and other Red Hat based systems you would do: -$ sudo dnf install meson pkgconfig gtk-doc gcc gcc-c++ freetype-devel glib2-devel cairo-devel + $ sudo dnf install meson pkgconfig gtk-doc gcc gcc-c++ freetype-devel glib2-devel cairo-devel and on ArchLinux and Manjaro: -$ sudo pacman -Suy meson pkg-config ragel gcc freetype2 glib2 cairo + $ sudo pacman -Suy meson pkg-config ragel gcc freetype2 glib2 cairo -then use meson to build the project like `meson build && meson test -Cbuild`. +On macOS: -On macOS, `brew install pkg-config ragel gtk-doc freetype glib cairo meson` -then use meson like above. + brew install pkg-config ragel gtk-doc freetype glib cairo meson + +Then use meson to build the project like: + + meson build && meson test -Cbuild On Windows, meson can build the project like above if a working MSVC's cl.exe (`vcvarsall.bat`) or gcc/clang is already on your path, and if you use @@ -22,8 +25,8 @@ of the dependencies also. It is recommended to install CMake either manually or via the Visual Studio installer when building with MSVC, using meson. -Our CI configurations is also a good source of learning how to build HarfBuzz. +Our CI configurations are also a good source of learning how to build HarfBuzz. -There is also amalgam source provided with HarfBuzz which reduces whole process -of building HarfBuzz like `g++ src/harfbuzz.cc -fno-exceptions` but there is -not guarantee provided with buildability and reliability of features you get. +There is also amalgamated source provided with HarfBuzz which reduces whole process +of building HarfBuzz to `g++ src/harfbuzz.cc -fno-exceptions` but there is +no guarantee provided with buildability and reliability of features you get. diff -Nru harfbuzz-8.0.1/CONFIG.md harfbuzz-8.3.0/CONFIG.md --- harfbuzz-8.0.1/CONFIG.md 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/CONFIG.md 2023-11-11 14:08:45.000000000 +0000 @@ -144,7 +144,7 @@ name. HarfBuzz will then include that file at the appropriate place during configuration. -Up until HarfBuzz 3.1.2 the the configuration override header file's name was +Up until HarfBuzz 3.1.2, the configuration override header file's name was fixed and called `config-override.h`, and was activated by defining the macro `HAVE_CONFIG_OVERRIDE_H`. That still works. diff -Nru harfbuzz-8.0.1/ChangeLog harfbuzz-8.3.0/ChangeLog --- harfbuzz-8.0.1/ChangeLog 2023-07-12 05:41:27.000000000 +0000 +++ harfbuzz-8.3.0/ChangeLog 2023-11-11 14:20:10.000000000 +0000 @@ -1,3 +1,5288 @@ +commit 894a1f72ee93a1fd8dc1d9218cb3fd8f048be29a +Author: Khaled Hosny +Date: Sat Nov 11 15:57:54 2023 +0200 + + 8.3.0 + + NEWS | 15 +++++++++++++++ + configure.ac | 2 +- + meson.build | 2 +- + src/hb-deprecated.h | 2 +- + src/hb-version.h | 6 +++--- + 5 files changed, 21 insertions(+), 6 deletions(-) + +commit 2b5af6f42e6ba4b6eb67f807267fd5821744c519 +Author: Behdad Esfahbod +Date: Fri Nov 10 15:23:27 2023 -0700 + + [subset-plan] Micro-optimize set iteration + + Getting ranges is faster even with the current trivial implementation. + + src/hb-subset-plan.cc | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +commit 90fc809f15b5b7e46f1b17dfa64141936679125d +Author: Behdad Esfahbod +Date: Fri Nov 10 15:05:08 2023 -0700 + + [set] Minor likely and __prev__ + + src/hb-bit-set-invertible.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 6d3b7931fdcae3e266b3b58e39ad7085783c0e0e +Author: Behdad Esfahbod +Date: Fri Nov 10 14:51:34 2023 -0700 + + [subset-plan] Add a couple of allocs + + src/hb-subset-plan.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit d46cd93b6a03f6614a91803fa7d027fc6b917bc1 +Author: Behdad Esfahbod +Date: Fri Nov 10 14:36:37 2023 -0700 + + [map] Speed up copy-constructor + + src/hb-map.hh | 24 +++++++++++++++++++++++- + 1 file changed, 23 insertions(+), 1 deletion(-) + +commit e7879d6c554d1edaf02a211d6ba9de4fe2b3fbf4 +Author: Behdad Esfahbod +Date: Fri Nov 10 14:13:20 2023 -0700 + + [map] Micro-optimize destruction + + src/hb-map.hh | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit d9357a1a67cef1f328f1acc436d78f0852b05970 +Author: Behdad Esfahbod +Date: Fri Nov 10 14:08:03 2023 -0700 + + [cmap] Speed up Format12/13 collect_mapping + + src/hb-ot-cmap-table.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ae6ea6f4b7ed2e05e76e36c56eac86c3cc9ccbd7 +Author: Behdad Esfahbod +Date: Fri Nov 10 13:52:34 2023 -0700 + + [cmap] Micro-optimize + + src/hb-ot-cmap-table.hh | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 330c32f90256e6a38488faab4c0f692f18d52d42 +Author: Behdad Esfahbod +Date: Fri Nov 10 12:27:48 2023 -0700 + + [graph] Another preallocation + + src/graph/graph.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 9c4d3c3c70d1f4f33294da7ab409c64bdbc12be7 +Author: Behdad Esfahbod +Date: Fri Nov 10 12:24:26 2023 -0700 + + [graph] Pre-alloc priority-heap array + + src/graph/graph.hh | 1 + + src/hb-priority-queue.hh | 3 +++ + 2 files changed, 4 insertions(+) + +commit 29f8d9f795426da68c8526312c61f727f4f124b5 +Author: Behdad Esfahbod +Date: Thu Nov 9 09:29:02 2023 -0700 + + [gen-use-table] Fix __doc__ + + src/gen-use-table.py | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +commit aaf632581a9ba01f4534501f7a0cd715ea5bd4f0 +Merge: 2d001a0ad 32ee89dd4 +Author: خالد حسني (Khaled Hosny) +Date: Fri Nov 10 17:28:48 2023 +0200 + + Merge pull request #4492 from dalboris/fix-cmake-darwin-library-location + + [cmake] Fix double dots in CMake library location on macOS + +commit 32ee89dd480ed15903a70c2bfaeda69f348af5e1 +Author: Boris Dalstein +Date: Fri Nov 10 13:48:24 2023 +0100 + + [cmake] Fix double dots in CMake library location on macOS + + src/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2d001a0adc996dee2d8562b218ac9cc3d96816aa +Author: Qunxin Liu +Date: Wed Nov 8 11:11:51 2023 -0800 + + [subset] OTS doesn't allow ligature attachment offset to be 0 + + src/OT/Layout/GPOS/AnchorMatrix.hh | 5 ++--- + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + ...Bangla-latin-subset.default.retain-all-codepoint.ttf | Bin 0 -> 40128 bytes + test/subset/data/fonts/AnekBangla-latin-subset.ttf | Bin 0 -> 40128 bytes + .../data/tests/layout.empty_ligature_offset.tests | 8 ++++++++ + test/subset/meson.build | 1 + + 7 files changed, 13 insertions(+), 3 deletions(-) + +commit 0cbbed57e3a63476d9924eae197ddc07999d79ef +Author: Behdad Esfahbod +Date: Tue Nov 7 09:51:46 2023 -0700 + + [README] Add Godot Engine + + README.md | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 9701b0024e43d356cf23fccca5c59409b0928dc9 +Author: Garret Rieger +Date: Mon Nov 6 22:14:31 2023 +0000 + + [subset] Always place CFF1/2 char strings at the end of the packed table. + + Makes the behaviour from HB_SUBSET_FLAGS_IFTB_REQUIREMENTS the default. + + src/hb-subset-cff1.cc | 18 ++++++------------ + src/hb-subset-cff2.cc | 18 ++++++------------ + test/api/fonts/AdobeVFPrototype.abc.otf | Bin 5164 -> 5160 bytes + test/api/fonts/AdobeVFPrototype.abc.static.otf | Bin 2576 -> 2576 bytes + test/api/fonts/AdobeVFPrototype.ac.nohints.otf | Bin 4384 -> 4384 bytes + test/api/fonts/AdobeVFPrototype.ac.nosubrs.otf | Bin 4464 -> 4464 bytes + test/api/fonts/AdobeVFPrototype.ac.otf | Bin 4584 -> 4580 bytes + test/api/fonts/AdobeVFPrototype.ac.retaingids.otf | Bin 4584 -> 4584 bytes + .../SourceHanSans-Regular.41,4C2E.nohints.otf | Bin 2376 -> 2328 bytes + ...urceHanSans-Regular.41,4C2E.nosubrs.nohints.otf | Bin 2360 -> 2312 bytes + .../SourceHanSans-Regular.41,4C2E.nosubrs.otf | Bin 2548 -> 2500 bytes + test/api/fonts/SourceHanSans-Regular.41,4C2E.otf | Bin 2572 -> 2524 bytes + .../SourceHanSans-Regular.41,4C2E.retaingids.otf | Bin 2664 -> 2608 bytes + test/api/fonts/SourceSansPro-Regular.abc.otf | Bin 1808 -> 1772 bytes + .../api/fonts/SourceSansPro-Regular.ac.nohints.otf | Bin 1592 -> 1544 bytes + .../SourceSansPro-Regular.ac.nosubrs.nohints.otf | Bin 1540 -> 1492 bytes + .../api/fonts/SourceSansPro-Regular.ac.nosubrs.otf | Bin 1632 -> 1584 bytes + test/api/fonts/SourceSansPro-Regular.ac.otf | Bin 1704 -> 1656 bytes + .../fonts/SourceSansPro-Regular.ac.retaingids.otf | Bin 1708 -> 1660 bytes + test/api/fonts/cff1_dotsect.nohints.otf | Bin 3132 -> 2892 bytes + test/api/fonts/cff1_expert.2D,F6E9,FB00.otf | Bin 1412 -> 1412 bytes + test/api/fonts/cff1_seac.C0.otf | Bin 1600 -> 1564 bytes + ...tore.notdef-outline-retain-gids.61,62,63,64.otf | Bin 5676 -> 5676 bytes + ..._var_store.notdef-outline-retain-gids.61,62.otf | Bin 4776 -> 4776 bytes + ..._var_store.notdef-outline-retain-gids.61,63.otf | Bin 4588 -> 4588 bytes + ..._var_store.notdef-outline-retain-gids.61,64.otf | Bin 4764 -> 4764 bytes + ...bit_var_store.notdef-outline-retain-gids.61.otf | Bin 4128 -> 4128 bytes + ...bit_var_store.notdef-outline-retain-gids.62.otf | Bin 3904 -> 3904 bytes + ...bit_var_store.notdef-outline-retain-gids.63.otf | Bin 3828 -> 3828 bytes + ...bit_var_store.notdef-outline-retain-gids.64.otf | Bin 3800 -> 3800 bytes + .../32bit_var_store.notdef-outline.61,62,63,64.otf | Bin 5676 -> 5676 bytes + .../32bit_var_store.notdef-outline.61,62.otf | Bin 4776 -> 4776 bytes + .../32bit_var_store.notdef-outline.61,63.otf | Bin 4584 -> 4584 bytes + .../32bit_var_store.notdef-outline.61,64.otf | Bin 4744 -> 4744 bytes + .../32bit_var_store.notdef-outline.61.otf | Bin 4128 -> 4128 bytes + .../32bit_var_store.notdef-outline.62.otf | Bin 3892 -> 3892 bytes + .../32bit_var_store.notdef-outline.63.otf | Bin 3812 -> 3812 bytes + .../32bit_var_store.notdef-outline.64.otf | Bin 3780 -> 3780 bytes + ...subroutinize-retain-gids.1FC,21,41,20,62,63.otf | Bin 20128 -> 20128 bytes + ...outline-desubroutinize-retain-gids.61,62,63.otf | Bin 2280 -> 2280 bytes + ...e-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf | Bin 30448 -> 30448 bytes + ...f-outline-desubroutinize.1FC,21,41,20,62,63.otf | Bin 2356 -> 2356 bytes + ...ular.notdef-outline-desubroutinize.61,62,63.otf | Bin 2084 -> 2084 bytes + ...otdef-outline-desubroutinize.D7,D8,D9,DA,DE.otf | Bin 2252 -> 2252 bytes + ...subroutinize-retain-gids.1FC,21,41,20,62,63.otf | Bin 19960 -> 19960 bytes + ...p-hints-desubroutinize-retain-gids.61,62,63.otf | Bin 2156 -> 2156 bytes + ...s-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf | Bin 30280 -> 30280 bytes + ...rop-hints-desubroutinize.1FC,21,41,20,62,63.otf | Bin 2184 -> 2184 bytes + ...-outline-drop-hints-desubroutinize.61,62,63.otf | Bin 1960 -> 1960 bytes + ...ne-drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf | Bin 2088 -> 2088 bytes + ...e-drop-hints-retain-gids.1FC,21,41,20,62,63.otf | Bin 20052 -> 20052 bytes + ...def-outline-drop-hints-retain-gids.61,62,63.otf | Bin 2196 -> 2196 bytes + ...tline-drop-hints-retain-gids.D7,D8,D9,DA,DE.otf | Bin 30296 -> 30296 bytes + ...otdef-outline-drop-hints.1FC,21,41,20,62,63.otf | Bin 2268 -> 2268 bytes + ...-Regular.notdef-outline-drop-hints.61,62,63.otf | Bin 2028 -> 2028 bytes + ...ar.notdef-outline-drop-hints.D7,D8,D9,DA,DE.otf | Bin 2104 -> 2104 bytes + ...tdef-outline-retain-gids.1FC,21,41,20,62,63.otf | Bin 20284 -> 20284 bytes + ...Regular.notdef-outline-retain-gids.61,62,63.otf | Bin 2348 -> 2348 bytes + ...r.notdef-outline-retain-gids.D7,D8,D9,DA,DE.otf | Bin 30464 -> 30464 bytes + ...o-Regular.notdef-outline.1FC,21,41,20,62,63.otf | Bin 2500 -> 2500 bytes + ...urceSansPro-Regular.notdef-outline.61,62,63.otf | Bin 2180 -> 2180 bytes + ...nsPro-Regular.notdef-outline.D7,D8,D9,DA,DE.otf | Bin 2272 -> 2272 bytes + ...ubset.default.3042,3044,3046,3048,304A,304B.otf | Bin 4820 -> 4820 bytes + ...ubset.default.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 6196 -> 6196 bytes + ...eHanSans-Regular_subset.default.61,63,65,6B.otf | Bin 2540 -> 2540 bytes + ...ubset.default.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 6640 -> 6640 bytes + .../SourceHanSans-Regular_subset.default.660E.otf | Bin 2444 -> 2444 bytes + ...e-retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 129820 -> 129820 bytes + ...e-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 130840 -> 130840 bytes + ...bset.desubroutinize-retain-gids.61,63,65,6B.otf | Bin 3364 -> 3364 bytes + ...e-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 121956 -> 121956 bytes + ...ular_subset.desubroutinize-retain-gids.660E.otf | Bin 50744 -> 50744 bytes + ...esubroutinize.3042,3044,3046,3048,304A,304B.otf | Bin 4656 -> 4656 bytes + ...esubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 5840 -> 5840 bytes + ...s-Regular_subset.desubroutinize.61,63,65,6B.otf | Bin 2472 -> 2472 bytes + ...esubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 6132 -> 6132 bytes + ...eHanSans-Regular_subset.desubroutinize.660E.otf | Bin 2428 -> 2428 bytes + ...e-retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 129376 -> 129376 bytes + ...e-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 130220 -> 130220 bytes + ...ints-desubroutinize-retain-gids.61,63,65,6B.otf | Bin 3244 -> 3244 bytes + ...e-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 121180 -> 121180 bytes + ....drop-hints-desubroutinize-retain-gids.660E.otf | Bin 50516 -> 50516 bytes + ...esubroutinize.3042,3044,3046,3048,304A,304B.otf | Bin 4348 -> 4348 bytes + ...esubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 5324 -> 5324 bytes + ...ubset.drop-hints-desubroutinize.61,63,65,6B.otf | Bin 2368 -> 2368 bytes + ...esubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 5456 -> 5456 bytes + ...gular_subset.drop-hints-desubroutinize.660E.otf | Bin 2292 -> 2292 bytes + ...s-retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 129516 -> 129516 bytes + ...s-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 130528 -> 130528 bytes + ...r_subset.drop-hints-retain-gids.61,63,65,6B.otf | Bin 3208 -> 3208 bytes + ...s-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 121680 -> 121680 bytes + ...-Regular_subset.drop-hints-retain-gids.660E.otf | Bin 50532 -> 50532 bytes + ...et.drop-hints.3042,3044,3046,3048,304A,304B.otf | Bin 4484 -> 4484 bytes + ...et.drop-hints.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 5628 -> 5628 bytes + ...nSans-Regular_subset.drop-hints.61,63,65,6B.otf | Bin 2400 -> 2400 bytes + ...et.drop-hints.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 5952 -> 5952 bytes + ...ourceHanSans-Regular_subset.drop-hints.660E.otf | Bin 2304 -> 2304 bytes + ...t.retain-gids.3042,3044,3046,3048,304A,304B.otf | Bin 129980 -> 129980 bytes + ...t.retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf | Bin 131196 -> 131196 bytes + ...Sans-Regular_subset.retain-gids.61,63,65,6B.otf | Bin 3364 -> 3364 bytes + ...t.retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf | Bin 122460 -> 122460 bytes + ...urceHanSans-Regular_subset.retain-gids.660E.otf | Bin 50760 -> 50760 bytes + ...otoSerifMyanmar-Regular.notdef-outline.1092.otf | Bin 1392 -> 1392 bytes + ...tline-drop-hints-retain-gids.4E00,4E02,4E03.otf | Bin 1404 -> 1404 bytes + ...ef-outline-drop-hints-retain-gids.4E00,4E03.otf | Bin 1292 -> 1292 bytes + ...tline-drop-hints-retain-gids.4E00,4E05,4E07.otf | Bin 1416 -> 1416 bytes + ...tline-drop-hints-retain-gids.4E02,4E03,4E08.otf | Bin 1736 -> 1736 bytes + ....notdef-outline-drop-hints-retain-gids.4E02.otf | Bin 1048 -> 1048 bytes + ....notdef-outline-drop-hints-retain-gids.4E03.otf | Bin 1140 -> 1140 bytes + ...-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf | Bin 2000 -> 2000 bytes + ...ef-outline-drop-hints-retain-gids.4E08,4E09.otf | Bin 1888 -> 1888 bytes + ....notdef-outline-drop-hints-retain-gids.4E08.otf | Bin 1560 -> 1560 bytes + ...drop-hints-retain-gids.retain-all-codepoint.otf | Bin 2452 -> 2452 bytes + ...t1.notdef-outline-drop-hints.4E00,4E02,4E03.otf | Bin 1308 -> 1308 bytes + ...4_font1.notdef-outline-drop-hints.4E00,4E03.otf | Bin 1188 -> 1188 bytes + ...t1.notdef-outline-drop-hints.4E00,4E05,4E07.otf | Bin 1280 -> 1280 bytes + ...t1.notdef-outline-drop-hints.4E02,4E03,4E08.otf | Bin 1528 -> 1528 bytes + ...cmap14_font1.notdef-outline-drop-hints.4E02.otf | Bin 944 -> 944 bytes + ...cmap14_font1.notdef-outline-drop-hints.4E03.otf | Bin 1028 -> 1028 bytes + ...tdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf | Bin 1796 -> 1796 bytes + ...4_font1.notdef-outline-drop-hints.4E08,4E09.otf | Bin 1672 -> 1672 bytes + ...cmap14_font1.notdef-outline-drop-hints.4E08.otf | Bin 1336 -> 1336 bytes + ...def-outline-drop-hints.retain-all-codepoint.otf | Bin 2296 -> 2296 bytes + ...14_font1.notdef-outline-gids.4E00,4E02,4E03.otf | Bin 1408 -> 1408 bytes + .../cmap14_font1.notdef-outline-gids.4E00,4E03.otf | Bin 1396 -> 1396 bytes + ...14_font1.notdef-outline-gids.4E00,4E05,4E07.otf | Bin 1640 -> 1640 bytes + ...14_font1.notdef-outline-gids.4E02,4E03,4E08.otf | Bin 1760 -> 1760 bytes + .../cmap14_font1.notdef-outline-gids.4E02.otf | Bin 1332 -> 1332 bytes + .../cmap14_font1.notdef-outline-gids.4E03.otf | Bin 1372 -> 1372 bytes + ...nt1.notdef-outline-gids.4E05,4E07,4E08,4E09.otf | Bin 2184 -> 2184 bytes + .../cmap14_font1.notdef-outline-gids.4E08,4E09.otf | Bin 2056 -> 2056 bytes + .../cmap14_font1.notdef-outline-gids.4E08.otf | Bin 1720 -> 1720 bytes + ...t1.notdef-outline-gids.retain-all-codepoint.otf | Bin 2400 -> 2400 bytes + ...ont1.notdef-outline-name-ids.4E00,4E02,4E03.otf | Bin 1308 -> 1308 bytes + ...p14_font1.notdef-outline-name-ids.4E00,4E03.otf | Bin 1184 -> 1184 bytes + ...ont1.notdef-outline-name-ids.4E00,4E05,4E07.otf | Bin 1280 -> 1280 bytes + ...ont1.notdef-outline-name-ids.4E02,4E03,4E08.otf | Bin 1528 -> 1528 bytes + .../cmap14_font1.notdef-outline-name-ids.4E02.otf | Bin 944 -> 944 bytes + .../cmap14_font1.notdef-outline-name-ids.4E03.otf | Bin 1028 -> 1028 bytes + ...notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf | Bin 1796 -> 1796 bytes + ...p14_font1.notdef-outline-name-ids.4E08,4E09.otf | Bin 1668 -> 1668 bytes + .../cmap14_font1.notdef-outline-name-ids.4E08.otf | Bin 1336 -> 1336 bytes + ...otdef-outline-name-ids.retain-all-codepoint.otf | Bin 2296 -> 2296 bytes + ...1.notdef-outline-retain-gids.4E00,4E02,4E03.otf | Bin 1472 -> 1472 bytes + ..._font1.notdef-outline-retain-gids.4E00,4E03.otf | Bin 1360 -> 1360 bytes + ...1.notdef-outline-retain-gids.4E00,4E05,4E07.otf | Bin 1480 -> 1480 bytes + ...1.notdef-outline-retain-gids.4E02,4E03,4E08.otf | Bin 1804 -> 1804 bytes + ...map14_font1.notdef-outline-retain-gids.4E02.otf | Bin 1116 -> 1116 bytes + ...map14_font1.notdef-outline-retain-gids.4E03.otf | Bin 1208 -> 1208 bytes + ...def-outline-retain-gids.4E05,4E07,4E08,4E09.otf | Bin 2068 -> 2068 bytes + ..._font1.notdef-outline-retain-gids.4E08,4E09.otf | Bin 1956 -> 1956 bytes + ...map14_font1.notdef-outline-retain-gids.4E08.otf | Bin 1628 -> 1628 bytes + ...ef-outline-retain-gids.retain-all-codepoint.otf | Bin 2520 -> 2520 bytes + .../cmap14_font1.notdef-outline.4E00,4E02,4E03.otf | Bin 1376 -> 1376 bytes + .../cmap14_font1.notdef-outline.4E00,4E03.otf | Bin 1252 -> 1252 bytes + .../cmap14_font1.notdef-outline.4E00,4E05,4E07.otf | Bin 1348 -> 1348 bytes + .../cmap14_font1.notdef-outline.4E02,4E03,4E08.otf | Bin 1596 -> 1596 bytes + .../cmap14/cmap14_font1.notdef-outline.4E02.otf | Bin 1012 -> 1012 bytes + .../cmap14/cmap14_font1.notdef-outline.4E03.otf | Bin 1096 -> 1096 bytes + ...14_font1.notdef-outline.4E05,4E07,4E08,4E09.otf | Bin 1864 -> 1864 bytes + .../cmap14_font1.notdef-outline.4E08,4E09.otf | Bin 1736 -> 1736 bytes + .../cmap14/cmap14_font1.notdef-outline.4E08.otf | Bin 1404 -> 1404 bytes + ...4_font1.notdef-outline.retain-all-codepoint.otf | Bin 2364 -> 2364 bytes + ...tline-drop-hints-retain-gids.4E00,4E02,4E03.otf | Bin 1404 -> 1404 bytes + ...ef-outline-drop-hints-retain-gids.4E00,4E03.otf | Bin 1292 -> 1292 bytes + ...tline-drop-hints-retain-gids.4E00,4E05,4E07.otf | Bin 1420 -> 1420 bytes + ...tline-drop-hints-retain-gids.4E02,4E03,4E08.otf | Bin 1736 -> 1736 bytes + ....notdef-outline-drop-hints-retain-gids.4E02.otf | Bin 1044 -> 1044 bytes + ....notdef-outline-drop-hints-retain-gids.4E03.otf | Bin 1136 -> 1136 bytes + ...-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf | Bin 2000 -> 2000 bytes + ...ef-outline-drop-hints-retain-gids.4E08,4E09.otf | Bin 1884 -> 1884 bytes + ....notdef-outline-drop-hints-retain-gids.4E08.otf | Bin 1556 -> 1556 bytes + ...drop-hints-retain-gids.retain-all-codepoint.otf | Bin 2448 -> 2448 bytes + ...t2.notdef-outline-drop-hints.4E00,4E02,4E03.otf | Bin 1308 -> 1308 bytes + ...4_font2.notdef-outline-drop-hints.4E00,4E03.otf | Bin 1188 -> 1188 bytes + ...t2.notdef-outline-drop-hints.4E00,4E05,4E07.otf | Bin 1284 -> 1284 bytes + ...t2.notdef-outline-drop-hints.4E02,4E03,4E08.otf | Bin 1528 -> 1528 bytes + ...cmap14_font2.notdef-outline-drop-hints.4E02.otf | Bin 940 -> 940 bytes + ...cmap14_font2.notdef-outline-drop-hints.4E03.otf | Bin 1024 -> 1024 bytes + ...tdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf | Bin 1796 -> 1796 bytes + ...4_font2.notdef-outline-drop-hints.4E08,4E09.otf | Bin 1668 -> 1668 bytes + ...cmap14_font2.notdef-outline-drop-hints.4E08.otf | Bin 1332 -> 1332 bytes + ...def-outline-drop-hints.retain-all-codepoint.otf | Bin 2292 -> 2292 bytes + ...14_font2.notdef-outline-gids.4E00,4E02,4E03.otf | Bin 1408 -> 1408 bytes + .../cmap14_font2.notdef-outline-gids.4E00,4E03.otf | Bin 1396 -> 1396 bytes + ...14_font2.notdef-outline-gids.4E00,4E05,4E07.otf | Bin 1644 -> 1644 bytes + ...14_font2.notdef-outline-gids.4E02,4E03,4E08.otf | Bin 1760 -> 1760 bytes + .../cmap14_font2.notdef-outline-gids.4E02.otf | Bin 1328 -> 1328 bytes + .../cmap14_font2.notdef-outline-gids.4E03.otf | Bin 1368 -> 1368 bytes + ...nt2.notdef-outline-gids.4E05,4E07,4E08,4E09.otf | Bin 2184 -> 2184 bytes + .../cmap14_font2.notdef-outline-gids.4E08,4E09.otf | Bin 2052 -> 2052 bytes + .../cmap14_font2.notdef-outline-gids.4E08.otf | Bin 1716 -> 1716 bytes + ...t2.notdef-outline-gids.retain-all-codepoint.otf | Bin 2396 -> 2396 bytes + ...ont2.notdef-outline-name-ids.4E00,4E02,4E03.otf | Bin 1308 -> 1308 bytes + ...p14_font2.notdef-outline-name-ids.4E00,4E03.otf | Bin 1184 -> 1184 bytes + ...ont2.notdef-outline-name-ids.4E00,4E05,4E07.otf | Bin 1284 -> 1284 bytes + ...ont2.notdef-outline-name-ids.4E02,4E03,4E08.otf | Bin 1528 -> 1528 bytes + .../cmap14_font2.notdef-outline-name-ids.4E02.otf | Bin 940 -> 940 bytes + .../cmap14_font2.notdef-outline-name-ids.4E03.otf | Bin 1024 -> 1024 bytes + ...notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf | Bin 1796 -> 1796 bytes + ...p14_font2.notdef-outline-name-ids.4E08,4E09.otf | Bin 1664 -> 1664 bytes + .../cmap14_font2.notdef-outline-name-ids.4E08.otf | Bin 1332 -> 1332 bytes + ...otdef-outline-name-ids.retain-all-codepoint.otf | Bin 2292 -> 2292 bytes + ...2.notdef-outline-retain-gids.4E00,4E02,4E03.otf | Bin 1472 -> 1472 bytes + ..._font2.notdef-outline-retain-gids.4E00,4E03.otf | Bin 1360 -> 1360 bytes + ...2.notdef-outline-retain-gids.4E00,4E05,4E07.otf | Bin 1484 -> 1484 bytes + ...2.notdef-outline-retain-gids.4E02,4E03,4E08.otf | Bin 1804 -> 1804 bytes + ...map14_font2.notdef-outline-retain-gids.4E02.otf | Bin 1112 -> 1112 bytes + ...map14_font2.notdef-outline-retain-gids.4E03.otf | Bin 1204 -> 1204 bytes + ...def-outline-retain-gids.4E05,4E07,4E08,4E09.otf | Bin 2068 -> 2068 bytes + ..._font2.notdef-outline-retain-gids.4E08,4E09.otf | Bin 1952 -> 1952 bytes + ...map14_font2.notdef-outline-retain-gids.4E08.otf | Bin 1624 -> 1624 bytes + ...ef-outline-retain-gids.retain-all-codepoint.otf | Bin 2516 -> 2516 bytes + .../cmap14_font2.notdef-outline.4E00,4E02,4E03.otf | Bin 1376 -> 1376 bytes + .../cmap14_font2.notdef-outline.4E00,4E03.otf | Bin 1252 -> 1252 bytes + .../cmap14_font2.notdef-outline.4E00,4E05,4E07.otf | Bin 1352 -> 1352 bytes + .../cmap14_font2.notdef-outline.4E02,4E03,4E08.otf | Bin 1596 -> 1596 bytes + .../cmap14/cmap14_font2.notdef-outline.4E02.otf | Bin 1008 -> 1008 bytes + .../cmap14/cmap14_font2.notdef-outline.4E03.otf | Bin 1092 -> 1092 bytes + ...14_font2.notdef-outline.4E05,4E07,4E08,4E09.otf | Bin 1864 -> 1864 bytes + .../cmap14_font2.notdef-outline.4E08,4E09.otf | Bin 1732 -> 1732 bytes + .../cmap14/cmap14_font2.notdef-outline.4E08.otf | Bin 1400 -> 1400 bytes + ...4_font2.notdef-outline.retain-all-codepoint.otf | Bin 2360 -> 2360 bytes + ...ep-all-layout-features.retain-all-codepoint.otf | Bin 12796 -> 12796 bytes + .../AdobeVFPrototype.default.61,62,63.otf | Bin 5160 -> 5160 bytes + .../SourceSansPro-Regular.default.61,62,63.otf | Bin 2180 -> 2180 bytes + ...fault.retain-all-codepoint.wght=650,CNTR=50.otf | Bin 41760 -> 41760 bytes + ...F-ABC.default.retain-all-codepoint.wght=800.otf | Bin 1488 -> 1488 bytes + ...C.retain-gids.retain-all-codepoint.wght=800.otf | Bin 1488 -> 1488 bytes + ...ubrules_f1.layout-test-retain-gids.41,42,43.otf | Bin 2132 -> 2132 bytes + ...e_subrules_f1.layout-test-retain-gids.41,42.otf | Bin 2012 -> 2012 bytes + ...e_subrules_f1.layout-test-retain-gids.41,43.otf | Bin 2020 -> 2020 bytes + ...iple_subrules_f1.layout-test-retain-gids.41.otf | Bin 1896 -> 1896 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3992 -> 3992 bytes + ...1_multiple_subrules_f1.layout-test.41,42,43.otf | Bin 1420 -> 1420 bytes + ...ext1_multiple_subrules_f1.layout-test.41,42.otf | Bin 1304 -> 1304 bytes + ...ext1_multiple_subrules_f1.layout-test.41,43.otf | Bin 1300 -> 1300 bytes + ...ontext1_multiple_subrules_f1.layout-test.41.otf | Bin 1192 -> 1192 bytes + ...ubrules_f1.layout-test.retain-all-codepoint.otf | Bin 3992 -> 3992 bytes + ...ubrules_f1.layout-test-retain-gids.41,42,43.otf | Bin 2148 -> 2148 bytes + ...e_subrules_f1.layout-test-retain-gids.41,42.otf | Bin 2024 -> 2024 bytes + ...e_subrules_f1.layout-test-retain-gids.41,43.otf | Bin 2020 -> 2020 bytes + ...iple_subrules_f1.layout-test-retain-gids.41.otf | Bin 1896 -> 1896 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4008 -> 4008 bytes + ...2_multiple_subrules_f1.layout-test.41,42,43.otf | Bin 1436 -> 1436 bytes + ...ext2_multiple_subrules_f1.layout-test.41,42.otf | Bin 1316 -> 1316 bytes + ...ext2_multiple_subrules_f1.layout-test.41,43.otf | Bin 1300 -> 1300 bytes + ...ontext2_multiple_subrules_f1.layout-test.41.otf | Bin 1192 -> 1192 bytes + ...ubrules_f1.layout-test.retain-all-codepoint.otf | Bin 4008 -> 4008 bytes + ..._simple_f1.layout-test-retain-gids.41,42,43.otf | Bin 2112 -> 2112 bytes + ...xt3_simple_f1.layout-test-retain-gids.41,42.otf | Bin 1892 -> 1892 bytes + ...xt3_simple_f1.layout-test-retain-gids.41,43.otf | Bin 2000 -> 2000 bytes + ...ntext3_simple_f1.layout-test-retain-gids.41.otf | Bin 1876 -> 1876 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3972 -> 3972 bytes + ...pos_context3_simple_f1.layout-test.41,42,43.otf | Bin 1400 -> 1400 bytes + .../gpos_context3_simple_f1.layout-test.41,42.otf | Bin 1184 -> 1184 bytes + .../gpos_context3_simple_f1.layout-test.41,43.otf | Bin 1280 -> 1280 bytes + .../gpos_context3_simple_f1.layout-test.41.otf | Bin 1172 -> 1172 bytes + ..._simple_f1.layout-test.retain-all-codepoint.otf | Bin 3972 -> 3972 bytes + ...ototype.layout-test-retain-gids.41,42,43,57.otf | Bin 5920 -> 5920 bytes + ...FPrototype.layout-test-retain-gids.41,42,43.otf | Bin 5208 -> 5208 bytes + ...beVFPrototype.layout-test-retain-gids.41,42.otf | Bin 4728 -> 4728 bytes + ...FPrototype.layout-test-retain-gids.41,56,57.otf | Bin 5044 -> 5044 bytes + ...AdobeVFPrototype.layout-test-retain-gids.41.otf | Bin 3992 -> 3992 bytes + ...beVFPrototype.layout-test-retain-gids.42,57.otf | Bin 5036 -> 5036 bytes + .../AdobeVFPrototype.layout-test.41,42,43,57.otf | Bin 5476 -> 5476 bytes + .../AdobeVFPrototype.layout-test.41,42,43.otf | Bin 4948 -> 4948 bytes + .../AdobeVFPrototype.layout-test.41,42.otf | Bin 4464 -> 4464 bytes + .../AdobeVFPrototype.layout-test.41,56,57.otf | Bin 4616 -> 4616 bytes + .../AdobeVFPrototype.layout-test.41.otf | Bin 3764 -> 3764 bytes + .../AdobeVFPrototype.layout-test.42,57.otf | Bin 4596 -> 4596 bytes + .../gpos1_2_font.layout-test-retain-gids.41,43.otf | Bin 2044 -> 2044 bytes + .../gpos1_2_font.layout-test-retain-gids.41,46.otf | Bin 2204 -> 2204 bytes + .../gpos1_2_font.layout-test-retain-gids.41.otf | Bin 1916 -> 1916 bytes + .../gpos1_2_font.layout-test-retain-gids.42,44.otf | Bin 1964 -> 1964 bytes + .../gpos1_2_font.layout-test-retain-gids.43,46.otf | Bin 2068 -> 2068 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3848 -> 3848 bytes + .../layout.gpos/gpos1_2_font.layout-test.41,43.otf | Bin 1324 -> 1324 bytes + .../layout.gpos/gpos1_2_font.layout-test.41,46.otf | Bin 1452 -> 1452 bytes + .../layout.gpos/gpos1_2_font.layout-test.41.otf | Bin 1212 -> 1212 bytes + .../layout.gpos/gpos1_2_font.layout-test.42,44.otf | Bin 1232 -> 1232 bytes + .../layout.gpos/gpos1_2_font.layout-test.43,46.otf | Bin 1316 -> 1316 bytes + ...os1_2_font.layout-test.retain-all-codepoint.otf | Bin 3848 -> 3848 bytes + ...s2_1_font7.layout-test-retain-gids.21,23,25.otf | Bin 1728 -> 1728 bytes + ...gpos2_1_font7.layout-test-retain-gids.21,23.otf | Bin 1604 -> 1604 bytes + ...gpos2_1_font7.layout-test-retain-gids.2E,23.otf | Bin 1912 -> 1912 bytes + ...s2_1_font7.layout-test-retain-gids.41,42,43.otf | Bin 1976 -> 1976 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3868 -> 3868 bytes + .../gpos2_1_font7.layout-test.21,23,25.otf | Bin 1384 -> 1384 bytes + .../gpos2_1_font7.layout-test.21,23.otf | Bin 1276 -> 1276 bytes + .../gpos2_1_font7.layout-test.2E,23.otf | Bin 1476 -> 1476 bytes + .../gpos2_1_font7.layout-test.41,42,43.otf | Bin 1264 -> 1264 bytes + ...s2_1_font7.layout-test.retain-all-codepoint.otf | Bin 3868 -> 3868 bytes + ...s2_2_font5.layout-test-retain-gids.21,23,25.otf | Bin 1780 -> 1780 bytes + ...gpos2_2_font5.layout-test-retain-gids.21,23.otf | Bin 1656 -> 1656 bytes + ...gpos2_2_font5.layout-test-retain-gids.2E,23.otf | Bin 1912 -> 1912 bytes + ...s2_2_font5.layout-test-retain-gids.41,42,43.otf | Bin 1976 -> 1976 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3904 -> 3904 bytes + .../gpos2_2_font5.layout-test.21,23,25.otf | Bin 1436 -> 1436 bytes + .../gpos2_2_font5.layout-test.21,23.otf | Bin 1328 -> 1328 bytes + .../gpos2_2_font5.layout-test.2E,23.otf | Bin 1476 -> 1476 bytes + .../gpos2_2_font5.layout-test.41,42,43.otf | Bin 1264 -> 1264 bytes + ...s2_2_font5.layout-test.retain-all-codepoint.otf | Bin 3904 -> 3904 bytes + .../gpos3_font3.layout-test-retain-gids.28,29.otf | Bin 1700 -> 1700 bytes + .../gpos3_font3.layout-test-retain-gids.28,2B.otf | Bin 1836 -> 1836 bytes + .../gpos3_font3.layout-test-retain-gids.29,2B.otf | Bin 1744 -> 1744 bytes + ...pos3_font3.layout-test-retain-gids.41,42,43.otf | Bin 1972 -> 1972 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3908 -> 3908 bytes + .../layout.gpos3/gpos3_font3.layout-test.28,29.otf | Bin 1308 -> 1308 bytes + .../layout.gpos3/gpos3_font3.layout-test.28,2B.otf | Bin 1428 -> 1428 bytes + .../layout.gpos3/gpos3_font3.layout-test.29,2B.otf | Bin 1336 -> 1336 bytes + .../gpos3_font3.layout-test.41,42,43.otf | Bin 1260 -> 1260 bytes + ...pos3_font3.layout-test.retain-all-codepoint.otf | Bin 3908 -> 3908 bytes + ...chors_1.layout-test-retain-gids.41,42,43,44.otf | Bin 2336 -> 2336 bytes + ...chors_1.layout-test-retain-gids.41,42,43,45.otf | Bin 2332 -> 2332 bytes + ..._anchors_1.layout-test-retain-gids.41,42,43.otf | Bin 2096 -> 2096 bytes + ...ple_anchors_1.layout-test-retain-gids.41,42.otf | Bin 1892 -> 1892 bytes + ...rs_1.layout-test-retain-gids.41,43,44,45,46.otf | Bin 2692 -> 2692 bytes + ..._anchors_1.layout-test-retain-gids.41,43,44.otf | Bin 2328 -> 2328 bytes + ..._anchors_1.layout-test-retain-gids.41,43,45.otf | Bin 2328 -> 2328 bytes + ...ple_anchors_1.layout-test-retain-gids.41,43.otf | Bin 2092 -> 2092 bytes + ...ltiple_anchors_1.layout-test-retain-gids.41.otf | Bin 1876 -> 1876 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3996 -> 3996 bytes + ..._multiple_anchors_1.layout-test.41,42,43,44.otf | Bin 1620 -> 1620 bytes + ..._multiple_anchors_1.layout-test.41,42,43,45.otf | Bin 1600 -> 1600 bytes + ...os4_multiple_anchors_1.layout-test.41,42,43.otf | Bin 1384 -> 1384 bytes + .../gpos4_multiple_anchors_1.layout-test.41,42.otf | Bin 1184 -> 1184 bytes + ...ltiple_anchors_1.layout-test.41,43,44,45,46.otf | Bin 1964 -> 1964 bytes + ...os4_multiple_anchors_1.layout-test.41,43,44.otf | Bin 1604 -> 1604 bytes + ...os4_multiple_anchors_1.layout-test.41,43,45.otf | Bin 1592 -> 1592 bytes + .../gpos4_multiple_anchors_1.layout-test.41,43.otf | Bin 1372 -> 1372 bytes + .../gpos4_multiple_anchors_1.layout-test.41.otf | Bin 1172 -> 1172 bytes + ..._anchors_1.layout-test.retain-all-codepoint.otf | Bin 3996 -> 3996 bytes + ...5_font1.layout-test-retain-gids.41,42,43,44.otf | Bin 2360 -> 2360 bytes + ...5_font1.layout-test-retain-gids.41,42,43,45.otf | Bin 2356 -> 2356 bytes + ...pos5_font1.layout-test-retain-gids.41,42,43.otf | Bin 2120 -> 2120 bytes + ...pos5_font1.layout-test-retain-gids.41,42,44.otf | Bin 2276 -> 2276 bytes + ...pos5_font1.layout-test-retain-gids.41,42,45.otf | Bin 2260 -> 2260 bytes + .../gpos5_font1.layout-test-retain-gids.41,42.otf | Bin 2012 -> 2012 bytes + .../gpos5_font1.layout-test-retain-gids.41,43.otf | Bin 2016 -> 2016 bytes + .../gpos5_font1.layout-test-retain-gids.41.otf | Bin 1892 -> 1892 bytes + .../gpos5_font1.layout-test-retain-gids.42.otf | Bin 1764 -> 1764 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4064 -> 4064 bytes + .../gpos5_font1.layout-test.41,42,43,44.otf | Bin 1644 -> 1644 bytes + .../gpos5_font1.layout-test.41,42,43,45.otf | Bin 1624 -> 1624 bytes + .../gpos5_font1.layout-test.41,42,43.otf | Bin 1408 -> 1408 bytes + .../gpos5_font1.layout-test.41,42,44.otf | Bin 1552 -> 1552 bytes + .../gpos5_font1.layout-test.41,42,45.otf | Bin 1524 -> 1524 bytes + .../layout.gpos5/gpos5_font1.layout-test.41,42.otf | Bin 1304 -> 1304 bytes + .../layout.gpos5/gpos5_font1.layout-test.41,43.otf | Bin 1296 -> 1296 bytes + .../layout.gpos5/gpos5_font1.layout-test.41.otf | Bin 1188 -> 1188 bytes + .../layout.gpos5/gpos5_font1.layout-test.42.otf | Bin 1048 -> 1048 bytes + ...pos5_font1.layout-test.retain-all-codepoint.otf | Bin 4064 -> 4064 bytes + ...6_font1.layout-test-retain-gids.41,42,43,44.otf | Bin 2312 -> 2312 bytes + ...6_font1.layout-test-retain-gids.41,42,43,45.otf | Bin 2308 -> 2308 bytes + ...pos6_font1.layout-test-retain-gids.41,42,43.otf | Bin 2072 -> 2072 bytes + .../gpos6_font1.layout-test-retain-gids.41,42.otf | Bin 1868 -> 1868 bytes + ...ont1.layout-test-retain-gids.41,43,44,45,46.otf | Bin 2668 -> 2668 bytes + ...pos6_font1.layout-test-retain-gids.41,43,44.otf | Bin 2304 -> 2304 bytes + ...pos6_font1.layout-test-retain-gids.41,43,45.otf | Bin 2304 -> 2304 bytes + .../gpos6_font1.layout-test-retain-gids.41,43.otf | Bin 2068 -> 2068 bytes + .../gpos6_font1.layout-test-retain-gids.41.otf | Bin 1852 -> 1852 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3972 -> 3972 bytes + .../gpos6_font1.layout-test.41,42,43,44.otf | Bin 1596 -> 1596 bytes + .../gpos6_font1.layout-test.41,42,43,45.otf | Bin 1576 -> 1576 bytes + .../gpos6_font1.layout-test.41,42,43.otf | Bin 1360 -> 1360 bytes + .../layout.gpos6/gpos6_font1.layout-test.41,42.otf | Bin 1160 -> 1160 bytes + .../gpos6_font1.layout-test.41,43,44,45,46.otf | Bin 1940 -> 1940 bytes + .../gpos6_font1.layout-test.41,43,44.otf | Bin 1580 -> 1580 bytes + .../gpos6_font1.layout-test.41,43,45.otf | Bin 1568 -> 1568 bytes + .../layout.gpos6/gpos6_font1.layout-test.41,43.otf | Bin 1348 -> 1348 bytes + .../layout.gpos6/gpos6_font1.layout-test.41.otf | Bin 1148 -> 1148 bytes + ...pos6_font1.layout-test.retain-all-codepoint.otf | Bin 3972 -> 3972 bytes + ...ules_f1.layout-test-retain-gids.30,31,32,33.otf | Bin 2400 -> 2400 bytes + ...ubrules_f1.layout-test-retain-gids.41,42,43.otf | Bin 2020 -> 2020 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4012 -> 4012 bytes + ...ultiple_subrules_f1.layout-test.30,31,32,33.otf | Bin 1928 -> 1928 bytes + ...1_multiple_subrules_f1.layout-test.41,42,43.otf | Bin 1308 -> 1308 bytes + ...ubrules_f1.layout-test.retain-all-codepoint.otf | Bin 4012 -> 4012 bytes + ...ules_f1.layout-test-retain-gids.30,31,32,33.otf | Bin 2420 -> 2420 bytes + ...ubrules_f1.layout-test-retain-gids.41,42,43.otf | Bin 2020 -> 2020 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4044 -> 4044 bytes + ...ultiple_subrules_f1.layout-test.30,31,32,33.otf | Bin 1948 -> 1948 bytes + ...2_multiple_subrules_f1.layout-test.41,42,43.otf | Bin 1308 -> 1308 bytes + ...ubrules_f1.layout-test.retain-all-codepoint.otf | Bin 4044 -> 4044 bytes + ...mple_f1.layout-test-retain-gids.30,31,32,33.otf | Bin 2392 -> 2392 bytes + ..._simple_f1.layout-test-retain-gids.41,42,43.otf | Bin 1996 -> 1996 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3980 -> 3980 bytes + ...chaining3_simple_f1.layout-test.30,31,32,33.otf | Bin 1920 -> 1920 bytes + ...os_chaining3_simple_f1.layout-test.41,42,43.otf | Bin 1284 -> 1284 bytes + ..._simple_f1.layout-test.retain-all-codepoint.otf | Bin 3980 -> 3980 bytes + .../gpos9_font2.layout-test-retain-gids.41,42.otf | Bin 1960 -> 1960 bytes + .../gpos9_font2.layout-test-retain-gids.41.otf | Bin 1920 -> 1920 bytes + .../gpos9_font2.layout-test-retain-gids.42.otf | Bin 1792 -> 1792 bytes + .../layout.gpos9/gpos9_font2.layout-test.41,42.otf | Bin 1252 -> 1252 bytes + .../layout.gpos9/gpos9_font2.layout-test.41.otf | Bin 1216 -> 1216 bytes + .../layout.gpos9/gpos9_font2.layout-test.42.otf | Bin 1076 -> 1076 bytes + ...stitution.layout-test-retain-gids.53A9,53F1.otf | Bin 5076 -> 5076 bytes + ...e_substitution.layout-test-retain-gids.53A9.otf | Bin 4656 -> 4656 bytes + ...e_substitution.layout-test-retain-gids.53F1.otf | Bin 2996 -> 2996 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 6764 -> 6764 bytes + ...lternate_substitution.layout-test.53A9,53F1.otf | Bin 4952 -> 4952 bytes + ...sub_alternate_substitution.layout-test.53A9.otf | Bin 4504 -> 4504 bytes + ...sub_alternate_substitution.layout-test.53F1.otf | Bin 2804 -> 2804 bytes + ...bstitution.layout-test.retain-all-codepoint.otf | Bin 6672 -> 6672 bytes + ...ubrules_f2.layout-test-retain-gids.41,42,43.otf | Bin 2236 -> 2236 bytes + ...e_subrules_f2.layout-test-retain-gids.41,42.otf | Bin 2208 -> 2208 bytes + ...e_subrules_f2.layout-test-retain-gids.41,43.otf | Bin 2032 -> 2032 bytes + ...iple_subrules_f2.layout-test-retain-gids.41.otf | Bin 1908 -> 1908 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3988 -> 3988 bytes + ...1_multiple_subrules_f2.layout-test.41,42,43.otf | Bin 1440 -> 1440 bytes + ...ext1_multiple_subrules_f2.layout-test.41,42.otf | Bin 1400 -> 1400 bytes + ...ext1_multiple_subrules_f2.layout-test.41,43.otf | Bin 1312 -> 1312 bytes + ...ontext1_multiple_subrules_f2.layout-test.41.otf | Bin 1204 -> 1204 bytes + ...ubrules_f2.layout-test.retain-all-codepoint.otf | Bin 3988 -> 3988 bytes + ...ubrules_f2.layout-test-retain-gids.41,42,43.otf | Bin 2252 -> 2252 bytes + ...e_subrules_f2.layout-test-retain-gids.41,42.otf | Bin 2220 -> 2220 bytes + ...e_subrules_f2.layout-test-retain-gids.41,43.otf | Bin 2032 -> 2032 bytes + ...iple_subrules_f2.layout-test-retain-gids.41.otf | Bin 1908 -> 1908 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4004 -> 4004 bytes + ...2_multiple_subrules_f2.layout-test.41,42,43.otf | Bin 1456 -> 1456 bytes + ...ext2_multiple_subrules_f2.layout-test.41,42.otf | Bin 1412 -> 1412 bytes + ...ext2_multiple_subrules_f2.layout-test.41,43.otf | Bin 1312 -> 1312 bytes + ...ontext2_multiple_subrules_f2.layout-test.41.otf | Bin 1204 -> 1204 bytes + ...ubrules_f2.layout-test.retain-all-codepoint.otf | Bin 4004 -> 4004 bytes + ...cessive_f1.layout-test-retain-gids.41,42,43.otf | Bin 2016 -> 2016 bytes + ...successive_f1.layout-test-retain-gids.41,42.otf | Bin 1912 -> 1912 bytes + ...successive_f1.layout-test-retain-gids.41,43.otf | Bin 2020 -> 2020 bytes + ...t3_successive_f1.layout-test-retain-gids.41.otf | Bin 1896 -> 1896 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4008 -> 4008 bytes + ...context3_successive_f1.layout-test.41,42,43.otf | Bin 1304 -> 1304 bytes + ...ub_context3_successive_f1.layout-test.41,42.otf | Bin 1204 -> 1204 bytes + ...ub_context3_successive_f1.layout-test.41,43.otf | Bin 1300 -> 1300 bytes + .../gsub_context3_successive_f1.layout-test.41.otf | Bin 1192 -> 1192 bytes + ...cessive_f1.layout-test.retain-all-codepoint.otf | Bin 4008 -> 4008 bytes + ...ules_f1.layout-test-retain-gids.30,31,32,33.otf | Bin 2372 -> 2372 bytes + ...ubrules_f1.layout-test-retain-gids.41,42,43.otf | Bin 2032 -> 2032 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3984 -> 3984 bytes + ...ultiple_subrules_f1.layout-test.30,31,32,33.otf | Bin 1900 -> 1900 bytes + ...1_multiple_subrules_f1.layout-test.41,42,43.otf | Bin 1320 -> 1320 bytes + ...ubrules_f1.layout-test.retain-all-codepoint.otf | Bin 3984 -> 3984 bytes + ...ules_f1.layout-test-retain-gids.30,31,32,33.otf | Bin 2400 -> 2400 bytes + ...ubrules_f1.layout-test-retain-gids.41,42,43.otf | Bin 2032 -> 2032 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4016 -> 4016 bytes + ...ultiple_subrules_f1.layout-test.30,31,32,33.otf | Bin 1928 -> 1928 bytes + ...2_multiple_subrules_f1.layout-test.41,42,43.otf | Bin 1320 -> 1320 bytes + ...ubrules_f1.layout-test.retain-all-codepoint.otf | Bin 4016 -> 4016 bytes + ...mple_f2.layout-test-retain-gids.30,31,32,33.otf | Bin 2360 -> 2360 bytes + ..._simple_f2.layout-test-retain-gids.41,42,43.otf | Bin 2008 -> 2008 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 3952 -> 3952 bytes + ...chaining3_simple_f2.layout-test.30,31,32,33.otf | Bin 1888 -> 1888 bytes + ...ub_chaining3_simple_f2.layout-test.41,42,43.otf | Bin 1296 -> 1296 bytes + ..._simple_f2.layout-test.retain-all-codepoint.otf | Bin 3952 -> 3952 bytes + ...test-retain-gids.41,42,43,44,45,46,47,48,49.otf | Bin 3208 -> 3208 bytes + ...ayout-test-retain-gids.41,42,43,44,45,46,47.otf | Bin 2828 -> 2828 bytes + ...ayout-test-retain-gids.41,42,43,44,45,46,4D.otf | Bin 2896 -> 2896 bytes + ...ayout-test-retain-gids.41,42,43,44,45,46,51.otf | Bin 2900 -> 2900 bytes + ...d.layout-test-retain-gids.41,42,43,44,45,46.otf | Bin 2564 -> 2564 bytes + ...ly_created.layout-test-retain-gids.41,42,43.otf | Bin 2008 -> 2008 bytes + ...manually_created.layout-test-retain-gids.41.otf | Bin 1888 -> 1888 bytes + ...manually_created.layout-test-retain-gids.61.otf | Bin 2608 -> 2608 bytes + ...ayout-test-retain-gids.retain-all-codepoint.otf | Bin 4048 -> 4048 bytes + ...ated.layout-test.41,42,43,44,45,46,47,48,49.otf | Bin 2404 -> 2404 bytes + ...ly_created.layout-test.41,42,43,44,45,46,47.otf | Bin 2012 -> 2012 bytes + ...ly_created.layout-test.41,42,43,44,45,46,4D.otf | Bin 2012 -> 2012 bytes + ...ly_created.layout-test.41,42,43,44,45,46,51.otf | Bin 2060 -> 2060 bytes + ...ually_created.layout-test.41,42,43,44,45,46.otf | Bin 1844 -> 1844 bytes + ...gsub8_manually_created.layout-test.41,42,43.otf | Bin 1296 -> 1296 bytes + .../gsub8_manually_created.layout-test.41.otf | Bin 1184 -> 1184 bytes + .../gsub8_manually_created.layout-test.61.otf | Bin 1556 -> 1556 bytes + ...ly_created.layout-test.retain-all-codepoint.otf | Bin 4048 -> 4048 bytes + 471 files changed, 12 insertions(+), 24 deletions(-) + +commit c6884377ecea2fbd3021dd98f20883b31339ccc1 +Author: Garret Rieger +Date: Mon Nov 6 20:21:46 2023 +0000 + + [subset] Add HB_SUBSET_FLAGS_IFTB_REQUIREMENTS flag. + + When enabled the output subset conforms to the requirements for a base font to be patched by IFTB patches. IFTB is a proposed incremental font transfer patch. This new flag is set as experimental. Currently, setting this flag causes the output subset to also use long offsets for outline data in loca/glyf, gvar, CFF, and CFF2. + + This change is a version of https://github.com/skef/harfbuzz/commit/3ae2fe2084d96f61d8ad1bbe42a6ef4e62ec830a rebased onto head w/ tests added. + + src/hb-ot-cff-common.hh | 12 +++-- + src/hb-ot-var-gvar-table.hh | 7 ++- + src/hb-subset-cff1.cc | 55 ++++++++++++++------ + src/hb-subset-cff2.cc | 56 +++++++++++++++------ + src/hb-subset-plan.cc | 10 ++-- + src/hb-subset.h | 6 +++ + test/api/fonts/AdobeVFPrototype.abc.long_off.otf | Bin 0 -> 5172 bytes + test/api/fonts/Roboto-Variable.abc.long_loca.ttf | Bin 0 -> 11396 bytes + test/api/fonts/Roboto-Variable.abc.ttf | Bin 0 -> 11384 bytes + .../fonts/SourceSansPro-Regular.abc.long_off.otf | Bin 0 -> 1788 bytes + test/api/test-subset-cff1.c | 32 ++++++++++++ + test/api/test-subset-cff2.c | 31 ++++++++++++ + test/api/test-subset-glyf.c | 33 ++++++++++++ + .../AdobeVFPrototype.default.61,62,63.otf | Bin 0 -> 5160 bytes + ...AdobeVFPrototype.iftb_requirements.61,62,63.otf | Bin 0 -> 5172 bytes + .../Roboto-Variable.default.61,62,63.ttf | Bin 0 -> 11384 bytes + .../Roboto-Variable.iftb_requirements.61,62,63.ttf | Bin 0 -> 11396 bytes + .../SourceSansPro-Regular.default.61,62,63.otf | Bin 0 -> 2180 bytes + ...eSansPro-Regular.iftb_requirements.61,62,63.otf | Bin 0 -> 2196 bytes + test/subset/data/profiles/iftb_requirements.txt | 1 + + test/subset/data/tests/iftb_requirements.tests | 14 ++++++ + test/subset/meson.build | 1 + + util/hb-subset.cc | 7 ++- + 23 files changed, 223 insertions(+), 42 deletions(-) + +commit c3c32b0176716ead26f36dd2cc01928898999408 +Author: Behdad Esfahbod +Date: Mon Nov 6 09:57:34 2023 -0700 + + Add xkcd.png + + Makefile.am | 1 + + README.md | 2 ++ + xkcd.png | Bin 0 -> 52751 bytes + 3 files changed, 3 insertions(+) + +commit c2f42fbb146c04ba557ceb31a8eac9bd5f3d65ea +Author: Qunxin Liu +Date: Mon Nov 6 11:49:11 2023 -0800 + + fix meson compiled_tests + + src/meson.build | 28 ++++++++++++++-------------- + src/test-subset-instancer-solver.cc | 2 +- + 2 files changed, 15 insertions(+), 15 deletions(-) + +commit d550e16acc61e8c25dbafd9f19f62b25cd4e79f1 +Author: Qunxin Liu +Date: Mon Nov 6 10:31:05 2023 -0800 + + [instancer] Recalc avgcharwidth after instancing + + src/hb-ot-os2-table.hh | 22 +++++++++++++++++++++ + src/hb-subset.cc | 1 + + ...r-new.default.retain-all-codepoint.wght=300.ttf | Bin 131708 -> 131708 bytes + ...r-new.default.retain-all-codepoint.wght=700.ttf | Bin 131584 -> 131584 bytes + ...i-ABC.default.retain-all-codepoint.wght=300.ttf | Bin 5788 -> 5788 bytes + ...i-ABC.default.retain-all-codepoint.wght=700.ttf | Bin 5784 -> 5784 bytes + ...t.retain-all-codepoint.wght=200-300,opsz=14.ttf | Bin 10136 -> 10136 bytes + ...ain-all-codepoint.wght=400,wdth=100,opsz=14.ttf | Bin 6404 -> 6404 bytes + ...set.default.retain-all-codepoint.wdth=112.5.ttf | Bin 2668 -> 2668 bytes + ...subset.default.retain-all-codepoint.wdth=75.ttf | Bin 3296 -> 3296 bytes + ...ayout-features.retain-all-codepoint.wdth=75.ttf | Bin 4500 -> 4500 bytes + ...fault.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes + ...fault.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114296 -> 114296 bytes + ...anges.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114196 -> 114196 bytes + ...anges.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114296 -> 114296 bytes + ...ubset.default.retain-all-codepoint.wght=300.ttf | Bin 3300 -> 3300 bytes + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8708 -> 8708 bytes + ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7592 -> 7592 bytes + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7568 -> 7568 bytes + ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6932 -> 6932 bytes + .../MPLUS1-Variable.default.30DD.wght=100.ttf | Bin 1404 -> 1404 bytes + .../MPLUS1-Variable.default.30DD.wght=400.ttf | Bin 1656 -> 1656 bytes + ...retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf | Bin 2224 -> 2224 bytes + ...retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf | Bin 2676 -> 2676 bytes + ...fault.retain-all-codepoint.wght=650,CNTR=50.otf | Bin 41760 -> 41760 bytes + ...F-ABC.default.retain-all-codepoint.wght=800.otf | Bin 1488 -> 1488 bytes + ...C.retain-gids.retain-all-codepoint.wght=800.otf | Bin 1488 -> 1488 bytes + ...oldit.default.retain-all-codepoint.wght=900.ttf | Bin 2488 -> 2488 bytes + ...fault.retain-all-codepoint.wght=200,wdth=90.ttf | Bin 6736 -> 6736 bytes + ...fault.retain-all-codepoint.wght=650,wdth=85.ttf | Bin 6688 -> 6688 bytes + ...fault.retain-all-codepoint.wght=200,wdth=90.ttf | Bin 6416 -> 6416 bytes + ...fault.retain-all-codepoint.wght=650,wdth=85.ttf | Bin 6368 -> 6368 bytes + ...etain-all-codepoint.wght=150,wdth=80,CTGR=0.ttf | Bin 1396 -> 1396 bytes + ...etain-all-codepoint.wght=300,wdth=90,CTGR=0.ttf | Bin 1432 -> 1432 bytes + ...odepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 4300 -> 4300 bytes + ...c.default.retain-all-codepoint.wght=300-600.ttf | Bin 6808 -> 6808 bytes + ...c.default.retain-all-codepoint.wght=500-800.ttf | Bin 7288 -> 7288 bytes + ...lt.retain-all-codepoint.wght=400,wdth=100.0.ttf | Bin 6780 -> 6780 bytes + ...ult.retain-all-codepoint.wght=drop,wdth=100.ttf | Bin 6780 -> 6780 bytes + ...epoint.wght=400,CASL=0,CRSV=0,MONO=0,slnt=0.ttf | Bin 1884 -> 1884 bytes + ...n.default.retain-all-codepoint.wght=300-600.ttf | Bin 305092 -> 305092 bytes + ...n.default.retain-all-codepoint.wght=500-800.ttf | Bin 250164 -> 250164 bytes + ...ubset.default.retain-all-codepoint.wght=400.ttf | Bin 1848 -> 1848 bytes + ...et.drop-hints.retain-all-codepoint.wght=400.ttf | Bin 1824 -> 1824 bytes + test/subset/generate-expected-outputs.py | 2 +- + 45 files changed, 24 insertions(+), 1 deletion(-) + +commit d053426bb469883bf1a40dd97fa4d57ef6d1ac47 +Author: Behdad Esfahbod +Date: Mon Nov 6 11:44:14 2023 -0700 + + Format + + src/hb-sanitize.hh | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 2f528ce4ed806575be3aba361551568acba354d8 +Author: Behdad Esfahbod +Date: Mon Nov 6 11:40:19 2023 -0700 + + Tweak a couple more barriers + + src/OT/Color/CPAL/CPAL.hh | 4 ++-- + src/hb-aat-layout-morx-table.hh | 10 ++++++---- + 2 files changed, 8 insertions(+), 6 deletions(-) + +commit f31fb431552b2408ffea24a9469720cc99e9c939 +Author: Behdad Esfahbod +Date: Mon Nov 6 11:29:30 2023 -0700 + + Remove a couple unnecessary barriers + + src/hb-ot-os2-table.hh | 6 +++--- + src/hb-ot-post-table.hh | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit d10cc79a6c95b11c6aefab464cfdb66dcc7f5fb5 +Author: Behdad Esfahbod +Date: Mon Nov 6 10:41:30 2023 -0700 + + Move a couple of barriers + + src/OT/Layout/GPOS/AnchorFormat3.hh | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit 80cb6b580fbef90e37a2ec8105e18407af912568 +Author: Qunxin Liu +Date: Mon Nov 6 09:00:33 2023 -0800 + + [instancer_solver] port solver fix: where axisDef < lower and upper < axisMax + + Port from https://github.com/fonttools/fonttools/commit/f1e56cd757ed457ffd3b58c262d3f4c2e4586555 + + src/hb-subset-instancer-solver.cc | 8 +++++--- + src/test-subset-instancer-solver.cc | 10 ++++++++++ + 2 files changed, 15 insertions(+), 3 deletions(-) + +commit 64305568d7ed267b98d162026153a93e89ceba5c +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Nov 6 10:39:24 2023 +0000 + + Bump fonttools from 4.43.1 to 4.44.0 in /.ci + + Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.43.1 to 4.44.0. + - [Release notes](https://github.com/fonttools/fonttools/releases) + - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst) + - [Commits](https://github.com/fonttools/fonttools/compare/4.43.1...4.44.0) + + --- + updated-dependencies: + - dependency-name: fonttools + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements-fonttools.txt | 86 ++++++++++++++++++------------------- + .ci/requirements.txt | 96 +++++++++++++++++++++--------------------- + 2 files changed, 91 insertions(+), 91 deletions(-) + +commit 920c40cd43dd7b10b7ecba3d82a46f5fea88536f +Merge: fd5eb10d3 36f5e654a +Author: Behdad Esfahbod +Date: Sun Nov 5 07:05:47 2023 -0700 + + Merge pull request #4480 from harfbuzz/sanitize-barrier-properly + + Sanitize barrier properly + + https://github.com/harfbuzz/harfbuzz/pull/4480 + +commit 36f5e654a641824271f26c814705590bd45ffea0 +Author: Behdad Esfahbod +Date: Sat Nov 4 16:17:32 2023 -0600 + + [circleci] Roll back msan/tsan ubuntu image + + Job gets stuck at compiling with the newer image :(. + + .circleci/config.yml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 6ff0932722b1455efc6685bab9c0c3f6cba446b5 +Author: Behdad Esfahbod +Date: Sat Nov 4 15:33:32 2023 -0600 + + [circleci] Roll images + + .circleci/config.yml | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +commit 7ee7e2e340be46205dc675a1cb80ff6330a78b53 +Author: Behdad Esfahbod +Date: Sat Nov 4 15:02:28 2023 -0600 + + [sanitize] Add remaining hb_barrier() annotations + + I'm sure I've forgot some. But this is a good start. + + src/hb-ot-cmap-table.hh | 3 +++ + src/hb-ot-hdmx-table.hh | 2 ++ + src/hb-ot-head-table.hh | 1 + + src/hb-ot-hhea-table.hh | 4 +++- + src/hb-ot-kern-table.hh | 9 ++++++--- + src/hb-ot-layout-base-table.hh | 2 ++ + src/hb-ot-layout-common.hh | 17 +++++++++++++++-- + src/hb-ot-layout-gsubgpos.hh | 10 ++++++++++ + src/hb-ot-layout-jstf-table.hh | 1 + + src/hb-ot-math-table.hh | 3 +++ + src/hb-ot-maxp-table.hh | 3 ++- + src/hb-ot-meta-table.hh | 2 ++ + src/hb-ot-os2-table.hh | 8 +++++--- + src/hb-ot-post-table.hh | 20 ++++++++++++++++++-- + src/hb-ot-stat-table.hh | 3 +++ + src/hb-ot-var-avar-table.hh | 3 +++ + src/hb-ot-var-common.hh | 2 ++ + src/hb-ot-var-cvar-table.hh | 3 ++- + src/hb-ot-var-fvar-table.hh | 3 +++ + src/hb-ot-var-gvar-table.hh | 4 +++- + src/hb-ot-var-hvar-table.hh | 1 + + src/hb-ot-var-mvar-table.hh | 2 ++ + src/hb-ot-vorg-table.hh | 1 + + 23 files changed, 93 insertions(+), 14 deletions(-) + +commit 3a9262cc3de4be58804cdd431dd4ae9fa9bfbe7a +Author: Behdad Esfahbod +Date: Sat Nov 4 12:52:46 2023 -0600 + + [sanitize] More hb_barrier() annotations + + src/OT/Color/CPAL/CPAL.hh | 10 ++++++++- + src/OT/Color/sbix/sbix.hh | 1 + + src/OT/Color/svg/svg.hh | 1 + + src/OT/Layout/Common/Coverage.hh | 1 + + src/OT/Layout/GDEF/GDEF.hh | 4 ++++ + src/OT/Layout/GPOS/Anchor.hh | 1 + + src/OT/Layout/GPOS/AnchorMatrix.hh | 2 ++ + src/OT/Layout/GPOS/MarkMarkPosFormat1.hh | 1 + + src/OT/Layout/GPOS/PairPosFormat1.hh | 1 + + src/OT/Layout/GPOS/PairSet.hh | 6 +++-- + src/OT/Layout/GPOS/SinglePosFormat1.hh | 1 + + src/OT/Layout/GPOS/ValueFormat.hh | 1 + + .../Layout/GSUB/ReverseChainSingleSubstFormat1.hh | 2 ++ + src/OT/name/name.hh | 5 ++++- + src/graph/classdef-graph.hh | 3 +++ + src/graph/coverage-graph.hh | 3 +++ + src/graph/gsubgpos-graph.hh | 4 ++++ + src/graph/markbasepos-graph.hh | 3 +++ + src/graph/pairpos-graph.hh | 3 +++ + src/hb-aat-layout-ankr-table.hh | 1 + + src/hb-aat-layout-bsln-table.hh | 1 + + src/hb-aat-layout-common.hh | 6 +++++ + src/hb-aat-layout-feat-table.hh | 2 ++ + src/hb-aat-layout-just-table.hh | 3 +++ + src/hb-aat-layout-kerx-table.hh | 17 +++++++++----- + src/hb-aat-layout-morx-table.hh | 26 ++++++++++++++++------ + src/hb-aat-layout-opbd-table.hh | 1 + + src/hb-aat-layout-trak-table.hh | 2 ++ + src/hb-aat-ltag-table.hh | 5 ++++- + src/hb-open-file.hh | 6 +++++ + src/hb-open-type.hh | 14 +++++++++++- + src/hb-ot-cff-common.hh | 19 ++++++++++++---- + src/hb-ot-cff1-table.hh | 23 ++++++++++++++++--- + src/hb-ot-cff2-table.hh | 12 +++++++++- + 34 files changed, 164 insertions(+), 27 deletions(-) + +commit 30672c7e75097377e08f3cc91ddd7e4c14a76033 +Author: Behdad Esfahbod +Date: Fri Nov 3 18:52:03 2023 -0600 + + Add hb_barrier() + + And annotate some more. + + src/OT/Color/CBDT/CBDT.hh | 6 ++++++ + src/OT/Color/COLR/COLR.hh | 17 +++++++++++++---- + src/OT/Layout/GPOS/AnchorFormat3.hh | 4 ++-- + src/OT/Layout/GPOS/AnchorMatrix.hh | 2 +- + src/OT/Layout/GPOS/CursivePosFormat1.hh | 4 ++-- + src/OT/Layout/GPOS/ValueFormat.hh | 2 +- + src/hb-aat-layout-kerx-table.hh | 16 ++++++++-------- + src/hb-aat-layout-morx-table.hh | 14 +++++++------- + src/hb-atomic.hh | 6 ++++++ + src/hb-ot-layout-common.hh | 4 ++-- + src/hb-sanitize.hh | 9 +-------- + 11 files changed, 49 insertions(+), 35 deletions(-) + +commit 775320a4f6c320efd998df22879d9037b0ee1ab9 +Author: Behdad Esfahbod +Date: Fri Nov 3 18:38:12 2023 -0600 + + [sanitize] Add barriers to runtime-checked values + + src/OT/Layout/GPOS/AnchorFormat3.hh | 4 ++-- + src/OT/Layout/GPOS/AnchorMatrix.hh | 1 + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 2 ++ + src/OT/Layout/GPOS/ValueFormat.hh | 1 + + src/hb-aat-layout-kerx-table.hh | 8 ++++++++ + src/hb-aat-layout-morx-table.hh | 9 +++++++-- + 6 files changed, 21 insertions(+), 4 deletions(-) + +commit cf49f3f2cbec8fbdc654d45e2f4b8e9c8d91db47 +Author: Behdad Esfahbod +Date: Fri Nov 3 18:20:14 2023 -0600 + + [sanitize] Add barrier() + + src/hb-ot-layout-common.hh | 2 ++ + src/hb-sanitize.hh | 12 ++++++++---- + 2 files changed, 10 insertions(+), 4 deletions(-) + +commit b16f18004482f2981155e0ff94b34aab57b38812 +Author: Behdad Esfahbod +Date: Fri Nov 3 17:51:50 2023 -0600 + + [sanitize] Yet another hack to "fix" barrier issue + + src/hb-atomic.hh | 4 ++-- + src/hb-sanitize.hh | 5 ++++- + 2 files changed, 6 insertions(+), 3 deletions(-) + +commit fd5eb10d3b4cfee1bb10614ff6719378c949492e +Merge: cdcad93b7 6baf791e6 +Author: Behdad Esfahbod +Date: Fri Nov 3 15:30:15 2023 -0600 + + Merge pull request #4477 from googlefonts/fix_feature_variations + + [instancer] Fix feature variations collect lookups + +commit cdcad93b737c4553b98fdc0c57f6432c5643c97a +Author: Behdad Esfahbod +Date: Fri Nov 3 12:45:16 2023 -0600 + + [set] Mark as realloc-movable + + src/hb-set.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit 6baf791e6f5ef38f18876aa952a506858c383c0e +Author: Qunxin Liu +Date: Fri Nov 3 11:06:07 2023 -0700 + + [instancer] add tests + + ...on-subset.default.retain-all-codepoint.wdth=112.5.ttf | Bin 0 -> 2668 bytes + test/subset/data/fonts/AnekBangla-question-subset.ttf | Bin 0 -> 4488 bytes + .../feature_variation_instance_collect_lookups.tests | 11 +++++++++++ + test/subset/meson.build | 1 + + 4 files changed, 12 insertions(+) + +commit aca55dbe36eafb0f69081323b679f2a5bf51239c +Author: Qunxin Liu +Date: Fri Nov 3 10:51:37 2023 -0700 + + [instancer] fix feature variations collect lookups + + We already know which record to keep, so just collect lookups and no + need to check the substitutes_map + + src/hb-ot-layout-common.hh | 12 ++---------- + src/hb-ot-layout-gsubgpos.hh | 3 +-- + src/hb-ot-layout.cc | 2 +- + src/hb-subset-plan.cc | 2 +- + 4 files changed, 5 insertions(+), 14 deletions(-) + +commit 7766e67b336b9477c99aeff5d417d57b30b5cb6e +Merge: 413af0a9b f05636e1b +Author: Behdad Esfahbod +Date: Fri Nov 3 11:38:21 2023 -0600 + + Merge pull request #4474 from googlefonts/fix_value_format + + [instancer] fix value format for SinglePos/PairPos when strip_hints is on + +commit f05636e1be2664df8356df4adf5f1af1c7628bcd +Author: Qunxin Liu +Date: Thu Nov 2 09:18:15 2023 -0700 + + [instancer] fix build issue after rebase + + src/OT/Layout/GPOS/ValueFormat.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 31b5b2b1d7470dbcebc3bc5eb68ce8cfaca6667b +Author: Qunxin Liu +Date: Thu Nov 2 09:08:36 2023 -0700 + + [instancer] add tests for valueformat + + ...rmat-subset.default.retain-all-codepoint.wght=400.ttf | Bin 0 -> 1848 bytes + ...t-subset.drop-hints.retain-all-codepoint.wght=400.ttf | Bin 0 -> 1824 bytes + .../data/fonts/NotoSansOriya-valueformat-subset.ttf | Bin 0 -> 3048 bytes + .../data/tests/value_format_partial_instance.tests | 12 ++++++++++++ + test/subset/meson.build | 1 + + 5 files changed, 13 insertions(+) + +commit 6c017a1162265bee8c5d09cd89aef26ef25afe51 +Author: Qunxin Liu +Date: Wed Nov 1 09:54:46 2023 -0700 + + [instancer] SinglePos/PairPos: do not strip_hints for partial instancing + + src/OT/Layout/GDEF/GDEF.hh | 1 + + src/OT/Layout/GPOS/Common.hh | 2 +- + src/OT/Layout/GPOS/PairPosFormat1.hh | 37 +++++++++++++--------- + src/OT/Layout/GPOS/PairPosFormat2.hh | 37 +++++++++++++--------- + src/OT/Layout/GPOS/SinglePos.hh | 13 +++----- + src/OT/Layout/GPOS/SinglePosFormat1.hh | 26 +++++++++++++++- + src/OT/Layout/GPOS/SinglePosFormat2.hh | 38 ++++++++++++++++++++++- + src/OT/Layout/GPOS/ValueFormat.hh | 57 ++++++++++++++-------------------- + src/hb-subset-plan.cc | 1 + + src/hb-subset-plan.hh | 3 ++ + src/hb-subset.cc | 2 +- + 11 files changed, 143 insertions(+), 74 deletions(-) + +commit 413af0a9b2cc3bebf559f0f5e459cc98c5ee955e +Author: Qunxin Liu +Date: Thu Nov 2 11:14:48 2023 -0700 + + [instancer] When partial instancing, subset LigCaretList after VarStore instantiation + + src/OT/Layout/GDEF/GDEF.hh | 4 +++- + ...ubset.default.retain-all-codepoint.wght=300.ttf | Bin 0 -> 3300 bytes + ...ns-BlackItalic.default.retain-all-codepoint.ttf | Bin 120020 -> 120020 bytes + ...lackItalic.glyph-names.retain-all-codepoint.ttf | Bin 132264 -> 132264 bytes + ...kItalic.notdef-outline.retain-all-codepoint.ttf | Bin 120020 -> 120020 bytes + ...taliqUrdu-Bold.default.retain-all-codepoint.ttf | Bin 543364 -> 543364 bytes + ...qUrdu-Bold.retain-gids.retain-all-codepoint.ttf | Bin 543364 -> 543364 bytes + test/subset/data/fonts/AnekBangla-subset.ttf | Bin 0 -> 5456 bytes + test/subset/data/tests/gdef_partial_instance.tests | 11 +++++++++++ + test/subset/meson.build | 1 + + 10 files changed, 15 insertions(+), 1 deletion(-) + +commit f57c64d8257e449230979b59ec3b98ed643775be +Author: Behdad Esfahbod +Date: Thu Nov 2 11:21:44 2023 -0600 + + [ci] Try fixing msvc builds again + + https://gitlab.gnome.org/GNOME/glib/-/issues/3134 + + .ci/requirements.in | 1 + + .ci/requirements.txt | 8 +++++++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +commit 724360813b7916bb4a000b361796f63230e7c8c0 +Author: Behdad Esfahbod +Date: Thu Nov 2 11:01:49 2023 -0600 + + [ci] Roll lxml forward + + Should help fixing the msvc fails. + + .ci/requirements.txt | 201 +++++++++++++++++++++++++++++---------------------- + 1 file changed, 113 insertions(+), 88 deletions(-) + +commit b532945987935db56503ad8ffb0655331798af5f +Author: Behdad Esfahbod +Date: Wed Nov 1 16:53:26 2023 -0600 + + [tuple_delta_t] Micro-optimize encoding vector access + + src/hb-ot-var-common.hh | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +commit 59cfb4c570b0e11470900264b151295e64226947 +Author: Behdad Esfahbod +Date: Wed Nov 1 16:25:50 2023 -0600 + + [instancing] Micro-optimize a loop + + src/hb-ot-var-common.hh | 21 +++++++++++++-------- + 1 file changed, 13 insertions(+), 8 deletions(-) + +commit 29d49eced8a9f4a9a6148972b0ba4430a2f7f6bf +Author: Behdad Esfahbod +Date: Wed Nov 1 15:55:47 2023 -0600 + + [vector] Introduce realloc_moves tag + + Some types (even aggregate) can be moved using realloc(). + Extend the fast path to hb_hashmap and tuple_delta_t. + + src/hb-array.hh | 2 ++ + src/hb-map.hh | 2 ++ + src/hb-ot-var-common.hh | 2 ++ + src/hb-vector.hh | 7 ++++--- + 4 files changed, 10 insertions(+), 3 deletions(-) + +commit 7b46d772c44d6f0ee09c0c403fefa833cb385d9e +Author: Garret Rieger +Date: Wed Nov 1 20:07:07 2023 +0000 + + [instancer] Update help message for --instance. + + Remove note about partial instancing not being supported. Add --variations flag as an alternate name for --instance. This matches other hb utils. + + util/hb-subset.cc | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +commit 9d0bc085eeadf9385ae28ee460a9a5e686564917 +Merge: f6f35f73b 2804127ac +Author: Behdad Esfahbod +Date: Tue Oct 31 22:25:07 2023 -0600 + + Merge pull request #4469 from harfbuzz/typed-offsets + + Typed offsets + +commit 2804127ac91d0fde162c034f9cb4d7d3fe9e369b +Author: Behdad Esfahbod +Date: Tue Oct 31 15:12:55 2023 -0600 + + [Value] Typed offsets + + src/OT/Layout/GPOS/PairPosFormat2.hh | 2 +- + src/OT/Layout/GPOS/PairSet.hh | 2 +- + src/OT/Layout/GPOS/PairValueRecord.hh | 4 ++-- + src/OT/Layout/GPOS/SinglePosFormat1.hh | 2 +- + src/OT/Layout/GPOS/SinglePosFormat2.hh | 2 +- + src/OT/Layout/GPOS/ValueFormat.hh | 37 ++++++++++++++++++---------------- + 6 files changed, 26 insertions(+), 23 deletions(-) + +commit 38546acd8391dbad3439a81302ff8e7032eb2ae1 +Author: Behdad Esfahbod +Date: Tue Oct 31 14:56:09 2023 -0600 + + [typed-offset] Fix sanitize() + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 2 +- + src/hb-open-type.hh | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 62117801b8c17d939cccc4c8ce0fe6a0b6a69d31 +Author: Behdad Esfahbod +Date: Tue Oct 31 14:50:45 2023 -0600 + + [AnchorMatrix] Annotate offset base type + + src/OT/Layout/GPOS/AnchorMatrix.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4f219385a692b4dfd7d0a926b21c61b21f92085d +Author: Behdad Esfahbod +Date: Tue Oct 31 14:33:23 2023 -0600 + + [CursivePosFormat1] Use typed offsets for EntryExitRecord + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit b37cc61d45618b3ac6e7a45386a1bccfad37b02f +Author: Behdad Esfahbod +Date: Tue Oct 31 14:26:42 2023 -0600 + + Add base types to OffsetTo<> + + Unused so far. + + src/OT/Layout/types.hh | 8 ++++---- + src/hb-aat-layout-morx-table.hh | 4 ++-- + src/hb-open-type.hh | 42 ++++++++++++++++++++--------------------- + 3 files changed, 27 insertions(+), 27 deletions(-) + +commit f6f35f73bc865eeb68b74c257f49d66b6a0e76b0 +Author: Qunxin Liu +Date: Fri Oct 27 09:31:07 2023 -0700 + + [instancer] add tests for feature variations partial instancing + + ...Oriya-subset.default.retain-all-codepoint.wdth=75.ttf | Bin 0 -> 3296 bytes + ...-all-layout-features.retain-all-codepoint.wdth=75.ttf | Bin 0 -> 4500 bytes + test/subset/data/fonts/NotoSansOriya-subset.ttf | Bin 0 -> 6212 bytes + .../data/tests/feature_variations_partial_instance.tests | 12 ++++++++++++ + test/subset/meson.build | 1 + + 5 files changed, 13 insertions(+) + +commit 091e538daf396b009e01f5f7d54acbfdbd3b392d +Author: Qunxin Liu +Date: Thu Oct 26 12:52:08 2023 -0700 + + [instancer] support partial instancing for FeatureVariations + + src/hb-ot-layout-common.hh | 110 ++++++++++++++++++++++++++++++-------- + src/hb-ot-layout-gsubgpos.hh | 10 +--- + src/hb-ot-layout.cc | 2 +- + src/hb-subset-plan-member-list.hh | 9 ++++ + src/hb-subset-plan.cc | 41 +++++++++----- + 5 files changed, 128 insertions(+), 44 deletions(-) + +commit e5040c2352fd7c95090176a63f2d9043e4de0739 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 30 10:02:16 2023 +0000 + + Bump ossf/scorecard-action from 2.3.0 to 2.3.1 + + Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.3.0 to 2.3.1. + - [Release notes](https://github.com/ossf/scorecard-action/releases) + - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) + - [Commits](https://github.com/ossf/scorecard-action/compare/483ef80eb98fb506c348f7d62e28055e49fe2398...0864cf19026789058feabb7e87baa5f140aac736) + + --- + updated-dependencies: + - dependency-name: ossf/scorecard-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 16a76829f71e633c165bba9e7ff00cfb00a5d984 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 30 10:02:12 2023 +0000 + + Bump github/codeql-action from 2.22.4 to 2.22.5 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.4 to 2.22.5. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/49abf0ba24d0b7953cb586944e918a0b92074c80...74483a38d39275f33fcff5f35b679b5ca4a26a99) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bf08205625ac69a1d6fc7b0e066a8a5ed6ef908b +Author: Behdad Esfahbod +Date: Fri Oct 27 12:24:33 2023 -0600 + + [deprecated] Add a mis-spelled macro + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4464 + + docs/harfbuzz-sections.txt | 1 + + src/hb-aat-layout.h | 4 ++-- + src/hb-deprecated.h | 11 ++++++++++- + 3 files changed, 13 insertions(+), 3 deletions(-) + +commit 598de82f3aa6f9f6cbc6c271d0905350e598b281 +Author: Behdad Esfahbod +Date: Fri Oct 27 12:13:13 2023 -0600 + + [hb-subset] Fix warning + + util/hb-subset.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9fc45f70ad42b87072ced65b8c58b87af005f265 +Author: Behdad Esfahbod +Date: Thu Oct 5 14:06:39 2023 -0600 + + [ReverseChainSingleSubst] Minor optimization + + src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 156de3c048237c5953d96ed5e7bdb53261456692 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 23 10:35:02 2023 +0000 + + Bump meson from 1.2.2 to 1.2.3 in /.ci + + Bumps [meson](https://github.com/mesonbuild/meson) from 1.2.2 to 1.2.3. + - [Release notes](https://github.com/mesonbuild/meson/releases) + - [Commits](https://github.com/mesonbuild/meson/compare/1.2.2...1.2.3) + + --- + updated-dependencies: + - dependency-name: meson + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements.in | 2 +- + .ci/requirements.txt | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit d7cd687b74fd8e103fb52964a079cd667c1847de +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 23 10:15:11 2023 +0000 + + Bump github/codeql-action from 2.22.3 to 2.22.4 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.3 to 2.22.4. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/0116bc2df50751f9724a2e35ef1f24d22f90e4e1...49abf0ba24d0b7953cb586944e918a0b92074c80) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4d123ece5fd5d5c78d530e1c302ea4daa316d5cc +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 23 10:14:58 2023 +0000 + + Bump actions/checkout from 4.1.0 to 4.1.1 + + Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.0 to 4.1.1. + - [Release notes](https://github.com/actions/checkout/releases) + - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) + - [Commits](https://github.com/actions/checkout/compare/8ade135a41bc03ea155e62e844d188df1ea18608...b4ffde65f46336ab88eb53be808477a3936bae11) + + --- + updated-dependencies: + - dependency-name: actions/checkout + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/arm-ci.yml | 2 +- + .github/workflows/configs-build.yml | 2 +- + .github/workflows/coverity-scan.yml | 2 +- + .github/workflows/linux-ci.yml | 2 +- + .github/workflows/macos-ci.yml | 2 +- + .github/workflows/msvc-ci.yml | 2 +- + .github/workflows/msys2-ci.yml | 2 +- + .github/workflows/scorecard.yml | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +commit b0150ffd05523c7cef9b3c91a8d6050177fceda3 +Author: 一丝 +Date: Fri Oct 20 21:53:14 2023 +0800 + + [subset] keep East Asian spacing vhal, halt, chws, vchw by default + + Closes: https://github.com/harfbuzz/harfbuzz/issues/4451 + + src/hb-subset-input.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit fde1c3692a4a1e45ee48954fb486ae6c036a5687 +Merge: 38f351d11 e595fe75c +Author: Behdad Esfahbod +Date: Thu Oct 19 11:04:34 2023 -0600 + + Merge pull request #4452 from googlefonts/fix_test + + [subset] bug fixes for GDEF + +commit e595fe75cceb5146cc490804d2619ce31464208e +Author: Qunxin Liu +Date: Wed Oct 18 16:00:06 2023 -0700 + + fix bots + + partial instancing tests are wrapped by experimenal_api, do not enable + them in Makefile + + src/hb-ot-layout-common.hh | 2 +- + test/subset/data/Makefile.am | 1 - + test/subset/data/Makefile.sources | 1 - + 3 files changed, 1 insertion(+), 3 deletions(-) + +commit 38f351d113fcc66cd4aaafbcee952a6067f315a9 +Author: Alexander Borsuk +Date: Wed Oct 18 01:52:18 2023 +0200 + + [docs] Fixed links to freetype FT_LOAD_XXX flags + + Signed-off-by: Alexander Borsuk + + src/hb-ft.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ce46698929999669000182b8e72aa4b9c0d8ce40 +Author: Qunxin Liu +Date: Wed Oct 18 15:49:57 2023 -0700 + + [subset] update tests + + to reflect changes in GDEF.MarkGlyphSetsDef and Lookup.MarkFilteringSet + + ...r-new.default.retain-all-codepoint.wght=300.ttf | Bin 131712 -> 131708 bytes + ...r-new.default.retain-all-codepoint.wght=700.ttf | Bin 131588 -> 131584 bytes + ...i-ABC.default.retain-all-codepoint.wght=300.ttf | Bin 5808 -> 5788 bytes + ...i-ABC.default.retain-all-codepoint.wght=700.ttf | Bin 5804 -> 5784 bytes + .../Comfortaa-Regular-new.default.61,62,63.ttf | Bin 7060 -> 7036 bytes + .../basics/Comfortaa-Regular-new.default.61,63.ttf | Bin 6692 -> 6668 bytes + .../basics/Comfortaa-Regular-new.default.61.ttf | Bin 6328 -> 6300 bytes + .../basics/Comfortaa-Regular-new.default.62.ttf | Bin 6200 -> 6172 bytes + .../basics/Comfortaa-Regular-new.default.63.ttf | Bin 6256 -> 6228 bytes + ...Regular-new.drop-hints-retain-gids.61,62,63.ttf | Bin 4608 -> 4580 bytes + ...aa-Regular-new.drop-hints-retain-gids.61,63.ttf | Bin 4312 -> 4284 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.61.ttf | Bin 3724 -> 3696 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.62.ttf | Bin 3900 -> 3872 bytes + ...ortaa-Regular-new.drop-hints-retain-gids.63.ttf | Bin 3972 -> 3944 bytes + .../Comfortaa-Regular-new.drop-hints.61,62,63.ttf | Bin 2600 -> 2576 bytes + .../Comfortaa-Regular-new.drop-hints.61,63.ttf | Bin 2296 -> 2272 bytes + .../basics/Comfortaa-Regular-new.drop-hints.61.ttf | Bin 1976 -> 1948 bytes + .../basics/Comfortaa-Regular-new.drop-hints.62.ttf | Bin 1900 -> 1872 bytes + .../basics/Comfortaa-Regular-new.drop-hints.63.ttf | Bin 1968 -> 1940 bytes + .../basics/Comfortaa-Regular-new.gids.61,62,63.ttf | Bin 7988 -> 7964 bytes + .../basics/Comfortaa-Regular-new.gids.61,63.ttf | Bin 7628 -> 7604 bytes + .../basics/Comfortaa-Regular-new.gids.61.ttf | Bin 7256 -> 7232 bytes + .../basics/Comfortaa-Regular-new.gids.62.ttf | Bin 7184 -> 7160 bytes + .../basics/Comfortaa-Regular-new.gids.63.ttf | Bin 7180 -> 7156 bytes + .../Comfortaa-Regular-new.glyph-names.61,62,63.ttf | Bin 7072 -> 7048 bytes + .../Comfortaa-Regular-new.glyph-names.61,63.ttf | Bin 6700 -> 6676 bytes + .../Comfortaa-Regular-new.glyph-names.61.ttf | Bin 6336 -> 6308 bytes + .../Comfortaa-Regular-new.glyph-names.62.ttf | Bin 6208 -> 6180 bytes + .../Comfortaa-Regular-new.glyph-names.63.ttf | Bin 6264 -> 6236 bytes + ...gular-new.keep-all-layout-features.61,62,63.ttf | Bin 7508 -> 7484 bytes + ...-Regular-new.keep-all-layout-features.61,63.ttf | Bin 7144 -> 7120 bytes + ...taa-Regular-new.keep-all-layout-features.61.ttf | Bin 6776 -> 6748 bytes + ...taa-Regular-new.keep-all-layout-features.62.ttf | Bin 6200 -> 6172 bytes + ...taa-Regular-new.keep-all-layout-features.63.ttf | Bin 6256 -> 6228 bytes + ...fortaa-Regular-new.layout-features.61,62,63.ttf | Bin 7060 -> 7036 bytes + ...Comfortaa-Regular-new.layout-features.61,63.ttf | Bin 6692 -> 6668 bytes + .../Comfortaa-Regular-new.layout-features.61.ttf | Bin 6328 -> 6300 bytes + .../Comfortaa-Regular-new.layout-features.62.ttf | Bin 6200 -> 6172 bytes + .../Comfortaa-Regular-new.layout-features.63.ttf | Bin 6256 -> 6228 bytes + .../Comfortaa-Regular-new.name-ids.61,62,63.ttf | Bin 6800 -> 6776 bytes + .../Comfortaa-Regular-new.name-ids.61,63.ttf | Bin 6432 -> 6408 bytes + .../basics/Comfortaa-Regular-new.name-ids.61.ttf | Bin 6068 -> 6040 bytes + .../basics/Comfortaa-Regular-new.name-ids.62.ttf | Bin 5940 -> 5912 bytes + .../basics/Comfortaa-Regular-new.name-ids.63.ttf | Bin 5996 -> 5968 bytes + ...mfortaa-Regular-new.name-languages.61,62,63.ttf | Bin 7060 -> 7036 bytes + .../Comfortaa-Regular-new.name-languages.61,63.ttf | Bin 6692 -> 6668 bytes + .../Comfortaa-Regular-new.name-languages.61.ttf | Bin 6328 -> 6300 bytes + .../Comfortaa-Regular-new.name-languages.62.ttf | Bin 6200 -> 6172 bytes + .../Comfortaa-Regular-new.name-languages.63.ttf | Bin 6256 -> 6228 bytes + .../Comfortaa-Regular-new.name-legacy.61,62,63.ttf | Bin 7060 -> 7036 bytes + .../Comfortaa-Regular-new.name-legacy.61,63.ttf | Bin 6692 -> 6668 bytes + .../Comfortaa-Regular-new.name-legacy.61.ttf | Bin 6328 -> 6300 bytes + .../Comfortaa-Regular-new.name-legacy.62.ttf | Bin 6200 -> 6172 bytes + .../Comfortaa-Regular-new.name-legacy.63.ttf | Bin 6256 -> 6228 bytes + ...egular-new.no-prune-unicode-ranges.61,62,63.ttf | Bin 7060 -> 7036 bytes + ...a-Regular-new.no-prune-unicode-ranges.61,63.ttf | Bin 6692 -> 6668 bytes + ...rtaa-Regular-new.no-prune-unicode-ranges.61.ttf | Bin 6328 -> 6300 bytes + ...rtaa-Regular-new.no-prune-unicode-ranges.62.ttf | Bin 6200 -> 6172 bytes + ...rtaa-Regular-new.no-prune-unicode-ranges.63.ttf | Bin 6256 -> 6228 bytes + ...mfortaa-Regular-new.notdef-outline.61,62,63.ttf | Bin 7652 -> 7628 bytes + .../Comfortaa-Regular-new.notdef-outline.61,63.ttf | Bin 7284 -> 7260 bytes + .../Comfortaa-Regular-new.notdef-outline.61.ttf | Bin 6920 -> 6892 bytes + .../Comfortaa-Regular-new.notdef-outline.62.ttf | Bin 6796 -> 6768 bytes + .../Comfortaa-Regular-new.notdef-outline.63.ttf | Bin 6844 -> 6816 bytes + .../Comfortaa-Regular-new.retain-gids.61,62,63.ttf | Bin 9068 -> 9040 bytes + .../Comfortaa-Regular-new.retain-gids.61,63.ttf | Bin 8708 -> 8680 bytes + .../Comfortaa-Regular-new.retain-gids.61.ttf | Bin 8076 -> 8048 bytes + .../Comfortaa-Regular-new.retain-gids.62.ttf | Bin 8200 -> 8172 bytes + .../Comfortaa-Regular-new.retain-gids.63.ttf | Bin 8260 -> 8232 bytes + .../basics/Roboto-Regular.abc.default.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../basics/Roboto-Regular.abc.default.61,63.ttf | Bin 2208 -> 2192 bytes + .../basics/Roboto-Regular.abc.default.61.ttf | Bin 2008 -> 1988 bytes + .../basics/Roboto-Regular.abc.default.62.ttf | Bin 1876 -> 1856 bytes + .../basics/Roboto-Regular.abc.default.63.ttf | Bin 1932 -> 1912 bytes + ...to-Regular.abc.default.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + ...Regular.abc.drop-hints-retain-gids.61,62,63.ttf | Bin 1152 -> 1136 bytes + ...to-Regular.abc.drop-hints-retain-gids.61,63.ttf | Bin 1072 -> 1052 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.61.ttf | Bin 944 -> 924 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.62.ttf | Bin 840 -> 820 bytes + ...oboto-Regular.abc.drop-hints-retain-gids.63.ttf | Bin 928 -> 908 bytes + ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 1152 -> 1136 bytes + .../Roboto-Regular.abc.drop-hints.61,62,63.ttf | Bin 1152 -> 1136 bytes + .../basics/Roboto-Regular.abc.drop-hints.61,63.ttf | Bin 1056 -> 1040 bytes + .../basics/Roboto-Regular.abc.drop-hints.61.ttf | Bin 944 -> 924 bytes + .../basics/Roboto-Regular.abc.drop-hints.62.ttf | Bin 836 -> 816 bytes + .../basics/Roboto-Regular.abc.drop-hints.63.ttf | Bin 916 -> 896 bytes + ...Regular.abc.drop-hints.retain-all-codepoint.ttf | Bin 1152 -> 1136 bytes + .../basics/Roboto-Regular.abc.gids.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../basics/Roboto-Regular.abc.gids.61,63.ttf | Bin 2412 -> 2396 bytes + .../expected/basics/Roboto-Regular.abc.gids.61.ttf | Bin 2412 -> 2396 bytes + .../expected/basics/Roboto-Regular.abc.gids.62.ttf | Bin 2412 -> 2396 bytes + .../expected/basics/Roboto-Regular.abc.gids.63.ttf | Bin 2412 -> 2396 bytes + ...oboto-Regular.abc.gids.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.glyph-names.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.glyph-names.61,63.ttf | Bin 2208 -> 2192 bytes + .../basics/Roboto-Regular.abc.glyph-names.61.ttf | Bin 2008 -> 1988 bytes + .../basics/Roboto-Regular.abc.glyph-names.62.ttf | Bin 1876 -> 1856 bytes + .../basics/Roboto-Regular.abc.glyph-names.63.ttf | Bin 1932 -> 1912 bytes + ...egular.abc.glyph-names.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + ...gular.abc.keep-all-layout-features.61,62,63.ttf | Bin 2412 -> 2396 bytes + ...-Regular.abc.keep-all-layout-features.61,63.ttf | Bin 2208 -> 2192 bytes + ...oto-Regular.abc.keep-all-layout-features.61.ttf | Bin 2008 -> 1988 bytes + ...oto-Regular.abc.keep-all-layout-features.62.ttf | Bin 1876 -> 1856 bytes + ...oto-Regular.abc.keep-all-layout-features.63.ttf | Bin 1932 -> 1912 bytes + ...ep-all-layout-features.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + ...Roboto-Regular.abc.layout-features.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.layout-features.61,63.ttf | Bin 2208 -> 2192 bytes + .../Roboto-Regular.abc.layout-features.61.ttf | Bin 2008 -> 1988 bytes + .../Roboto-Regular.abc.layout-features.62.ttf | Bin 1876 -> 1856 bytes + .../Roboto-Regular.abc.layout-features.63.ttf | Bin 1932 -> 1912 bytes + ...ar.abc.layout-features.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.name-ids.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../basics/Roboto-Regular.abc.name-ids.61,63.ttf | Bin 2208 -> 2192 bytes + .../basics/Roboto-Regular.abc.name-ids.61.ttf | Bin 2008 -> 1988 bytes + .../basics/Roboto-Regular.abc.name-ids.62.ttf | Bin 1876 -> 1856 bytes + .../basics/Roboto-Regular.abc.name-ids.63.ttf | Bin 1932 -> 1912 bytes + ...o-Regular.abc.name-ids.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.name-languages.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.name-languages.61,63.ttf | Bin 2208 -> 2192 bytes + .../Roboto-Regular.abc.name-languages.61.ttf | Bin 2008 -> 1988 bytes + .../Roboto-Regular.abc.name-languages.62.ttf | Bin 1876 -> 1856 bytes + .../Roboto-Regular.abc.name-languages.63.ttf | Bin 1932 -> 1912 bytes + ...lar.abc.name-languages.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.name-legacy.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.name-legacy.61,63.ttf | Bin 2208 -> 2192 bytes + .../basics/Roboto-Regular.abc.name-legacy.61.ttf | Bin 2008 -> 1988 bytes + .../basics/Roboto-Regular.abc.name-legacy.62.ttf | Bin 1876 -> 1856 bytes + .../basics/Roboto-Regular.abc.name-legacy.63.ttf | Bin 1932 -> 1912 bytes + ...egular.abc.name-legacy.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + ...egular.abc.no-prune-unicode-ranges.61,62,63.ttf | Bin 2412 -> 2396 bytes + ...o-Regular.abc.no-prune-unicode-ranges.61,63.ttf | Bin 2208 -> 2192 bytes + ...boto-Regular.abc.no-prune-unicode-ranges.61.ttf | Bin 2008 -> 1988 bytes + ...boto-Regular.abc.no-prune-unicode-ranges.62.ttf | Bin 1876 -> 1856 bytes + ...boto-Regular.abc.no-prune-unicode-ranges.63.ttf | Bin 1932 -> 1912 bytes + ...o-prune-unicode-ranges.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.notdef-outline.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.notdef-outline.61,63.ttf | Bin 2208 -> 2192 bytes + .../Roboto-Regular.abc.notdef-outline.61.ttf | Bin 2008 -> 1988 bytes + .../Roboto-Regular.abc.notdef-outline.62.ttf | Bin 1876 -> 1856 bytes + .../Roboto-Regular.abc.notdef-outline.63.ttf | Bin 1932 -> 1912 bytes + ...lar.abc.notdef-outline.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.retain-gids.61,62,63.ttf | Bin 2412 -> 2396 bytes + .../Roboto-Regular.abc.retain-gids.61,63.ttf | Bin 2224 -> 2204 bytes + .../basics/Roboto-Regular.abc.retain-gids.61.ttf | Bin 2008 -> 1988 bytes + .../basics/Roboto-Regular.abc.retain-gids.62.ttf | Bin 1884 -> 1864 bytes + .../basics/Roboto-Regular.abc.retain-gids.63.ttf | Bin 1948 -> 1928 bytes + ...egular.abc.retain-gids.retain-all-codepoint.ttf | Bin 2412 -> 2396 bytes + .../colrv1_copy_varstore/Foldit.default.41,42.ttf | Bin 43860 -> 43840 bytes + .../colrv1_copy_varstore/Foldit.default.41.ttf | Bin 43048 -> 43028 bytes + .../Foldit.default.retain-all-codepoint.ttf | Bin 44336 -> 44324 bytes + .../Foldit.drop-hints-retain-gids.41,42.ttf | Bin 43836 -> 43816 bytes + .../Foldit.drop-hints-retain-gids.41.ttf | Bin 43032 -> 43012 bytes + ...drop-hints-retain-gids.retain-all-codepoint.ttf | Bin 44300 -> 44288 bytes + .../Foldit.drop-hints.41,42.ttf | Bin 43820 -> 43800 bytes + .../colrv1_copy_varstore/Foldit.drop-hints.41.ttf | Bin 43016 -> 42996 bytes + .../Foldit.drop-hints.retain-all-codepoint.ttf | Bin 44300 -> 44288 bytes + .../Foldit.retain-gids.41,42.ttf | Bin 43876 -> 43856 bytes + .../colrv1_copy_varstore/Foldit.retain-gids.41.ttf | Bin 43064 -> 43044 bytes + .../Foldit.retain-gids.retain-all-codepoint.ttf | Bin 44336 -> 44324 bytes + ...ain-all-codepoint.wght=400,wdth=100,opsz=14.ttf | Bin 6408 -> 6404 bytes + .../Roboto-Regular.default.1FC,21,41,20,62,63.ttf | Bin 3004 -> 2984 bytes + ...ar.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 4800 -> 4780 bytes + .../full-font/Roboto-Regular.default.61,62,63.ttf | Bin 2632 -> 2616 bytes + .../Roboto-Regular.default.D7,D8,D9,DA,DE.ttf | Bin 2960 -> 2944 bytes + ...oboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf | Bin 1556 -> 1536 bytes + ...drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 2452 -> 2432 bytes + .../Roboto-Regular.drop-hints.61,62,63.ttf | Bin 1372 -> 1356 bytes + .../Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf | Bin 1584 -> 1568 bytes + ....filter-scripts-features.1FC,21,41,20,62,63.ttf | Bin 2856 -> 2836 bytes + ...ilter-scripts-features.2.1FC,21,41,20,62,63.ttf | Bin 2856 -> 2836 bytes + ...features.2.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 4560 -> 4540 bytes + ...-Regular.filter-scripts-features.2.61,62,63.ttf | Bin 2484 -> 2468 bytes + ...ar.filter-scripts-features.2.D7,D8,D9,DA,DE.ttf | Bin 2828 -> 2812 bytes + ...s-features.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 3932 -> 3916 bytes + ...to-Regular.filter-scripts-features.61,62,63.ttf | Bin 2484 -> 2468 bytes + ...ular.filter-scripts-features.D7,D8,D9,DA,DE.ttf | Bin 2828 -> 2812 bytes + ...o-Regular.filter-scripts.1FC,21,41,20,62,63.ttf | Bin 2972 -> 2952 bytes + ...er-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 4140 -> 4124 bytes + .../Roboto-Regular.filter-scripts.61,62,63.ttf | Bin 2600 -> 2584 bytes + ...oboto-Regular.filter-scripts.D7,D8,D9,DA,DE.ttf | Bin 2928 -> 2912 bytes + ...oboto-Regular.no-scripts.1FC,21,41,20,62,63.ttf | Bin 2836 -> 2816 bytes + ...no-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 3912 -> 3896 bytes + .../Roboto-Regular.no-scripts.61,62,63.ttf | Bin 2464 -> 2448 bytes + .../Roboto-Regular.no-scripts.D7,D8,D9,DA,DE.ttf | Bin 2808 -> 2792 bytes + ....filter-scripts-features.1FC,21,41,20,62,63.ttf | Bin 3476 -> 3472 bytes + ...ilter-scripts-features.2.1FC,21,41,20,62,63.ttf | Bin 3476 -> 3472 bytes + ...features.2.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 8700 -> 8696 bytes + ...le-Roman.filter-scripts-features.2.61,62,63.ttf | Bin 3476 -> 3472 bytes + ...an.filter-scripts-features.2.D7,D8,D9,DA,DE.ttf | Bin 3948 -> 3940 bytes + ...s-features.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 6584 -> 6580 bytes + ...able-Roman.filter-scripts-features.61,62,63.ttf | Bin 3476 -> 3472 bytes + ...oman.filter-scripts-features.D7,D8,D9,DA,DE.ttf | Bin 3948 -> 3940 bytes + ...ariable-Roman.no-scripts.1FC,21,41,20,62,63.ttf | Bin 3456 -> 3452 bytes + ...no-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf | Bin 6564 -> 6560 bytes + ...urceSerifVariable-Roman.no-scripts.61,62,63.ttf | Bin 3456 -> 3452 bytes + ...rifVariable-Roman.no-scripts.D7,D8,D9,DA,DE.ttf | Bin 3928 -> 3920 bytes + ...fault.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114200 -> 114196 bytes + ...fault.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114300 -> 114296 bytes + ...anges.retain-all-codepoint.wght=150,wdth=80.ttf | Bin 114200 -> 114196 bytes + ...anges.retain-all-codepoint.wght=300,wdth=90.ttf | Bin 114300 -> 114296 bytes + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8728 -> 8708 bytes + ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7612 -> 7592 bytes + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7592 -> 7568 bytes + ...t.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6956 -> 6932 bytes + ...oto-Regular.glyph_map_roboto.41,43,61,66,69.ttf | Bin 3996 -> 3980 bytes + .../MPLUS1-Variable.default.30DD.wght=100.ttf | Bin 1460 -> 1404 bytes + .../MPLUS1-Variable.default.30DD.wght=400.ttf | Bin 1712 -> 1656 bytes + ...retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf | Bin 2244 -> 2224 bytes + ...retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf | Bin 2696 -> 2676 bytes + ...F-ABC.default.retain-all-codepoint.wght=800.otf | Bin 1508 -> 1488 bytes + ...C.retain-gids.retain-all-codepoint.wght=800.otf | Bin 1508 -> 1488 bytes + ...oldit.default.retain-all-codepoint.wght=900.ttf | Bin 2508 -> 2488 bytes + ...fault.retain-all-codepoint.wght=200,wdth=90.ttf | Bin 6760 -> 6736 bytes + ...fault.retain-all-codepoint.wght=650,wdth=85.ttf | Bin 6712 -> 6688 bytes + ...fault.retain-all-codepoint.wght=200,wdth=90.ttf | Bin 6440 -> 6416 bytes + ...fault.retain-all-codepoint.wght=650,wdth=85.ttf | Bin 6392 -> 6368 bytes + .../Roboto-Regular.default.1E00,303.ttf | Bin 2472 -> 2464 bytes + .../layout.gdef/Roboto-Regular.default.303.ttf | Bin 2076 -> 2068 bytes + .../Roboto-Regular.default.309,20,30F.ttf | Bin 2148 -> 2140 bytes + .../layout.gdef/Roboto-Regular.default.323.ttf | Bin 1968 -> 1960 bytes + .../Roboto-Regular.default.41,42,43.ttf | Bin 2532 -> 2516 bytes + .../Roboto-Regular.drop-hints.1E00,303.ttf | Bin 1328 -> 1320 bytes + .../layout.gdef/Roboto-Regular.drop-hints.303.ttf | Bin 1072 -> 1064 bytes + .../Roboto-Regular.drop-hints.309,20,30F.ttf | Bin 1108 -> 1100 bytes + .../layout.gdef/Roboto-Regular.drop-hints.323.ttf | Bin 1016 -> 1008 bytes + .../Roboto-Regular.drop-hints.41,42,43.ttf | Bin 1348 -> 1332 bytes + .../Roboto-Regular.keep-gdef-gpos.1E00,303.ttf | Bin 2472 -> 2464 bytes + .../Roboto-Regular.keep-gdef-gpos.303.ttf | Bin 2076 -> 2068 bytes + .../Roboto-Regular.keep-gdef-gpos.309,20,30F.ttf | Bin 2148 -> 2140 bytes + .../Roboto-Regular.keep-gdef-gpos.323.ttf | Bin 1968 -> 1960 bytes + .../Roboto-Regular.keep-gdef-gpos.41,42,43.ttf | Bin 2532 -> 2516 bytes + ...ular.default.627,644,623,62D,644,627,645,2E.ttf | Bin 17564 -> 17552 bytes + ...astaliqUrdu-Regular.default.627,644,62D,628.ttf | Bin 24532 -> 24520 bytes + .../NotoNastaliqUrdu-Regular.default.627,644.ttf | Bin 7776 -> 7752 bytes + ...-Regular.default.633,645,627,621,20,644,627.ttf | Bin 23232 -> 23212 bytes + .../NotoNastaliqUrdu-Regular.default.633,6D2.ttf | Bin 14292 -> 14280 bytes + ...otoNastaliqUrdu-Regular.default.63A,64A,631.ttf | Bin 26124 -> 26116 bytes + ....retain-gids.627,644,623,62D,644,627,645,2E.ttf | Bin 24224 -> 24212 bytes + ...liqUrdu-Regular.retain-gids.627,644,62D,628.ttf | Bin 30432 -> 30420 bytes + ...otoNastaliqUrdu-Regular.retain-gids.627,644.ttf | Bin 13380 -> 13360 bytes + ...ular.retain-gids.633,645,627,621,20,644,627.ttf | Bin 28888 -> 28864 bytes + ...otoNastaliqUrdu-Regular.retain-gids.633,6D2.ttf | Bin 20132 -> 20120 bytes + ...astaliqUrdu-Regular.retain-gids.63A,64A,631.ttf | Bin 31984 -> 31976 bytes + ...HebrewLatin-Regular.default.392,3a7,3b2,3c7.ttf | Bin 2464 -> 2404 bytes + ...wLatin-Regular.default.retain-all-codepoint.ttf | Bin 129952 -> 129896 bytes + ...ewLatin-Regular.layout-test.392,3a7,3b2,3c7.ttf | Bin 2588 -> 2528 bytes + ...in-Regular.layout-test.retain-all-codepoint.ttf | Bin 151928 -> 151868 bytes + ...ewLatin-Regular.retain-gids.392,3a7,3b2,3c7.ttf | Bin 13484 -> 13424 bytes + ...in-Regular.retain-gids.retain-all-codepoint.ttf | Bin 133056 -> 132996 bytes + .../Roboto-Regular.smallcaps.default.41,42,43.ttf | Bin 2424 -> 2408 bytes + .../Roboto-Regular.smallcaps.default.41,43.ttf | Bin 2232 -> 2216 bytes + .../layout/Roboto-Regular.smallcaps.default.41.ttf | Bin 2044 -> 2024 bytes + .../layout/Roboto-Regular.smallcaps.default.43.ttf | Bin 2076 -> 2056 bytes + .../Roboto-Regular.smallcaps.default.CA,CB.ttf | Bin 2348 -> 2332 bytes + ...boto-Regular.smallcaps.retain-gids.41,42,43.ttf | Bin 2676 -> 2660 bytes + .../Roboto-Regular.smallcaps.retain-gids.41,43.ttf | Bin 2496 -> 2476 bytes + .../Roboto-Regular.smallcaps.retain-gids.41.ttf | Bin 2296 -> 2276 bytes + .../Roboto-Regular.smallcaps.retain-gids.43.ttf | Bin 2344 -> 2324 bytes + .../Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf | Bin 6436 -> 6420 bytes + ...odepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 4324 -> 4300 bytes + ...c.default.retain-all-codepoint.wght=300-600.ttf | Bin 6832 -> 6808 bytes + ...c.default.retain-all-codepoint.wght=500-800.ttf | Bin 7312 -> 7288 bytes + ...-Regular.no-layout-closure-gids.no-unicodes.ttf | Bin 2612 -> 2592 bytes + ...Regular.no-layout-closure-gids2.no-unicodes.ttf | Bin 2800 -> 2780 bytes + ...lt.retain-all-codepoint.wght=400,wdth=100.0.ttf | Bin 6804 -> 6780 bytes + ...ult.retain-all-codepoint.wght=drop,wdth=100.ttf | Bin 6804 -> 6780 bytes + .../Roboto-Regular.gids.61,62,63,30D9.ttf | Bin 2680 -> 2664 bytes + 267 files changed, 0 insertions(+), 0 deletions(-) + +commit 8ceed6ee72edd49163714e8f4ce072f104f58277 +Author: Qunxin Liu +Date: Wed Oct 18 15:43:40 2023 -0700 + + [subset] fix Lookup.MarkFilteringSet to use the new indices + + src/OT/Layout/GDEF/GDEF.hh | 23 +++++++++++++++++++++++ + src/hb-ot-layout-common.hh | 16 +++++++++++++--- + src/hb-subset-plan-member-list.hh | 3 +++ + src/hb-subset-plan.cc | 21 +++++++++++++++++++++ + 4 files changed, 60 insertions(+), 3 deletions(-) + +commit 510456e9532734af5417b43be71e9e4acc460c7b +Author: Qunxin Liu +Date: Wed Oct 18 14:26:11 2023 -0700 + + [subset] don't retain empty coverage in MarkGlyphSetsDef + + src/OT/Layout/GDEF/GDEF.hh | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +commit 16ee24c050660b7075a16c1a1b9f5702e38b65f4 +Author: Qunxin Liu +Date: Wed Oct 18 12:43:36 2023 -0700 + + [subset] bug fix for GDEF + + don't use embed(this), snapshot and revert to lower version if needed + + src/OT/Layout/GDEF/GDEF.hh | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +commit bde6fb83ea6b0c68d17e2d6362f52fdb2828f6ab +Author: Qunxin Liu +Date: Wed Oct 18 10:21:02 2023 -0700 + + add missing file for test empty_region_vardata + + test/subset/data/fonts/RobotoFlex-Variable.ABC.ttf | Bin 0 -> 27440 bytes + 1 file changed, 0 insertions(+), 0 deletions(-) + +commit 57dac23d794cac20f94396f5da60d4745df9d39c +Author: Qunxin Liu +Date: Tue Oct 17 17:11:13 2023 -0700 + + [instancer] add tests + + Also update tests to gei rid of no-tables-with-item-variations profile + + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + ...ault.retain-all-codepoint.wght=200-300,opsz=14.ttf | Bin 0 -> 10136 bytes + ...retain-all-codepoint.wght=400,wdth=100,opsz=14.ttf | Bin 0 -> 6408 bytes + ...ain-all-codepoint.wght=200-300-500,wdth=80-90.ttf} | Bin + ...ult.retain-all-codepoint.wght=300-600,wdth=85.ttf} | Bin + ...ain-all-codepoint.wght=200-300-500,wdth=80-90.ttf} | Bin + ...ult.retain-all-codepoint.wght=300-600,wdth=85.ttf} | Bin + ...-codepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf} | Bin 4340 -> 4324 bytes + ...abc.default.retain-all-codepoint.wght=300-600.ttf} | Bin 6848 -> 6832 bytes + ...abc.default.retain-all-codepoint.wght=500-800.ttf} | Bin 7328 -> 7312 bytes + ...man.default.retain-all-codepoint.wght=300-600.ttf} | Bin + ...man.default.retain-all-codepoint.wght=500-800.ttf} | Bin + .../data/profiles/no-tables-with-item-variations.txt | 1 - + test/subset/data/tests/empty_region_vardata.tests | 13 +++++++++++++ + test/subset/data/tests/glyf_partial_instancing.tests | 2 +- + test/subset/data/tests/mvar_partial_instance.tests | 2 +- + test/subset/data/tests/update_def_wght.tests | 2 +- + test/subset/meson.build | 1 + + 19 files changed, 19 insertions(+), 4 deletions(-) + +commit 8585d600c400d541741c3553aa5e14083076560c +Author: Qunxin Liu +Date: Tue Oct 17 14:30:17 2023 -0700 + + [instancer] update variable device flags in ValueFormat + + src/OT/Layout/GPOS/Common.hh | 2 +- + src/OT/Layout/GPOS/PairPosFormat1.hh | 38 ++++++++++++++++++------------- + src/OT/Layout/GPOS/PairPosFormat2.hh | 24 ++++++++++++-------- + src/OT/Layout/GPOS/SinglePos.hh | 11 ++++----- + src/OT/Layout/GPOS/SinglePosFormat1.hh | 2 +- + src/OT/Layout/GPOS/SinglePosFormat2.hh | 2 +- + src/OT/Layout/GPOS/ValueFormat.hh | 41 +++++++++++++++++++++++++++++++--- + 7 files changed, 84 insertions(+), 36 deletions(-) + +commit 1a5dd610beed2f6afd0d4f369b57c814e2b9abb6 +Author: Qunxin Liu +Date: Mon Oct 16 09:47:16 2023 -0700 + + [instancer] retain empty rows when region is empty and item_count is not + + src/hb-ot-var-common.hh | 30 ++++++++++++++++++++---------- + 1 file changed, 20 insertions(+), 10 deletions(-) + +commit 45a7f9cec377df71de4a512720d695186cc23afa +Author: David Manthey +Date: Wed Oct 18 08:28:23 2023 -0400 + + Change the shebang used for python + + The shebang `/usr/bin/python3` assumes python3 is installed in /usr/bin, + which isn't always true (e.g., in the manylinux docker image). Using + `/usr/bin/env python3` uses the python3 that is in the path, which is + more flexible. + + src/relative_to.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 18a6e78549e8e04a281129ea8ca784ce85f111b8 +Author: Khaled Hosny +Date: Wed Oct 18 01:10:44 2023 +0300 + + 8.2.2 + + NEWS | 11 +++++++++++ + configure.ac | 2 +- + meson.build | 2 +- + src/hb-version.h | 4 ++-- + 4 files changed, 15 insertions(+), 4 deletions(-) + +commit 52bc78e70de9f8288e3412a8017f88d2e0a31dea +Author: Garret Rieger +Date: Tue Oct 10 21:44:52 2023 +0000 + + s/PairPos/MarkBasePos/ in MarkBasePos repacking implementation. + + src/graph/markbasepos-graph.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 6190bb0b8ed8af3d182d1936fbe859c15fb0f817 +Author: Behdad Esfahbod +Date: Mon Oct 16 14:08:31 2023 -0400 + + [layout] Change order of feature collection + + See comments for rationale. + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4445 + + src/hb-ot-layout.cc | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +commit 4992456cfadabb6ecbc7b4efc5c1af9ec91f6dd3 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 16 10:07:42 2023 +0000 + + Bump ninja from 1.11.1 to 1.11.1.1 in /.ci + + Bumps [ninja](https://github.com/ninja-build/ninja) from 1.11.1 to 1.11.1.1. + - [Release notes](https://github.com/ninja-build/ninja/releases) + - [Commits](https://github.com/ninja-build/ninja/commits) + + --- + updated-dependencies: + - dependency-name: ninja + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements.txt | 34 ++++++++++++++++------------------ + 1 file changed, 16 insertions(+), 18 deletions(-) + +commit 397b32e585cbb29349e0e97fad2e84cb57a9a6d1 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 16 10:29:00 2023 +0000 + + Bump github/codeql-action from 2.22.0 to 2.22.3 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.0 to 2.22.3. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/2cb752a87e96af96708ab57187ab6372ee1973ab...0116bc2df50751f9724a2e35ef1f24d22f90e4e1) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1f395cbaf91be284f443c27b8b35be0edd788c34 +Author: Qunxin Liu +Date: Thu Oct 12 10:06:00 2023 -0700 + + [instancer] templatize the priority queue, use custom type for varstore + + when instantiating varstore, we need to pop a tuple like + (combined_gain, i, j), if combined gain is the same then we compare the + value of i, and then j. So we'd like to use custom type as the key when + popping from the queue. This would match fonttool's algorithm cause it + uses heappop(). + + src/graph/graph.hh | 4 ++-- + src/hb-ot-var-common.hh | 47 ++++++++++++++++++++++++++++++++++------------ + src/hb-priority-queue.hh | 5 +++-- + src/test-priority-queue.cc | 4 ++-- + 4 files changed, 42 insertions(+), 18 deletions(-) + +commit bbd53fcfa49e9d4a8b3899ce2c109377886a3ba9 +Author: Garret Rieger +Date: Tue Oct 10 21:41:42 2023 +0000 + + Remove glyph_map test that uses retain gids. + + We no longer allow the use of glyph map + retain gids (see: https://github.com/harfbuzz/harfbuzz/blob/main/src/hb-subset-plan.cc#L817). Also add the test to the meson file so it will be run by default. + + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + ...gular.glyph_map_roboto_retain_gids.41,43,61,66,69.ttf | Bin 7936 -> 0 bytes + .../data/profiles/glyph_map_roboto_retain_gids.txt | 4 ---- + test/subset/data/tests/glyph_map.tests | 1 - + test/subset/meson.build | 1 + + 6 files changed, 3 insertions(+), 5 deletions(-) + +commit 9648799e53edae7072505849fb551a6e621b8f6c +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 9 10:34:48 2023 +0000 + + Bump ossf/scorecard-action from 2.2.0 to 2.3.0 + + Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.2.0 to 2.3.0. + - [Release notes](https://github.com/ossf/scorecard-action/releases) + - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) + - [Commits](https://github.com/ossf/scorecard-action/compare/08b4669551908b1024bb425080c797723083c031...483ef80eb98fb506c348f7d62e28055e49fe2398) + + --- + updated-dependencies: + - dependency-name: ossf/scorecard-action + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit cf930decce6cffabff55a8a314eb7f9f34cff322 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 9 10:34:42 2023 +0000 + + Bump actions/setup-python from 4.7.0 to 4.7.1 + + Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.7.0 to 4.7.1. + - [Release notes](https://github.com/actions/setup-python/releases) + - [Commits](https://github.com/actions/setup-python/compare/61a6322f88396a6271a6ee3565807d608ecaddd1...65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236) + + --- + updated-dependencies: + - dependency-name: actions/setup-python + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/msvc-ci.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0cfc4ebfbade5b794956f0eae3939e7b1fade2b8 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 9 10:34:36 2023 +0000 + + Bump github/codeql-action from 2.21.9 to 2.22.0 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.9 to 2.22.0. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/ddccb873888234080b77e9bc2d4764d5ccaaccf9...2cb752a87e96af96708ab57187ab6372ee1973ab) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit a317b5a7ea49c08e21a0e47beaaa5c31f52f28ea +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 9 10:06:13 2023 +0000 + + Bump fonttools from 4.43.0 to 4.43.1 in /.ci + + Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.43.0 to 4.43.1. + - [Release notes](https://github.com/fonttools/fonttools/releases) + - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst) + - [Commits](https://github.com/fonttools/fonttools/compare/4.43.0...4.43.1) + + --- + updated-dependencies: + - dependency-name: fonttools + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements-fonttools.txt | 86 +++++++++++++++++++++--------------------- + .ci/requirements.txt | 86 +++++++++++++++++++++--------------------- + 2 files changed, 86 insertions(+), 86 deletions(-) + +commit a7b3fe3523891a81be501c907b6bf817615df174 +Author: Behdad Esfahbod +Date: Thu Oct 5 12:16:00 2023 -0600 + + Fix test + + src/test-tuple-varstore.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fc563bb437b379334913b15489caec98a504fcd3 +Merge: f26fd69d8 2415d5f23 +Author: Behdad Esfahbod +Date: Thu Oct 5 11:07:17 2023 -0600 + + Merge pull request #4421 from googlefonts/GDEF_GPOS + + [instancer] support GDEF/GPOS tables + +commit f26fd69d858642d76413b8f4068eaf9b57c40a5f +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 2 10:06:40 2023 +0000 + + Bump github/codeql-action from 2.21.8 to 2.21.9 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.8 to 2.21.9. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/6a28655e3dcb49cb0840ea372fd6d17733edd8a4...ddccb873888234080b77e9bc2d4764d5ccaaccf9) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1522eb9199ed07b8fba9c3131806205834b0a18a +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 2 10:48:02 2023 +0000 + + Bump fonttools from 4.42.1 to 4.43.0 in /.ci + + Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.42.1 to 4.43.0. + - [Release notes](https://github.com/fonttools/fonttools/releases) + - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst) + - [Commits](https://github.com/fonttools/fonttools/compare/4.42.1...4.43.0) + + --- + updated-dependencies: + - dependency-name: fonttools + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements-fonttools.txt | 78 +++++++++++++++++++++++------------------- + .ci/requirements.txt | 78 +++++++++++++++++++++++------------------- + 2 files changed, 86 insertions(+), 70 deletions(-) + +commit 2d67e52a47945e2563b12e681336ab9d04613aad +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Oct 2 10:47:40 2023 +0000 + + Bump meson from 1.2.1 to 1.2.2 in /.ci + + Bumps [meson](https://github.com/mesonbuild/meson) from 1.2.1 to 1.2.2. + - [Release notes](https://github.com/mesonbuild/meson/releases) + - [Commits](https://github.com/mesonbuild/meson/compare/1.2.1...1.2.2) + + --- + updated-dependencies: + - dependency-name: meson + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements.in | 2 +- + .ci/requirements.txt | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 6e06a193b3e6784b87380641d693fee1e507228e +Author: Khaled Hosny +Date: Sat Sep 30 01:12:16 2023 +0300 + + Add some tests for hb_feature_[from|to]_string() + + test/api/test-common.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 108 insertions(+) + +commit f360d704fad6551dd05fe62bf9c4ce2f9a857e03 +Author: jfkthame +Date: Fri Sep 29 13:15:01 2023 +0100 + + Check for closing quote in parse_tag + + Fixes #4414. + + src/hb-common.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 333946b00e849ff6722781bc5e46bd9fcc83311a +Author: Garret Rieger +Date: Thu Sep 28 19:02:37 2023 +0000 + + [subset] Fix fuzzer timeout. + + Fixes https://oss-fuzz.com/testcase-detail/5458896606855168. Limit iteration over coverage in MarkLigPosFormat1 subsetting to the number of glyphs in the liga array. + + src/OT/Layout/GPOS/MarkLigPosFormat1.hh | 5 +++-- + ...-testcase-minimized-hb-subset-fuzzer-5458896606855168 | Bin 0 -> 2410 bytes + 2 files changed, 3 insertions(+), 2 deletions(-) + +commit 9ceb800ac26fd81a5eaf27ef366d5fce47e80447 +Author: Qunxin Liu +Date: Thu Sep 28 10:37:48 2023 -0700 + + fuzzer fix https://oss-fuzz.com/testcase-detail/5842152921628672 + + Access TupleVariationData through blob, because we don't sanitize + var_data + + src/hb-ot-var-cvar-table.hh | 7 ++++--- + src/test-tuple-varstore.cc | 16 +++++++++++++++- + ...testcase-minimized-hb-subset-fuzzer-5842152921628672 | Bin 0 -> 2501 bytes + 3 files changed, 19 insertions(+), 4 deletions(-) + +commit 7cb7a7999b542cb4ae75a3d289a429a68df6a86a +Author: Behdad Esfahbod +Date: Thu Sep 28 09:24:06 2023 -0600 + + [map] Fix undefined integer-overflow + + Fixes https://oss-fuzz.com/testcase-detail/5814850435284992 + + src/hb-map.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2415d5f23927cbfcd8a2928f7ecadf7e9626cd51 +Author: Qunxin Liu +Date: Wed Sep 27 13:33:09 2023 -0700 + + [instancer] update tests to include GDEF/GPOS tables + + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8432 -> 8728 bytes + ...s.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7336 -> 7612 bytes + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7484 -> 7592 bytes + ...s.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6848 -> 6956 bytes + ...odepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 4108 -> 4340 bytes + ...ariations.retain-all-codepoint.wght=300-600.ttf | Bin 6616 -> 6848 bytes + ...ariations.retain-all-codepoint.wght=500-800.ttf | Bin 7096 -> 7328 bytes + ...ariations.retain-all-codepoint.wght=300-600.ttf | Bin 197056 -> 305092 bytes + ...ariations.retain-all-codepoint.wght=500-800.ttf | Bin 145004 -> 250164 bytes + .../profiles/no-tables-with-item-variations.txt | 2 +- + 10 files changed, 1 insertion(+), 1 deletion(-) + +commit f9b04b2145a2021cc56868daca89c3514f6a8966 +Author: Qunxin Liu +Date: Wed Sep 27 09:36:52 2023 -0700 + + [instancer] match fonttools'r order when calculating chars + + Also fix a bug, make sure map set is happening before std::move + + src/hb-ot-layout-common.hh | 6 ++++-- + src/hb-ot-var-common.hh | 4 ++-- + 2 files changed, 6 insertions(+), 4 deletions(-) + +commit f39e9bf1ed52140d2658b4d845f3bbacc215221b +Author: Qunxin Liu +Date: Mon Sep 25 08:59:11 2023 -0700 + + [instancer] instantiate GPOS + + Just need to update var_idxes and deltas + + src/OT/Layout/GDEF/GDEF.hh | 18 ++++++++++-------- + src/OT/Layout/GPOS/AnchorFormat3.hh | 23 ++++++++++++++++++----- + src/hb-ot-layout-common.hh | 4 ++-- + 3 files changed, 30 insertions(+), 15 deletions(-) + +commit 5c6795e2701d7c2031bc3e7c6c1b356961350291 +Author: Qunxin Liu +Date: Thu Sep 21 12:04:03 2023 -0700 + + [instancer] make GPOS depend on GDEF when partial instancing + + GPOS needs to wait for GDEF remapping layout var idxes + + src/hb-subset.cc | 2 ++ + 1 file changed, 2 insertions(+) + +commit c8594baa478d09b60e1553dacae32345efef4272 +Author: Qunxin Liu +Date: Thu Sep 21 11:45:01 2023 -0700 + + [instancer] instantiate GDEF varStore + + And update layout var idxes accordingly + + src/OT/Layout/GDEF/GDEF.hh | 38 +++++++++++++++++++++++++++++++++++++- + src/hb-subset-plan-member-list.hh | 2 +- + 2 files changed, 38 insertions(+), 2 deletions(-) + +commit 77f24d822e726b0075d9aab4dc8600eb1b7dc481 +Author: Qunxin Liu +Date: Fri Sep 22 14:47:11 2023 -0700 + + [instancer] remap layout var_idxes code update + + make hb_collect_variation_indices_context_t only collect layout + variation indices. + + src/OT/Layout/GDEF/GDEF.hh | 26 +++++++++++++++++++------- + src/hb-ot-layout-common.hh | 28 +++------------------------- + src/hb-subset-plan.cc | 26 ++++++-------------------- + 3 files changed, 28 insertions(+), 52 deletions(-) + +commit c8c97864e8c810068123ef62947be13675df54c2 +Author: Qunxin Liu +Date: Thu Sep 21 11:29:43 2023 -0700 + + [instancer] simplify item_variations_t API calls + + merge create,instantiate and as_item_varstore into one API + + src/hb-ot-var-common.hh | 19 +++++++++++++++++-- + src/hb-ot-var-hvar-table.hh | 18 ++++-------------- + src/hb-ot-var-mvar-table.hh | 7 +------ + src/test-item-varstore.cc | 2 +- + 4 files changed, 23 insertions(+), 23 deletions(-) + +commit 00de5d0068d189a7dcbd1ccb10f55db95d240340 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Sep 25 10:25:15 2023 +0000 + + Bump actions/checkout from 4.0.0 to 4.1.0 + + Bumps [actions/checkout](https://github.com/actions/checkout) from 4.0.0 to 4.1.0. + - [Release notes](https://github.com/actions/checkout/releases) + - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) + - [Commits](https://github.com/actions/checkout/compare/3df4ab11eba7bda6032a0b82a6bb43b11571feac...8ade135a41bc03ea155e62e844d188df1ea18608) + + --- + updated-dependencies: + - dependency-name: actions/checkout + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/arm-ci.yml | 2 +- + .github/workflows/configs-build.yml | 2 +- + .github/workflows/coverity-scan.yml | 2 +- + .github/workflows/linux-ci.yml | 2 +- + .github/workflows/macos-ci.yml | 2 +- + .github/workflows/msvc-ci.yml | 2 +- + .github/workflows/msys2-ci.yml | 2 +- + .github/workflows/scorecard.yml | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +commit 42b8534b14419580dd35f865944081196217cb6c +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Sep 25 10:25:08 2023 +0000 + + Bump github/codeql-action from 2.21.7 to 2.21.8 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.7 to 2.21.8. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/04daf014b50eaf774287bf3f0f1869d4b4c4b913...6a28655e3dcb49cb0840ea372fd6d17733edd8a4) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 69da5aae028417dacf4c6617e49beb7dfbeb20e3 +Author: inobelar +Date: Fri Sep 22 21:27:12 2023 +0000 + + Added minor fixes to build without errors with gcc 4.9.2 + + src/hb-map.hh | 22 +++++++++++----------- + src/hb-vector.hh | 2 +- + 2 files changed, 12 insertions(+), 12 deletions(-) + +commit b8121ccbb687dc853118e81810cc0565ce0037d4 +Author: Duncan Overbruck +Date: Thu Sep 21 15:41:09 2023 +0200 + + [meson] keep asserts in test programs + + src/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5aa4865a86fd97e76e857823dd4b32c65d2fa0ad +Author: Qunxin Liu +Date: Wed Sep 20 14:52:58 2023 -0700 + + [instancer] fix compile warnings + + In constructor ‘OT::delta_row_encoding_t::delta_row_encoding_t(OT::delta_row_encoding_t&&)’, + inlined from ‘Type* hb_vector_t::push(Args&& ...) [with Args = {OT::delta_row_encoding_t}; Type = OT::delta_row_encoding_t; bool sorted = false]’ at ../src/hb-vector.hh:221:12, + inlined from ‘bool OT::item_variations_t::as_item_varstore(bool, bool)’ at ../src/hb-ot-var-common.hh:1985:24: + ../src/hb-ot-layout-common.hh:2304:8: warning: ‘obj.OT::delta_row_encoding_t::width’ may be used uninitialized [-Wmaybe-uninitialized] + 2304 | struct delta_row_encoding_t + | ^~~~~~~~~~~~~~~~~~~~ + ../src/hb-ot-var-common.hh: In member function ‘bool OT::item_variations_t::as_item_varstore(bool, bool)’: + ../src/hb-ot-var-common.hh:1981:30: note: ‘obj.OT::delta_row_encoding_t::width’ was declared here + 1981 | delta_row_encoding_t obj; + | ^~~ + In constructor ‘OT::delta_row_encoding_t::delta_row_encoding_t(OT::delta_row_encoding_t&&)’, + inlined from ‘Type* hb_vector_t::push(Args&& ...) [with Args = {OT::delta_row_encoding_t}; Type = OT::delta_row_encoding_t; bool sorted = false]’ at ../src/hb-vector.hh:221:12, + inlined from ‘bool OT::item_variations_t::as_item_varstore(bool, bool)’ at ../src/hb-ot-var-common.hh:1985:24: + ../src/hb-ot-layout-common.hh:2304:8: warning: ‘obj.OT::delta_row_encoding_t::overhead’ may be used uninitialized [-Wmaybe-uninitialized] + 2304 | struct delta_row_encoding_t + | ^~~~~~~~~~~~~~~~~~~~ + ../src/hb-ot-var-common.hh: In member function ‘bool OT::item_variations_t::as_item_varstore(bool, bool)’: + ../src/hb-ot-var-common.hh:1981:30: note: ‘obj.OT::delta_row_encoding_t::overhead’ was declared here + 1981 | delta_row_encoding_t obj; + + src/hb-ot-layout-common.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 4b3aa0104ea4c7859095b0e78662e440483068da +Merge: da2c59d71 ef4ff1d6a +Author: Behdad Esfahbod +Date: Wed Sep 20 14:37:42 2023 -0600 + + Merge pull request #4410 from googlefonts/HVAR_instance + + [instancer] instantiate HVAR/VVAR + +commit da2c59d71f687c38a29389d81d6d6f911994c403 +Author: Thomas Petillon +Date: Tue Sep 19 17:01:04 2023 +0200 + + [instancer] Delete redundant code block in cvar subsetting + + That case is handled in hb-subset.cc. + + It also made compilation with HB_NO_VAR fail because it accessed table.fvar. + + src/hb-ot-var-cvar-table.hh | 13 ------------- + 1 file changed, 13 deletions(-) + +commit 284889b0317c317ae00fe1a6e32db1f9213cb5e2 +Author: Thomas Petillon +Date: Wed Sep 20 20:17:48 2023 +0200 + + [subset] Drop fvar, avar, cvar, MVAR tables when in HB_NO_VAR mode + + src/hb-subset.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit ef4ff1d6a4f2343440e278ef1177b07f6af8f5dc +Author: Qunxin Liu +Date: Wed Sep 20 11:35:33 2023 -0700 + + [instancer] make varstore items sorting method match fonttool's + + Also update expected tests + + src/hb-ot-var-common.hh | 9 ++++++++- + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8432 -> 8432 bytes + ...s.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7336 -> 7336 bytes + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7484 -> 7484 bytes + ...s.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6848 -> 6848 bytes + ...odepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 4108 -> 4108 bytes + ...ariations.retain-all-codepoint.wght=300-600.ttf | Bin 6616 -> 6616 bytes + ...ariations.retain-all-codepoint.wght=300-600.ttf | Bin 197056 -> 197056 bytes + ...ariations.retain-all-codepoint.wght=500-800.ttf | Bin 145004 -> 145004 bytes + 9 files changed, 8 insertions(+), 1 deletion(-) + +commit b5f7ca1ab49b3842d3c2ba4ac9fbd0531378d7b6 +Author: Qunxin Liu +Date: Wed Sep 20 11:28:15 2023 -0700 + + [instancer] fix bots + + src/hb-ot-var-common.hh | 2 +- + src/hb-ot-var-hvar-table.hh | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 5ec21d4af4bc620cb58ff715e2a66288128c8d6f +Author: Qunxin Liu +Date: Wed Sep 20 09:31:03 2023 -0700 + + [instancer] fix delta_row_encoding_t constructor + + always move chars_ + + src/hb-ot-layout-common.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 2d2818c0963d44cde07e612c5310ac2dc85cc846 +Author: Qunxin Liu +Date: Wed Sep 20 10:30:47 2023 -0700 + + [instancer] update expected tests to include HVAR/VVAR tables + + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 8256 -> 8432 bytes + ...s.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 7244 -> 7336 bytes + ...n-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7292 -> 7484 bytes + ...s.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6760 -> 6848 bytes + ...odepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 3800 -> 4108 bytes + ...ariations.retain-all-codepoint.wght=300-600.ttf | Bin 6280 -> 6616 bytes + ...ariations.retain-all-codepoint.wght=500-800.ttf | Bin 6760 -> 7096 bytes + ...ariations.retain-all-codepoint.wght=300-600.ttf | Bin 194432 -> 197056 bytes + ...ariations.retain-all-codepoint.wght=500-800.ttf | Bin 143840 -> 145004 bytes + .../profiles/no-tables-with-item-variations.txt | 2 +- + 10 files changed, 1 insertion(+), 1 deletion(-) + +commit 58e5d45de886319104007249d7e6a2b5b6584247 +Author: Qunxin Liu +Date: Tue Sep 19 10:33:32 2023 -0700 + + [instancer] instantiate HVAR/VVAR + + src/hb-ot-var-hvar-table.hh | 87 ++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 83 insertions(+), 4 deletions(-) + +commit e81ad14dba9ddc70aca11a46242cfc20b593e878 +Author: Qunxin Liu +Date: Tue Sep 19 13:23:58 2023 -0700 + + [instancer] change optimize() to as_item_varstore() + + which allows another option to skip optimization + + src/hb-ot-var-common.hh | 23 +++++++++++++++++++++-- + src/hb-ot-var-mvar-table.hh | 2 +- + src/test-item-varstore.cc | 2 +- + 3 files changed, 23 insertions(+), 4 deletions(-) + +commit 97d0e7a19f5e341a77c156faaa37eed8df6d8db7 +Author: Qunxin Liu +Date: Tue Sep 19 11:25:14 2023 -0700 + + [instancer] add inner_maps as optional argument when creating item_variations_t + + This allows that we create item_variations_t with only a subset of + the original varstore + + src/hb-ot-var-common.hh | 17 ++++++++++++----- + 1 file changed, 12 insertions(+), 5 deletions(-) + +commit 005582e0cb80821fb5bbbdfb6cef4be05078d060 +Merge: d69813374 da9b83891 +Author: Behdad Esfahbod +Date: Wed Sep 20 09:10:10 2023 -0600 + + Merge pull request #4370 from 2xsaiko/outgoing/cmake-now-for-real + + Re-do and clean up CMake support, making it use relocatable paths + +commit da9b838910e62825717a8b2de8ce9c92e396136e +Author: Marco Rebhan +Date: Tue Aug 8 14:33:03 2023 +0200 + + Re-do and clean up CMake support, making it use relocatable paths + + Closes #4025. + + meson.build | 21 ++++++++++ + meson_options.txt | 4 ++ + src/Makefile.am | 2 +- + src/harfbuzz-config.cmake.in | 97 ++++++++------------------------------------ + src/meson.build | 92 ++++++++++++++++++++++++++++++++++++++--- + src/relative_to.py | 6 +++ + 6 files changed, 135 insertions(+), 87 deletions(-) + +commit d698133743caffe9611b57137cd5027ce076613f +Merge: 0967a3e24 c330c2917 +Author: Behdad Esfahbod +Date: Tue Sep 19 13:30:43 2023 -0600 + + Merge pull request #4393 from googlefonts/instantiate_item_varstore + + [instancer] instantiate item varstore + +commit b5a1c2b483263896e563402cd285a46229e42f3c +Author: Marco Rebhan +Date: Mon Aug 7 01:55:10 2023 +0200 + + Revert "Pass through absolute paths to cmake config directly" + + This reverts commit db292f6f0238581a489aa8cddc585129b6e920cd. + + src/harfbuzz-config.cmake.in | 44 ++++++++++++++++++++++++++++++++++++-------- + src/meson.build | 4 ++-- + 2 files changed, 38 insertions(+), 10 deletions(-) + +commit c330c2917524ad8a15340e5fa1df5a57a1409efa +Author: Qunxin Liu +Date: Mon Sep 18 12:14:21 2023 -0700 + + [instancer] add a unit testcase for instantiating item variations + + src/Makefile.am | 5 ++++ + src/meson.build | 1 + + src/test-item-varstore.cc | 66 +++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 72 insertions(+) + +commit 7741fa329998f23ef1495f9828c919ae2f6ada1e +Author: Qunxin Liu +Date: Mon Sep 18 10:44:47 2023 -0700 + + [instancer] bug fix: dont add duplicate rows into delta_row_encoding_t + + Also fix compile_varidx_map() + + src/hb-ot-var-common.hh | 57 ++++++++++++++++++++++++++++--------------------- + 1 file changed, 33 insertions(+), 24 deletions(-) + +commit 6c658b410593e15416a800daf8fd0492c69d9ba5 +Author: Qunxin Liu +Date: Fri Sep 15 11:49:47 2023 -0700 + + [instancer] bug fix + + src/hb-ot-var-common.hh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 11cc47964695661c2a0e8ba24d80304ac1457ab6 +Author: Qunxin Liu +Date: Mon Sep 11 09:57:14 2023 -0700 + + [instancer] fix columns and get_chars_overhead() in delta_row_encoding_t + + make columns a vector of uint8_t so it supports more than 32 columns + + src/hb-ot-layout-common.hh | 29 +++++++++++++++++++---------- + src/hb-ot-var-common.hh | 1 + + 2 files changed, 20 insertions(+), 10 deletions(-) + +commit 6e49128afda813238cfbccd304db1c55ed98f0e5 +Author: Qunxin Liu +Date: Fri Sep 1 10:27:40 2023 -0700 + + [instancer] always check and update default wght/width/slnt if necessary + + Sometimes default values in original file are incorrect, and if default value for an axis is not changed, then these values won't be updated + + src/hb-ot-os2-table.hh | 23 ++++++++------------- + src/hb-ot-post-table.hh | 10 ++++----- + ...ariations.retain-all-codepoint.wght=300-600.ttf | Bin 0 -> 194432 bytes + ...ariations.retain-all-codepoint.wght=500-800.ttf | Bin 0 -> 143840 bytes + test/subset/data/tests/update_def_wght.tests | 12 +++++++++++ + test/subset/meson.build | 6 +++++- + 6 files changed, 31 insertions(+), 20 deletions(-) + +commit 7b5daff5eb347a29d9d9d59f2a41f938781d84de +Author: Qunxin Liu +Date: Thu Aug 31 17:50:34 2023 -0700 + + [instancer] add tests for mvar partial instancing + + ...-all-codepoint.wght=200-600,wdth=80-90,CTGR=20-60.ttf | Bin 0 -> 3800 bytes + ...item-variations.retain-all-codepoint.wght=300-600.ttf | Bin 0 -> 6280 bytes + ...item-variations.retain-all-codepoint.wght=500-800.ttf | Bin 0 -> 6760 bytes + .../data/profiles/no-tables-with-item-variations.txt | 2 +- + test/subset/data/tests/mvar_partial_instance.tests | 13 +++++++++++++ + test/subset/meson.build | 2 +- + 6 files changed, 15 insertions(+), 2 deletions(-) + +commit 45c2d05d0068ebd4fe5a9ea6ca38af5d8bab57c9 +Author: Qunxin Liu +Date: Thu Aug 31 15:45:22 2023 -0700 + + [instancer] add subset() for MVAR + + src/hb-ot-var-mvar-table.hh | 61 ++++++++++++++++++++++++++++++++++++++++++++- + src/hb-subset-input.cc | 1 - + src/hb-subset.cc | 4 +++ + 3 files changed, 64 insertions(+), 2 deletions(-) + +commit e4e1ac44f062078ed7da04321f8269df9f202c7b +Author: Qunxin Liu +Date: Thu Aug 31 15:34:26 2023 -0700 + + [instancer] add serialize() for VariationStore + + Input region_list and encoding_rows are from item_variations_t + + src/hb-ot-layout-common.hh | 106 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 106 insertions(+) + +commit 2326879229535f97ce099958e494005d1092ee5b +Author: Qunxin Liu +Date: Thu Aug 31 15:28:06 2023 -0700 + + [instancer] add serialize() for VarRegionList + + The region list argument comes from item_variations_t.get_region_list() + + src/hb-ot-layout-common.hh | 47 +++++++++++++++++++++++++++++++++++++++ + src/hb-subset-plan-member-list.hh | 2 ++ + src/hb-subset-plan.cc | 1 + + 3 files changed, 50 insertions(+) + +commit b153af8553a8cce1c93682b63a2b4756e44986be +Author: Qunxin Liu +Date: Thu Aug 31 13:12:08 2023 -0700 + + [instancer] add optimize(), which optimizes varstore's storage + + src/hb-ot-var-common.hh | 225 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 225 insertions(+) + +commit 3565ad815009ff74fc42dc5ef23ad8a2bf8fdecf +Author: Qunxin Liu +Date: Thu Aug 31 13:07:54 2023 -0700 + + [instancer] add build_region_list() method + + src/hb-ot-var-common.hh | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 73 insertions(+) + +commit e4db29b102c78cec7c42469e01656c3ac5365863 +Author: Qunxin Liu +Date: Thu Aug 31 12:59:39 2023 -0700 + + [instancer] add instantiate() method + + Also make change_tuple_variations_axis_limits() deterministic, use + sorted vector instead of iterating map keys + + src/hb-ot-var-common.hh | 44 +++++++++++++++++++++++++++++++++++++------- + 1 file changed, 37 insertions(+), 7 deletions(-) + +commit 5f058a93388caa0ce5c6d3800d7dbf97e3273dc8 +Author: Qunxin Liu +Date: Thu Aug 31 12:55:04 2023 -0700 + + [instancer] add create_from_item_varstore () method + + src/hb-ot-layout-common.hh | 63 +++++++++++++++++++++++++++++++++++++++++++++- + src/hb-ot-var-common.hh | 62 +++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 124 insertions(+), 1 deletion(-) + +commit 152448881fffbe46ae6ffb884351b86dcc7354d8 +Author: Qunxin Liu +Date: Thu Aug 31 12:40:30 2023 -0700 + + [instancer] add struct definition item_variations_t + + And struct delta_row_encoding_t + + src/hb-ot-layout-common.hh | 141 +++++++++++++++++++++++++++++++++++++++++++++ + src/hb-ot-var-common.hh | 47 +++++++++++++++ + 2 files changed, 188 insertions(+) + +commit 0967a3e24ab5d79cc55dbe224652d8aabd942def +Author: Khaled Hosny +Date: Mon Sep 18 21:18:27 2023 +0300 + + 8.2.1 + + NEWS | 6 ++++++ + configure.ac | 2 +- + meson.build | 2 +- + src/hb-version.h | 4 ++-- + 4 files changed, 10 insertions(+), 4 deletions(-) + +commit eab4e07d6c7acce1f9eb26963c9d4d0d00b75ce2 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Sep 18 10:22:37 2023 +0000 + + Bump github/codeql-action from 2.21.5 to 2.21.7 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.5 to 2.21.7. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/00e563ead9f72a8461b24876bee2d0c2e8bd2ee8...04daf014b50eaf774287bf3f0f1869d4b4c4b913) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 609a7cc534aa22466de5deb31f1b8678dee8e111 +Merge: 37457412b c459b8a51 +Author: Behdad Esfahbod +Date: Sun Sep 17 14:59:58 2023 -0600 + + Merge pull request #4406 from harfbuzz/unicode-15.1 + + Update to Unicode 15.1.0 + +commit c459b8a51acf96e0d83d9b961ee3409fb5849389 +Author: David Corbett +Date: Sat Sep 16 10:27:07 2023 -0400 + + [Unicode 15.1] Add tests + + test/api/test-unicode.c | 3 +++ + 1 file changed, 3 insertions(+) + +commit c6d53ab570e564b8e0226a234d0fd307c297738b +Author: David Corbett +Date: Sat Sep 16 10:21:11 2023 -0400 + + [Unicode 15.1] Update the vowel constraint table + + src/hb-ot-shaper-vowel-constraints.cc | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f318e104be4c2c58daf92a792b96c6a9974201a1 +Author: David Corbett +Date: Sat Sep 16 10:20:14 2023 -0400 + + [Unicode 15.1] Update the Indic table + + src/hb-ot-shaper-indic-table.cc | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +commit c03e4c10a4bcab59b447a3d5416f26191c8af788 +Author: David Corbett +Date: Sat Sep 16 10:06:24 2023 -0400 + + [Unicode 15.1] Update emoji table and cluster test + + src/hb-unicode-emoji-table.hh | 6 +- + .../shape/data/in-house/tests/emoji-clusters.tests | 301 +++++++++++++++++++++ + 2 files changed, 304 insertions(+), 3 deletions(-) + +commit d8d4a192bdd0b3e0307046dc25ff813850a910c9 +Author: David Corbett +Date: Sat Sep 16 10:00:07 2023 -0400 + + Update IANA Language Subtag Registry to 2023-08-02 + + src/hb-ot-tag-table.hh | 17 ++++++++++------- + 1 file changed, 10 insertions(+), 7 deletions(-) + +commit 6ed6ccac4c6f650ef6abba3929bc48dff12e328d +Author: David Corbett +Date: Sat Sep 16 09:54:21 2023 -0400 + + [Unicode 15.1] Update the USE table + + src/hb-ot-shaper-use-table.hh | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +commit f485b6a9c05b852cafea890069ce87bd5a76c20e +Author: David Corbett +Date: Sat Sep 16 09:49:29 2023 -0400 + + [Unicode 15.1] Update the Arabic joining script list + + src/hb-ot-shaper-arabic-joining-list.hh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit f15fe524423c61dede0b35a148ca917b3746935f +Author: David Corbett +Date: Sat Sep 16 09:45:51 2023 -0400 + + [Unicode 15.1] Update the Arabic table + + src/hb-ot-shaper-arabic-table.hh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit b3705cbf070d3dc984c5b3e18c7657aadd2b1a0f +Author: David Corbett +Date: Sat Sep 16 09:40:56 2023 -0400 + + [Unicode 15.1] Update the UCD table + + src/hb-ucd-table.hh | 3450 ++++++++++++++++++++++++++------------------------- + 1 file changed, 1727 insertions(+), 1723 deletions(-) + +commit 767f937833f82257169dc278e4aaa22c44bfebf8 +Author: David Corbett +Date: Fri Sep 15 23:11:26 2023 -0400 + + [USE] Update the data files + + This uses the data files from + + and closes #4404. + + src/gen-use-table.py | 16 +- + src/hb-ot-shaper-use-machine.hh | 1381 +++++++++++---------- + src/hb-ot-shaper-use-machine.rl | 6 +- + src/hb-ot-shaper-use-table.hh | 940 +++++++------- + src/ms-use/IndicPositionalCategory-Additional.txt | 1 + + src/ms-use/IndicSyllabicCategory-Additional.txt | 57 +- + 6 files changed, 1223 insertions(+), 1178 deletions(-) + +commit 02c2e24749b9d20ec6371766d7faeb4d5d2caa67 +Author: David Corbett +Date: Sat Sep 16 09:22:43 2023 -0400 + + Regenerate files using Ragel 6.10 + + src/hb-buffer-deserialize-json.hh | 8 +- + src/hb-buffer-deserialize-text-glyphs.hh | 10 +- + src/hb-buffer-deserialize-text-unicode.hh | 10 +- + src/hb-number-parser.hh | 8 +- + src/hb-ot-shaper-indic-machine.hh | 14 +- + src/hb-ot-shaper-khmer-machine.hh | 14 +- + src/hb-ot-shaper-myanmar-machine.hh | 14 +- + src/hb-ot-shaper-use-machine.hh | 1875 ++++++++++++++--------------- + 8 files changed, 942 insertions(+), 1011 deletions(-) + +commit 37457412b3212463c5f53119080cd1af375aae23 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Sep 11 10:33:26 2023 +0000 + + Bump actions/checkout from 3.5.3 to 4.0.0 + + Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.3 to 4.0.0. + - [Release notes](https://github.com/actions/checkout/releases) + - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) + - [Commits](https://github.com/actions/checkout/compare/c85c95e3d7251135ab7dc9ce3241c5835cc595a9...3df4ab11eba7bda6032a0b82a6bb43b11571feac) + + --- + updated-dependencies: + - dependency-name: actions/checkout + dependency-type: direct:production + update-type: version-update:semver-major + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/arm-ci.yml | 2 +- + .github/workflows/configs-build.yml | 2 +- + .github/workflows/coverity-scan.yml | 2 +- + .github/workflows/linux-ci.yml | 2 +- + .github/workflows/macos-ci.yml | 2 +- + .github/workflows/msvc-ci.yml | 2 +- + .github/workflows/msys2-ci.yml | 2 +- + .github/workflows/scorecard.yml | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +commit 7384aaae4300da4380ce13adbca0aa7c6fe443e1 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Sep 11 10:33:29 2023 +0000 + + Bump actions/upload-artifact from 3.1.2 to 3.1.3 + + Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3.1.2 to 3.1.3. + - [Release notes](https://github.com/actions/upload-artifact/releases) + - [Commits](https://github.com/actions/upload-artifact/compare/0b7f8abb1508181956e8e162db84b466c27e18ce...a8a3f3ad30e3422c9c7b888a15615d19a852ae32) + + --- + updated-dependencies: + - dependency-name: actions/upload-artifact + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/cifuzz.yml | 2 +- + .github/workflows/msys2-ci.yml | 2 +- + .github/workflows/scorecard.yml | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit 978918c32a66af41df86386510cf73a4c0e8d393 +Author: Behdad Esfahbod +Date: Mon Sep 11 11:04:08 2023 +0100 + + [aat] Simplify complex condition + + Based on https://github.com/RazrFalcon/rustybuzz/discussions/79#discussioncomment-6960324 + + src/hb-aat-layout-common.hh | 72 ++++++++++++++++++++++----------------------- + 1 file changed, 35 insertions(+), 37 deletions(-) + +commit 17ee3cd7f4e3123d8289694f59a03c782035103f +Author: Vincent Torri +Date: Sun Sep 10 07:29:08 2023 +0200 + + fix warning with unsigned long + + src/graph/graph.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit c1eb66d4159fec311334aee5c0a59384491d3989 +Author: Khaled Hosny +Date: Fri Sep 8 21:54:32 2023 +0300 + + 8.2.0 + + NEWS | 12 ++++++++++++ + configure.ac | 2 +- + docs/harfbuzz-docs.xml | 1 + + meson.build | 2 +- + src/hb-paint.cc | 2 +- + src/hb-paint.h | 4 ++-- + src/hb-version.h | 6 +++--- + 7 files changed, 21 insertions(+), 8 deletions(-) + +commit d5cb1a315380e9bd78ff377a586b78bc42abafa6 +Author: L. E. Segovia +Date: Thu Aug 31 23:41:10 2023 -0300 + + [meson] Add gitignore entries for wrap sources + + subprojects/.gitignore | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 617e44785476178107c4216964f185937e312a09 +Author: L. E. Segovia +Date: Thu Aug 31 23:39:29 2023 -0300 + + [meson] Set C++14 as minimum as implied by MSVC support + + Microsoft's STL uses C++14 as minimum. Using C++11 is actually enforced + by clang-cl and clang, which will lead to all sorts of compilation + errors. + + meson.build | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 15bc9e342f989c7cd27de3a3fb68933259bf59e2 +Author: L. E. Segovia +Date: Thu Aug 31 23:37:08 2023 -0300 + + [meson] Detect Microsoft compilers through _MSC_FULL_VER + + Microsoft ships three compilers nowadays: MSVC, clang-cl, and Clang. + The latter is always skipped by `compiler.get_argument_syntax()`, + which leads to the incorrect export macro being applied. + + This commit also removes the tests that are affected in Microsoft Clang. + + src/meson.build | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) + +commit fd3eb2c6723c3ce241011f1d3429e48c3226af1c +Author: Qunxin Liu +Date: Thu Aug 24 08:59:18 2023 -0700 + + fuzzer fix: https://oss-fuzz.com/testcase-detail/6032126569742336 + + src/hb-ot-var-gvar-table.hh | 24 ++++++--------------- + ...ase-minimized-hb-subset-fuzzer-6032126569742336 | Bin 0 -> 1970 bytes + 2 files changed, 6 insertions(+), 18 deletions(-) + +commit 0340ba1c50da110787a420a633a7b8b2dabe42c4 +Author: Behdad Esfahbod +Date: Tue Sep 5 14:56:09 2023 +0300 + + [bit-page] Add a few operators + + src/hb-bit-page.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit a0b758f7d779376f4582c968d6fc3c5e7cde1e50 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Sep 4 10:34:27 2023 +0000 + + Bump github/codeql-action from 2.21.4 to 2.21.5 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.4 to 2.21.5. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/a09933a12a80f87b87005513f0abb1494c27a716...00e563ead9f72a8461b24876bee2d0c2e8bd2ee8) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4cfc6d8e173e800df086d7be078da2e8c5cfca19 +Author: Ben Wagner +Date: Thu Aug 31 13:54:34 2023 -0400 + + Specify tuple_variations_t special member functions + + Building with clang complains about the use of `tuple_variations_t`'s + implicit copy constructor and copy assignment operator, since automatic + generation of these is deprecated when declaring a non-default + destructor. This is a good warning because it isn't obvious that copies + were being made instead of the object being moved and this struct should + be moved and not copied. Declare all the special member functions, + defaulting the moves and deleting the copies. + + After making `tuple_variations_t` move only, an issue is revealed in + `hb_vector_t::push` which has been requiring that objects be copyable. + Remove the old non-emplacing `push` now that this works with all + existing objects and make a single `push` which is more like + `std::vector::emplace_back` since that is somewhat what the newer `push` + is attempting to do. + + src/hb-ot-var-common.hh | 5 +++++ + src/hb-vector.hh | 22 ++-------------------- + 2 files changed, 7 insertions(+), 20 deletions(-) + +commit 4668b43e2cbc9d2ae19a9e9b53ad694da35240a1 +Author: Benoit Pierre +Date: Thu Aug 31 19:33:29 2023 +0200 + + [meson] add source fallback URL to freetype2 wrap + + subprojects/freetype2.wrap | 1 + + 1 file changed, 1 insertion(+) + +commit 8d22a57065d286dd2e920ece70c12bba5f59a8b1 +Author: Garret Rieger +Date: Mon Aug 28 18:33:31 2023 +0000 + + [repacker] fix potential use after free in repacker. + + During table splitting we iterate over the lookups map which can be modified during table splitting. This can result in a use after free in the iterator. Create a local copy of the lookup indices to avoid this. + + src/hb-repacker.hh | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit a1f034eaacb5547fdfc62fd1c4df23f9d2b40104 +Author: Garret Rieger +Date: Mon Aug 28 21:10:16 2023 +0000 + + [repacker] fix fuzzer failure. + + Fixes: https://oss-fuzz.com/testcase-detail/6490945267564544 + + src/graph/markbasepos-graph.hh | 4 +++- + ...tcase-minimized-hb-repacker-fuzzer-6490945267564544 | Bin 0 -> 358352 bytes + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit f380a32825a1b2c51bbe21dc7acb9b3cc0921f69 +Author: Bruce Mitchener +Date: Fri Aug 25 14:01:01 2023 +0700 + + Fix some typos. + + CONFIG.md | 2 +- + src/OT/Layout/GPOS/PairPosFormat2.hh | 2 +- + src/hb-bimap.hh | 2 +- + src/hb-bit-set.hh | 4 ++-- + src/hb-buffer.cc | 4 ++-- + src/hb-buffer.h | 2 +- + src/hb-font.cc | 2 +- + src/hb-map.cc | 2 +- + src/hb-ot-shape.cc | 2 +- + src/hb-sanitize.hh | 2 +- + src/hb-set.cc | 24 ++++++++++++------------ + src/hb-vector.hh | 2 +- + src/hb-wasm-shape.cc | 2 +- + 13 files changed, 26 insertions(+), 26 deletions(-) + +commit c28fdc39b25269aadafca2ba0507c149b2779da2 +Author: Garret Rieger +Date: Wed Aug 23 22:16:39 2023 +0000 + + [repacker] fix bot failure. + + src/graph/gsubgpos-context.hh | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit d7ee328f807cd4890b701d5b2dab5993270ace7f +Author: Garret Rieger +Date: Wed Aug 23 22:06:55 2023 +0000 + + [repacker] include the size of all lookup tables in the layer size estimates from the start. + + In extension promotion previously we incrementally added the contribution of the lookup table to the layer size estimates as the lookups were processed. However, this isn't quite correct as regardless of the promotion decision the full lookup table size will be incurred. So the size should be added to the initial sizes. + + src/hb-repacker.hh | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +commit 5587247d5bb46e3ff5d0c4601b145dfbae50e27c +Author: Garret Rieger +Date: Wed Aug 23 21:54:15 2023 +0000 + + [repacker] create only one extension subtable per physical subtable. + + During extension promotion when multiple lookups refer to a shared subtable node create and reuse a single extension subtable for it. Fixes: https://github.com/fonttools/fonttools/issues/3260. + + src/graph/graph.hh | 12 +++++++++++ + src/graph/gsubgpos-context.hh | 1 + + src/graph/gsubgpos-graph.hh | 19 +++++++++++++---- + src/test-repacker.cc | 47 +++++++++++++++++++++++++++++++++++++------ + 4 files changed, 69 insertions(+), 10 deletions(-) + +commit 56e8a290328c6628a92971c7837f773194e7584f +Author: Behdad Esfahbod +Date: Tue Aug 22 15:49:00 2023 -0600 + + Fix static_size declaration + + I have a vague memory that it was intentionally written + that way, but I can't recall :-(. + + src/OT/Color/COLR/COLR.hh | 4 ++-- + src/hb-null.hh | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +commit 2023384bdf74992c2a38ed7ddc81dfd14d8a6649 +Merge: 970d2c438 dd8d35766 +Author: Behdad Esfahbod +Date: Tue Aug 22 13:09:26 2023 -0700 + + Merge pull request #4368 from googlefonts/support_gvar + + Initial implementation for gvar partial instancing + +commit dd8d35766bb31ef43848180c419c621be302ac5d +Author: Qunxin Liu +Date: Tue Aug 22 12:54:50 2023 -0700 + + [instancer] enable partial instancing tests when experimental api is on + + src/hb-ot-var-common.hh | 2 +- + test/subset/meson.build | 5 ++++- + 2 files changed, 5 insertions(+), 2 deletions(-) + +commit 970d2c438f849700b879d76e8c183c2edfbaccdb +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Aug 21 10:10:17 2023 +0000 + + Bump github/codeql-action from 2.21.3 to 2.21.4 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.3 to 2.21.4. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/5b6282e01c62d02e720b81eb8a51204f527c3624...a09933a12a80f87b87005513f0abb1494c27a716) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6c7aed1000c52a7236f2368aae2bbedab6b133ff +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Aug 21 10:52:43 2023 +0000 + + Bump fonttools from 4.42.0 to 4.42.1 in /.ci + + Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.42.0 to 4.42.1. + - [Release notes](https://github.com/fonttools/fonttools/releases) + - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst) + - [Commits](https://github.com/fonttools/fonttools/compare/4.42.0...4.42.1) + + --- + updated-dependencies: + - dependency-name: fonttools + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements-fonttools.txt | 70 +++++++++++++++++++++--------------------- + .ci/requirements.txt | 70 +++++++++++++++++++++--------------------- + 2 files changed, 70 insertions(+), 70 deletions(-) + +commit ca906e8747ac45ccf235c3f3e9ee9b69a693d7e4 +Author: Garret Rieger +Date: Wed Aug 16 23:37:03 2023 +0000 + + [repacker] fix fuzzer timeout. + + Corrects some mistakes in the handling of incoming_edges_ when memory allocation failures happen. + + src/graph/graph.hh | 11 +++++++++-- + ...stcase-minimized-hb-repacker-fuzzer-6697168080338944 | Bin 0 -> 68766 bytes + 2 files changed, 9 insertions(+), 2 deletions(-) + +commit c7f2d440f463be31ae24cbae7ceb6ea72a15e990 +Author: Behdad Esfahbod +Date: Wed Aug 16 09:55:23 2023 -0700 + + [hb-view] Better cairo version check + + util/view-cairo.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e714e7d4f3d3bd1a49c460f6c3bd2c3f09192722 +Author: Behdad Esfahbod +Date: Wed Aug 16 09:54:08 2023 -0700 + + [hb-view] Work around old cairo + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4378 + + util/view-cairo.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit bea26446d2063cadb0cd83c1c627d3eed95cbcf6 +Author: Qunxin Liu +Date: Tue Aug 15 14:20:54 2023 -0700 + + [instancer] reference all points for gvar + + If a point is not referenced and delta is not inferred, set delta to 0 + + src/hb-ot-var-common.hh | 16 ++++++++++++++-- + ...tain-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 7452 -> 7292 bytes + ...ions.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 6780 -> 6760 bytes + 3 files changed, 14 insertions(+), 2 deletions(-) + +commit 06ff3bcb8db2ac9eac80bef21644c4d70f60573a +Author: Behdad Esfahbod +Date: Tue Aug 15 14:41:18 2023 -0600 + + [COLR,glyf] Use map instead of set for tracking current glyphs / layers + + src/OT/Color/COLR/COLR.hh | 4 ++-- + src/OT/glyf/Glyph.hh | 4 ++-- + src/hb-ft-colr.hh | 4 ++-- + src/hb-map.hh | 5 +++++ + 4 files changed, 11 insertions(+), 6 deletions(-) + +commit b530e485cdcd466cdfd7f80fd341a67883fb8c71 +Author: Behdad Esfahbod +Date: Tue Aug 15 14:31:40 2023 -0600 + + [glyf] Don't recuse into alread-active composite glyphs + + Deny loops. + + src/OT/glyf/Glyph.hh | 40 ++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 38 insertions(+), 2 deletions(-) + +commit 8f039ab4d624c545dd472e477c705c3f013f66c6 +Author: Behdad Esfahbod +Date: Tue Aug 15 11:27:19 2023 -0600 + + [COLR] Avoid infinite-loop through PaintColrLayers + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4376 + Fixes https://oss-fuzz.com/testcase-detail/5717524023738368 + + src/OT/Color/COLR/COLR.hh | 8 ++++++++ + src/hb-ft-colr.hh | 10 ++++++++++ + 2 files changed, 18 insertions(+) + +commit 0c80aec10b38c8880b0f353b4774b8843a4b4126 +Author: Behdad Esfahbod +Date: Tue Aug 15 10:30:38 2023 -0600 + + [COLR] Move cycle-detection to the renderer instead of cairo + + Alternative fix for https://github.com/harfbuzz/harfbuzz/issues/4375 + + src/OT/Color/COLR/COLR.hh | 10 ++ + src/hb-cairo-utils.hh | 3 - + src/hb-cairo.cc | 8 - + src/hb-ft-colr.hh | 17 +- + test/api/results/bad-154 | 440 +--------------------------------------------- + 5 files changed, 26 insertions(+), 452 deletions(-) + +commit 21a894f055bbff6afb45cbcceed89ac92091bb3e +Author: Behdad Esfahbod +Date: Tue Aug 15 10:21:26 2023 -0600 + + [cairo] Protect against infinite loops + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4375 + + Maybe we should do this in hb-ft and COLR instead? + + src/hb-cairo-utils.hh | 3 +++ + src/hb-cairo.cc | 8 ++++++++ + 2 files changed, 11 insertions(+) + +commit 7d7541e35d5701953e5e768ac1ef41b23223edb1 +Author: Behdad Esfahbod +Date: Mon Aug 14 17:55:09 2023 -0600 + + [test-paint] Print paint-color-glyph + + test/api/results/bad-154 | 34 +++++++++++++++++++++++++++++++++- + test/api/results/test-154 | 4 +++- + test/api/results/testvf-154 | 4 +++- + test/api/test-paint.c | 15 +++++++++++++++ + 4 files changed, 54 insertions(+), 3 deletions(-) + +commit 5560eb60d75945a331427b0e8112282dc4ff0d94 +Author: Behdad Esfahbod +Date: Mon Aug 14 17:05:22 2023 -0600 + + [paint] Fix docs + + src/hb-paint.h | 9 --------- + 1 file changed, 9 deletions(-) + +commit 47231bdc701df1f3ba0dafb901dc92db54e7ff78 +Author: Behdad Esfahbod +Date: Mon Aug 14 16:52:44 2023 -0600 + + [COLR/cairo/ft] Fixups to paint-color-glyph and implement for hb-ft + + docs/harfbuzz-sections.txt | 3 +++ + src/hb-ft-colr.hh | 11 ++++++++ + test/api/results/bad-154 | 66 ++++++++++++++++++++++++++++++++++++++++++++- + test/api/results/testvf-154 | 6 ++++- + 4 files changed, 84 insertions(+), 2 deletions(-) + +commit 58effbcc4f1b6aa1870738f0da3d999f4f1810be +Author: Behdad Esfahbod +Date: Mon Aug 14 16:47:01 2023 -0600 + + . + + src/OT/Color/COLR/COLR.hh | 5 +++++ + src/hb-cairo.cc | 10 +++++++++- + test/api/results/test-154 | 6 +++++- + test/api/test-paint.c | 2 +- + 4 files changed, 20 insertions(+), 3 deletions(-) + +commit 74527670fc5b0517e1d2cba2c26e3695547302e1 +Author: Behdad Esfahbod +Date: Mon Aug 14 15:57:24 2023 -0600 + + [COLR/cairo] Add paint_color_glyph func + + Implement in cairo to use scaled-font's glyph cache. + + src/OT/Color/COLR/COLR.hh | 4 ++++ + src/hb-cairo.cc | 19 ++++++++++++++++++ + src/hb-paint.cc | 25 +++++++++++++++++++++++ + src/hb-paint.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++ + src/hb-paint.hh | 8 ++++++++ + 5 files changed, 107 insertions(+) + +commit 8d19274c2d6e7205dc32d416c60c3542a3f353e9 +Author: Behdad Esfahbod +Date: Mon Aug 14 14:40:26 2023 -0600 + + [layout] Speed up VarStoreInstancer + + src/hb-ot-var-common.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1da4c61550ed8216c811765de6d8904727df0e65 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Aug 14 10:51:00 2023 +0000 + + Bump github/codeql-action from 2.21.2 to 2.21.3 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.2 to 2.21.3. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/0ba4244466797eb048eb91a6cd43d5c03ca8bd05...5b6282e01c62d02e720b81eb8a51204f527c3624) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8d44562b429afc1cca8cf5472905ae189929a506 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Aug 14 10:50:49 2023 +0000 + + Bump hendrikmuhs/ccache-action from 1.2.9 to 1.2.10 + + Bumps [hendrikmuhs/ccache-action](https://github.com/hendrikmuhs/ccache-action) from 1.2.9 to 1.2.10. + - [Release notes](https://github.com/hendrikmuhs/ccache-action/releases) + - [Commits](https://github.com/hendrikmuhs/ccache-action/compare/ca3acd2731eef11f1572ccb126356c2f9298d35e...6d1841ec156c39a52b1b23a810da917ab98da1f4) + + --- + updated-dependencies: + - dependency-name: hendrikmuhs/ccache-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/linux-ci.yml | 2 +- + .github/workflows/macos-ci.yml | 2 +- + .github/workflows/msvc-ci.yml | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit a8fb56e0f313558dc1f18df2d76ca691567330b9 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Aug 14 10:36:33 2023 +0000 + + Bump meson from 1.2.0 to 1.2.1 in /.ci + + Bumps [meson](https://github.com/mesonbuild/meson) from 1.2.0 to 1.2.1. + - [Release notes](https://github.com/mesonbuild/meson/releases) + - [Commits](https://github.com/mesonbuild/meson/compare/1.2.0...1.2.1) + + --- + updated-dependencies: + - dependency-name: meson + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements.in | 2 +- + .ci/requirements.txt | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit e8eb1dc5ff695427abc137d3d15c4eec64ab6c78 +Author: Behdad Esfahbod +Date: Wed Aug 9 15:35:59 2023 -0600 + + [parse_tag] Accept non-ALNUM in tag name + + src/hb-common.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9a7afe922b7c661267ecd2211b5199f5ae4df180 +Author: Behdad Esfahbod +Date: Wed Aug 9 12:00:41 2023 -0600 + + [perf] Benchmark glyph painting + + perf/benchmark-font.cc | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 077c4308cc2650bcd761b60c2b64eea77c5d399c +Author: Behdad Esfahbod +Date: Wed Aug 9 10:41:04 2023 -0600 + + [limits] Increase COLRv1 edge-count + + We have a "pixel" color font that was easily hitting the limit... + + src/hb-limits.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 45c1ad05126c33408ccf862a0fde69f608147f04 +Author: Behdad Esfahbod +Date: Wed Aug 9 10:27:45 2023 -0600 + + [paint] Add tracing + + src/OT/Color/COLR/COLR.hh | 22 ++++++++++++++++++++++ + src/hb-debug.hh | 19 +++++++++++++++++-- + 2 files changed, 39 insertions(+), 2 deletions(-) + +commit 483bc0a3847ae55860bd55fa0eb214f899a02b31 +Author: Behdad Esfahbod +Date: Tue Aug 8 15:58:20 2023 -0600 + + [arabic/stch] Center the stretched group over the digits + + Mostly relevant when there's one digit only. + + https://github.com/harfbuzz/harfbuzz/issues/4369#issuecomment-1670361856 + + src/hb-ot-shaper-arabic.cc | 5 ++++- + test/shape/data/in-house/tests/arabic-stch.tests | 1 + + 2 files changed, 5 insertions(+), 1 deletion(-) + +commit 9daef6ed4eda12e13628b1ae8bff590d4e6adaf6 +Author: Behdad Esfahbod +Date: Tue Aug 8 13:33:11 2023 -0600 + + [arabic] Add test for previous commit + + .../fonts/507637795ce4f2975593da54d12b46f76c7cc4cc.ttf | Bin 0 -> 2200 bytes + test/shape/data/in-house/tests/arabic-stch.tests | 1 + + 2 files changed, 1 insertion(+) + +commit 313c772989ca838f7ba9c2119ffb953ba8a4418b +Author: Behdad Esfahbod +Date: Tue Aug 8 13:06:12 2023 -0600 + + [arabic/stch] Also work in left-to-right direction + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4369 + + src/hb-ot-shaper-arabic.cc | 25 ++++++++++++++++++++----- + 1 file changed, 20 insertions(+), 5 deletions(-) + +commit 40bfabd1f97d7ad665140ba764157a6058e6a3b7 +Author: Behdad Esfahbod +Date: Tue Aug 8 12:17:25 2023 -0600 + + [arabic/stch] Zero advances + + This was working for our test suite because those glyphs were + declared mark and their advances zeroed automatically. But is + not the case in eg. the font posted at: + + https://github.com/harfbuzz/harfbuzz/issues/4369 + + src/hb-ot-shaper-arabic.cc | 1 + + 1 file changed, 1 insertion(+) + +commit 0aa5dafefd85d01d486d0d26b75387df3a2927e3 +Author: Qunxin Liu +Date: Tue Aug 8 08:33:11 2023 -0700 + + fix bots. + + -Also disable partial instancing tests for now, cause the command option + is wrapped by experimental_api + + test/subset/data/Makefile.am | 1 - + test/subset/data/Makefile.sources | 1 - + test/subset/meson.build | 2 +- + util/hb-subset.cc | 4 ++++ + 4 files changed, 5 insertions(+), 3 deletions(-) + +commit 77b158c72d355e8e5e32f0d9748174041fddc8dd +Author: Qunxin Liu +Date: Mon Aug 7 16:02:02 2023 -0700 + + [instancer] add tests for gvar partial instancing + + test/subset/data/Makefile.am | 1 + + test/subset/data/Makefile.sources | 1 + + ....retain-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 0 -> 8256 bytes + ...iations.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 0 -> 7244 bytes + ....retain-all-codepoint.wght=200-300-500,wdth=80-90.ttf | Bin 0 -> 7452 bytes + ...iations.retain-all-codepoint.wght=300-600,wdth=85.ttf | Bin 0 -> 6780 bytes + .../data/profiles/no-tables-with-item-variations.txt | 1 + + test/subset/data/tests/glyf_partial_instancing.tests | 13 +++++++++++++ + test/subset/generate-expected-outputs.py | 1 + + test/subset/meson.build | 1 + + 10 files changed, 18 insertions(+) + +commit 32cfa37e2edd6a8dbc07c75c010fd2fc68c4346a +Author: Qunxin Liu +Date: Mon May 8 13:30:39 2023 -0700 + + [instancer] command line support for partial instancing + + -Also updated hb_subset_input_set_axis_range (), so user can define + default value as well + + src/hb-subset-input.cc | 19 ++++++++---- + src/hb-subset.h | 3 +- + util/hb-subset.cc | 80 ++++++++++++++++++++++++++++++++++++++++---------- + 3 files changed, 80 insertions(+), 22 deletions(-) + +commit 0065658e96c79f8b51c2a702908e84d9d23e0971 +Author: Qunxin Liu +Date: Mon Aug 7 11:12:02 2023 -0700 + + [instancer] enable cvar instancing code + + src/hb-subset-input.cc | 1 - + src/hb-subset.cc | 3 +++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +commit 0ba4d539b365039b602d9f88133fc0cae9cd0e30 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Aug 7 11:49:03 2023 -0600 + + Bump fonttools from 4.41.1 to 4.42.0 in /.ci (#4365) + + Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.41.1 to 4.42.0. + - [Release notes](https://github.com/fonttools/fonttools/releases) + - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst) + - [Commits](https://github.com/fonttools/fonttools/compare/4.41.1...4.42.0) + + --- + updated-dependencies: + - dependency-name: fonttools + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> + + .ci/requirements-fonttools.txt | 70 +++++++++++++++++++++--------------------- + .ci/requirements.txt | 70 +++++++++++++++++++++--------------------- + 2 files changed, 70 insertions(+), 70 deletions(-) + +commit 366ffd1ef0f26cf719ee45e08f59fc9fb4b38a05 +Author: Qunxin Liu +Date: Mon Aug 7 10:32:47 2023 -0700 + + [instancer] fix move constructor for tuple_delta_t + + src/hb-ot-var-common.hh | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +commit 1d91622ddf082cd0777e9ae67876fe13fc7e454d +Author: Qunxin Liu +Date: Tue Jul 18 09:52:40 2023 -0700 + + [instancer] add a hashing impl for floating point type + + src/hb-algs.hh | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 5a4694b6934f9e3ca3dc89cc905b4351920085b6 +Author: Qunxin Liu +Date: Mon Aug 7 09:55:30 2023 -0700 + + [instancer] add calc_inferred_deltas() for gvar + + src/hb-ot-var-common.hh | 104 +++++++++++++++++++++++++++++++++++++++++++++ + src/test-tuple-varstore.cc | 3 +- + 2 files changed, 105 insertions(+), 2 deletions(-) + +commit fb44727401d36adc14615deda91574a6e7ec2cd6 +Author: Qunxin Liu +Date: Mon Aug 7 09:44:41 2023 -0700 + + [instancer] add instantiate () for gvar + + src/hb-ot-var-common.hh | 11 ++++++++--- + src/hb-ot-var-gvar-table.hh | 22 ++++++++++++++++++++++ + 2 files changed, 30 insertions(+), 3 deletions(-) + +commit 746b112faf6adcd4a9d7325b067c4ba46a973a95 +Author: Qunxin Liu +Date: Mon Aug 7 09:26:42 2023 -0700 + + [instancer] add serialize () for gvar + + src/hb-ot-var-common.hh | 6 ++- + src/hb-ot-var-cvar-table.hh | 1 + + src/hb-ot-var-gvar-table.hh | 114 ++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 120 insertions(+), 1 deletion(-) + +commit 3c86b096a9bf310a00086a7ed566cf1436da786c +Author: Qunxin Liu +Date: Fri Jul 28 16:18:51 2023 -0700 + + [instancer] Add instantiate () and compile_bytes() for gvar + + -Also add support for using shared_points and shared_tuples + + src/hb-ot-var-common.hh | 85 +++++++++++++++++++++++++++++++++++++-------- + src/hb-ot-var-cvar-table.hh | 7 ++-- + src/hb-ot-var-gvar-table.hh | 29 ++++++++++++++++ + src/test-tuple-varstore.cc | 2 +- + 4 files changed, 106 insertions(+), 17 deletions(-) + +commit 198612c1c83d3b19b953a2fcc73406287104e5a2 +Author: Qunxin Liu +Date: Fri Jul 28 15:41:54 2023 -0700 + + [instancer] add decompile_glyph_variations () for gvar + + src/hb-ot-var-common.hh | 1 + + src/hb-ot-var-gvar-table.hh | 81 +++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 82 insertions(+) + +commit eb116e163e0bb8476cdd53a07630389d25ec3b97 +Author: Qunxin Liu +Date: Fri Jul 28 15:27:07 2023 -0700 + + [instancer] Add new_gid->contour_points vector map in subset plan + + - Add an API in Glyph to export original contour_points vector, which is + needed by infer_deltas when merging tuple variations with the same + tent + + src/OT/glyf/Glyph.hh | 57 +++++++++++++++++++++++++++++++++++++++ + src/hb-ot-var-gvar-table.hh | 34 ----------------------- + src/hb-subset-plan-member-list.hh | 3 +++ + src/hb-subset-plan.cc | 32 ++++++++++++++++++++++ + src/hb-subset-plan.hh | 34 +++++++++++++++++++++++ + 5 files changed, 126 insertions(+), 34 deletions(-) + +commit a0f810effcb497e77be25328a251e608b5863999 +Author: Qunxin Liu +Date: Fri Jul 28 15:04:47 2023 -0700 + + [instancer] add struct glyph_variations_t for gvar + + -Add compile_peak_coords () in tuple_delta_t + -Add compile_shared_tuples () for glyph_variations_t + + src/hb-ot-var-common.hh | 33 ++++++++++++++ + src/hb-ot-var-gvar-table.hh | 105 ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 138 insertions(+) + +commit cb92210b4cf93f6d7986dc75632c831092b4de19 +Author: Bruce Mitchener +Date: Tue Aug 8 00:19:30 2023 +0700 + + Improve Markdown formatting. (#4366) + + BUILD.md | 23 +++++++++++++---------- + README.md | 4 ++-- + 2 files changed, 15 insertions(+), 12 deletions(-) + +commit 49dbe0cd30a47258af0523822c924e9698a3e845 +Author: Behdad Esfahbod +Date: Sun Aug 6 15:07:57 2023 -0600 + + Another try + + src/OT/Color/COLR/COLR.hh | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 483d4a8741890ac72fa22d167ed53d4e39e9bd1d +Author: Behdad Esfahbod +Date: Sun Aug 6 14:40:45 2023 -0600 + + Fix bot + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +commit 7989702abadc8fff69a99a47cfad2db08f5b8184 +Author: Behdad Esfahbod +Date: Sun Aug 6 14:17:50 2023 -0600 + + Audit and fix up serialize_subset uses + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4362 + + src/OT/Color/COLR/COLR.hh | 11 ++++++----- + src/OT/Layout/GPOS/AnchorMatrix.hh | 5 +++-- + src/OT/Layout/GPOS/CursivePosFormat1.hh | 11 +++++------ + src/OT/Layout/GPOS/LigatureArray.hh | 13 +++++++------ + src/OT/Layout/GPOS/MarkArray.hh | 6 +++--- + src/OT/Layout/GPOS/MarkBasePosFormat1.hh | 15 +++++++-------- + src/OT/Layout/GPOS/MarkLigPosFormat1.hh | 14 +++++++------- + src/OT/Layout/GPOS/MarkMarkPosFormat1.hh | 12 +++++++----- + src/OT/Layout/GPOS/MarkRecord.hh | 11 +++++------ + src/hb-ot-layout-common.hh | 3 +-- + 10 files changed, 51 insertions(+), 50 deletions(-) + +commit 1d665c2b521512cdd56964138fc601debd1f1177 +Author: Khaled Hosny +Date: Wed Aug 2 23:44:56 2023 +0300 + + 8.1.1 + + NEWS | 8 ++++++++ + configure.ac | 2 +- + meson.build | 2 +- + src/hb-version.h | 4 ++-- + 4 files changed, 12 insertions(+), 4 deletions(-) + +commit 91c449a64a6924afd2aee4d3eb0b80c8c7d9ad07 +Author: Behdad Esfahbod +Date: Wed Aug 2 14:40:55 2023 -0600 + + [graph] Make space_for non-recursive + + It was tail-recursive so perhaps the compiler did the same. + Anyway, make it explicit now. + + src/graph/graph.hh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit dcd3afcabfeb447a075b189f20cd523e177a0a9d +Author: Behdad Esfahbod +Date: Tue Aug 1 20:09:34 2023 -0600 + + [skippy-iter] Remove unused num_items + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 2 +- + src/OT/Layout/GPOS/MarkMarkPosFormat1.hh | 2 +- + src/OT/Layout/GPOS/PairPosFormat1.hh | 2 +- + src/OT/Layout/GPOS/PairPosFormat2.hh | 2 +- + src/OT/Layout/GSUB/LigatureSet.hh | 2 +- + src/hb-kern.hh | 2 +- + src/hb-ot-layout-gsubgpos.hh | 24 +++++++----------------- + 7 files changed, 13 insertions(+), 23 deletions(-) + +commit 5b337130e28eeaef3b5cfe884b514059417e3384 +Author: Behdad Esfahbod +Date: Tue Aug 1 20:02:21 2023 -0600 + + Add test for previous commit + + .../fonts/bef923f4ccb474f961c43b63a9c74b7d9b7a023f.ttf | Bin 0 -> 2180 bytes + test/shape/data/in-house/tests/context-matching.tests | 1 + + 2 files changed, 1 insertion(+) + +commit 39048099cb421095e24cdcc027b9cdc2a7fcf93e +Author: Behdad Esfahbod +Date: Tue Aug 1 19:41:12 2023 -0600 + + [skippy-iter] Remove early stop + + The optimization in (Chain)RuleSet matching relies on + matching one, even if num_items is out of range. + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4358 + + src/hb-ot-layout-gsubgpos.hh | 12 ++---------- + 1 file changed, 2 insertions(+), 10 deletions(-) + +commit 70b3fbed2850f310658b65a68a058232b78ebeee +Author: Behdad Esfahbod +Date: Tue Aug 1 15:16:16 2023 -0600 + + [graph] Fix invalid read when map gets resized + + I don't fully understand how the old code was wrong, since + *v should be evaluated before the set() method call. + Yet this seems to fix a bug that could be reproduced + with HB_DEBUG_SUBSET_REPACK enabled and the following: + + $ hb-repacker-fuzzer test/fuzzing/graphs/clusterfuzz-testcase-minimized-hb-repacker-fuzzer-6419865171525632 + + src/graph/graph.hh | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +commit 94d4283b12037d66ceb3b195f47d3bca96eb6627 +Author: Behdad Esfahbod +Date: Tue Aug 1 15:05:17 2023 -0600 + + [graph] Handle a malloc fail + + Fixes https://oss-fuzz.com/testcase-detail/4579249263345664 + + src/graph/graph.hh | 19 ++++++++++++------- + ...ase-minimized-hb-repacker-fuzzer-4579249263345664 | Bin 0 -> 173466 bytes + 2 files changed, 12 insertions(+), 7 deletions(-) + +commit 603920e911dc0fde79dc0ddde2be393f5c123d30 +Author: Behdad Esfahbod +Date: Tue Aug 1 14:58:33 2023 -0600 + + [graph] Minor asserts + + src/graph/graph.hh | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +commit 8d00476fbf99f770608644e424712cf95d3950b8 +Author: Behdad Esfahbod +Date: Tue Aug 1 14:27:37 2023 -0600 + + [graph] Minor restructure a condition + + src/graph/graph.hh | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +commit 7946984b9624338b8d15fa53ac21664a734e93d3 +Author: Behdad Esfahbod +Date: Tue Aug 1 14:18:03 2023 -0600 + + [graph] More assert + + src/graph/graph.hh | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 3b386c3773f24e30ec26bbbf86422ac67a6fb7b9 +Author: Behdad Esfahbod +Date: Tue Aug 1 14:12:43 2023 -0600 + + [graph] Minor assert + + src/graph/graph.hh | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 07e7033076d9acfeeaa7a91ea878fa130a022824 +Author: Behdad Esfahbod +Date: Tue Aug 1 12:25:45 2023 -0600 + + [graph] Error check + + src/graph/graph.hh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 7a9aac1ae3f7b836ddb314636d6f50d8ad7ec5d2 +Author: Behdad Esfahbod +Date: Tue Aug 1 12:05:22 2023 -0600 + + [graph] Fixes to parent handling + + src/graph/graph.hh | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +commit 2feac50b40f1dff06655c8efcadcc55088b34dad +Author: Behdad Esfahbod +Date: Mon Jul 31 19:53:06 2023 -0600 + + Revert "[gsubgpos] Keep another digest in the applicable_t" + + This reverts commit fd79c7cecdf68fe4626943f29bd5edf1e603d2b2. + + src/hb-ot-layout-gsubgpos.hh | 32 ++++++++++---------------------- + 1 file changed, 10 insertions(+), 22 deletions(-) + +commit fd79c7cecdf68fe4626943f29bd5edf1e603d2b2 +Author: Behdad Esfahbod +Date: Mon Jul 31 19:52:15 2023 -0600 + + [gsubgpos] Keep another digest in the applicable_t + + The digest for all the remaining subtables combined. + The idea is to get out of the subtable look as soon as + no more can be applied. + + Doesn't seem to speed up anything I tested. Going to revert. + + src/hb-ot-layout-gsubgpos.hh | 32 ++++++++++++++++++++++---------- + 1 file changed, 22 insertions(+), 10 deletions(-) + +commit e3fd69c88958fead68a62cecef7454990f7757fd +Author: Behdad Esfahbod +Date: Mon Jul 31 19:07:42 2023 -0600 + + [layout] Inline another function + + Code is smaller too. + + src/hb-ot-layout-gsubgpos.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit 9cdc043c16d319268677a9098c83dc572d279c99 +Author: Behdad Esfahbod +Date: Mon Jul 31 18:53:29 2023 -0600 + + [Cursive] Only sanitize what we use + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 25e9defa516d63b12a659282a13dc9e1fe522cc8 +Author: Behdad Esfahbod +Date: Mon Jul 31 17:12:07 2023 -0600 + + [sanitize] Inline check_struct + + Though seems like the compiler was always inlining it anyway. + + src/hb-sanitize.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit 44026aa8a992b7105a615f1fbaaf0e342b634efa +Author: Behdad Esfahbod +Date: Mon Jul 31 16:47:06 2023 -0600 + + [Cursive] Minor, adjust unsafe-to-concat if prev didn't sanitize + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit b382e616cc807fe16da0fe7baca6dc2335fab987 +Author: Behdad Esfahbod +Date: Mon Jul 31 16:29:28 2023 -0600 + + [GPOS] Sanitize Cursive positioning anchors lazily + + Speeds up Duployan-Regular.otf load time by 30%. + Doesn't seem to slow down shaping in a measurable way. + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +commit fcb9e5915f5d20b20576612efd4ee15d9da04c8a +Author: Khaled Hosny +Date: Tue Aug 1 00:57:06 2023 +0300 + + 8.1.0 + + NEWS | 21 +++++++++++++++++++-- + configure.ac | 2 +- + docs/harfbuzz-docs.xml | 1 + + meson.build | 2 +- + src/hb-ot-layout.cc | 2 +- + src/hb-version.h | 6 +++--- + 6 files changed, 26 insertions(+), 8 deletions(-) + +commit 847e4a7607b6ddd97bd9d59c047d18736a566428 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Jul 31 15:21:51 2023 -0600 + + Bump github/codeql-action from 2.21.0 to 2.21.2 (#4352) + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.0 to 2.21.2. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/1813ca74c3faaa3a2da2070b9b8a0b3e7373a0d8...0ba4244466797eb048eb91a6cd43d5c03ca8bd05) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit db608229d1633f9cbea3b5223d6548e803fb08c7 +Author: Behdad Esfahbod +Date: Mon Jul 31 15:16:43 2023 -0600 + + [README] Update + + README.md | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit 59f5f2651525c9d41d3394f9ef021f624b097346 +Author: Behdad Esfahbod +Date: Mon Jul 31 15:09:11 2023 -0600 + + [ci/msys] Don't install freetype (#4354) + + * [ci/msys] Try deleting system harfbuzz DLL + + .github/workflows/msys2-ci.yml | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +commit bd84458a951e2e8e7390ec45d3c0b0bfc30eca19 +Author: Behdad Esfahbod +Date: Mon Jul 31 13:27:15 2023 -0600 + + [ci] Try uploading msys artefacts (#4353) + + * [ci] Try uploading msys artefacts + + * [ci] Always upload DLLs from msys2 + + * [ci] Rename artifacts + + * Another try + + .github/workflows/msys2-ci.yml | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit d9c4d3edf0e2dcc8e1653cffad114110a59f691d +Author: Behdad Esfahbod +Date: Mon Jul 31 12:43:12 2023 -0600 + + [uniscribe] Fix warnings + + src/hb-uniscribe.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit 29ad9304e2b0cd84fbf125dfa907cd20d141fc70 +Author: Behdad Esfahbod +Date: Sun Jul 30 17:06:25 2023 -0600 + + [layout] Minor add prealloc + + src/hb-ot-layout.cc | 1 + + 1 file changed, 1 insertion(+) + +commit a41368bd7a0bf14c54b311a4455f7fdc5aa2df4b +Author: Behdad Esfahbod +Date: Sun Jul 30 17:04:02 2023 -0600 + + [buffer] Minor micro-optimize + + src/hb-buffer.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit dc35a0fbcb960f57df6c09a548651028c19e9790 +Author: Behdad Esfahbod +Date: Sun Jul 30 16:32:11 2023 -0600 + + [ot-map] Speed up feature finding + + New API: + - hb_ot_layout_collect_feature_map() + + docs/harfbuzz-sections.txt | 1 + + src/hb-ot-layout.cc | 39 ++++++++++++++++++++++++++++++++++++++- + src/hb-ot-layout.h | 7 +++++++ + src/hb-ot-map.cc | 22 +++++++++++++++------- + 4 files changed, 61 insertions(+), 8 deletions(-) + +commit ebdfa9838bd0170ee2f3bc766dbdad659a0e870c +Author: Behdad Esfahbod +Date: Sun Jul 30 12:22:55 2023 -0600 + + [perf] Measure freetype face loading as well + + perf/benchmark-font.cc | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 202888ec3ed27f1ac575a13d93688776545a62bf +Author: Behdad Esfahbod +Date: Sun Jul 30 11:49:08 2023 -0600 + + Fix mac bot + + I think the new unsafe-to-concat is correct... + + src/hb-ot-shaper-use-machine.hh | 1893 ++++++++++++++-------------- + test/shape/data/in-house/tests/macos.tests | 2 +- + 2 files changed, 971 insertions(+), 924 deletions(-) + +commit 35a026c89ab4f55a962f0e837a7b7650eb3e7c31 +Author: Behdad Esfahbod +Date: Sun Jul 30 11:28:59 2023 -0600 + + [shape] Unsafe-to-concat around fraction slash + + src/hb-ot-shape.cc | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit f19ca24a8ed92373342adb0c69ac5975b44f50e1 +Author: Behdad Esfahbod +Date: Sun Jul 30 11:26:11 2023 -0600 + + Revert "Revert "Require numerator and denominator in auto fraction"" + + This reverts commit 8fe506e153c530affd529e7175e813c3a878faed. + + src/hb-ot-shape.cc | 2 ++ + test/shape/data/in-house/tests/automatic-fractions.tests | 4 ++++ + 2 files changed, 6 insertions(+) + +commit b2a73166d4d7874565ac61dcfca74f651f922e5c +Author: Behdad Esfahbod +Date: Sun Jul 30 11:23:19 2023 -0600 + + [buffer] Fix unsafe_to_concat() + + Ouch! + + src/hb-buffer.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 8fe506e153c530affd529e7175e813c3a878faed +Author: Behdad Esfahbod +Date: Sun Jul 30 10:43:28 2023 -0600 + + Revert "Require numerator and denominator in auto fraction" + + This reverts commit f3e86937df345d7709de879af1d1a1502e84e1e9. + + src/hb-ot-shape.cc | 2 -- + test/shape/data/in-house/tests/automatic-fractions.tests | 4 ---- + 2 files changed, 6 deletions(-) + +commit f3e86937df345d7709de879af1d1a1502e84e1e9 +Author: David Corbett +Date: Sun Jul 30 08:28:23 2023 -0400 + + Require numerator and denominator in auto fraction + + src/hb-ot-shape.cc | 2 ++ + test/shape/data/in-house/tests/automatic-fractions.tests | 4 ++++ + 2 files changed, 6 insertions(+) + +commit 23838e5a2e7f5627d77fb85c50a0bfd9e004d6a8 +Author: Behdad Esfahbod +Date: Sat Jul 29 13:20:14 2023 -0600 + + [graph] Error handling + + src/graph/graph.hh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 04f4909257b2da56d76c24872075f6f655ae4438 +Author: Behdad Esfahbod +Date: Fri Jul 28 14:37:52 2023 -0600 + + [graph] Use a move instead of swap + + src/graph/graph.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 3bedb0eeed62aaab3c6be849480a54214a59715b +Author: Behdad Esfahbod +Date: Thu Jul 27 16:04:01 2023 -0600 + + [graph] Minor rename + + src/graph/graph.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit bb1f53c2540a1e45c18eb8fbe4935b9c4e4fefa8 +Author: Behdad Esfahbod +Date: Thu Jul 27 13:29:56 2023 -0600 + + [graph] Try fixing infinite loop found by CIFuzz under malloc fail + + src/graph/graph.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit db3314c1f860ee5cf68c81ccce5771b9b0366bca +Author: Behdad Esfahbod +Date: Thu Jul 27 13:20:32 2023 -0600 + + [graph] Minor space type change + + src/graph/graph.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 6a218eaeea3de3455825be63a099e6028c56508d +Merge: 45a0d65c6 6bb61708e +Author: Behdad Esfahbod +Date: Thu Jul 27 13:14:52 2023 -0600 + + Merge pull request #4343 from harfbuzz/graph-parents-map + + [graph] Use a hb_map_t to keep parents, instead of hb_vector_t + +commit 6bb61708ed2059abdbbb6eb7e8a9b721de64dd73 +Author: Behdad Esfahbod +Date: Thu Jul 27 13:02:55 2023 -0600 + + [graph] Try fixing bots + + src/graph/graph.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 1b5abb178197876d73584a4f51325323563b50dc +Author: Behdad Esfahbod +Date: Thu Jul 27 12:41:43 2023 -0600 + + [graph] Speed-up vertices having only one parent + + src/graph/graph.hh | 55 +++++++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 42 insertions(+), 13 deletions(-) + +commit f3d0b11d570eb790bb1ef5114f48fb59fbb260b6 +Author: Behdad Esfahbod +Date: Thu Jul 27 12:20:39 2023 -0600 + + [graph] Make parents private + + src/graph/graph.hh | 31 +++++++++++++++++++++---------- + 1 file changed, 21 insertions(+), 10 deletions(-) + +commit d3b997ee70e87d4e6b3e22ce99a21372c94d5a14 +Author: Behdad Esfahbod +Date: Wed Jul 26 15:39:14 2023 -0600 + + [graph] Use a hb_map_t to keep parents, instead of hb_vector_t + + In some fonts, for example Noto Duployan-Regular, nodes can + have over a thousand parents... Speeds up 10% subsetting. + + src/graph/classdef-graph.hh | 2 +- + src/graph/coverage-graph.hh | 2 +- + src/graph/graph.hh | 94 +++++++++++++++++++++++++++++---------------- + src/graph/gsubgpos-graph.hh | 6 +-- + src/graph/pairpos-graph.hh | 2 +- + 5 files changed, 66 insertions(+), 40 deletions(-) + +commit 45a0d65c6219c755245ea1df24b2e8d644420971 +Author: Qunxin Liu +Date: Thu Jul 27 09:06:02 2023 -0700 + + [instancer] cosmetic change + + src/hb-ot-var-common.hh | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit cb320d22228d366c06dd97d43bf06f7ad7afd5f2 +Author: Behdad Esfahbod +Date: Thu Jul 27 10:43:07 2023 -0600 + + Revert "[cff] Use float instead of double" + + This reverts commit c8f67ac28eb18e65adda75818e2c472ad3936874. + + Tests failing. + + src/hb-cff-interp-common.hh | 14 +++++++------- + src/hb-cff-interp-dict-common.hh | 4 ++-- + src/hb-cff2-interp-cs.hh | 8 ++++---- + src/hb-subset-cff2.cc | 6 +++--- + 4 files changed, 16 insertions(+), 16 deletions(-) + +commit c8f67ac28eb18e65adda75818e2c472ad3936874 +Author: Behdad Esfahbod +Date: Thu Jul 27 10:34:45 2023 -0600 + + [cff] Use float instead of double + + Reduces memory usage slightly. + + src/hb-cff-interp-common.hh | 14 +++++++------- + src/hb-cff-interp-dict-common.hh | 4 ++-- + src/hb-cff2-interp-cs.hh | 8 ++++---- + src/hb-subset-cff2.cc | 6 +++--- + 4 files changed, 16 insertions(+), 16 deletions(-) + +commit b36b100ef1c94012456c807167b2ac07443380ce +Author: Behdad Esfahbod +Date: Wed Jul 26 14:42:46 2023 -0600 + + [var] Remove byte_data_t; use hb_bytes_t + + Now that we have hopefully fixed the bug preventing hb_bytes_t + use, remove the hack. + + Ref. + 5690840ceb190341f9960d2b975c4366566ae86b + https://github.com/harfbuzz/harfbuzz/issues/4138 + + src/hb-ot-var-common.hh | 55 ++++++++++++++++--------------------------------- + 1 file changed, 18 insertions(+), 37 deletions(-) + +commit c25b8c06129d5abca2124a69a170b54dff215c41 +Merge: 5690840ce 5cab0709a +Author: Behdad Esfahbod +Date: Wed Jul 26 12:47:15 2023 -0600 + + Merge pull request #4335 from googlefonts/bug_fixes + + [instancer] support avar table, fix issues in STAT/fvar tables + +commit 5cab0709a4f7267a01eb6f254c02d8bbcb4832e6 +Author: Qunxin Liu +Date: Wed Jul 26 09:56:07 2023 -0700 + + [instancer] fix for missing to update tuple indices flag in operator += + + src/hb-ot-var-common.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 515f85d545debf3c769b6aa7aa8c90908ce2f7f6 +Author: Qunxin Liu +Date: Mon Jul 24 11:10:17 2023 -0700 + + [instancer] fix incorrect encoded_len + + src/hb-ot-var-common.hh | 1 + + 1 file changed, 1 insertion(+) + +commit bccdcf5b18861fbdb599189ab1dcb45e339b02b2 +Author: Qunxin Liu +Date: Fri Jul 21 10:17:43 2023 -0700 + + [instancer] fix a bug in compiling deltas_y for gvar + + src/hb-ot-var-common.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit 5690840ceb190341f9960d2b975c4366566ae86b +Author: Behdad Esfahbod +Date: Wed Jul 26 09:53:32 2023 -0600 + + [map] Another try at fixing archaic clang + + Fixes (?) https://github.com/harfbuzz/harfbuzz/issues/4138 + + src/hb-map.hh | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit a3b18062b7b19345f8c2818669d3d08f678d0bce +Author: Behdad Esfahbod +Date: Tue Jul 25 11:11:07 2023 -0600 + + [trak] Fix a couple return values + + src/hb-aat-layout-trak-table.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 62e6f7835c1e2520108bba2e3b6ded43f93339bc +Author: Behdad Esfahbod +Date: Tue Jul 25 08:32:21 2023 -0600 + + [Cursive] round + + src/OT/Layout/GPOS/CursivePosFormat1.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 60db142784bb145426e4a02635bbad4f2f260d16 +Author: Behdad Esfahbod +Date: Mon Jul 24 20:49:32 2023 -0600 + + [layout] Remove unused "max-size" cruft + + src/OT/Layout/GPOS/PairValueRecord.hh | 1 - + src/OT/Layout/GSUB/Ligature.hh | 1 - + src/hb-machinery.hh | 5 ----- + src/hb-null.hh | 9 --------- + src/hb-open-type.hh | 30 ------------------------------ + src/hb-ot-layout-gsubgpos.hh | 2 -- + 6 files changed, 48 deletions(-) + +commit 8eb7889fd4cd03f84c78eb84514e05927fb6bd2c +Author: Behdad Esfahbod +Date: Mon Jul 24 20:31:12 2023 -0600 + + Add max-size to static-size objects + + src/hb-machinery.hh | 1 + + 1 file changed, 1 insertion(+) + +commit e322949b9b94b3d28d952d0b7f337abb4b05c1fb +Author: Behdad Esfahbod +Date: Mon Jul 24 20:28:37 2023 -0600 + + [ArrayOf] Remove fast-path for offset to max-sized objects + + Fixes timeout https://oss-fuzz.com/testcase-detail/6153196517851136 + + src/hb-open-type.hh | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +commit 9ffea6328e71fbaea159116e609d3b0c005564a8 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Jul 24 10:37:25 2023 +0000 + + Bump github/codeql-action from 2.20.4 to 2.21.0 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.20.4 to 2.21.0. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/489225d82a57396c6f426a40e66d461b16b3461d...1813ca74c3faaa3a2da2070b9b8a0b3e7373a0d8) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 1a267f22ff3a608e5a8370224557268b0504f857 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Jul 24 11:01:01 2023 +0000 + + Bump fonttools from 4.41.0 to 4.41.1 in /.ci + + Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.41.0 to 4.41.1. + - [Release notes](https://github.com/fonttools/fonttools/releases) + - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst) + - [Commits](https://github.com/fonttools/fonttools/compare/4.41.0...4.41.1) + + --- + updated-dependencies: + - dependency-name: fonttools + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements-fonttools.txt | 70 +++++++++++++++++++++--------------------- + .ci/requirements.txt | 70 +++++++++++++++++++++--------------------- + 2 files changed, 70 insertions(+), 70 deletions(-) + +commit ca7e7e925b920ee54a0d0ad256f4a7daa0763684 +Author: Nikolaus Waxweiler +Date: Sun Jul 23 22:20:09 2023 +0100 + + Fix wasm-micro-runtime build instructions + + docs/wasm-shaper.md | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +commit a32278acd89a5e29774c7a03b0d11b669cfbb3fc +Author: Nikolaus Waxweiler +Date: Sun Jul 23 22:19:51 2023 +0100 + + Fix example code + + docs/wasm-shaper.md | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 55f41e287f8ff846584269cb0dbbc730402cab75 +Author: Behdad Esfahbod +Date: Fri Jul 21 12:10:46 2023 -0600 + + [perf] Add duployan.txt + + From https://kaltashwawa.ca/2022/01/20/lovecraft-in-chinook-puspus-kopa-ulthar-tawn/ + + perf/texts/duployan.txt | 27 +++++++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +commit c91899be14c82ae3d27c4cba2a1b920b6989a4f7 +Author: Behdad Esfahbod +Date: Fri Jul 21 11:43:47 2023 -0600 + + [gdef] Use set-digest for mark-filterint-sets + + Speeds up Noto Duployan-Regular.otf by 45% percent! + + src/OT/Layout/GDEF/GDEF.hh | 33 +++++++++++++++++++++++++++++++++ + src/hb-null.hh | 2 +- + src/hb-ot-layout-gsubgpos.hh | 2 +- + 3 files changed, 35 insertions(+), 2 deletions(-) + +commit e8948a4e86902202005193f5859980e6602ff2b4 +Author: Behdad Esfahbod +Date: Thu Jul 20 22:12:53 2023 -0600 + + [gsubgpos] Fix optimization + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4336 + + src/hb-ot-layout-gsubgpos.hh | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +commit 36c7ec443b9e5881502f2056331abb6c8508db28 +Author: Behdad Esfahbod +Date: Thu Jul 20 18:56:46 2023 -0600 + + [sanitize] Simplify a return + + src/hb-sanitize.hh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 13f05ab9b39202aed98923b8ed0488b344e88a6f +Author: Qunxin Liu +Date: Thu Jul 20 09:57:02 2023 -0700 + + [instancer] support avar table partial instancing + + src/hb-ot-var-avar-table.hh | 164 ++++++++++++++++++++++++++++++++++++++++++++ + src/hb-subset-input.cc | 1 - + src/hb-subset.cc | 4 ++ + 3 files changed, 168 insertions(+), 1 deletion(-) + +commit 837885f0fabdd99f7c804adbb449d1eab67401a8 +Author: Behdad Esfahbod +Date: Thu Jul 20 12:58:16 2023 -0600 + + Revert "[sanitize/Coverage] Keep a map of sane coverages" + + This reverts commit a689114898cc3e8f1c6ba7cc49cd6c3639d91250. + + src/OT/Layout/Common/Coverage.hh | 22 +++++----------------- + src/hb-sanitize.hh | 3 --- + 2 files changed, 5 insertions(+), 20 deletions(-) + +commit 0ab906715e51859f5c88bae2a9e7611e3c251bec +Author: Behdad Esfahbod +Date: Thu Jul 20 12:57:16 2023 -0600 + + [sanitize/Coverage] Keep a map of sane coverages + + Fonts like Gulzar reuse the same coverage over a thousand times + sometimes. + + However, this doesn't speed up sanitize unfortunately. Looks + like calling Coverage::sanitize() is already very fast. We're + just doing A LOT of it. + + The map slowed it down in fact. A set was even slower. + + Going to revert. + + src/OT/Layout/Common/Coverage.hh | 22 +++++++++++++++++----- + src/hb-sanitize.hh | 3 +++ + 2 files changed, 20 insertions(+), 5 deletions(-) + +commit 7de2f515a0792048556078a0860c940a1ee32739 +Author: Behdad Esfahbod +Date: Thu Jul 20 12:46:54 2023 -0600 + + [set] Remove dependency on hb-machinery.hh + + src/hb-bit-set.hh | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +commit e8de5cb08f209ce3901c53e86eade2238e0fb894 +Author: Behdad Esfahbod +Date: Thu Jul 20 11:31:13 2023 -0600 + + [gsubgpos] Use a couple variables + + src/hb-ot-layout-gsubgpos.hh | 30 ++++++++++++++++++------------ + 1 file changed, 18 insertions(+), 12 deletions(-) + +commit 0ccd61a3b2ff0d94a9c72fe3ce965221ef6a7d5b +Author: Behdad Esfahbod +Date: Wed Jul 19 16:42:30 2023 -0600 + + [gsubgpos] Micro-optimize + + src/hb-ot-layout-gsubgpos.hh | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit b01c165034ebd26cc6d76301a6a272a813d42526 +Author: Behdad Esfahbod +Date: Wed Jul 19 16:35:10 2023 -0600 + + [gsubgpos] Minor error handling + + src/hb-ot-layout-gsubgpos.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit ee5f200bf1a61f43538e36716ba96cd229ebb1ba +Author: Behdad Esfahbod +Date: Wed Jul 19 12:26:50 2023 -0600 + + [gsubgpos] Remove un unnecessary variable + + src/hb-ot-layout-gsubgpos.hh | 20 ++++---------------- + 1 file changed, 4 insertions(+), 16 deletions(-) + +commit a0bb2d3a9b107d45d1f5f4e2ce27a0cbd46710ed +Author: Qunxin Liu +Date: Wed Jul 19 11:21:01 2023 -0700 + + [instancer] support STAT table for all instancing operations + + src/hb-subset.cc | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit 42c6a3a18a7d9106e0daf063371a1ba00543f73b +Author: Behdad Esfahbod +Date: Wed Jul 19 12:07:19 2023 -0600 + + [gsubgpos] Remove unnecessary condition + + Second is always set in this branch. + + src/hb-ot-layout-gsubgpos.hh | 14 ++++---------- + 1 file changed, 4 insertions(+), 10 deletions(-) + +commit b5de54e1d49701073c1a9356c5e689e135cd8aec +Author: Behdad Esfahbod +Date: Wed Jul 19 11:19:06 2023 -0600 + + [gsubgpos] Also match second component in (Chain)RuleSet::apply() + + Another 40% speedup in shaping Gulzar-Regular. + + src/hb-ot-layout-gsubgpos.hh | 98 +++++++++++++++++++++++++++++++++----------- + 1 file changed, 75 insertions(+), 23 deletions(-) + +commit 73d94dbde35f5e01014f7858730e7d60b369aefd +Author: Qunxin Liu +Date: Wed Jul 19 10:33:57 2023 -0700 + + [instancer] bug fixes in fvar: add missing instanceCount, update axis limit + + src/hb-ot-var-fvar-table.hh | 35 ++++++++++++++++++++++++++++------- + 1 file changed, 28 insertions(+), 7 deletions(-) + +commit 02b00d774368bb82b97348436b0620b9ffe1bf0f +Author: Richard Dodd (dodj) +Date: Wed Jul 19 11:22:07 2023 +0100 + + Update wasm-shaper.md (just a small typo) + + docs/wasm-shaper.md | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 730f579f68c9062b0f493d400f445946f2ee032d +Author: Qunxin Liu +Date: Tue Jul 18 15:09:36 2023 -0700 + + [instancer] store float value rather than F2DOT14 int value in axes_location map + + src/hb-ot-layout-common.hh | 19 +++++++++++-------- + src/hb-subset-plan.cc | 6 +++--- + 2 files changed, 14 insertions(+), 11 deletions(-) + +commit efbd257a325fedcf9000a9cccbf2d97d38769b98 +Author: Qunxin Liu +Date: Tue Jul 18 14:50:32 2023 -0700 + + [instancer] memory leak fix in cvar + + src/hb-ot-var-cvar-table.hh | 1 + + 1 file changed, 1 insertion(+) + +commit a9e9279bee736d45eb58931ff7a363932e548090 +Merge: aa381ae96 5ee015ecf +Author: Behdad Esfahbod +Date: Tue Jul 18 12:24:17 2023 -0600 + + Merge pull request #4329 from googlefonts/instancer_solver_fix + + port instancer solver normalizeValue fixes from fonttools + +commit aa381ae963fedadc227afcc154e3cf95d9aa84c1 +Author: Behdad Esfahbod +Date: Tue Jul 18 10:42:13 2023 -0600 + + [ReverseChain] Remove SIZE_MAX + + Oops. Can't set it since the struct has offsets. + + src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh | 1 - + 1 file changed, 1 deletion(-) + +commit e583c9e904d3825b6f6e7a2996d555d16c67753b +Author: Behdad Esfahbod +Date: Tue Jul 18 10:34:26 2023 -0600 + + [ReverseChain] Add max-size + + src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh | 1 + + 1 file changed, 1 insertion(+) + +commit 7a2f9dcfb9cd892191f295c8fd9ca39d6675d9ed +Author: Behdad Esfahbod +Date: Tue Jul 18 04:36:15 2023 -0600 + + [matcher] Move initializers inline + + src/hb-ot-layout-gsubgpos.hh | 26 ++++++++------------------ + 1 file changed, 8 insertions(+), 18 deletions(-) + +commit 5ee015ecf60aac27ea3cd6309b1b1fb3c3566196 +Author: Qunxin Liu +Date: Mon Jul 17 13:54:34 2023 -0700 + + [instancer-solver] remove unused normalizeValue() code + + src/hb-subset-instancer-solver.cc | 30 ------------------------------ + 1 file changed, 30 deletions(-) + +commit 6c25c752f608dfaa0b153b4c62bd96225c670080 +Author: Qunxin Liu +Date: Mon Jul 17 13:47:38 2023 -0700 + + [instancer] use renormalized values when instantiating Condition table + + src/hb-ot-layout-common.hh | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +commit 73ce3015bbaa04ce5a2a9da358e3695c7db10c44 +Author: Qunxin Liu +Date: Mon Jul 17 13:46:57 2023 -0700 + + [instancer-solver] port optimization and more tests from fonttools + + src/hb-subset-instancer-solver.cc | 5 ++--- + src/test-subset-instancer-solver.cc | 19 +++++++++++++++++++ + 2 files changed, 21 insertions(+), 3 deletions(-) + +commit 350423df8d7bc3c87b030c6304c9611136e60e68 +Author: Qunxin Liu +Date: Mon Jul 17 11:10:19 2023 -0700 + + [instancer-solver] fix tests + + src/test-subset-instancer-solver.cc | 59 +++++++++++++++++++------------------ + src/test-tuple-varstore.cc | 5 +++- + 2 files changed, 34 insertions(+), 30 deletions(-) + +commit 12be4cb184c6600f26285f8a56b9b27b80931f22 +Author: Qunxin Liu +Date: Mon Jul 17 11:08:54 2023 -0700 + + [instancer-solver] fix APIs calling rebase_tent() with TripleDistances + + src/hb-ot-var-common.hh | 21 ++++++++++++++------- + src/hb-ot-var-cvar-table.hh | 2 +- + 2 files changed, 15 insertions(+), 8 deletions(-) + +commit 165f3e60ace3a086a3d5741146da83d2c82a409b +Author: Qunxin Liu +Date: Mon Jul 17 09:46:03 2023 -0700 + + [instancer-solver] add renormalizeValue() and store axis->distances map + + src/hb-ot-var-fvar-table.hh | 7 +++++++ + src/hb-subset-instancer-solver.cc | 43 +++++++++++++++++++++++++++++++++++++-- + src/hb-subset-instancer-solver.hh | 24 +++++++++++++++++++++- + src/hb-subset-plan-member-list.hh | 2 ++ + src/hb-subset-plan.cc | 12 ++++++----- + 5 files changed, 80 insertions(+), 8 deletions(-) + +commit d92a7a58d83952782d2cf54391e129a09c4b306d +Author: Behdad Esfahbod +Date: Mon Jul 17 11:27:38 2023 -0600 + + [gsubgpos] Inline a couple functions + + Produces smaller code. + + src/hb-ot-layout-gsubgpos.hh | 34 ++++++++++++++++++---------------- + 1 file changed, 18 insertions(+), 16 deletions(-) + +commit 4ea3737d04c575cd9b6ffda1e4e0f2c9d2b60d9c +Author: Behdad Esfahbod +Date: Mon Jul 17 09:50:28 2023 -0600 + + [gsubgpos] Add fast-path for end-of-string in (Chain)RuleSet::apply() + + src/hb-ot-layout-gsubgpos.hh | 26 ++++++++++++++++++++++++-- + 1 file changed, 24 insertions(+), 2 deletions(-) + +commit e7ce633946e40e3f753880e8cfd4b86a51a878be +Author: Behdad Esfahbod +Date: Mon Jul 17 08:52:12 2023 -0600 + + [algs] Fix -Wcomma errors + + Fixes https://github.com/harfbuzz/harfbuzz/issues/4328 + + src/hb-algs.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit af095d90e3ecd602feefad529ceaf6ee126103ac +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Jul 17 10:22:42 2023 +0000 + + Bump github/codeql-action from 2.20.3 to 2.20.4 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.20.3 to 2.20.4. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/46ed16ded91731b2df79a2893d3aea8e9f03b5c4...489225d82a57396c6f426a40e66d461b16b3461d) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/scorecard.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit b031bbde94c962b287528402985e2c8a8f4b83b5 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Jul 17 10:22:45 2023 +0000 + + Bump actions/setup-python from 4.6.1 to 4.7.0 + + Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.6.1 to 4.7.0. + - [Release notes](https://github.com/actions/setup-python/releases) + - [Commits](https://github.com/actions/setup-python/compare/bd6b4b6205c4dbad673328db7b31b7fab9e241c0...61a6322f88396a6271a6ee3565807d608ecaddd1) + + --- + updated-dependencies: + - dependency-name: actions/setup-python + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .github/workflows/msvc-ci.yml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ae8fea081a09d478986427d4861c74eb0b9582d0 +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Jul 17 10:28:35 2023 +0000 + + Bump fonttools from 4.40.0 to 4.41.0 in /.ci + + Bumps [fonttools](https://github.com/fonttools/fonttools) from 4.40.0 to 4.41.0. + - [Release notes](https://github.com/fonttools/fonttools/releases) + - [Changelog](https://github.com/fonttools/fonttools/blob/main/NEWS.rst) + - [Commits](https://github.com/fonttools/fonttools/compare/4.40.0...4.41.0) + + --- + updated-dependencies: + - dependency-name: fonttools + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements-fonttools.txt | 72 +++++++++++++++++++++--------------------- + .ci/requirements.txt | 70 ++++++++++++++++++++-------------------- + 2 files changed, 71 insertions(+), 71 deletions(-) + +commit da84a078ee89d3d9cbd2a030722d01ee85f1bcde +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Mon Jul 17 10:28:55 2023 +0000 + + Bump meson from 1.1.1 to 1.2.0 in /.ci + + Bumps [meson](https://github.com/mesonbuild/meson) from 1.1.1 to 1.2.0. + - [Release notes](https://github.com/mesonbuild/meson/releases) + - [Commits](https://github.com/mesonbuild/meson/compare/1.1.1...1.2.0) + + --- + updated-dependencies: + - dependency-name: meson + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + + .ci/requirements.in | 2 +- + .ci/requirements.txt | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +commit 49730531097cb0b29b6435fa62d10e5060852388 +Author: Behdad Esfahbod +Date: Sun Jul 16 13:09:49 2023 -0600 + + Config + + src/OT/Layout/GSUB/LigatureSet.hh | 4 ++-- + src/hb-config.hh | 2 +- + src/hb-ot-layout-gsubgpos.hh | 8 ++++++-- + 3 files changed, 9 insertions(+), 5 deletions(-) + +commit 645fabd1013e94693f6da2d4263b0edd3b0b014d +Author: Behdad Esfahbod +Date: Sun Jul 16 11:36:59 2023 -0600 + + [gsubgpos] Vastly speed up ChainRuleSet / RuleSet matching + + Match the first component in a fast loop. + + Idea replicated from LigatureSet. + + Speeds up Gulzar shaping by 22%! + 37% in NotoNastaliqUrdu! + + src/OT/Layout/GSUB/LigatureSet.hh | 4 +- + src/hb-ot-layout-gsubgpos.hh | 82 +++++++++++++++++++++++++++++++++++---- + 2 files changed, 77 insertions(+), 9 deletions(-) + +commit 77080f86f85744600a052e4f10bea50f331c44b0 +Author: Behdad Esfahbod +Date: Sun Jul 16 11:26:32 2023 -0600 + + . + + src/OT/Layout/GSUB/LigatureSet.hh | 7 +--- + src/hb-ot-layout-gsubgpos.hh | 84 +++++++++++++++++++++++++++++++++++---- + 2 files changed, 79 insertions(+), 12 deletions(-) + +commit 5c8f3b7fec330897d66bf72559aa2ac26862ae99 +Author: Behdad Esfahbod +Date: Sun Jul 16 09:39:18 2023 -0600 + + [gsubgpos] Conditionally cache backtrack again + + src/hb-ot-layout-gsubgpos.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 52237eb1fe6a53de649917ec64382adac89f8e54 +Author: Behdad Esfahbod +Date: Sun Jul 16 09:07:25 2023 -0600 + + [ChainContext] More caching + + src/hb-ot-layout-gsubgpos.hh | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +commit 62e10c9fa0fce0b4798ccc13640f9fe85206f227 +Author: Behdad Esfahbod +Date: Sun Jul 16 08:43:18 2023 -0600 + + Revert "[gsubgpos] Allocate iterators further up" + + This reverts commit b9f364b8fcacf8ab32d0272190d8509f214e55f2. + + src/OT/Layout/GSUB/Ligature.hh | 5 +- + .../Layout/GSUB/ReverseChainSingleSubstFormat1.hh | 8 +- + src/hb-ot-layout-gsubgpos.hh | 117 +++++++++------------ + 3 files changed, 55 insertions(+), 75 deletions(-) + +commit b9f364b8fcacf8ab32d0272190d8509f214e55f2 +Author: Behdad Esfahbod +Date: Sun Jul 16 08:42:36 2023 -0600 + + [gsubgpos] Allocate iterators further up + + To avoid calling set_match_func repeatedly. + + Doesn't show speedup. Going to revert. + + src/OT/Layout/GSUB/Ligature.hh | 5 +- + .../Layout/GSUB/ReverseChainSingleSubstFormat1.hh | 8 +- + src/hb-ot-layout-gsubgpos.hh | 117 ++++++++++++--------- + 3 files changed, 75 insertions(+), 55 deletions(-) + +commit c2f454c7e2e8f05636cfbf76f5e6b3dc3919378d +Author: Behdad Esfahbod +Date: Sun Jul 16 08:23:59 2023 -0600 + + [gsubgpos] Fix residual from 5af80f349c4e040bfa853ee3f561ac16538b5988 + + src/hb-ot-layout-gsubgpos.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 4e641103d40b5ada7f77dba3b6f0891de60388bb +Author: Behdad Esfahbod +Date: Sun Jul 16 07:40:20 2023 -0600 + + [buffer] Inline a method + + src/hb-buffer.hh | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 5af80f349c4e040bfa853ee3f561ac16538b5988 +Author: Behdad Esfahbod +Date: Sun Jul 16 07:27:28 2023 -0600 + + [ChainContext] Cache two class values + + 7% speedup shaping Gulzar. + + src/hb-ot-layout-gsubgpos.hh | 38 ++++++++++++++++++++++++++------------ + 1 file changed, 26 insertions(+), 12 deletions(-) + +commit 8cde4fa9a0e8cb6e42770a2ff7da158f2914cdb2 +Author: Behdad Esfahbod +Date: Sun Jul 16 06:01:06 2023 -0600 + + [gsubgpos] Inline a couple methods + + src/hb-ot-layout-gsubgpos.hh | 2 ++ + 1 file changed, 2 insertions(+) + +commit f94508edd60e26a015586c37c29104d6bdc26462 +Author: Behdad Esfahbod +Date: Sat Jul 15 15:28:19 2023 -0600 + + [Ligature] Micro-optimize + + src/OT/Layout/GSUB/LigatureSet.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 76de3451e68168912bfd4b1a500ddbc45200b706 +Author: Behdad Esfahbod +Date: Sat Jul 15 15:00:23 2023 -0600 + + [ot-shape] Short-circuit spaces as well + + src/hb-ot-shape.cc | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 765da4db1949b88eff921eb1b909dc4054e55f37 +Author: Behdad Esfahbod +Date: Sat Jul 15 14:55:36 2023 -0600 + + [ot-shape] Minor short-circuit + + src/hb-ot-shape.cc | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit 7b8e0bbb9f41561c2ee29a2868de9d7d155c9194 +Author: Behdad Esfahbod +Date: Sat Jul 15 14:53:15 2023 -0600 + + [ot-shape] Minor short-circuit + + src/hb-ot-shape.cc | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +commit b2d648e41b5f963fdfe37536467c03c02cd99d2f +Author: Behdad Esfahbod +Date: Sat Jul 15 14:26:06 2023 -0600 + + [perf/benchmark-subset] Rename subset_codepoints to subset_unicodes + + perf/benchmark-subset.cc | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +commit a56288488c70036832414145c64ce9e42d7464a6 +Author: Behdad Esfahbod +Date: Sat Jul 15 13:59:10 2023 -0600 + + [subset] Speed up a couple of set iteration loops + + Need to speed up set::next_range() for the second one to have + any effect. + + src/hb-ot-layout-common.hh | 11 ++++++++++- + src/hb-subset-plan.cc | 9 ++++++--- + 2 files changed, 16 insertions(+), 4 deletions(-) + +commit 326d319f93fe6173344602929fdbb5ba27412388 +Author: Behdad Esfahbod +Date: Sat Jul 15 13:14:34 2023 -0600 + + [graph] Micro-optimize + + src/graph/graph.hh | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +commit 548230e45e0bc9fa985d80714ede4c39a347d508 +Author: Behdad Esfahbod +Date: Sat Jul 15 13:13:16 2023 -0600 + + [graph] Early return from a function + + src/graph/graph.hh | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +commit 09706b04fce2afe42cade4cbf1b36db23edde94c +Author: Behdad Esfahbod +Date: Sat Jul 15 13:11:04 2023 -0600 + + [graph] Add a pre-alloc to map + + src/graph/graph.hh | 1 + + 1 file changed, 1 insertion(+) + +commit d1ddfc4d10e169c7fdd6187b38dd7a14f59e1def +Author: Behdad Esfahbod +Date: Fri Jul 14 14:52:43 2023 -0600 + + [graph] Use move instead of swap + + src/graph/graph.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 07cb6bf87af604dcc1a025257aea43c9e991c065 +Author: Behdad Esfahbod +Date: Fri Jul 14 13:38:33 2023 -0600 + + [graph] Minor, type + + src/graph/graph.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 867640af31e8f88d65cd72a2c7f86f4632b98539 +Author: Behdad Esfahbod +Date: Fri Jul 14 13:09:16 2023 -0600 + + Revert "[set] Add test_and_add / test_and_del" + + This reverts commit de1237fbf2660b5952dde4db171a62d9b1a77c92. + + This seems to be a net loss. + + src/graph/graph.hh | 17 ++++++++++++----- + src/hb-bit-page.hh | 25 ------------------------- + src/hb-bit-set-invertible.hh | 2 -- + src/hb-bit-set.hh | 16 ---------------- + src/hb-set.hh | 2 -- + 5 files changed, 12 insertions(+), 50 deletions(-) + +commit 10b776b0c3afeefa19ec47c40196cf205a112c8b +Author: Behdad Esfahbod +Date: Fri Jul 14 13:08:19 2023 -0600 + + [graph] Micro-optimize + + src/graph/graph.hh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit de1237fbf2660b5952dde4db171a62d9b1a77c92 +Author: Behdad Esfahbod +Date: Fri Jul 14 12:38:56 2023 -0600 + + [set] Add test_and_add / test_and_del + + Use in graph. + + src/graph/graph.hh | 17 +++++------------ + src/hb-bit-page.hh | 25 +++++++++++++++++++++++++ + src/hb-bit-set-invertible.hh | 2 ++ + src/hb-bit-set.hh | 16 ++++++++++++++++ + src/hb-set.hh | 2 ++ + 5 files changed, 50 insertions(+), 12 deletions(-) + +commit 7f1ff9c8819edc9cdb2e48cfc4042e38a05777a9 +Author: Behdad Esfahbod +Date: Fri Jul 14 12:22:24 2023 -0600 + + [graph] Micro-optimize array access + + src/graph/graph.hh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +commit d9cf9b5f071c77b385d92d4740d5fd053cf6f8c7 +Author: Behdad Esfahbod +Date: Fri Jul 14 12:19:10 2023 -0600 + + [priority-queue] Inline insert() + + src/hb-priority-queue.hh | 4 ++++ + 1 file changed, 4 insertions(+) + +commit d00b88737e0a704d2af3b6539592dd9bb33a4722 +Author: Behdad Esfahbod +Date: Fri Jul 14 11:26:51 2023 -0600 + + Revert "[subset/closure] Batch recursions in scheduled stages" + + This reverts commit f2aaeeb3016e10bf91c251296391a381d5fc6385. + + src/hb-ot-layout-gsub-table.hh | 9 ++------- + src/hb-ot-layout-gsubgpos.hh | 15 --------------- + 2 files changed, 2 insertions(+), 22 deletions(-) + +commit 5e42f7bb6d025f14955e60c94ea08aca472e08dd +Author: Behdad Esfahbod +Date: Fri Jul 14 11:26:38 2023 -0600 + + Revert "Revert "[priority-queue] Inline a couple more"" + + This reverts commit 915410e5267cba5bfc6154548c8856ae077bfefe. + + Mistake. + + src/hb-priority-queue.hh | 3 +++ + 1 file changed, 3 insertions(+) + +commit 915410e5267cba5bfc6154548c8856ae077bfefe +Author: Behdad Esfahbod +Date: Fri Jul 14 11:18:09 2023 -0600 + + Revert "[priority-queue] Inline a couple more" + + This reverts commit 8704d73213da2294281687ecd7a40d408e9bf26a. + + src/hb-priority-queue.hh | 3 --- + 1 file changed, 3 deletions(-) + +commit f2aaeeb3016e10bf91c251296391a381d5fc6385 +Author: Behdad Esfahbod +Date: Fri Jul 14 11:17:37 2023 -0600 + + [subset/closure] Batch recursions in scheduled stages + + Going to revert. Doesn't pass tests and savings are minor. + + src/hb-ot-layout-gsub-table.hh | 9 +++++++-- + src/hb-ot-layout-gsubgpos.hh | 15 +++++++++++++++ + 2 files changed, 22 insertions(+), 2 deletions(-) + +commit 5a65ede5d43711098982995c4d2d6cd7f8eecad1 +Author: Khaled Hosny +Date: Wed Jul 12 10:18:31 2023 +0300 + + Minor + + NEWS | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + commit d160d9389cb4c5b15ebea9b41eb74018c4358924 Author: Khaled Hosny Date: Wed Jul 12 08:27:25 2023 +0300 diff -Nru harfbuzz-8.0.1/INSTALL harfbuzz-8.3.0/INSTALL --- harfbuzz-8.0.1/INSTALL 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/INSTALL 2023-11-11 14:09:18.000000000 +0000 @@ -1,8 +1,8 @@ Installation Instructions ************************* - Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software -Foundation, Inc. + Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free +Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -225,7 +225,7 @@ and if that doesn't work, install pre-built binaries of GCC for HP-UX. - HP-UX 'make' updates targets which have the same time stamps as their + HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. diff -Nru harfbuzz-8.0.1/Makefile.am harfbuzz-8.3.0/Makefile.am --- harfbuzz-8.0.1/Makefile.am 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/Makefile.am 2023-11-11 14:08:45.000000000 +0000 @@ -26,6 +26,7 @@ subprojects/ragel.wrap \ subprojects/packagefiles/ragel/meson.build \ mingw-configure.sh \ + xkcd.png \ $(NULL) MAINTAINERCLEANFILES = \ diff -Nru harfbuzz-8.0.1/Makefile.in harfbuzz-8.3.0/Makefile.in --- harfbuzz-8.0.1/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -143,8 +143,8 @@ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ - $(LISP)config.h.in +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ + config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. @@ -161,9 +161,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README THANKS ar-lib compile \ @@ -206,6 +203,8 @@ GZIP_ENV = --best DIST_ARCHIVES = $(distdir).tar.xz DIST_TARGETS = dist-xz +# Exists only to be overridden by the user if desired. +AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' @@ -237,6 +236,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -251,6 +252,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -424,6 +426,7 @@ subprojects/ragel.wrap \ subprojects/packagefiles/ragel/meson.build \ mingw-configure.sh \ + xkcd.png \ $(NULL) MAINTAINERCLEANFILES = \ @@ -622,7 +625,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am @@ -714,6 +716,10 @@ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) +dist-zstd: distdir + tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst + $(am__post_remove_distdir) + dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @@ -756,6 +762,8 @@ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ + *.tar.zst*) \ + zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) @@ -771,7 +779,7 @@ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ @@ -934,7 +942,7 @@ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ - dist-tarZ dist-xz dist-zip distcheck distclean \ + dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ diff -Nru harfbuzz-8.0.1/NEWS harfbuzz-8.3.0/NEWS --- harfbuzz-8.0.1/NEWS 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/NEWS 2023-11-11 14:08:45.000000000 +0000 @@ -1,12 +1,81 @@ +Overview of changes leading to 8.3.0 +Saturday, November 11, 2023 +==================================== +- Improve memory barrier to fix potential segfaults. +- Various build fixes. +- Various subsetting and instancing fixes. +- Rename “hb-subset” option “--instance” to “--variations” to match the other + tools. Old option is kept as an alias. + +- New API: +HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION + +- Deprecated API: +HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION + +Overview of changes leading to 8.2.2 +Wednesday, October 18, 2023 +“From the river to the sea, Palestine will be free” +==================================== +- Fix regression from 8.1.0 in shaping fonts with duplicate feature tags. +- Fix regression from 8.2.0 in parsing CSS-style feature strings. +- Variable fonts instanciation now handles more tables. +- Various CMake build improvements. +- various fixes to build without errors with gcc 4.9.2. + + +Overview of changes leading to 8.2.1 +Monday, September 18, 2023 +==================================== +- Unicode 15.1 support. + + +Overview of changes leading to 8.2.0 +Friday, September 8, 2023 +==================================== +- Various build and fuzzing fixes +- Improvements to COLRv1 painting. + +- New API: ++hb_paint_color_glyph_func_t ++hb_paint_funcs_set_color_glyph_func ++hb_paint_color_glyph + + +Overview of changes leading to 8.1.1 +Wednesday, August 2, 2023 +==================================== +- Fix shaping of contextual rules at the end of string, introduced in 8.1.0 +- Fix stack-overflow in repacker with malicious fonts. +- 30% speed up loading Noto Duployan font. + + +Overview of changes leading to 8.1.0 +Tuesday, August 1, 2023 +==================================== +- Fix long-standing build issue with the AIX compiler and older Apple clang. + +- Revert optimization that could cause timeout during subsetting with malicious fonts. + +- More optimization work: + - 45% speed up in shaping Noto Duployan font. + - 10% speed up in subsetting Noto Duployan font. + - Another 8% speed up in shaping Gulzar. + - 5% speed up in loading Roboto. + +- New API: ++hb_ot_layout_collect_features_map() + + Overview of changes leading to 8.0.1 Wednesday, July 12, 2023 ==================================== -- Build fix on 32-bit arm. +- Build fix on 32-bit ARM. - More speed optimizations: - - 60% speedup in retaingids subsetting SourceHanSans-VF. - - 38% speed up in subsetting (beyond-64k) mega-merged Noto. + - 60% speed up in retain-gid (used for IFT) subsetting of SourceHanSans-VF. - 16% speed up in retain-gid (used for IFT) subsetting of NotoSansCJKkr. + - 38% speed up in subsetting (beyond-64k) mega-merged Noto. Overview of changes leading to 8.0.0 @@ -21,7 +90,7 @@ For example fonts making use of the WASM shaper, see: - https://github.com/simoncozens/wasm-examples + https://github.com/harfbuzz/harfbuzz-wasm-examples - Improvements to Experimental features introduced in earlier releases: - Support for subsetting beyond-64k and VarComposites fonts. diff -Nru harfbuzz-8.0.1/README harfbuzz-8.3.0/README --- harfbuzz-8.0.1/README 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/README 2023-11-11 14:08:45.000000000 +0000 @@ -12,8 +12,11 @@ HarfBuzz is a text shaping engine. It primarily supports [OpenType][1], but also [Apple Advanced Typography][2]. HarfBuzz is used in Android, Chrome, -ChromeOS, Firefox, GNOME, GTK+, KDE, LibreOffice, OpenJDK, PlayStation, Qt, -XeTeX, and other places. +ChromeOS, Firefox, GNOME, GTK+, KDE, Qt, LibreOffice, OpenJDK, XeTeX, +PlayStation, Microsoft Edge, Adobe Photoshop, Illustrator, InDesign, +Godot Engine, and other places. + +[![xkcd-derived image](xkcd.png)](https://xkcd.com/2347/) For bug reports, mailing list, and other information please visit: @@ -28,8 +31,8 @@ ## Download For tarball releases of HarfBuzz, look [here][3]. At the same place you -will also find Win32/Win64 binary bundles that include libharfbuzz DLL, -hb-view.exe, hb-shape.exe, and all dependencies. +will also find Win32/Win64 binary bundles that include `libharfbuzz` DLL, +`hb-view.exe`, `hb-shape.exe`, and all dependencies. The canonical source tree is available on [github][4]. diff -Nru harfbuzz-8.0.1/README.md harfbuzz-8.3.0/README.md --- harfbuzz-8.0.1/README.md 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/README.md 2023-11-11 14:08:45.000000000 +0000 @@ -12,8 +12,11 @@ HarfBuzz is a text shaping engine. It primarily supports [OpenType][1], but also [Apple Advanced Typography][2]. HarfBuzz is used in Android, Chrome, -ChromeOS, Firefox, GNOME, GTK+, KDE, LibreOffice, OpenJDK, PlayStation, Qt, -XeTeX, and other places. +ChromeOS, Firefox, GNOME, GTK+, KDE, Qt, LibreOffice, OpenJDK, XeTeX, +PlayStation, Microsoft Edge, Adobe Photoshop, Illustrator, InDesign, +Godot Engine, and other places. + +[![xkcd-derived image](xkcd.png)](https://xkcd.com/2347/) For bug reports, mailing list, and other information please visit: @@ -28,8 +31,8 @@ ## Download For tarball releases of HarfBuzz, look [here][3]. At the same place you -will also find Win32/Win64 binary bundles that include libharfbuzz DLL, -hb-view.exe, hb-shape.exe, and all dependencies. +will also find Win32/Win64 binary bundles that include `libharfbuzz` DLL, +`hb-view.exe`, `hb-shape.exe`, and all dependencies. The canonical source tree is available on [github][4]. diff -Nru harfbuzz-8.0.1/aclocal.m4 harfbuzz-8.3.0/aclocal.m4 --- harfbuzz-8.0.1/aclocal.m4 2023-07-12 05:29:01.000000000 +0000 +++ harfbuzz-8.3.0/aclocal.m4 2023-11-11 14:09:16.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.1 -*- Autoconf -*- +# generated automatically by aclocal 1.16.5 -*- Autoconf -*- -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,8 +14,8 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, +[m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) @@ -163,9 +163,9 @@ _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) ]) -dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -dnl serial 11 (pkg-config-0.29.1) -dnl +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 12 (pkg-config-0.29.2) + dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl @@ -206,7 +206,7 @@ dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], -[m4_define([PKG_MACROS_VERSION], [0.29.1]) +[m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ @@ -307,7 +307,7 @@ AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no -AC_MSG_CHECKING([for $1]) +AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) @@ -317,11 +317,11 @@ See the pkg-config man page for more details.]) if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) + AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` - else + else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs @@ -338,7 +338,7 @@ _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) + AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full @@ -439,7 +439,7 @@ AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR -# Copyright (C) 2002-2018 Free Software Foundation, Inc. +# Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -454,7 +454,7 @@ [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.16.1], [], +m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -470,12 +470,12 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.16.1])dnl +[AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) -# Copyright (C) 2011-2018 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -537,7 +537,7 @@ # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -589,7 +589,7 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -620,7 +620,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -811,7 +811,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -850,7 +850,9 @@ done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE="gmake" (or whatever is + necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi @@ -877,7 +879,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -905,6 +907,10 @@ # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl +m4_ifdef([_$0_ALREADY_INIT], + [m4_fatal([$0 expanded multiple times +]m4_defn([_$0_ALREADY_INIT]))], + [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -941,7 +947,7 @@ [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl @@ -993,6 +999,20 @@ [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi +AC_SUBST([CTAGS]) +if test -z "$ETAGS"; then + ETAGS=etags +fi +AC_SUBST([ETAGS]) +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi +AC_SUBST([CSCOPE]) + AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This @@ -1074,7 +1094,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1095,7 +1115,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2018 Free Software Foundation, Inc. +# Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1116,7 +1136,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1159,7 +1179,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2018 Free Software Foundation, Inc. +# Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1180,12 +1200,7 @@ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac + MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then @@ -1198,7 +1213,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1227,7 +1242,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1274,7 +1289,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1293,7 +1308,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1374,7 +1389,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2018 Free Software Foundation, Inc. +# Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1434,7 +1449,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2018 Free Software Foundation, Inc. +# Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1462,7 +1477,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2018 Free Software Foundation, Inc. +# Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1481,7 +1496,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2018 Free Software Foundation, Inc. +# Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -Nru harfbuzz-8.0.1/ar-lib harfbuzz-8.3.0/ar-lib --- harfbuzz-8.0.1/ar-lib 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/ar-lib 2023-11-11 14:09:18.000000000 +0000 @@ -2,9 +2,9 @@ # Wrapper for Microsoft lib.exe me=ar-lib -scriptversion=2012-03-01.08; # UTC +scriptversion=2019-07-04.01; # UTC -# Copyright (C) 2010-2018 Free Software Foundation, Inc. +# Copyright (C) 2010-2021 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify @@ -53,7 +53,7 @@ MINGW*) file_conv=mingw ;; - CYGWIN*) + CYGWIN* | MSYS*) file_conv=cygwin ;; *) @@ -65,7 +65,7 @@ mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; - cygwin) + cygwin | msys) file=`cygpath -m "$file" || echo "$file"` ;; wine) @@ -224,10 +224,11 @@ esac done else - $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member - do - $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? - done + $AR -NOLOGO -LIST "$archive" | tr -d '\r' | sed -e 's/\\/\\\\/g' \ + | while read member + do + $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? + done fi elif test -n "$quick$replace"; then diff -Nru harfbuzz-8.0.1/compile harfbuzz-8.3.0/compile --- harfbuzz-8.0.1/compile 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/compile 2023-11-11 14:09:18.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -53,7 +53,7 @@ MINGW*) file_conv=mingw ;; - CYGWIN*) + CYGWIN* | MSYS*) file_conv=cygwin ;; *) @@ -67,7 +67,7 @@ mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; - cygwin/*) + cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) diff -Nru harfbuzz-8.0.1/config.guess harfbuzz-8.3.0/config.guess --- harfbuzz-8.0.1/config.guess 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/config.guess 2023-11-11 14:09:18.000000000 +0000 @@ -1,12 +1,14 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2022 Free Software Foundation, Inc. -timestamp='2018-02-24' +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -27,11 +29,19 @@ # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ @@ -50,7 +60,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2018 Free Software Foundation, Inc. +Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,7 +94,8 @@ exit 1 fi -trap 'exit 1' 1 2 15 +# Just in case it came from the environment. +GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires @@ -96,73 +107,90 @@ # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > "$dummy.c" ; - for c in cc gcc c89 c99 ; do - if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039,SC3028 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD=$driver + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "$UNAME_SYSTEM" in +case $UNAME_SYSTEM in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown - eval "$set_cc_for_build" + set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$cc_set_libc" - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in +case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -174,12 +202,12 @@ # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - "/sbin/$sysctl" 2>/dev/null || \ - "/usr/sbin/$sysctl" 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; @@ -188,18 +216,18 @@ earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` - machine="${arch}${endian}"-unknown + machine=${arch}${endian}-unknown ;; - *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval "$set_cc_for_build" + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -215,7 +243,7 @@ ;; esac # Determine ABI tags. - case "$UNAME_MACHINE_ARCH" in + case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` @@ -226,7 +254,7 @@ # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "$UNAME_VERSION" in + case $UNAME_VERSION in Debian*) release='-gnu' ;; @@ -237,45 +265,57 @@ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "$machine-${os}${release}${abi}" - exit ;; + GUESS=$machine-${os}${release}${abi-} + ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE + ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE + ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` + GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE + ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE + ;; *:MidnightBSD:*:*) - echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE + ;; *:ekkoBSD:*:*) - echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE + ;; *:SolidBSD:*:*) - echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE + ;; + *:OS108:*:*) + GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE + ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE + ;; *:MirBSD:*:*) - echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE + ;; *:Sortix:*:*) - echo "$UNAME_MACHINE"-unknown-sortix - exit ;; + GUESS=$UNAME_MACHINE-unknown-sortix + ;; + *:Twizzler:*:*) + GUESS=$UNAME_MACHINE-unknown-twizzler + ;; *:Redox:*:*) - echo "$UNAME_MACHINE"-unknown-redox - exit ;; + GUESS=$UNAME_MACHINE-unknown-redox + ;; mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; + GUESS=mips-dec-osf1 + ;; alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` @@ -289,7 +329,7 @@ # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in + case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") @@ -326,117 +366,121 @@ # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; + OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + GUESS=$UNAME_MACHINE-dec-osf$OSF_REL + ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; + GUESS=m68k-unknown-sysv4 + ;; *:[Aa]miga[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-amigaos - exit ;; + GUESS=$UNAME_MACHINE-unknown-amigaos + ;; *:[Mm]orph[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-morphos - exit ;; + GUESS=$UNAME_MACHINE-unknown-morphos + ;; *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; + GUESS=i370-ibm-openedition + ;; *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; + GUESS=s390-ibm-zvmoe + ;; *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; + GUESS=powerpc-ibm-os400 + ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix"$UNAME_RELEASE" - exit ;; + GUESS=arm-acorn-riscix$UNAME_RELEASE + ;; arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; + GUESS=arm-unknown-riscos + ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; + GUESS=hppa1.1-hitachi-hiuxmpp + ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; + case `(/bin/universe) 2>/dev/null` in + att) GUESS=pyramid-pyramid-sysv3 ;; + *) GUESS=pyramid-pyramid-bsd ;; + esac + ;; NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; + GUESS=pyramid-pyramid-svr4 + ;; DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; + GUESS=sparc-icl-nx6 + ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; + sparc) GUESS=sparc-icl-nx7 ;; + esac + ;; s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL + ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-hal-solaris2$SUN_REL + ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris2$SUN_REL + ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux"$UNAME_RELEASE" - exit ;; + GUESS=i386-pc-auroraux$UNAME_RELEASE + ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval "$set_cc_for_build" + set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=$SUN_ARCH-pc-solaris2$SUN_REL + ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=sparc-sun-solaris3$SUN_REL + ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` + GUESS=sparc-sun-sunos$SUN_REL + ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos"$UNAME_RELEASE" - exit ;; + GUESS=m68k-sun-sunos$UNAME_RELEASE + ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in + case `/bin/arch` in sun3) - echo m68k-sun-sunos"$UNAME_RELEASE" + GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) - echo sparc-sun-sunos"$UNAME_RELEASE" + GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac - exit ;; + ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos"$UNAME_RELEASE" - exit ;; + GUESS=sparc-auspex-sunos$UNAME_RELEASE + ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor @@ -446,43 +490,43 @@ # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-atari-mint$UNAME_RELEASE + ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-milan-mint$UNAME_RELEASE + ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-hades-mint$UNAME_RELEASE + ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint"$UNAME_RELEASE" - exit ;; + GUESS=m68k-unknown-mint$UNAME_RELEASE + ;; m68k:machten:*:*) - echo m68k-apple-machten"$UNAME_RELEASE" - exit ;; + GUESS=m68k-apple-machten$UNAME_RELEASE + ;; powerpc:machten:*:*) - echo powerpc-apple-machten"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-apple-machten$UNAME_RELEASE + ;; RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; + GUESS=mips-dec-mach_bsd4.3 + ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix"$UNAME_RELEASE" - exit ;; + GUESS=mips-dec-ultrix$UNAME_RELEASE + ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix"$UNAME_RELEASE" - exit ;; + GUESS=vax-dec-ultrix$UNAME_RELEASE + ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix"$UNAME_RELEASE" - exit ;; + GUESS=clipper-intergraph-clix$UNAME_RELEASE + ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ @@ -508,78 +552,79 @@ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos"$UNAME_RELEASE" - exit ;; + GUESS=mips-mips-riscos$UNAME_RELEASE + ;; Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; + GUESS=powerpc-motorola-powermax + ;; Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; + GUESS=powerpc-harris-powermax + ;; Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; + GUESS=powerpc-harris-powerunix + ;; m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; + GUESS=m88k-harris-cxux7 + ;; m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; + GUESS=m88k-motorola-sysv4 + ;; m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then - echo m88k-dg-dgux"$UNAME_RELEASE" + GUESS=m88k-dg-dgux$UNAME_RELEASE else - echo m88k-dg-dguxbcs"$UNAME_RELEASE" + GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else - echo i586-dg-dgux"$UNAME_RELEASE" + GUESS=i586-dg-dgux$UNAME_RELEASE fi - exit ;; + ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; + GUESS=m88k-dolphin-sysv3 + ;; M88*:*:R3*:*) # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; + GUESS=m88k-motorola-sysv3 + ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; + GUESS=m88k-tektronix-sysv3 + ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; + GUESS=m68k-tektronix-bsd + ;; *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" - exit ;; + IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` + GUESS=mips-sgi-irix$IRIX_REL + ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id + ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; + GUESS=i386-ibm-aix + ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then + if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" - exit ;; + GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV + ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include @@ -593,16 +638,16 @@ EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then - echo "$SYSTEM_NAME" + GUESS=$SYSTEM_NAME else - echo rs6000-ibm-aix3.2.5 + GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 + GUESS=rs6000-ibm-aix3.2.4 else - echo rs6000-ibm-aix3.2 + GUESS=rs6000-ibm-aix3.2 fi - exit ;; + ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then @@ -610,57 +655,57 @@ else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + if test -x /usr/bin/lslpp ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi - echo "$IBM_ARCH"-ibm-aix"$IBM_REV" - exit ;; + GUESS=$IBM_ARCH-ibm-aix$IBM_REV + ;; *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; + GUESS=rs6000-ibm-aix + ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) - echo romp-ibm-bsd4.4 - exit ;; + GUESS=romp-ibm-bsd4.4 + ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 + GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to + ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; + GUESS=rs6000-bull-bosx + ;; DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; + GUESS=m68k-bull-sysv3 + ;; 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; + GUESS=m68k-hp-bsd + ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; + GUESS=m68k-hp-bsd4.4 + ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - case "$UNAME_MACHINE" in + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then + if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "$sc_cpu_version" in + case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "$sc_kernel_bits" in + case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "$HP_ARCH" = "" ]; then - eval "$set_cc_for_build" + if test "$HP_ARCH" = ""; then + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE @@ -698,9 +743,9 @@ test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ "$HP_ARCH" = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then - eval "$set_cc_for_build" + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -719,14 +764,14 @@ HP_ARCH=hppa64 fi fi - echo "$HP_ARCH"-hp-hpux"$HPUX_REV" - exit ;; + GUESS=$HP_ARCH-hp-hpux$HPUX_REV + ;; ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux"$HPUX_REV" - exit ;; + HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` + GUESS=ia64-hp-hpux$HPUX_REV + ;; 3050*:HI-UX:*:*) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int @@ -754,36 +799,36 @@ EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; + GUESS=unknown-hitachi-hiuxwe2 + ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) - echo hppa1.1-hp-bsd - exit ;; + GUESS=hppa1.1-hp-bsd + ;; 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; + GUESS=hppa1.0-hp-bsd + ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; + GUESS=hppa1.0-hp-mpeix + ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) - echo hppa1.1-hp-osf - exit ;; + GUESS=hppa1.1-hp-osf + ;; hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; + GUESS=hppa1.0-hp-osf + ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo "$UNAME_MACHINE"-unknown-osf1mk + if test -x /usr/sbin/sysversion ; then + GUESS=$UNAME_MACHINE-unknown-osf1mk else - echo "$UNAME_MACHINE"-unknown-osf1 + GUESS=$UNAME_MACHINE-unknown-osf1 fi - exit ;; + ;; parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; + GUESS=hppa1.1-hp-lites + ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; + GUESS=c1-convex-bsd + ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd @@ -791,17 +836,18 @@ fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; + GUESS=c34-convex-bsd + ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; + GUESS=c38-convex-bsd + ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; + GUESS=c4-convex-bsd + ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=ymp-cray-unicos$CRAY_REL + ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ @@ -809,103 +855,129 @@ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=t90-cray-unicos$CRAY_REL + ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=alphaev5-cray-unicosmk$CRAY_REL + ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=sv1-cray-unicos$CRAY_REL + ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; + CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` + GUESS=craynv-cray-unicosmp$CRAY_REL + ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} + ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE + ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=sparc-unknown-bsdi$UNAME_RELEASE + ;; *:BSD/OS:*:*) - echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE + ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi + else + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf + fi + ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case "$UNAME_PROCESSOR" in + case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; + FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL + ;; i*:CYGWIN*:*) - echo "$UNAME_MACHINE"-pc-cygwin - exit ;; + GUESS=$UNAME_MACHINE-pc-cygwin + ;; *:MINGW64*:*) - echo "$UNAME_MACHINE"-pc-mingw64 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw64 + ;; *:MINGW*:*) - echo "$UNAME_MACHINE"-pc-mingw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-mingw32 + ;; *:MSYS*:*) - echo "$UNAME_MACHINE"-pc-msys - exit ;; + GUESS=$UNAME_MACHINE-pc-msys + ;; i*:PW*:*) - echo "$UNAME_MACHINE"-pc-pw32 - exit ;; + GUESS=$UNAME_MACHINE-pc-pw32 + ;; + *:SerenityOS:*:*) + GUESS=$UNAME_MACHINE-pc-serenity + ;; *:Interix*:*) - case "$UNAME_MACHINE" in + case $UNAME_MACHINE in x86) - echo i586-pc-interix"$UNAME_RELEASE" - exit ;; + GUESS=i586-pc-interix$UNAME_RELEASE + ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix"$UNAME_RELEASE" - exit ;; + GUESS=x86_64-unknown-interix$UNAME_RELEASE + ;; IA64) - echo ia64-unknown-interix"$UNAME_RELEASE" - exit ;; + GUESS=ia64-unknown-interix$UNAME_RELEASE + ;; esac ;; i*:UWIN*:*) - echo "$UNAME_MACHINE"-pc-uwin - exit ;; + GUESS=$UNAME_MACHINE-pc-uwin + ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; + GUESS=x86_64-pc-cygwin + ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; + SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` + GUESS=powerpcle-unknown-solaris2$SUN_REL + ;; *:GNU:*:*) # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" - exit ;; + GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` + GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL + ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" - exit ;; - i*86:Minix:*:*) - echo "$UNAME_MACHINE"-pc-minix - exit ;; + GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` + GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC + ;; + *:Minix:*:*) + GUESS=$UNAME_MACHINE-unknown-minix + ;; aarch64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -916,187 +988,225 @@ esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; arm*:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi - exit ;; + ;; avr32*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; cris:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; crisv32:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-axis-linux-$LIBC + ;; e2k:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; frv:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; hexagon:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-pc-linux-$LIBC + ;; ia64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; k1om:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m32r*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; m68*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; mips:Linux:*:* | mips64:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" - test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` + eval "$cc_set_vars" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-"$LIBC" - exit ;; + GUESS=or1k-unknown-linux-$LIBC + ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; padre:Linux:*:*) - echo sparc-unknown-linux-"$LIBC" - exit ;; + GUESS=sparc-unknown-linux-$LIBC + ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-"$LIBC" - exit ;; + GUESS=hppa64-unknown-linux-$LIBC + ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; - PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; - *) echo hppa-unknown-linux-"$LIBC" ;; + PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; + PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; + *) GUESS=hppa-unknown-linux-$LIBC ;; esac - exit ;; + ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc64-unknown-linux-$LIBC + ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc-unknown-linux-$LIBC + ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpc64le-unknown-linux-$LIBC + ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-"$LIBC" - exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=powerpcle-unknown-linux-$LIBC + ;; + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; s390:Linux:*:* | s390x:Linux:*:*) - echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-ibm-linux-$LIBC + ;; sh64*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sh*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; tile*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; vax:Linux:*:*) - echo "$UNAME_MACHINE"-dec-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-dec-linux-$LIBC + ;; x86_64:Linux:*:*) - if objdump -f /bin/sh | grep -q elf32-x86-64; then - echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 - else - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI=${LIBC}x32 + fi fi - exit ;; + GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI + ;; xtensa*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; + GUESS=i386-sequent-sysv4 + ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" - exit ;; + GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION + ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo "$UNAME_MACHINE"-pc-os2-emx - exit ;; + GUESS=$UNAME_MACHINE-pc-os2-emx + ;; i*86:XTS-300:*:STOP) - echo "$UNAME_MACHINE"-unknown-stop - exit ;; + GUESS=$UNAME_MACHINE-unknown-stop + ;; i*86:atheos:*:*) - echo "$UNAME_MACHINE"-unknown-atheos - exit ;; + GUESS=$UNAME_MACHINE-unknown-atheos + ;; i*86:syllable:*:*) - echo "$UNAME_MACHINE"-pc-syllable - exit ;; + GUESS=$UNAME_MACHINE-pc-syllable + ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=i386-unknown-lynxos$UNAME_RELEASE + ;; i*86:*DOS:*:*) - echo "$UNAME_MACHINE"-pc-msdosdjgpp - exit ;; + GUESS=$UNAME_MACHINE-pc-msdosdjgpp + ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else - echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi - exit ;; + ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in @@ -1104,12 +1214,12 @@ *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" - exit ;; + GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1119,11 +1229,11 @@ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else - echo "$UNAME_MACHINE"-pc-sysv32 + GUESS=$UNAME_MACHINE-pc-sysv32 fi - exit ;; + ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about @@ -1131,31 +1241,31 @@ # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; + GUESS=i586-pc-msdosdjgpp + ;; Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; + GUESS=i386-pc-mach3 + ;; paragon:*:*:*) - echo i860-intel-osf1 - exit ;; + GUESS=i860-intel-osf1 + ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi - exit ;; + ;; mini*:CTIX:SYS*5:*) # "miniframe" - echo m68010-convergent-sysv - exit ;; + GUESS=m68010-convergent-sysv + ;; mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; + GUESS=m68k-convergent-sysv + ;; M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; + GUESS=m68k-diab-dnix + ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) @@ -1180,249 +1290,404 @@ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=m68k-unknown-lynxos$UNAME_RELEASE + ;; mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; + GUESS=m68k-atari-sysv4 + ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=sparc-unknown-lynxos$UNAME_RELEASE + ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=rs6000-unknown-lynxos$UNAME_RELEASE + ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-unknown-lynxos$UNAME_RELEASE + ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv"$UNAME_RELEASE" - exit ;; + GUESS=mips-dde-sysv$UNAME_RELEASE + ;; RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; + GUESS=mips-sni-sysv4 + ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo "$UNAME_MACHINE"-sni-sysv4 + GUESS=$UNAME_MACHINE-sni-sysv4 else - echo ns32k-sni-sysv + GUESS=ns32k-sni-sysv fi - exit ;; + ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says - echo i586-unisys-sysv4 - exit ;; + GUESS=i586-unisys-sysv4 + ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; + GUESS=hppa1.1-stratus-sysv4 + ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; + GUESS=i860-stratus-sysv4 + ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo "$UNAME_MACHINE"-stratus-vos - exit ;; + GUESS=$UNAME_MACHINE-stratus-vos + ;; *:VOS:*:*) # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; + GUESS=hppa1.1-stratus-vos + ;; mc68*:A/UX:*:*) - echo m68k-apple-aux"$UNAME_RELEASE" - exit ;; + GUESS=m68k-apple-aux$UNAME_RELEASE + ;; news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; + GUESS=mips-sony-newsos6 + ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv"$UNAME_RELEASE" + if test -d /usr/nec; then + GUESS=mips-nec-sysv$UNAME_RELEASE else - echo mips-unknown-sysv"$UNAME_RELEASE" + GUESS=mips-unknown-sysv$UNAME_RELEASE fi - exit ;; + ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; + GUESS=powerpc-be-beos + ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; + GUESS=powerpc-apple-beos + ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; + GUESS=i586-pc-beos + ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; + GUESS=i586-pc-haiku + ;; x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; + GUESS=x86_64-unknown-haiku + ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx4-nec-superux$UNAME_RELEASE + ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx5-nec-superux$UNAME_RELEASE + ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx6-nec-superux$UNAME_RELEASE + ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx7-nec-superux$UNAME_RELEASE + ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx8-nec-superux$UNAME_RELEASE + ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sx8r-nec-superux$UNAME_RELEASE + ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux"$UNAME_RELEASE" - exit ;; + GUESS=sxace-nec-superux$UNAME_RELEASE + ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody"$UNAME_RELEASE" - exit ;; + GUESS=powerpc-apple-rhapsody$UNAME_RELEASE + ;; *:Rhapsody:*:*) - echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE + ;; + arm64:Darwin:*:*) + GUESS=aarch64-apple-darwin$UNAME_RELEASE + ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval "$set_cc_for_build" - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc - if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_PPC >/dev/null - then - UNAME_PROCESSOR=powerpc - fi + UNAME_PROCESSOR=`uname -p` + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build + fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi - echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE + ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE + ;; *:QNX:*:4*) - echo i386-pc-qnx - exit ;; + GUESS=i386-pc-qnx + ;; NEO-*:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=neo-tandem-nsk$UNAME_RELEASE + ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nse-tandem-nsk$UNAME_RELEASE + ;; NSR-*:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsr-tandem-nsk$UNAME_RELEASE + ;; NSV-*:NONSTOP_KERNEL:*:*) - echo nsv-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsv-tandem-nsk$UNAME_RELEASE + ;; NSX-*:NONSTOP_KERNEL:*:*) - echo nsx-tandem-nsk"$UNAME_RELEASE" - exit ;; + GUESS=nsx-tandem-nsk$UNAME_RELEASE + ;; *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; + GUESS=mips-compaq-nonstopux + ;; BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; + GUESS=bs2000-siemens-sysv + ;; DS/*:UNIX_System_V:*:*) - echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" - exit ;; + GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE + ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = 386; then + if test "${cputype-}" = 386; then UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" + elif test "x${cputype-}" != x; then + UNAME_MACHINE=$cputype fi - echo "$UNAME_MACHINE"-unknown-plan9 - exit ;; + GUESS=$UNAME_MACHINE-unknown-plan9 + ;; *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; + GUESS=pdp10-unknown-tops10 + ;; *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; + GUESS=pdp10-unknown-tenex + ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; + GUESS=pdp10-dec-tops20 + ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; + GUESS=pdp10-xkl-tops20 + ;; *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; + GUESS=pdp10-unknown-tops20 + ;; *:ITS:*:*) - echo pdp10-unknown-its - exit ;; + GUESS=pdp10-unknown-its + ;; SEI:*:*:SEIUX) - echo mips-sei-seiux"$UNAME_RELEASE" - exit ;; + GUESS=mips-sei-seiux$UNAME_RELEASE + ;; *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; + DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` + GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL + ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "$UNAME_MACHINE" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; + case $UNAME_MACHINE in + A*) GUESS=alpha-dec-vms ;; + I*) GUESS=ia64-dec-vms ;; + V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; + GUESS=i386-pc-xenix + ;; i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" - exit ;; + SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` + GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL + ;; i*86:rdos:*:*) - echo "$UNAME_MACHINE"-pc-rdos - exit ;; - i*86:AROS:*:*) - echo "$UNAME_MACHINE"-pc-aros - exit ;; + GUESS=$UNAME_MACHINE-pc-rdos + ;; + i*86:Fiwix:*:*) + GUESS=$UNAME_MACHINE-pc-fiwix + ;; + *:AROS:*:*) + GUESS=$UNAME_MACHINE-unknown-aros + ;; x86_64:VMkernel:*:*) - echo "$UNAME_MACHINE"-unknown-esx - exit ;; + GUESS=$UNAME_MACHINE-unknown-esx + ;; amd64:Isilon\ OneFS:*:*) - echo x86_64-unknown-onefs - exit ;; + GUESS=x86_64-unknown-onefs + ;; + *:Unleashed:*:*) + GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE + ;; esac +# Do we have a guess based on uname results? +if test "x$GUESS" != x; then + echo "$GUESS" + exit +fi + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + echo "$0: unable to guess system type" >&2 -case "$UNAME_MACHINE:$UNAME_SYSTEM" in +case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 < header file. */ -#undef HAVE_MEMORY_H - /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP @@ -103,6 +100,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H @@ -173,14 +173,11 @@ your system. */ #undef PTHREAD_CREATE_JOINABLE -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #undef STDC_HEADERS -/* Enable large inode numbers on Mac OS X 10.5. */ -#ifndef _DARWIN_USE_64_BIT_INODE -# define _DARWIN_USE_64_BIT_INODE 1 -#endif - /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS diff -Nru harfbuzz-8.0.1/config.sub harfbuzz-8.3.0/config.sub --- harfbuzz-8.0.1/config.sub 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/config.sub 2023-11-11 14:09:18.000000000 +0000 @@ -1,12 +1,14 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2022 Free Software Foundation, Inc. -timestamp='2018-02-22' +# shellcheck disable=SC2006,SC2268 # see below for rationale + +timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -33,7 +35,7 @@ # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -50,6 +52,13 @@ # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. +# The "shellcheck disable" line above the timestamp inhibits complaints +# about features and limitations of the classic Bourne shell that were +# superseded or lifted in POSIX. However, this script identifies a wide +# variety of pre-POSIX systems that do not have POSIX shells at all, and +# even some reasonably current systems (Solaris 10 as case-in-point) still +# have a pre-POSIX /bin/sh. + me=`echo "$0" | sed -e 's,.*/,,'` usage="\ @@ -67,7 +76,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2018 Free Software Foundation, Inc. +Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -89,7 +98,7 @@ - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) @@ -110,1223 +119,1186 @@ exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo "$1" | sed 's/-[^-]*$//'` - if [ "$basic_machine" != "$1" ] - then os=`echo "$1" | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 +# Split fields of configuration type +# shellcheck disable=SC2162 +saved_IFS=$IFS +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -lynx*) - os=-lynxos + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 ;; - -ptx*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac ;; - -psos*) - os=-psos + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + zephyr*) + basic_machine=$field1-unknown + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + op50n) + cpu=hppa1.1 + vendor=oki ;; - ms1) - basic_machine=mt-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown + ibm*) + cpu=i370 + vendor=ibm ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none + orion105) + cpu=clipper + vendor=highlevel ;; - xscaleeb) - basic_machine=armeb-unknown + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple ;; - - xscaleel) - basic_machine=armel-unknown + pmac | pmac-mpw) + cpu=powerpc + vendor=apple ;; - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-pc - os=-bsd - ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + cpu=m68000 + vendor=att ;; 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux + cpu=we32k + vendor=att ;; bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec + cpu=powerpc + vendor=ibm + basic_os=cnk ;; decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 + cpu=pdp10 + vendor=dec + basic_os=tops10 ;; decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 + cpu=pdp10 + vendor=dec + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx + cpu=m68k + vendor=motorola ;; dpx2*) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd + cpu=m68k + vendor=bull + basic_os=sysv3 ;; encore | umax | mmax) - basic_machine=ns32k-encore + cpu=ns32k + vendor=encore ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} ;; fx2800) - basic_machine=i860-alliant + cpu=i860 + vendor=alliant ;; genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 + cpu=ns32k + vendor=ns ;; h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp + cpu=m68000 + vendor=hp ;; hp9k3[2-9][0-9]) - basic_machine=m68k-hp + cpu=m68k + vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm + cpu=hppa1.0 + vendor=hp ;; i*86v32) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv32 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv32 ;; i*86v4*) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv4 + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv4 ;; i*86v) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=sysv ;; i*86sol2) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - vsta) - basic_machine=i386-unknown - os=-vsta + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + basic_os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} ;; iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) + cpu=mips + vendor=sgi + case $basic_os in + irix*) ;; *) - os=-irix4 + basic_os=irix4 ;; esac ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint + cpu=m68000 + vendor=convergent ;; - mips3*-*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint ;; news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv + cpu=mips + vendor=sony + basic_os=newsos ;; next | m*-next) - basic_machine=m68k-next - case $os in - -nextstep* ) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) ;; - -ns2*) - os=-nextstep2 + ns2*) + basic_os=nextstep2 ;; *) - os=-nextstep3 + basic_os=nextstep3 ;; esac ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - nsv-tandem) - basic_machine=nsv-tandem - ;; - nsx-tandem) - basic_machine=nsx-tandem + cpu=np1 + vendor=gould ;; op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k + cpu=hppa1.1 + vendor=oki + basic_os=proelf ;; pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; pbd) - basic_machine=sparc-tti + cpu=sparc + vendor=tti ;; pbb) - basic_machine=m68k-tti + cpu=m68k + vendor=tti ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 + pc532) + cpu=ns32k + vendor=pc532 ;; - pc98) - basic_machine=i386-pc + pn) + cpu=pn + vendor=gould ;; - pc98-*) - basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` + power) + cpu=power + vendor=ibm ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc + ps2) + cpu=i386 + vendor=ibm ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc + rm[46]00) + cpu=mips + vendor=siemens ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc + rtpc | rtpc-*) + cpu=romp + vendor=ibm ;; - pentium4) - basic_machine=i786-pc + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + tower | tower-32) + cpu=m68k + vendor=ncr ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - pentium4-*) - basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` + w65) + cpu=w65 + vendor=wdc ;; - pn) - basic_machine=pn-gould + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf ;; - power) basic_machine=power-ibm + none) + cpu=none + vendor=none ;; - ppc | ppcbe) basic_machine=powerpc-unknown + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown + + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read cpu vendor <&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb | arc32 | arc64 \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | loongarch32 | loongarch64 | loongarchx32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r3 | mipsisa32r3el \ + | mipsisa32r5 | mipsisa32r5el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r3 | mipsisa64r3el \ + | mipsisa64r5 | mipsisa64r5el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | thumbv7* \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1334,203 +1306,215 @@ # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if test x$basic_os != x then + +# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` + ;; + os2-emx) + kernel=os2 + os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` + ;; + nto-qnx*) + kernel=nto + os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` + ;; + *-*) + # shellcheck disable=SC2162 + saved_IFS=$IFS + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1543,258 +1527,363 @@ # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +kernel= +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + kernel=linux + os=gnu ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; pru-*) - os=-elf + os=elf ;; *-be) - os=-beos + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna + os=luna ;; *-next) - os=-nextstep + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + musl* | newlib* | relibc* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* | serenity* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ + | fiwix* ) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ + | linux-musl* | linux-relibc* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - -sunos*) + *-sunos*) vendor=sun ;; - -cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - -beos*) + *-beos*) vendor=be ;; - -hpux*) + *-hpux*) vendor=hp ;; - -mpeix*) + *-mpeix*) vendor=hp ;; - -hiux*) + *-hiux*) vendor=hitachi ;; - -unos*) + *-unos*) vendor=crds ;; - -dgux*) + *-dgux*) vendor=dg ;; - -luna*) + *-luna*) vendor=omron ;; - -genix*) + *-genix*) vendor=ns ;; - -mvs* | -opened*) + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) vendor=ibm ;; - -os400*) + s390-* | s390x-*) vendor=ibm ;; - -ptx*) + *-ptx*) vendor=sequent ;; - -tpf*) + *-tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - -aux*) + *-aux*) vendor=apple ;; - -hms*) + *-hms*) vendor=hitachi ;; - -mpw* | -macos*) + *-mpw* | *-macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - -vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo "$basic_machine$os" +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: -# eval: (add-hook 'write-file-functions 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff -Nru harfbuzz-8.0.1/configure harfbuzz-8.3.0/configure --- harfbuzz-8.0.1/configure 2023-07-12 05:29:02.000000000 +0000 +++ harfbuzz-8.3.0/configure 2023-11-11 14:09:17.000000000 +0000 @@ -1,11 +1,12 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for HarfBuzz 8.0.1. +# Generated by GNU Autoconf 2.71 for HarfBuzz 8.3.0. # # Report bugs to . # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -16,14 +17,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -33,46 +36,46 @@ fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -81,13 +84,6 @@ fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -96,8 +92,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -109,30 +109,10 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -154,20 +134,22 @@ exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -187,12 +169,15 @@ as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO @@ -207,30 +192,38 @@ PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -238,14 +231,21 @@ esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -263,18 +263,19 @@ exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org and + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: https://github.com/harfbuzz/harfbuzz/issues/new about $0: your system, including any error possibly output before $0: this message. Then install a modern shell, or manually @@ -302,6 +303,7 @@ } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -319,6 +321,14 @@ as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -333,7 +343,7 @@ as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -342,7 +352,7 @@ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -381,12 +391,13 @@ # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -398,18 +409,27 @@ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -421,9 +441,9 @@ as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -450,7 +470,7 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -494,7 +514,7 @@ s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -508,6 +528,10 @@ exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -521,6 +545,13 @@ ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -590,48 +621,44 @@ # Identity of this package. PACKAGE_NAME='HarfBuzz' PACKAGE_TARNAME='harfbuzz' -PACKAGE_VERSION='8.0.1' -PACKAGE_STRING='HarfBuzz 8.0.1' +PACKAGE_VERSION='8.3.0' +PACKAGE_STRING='HarfBuzz 8.3.0' PACKAGE_BUGREPORT='https://github.com/harfbuzz/harfbuzz/issues/new' PACKAGE_URL='http://harfbuzz.org/' ac_unique_file="src/harfbuzz.pc.in" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS @@ -711,6 +738,7 @@ PTHREAD_LIBS PTHREAD_CC ax_pthread_config +CPP OS_WIN32_FALSE OS_WIN32_TRUE HAVE_GCC_FALSE @@ -754,7 +782,6 @@ ac_ct_CXX CXXFLAGS CXX -CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL @@ -817,6 +844,9 @@ AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V +CSCOPE +ETAGS +CTAGS am__untar am__tar AMTAR @@ -924,7 +954,6 @@ LIBS CPPFLAGS LT_SYS_LIBRARY_PATH -CPP CXX CXXFLAGS CCC @@ -934,6 +963,7 @@ PKG_CONFIG_LIBDIR GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS +CPP GLIB_CFLAGS GLIB_LIBS GOBJECT_CFLAGS @@ -1018,8 +1048,6 @@ *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -1060,9 +1088,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1086,9 +1114,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1299,9 +1327,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1315,9 +1343,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1361,9 +1389,9 @@ *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1379,7 +1407,7 @@ case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1443,7 +1471,7 @@ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1500,7 +1528,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures HarfBuzz 8.0.1 to adapt to many kinds of systems. +\`configure' configures HarfBuzz 8.3.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1571,7 +1599,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of HarfBuzz 8.0.1:";; + short | recursive ) echo "Configuration of HarfBuzz 8.3.0:";; esac cat <<\_ACEOF @@ -1649,7 +1677,6 @@ you have headers in a nonstandard directory LT_SYS_LIBRARY_PATH User-defined run-time library search path. - CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor @@ -1662,6 +1689,7 @@ C compiler flags for GTKDOC_DEPS, overriding pkg-config GTKDOC_DEPS_LIBS linker flags for GTKDOC_DEPS, overriding pkg-config + CPP C preprocessor GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config GOBJECT_CFLAGS @@ -1709,9 +1737,9 @@ case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1739,7 +1767,8 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1747,7 +1776,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1756,10 +1785,10 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -HarfBuzz configure 8.0.1 -generated by GNU Autoconf 2.69 +HarfBuzz configure 8.3.0 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1776,14 +1805,14 @@ ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1791,14 +1820,15 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1814,14 +1844,14 @@ ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1829,17 +1859,18 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1861,120 +1892,44 @@ ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1982,16 +1937,9 @@ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2009,24 +1957,25 @@ #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -2037,14 +1986,14 @@ ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2052,14 +2001,15 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2081,7 +2031,7 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2089,14 +2039,15 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2112,14 +2063,14 @@ ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2127,17 +2078,18 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2152,96 +2104,48 @@ } # ac_fn_cxx_try_link -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. +ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## -------------------------------------------------------------- ## -## Report this to https://github.com/harfbuzz/harfbuzz/issues/new ## -## -------------------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + ac_retval=$ac_status fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval -} # ac_fn_c_check_header_mongrel +} # ac_fn_c_try_run # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- @@ -2257,7 +2161,7 @@ /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -2267,14 +2171,15 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2284,9 +2189,10 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid; break -else +else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -2294,14 +2200,14 @@ fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -2311,14 +2217,15 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -2328,9 +2235,10 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=$ac_mid; break -else +else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -2338,14 +2246,14 @@ fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val @@ -2353,7 +2261,7 @@ /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -2363,12 +2271,13 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid -else +else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -2378,12 +2287,12 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } +static long int longval (void) { return $2; } +static unsigned long int ulongval (void) { return $2; } #include #include int -main () +main (void) { FILE *f = fopen ("conftest.val", "w"); @@ -2411,9 +2320,10 @@ return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : echo >>conftest.val; read $3 &5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES +# --------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_cxx_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no +if ac_fn_cxx_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## -------------------------------------------------------------- ## -## Report this to https://github.com/harfbuzz/harfbuzz/issues/new ## -## -------------------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_cxx_check_header_mongrel +} # ac_fn_cxx_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- @@ -2524,17 +2414,18 @@ ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2542,12 +2433,13 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2555,29 +2447,50 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by HarfBuzz $as_me 8.0.1, which was -generated by GNU Autoconf 2.69. Invocation command line was +It was created by HarfBuzz $as_me 8.3.0, which was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2610,8 +2523,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2646,7 +2563,7 @@ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2681,11 +2598,13 @@ # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2696,8 +2615,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2721,7 +2640,7 @@ ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2729,14 +2648,14 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2744,15 +2663,15 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2760,8 +2679,8 @@ echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2775,63 +2694,48 @@ # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2841,19 +2745,650 @@ # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" +# Test code for whether the C++ compiler supports C++98 (global declarations) +ac_cxx_conftest_cxx98_globals=' +// Does the compiler advertise C++98 conformance? +#if !defined __cplusplus || __cplusplus < 199711L +# error "Compiler does not advertise C++98 conformance" +#endif + +// These inclusions are to reject old compilers that +// lack the unsuffixed header files. +#include +#include + +// and are *not* freestanding headers in C++98. +extern void assert (int); +namespace std { + extern int strcmp (const char *, const char *); +} + +// Namespaces, exceptions, and templates were all added after "C++ 2.0". +using std::exception; +using std::strcmp; + +namespace { + +void test_exception_syntax() +{ + try { + throw "test"; + } catch (const char *s) { + // Extra parentheses suppress a warning when building autoconf itself, + // due to lint rules shared with more typical C programs. + assert (!(strcmp) (s, "test")); + } +} + +template struct test_template +{ + T const val; + explicit test_template(T t) : val(t) {} + template T add(U u) { return static_cast(u) + val; } +}; + +} // anonymous namespace +' + +# Test code for whether the C++ compiler supports C++98 (body of main) +ac_cxx_conftest_cxx98_main=' + assert (argc); + assert (! argv[0]); +{ + test_exception_syntax (); + test_template tt (2.0); + assert (tt.add (4) == 6.0); + assert (true && !false); +} +' + +# Test code for whether the C++ compiler supports C++11 (global declarations) +ac_cxx_conftest_cxx11_globals=' +// Does the compiler advertise C++ 2011 conformance? +#if !defined __cplusplus || __cplusplus < 201103L +# error "Compiler does not advertise C++11 conformance" +#endif + +namespace cxx11test +{ + constexpr int get_val() { return 20; } + + struct testinit + { + int i; + double d; + }; + + class delegate + { + public: + delegate(int n) : n(n) {} + delegate(): delegate(2354) {} + + virtual int getval() { return this->n; }; + protected: + int n; + }; + + class overridden : public delegate + { + public: + overridden(int n): delegate(n) {} + virtual int getval() override final { return this->n * 2; } + }; + + class nocopy + { + public: + nocopy(int i): i(i) {} + nocopy() = default; + nocopy(const nocopy&) = delete; + nocopy & operator=(const nocopy&) = delete; + private: + int i; + }; + + // for testing lambda expressions + template Ret eval(Fn f, Ret v) + { + return f(v); + } + + // for testing variadic templates and trailing return types + template auto sum(V first) -> V + { + return first; + } + template auto sum(V first, Args... rest) -> V + { + return first + sum(rest...); + } +} +' + +# Test code for whether the C++ compiler supports C++11 (body of main) +ac_cxx_conftest_cxx11_main=' +{ + // Test auto and decltype + auto a1 = 6538; + auto a2 = 48573953.4; + auto a3 = "String literal"; + + int total = 0; + for (auto i = a3; *i; ++i) { total += *i; } + + decltype(a2) a4 = 34895.034; +} +{ + // Test constexpr + short sa[cxx11test::get_val()] = { 0 }; +} +{ + // Test initializer lists + cxx11test::testinit il = { 4323, 435234.23544 }; +} +{ + // Test range-based for + int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, + 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + for (auto &x : array) { x += 23; } +} +{ + // Test lambda expressions + using cxx11test::eval; + assert (eval ([](int x) { return x*2; }, 21) == 42); + double d = 2.0; + assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); + assert (d == 5.0); + assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); + assert (d == 5.0); +} +{ + // Test use of variadic templates + using cxx11test::sum; + auto a = sum(1); + auto b = sum(1, 2); + auto c = sum(1.0, 2.0, 3.0); +} +{ + // Test constructor delegation + cxx11test::delegate d1; + cxx11test::delegate d2(); + cxx11test::delegate d3(45); +} +{ + // Test override and final + cxx11test::overridden o1(55464); +} +{ + // Test nullptr + char *c = nullptr; +} +{ + // Test template brackets + test_template<::test_template> v(test_template(12)); +} +{ + // Unicode literals + char const *utf8 = u8"UTF-8 string \u2500"; + char16_t const *utf16 = u"UTF-8 string \u2500"; + char32_t const *utf32 = U"UTF-32 string \u2500"; +} +' + +# Test code for whether the C compiler supports C++11 (complete). +ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} +${ac_cxx_conftest_cxx11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + ${ac_cxx_conftest_cxx11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C++98 (complete). +ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + return ok; +} +" + + +# Auxiliary files required by this configure script. +ac_aux_files="config.guess config.sub ltmain.sh compile ar-lib missing install-sh" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -2864,12 +3399,12 @@ eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2878,24 +3413,24 @@ ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2905,11 +3440,12 @@ fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2930,36 +3466,9 @@ am__api_version='1.16' -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -# Find a good install program. We prefer a C program (faster), + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -2973,20 +3482,25 @@ # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -2996,13 +3510,13 @@ # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -3010,12 +3524,12 @@ echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -3031,7 +3545,7 @@ rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -3041,8 +3555,8 @@ INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -3052,8 +3566,8 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' @@ -3107,8 +3621,8 @@ as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= @@ -3127,26 +3641,23 @@ # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` +program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` + # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac + + if test x"${MISSING+set}" != xset; then + MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then @@ -3166,11 +3677,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -3178,11 +3690,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3193,11 +3709,11 @@ fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3206,11 +3722,12 @@ ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -3218,11 +3735,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3233,11 +3754,11 @@ fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -3245,8 +3766,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -3258,25 +3779,31 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 +printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_path_mkdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ + as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue + case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir ('*'coreutils) '* | \ + 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done @@ -3287,7 +3814,7 @@ fi test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then + if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a @@ -3297,18 +3824,19 @@ MKDIR_P="$ac_install_sh -d" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -3316,11 +3844,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3331,24 +3863,25 @@ fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @@ -3364,12 +3897,12 @@ rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } SET_MAKE= else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -3383,7 +3916,8 @@ rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : +if test ${enable_silent_rules+y} +then : enableval=$enable_silent_rules; fi @@ -3393,12 +3927,13 @@ *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +printf %s "checking whether $am_make supports nested variables... " >&6; } +if test ${am_cv_make_support_nested_variables+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 @@ -3410,8 +3945,8 @@ am_cv_make_support_nested_variables=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' @@ -3443,7 +3978,7 @@ # Define the identity of the package. PACKAGE='harfbuzz' - VERSION='8.0.1' + VERSION='8.3.0' # Some tools Automake needs. @@ -3490,29 +4025,29 @@ # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 -$as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 +printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test $am_uid -le $am_max_uid; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } _am_tools=none fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 -$as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 +printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test $am_gid -le $am_max_gid; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } _am_tools=none fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 -$as_echo_n "checking how to create a ustar tar archive... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 +printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. @@ -3587,19 +4122,34 @@ done rm -rf conftest.dir - if ${am_cv_prog_tar_ustar+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${am_cv_prog_tar_ustar+y} +then : + printf %s "(cached) " >&6 +else $as_nop am_cv_prog_tar_ustar=$_am_tool fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 -$as_echo "$am_cv_prog_tar_ustar" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 +printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi + +if test -z "$ETAGS"; then + ETAGS=etags +fi + +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi + + # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile @@ -3644,7 +4194,8 @@ fi # Check whether --enable-silent-rules was given. -if test "${enable_silent_rules+set}" = set; then : +if test ${enable_silent_rules+y} +then : enableval=$enable_silent_rules; fi @@ -3654,12 +4205,13 @@ *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 -$as_echo_n "checking whether $am_make supports nested variables... " >&6; } -if ${am_cv_make_support_nested_variables+:} false; then : - $as_echo_n "(cached) " >&6 -else - if $as_echo 'TRUE=$(BAR$(V)) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +printf %s "checking whether $am_make supports nested variables... " >&6; } +if test ${am_cv_make_support_nested_variables+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 @@ -3671,8 +4223,8 @@ am_cv_make_support_nested_variables=no fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 -$as_echo "$am_cv_make_support_nested_variables" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' @@ -3682,11 +4234,12 @@ fi AM_BACKSLASH='\' -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -3700,10 +4253,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -3712,13 +4270,13 @@ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -3746,8 +4304,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed @@ -3757,19 +4315,21 @@ # allow to override gcov location # Check whether --with-gcov was given. -if test "${with_gcov+set}" = set; then : +if test ${with_gcov+y} +then : withval=$with_gcov; _AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov -else +else $as_nop _AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5 -$as_echo_n "checking whether to build with code coverage support... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5 +printf %s "checking whether to build with code coverage support... " >&6; } # Check whether --enable-code-coverage was given. -if test "${enable_code_coverage+set}" = set; then : +if test ${enable_code_coverage+y} +then : enableval=$enable_code_coverage; -else +else $as_nop enable_code_coverage=no fi @@ -3784,20 +4344,22 @@ CODE_COVERAGE_ENABLED=$enable_code_coverage - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5 -$as_echo "$enable_code_coverage" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5 +printf "%s\n" "$enable_code_coverage" >&6; } - if test "$enable_code_coverage" = "yes" ; then : + if test "$enable_code_coverage" = "yes" +then : # check for gcov if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args. set dummy ${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_GCOV+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_GCOV+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$GCOV"; then ac_cv_prog_GCOV="$GCOV" # Let the user override the test. else @@ -3805,11 +4367,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_GCOV="${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3820,11 +4386,11 @@ fi GCOV=$ac_cv_prog_GCOV if test -n "$GCOV"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5 -$as_echo "$GCOV" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5 +printf "%s\n" "$GCOV" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -3833,11 +4399,12 @@ ac_ct_GCOV=$GCOV # Extract the first word of "$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args. set dummy $_AX_CODE_COVERAGE_GCOV_PROG_WITH; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_GCOV+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_GCOV+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_GCOV"; then ac_cv_prog_ac_ct_GCOV="$ac_ct_GCOV" # Let the user override the test. else @@ -3845,11 +4412,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_GCOV="$_AX_CODE_COVERAGE_GCOV_PROG_WITH" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3860,11 +4431,11 @@ fi ac_ct_GCOV=$ac_cv_prog_ac_ct_GCOV if test -n "$ac_ct_GCOV"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GCOV" >&5 -$as_echo "$ac_ct_GCOV" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GCOV" >&5 +printf "%s\n" "$ac_ct_GCOV" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_GCOV" = x; then @@ -3872,8 +4443,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac GCOV=$ac_ct_GCOV @@ -3882,12 +4453,14 @@ GCOV="$ac_cv_prog_GCOV" fi - if test "X$GCOV" = "X:"; then : + if test "X$GCOV" = "X:" +then : as_fn_error $? "gcov is needed to do coverage" "$LINENO" 5 fi - if test "$GCC" = "no" ; then : + if test "$GCC" = "no" +then : as_fn_error $? "not compiling with gcc, which is required for gcov code coverage" "$LINENO" 5 @@ -3895,11 +4468,12 @@ # Extract the first word of "lcov", so it can be a program name with args. set dummy lcov; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LCOV+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LCOV+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LCOV"; then ac_cv_prog_LCOV="$LCOV" # Let the user override the test. else @@ -3907,11 +4481,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LCOV="lcov" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3922,21 +4500,22 @@ fi LCOV=$ac_cv_prog_LCOV if test -n "$LCOV"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5 -$as_echo "$LCOV" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5 +printf "%s\n" "$LCOV" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "genhtml", so it can be a program name with args. set dummy genhtml; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_GENHTML+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_GENHTML+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$GENHTML"; then ac_cv_prog_GENHTML="$GENHTML" # Let the user override the test. else @@ -3944,11 +4523,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_GENHTML="genhtml" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3959,22 +4542,24 @@ fi GENHTML=$ac_cv_prog_GENHTML if test -n "$GENHTML"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5 -$as_echo "$GENHTML" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5 +printf "%s\n" "$GENHTML" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - if test -z "$LCOV" ; then : + if test -z "$LCOV" +then : as_fn_error $? "To enable code coverage reporting you must have lcov installed" "$LINENO" 5 fi - if test -z "$GENHTML" ; then : + if test -z "$GENHTML" +then : as_fn_error $? "Could not find genhtml from the lcov package" "$LINENO" 5 @@ -4012,7 +4597,7 @@ -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete ' -else +else $as_nop CODE_COVERAGE_RULES_CHECK=' @echo "Need to reconfigure with --enable-code-coverage" @@ -4123,12 +4708,21 @@ # Initialize libtool + + + + + + + + + DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 -$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out @@ -4164,11 +4758,12 @@ fi done rm -f confinc.* confmf.* -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 -$as_echo "${_am_result}" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : +if test ${enable_dependency_tracking+y} +then : enableval=$enable_dependency_tracking; fi @@ -4194,11 +4789,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4206,11 +4802,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4221,11 +4821,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4234,11 +4834,12 @@ ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -4246,11 +4847,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4261,11 +4866,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -4273,8 +4878,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -4287,11 +4892,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4299,11 +4905,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4314,11 +4924,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4327,11 +4937,12 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4340,15 +4951,19 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4364,18 +4979,18 @@ # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4386,11 +5001,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -4398,11 +5014,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4413,11 +5033,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4430,11 +5050,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -4442,11 +5063,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -4457,11 +5082,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -4473,34 +5098,138 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi +else + CC="$ac_cv_prog_CC" fi fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -4510,7 +5239,7 @@ cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -4518,7 +5247,7 @@ /* end confdefs.h. */ int -main () +main (void) { ; @@ -4530,9 +5259,9 @@ # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -4553,11 +5282,12 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -4574,7 +5304,7 @@ # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -4590,44 +5320,46 @@ done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -4641,15 +5373,15 @@ * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -4658,7 +5390,7 @@ /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -4670,8 +5402,8 @@ ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -4679,10 +5411,10 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -4690,39 +5422,40 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -4736,11 +5469,12 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -4749,31 +5483,32 @@ break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -4783,29 +5518,33 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -4814,57 +5553,60 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -4879,94 +5621,144 @@ CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=c @@ -4975,21 +5767,23 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_ext=c + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +printf %s "checking whether $CC understands -c and -o together... " >&6; } +if test ${am_cv_prog_cc_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -5017,8 +5811,8 @@ rm -f core conftest* unset am_i fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. @@ -5036,11 +5830,12 @@ depcc="$CC" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CC_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For @@ -5147,8 +5942,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -5163,16 +5958,18 @@ -if test -n "$ac_tool_prefix"; then + + if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -5180,11 +5977,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5195,11 +5996,11 @@ fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5212,11 +6013,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -5224,11 +6026,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5239,11 +6045,11 @@ fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5255,8 +6061,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -5265,11 +6071,12 @@ : ${AR=ar} -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 -$as_echo_n "checking the archiver ($AR) interface... " >&6; } -if ${am_cv_ar_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 +printf %s "checking the archiver ($AR) interface... " >&6; } +if test ${am_cv_ar_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5281,12 +6088,13 @@ /* end confdefs.h. */ int some_variable = 0; _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar @@ -5295,7 +6103,7 @@ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib @@ -5306,7 +6114,7 @@ rm -f conftest.lib libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5314,8 +6122,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 -$as_echo "$am_cv_ar_interface" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 +printf "%s\n" "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) @@ -5337,8 +6145,8 @@ case `pwd` in *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac @@ -5358,28 +6166,32 @@ + ltmain=$ac_aux_dir/ltmain.sh -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -5398,21 +6210,22 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -5452,8 +6265,8 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -5479,12 +6292,12 @@ } case $ECHO in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; esac @@ -5500,11 +6313,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" @@ -5518,10 +6332,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED @@ -5530,13 +6349,13 @@ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" + printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -5564,8 +6383,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed @@ -5582,11 +6401,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -5594,10 +6414,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -5606,13 +6431,13 @@ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -5640,16 +6465,17 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else @@ -5660,10 +6486,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP @@ -5672,13 +6503,13 @@ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -5707,16 +6538,17 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else @@ -5727,10 +6559,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in fgrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP @@ -5739,13 +6576,13 @@ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'FGREP' >> "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -5774,8 +6611,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" @@ -5800,17 +6637,18 @@ # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -5839,15 +6677,16 @@ ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -5876,18 +6715,19 @@ LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -5910,11 +6750,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM @@ -5964,8 +6805,8 @@ : ${lt_cv_path_NM=no} fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else @@ -5978,11 +6819,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else @@ -5990,11 +6832,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6005,11 +6851,11 @@ fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6022,11 +6868,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else @@ -6034,11 +6881,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6049,11 +6900,11 @@ fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6065,8 +6916,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN @@ -6094,11 +6945,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) @@ -6114,26 +6966,27 @@ fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop i=0 teststring=ABCD @@ -6260,11 +7113,11 @@ fi if test -n "$lt_cv_sys_max_cmd_len"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -6308,11 +7161,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $host in *-*-mingw* ) case $build in @@ -6348,18 +7202,19 @@ fi to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in @@ -6375,22 +7230,23 @@ fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_reload_flag='-r' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -6423,11 +7279,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else @@ -6435,11 +7292,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6450,11 +7311,11 @@ fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6463,11 +7324,12 @@ ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else @@ -6475,11 +7337,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6490,11 +7356,11 @@ fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then @@ -6502,8 +7368,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP @@ -6522,11 +7388,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' @@ -6722,8 +7589,8 @@ esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no @@ -6767,11 +7634,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else @@ -6779,11 +7647,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6794,11 +7666,11 @@ fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6807,11 +7679,12 @@ ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else @@ -6819,11 +7692,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6834,11 +7711,11 @@ fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then @@ -6846,8 +7723,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL @@ -6867,11 +7744,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in @@ -6894,8 +7772,8 @@ esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO @@ -6910,11 +7788,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6922,11 +7801,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6937,11 +7820,11 @@ fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6954,11 +7837,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -6966,11 +7850,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6981,11 +7869,11 @@ fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6997,8 +7885,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -7018,30 +7906,32 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. @@ -7049,7 +7939,7 @@ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ @@ -7058,11 +7948,11 @@ rm -f conftest.* libconftest.a fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= @@ -7079,11 +7969,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else @@ -7091,11 +7982,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7106,11 +8001,11 @@ fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7119,11 +8014,12 @@ ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else @@ -7131,11 +8027,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7146,11 +8046,11 @@ fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then @@ -7158,8 +8058,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP @@ -7178,11 +8078,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -7190,11 +8091,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7205,11 +8110,11 @@ fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -7218,11 +8123,12 @@ ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -7230,11 +8136,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7245,11 +8155,11 @@ fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -7257,8 +8167,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -7347,11 +8257,12 @@ # Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] @@ -7503,7 +8414,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm @@ -7576,7 +8487,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi @@ -7611,11 +8522,11 @@ lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } fi # Response file support. @@ -7661,13 +8572,14 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : +if test ${with_sysroot+y} +then : withval=$with_sysroot; -else +else $as_nop with_sysroot=no fi @@ -7685,24 +8597,25 @@ no|'') ;; #( *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 -$as_echo "$with_sysroot" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 -$as_echo_n "checking for a working dd... " >&6; } -if ${ac_cv_path_lt_DD+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} @@ -7713,10 +8626,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in dd; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ @@ -7736,15 +8654,16 @@ rm -f conftest.i conftest2.i conftest.out fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 -$as_echo "$ac_cv_path_lt_DD" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 -$as_echo_n "checking how to truncate binary pipes... " >&6; } -if ${lt_cv_truncate_bin+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= @@ -7755,8 +8674,8 @@ rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 -$as_echo "$lt_cv_truncate_bin" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } @@ -7779,7 +8698,8 @@ } # Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : +if test ${enable_libtool_lock+y} +then : enableval=$enable_libtool_lock; fi @@ -7795,7 +8715,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) @@ -7815,7 +8735,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in @@ -7853,7 +8773,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in @@ -7894,7 +8814,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) @@ -7957,11 +8877,12 @@ # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -7972,19 +8893,20 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_cc_needs_belf=yes -else +else $as_nop lt_cv_cc_needs_belf=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -7993,8 +8915,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS @@ -8007,7 +8929,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) @@ -8044,11 +8966,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else @@ -8056,11 +8979,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8071,11 +8998,11 @@ fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8084,11 +9011,12 @@ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else @@ -8096,11 +9024,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8111,11 +9043,11 @@ fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then @@ -8123,8 +9055,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL @@ -8134,11 +9066,12 @@ fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out @@ -8148,8 +9081,8 @@ fi rm -f conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi @@ -8164,11 +9097,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else @@ -8176,11 +9110,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8191,11 +9129,11 @@ fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8204,11 +9142,12 @@ ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else @@ -8216,11 +9155,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8231,11 +9174,11 @@ fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then @@ -8243,8 +9186,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL @@ -8256,11 +9199,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else @@ -8268,11 +9212,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8283,11 +9231,11 @@ fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8296,11 +9244,12 @@ ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else @@ -8308,11 +9257,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8323,11 +9276,11 @@ fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then @@ -8335,8 +9288,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT @@ -8348,11 +9301,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else @@ -8360,11 +9314,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8375,11 +9333,11 @@ fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8388,11 +9346,12 @@ ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else @@ -8400,11 +9359,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8415,11 +9378,11 @@ fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then @@ -8427,8 +9390,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO @@ -8440,11 +9403,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else @@ -8452,11 +9416,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8467,11 +9435,11 @@ fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8480,11 +9448,12 @@ ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else @@ -8492,11 +9461,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8507,11 +9480,11 @@ fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then @@ -8519,8 +9492,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL @@ -8532,11 +9505,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else @@ -8544,11 +9518,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8559,11 +9537,11 @@ fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -8572,11 +9550,12 @@ ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else @@ -8584,11 +9563,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -8599,11 +9582,11 @@ fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then @@ -8611,8 +9594,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 @@ -8647,11 +9630,12 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override @@ -8680,14 +9664,15 @@ rm -f conftest.* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym @@ -8696,31 +9681,33 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_ld_exported_symbols_list=yes -else +else $as_nop lt_cv_ld_exported_symbols_list=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} @@ -8748,8 +9735,8 @@ rm -rf conftest.dSYM fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; @@ -8760,11 +9747,11 @@ # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + 10.0,*86*-darwin8*|10.0,*-darwin[912]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) + 10.*|11.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; @@ -8820,293 +9807,51 @@ esac } -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes +ac_header= ac_cache= +for ac_item in $ac_header_c_list do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -int -main () -{ - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : -else - ac_cv_header_stdc=no -fi -rm -f conftest* +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi -done - # Set options # Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : +if test ${enable_static+y} +then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; @@ -9124,7 +9869,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_static=no fi @@ -9144,7 +9889,8 @@ # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : +if test ${enable_shared+y} +then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; @@ -9162,7 +9908,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_shared=yes fi @@ -9177,7 +9923,8 @@ # Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : +if test ${with_pic+y} +then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; @@ -9194,7 +9941,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop pic_mode=default fi @@ -9206,7 +9953,8 @@ # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : +if test ${enable_fast_install+y} +then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; @@ -9224,7 +9972,7 @@ IFS=$lt_save_ifs ;; esac -else +else $as_nop enable_fast_install=yes fi @@ -9238,11 +9986,12 @@ shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 -$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. -if test "${with_aix_soname+set}" = set; then : +if test ${with_aix_soname+y} +then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; @@ -9251,18 +10000,19 @@ ;; esac lt_cv_with_aix_soname=$with_aix_soname -else - if ${lt_cv_with_aix_soname+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 -$as_echo "$with_aix_soname" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', @@ -9344,11 +10094,12 @@ setopt NO_GLOB_SUBST fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then @@ -9359,17 +10110,15 @@ fi rmdir .libs 2>/dev/null fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h @@ -9415,11 +10164,12 @@ case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -9468,11 +10218,11 @@ MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -9481,11 +10231,12 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. @@ -9534,11 +10285,11 @@ MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -9623,11 +10374,12 @@ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -9658,8 +10410,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -10022,26 +10774,28 @@ ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -10072,8 +10826,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in @@ -10101,11 +10855,12 @@ # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -10129,8 +10884,8 @@ LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : @@ -10144,11 +10899,12 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -10191,19 +10947,20 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest @@ -10246,8 +11003,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } @@ -10255,19 +11012,19 @@ hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -10279,8 +11036,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -10838,21 +11595,23 @@ if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10867,7 +11626,7 @@ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -10891,21 +11650,23 @@ if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -10920,7 +11681,7 @@ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib @@ -11171,11 +11932,12 @@ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" @@ -11199,8 +11961,8 @@ LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' @@ -11240,28 +12002,30 @@ # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : lt_cv_irix_exported_symbol=yes -else +else $as_nop lt_cv_irix_exported_symbol=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi @@ -11542,8 +12306,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -11579,18 +12343,19 @@ # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -11608,7 +12373,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no @@ -11622,8 +12387,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac @@ -11782,8 +12547,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in @@ -12344,9 +13109,10 @@ shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -12356,19 +13122,21 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -12612,8 +13380,8 @@ dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -12734,8 +13502,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -12759,8 +13527,8 @@ # directories. hardcode_action=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then @@ -12804,11 +13572,12 @@ darwin*) # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12817,32 +13586,31 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else +else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= @@ -12862,14 +13630,16 @@ *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : +if test "x$ac_cv_func_shl_load" = xyes +then : lt_cv_dlopen=shl_load -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12878,41 +13648,42 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char shl_load (); int -main () +main (void) { return shl_load (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_shl_load=yes -else +else $as_nop ac_cv_lib_dld_shl_load=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld -else +else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : +if test "x$ac_cv_func_dlopen" = xyes +then : lt_cv_dlopen=dlopen -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12921,37 +13692,37 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dl_dlopen=yes -else +else $as_nop ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12960,37 +13731,37 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlopen (); int -main () +main (void) { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_svld_dlopen=yes -else +else $as_nop ac_cv_lib_svld_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12999,30 +13770,29 @@ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dld_link (); int -main () +main (void) { return dld_link (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dld_dld_link=yes -else +else $as_nop ac_cv_lib_dld_dld_link=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi @@ -13061,11 +13831,12 @@ save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else @@ -13144,7 +13915,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -13162,16 +13933,17 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else @@ -13250,7 +14022,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? @@ -13268,8 +14040,8 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS @@ -13307,13 +14079,13 @@ striplib= old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -13321,16 +14093,16 @@ if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac fi @@ -13347,13 +14119,13 @@ # Report what library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -13377,15 +14149,15 @@ fi ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } @@ -13431,11 +14203,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -13443,11 +14216,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13458,11 +14235,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -13471,11 +14248,12 @@ ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -13483,11 +14261,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13498,11 +14280,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -13510,8 +14292,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -13524,11 +14306,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -13536,11 +14319,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13551,11 +14338,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -13564,11 +14351,12 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -13577,15 +14365,19 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13601,18 +14393,18 @@ # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -13623,11 +14415,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -13635,11 +14428,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13650,11 +14447,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -13667,11 +14464,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -13679,11 +14477,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13694,11 +14496,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -13710,8 +14512,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -13719,25 +14521,129 @@ fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -13747,20 +14653,21 @@ cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -13770,29 +14677,33 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -13801,57 +14712,60 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -13866,94 +14780,144 @@ CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=c @@ -13962,21 +14926,23 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_ext=c + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 -$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } -if ${am_cv_prog_cc_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +printf %s "checking whether $CC understands -c and -o together... " >&6; } +if test ${am_cv_prog_cc_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -14004,8 +14970,8 @@ rm -f core conftest* unset am_i fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 -$as_echo "$am_cv_prog_cc_c_o" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. @@ -14023,11 +14989,12 @@ depcc="$CC" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CC_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For @@ -14134,8 +15101,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -14149,181 +15116,11 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if ${ac_cv_prog_cc_c99+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -#include -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} -int -main () -{ - // Check bool. - _Bool success = false; - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : - -fi @@ -14337,15 +15134,16 @@ CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else @@ -14353,11 +15151,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -14368,11 +15170,11 @@ fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -14381,15 +15183,16 @@ fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else @@ -14397,11 +15200,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -14412,11 +15219,11 @@ fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -14428,8 +15235,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX @@ -14439,7 +15246,7 @@ fi fi # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do @@ -14449,7 +15256,7 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -14459,20 +15266,21 @@ cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -14482,29 +15290,33 @@ return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi -ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no @@ -14513,57 +15325,60 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes -else +else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : -else +else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ac_cv_prog_cxx_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then @@ -14578,6 +15393,100 @@ CXXFLAGS= fi fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -14586,11 +15495,12 @@ depcc="$CXX" am_compiler_list= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CXX_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For @@ -14697,8 +15607,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if @@ -14730,36 +15640,32 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" + if test ${ac_cv_prog_CXXCPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CXX needs to be expanded + for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -14771,10 +15677,11 @@ /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -14784,7 +15691,8 @@ done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : break fi @@ -14796,29 +15704,24 @@ else ac_cv_prog_CXXCPP=$CXXCPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -14830,10 +15733,11 @@ /* end confdefs.h. */ #include _ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : +if ac_fn_cxx_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -14843,11 +15747,12 @@ done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -14983,17 +15888,18 @@ # Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : +if test ${with_gnu_ld+y} +then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes -else +else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw @@ -15022,15 +15928,16 @@ ;; esac elif test yes = "$with_gnu_ld"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do @@ -15059,18 +15966,19 @@ LD=$lt_cv_path_LD if test -n "$LD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 -$as_echo "$LD" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +printf "%s\n" "$LD" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -15136,8 +16044,8 @@ fi # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) @@ -15275,21 +16183,23 @@ if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -15304,7 +16214,7 @@ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -15329,21 +16239,23 @@ if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : +if ac_fn_cxx_try_link "$LINENO" +then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -15358,7 +16270,7 @@ lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib @@ -16209,8 +17121,8 @@ ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX @@ -16248,7 +17160,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. @@ -16729,26 +17641,28 @@ ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext @@ -16779,8 +17693,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in @@ -16802,11 +17716,12 @@ # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" @@ -16830,8 +17745,8 @@ LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : @@ -16842,11 +17757,12 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -16889,16 +17805,17 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest @@ -16941,8 +17858,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } @@ -16950,19 +17867,19 @@ hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -16971,8 +17888,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' @@ -17014,8 +17931,8 @@ ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld @@ -17042,18 +17959,19 @@ # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest @@ -17071,7 +17989,7 @@ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no @@ -17085,8 +18003,8 @@ $RM conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac @@ -17155,8 +18073,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' @@ -17644,9 +18562,10 @@ shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir @@ -17656,19 +18575,21 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : +if ac_fn_cxx_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : lt_cv_shlibpath_overrides_runpath=yes fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir @@ -17912,8 +18833,8 @@ dynamic_linker=no ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -17977,8 +18898,8 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || @@ -18002,8 +18923,8 @@ # directories. hardcode_action_CXX=unsupported fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +printf "%s\n" "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then @@ -18049,11 +18970,12 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 -$as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } -if ${ax_cv_cxx_compile_cxx11+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +printf %s "checking whether $CXX supports C++11 features by default... " >&6; } +if test ${ax_cv_cxx_compile_cxx11+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -18343,15 +19265,16 @@ _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : ax_cv_cxx_compile_cxx11=yes -else +else $as_nop ax_cv_cxx_compile_cxx11=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 -$as_echo "$ax_cv_cxx_compile_cxx11" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +printf "%s\n" "$ax_cv_cxx_compile_cxx11" >&6; } if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi @@ -18359,12 +19282,13 @@ if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do switch="-std=gnu++${alternative}" - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18656,17 +19580,18 @@ _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : eval $cachevar=yes -else +else $as_nop eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -18681,12 +19606,13 @@ if test x$ac_success = xno; then for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do - cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 -$as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } -if eval \${$cachevar+:} false; then : - $as_echo_n "(cached) " >&6 -else + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18978,17 +19904,18 @@ _ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : +if ac_fn_cxx_try_compile "$LINENO" +then : eval $cachevar=yes -else +else $as_nop eval $cachevar=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then @@ -19016,29 +19943,31 @@ fi if test x$ac_success = xno; then HAVE_CXX11=0 - { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 -$as_echo "$as_me: No compiler with C++11 support was found" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 -$as_echo "#define HAVE_CXX11 1" >>confdefs.h +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h fi # Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : +if test ${enable_largefile+y} +then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if ${ac_cv_sys_largefile_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +printf %s "checking for special C compiler options needed for large files... " >&6; } +if test ${ac_cv_sys_largefile_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC @@ -19052,44 +19981,47 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : break fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_largefile_CC=' -n32'; break fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if ${ac_cv_sys_file_offset_bits+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test ${ac_cv_sys_file_offset_bits+y} +then : + printf %s "(cached) " >&6 +else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19098,22 +20030,23 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_file_offset_bits=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 @@ -19122,43 +20055,43 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_file_offset_bits=64; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF +printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if ${ac_cv_sys_large_files+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } +if test ${ac_cv_sys_large_files+y} +then : + printf %s "(cached) " >&6 +else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -19167,22 +20100,23 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_large_files=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 @@ -19191,40 +20125,37 @@ We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_sys_large_files=1; break fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +printf "%s\n" "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF +printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h ;; esac rm -rf conftest* fi - - fi @@ -19238,11 +20169,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. @@ -19252,11 +20184,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19268,11 +20204,11 @@ fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +printf "%s\n" "$PKG_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19281,11 +20217,12 @@ ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. @@ -19295,11 +20232,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19311,11 +20252,11 @@ fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then @@ -19323,8 +20264,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG @@ -19336,14 +20277,14 @@ fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.28 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi @@ -19360,9 +20301,9 @@ HB_VERSION_MAJOR=8 -HB_VERSION_MINOR=0 -HB_VERSION_MICRO=1 -HB_VERSION=8.0.1 +HB_VERSION_MINOR=3 +HB_VERSION_MICRO=0 +HB_VERSION=8.3.0 @@ -19370,14 +20311,15 @@ # Libtool version -HB_LIBTOOL_VERSION_INFO=60801:0:60801 +HB_LIBTOOL_VERSION_INFO=60830:0:60830 # Check whether --with-libstdc++ was given. -if test "${with_libstdc__+set}" = set; then : +if test ${with_libstdc__+y} +then : withval=$with_libstdc__; with_libstdcxx=$withval -else +else $as_nop with_libstdcxx=no fi @@ -19397,37 +20339,38 @@ gtk_doc_requires="gtk-doc >= 1.15" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gtk-doc" >&5 -$as_echo_n "checking for gtk-doc... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-doc" >&5 +printf %s "checking for gtk-doc... " >&6; } if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_doc_requires\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_doc_requires\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_doc_requires") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then have_gtk_doc=yes else have_gtk_doc=no fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gtk_doc" >&5 -$as_echo "$have_gtk_doc" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gtk_doc" >&5 +printf "%s\n" "$have_gtk_doc" >&6; } if test "$have_gtk_doc" = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&5 -$as_echo "$as_me: WARNING: +printf "%s\n" "$as_me: WARNING: You will not be able to create source packages with 'make dist' because $gtk_doc_requires is not found." >&2;} fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_GTKDOC_CHECK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_GTKDOC_CHECK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$GTKDOC_CHECK"; then ac_cv_prog_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test. else @@ -19435,11 +20378,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_GTKDOC_CHECK="gtkdoc-check.test" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19450,21 +20397,22 @@ fi GTKDOC_CHECK=$ac_cv_prog_GTKDOC_CHECK if test -n "$GTKDOC_CHECK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 -$as_echo "$GTKDOC_CHECK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5 +printf "%s\n" "$GTKDOC_CHECK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "gtkdoc-check", so it can be a program name with args. set dummy gtkdoc-check; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GTKDOC_CHECK_PATH+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_GTKDOC_CHECK_PATH+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $GTKDOC_CHECK_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_CHECK_PATH="$GTKDOC_CHECK_PATH" # Let the user override the test with a path. @@ -19474,11 +20422,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GTKDOC_CHECK_PATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_GTKDOC_CHECK_PATH="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19490,11 +20442,11 @@ fi GTKDOC_CHECK_PATH=$ac_cv_path_GTKDOC_CHECK_PATH if test -n "$GTKDOC_CHECK_PATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK_PATH" >&5 -$as_echo "$GTKDOC_CHECK_PATH" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK_PATH" >&5 +printf "%s\n" "$GTKDOC_CHECK_PATH" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19502,11 +20454,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GTKDOC_REBASE+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_GTKDOC_REBASE+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $GTKDOC_REBASE in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path. @@ -19516,11 +20469,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_GTKDOC_REBASE="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19532,11 +20489,11 @@ fi GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE if test -n "$GTKDOC_REBASE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 -$as_echo "$GTKDOC_REBASE" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5 +printf "%s\n" "$GTKDOC_REBASE" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -19546,11 +20503,12 @@ # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args. set dummy gtkdoc-mkpdf; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GTKDOC_MKPDF+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_GTKDOC_MKPDF+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $GTKDOC_MKPDF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path. @@ -19560,11 +20518,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_GTKDOC_MKPDF="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -19576,20 +20538,21 @@ fi GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF if test -n "$GTKDOC_MKPDF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 -$as_echo "$GTKDOC_MKPDF" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5 +printf "%s\n" "$GTKDOC_MKPDF" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Check whether --with-html-dir was given. -if test "${with_html_dir+set}" = set; then : +if test ${with_html_dir+y} +then : withval=$with_html_dir; -else +else $as_nop with_html_dir='${datadir}/gtk-doc/html' fi @@ -19597,17 +20560,18 @@ # Check whether --enable-gtk-doc was given. -if test "${enable_gtk_doc+set}" = set; then : +if test ${enable_gtk_doc+y} +then : enableval=$enable_gtk_doc; -else +else $as_nop enable_gtk_doc=no fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 -$as_echo_n "checking whether to build gtk-doc documentation... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 -$as_echo "$enable_gtk_doc" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5 +printf %s "checking whether to build gtk-doc documentation... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5 +printf "%s\n" "$enable_gtk_doc" >&6; } if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then as_fn_error $? " @@ -19619,17 +20583,17 @@ if test "x$PACKAGE_NAME" != "xglib"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKDOC_DEPS" >&5 -$as_echo_n "checking for GTKDOC_DEPS... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" >&5 +printf %s "checking for glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0... " >&6; } if test -n "$GTKDOC_DEPS_CFLAGS"; then pkg_cv_GTKDOC_DEPS_CFLAGS="$GTKDOC_DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -19643,10 +20607,10 @@ pkg_cv_GTKDOC_DEPS_LIBS="$GTKDOC_DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTKDOC_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -19660,8 +20624,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -19678,29 +20642,31 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else GTKDOC_DEPS_CFLAGS=$pkg_cv_GTKDOC_DEPS_CFLAGS GTKDOC_DEPS_LIBS=$pkg_cv_GTKDOC_DEPS_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi fi # Check whether --enable-gtk-doc-html was given. -if test "${enable_gtk_doc_html+set}" = set; then : +if test ${enable_gtk_doc_html+y} +then : enableval=$enable_gtk_doc_html; -else +else $as_nop enable_gtk_doc_html=yes fi # Check whether --enable-gtk-doc-pdf was given. -if test "${enable_gtk_doc_pdf+set}" = set; then : +if test ${enable_gtk_doc_pdf+y} +then : enableval=$enable_gtk_doc_pdf; -else +else $as_nop enable_gtk_doc_pdf=no fi @@ -19769,51 +20735,105 @@ # Functions and headers -for ac_func in atexit mprotect sysconf getpagesize mmap isatty newlocale uselocale sincosf -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "atexit" "ac_cv_func_atexit" +if test "x$ac_cv_func_atexit" = xyes +then : + printf "%s\n" "#define HAVE_ATEXIT 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "mprotect" "ac_cv_func_mprotect" +if test "x$ac_cv_func_mprotect" = xyes +then : + printf "%s\n" "#define HAVE_MPROTECT 1" >>confdefs.h -for ac_header in unistd.h sys/mman.h stdbool.h xlocale.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf" +if test "x$ac_cv_func_sysconf" = xyes +then : + printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = xyes +then : + printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h -done +fi +ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = xyes +then : + printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "isatty" "ac_cv_func_isatty" +if test "x$ac_cv_func_isatty" = xyes +then : + printf "%s\n" "#define HAVE_ISATTY 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" +if test "x$ac_cv_func_newlocale" = xyes +then : + printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" +if test "x$ac_cv_func_uselocale" = xyes +then : + printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "sincosf" "ac_cv_func_sincosf" +if test "x$ac_cv_func_sincosf" = xyes +then : + printf "%s\n" "#define HAVE_SINCOSF 1" >>confdefs.h + +fi + +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mman_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" "$ac_includes_default" +if test "x$ac_cv_header_stdbool_h" = xyes +then : + printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "xlocale.h" "ac_cv_header_xlocale_h" "$ac_includes_default" +if test "x$ac_cv_header_xlocale_h" = xyes +then : + printf "%s\n" "#define HAVE_XLOCALE_H 1" >>confdefs.h + +fi # Compiler flags # The cast to long int works around a bug in the HP C Compiler, # see AC_CHECK_SIZEOF for more information. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking alignment of struct{char;}" >&5 -$as_echo_n "checking alignment of struct{char;}... " >&6; } -if ${ac_cv_alignof_struct_char__+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking alignment of struct{char;}" >&5 +printf %s "checking alignment of struct{char;}... " >&6; } +if test ${ac_cv_alignof_struct_char__+y} +then : + printf %s "(cached) " >&6 +else $as_nop if ac_fn_c_compute_int "$LINENO" "(long int) offsetof (ac__type_alignof_, y)" "ac_cv_alignof_struct_char__" "$ac_includes_default -#ifndef offsetof -# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0) -#endif -typedef struct { char x; struct{char;} y; } ac__type_alignof_;"; then : +typedef struct { char x; struct{char;} y; } ac__type_alignof_;" +then : -else +else $as_nop if test "$ac_cv_type_struct_char__" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute alignment of struct{char;} See \`config.log' for more details" "$LINENO" 5; } else @@ -19822,24 +20842,23 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_struct_char__" >&5 -$as_echo "$ac_cv_alignof_struct_char__" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_alignof_struct_char__" >&5 +printf "%s\n" "$ac_cv_alignof_struct_char__" >&6; } -cat >>confdefs.h <<_ACEOF -#define ALIGNOF_STRUCT_CHAR__ $ac_cv_alignof_struct_char__ -_ACEOF +printf "%s\n" "#define ALIGNOF_STRUCT_CHAR__ $ac_cv_alignof_struct_char__" >>confdefs.h if test "x$GCC" = "xyes"; then # Make symbols link locally - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Bsymbolic-functions" >&5 -$as_echo_n "checking whether the linker accepts -Bsymbolic-functions... " >&6; } -if ${ax_cv_check_ldflags___Bsymbolic_functions+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Bsymbolic-functions" >&5 +printf %s "checking whether the linker accepts -Bsymbolic-functions... " >&6; } +if test ${ax_cv_check_ldflags___Bsymbolic_functions+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_check_save_flags=$LDFLAGS LDFLAGS="$LDFLAGS -Bsymbolic-functions" @@ -19847,27 +20866,29 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_cv_check_ldflags___Bsymbolic_functions=yes -else +else $as_nop ax_cv_check_ldflags___Bsymbolic_functions=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$ax_check_save_flags fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Bsymbolic_functions" >&5 -$as_echo "$ax_cv_check_ldflags___Bsymbolic_functions" >&6; } -if test "x$ax_cv_check_ldflags___Bsymbolic_functions" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Bsymbolic_functions" >&5 +printf "%s\n" "$ax_cv_check_ldflags___Bsymbolic_functions" >&6; } +if test "x$ax_cv_check_ldflags___Bsymbolic_functions" = xyes +then : LDFLAGS="$LDFLAGS -Bsymbolic-functions" -else +else $as_nop : fi @@ -19909,15 +20930,15 @@ hb_os_win32=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5 -$as_echo_n "checking for native Win32... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5 +printf %s "checking for native Win32... " >&6; } case "$host" in *-*-mingw*) hb_os_win32=yes ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hb_os_win32" >&5 -$as_echo "$hb_os_win32" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hb_os_win32" >&5 +printf "%s\n" "$hb_os_win32" >&6; } if test "$hb_os_win32" = "yes"; then OS_WIN32_TRUE= OS_WIN32_FALSE='#' @@ -19928,6 +20949,139 @@ have_pthread=false +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + @@ -19951,38 +21105,37 @@ ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" - if test "x$PTHREAD_CC" != "x"; then : + if test "x$PTHREAD_CC" != "x" +then : CC="$PTHREAD_CC" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 -$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 +printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char pthread_join (); int -main () +main (void) { return pthread_join (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +printf "%s\n" "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" @@ -20058,11 +21211,12 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 -$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 +printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi -rm -f conftest* +rm -rf conftest* ;; @@ -20082,7 +21236,8 @@ # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) -if test "x$GCC" = "xyes"; then : +if test "x$GCC" = "xyes" +then : ax_pthread_flags="-pthread -pthreads $ax_pthread_flags" fi @@ -20103,19 +21258,21 @@ ax_pthread_check_macro="--" ;; esac -if test "x$ax_pthread_check_macro" = "x--"; then : +if test "x$ax_pthread_check_macro" = "x--" +then : ax_pthread_check_cond=0 -else +else $as_nop ax_pthread_check_cond="!defined($ax_pthread_check_macro)" fi # Are we compiling with Clang? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 -$as_echo_n "checking whether $CC is Clang... " >&6; } -if ${ax_cv_PTHREAD_CLANG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 +printf %s "checking whether $CC is Clang... " >&6; } +if test ${ax_cv_PTHREAD_CLANG+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then @@ -20128,16 +21285,17 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 +then : ax_cv_PTHREAD_CLANG=yes fi -rm -f conftest* +rm -rf conftest* fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 +printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" ax_pthread_clang_warning=no @@ -20183,11 +21341,12 @@ # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 -$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } -if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 +printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } +if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one @@ -20199,7 +21358,8 @@ ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do - if test "x$ax_pthread_try" = "xunknown"; then : + if test "x$ax_pthread_try" = "xunknown" +then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" @@ -20208,32 +21368,35 @@ /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" - if test "x$ax_pthread_try" = "x"; then : + if test "x$ax_pthread_try" = "x" +then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 -$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 +printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; @@ -20247,31 +21410,32 @@ case $ax_pthread_try_flag in none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +printf %s "checking whether pthreads work without any flags... " >&6; } ;; -mt,pthread) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5 -$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5 +printf %s "checking whether pthreads work with -mt -lpthread... " >&6; } PTHREAD_CFLAGS="-mt" PTHREAD_LIBS="-lpthread" ;; -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 -$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 +printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ax_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ax_pthread_config+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else @@ -20279,11 +21443,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20295,15 +21463,16 @@ fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 -$as_echo "$ax_pthread_config" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +printf "%s\n" "$ax_pthread_config" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - if test "x$ax_pthread_config" = "xno"; then : + if test "x$ax_pthread_config" = "xno" +then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" @@ -20311,8 +21480,8 @@ ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 -$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 +printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac @@ -20341,7 +21510,7 @@ static void routine(void *a) { a = 0; } static void *start_routine(void *a) { return a; } int -main () +main (void) { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); @@ -20353,18 +21522,20 @@ return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -$as_echo "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = "xyes"; then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +printf "%s\n" "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xyes" +then : break fi @@ -20381,51 +21552,53 @@ LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } -if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +printf %s "checking for joinable pthread attribute... " >&6; } +if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 -$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 +printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ - test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : + test "x$ax_pthread_joinable_attr_defined" != "xyes" +then : -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR -_ACEOF +printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h ax_pthread_joinable_attr_defined=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 -$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } -if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 +printf %s "checking whether more special flags are required for pthreads... " >&6; } +if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} +then : + printf %s "(cached) " >&6 +else $as_nop ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) @@ -20434,45 +21607,49 @@ esac fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 -$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 +printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ - test "x$ax_pthread_special_flags_added" != "xyes"; then : + test "x$ax_pthread_special_flags_added" != "xyes" +then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 -$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } -if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int i = PTHREAD_PRIO_INHERIT; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else +else $as_nop ax_cv_PTHREAD_PRIO_INHERIT=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 -$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ - test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : + test "x$ax_pthread_prio_inherit_defined" != "xyes" +then : -$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes @@ -20490,7 +21667,8 @@ #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : - if as_fn_executable_p ${CC}_r; then : + if as_fn_executable_p ${CC}_r +then : PTHREAD_CC="${CC}_r" fi ;; #( *) : @@ -20498,11 +21676,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_PTHREAD_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else @@ -20510,11 +21689,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -20525,11 +21708,11 @@ fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +printf "%s\n" "$PTHREAD_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -20569,7 +21752,7 @@ if $have_pthread; then -$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h +printf "%s\n" "#define HAVE_PTHREAD 1" >>confdefs.h fi if $have_pthread; then @@ -20584,9 +21767,10 @@ # Check whether --with-glib was given. -if test "${with_glib+set}" = set; then : +if test ${with_glib+y} +then : withval=$with_glib; -else +else $as_nop with_glib=auto fi @@ -20596,17 +21780,17 @@ if test "x$with_glib" = "xyes" -o "x$with_glib" = "xauto"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 -$as_echo_n "checking for GLIB... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $GLIB_DEPS" >&5 +printf %s "checking for $GLIB_DEPS... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GLIB_DEPS\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GLIB_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$GLIB_DEPS") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "$GLIB_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -20620,10 +21804,10 @@ pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GLIB_DEPS\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GLIB_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$GLIB_DEPS") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "$GLIB_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -20637,8 +21821,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -20655,14 +21839,14 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_glib=true fi fi @@ -20671,7 +21855,7 @@ fi if $have_glib; then -$as_echo "#define HAVE_GLIB 1" >>confdefs.h +printf "%s\n" "#define HAVE_GLIB 1" >>confdefs.h fi if $have_glib; then @@ -20686,9 +21870,10 @@ # Check whether --with-gobject was given. -if test "${with_gobject+set}" = set; then : +if test ${with_gobject+y} +then : withval=$with_gobject; -else +else $as_nop with_gobject=no fi @@ -20696,17 +21881,17 @@ if test "x$with_gobject" = "xyes" -o "x$with_gobject" = "xauto"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5 -$as_echo_n "checking for GOBJECT... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gobject-2.0 glib-2.0" >&5 +printf %s "checking for gobject-2.0 glib-2.0... " >&6; } if test -n "$GOBJECT_CFLAGS"; then pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 glib-2.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0 glib-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -20720,10 +21905,10 @@ pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 glib-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 glib-2.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "gobject-2.0 glib-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -20737,8 +21922,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -20755,14 +21940,14 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_gobject=true fi fi @@ -20771,7 +21956,7 @@ fi if $have_gobject; then -$as_echo "#define HAVE_GOBJECT 1" >>confdefs.h +printf "%s\n" "#define HAVE_GOBJECT 1" >>confdefs.h GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` @@ -20796,15 +21981,16 @@ # Check whether --enable-introspection was given. -if test "${enable_introspection+set}" = set; then : +if test ${enable_introspection+y} +then : enableval=$enable_introspection; -else +else $as_nop enable_introspection=auto fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5 -$as_echo_n "checking for gobject-introspection... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gobject-introspection" >&5 +printf %s "checking for gobject-introspection... " >&6; } case $enable_introspection in #( no) : @@ -20812,20 +21998,20 @@ ;; #( yes) : if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else as_fn_error $? "gobject-introspection-1.0 is not installed" "$LINENO" 5 fi if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 1.34.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 1.34.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 1.34.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then found_introspection=yes else @@ -20834,10 +22020,10 @@ ;; #( auto) : if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 1.34.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-introspection-1.0 >= 1.34.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-introspection-1.0 >= 1.34.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then found_introspection=yes else @@ -20849,8 +22035,8 @@ as_fn_error $? "invalid argument passed to --enable-introspection, should be one of [no/auto/yes]" "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5 -$as_echo "$found_introspection" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $found_introspection" >&5 +printf "%s\n" "$found_introspection" >&6; } EXP_VAR=_GI_EXP_DATADIR @@ -20961,9 +22147,10 @@ # Check whether --with-cairo was given. -if test "${with_cairo+set}" = set; then : +if test ${with_cairo+y} +then : withval=$with_cairo; -else +else $as_nop with_cairo=auto fi @@ -20971,17 +22158,17 @@ if test "x$with_cairo" = "xyes" -o "x$with_cairo" = "xauto"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 -$as_echo_n "checking for CAIRO... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cairo >= 1.8.0" >&5 +printf %s "checking for cairo >= 1.8.0... " >&6; } if test -n "$CAIRO_CFLAGS"; then pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.8.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.8.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo >= 1.8.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.8.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -20995,10 +22182,10 @@ pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.8.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.8.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo >= 1.8.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.8.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21012,8 +22199,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -21030,28 +22217,24 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS CAIRO_LIBS=$pkg_cv_CAIRO_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_cairo=true fi save_libs=$LIBS LIBS="$LIBS $CAIRO_LIBS" - for ac_func in cairo_user_font_face_set_render_color_glyph_func -do : - ac_fn_c_check_func "$LINENO" "cairo_user_font_face_set_render_color_glyph_func" "ac_cv_func_cairo_user_font_face_set_render_color_glyph_func" -if test "x$ac_cv_func_cairo_user_font_face_set_render_color_glyph_func" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CAIRO_USER_FONT_FACE_SET_RENDER_COLOR_GLYPH_FUNC 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "cairo_user_font_face_set_render_color_glyph_func" "ac_cv_func_cairo_user_font_face_set_render_color_glyph_func" +if test "x$ac_cv_func_cairo_user_font_face_set_render_color_glyph_func" = xyes +then : + printf "%s\n" "#define HAVE_CAIRO_USER_FONT_FACE_SET_RENDER_COLOR_GLYPH_FUNC 1" >>confdefs.h fi -done LIBS=$save_libs fi @@ -21060,7 +22243,7 @@ fi if $have_cairo; then -$as_echo "#define HAVE_CAIRO 1" >>confdefs.h +printf "%s\n" "#define HAVE_CAIRO 1" >>confdefs.h fi if $have_cairo; then @@ -21076,17 +22259,17 @@ if $have_cairo; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO_FT" >&5 -$as_echo_n "checking for CAIRO_FT... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cairo-ft" >&5 +printf %s "checking for cairo-ft... " >&6; } if test -n "$CAIRO_FT_CFLAGS"; then pkg_cv_CAIRO_FT_CFLAGS="$CAIRO_FT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-ft\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-ft\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo-ft") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_FT_CFLAGS=`$PKG_CONFIG --cflags "cairo-ft" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21100,10 +22283,10 @@ pkg_cv_CAIRO_FT_LIBS="$CAIRO_FT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-ft\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo-ft\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo-ft") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_FT_LIBS=`$PKG_CONFIG --libs "cairo-ft" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21117,8 +22300,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -21135,20 +22318,20 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else CAIRO_FT_CFLAGS=$pkg_cv_CAIRO_FT_CFLAGS CAIRO_FT_LIBS=$pkg_cv_CAIRO_FT_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_cairo_ft=true fi fi if $have_cairo_ft; then -$as_echo "#define HAVE_CAIRO_FT 1" >>confdefs.h +printf "%s\n" "#define HAVE_CAIRO_FT 1" >>confdefs.h fi if $have_cairo_ft; then @@ -21163,9 +22346,10 @@ # Check whether --with-chafa was given. -if test "${with_chafa+set}" = set; then : +if test ${with_chafa+y} +then : withval=$with_chafa; -else +else $as_nop with_chafa=auto fi @@ -21173,17 +22357,17 @@ if test "x$with_chafa" = "xyes" -o "x$with_chafa" = "xauto"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CHAFA" >&5 -$as_echo_n "checking for CHAFA... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for chafa >= 1.6.0" >&5 +printf %s "checking for chafa >= 1.6.0... " >&6; } if test -n "$CHAFA_CFLAGS"; then pkg_cv_CHAFA_CFLAGS="$CHAFA_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"chafa >= 1.6.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"chafa >= 1.6.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "chafa >= 1.6.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CHAFA_CFLAGS=`$PKG_CONFIG --cflags "chafa >= 1.6.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21197,10 +22381,10 @@ pkg_cv_CHAFA_LIBS="$CHAFA_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"chafa >= 1.6.0\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"chafa >= 1.6.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "chafa >= 1.6.0") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CHAFA_LIBS=`$PKG_CONFIG --libs "chafa >= 1.6.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21214,8 +22398,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -21232,14 +22416,14 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else CHAFA_CFLAGS=$pkg_cv_CHAFA_CFLAGS CHAFA_LIBS=$pkg_cv_CHAFA_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_chafa=true fi fi @@ -21248,7 +22432,7 @@ fi if $have_chafa; then -$as_echo "#define HAVE_CHAFA 1" >>confdefs.h +printf "%s\n" "#define HAVE_CHAFA 1" >>confdefs.h fi if $have_chafa; then @@ -21263,9 +22447,10 @@ # Check whether --with-icu was given. -if test "${with_icu+set}" = set; then : +if test ${with_icu+y} +then : withval=$with_icu; -else +else $as_nop with_icu=auto fi @@ -21273,17 +22458,17 @@ if test "x$with_icu" = "xyes" -o "x$with_icu" = "xbuiltin" -o "x$with_icu" = "xauto"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ICU" >&5 -$as_echo_n "checking for ICU... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for icu-uc" >&5 +printf %s "checking for icu-uc... " >&6; } if test -n "$ICU_CFLAGS"; then pkg_cv_ICU_CFLAGS="$ICU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-uc\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-uc\""; } >&5 ($PKG_CONFIG --exists --print-errors "icu-uc") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ICU_CFLAGS=`$PKG_CONFIG --cflags "icu-uc" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21297,10 +22482,10 @@ pkg_cv_ICU_LIBS="$ICU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-uc\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"icu-uc\""; } >&5 ($PKG_CONFIG --exists --print-errors "icu-uc") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ICU_LIBS=`$PKG_CONFIG --libs "icu-uc" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21314,8 +22499,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -21332,14 +22517,14 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else ICU_CFLAGS=$pkg_cv_ICU_CFLAGS ICU_LIBS=$pkg_cv_ICU_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_icu=true fi fi @@ -21350,11 +22535,11 @@ if $have_icu; then CXXFLAGS="$CXXFLAGS `$PKG_CONFIG --variable=CXXFLAGS icu-uc`" -$as_echo "#define HAVE_ICU 1" >>confdefs.h +printf "%s\n" "#define HAVE_ICU 1" >>confdefs.h if test "x$with_icu" = "xbuiltin"; then -$as_echo "#define HAVE_ICU_BUILTIN 1" >>confdefs.h +printf "%s\n" "#define HAVE_ICU_BUILTIN 1" >>confdefs.h fi fi @@ -21378,9 +22563,10 @@ # Check whether --with-graphite2 was given. -if test "${with_graphite2+set}" = set; then : +if test ${with_graphite2+y} +then : withval=$with_graphite2; -else +else $as_nop with_graphite2=no fi @@ -21390,17 +22576,17 @@ if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GRAPHITE2" >&5 -$as_echo_n "checking for GRAPHITE2... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $GRAPHITE2_DEPS" >&5 +printf %s "checking for $GRAPHITE2_DEPS... " >&6; } if test -n "$GRAPHITE2_CFLAGS"; then pkg_cv_GRAPHITE2_CFLAGS="$GRAPHITE2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GRAPHITE2_DEPS\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GRAPHITE2_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$GRAPHITE2_DEPS") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GRAPHITE2_CFLAGS=`$PKG_CONFIG --cflags "$GRAPHITE2_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21414,10 +22600,10 @@ pkg_cv_GRAPHITE2_LIBS="$GRAPHITE2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GRAPHITE2_DEPS\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$GRAPHITE2_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$GRAPHITE2_DEPS") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GRAPHITE2_LIBS=`$PKG_CONFIG --libs "$GRAPHITE2_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21431,8 +22617,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -21449,14 +22635,14 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else GRAPHITE2_CFLAGS=$pkg_cv_GRAPHITE2_CFLAGS GRAPHITE2_LIBS=$pkg_cv_GRAPHITE2_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_graphite2=true fi if test "x$have_graphite2" != "xtrue"; then @@ -21465,14 +22651,14 @@ ac_save_CPPFLAGS="$CPPFLAGS" CFLAGS="$CFLAGS $GRAPHITE2_CFLAGS" CPPFLAGS="$CPPFLAGS $GRAPHITE2_CFLAGS" - ac_fn_c_check_header_mongrel "$LINENO" "graphite2/Segment.h" "ac_cv_header_graphite2_Segment_h" "$ac_includes_default" -if test "x$ac_cv_header_graphite2_Segment_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "graphite2/Segment.h" "ac_cv_header_graphite2_Segment_h" "$ac_includes_default" +if test "x$ac_cv_header_graphite2_Segment_h" = xyes +then : have_graphite2=true -else +else $as_nop : fi - CPPFLAGS="$ac_save_CPPFLAGS" CFLAGS="$ac_save_CFLAGS" fi @@ -21482,7 +22668,7 @@ fi if $have_graphite2; then -$as_echo "#define HAVE_GRAPHITE2 1" >>confdefs.h +printf "%s\n" "#define HAVE_GRAPHITE2 1" >>confdefs.h fi if $have_graphite2; then @@ -21497,9 +22683,10 @@ # Check whether --with-freetype was given. -if test "${with_freetype+set}" = set; then : +if test ${with_freetype+y} +then : withval=$with_freetype; -else +else $as_nop with_freetype=auto fi @@ -21510,17 +22697,17 @@ # See freetype/docs/VERSION.DLL; 12.0.6 means freetype-2.4.2 pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE" >&5 -$as_echo_n "checking for FREETYPE... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $FREETYPE_DEPS" >&5 +printf %s "checking for $FREETYPE_DEPS... " >&6; } if test -n "$FREETYPE_CFLAGS"; then pkg_cv_FREETYPE_CFLAGS="$FREETYPE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$FREETYPE_DEPS\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$FREETYPE_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FREETYPE_CFLAGS=`$PKG_CONFIG --cflags "$FREETYPE_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21534,10 +22721,10 @@ pkg_cv_FREETYPE_LIBS="$FREETYPE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$FREETYPE_DEPS\""; } >&5 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$FREETYPE_DEPS\""; } >&5 ($PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FREETYPE_LIBS=`$PKG_CONFIG --libs "$FREETYPE_DEPS" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes @@ -21551,8 +22738,8 @@ if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes @@ -21569,14 +22756,14 @@ : elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } : else FREETYPE_CFLAGS=$pkg_cv_FREETYPE_CFLAGS FREETYPE_LIBS=$pkg_cv_FREETYPE_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } have_freetype=true fi fi @@ -21585,21 +22772,34 @@ fi if $have_freetype; then -$as_echo "#define HAVE_FREETYPE 1" >>confdefs.h +printf "%s\n" "#define HAVE_FREETYPE 1" >>confdefs.h save_libs=$LIBS LIBS="$LIBS $FREETYPE_LIBS" - for ac_func in FT_Get_Var_Blend_Coordinates FT_Set_Var_Blend_Coordinates FT_Done_MM_Var FT_Get_Transform -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "FT_Get_Var_Blend_Coordinates" "ac_cv_func_FT_Get_Var_Blend_Coordinates" +if test "x$ac_cv_func_FT_Get_Var_Blend_Coordinates" = xyes +then : + printf "%s\n" "#define HAVE_FT_GET_VAR_BLEND_COORDINATES 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "FT_Set_Var_Blend_Coordinates" "ac_cv_func_FT_Set_Var_Blend_Coordinates" +if test "x$ac_cv_func_FT_Set_Var_Blend_Coordinates" = xyes +then : + printf "%s\n" "#define HAVE_FT_SET_VAR_BLEND_COORDINATES 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "FT_Done_MM_Var" "ac_cv_func_FT_Done_MM_Var" +if test "x$ac_cv_func_FT_Done_MM_Var" = xyes +then : + printf "%s\n" "#define HAVE_FT_DONE_MM_VAR 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "FT_Get_Transform" "ac_cv_func_FT_Get_Transform" +if test "x$ac_cv_func_FT_Get_Transform" = xyes +then : + printf "%s\n" "#define HAVE_FT_GET_TRANSFORM 1" >>confdefs.h fi -done LIBS=$save_libs fi @@ -21615,27 +22815,28 @@ # Check whether --with-uniscribe was given. -if test "${with_uniscribe+set}" = set; then : +if test ${with_uniscribe+y} +then : withval=$with_uniscribe; -else +else $as_nop with_uniscribe=no fi have_uniscribe=false if test "x$with_uniscribe" = "xyes" -o "x$with_uniscribe" = "xauto"; then - for ac_header in usp10.h windows.h + for ac_header in usp10.h windows.h do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF have_uniscribe=true fi done - fi if test "x$with_uniscribe" = "xyes" -a "x$have_uniscribe" != "xtrue"; then as_fn_error $? "uniscribe support requested but not found" "$LINENO" 5 @@ -21646,7 +22847,7 @@ -$as_echo "#define HAVE_UNISCRIBE 1" >>confdefs.h +printf "%s\n" "#define HAVE_UNISCRIBE 1" >>confdefs.h fi if $have_uniscribe; then @@ -21661,26 +22862,25 @@ # Check whether --with-gdi was given. -if test "${with_gdi+set}" = set; then : +if test ${with_gdi+y} +then : withval=$with_gdi; -else +else $as_nop with_gdi=no fi have_gdi=false if test "x$with_gdi" = "xyes" -o "x$with_gdi" = "xauto"; then - for ac_header in windows.h + for ac_header in windows.h do : - ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" -if test "x$ac_cv_header_windows_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WINDOWS_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" +if test "x$ac_cv_header_windows_h" = xyes +then : + printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h have_gdi=true fi done - fi if test "x$with_gdi" = "xyes" -a "x$have_gdi" != "xtrue"; then as_fn_error $? "gdi support requested but not found" "$LINENO" 5 @@ -21691,7 +22891,7 @@ -$as_echo "#define HAVE_GDI 1" >>confdefs.h +printf "%s\n" "#define HAVE_GDI 1" >>confdefs.h fi if $have_gdi; then @@ -21706,9 +22906,10 @@ # Check whether --with-directwrite was given. -if test "${with_directwrite+set}" = set; then : +if test ${with_directwrite+y} +then : withval=$with_directwrite; -else +else $as_nop with_directwrite=no fi @@ -21720,19 +22921,16 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "x$with_directwrite" = "xyes" -o "x$with_directwrite" = "xauto"; then - -for ac_header in dwrite_1.h + for ac_header in dwrite_1.h do : - ac_fn_cxx_check_header_mongrel "$LINENO" "dwrite_1.h" "ac_cv_header_dwrite_1_h" "$ac_includes_default" -if test "x$ac_cv_header_dwrite_1_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DWRITE_1_H 1 -_ACEOF + ac_fn_cxx_check_header_compile "$LINENO" "dwrite_1.h" "ac_cv_header_dwrite_1_h" "$ac_includes_default" +if test "x$ac_cv_header_dwrite_1_h" = xyes +then : + printf "%s\n" "#define HAVE_DWRITE_1_H 1" >>confdefs.h have_directwrite=true fi done - fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -21745,7 +22943,7 @@ fi if $have_directwrite; then -$as_echo "#define HAVE_DIRECTWRITE 1" >>confdefs.h +printf "%s\n" "#define HAVE_DIRECTWRITE 1" >>confdefs.h fi if $have_directwrite; then @@ -21760,9 +22958,10 @@ # Check whether --with-coretext was given. -if test "${with_coretext+set}" = set; then : +if test ${with_coretext+y} +then : withval=$with_coretext; -else +else $as_nop with_coretext=no fi @@ -21770,7 +22969,8 @@ if test "x$with_coretext" = "xyes" -o "x$with_coretext" = "xauto"; then ac_fn_c_check_type "$LINENO" "CTFontRef" "ac_cv_type_CTFontRef" "#include " -if test "x$ac_cv_type_CTFontRef" = xyes; then : +if test "x$ac_cv_type_CTFontRef" = xyes +then : have_coretext=true fi @@ -21786,7 +22986,8 @@ # Check for a different symbol to avoid getting cached result. ac_fn_c_check_type "$LINENO" "CTRunRef" "ac_cv_type_CTRunRef" "#include " -if test "x$ac_cv_type_CTRunRef" = xyes; then : +if test "x$ac_cv_type_CTRunRef" = xyes +then : have_coretext=true fi @@ -21805,7 +23006,7 @@ fi if $have_coretext; then -$as_echo "#define HAVE_CORETEXT 1" >>confdefs.h +printf "%s\n" "#define HAVE_CORETEXT 1" >>confdefs.h fi if $have_coretext; then @@ -21820,26 +23021,25 @@ # Check whether --with-wasm was given. -if test "${with_wasm+set}" = set; then : +if test ${with_wasm+y} +then : withval=$with_wasm; -else +else $as_nop with_wasm=no fi have_wasm=false if test "x$with_wasm" = "xyes" -o "x$with_wasm" = "xauto"; then - for ac_header in wasm_export.h + for ac_header in wasm_export.h do : - ac_fn_c_check_header_mongrel "$LINENO" "wasm_export.h" "ac_cv_header_wasm_export_h" "$ac_includes_default" -if test "x$ac_cv_header_wasm_export_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_WASM_EXPORT_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "wasm_export.h" "ac_cv_header_wasm_export_h" "$ac_includes_default" +if test "x$ac_cv_header_wasm_export_h" = xyes +then : + printf "%s\n" "#define HAVE_WASM_EXPORT_H 1" >>confdefs.h have_wasm=true fi done - fi if test "x$with_wasm" = "xyes" -a "x$have_wasm" != "xtrue"; then as_fn_error $? "wasm support requested but not found" "$LINENO" 5 @@ -21850,7 +23050,7 @@ -$as_echo "#define HAVE_WASM 1" >>confdefs.h +printf "%s\n" "#define HAVE_WASM 1" >>confdefs.h fi if $have_wasm; then @@ -21893,8 +23093,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -21924,15 +23124,15 @@ /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -21946,8 +23146,8 @@ fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -21964,7 +23164,7 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -21975,14 +23175,14 @@ LTLIBOBJS=$ac_ltlibobjs -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 -$as_echo_n "checking that generated files are newer than configure... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 -$as_echo "done" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 +printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -22120,8 +23320,8 @@ ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -22144,14 +23344,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -22161,46 +23363,46 @@ fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -22209,13 +23411,6 @@ fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -22224,8 +23419,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -22237,30 +23436,10 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -22273,13 +23452,14 @@ as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -22306,18 +23486,20 @@ { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -22329,12 +23511,13 @@ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -22365,7 +23548,7 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -22387,6 +23570,10 @@ as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -22400,6 +23587,12 @@ ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -22441,7 +23634,7 @@ as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -22450,7 +23643,7 @@ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -22512,8 +23705,8 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by HarfBuzz $as_me 8.0.1, which was -generated by GNU Autoconf 2.69. Invocation command line was +This file was extended by HarfBuzz $as_me 8.3.0, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -22576,14 +23769,16 @@ HarfBuzz home page: ." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -HarfBuzz config.status 8.0.1 -configured by $0, generated by GNU Autoconf 2.69, +HarfBuzz config.status 8.3.0 +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -22623,15 +23818,15 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -22639,7 +23834,7 @@ --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -22648,7 +23843,7 @@ as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -22676,7 +23871,7 @@ if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -22690,7 +23885,7 @@ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -23122,9 +24317,9 @@ # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -23460,7 +24655,7 @@ esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -23468,17 +24663,17 @@ # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -23495,7 +24690,7 @@ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23519,9 +24714,9 @@ case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -23583,8 +24778,8 @@ case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -23628,9 +24823,9 @@ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -23646,20 +24841,20 @@ # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi @@ -23679,7 +24874,7 @@ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | +printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23699,8 +24894,8 @@ s/.*/./; q'`/stamp-h$_am_stamp_count ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -23726,7 +24921,7 @@ for am_mf do # Strip MF so we end up with the name of the file. - am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line @@ -23738,7 +24933,7 @@ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$am_mf" | +printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -23760,7 +24955,7 @@ $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$am_mf" | +printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -23785,10 +24980,12 @@ (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments - for automatic dependency tracking. Try re-running configure with the + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE=\"gmake\" (or whatever is + necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } @@ -24341,6 +25538,7 @@ esac + ltmain=$ac_aux_dir/ltmain.sh @@ -24543,8 +25741,8 @@ $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi @@ -24553,13 +25751,13 @@ $CXX --version echo -{ $as_echo "$as_me:${as_lineno-$LINENO}: +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Autotools is no longer our supported build system for building the library for *nix distributions, please migrate to meson. " >&5 -$as_echo "$as_me: +printf "%s\n" "$as_me: Autotools is no longer our supported build system for building the library for *nix distributions, please migrate to meson. @@ -24567,7 +25765,7 @@ " >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Build configuration: @@ -24598,7 +25796,7 @@ GObject bindings: ${have_gobject} Introspection: ${have_introspection} " >&5 -$as_echo "$as_me: +printf "%s\n" "$as_me: Build configuration: @@ -24629,3 +25827,4 @@ GObject bindings: ${have_gobject} Introspection: ${have_introspection} " >&6;} + diff -Nru harfbuzz-8.0.1/configure.ac harfbuzz-8.3.0/configure.ac --- harfbuzz-8.0.1/configure.ac 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/configure.ac 2023-11-11 14:08:45.000000000 +0000 @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([HarfBuzz], - [8.0.1], + [8.3.0], [https://github.com/harfbuzz/harfbuzz/issues/new], [harfbuzz], [http://harfbuzz.org/]) diff -Nru harfbuzz-8.0.1/debian/changelog harfbuzz-8.3.0/debian/changelog --- harfbuzz-8.0.1/debian/changelog 2023-11-18 23:24:00.000000000 +0000 +++ harfbuzz-8.3.0/debian/changelog 2024-04-23 00:15:59.000000000 +0000 @@ -1,12 +1,30 @@ -harfbuzz (8.0.1-1~16.04.sav0) xenial; urgency=medium +harfbuzz (8.3.0-2~16.04.sav0) xenial; urgency=medium * Backport to Xenial - * Revert "Build-Depend on dh-sequence-gir" (gobject-introspection < 1.58.3-2) + * Revert "d/control: Build-depend on GIR XML that is explicitly included" * debian/rules: Add default_library=both config to build static libraries - Add -Wl,--as-needed to DEB_LDFLAGS_MAINT_APPEND (older binutils) + - Restore --with gir to dh invocation (compat level < 12) * debian/control: Set debhelper-compat (= 10) BD (LP highest for Xenial) - -- Rob Savoury Sat, 18 Nov 2023 15:24:00 -0800 + -- Rob Savoury Mon, 22 Apr 2024 17:15:59 -0700 + +harfbuzz (8.3.0-2) unstable; urgency=medium + + * Team upload + * Release to unstable + + -- Jeremy Bícha Sat, 20 Jan 2024 10:33:21 -0500 + +harfbuzz (8.3.0-1) experimental; urgency=medium + + * Team upload + * New upstream version 8.3.0 (Closes: #1057964) + * debian/libharfbuzz0b.symbols: Add new symbols + * Add ${gir:Depends}, ${gir:Provides} to -dev package (Closes: #1061082) + * d/control: Build-depend on GIR XML that is explicitly included + + -- Jeremy Bícha Fri, 19 Jan 2024 21:14:42 -0500 harfbuzz (8.0.1-1) unstable; urgency=medium diff -Nru harfbuzz-8.0.1/debian/control harfbuzz-8.3.0/debian/control --- harfbuzz-8.0.1/debian/control 2023-11-18 23:21:27.000000000 +0000 +++ harfbuzz-8.3.0/debian/control 2024-04-23 00:13:36.000000000 +0000 @@ -6,6 +6,7 @@ Standards-Version: 4.6.2 Build-Depends: debhelper-compat (= 10), + dh-sequence-gir, meson (>= 0.55), pkg-config, libglib2.0-dev, @@ -15,7 +16,6 @@ libicu-dev, libgraphite2-dev, libgirepository1.0-dev, - gobject-introspection, gtk-doc-tools, Rules-Requires-Root: no Homepage: https://www.freedesktop.org/wiki/Software/HarfBuzz @@ -72,6 +72,7 @@ Multi-Arch: same Section: libdevel Depends: + ${gir:Depends}, ${misc:Depends}, libharfbuzz0b (= ${binary:Version}), libharfbuzz-icu0 (= ${binary:Version}), @@ -83,6 +84,7 @@ libgraphite2-dev, libicu-dev, libfreetype-dev, +Provides: ${gir:Provides}, Description: Development files for OpenType text shaping engine HarfBuzz is an implementation of the OpenType Layout engine (aka layout engine) and the script-specific logic (aka shaping engine). diff -Nru harfbuzz-8.0.1/debian/libharfbuzz0b.symbols harfbuzz-8.3.0/debian/libharfbuzz0b.symbols --- harfbuzz-8.0.1/debian/libharfbuzz0b.symbols 2023-07-12 20:45:57.000000000 +0000 +++ harfbuzz-8.3.0/debian/libharfbuzz0b.symbols 2024-01-20 15:33:21.000000000 +0000 @@ -293,6 +293,7 @@ hb_ot_color_palette_get_name_id@Base 2.1.1 hb_ot_font_set_funcs@Base 0.9.28 hb_ot_layout_collect_features@Base 1.8.5 + hb_ot_layout_collect_features_map@Base 8.3.0 hb_ot_layout_collect_lookups@Base 0.9.9 hb_ot_layout_feature_get_characters@Base 2.1.1 hb_ot_layout_feature_get_lookups@Base 0.9.9 @@ -377,6 +378,7 @@ hb_ot_var_normalize_coords@Base 1.4.2 hb_ot_var_normalize_variations@Base 1.4.2 hb_paint_color@Base 7.3.0 + hb_paint_color_glyph@Base 8.3.0 hb_paint_custom_palette_color@Base 7.3.0 hb_paint_funcs_create@Base 7.3.0 hb_paint_funcs_destroy@Base 7.3.0 @@ -386,6 +388,7 @@ hb_paint_funcs_make_immutable@Base 7.3.0 hb_paint_funcs_reference@Base 7.3.0 hb_paint_funcs_set_color_func@Base 7.3.0 + hb_paint_funcs_set_color_glyph_func@Base 8.3.0 hb_paint_funcs_set_custom_palette_color_func@Base 7.3.0 hb_paint_funcs_set_image_func@Base 7.3.0 hb_paint_funcs_set_linear_gradient_func@Base 7.3.0 diff -Nru harfbuzz-8.0.1/depcomp harfbuzz-8.3.0/depcomp --- harfbuzz-8.0.1/depcomp 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/depcomp 2023-11-11 14:09:19.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff -Nru harfbuzz-8.0.1/docs/Makefile.in harfbuzz-8.3.0/docs/Makefile.in --- harfbuzz-8.0.1/docs/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/docs/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -180,6 +180,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -194,6 +196,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -476,6 +479,7 @@ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ + $(DOC_MODULE).actions \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ @@ -582,7 +586,6 @@ cscope cscopelist: - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/docs/harfbuzz-docs.xml harfbuzz-8.3.0/docs/harfbuzz-docs.xml --- harfbuzz-8.0.1/docs/harfbuzz-docs.xml 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/docs/harfbuzz-docs.xml 2023-11-11 14:08:45.000000000 +0000 @@ -120,6 +120,8 @@ API Index Index of deprecated API + Index of new symbols in 8.2.0 + Index of new symbols in 8.1.0 Index of new symbols in 8.0.0 Index of new symbols in 7.3.0 Index of new symbols in 7.1.0 diff -Nru harfbuzz-8.0.1/docs/harfbuzz-sections.txt harfbuzz-8.3.0/docs/harfbuzz-sections.txt --- harfbuzz-8.0.1/docs/harfbuzz-sections.txt 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/harfbuzz-sections.txt 2023-11-11 14:20:13.000000000 +0000 @@ -244,6 +244,8 @@ hb_paint_funcs_set_push_transform_func hb_paint_pop_transform_func_t hb_paint_funcs_set_pop_transform_func +hb_paint_color_glyph_func_t +hb_paint_funcs_set_color_glyph_func hb_paint_push_clip_glyph_func_t hb_paint_funcs_set_push_clip_glyph_func hb_paint_push_clip_rectangle_func_t @@ -280,6 +282,7 @@ hb_paint_push_transform hb_paint_pop_transform +hb_paint_color_glyph hb_paint_push_clip_glyph hb_paint_push_clip_rectangle hb_paint_pop_clip @@ -324,6 +327,7 @@ hb_font_funcs_set_glyph_shape_func hb_font_get_glyph_v_kerning hb_font_get_glyph_v_kerning_func_t +HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION
@@ -619,6 +623,7 @@ hb_ot_tags_to_script_and_language hb_ot_layout_collect_lookups hb_ot_layout_collect_features +hb_ot_layout_collect_features_map hb_ot_layout_feature_get_characters hb_ot_layout_feature_get_lookups hb_ot_layout_feature_get_name_ids diff -Nru harfbuzz-8.0.1/docs/html/a-clustering-example-for-levels-0-and-1.html harfbuzz-8.3.0/docs/html/a-clustering-example-for-levels-0-and-1.html --- harfbuzz-8.0.1/docs/html/a-clustering-example-for-levels-0-and-1.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/a-clustering-example-for-levels-0-and-1.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ A clustering example for levels 0 and 1: HarfBuzz Manual - + - + @@ -115,6 +115,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/a-simple-shaping-example.html harfbuzz-8.3.0/docs/html/a-simple-shaping-example.html --- harfbuzz-8.0.1/docs/html/a-simple-shaping-example.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/a-simple-shaping-example.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ A simple shaping example: HarfBuzz Manual - + - + @@ -103,6 +103,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/aat-shaping.html harfbuzz-8.3.0/docs/html/aat-shaping.html --- harfbuzz-8.0.1/docs/html/aat-shaping.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/aat-shaping.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ AAT shaping: HarfBuzz Manual - + - + @@ -40,6 +40,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/adding-text-to-the-buffer.html harfbuzz-8.3.0/docs/html/adding-text-to-the-buffer.html --- harfbuzz-8.0.1/docs/html/adding-text-to-the-buffer.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/adding-text-to-the-buffer.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Adding text to the buffer: HarfBuzz Manual - + - + @@ -103,6 +103,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/annotation-glossary.html harfbuzz-8.3.0/docs/html/annotation-glossary.html --- harfbuzz-8.0.1/docs/html/annotation-glossary.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/annotation-glossary.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,11 +3,11 @@ Annotation Glossary: HarfBuzz Manual - + - + @@ -51,7 +51,7 @@

Generics and defining elements of containers and arrays.

I

inout
-

Parameter for input and for returning results. Default is transfer full.

+

Parameter for input and for returning results. Default is transfer full.

N

nullable

NULL may be passed as the value in, out, in-out; or as a return value.

@@ -59,7 +59,7 @@
optional

NULL may be passed instead of a pointer to a location.

out
-

Parameter for returning results. Default is transfer full.

+

Parameter for returning results. Default is transfer full.

out caller-allocates

Out parameter, where caller must allocate storage.

S

@@ -69,11 +69,11 @@

Exposed in C code, not necessarily available in other languages.

T

transfer full
-

Free data after the code is done.

+

The caller owns the data, and is responsible for free it.

transfer none
-

Don't free data after the code is done.

+

The data is owned by the callee, which is responsible of freeing it.

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-6-0.html harfbuzz-8.3.0/docs/html/api-index-0-6-0.html --- harfbuzz-8.0.1/docs/html/api-index-0-6-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-6-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.6.0: HarfBuzz Manual - + - + @@ -79,6 +79,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-10.html harfbuzz-8.3.0/docs/html/api-index-0-9-10.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-10.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-10.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.10: HarfBuzz Manual - + - + @@ -55,6 +55,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-11.html harfbuzz-8.3.0/docs/html/api-index-0-9-11.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-11.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-11.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.11: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-2.html harfbuzz-8.3.0/docs/html/api-index-0-9-2.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-2.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-2.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.2: HarfBuzz Manual - + - + @@ -756,6 +756,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-20.html harfbuzz-8.3.0/docs/html/api-index-0-9-20.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-20.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-20.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.20: HarfBuzz Manual - + - + @@ -33,6 +33,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-21.html harfbuzz-8.3.0/docs/html/api-index-0-9-21.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-21.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-21.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.21: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-22.html harfbuzz-8.3.0/docs/html/api-index-0-9-22.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-22.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-22.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.22: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-26.html harfbuzz-8.3.0/docs/html/api-index-0-9-26.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-26.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-26.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.26: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-28.html harfbuzz-8.3.0/docs/html/api-index-0-9-28.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-28.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-28.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.28: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-30.html harfbuzz-8.3.0/docs/html/api-index-0-9-30.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-30.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-30.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.30: HarfBuzz Manual - + - + @@ -36,6 +36,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-31.html harfbuzz-8.3.0/docs/html/api-index-0-9-31.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-31.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-31.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.31: HarfBuzz Manual - + - + @@ -41,6 +41,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-33.html harfbuzz-8.3.0/docs/html/api-index-0-9-33.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-33.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-33.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.33: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-38.html harfbuzz-8.3.0/docs/html/api-index-0-9-38.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-38.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-38.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.38: HarfBuzz Manual - + - + @@ -59,6 +59,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-39.html harfbuzz-8.3.0/docs/html/api-index-0-9-39.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-39.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-39.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.39: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-41.html harfbuzz-8.3.0/docs/html/api-index-0-9-41.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-41.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-41.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.41: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-42.html harfbuzz-8.3.0/docs/html/api-index-0-9-42.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-42.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-42.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.42: HarfBuzz Manual - + - + @@ -37,6 +37,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-5.html harfbuzz-8.3.0/docs/html/api-index-0-9-5.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-5.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-5.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.5: HarfBuzz Manual - + - + @@ -51,6 +51,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-7.html harfbuzz-8.3.0/docs/html/api-index-0-9-7.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-7.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-7.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.7: HarfBuzz Manual - + - + @@ -190,6 +190,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-0-9-8.html harfbuzz-8.3.0/docs/html/api-index-0-9-8.html --- harfbuzz-8.0.1/docs/html/api-index-0-9-8.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-0-9-8.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 0.9.8: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-0-5.html harfbuzz-8.3.0/docs/html/api-index-1-0-5.html --- harfbuzz-8.0.1/docs/html/api-index-1-0-5.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-0-5.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.0.5: HarfBuzz Manual - + - + @@ -45,6 +45,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-1-2.html harfbuzz-8.3.0/docs/html/api-index-1-1-2.html --- harfbuzz-8.0.1/docs/html/api-index-1-1-2.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-1-2.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.1.2: HarfBuzz Manual - + - + @@ -33,6 +33,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-1-3.html harfbuzz-8.3.0/docs/html/api-index-1-1-3.html --- harfbuzz-8.0.1/docs/html/api-index-1-1-3.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-1-3.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.1.3: HarfBuzz Manual - + - + @@ -48,6 +48,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-2-3.html harfbuzz-8.3.0/docs/html/api-index-1-2-3.html --- harfbuzz-8.0.1/docs/html/api-index-1-2-3.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-2-3.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.2.3: HarfBuzz Manual - + - + @@ -41,6 +41,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-3-3.html harfbuzz-8.3.0/docs/html/api-index-1-3-3.html --- harfbuzz-8.0.1/docs/html/api-index-1-3-3.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-3-3.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.3.3: HarfBuzz Manual - + - + @@ -89,6 +89,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-4-0.html harfbuzz-8.3.0/docs/html/api-index-1-4-0.html --- harfbuzz-8.0.1/docs/html/api-index-1-4-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-4-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.4.0: HarfBuzz Manual - + - + @@ -44,6 +44,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-4-2.html harfbuzz-8.3.0/docs/html/api-index-1-4-2.html --- harfbuzz-8.0.1/docs/html/api-index-1-4-2.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-4-2.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.4.2: HarfBuzz Manual - + - + @@ -91,6 +91,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-4-3.html harfbuzz-8.3.0/docs/html/api-index-1-4-3.html --- harfbuzz-8.0.1/docs/html/api-index-1-4-3.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-4-3.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.4.3: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-5-0.html harfbuzz-8.3.0/docs/html/api-index-1-5-0.html --- harfbuzz-8.0.1/docs/html/api-index-1-5-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-5-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.5.0: HarfBuzz Manual - + - + @@ -48,6 +48,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-6-0.html harfbuzz-8.3.0/docs/html/api-index-1-6-0.html --- harfbuzz-8.0.1/docs/html/api-index-1-6-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-6-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.6.0: HarfBuzz Manual - + - + @@ -37,6 +37,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-7-2.html harfbuzz-8.3.0/docs/html/api-index-1-7-2.html --- harfbuzz-8.0.1/docs/html/api-index-1-7-2.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-7-2.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.7.2: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-7-7.html harfbuzz-8.3.0/docs/html/api-index-1-7-7.html --- harfbuzz-8.0.1/docs/html/api-index-1-7-7.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-7-7.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.7.7: HarfBuzz Manual - + - + @@ -99,6 +99,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-8-0.html harfbuzz-8.3.0/docs/html/api-index-1-8-0.html --- harfbuzz-8.0.1/docs/html/api-index-1-8-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-8-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.8.0: HarfBuzz Manual - + - + @@ -60,6 +60,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-8-1.html harfbuzz-8.3.0/docs/html/api-index-1-8-1.html --- harfbuzz-8.0.1/docs/html/api-index-1-8-1.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-8-1.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.8.1: HarfBuzz Manual - + - + @@ -36,6 +36,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-8-5.html harfbuzz-8.3.0/docs/html/api-index-1-8-5.html --- harfbuzz-8.0.1/docs/html/api-index-1-8-5.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-8-5.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.8.5: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-8-6.html harfbuzz-8.3.0/docs/html/api-index-1-8-6.html --- harfbuzz-8.0.1/docs/html/api-index-1-8-6.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-8-6.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.8.6: HarfBuzz Manual - + - + @@ -45,6 +45,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-1-9-0.html harfbuzz-8.3.0/docs/html/api-index-1-9-0.html --- harfbuzz-8.0.1/docs/html/api-index-1-9-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-1-9-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 1.9.0: HarfBuzz Manual - + - + @@ -52,6 +52,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-0-0.html harfbuzz-8.3.0/docs/html/api-index-2-0-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-0-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-0-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.0.0: HarfBuzz Manual - + - + @@ -87,6 +87,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-1-0.html harfbuzz-8.3.0/docs/html/api-index-2-1-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-1-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-1-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.1.0: HarfBuzz Manual - + - + @@ -128,6 +128,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-2-0.html harfbuzz-8.3.0/docs/html/api-index-2-2-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-2-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-2-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.2.0: HarfBuzz Manual - + - + @@ -80,6 +80,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-3-0.html harfbuzz-8.3.0/docs/html/api-index-2-3-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-3-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-3-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.3.0: HarfBuzz Manual - + - + @@ -37,6 +37,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-4-0.html harfbuzz-8.3.0/docs/html/api-index-2-4-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-4-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-4-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.4.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-5-0.html harfbuzz-8.3.0/docs/html/api-index-2-5-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-5-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-5-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.5.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-6-0.html harfbuzz-8.3.0/docs/html/api-index-2-6-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-6-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-6-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.6.0: HarfBuzz Manual - + - + @@ -79,6 +79,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-6-3.html harfbuzz-8.3.0/docs/html/api-index-2-6-3.html --- harfbuzz-8.0.1/docs/html/api-index-2-6-3.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-6-3.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.6.3: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-6-5.html harfbuzz-8.3.0/docs/html/api-index-2-6-5.html --- harfbuzz-8.0.1/docs/html/api-index-2-6-5.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-6-5.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.6.5: HarfBuzz Manual - + - + @@ -33,6 +33,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-6-8.html harfbuzz-8.3.0/docs/html/api-index-2-6-8.html --- harfbuzz-8.0.1/docs/html/api-index-2-6-8.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-6-8.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.6.8: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-7-3.html harfbuzz-8.3.0/docs/html/api-index-2-7-3.html --- harfbuzz-8.0.1/docs/html/api-index-2-7-3.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-7-3.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.7.3: HarfBuzz Manual - + - + @@ -41,6 +41,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-8-2.html harfbuzz-8.3.0/docs/html/api-index-2-8-2.html --- harfbuzz-8.0.1/docs/html/api-index-2-8-2.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-8-2.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.8.2: HarfBuzz Manual - + - + @@ -40,6 +40,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-9-0.html harfbuzz-8.3.0/docs/html/api-index-2-9-0.html --- harfbuzz-8.0.1/docs/html/api-index-2-9-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-9-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.9.0: HarfBuzz Manual - + - + @@ -49,6 +49,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-2-9-1.html harfbuzz-8.3.0/docs/html/api-index-2-9-1.html --- harfbuzz-8.0.1/docs/html/api-index-2-9-1.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-2-9-1.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 2.9.1: HarfBuzz Manual - + - + @@ -33,6 +33,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-3-0-0.html harfbuzz-8.3.0/docs/html/api-index-3-0-0.html --- harfbuzz-8.0.1/docs/html/api-index-3-0-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-3-0-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 3.0.0: HarfBuzz Manual - + - + @@ -37,6 +37,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-3-1-0.html harfbuzz-8.3.0/docs/html/api-index-3-1-0.html --- harfbuzz-8.0.1/docs/html/api-index-3-1-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-3-1-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 3.1.0: HarfBuzz Manual - + - + @@ -33,6 +33,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-3-3-0.html harfbuzz-8.3.0/docs/html/api-index-3-3-0.html --- harfbuzz-8.0.1/docs/html/api-index-3-3-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-3-3-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 3.3.0: HarfBuzz Manual - + - + @@ -51,6 +51,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-3-4-0.html harfbuzz-8.3.0/docs/html/api-index-3-4-0.html --- harfbuzz-8.0.1/docs/html/api-index-3-4-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-3-4-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 3.4.0: HarfBuzz Manual - + - + @@ -37,6 +37,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-4-0-0.html harfbuzz-8.3.0/docs/html/api-index-4-0-0.html --- harfbuzz-8.0.1/docs/html/api-index-4-0-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-4-0-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 4.0.0: HarfBuzz Manual - + - + @@ -182,6 +182,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-4-1-0.html harfbuzz-8.3.0/docs/html/api-index-4-1-0.html --- harfbuzz-8.0.1/docs/html/api-index-4-1-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-4-1-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 4.1.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-4-2-0.html harfbuzz-8.3.0/docs/html/api-index-4-2-0.html --- harfbuzz-8.0.1/docs/html/api-index-4-2-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-4-2-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 4.2.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-4-3-0.html harfbuzz-8.3.0/docs/html/api-index-4-3-0.html --- harfbuzz-8.0.1/docs/html/api-index-4-3-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-4-3-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 4.3.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-4-4-0.html harfbuzz-8.3.0/docs/html/api-index-4-4-0.html --- harfbuzz-8.0.1/docs/html/api-index-4-4-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-4-4-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 4.4.0: HarfBuzz Manual - + - + @@ -55,6 +55,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-5-0-0.html harfbuzz-8.3.0/docs/html/api-index-5-0-0.html --- harfbuzz-8.0.1/docs/html/api-index-5-0-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-5-0-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 5.0.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-5-3-0.html harfbuzz-8.3.0/docs/html/api-index-5-3-0.html --- harfbuzz-8.0.1/docs/html/api-index-5-3-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-5-3-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 5.3.0: HarfBuzz Manual - + - + @@ -36,6 +36,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-6-0-0.html harfbuzz-8.3.0/docs/html/api-index-6-0-0.html --- harfbuzz-8.0.1/docs/html/api-index-6-0-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-6-0-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 6.0.0: HarfBuzz Manual - + - + @@ -37,6 +37,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-7-0-0.html harfbuzz-8.3.0/docs/html/api-index-7-0-0.html --- harfbuzz-8.0.1/docs/html/api-index-7-0-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-7-0-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 7.0.0: HarfBuzz Manual - + - + @@ -415,6 +415,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-7-1-0.html harfbuzz-8.3.0/docs/html/api-index-7-1-0.html --- harfbuzz-8.0.1/docs/html/api-index-7-1-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-7-1-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 7.1.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-7-3-0.html harfbuzz-8.3.0/docs/html/api-index-7-3-0.html --- harfbuzz-8.0.1/docs/html/api-index-7-3-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-7-3-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 7.3.0: HarfBuzz Manual - + - + @@ -29,6 +29,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-8-0-0.html harfbuzz-8.3.0/docs/html/api-index-8-0-0.html --- harfbuzz-8.0.1/docs/html/api-index-8-0-0.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-8-0-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Index of new symbols in 8.0.0: HarfBuzz Manual - + - + - + @@ -18,7 +18,7 @@ O Home Up -Prev +Prev Next
@@ -48,6 +48,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-8-1-0.html harfbuzz-8.3.0/docs/html/api-index-8-1-0.html --- harfbuzz-8.0.1/docs/html/api-index-8-1-0.html 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-8-1-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -0,0 +1,34 @@ + + + + +Index of new symbols in 8.1.0: HarfBuzz Manual + + + + + + + + + + + + + + + + +
+

+Index of new symbols in 8.1.0

+

O

+
+hb_ot_layout_collect_features_map, function in hb-ot-layout +
+
+
+ + + \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-8-2-0.html harfbuzz-8.3.0/docs/html/api-index-8-2-0.html --- harfbuzz-8.0.1/docs/html/api-index-8-2-0.html 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-8-2-0.html 2023-11-11 14:20:13.000000000 +0000 @@ -0,0 +1,42 @@ + + + + +Index of new symbols in 8.2.0: HarfBuzz Manual + + + + + + + + + + + + + + + + +
+

+Index of new symbols in 8.2.0

+

P

+
+hb_paint_color_glyph, function in hb-paint +
+
+
+hb_paint_color_glyph_func_t, user_function in hb-paint +
+
+
+hb_paint_funcs_set_color_glyph_func, function in hb-paint +
+
+
+ + + \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/api-index-full.html harfbuzz-8.3.0/docs/html/api-index-full.html --- harfbuzz-8.0.1/docs/html/api-index-full.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/api-index-full.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ API Index: HarfBuzz Manual - + - + @@ -64,6 +64,10 @@
+HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION, macro in hb-deprecated +
+
+
hb_aat_layout_feature_type_get_name_id, function in hb-aat-layout
@@ -1698,6 +1702,10 @@
+hb_ot_layout_collect_features_map, function in hb-ot-layout +
+
+
hb_ot_layout_collect_lookups, function in hb-ot-layout
@@ -2187,6 +2195,14 @@
+hb_paint_color_glyph, function in hb-paint +
+
+
+hb_paint_color_glyph_func_t, user_function in hb-paint +
+
+
hb_paint_composite_mode_t, enum in hb-paint
@@ -2235,6 +2251,10 @@
+hb_paint_funcs_set_color_glyph_func, function in hb-paint +
+
+
hb_paint_funcs_set_custom_palette_color_func, function in hb-paint
@@ -3029,6 +3049,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/apple-advanced-typography-api.html harfbuzz-8.3.0/docs/html/apple-advanced-typography-api.html --- harfbuzz-8.0.1/docs/html/apple-advanced-typography-api.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/apple-advanced-typography-api.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Apple Advanced Typography API: HarfBuzz Manual - + - + @@ -27,6 +27,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/buffers-language-script-and-direction.html harfbuzz-8.3.0/docs/html/buffers-language-script-and-direction.html --- harfbuzz-8.0.1/docs/html/buffers-language-script-and-direction.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/buffers-language-script-and-direction.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Buffers, language, script and direction: HarfBuzz Manual - + - + @@ -95,6 +95,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/building.html harfbuzz-8.3.0/docs/html/building.html --- harfbuzz-8.0.1/docs/html/building.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/building.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Building HarfBuzz: HarfBuzz Manual - + - + @@ -343,6 +343,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/clusters.html harfbuzz-8.3.0/docs/html/clusters.html --- harfbuzz-8.0.1/docs/html/clusters.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/clusters.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Clusters: HarfBuzz Manual - + - + @@ -120,6 +120,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/core-api.html harfbuzz-8.3.0/docs/html/core-api.html --- harfbuzz-8.0.1/docs/html/core-api.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/core-api.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Core API: HarfBuzz Manual - + - + @@ -71,6 +71,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/customizing-unicode-functions.html harfbuzz-8.3.0/docs/html/customizing-unicode-functions.html --- harfbuzz-8.0.1/docs/html/customizing-unicode-functions.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/customizing-unicode-functions.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Customizing Unicode functions: HarfBuzz Manual - + - + @@ -126,6 +126,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/deprecated-api-index.html harfbuzz-8.3.0/docs/html/deprecated-api-index.html --- harfbuzz-8.0.1/docs/html/deprecated-api-index.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/deprecated-api-index.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,17 +3,19 @@ Index of deprecated API: HarfBuzz Manual - + - - + + - - +

Index of deprecated API

-

B

+

A

+
+HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION, macro in hb-deprecated +
+
+

B

HB_BUFFER_FLAGS_DEFAULT, macro in hb-deprecated
@@ -163,6 +170,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/fonts-and-faces-custom-functions.html harfbuzz-8.3.0/docs/html/fonts-and-faces-custom-functions.html --- harfbuzz-8.0.1/docs/html/fonts-and-faces-custom-functions.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/fonts-and-faces-custom-functions.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Customizing font functions: HarfBuzz Manual - + - + @@ -173,6 +173,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/fonts-and-faces-native-opentype.html harfbuzz-8.3.0/docs/html/fonts-and-faces-native-opentype.html --- harfbuzz-8.0.1/docs/html/fonts-and-faces-native-opentype.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/fonts-and-faces-native-opentype.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Font objects and HarfBuzz's native OpenType implementation: HarfBuzz Manual - + - + @@ -88,6 +88,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/fonts-and-faces-variable.html harfbuzz-8.3.0/docs/html/fonts-and-faces-variable.html --- harfbuzz-8.0.1/docs/html/fonts-and-faces-variable.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/fonts-and-faces-variable.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Working with OpenType Variable Fonts: HarfBuzz Manual - + - + @@ -106,6 +106,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/fonts-and-faces.html harfbuzz-8.3.0/docs/html/fonts-and-faces.html --- harfbuzz-8.0.1/docs/html/fonts-and-faces.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/fonts-and-faces.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Fonts, faces, and output: HarfBuzz Manual - + - + @@ -150,6 +150,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/getting-started.html harfbuzz-8.3.0/docs/html/getting-started.html --- harfbuzz-8.0.1/docs/html/getting-started.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/getting-started.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Getting started with HarfBuzz: HarfBuzz Manual - + - + @@ -91,6 +91,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/glyphs-and-rendering.html harfbuzz-8.3.0/docs/html/glyphs-and-rendering.html --- harfbuzz-8.0.1/docs/html/glyphs-and-rendering.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/glyphs-and-rendering.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Glyphs and rendering: HarfBuzz Manual - + - + @@ -61,6 +61,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/graphite-shaping.html harfbuzz-8.3.0/docs/html/graphite-shaping.html --- harfbuzz-8.0.1/docs/html/graphite-shaping.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/graphite-shaping.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Graphite shaping: HarfBuzz Manual - + - + @@ -40,6 +40,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-aat-layout.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-aat-layout.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-aat-layout.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-aat-layout.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-aat-layout: HarfBuzz Manual - + - + @@ -408,7 +408,7 @@   -

HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION

+

HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION

Cursive Connection

@@ -2487,6 +2487,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-blob.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-blob.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-blob.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-blob.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-blob: HarfBuzz Manual - + - + @@ -481,7 +481,7 @@

Returns

The empty blob.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -634,7 +634,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -722,7 +722,7 @@

Returns

the byte data of blob .

-

[nullable][transfer none][array length=length]

+

[nullable][transfer none][array length=length]

Since: 0.9.2

@@ -762,7 +762,7 @@

Returns

Writable blob data, or NULL if failed.

-

[transfer none][array length=length]

+

[transfer none][array length=length]

Since: 0.9.2

@@ -876,6 +876,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-buffer.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-buffer.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-buffer.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-buffer.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-buffer: HarfBuzz Manual - + - + @@ -647,7 +647,7 @@ using the hb_buffer_t. This function never returns NULL. If memory cannot be allocated, a special hb_buffer_t object will be returned on which hb_buffer_allocation_successful() returns false.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -705,7 +705,7 @@

Returns

A newly allocated hb_buffer_t, similar to hb_buffer_create().

-

[transfer full]

+

[transfer full]

Since: 3.3.0

@@ -718,7 +718,7 @@

Returns

The empty buffer.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -750,7 +750,7 @@

Returns

The referenced hb_buffer_t.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -872,7 +872,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -1641,7 +1641,7 @@

Returns

The hb_language_t of the buffer. Must not be freed by the caller.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -2040,7 +2040,7 @@

The buffer glyph information array. The value valid as long as buffer has not been modified.

-

[transfer none][array length=length]

+

[transfer none][array length=length]

Since: 0.9.2

@@ -2113,7 +2113,7 @@

The buffer glyph position array. The value valid as long as buffer has not been modified.

-

[transfer none][array length=length]

+

[transfer none][array length=length]

Since: 0.9.2

@@ -2218,7 +2218,7 @@ hb_codepoint_t not_found);

Sets the hb_codepoint_t that replaces characters not found in the font during shaping.

-

The not-found glyph defaults to zero, sometimes knows as the +

The not-found glyph defaults to zero, sometimes known as the ".notdef" glyph. This API allows for differentiating the two.

Parameters

@@ -2975,7 +2975,7 @@

Returns

A NULL terminated string corresponding to format . Should not be freed.

-

[transfer none]

+

[transfer none]

Since: 0.9.7

@@ -2988,7 +2988,7 @@

Returns

A string array of buffer serialization formats. Should not be freed.

-

[transfer none]

+

[transfer none]

Since: 0.9.7

@@ -3139,7 +3139,7 @@

dottedcircle_glyph

-

glyph id of U+25CC DOTTED CIRCLE, or (hb_codepont_t) -1.

+

glyph id of U+25CC DOTTED CIRCLE, or (hb_codepoint_t) -1.

  @@ -3367,7 +3367,7 @@ layout, by avoiding re-shaping of each line after line-breaking, by limiting the reshaping to a small piece around the - breaking positin only, even if the breaking + breaking position only, even if the breaking position carries the HB_GLYPH_FLAG_UNSAFE_TO_BREAK or when hyphenation or other text transformation @@ -3964,6 +3964,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-cairo.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-cairo.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-cairo.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-cairo.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-cairo: HarfBuzz Manual - + - + @@ -162,7 +162,7 @@

Returns

a newly created cairo_font_face_t.

-

[transfer full]

+

[transfer full]

Since: 7.0.0

@@ -192,7 +192,7 @@

Returns

the hb_font_t that font_face was created from.

-

[nullable][transfer none]

+

[nullable][transfer none]

Since: 7.0.0

@@ -222,7 +222,7 @@

Returns

a newly created cairo_font_face_t.

-

[transfer full]

+

[transfer full]

Since: 7.0.0

@@ -252,7 +252,7 @@

Returns

the hb_face_t associated with font_face .

-

[nullable][transfer none]

+

[nullable][transfer none]

Since: 7.0.0

@@ -372,7 +372,7 @@

Returns

the hb_font_t associated with scaled_font .

-

[nullable][transfer none]

+

[nullable][transfer none]

Since: 7.0.0

@@ -623,6 +623,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-common.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-common.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-common.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-common.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-common: HarfBuzz Manual - + - + @@ -517,7 +517,7 @@

Returns

The string corresponding to direction .

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -821,7 +821,7 @@

Returns

The hb_language_t corresponding to the BCP 47 language tag.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -851,7 +851,7 @@

A NULL-terminated string representing the language . Must not be freed by the caller.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -871,7 +871,7 @@

Returns

The default language of the locale as an hb_language_t.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -2689,6 +2689,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-coretext.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-coretext.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-coretext.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-coretext.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-coretext: HarfBuzz Manual - + - + @@ -256,6 +256,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-deprecated.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-deprecated.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-deprecated.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-deprecated.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-deprecated: HarfBuzz Manual - + - + @@ -237,6 +237,10 @@ typedef hb_font_get_glyph_v_kerning_func_t + +#define +HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION + @@ -1165,7 +1169,7 @@
#define HB_SCRIPT_CANADIAN_ABORIGINAL		HB_SCRIPT_CANADIAN_SYLLABICS
 

HB_SCRIPT_CANADIAN_ABORIGINAL has been deprecated since version 0.9.20 and should not be used in newly-written code.

-

Use HB_SCRIPT_CANADIAN_SYLLABICS instead:

+

Use HB_SCRIPT_CANADIAN_SYLLABICS instead.


@@ -1274,9 +1278,17 @@

This method should retrieve the kerning-adjustment value for a glyph-pair in the specified font, for vertical text segments.

+
+
+

HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION

+
#define HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION
+
+

HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION has been deprecated since version 8.3.0 and should not be used in newly-written code.

+

Use HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION instead.

+
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-directwrite.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-directwrite.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-directwrite.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-directwrite.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-directwrite: HarfBuzz Manual - + - + @@ -126,6 +126,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-draw.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-draw.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-draw.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-draw.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-draw: HarfBuzz Manual - + - + @@ -273,7 +273,7 @@ done using the hb_draw_funcs_t. This function never returns NULL. If memory cannot be allocated, a special singleton hb_draw_funcs_t object will be returned.

-

[transfer full]

+

[transfer full]

Since: 4.0.0

@@ -286,7 +286,7 @@

Returns

The empty draw-functions structure.

-

[transfer full]

+

[transfer full]

Since: 7.0.0

@@ -319,7 +319,7 @@

Returns

The referenced hb_draw_funcs_t.

-

[transfer full]

+

[transfer full]

Since: 4.0.0

@@ -441,7 +441,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 7.0.0

@@ -1373,6 +1373,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-face.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-face.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-face.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-face.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-face: HarfBuzz Manual - + - + @@ -348,7 +348,7 @@

Returns

The new face object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -399,7 +399,7 @@

Returns

The new face object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -412,7 +412,7 @@

Returns

The empty face object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -560,7 +560,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -877,7 +877,7 @@

Returns

A pointer to the blob for face .

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -916,7 +916,7 @@

A pointer to the tag table within face .

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -1080,7 +1080,7 @@

Returns

New face.

-

[transfer full]

+

[transfer full]

Since: 1.9.0

@@ -1171,6 +1171,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-features.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-features.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-features.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-features.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-features: HarfBuzz Manual - + - + @@ -81,6 +81,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-font.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-font.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-font.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-font.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-font: HarfBuzz Manual - + - + @@ -1061,7 +1061,7 @@

Returns

The new font object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -1091,7 +1091,7 @@

Returns

The new sub-font font object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -1104,7 +1104,7 @@

Returns

The empty font object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -1134,7 +1134,7 @@

Returns

The font object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -1253,7 +1253,7 @@

Returns

Pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -1366,7 +1366,7 @@

Returns

The hb_face_t value.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -2462,7 +2462,7 @@ hb_codepoint_t *first_glyph, unsigned int glyph_stride);

Fetches the nominal glyph IDs for a sequence of Unicode code points. Glyph -IDs must be returned in a hb_codepoint_t output parameter. Stopes at the +IDs must be returned in a hb_codepoint_t output parameter. Stops at the first unsupported glyph ID.

Parameters

@@ -2618,7 +2618,7 @@

Returns

The parent font object.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -3639,7 +3639,7 @@

Returns

The font-functions structure.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -3652,7 +3652,7 @@

Returns

The font-functions structure.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -3799,7 +3799,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -5414,7 +5414,7 @@

A pointer to the tag table within face .

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -5875,6 +5875,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ft.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ft.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ft.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ft.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ft: HarfBuzz Manual - + - + @@ -202,7 +202,7 @@

Returns

the new hb_face_t face object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -244,7 +244,7 @@

Returns

the new hb_face_t face object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -283,7 +283,7 @@

Returns

the new hb_face_t face object.

-

[transfer full]

+

[transfer full]

Since: 0.9.38

@@ -338,7 +338,7 @@

Returns

the new hb_font_t font object.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -376,7 +376,7 @@

Returns

the new hb_font_t font object.

-

[transfer full]

+

[transfer full]

Since: 0.9.38

@@ -469,7 +469,7 @@

Returns

the FT_Face associated with font or NULL.

-

[nullable][transfer none]

+

[nullable][transfer none]

Since: 2.6.5

@@ -505,7 +505,7 @@ int load_flags);

Sets the FT_Load_Glyph load flags for the specified hb_font_t.

For more information, see -https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.htmlft_load_xxx

+https://freetype.org/freetype2/docs/reference/ft2-glyph_retrieval.html#ft_load_xxx

This function works with hb_font_t objects created by hb_ft_font_create() or hb_ft_font_create_referenced().

@@ -539,7 +539,7 @@ hb_ft_font_get_load_flags (hb_font_t *font);

Fetches the FT_Load_Glyph load flags of the specified hb_font_t.

For more information, see -https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.htmlft_load_xxx

+https://freetype.org/freetype2/docs/reference/ft2-glyph_retrieval.html#ft_load_xxx

This function works with hb_font_t objects created by hb_ft_font_create() or hb_ft_font_create_referenced().

@@ -638,6 +638,6 @@
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-gdi.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-gdi.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-gdi.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-gdi.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-gdi: HarfBuzz Manual - + - + @@ -88,6 +88,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-glib.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-glib.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-glib.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-glib.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-glib: HarfBuzz Manual - + - + @@ -97,7 +97,7 @@

Returns

a pointer to the hb_unicode_funcs_t Unicode-functions structure.

-

[transfer none]

+

[transfer none]

Since: 0.9.38

@@ -182,13 +182,13 @@

Returns

the new hb_blob_t blob object.

-

[transfer full]

+

[transfer full]

Since: 0.9.38

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-graphite2.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-graphite2.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-graphite2.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-graphite2.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-graphite2: HarfBuzz Manual - + - + @@ -159,6 +159,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-icu.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-icu.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-icu.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-icu.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-icu: HarfBuzz Manual - + - + @@ -89,7 +89,7 @@

Returns

a pointer to the hb_unicode_funcs_t Unicode-functions structure.

-

[transfer none]

+

[transfer none]

Since: 0.9.38

@@ -150,6 +150,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-map.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-map.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-map.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-map.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-map: HarfBuzz Manual - + - + @@ -248,7 +248,7 @@

Returns

The new hb_map_t.

-

[transfer full]

+

[transfer full]

Since: 1.7.7

@@ -304,7 +304,7 @@

Returns

Newly-allocated map.

-

[transfer full]

+

[transfer full]

Since: 4.4.0

@@ -341,7 +341,7 @@

Returns

The empty hb_map_t.

-

[transfer full]

+

[transfer full]

Since: 1.7.7

@@ -370,7 +370,7 @@

Returns

The map.

-

[transfer full]

+

[transfer full]

Since: 1.7.7

@@ -489,7 +489,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 1.7.7

@@ -803,7 +803,7 @@ int *idx, hb_codepoint_t *key, hb_codepoint_t *value); -

Fetches the next key/value paire in map +

Fetches the next key/value pair in map .

Set idx to -1 to get started.

@@ -933,6 +933,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-color.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-color.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-color.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-color.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-color: HarfBuzz Manual - + - + @@ -466,7 +466,7 @@

Returns

An hb_blob_t containing the PNG image for the glyph, if available.

-

[transfer full]

+

[transfer full]

Since: 2.1.0

@@ -503,7 +503,7 @@

Returns

An hb_blob_t containing the SVG document of the glyph, if available.

-

[transfer full]

+

[transfer full]

Since: 2.1.0

@@ -976,6 +976,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-font.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-font.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-font.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-font.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-font: HarfBuzz Manual - + - + @@ -87,6 +87,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-layout.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-layout.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-layout.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-layout.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-layout: HarfBuzz Manual - + - + @@ -88,6 +88,14 @@ + +void + + +hb_ot_layout_collect_features_map () + + + unsigned int @@ -507,7 +515,7 @@

Returns

The hb_language_t corresponding to tag .

-

[transfer none][nullable]

+

[transfer none][nullable]

Since: 0.9.2

@@ -763,7 +771,7 @@

feature_indexes

-

The array of feature indexes found for the query.

+

The set of feature indexes found for the query.

[out] @@ -773,6 +781,56 @@
+

hb_ot_layout_collect_features_map ()

+
void
+hb_ot_layout_collect_features_map (hb_face_t *face,
+                                   hb_tag_t table_tag,
+                                   unsigned  script_index,
+                                   unsigned  language_index,
+                                   hb_map_t *feature_map);
+

Fetches the mapping from feature tags to feature indexes for +the specified script and language.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

face

hb_face_t to work upon

 

table_tag

HB_OT_TAG_GSUB or HB_OT_TAG_GPOS

 

script_index

The index of the requested script tag

 

language_index

The index of the requested language tag

 

feature_map

The map of feature tag to feature index.

[out]
+
+

Since: 8.1.0

+
+
+

hb_ot_layout_feature_get_characters ()

unsigned int
 hb_ot_layout_feature_get_characters (hb_face_t *face,
@@ -3192,6 +3250,6 @@
 
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-math.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-math.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-math.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-math.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-math: HarfBuzz Manual - + - + @@ -1293,6 +1293,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-meta.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-meta.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-meta.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-meta.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-meta: HarfBuzz Manual - + - + @@ -159,7 +159,7 @@

Returns

A blob containing the blob.

-

[transfer full]

+

[transfer full]

Since: 2.6.0

@@ -204,6 +204,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-metrics.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-metrics.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-metrics.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-metrics.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-metrics: HarfBuzz Manual - + - + @@ -523,6 +523,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-name.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-name.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-name.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-name.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-name: HarfBuzz Manual - + - + @@ -139,7 +139,7 @@

Returns

Array of available name entries.

-

[transfer none][array length=num_entries]

+

[transfer none][array length=num_entries]

Since: 2.1.0

@@ -575,6 +575,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-shape.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-shape.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-shape.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-shape.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-shape: HarfBuzz Manual - + - + @@ -112,6 +112,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-var.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-var.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-ot-var.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-ot-var.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-ot-var: HarfBuzz Manual - + - + @@ -691,6 +691,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-paint.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-paint.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-paint.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-paint.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-paint: HarfBuzz Manual - + - + @@ -137,6 +137,22 @@ +hb_bool_t + + +(*hb_paint_color_glyph_func_t) () + + + + +void + + +hb_paint_funcs_set_color_glyph_func () + + + + void @@ -359,6 +375,14 @@ +hb_bool_t + + +hb_paint_color_glyph () + + + + void @@ -527,7 +551,7 @@

Returns

The empty paint-functions structure.

-

[transfer full]

+

[transfer full]

Since: 7.0.0

@@ -677,7 +701,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 7.0.0

@@ -944,6 +968,104 @@
+

hb_paint_color_glyph_func_t ()

+
hb_bool_t
+(*hb_paint_color_glyph_func_t) (hb_paint_funcs_t *funcs,
+                                void *paint_data,
+                                hb_codepoint_t glyph,
+                                hb_font_t *font,
+                                void *user_data);
+

A virtual method for the hb_paint_funcs_t to render a color glyph by glyph index.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

funcs

paint functions object

 

paint_data

The data accompanying the paint functions in hb_font_paint_glyph()

 

glyph

the glyph ID

 

font

the font

 

user_data

User data pointer passed to hb_paint_funcs_set_color_glyph_func()

 
+
+
+

Returns

+

true if the glyph was painted, false otherwise.

+
+

Since: 8.2.0

+
+
+
+

hb_paint_funcs_set_color_glyph_func ()

+
void
+hb_paint_funcs_set_color_glyph_func (hb_paint_funcs_t *funcs,
+                                     hb_paint_color_glyph_func_t func,
+                                     void *user_data,
+                                     hb_destroy_func_t destroy);
+

Sets the color-glyph callback on the paint functions struct.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +

funcs

A paint functions struct

 

func

The color-glyph callback.

[closure user_data][destroy destroy][scope notified]

user_data

Data to pass to func +

 

destroy

Function to call when user_data +is no longer needed.

[nullable]
+
+

Since: 8.2.0

+
+
+

hb_paint_push_clip_glyph_func_t ()

void
 (*hb_paint_push_clip_glyph_func_t) (hb_paint_funcs_t *funcs,
@@ -2431,6 +2553,49 @@
 

+

hb_paint_color_glyph ()

+
hb_bool_t
+hb_paint_color_glyph (hb_paint_funcs_t *funcs,
+                      void *paint_data,
+                      hb_codepoint_t glyph,
+                      hb_font_t *font);
+

Perform a "color-glyph" paint operation.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +

funcs

paint functions

 

paint_data

associated data passed by the caller

 

glyph

the glyph ID

 

font

the font

 
+
+

Since: 8.2.0

+
+
+

hb_paint_push_clip_glyph ()

void
 hb_paint_push_clip_glyph (hb_paint_funcs_t *funcs,
@@ -3393,6 +3558,6 @@
 
+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-set.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-set.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-set.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-set.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-set: HarfBuzz Manual - + - + @@ -351,7 +351,7 @@

Returns

The new hb_set_t.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -407,7 +407,7 @@

Returns

Newly-allocated set.

-

[transfer full]

+

[transfer full]

Since: 2.8.2

@@ -420,7 +420,7 @@

Returns

The empty hb_set_t.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -449,7 +449,7 @@

Returns

The set.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -568,7 +568,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -1527,6 +1527,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-shape-plan.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-shape-plan.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-shape-plan.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-shape-plan.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-shape-plan: HarfBuzz Manual - + - + @@ -215,7 +215,7 @@

Returns

The shaping plan.

-

[transfer full]

+

[transfer full]

Since: 0.9.7

@@ -274,7 +274,7 @@

Returns

The shaping plan.

-

[transfer full]

+

[transfer full]

Since: 0.9.7

@@ -347,7 +347,7 @@

Returns

The shaping plan.

-

[transfer full]

+

[transfer full]

Since: 1.4.0

@@ -421,7 +421,7 @@

Returns

The shaping plan.

-

[transfer full]

+

[transfer full]

Since: 1.4.0

@@ -434,7 +434,7 @@

Returns

The empty shaping plan.

-

[transfer full]

+

[transfer full]

Since: 0.9.7

@@ -464,7 +464,7 @@

Returns

shape_plan .

-

[transfer full]

+

[transfer full]

Since: 0.9.7

@@ -583,7 +583,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.7

@@ -667,7 +667,7 @@

Returns

The shaper.

-

[transfer none]

+

[transfer none]

Since: 0.9.7

@@ -689,6 +689,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-shape.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-shape.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-shape.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-shape.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-shape: HarfBuzz Manual - + - + @@ -302,13 +302,13 @@

Returns

an array of constant strings.

-

[transfer none][array zero-terminated=1]

+

[transfer none][array zero-terminated=1]

Since: 0.9.2

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-style.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-style.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-style.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-style.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-style: HarfBuzz Manual - + - + @@ -187,6 +187,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-subset.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-subset.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-subset.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-subset.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-subset: HarfBuzz Manual - + - + @@ -299,7 +299,7 @@

Returns

New subset input, or NULL if failed. Destroy with hb_subset_input_destroy().

-

[transfer full]

+

[transfer full]

Since: 1.8.0

@@ -448,7 +448,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 2.9.0

@@ -563,7 +563,7 @@

Returns

pointer to the hb_set_t of Unicode code points.

-

[transfer none]

+

[transfer none]

Since: 1.8.0

@@ -592,7 +592,7 @@

Returns

pointer to the hb_set_t of glyph IDs.

-

[transfer none]

+

[transfer none]

Since: 1.8.0

@@ -628,7 +628,7 @@

Returns

pointer to the hb_set_t of the specified type.

-

[transfer none]

+

[transfer none]

Since: 2.9.1

@@ -670,7 +670,7 @@

Returns

pointer to the hb_map_t of the custom glyphs ID map.

-

[transfer none]

+

[transfer none]

Since: 7.3.0

@@ -836,7 +836,7 @@

New subset plan. Destroy with hb_subset_plan_destroy(). If there is a failure creating the plan nullptr will be returned.

-

[transfer full]

+

[transfer full]

Since: 4.0.0

@@ -985,7 +985,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 4.0.0

@@ -1044,7 +1044,7 @@

Returns

A pointer to the hb_map_t of the mapping.

-

[transfer none]

+

[transfer none]

Since: 4.0.0

@@ -1075,7 +1075,7 @@

Returns

A pointer to the hb_map_t of the mapping.

-

[transfer none]

+

[transfer none]

Since: 4.0.0

@@ -1106,7 +1106,7 @@

Returns

A pointer to the hb_map_t of the mapping.

-

[transfer none]

+

[transfer none]

Since: 4.0.0

@@ -1248,6 +1248,15 @@   + +

HB_SUBSET_FLAGS_IFTB_REQUIREMENTS

+ +

If set enforce requirements on the output subset +to allow it to be used with incremental font transfer IFTB patches. Primarily, +this forces all outline data to use long (32 bit) offsets. Since: EXPERIMENTAL

+ +  + @@ -1349,6 +1358,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-unicode.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-unicode.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-unicode.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-unicode.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-unicode: HarfBuzz Manual - + - + @@ -595,7 +595,7 @@

Returns

The Unicode-functions structure.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -608,7 +608,7 @@

Returns

The empty Unicode-functions structure.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -637,7 +637,7 @@

Returns

The Unicode-functions structure.

-

[transfer full]

+

[transfer full]

Since: 0.9.2

@@ -756,7 +756,7 @@

Returns

A pointer to the user data.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -823,7 +823,7 @@

Returns

a pointer to the hb_unicode_funcs_t Unicode-functions structure.

-

[transfer none]

+

[transfer none]

Since: 0.9.2

@@ -2093,6 +2093,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-uniscribe.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-uniscribe.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-uniscribe.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-uniscribe.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-uniscribe: HarfBuzz Manual - + - + @@ -125,6 +125,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz-hb-version.html harfbuzz-8.3.0/docs/html/harfbuzz-hb-version.html --- harfbuzz-8.0.1/docs/html/harfbuzz-hb-version.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz-hb-version.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ hb-version: HarfBuzz Manual - + - + @@ -248,27 +248,27 @@

HB_VERSION_MICRO

-
#define HB_VERSION_MICRO 1
+
#define HB_VERSION_MICRO 0
 

The micro component of the library version available at compile-time.


HB_VERSION_MINOR

-
#define HB_VERSION_MINOR 0
+
#define HB_VERSION_MINOR 3
 

The minor component of the library version available at compile-time.


HB_VERSION_STRING

-
#define HB_VERSION_STRING "8.0.1"
+
#define HB_VERSION_STRING "8.3.0"
 

A string literal containing the library version available at compile-time.

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/harfbuzz.devhelp2 harfbuzz-8.3.0/docs/html/harfbuzz.devhelp2 --- harfbuzz-8.0.1/docs/html/harfbuzz.devhelp2 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/harfbuzz.devhelp2 2023-11-11 14:20:13.000000000 +0000 @@ -140,6 +140,8 @@ + + @@ -389,6 +391,8 @@ + + @@ -417,6 +421,7 @@ + @@ -465,6 +470,7 @@ + @@ -756,6 +762,7 @@ + @@ -1421,7 +1428,7 @@ - + @@ -1726,6 +1733,7 @@ + diff -Nru harfbuzz-8.0.1/docs/html/index.html harfbuzz-8.3.0/docs/html/index.html --- harfbuzz-8.0.1/docs/html/index.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/index.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,11 +3,11 @@ HarfBuzz Manual: HarfBuzz Manual - + - + @@ -16,7 +16,6 @@
-

HarfBuzz

HarfBuzz is a text shaping library. Using the HarfBuzz library allows @@ -262,6 +261,8 @@

API Index
Index of deprecated API
+
Index of new symbols in 8.2.0
+
Index of new symbols in 8.1.0
Index of new symbols in 8.0.0
Index of new symbols in 7.3.0
Index of new symbols in 7.1.0
@@ -360,6 +361,6 @@
+
Generated by GTK-Doc V1.33.1
\ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/install-harfbuzz.html harfbuzz-8.3.0/docs/html/install-harfbuzz.html --- harfbuzz-8.0.1/docs/html/install-harfbuzz.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/install-harfbuzz.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Installing HarfBuzz: HarfBuzz Manual - + - + @@ -59,6 +59,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration-api.html harfbuzz-8.3.0/docs/html/integration-api.html --- harfbuzz-8.0.1/docs/html/integration-api.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration-api.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Integration API: HarfBuzz Manual - + - + @@ -53,6 +53,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration-cairo.html harfbuzz-8.3.0/docs/html/integration-cairo.html --- harfbuzz-8.0.1/docs/html/integration-cairo.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration-cairo.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Cairo integration: HarfBuzz Manual - + - + @@ -61,6 +61,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration-coretext.html harfbuzz-8.3.0/docs/html/integration-coretext.html --- harfbuzz-8.0.1/docs/html/integration-coretext.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration-coretext.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Core Text integration: HarfBuzz Manual - + - + @@ -112,6 +112,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration-freetype.html harfbuzz-8.3.0/docs/html/integration-freetype.html --- harfbuzz-8.0.1/docs/html/integration-freetype.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration-freetype.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ FreeType integration: HarfBuzz Manual - + - + @@ -171,6 +171,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration-icu.html harfbuzz-8.3.0/docs/html/integration-icu.html --- harfbuzz-8.0.1/docs/html/integration-icu.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration-icu.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ ICU integration: HarfBuzz Manual - + - + @@ -76,6 +76,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration-python.html harfbuzz-8.3.0/docs/html/integration-python.html --- harfbuzz-8.0.1/docs/html/integration-python.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration-python.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Python bindings: HarfBuzz Manual - + - + @@ -56,6 +56,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration-uniscribe.html harfbuzz-8.3.0/docs/html/integration-uniscribe.html --- harfbuzz-8.0.1/docs/html/integration-uniscribe.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration-uniscribe.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Uniscribe integration: HarfBuzz Manual - + - + @@ -112,6 +112,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/integration.html harfbuzz-8.3.0/docs/html/integration.html --- harfbuzz-8.0.1/docs/html/integration.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/integration.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Platform Integration Guide: HarfBuzz Manual - + - + @@ -183,6 +183,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/level-2.html harfbuzz-8.3.0/docs/html/level-2.html --- harfbuzz-8.0.1/docs/html/level-2.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/level-2.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Level 2: HarfBuzz Manual - + - + @@ -180,6 +180,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/object-model-blobs.html harfbuzz-8.3.0/docs/html/object-model-blobs.html --- harfbuzz-8.0.1/docs/html/object-model-blobs.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/object-model-blobs.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Blobs: HarfBuzz Manual - + - + @@ -55,6 +55,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/object-model-lifecycle.html harfbuzz-8.3.0/docs/html/object-model-lifecycle.html --- harfbuzz-8.0.1/docs/html/object-model-lifecycle.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/object-model-lifecycle.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Object lifecycle management: HarfBuzz Manual - + - + @@ -92,6 +92,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/object-model-object-types.html harfbuzz-8.3.0/docs/html/object-model-object-types.html --- harfbuzz-8.0.1/docs/html/object-model-object-types.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/object-model-object-types.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Objects in HarfBuzz: HarfBuzz Manual - + - + @@ -83,6 +83,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/object-model-user-data.html harfbuzz-8.3.0/docs/html/object-model-user-data.html --- harfbuzz-8.0.1/docs/html/object-model-user-data.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/object-model-user-data.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ User data: HarfBuzz Manual - + - + @@ -54,6 +54,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/object-model.html harfbuzz-8.3.0/docs/html/object-model.html --- harfbuzz-8.0.1/docs/html/object-model.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/object-model.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ The HarfBuzz object model: HarfBuzz Manual - + - + @@ -68,6 +68,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/opentype-api.html harfbuzz-8.3.0/docs/html/opentype-api.html --- harfbuzz-8.0.1/docs/html/opentype-api.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/opentype-api.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ OpenType API: HarfBuzz Manual - + - + @@ -53,6 +53,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/opentype-shaping-models.html harfbuzz-8.3.0/docs/html/opentype-shaping-models.html --- harfbuzz-8.0.1/docs/html/opentype-shaping-models.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/opentype-shaping-models.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ OpenType shaping models: HarfBuzz Manual - + - + @@ -95,6 +95,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/reference-manual.html harfbuzz-8.3.0/docs/html/reference-manual.html --- harfbuzz-8.0.1/docs/html/reference-manual.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/reference-manual.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Part II. Reference manual: HarfBuzz Manual - + - + @@ -24,7 +24,7 @@

Part II. Reference manual

- This document is for HarfBuzz 8.0.1 + This document is for HarfBuzz 8.3.0 .

@@ -154,6 +154,8 @@
API Index
Index of deprecated API
+
Index of new symbols in 8.2.0
+
Index of new symbols in 8.1.0
Index of new symbols in 8.0.0
Index of new symbols in 7.3.0
Index of new symbols in 7.1.0
@@ -225,6 +227,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/reordering-in-levels-0-and-1.html harfbuzz-8.3.0/docs/html/reordering-in-levels-0-and-1.html --- harfbuzz-8.0.1/docs/html/reordering-in-levels-0-and-1.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/reordering-in-levels-0-and-1.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Reordering in levels 0 and 1: HarfBuzz Manual - + - + @@ -59,6 +59,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/script-specific-shaping.html harfbuzz-8.3.0/docs/html/script-specific-shaping.html --- harfbuzz-8.0.1/docs/html/script-specific-shaping.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/script-specific-shaping.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Script-specific shaping: HarfBuzz Manual - + - + @@ -45,6 +45,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/setting-buffer-properties.html harfbuzz-8.3.0/docs/html/setting-buffer-properties.html --- harfbuzz-8.0.1/docs/html/setting-buffer-properties.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/setting-buffer-properties.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Setting buffer properties: HarfBuzz Manual - + - + @@ -155,6 +155,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/shaping-and-shape-plans.html harfbuzz-8.3.0/docs/html/shaping-and-shape-plans.html --- harfbuzz-8.0.1/docs/html/shaping-and-shape-plans.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/shaping-and-shape-plans.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Shaping and shape plans: HarfBuzz Manual - + - + @@ -141,6 +141,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/shaping-concepts.html harfbuzz-8.3.0/docs/html/shaping-concepts.html --- harfbuzz-8.0.1/docs/html/shaping-concepts.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/shaping-concepts.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Shaping concepts: HarfBuzz Manual - + - + @@ -64,6 +64,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/shaping-opentype-features.html harfbuzz-8.3.0/docs/html/shaping-opentype-features.html --- harfbuzz-8.0.1/docs/html/shaping-opentype-features.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/shaping-opentype-features.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ OpenType features: HarfBuzz Manual - + - + @@ -128,6 +128,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/shaping-operations.html harfbuzz-8.3.0/docs/html/shaping-operations.html --- harfbuzz-8.0.1/docs/html/shaping-operations.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/shaping-operations.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Shaping operations: HarfBuzz Manual - + - + @@ -93,6 +93,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/shaping-plans-and-caching.html harfbuzz-8.3.0/docs/html/shaping-plans-and-caching.html --- harfbuzz-8.0.1/docs/html/shaping-plans-and-caching.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/shaping-plans-and-caching.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Plans and caching: HarfBuzz Manual - + - + @@ -80,6 +80,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/shaping-shaper-selection.html harfbuzz-8.3.0/docs/html/shaping-shaper-selection.html --- harfbuzz-8.0.1/docs/html/shaping-shaper-selection.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/shaping-shaper-selection.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Shaper selection: HarfBuzz Manual - + - + @@ -60,6 +60,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/style-api.html harfbuzz-8.3.0/docs/html/style-api.html --- harfbuzz-8.0.1/docs/html/style-api.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/style-api.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Style API: HarfBuzz Manual - + - + @@ -27,6 +27,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/style.css harfbuzz-8.3.0/docs/html/style.css --- harfbuzz-8.0.1/docs/html/style.css 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/style.css 2023-11-11 14:20:13.000000000 +0000 @@ -61,18 +61,6 @@ color: #729fcf; } -div.informaltable table -{ - border-collapse: separate; - border-spacing: 1em 0.3em; - border: none; -} - -div.informaltable table td, div.informaltable table th -{ - vertical-align: top; -} - .function_type, .variable_type, .property_type, @@ -127,6 +115,7 @@ margin: 0.25em; } +div.informaltable table[border="1"], div.table table { border-collapse: collapse; @@ -135,6 +124,8 @@ border: solid 1px #babdb6; } +div.informaltable table[border="1"] td, +div.informaltable table th, div.table table td, div.table table th { /* tango:aluminium 3 */ @@ -143,6 +134,7 @@ vertical-align: top; } +div.informaltable table[border="1"] th, div.table table th { /* tango:aluminium 2 */ @@ -463,23 +455,28 @@ } } +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .hll { background-color: #ffffcc } -.c { color: #408080; font-style: italic } /* Comment */ +.c { color: #3D7B7B; font-style: italic } /* Comment */ .err { border: 1px solid #FF0000 } /* Error */ .k { color: #008000; font-weight: bold } /* Keyword */ .o { color: #666666 } /* Operator */ -.ch { color: #408080; font-style: italic } /* Comment.Hashbang */ -.cm { color: #408080; font-style: italic } /* Comment.Multiline */ -.cp { color: #BC7A00 } /* Comment.Preproc */ -.cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ -.c1 { color: #408080; font-style: italic } /* Comment.Single */ -.cs { color: #408080; font-style: italic } /* Comment.Special */ +.ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.cp { color: #9C6500 } /* Comment.Preproc */ +.cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .gd { color: #A00000 } /* Generic.Deleted */ .ge { font-style: italic } /* Generic.Emph */ -.gr { color: #FF0000 } /* Generic.Error */ +.gr { color: #E40000 } /* Generic.Error */ .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.gi { color: #00A000 } /* Generic.Inserted */ -.go { color: #888888 } /* Generic.Output */ +.gi { color: #008400 } /* Generic.Inserted */ +.go { color: #717171 } /* Generic.Output */ .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .gs { font-weight: bold } /* Generic.Strong */ .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ @@ -492,15 +489,15 @@ .kt { color: #B00040 } /* Keyword.Type */ .m { color: #666666 } /* Literal.Number */ .s { color: #BA2121 } /* Literal.String */ -.na { color: #7D9029 } /* Name.Attribute */ +.na { color: #687822 } /* Name.Attribute */ .nb { color: #008000 } /* Name.Builtin */ .nc { color: #0000FF; font-weight: bold } /* Name.Class */ .no { color: #880000 } /* Name.Constant */ .nd { color: #AA22FF } /* Name.Decorator */ -.ni { color: #999999; font-weight: bold } /* Name.Entity */ -.ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +.ni { color: #717171; font-weight: bold } /* Name.Entity */ +.ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ .nf { color: #0000FF } /* Name.Function */ -.nl { color: #A0A000 } /* Name.Label */ +.nl { color: #767600 } /* Name.Label */ .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ .nt { color: #008000; font-weight: bold } /* Name.Tag */ .nv { color: #19177C } /* Name.Variable */ @@ -517,11 +514,11 @@ .dl { color: #BA2121 } /* Literal.String.Delimiter */ .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .s2 { color: #BA2121 } /* Literal.String.Double */ -.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +.se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +.si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ .sx { color: #008000 } /* Literal.String.Other */ -.sr { color: #BB6688 } /* Literal.String.Regex */ +.sr { color: #A45A77 } /* Literal.String.Regex */ .s1 { color: #BA2121 } /* Literal.String.Single */ .ss { color: #19177C } /* Literal.String.Symbol */ .bp { color: #008000 } /* Name.Builtin.Pseudo */ diff -Nru harfbuzz-8.0.1/docs/html/subset-api.html harfbuzz-8.3.0/docs/html/subset-api.html --- harfbuzz-8.0.1/docs/html/subset-api.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/subset-api.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Subset API: HarfBuzz Manual - + - + @@ -27,6 +27,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/terminology.html harfbuzz-8.3.0/docs/html/terminology.html --- harfbuzz-8.0.1/docs/html/terminology.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/terminology.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Terminology: HarfBuzz Manual - + - + @@ -145,6 +145,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/text-runs.html harfbuzz-8.3.0/docs/html/text-runs.html --- harfbuzz-8.0.1/docs/html/text-runs.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/text-runs.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Text runs: HarfBuzz Manual - + - + @@ -42,6 +42,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/the-distinction-between-levels-0-and-1.html harfbuzz-8.3.0/docs/html/the-distinction-between-levels-0-and-1.html --- harfbuzz-8.0.1/docs/html/the-distinction-between-levels-0-and-1.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/the-distinction-between-levels-0-and-1.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ The distinction between levels 0 and 1: HarfBuzz Manual - + - + @@ -101,6 +101,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/unicode-character-categories.html harfbuzz-8.3.0/docs/html/unicode-character-categories.html --- harfbuzz-8.0.1/docs/html/unicode-character-categories.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/unicode-character-categories.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Unicode character categories: HarfBuzz Manual - + - + @@ -74,6 +74,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/user-manual.html harfbuzz-8.3.0/docs/html/user-manual.html --- harfbuzz-8.0.1/docs/html/user-manual.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/user-manual.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Part I. User's manual: HarfBuzz Manual - + - + @@ -129,6 +129,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/utilities-common-types-apis.html harfbuzz-8.3.0/docs/html/utilities-common-types-apis.html --- harfbuzz-8.0.1/docs/html/utilities-common-types-apis.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/utilities-common-types-apis.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Common data types and APIs: HarfBuzz Manual - + - + @@ -79,6 +79,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/utilities.html harfbuzz-8.3.0/docs/html/utilities.html --- harfbuzz-8.0.1/docs/html/utilities.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/utilities.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Utilities: HarfBuzz Manual - + - + @@ -181,6 +181,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/what-does-harfbuzz-do.html harfbuzz-8.3.0/docs/html/what-does-harfbuzz-do.html --- harfbuzz-8.0.1/docs/html/what-does-harfbuzz-do.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/what-does-harfbuzz-do.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ What does HarfBuzz do?: HarfBuzz Manual - + - + @@ -102,6 +102,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/what-harfbuzz-doesnt-do.html harfbuzz-8.3.0/docs/html/what-harfbuzz-doesnt-do.html --- harfbuzz-8.0.1/docs/html/what-harfbuzz-doesnt-do.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/what-harfbuzz-doesnt-do.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ What HarfBuzz doesn't do: HarfBuzz Manual - + - + @@ -106,6 +106,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/what-is-harfbuzz.html harfbuzz-8.3.0/docs/html/what-is-harfbuzz.html --- harfbuzz-8.0.1/docs/html/what-is-harfbuzz.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/what-is-harfbuzz.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ What is HarfBuzz?: HarfBuzz Manual - + - + @@ -95,6 +95,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/why-do-i-need-a-shaping-engine.html harfbuzz-8.3.0/docs/html/why-do-i-need-a-shaping-engine.html --- harfbuzz-8.0.1/docs/html/why-do-i-need-a-shaping-engine.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/why-do-i-need-a-shaping-engine.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Why do I need a shaping engine?: HarfBuzz Manual - + - + @@ -169,6 +169,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/why-is-it-called-harfbuzz.html harfbuzz-8.3.0/docs/html/why-is-it-called-harfbuzz.html --- harfbuzz-8.0.1/docs/html/why-is-it-called-harfbuzz.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/why-is-it-called-harfbuzz.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Why is it called HarfBuzz?: HarfBuzz Manual - + - + @@ -33,6 +33,6 @@

+
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/html/working-with-harfbuzz-clusters.html harfbuzz-8.3.0/docs/html/working-with-harfbuzz-clusters.html --- harfbuzz-8.0.1/docs/html/working-with-harfbuzz-clusters.html 2023-07-12 05:41:30.000000000 +0000 +++ harfbuzz-8.3.0/docs/html/working-with-harfbuzz-clusters.html 2023-11-11 14:20:13.000000000 +0000 @@ -3,12 +3,12 @@ Working with HarfBuzz clusters: HarfBuzz Manual - + - + @@ -228,6 +228,6 @@ +
Generated by GTK-Doc V1.33.1 \ No newline at end of file diff -Nru harfbuzz-8.0.1/docs/version.xml harfbuzz-8.3.0/docs/version.xml --- harfbuzz-8.0.1/docs/version.xml 2023-07-12 05:29:08.000000000 +0000 +++ harfbuzz-8.3.0/docs/version.xml 2023-11-11 14:09:23.000000000 +0000 @@ -1 +1 @@ -8.0.1 +8.3.0 diff -Nru harfbuzz-8.0.1/gtk-doc.make harfbuzz-8.3.0/gtk-doc.make --- harfbuzz-8.0.1/gtk-doc.make 2023-07-12 05:28:57.000000000 +0000 +++ harfbuzz-8.3.0/gtk-doc.make 2023-11-11 14:09:15.000000000 +0000 @@ -57,6 +57,7 @@ sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ + $(DOC_MODULE).actions \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ diff -Nru harfbuzz-8.0.1/install-sh harfbuzz-8.3.0/install-sh --- harfbuzz-8.0.1/install-sh 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/install-sh 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2018-03-11.20; # UTC +scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -69,6 +69,11 @@ # Desired mode of installed file. mode=0755 +# Create dirs (including intermediate dirs) using mode 755. +# This is like GNU 'install' as of coreutils 8.32 (2020). +mkdir_umask=22 + +backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= @@ -99,18 +104,28 @@ --version display version info and exit. -c (ignored) - -C install only if different (preserve the last data modification time) + -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. + -p pass -p to $cpprog. -s $stripprog installed files. + -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG + +By default, rm is invoked with -f; when overridden with RMPROG, +it's up to you to specify -f if you want it. + +If -S is not specified, no backups are attempted. + +Email bug reports to bug-automake@gnu.org. +Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do @@ -137,8 +152,13 @@ -o) chowncmd="$chownprog $2" shift;; + -p) cpprog="$cpprog -p";; + -s) stripcmd=$stripprog;; + -S) backupsuffix="$2" + shift;; + -t) is_target_a_directory=always dst_arg=$2 @@ -255,6 +275,10 @@ dstdir=$dst test -d "$dstdir" dstdir_status=$? + # Don't chown directories that already exist. + if test $dstdir_status = 0; then + chowncmd="" + fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command @@ -301,22 +325,6 @@ if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then @@ -326,52 +334,49 @@ fi posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - # Note that $RANDOM variable is not portable (e.g. dash); Use it - # here however when possible just to lower collision chance. - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 - - # Because "mkdir -p" follows existing symlinks and we likely work - # directly in world-writeable /tmp, make sure that the '$tmpdir' - # directory is successfully created first before we actually test - # 'mkdir -p' feature. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null - fi - trap '' 0;; - esac;; + # The $RANDOM variable is not portable (e.g., dash). Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap ' + ret=$? + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null + exit $ret + ' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p'. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; esac if @@ -382,7 +387,7 @@ then : else - # The umask is ridiculous, or mkdir does not conform to POSIX, + # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. @@ -411,7 +416,7 @@ prefixes= else if $posix_mkdir; then - (umask=$mkdir_umask && + (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 @@ -451,7 +456,18 @@ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + (umask $cp_umask && + { test -z "$stripcmd" || { + # Create $dsttmp read-write so that cp doesn't create it read-only, + # which would cause strip to fail. + if test -z "$doit"; then + : >"$dsttmp" # No need to fork-exec 'touch'. + else + $doit touch "$dsttmp" + fi + } + } && + $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # @@ -477,6 +493,13 @@ then rm -f "$dsttmp" else + # If $backupsuffix is set, and the file being installed + # already exists, attempt a backup. Don't worry if it fails, + # e.g., if mv doesn't support -f. + if test -n "$backupsuffix" && test -f "$dst"; then + $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null + fi + # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || @@ -491,9 +514,9 @@ # file should still install successfully. { test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || + $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 diff -Nru harfbuzz-8.0.1/ltmain.sh harfbuzz-8.3.0/ltmain.sh --- harfbuzz-8.0.1/ltmain.sh 2023-07-12 05:29:00.000000000 +0000 +++ harfbuzz-8.3.0/ltmain.sh 2023-11-11 14:09:14.000000000 +0000 @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-14" +VERSION="2.4.6 Debian-2.4.6-15build2" package_revision=2.4.6 @@ -2141,7 +2141,7 @@ compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-14 + version: $progname $scriptversion Debian-2.4.6-15build2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` diff -Nru harfbuzz-8.0.1/m4/libtool.m4 harfbuzz-8.3.0/m4/libtool.m4 --- harfbuzz-8.0.1/m4/libtool.m4 2023-07-12 05:29:00.000000000 +0000 +++ harfbuzz-8.3.0/m4/libtool.m4 2023-11-11 14:09:14.000000000 +0000 @@ -1071,11 +1071,11 @@ # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + 10.0,*86*-darwin8*|10.0,*-darwin[[912]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) + 10.*|11.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; diff -Nru harfbuzz-8.0.1/meson.build harfbuzz-8.3.0/meson.build --- harfbuzz-8.0.1/meson.build 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/meson.build 2023-11-11 14:08:45.000000000 +0000 @@ -1,9 +1,9 @@ project('harfbuzz', 'c', 'cpp', meson_version: '>= 0.55.0', - version: '8.0.1', + version: '8.3.0', default_options: [ 'cpp_eh=none', # Just to support msvc, we are passing -fno-exceptions also anyway - 'cpp_rtti=false', # Just to support msvc, we are passing -fno-rtti also anyway + # 'cpp_rtti=false', # Do NOT enable, wraps inherit it and ICU needs RTTI 'cpp_std=c++11', 'wrap_mode=nofallback', # Use --wrap-mode=default to revert, https://github.com/harfbuzz/harfbuzz/pull/2548 ], @@ -22,6 +22,11 @@ cpp = meson.get_compiler('cpp') null_dep = dependency('', required: false) +# Enforce C++14 requirement for MSVC STL +if ['clang', 'clang-cl'].contains(cpp.get_id()) and cpp.get_define('_MSC_FULL_VER') != '' + add_project_arguments('-std=c++14', language: 'cpp') +endif + if cpp.get_argument_syntax() == 'msvc' # Ignore several spurious warnings for things HarfBuzz does very commonly. # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it @@ -380,6 +385,26 @@ endif endforeach +# CMake support (package install dir) + +# Equivalent to configure_package_config_file(INSTALL_DESTINATION ...), see +# https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html#command:configure_package_config_file. +# In certain unusual packaging layouts such as Nixpkgs, the Harfbuzz package +# is installed into two Nix store paths, "out" and "dev", where "out" contains +# libraries only (i.e. lib/libharfbuzz.so) and "dev" contains development +# files, i.e. include and lib/cmake. If CMake package files are installed to +# "out", Nixpkgs will move them to "dev", which breaks assumptions about +# our file paths. Since we need to figure out relative install paths here +# to make a relocatable package, we do need to know the final path of our +# CMake files to calculate the correct relative paths. +# Of course, this still defaults to $libdir/cmake if unset, which works for +# most packaging layouts. +cmake_package_install_dir = get_option('cmakepackagedir') + +if cmake_package_install_dir == '' + cmake_package_install_dir = get_option('libdir') / 'cmake' +endif + subdir('src') if not get_option('utilities').disabled() @@ -410,6 +435,7 @@ 'libdir': get_option('libdir'), 'includedir': get_option('includedir'), 'datadir': get_option('datadir'), + 'cmakepackagedir': cmake_package_install_dir }, 'Unicode callbacks (you want at least one)': {'Builtin': true, diff -Nru harfbuzz-8.0.1/meson_options.txt harfbuzz-8.3.0/meson_options.txt --- harfbuzz-8.0.1/meson_options.txt 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/meson_options.txt 2023-11-11 14:08:45.000000000 +0000 @@ -46,3 +46,7 @@ description: 'Build Ragel subproject if no suitable version is found') option('fuzzer_ldflags', type: 'string', description: 'Extra LDFLAGS used during linking of fuzzing binaries') + +# Install directory options +option('cmakepackagedir', type: 'string', + description: 'CMake package configuration install directory') diff -Nru harfbuzz-8.0.1/missing harfbuzz-8.3.0/missing --- harfbuzz-8.0.1/missing 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/missing 2023-11-11 14:09:18.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify diff -Nru harfbuzz-8.0.1/perf/Makefile.in harfbuzz-8.3.0/perf/Makefile.in --- harfbuzz-8.0.1/perf/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/perf/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,10 +157,8 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in +am__DIST_COMMON = $(srcdir)/Makefile.in README.md DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -214,6 +212,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -228,6 +228,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -520,7 +521,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/perf/README.md harfbuzz-8.3.0/perf/README.md --- harfbuzz-8.0.1/perf/README.md 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/perf/README.md 2023-11-11 14:08:45.000000000 +0000 @@ -0,0 +1,54 @@ +# Building and Running + +Benchmarks are implemented using [Google Benchmark](https://github.com/google/benchmark). + +To build the benchmarks in this directory you need to set the benchmark +option while configuring the build with meson: + +``` +meson build -Dbenchmark=enabled --buildtype=release +``` +or: +``` +meson build -Dbenchmark=enabled --buildtype=debugoptimized +``` + + +Then build a specific benchmark binaries with ninja: +``` +ninja -Cbuild perf/benchmark-set +``` +or just build the whole project: +``` +ninja -Cbuild +``` + +Finally, to run one of the benchmarks: + +``` +./build/perf/benchmark-set +``` + +It's possible to filter the benchmarks being run and customize the output +via flags to the benchmark binary. See the +[Google Benchmark User Guide](https://github.com/google/benchmark/blob/main/docs/user_guide.md#user-guide) for more details. + +# Profiling + +Configure the build to include debug information for profiling: + +``` +CXXFLAGS="-fno-omit-frame-pointer" meson --reconfigure build -Dbenchmark=enabled --buildtype=debug +ninja -Cbuild +``` + +Then run the benchmark with perf: + +``` +perf record -g build/perf/benchmark-subset --benchmark_filter="BM_subset_codepoints/subset_notocjk/100000" --benchmark_repetitions=5 +``` +You probably want to filter to a specific benchmark of interest and set the number of repititions high enough to get a good sampling of profile data. + +Finally view the profile with: + +perf report diff -Nru harfbuzz-8.0.1/perf/benchmark-font.cc harfbuzz-8.3.0/perf/benchmark-font.cc --- harfbuzz-8.0.1/perf/benchmark-font.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/perf/benchmark-font.cc 2023-11-11 14:08:45.000000000 +0000 @@ -42,6 +42,7 @@ glyph_h_advances, glyph_extents, draw_glyph, + paint_glyph, load_face_and_shape, }; @@ -192,6 +193,17 @@ hb_draw_funcs_destroy (draw_funcs); break; } + case paint_glyph: + { + hb_paint_funcs_t *paint_funcs = hb_paint_funcs_create (); + for (auto _ : state) + { + for (unsigned gid = 0; gid < num_glyphs; ++gid) + hb_font_paint_glyph (font, gid, paint_funcs, nullptr, 0, 0); + } + hb_paint_funcs_destroy (paint_funcs); + break; + } case load_face_and_shape: { for (auto _ : state) @@ -203,6 +215,19 @@ hb_font_t *font = hb_font_create (face); hb_face_destroy (face); + switch (backend) + { + case HARFBUZZ: + hb_ot_font_set_funcs (font); + break; + + case FREETYPE: +#ifdef HAVE_FREETYPE + hb_ft_font_set_funcs (font); +#endif + break; + } + hb_buffer_t *buffer = hb_buffer_create (); hb_buffer_add_utf8 (buffer, " ", -1, 0, -1); hb_buffer_guess_segment_properties (buffer); @@ -281,6 +306,7 @@ TEST_OPERATION (glyph_h_advances, benchmark::kMicrosecond); TEST_OPERATION (glyph_extents, benchmark::kMicrosecond); TEST_OPERATION (draw_glyph, benchmark::kMicrosecond); + TEST_OPERATION (paint_glyph, benchmark::kMillisecond); TEST_OPERATION (load_face_and_shape, benchmark::kMicrosecond); #undef TEST_OPERATION diff -Nru harfbuzz-8.0.1/perf/benchmark-subset.cc harfbuzz-8.3.0/perf/benchmark-subset.cc --- harfbuzz-8.0.1/perf/benchmark-subset.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/perf/benchmark-subset.cc 2023-11-11 14:08:45.000000000 +0000 @@ -11,8 +11,8 @@ enum operation_t { - subset_codepoints, subset_glyphs, + subset_unicodes, instance, }; @@ -164,7 +164,7 @@ switch (operation) { - case subset_codepoints: + case subset_unicodes: { hb_set_t* all_codepoints = hb_set_create (); hb_face_collect_unicodes (face, all_codepoints); @@ -264,7 +264,7 @@ #define TEST_OPERATION(op, time_unit) test_operation (op, #op, tests, num_tests, time_unit) TEST_OPERATION (subset_glyphs, benchmark::kMicrosecond); - TEST_OPERATION (subset_codepoints, benchmark::kMicrosecond); + TEST_OPERATION (subset_unicodes, benchmark::kMicrosecond); TEST_OPERATION (instance, benchmark::kMicrosecond); #undef TEST_OPERATION diff -Nru harfbuzz-8.0.1/perf/texts/duployan.txt harfbuzz-8.3.0/perf/texts/duployan.txt --- harfbuzz-8.0.1/perf/texts/duployan.txt 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/perf/texts/duployan.txt 2023-11-11 14:08:45.000000000 +0000 @@ -0,0 +1,27 @@ +𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰅𛱄‌𛰂𛱁 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚 + +𛱇𛰣 𛰂𛱆 𛰆𛱄𛰉𛰅𛰋𛱁𛰄𛰃 + +𛱁𛰆𛱇𛰅𛰜 𛰅𛱄𛰈 𛱊𛱁‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛱛‌𛰅𛱛𛰅 𛰜𛱇𛱇‌𛰜𛱇𛰙 𛰅𛱄‌𛰂𛱁 𛰣𛱇‌𛰚𛱛𛰅 + +𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱜‌𛱜 𛰅𛱄‌𛰂𛱁 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚 𛱆‌𛰚𛱁‌𛰃𛱁𛱆 𛰅𛱄‌𛰂𛱁 𛰜𛰅𛱂𛱆 𛰜𛰃𛱂‌𛰆𛱄͏͏͏, 𛱞𛰅 𛰃𛰆𛱛𛰜 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰅‌𛰜𛰃𛱂 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜; 𛰂𛱆 𛰚𛱁𛱋‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰚𛱁‌𛱞‌𛰃𛰅𛱁, 𛰂𛱛͏͏͏𛰜 𛰚𛱁𛱋‌𛰅𛱁 𛰚𛱁‌𛰚𛱇𛰣 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛱇𛰆𛱇𛰂 𛰅𛱄‌𛰂𛱁 𛰂𛱁‌𛱊𛱁 𛰂𛱆 𛱜‌𛱜 𛰅𛱁‌𛰅𛱜 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛰅𛱁‌𛰅𛱜 𛰂𛱛͏͏͏𛰜 𛱆𛰂‌𛰜𛱛𛰃 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛰅𛱁‌𛰚𛱁‌𛱞 𛱆𛰅‌𛰃𛱂 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜: 𛱛‌𛰅𛱛𛰅 𛰚𛰜𛱁𛱆‌𛰅𛱁 𛱇𛰆𛱄͏͏͏ 𛰚𛱁‌𛰚𛱇𛰣. 𛱁‌𛱊𛱁𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰚𛱇𛰙 𛰅𛱄‌𛰂𛱁 𛱇𛰛𛱇𛰂𛰃 𛱇𛰆𛱇‌𛰀𛱇. 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛰅𛱁‌𛰃𛱂 𛱛‌𛰅𛱛𛰅 𛱁𛰚‌𛰅𛱁‌𛰃𛱇 𛰃𛱚𛰚 𛰙𛱇𛰋𛱄𛱆 𛰂𛱆 𛱄͏͏͏𛰄𛱆𛰋. 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛱇𛱇 𛰅𛱄‌𛰂𛱁 𛰜𛰃𛱇𛰅, 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙, 𛰂𛱆 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛰅𛱁‌𛰚𛱁‌𛱞 𛱆𛰅‌𛰃𛱂 𛱆𛰂‌𛰜𛱛𛰃 𛰅𛱄‌𛰂𛱁 𛱂𛰄𛰋𛱇𛰅𛱁. 𛱞𛰀𛰃 𛰜𛰄𛱆𛰚𛰅𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙, 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛱊𛱁‌𛰅𛱁 𛱜‌𛱜; 𛰂𛱆 𛱇𛰆𛱇𛰂 𛰅𛱄‌𛰂𛱁 𛰜𛰄𛱆𛰚𛰅𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛱇𛰆𛱇‌𛰀𛱇, 𛰂𛱆 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁𛰛 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛱆𛰅‌𛰃𛱂 𛱁𛰚‌𛰅𛱁‌𛰃𛱇 𛰜𛰄𛱆𛰚𛰅𛰜 𛰙𛱁𛰛 𛰃𛱄𛰙‌𛰃𛱄𛰙. + +𛰅𛱄‌𛰂𛱁 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚 𛱇𛰆𛱇𛰂 𛰂𛱛͏͏͏𛰜 𛰃𛱂‌𛱇𛱇 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱄‌𛰂𛱁 𛱛𛰆𛰑𛱁𛰋 𛰙𛱁‌𛰙𛱛𛰅 𛰆𛱄͏͏͏ 𛰂𛱛͏͏͏𛰜 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰜𛰅‌𛰜𛰃𛱂 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜, 𛱆𛰀𛰃 𛱄𛰆‌𛰙𛱁𛰚 𛰂𛱆 𛱊𛱁‌𛰅𛱁 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚 𛱁‌𛱊𛱁𛰜 𛰃𛱇‌𛰅𛱆 𛱇𛰜‌𛰅𛱄𛰙 𛰂𛱆 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛱇𛰆𛱄͏͏͏ 𛰚𛱁𛱋‌𛰅𛱁 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛱆𛰅‌𛰃𛱂 𛰙𛱁‌𛰙𛱛𛰅 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰅𛱁‌𛰅𛱜; 𛰅𛱄‌𛰂𛱆𛰃 𛰚𛱁𛱋‌𛰅𛱁 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛰂𛱛͏͏͏𛰜 𛱁‌𛱑 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛱇𛰆𛱄͏͏͏ 𛰃𛱇‌𛰅𛱆 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛱜‌𛱜 𛰅𛱄‌𛰂𛱁 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇 𛰂𛱆 𛱆𛰂‌𛰜𛱛𛰃 𛰅𛱛‌𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰊𛱁𛰋𛰈𛱇𛰚 𛰂𛱆 𛱇𛰆𛱇‌𛰀𛱇. 𛰅𛱁𛰆‌𛰃𛱁𛰛 𛰂𛱛͏͏͏𛰜 𛰅𛱁‌𛰅𛱜, 𛱛‌𛰅𛱛𛰅 𛰙𛱁𛰚 𛰂𛱆 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚 𛱁‌𛱊𛱁𛰜 𛰃𛱇‌𛰅𛱆 𛱇𛰜‌𛰅𛱄𛰙 𛰂𛱆 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛰅𛱁‌𛰚𛱁‌𛱞 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛱞𛰅 𛰜𛱁‌𛱊𛱁 𛰅𛱄‌𛰂𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱂‌𛰚𛱁𛰜 𛰀𛱚𛰜. 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇 𛰈𛰋𛱇𛰃 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛱜‌𛱜 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰔𛱄‌𛰆𛱁𛰚 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛰀𛱚𛰜: 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰅‌𛰜𛰃𛱂 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛰅𛱁‌𛰃𛱂 𛰂𛱛͏͏͏𛰜 𛱛‌𛰅𛱛𛰅 𛰙𛱁𛰚 𛰂𛱆 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛰂𛱆 𛱇𛰆𛱄͏͏͏ 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛱜‌𛱜 𛱆𛰅‌𛰃𛱂 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰙𛱁𛰚 𛰂𛱆 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚. 𛱞𛰅 𛰃𛰆𛱛𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰜𛱇𛱂‌𛰀𛱛𛰜 𛱛‌𛰅𛱛𛰅 𛰙𛱁𛰚 𛰂𛱆 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚 𛰂𛱆 𛰅𛱁‌𛰅𛱜 𛰂𛱛͏͏͏𛰜 𛱆𛰂‌𛰜𛱛𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱂‌𛰚𛱁𛰜 𛰀𛱚𛰜 𛰅𛱆‌𛰅𛱛‌𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛱁‌𛱊𛱁𛰜 𛰜𛰃𛱇𛰅 𛰅𛱄‌𛰂𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱁𛰆‌𛰃𛱁𛰛 𛱇𛰆𛱇‌𛰀𛱇. 𛱇𛰆𛱄͏͏͏ 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰃𛱇‌𛰅𛱆 𛱛‌𛰅𛱛𛰅 𛰙𛱄𛰅𛰜𛰃 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙. 𛰂𛱆 𛱇𛰆𛱇𛰂 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱜͏͏͏𛰛 𛰅𛰆𛱁𛰜‌𛰅𛱁. 𛱇𛰆𛱄͏͏͏ 𛱆𛰅‌𛰃𛱂 𛰜𛱁‌𛰆𛱇𛰅𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱜‌𛱜 𛰅𛱄‌𛰂𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁. 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛰆𛱛𛰜 𛰚𛱁‌𛰚𛱇𛰣 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰜𛱁‌𛱊𛱁 𛰅𛱄‌𛰂𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱂‌𛰚𛱁𛰜 𛰀𛱚𛰜 𛰅𛱆‌𛰅𛱛‌𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰜𛰃𛱇𛰅. 𛰂𛱛͏͏͏𛰜 𛱆𛰀𛰃 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱂‌𛰃𛱜͏͏͏ 𛰅𛱄‌𛰂𛱁 𛱊𛱁‌𛱜 𛰂𛱆 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰔𛱄‌𛰆𛱁𛰚 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛱜‌𛱜 𛰅𛱄‌𛰂𛱁 𛰀𛱚𛰜, 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱁‌𛱑 𛱜‌𛱜. 𛰂𛱆 𛰅𛱄‌𛰂𛱁 𛰅𛱁𛰆‌𛰃𛱁𛰛 𛱛‌𛰅𛱛𛰅. 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱜‌𛱜 𛰙𛱇𛰋𛰜𛱇 𛰂𛱛͏͏͏𛰜 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱂‌𛰚𛱁𛰜 𛰅𛰆𛱂‌𛰃𛱜͏͏͏ 𛰅𛱄‌𛰂𛱁 𛱊𛱁‌𛱜 𛰂𛱆 𛰣𛱁‌𛰅𛱄 𛱇𛰆𛱄͏͏͏. 𛱇𛰆𛱄͏͏͏ 𛱁‌𛱑 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜. 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛰅𛱄‌𛰂𛱁 𛰅𛱁𛰀 𛰣𛱁‌𛰅𛱄 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. + +𛱆𛰀𛰃 𛰜𛱄𛰚 𛱁‌𛱑 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰔𛱄 𛰅𛱄‌𛰂𛱁 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚 𛱊𛱁‌𛰅𛱁 𛰜𛰃𛱄𛰚 𛱄𛱇‌𛰀𛱁𛰃. 𛱇𛰆𛱄͏͏͏ 𛰅𛱁‌𛰅𛱜 𛱛‌𛰅𛱛𛰅 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱜‌𛰚𛱇‌𛰜𛱇𛰙 𛰚𛱁‌𛰚𛱇𛰣 𛰅𛱄‌𛰂𛱁 𛱄𛱇‌𛰀𛱁𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁. 𛰅𛱄‌𛰂𛱁 𛰙𛱁‌𛰅𛱛𛰅 𛰀𛱚𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱂‌𛰙𛱁‌𛰚𛱜͏͏𛰜: 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱜‌𛱜 𛱆𛰅‌𛰃𛱂 𛱁𛰆‌𛰅𛱆 𛰣𛱁‌𛰅𛱄 𛰂𛱆 𛰙𛱁‌𛰅𛱛𛰅 𛰃𛰆𛱛𛰜 𛰅𛱁‌𛰙𛱄‌𛰜𛱁𛰅. 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰅‌𛰜𛰃𛱂 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛱆𛰅‌𛰃𛱂 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱇𛰆𛱇‌𛰀𛱇. 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰜𛰅𛱛‌𛰅𛱛𛰙 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛰅𛱄‌𛰂𛱁 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰜𛰃𛱒‌𛱇𛰆 𛱛‌𛰅𛱛𛰅 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙, 𛰂𛱆 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰂𛱆𛰚𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰥𛱇𛰅‌𛰥𛱇𛰅 𛰅𛱄‌𛰂𛱁 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰂𛱆 𛰙𛱛𛰜‌𛰙𛱛𛰜 𛰆𛱂‌𛰃𛱇𛰃, 𛰅𛱁𛰆𛱂‌𛰅𛱁𛰆𛱂, 𛰙𛱁𛰚 𛰆𛱂‌𛰙𛱛‌𛰃𛱄͏͏͏, 𛰂𛱆 𛰆𛱁𛱆𛰚𛰜. 𛰃𛱂‌𛱇𛱇 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰆𛱄͏͏͏‌𛰆𛱄͏͏͏ 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰜𛱇𛱂‌𛰂𛱛𛰃𛰆 𛰅𛱄‌𛰂𛱁 𛰙𛱄𛰅𛰜𛰃 𛰀𛱄𛰋𛰚 𛰂𛱆 𛱆𛰀𛰃 𛰅𛱄‌𛱑‌𛰅𛱄‌𛱑 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰅𛱁‌𛰚𛱁‌𛰙𛱄𛰅𛰜𛰃 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰀𛱄𛰋𛰚. + +𛰅𛱁‌𛰚𛱁‌𛰙𛱄𛰅𛰜𛰃 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛱆𛰀𛰃 𛰃𛱂‌𛰚𛱁𛰜 𛰙𛱁𛰚; 𛱇𛰆𛱄͏͏͏ 𛱊𛱁‌𛰅𛱁 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰙𛱁‌𛰙𛱁 𛰂𛱆 𛰂𛱁‌𛰂𛱁, 𛰅𛱄‌𛰂𛱆𛰃 𛱆𛰀𛰃 𛰃𛱂‌𛰚𛱁𛰜 𛰃𛰆𛱇𛰆 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛱊𛱁‌𛰅𛱁 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃. 𛰂𛱆 𛱊𛱁‌𛰅𛱁 𛱁‌𛱊𛱁𛰜 𛰃𛱇‌𛰅𛱆 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛱁‌𛱊𛱁𛰜 𛰜𛱇𛰅 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛱊𛱁‌𛰅𛱁 𛰙𛱁‌𛰙𛱁 𛰂𛱆 𛰂𛱁‌𛰂𛱁, 𛰂𛱆 𛰅𛱄‌𛰂𛱆𛰃 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰙𛱁‌𛰙𛱛𛰅 𛰃𛰆𛱛𛰜 𛱊𛱁‌𛰅𛱁 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛱁𛰆‌𛰃𛱂. 𛰅𛱁‌𛰚𛱁‌𛱞 𛰃𛱂‌𛰚𛱁𛰜 𛱁‌𛱊𛱁𛰜 𛰃𛱇‌𛰅𛱆 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰂𛱆 𛰃𛱇‌𛰅𛱆 𛰚𛱁‌𛰚𛱇𛰣 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰂𛰆𛱇. 𛰅𛱁‌𛰅𛱜, 𛱇𛰆𛱄͏͏͏ 𛱁‌𛱑 𛱊𛱁‌𛰅𛱁 𛰅𛰋𛱁𛱆. 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛰙𛱁𛰚 𛱊𛱁‌𛰅𛱁 𛰚𛱇𛰙 𛰙𛱇𛰚𛱇𛰜 𛰃𛰆𛱛𛰜 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛰂𛱛͏͏͏𛰜 𛱊𛱁‌𛰅𛱁 𛰂𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛱊𛱁‌𛰅𛱁 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛱞𛰅 𛰜𛱁‌𛱊𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰥𛱇𛰅‌𛰥𛱇𛰅. + +𛰣𛱁‌𛰅𛱄 𛰃𛰆𛱛𛰚 𛰃𛱂‌𛰚𛱁𛰜 𛰜𛱄𛰚 𛰅𛱁𛰀 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚, 𛰂𛱆 𛱞𛰅 𛰅𛱁‌𛰃𛱂 𛰙𛱇𛰚𛱇𛰜 𛰃𛰆𛱁𛰂 𛱊𛱁‌𛰅𛱁 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛰂𛱛͏͏͏𛰜 𛱊𛱁‌𛰅𛱁 𛰅𛰋𛱁𛱆 𛰅𛱄‌𛰂𛱁 𛰙𛱁‌𛰅𛱛𛰅 𛰀𛱚𛰜, 𛰅𛱁𛰚‌𛰜𛱇𛰀 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰙𛱁‌𛰙𛱛𛰅 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛰅𛱄‌𛰂𛱁 𛱊𛱁‌𛰅𛱁 𛰅𛱁‌𛰃𛱂 𛱛‌𛰅𛱛𛰅 𛱄𛰆‌𛰙𛱁𛰚 𛰂𛱆 𛱊𛱁‌𛰅𛱁 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚, 𛰂𛱆 𛱞𛰀𛰃 𛰅𛱁‌𛰃𛱂 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛱜‌𛱜 𛰅𛱄‌𛰂𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰀𛱚𛰜 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰔𛱄‌𛰆𛱁𛰚 𛱛‌𛰅𛱛𛰅 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇. 𛰂𛱛͏͏͏𛰜 𛰙𛱇𛰚𛱇𛰜 𛰔𛱄‌𛰆𛱁𛰚 𛱛‌𛰅𛱛𛰅 𛰜𛱇𛱇‌𛰜𛱇𛰙, 𛱊𛱁‌𛰅𛱁 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰋𛱁𛱆. 𛰣𛱇 𛱊𛱁‌𛰅𛱁 𛰜𛰃𛱒‌𛱇𛰆. 𛱊𛱁‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰜𛱁‌𛰀𛱁‌𛰆𛱇 𛱊𛱁‌𛰅𛱁 𛰆𛱇‌𛰙𛱁 𛰅𛱄‌𛰂𛱁 𛰜𛰅𛱂𛱆 𛰂𛱆 𛱜‌𛱜 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰆𛱂‌𛰆𛱁𛰚𛰊 𛰜𛰃𛱒‌𛱇𛰆: 𛱇𛰆𛱄͏͏͏ 𛱛‌𛰅𛱛𛰅 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛱆𛰅‌𛰃𛱂 𛱊𛱁‌𛰅𛱁 𛱜‌𛱜. 𛰂𛱆 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱇‌𛰅𛱆 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜. 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰚𛱁‌𛰚𛱇𛰣 𛰜𛱁‌𛰀𛱁‌𛰆𛱇: 𛱛‌𛰅𛱛𛰅 𛰜𛰅𛱂𛱆 𛰂𛱆 𛰅𛰆𛱚𛰈𛰜 𛰣𛱁‌𛰅𛱄 𛰀𛰆𛱄𛱆‌𛰙𛱁. 𛱁‌𛱊𛱁𛰜 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛱛‌𛰅𛱛𛰅. 𛰂𛱛͏͏͏𛰜 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛰙𛱁𛰚 𛰜𛰃𛱒‌𛱇𛰆, 𛱛‌𛰅𛱛𛰅 𛰅𛰆𛱚𛰈𛰜 𛰣𛱁‌𛰅𛱄 𛰅𛱁‌𛰅𛱜 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰙𛱁‌𛱞𛰣: 𛰅𛱁‌𛰅𛱜 𛱁‌𛱑 𛰙𛱁‌𛱞𛰣 𛰣𛱁‌𛰅𛱄 𛰙𛱇𛰅𛰜𛰃 𛰅𛱁‌𛰚𛱁‌𛰙𛱄𛰅𛰜𛰃. 𛰂𛱆 𛰅𛱜‌𛰚𛱇‌𛰜𛱇𛰙 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰚𛱁‌𛰚𛱇𛰣 𛱆𛰅‌𛰃𛱂 𛰅𛱁‌𛰅𛱜 𛰂𛱛͏͏͏𛰜 𛰃𛱛͏͏͏‌𛰙𛱁𛰣 𛰚𛱁‌𛱞‌𛰃𛰅𛱁 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛰅𛰆𛱁𛰜‌𛰅𛱁… + +𛱛‌𛰅𛱛𛰅 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰙𛱁𛰛 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚 𛰂𛱆 𛱞𛰅 𛰅𛱁𛰚‌𛰜𛱇𛰀 𛱞𛰀𛰃 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰚𛱁‌𛰚𛱇𛰣 𛰅𛰆𛱁𛰜‌𛰅𛱁. 𛰂𛱆 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰣𛱁‌𛰅𛱄 𛰅𛱜͏͏͏𛰛: 𛱇𛰆𛱄͏͏͏ 𛱆𛰀𛰃 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰚𛱁‌𛰚𛱇𛰣 𛰅𛱄‌𛰂𛱁 𛰃𛱚𛰚. 𛰅𛱄‌𛰂𛱁 𛰅𛱁‌𛰚𛱁‌𛱞 𛰀𛱚𛰜 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰣𛱁‌𛰅𛱄 𛱇𛰆𛱄͏͏͏: 𛱁‌𛱊𛱁𛰜 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰂𛱆 𛰃𛱂‌𛰚𛱁𛰜, 𛰃𛰆𛱇𛰆, 𛰆𛱇‌𛰊𛰆𛱇, 𛰆𛱇‌𛰅𛰋𛱇𛰙, 𛰃𛰆𛱇𛰆. 𛱄𛰆‌𛰙𛱁𛰚 𛰅𛰋𛱁𛰚𛱄𛰚, 𛰃𛱂‌𛱇𛱇 𛰅𛱄‌𛰂𛱁 𛰃𛱚𛰚, 𛱊𛱁‌𛰅𛱁 𛱜‌𛱜 𛰂𛱛͏͏͏𛰜 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱁𛰂‌𛰛𛱜‌𛰆𛱂 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛰅𛰆𛱛͏͏͏‌𛰚𛱁𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱇‌𛰅𛱆 𛰂𛱁‌𛰃𛰆𛱁𛰣 𛰆𛱂‌𛰂𛱆‌𛰆𛱇‌𛰃𛱁𛰜 𛰅𛱄‌𛰂𛱁 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙. 𛱊𛱁‌𛰅𛱁 𛰙𛱁‌𛰜𛱁‌𛰣𛱇 𛱜‌𛱜 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰂𛱆 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰥𛱇𛰅‌𛰥𛱇𛰅. 𛰂𛱆 𛱆𛰀𛰃 𛰙𛱁𛰚, 𛱊𛱁‌𛰅𛱁 𛰚𛱇𛰙 𛰚𛱇𛰑 𛰂𛱆 𛱊𛱁‌𛰅𛱁 𛰃𛰆𛱛𛰜 𛰚𛱁‌𛰚𛱇𛰣 𛰂𛱆‌𛰂𛱁, 𛱊𛱁‌𛰅𛱁 𛱜‌𛱜 “𛰃𛰆𛱛𛰜 𛱛‌𛰅𛱛𛰅 𛰙𛱁‌𛰜𛱁‌𛰣𛱇 𛰙𛱁𛰚 𛰂𛱆 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚 𛰃𛰆𛱁𛰂 𛱛‌𛰅𛱛𛰅 𛰆𛱂‌𛰂𛱆‌𛰆𛱇‌𛰃𛱁𛰜”. 𛰂𛱆 𛰚𛱁‌𛱞‌𛰃𛰅𛱁 𛱛‌𛰅𛱛𛰅 𛰙𛱁𛰚 𛰂𛱆 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚 𛰅𛱜‌𛰚𛱇‌𛰜𛱇𛰙 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛱇𛰆𛱇𛰂 𛱁‌𛱑 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛰂𛱆 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰅‌𛰜𛰃𛱂 𛰃𛱇‌𛰅𛱆 𛰙𛱁‌𛰙𛱛𛰅 𛰅𛱄𛰋𛰃 𛰀𛱚𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁. 𛱞𛰀𛰃 𛰇𛱁𛰋𛰅𛱆𛰂 𛱊𛱁‌𛰅𛱁 𛰃𛱂‌𛰚𛱁𛰜 𛰙𛱁𛰚 𛱁𛰃𛱁𛰆 𛱜‌𛱜 𛰂𛱛͏͏͏𛰜 𛰆𛱁𛰜𛰃 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇 𛱊𛱁‌𛰅𛱁 𛰚𛱁‌𛰚𛱇𛰣 𛰅𛱁‌𛰚𛱁‌𛱞 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰅𛰆𛱂‌𛰀𛱁‌𛰚𛱇 𛰅𛱄‌𛰂𛱁 𛰙𛱁‌𛰜𛱁‌𛰣𛱇 𛰙𛱁𛰚 𛱊𛱁‌𛰅𛱁 𛰀𛱚𛰜, 𛰅𛱆‌𛰅𛱛‌𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰜𛰃𛱇𛰅. 𛰃𛰆𛱂‌𛱜 𛱛‌𛰅𛱛𛰅 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱂‌𛰃𛱜͏͏͏ 𛰋𛱚𛰚 𛱛‌𛰅𛱛𛰅 𛰀𛱚𛰜. 𛰙𛱄𛰅𛰜𛰃 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰅𛱆𛰙‌𛰃𛱂 𛰅𛱄‌𛰂𛱁 𛰙𛱄𛰅𛰜𛰃 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜, 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛰆𛱂‌𛰃𛱜͏͏͏ 𛰋𛱚𛰚. 𛰅𛱁‌𛰅𛱜 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰙𛱁‌𛱞𛰣 𛰃𛱂‌𛰙𛱁‌𛰚𛱜͏͏𛰜. 𛱇𛰆𛱄͏͏͏ 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱄𛰙‌𛰃𛱁𛰅𛰜 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰚𛱁‌𛱞‌𛰃𛰅𛱁 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛰙𛱁𛰚. 𛰈𛰋𛱇𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱜͏͏͏𛰛 𛱛‌𛰅𛱛𛰅 𛱄𛰆‌𛰙𛱁𛰚 𛰂𛱆 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛱇‌𛰅𛱆 𛰙𛱁‌𛰙𛱛𛰅 𛰅𛱄𛰋𛰃 𛰀𛱚𛰜 𛱊𛱁‌𛰅𛱁 𛰂𛱛͏͏͏𛰜 𛱊𛱁‌𛰅𛱁 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰅𛰆𛱂‌𛰀𛱁‌𛰚𛱇 𛰅𛱄‌𛰂𛱁 𛱊𛱁‌𛰅𛱁 𛰀𛱚𛰜 𛰂𛱆 𛰜𛱁‌𛱊𛱁 𛰅𛱄‌𛰂𛱁 𛱊𛱁‌𛰅𛱁 𛰅𛱁𛰆‌𛰃𛱁𛰛 𛱇𛰆𛱇‌𛰀𛱇. + +𛰅𛱁‌𛰅𛱜, 𛰅𛱁𛰆‌𛰃𛱁𛰛 𛱛‌𛰅𛱛𛰅 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰣𛱁‌𛰅𛱄 𛰜𛱁‌𛰆𛱇𛰅𛰜, 𛰂𛱆 𛰅𛰆𛱂‌𛰃𛱜͏͏͏ 𛰜𛰆𛱇𛰂. 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰊𛱆𛰃‌𛱄͏͏͏𛰂 𛰃𛱂‌𛰚𛱁𛰜 𛰜𛱄𛰚: 𛰀𛱜! 𛱞𛰀𛰃 𛰅𛱁‌𛰚𛱁‌𛱞 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰅𛱄‌𛰂𛱁 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰀𛱚𛰜! 𛱁‌𛱊𛱁𛰜 𛰂𛱆 𛰃𛱂‌𛰚𛱁𛰜, 𛰃𛰆𛱇𛰆, 𛰆𛱇‌𛰊𛰆𛱇, 𛰆𛱇‌𛰅𛰋𛱇𛰙, 𛰂𛱆 𛰃𛰅𛱄𛰂. 𛱇𛰆𛱄͏͏͏ 𛱆𛰀𛰃 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰣𛱁‌𛰅𛱄 𛱇𛰆𛱄͏͏͏. 𛰂𛱆 𛱁‌𛱊𛱁𛰜 𛰊𛰋𛱇𛰜 𛱛‌𛰅𛱛𛰅 𛰂𛱛‌𛰂𛱛͏͏͏𛰜, 𛰂𛱆 𛱁‌𛱊𛱁𛰜 𛰃𛰆𛱛𛰜 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛰅𛰆𛱁𛰜‌𛰅𛱁. 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛱁‌𛱑 𛱜‌𛱜 𛰅𛱁‌𛰚𛱁‌𛰙𛱄𛰅𛰜𛰃 𛰅𛱁‌𛰃𛱂 𛱛‌𛰅𛱛𛰅, 𛰂𛱆 𛰃𛰆𛱁𛰂 𛰜𛰅𛱛‌𛰅𛱛𛰙 𛰃𛱄𛰙‌𛰃𛱄𛰙. 𛱄𛰆‌𛰙𛱁𛰚 𛰅𛰋𛱁𛰚𛱄𛰚 𛱞𛰀𛰃 𛱊𛱁‌𛰅𛱁 𛱜‌𛱜 𛰂𛱛͏͏͏𛰜 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱁𛰂‌𛰛𛱜‌𛰆𛱂 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. 𛱞𛰅 𛰅𛱁𛰚‌𛰜𛱇𛰀 𛱁𛰚‌𛰅𛱁‌𛰃𛱇 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰅𛱆‌𛰆𛱂‌𛰂𛱂𛱆 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰙𛱁‌𛰜𛱁‌𛰣𛱇 𛰙𛱁𛰚 𛱊𛱁‌𛰅𛱁 𛰀𛱚𛰜. 𛰂𛱆 𛰅𛱁‌𛰚𛱁‌𛱞 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛱆𛰀𛰃 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅: 𛱇𛰆𛱄͏͏͏ 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰃𛱇‌𛰅𛱆 𛰙𛱁𛰅‌𛰙𛱁𛰅 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛰜𛱄𛰚, 𛰂𛱆 𛱁‌𛱊𛱁𛰜 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛱛‌𛰅𛱛𛰅. 𛰙𛱄𛰅𛰜𛰃 𛰜𛱄𛰚 𛱛‌𛰅𛱛𛰅 𛰊𛰋𛱇𛰜 𛰂𛱆 𛰆𛱇‌𛰜𛱇 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛱇𛰆𛱄͏͏͏ 𛰃𛱇‌𛰅𛱆 𛰙𛱁𛰅‌𛰙𛱁𛰅: 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱁𛰆‌𛰃𛱁𛰛 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛱞𛰅 𛰜𛱁‌𛱊𛱁 𛰅𛱄‌𛰂𛱁 𛰂𛱁‌𛱊𛱁 𛰂𛱆 𛰅𛱄‌𛰂𛱁 𛰜𛱄𛰚. + +𛰅𛱄‌𛰂𛱆𛰃 𛰅𛱁‌𛰚𛱁‌𛱞 𛱆𛰀𛰃 𛰜𛱄𛰚‌𛰈𛱇 𛰂𛱆 𛱛𛰆𛰑𛱁𛰋 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰚𛱁‌𛰚𛱇𛰣 𛱇𛰆𛱄͏͏͏ 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰆𛱂𛱆𛰃 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰙𛱁‌𛰜𛱁‌𛰣𛱇 𛰙𛱁𛰚 𛱊𛱁‌𛰅𛱁 𛰀𛱚𛰜 𛰅𛱆‌𛰅𛱛‌𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛰜𛰃𛱇𛰅. 𛰃𛱂‌𛰚𛱁𛰜 𛰚𛱇𛰑 𛱜‌𛱜 𛰂𛱛͏͏͏𛰜, 𛰅𛱄‌𛰂𛱆𛰃 𛱛‌𛰅𛱛𛰅 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇 𛰅𛱁𛰀 𛰣𛱁‌𛰅𛱄 𛱇𛰆𛱄͏͏͏ 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜, 𛱇𛰆𛱄͏͏͏ 𛰅𛰆𛱁𛰅‌𛰜𛰃𛱂 𛰚𛱁‌𛰚𛱇𛰣 𛱛‌𛰅𛱛𛰅 𛱄𛰆‌𛰙𛱁𛰚 𛰂𛱆 𛱊𛱁‌𛰅𛱁 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚. 𛰅𛱄‌𛰂𛱆𛰃 𛱆𛰀𛰃 𛱞𛰀𛰃 𛰜𛱄𛰚‌𛰈𛱇 𛰂𛱆 𛰃𛱂‌𛱇𛱇 𛰅𛱄‌𛰂𛱁 𛰃𛱚𛰚 𛰙𛱁‌𛰙𛱛𛰅 𛰃𛱄𛰙‌𛰃𛱄𛰙 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱂‌𛰃𛱜͏͏͏ 𛱜‌𛱜 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰙𛱄𛰅𛰜𛰃 𛰙𛱁‌𛰜𛱁‌𛰣𛱇 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙. 𛱊𛱁‌𛰅𛱁 𛰅𛰆𛱂‌𛰃𛱜͏͏͏ 𛰅𛱁‌𛰚𛱁‌𛰙𛱄𛰅𛰜𛰃 𛰛𛱁𛰚𛰊 𛰂𛱆 𛰑𛱛𛰆 𛰂𛱛͏͏͏𛰜 𛱞𛰀𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰚𛱁‌𛰚𛱇𛰣. 𛰛𛱁𛰚𛰊 𛰙𛱁‌𛰙𛱛𛰅 𛰣𛱇𛰅‌𛰙𛱇𛰚 𛱆𛰅‌𛰃𛱁𛰜 𛰂𛱆 𛰑𛱛𛰆 𛱊𛱁‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰅𛱑𛰃 𛰜𛰃𛱄𛰚. 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛰀𛱁‌𛰆𛱁𛰅 𛱛‌𛰅𛱛𛰅 𛰀𛱚𛰜 𛱊𛱁‌𛰅𛱁 𛰆𛱂‌𛰂𛱄𛰋𛰃, 𛰅𛱄‌𛰂𛱆𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰚𛱁‌𛰚𛱇𛰣 𛱛‌𛰅𛱛𛰅: 𛰙𛱄𛰅𛰜𛰃 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰇𛱄𛰚 𛰙𛱆𛰃‌𛰆𛱂𛱆𛰃 𛰅𛱄‌𛰂𛱁 𛱇𛰆𛱇‌𛰀𛱇, 𛰂𛱆 𛰅𛱄‌𛰂𛱁 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇 𛰃𛱂‌𛰚𛱁𛰜 𛱁‌𛱑 𛰇𛱆‌𛰃𛱇𛰆 𛰅𛱛‌𛰆𛱇 𛰋𛱚𛰚. + +𛱊𛱁‌𛱜 𛰃𛱂‌𛱇𛱇 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛱄‌𛰂𛱁 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚 𛱁‌𛱑 𛱜‌𛱜 𛰅𛱁‌𛰚𛱁‌𛰙𛱄𛰅𛰜𛰃. 𛰜𛱁𛰑, 𛱛‌𛰅𛱛𛰅 𛰙𛱁𛰚 𛱊𛱁‌𛰅𛱁 𛰃𛰆𛱛𛰜 𛰚𛱁‌𛰚𛱇𛰣 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛰃𛱇‌𛰆𛱇‌𛰅𛱛𛰙, 𛱁‌𛱑 𛱜‌𛱜 𛰅𛱁‌𛰚𛱁‌𛰙𛱄𛰅𛰜𛰃 𛰚𛱇𛰑, 𛱛‌𛰅𛱛𛰅 𛰙𛱁𛰚 𛱊𛱁‌𛰅𛱁 𛰃𛰆𛱛𛰜 𛰚𛱁‌𛰚𛱇𛰣 𛰂𛱆‌𛰂𛱁; 𛰅𛱁‌𛰚𛱁‌𛱞 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱁‌𛱑 𛱁𛰜𛰅 𛱄𛰆‌𛰙𛱁𛰚 𛰅𛰋𛱁𛰚𛱄𛰚 𛰂𛱆 𛰛𛱁𛰚𛰊 𛰂𛱆 𛰑𛱛𛰆. 𛱞𛰀𛰃 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱁‌𛱑 𛱁𛰜𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛱁𛰃𛱁𛰆, 𛰇𛱁𛰋𛰅𛱆𛰂 𛱊𛱁‌𛰅𛱁 𛰃𛱂‌𛰚𛱁𛰜 𛰙𛱁𛰚, 𛰂𛱆 𛰂𛱁‌𛰃𛰆𛱁𛰣 𛰅𛱁𛰚‌𛰈𛱇 𛰅𛱄‌𛰂𛱁 𛱊𛱁‌𛰅𛱁. 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛱁‌𛱑 𛱜‌𛱜 𛰅𛱁‌𛰃𛱂 𛱛‌𛰅𛱛𛰅 𛰙𛱁‌𛰜𛱁‌𛰣𛱇 𛱄𛰆‌𛰙𛱁𛰚 𛰂𛱆 𛱊𛱁‌𛰅𛱁 𛰅𛰆𛱛𛰣‌𛰙𛱇𛰚, 𛰅𛱁‌𛰃𛱂 𛱛‌𛰅𛱛𛰅 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙, 𛰅𛱁‌𛰃𛱂 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛰙𛱇𛰚𛱇𛰜 𛰂𛱆 𛱊𛱁‌𛰅𛱁 𛰃𛰆𛱇𛰆 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜, 𛰅𛱁‌𛰃𛱂 𛰙𛱇𛰚𛱇𛰜 𛱊𛱁‌𛰅𛱁 𛰜𛰃𛱒‌𛱇𛰆, 𛰅𛱁‌𛰃𛱂 𛰜𛰅𛱂𛱆 𛰂𛱛͏͏͏𛰜 𛱊𛱁‌𛰅𛱁 𛰜𛰃𛱒‌𛱇𛰆, 𛱆𛰅‌𛰃𛱂 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜 𛰙𛱁‌𛰙𛱛𛰅 𛱛‌𛰅𛱛𛰅 𛰂𛱛‌𛰆𛱂‌𛰅𛰆𛱇 𛰅𛱁𛰀 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰙𛱁𛰛 𛱛𛰆𛰑𛱁𛰋 𛰃𛱚𛰚, 𛰂𛱆 𛱆𛰅‌𛰃𛱂 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰃𛰆𛱁𛰂 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰃𛱂‌𛰚𛱁𛰜 𛰀𛱚𛰜 𛰅𛱆‌𛰅𛱛‌𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛰜𛰃𛱇𛰅 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰅𛱁𛰆‌𛰃𛱁𛰛 𛱇𛰆𛱇‌𛰀𛱇. + +𛰅𛱄‌𛰂𛱆𛰃 𛱛‌𛰅𛱛𛰅, 𛰃𛱂‌𛱇𛱇 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰙𛱁‌𛰙𛱛𛰅 𛱁‌𛱊𛱁𛰜 𛰀𛰆𛱄𛱆‌𛰙𛱁 𛰆𛱄͏͏͏: 𛰅𛱁‌𛰚𛱁‌𛱞 𛰅𛱄‌𛰂𛱁 𛰀𛱁𛰑𛱇𛰊 𛰙𛱁‌𛰅𛱛𛰅 𛰀𛱚𛰜 𛰂𛱆 𛱛‌𛰅𛱛𛰅 𛰃𛱇‌𛰆𛱇‌𛰅𛱄𛰙 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰅𛱛‌𛰆𛱇 𛰅𛱄‌𛰂𛱁 𛰚𛱇𛰋 𛱇𛰆𛱇‌𛰀𛱇 𛰅𛱜‌𛰚𛱇‌𛰜𛱇𛰙 𛱁‌𛱑 𛱜‌𛱜 𛰅𛱄‌𛰂𛱁 𛱛‌𛰅𛱛𛰅 𛰆𛱄͏͏͏. 𛰅𛰆𛱁𛰜‌𛰅𛱁 𛰙𛱁‌𛰙𛱛𛰅 𛱛‌𛰅𛱛𛰅 𛰆𛱄͏͏͏: 𛱞𛰅 𛰃𛰆𛱛𛰜 𛰂𛱛͏͏͏𛰜 𛰅𛰆𛱁𛰅‌𛰜𛰃𛱂 𛰙𛱁‌𛰙𛱛𛰅 𛰙𛱇𛰙‌𛰆𛱛𛰜 𛰂𛱛͏͏͏𛰜‌𛰂𛱛͏͏͏𛰜. + +𛰅𛱄‌𛰂𛱆𛰃 𛰅𛱁‌𛰅𛱜 𛱛‌𛰅𛱛𛰅 𛰜𛱇𛱇‌𛰜𛱇𛰙 diff -Nru harfbuzz-8.0.1/src/Makefile.am harfbuzz-8.3.0/src/Makefile.am --- harfbuzz-8.0.1/src/Makefile.am 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/Makefile.am 2023-11-11 14:08:45.000000000 +0000 @@ -14,7 +14,7 @@ EXTRA_DIST += harfbuzz.cc harfbuzz-subset.cc EXTRA_DIST += meson.build -EXTRA_DIST += fix_get_types.py +EXTRA_DIST += fix_get_types.py relative_to.py # Convenience targets: lib: $(BUILT_SOURCES) libharfbuzz.la @@ -458,6 +458,7 @@ test-classdef-graph \ test-instancer-solver \ test-tuple-varstore \ + test-item-varstore \ $(NULL) COMPILED_TESTS_CPPFLAGS = $(HBCFLAGS) -DMAIN -UNDEBUG COMPILED_TESTS_LDADD = libharfbuzz.la $(HBLIBS) @@ -536,6 +537,10 @@ test_tuple_varstore_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_tuple_varstore_LDADD = $(COMPILED_TESTS_LDADD) +test_item_varstore_SOURCES = test-item-varstore.cc hb-subset-instancer-solver.cc hb-static.cc +test_item_varstore_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) +test_item_varstore_LDADD = $(COMPILED_TESTS_LDADD) + dist_check_SCRIPTS = \ check-c-linkage-decls.py \ check-externs.py \ diff -Nru harfbuzz-8.0.1/src/Makefile.in harfbuzz-8.3.0/src/Makefile.in --- harfbuzz-8.0.1/src/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/src/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -199,7 +199,7 @@ test-unicode-ranges$(EXEEXT) test-vector$(EXEEXT) \ test-repacker$(EXEEXT) test-classdef-graph$(EXEEXT) \ test-instancer-solver$(EXEEXT) test-tuple-varstore$(EXEEXT) \ - $(am__EXEEXT_1) + test-item-varstore$(EXEEXT) $(am__EXEEXT_1) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ @@ -569,6 +569,12 @@ test_instancer_solver-hb-static.$(OBJEXT) test_instancer_solver_OBJECTS = $(am_test_instancer_solver_OBJECTS) test_instancer_solver_DEPENDENCIES = $(am__DEPENDENCIES_13) +am_test_item_varstore_OBJECTS = \ + test_item_varstore-test-item-varstore.$(OBJEXT) \ + test_item_varstore-hb-subset-instancer-solver.$(OBJEXT) \ + test_item_varstore-hb-static.$(OBJEXT) +test_item_varstore_OBJECTS = $(am_test_item_varstore_OBJECTS) +test_item_varstore_DEPENDENCIES = $(am__DEPENDENCIES_13) am_test_iter_OBJECTS = test_iter-test-iter.$(OBJEXT) \ test_iter-hb-static.$(OBJEXT) test_iter_OBJECTS = $(am_test_iter_OBJECTS) @@ -756,6 +762,9 @@ ./$(DEPDIR)/test_instancer_solver-hb-static.Po \ ./$(DEPDIR)/test_instancer_solver-hb-subset-instancer-solver.Po \ ./$(DEPDIR)/test_instancer_solver-test-subset-instancer-solver.Po \ + ./$(DEPDIR)/test_item_varstore-hb-static.Po \ + ./$(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Po \ + ./$(DEPDIR)/test_item_varstore-test-item-varstore.Po \ ./$(DEPDIR)/test_iter-hb-static.Po \ ./$(DEPDIR)/test_iter-test-iter.Po \ ./$(DEPDIR)/test_machinery-hb-static.Po \ @@ -834,15 +843,16 @@ $(test_gpos_size_params_SOURCES) \ $(test_gsub_get_alternates_SOURCES) \ $(test_gsub_would_substitute_SOURCES) \ - $(test_instancer_solver_SOURCES) $(test_iter_SOURCES) \ - $(test_machinery_SOURCES) $(test_map_SOURCES) \ - $(test_multimap_SOURCES) $(test_number_SOURCES) \ - $(test_ot_glyphname_SOURCES) $(test_ot_meta_SOURCES) \ - $(test_ot_name_SOURCES) $(test_ot_tag_SOURCES) \ - $(test_priority_queue_SOURCES) $(test_repacker_SOURCES) \ - $(test_serialize_SOURCES) $(test_set_SOURCES) \ - $(test_tuple_varstore_SOURCES) $(test_unicode_ranges_SOURCES) \ - $(test_use_table_SOURCES) $(test_vector_SOURCES) + $(test_instancer_solver_SOURCES) $(test_item_varstore_SOURCES) \ + $(test_iter_SOURCES) $(test_machinery_SOURCES) \ + $(test_map_SOURCES) $(test_multimap_SOURCES) \ + $(test_number_SOURCES) $(test_ot_glyphname_SOURCES) \ + $(test_ot_meta_SOURCES) $(test_ot_name_SOURCES) \ + $(test_ot_tag_SOURCES) $(test_priority_queue_SOURCES) \ + $(test_repacker_SOURCES) $(test_serialize_SOURCES) \ + $(test_set_SOURCES) $(test_tuple_varstore_SOURCES) \ + $(test_unicode_ranges_SOURCES) $(test_use_table_SOURCES) \ + $(test_vector_SOURCES) DIST_SOURCES = $(libharfbuzz_cairo_la_SOURCES) \ $(am__libharfbuzz_gobject_la_SOURCES_DIST) \ $(am__libharfbuzz_icu_la_SOURCES_DIST) \ @@ -854,15 +864,16 @@ $(test_gpos_size_params_SOURCES) \ $(test_gsub_get_alternates_SOURCES) \ $(test_gsub_would_substitute_SOURCES) \ - $(test_instancer_solver_SOURCES) $(test_iter_SOURCES) \ - $(test_machinery_SOURCES) $(test_map_SOURCES) \ - $(test_multimap_SOURCES) $(test_number_SOURCES) \ - $(test_ot_glyphname_SOURCES) $(test_ot_meta_SOURCES) \ - $(test_ot_name_SOURCES) $(test_ot_tag_SOURCES) \ - $(test_priority_queue_SOURCES) $(test_repacker_SOURCES) \ - $(test_serialize_SOURCES) $(test_set_SOURCES) \ - $(test_tuple_varstore_SOURCES) $(test_unicode_ranges_SOURCES) \ - $(test_use_table_SOURCES) $(test_vector_SOURCES) + $(test_instancer_solver_SOURCES) $(test_item_varstore_SOURCES) \ + $(test_iter_SOURCES) $(test_machinery_SOURCES) \ + $(test_map_SOURCES) $(test_multimap_SOURCES) \ + $(test_number_SOURCES) $(test_ot_glyphname_SOURCES) \ + $(test_ot_meta_SOURCES) $(test_ot_name_SOURCES) \ + $(test_ot_tag_SOURCES) $(test_priority_queue_SOURCES) \ + $(test_repacker_SOURCES) $(test_serialize_SOURCES) \ + $(test_set_SOURCES) $(test_tuple_varstore_SOURCES) \ + $(test_unicode_ranges_SOURCES) $(test_use_table_SOURCES) \ + $(test_vector_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ @@ -914,8 +925,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no @@ -1071,6 +1080,7 @@ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) @WITH_LIBSTDCXX_FALSE@am__EXEEXT_3 = check-libstdc++.py \ @WITH_LIBSTDCXX_FALSE@ $(am__EXEEXT_1) @@ -1153,6 +1163,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -1167,6 +1179,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -1323,11 +1336,12 @@ BUILT_SOURCES = hb-version.h harfbuzz-subset.cc $(am__append_49) \ hb-features.h $(RAGEL_GENERATED) harfbuzz.cc EXTRA_DIST = harfbuzz.cc harfbuzz-subset.cc meson.build \ - fix_get_types.py hb-version.h.in hb-features.h.in \ - harfbuzz.pc.in harfbuzz-config.cmake.in harfbuzz-subset.pc.in \ - harfbuzz-cairo.pc.in harfbuzz-icu.pc.in harfbuzz-gobject.pc.in \ - hb-gobject-enums.cc.tmpl hb-gobject-enums.h.tmpl $(NULL) \ - $(GENERATORS) $(HB_BASE_RAGEL_sources) $(NULL) + fix_get_types.py relative_to.py hb-version.h.in \ + hb-features.h.in harfbuzz.pc.in harfbuzz-config.cmake.in \ + harfbuzz-subset.pc.in harfbuzz-cairo.pc.in harfbuzz-icu.pc.in \ + harfbuzz-gobject.pc.in hb-gobject-enums.cc.tmpl \ + hb-gobject-enums.h.tmpl $(NULL) $(GENERATORS) \ + $(HB_BASE_RAGEL_sources) $(NULL) CLEANFILES = $(pkgconfig_DATA) $(DEF_FILES) $(am__append_53) DISTCLEANFILES = $(am__append_50) hb-features.h MAINTAINERCLEANFILES = @@ -1907,6 +1921,7 @@ test-classdef-graph \ test-instancer-solver \ test-tuple-varstore \ + test-item-varstore \ $(NULL) COMPILED_TESTS_CPPFLAGS = $(HBCFLAGS) -DMAIN -UNDEBUG @@ -1965,6 +1980,9 @@ test_tuple_varstore_SOURCES = test-tuple-varstore.cc hb-subset-instancer-solver.cc hb-static.cc test_tuple_varstore_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_tuple_varstore_LDADD = $(COMPILED_TESTS_LDADD) +test_item_varstore_SOURCES = test-item-varstore.cc hb-subset-instancer-solver.cc hb-static.cc +test_item_varstore_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) +test_item_varstore_LDADD = $(COMPILED_TESTS_LDADD) dist_check_SCRIPTS = check-c-linkage-decls.py check-externs.py \ check-header-guards.py check-includes.py check-static-inits.py \ check-symbols.py $(NULL) $(am__append_52) @@ -2235,6 +2253,10 @@ @rm -f test-instancer-solver$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(test_instancer_solver_OBJECTS) $(test_instancer_solver_LDADD) $(LIBS) +test-item-varstore$(EXEEXT): $(test_item_varstore_OBJECTS) $(test_item_varstore_DEPENDENCIES) $(EXTRA_test_item_varstore_DEPENDENCIES) + @rm -f test-item-varstore$(EXEEXT) + $(AM_V_CXXLD)$(CXXLINK) $(test_item_varstore_OBJECTS) $(test_item_varstore_LDADD) $(LIBS) + test-iter$(EXEEXT): $(test_iter_OBJECTS) $(test_iter_DEPENDENCIES) $(EXTRA_test_iter_DEPENDENCIES) @rm -f test-iter$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(test_iter_OBJECTS) $(test_iter_LDADD) $(LIBS) @@ -2408,6 +2430,9 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_instancer_solver-hb-static.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_instancer_solver-hb-subset-instancer-solver.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_instancer_solver-test-subset-instancer-solver.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_item_varstore-hb-static.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_item_varstore-test-item-varstore.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_iter-hb-static.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_iter-test-iter.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_machinery-hb-static.Po@am__quote@ # am--include-marker @@ -3278,6 +3303,48 @@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_instancer_solver_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_instancer_solver-hb-static.obj `if test -f 'hb-static.cc'; then $(CYGPATH_W) 'hb-static.cc'; else $(CYGPATH_W) '$(srcdir)/hb-static.cc'; fi` +test_item_varstore-test-item-varstore.o: test-item-varstore.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_item_varstore-test-item-varstore.o -MD -MP -MF $(DEPDIR)/test_item_varstore-test-item-varstore.Tpo -c -o test_item_varstore-test-item-varstore.o `test -f 'test-item-varstore.cc' || echo '$(srcdir)/'`test-item-varstore.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_item_varstore-test-item-varstore.Tpo $(DEPDIR)/test_item_varstore-test-item-varstore.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test-item-varstore.cc' object='test_item_varstore-test-item-varstore.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_item_varstore-test-item-varstore.o `test -f 'test-item-varstore.cc' || echo '$(srcdir)/'`test-item-varstore.cc + +test_item_varstore-test-item-varstore.obj: test-item-varstore.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_item_varstore-test-item-varstore.obj -MD -MP -MF $(DEPDIR)/test_item_varstore-test-item-varstore.Tpo -c -o test_item_varstore-test-item-varstore.obj `if test -f 'test-item-varstore.cc'; then $(CYGPATH_W) 'test-item-varstore.cc'; else $(CYGPATH_W) '$(srcdir)/test-item-varstore.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_item_varstore-test-item-varstore.Tpo $(DEPDIR)/test_item_varstore-test-item-varstore.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='test-item-varstore.cc' object='test_item_varstore-test-item-varstore.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_item_varstore-test-item-varstore.obj `if test -f 'test-item-varstore.cc'; then $(CYGPATH_W) 'test-item-varstore.cc'; else $(CYGPATH_W) '$(srcdir)/test-item-varstore.cc'; fi` + +test_item_varstore-hb-subset-instancer-solver.o: hb-subset-instancer-solver.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_item_varstore-hb-subset-instancer-solver.o -MD -MP -MF $(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Tpo -c -o test_item_varstore-hb-subset-instancer-solver.o `test -f 'hb-subset-instancer-solver.cc' || echo '$(srcdir)/'`hb-subset-instancer-solver.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Tpo $(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hb-subset-instancer-solver.cc' object='test_item_varstore-hb-subset-instancer-solver.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_item_varstore-hb-subset-instancer-solver.o `test -f 'hb-subset-instancer-solver.cc' || echo '$(srcdir)/'`hb-subset-instancer-solver.cc + +test_item_varstore-hb-subset-instancer-solver.obj: hb-subset-instancer-solver.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_item_varstore-hb-subset-instancer-solver.obj -MD -MP -MF $(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Tpo -c -o test_item_varstore-hb-subset-instancer-solver.obj `if test -f 'hb-subset-instancer-solver.cc'; then $(CYGPATH_W) 'hb-subset-instancer-solver.cc'; else $(CYGPATH_W) '$(srcdir)/hb-subset-instancer-solver.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Tpo $(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hb-subset-instancer-solver.cc' object='test_item_varstore-hb-subset-instancer-solver.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_item_varstore-hb-subset-instancer-solver.obj `if test -f 'hb-subset-instancer-solver.cc'; then $(CYGPATH_W) 'hb-subset-instancer-solver.cc'; else $(CYGPATH_W) '$(srcdir)/hb-subset-instancer-solver.cc'; fi` + +test_item_varstore-hb-static.o: hb-static.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_item_varstore-hb-static.o -MD -MP -MF $(DEPDIR)/test_item_varstore-hb-static.Tpo -c -o test_item_varstore-hb-static.o `test -f 'hb-static.cc' || echo '$(srcdir)/'`hb-static.cc +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_item_varstore-hb-static.Tpo $(DEPDIR)/test_item_varstore-hb-static.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hb-static.cc' object='test_item_varstore-hb-static.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_item_varstore-hb-static.o `test -f 'hb-static.cc' || echo '$(srcdir)/'`hb-static.cc + +test_item_varstore-hb-static.obj: hb-static.cc +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_item_varstore-hb-static.obj -MD -MP -MF $(DEPDIR)/test_item_varstore-hb-static.Tpo -c -o test_item_varstore-hb-static.obj `if test -f 'hb-static.cc'; then $(CYGPATH_W) 'hb-static.cc'; else $(CYGPATH_W) '$(srcdir)/hb-static.cc'; fi` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_item_varstore-hb-static.Tpo $(DEPDIR)/test_item_varstore-hb-static.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hb-static.cc' object='test_item_varstore-hb-static.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_item_varstore_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o test_item_varstore-hb-static.obj `if test -f 'hb-static.cc'; then $(CYGPATH_W) 'hb-static.cc'; else $(CYGPATH_W) '$(srcdir)/hb-static.cc'; fi` + test_iter-test-iter.o: test-iter.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_iter_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT test_iter-test-iter.o -MD -MP -MF $(DEPDIR)/test_iter-test-iter.Tpo -c -o test_iter-test-iter.o `test -f 'test-iter.cc' || echo '$(srcdir)/'`test-iter.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_iter-test-iter.Tpo $(DEPDIR)/test_iter-test-iter.Po @@ -4036,7 +4103,7 @@ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ @@ -4196,6 +4263,13 @@ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) +test-item-varstore.log: test-item-varstore$(EXEEXT) + @p='test-item-varstore$(EXEEXT)'; \ + b='test-item-varstore'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) check-c-linkage-decls.py.log: check-c-linkage-decls.py @p='check-c-linkage-decls.py'; \ b='check-c-linkage-decls.py'; \ @@ -4259,7 +4333,6 @@ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am @@ -4327,6 +4400,8 @@ all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(DATA) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES +install-checkPROGRAMS: install-libLTLIBRARIES + installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(cmakedir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ @@ -4334,7 +4409,8 @@ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive -install-exec: install-exec-recursive +install-exec: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive @@ -4476,6 +4552,9 @@ -rm -f ./$(DEPDIR)/test_instancer_solver-hb-static.Po -rm -f ./$(DEPDIR)/test_instancer_solver-hb-subset-instancer-solver.Po -rm -f ./$(DEPDIR)/test_instancer_solver-test-subset-instancer-solver.Po + -rm -f ./$(DEPDIR)/test_item_varstore-hb-static.Po + -rm -f ./$(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Po + -rm -f ./$(DEPDIR)/test_item_varstore-test-item-varstore.Po -rm -f ./$(DEPDIR)/test_iter-hb-static.Po -rm -f ./$(DEPDIR)/test_iter-test-iter.Po -rm -f ./$(DEPDIR)/test_machinery-hb-static.Po @@ -4652,6 +4731,9 @@ -rm -f ./$(DEPDIR)/test_instancer_solver-hb-static.Po -rm -f ./$(DEPDIR)/test_instancer_solver-hb-subset-instancer-solver.Po -rm -f ./$(DEPDIR)/test_instancer_solver-test-subset-instancer-solver.Po + -rm -f ./$(DEPDIR)/test_item_varstore-hb-static.Po + -rm -f ./$(DEPDIR)/test_item_varstore-hb-subset-instancer-solver.Po + -rm -f ./$(DEPDIR)/test_item_varstore-test-item-varstore.Po -rm -f ./$(DEPDIR)/test_iter-hb-static.Po -rm -f ./$(DEPDIR)/test_iter-test-iter.Po -rm -f ./$(DEPDIR)/test_machinery-hb-static.Po @@ -4704,7 +4786,7 @@ uninstall-pkgincludeHEADERS uninstall-typelibDATA .MAKE: $(am__recursive_targets) all check check-am install install-am \ - install-strip + install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-TESTS check-am clean \ diff -Nru harfbuzz-8.0.1/src/OT/Color/CBDT/CBDT.hh harfbuzz-8.3.0/src/OT/Color/CBDT/CBDT.hh --- harfbuzz-8.0.1/src/OT/Color/CBDT/CBDT.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Color/CBDT/CBDT.hh 2023-11-11 14:08:45.000000000 +0000 @@ -204,6 +204,7 @@ { TRACE_SANITIZE (this); if (!u.header.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.header.indexFormat) { case 1: return_trace (u.format1.sanitize (c, glyph_count)); @@ -378,6 +379,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && firstGlyphIndex <= lastGlyphIndex && offsetToSubtable.sanitize (c, base, lastGlyphIndex - firstGlyphIndex + 1)); } @@ -635,6 +637,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && indexSubtableArrayOffset.sanitize (c, base, numberOfIndexSubtables) && horizontal.sanitize (c) && vertical.sanitize (c)); @@ -738,7 +741,9 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && likely (version.major == 2 || version.major == 3) && + hb_barrier () && sizeTables.sanitize (c, this)); } @@ -975,6 +980,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && likely (version.major == 2 || version.major == 3)); } diff -Nru harfbuzz-8.0.1/src/OT/Color/COLR/COLR.hh harfbuzz-8.3.0/src/OT/Color/COLR/COLR.hh --- harfbuzz-8.0.1/src/OT/Color/COLR/COLR.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Color/COLR/COLR.hh 2023-11-11 14:08:45.000000000 +0000 @@ -53,6 +53,7 @@ struct hb_paint_context_t : hb_dispatch_context_t { + const char *get_name () { return "PAINT"; } template return_t dispatch (const T &obj) { obj.paint_glyph (this); return hb_empty_t (); } static return_t default_return_value () { return hb_empty_t (); } @@ -68,6 +69,8 @@ unsigned int palette_index; hb_color_t foreground; VarStoreInstancer &instancer; + hb_map_t current_glyphs; + hb_map_t current_layers; int depth_left = HB_MAX_NESTING_LEVEL; int edge_count = HB_COLRV1_MAX_EDGE_COUNT; @@ -261,6 +264,7 @@ void paint_glyph (hb_paint_context_t *c) const { + TRACE_PAINT (this); value.paint_glyph (c, varIdxBase); } @@ -281,7 +285,7 @@ public: VarIdx varIdxBase; public: - DEFINE_SIZE_STATIC (4 + T::static_size); + DEFINE_SIZE_MIN (VarIdx::static_size + T::min_size); }; template @@ -315,6 +319,7 @@ void paint_glyph (hb_paint_context_t *c) const { + TRACE_PAINT (this); value.paint_glyph (c, varIdxBase); } @@ -332,7 +337,7 @@ T value; public: - DEFINE_SIZE_STATIC (T::static_size); + DEFINE_SIZE_MIN (T::min_size); }; // Color structures @@ -558,6 +563,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); c->funcs->push_transform (c->data, xx.to_float (c->instancer (varIdxBase, 0)), yx.to_float (c->instancer (varIdxBase, 1)), @@ -639,6 +645,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); hb_bool_t is_foreground; hb_color_t color; @@ -693,6 +700,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); hb_color_line_t cl = { (void *) &(this+colorLine), (this+colorLine).static_get_color_stops, c, @@ -759,6 +767,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); hb_color_line_t cl = { (void *) &(this+colorLine), (this+colorLine).static_get_color_stops, c, @@ -823,6 +832,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); hb_color_line_t cl = { (void *) &(this+colorLine), (this+colorLine).static_get_color_stops, c, @@ -874,6 +884,7 @@ void paint_glyph (hb_paint_context_t *c) const { + TRACE_PAINT (this); c->funcs->push_inverse_root_transform (c->data, c->font); c->funcs->push_clip_glyph (c->data, gid, c->font); c->funcs->push_root_transform (c->data, c->font); @@ -946,6 +957,7 @@ void paint_glyph (hb_paint_context_t *c) const { + TRACE_PAINT (this); (this+transform).paint_glyph (c); c->recurse (this+src); c->funcs->pop_transform (c->data); @@ -990,6 +1002,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float ddx = dx + c->instancer (varIdxBase, 0); float ddy = dy + c->instancer (varIdxBase, 1); @@ -1038,6 +1051,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float sx = scaleX.to_float (c->instancer (varIdxBase, 0)); float sy = scaleY.to_float (c->instancer (varIdxBase, 1)); @@ -1088,6 +1102,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float sx = scaleX.to_float (c->instancer (varIdxBase, 0)); float sy = scaleY.to_float (c->instancer (varIdxBase, 1)); float tCenterX = centerX + c->instancer (varIdxBase, 2); @@ -1141,6 +1156,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float s = scale.to_float (c->instancer (varIdxBase, 0)); bool p1 = c->funcs->push_scale (c->data, s, s); @@ -1188,6 +1204,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float s = scale.to_float (c->instancer (varIdxBase, 0)); float tCenterX = centerX + c->instancer (varIdxBase, 1); float tCenterY = centerY + c->instancer (varIdxBase, 2); @@ -1239,6 +1256,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float a = angle.to_float (c->instancer (varIdxBase, 0)); bool p1 = c->funcs->push_rotate (c->data, a); @@ -1286,6 +1304,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float a = angle.to_float (c->instancer (varIdxBase, 0)); float tCenterX = centerX + c->instancer (varIdxBase, 1); float tCenterY = centerY + c->instancer (varIdxBase, 2); @@ -1340,6 +1359,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float sx = xSkewAngle.to_float(c->instancer (varIdxBase, 0)); float sy = ySkewAngle.to_float(c->instancer (varIdxBase, 1)); @@ -1390,6 +1410,7 @@ void paint_glyph (hb_paint_context_t *c, uint32_t varIdxBase) const { + TRACE_PAINT (this); float sx = xSkewAngle.to_float(c->instancer (varIdxBase, 0)); float sy = ySkewAngle.to_float(c->instancer (varIdxBase, 1)); float tCenterX = centerX + c->instancer (varIdxBase, 2); @@ -1425,8 +1446,10 @@ auto *out = c->serializer->embed (this); if (unlikely (!out)) return_trace (false); - if (!out->src.serialize_subset (c, src, this, instancer)) return_trace (false); - return_trace (out->backdrop.serialize_subset (c, backdrop, this, instancer)); + bool ret = false; + ret |= out->src.serialize_subset (c, src, this, instancer); + ret |= out->backdrop.serialize_subset (c, backdrop, this, instancer); + return_trace (ret); } bool sanitize (hb_sanitize_context_t *c) const @@ -1440,6 +1463,7 @@ void paint_glyph (hb_paint_context_t *c) const { + TRACE_PAINT (this); c->recurse (this+backdrop); c->funcs->push_group (c->data); c->recurse (this+src); @@ -1898,15 +1922,16 @@ auto *out = c->serializer->start_embed (this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + bool ret = false; for (const auto& _ : + hb_enumerate (*this) | hb_filter (c->plan->colrv1_layers, hb_first)) { auto *o = out->serialize_append (c->serializer); - if (unlikely (!o) || !o->serialize_subset (c, _.second, this, instancer)) - return_trace (false); + if (unlikely (!o)) return_trace (false); + ret |= o->serialize_subset (c, _.second, this, instancer); } - return_trace (true); + return_trace (ret); } bool sanitize (hb_sanitize_context_t *c) const @@ -1923,10 +1948,11 @@ bool has_v0_data () const { return numBaseGlyphs; } bool has_v1_data () const { - if (version == 1) - return (this+baseGlyphList).len > 0; + if (version != 1) + return false; + hb_barrier (); - return false; + return (this+baseGlyphList).len > 0; } unsigned int get_glyph_layers (hb_codepoint_t glyph, @@ -2007,6 +2033,8 @@ hb_set_t *palette_indices) const { if (version != 1) return; + hb_barrier (); + hb_set_t visited_glyphs; hb_colrv1_closure_context_t c (this, &visited_glyphs, layer_indices, palette_indices); @@ -2033,10 +2061,12 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && (this+baseGlyphsZ).sanitize (c, numBaseGlyphs) && (this+layersZ).sanitize (c, numLayers) && (version == 0 || - (version == 1 && + (hb_barrier () && + version == 1 && baseGlyphList.sanitize (c, this) && layerList.sanitize (c, this) && clipList.sanitize (c, this) && @@ -2259,6 +2289,8 @@ { if (version == 1) { + hb_barrier (); + const Paint *paint = get_base_glyph_paint (glyph); return paint != nullptr; @@ -2284,9 +2316,12 @@ &(this+varIdxMap), hb_array (font->coords, font->num_coords)); hb_paint_context_t c (this, funcs, data, font, palette_index, foreground, instancer); + c.current_glyphs.add (glyph); if (version == 1) { + hb_barrier (); + const Paint *paint = get_base_glyph_paint (glyph); if (paint) { @@ -2399,18 +2434,42 @@ void PaintColrLayers::paint_glyph (hb_paint_context_t *c) const { + TRACE_PAINT (this); const LayerList &paint_offset_lists = c->get_colr_table ()->get_layerList (); for (unsigned i = firstLayerIndex; i < firstLayerIndex + numLayers; i++) { + if (unlikely (c->current_layers.has (i))) + continue; + + c->current_layers.add (i); + const Paint &paint = paint_offset_lists.get_paint (i); c->funcs->push_group (c->data); c->recurse (paint); c->funcs->pop_group (c->data, HB_PAINT_COMPOSITE_MODE_SRC_OVER); + + c->current_layers.del (i); } } void PaintColrGlyph::paint_glyph (hb_paint_context_t *c) const { + TRACE_PAINT (this); + + if (unlikely (c->current_glyphs.has (gid))) + return; + + c->current_glyphs.add (gid); + + c->funcs->push_inverse_root_transform (c->data, c->font); + if (c->funcs->color_glyph (c->data, gid, c->font)) + { + c->funcs->pop_transform (c->data); + c->current_glyphs.del (gid); + return; + } + c->funcs->pop_transform (c->data); + const COLR *colr_table = c->get_colr_table (); const Paint *paint = colr_table->get_base_glyph_paint (gid); @@ -2429,6 +2488,8 @@ if (has_clip_box) c->funcs->pop_clip (c->data); + + c->current_glyphs.del (gid); } } /* namespace OT */ diff -Nru harfbuzz-8.0.1/src/OT/Color/CPAL/CPAL.hh harfbuzz-8.3.0/src/OT/Color/CPAL/CPAL.hh --- harfbuzz-8.0.1/src/OT/Color/CPAL/CPAL.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Color/CPAL/CPAL.hh 2023-11-11 14:08:45.000000000 +0000 @@ -214,13 +214,17 @@ hb_set_t *nameids_to_retain /* OUT */) const { if (version == 1) + { + hb_barrier (); v1 ().collect_name_ids (this, numPalettes, numColors, color_index_map, nameids_to_retain); + } } private: const CPALV1Tail& v1 () const { if (version == 0) return Null (CPALV1Tail); + hb_barrier (); return StructAfter (*this); } @@ -312,7 +316,10 @@ return_trace (false); if (version == 1) + { + hb_barrier (); return_trace (v1 ().serialize (c->serializer, numPalettes, numColors, this, color_index_map)); + } return_trace (true); } @@ -321,6 +328,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && (this+colorRecordsZ).sanitize (c, numColorRecords) && colorRecordIndicesZ.sanitize (c, numPalettes) && (version == 0 || v1 ().sanitize (c, this, numPalettes, numColors))); diff -Nru harfbuzz-8.0.1/src/OT/Color/sbix/sbix.hh harfbuzz-8.3.0/src/OT/Color/sbix/sbix.hh --- harfbuzz-8.0.1/src/OT/Color/sbix/sbix.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Color/sbix/sbix.hh 2023-11-11 14:08:45.000000000 +0000 @@ -368,6 +368,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version >= 1 && strikes.sanitize (c, this))); } diff -Nru harfbuzz-8.0.1/src/OT/Color/svg/svg.hh harfbuzz-8.3.0/src/OT/Color/svg/svg.hh --- harfbuzz-8.0.1/src/OT/Color/svg/svg.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Color/svg/svg.hh 2023-11-11 14:08:45.000000000 +0000 @@ -56,6 +56,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && svgDoc.sanitize (c, base, svgDocLength)); } diff -Nru harfbuzz-8.0.1/src/OT/Layout/Common/Coverage.hh harfbuzz-8.3.0/src/OT/Layout/Common/Coverage.hh --- harfbuzz-8.0.1/src/OT/Layout/Common/Coverage.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/Common/Coverage.hh 2023-11-11 14:08:45.000000000 +0000 @@ -64,6 +64,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 1: return_trace (u.format1.sanitize (c)); diff -Nru harfbuzz-8.0.1/src/OT/Layout/GDEF/GDEF.hh harfbuzz-8.3.0/src/OT/Layout/GDEF/GDEF.hh --- harfbuzz-8.0.1/src/OT/Layout/GDEF/GDEF.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GDEF/GDEF.hh 2023-11-11 14:08:45.000000000 +0000 @@ -29,7 +29,7 @@ #ifndef OT_LAYOUT_GDEF_GDEF_HH #define OT_LAYOUT_GDEF_GDEF_HH -#include "../../../hb-ot-layout-common.hh" +#include "../../../hb-ot-var-common.hh" #include "../../../hb-font.hh" #include "../../../hb-cache.hh" @@ -204,17 +204,19 @@ if (!c->serializer->embed (coordinate)) return_trace (false); unsigned varidx = (this+deviceTable).get_variation_index (); - if (c->plan->layout_variation_idx_delta_map.has (varidx)) + hb_pair_t *new_varidx_delta; + if (!c->plan->layout_variation_idx_delta_map.has (varidx, &new_varidx_delta)) + return_trace (false); + + uint32_t new_varidx = hb_first (*new_varidx_delta); + int delta = hb_second (*new_varidx_delta); + if (delta != 0) { - int delta = hb_second (c->plan->layout_variation_idx_delta_map.get (varidx)); - if (delta != 0) - { - if (!c->serializer->check_assign (out->coordinate, coordinate + delta, HB_SERIALIZE_ERROR_INT_OVERFLOW)) - return_trace (false); - } + if (!c->serializer->check_assign (out->coordinate, coordinate + delta, HB_SERIALIZE_ERROR_INT_OVERFLOW)) + return_trace (false); } - if (c->plan->all_axes_pinned) + if (new_varidx == HB_OT_LAYOUT_NO_VARIATIONS_INDEX) return_trace (c->serializer->check_assign (out->caretValueFormat, 1, HB_SERIALIZE_ERROR_INT_OVERFLOW)); if (!c->serializer->embed (deviceTable)) @@ -289,6 +291,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 1: return_trace (u.format1.sanitize (c)); case 2: return_trace (u.format2.sanitize (c)); @@ -439,6 +442,30 @@ bool covers (unsigned int set_index, hb_codepoint_t glyph_id) const { return (this+coverage[set_index]).get_coverage (glyph_id) != NOT_COVERED; } + void collect_used_mark_sets (const hb_set_t& glyph_set, + hb_set_t& used_mark_sets /* OUT */) const + { + unsigned i = 0; + for (const auto &offset : coverage) + { + const auto &cov = this+offset; + if (cov.intersects (&glyph_set)) + used_mark_sets.add (i); + + i++; + } + } + + template + void collect_coverage (hb_vector_t &sets) const + { + for (const auto &offset : coverage) + { + const auto &cov = this+offset; + cov.collect_coverage (sets.push ()); + } + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); @@ -449,6 +476,7 @@ bool ret = true; for (const Offset32To& offset : coverage.iter ()) { + auto snap = c->serializer->snapshot (); auto *o = out->coverage.serialize_append (c->serializer); if (unlikely (!o)) { @@ -456,11 +484,17 @@ break; } - //not using o->serialize_subset (c, offset, this, out) here because - //OTS doesn't allow null offset. - //See issue: https://github.com/khaledhosny/ots/issues/172 + //skip empty coverage c->serializer->push (); - c->dispatch (this+offset); + bool res = false; + if (offset) res = c->dispatch (this+offset); + if (!res) + { + c->serializer->pop_discard (); + c->serializer->revert (snap); + (out->coverage.len)--; + continue; + } c->serializer->add_link (*o, c->serializer->pop_pack ()); } @@ -492,6 +526,24 @@ } } + template + void collect_coverage (hb_vector_t &sets) const + { + switch (u.format) { + case 1: u.format1.collect_coverage (sets); return; + default:return; + } + } + + void collect_used_mark_sets (const hb_set_t& glyph_set, + hb_set_t& used_mark_sets /* OUT */) const + { + switch (u.format) { + case 1: u.format1.collect_used_mark_sets (glyph_set, used_mark_sets); return; + default:return; + } + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); @@ -505,6 +557,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 1: return_trace (u.format1.sanitize (c)); default:return_trace (true); @@ -579,45 +632,93 @@ attachList.sanitize (c, this) && ligCaretList.sanitize (c, this) && markAttachClassDef.sanitize (c, this) && + hb_barrier () && (version.to_int () < 0x00010002u || markGlyphSetsDef.sanitize (c, this)) && (version.to_int () < 0x00010003u || varStore.sanitize (c, this))); } + static void remap_varidx_after_instantiation (const hb_map_t& varidx_map, + hb_hashmap_t>& layout_variation_idx_delta_map /* IN/OUT */) + { + /* varidx_map is empty which means varstore is empty after instantiation, + * no variations, map all varidx to HB_OT_LAYOUT_NO_VARIATIONS_INDEX. + * varidx_map doesn't have original varidx, indicating delta row is all + * zeros, map varidx to HB_OT_LAYOUT_NO_VARIATIONS_INDEX */ + for (auto _ : layout_variation_idx_delta_map.iter_ref ()) + { + /* old_varidx->(varidx, delta) mapping generated for subsetting, then this + * varidx is used as key of varidx_map during instantiation */ + uint32_t varidx = _.second.first; + uint32_t *new_varidx; + if (varidx_map.has (varidx, &new_varidx)) + _.second.first = *new_varidx; + else + _.second.first = HB_OT_LAYOUT_NO_VARIATIONS_INDEX; + } + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); - auto *out = c->serializer->embed (*this); - if (unlikely (!out)) return_trace (false); + auto *out = c->serializer->start_embed (*this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + out->version.major = version.major; + out->version.minor = version.minor; bool subset_glyphclassdef = out->glyphClassDef.serialize_subset (c, glyphClassDef, this, nullptr, false, true); bool subset_attachlist = out->attachList.serialize_subset (c, attachList, this); - bool subset_ligcaretlist = out->ligCaretList.serialize_subset (c, ligCaretList, this); bool subset_markattachclassdef = out->markAttachClassDef.serialize_subset (c, markAttachClassDef, this, nullptr, false, true); bool subset_markglyphsetsdef = false; + auto snapshot_version0 = c->serializer->snapshot (); if (version.to_int () >= 0x00010002u) { + if (unlikely (!c->serializer->embed (markGlyphSetsDef))) return_trace (false); subset_markglyphsetsdef = out->markGlyphSetsDef.serialize_subset (c, markGlyphSetsDef, this); } bool subset_varstore = false; + auto snapshot_version2 = c->serializer->snapshot (); if (version.to_int () >= 0x00010003u) { + if (unlikely (!c->serializer->embed (varStore))) return_trace (false); if (c->plan->all_axes_pinned) out->varStore = 0; + else if (c->plan->normalized_coords) + { + if (varStore) + { + item_variations_t item_vars; + if (item_vars.instantiate (this+varStore, c->plan, true, true, + c->plan->gdef_varstore_inner_maps.as_array ())) + subset_varstore = out->varStore.serialize_serialize (c->serializer, + item_vars.has_long_word (), + c->plan->axis_tags, + item_vars.get_region_list (), + item_vars.get_vardata_encodings ()); + remap_varidx_after_instantiation (item_vars.get_varidx_map (), + c->plan->layout_variation_idx_delta_map); + } + } else subset_varstore = out->varStore.serialize_subset (c, varStore, this, c->plan->gdef_varstore_inner_maps.as_array ()); } + if (subset_varstore) { out->version.minor = 3; + c->plan->has_gdef_varstore = true; } else if (subset_markglyphsetsdef) { out->version.minor = 2; + c->serializer->revert (snapshot_version2); } else { out->version.minor = 0; + c->serializer->revert (snapshot_version0); } + bool subset_ligcaretlist = out->ligCaretList.serialize_subset (c, ligCaretList, this); + return_trace (subset_glyphclassdef || subset_attachlist || subset_ligcaretlist || subset_markattachclassdef || (out->version.to_int () >= 0x00010002u && subset_markglyphsetsdef) || @@ -652,6 +753,7 @@ { TRACE_SANITIZE (this); if (unlikely (!u.version.sanitize (c))) return_trace (false); + hb_barrier (); switch (u.version.major) { case 1: return_trace (u.version1.sanitize (c)); #ifndef HB_NO_BEYOND_64K @@ -856,6 +958,10 @@ hb_blob_destroy (table.get_blob ()); table = hb_blob_get_empty (); } + +#ifndef HB_NO_GDEF_CACHE + table->get_mark_glyph_sets ().collect_coverage (mark_glyph_set_digests); +#endif } ~accelerator_t () { table.destroy (); } @@ -879,8 +985,18 @@ } + bool mark_set_covers (unsigned int set_index, hb_codepoint_t glyph_id) const + { + return +#ifndef HB_NO_GDEF_CACHE + mark_glyph_set_digests[set_index].may_have (glyph_id) && +#endif + table->mark_set_covers (set_index, glyph_id); + } + hb_blob_ptr_t table; #ifndef HB_NO_GDEF_CACHE + hb_vector_t mark_glyph_set_digests; mutable hb_cache_t<21, 3, 8> glyph_props_cache; #endif }; @@ -889,17 +1005,32 @@ { get_lig_caret_list ().collect_variation_indices (c); } void remap_layout_variation_indices (const hb_set_t *layout_variation_indices, + const hb_vector_t& normalized_coords, + bool calculate_delta, /* not pinned at default */ + bool no_variations, /* all axes pinned */ hb_hashmap_t> *layout_variation_idx_delta_map /* OUT */) const { if (!has_var_store ()) return; - if (layout_variation_indices->is_empty ()) return; - + const VariationStore &var_store = get_var_store (); + float *store_cache = var_store.create_cache (); + unsigned new_major = 0, new_minor = 0; unsigned last_major = (layout_variation_indices->get_min ()) >> 16; for (unsigned idx : layout_variation_indices->iter ()) { + int delta = 0; + if (calculate_delta) + delta = roundf (var_store.get_delta (idx, normalized_coords.arrayZ, + normalized_coords.length, store_cache)); + + if (no_variations) + { + layout_variation_idx_delta_map->set (idx, hb_pair_t (HB_OT_LAYOUT_NO_VARIATIONS_INDEX, delta)); + continue; + } + uint16_t major = idx >> 16; - if (major >= get_var_store ().get_sub_table_count ()) break; + if (major >= var_store.get_sub_table_count ()) break; if (major != last_major) { new_minor = 0; @@ -907,14 +1038,11 @@ } unsigned new_idx = (new_major << 16) + new_minor; - if (!layout_variation_idx_delta_map->has (idx)) - continue; - int delta = hb_second (layout_variation_idx_delta_map->get (idx)); - layout_variation_idx_delta_map->set (idx, hb_pair_t (new_idx, delta)); ++new_minor; last_major = major; } + var_store.destroy_cache (store_cache); } protected: diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/Anchor.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/Anchor.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/Anchor.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/Anchor.hh 2023-11-11 14:08:45.000000000 +0000 @@ -25,6 +25,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 1: return_trace (u.format1.sanitize (c)); case 2: return_trace (u.format2.sanitize (c)); diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/AnchorFormat3.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/AnchorFormat3.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/AnchorFormat3.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/AnchorFormat3.hh 2023-11-11 14:08:45.000000000 +0000 @@ -38,9 +38,15 @@ *y = font->em_fscale_y (yCoordinate); if ((font->x_ppem || font->num_coords) && xDeviceTable.sanitize (&c->sanitizer, this)) + { + hb_barrier (); *x += (this+xDeviceTable).get_x_delta (font, c->var_store, c->var_store_cache); + } if ((font->y_ppem || font->num_coords) && yDeviceTable.sanitize (&c->sanitizer, this)) + { + hb_barrier (); *y += (this+yDeviceTable).get_y_delta (font, c->var_store, c->var_store_cache); + } } bool subset (hb_subset_context_t *c) const @@ -52,9 +58,14 @@ if (unlikely (!c->serializer->embed (yCoordinate))) return_trace (false); unsigned x_varidx = xDeviceTable ? (this+xDeviceTable).get_variation_index () : HB_OT_LAYOUT_NO_VARIATIONS_INDEX; - if (c->plan->layout_variation_idx_delta_map.has (x_varidx)) + if (x_varidx != HB_OT_LAYOUT_NO_VARIATIONS_INDEX) { - int delta = hb_second (c->plan->layout_variation_idx_delta_map.get (x_varidx)); + hb_pair_t *new_varidx_delta; + if (!c->plan->layout_variation_idx_delta_map.has (x_varidx, &new_varidx_delta)) + return_trace (false); + + x_varidx = hb_first (*new_varidx_delta); + int delta = hb_second (*new_varidx_delta); if (delta != 0) { if (!c->serializer->check_assign (out->xCoordinate, xCoordinate + delta, @@ -64,9 +75,14 @@ } unsigned y_varidx = yDeviceTable ? (this+yDeviceTable).get_variation_index () : HB_OT_LAYOUT_NO_VARIATIONS_INDEX; - if (c->plan->layout_variation_idx_delta_map.has (y_varidx)) + if (y_varidx != HB_OT_LAYOUT_NO_VARIATIONS_INDEX) { - int delta = hb_second (c->plan->layout_variation_idx_delta_map.get (y_varidx)); + hb_pair_t *new_varidx_delta; + if (!c->plan->layout_variation_idx_delta_map.has (y_varidx, &new_varidx_delta)) + return_trace (false); + + y_varidx = hb_first (*new_varidx_delta); + int delta = hb_second (*new_varidx_delta); if (delta != 0) { if (!c->serializer->check_assign (out->yCoordinate, yCoordinate + delta, @@ -75,7 +91,10 @@ } } - if (c->plan->all_axes_pinned) + /* in case that all axes are pinned or no variations after instantiation, + * both var_idxes will be mapped to HB_OT_LAYOUT_NO_VARIATIONS_INDEX */ + if (x_varidx == HB_OT_LAYOUT_NO_VARIATIONS_INDEX && + y_varidx == HB_OT_LAYOUT_NO_VARIATIONS_INDEX) return_trace (c->serializer->check_assign (out->format, 1, HB_SERIALIZE_ERROR_INT_OVERFLOW)); if (!c->serializer->embed (xDeviceTable)) return_trace (false); diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/AnchorMatrix.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/AnchorMatrix.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/AnchorMatrix.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/AnchorMatrix.hh 2023-11-11 14:08:45.000000000 +0000 @@ -8,7 +8,7 @@ struct AnchorMatrix { HBUINT16 rows; /* Number of rows */ - UnsizedArrayOf> + UnsizedArrayOf> matrixZ; /* Matrix of offsets to Anchor tables-- * from beginning of AnchorMatrix table */ public: @@ -18,6 +18,7 @@ { TRACE_SANITIZE (this); if (!c->check_struct (this)) return_trace (false); + hb_barrier (); if (unlikely (hb_unsigned_mul_overflows (rows, cols))) return_trace (false); unsigned int count = rows * cols; if (!c->check_array (matrixZ.arrayZ, count)) return_trace (false); @@ -25,6 +26,7 @@ if (c->lazy_some_gpos) return_trace (true); + hb_barrier (); for (unsigned int i = 0; i < count; i++) if (!matrixZ[i].sanitize (c, this)) return_trace (false); return_trace (true); @@ -38,6 +40,7 @@ if (unlikely (row >= rows || col >= cols)) return Null (Anchor); auto &offset = matrixZ[row * cols + col]; if (unlikely (!offset.sanitize (&c->sanitizer, this))) return Null (Anchor); + hb_barrier (); *found = !offset.is_null (); return this+offset; } diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/Common.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/Common.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/Common.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/Common.hh 2023-11-11 14:08:45.000000000 +0000 @@ -23,7 +23,7 @@ const SrcLookup *src, Iterator it, const hb_hashmap_t> *layout_variation_idx_delta_map, - bool all_axes_pinned); + unsigned new_format); } diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/CursivePosFormat1.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/CursivePosFormat1.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/CursivePosFormat1.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/CursivePosFormat1.hh 2023-11-11 14:08:45.000000000 +0000 @@ -11,37 +11,38 @@ { friend struct CursivePosFormat1; - bool sanitize (hb_sanitize_context_t *c, const void *base) const + bool sanitize (hb_sanitize_context_t *c, const struct CursivePosFormat1 *base) const { TRACE_SANITIZE (this); return_trace (entryAnchor.sanitize (c, base) && exitAnchor.sanitize (c, base)); } void collect_variation_indices (hb_collect_variation_indices_context_t *c, - const void *src_base) const + const struct CursivePosFormat1 *src_base) const { (src_base+entryAnchor).collect_variation_indices (c); (src_base+exitAnchor).collect_variation_indices (c); } - EntryExitRecord* subset (hb_subset_context_t *c, - const void *src_base) const + bool subset (hb_subset_context_t *c, + const struct CursivePosFormat1 *src_base) const { TRACE_SERIALIZE (this); auto *out = c->serializer->embed (this); - if (unlikely (!out)) return_trace (nullptr); + if (unlikely (!out)) return_trace (false); - out->entryAnchor.serialize_subset (c, entryAnchor, src_base); - out->exitAnchor.serialize_subset (c, exitAnchor, src_base); - return_trace (out); + bool ret = false; + ret |= out->entryAnchor.serialize_subset (c, entryAnchor, src_base); + ret |= out->exitAnchor.serialize_subset (c, exitAnchor, src_base); + return_trace (ret); } protected: - Offset16To + Offset16To entryAnchor; /* Offset to EntryAnchor table--from * beginning of CursivePos * subtable--may be NULL */ - Offset16To + Offset16To exitAnchor; /* Offset to ExitAnchor table--from * beginning of CursivePos * subtable--may be NULL */ @@ -91,7 +92,13 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (coverage.sanitize (c, this) && entryExitRecord.sanitize (c, this)); + if (unlikely (!coverage.sanitize (c, this))) + return_trace (false); + + if (c->lazy_some_gpos) + return_trace (entryExitRecord.sanitize_shallow (c)); + else + return_trace (entryExitRecord.sanitize (c, this)); } bool intersects (const hb_set_t *glyphs) const @@ -119,10 +126,12 @@ hb_buffer_t *buffer = c->buffer; const EntryExitRecord &this_record = entryExitRecord[(this+coverage).get_coverage (buffer->cur().codepoint)]; - if (!this_record.entryAnchor) return_trace (false); + if (!this_record.entryAnchor || + unlikely (!this_record.entryAnchor.sanitize (&c->sanitizer, this))) return_trace (false); + hb_barrier (); hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; - skippy_iter.reset_fast (buffer->idx, 1); + skippy_iter.reset_fast (buffer->idx); unsigned unsafe_from; if (unlikely (!skippy_iter.prev (&unsafe_from))) { @@ -131,11 +140,13 @@ } const EntryExitRecord &prev_record = entryExitRecord[(this+coverage).get_coverage (buffer->info[skippy_iter.idx].codepoint)]; - if (!prev_record.exitAnchor) + if (!prev_record.exitAnchor || + unlikely (!prev_record.exitAnchor.sanitize (&c->sanitizer, this))) { buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1); return_trace (false); } + hb_barrier (); unsigned int i = skippy_iter.idx; unsigned int j = buffer->idx; @@ -200,8 +211,8 @@ * Arabic. */ unsigned int child = i; unsigned int parent = j; - hb_position_t x_offset = entry_x - exit_x; - hb_position_t y_offset = entry_y - exit_y; + hb_position_t x_offset = roundf (entry_x - exit_x); + hb_position_t y_offset = roundf (entry_y - exit_y); if (!(c->lookup_props & LookupFlag::RightToLeft)) { unsigned int k = child; @@ -253,7 +264,7 @@ hb_requires (hb_is_iterator (Iterator))> void serialize (hb_subset_context_t *c, Iterator it, - const void *src_base) + const struct CursivePosFormat1 *src_base) { if (unlikely (!c->serializer->extend_min ((*this)))) return; this->format = 1; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/LigatureArray.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/LigatureArray.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/LigatureArray.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/LigatureArray.hh 2023-11-11 14:08:45.000000000 +0000 @@ -27,6 +27,7 @@ auto *out = c->serializer->start_embed (this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + bool ret = false; for (const auto _ : + hb_zip (coverage, *this) | hb_filter (glyphset, hb_first)) { @@ -38,13 +39,13 @@ + hb_range (src.rows * class_count) | hb_filter ([=] (unsigned index) { return klass_mapping->has (index % class_count); }) ; - matrix->serialize_subset (c, - _.second, - this, - src.rows, - indexes); + ret |= matrix->serialize_subset (c, + _.second, + this, + src.rows, + indexes); } - return_trace (this->len); + return_trace (ret); } }; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkArray.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkArray.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkArray.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkArray.hh 2023-11-11 14:08:45.000000000 +0000 @@ -82,10 +82,10 @@ | hb_map (hb_second) ; + bool ret = false; unsigned new_length = 0; for (const auto& mark_record : mark_iter) { - if (unlikely (!mark_record.subset (c, this, klass_mapping))) - return_trace (false); + ret |= mark_record.subset (c, this, klass_mapping); new_length++; } @@ -93,7 +93,7 @@ HB_SERIALIZE_ERROR_ARRAY_OVERFLOW))) return_trace (false); - return_trace (true); + return_trace (ret); } }; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkBasePosFormat1.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkBasePosFormat1.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkBasePosFormat1.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkBasePosFormat1.hh 2023-11-11 14:08:45.000000000 +0000 @@ -197,9 +197,10 @@ if (!out->markCoverage.serialize_serialize (c->serializer, new_coverage.iter ())) return_trace (false); - out->markArray.serialize_subset (c, markArray, this, - (this+markCoverage).iter (), - &klass_mapping); + if (unlikely (!out->markArray.serialize_subset (c, markArray, this, + (this+markCoverage).iter (), + &klass_mapping))) + return_trace (false); unsigned basecount = (this+baseArray).rows; auto base_iter = @@ -228,11 +229,9 @@ ; } - out->baseArray.serialize_subset (c, baseArray, this, - base_iter.len (), - base_indexes.iter ()); - - return_trace (true); + return_trace (out->baseArray.serialize_subset (c, baseArray, this, + base_iter.len (), + base_indexes.iter ())); } }; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkLigPosFormat1.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkLigPosFormat1.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkLigPosFormat1.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkLigPosFormat1.hh 2023-11-11 14:08:45.000000000 +0000 @@ -169,7 +169,7 @@ { TRACE_SUBSET (this); const hb_set_t &glyphset = *c->plan->glyphset_gsub (); - const hb_map_t &glyph_map = *c->plan->glyph_map; + const hb_map_t &glyph_map = c->plan->glyph_map_gsub; auto *out = c->serializer->start_embed (*this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); @@ -195,23 +195,24 @@ if (!out->markCoverage.serialize_serialize (c->serializer, new_mark_coverage)) return_trace (false); - out->markArray.serialize_subset (c, markArray, this, - (this+markCoverage).iter (), - &klass_mapping); + if (unlikely (!out->markArray.serialize_subset (c, markArray, this, + (this+markCoverage).iter (), + &klass_mapping))) + return_trace (false); auto new_ligature_coverage = + hb_iter (this + ligatureCoverage) - | hb_filter (glyphset) + | hb_take ((this + ligatureArray).len) | hb_map_retains_sorting (glyph_map) + | hb_filter ([] (hb_codepoint_t glyph) { return glyph != HB_MAP_VALUE_INVALID; }) ; if (!out->ligatureCoverage.serialize_serialize (c->serializer, new_ligature_coverage)) return_trace (false); - out->ligatureArray.serialize_subset (c, ligatureArray, this, - hb_iter (this+ligatureCoverage), classCount, &klass_mapping); - - return_trace (true); + return_trace (out->ligatureArray.serialize_subset (c, ligatureArray, this, + hb_iter (this+ligatureCoverage), + classCount, &klass_mapping)); } }; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh 2023-11-11 14:08:45.000000000 +0000 @@ -42,6 +42,7 @@ mark1Coverage.sanitize (c, this) && mark2Coverage.sanitize (c, this) && mark1Array.sanitize (c, this) && + hb_barrier () && mark2Array.sanitize (c, this, (unsigned int) classCount)); } @@ -100,7 +101,7 @@ /* now we search backwards for a suitable mark glyph until a non-mark glyph */ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; - skippy_iter.reset_fast (buffer->idx, 1); + skippy_iter.reset_fast (buffer->idx); skippy_iter.set_lookup_props (c->lookup_props & ~(uint32_t)LookupFlag::IgnoreFlags); unsigned unsafe_from; if (unlikely (!skippy_iter.prev (&unsafe_from))) @@ -183,9 +184,10 @@ if (!out->mark1Coverage.serialize_serialize (c->serializer, new_coverage.iter ())) return_trace (false); - out->mark1Array.serialize_subset (c, mark1Array, this, - (this+mark1Coverage).iter (), - &klass_mapping); + if (unlikely (!out->mark1Array.serialize_subset (c, mark1Array, this, + (this+mark1Coverage).iter (), + &klass_mapping))) + return_trace (false); unsigned mark2count = (this+mark2Array).rows; auto mark2_iter = @@ -214,9 +216,10 @@ ; } - out->mark2Array.serialize_subset (c, mark2Array, this, mark2_iter.len (), mark2_indexes.iter ()); + return_trace (out->mark2Array.serialize_subset (c, mark2Array, this, + mark2_iter.len (), + mark2_indexes.iter ())); - return_trace (true); } }; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkRecord.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkRecord.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/MarkRecord.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/MarkRecord.hh 2023-11-11 14:08:45.000000000 +0000 @@ -24,17 +24,16 @@ return_trace (c->check_struct (this) && markAnchor.sanitize (c, base)); } - MarkRecord *subset (hb_subset_context_t *c, - const void *src_base, - const hb_map_t *klass_mapping) const + bool subset (hb_subset_context_t *c, + const void *src_base, + const hb_map_t *klass_mapping) const { TRACE_SUBSET (this); auto *out = c->serializer->embed (this); - if (unlikely (!out)) return_trace (nullptr); + if (unlikely (!out)) return_trace (false); out->klass = klass_mapping->get (klass); - out->markAnchor.serialize_subset (c, markAnchor, src_base); - return_trace (out); + return_trace (out->markAnchor.serialize_subset (c, markAnchor, src_base)); } void collect_variation_indices (hb_collect_variation_indices_context_t *c, diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/PairPosFormat1.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/PairPosFormat1.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/PairPosFormat1.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/PairPosFormat1.hh 2023-11-11 14:08:45.000000000 +0000 @@ -36,6 +36,7 @@ TRACE_SANITIZE (this); if (!c->check_struct (this)) return_trace (false); + hb_barrier (); unsigned int len1 = valueFormat[0].get_len (); unsigned int len2 = valueFormat[1].get_len (); @@ -110,7 +111,7 @@ if (likely (index == NOT_COVERED)) return_trace (false); hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; - skippy_iter.reset_fast (buffer->idx, 1); + skippy_iter.reset_fast (buffer->idx); unsigned unsafe_to; if (unlikely (!skippy_iter.next (&unsafe_to))) { @@ -131,20 +132,33 @@ auto *out = c->serializer->start_embed (*this); if (unlikely (!c->serializer->extend_min (out))) return_trace (false); out->format = format; - out->valueFormat[0] = valueFormat[0]; - out->valueFormat[1] = valueFormat[1]; - if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) - { - hb_pair_t newFormats = compute_effective_value_formats (glyphset); - out->valueFormat[0] = newFormats.first; - out->valueFormat[1] = newFormats.second; - } - if (c->plan->all_axes_pinned) + hb_pair_t newFormats = hb_pair (valueFormat[0], valueFormat[1]); + + if (c->plan->normalized_coords) + { + /* all device flags will be dropped when full instancing, no need to strip + * hints, also do not strip emtpy cause we don't compute the new default + * value during stripping */ + newFormats = compute_effective_value_formats (glyphset, false, false, &c->plan->layout_variation_idx_delta_map); + } + /* do not strip hints for VF */ + else if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) { - out->valueFormat[0] = out->valueFormat[0].drop_device_table_flags (); - out->valueFormat[1] = out->valueFormat[1].drop_device_table_flags (); + hb_blob_t* blob = hb_face_reference_table (c->plan->source, HB_TAG ('f','v','a','r')); + bool has_fvar = (blob != hb_blob_get_empty ()); + hb_blob_destroy (blob); + + bool strip = !has_fvar; + /* special case: strip hints when a VF has no GDEF varstore after + * subsetting*/ + if (has_fvar && !c->plan->has_gdef_varstore) + strip = true; + newFormats = compute_effective_value_formats (glyphset, strip, true); } + + out->valueFormat[0] = newFormats.first; + out->valueFormat[1] = newFormats.second; hb_sorted_vector_t new_coverage; @@ -175,7 +189,9 @@ } - hb_pair_t compute_effective_value_formats (const hb_set_t& glyphset) const + hb_pair_t compute_effective_value_formats (const hb_set_t& glyphset, + bool strip_hints, bool strip_empty, + const hb_hashmap_t> *varidx_delta_map = nullptr) const { unsigned record_size = PairSet::get_size (valueFormat); @@ -195,8 +211,8 @@ { if (record->intersects (glyphset)) { - format1 = format1 | valueFormat[0].get_effective_format (record->get_values_1 ()); - format2 = format2 | valueFormat[1].get_effective_format (record->get_values_2 (valueFormat[0])); + format1 = format1 | valueFormat[0].get_effective_format (record->get_values_1 (), strip_hints, strip_empty, &set, varidx_delta_map); + format2 = format2 | valueFormat[1].get_effective_format (record->get_values_2 (valueFormat[0]), strip_hints, strip_empty, &set, varidx_delta_map); } record = &StructAtOffset (record, record_size); } diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/PairPosFormat2.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/PairPosFormat2.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/PairPosFormat2.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/PairPosFormat2.hh 2023-11-11 14:08:45.000000000 +0000 @@ -8,7 +8,7 @@ namespace GPOS_impl { template -struct PairPosFormat2_4 +struct PairPosFormat2_4 : ValueBase { protected: HBUINT16 format; /* Format identifier--format = 2 */ @@ -131,7 +131,7 @@ if (likely (index == NOT_COVERED)) return_trace (false); hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; - skippy_iter.reset_fast (buffer->idx, 1); + skippy_iter.reset_fast (buffer->idx); unsigned unsafe_to; if (unlikely (!skippy_iter.next (&unsafe_to))) { @@ -163,7 +163,7 @@ /* Isolate simple kerning and apply it half to each side. - * Results in better cursor positinoing / underline drawing. + * Results in better cursor positioning / underline drawing. * * Disabled, because causes issues... :-( * https://github.com/harfbuzz/harfbuzz/issues/3408 @@ -287,18 +287,31 @@ unsigned len2 = valueFormat2.get_len (); hb_pair_t newFormats = hb_pair (valueFormat1, valueFormat2); - if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) - newFormats = compute_effective_value_formats (klass1_map, klass2_map); - out->valueFormat1 = newFormats.first; - out->valueFormat2 = newFormats.second; - - if (c->plan->all_axes_pinned) + if (c->plan->normalized_coords) { - out->valueFormat1 = out->valueFormat1.drop_device_table_flags (); - out->valueFormat2 = out->valueFormat2.drop_device_table_flags (); + /* in case of full instancing, all var device flags will be dropped so no + * need to strip hints here */ + newFormats = compute_effective_value_formats (klass1_map, klass2_map, false, false, &c->plan->layout_variation_idx_delta_map); + } + /* do not strip hints for VF */ + else if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + { + hb_blob_t* blob = hb_face_reference_table (c->plan->source, HB_TAG ('f','v','a','r')); + bool has_fvar = (blob != hb_blob_get_empty ()); + hb_blob_destroy (blob); + + bool strip = !has_fvar; + /* special case: strip hints when a VF has no GDEF varstore after + * subsetting*/ + if (has_fvar && !c->plan->has_gdef_varstore) + strip = true; + newFormats = compute_effective_value_formats (klass1_map, klass2_map, strip, true); } + out->valueFormat1 = newFormats.first; + out->valueFormat2 = newFormats.second; + unsigned total_len = len1 + len2; hb_vector_t class2_idxs (+ hb_range ((unsigned) class2Count) | hb_filter (klass2_map)); for (unsigned class1_idx : + hb_range ((unsigned) class1Count) | hb_filter (klass1_map)) @@ -326,7 +339,9 @@ hb_pair_t compute_effective_value_formats (const hb_map_t& klass1_map, - const hb_map_t& klass2_map) const + const hb_map_t& klass2_map, + bool strip_hints, bool strip_empty, + const hb_hashmap_t> *varidx_delta_map = nullptr) const { unsigned len1 = valueFormat1.get_len (); unsigned len2 = valueFormat2.get_len (); @@ -340,8 +355,8 @@ for (unsigned class2_idx : + hb_range ((unsigned) class2Count) | hb_filter (klass2_map)) { unsigned idx = (class1_idx * (unsigned) class2Count + class2_idx) * record_size; - format1 = format1 | valueFormat1.get_effective_format (&values[idx]); - format2 = format2 | valueFormat2.get_effective_format (&values[idx + len1]); + format1 = format1 | valueFormat1.get_effective_format (&values[idx], strip_hints, strip_empty, this, varidx_delta_map); + format2 = format2 | valueFormat2.get_effective_format (&values[idx + len1], strip_hints, strip_empty, this, varidx_delta_map); } if (format1 == valueFormat1 && format2 == valueFormat2) diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/PairSet.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/PairSet.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/PairSet.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/PairSet.hh 2023-11-11 14:08:45.000000000 +0000 @@ -9,7 +9,7 @@ template -struct PairSet +struct PairSet : ValueBase { template friend struct PairPosFormat1_3; @@ -45,10 +45,12 @@ bool sanitize (hb_sanitize_context_t *c, const sanitize_closure_t *closure) const { TRACE_SANITIZE (this); - if (!(c->check_struct (this) - && c->check_range (&firstPairValueRecord, + if (!(c->check_struct (this) && + hb_barrier () && + c->check_range (&firstPairValueRecord, len, closure->stride))) return_trace (false); + hb_barrier (); unsigned int count = len; const PairValueRecord *record = &firstPairValueRecord; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/PairValueRecord.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/PairValueRecord.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/PairValueRecord.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/PairValueRecord.hh 2023-11-11 14:08:45.000000000 +0000 @@ -23,14 +23,13 @@ * followed by for second glyph */ public: DEFINE_SIZE_ARRAY (Types::HBGlyphID::static_size, values); - DEFINE_SIZE_MAX (Types::HBGlyphID::static_size + 2 * Value::static_size * 8 * sizeof (ValueFormat)); int cmp (hb_codepoint_t k) const { return secondGlyph.cmp (k); } struct context_t { - const void *base; + const ValueBase *base; const ValueFormat *valueFormats; const ValueFormat *newFormats; unsigned len1; /* valueFormats[0].get_len() */ @@ -63,7 +62,7 @@ void collect_variation_indices (hb_collect_variation_indices_context_t *c, const ValueFormat *valueFormats, - const void *base) const + const ValueBase *base) const { unsigned record1_len = valueFormats[0].get_len (); unsigned record2_len = valueFormats[1].get_len (); diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/SinglePos.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/SinglePos.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/SinglePos.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/SinglePos.hh 2023-11-11 14:08:45.000000000 +0000 @@ -39,14 +39,12 @@ const SrcLookup* src, Iterator glyph_val_iter_pairs, const hb_hashmap_t> *layout_variation_idx_delta_map, - bool all_axes_pinned) + unsigned newFormat) { if (unlikely (!c->extend_min (u.format))) return; unsigned format = 2; - ValueFormat new_format = src->get_value_format (); - - if (all_axes_pinned) - new_format = new_format.drop_device_table_flags (); + ValueFormat new_format; + new_format = newFormat; if (glyph_val_iter_pairs) format = get_format (glyph_val_iter_pairs); @@ -89,8 +87,8 @@ const SrcLookup *src, Iterator it, const hb_hashmap_t> *layout_variation_idx_delta_map, - bool all_axes_pinned) -{ c->start_embed ()->serialize (c, src, it, layout_variation_idx_delta_map, all_axes_pinned); } + unsigned new_format) +{ c->start_embed ()->serialize (c, src, it, layout_variation_idx_delta_map, new_format); } } diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/SinglePosFormat1.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/SinglePosFormat1.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/SinglePosFormat1.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/SinglePosFormat1.hh 2023-11-11 14:08:45.000000000 +0000 @@ -8,7 +8,7 @@ namespace Layout { namespace GPOS_impl { -struct SinglePosFormat1 +struct SinglePosFormat1 : ValueBase { protected: HBUINT16 format; /* Format identifier--format = 1 */ @@ -28,6 +28,7 @@ TRACE_SANITIZE (this); return_trace (c->check_struct (this) && coverage.sanitize (c, this) && + hb_barrier () && /* The coverage table may use a range to represent a set * of glyphs, which means a small number of bytes can * generate a large glyph set. Manually modify the @@ -146,6 +147,30 @@ hb_set_t intersection; (this+coverage).intersect_set (glyphset, intersection); + unsigned new_format = valueFormat; + + if (c->plan->normalized_coords) + { + new_format = valueFormat.get_effective_format (values.arrayZ, false, false, this, &c->plan->layout_variation_idx_delta_map); + } + /* do not strip hints for VF */ + else if (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING) + { + hb_blob_t* blob = hb_face_reference_table (c->plan->source, HB_TAG ('f','v','a','r')); + bool has_fvar = (blob != hb_blob_get_empty ()); + hb_blob_destroy (blob); + + bool strip = !has_fvar; + /* special case: strip hints when a VF has no GDEF varstore after + * subsetting*/ + if (has_fvar && !c->plan->has_gdef_varstore) + strip = true; + new_format = valueFormat.get_effective_format (values.arrayZ, + strip, /* strip hints */ + true, /* strip empty */ + this, nullptr); + } + auto it = + hb_iter (intersection) | hb_map_retains_sorting (glyph_map) @@ -153,7 +178,7 @@ ; bool ret = bool (it); - SinglePos_serialize (c->serializer, this, it, &c->plan->layout_variation_idx_delta_map, c->plan->all_axes_pinned); + SinglePos_serialize (c->serializer, this, it, &c->plan->layout_variation_idx_delta_map, new_format); return_trace (ret); } }; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/SinglePosFormat2.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/SinglePosFormat2.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/SinglePosFormat2.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/SinglePosFormat2.hh 2023-11-11 14:08:45.000000000 +0000 @@ -7,7 +7,7 @@ namespace Layout { namespace GPOS_impl { -struct SinglePosFormat2 +struct SinglePosFormat2 : ValueBase { protected: HBUINT16 format; /* Format identifier--format = 2 */ @@ -143,6 +143,37 @@ coverage.serialize_serialize (c, glyphs); } + template + unsigned compute_effective_format (const hb_face_t *face, + Iterator it, + bool is_instancing, bool strip_hints, + bool has_gdef_varstore, + const hb_hashmap_t> *varidx_delta_map) const + { + hb_blob_t* blob = hb_face_reference_table (face, HB_TAG ('f','v','a','r')); + bool has_fvar = (blob != hb_blob_get_empty ()); + hb_blob_destroy (blob); + + unsigned new_format = 0; + if (is_instancing) + { + new_format = new_format | valueFormat.get_effective_format (+ it | hb_map (hb_second), false, false, this, varidx_delta_map); + } + /* do not strip hints for VF */ + else if (strip_hints) + { + bool strip = !has_fvar; + if (has_fvar && !has_gdef_varstore) + strip = true; + new_format = new_format | valueFormat.get_effective_format (+ it | hb_map (hb_second), strip, true, this, nullptr); + } + else + new_format = valueFormat; + + return new_format; + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); @@ -163,8 +194,13 @@ }) ; + unsigned new_format = compute_effective_format (c->plan->source, it, + bool (c->plan->normalized_coords), + bool (c->plan->flags & HB_SUBSET_FLAGS_NO_HINTING), + c->plan->has_gdef_varstore, + &c->plan->layout_variation_idx_delta_map); bool ret = bool (it); - SinglePos_serialize (c->serializer, this, it, &c->plan->layout_variation_idx_delta_map, c->plan->all_axes_pinned); + SinglePos_serialize (c->serializer, this, it, &c->plan->layout_variation_idx_delta_map, new_format); return_trace (ret); } }; diff -Nru harfbuzz-8.0.1/src/OT/Layout/GPOS/ValueFormat.hh harfbuzz-8.3.0/src/OT/Layout/GPOS/ValueFormat.hh --- harfbuzz-8.0.1/src/OT/Layout/GPOS/ValueFormat.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GPOS/ValueFormat.hh 2023-11-11 14:08:45.000000000 +0000 @@ -9,6 +9,8 @@ typedef HBUINT16 Value; +struct ValueBase {}; // Dummy base class tag for OffsetTo bases. + typedef UnsizedArrayOf ValueRecord; struct ValueFormat : HBUINT16 @@ -78,7 +80,7 @@ } bool apply_value (hb_ot_apply_context_t *c, - const void *base, + const ValueBase *base, const Value *values, hb_glyph_position_t &glyph_pos) const { @@ -142,11 +144,29 @@ return ret; } - unsigned int get_effective_format (const Value *values) const + unsigned int get_effective_format (const Value *values, bool strip_hints, bool strip_empty, const ValueBase *base, + const hb_hashmap_t> *varidx_delta_map) const { unsigned int format = *this; for (unsigned flag = xPlacement; flag <= yAdvDevice; flag = flag << 1) { - if (format & flag) should_drop (*values++, (Flags) flag, &format); + if (format & flag) + { + if (strip_hints && flag >= xPlaDevice) + { + format = format & ~flag; + values++; + continue; + } + if (varidx_delta_map && flag >= xPlaDevice) + { + update_var_flag (values++, (Flags) flag, &format, base, varidx_delta_map); + continue; + } + /* do not strip empty when instancing, cause we don't know whether the new + * default value is 0 or not */ + if (strip_empty) should_drop (*values, (Flags) flag, &format); + values++; + } } return format; @@ -154,18 +174,19 @@ template - unsigned int get_effective_format (Iterator it) const { + unsigned int get_effective_format (Iterator it, bool strip_hints, bool strip_empty, const ValueBase *base, + const hb_hashmap_t> *varidx_delta_map) const { unsigned int new_format = 0; for (const hb_array_t& values : it) - new_format = new_format | get_effective_format (&values); + new_format = new_format | get_effective_format (&values, strip_hints, strip_empty, base, varidx_delta_map); return new_format; } void copy_values (hb_serialize_context_t *c, unsigned int new_format, - const void *base, + const ValueBase *base, const Value *values, const hb_hashmap_t> *layout_variation_idx_delta_map) const { @@ -217,7 +238,7 @@ } void collect_variation_indices (hb_collect_variation_indices_context_t *c, - const void *base, + const ValueBase *base, const hb_array_t& values) const { unsigned format = *this; @@ -251,17 +272,8 @@ } } - unsigned drop_device_table_flags () const - { - unsigned format = *this; - for (unsigned flag = xPlaDevice; flag <= yAdvDevice; flag = flag << 1) - format = format & ~flag; - - return format; - } - private: - bool sanitize_value_devices (hb_sanitize_context_t *c, const void *base, const Value *values) const + bool sanitize_value_devices (hb_sanitize_context_t *c, const ValueBase *base, const Value *values) const { unsigned int format = *this; @@ -278,17 +290,17 @@ return true; } - static inline Offset16To& get_device (Value* value) + static inline Offset16To& get_device (Value* value) { - return *static_cast *> (value); + return *static_cast *> (value); } - static inline const Offset16To& get_device (const Value* value) + static inline const Offset16To& get_device (const Value* value) { - return *static_cast *> (value); + return *static_cast *> (value); } static inline const Device& get_device (const Value* value, bool *worked, - const void *base, + const ValueBase *base, hb_sanitize_context_t &c) { if (worked) *worked |= bool (*value); @@ -296,12 +308,13 @@ if (unlikely (!offset.sanitize (&c, base))) return Null(Device); + hb_barrier (); return base + offset; } void add_delta_to_value (HBINT16 *value, - const void *base, + const ValueBase *base, const Value *src_value, const hb_hashmap_t> *layout_variation_idx_delta_map) const { @@ -313,7 +326,8 @@ *value += hb_second (*varidx_delta); } - bool copy_device (hb_serialize_context_t *c, const void *base, + bool copy_device (hb_serialize_context_t *c, + const ValueBase *base, const Value *src_value, const hb_hashmap_t> *layout_variation_idx_delta_map, unsigned int new_format, Flags flag) const @@ -354,7 +368,7 @@ return (format & devices) != 0; } - bool sanitize_value (hb_sanitize_context_t *c, const void *base, const Value *values) const + bool sanitize_value (hb_sanitize_context_t *c, const ValueBase *base, const Value *values) const { TRACE_SANITIZE (this); @@ -366,7 +380,7 @@ return_trace (!has_device () || sanitize_value_devices (c, base, values)); } - bool sanitize_values (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count) const + bool sanitize_values (hb_sanitize_context_t *c, const ValueBase *base, const Value *values, unsigned int count) const { TRACE_SANITIZE (this); unsigned size = get_size (); @@ -376,11 +390,12 @@ if (c->lazy_some_gpos) return_trace (true); + hb_barrier (); return_trace (sanitize_values_stride_unsafe (c, base, values, count, size)); } /* Just sanitize referenced Device tables. Doesn't check the values themselves. */ - bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, const void *base, const Value *values, unsigned int count, unsigned int stride) const + bool sanitize_values_stride_unsafe (hb_sanitize_context_t *c, const ValueBase *base, const Value *values, unsigned int count, unsigned int stride) const { TRACE_SANITIZE (this); @@ -403,6 +418,20 @@ *format = *format & ~flag; } + void update_var_flag (const Value* value, Flags flag, + unsigned int* format, const ValueBase *base, + const hb_hashmap_t> *varidx_delta_map) const + { + if (*value) + { + unsigned varidx = (base + get_device (value)).get_variation_index (); + hb_pair_t *varidx_delta; + if (varidx_delta_map->has (varidx, &varidx_delta) && + varidx_delta->first != HB_OT_LAYOUT_NO_VARIATIONS_INDEX) + return; + } + *format = *format & ~flag; + } }; } diff -Nru harfbuzz-8.0.1/src/OT/Layout/GSUB/Ligature.hh harfbuzz-8.3.0/src/OT/Layout/GSUB/Ligature.hh --- harfbuzz-8.0.1/src/OT/Layout/GSUB/Ligature.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GSUB/Ligature.hh 2023-11-11 14:08:45.000000000 +0000 @@ -19,7 +19,6 @@ * in writing direction */ public: DEFINE_SIZE_ARRAY (Types::size + 2, component); - DEFINE_SIZE_MAX (65536 * Types::HBGlyphID::static_size); bool sanitize (hb_sanitize_context_t *c) const { diff -Nru harfbuzz-8.0.1/src/OT/Layout/GSUB/LigatureSet.hh harfbuzz-8.3.0/src/OT/Layout/GSUB/LigatureSet.hh --- harfbuzz-8.0.1/src/OT/Layout/GSUB/LigatureSet.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GSUB/LigatureSet.hh 2023-11-11 14:08:45.000000000 +0000 @@ -72,19 +72,14 @@ ; } - static bool match_always (hb_glyph_info_t &info HB_UNUSED, unsigned value HB_UNUSED, const void *data HB_UNUSED) - { - return true; - } - bool apply (hb_ot_apply_context_t *c) const { TRACE_APPLY (this); unsigned int num_ligs = ligature.len; -#ifndef HB_NO_OT_LIGATURES_FAST_PATH - if (HB_OPTIMIZE_SIZE_VAL || num_ligs <= 2) +#ifndef HB_NO_OT_RULESETS_FAST_PATH + if (HB_OPTIMIZE_SIZE_VAL || num_ligs <= 4) #endif { slow: @@ -97,10 +92,12 @@ } /* This version is optimized for speed by matching the first component - * of the ligature here, instead of calling into the ligation code. */ + * of the ligature here, instead of calling into the ligation code. + * + * This is replicated in ChainRuleSet and RuleSet. */ hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; - skippy_iter.reset (c->buffer->idx, 1); + skippy_iter.reset (c->buffer->idx); skippy_iter.set_match_func (match_always, nullptr); skippy_iter.set_glyph_data ((HBUINT16 *) nullptr); unsigned unsafe_to; @@ -118,6 +115,8 @@ goto slow; } } + else + goto slow; bool unsafe_to_concat = false; @@ -125,7 +124,7 @@ { const auto &lig = this+ligature.arrayZ[i]; if (unlikely (lig.component.lenP1 <= 1) || - lig.component[1] == first) + lig.component.arrayZ[0] == first) { if (lig.apply (c)) { diff -Nru harfbuzz-8.0.1/src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh harfbuzz-8.3.0/src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh --- harfbuzz-8.0.1/src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh 2023-11-11 14:08:45.000000000 +0000 @@ -33,9 +33,11 @@ TRACE_SANITIZE (this); if (!(coverage.sanitize (c, this) && backtrack.sanitize (c, this))) return_trace (false); + hb_barrier (); const auto &lookahead = StructAfter (backtrack); if (!lookahead.sanitize (c, this)) return_trace (false); + hb_barrier (); const auto &substitute = StructAfter (lookahead); return_trace (substitute.sanitize (c)); } @@ -109,12 +111,12 @@ bool apply (hb_ot_apply_context_t *c) const { TRACE_APPLY (this); - if (unlikely (c->nesting_level_left != HB_MAX_NESTING_LEVEL)) - return_trace (false); /* No chaining to this type */ - unsigned int index = (this+coverage).get_coverage (c->buffer->cur ().codepoint); if (likely (index == NOT_COVERED)) return_trace (false); + if (unlikely (c->nesting_level_left != HB_MAX_NESTING_LEVEL)) + return_trace (false); /* No chaining to this type */ + const auto &lookahead = StructAfter (backtrack); const auto &substitute = StructAfter (lookahead); diff -Nru harfbuzz-8.0.1/src/OT/Layout/types.hh harfbuzz-8.3.0/src/OT/Layout/types.hh --- harfbuzz-8.0.1/src/OT/Layout/types.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/Layout/types.hh 2023-11-11 14:08:45.000000000 +0000 @@ -38,8 +38,8 @@ using HBUINT = HBUINT16; using HBGlyphID = HBGlyphID16; using Offset = Offset16; - template - using OffsetTo = OT::Offset16To; + template + using OffsetTo = OT::Offset16To; template using ArrayOf = OT::Array16Of; template @@ -52,8 +52,8 @@ using HBUINT = HBUINT24; using HBGlyphID = HBGlyphID24; using Offset = Offset24; - template - using OffsetTo = OT::Offset24To; + template + using OffsetTo = OT::Offset24To; template using ArrayOf = OT::Array24Of; template diff -Nru harfbuzz-8.0.1/src/OT/glyf/Glyph.hh harfbuzz-8.3.0/src/OT/glyf/Glyph.hh --- harfbuzz-8.0.1/src/OT/glyf/Glyph.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/glyf/Glyph.hh 2023-11-11 14:08:45.000000000 +0000 @@ -103,6 +103,63 @@ } } + bool get_all_points_without_var (const hb_face_t *face, + contour_point_vector_t &points /* OUT */) const + { + switch (type) { + case SIMPLE: + if (unlikely (!SimpleGlyph (*header, bytes).get_contour_points (points))) + return false; + break; + case COMPOSITE: + { + for (auto &item : get_composite_iterator ()) + if (unlikely (!item.get_points (points))) return false; + break; + } +#ifndef HB_NO_VAR_COMPOSITES + case VAR_COMPOSITE: + { + for (auto &item : get_var_composite_iterator ()) + if (unlikely (!item.get_points (points))) return false; + break; + } +#endif + case EMPTY: + break; + } + + /* Init phantom points */ + if (unlikely (!points.resize (points.length + PHANTOM_COUNT))) return false; + hb_array_t phantoms = points.as_array ().sub_array (points.length - PHANTOM_COUNT, PHANTOM_COUNT); + { + int lsb = 0; + int h_delta = face->table.hmtx->get_leading_bearing_without_var_unscaled (gid, &lsb) ? + (int) header->xMin - lsb : 0; + HB_UNUSED int tsb = 0; + int v_orig = (int) header->yMax + +#ifndef HB_NO_VERTICAL + ((void) face->table.vmtx->get_leading_bearing_without_var_unscaled (gid, &tsb), tsb) +#else + 0 +#endif + ; + unsigned h_adv = face->table.hmtx->get_advance_without_var_unscaled (gid); + unsigned v_adv = +#ifndef HB_NO_VERTICAL + face->table.vmtx->get_advance_without_var_unscaled (gid) +#else + - face->get_upem () +#endif + ; + phantoms[PHANTOM_LEFT].x = h_delta; + phantoms[PHANTOM_RIGHT].x = (int) h_adv + h_delta; + phantoms[PHANTOM_TOP].y = v_orig; + phantoms[PHANTOM_BOTTOM].y = v_orig - (int) v_adv; + } + return true; + } + void update_mtx (const hb_subset_plan_t *plan, int xMin, int xMax, int yMin, int yMax, @@ -293,6 +350,7 @@ bool use_my_metrics = true, bool phantom_only = false, hb_array_t coords = hb_array_t (), + hb_map_t *current_glyphs = nullptr, unsigned int depth = 0, unsigned *edge_count = nullptr) const { @@ -302,6 +360,10 @@ if (unlikely (*edge_count > HB_GLYF_MAX_EDGE_COUNT)) return false; (*edge_count)++; + hb_map_t current_glyphs_stack; + if (current_glyphs == nullptr) + current_glyphs = ¤t_glyphs_stack; + if (head_maxp_info) { head_maxp_info->maxComponentDepth = hb_max (head_maxp_info->maxComponentDepth, depth); @@ -396,10 +458,17 @@ unsigned int comp_index = 0; for (auto &item : get_composite_iterator ()) { + hb_codepoint_t item_gid = item.get_gid (); + + if (unlikely (current_glyphs->has (item_gid))) + continue; + + current_glyphs->add (item_gid); + unsigned old_count = all_points.length; if (unlikely ((!phantom_only || (use_my_metrics && item.is_use_my_metrics ())) && - !glyf_accelerator.glyph_for_gid (item.get_gid ()) + !glyf_accelerator.glyph_for_gid (item_gid) .get_points (font, glyf_accelerator, all_points, @@ -410,9 +479,13 @@ use_my_metrics, phantom_only, coords, + current_glyphs, depth + 1, edge_count))) + { + current_glyphs->del (item_gid); return false; + } auto comp_points = all_points.as_array ().sub_array (old_count); @@ -448,9 +521,13 @@ all_points.resize (all_points.length - PHANTOM_COUNT); if (all_points.length > HB_GLYF_MAX_POINTS) + { + current_glyphs->del (item_gid); return false; + } comp_index++; + current_glyphs->del (item_gid); } if (head_maxp_info && depth == 0) @@ -468,6 +545,13 @@ hb_array_t points_left = points.as_array (); for (auto &item : get_var_composite_iterator ()) { + hb_codepoint_t item_gid = item.get_gid (); + + if (unlikely (current_glyphs->has (item_gid))) + continue; + + current_glyphs->add (item_gid); + unsigned item_num_points = item.get_num_points (); hb_array_t record_points = points_left.sub_array (0, item_num_points); assert (record_points.length == item_num_points); @@ -485,7 +569,7 @@ unsigned old_count = all_points.length; if (unlikely ((!phantom_only || (use_my_metrics && item.is_use_my_metrics ())) && - !glyf_accelerator.glyph_for_gid (item.get_gid ()) + !glyf_accelerator.glyph_for_gid (item_gid) .get_points (font, glyf_accelerator, all_points, @@ -496,9 +580,13 @@ use_my_metrics, phantom_only, coord_setter.get_coords (), + current_glyphs, depth + 1, edge_count))) + { + current_glyphs->del (item_gid); return false; + } auto comp_points = all_points.as_array ().sub_array (old_count); @@ -514,9 +602,14 @@ all_points.resize (all_points.length - PHANTOM_COUNT); if (all_points.length > HB_GLYF_MAX_POINTS) + { + current_glyphs->del (item_gid); return false; + } points_left += item_num_points; + + current_glyphs->del (item_gid); } all_points.extend (phantoms); } break; diff -Nru harfbuzz-8.0.1/src/OT/name/name.hh harfbuzz-8.3.0/src/OT/name/name.hh --- harfbuzz-8.0.1/src/OT/name/name.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/OT/name/name.hh 2023-11-11 14:08:45.000000000 +0000 @@ -242,7 +242,9 @@ bool sanitize (hb_sanitize_context_t *c, const void *base) const { TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && offset.sanitize (c, base, length)); + return_trace (c->check_struct (this) && + hb_barrier () && + offset.sanitize (c, base, length)); } HBUINT16 platformID; /* Platform ID. */ @@ -465,6 +467,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && likely (format == 0 || format == 1) && c->check_array (nameRecordZ.arrayZ, count) && c->check_range (this, stringOffset) && diff -Nru harfbuzz-8.0.1/src/gen-use-table.py harfbuzz-8.3.0/src/gen-use-table.py --- harfbuzz-8.0.1/src/gen-use-table.py 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/gen-use-table.py 2023-11-11 14:08:45.000000000 +0000 @@ -1,9 +1,6 @@ #!/usr/bin/env python3 # flake8: noqa: F821 -import logging -logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO) - """usage: ./gen-use-table.py IndicSyllabicCategory.txt IndicPositionalCategory.txt ArabicShaping.txt DerivedCoreProperties.txt UnicodeData.txt Blocks.txt Scripts.txt IndicSyllabicCategory-Additional.txt IndicPositionalCategory-Additional.txt Input files: @@ -18,6 +15,10 @@ * ms-use/IndicPositionalCategory-Additional.txt """ +import logging +logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO) + + import sys if len (sys.argv) != 10: @@ -140,6 +141,10 @@ 'Symbol_Modifier', 'Hieroglyph', 'Hieroglyph_Joiner', + 'Hieroglyph_Mark_Begin', + 'Hieroglyph_Mark_End', + 'Hieroglyph_Mirror', + 'Hieroglyph_Modifier', 'Hieroglyph_Segment_Begin', 'Hieroglyph_Segment_End', # Indic_Positional_Category @@ -234,10 +239,14 @@ return UISC == Hieroglyph def is_HIEROGLYPH_JOINER(U, UISC, UDI, UGC, AJT): return UISC == Hieroglyph_Joiner +def is_HIEROGLYPH_MIRROR(U, UISC, UDI, UGC, AJT): + return UISC == Hieroglyph_Mirror +def is_HIEROGLYPH_MOD(U, UISC, UDI, UGC, AJT): + return UISC == Hieroglyph_Modifier def is_HIEROGLYPH_SEGMENT_BEGIN(U, UISC, UDI, UGC, AJT): - return UISC == Hieroglyph_Segment_Begin + return UISC in [Hieroglyph_Mark_Begin, Hieroglyph_Segment_Begin] def is_HIEROGLYPH_SEGMENT_END(U, UISC, UDI, UGC, AJT): - return UISC == Hieroglyph_Segment_End + return UISC in [Hieroglyph_Mark_End, Hieroglyph_Segment_End] def is_INVISIBLE_STACKER(U, UISC, UDI, UGC, AJT): # Split off of HALANT return (UISC == Invisible_Stacker @@ -290,6 +299,8 @@ 'HN': is_HALANT_NUM, 'IS': is_INVISIBLE_STACKER, 'G': is_HIEROGLYPH, + 'HM': is_HIEROGLYPH_MOD, + 'HR': is_HIEROGLYPH_MIRROR, 'J': is_HIEROGLYPH_JOINER, 'SB': is_HIEROGLYPH_SEGMENT_BEGIN, 'SE': is_HIEROGLYPH_SEGMENT_END, @@ -336,6 +347,8 @@ 'Blw': [Bottom], }, 'H': None, + 'HM': None, + 'HR': None, 'HVM': None, 'IS': None, 'B': None, diff -Nru harfbuzz-8.0.1/src/graph/classdef-graph.hh harfbuzz-8.3.0/src/graph/classdef-graph.hh --- harfbuzz-8.0.1/src/graph/classdef-graph.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/graph/classdef-graph.hh 2023-11-11 14:08:45.000000000 +0000 @@ -39,6 +39,7 @@ int64_t vertex_len = vertex.obj.tail - vertex.obj.head; constexpr unsigned min_size = OT::ClassDefFormat1_3::min_size; if (vertex_len < min_size) return false; + hb_barrier (); return vertex_len >= min_size + classValue.get_size () - classValue.len.get_size (); } }; @@ -50,6 +51,7 @@ int64_t vertex_len = vertex.obj.tail - vertex.obj.head; constexpr unsigned min_size = OT::ClassDefFormat2_4::min_size; if (vertex_len < min_size) return false; + hb_barrier (); return vertex_len >= min_size + rangeRecord.get_size () - rangeRecord.len.get_size (); } }; @@ -72,7 +74,7 @@ class_def_link->width = SmallTypes::size; class_def_link->objidx = class_def_prime_id; class_def_link->position = link_position; - class_def_prime_vertex.parents.push (parent_id); + class_def_prime_vertex.add_parent (parent_id); return true; } @@ -114,6 +116,7 @@ { int64_t vertex_len = vertex.obj.tail - vertex.obj.head; if (vertex_len < OT::ClassDef::min_size) return false; + hb_barrier (); switch (u.format) { case 1: return ((ClassDefFormat1*)this)->sanitize (vertex); diff -Nru harfbuzz-8.0.1/src/graph/coverage-graph.hh harfbuzz-8.3.0/src/graph/coverage-graph.hh --- harfbuzz-8.0.1/src/graph/coverage-graph.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/graph/coverage-graph.hh 2023-11-11 14:08:45.000000000 +0000 @@ -39,6 +39,7 @@ int64_t vertex_len = vertex.obj.tail - vertex.obj.head; constexpr unsigned min_size = OT::Layout::Common::CoverageFormat1_3::min_size; if (vertex_len < min_size) return false; + hb_barrier (); return vertex_len >= min_size + glyphArray.get_size () - glyphArray.len.get_size (); } }; @@ -50,6 +51,7 @@ int64_t vertex_len = vertex.obj.tail - vertex.obj.head; constexpr unsigned min_size = OT::Layout::Common::CoverageFormat2_4::min_size; if (vertex_len < min_size) return false; + hb_barrier (); return vertex_len >= min_size + rangeRecord.get_size () - rangeRecord.len.get_size (); } }; @@ -96,7 +98,7 @@ coverage_link->width = SmallTypes::size; coverage_link->objidx = coverage_prime_id; coverage_link->position = link_position; - coverage_prime_vertex.parents.push (parent_id); + coverage_prime_vertex.add_parent (parent_id); return (Coverage*) coverage_prime_vertex.obj.head; } @@ -138,6 +140,7 @@ { int64_t vertex_len = vertex.obj.tail - vertex.obj.head; if (vertex_len < OT::Layout::Common::Coverage::min_size) return false; + hb_barrier (); switch (u.format) { case 1: return ((CoverageFormat1*)this)->sanitize (vertex); diff -Nru harfbuzz-8.0.1/src/graph/graph.hh harfbuzz-8.3.0/src/graph/graph.hh --- harfbuzz-8.0.1/src/graph/graph.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/graph/graph.hh 2023-11-11 14:08:45.000000000 +0000 @@ -43,12 +43,28 @@ { hb_serialize_context_t::object_t obj; int64_t distance = 0 ; - int64_t space = 0 ; - hb_vector_t parents; + unsigned space = 0 ; unsigned start = 0; unsigned end = 0; unsigned priority = 0; + private: + unsigned incoming_edges_ = 0; + unsigned single_parent = (unsigned) -1; + hb_hashmap_t parents; + public: + + auto parents_iter () const HB_AUTO_RETURN + ( + hb_concat ( + hb_iter (&single_parent, single_parent != (unsigned) -1), + parents.keys_ref () + ) + ) + bool in_error () const + { + return parents.in_error (); + } bool link_positions_valid (unsigned num_objects, bool removed_nil) { @@ -143,7 +159,9 @@ hb_swap (a.obj, b.obj); hb_swap (a.distance, b.distance); hb_swap (a.space, b.space); + hb_swap (a.single_parent, b.single_parent); hb_swap (a.parents, b.parents); + hb_swap (a.incoming_edges_, b.incoming_edges_); hb_swap (a.start, b.start); hb_swap (a.end, b.end); hb_swap (a.priority, b.priority); @@ -154,6 +172,7 @@ { hb_hashmap_t result; + result.alloc (obj.real_links.length); for (const auto& l : obj.real_links) { result.set (l.position, l.objidx); } @@ -163,22 +182,76 @@ bool is_shared () const { - return parents.length > 1; + return parents.get_population () > 1; } unsigned incoming_edges () const { - return parents.length; + if (HB_DEBUG_SUBSET_REPACK) + { + assert (incoming_edges_ == (single_parent != (unsigned) -1) + + (parents.values_ref () | hb_reduce (hb_add, 0))); + } + return incoming_edges_; + } + + void reset_parents () + { + incoming_edges_ = 0; + single_parent = (unsigned) -1; + parents.reset (); + } + + void add_parent (unsigned parent_index) + { + assert (parent_index != (unsigned) -1); + if (incoming_edges_ == 0) + { + single_parent = parent_index; + incoming_edges_ = 1; + return; + } + else if (single_parent != (unsigned) -1) + { + assert (incoming_edges_ == 1); + if (!parents.set (single_parent, 1)) + return; + single_parent = (unsigned) -1; + } + + unsigned *v; + if (parents.has (parent_index, &v)) + { + (*v)++; + incoming_edges_++; + } + else if (parents.set (parent_index, 1)) + incoming_edges_++; } void remove_parent (unsigned parent_index) { - unsigned count = parents.length; - for (unsigned i = 0; i < count; i++) + if (parent_index == single_parent) + { + single_parent = (unsigned) -1; + incoming_edges_--; + return; + } + + unsigned *v; + if (parents.has (parent_index, &v)) { - if (parents.arrayZ[i] != parent_index) continue; - parents.remove_unordered (i); - break; + incoming_edges_--; + if (*v > 1) + (*v)--; + else + parents.del (parent_index); + + if (incoming_edges_ == 1) + { + single_parent = *parents.keys (); + parents.reset (); + } } } @@ -199,20 +272,53 @@ } } - void remap_parents (const hb_vector_t& id_map) + bool remap_parents (const hb_vector_t& id_map) { - unsigned count = parents.length; - for (unsigned i = 0; i < count; i++) - parents.arrayZ[i] = id_map[parents.arrayZ[i]]; + if (single_parent != (unsigned) -1) + { + assert (single_parent < id_map.length); + single_parent = id_map[single_parent]; + return true; + } + + hb_hashmap_t new_parents; + new_parents.alloc (parents.get_population ()); + for (auto _ : parents) + { + assert (_.first < id_map.length); + assert (!new_parents.has (id_map[_.first])); + new_parents.set (id_map[_.first], _.second); + } + + if (parents.in_error() || new_parents.in_error ()) + return false; + + parents = std::move (new_parents); + return true; } void remap_parent (unsigned old_index, unsigned new_index) { - unsigned count = parents.length; - for (unsigned i = 0; i < count; i++) + if (single_parent != (unsigned) -1) { - if (parents.arrayZ[i] == old_index) - parents.arrayZ[i] = new_index; + if (single_parent == old_index) + single_parent = new_index; + return; + } + + const unsigned *pv; + if (parents.has (old_index, &pv)) + { + unsigned v = *pv; + if (!parents.set (new_index, v)) + incoming_edges_ -= v; + parents.del (old_index); + + if (incoming_edges_ == 1) + { + single_parent = *parents.keys (); + parents.reset (); + } } } @@ -368,6 +474,18 @@ return root ().equals (other.root (), *this, other, 0); } + void print () const { + for (int i = vertices_.length - 1; i >= 0; i--) + { + const auto& v = vertices_[i]; + printf("%d: %u [", i, (unsigned int)v.table_size()); + for (const auto &l : v.obj.real_links) { + printf("%u, ", l.objidx); + } + printf("]\n"); + } + } + // Sorts links of all objects in a consistent manner and zeroes all offsets. void normalize () { @@ -419,7 +537,7 @@ link->width = 2; link->objidx = child_id; link->position = (char*) offset - (char*) v.obj.head; - vertices_[child_id].parents.push (parent_id); + vertices_[child_id].add_parent (parent_id); } /* @@ -448,7 +566,8 @@ update_distances (); - hb_priority_queue_t queue; + hb_priority_queue_t queue; + queue.alloc (vertices_.length); hb_vector_t &sorted_graph = vertices_scratch_; if (unlikely (!check_success (sorted_graph.resize (vertices_.length)))) return; hb_vector_t id_map; @@ -465,7 +584,7 @@ { unsigned next_id = queue.pop_minimum().second; - hb_swap (sorted_graph[new_id], vertices_[next_id]); + sorted_graph[new_id] = std::move (vertices_[next_id]); const vertex_t& next = sorted_graph[new_id]; if (unlikely (!check_success(new_id >= 0))) { @@ -493,8 +612,8 @@ check_success (!queue.in_error ()); check_success (!sorted_graph.in_error ()); - remap_all_obj_indices (id_map, &sorted_graph); - hb_swap (vertices_, sorted_graph); + check_success (remap_all_obj_indices (id_map, &sorted_graph)); + vertices_ = std::move (sorted_graph); if (!check_success (new_id == -1)) print_orphaned_nodes (); @@ -605,7 +724,7 @@ { unsigned child_idx = index_for_offset (node_idx, offset); auto& child = vertices_[child_idx]; - for (unsigned p : child.parents) + for (unsigned p : child.parents_iter ()) { if (p != node_idx) { return duplicate (node_idx, child_idx); @@ -688,12 +807,15 @@ subgraph.set (root_idx, wide_parents (root_idx, parents)); find_subgraph (root_idx, subgraph); } + if (subgraph.in_error ()) + return false; unsigned original_root_idx = root_idx (); hb_map_t index_map; bool made_changes = false; for (auto entry : subgraph.iter ()) { + assert (entry.first < vertices_.length); const auto& node = vertices_[entry.first]; unsigned subgraph_incoming_edges = entry.second; @@ -749,10 +871,10 @@ { for (const auto& link : vertices_[node_idx].obj.all_links ()) { - const uint32_t *v; + hb_codepoint_t *v; if (subgraph.has (link.objidx, &v)) { - subgraph.set (link.objidx, *v + 1); + (*v)++; continue; } subgraph.set (link.objidx, 1); @@ -824,7 +946,7 @@ new_link->position = (const char*) new_offset - (const char*) new_v.obj.head; auto& child = vertices_[child_id]; - child.parents.push (new_parent_idx); + child.add_parent (new_parent_idx); old_v.remove_real_link (child_id, old_offset); child.remove_parent (old_parent_idx); @@ -868,18 +990,18 @@ clone->obj.tail = child.obj.tail; clone->distance = child.distance; clone->space = child.space; - clone->parents.reset (); + clone->reset_parents (); unsigned clone_idx = vertices_.length - 2; for (const auto& l : child.obj.real_links) { clone->obj.real_links.push (l); - vertices_[l.objidx].parents.push (clone_idx); + vertices_[l.objidx].add_parent (clone_idx); } for (const auto& l : child.obj.virtual_links) { clone->obj.virtual_links.push (l); - vertices_[l.objidx].parents.push (clone_idx); + vertices_[l.objidx].add_parent (clone_idx); } check_success (!clone->obj.real_links.in_error ()); @@ -1008,13 +1130,13 @@ { update_parents(); - if (root().parents) + if (root().incoming_edges ()) // Root cannot have parents. return false; for (unsigned i = 0; i < root_idx (); i++) { - if (!vertices_[i].parents) + if (!vertices_[i].incoming_edges ()) return false; } return true; @@ -1078,14 +1200,14 @@ parents_invalid = true; update_parents(); - if (root().parents) { + if (root().incoming_edges ()) { DEBUG_MSG (SUBSET_REPACK, nullptr, "Root node has incoming edges."); } for (unsigned i = 0; i < root_idx (); i++) { const auto& v = vertices_[i]; - if (!v.parents) + if (!v.incoming_edges ()) DEBUG_MSG (SUBSET_REPACK, nullptr, "Node %u is orphaned.", i); } } @@ -1117,6 +1239,8 @@ unsigned space_for (unsigned index, unsigned* root = nullptr) const { + loop: + assert (index < vertices_.length); const auto& node = vertices_[index]; if (node.space) { @@ -1125,14 +1249,15 @@ return node.space; } - if (!node.parents) + if (!node.incoming_edges ()) { if (root) *root = index; return 0; } - return space_for (node.parents[0], root); + index = *node.parents_iter (); + goto loop; } void err_other_error () { this->successful = false; } @@ -1156,12 +1281,8 @@ unsigned wide_parents (unsigned node_idx, hb_set_t& parents) const { unsigned count = 0; - hb_set_t visited; - for (unsigned p : vertices_[node_idx].parents) + for (unsigned p : vertices_[node_idx].parents_iter ()) { - if (visited.has (p)) continue; - visited.add (p); - // Only real links can be wide for (const auto& l : vertices_[p].obj.real_links) { @@ -1191,20 +1312,18 @@ unsigned count = vertices_.length; for (unsigned i = 0; i < count; i++) - vertices_.arrayZ[i].parents.reset (); + vertices_.arrayZ[i].reset_parents (); for (unsigned p = 0; p < count; p++) { for (auto& l : vertices_.arrayZ[p].obj.all_links ()) - { - vertices_[l.objidx].parents.push (p); - } + vertices_[l.objidx].add_parent (p); } for (unsigned i = 0; i < count; i++) // parents arrays must be accurate or downstream operations like cycle detection // and sorting won't work correctly. - check_success (!vertices_.arrayZ[i].parents.in_error ()); + check_success (!vertices_.arrayZ[i].in_error ()); parents_invalid = false; } @@ -1248,14 +1367,11 @@ // (such as a fibonacci queue) with a fast decrease priority. unsigned count = vertices_.length; for (unsigned i = 0; i < count; i++) - { - if (i == vertices_.length - 1) - vertices_.arrayZ[i].distance = 0; - else - vertices_.arrayZ[i].distance = hb_int_max (int64_t); - } + vertices_.arrayZ[i].distance = hb_int_max (int64_t); + vertices_.tail ().distance = 0; - hb_priority_queue_t queue; + hb_priority_queue_t queue; + queue.alloc (count); queue.insert (0, vertices_.length - 1); hb_vector_t visited; @@ -1273,15 +1389,15 @@ { if (visited[link.objidx]) continue; - const auto& child = vertices_[link.objidx].obj; + const auto& child = vertices_.arrayZ[link.objidx].obj; unsigned link_width = link.width ? link.width : 4; // treat virtual offsets as 32 bits wide int64_t child_weight = (child.tail - child.head) + - ((int64_t) 1 << (link_width * 8)) * (vertices_[link.objidx].space + 1); + ((int64_t) 1 << (link_width * 8)) * (vertices_.arrayZ[link.objidx].space + 1); int64_t child_distance = next_distance + child_weight; - if (child_distance < vertices_[link.objidx].distance) + if (child_distance < vertices_.arrayZ[link.objidx].distance) { - vertices_[link.objidx].distance = child_distance; + vertices_.arrayZ[link.objidx].distance = child_distance; queue.insert (child_distance, link.objidx); } } @@ -1309,7 +1425,7 @@ unsigned old_idx = link.objidx; link.objidx = new_idx; vertices_[old_idx].remove_parent (parent_idx); - vertices_[new_idx].parents.push (parent_idx); + vertices_[new_idx].add_parent (parent_idx); } /* @@ -1337,18 +1453,20 @@ /* * Updates all objidx's in all links using the provided mapping. */ - void remap_all_obj_indices (const hb_vector_t& id_map, + bool remap_all_obj_indices (const hb_vector_t& id_map, hb_vector_t* sorted_graph) const { unsigned count = sorted_graph->length; for (unsigned i = 0; i < count; i++) { - (*sorted_graph)[i].remap_parents (id_map); + if (!(*sorted_graph)[i].remap_parents (id_map)) + return false; for (auto& link : sorted_graph->arrayZ[i].obj.all_links_writer ()) { link.objidx = id_map[link.objidx]; } } + return true; } /* @@ -1379,7 +1497,7 @@ for (const auto& l : v.obj.all_links ()) find_connected_nodes (l.objidx, targets, visited, connected); - for (unsigned p : v.parents) + for (unsigned p : v.parents_iter ()) find_connected_nodes (p, targets, visited, connected); } diff -Nru harfbuzz-8.0.1/src/graph/gsubgpos-context.hh harfbuzz-8.3.0/src/graph/gsubgpos-context.hh --- harfbuzz-8.0.1/src/graph/gsubgpos-context.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/graph/gsubgpos-context.hh 2023-11-11 14:08:45.000000000 +0000 @@ -40,7 +40,7 @@ graph_t& graph; unsigned lookup_list_index; hb_hashmap_t lookups; - + hb_hashmap_t subtable_to_extension; HB_INTERNAL gsubgpos_graph_context_t (hb_tag_t table_tag_, graph_t& graph_); diff -Nru harfbuzz-8.0.1/src/graph/gsubgpos-graph.hh harfbuzz-8.3.0/src/graph/gsubgpos-graph.hh --- harfbuzz-8.0.1/src/graph/gsubgpos-graph.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/graph/gsubgpos-graph.hh 2023-11-11 14:08:45.000000000 +0000 @@ -76,6 +76,7 @@ { int64_t vertex_len = vertex.obj.tail - vertex.obj.head; if (vertex_len < OT::Lookup::min_size) return false; + hb_barrier (); return vertex_len >= this->get_size (); } @@ -225,7 +226,7 @@ if (is_ext) { unsigned ext_id = create_extension_subtable (c, subtable_id, type); - c.graph.vertices_[subtable_id].parents.push (ext_id); + c.graph.vertices_[subtable_id].add_parent (ext_id); subtable_id = ext_id; } @@ -234,7 +235,7 @@ link->objidx = subtable_id; link->position = (char*) &new_lookup->subTable[offset_index++] - (char*) new_lookup; - c.graph.vertices_[subtable_id].parents.push (this_index); + c.graph.vertices_[subtable_id].add_parent (this_index); } } @@ -299,24 +300,35 @@ unsigned subtable_index) { unsigned type = lookupType; + unsigned ext_index = -1; + unsigned* existing_ext_index = nullptr; + if (c.subtable_to_extension.has(subtable_index, &existing_ext_index)) { + ext_index = *existing_ext_index; + } else { + ext_index = create_extension_subtable(c, subtable_index, type); + c.subtable_to_extension.set(subtable_index, ext_index); + } - unsigned ext_index = create_extension_subtable(c, subtable_index, type); if (ext_index == (unsigned) -1) return false; + auto& subtable_vertex = c.graph.vertices_[subtable_index]; auto& lookup_vertex = c.graph.vertices_[lookup_index]; for (auto& l : lookup_vertex.obj.real_links.writer ()) { - if (l.objidx == subtable_index) + if (l.objidx == subtable_index) { // Change lookup to point at the extension. l.objidx = ext_index; + if (existing_ext_index) + subtable_vertex.remove_parent(lookup_index); + } } // Make extension point at the subtable. auto& ext_vertex = c.graph.vertices_[ext_index]; - auto& subtable_vertex = c.graph.vertices_[subtable_index]; - ext_vertex.parents.push (lookup_index); - subtable_vertex.remap_parent (lookup_index, ext_index); + ext_vertex.add_parent (lookup_index); + if (!existing_ext_index) + subtable_vertex.remap_parent (lookup_index, ext_index); return true; } @@ -340,6 +352,7 @@ { int64_t vertex_len = vertex.obj.tail - vertex.obj.head; if (vertex_len < OT::LookupList::min_size) return false; + hb_barrier (); return vertex_len >= OT::LookupList::item_size * this->len; } }; @@ -353,6 +366,7 @@ GSTAR* gstar = (GSTAR*) r.obj.head; if (!gstar || !gstar->sanitize (r)) return nullptr; + hb_barrier (); return gstar; } @@ -372,6 +386,7 @@ { int64_t len = vertex.obj.tail - vertex.obj.head; if (len < OT::GSUBGPOS::min_size) return false; + hb_barrier (); return len >= get_size (); } diff -Nru harfbuzz-8.0.1/src/graph/markbasepos-graph.hh harfbuzz-8.3.0/src/graph/markbasepos-graph.hh --- harfbuzz-8.0.1/src/graph/markbasepos-graph.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/graph/markbasepos-graph.hh 2023-11-11 14:08:45.000000000 +0000 @@ -40,6 +40,7 @@ { int64_t vertex_len = vertex.obj.tail - vertex.obj.head; if (vertex_len < AnchorMatrix::min_size) return false; + hb_barrier (); return vertex_len >= AnchorMatrix::min_size + OT::Offset16::static_size * class_count * this->rows; @@ -128,6 +129,7 @@ int64_t vertex_len = vertex.obj.tail - vertex.obj.head; unsigned min_size = MarkArray::min_size; if (vertex_len < min_size) return false; + hb_barrier (); return vertex_len >= get_size (); } @@ -217,7 +219,7 @@ const unsigned base_coverage_id = c.graph.index_for_offset (this_index, &baseCoverage); const unsigned base_size = - OT::Layout::GPOS_impl::PairPosFormat1_3::min_size + + OT::Layout::GPOS_impl::MarkBasePosFormat1_2::min_size + MarkArray::min_size + AnchorMatrix::min_size + c.graph.vertices_[base_coverage_id].table_size (); @@ -318,7 +320,9 @@ { hb_vector_t class_to_info; - unsigned class_count= classCount; + unsigned class_count = classCount; + if (!class_count) return class_to_info; + if (!class_to_info.resize (class_count)) return hb_vector_t(); @@ -482,7 +486,7 @@ return ((MarkBasePosFormat1*)(&u.format1))->split_subtables (c, parent_index, this_index); #ifndef HB_NO_BEYOND_64K case 2: HB_FALLTHROUGH; - // Don't split 24bit PairPos's. + // Don't split 24bit MarkBasePos's. #endif default: return hb_vector_t (); @@ -493,6 +497,7 @@ { int64_t vertex_len = vertex.obj.tail - vertex.obj.head; if (vertex_len < u.format.get_size ()) return false; + hb_barrier (); switch (u.format) { case 1: diff -Nru harfbuzz-8.0.1/src/graph/pairpos-graph.hh harfbuzz-8.3.0/src/graph/pairpos-graph.hh --- harfbuzz-8.0.1/src/graph/pairpos-graph.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/graph/pairpos-graph.hh 2023-11-11 14:08:45.000000000 +0000 @@ -42,6 +42,7 @@ int64_t vertex_len = vertex.obj.tail - vertex.obj.head; unsigned min_size = OT::Layout::GPOS_impl::PairPosFormat1_3::min_size; if (vertex_len < min_size) return false; + hb_barrier (); return vertex_len >= min_size + pairSet.get_size () - pairSet.len.get_size(); @@ -198,6 +199,7 @@ size_t vertex_len = vertex.table_size (); unsigned min_size = OT::Layout::GPOS_impl::PairPosFormat2_4::min_size; if (vertex_len < min_size) return false; + hb_barrier (); const unsigned class1_count = class1Count; return vertex_len >= @@ -419,7 +421,7 @@ class_def_link->width = SmallTypes::size; class_def_link->objidx = class_def_2_id; class_def_link->position = 10; - graph.vertices_[class_def_2_id].parents.push (pair_pos_prime_id); + graph.vertices_[class_def_2_id].add_parent (pair_pos_prime_id); graph.duplicate (pair_pos_prime_id, class_def_2_id); return pair_pos_prime_id; @@ -625,6 +627,7 @@ { int64_t vertex_len = vertex.obj.tail - vertex.obj.head; if (vertex_len < u.format.get_size ()) return false; + hb_barrier (); switch (u.format) { case 1: diff -Nru harfbuzz-8.0.1/src/harfbuzz-config.cmake.in harfbuzz-8.3.0/src/harfbuzz-config.cmake.in --- harfbuzz-8.0.1/src/harfbuzz-config.cmake.in 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/harfbuzz-config.cmake.in 2023-11-11 14:08:45.000000000 +0000 @@ -1,69 +1,32 @@ -set(_harfbuzz_libdir "@libdir@") -set(_harfbuzz_includedir "@includedir@") +@PACKAGE_INIT@ -# Extract version information from libtool. -set(_harfbuzz_version_info "@HB_LIBTOOL_VERSION_INFO@") -string(REPLACE ":" ";" _harfbuzz_version_info "${_harfbuzz_version_info}") -list(GET _harfbuzz_version_info 0 - _harfbuzz_current) -list(GET _harfbuzz_version_info 1 - _harfbuzz_revision) -list(GET _harfbuzz_version_info 2 - _harfbuzz_age) -unset(_harfbuzz_version_info) - -if ("@default_library@" MATCHES "static") - set(_harfbuzz_lib_prefix "lib") - set(_harfbuzz_lib_suffix ".a") -else () - if (APPLE) - set(_harfbuzz_lib_prefix "${CMAKE_SHARED_LIBRARY_PREFIX}") - set(_harfbuzz_lib_suffix ".0${CMAKE_SHARED_LIBRARY_SUFFIX}") - elseif (UNIX) - set(_harfbuzz_lib_prefix "${CMAKE_SHARED_LIBRARY_PREFIX}") - set(_harfbuzz_lib_suffix "${CMAKE_SHARED_LIBRARY_SUFFIX}.0.${_harfbuzz_current}.${_harfbuzz_revision}") - elseif (WIN32) - set(_harfbuzz_lib_prefix "${CMAKE_IMPORT_LIBRARY_PREFIX}") - set(_harfbuzz_lib_suffix "${CMAKE_IMPORT_LIBRARY_SUFFIX}") - else () - # Unsupported. - set(harfbuzz_FOUND 0) - endif () -endif () +set_and_check(HARFBUZZ_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") # Add the libraries. -add_library(harfbuzz::harfbuzz SHARED IMPORTED) +add_library(harfbuzz::harfbuzz @HB_LIBRARY_TYPE@ IMPORTED) set_target_properties(harfbuzz::harfbuzz PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_includedir}/harfbuzz" - IMPORTED_LOCATION "${_harfbuzz_libdir}/${_harfbuzz_lib_prefix}harfbuzz${_harfbuzz_lib_suffix}") + INTERFACE_INCLUDE_DIRECTORIES "@PACKAGE_INCLUDE_INSTALL_DIR@" + IMPORTED_LOCATION "@PACKAGE_CMAKE_INSTALL_LIBDIR@/@HB_LIB_PREFIX@harfbuzz@HB_LIB_SUFFIX@") -add_library(harfbuzz::icu SHARED IMPORTED) +add_library(harfbuzz::icu @HB_LIBRARY_TYPE@ IMPORTED) set_target_properties(harfbuzz::icu PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_includedir}/harfbuzz" + INTERFACE_INCLUDE_DIRECTORIES "@PACKAGE_INCLUDE_INSTALL_DIR@" INTERFACE_LINK_LIBRARIES "harfbuzz::harfbuzz" - IMPORTED_LOCATION "${_harfbuzz_libdir}/${_harfbuzz_lib_prefix}harfbuzz-icu${_harfbuzz_lib_suffix}") + IMPORTED_LOCATION "@PACKAGE_CMAKE_INSTALL_LIBDIR@/@HB_LIB_PREFIX@harfbuzz-icu@HB_LIB_SUFFIX@") -add_library(harfbuzz::subset SHARED IMPORTED) +add_library(harfbuzz::subset @HB_LIBRARY_TYPE@ IMPORTED) set_target_properties(harfbuzz::subset PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_includedir}/harfbuzz" + INTERFACE_INCLUDE_DIRECTORIES "@PACKAGE_INCLUDE_INSTALL_DIR@" INTERFACE_LINK_LIBRARIES "harfbuzz::harfbuzz" - IMPORTED_LOCATION "${_harfbuzz_libdir}/${_harfbuzz_lib_prefix}harfbuzz-subset${_harfbuzz_lib_suffix}") + IMPORTED_LOCATION "@PACKAGE_CMAKE_INSTALL_LIBDIR@/@HB_LIB_PREFIX@harfbuzz-subset@HB_LIB_SUFFIX@") # Only add the gobject library if it was built. -set(_harfbuzz_have_gobject "@have_gobject@") -if (_harfbuzz_have_gobject) - add_library(harfbuzz::gobject SHARED IMPORTED) +if (@HB_HAVE_GOBJECT@) + add_library(harfbuzz::gobject @HB_LIBRARY_TYPE@ IMPORTED) set_target_properties(harfbuzz::gobject PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_includedir}/harfbuzz" + INTERFACE_INCLUDE_DIRECTORIES "@PACKAGE_INCLUDE_INSTALL_DIR@" INTERFACE_LINK_LIBRARIES "harfbuzz::harfbuzz" - IMPORTED_LOCATION "${_harfbuzz_libdir}/${_harfbuzz_lib_prefix}harfbuzz-gobject${_harfbuzz_lib_suffix}") + IMPORTED_LOCATION "@PACKAGE_CMAKE_INSTALL_LIBDIR@/@HB_LIB_PREFIX@harfbuzz-gobject@HB_LIB_SUFFIX@") endif () -# Clean out variables we used in our scope. -unset(_harfbuzz_lib_prefix) -unset(_harfbuzz_lib_suffix) -unset(_harfbuzz_current) -unset(_harfbuzz_revision) -unset(_harfbuzz_age) -unset(_harfbuzz_includedir) -unset(_harfbuzz_libdir) +check_required_components(harfbuzz) diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-ankr-table.hh harfbuzz-8.3.0/src/hb-aat-layout-ankr-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-ankr-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-ankr-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -75,6 +75,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version == 0 && c->check_range (this, anchorData) && lookupTable.sanitize (c, this, &(this+anchorData)))); diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-bsln-table.hh harfbuzz-8.3.0/src/hb-aat-layout-bsln-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-bsln-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-bsln-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -123,6 +123,7 @@ TRACE_SANITIZE (this); if (unlikely (!(c->check_struct (this) && defaultBaseline < 32))) return_trace (false); + hb_barrier (); switch (format) { diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-common.hh harfbuzz-8.3.0/src/hb-aat-layout-common.hh --- harfbuzz-8.0.1/src/hb-aat-layout-common.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-common.hh 2023-11-11 14:08:45.000000000 +0000 @@ -191,6 +191,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && first <= last && valuesZ.sanitize (c, base, last - first + 1)); } @@ -199,6 +200,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && first <= last && valuesZ.sanitize (c, base, last - first + 1, std::forward (ds)...)); } @@ -360,6 +362,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && valueSize <= 4 && valueArrayZ.sanitize (c, glyphCount * valueSize)); } @@ -415,6 +418,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 0: return_trace (u.format0.sanitize (c)); case 2: return_trace (u.format2.sanitize (c)); @@ -429,6 +433,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 0: return_trace (u.format0.sanitize (c, base)); case 2: return_trace (u.format2.sanitize (c, base)); @@ -558,6 +563,7 @@ { TRACE_SANITIZE (this); if (unlikely (!(c->check_struct (this) && + hb_barrier () && nClasses >= 4 /* Ensure pre-defined classes fit. */ && classTable.sanitize (c, this)))) return_trace (false); @@ -851,43 +857,41 @@ * * https://github.com/harfbuzz/harfbuzz/issues/2860 */ - const EntryT *wouldbe_entry; - bool safe_to_break = - /* 1. */ - !c->is_actionable (this, entry) - && - /* 2. */ - ( - /* 2a. */ - state == StateTableT::STATE_START_OF_TEXT - || - /* 2b. */ - ( - (entry.flags & context_t::DontAdvance) && - next_state == StateTableT::STATE_START_OF_TEXT - ) - || - /* 2c. */ - ( - wouldbe_entry = &machine.get_entry (StateTableT::STATE_START_OF_TEXT, klass) - , - /* 2c'. */ - !c->is_actionable (this, *wouldbe_entry) - && - /* 2c". */ - ( - next_state == machine.new_state (wouldbe_entry->newState) - && - (entry.flags & context_t::DontAdvance) == (wouldbe_entry->flags & context_t::DontAdvance) - ) - ) - ) - && - /* 3. */ - !c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT)) - ; - if (!safe_to_break && buffer->backtrack_len () && buffer->idx < buffer->len) + const auto is_safe_to_break_extra = [&]() + { + /* 2c. */ + const auto wouldbe_entry = machine.get_entry(StateTableT::STATE_START_OF_TEXT, klass); + + /* 2c'. */ + if (c->is_actionable (this, wouldbe_entry)) + return false; + + /* 2c". */ + return next_state == machine.new_state(wouldbe_entry.newState) + && (entry.flags & context_t::DontAdvance) == (wouldbe_entry.flags & context_t::DontAdvance); + }; + + const auto is_safe_to_break = [&]() + { + /* 1. */ + if (c->is_actionable (this, entry)) + return false; + + /* 2. */ + // This one is meh, I know... + const auto ok = + state == StateTableT::STATE_START_OF_TEXT + || ((entry.flags & context_t::DontAdvance) && next_state == StateTableT::STATE_START_OF_TEXT) + || is_safe_to_break_extra(); + if (!ok) + return false; + + /* 3. */ + return !c->is_actionable (this, machine.get_entry (state, StateTableT::CLASS_END_OF_TEXT)); + }; + + if (!is_safe_to_break () && buffer->backtrack_len () && buffer->idx < buffer->len) buffer->unsafe_to_break_from_outbuffer (buffer->backtrack_len () - 1, buffer->idx + 1); c->transition (this, entry); diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-feat-table.hh harfbuzz-8.3.0/src/hb-aat-layout-feat-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-feat-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-feat-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -138,6 +138,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && (base+settingTableZ).sanitize (c, nSettings))); } @@ -200,6 +201,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version.major == 1 && namesZ.sanitize (c, featureNameCount, this))); } diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-just-table.hh harfbuzz-8.3.0/src/hb-aat-layout-just-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-just-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-just-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -185,6 +185,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); switch (u.header.actionType) { @@ -220,6 +221,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); unsigned int offset = min_size; for (unsigned int i = 0; i < count; i++) @@ -389,6 +391,7 @@ TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version.major == 1 && horizData.sanitize (c, this, this) && vertData.sanitize (c, this, this))); diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-kerx-table.hh harfbuzz-8.3.0/src/hb-aat-layout-kerx-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-kerx-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-kerx-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -54,6 +54,7 @@ unsigned int offset = value; const FWORD *pv = &StructAtOffset (base, offset); if (unlikely (!c->sanitizer.check_array (pv, tupleCount))) return 0; + hb_barrier (); return *pv; } @@ -259,6 +260,7 @@ depth = 0; return; } + hb_barrier (); hb_mask_t kern_mask = c->plan->kern_mask; @@ -389,6 +391,7 @@ kern_idx = Types::offsetToIndex (kern_idx, this, arrayZ.arrayZ); const FWORD *v = &arrayZ[kern_idx]; if (unlikely (!v->sanitize (&c->sanitizer))) return 0; + hb_barrier (); return kerxTupleKern (*v, header.tuple_count (), this, c); } @@ -429,6 +432,7 @@ return_trace (likely (c->check_struct (this) && leftClassTable.sanitize (c, this) && rightClassTable.sanitize (c, this) && + hb_barrier () && c->check_range (this, array))); } @@ -509,6 +513,7 @@ double the ankrActionIndex to get the correct offset here. */ const HBUINT16 *data = &ankrData[entry.data.ankrActionIndex * 2]; if (!c->sanitizer.check_array (data, 2)) return; + hb_barrier (); unsigned int markControlPoint = *data++; unsigned int currControlPoint = *data++; hb_position_t markX = 0; @@ -537,6 +542,7 @@ double the ankrActionIndex to get the correct offset here. */ const HBUINT16 *data = &ankrData[entry.data.ankrActionIndex * 2]; if (!c->sanitizer.check_array (data, 2)) return; + hb_barrier (); unsigned int markAnchorPoint = *data++; unsigned int currAnchorPoint = *data++; const Anchor &markAnchor = c->ankr_table->get_anchor (c->buffer->info[mark].codepoint, @@ -557,6 +563,7 @@ by 4 to get the correct offset for the given action. */ const FWORD *data = (const FWORD *) &ankrData[entry.data.ankrActionIndex * 4]; if (!c->sanitizer.check_array (data, 4)) return; + hb_barrier (); int markX = *data++; int markY = *data++; int currX = *data++; @@ -639,6 +646,7 @@ if (unlikely (hb_unsigned_mul_overflows (offset, sizeof (FWORD32)))) return 0; const FWORD32 *v = &StructAtOffset (&(this+t.array), offset * sizeof (FWORD32)); if (unlikely (!v->sanitize (&c->sanitizer))) return 0; + hb_barrier (); return kerxTupleKern (*v, header.tuple_count (), &(this+vector), c); } else @@ -649,6 +657,7 @@ unsigned int offset = l + r; const FWORD *v = &StructAtOffset (&(this+t.array), offset * sizeof (FWORD)); if (unlikely (!v->sanitize (&c->sanitizer))) return 0; + hb_barrier (); return kerxTupleKern (*v, header.tuple_count (), &(this+vector), c); } } @@ -674,6 +683,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && (is_long () ? ( u.l.rowIndexTable.sanitize (c, this) && @@ -787,9 +797,10 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - if (!u.header.sanitize (c) || - u.header.length <= u.header.static_size || - !c->check_range (this, u.header.length)) + if (!(u.header.sanitize (c) && + hb_barrier () && + u.header.length >= u.header.static_size && + c->check_range (this, u.header.length))) return_trace (false); return_trace (dispatch (c)); @@ -936,9 +947,10 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - if (unlikely (!thiz()->version.sanitize (c) || - (unsigned) thiz()->version < (unsigned) T::minVersion || - !thiz()->tableCount.sanitize (c))) + if (unlikely (!(thiz()->version.sanitize (c) && + hb_barrier () && + (unsigned) thiz()->version >= (unsigned) T::minVersion && + thiz()->tableCount.sanitize (c)))) return_trace (false); typedef typename T::SubTable SubTable; @@ -949,6 +961,7 @@ { if (unlikely (!st->u.header.sanitize (c))) return_trace (false); + hb_barrier (); /* OpenType kern table has 2-byte subtable lengths. That's limiting. * MS implementation also only supports one subtable, of format 0, * anyway. Certain versions of some fonts, like Calibry, contain diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-morx-table.hh harfbuzz-8.3.0/src/hb-aat-layout-morx-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-morx-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-morx-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -259,7 +259,9 @@ unsigned int offset = entry.data.markIndex + buffer->info[mark].codepoint; const UnsizedArrayOf &subs_old = (const UnsizedArrayOf &) subs; replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)]; - if (!replacement->sanitize (&c->sanitizer) || !*replacement) + if (!(replacement->sanitize (&c->sanitizer) && + hb_barrier () && + *replacement)) replacement = nullptr; } if (replacement) @@ -287,7 +289,9 @@ unsigned int offset = entry.data.currentIndex + buffer->info[idx].codepoint; const UnsizedArrayOf &subs_old = (const UnsizedArrayOf &) subs; replacement = &subs_old[Types::wordOffsetToIndex (offset, table, subs_old.arrayZ)]; - if (!replacement->sanitize (&c->sanitizer) || !*replacement) + if (!(replacement->sanitize (&c->sanitizer) && + hb_barrier () && + *replacement)) replacement = nullptr; } if (replacement) @@ -315,7 +319,7 @@ bool has_glyph_classes; unsigned int mark; const ContextualSubtable *table; - const UnsizedListOfOffset16To, HBUINT, false> &subs; + const UnsizedListOfOffset16To, HBUINT, void, false> &subs; }; bool apply (hb_aat_apply_context_t *c) const @@ -336,6 +340,7 @@ unsigned int num_entries = 0; if (unlikely (!machine.sanitize (c, &num_entries))) return_trace (false); + hb_barrier (); if (!Types::extended) return_trace (substitutionTables.sanitize (c, this, 0)); @@ -359,7 +364,7 @@ protected: StateTable machine; - NNOffsetTo, HBUINT, false>, HBUINT> + NNOffsetTo, HBUINT, void, false>, HBUINT> substitutionTables; public: DEFINE_SIZE_STATIC (20); @@ -513,6 +518,7 @@ if (unlikely (!buffer->move_to (match_positions[--cursor % ARRAY_LENGTH (match_positions)]))) return; if (unlikely (!actionData->sanitize (&c->sanitizer))) break; + hb_barrier (); action = *actionData; uint32_t uoffset = action & LigActionOffset; @@ -523,6 +529,7 @@ component_idx = Types::wordOffsetToIndex (component_idx, table, component.arrayZ); const HBUINT16 &componentData = component[component_idx]; if (unlikely (!componentData.sanitize (&c->sanitizer))) break; + hb_barrier (); ligature_idx += componentData; DEBUG_MSG (APPLY, nullptr, "Action store %d last %d", @@ -533,6 +540,7 @@ ligature_idx = Types::offsetToIndex (ligature_idx, table, ligature.arrayZ); const HBGlyphID16 &ligatureData = ligature[ligature_idx]; if (unlikely (!ligatureData.sanitize (&c->sanitizer))) break; + hb_barrier (); hb_codepoint_t lig = ligatureData; DEBUG_MSG (APPLY, nullptr, "Produced ligature %u", lig); @@ -587,6 +595,7 @@ TRACE_SANITIZE (this); /* The rest of array sanitizations are done at run-time. */ return_trace (c->check_struct (this) && machine.sanitize (c) && + hb_barrier () && ligAction && component && ligature); } @@ -765,6 +774,7 @@ unsigned int start = entry.data.markedInsertIndex; const HBGlyphID16 *glyphs = &insertionAction[start]; if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0; + hb_barrier (); bool before = flags & MarkedInsertBefore; @@ -793,6 +803,7 @@ unsigned int start = entry.data.currentInsertIndex; const HBGlyphID16 *glyphs = &insertionAction[start]; if (unlikely (!c->sanitizer.check_array (glyphs, count))) count = 0; + hb_barrier (); bool before = flags & CurrentInsertBefore; @@ -849,6 +860,7 @@ TRACE_SANITIZE (this); /* The rest of array sanitizations are done at run-time. */ return_trace (c->check_struct (this) && machine.sanitize (c) && + hb_barrier () && insertionAction); } @@ -944,9 +956,10 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - if (!length.sanitize (c) || - length <= min_size || - !c->check_range (this, length)) + if (!(length.sanitize (c) && + hb_barrier () && + length >= min_size && + c->check_range (this, length))) return_trace (false); hb_sanitize_with_object_t with (c, this); @@ -1089,9 +1102,10 @@ bool sanitize (hb_sanitize_context_t *c, unsigned int version HB_UNUSED) const { TRACE_SANITIZE (this); - if (!length.sanitize (c) || - length < min_size || - !c->check_range (this, length)) + if (!(length.sanitize (c) && + hb_barrier () && + length >= min_size && + c->check_range (this, length))) return_trace (false); if (!c->check_array (featureZ.arrayZ, featureCount)) @@ -1103,6 +1117,7 @@ { if (!subtable->sanitize (c)) return_trace (false); + hb_barrier (); subtable = &StructAfter> (*subtable); } @@ -1173,7 +1188,10 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - if (!version.sanitize (c) || !version || !chainCount.sanitize (c)) + if (!(version.sanitize (c) && + hb_barrier () && + version && + chainCount.sanitize (c))) return_trace (false); const Chain *chain = &firstChain; @@ -1182,6 +1200,7 @@ { if (!chain->sanitize (c, version)) return_trace (false); + hb_barrier (); chain = &StructAfter> (*chain); } diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-opbd-table.hh harfbuzz-8.3.0/src/hb-aat-layout-opbd-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-opbd-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-opbd-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -144,6 +144,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this) || version.major != 1)) return_trace (false); + hb_barrier (); switch (format) { diff -Nru harfbuzz-8.0.1/src/hb-aat-layout-trak-table.hh harfbuzz-8.3.0/src/hb-aat-layout-trak-table.hh --- harfbuzz-8.0.1/src/hb-aat-layout-trak-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout-trak-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -111,13 +111,13 @@ break; } } - if (!trackTableEntry) return 0.; + if (!trackTableEntry) return 0; /* * Choose size. */ unsigned int sizes = nSizes; - if (!sizes) return 0.; + if (!sizes) return 0; if (sizes == 1) return trackTableEntry->get_value (base, 0, sizes); hb_array_t size_table ((base+sizeTable).arrayZ, sizes); @@ -134,6 +134,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && sizeTable.sanitize (c, base, nSizes) && trackTable.sanitize (c, nTracks, base, nSizes))); } @@ -203,6 +204,7 @@ TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version.major == 1 && horizData.sanitize (c, this, this) && vertData.sanitize (c, this, this))); diff -Nru harfbuzz-8.0.1/src/hb-aat-layout.h harfbuzz-8.3.0/src/hb-aat-layout.h --- harfbuzz-8.0.1/src/hb-aat-layout.h 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-layout.h 2023-11-11 14:08:45.000000000 +0000 @@ -40,7 +40,7 @@ * @HB_AAT_LAYOUT_FEATURE_TYPE_INVALID: Initial, unset feature type * @HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC: [All Typographic Features](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type0) * @HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES: [Ligatures](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type1) - * @HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION: [Cursive Connection](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type2) + * @HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION: [Cursive Connection](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type2) * @HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE: [Letter Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type3) * @HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION: [Vertical Substitution](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type4) * @HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT: [Linguistic Rearrangement](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type5) @@ -88,7 +88,7 @@ HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC = 0, HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES = 1, - HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION = 2, + HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION = 2, HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE = 3, HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION = 4, HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT = 5, diff -Nru harfbuzz-8.0.1/src/hb-aat-ltag-table.hh harfbuzz-8.3.0/src/hb-aat-ltag-table.hh --- harfbuzz-8.0.1/src/hb-aat-ltag-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-aat-ltag-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -46,7 +46,9 @@ bool sanitize (hb_sanitize_context_t *c, const void *base) const { TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && (base+tag).sanitize (c, length)); + return_trace (c->check_struct (this) && + hb_barrier () && + (base+tag).sanitize (c, length)); } protected: @@ -73,6 +75,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version >= 1 && tagRanges.sanitize (c, this))); } diff -Nru harfbuzz-8.0.1/src/hb-algs.hh harfbuzz-8.3.0/src/hb-algs.hh --- harfbuzz-8.0.1/src/hb-algs.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-algs.hh 2023-11-11 14:08:45.000000000 +0000 @@ -283,8 +283,8 @@ // Compression function for Merkle-Damgard construction. // This function is generated using the framework provided. #define mix(h) ( \ - (h) ^= (h) >> 23, \ - (h) *= 0x2127599bf4325c37ULL, \ + (void) ((h) ^= (h) >> 23), \ + (void) ((h) *= 0x2127599bf4325c37ULL), \ (h) ^= (h) >> 47) static inline uint64_t fasthash64(const void *buf, size_t len, uint64_t seed) @@ -367,6 +367,10 @@ hb_enable_if (std::is_integral::value && sizeof (T) > sizeof (uint32_t))> constexpr auto impl (const T& v, hb_priority<1>) const HB_RETURN (uint32_t, (uint32_t) (v ^ (v >> 32)) * 2654435761u /* Knuth's multiplicative hash */) + template ::value)> constexpr auto + impl (const T& v, hb_priority<1>) const HB_RETURN (uint32_t, fasthash32 (std::addressof (v), sizeof (T), 0xf437ffe6)) + template constexpr auto impl (const T& v, hb_priority<0>) const HB_RETURN (uint32_t, std::hash>{} (hb_deref (v))) diff -Nru harfbuzz-8.0.1/src/hb-array.hh harfbuzz-8.3.0/src/hb-array.hh --- harfbuzz-8.0.1/src/hb-array.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-array.hh 2023-11-11 14:08:45.000000000 +0000 @@ -47,6 +47,8 @@ template struct hb_array_t : hb_iter_with_fallback_t, Type&> { + static constexpr bool realloc_move = true; + /* * Constructors. */ diff -Nru harfbuzz-8.0.1/src/hb-atomic.hh harfbuzz-8.3.0/src/hb-atomic.hh --- harfbuzz-8.0.1/src/hb-atomic.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-atomic.hh 2023-11-11 14:08:45.000000000 +0000 @@ -118,12 +118,12 @@ */ #ifndef _hb_compiler_memory_r_barrier #if defined(__ATOMIC_ACQUIRE) // gcc-like -#define _hb_compiler_memory_r_barrier() asm volatile("": : :"memory") +static inline void _hb_compiler_memory_r_barrier () { asm volatile("": : :"memory"); } #elif !defined(_MSC_VER) #include #define _hb_compiler_memory_r_barrier() std::atomic_signal_fence (std::memory_order_acquire) #else -#define _hb_compiler_memory_r_barrier() do {} while (0) +static inline void _hb_compiler_memory_r_barrier () {} #endif #endif @@ -218,5 +218,11 @@ T *v = nullptr; }; +static inline bool hb_barrier () +{ + _hb_compiler_memory_r_barrier (); + return true; +} + #endif /* HB_ATOMIC_HH */ diff -Nru harfbuzz-8.0.1/src/hb-bimap.hh harfbuzz-8.3.0/src/hb-bimap.hh --- harfbuzz-8.0.1/src/hb-bimap.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-bimap.hh 2023-11-11 14:08:45.000000000 +0000 @@ -93,7 +93,7 @@ auto iter () const HB_AUTO_RETURN (+ forw_map.iter()) }; -/* Inremental bimap: only lhs is given, rhs is incrementally assigned */ +/* Incremental bimap: only lhs is given, rhs is incrementally assigned */ struct hb_inc_bimap_t { bool in_error () const { return forw_map.in_error () || back_map.in_error (); } diff -Nru harfbuzz-8.0.1/src/hb-bit-page.hh harfbuzz-8.3.0/src/hb-bit-page.hh --- harfbuzz-8.0.1/src/hb-bit-page.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-bit-page.hh 2023-11-11 14:08:45.000000000 +0000 @@ -97,6 +97,7 @@ static inline constexpr unsigned len () { return ARRAY_LENGTH_CONST (v); } + operator bool () const { return !is_empty (); } bool is_empty () const { if (has_population ()) return !population; @@ -218,6 +219,7 @@ return count; } + bool operator == (const hb_bit_page_t &other) const { return is_equal (other); } bool is_equal (const hb_bit_page_t &other) const { for (unsigned i = 0; i < len (); i++) @@ -225,6 +227,7 @@ return false; return true; } + bool operator <= (const hb_bit_page_t &larger_page) const { return is_subset (larger_page); } bool is_subset (const hb_bit_page_t &larger_page) const { if (has_population () && larger_page.has_population () && diff -Nru harfbuzz-8.0.1/src/hb-bit-set-invertible.hh harfbuzz-8.3.0/src/hb-bit-set-invertible.hh --- harfbuzz-8.0.1/src/hb-bit-set-invertible.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-bit-set-invertible.hh 2023-11-11 14:08:45.000000000 +0000 @@ -359,8 +359,8 @@ typedef hb_codepoint_t __item_t__; hb_codepoint_t __item__ () const { return v; } bool __more__ () const { return v != INVALID; } - void __next__ () { s->next (&v); if (l) l--; } - void __prev__ () { s->previous (&v); } + void __next__ () { s->next (&v); if (likely (l)) l--; } + void __prev__ () { s->previous (&v); l++; } unsigned __len__ () const { return l; } iter_t end () const { return iter_t (*s, false); } bool operator != (const iter_t& o) const diff -Nru harfbuzz-8.0.1/src/hb-bit-set.hh harfbuzz-8.3.0/src/hb-bit-set.hh --- harfbuzz-8.0.1/src/hb-bit-set.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-bit-set.hh 2023-11-11 14:08:45.000000000 +0000 @@ -30,7 +30,6 @@ #include "hb.hh" #include "hb-bit-page.hh" -#include "hb-machinery.hh" struct hb_bit_set_t @@ -183,6 +182,16 @@ return true; } + /* Duplicated here from hb-machinery.hh to avoid including it. */ + template + static inline const Type& StructAtOffsetUnaligned(const void *P, unsigned int offset) + { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" + return * reinterpret_cast ((const char *) P + offset); +#pragma GCC diagnostic pop + } + template void set_array (bool v, const T *array, unsigned int count, unsigned int stride=sizeof(T)) { @@ -904,7 +913,7 @@ /* The extra page_map length is necessary; can't just rely on vector here, * since the next check would be tricked because a null page also has - * major==0, which we can't distinguish from an actualy major==0 page... */ + * major==0, which we can't distinguish from an actually major==0 page... */ unsigned i = last_page_lookup; if (likely (i < page_map.length)) { @@ -938,7 +947,7 @@ /* The extra page_map length is necessary; can't just rely on vector here, * since the next check would be tricked because a null page also has - * major==0, which we can't distinguish from an actualy major==0 page... */ + * major==0, which we can't distinguish from an actually major==0 page... */ unsigned i = last_page_lookup; if (likely (i < page_map.length)) { diff -Nru harfbuzz-8.0.1/src/hb-buffer-deserialize-json.hh harfbuzz-8.3.0/src/hb-buffer-deserialize-json.hh --- harfbuzz-8.0.1/src/hb-buffer-deserialize-json.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-buffer-deserialize-json.hh 2023-11-11 14:08:45.000000000 +0000 @@ -32,7 +32,7 @@ #include "hb.hh" -#line 33 "hb-buffer-deserialize-json.hh" +#line 36 "hb-buffer-deserialize-json.hh" static const unsigned char _deserialize_json_trans_keys[] = { 0u, 0u, 9u, 123u, 9u, 34u, 97u, 117u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 9u, 93u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, @@ -555,12 +555,12 @@ hb_glyph_info_t info = {0}; hb_glyph_position_t pos = {0}; -#line 552 "hb-buffer-deserialize-json.hh" +#line 559 "hb-buffer-deserialize-json.hh" { cs = deserialize_json_start; } -#line 555 "hb-buffer-deserialize-json.hh" +#line 564 "hb-buffer-deserialize-json.hh" { int _slen; int _trans; @@ -772,7 +772,7 @@ *end_ptr = p; } break; -#line 733 "hb-buffer-deserialize-json.hh" +#line 776 "hb-buffer-deserialize-json.hh" } _again: diff -Nru harfbuzz-8.0.1/src/hb-buffer-deserialize-text-glyphs.hh harfbuzz-8.3.0/src/hb-buffer-deserialize-text-glyphs.hh --- harfbuzz-8.0.1/src/hb-buffer-deserialize-text-glyphs.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-buffer-deserialize-text-glyphs.hh 2023-11-11 14:08:45.000000000 +0000 @@ -32,7 +32,7 @@ #include "hb.hh" -#line 33 "hb-buffer-deserialize-text-glyphs.hh" +#line 36 "hb-buffer-deserialize-text-glyphs.hh" static const unsigned char _deserialize_text_glyphs_trans_keys[] = { 0u, 0u, 48u, 57u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 43u, 124u, 9u, 124u, 9u, 124u, @@ -349,12 +349,12 @@ hb_glyph_info_t info = {0}; hb_glyph_position_t pos = {0}; -#line 346 "hb-buffer-deserialize-text-glyphs.hh" +#line 353 "hb-buffer-deserialize-text-glyphs.hh" { cs = deserialize_text_glyphs_start; } -#line 349 "hb-buffer-deserialize-text-glyphs.hh" +#line 358 "hb-buffer-deserialize-text-glyphs.hh" { int _slen; int _trans; @@ -550,7 +550,7 @@ *end_ptr = p; } break; -#line 516 "hb-buffer-deserialize-text-glyphs.hh" +#line 554 "hb-buffer-deserialize-text-glyphs.hh" } _again: @@ -667,7 +667,7 @@ *end_ptr = p; } break; -#line 616 "hb-buffer-deserialize-text-glyphs.hh" +#line 671 "hb-buffer-deserialize-text-glyphs.hh" } } diff -Nru harfbuzz-8.0.1/src/hb-buffer-deserialize-text-unicode.hh harfbuzz-8.3.0/src/hb-buffer-deserialize-text-unicode.hh --- harfbuzz-8.0.1/src/hb-buffer-deserialize-text-unicode.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-buffer-deserialize-text-unicode.hh 2023-11-11 14:08:45.000000000 +0000 @@ -32,7 +32,7 @@ #include "hb.hh" -#line 33 "hb-buffer-deserialize-text-unicode.hh" +#line 36 "hb-buffer-deserialize-text-unicode.hh" static const unsigned char _deserialize_text_unicode_trans_keys[] = { 0u, 0u, 9u, 117u, 43u, 102u, 48u, 102u, 48u, 57u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 0 @@ -197,12 +197,12 @@ hb_glyph_info_t info = {0}; const hb_glyph_position_t pos = {0}; -#line 194 "hb-buffer-deserialize-text-unicode.hh" +#line 201 "hb-buffer-deserialize-text-unicode.hh" { cs = deserialize_text_unicode_start; } -#line 197 "hb-buffer-deserialize-text-unicode.hh" +#line 206 "hb-buffer-deserialize-text-unicode.hh" { int _slen; int _trans; @@ -269,7 +269,7 @@ *end_ptr = p; } break; -#line 256 "hb-buffer-deserialize-text-unicode.hh" +#line 273 "hb-buffer-deserialize-text-unicode.hh" } _again: @@ -307,7 +307,7 @@ *end_ptr = p; } break; -#line 289 "hb-buffer-deserialize-text-unicode.hh" +#line 311 "hb-buffer-deserialize-text-unicode.hh" } } diff -Nru harfbuzz-8.0.1/src/hb-buffer.cc harfbuzz-8.3.0/src/hb-buffer.cc --- harfbuzz-8.0.1/src/hb-buffer.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-buffer.cc 2023-11-11 14:08:45.000000000 +0000 @@ -499,12 +499,12 @@ unsigned int cluster_start, unsigned int cluster_end) { - hb_mask_t not_mask = ~mask; - value &= mask; - if (!mask) return; + hb_mask_t not_mask = ~mask; + value &= mask; + unsigned int count = len; for (unsigned int i = 0; i < count; i++) if (cluster_start <= info[i].cluster && info[i].cluster < cluster_end) @@ -1327,7 +1327,7 @@ * Sets the #hb_codepoint_t that replaces characters not found in * the font during shaping. * - * The not-found glyph defaults to zero, sometimes knows as the + * The not-found glyph defaults to zero, sometimes known as the * ".notdef" glyph. This API allows for differentiating the two. * * Since: 3.1.0 @@ -2076,7 +2076,7 @@ * hb_buffer_diff: * @buffer: a buffer. * @reference: other buffer to compare to. - * @dottedcircle_glyph: glyph id of U+25CC DOTTED CIRCLE, or (hb_codepont_t) -1. + * @dottedcircle_glyph: glyph id of U+25CC DOTTED CIRCLE, or (hb_codepoint_t) -1. * @position_fuzz: allowed absolute difference in position values. * * If dottedcircle_glyph is (hb_codepoint_t) -1 then #HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT diff -Nru harfbuzz-8.0.1/src/hb-buffer.h harfbuzz-8.3.0/src/hb-buffer.h --- harfbuzz-8.0.1/src/hb-buffer.h 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-buffer.h 2023-11-11 14:08:45.000000000 +0000 @@ -99,7 +99,7 @@ * layout, by avoiding re-shaping of each line * after line-breaking, by limiting the * reshaping to a small piece around the - * breaking positin only, even if the breaking + * breaking position only, even if the breaking * position carries the * #HB_GLYPH_FLAG_UNSAFE_TO_BREAK or when * hyphenation or other text transformation diff -Nru harfbuzz-8.0.1/src/hb-buffer.hh harfbuzz-8.3.0/src/hb-buffer.hh --- harfbuzz-8.0.1/src/hb-buffer.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-buffer.hh 2023-11-11 14:08:45.000000000 +0000 @@ -464,13 +464,16 @@ start, end, true); } +#ifndef HB_OPTIMIZE_SIZE + HB_ALWAYS_INLINE +#endif void unsafe_to_concat (unsigned int start = 0, unsigned int end = -1) { if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0)) return; _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT, start, end, - true); + false); } void unsafe_to_break_from_outbuffer (unsigned int start = 0, unsigned int end = -1) { @@ -478,6 +481,9 @@ start, end, true, true); } +#ifndef HB_OPTIMIZE_SIZE + HB_ALWAYS_INLINE +#endif void unsafe_to_concat_from_outbuffer (unsigned int start = 0, unsigned int end = -1) { if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0)) diff -Nru harfbuzz-8.0.1/src/hb-cairo.cc harfbuzz-8.3.0/src/hb-cairo.cc --- harfbuzz-8.0.1/src/hb-cairo.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-cairo.cc 2023-11-11 14:08:45.000000000 +0000 @@ -166,6 +166,32 @@ cairo_restore (cr); } +static hb_bool_t +hb_cairo_paint_color_glyph (hb_paint_funcs_t *pfuncs HB_UNUSED, + void *paint_data, + hb_codepoint_t glyph, + hb_font_t *font, + void *user_data HB_UNUSED) +{ + hb_cairo_context_t *c = (hb_cairo_context_t *) paint_data; + cairo_t *cr = c->cr; + + cairo_save (cr); + + hb_position_t x_scale, y_scale; + hb_font_get_scale (font, &x_scale, &y_scale); + cairo_scale (cr, x_scale, y_scale); + + cairo_glyph_t cairo_glyph = { glyph, 0, 0 }; + cairo_set_scaled_font (cr, c->scaled_font); + cairo_set_font_size (cr, 1); + cairo_show_glyphs (cr, &cairo_glyph, 1); + + cairo_restore (cr); + + return true; +} + static void hb_cairo_push_clip_glyph (hb_paint_funcs_t *pfuncs HB_UNUSED, void *paint_data, @@ -397,6 +423,7 @@ hb_paint_funcs_set_push_transform_func (funcs, hb_cairo_push_transform, nullptr, nullptr); hb_paint_funcs_set_pop_transform_func (funcs, hb_cairo_pop_transform, nullptr, nullptr); + hb_paint_funcs_set_color_glyph_func (funcs, hb_cairo_paint_color_glyph, nullptr, nullptr); hb_paint_funcs_set_push_clip_glyph_func (funcs, hb_cairo_push_clip_glyph, nullptr, nullptr); hb_paint_funcs_set_push_clip_rectangle_func (funcs, hb_cairo_push_clip_rectangle, nullptr, nullptr); hb_paint_funcs_set_pop_clip_func (funcs, hb_cairo_pop_clip, nullptr, nullptr); diff -Nru harfbuzz-8.0.1/src/hb-common.cc harfbuzz-8.3.0/src/hb-common.cc --- harfbuzz-8.0.1/src/hb-common.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-common.cc 2023-11-11 14:08:45.000000000 +0000 @@ -815,7 +815,7 @@ } const char *p = *pp; - while (*pp < end && (ISALNUM(**pp) || **pp == '_')) + while (*pp < end && (**pp != ' ' && **pp != '=' && **pp != '[' && **pp != quote)) (*pp)++; if (p == *pp || *pp - p > 4) diff -Nru harfbuzz-8.0.1/src/hb-config.hh harfbuzz-8.3.0/src/hb-config.hh --- harfbuzz-8.0.1/src/hb-config.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-config.hh 2023-11-11 14:08:45.000000000 +0000 @@ -183,7 +183,7 @@ #endif #ifdef HB_OPTIMIZE_SIZE_MORE -#define HB_NO_OT_LIGATURES_FAST_PATH +#define HB_NO_OT_RULESETS_FAST_PATH #endif #ifdef HB_MINIMIZE_MEMORY_USAGE diff -Nru harfbuzz-8.0.1/src/hb-debug.hh harfbuzz-8.3.0/src/hb-debug.hh --- harfbuzz-8.0.1/src/hb-debug.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-debug.hh 2023-11-11 14:08:45.000000000 +0000 @@ -265,8 +265,9 @@ } } template <> -/*static*/ inline void _hb_warn_no_return (bool returned HB_UNUSED) -{} +/*static*/ inline void _hb_warn_no_return (bool returned HB_UNUSED) {} +template <> +/*static*/ inline void _hb_warn_no_return (bool returned HB_UNUSED) {} template struct hb_auto_trace_t @@ -450,12 +451,26 @@ #define HB_DEBUG_SUBSET_REPACK (HB_DEBUG+0) #endif +#ifndef HB_DEBUG_PAINT +#define HB_DEBUG_PAINT (HB_DEBUG+0) +#endif +#if HB_DEBUG_PAINT +#define TRACE_PAINT(this) \ + HB_UNUSED hb_auto_trace_t trace \ + (&c->debug_depth, c->get_name (), this, HB_FUNC, \ + " ") +#else +#define TRACE_PAINT(this) HB_UNUSED hb_no_trace_t trace +#endif + + #ifndef HB_DEBUG_DISPATCH #define HB_DEBUG_DISPATCH ( \ HB_DEBUG_APPLY + \ HB_DEBUG_SANITIZE + \ HB_DEBUG_SERIALIZE + \ HB_DEBUG_SUBSET + \ + HB_DEBUG_PAINT + \ 0) #endif #if HB_DEBUG_DISPATCH diff -Nru harfbuzz-8.0.1/src/hb-deprecated.h harfbuzz-8.3.0/src/hb-deprecated.h --- harfbuzz-8.0.1/src/hb-deprecated.h 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-deprecated.h 2023-11-11 14:08:45.000000000 +0000 @@ -56,7 +56,7 @@ /** * HB_SCRIPT_CANADIAN_ABORIGINAL: * - * Use #HB_SCRIPT_CANADIAN_SYLLABICS instead: + * Use #HB_SCRIPT_CANADIAN_SYLLABICS instead. * * Deprecated: 0.9.20 */ @@ -301,6 +301,15 @@ hb_draw_funcs_t *dfuncs, void *draw_data); +/** + * HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION: + * + * Use #HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION instead. + * + * Deprecated: 8.3.0 + */ +#define HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION HB_AAT_LAYOUT_FEATURE_TYPE_CURSIVE_CONNECTION + #endif diff -Nru harfbuzz-8.0.1/src/hb-font.cc harfbuzz-8.3.0/src/hb-font.cc --- harfbuzz-8.0.1/src/hb-font.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-font.cc 2023-11-11 14:08:45.000000000 +0000 @@ -1066,7 +1066,7 @@ * @glyph_stride: The stride between successive glyph IDs * * Fetches the nominal glyph IDs for a sequence of Unicode code points. Glyph - * IDs must be returned in a #hb_codepoint_t output parameter. Stopes at the + * IDs must be returned in a #hb_codepoint_t output parameter. Stops at the * first unsupported glyph ID. * * Return value: the number of code points processed diff -Nru harfbuzz-8.0.1/src/hb-ft-colr.hh harfbuzz-8.3.0/src/hb-ft-colr.hh --- harfbuzz-8.0.1/src/hb-ft-colr.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ft-colr.hh 2023-11-11 14:08:45.000000000 +0000 @@ -105,6 +105,8 @@ FT_Color *palette; unsigned palette_index; hb_color_t foreground; + hb_map_t current_glyphs; + hb_map_t current_layers; int depth_left = HB_MAX_NESTING_LEVEL; int edge_count = HB_COLRV1_MAX_EDGE_COUNT; }; @@ -220,9 +222,18 @@ &paint.u.colr_layers.layer_iterator, &other_paint)) { + unsigned i = paint.u.colr_layers.layer_iterator.layer; + + if (unlikely (c->current_layers.has (i))) + continue; + + c->current_layers.add (i); + c->funcs->push_group (c->data); c->recurse (other_paint); c->funcs->pop_group (c->data, HB_PAINT_COMPOSITE_MODE_SRC_OVER); + + c->current_layers.del (i); } } break; @@ -320,8 +331,27 @@ break; case FT_COLR_PAINTFORMAT_COLR_GLYPH: { + hb_codepoint_t gid = paint.u.colr_glyph.glyphID; + + if (unlikely (c->current_glyphs.has (gid))) + return; + + c->current_glyphs.add (gid); + + c->funcs->push_inverse_root_transform (c->data, c->font); + c->ft_font->lock.unlock (); + if (c->funcs->color_glyph (c->data, gid, c->font)) + { + c->ft_font->lock.lock (); + c->funcs->pop_transform (c->data); + c->current_glyphs.del (gid); + return; + } + c->ft_font->lock.lock (); + c->funcs->pop_transform (c->data); + FT_OpaquePaint other_paint = {0}; - if (FT_Get_Color_Glyph_Paint (ft_face, paint.u.colr_glyph.glyphID, + if (FT_Get_Color_Glyph_Paint (ft_face, gid, FT_COLOR_NO_ROOT_TRANSFORM, &other_paint)) { @@ -350,6 +380,8 @@ if (has_clip_box) c->funcs->pop_clip (c->data); + + c->current_glyphs.del (gid); } } break; @@ -474,6 +506,7 @@ hb_ft_paint_context_t c (ft_font, font, paint_funcs, paint_data, palette, palette_index, foreground); + c.current_glyphs.add (gid); bool is_bounded = true; FT_ClipBox clip_box; @@ -497,6 +530,7 @@ hb_ft_paint_context_t ce (ft_font, font, extents_funcs, &extents_data, palette, palette_index, foreground); + ce.current_glyphs.add (gid); ce.funcs->push_root_transform (ce.data, font); ce.recurse (paint); ce.funcs->pop_transform (ce.data); diff -Nru harfbuzz-8.0.1/src/hb-ft.cc harfbuzz-8.3.0/src/hb-ft.cc --- harfbuzz-8.0.1/src/hb-ft.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ft.cc 2023-11-11 14:08:45.000000000 +0000 @@ -225,7 +225,7 @@ * Sets the FT_Load_Glyph load flags for the specified #hb_font_t. * * For more information, see - * https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#ft_load_xxx + * * * This function works with #hb_font_t objects created by * hb_ft_font_create() or hb_ft_font_create_referenced(). @@ -253,7 +253,7 @@ * Fetches the FT_Load_Glyph load flags of the specified #hb_font_t. * * For more information, see - * https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#ft_load_xxx + * * * This function works with #hb_font_t objects created by * hb_ft_font_create() or hb_ft_font_create_referenced(). diff -Nru harfbuzz-8.0.1/src/hb-kern.hh harfbuzz-8.3.0/src/hb-kern.hh --- harfbuzz-8.0.1/src/hb-kern.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-kern.hh 2023-11-11 14:08:45.000000000 +0000 @@ -70,7 +70,7 @@ continue; } - skippy_iter.reset (idx, 1); + skippy_iter.reset (idx); unsigned unsafe_to; if (!skippy_iter.next (&unsafe_to)) { diff -Nru harfbuzz-8.0.1/src/hb-limits.hh harfbuzz-8.3.0/src/hb-limits.hh --- harfbuzz-8.0.1/src/hb-limits.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-limits.hh 2023-11-11 14:08:45.000000000 +0000 @@ -106,7 +106,7 @@ #endif #ifndef HB_COLRV1_MAX_EDGE_COUNT -#define HB_COLRV1_MAX_EDGE_COUNT 1024 +#define HB_COLRV1_MAX_EDGE_COUNT 65536 #endif diff -Nru harfbuzz-8.0.1/src/hb-machinery.hh harfbuzz-8.3.0/src/hb-machinery.hh --- harfbuzz-8.0.1/src/hb-machinery.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-machinery.hh 2023-11-11 14:08:45.000000000 +0000 @@ -131,10 +131,6 @@ unsigned int get_size () const { return (size - (array).min_size + (array).get_size ()); } \ DEFINE_SIZE_ARRAY(size, array) -#define DEFINE_SIZE_MAX(size) \ - DEFINE_INSTANCE_ASSERTION (sizeof (*this) <= (size)) \ - static constexpr unsigned max_size = (size) - /* diff -Nru harfbuzz-8.0.1/src/hb-map.cc harfbuzz-8.3.0/src/hb-map.cc --- harfbuzz-8.0.1/src/hb-map.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-map.cc 2023-11-11 14:08:45.000000000 +0000 @@ -365,7 +365,7 @@ * @key: (out): Key retrieved * @value: (out): Value retrieved * - * Fetches the next key/value paire in @map. + * Fetches the next key/value pair in @map. * * Set @idx to -1 to get started. * diff -Nru harfbuzz-8.0.1/src/hb-map.hh harfbuzz-8.3.0/src/hb-map.hh --- harfbuzz-8.0.1/src/hb-map.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-map.hh 2023-11-11 14:08:45.000000000 +0000 @@ -42,10 +42,34 @@ bool minus_one = false> struct hb_hashmap_t { + static constexpr bool realloc_move = true; + hb_hashmap_t () { init (); } ~hb_hashmap_t () { fini (); } - hb_hashmap_t (const hb_hashmap_t& o) : hb_hashmap_t () { alloc (o.population); hb_copy (o, *this); } + hb_hashmap_t (const hb_hashmap_t& o) : hb_hashmap_t () + { + if (unlikely (!o.mask)) return; + + if (item_t::is_trivial) + { + items = (item_t *) hb_malloc (sizeof (item_t) * (o.mask + 1)); + if (unlikely (!items)) + { + successful = false; + return; + } + population = o.population; + occupancy = o.occupancy; + mask = o.mask; + prime = o.prime; + max_chain_length = o.max_chain_length; + memcpy (items, o.items, sizeof (item_t) * (mask + 1)); + return; + } + + alloc (o.population); hb_copy (o, *this); + } hb_hashmap_t (hb_hashmap_t&& o) : hb_hashmap_t () { hb_swap (*this, o); } hb_hashmap_t& operator= (const hb_hashmap_t& o) { reset (); alloc (o.population); hb_copy (o, *this); return *this; } hb_hashmap_t& operator= (hb_hashmap_t&& o) { hb_swap (*this, o); return *this; } @@ -78,6 +102,10 @@ hash (0), value () {} + // Needed for https://github.com/harfbuzz/harfbuzz/issues/4138 + K& get_key () { return key; } + V& get_value () { return value; } + bool is_used () const { return is_used_; } void set_used (bool is_used) { is_used_ = is_used; } void set_real (bool is_real) { is_real_ = is_real; } @@ -100,12 +128,12 @@ hb_pair_t get_pair_ref() { return hb_pair_t (key, value); } uint32_t total_hash () const - { return (hash * 31) + hb_hash (value); } + { return (hash * 31u) + hb_hash (value); } - static constexpr bool is_trivial = std::is_trivially_constructible::value && - std::is_trivially_destructible::value && - std::is_trivially_constructible::value && - std::is_trivially_destructible::value; + static constexpr bool is_trivial = hb_is_trivially_constructible(K) && + hb_is_trivially_destructible(K) && + hb_is_trivially_constructible(V) && + hb_is_trivially_destructible(V); }; hb_object_header_t header; @@ -205,9 +233,10 @@ old_items[i].hash, std::move (old_items[i].value)); } - if (!item_t::is_trivial) - old_items[i].~item_t (); } + if (!item_t::is_trivial) + for (unsigned int i = 0; i < old_size; i++) + old_items[i].~item_t (); hb_free (old_items); @@ -272,6 +301,11 @@ uint32_t hash = hb_hash (key); return set_with_hash (std::move (key), hash, std::forward (value), overwrite); } + bool add (const K &key) + { + uint32_t hash = hb_hash (key); + return set_with_hash (key, hash, item_t::default_value ()); + } const V& get_with_hash (const K &key, uint32_t hash) const { @@ -389,39 +423,37 @@ auto iter_items () const HB_AUTO_RETURN ( - + hb_iter (items, size ()) + + hb_iter (items, this->size ()) | hb_filter (&item_t::is_real) ) auto iter_ref () const HB_AUTO_RETURN ( - + iter_items () + + this->iter_items () | hb_map (&item_t::get_pair_ref) ) auto iter () const HB_AUTO_RETURN ( - + iter_items () + + this->iter_items () | hb_map (&item_t::get_pair) ) auto keys_ref () const HB_AUTO_RETURN ( - + iter_items () - | hb_map (&item_t::key) + + this->iter_items () + | hb_map (&item_t::get_key) ) auto keys () const HB_AUTO_RETURN ( - + iter_items () - | hb_map (&item_t::key) + + this->keys_ref () | hb_map (hb_ridentity) ) auto values_ref () const HB_AUTO_RETURN ( - + iter_items () - | hb_map (&item_t::value) + + this->iter_items () + | hb_map (&item_t::get_value) ) auto values () const HB_AUTO_RETURN ( - + iter_items () - | hb_map (&item_t::value) + + this->values_ref () | hb_map (hb_ridentity) ) diff -Nru harfbuzz-8.0.1/src/hb-null.hh harfbuzz-8.3.0/src/hb-null.hh --- harfbuzz-8.0.1/src/hb-null.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-null.hh 2023-11-11 14:08:45.000000000 +0000 @@ -37,7 +37,7 @@ /* Global nul-content Null pool. Enlarge as necessary. */ -#define HB_NULL_POOL_SIZE 520 +#define HB_NULL_POOL_SIZE 640 template struct _hb_has_min_size : hb_false_type {}; @@ -49,15 +49,6 @@ #define hb_has_min_size(T) hb_has_min_size::value template -struct _hb_has_max_size : hb_false_type {}; -template -struct _hb_has_max_size> - : hb_true_type {}; -template -using hb_has_max_size = _hb_has_max_size; -#define hb_has_max_size(T) hb_has_max_size::value - -template struct _hb_has_null_size : hb_false_type {}; template struct _hb_has_null_size> @@ -94,7 +85,7 @@ template struct _hb_static_size : hb_integral_constant {}; template -struct _hb_static_size> : hb_integral_constant {}; +struct _hb_static_size> : hb_integral_constant {}; template using hb_static_size = _hb_static_size; #define hb_static_size(T) hb_static_size::value diff -Nru harfbuzz-8.0.1/src/hb-number-parser.hh harfbuzz-8.3.0/src/hb-number-parser.hh --- harfbuzz-8.0.1/src/hb-number-parser.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-number-parser.hh 2023-11-11 14:08:45.000000000 +0000 @@ -31,7 +31,7 @@ #include "hb.hh" -#line 32 "hb-number-parser.hh" +#line 35 "hb-number-parser.hh" static const unsigned char _double_parser_trans_keys[] = { 0u, 0u, 43u, 57u, 46u, 57u, 48u, 57u, 43u, 57u, 48u, 57u, 48u, 101u, 48u, 57u, 46u, 101u, 0 @@ -135,12 +135,12 @@ int cs; -#line 132 "hb-number-parser.hh" +#line 139 "hb-number-parser.hh" { cs = double_parser_start; } -#line 135 "hb-number-parser.hh" +#line 144 "hb-number-parser.hh" { int _slen; int _trans; @@ -198,7 +198,7 @@ exp_overflow = true; } break; -#line 187 "hb-number-parser.hh" +#line 202 "hb-number-parser.hh" } _again: diff -Nru harfbuzz-8.0.1/src/hb-open-file.hh harfbuzz-8.3.0/src/hb-open-file.hh --- harfbuzz-8.0.1/src/hb-open-file.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-open-file.hh 2023-11-11 14:08:45.000000000 +0000 @@ -267,6 +267,7 @@ { TRACE_SANITIZE (this); if (unlikely (!u.header.version.sanitize (c))) return_trace (false); + hb_barrier (); switch (u.header.version.major) { case 2: /* version 2 is compatible with version 1 */ case 1: return_trace (u.version1.sanitize (c)); @@ -302,6 +303,7 @@ TRACE_SANITIZE (this); return_trace (c->check_struct (this) && offset.sanitize (c, data_base) && + hb_barrier () && get_face (data_base).sanitize (c)); } @@ -337,6 +339,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && resourcesZ.sanitize (c, type_base, get_resource_count (), data_base)); @@ -385,6 +388,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && typeList.sanitize (c, this, &(this+typeList), data_base)); @@ -428,6 +432,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && data.sanitize (c, this, dataLen) && map.sanitize (c, this, &(this+data))); } @@ -508,6 +513,7 @@ { TRACE_SANITIZE (this); if (unlikely (!u.tag.sanitize (c))) return_trace (false); + hb_barrier (); switch (u.tag) { case CFFTag: /* All the non-collection tags */ case TrueTag: diff -Nru harfbuzz-8.0.1/src/hb-open-type.hh harfbuzz-8.3.0/src/hb-open-type.hh --- harfbuzz-8.0.1/src/hb-open-type.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-open-type.hh 2023-11-11 14:08:45.000000000 +0000 @@ -309,7 +309,7 @@ static Type *get_crap () { return &Crap (Type); } }; -template +template struct OffsetTo : Offset { using target_t = Type; @@ -335,22 +335,22 @@ } template + hb_enable_if (hb_is_convertible (const Base, const BaseType *))> friend const Type& operator + (const Base &base, const OffsetTo &offset) { return offset ((const void *) base); } template + hb_enable_if (hb_is_convertible (const Base, const BaseType *))> friend const Type& operator + (const OffsetTo &offset, const Base &base) { return offset ((const void *) base); } template + hb_enable_if (hb_is_convertible (Base, BaseType *))> friend Type& operator + (Base &&base, OffsetTo &offset) { return offset ((void *) base); } template + hb_enable_if (hb_is_convertible (Base, BaseType *))> friend Type& operator + (OffsetTo &offset, Base &&base) { return offset ((void *) base); } - template + template bool serialize_subset (hb_subset_context_t *c, const OffsetTo& src, - const void *src_base, Ts&&... ds) + const Base *src_base, Ts&&... ds) { *this = 0; if (src.is_null ()) @@ -414,10 +414,11 @@ const void *src_base, unsigned dst_bias = 0) { return serialize_copy (c, src, src_base, dst_bias, hb_serialize_context_t::Head); } - bool sanitize_shallow (hb_sanitize_context_t *c, const void *base) const + bool sanitize_shallow (hb_sanitize_context_t *c, const BaseType *base) const { TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); //if (unlikely (this->is_null ())) return_trace (true); if (unlikely ((const char *) base + (unsigned) *this < (const char *) base)) return_trace (false); return_trace (true); @@ -427,10 +428,11 @@ #ifndef HB_OPTIMIZE_SIZE HB_ALWAYS_INLINE #endif - bool sanitize (hb_sanitize_context_t *c, const void *base, Ts&&... ds) const + bool sanitize (hb_sanitize_context_t *c, const BaseType *base, Ts&&... ds) const { TRACE_SANITIZE (this); return_trace (sanitize_shallow (c, base) && + hb_barrier () && (this->is_null () || c->dispatch (StructAtOffset (base, *this), std::forward (ds)...) || neuter (c))); @@ -445,14 +447,14 @@ DEFINE_SIZE_STATIC (sizeof (OffsetType)); }; /* Partial specializations. */ -template using Offset16To = OffsetTo; -template using Offset24To = OffsetTo; -template using Offset32To = OffsetTo; - -template using NNOffsetTo = OffsetTo; -template using NNOffset16To = Offset16To; -template using NNOffset24To = Offset24To; -template using NNOffset32To = Offset32To; +template using Offset16To = OffsetTo; +template using Offset24To = OffsetTo; +template using Offset32To = OffsetTo; + +template using NNOffsetTo = OffsetTo; +template using NNOffset16To = Offset16To; +template using NNOffset24To = Offset24To; +template using NNOffset32To = Offset32To; /* @@ -536,6 +538,7 @@ TRACE_SANITIZE (this); if (unlikely (!sanitize_shallow (c, count))) return_trace (false); if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true); + hb_barrier (); for (unsigned int i = 0; i < count; i++) if (unlikely (!c->dispatch (arrayZ[i], std::forward (ds)...))) return_trace (false); @@ -555,17 +558,17 @@ }; /* Unsized array of offset's */ -template -using UnsizedArray16OfOffsetTo = UnsizedArrayOf>; +template +using UnsizedArray16OfOffsetTo = UnsizedArrayOf>; /* Unsized array of offsets relative to the beginning of the array itself. */ -template -struct UnsizedListOfOffset16To : UnsizedArray16OfOffsetTo +template +struct UnsizedListOfOffset16To : UnsizedArray16OfOffsetTo { const Type& operator [] (int i_) const { unsigned int i = (unsigned int) i_; - const OffsetTo *p = &this->arrayZ[i]; + const OffsetTo *p = &this->arrayZ[i]; if (unlikely ((const void *) p < (const void *) this->arrayZ)) return Null (Type); /* Overflowed. */ _hb_compiler_memory_r_barrier (); return this+*p; @@ -573,7 +576,7 @@ Type& operator [] (int i_) { unsigned int i = (unsigned int) i_; - const OffsetTo *p = &this->arrayZ[i]; + const OffsetTo *p = &this->arrayZ[i]; if (unlikely ((const void *) p < (const void *) this->arrayZ)) return Crap (Type); /* Overflowed. */ _hb_compiler_memory_r_barrier (); return this+*p; @@ -583,7 +586,7 @@ bool sanitize (hb_sanitize_context_t *c, unsigned int count, Ts&&... ds) const { TRACE_SANITIZE (this); - return_trace ((UnsizedArray16OfOffsetTo + return_trace ((UnsizedArray16OfOffsetTo ::sanitize (c, count, this, std::forward (ds)...))); } }; @@ -718,30 +721,6 @@ return_trace (out); } - /* Special-case ArrayOf Offset16To structs with a maximum size. */ - template - HB_ALWAYS_INLINE - bool sanitize (hb_sanitize_context_t *c, const Base *base) const - { - TRACE_SANITIZE (this); - - if (unlikely (!sanitize_shallow (c))) return_trace (false); - - unsigned max_len = 65536 + Type::target_t::max_size; - - if (unlikely (c->check_range_fast (base, max_len))) - return_trace (true); - - unsigned int count = len; - for (unsigned int i = 0; i < count; i++) - if (unlikely (!c->dispatch (arrayZ[i], base))) - return_trace (false); - return_trace (true); - } - template HB_ALWAYS_INLINE bool sanitize (hb_sanitize_context_t *c, Ts&&... ds) const @@ -749,6 +728,7 @@ TRACE_SANITIZE (this); if (unlikely (!sanitize_shallow (c))) return_trace (false); if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true); + hb_barrier (); unsigned int count = len; for (unsigned int i = 0; i < count; i++) if (unlikely (!c->dispatch (arrayZ[i], std::forward (ds)...))) @@ -759,7 +739,9 @@ bool sanitize_shallow (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (len.sanitize (c) && c->check_array_sized (arrayZ, len, sizeof (LenType))); + return_trace (len.sanitize (c) && + hb_barrier () && + c->check_array_sized (arrayZ, len, sizeof (LenType))); } public: @@ -890,6 +872,7 @@ TRACE_SANITIZE (this); if (unlikely (!sanitize_shallow (c))) return_trace (false); if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true); + hb_barrier (); unsigned int count = get_length (); for (unsigned int i = 0; i < count; i++) if (unlikely (!c->dispatch (arrayZ[i], std::forward (ds)...))) @@ -902,6 +885,7 @@ { TRACE_SANITIZE (this); return_trace (lenP1.sanitize (c) && + hb_barrier () && (!lenP1 || c->check_array_sized (arrayZ, lenP1 - 1, sizeof (LenType)))); } @@ -943,6 +927,7 @@ TRACE_SANITIZE (this); if (unlikely (!sanitize_shallow (c))) return_trace (false); if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true); + hb_barrier (); unsigned int count = lenM1 + 1; for (unsigned int i = 0; i < count; i++) if (unlikely (!c->dispatch (arrayZ[i], std::forward (ds)...))) @@ -955,6 +940,7 @@ { TRACE_SANITIZE (this); return_trace (lenM1.sanitize (c) && + hb_barrier () && (c->check_array_sized (arrayZ, lenM1 + 1, sizeof (LenType)))); } @@ -1128,6 +1114,7 @@ TRACE_SANITIZE (this); if (unlikely (!sanitize_shallow (c))) return_trace (false); if (!sizeof... (Ts) && hb_is_trivially_copyable(Type)) return_trace (true); + hb_barrier (); unsigned int count = get_length (); for (unsigned int i = 0; i < count; i++) if (unlikely (!(*this)[i].sanitize (c, std::forward (ds)...))) @@ -1154,6 +1141,7 @@ { TRACE_SANITIZE (this); return_trace (header.sanitize (c) && + hb_barrier () && Type::static_size <= header.unitSize && c->check_range (bytesZ.arrayZ, header.nUnits, diff -Nru harfbuzz-8.0.1/src/hb-ot-cff-common.hh harfbuzz-8.3.0/src/hb-ot-cff-common.hh --- harfbuzz-8.0.1/src/hb-ot-cff-common.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-cff-common.hh 2023-11-11 14:08:45.000000000 +0000 @@ -78,7 +78,8 @@ hb_requires (hb_is_iterable (Iterable))> bool serialize (hb_serialize_context_t *c, const Iterable &iterable, - const unsigned *p_data_size = nullptr) + const unsigned *p_data_size = nullptr, + unsigned min_off_size = 0) { TRACE_SERIALIZE (this); unsigned data_size; @@ -88,7 +89,7 @@ total_size (iterable, &data_size); auto it = hb_iter (iterable); - if (unlikely (!serialize_header (c, +it, data_size))) return_trace (false); + if (unlikely (!serialize_header (c, +it, data_size, min_off_size))) return_trace (false); unsigned char *ret = c->allocate_size (data_size, false); if (unlikely (!ret)) return_trace (false); for (const auto &_ : +it) @@ -111,11 +112,13 @@ hb_requires (hb_is_iterator (Iterator))> bool serialize_header (hb_serialize_context_t *c, Iterator it, - unsigned data_size) + unsigned data_size, + unsigned min_off_size = 0) { TRACE_SERIALIZE (this); unsigned off_size = (hb_bit_storage (data_size + 1) + 7) / 8; + off_size = hb_max(min_off_size, off_size); /* serialize CFFIndex header */ if (unlikely (!c->extend_min (this))) return_trace (false); @@ -195,7 +198,7 @@ template - static unsigned total_size (const Iterable &iterable, unsigned *data_size = nullptr) + static unsigned total_size (const Iterable &iterable, unsigned *data_size = nullptr, unsigned min_off_size = 0) { auto it = + hb_iter (iterable); if (!it) @@ -211,6 +214,7 @@ if (data_size) *data_size = total; unsigned off_size = (hb_bit_storage (total + 1) + 7) / 8; + off_size = hb_max(min_off_size, off_size); return min_size + HBUINT8::static_size + (hb_len (it) + 1) * off_size + total; } @@ -274,8 +278,10 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && (count == 0 || /* empty INDEX */ (count < count + 1u && + hb_barrier () && c->check_struct (&offSize) && offSize >= 1 && offSize <= 4 && c->check_array (offsets, offSize, count + 1u) && c->check_array ((const HBUINT8*) data_base (), 1, offset_at (count)))))); @@ -412,6 +418,7 @@ TRACE_SANITIZE (this); if (unlikely (!(c->check_struct (this)))) return_trace (false); + hb_barrier (); if (unlikely (!c->check_array (fds, c->get_num_glyphs ()))) return_trace (false); @@ -438,7 +445,9 @@ bool sanitize (hb_sanitize_context_t *c, const void * /*nullptr*/, unsigned int fdcount) const { TRACE_SANITIZE (this); - return_trace (first < c->get_num_glyphs () && (fd < fdcount)); + return_trace (c->check_struct (this) && + hb_barrier () && + first < c->get_num_glyphs () && (fd < fdcount)); } GID_TYPE first; @@ -456,15 +465,20 @@ bool sanitize (hb_sanitize_context_t *c, unsigned int fdcount) const { TRACE_SANITIZE (this); - if (unlikely (!c->check_struct (this) || !ranges.sanitize (c, nullptr, fdcount) || - (nRanges () == 0) || ranges[0].first != 0)) + if (unlikely (!(c->check_struct (this) && + ranges.sanitize (c, nullptr, fdcount) && + hb_barrier () && + (nRanges () != 0) && + ranges[0].first == 0))) return_trace (false); for (unsigned int i = 1; i < nRanges (); i++) if (unlikely (ranges[i - 1].first >= ranges[i].first)) return_trace (false); - if (unlikely (!sentinel().sanitize (c) || (sentinel() != c->get_num_glyphs ()))) + if (unlikely (!(sentinel().sanitize (c) && + hb_barrier () && + (sentinel() == c->get_num_glyphs ())))) return_trace (false); return_trace (true); @@ -559,6 +573,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); switch (format) { diff -Nru harfbuzz-8.0.1/src/hb-ot-cff1-table.hh harfbuzz-8.3.0/src/hb-ot-cff1-table.hh --- harfbuzz-8.0.1/src/hb-ot-cff1-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-cff1-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -275,6 +275,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); switch (table_format ()) { @@ -376,13 +377,13 @@ bool sanitize (hb_sanitize_context_t *c, unsigned int num_glyphs, unsigned *num_charset_entries) const { TRACE_SANITIZE (this); - if (unlikely (!c->check_struct (this))) - return_trace (false); num_glyphs--; unsigned i; for (i = 0; num_glyphs > 0; i++) { - if (unlikely (!ranges[i].sanitize (c) || (num_glyphs < ranges[i].nLeft + 1))) + if (unlikely (!(ranges[i].sanitize (c) && + hb_barrier () && + (num_glyphs >= ranges[i].nLeft + 1)))) return_trace (false); num_glyphs -= (ranges[i].nLeft + 1); } @@ -615,6 +616,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); switch (format) { @@ -1055,6 +1057,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && likely (version.major == 1)); } @@ -1085,14 +1088,17 @@ nameIndex = &cff->nameIndex (cff); if ((nameIndex == &Null (CFF1NameIndex)) || !nameIndex->sanitize (&sc)) goto fail; + hb_barrier (); topDictIndex = &StructAtOffset (nameIndex, nameIndex->get_size ()); if ((topDictIndex == &Null (CFF1TopDictIndex)) || !topDictIndex->sanitize (&sc) || (topDictIndex->count == 0)) goto fail; + hb_barrier (); { /* parse top dict */ const hb_ubytes_t topDictStr = (*topDictIndex)[0]; if (unlikely (!topDictStr.sanitize (&sc))) goto fail; + hb_barrier (); cff1_top_dict_interp_env_t env (topDictStr); cff1_top_dict_interpreter_t top_interp (env); if (unlikely (!top_interp.interpret (topDict))) goto fail; @@ -1104,6 +1110,7 @@ { charset = &StructAtOffsetOrNull (cff, topDict.CharsetOffset); if (unlikely ((charset == &Null (Charset)) || !charset->sanitize (&sc, &num_charset_entries))) goto fail; + hb_barrier (); } fdCount = 1; @@ -1114,6 +1121,7 @@ if (unlikely ((fdArray == &Null (CFF1FDArray)) || !fdArray->sanitize (&sc) || (fdSelect == &Null (CFF1FDSelect)) || !fdSelect->sanitize (&sc, fdArray->count))) goto fail; + hb_barrier (); fdCount = fdArray->count; } @@ -1134,21 +1142,25 @@ { encoding = &StructAtOffsetOrNull (cff, topDict.EncodingOffset); if (unlikely ((encoding == &Null (Encoding)) || !encoding->sanitize (&sc))) goto fail; + hb_barrier (); } } stringIndex = &StructAtOffset (topDictIndex, topDictIndex->get_size ()); if ((stringIndex == &Null (CFF1StringIndex)) || !stringIndex->sanitize (&sc)) goto fail; + hb_barrier (); globalSubrs = &StructAtOffset (stringIndex, stringIndex->get_size ()); if ((globalSubrs != &Null (CFF1Subrs)) && !globalSubrs->sanitize (&sc)) goto fail; + hb_barrier (); charStrings = &StructAtOffsetOrNull (cff, topDict.charStringsOffset); if ((charStrings == &Null (CFF1CharStrings)) || unlikely (!charStrings->sanitize (&sc))) goto fail; + hb_barrier (); num_glyphs = charStrings->count; if (num_glyphs != sc.get_num_glyphs ()) @@ -1166,6 +1178,7 @@ { hb_ubytes_t fontDictStr = (*fdArray)[i]; if (unlikely (!fontDictStr.sanitize (&sc))) goto fail; + hb_barrier (); cff1_font_dict_values_t *font; cff1_top_dict_interp_env_t env (fontDictStr); cff1_font_dict_interpreter_t font_interp (env); @@ -1177,6 +1190,7 @@ PRIVDICTVAL *priv = &privateDicts[i]; const hb_ubytes_t privDictStr = StructAtOffset (cff, font->privateDictInfo.offset).as_ubytes (font->privateDictInfo.size); if (unlikely (!privDictStr.sanitize (&sc))) goto fail; + hb_barrier (); num_interp_env_t env2 (privDictStr); dict_interpreter_t priv_interp (env2); priv->init (); @@ -1186,6 +1200,7 @@ if (priv->localSubrs != &Null (CFF1Subrs) && unlikely (!priv->localSubrs->sanitize (&sc))) goto fail; + hb_barrier (); } } else /* non-CID */ @@ -1195,6 +1210,7 @@ const hb_ubytes_t privDictStr = StructAtOffset (cff, font->privateDictInfo.offset).as_ubytes (font->privateDictInfo.size); if (unlikely (!privDictStr.sanitize (&sc))) goto fail; + hb_barrier (); num_interp_env_t env (privDictStr); dict_interpreter_t priv_interp (env); priv->init (); @@ -1204,6 +1220,7 @@ if (priv->localSubrs != &Null (CFF1Subrs) && unlikely (!priv->localSubrs->sanitize (&sc))) goto fail; + hb_barrier (); } return; diff -Nru harfbuzz-8.0.1/src/hb-ot-cff2-table.hh harfbuzz-8.3.0/src/hb-ot-cff2-table.hh --- harfbuzz-8.0.1/src/hb-ot-cff2-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-cff2-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -90,6 +90,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); switch (format) { @@ -115,7 +116,10 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (likely (c->check_struct (this)) && c->check_range (&varStore, size) && varStore.sanitize (c)); + return_trace (c->check_struct (this) && + hb_barrier () && + c->check_range (&varStore, size) && + varStore.sanitize (c)); } bool serialize (hb_serialize_context_t *c, const CFF2VariationStore *varStore) @@ -384,6 +388,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && likely (version.major == 2)); } @@ -414,6 +419,7 @@ { /* parse top dict */ hb_ubytes_t topDictStr = (cff2 + cff2->topDict).as_ubytes (cff2->topDictSize); if (unlikely (!topDictStr.sanitize (&sc))) goto fail; + hb_barrier (); num_interp_env_t env (topDictStr); cff2_top_dict_interpreter_t top_interp (env); topDict.init (); @@ -430,6 +436,7 @@ (charStrings == &Null (CFF2CharStrings)) || unlikely (!charStrings->sanitize (&sc)) || (globalSubrs == &Null (CFF2Subrs)) || unlikely (!globalSubrs->sanitize (&sc)) || (fdArray == &Null (CFF2FDArray)) || unlikely (!fdArray->sanitize (&sc)) || + !hb_barrier () || (((fdSelect != &Null (CFF2FDSelect)) && unlikely (!fdSelect->sanitize (&sc, fdArray->count))))) goto fail; @@ -446,6 +453,7 @@ { const hb_ubytes_t fontDictStr = (*fdArray)[i]; if (unlikely (!fontDictStr.sanitize (&sc))) goto fail; + hb_barrier (); cff2_font_dict_values_t *font; num_interp_env_t env (fontDictStr); cff2_font_dict_interpreter_t font_interp (env); @@ -456,6 +464,7 @@ const hb_ubytes_t privDictStr = StructAtOffsetOrNull (cff2, font->privateDictInfo.offset).as_ubytes (font->privateDictInfo.size); if (unlikely (!privDictStr.sanitize (&sc))) goto fail; + hb_barrier (); cff2_priv_dict_interp_env_t env2 (privDictStr); dict_interpreter_t priv_interp (env2); privateDicts[i].init (); @@ -465,6 +474,7 @@ if (privateDicts[i].localSubrs != &Null (CFF2Subrs) && unlikely (!privateDicts[i].localSubrs->sanitize (&sc))) goto fail; + hb_barrier (); } return; diff -Nru harfbuzz-8.0.1/src/hb-ot-cmap-table.hh harfbuzz-8.3.0/src/hb-ot-cmap-table.hh --- harfbuzz-8.0.1/src/hb-ot-cmap-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-cmap-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -556,6 +556,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); if (unlikely (!c->check_range (this, length))) { @@ -742,10 +743,11 @@ unsigned num_glyphs) const { hb_codepoint_t last_end = 0; - for (unsigned i = 0; i < this->groups.len; i++) + unsigned count = this->groups.len; + for (unsigned i = 0; i < count; i++) { - hb_codepoint_t start = this->groups[i].startCharCode; - hb_codepoint_t end = hb_min ((hb_codepoint_t) this->groups[i].endCharCode, + hb_codepoint_t start = this->groups.arrayZ[i].startCharCode; + hb_codepoint_t end = hb_min ((hb_codepoint_t) this->groups.arrayZ[i].endCharCode, (hb_codepoint_t) HB_UNICODE_MAX); if (unlikely (start > end || start < last_end)) { // Range is not in order and is invalid, skip it. @@ -754,7 +756,7 @@ last_end = end; - hb_codepoint_t gid = this->groups[i].glyphID; + hb_codepoint_t gid = this->groups.arrayZ[i].glyphID; if (!gid) { if (T::formatNumber == 13) continue; @@ -767,9 +769,9 @@ mapping->alloc (mapping->get_population () + end - start + 1); + unicodes->add_range (start, end); for (unsigned cp = start; cp <= end; cp++) { - unicodes->add (cp); mapping->set (cp, gid); gid += T::increment; } @@ -1427,6 +1429,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 0: return_trace (u.format0 .sanitize (c)); case 4: return_trace (u.format4 .sanitize (c)); @@ -2060,6 +2063,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && likely (version == 0) && encodingRecord.sanitize (c, this)); } diff -Nru harfbuzz-8.0.1/src/hb-ot-hdmx-table.hh harfbuzz-8.3.0/src/hb-ot-hdmx-table.hh --- harfbuzz-8.0.1/src/hb-ot-hdmx-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-hdmx-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -71,6 +71,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && c->check_range (this, sizeDeviceRecord))); } @@ -152,6 +153,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && !hb_unsigned_mul_overflows (numRecords, sizeDeviceRecord) && min_size + numRecords * sizeDeviceRecord > numRecords * sizeDeviceRecord && sizeDeviceRecord >= DeviceRecord::min_size && diff -Nru harfbuzz-8.0.1/src/hb-ot-head-table.hh harfbuzz-8.3.0/src/hb-ot-head-table.hh --- harfbuzz-8.0.1/src/hb-ot-head-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-head-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -103,6 +103,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && version.major == 1 && magicNumber == 0x5F0F3CF5u); } diff -Nru harfbuzz-8.0.1/src/hb-ot-hhea-table.hh harfbuzz-8.3.0/src/hb-ot-hhea-table.hh --- harfbuzz-8.0.1/src/hb-ot-hhea-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-hhea-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -50,7 +50,9 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && likely (version.major == 1)); + return_trace (c->check_struct (this) && + hb_barrier () && + likely (version.major == 1)); } public: diff -Nru harfbuzz-8.0.1/src/hb-ot-kern-table.hh harfbuzz-8.3.0/src/hb-ot-kern-table.hh --- harfbuzz-8.0.1/src/hb-ot-kern-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-kern-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -79,6 +79,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && c->check_range (kernValueZ, kernValueCount * sizeof (FWORD) + glyphCount * 2 + @@ -147,9 +148,10 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - if (unlikely (!u.header.sanitize (c) || - u.header.length < u.header.min_size || - !c->check_range (this, u.header.length))) return_trace (false); + if (unlikely (!(u.header.sanitize (c) && + hb_barrier () && + u.header.length >= u.header.min_size && + c->check_range (this, u.header.length)))) return_trace (false); return_trace (dispatch (c)); } @@ -337,6 +339,7 @@ { TRACE_SANITIZE (this); if (!u.version32.sanitize (c)) return_trace (false); + hb_barrier (); return_trace (dispatch (c)); } diff -Nru harfbuzz-8.0.1/src/hb-ot-layout-base-table.hh harfbuzz-8.3.0/src/hb-ot-layout-base-table.hh --- harfbuzz-8.0.1/src/hb-ot-layout-base-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-layout-base-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -135,6 +135,7 @@ { TRACE_SANITIZE (this); if (unlikely (!u.format.sanitize (c))) return_trace (false); + hb_barrier (); switch (u.format) { case 1: return_trace (u.format1.sanitize (c)); case 2: return_trace (u.format2.sanitize (c)); @@ -496,6 +497,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && likely (version.major == 1) && hAxis.sanitize (c, this) && vAxis.sanitize (c, this) && diff -Nru harfbuzz-8.0.1/src/hb-ot-layout-common.hh harfbuzz-8.3.0/src/hb-ot-layout-common.hh --- harfbuzz-8.0.1/src/hb-ot-layout-common.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-layout-common.hh 2023-11-11 14:08:45.000000000 +0000 @@ -64,7 +64,7 @@ const hb_hashmap_t *axes_location; hb_hashmap_t> *record_cond_idx_map; hb_hashmap_t *feature_substitutes_map; - bool& insert_catch_all_feature_variation_record; + hb_set_t& catch_all_record_feature_idxes; // not stored in subset_plan hb_set_t *feature_indices; @@ -142,6 +142,8 @@ const hb_map_t *feature_index_map; const hb_hashmap_t *feature_substitutes_map; hb_hashmap_t> *feature_record_cond_idx_map; + const hb_set_t *catch_all_record_feature_idxes; + const hb_hashmap_t> *feature_idx_tag_map; unsigned cur_script_index; unsigned cur_feature_var_record_idx; @@ -164,6 +166,8 @@ feature_index_map = &c_->plan->gsub_features; feature_substitutes_map = &c_->plan->gsub_feature_substitutes_map; feature_record_cond_idx_map = c_->plan->user_axes_location.is_empty () ? nullptr : &c_->plan->gsub_feature_record_cond_idx_map; + catch_all_record_feature_idxes = &c_->plan->gsub_old_features; + feature_idx_tag_map = &c_->plan->gsub_old_feature_idx_tag_map; } else { @@ -172,6 +176,8 @@ feature_index_map = &c_->plan->gpos_features; feature_substitutes_map = &c_->plan->gpos_feature_substitutes_map; feature_record_cond_idx_map = c_->plan->user_axes_location.is_empty () ? nullptr : &c_->plan->gpos_feature_record_cond_idx_map; + catch_all_record_feature_idxes = &c_->plan->gpos_old_features; + feature_idx_tag_map = &c_->plan->gpos_old_feature_idx_tag_map; } } @@ -191,27 +197,15 @@ static return_t default_return_value () { return hb_empty_t (); } hb_set_t *layout_variation_indices; - hb_hashmap_t> *varidx_delta_map; - hb_vector_t *normalized_coords; - const VariationStore *var_store; const hb_set_t *glyph_set; const hb_map_t *gpos_lookups; - float *store_cache; hb_collect_variation_indices_context_t (hb_set_t *layout_variation_indices_, - hb_hashmap_t> *varidx_delta_map_, - hb_vector_t *normalized_coords_, - const VariationStore *var_store_, const hb_set_t *glyph_set_, - const hb_map_t *gpos_lookups_, - float *store_cache_) : + const hb_map_t *gpos_lookups_) : layout_variation_indices (layout_variation_indices_), - varidx_delta_map (varidx_delta_map_), - normalized_coords (normalized_coords_), - var_store (var_store_), glyph_set (glyph_set_), - gpos_lookups (gpos_lookups_), - store_cache (store_cache_) {} + gpos_lookups (gpos_lookups_) {} }; template @@ -466,6 +460,7 @@ { TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); /* This subtable has some "history", if you will. Some earlier versions of * Adobe tools calculated the offset of the FeatureParams subtable from the @@ -832,6 +827,7 @@ TRACE_SANITIZE (this); if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c)))) return_trace (false); + hb_barrier (); /* Some earlier versions of Adobe tools calculated the offset of the * FeatureParams subtable from the beginning of the FeatureList table! @@ -850,6 +846,7 @@ unsigned int orig_offset = featureParams; if (unlikely (!featureParams.sanitize (c, this, closure ? closure->tag : HB_TAG_NONE))) return_trace (false); + hb_barrier (); if (featureParams == 0 && closure && closure->tag == HB_TAG ('s','i','z','e') && @@ -912,7 +909,8 @@ { TRACE_SANITIZE (this); const Record_sanitize_closure_t closure = {tag, base}; - return_trace (c->check_struct (this) && offset.sanitize (c, base, &closure)); + return_trace (c->check_struct (this) && + offset.sanitize (c, base, &closure)); } Tag tag; /* 4-byte Tag identifier */ @@ -1383,10 +1381,20 @@ if (lookupFlag & LookupFlag::UseMarkFilteringSet) { - if (unlikely (!c->serializer->extend (out))) return_trace (false); const HBUINT16 &markFilteringSet = StructAfter (subTable); - HBUINT16 &outMarkFilteringSet = StructAfter (out->subTable); - outMarkFilteringSet = markFilteringSet; + hb_codepoint_t *idx; + if (!c->plan->used_mark_sets_map.has (markFilteringSet, &idx)) + { + unsigned new_flag = lookupFlag; + new_flag &= ~LookupFlag::UseMarkFilteringSet; + out->lookupFlag = new_flag; + } + else + { + if (unlikely (!c->serializer->extend (out))) return_trace (false); + HBUINT16 &outMarkFilteringSet = StructAfter (out->subTable); + outMarkFilteringSet = *idx; + } } // Always keep the lookup even if it's empty. The rest of layout subsetting depends on lookup @@ -1403,6 +1411,7 @@ { TRACE_SANITIZE (this); if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false); + hb_barrier (); unsigned subtables = get_subtable_count (); if (unlikely (!c->visit_subtables (subtables))) return_trace (false); @@ -1418,6 +1427,8 @@ if (unlikely (get_type () == TSubTable::Extension && !c->get_edit_count ())) { + hb_barrier (); + /* The spec says all subtables of an Extension lookup should * have the same type, which shall not be the Extension type * itself (but we already checked for that). @@ -1937,13 +1948,22 @@ { /* Match if there's any glyph that is not listed! */ hb_codepoint_t g = HB_SET_VALUE_INVALID; - for (auto &range : rangeRecord) + hb_codepoint_t last = HB_SET_VALUE_INVALID; + auto it = hb_iter (rangeRecord); + for (auto &range : it) { + if (it->first == last + 1) + { + it++; + continue; + } + if (!glyphs->next (&g)) break; if (g < range.first) return true; g = range.last; + last = g; } if (g != HB_SET_VALUE_INVALID && glyphs->next (&g)) return true; @@ -2159,6 +2179,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 1: return_trace (u.format1.sanitize (c)); case 2: return_trace (u.format2.sanitize (c)); @@ -2291,6 +2312,158 @@ * Item Variation Store */ +/* ported from fonttools (class _Encoding) */ +struct delta_row_encoding_t +{ + /* each byte represents a region, value is one of 0/1/2/4, which means bytes + * needed for this region */ + hb_vector_t chars; + unsigned width = 0; + hb_vector_t columns; + unsigned overhead = 0; + hb_vector_t*> items; + + delta_row_encoding_t () = default; + delta_row_encoding_t (hb_vector_t&& chars_, + const hb_vector_t* row = nullptr) : + delta_row_encoding_t () + + { + chars = std::move (chars_); + width = get_width (); + columns = get_columns (); + overhead = get_chars_overhead (columns); + if (row) items.push (row); + } + + bool is_empty () const + { return !items; } + + static hb_vector_t get_row_chars (const hb_vector_t& row) + { + hb_vector_t ret; + if (!ret.alloc (row.length)) return ret; + + bool long_words = false; + + /* 0/1/2 byte encoding */ + for (int i = row.length - 1; i >= 0; i--) + { + int v = row.arrayZ[i]; + if (v == 0) + ret.push (0); + else if (v > 32767 || v < -32768) + { + long_words = true; + break; + } + else if (v > 127 || v < -128) + ret.push (2); + else + ret.push (1); + } + + if (!long_words) + return ret; + + /* redo, 0/2/4 bytes encoding */ + ret.reset (); + for (int i = row.length - 1; i >= 0; i--) + { + int v = row.arrayZ[i]; + if (v == 0) + ret.push (0); + else if (v > 32767 || v < -32768) + ret.push (4); + else + ret.push (2); + } + return ret; + } + + inline unsigned get_width () + { + unsigned ret = + hb_iter (chars) + | hb_reduce (hb_add, 0u) + ; + return ret; + } + + hb_vector_t get_columns () + { + hb_vector_t cols; + cols.alloc (chars.length); + for (auto v : chars) + { + uint8_t flag = v ? 1 : 0; + cols.push (flag); + } + return cols; + } + + static inline unsigned get_chars_overhead (const hb_vector_t& cols) + { + unsigned c = 4 + 6; // 4 bytes for LOffset, 6 bytes for VarData header + unsigned cols_bit_count = 0; + for (auto v : cols) + if (v) cols_bit_count++; + return c + cols_bit_count * 2; + } + + unsigned get_gain () const + { + int count = items.length; + return hb_max (0, (int) overhead - count); + } + + int gain_from_merging (const delta_row_encoding_t& other_encoding) const + { + int combined_width = 0; + for (unsigned i = 0; i < chars.length; i++) + combined_width += hb_max (chars.arrayZ[i], other_encoding.chars.arrayZ[i]); + + hb_vector_t combined_columns; + combined_columns.alloc (columns.length); + for (unsigned i = 0; i < columns.length; i++) + combined_columns.push (columns.arrayZ[i] | other_encoding.columns.arrayZ[i]); + + int combined_overhead = get_chars_overhead (combined_columns); + int combined_gain = (int) overhead + (int) other_encoding.overhead - combined_overhead + - (combined_width - (int) width) * items.length + - (combined_width - (int) other_encoding.width) * other_encoding.items.length; + + return combined_gain; + } + + static int cmp (const void *pa, const void *pb) + { + const delta_row_encoding_t *a = (const delta_row_encoding_t *)pa; + const delta_row_encoding_t *b = (const delta_row_encoding_t *)pb; + + int gain_a = a->get_gain (); + int gain_b = b->get_gain (); + + if (gain_a != gain_b) + return gain_a - gain_b; + + return (b->chars).as_array ().cmp ((a->chars).as_array ()); + } + + static int cmp_width (const void *pa, const void *pb) + { + const delta_row_encoding_t *a = (const delta_row_encoding_t *)pa; + const delta_row_encoding_t *b = (const delta_row_encoding_t *)pb; + + if (a->width != b->width) + return (int) a->width - (int) b->width; + + return (b->chars).as_array ().cmp ((a->chars).as_array ()); + } + + bool add_row (const hb_vector_t* row) + { return items.push (row); } +}; + struct VarRegionAxis { float evaluate (int coord) const @@ -2325,6 +2498,12 @@ * have to do that at runtime. */ } + bool serialize (hb_serialize_context_t *c) const + { + TRACE_SERIALIZE (this); + return_trace (c->embed (this)); + } + public: F2DOT14 startCoord; F2DOT14 peakCoord; @@ -2379,7 +2558,50 @@ bool sanitize (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && axesZ.sanitize (c, axisCount * regionCount)); + return_trace (c->check_struct (this) && + hb_barrier () && + axesZ.sanitize (c, axisCount * regionCount)); + } + + bool serialize (hb_serialize_context_t *c, + const hb_vector_t& axis_tags, + const hb_vector_t*>& regions) + { + TRACE_SERIALIZE (this); + unsigned axis_count = axis_tags.length; + unsigned region_count = regions.length; + if (!axis_count || !region_count) return_trace (false); + if (unlikely (hb_unsigned_mul_overflows (axis_count * region_count, + VarRegionAxis::static_size))) return_trace (false); + if (unlikely (!c->extend_min (this))) return_trace (false); + axisCount = axis_count; + regionCount = region_count; + + for (unsigned r = 0; r < region_count; r++) + { + const auto& region = regions[r]; + for (unsigned i = 0; i < axis_count; i++) + { + hb_tag_t tag = axis_tags.arrayZ[i]; + VarRegionAxis var_region_rec; + Triple *coords; + if (region->has (tag, &coords)) + { + var_region_rec.startCoord.set_float (coords->minimum); + var_region_rec.peakCoord.set_float (coords->middle); + var_region_rec.endCoord.set_float (coords->maximum); + } + else + { + var_region_rec.startCoord.set_int (0); + var_region_rec.peakCoord.set_int (0); + var_region_rec.endCoord.set_int (0); + } + if (!var_region_rec.serialize (c)) + return_trace (false); + } + } + return_trace (true); } bool serialize (hb_serialize_context_t *c, const VarRegionList *src, const hb_inc_bimap_t ®ion_map) @@ -2402,6 +2624,45 @@ return_trace (true); } + bool get_var_region (unsigned region_index, + const hb_map_t& axes_old_index_tag_map, + hb_hashmap_t& axis_tuples /* OUT */) const + { + if (region_index >= regionCount) return false; + const VarRegionAxis* axis_region = axesZ.arrayZ + (region_index * axisCount); + for (unsigned i = 0; i < axisCount; i++) + { + hb_tag_t *axis_tag; + if (!axes_old_index_tag_map.has (i, &axis_tag)) + return false; + + float min_val = axis_region->startCoord.to_float (); + float def_val = axis_region->peakCoord.to_float (); + float max_val = axis_region->endCoord.to_float (); + + if (def_val != 0.f) + axis_tuples.set (*axis_tag, Triple (min_val, def_val, max_val)); + axis_region++; + } + return !axis_tuples.in_error (); + } + + bool get_var_regions (const hb_map_t& axes_old_index_tag_map, + hb_vector_t>& regions /* OUT */) const + { + if (!regions.alloc (regionCount)) + return false; + + for (unsigned i = 0; i < regionCount; i++) + { + hb_hashmap_t axis_tuples; + if (!get_var_region (i, axes_old_index_tag_map, axis_tuples)) + return false; + regions.push (std::move (axis_tuples)); + } + return !regions.in_error (); + } + unsigned int get_size () const { return min_size + VarRegionAxis::static_size * axisCount * regionCount; } public: @@ -2421,6 +2682,9 @@ unsigned int get_region_index_count () const { return regionIndices.len; } + + unsigned get_region_index (unsigned i) const + { return i >= regionIndices.len ? -1 : regionIndices[i]; } unsigned int get_row_size () const { return (wordCount () + regionIndices.len) * (longWords () ? 2 : 1); } @@ -2490,6 +2754,7 @@ TRACE_SANITIZE (this); return_trace (c->check_struct (this) && regionIndices.sanitize (c) && + hb_barrier () && wordCount () <= regionIndices.len && c->check_range (get_delta_bytes (), itemCount, @@ -2497,6 +2762,81 @@ } bool serialize (hb_serialize_context_t *c, + bool has_long, + const hb_vector_t*>& rows) + { + TRACE_SERIALIZE (this); + if (unlikely (!c->extend_min (this))) return_trace (false); + unsigned row_count = rows.length; + itemCount = row_count; + + int min_threshold = has_long ? -65536 : -128; + int max_threshold = has_long ? +65535 : +127; + enum delta_size_t { kZero=0, kNonWord, kWord }; + hb_vector_t delta_sz; + unsigned num_regions = rows[0]->length; + if (!delta_sz.resize (num_regions)) + return_trace (false); + + unsigned word_count = 0; + for (unsigned r = 0; r < num_regions; r++) + { + for (unsigned i = 0; i < row_count; i++) + { + int delta = rows[i]->arrayZ[r]; + if (delta < min_threshold || delta > max_threshold) + { + delta_sz[r] = kWord; + word_count++; + break; + } + else if (delta != 0) + { + delta_sz[r] = kNonWord; + } + } + } + + /* reorder regions: words and then non-words*/ + unsigned word_index = 0; + unsigned non_word_index = word_count; + hb_map_t ri_map; + for (unsigned r = 0; r < num_regions; r++) + { + if (!delta_sz[r]) continue; + unsigned new_r = (delta_sz[r] == kWord)? word_index++ : non_word_index++; + if (!ri_map.set (new_r, r)) + return_trace (false); + } + + wordSizeCount = word_count | (has_long ? 0x8000u /* LONG_WORDS */ : 0); + + unsigned ri_count = ri_map.get_population (); + regionIndices.len = ri_count; + if (unlikely (!c->extend (this))) return_trace (false); + + for (unsigned r = 0; r < ri_count; r++) + { + hb_codepoint_t *idx; + if (!ri_map.has (r, &idx)) + return_trace (false); + regionIndices[r] = *idx; + } + + HBUINT8 *delta_bytes = get_delta_bytes (); + unsigned row_size = get_row_size (); + for (unsigned int i = 0; i < row_count; i++) + { + for (unsigned int r = 0; r < ri_count; r++) + { + int delta = rows[i]->arrayZ[ri_map[r]]; + set_item_delta_fast (i, r, delta, delta_bytes, row_size); + } + } + return_trace (true); + } + + bool serialize (hb_serialize_context_t *c, const VarData *src, const hb_inc_bimap_t &inner_map, const hb_inc_bimap_t ®ion_map) @@ -2616,13 +2956,15 @@ } } - protected: + public: const HBUINT8 *get_delta_bytes () const { return &StructAfter (regionIndices); } + protected: HBUINT8 *get_delta_bytes () { return &StructAfter (regionIndices); } + public: int32_t get_item_delta_fast (unsigned int item, unsigned int region, const HBUINT8 *delta_bytes, unsigned row_size) const { @@ -2653,6 +2995,7 @@ get_row_size ()); } + protected: void set_item_delta_fast (unsigned int item, unsigned int region, int32_t delta, HBUINT8 *delta_bytes, unsigned row_size) { @@ -2695,6 +3038,7 @@ struct VariationStore { + friend struct item_variations_t; using cache_t = VarRegionList::cache_t; cache_t *create_cache () const @@ -2760,12 +3104,43 @@ TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && format == 1 && regions.sanitize (c, this) && dataSets.sanitize (c, this)); } bool serialize (hb_serialize_context_t *c, + bool has_long, + const hb_vector_t& axis_tags, + const hb_vector_t*>& region_list, + const hb_vector_t& vardata_encodings) + { + TRACE_SERIALIZE (this); +#ifdef HB_NO_VAR + return_trace (false); +#endif + if (unlikely (!c->extend_min (this))) return_trace (false); + + format = 1; + if (!regions.serialize_serialize (c, axis_tags, region_list)) + return_trace (false); + + unsigned num_var_data = vardata_encodings.length; + if (!num_var_data) return_trace (false); + if (unlikely (!c->check_assign (dataSets.len, num_var_data, + HB_SERIALIZE_ERROR_INT_OVERFLOW))) + return_trace (false); + + if (unlikely (!c->extend (dataSets))) return_trace (false); + for (unsigned i = 0; i < num_var_data; i++) + if (!dataSets[i].serialize_serialize (c, has_long, vardata_encodings[i].items)) + return_trace (false); + + return_trace (true); + } + + bool serialize (hb_serialize_context_t *c, const VariationStore *src, const hb_array_t &inner_maps) { @@ -2894,6 +3269,22 @@ return dataSets.len; } + const VarData& get_sub_table (unsigned i) const + { +#ifdef HB_NO_VAR + return Null (VarData); +#endif + return this+dataSets[i]; + } + + const VarRegionList& get_region_list () const + { +#ifdef HB_NO_VAR + return Null (VarRegionList); +#endif + return this+regions; + } + protected: HBUINT16 format; Offset32To regions; @@ -2928,9 +3319,29 @@ const hb_map_t *index_map = &c->plan->axes_index_map; if (index_map->is_empty ()) return_trace (true); - if (!index_map->has (axisIndex)) + const hb_map_t& axes_old_index_tag_map = c->plan->axes_old_index_tag_map; + hb_codepoint_t *axis_tag; + if (!axes_old_index_tag_map.has (axisIndex, &axis_tag) || + !index_map->has (axisIndex)) return_trace (false); + const hb_hashmap_t& normalized_axes_location = c->plan->axes_location; + Triple axis_limit{-1.f, 0.f, 1.f}; + Triple *normalized_limit; + if (normalized_axes_location.has (*axis_tag, &normalized_limit)) + axis_limit = *normalized_limit; + + const hb_hashmap_t& axes_triple_distances = c->plan->axes_triple_distances; + TripleDistances axis_triple_distances{1.f, 1.f}; + TripleDistances *triple_dists; + if (axes_triple_distances.has (*axis_tag, &triple_dists)) + axis_triple_distances = *triple_dists; + + float normalized_min = renormalizeValue (filterRangeMinValue.to_float (), axis_limit, axis_triple_distances, false); + float normalized_max = renormalizeValue (filterRangeMaxValue.to_float (), axis_limit, axis_triple_distances, false); + out->filterRangeMinValue.set_float (normalized_min); + out->filterRangeMaxValue.set_float (normalized_max); + return_trace (c->serializer->check_assign (out->axisIndex, index_map->get (axisIndex), HB_SERIALIZE_ERROR_INT_OVERFLOW)); } @@ -2946,15 +3357,20 @@ hb_tag_t axis_tag = c->axes_index_tag_map->get (axisIndex); Triple axis_range (-1.f, 0.f, 1.f); - if (c->axes_location->has (axis_tag)) - axis_range = c->axes_location->get (axis_tag); + Triple *axis_limit; + bool axis_set_by_user = false; + if (c->axes_location->has (axis_tag, &axis_limit)) + { + axis_range = *axis_limit; + axis_set_by_user = true; + } - int axis_min_val = axis_range.minimum; - int axis_default_val = axis_range.middle; - int axis_max_val = axis_range.maximum; + float axis_min_val = axis_range.minimum; + float axis_default_val = axis_range.middle; + float axis_max_val = axis_range.maximum; - int16_t filter_min_val = filterRangeMinValue.to_int (); - int16_t filter_max_val = filterRangeMaxValue.to_int (); + float filter_min_val = filterRangeMinValue.to_float (); + float filter_max_val = filterRangeMaxValue.to_float (); if (axis_default_val < filter_min_val || axis_default_val > filter_max_val) @@ -2966,20 +3382,20 @@ return DROP_RECORD_WITH_VAR; //condition met and axis pinned, drop the condition - if (c->axes_location->has (axis_tag) && - c->axes_location->get (axis_tag).is_point ()) + if (axis_set_by_user && axis_range.is_point ()) return DROP_COND_WITH_VAR; if (filter_max_val != axis_max_val || filter_min_val != axis_min_val) { // add axisIndex->value into the hashmap so we can check if the record is // unique with variations - hb_codepoint_t val = (filter_max_val << 16) + filter_min_val; + int16_t int_filter_max_val = filterRangeMaxValue.to_int (); + int16_t int_filter_min_val = filterRangeMinValue.to_int (); + hb_codepoint_t val = (int_filter_max_val << 16) + int_filter_min_val; condition_map->set (axisIndex, val); return KEEP_COND_WITH_VAR; } - return KEEP_RECORD_WITH_VAR; } @@ -3038,6 +3454,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 1: return_trace (u.format1.sanitize (c)); default:return_trace (true); @@ -3111,12 +3528,15 @@ } bool subset (hb_subset_context_t *c, - hb_subset_layout_context_t *l) const + hb_subset_layout_context_t *l, + bool insert_catch_all) const { TRACE_SUBSET (this); auto *out = c->serializer->start_embed (this); if (unlikely (!out || !c->serializer->extend_min (out))) return_trace (false); + if (insert_catch_all) return_trace (true); + hb_set_t *retained_cond_set = nullptr; if (l->feature_record_cond_idx_map != nullptr) retained_cond_set = l->feature_record_cond_idx_map->get (l->cur_feature_var_record_idx); @@ -3162,29 +3582,52 @@ } void collect_feature_substitutes_with_variations (hb_hashmap_t *feature_substitutes_map, + hb_set_t& catch_all_record_feature_idxes, const hb_set_t *feature_indices, const void *base) const { if (feature_indices->has (featureIndex)) + { feature_substitutes_map->set (featureIndex, &(base+feature)); + catch_all_record_feature_idxes.add (featureIndex); + } + } + + bool serialize (hb_subset_layout_context_t *c, + unsigned feature_index, + const Feature *f, const Tag *tag) + { + TRACE_SERIALIZE (this); + hb_serialize_context_t *s = c->subset_context->serializer; + if (unlikely (!s->extend_min (this))) return_trace (false); + + uint32_t *new_feature_idx; + if (!c->feature_index_map->has (feature_index, &new_feature_idx)) + return_trace (false); + + if (!s->check_assign (featureIndex, *new_feature_idx, HB_SERIALIZE_ERROR_INT_OVERFLOW)) + return_trace (false); + + s->push (); + bool ret = f->subset (c->subset_context, c, tag); + if (ret) s->add_link (feature, s->pop_pack ()); + else s->pop_discard (); + + return_trace (ret); } bool subset (hb_subset_layout_context_t *c, const void *base) const { TRACE_SUBSET (this); - if (!c->feature_index_map->has (featureIndex) || - c->feature_substitutes_map->has (featureIndex)) { - // Feature that is being substituted is not being retained, so we don't - // need this. + uint32_t *new_feature_index; + if (!c->feature_index_map->has (featureIndex, &new_feature_index)) return_trace (false); - } auto *out = c->subset_context->serializer->embed (this); if (unlikely (!out)) return_trace (false); - out->featureIndex = c->feature_index_map->get (featureIndex); - bool ret = out->feature.serialize_subset (c->subset_context, feature, base, c); - return_trace (ret); + out->featureIndex = *new_feature_index; + return_trace (out->feature.serialize_subset (c->subset_context, feature, base, c)); } bool sanitize (hb_sanitize_context_t *c, const void *base) const @@ -3215,16 +3658,10 @@ } void collect_lookups (const hb_set_t *feature_indexes, - const hb_hashmap_t *feature_substitutes_map, hb_set_t *lookup_indexes /* OUT */) const { + hb_iter (substitutions) | hb_filter (feature_indexes, &FeatureTableSubstitutionRecord::featureIndex) - | hb_filter ([feature_substitutes_map] (const FeatureTableSubstitutionRecord& record) - { - if (feature_substitutes_map == nullptr) return true; - return !feature_substitutes_map->has (record.featureIndex); - }) | hb_apply ([this, lookup_indexes] (const FeatureTableSubstitutionRecord& r) { r.collect_lookups (this, lookup_indexes); }) ; @@ -3249,11 +3686,14 @@ void collect_feature_substitutes_with_variations (hb_collect_feature_substitutes_with_var_context_t *c) const { for (const FeatureTableSubstitutionRecord& record : substitutions) - record.collect_feature_substitutes_with_variations (c->feature_substitutes_map, c->feature_indices, this); + record.collect_feature_substitutes_with_variations (c->feature_substitutes_map, + c->catch_all_record_feature_idxes, + c->feature_indices, this); } bool subset (hb_subset_context_t *c, - hb_subset_layout_context_t *l) const + hb_subset_layout_context_t *l, + bool insert_catch_all) const { TRACE_SUBSET (this); auto *out = c->serializer->start_embed (*this); @@ -3262,6 +3702,22 @@ out->version.major = version.major; out->version.minor = version.minor; + if (insert_catch_all) + { + for (unsigned feature_index : *(l->catch_all_record_feature_idxes)) + { + hb_pair_t *p; + if (!l->feature_idx_tag_map->has (feature_index, &p)) + return_trace (false); + auto *o = out->substitutions.serialize_append (c->serializer); + if (!o->serialize (l, feature_index, + reinterpret_cast (p->first), + reinterpret_cast (p->second))) + return_trace (false); + } + return_trace (true); + } + + substitutions.iter () | hb_apply (subset_record_array (l, &(out->substitutions), this)) ; @@ -3273,6 +3729,7 @@ { TRACE_SANITIZE (this); return_trace (version.sanitize (c) && + hb_barrier () && likely (version.major == 1) && substitutions.sanitize (c, this)); } @@ -3291,10 +3748,9 @@ void collect_lookups (const void *base, const hb_set_t *feature_indexes, - const hb_hashmap_t *feature_substitutes_map, hb_set_t *lookup_indexes /* OUT */) const { - return (base+substitutions).collect_lookups (feature_indexes, feature_substitutes_map, lookup_indexes); + return (base+substitutions).collect_lookups (feature_indexes, lookup_indexes); } void closure_features (const void *base, @@ -3320,14 +3776,15 @@ } } - bool subset (hb_subset_layout_context_t *c, const void *base) const + bool subset (hb_subset_layout_context_t *c, const void *base, + bool insert_catch_all = false) const { TRACE_SUBSET (this); auto *out = c->subset_context->serializer->embed (this); if (unlikely (!out)) return_trace (false); - out->conditions.serialize_subset (c->subset_context, conditions, base, c); - out->substitutions.serialize_subset (c->subset_context, substitutions, base, c); + out->conditions.serialize_subset (c->subset_context, conditions, base, c, insert_catch_all); + out->substitutions.serialize_subset (c->subset_context, substitutions, base, c, insert_catch_all); return_trace (true); } @@ -3386,9 +3843,8 @@ if (c->universal) break; } - if (c->variation_applied && !c->universal && - !c->record_cond_idx_map->is_empty ()) - c->insert_catch_all_feature_variation_record = true; + if (c->universal || c->record_cond_idx_map->is_empty ()) + c->catch_all_record_feature_idxes.reset (); } FeatureVariations* copy (hb_serialize_context_t *c) const @@ -3398,11 +3854,17 @@ } void collect_lookups (const hb_set_t *feature_indexes, - const hb_hashmap_t *feature_substitutes_map, + const hb_hashmap_t> *feature_record_cond_idx_map, hb_set_t *lookup_indexes /* OUT */) const { - for (const FeatureVariationRecord& r : varRecords) - r.collect_lookups (this, feature_indexes, feature_substitutes_map, lookup_indexes); + unsigned count = varRecords.len; + for (unsigned int i = 0; i < count; i++) + { + if (feature_record_cond_idx_map && + !feature_record_cond_idx_map->has (i)) + continue; + varRecords[i].collect_lookups (this, feature_indexes, lookup_indexes); + } } void closure_features (const hb_map_t *lookup_indexes, @@ -3447,6 +3909,13 @@ l->cur_feature_var_record_idx = i; subset_record_array (l, &(out->varRecords), this) (varRecords[i]); } + + if (out->varRecords.len && !l->catch_all_record_feature_idxes->is_empty ()) + { + bool insert_catch_all_record = true; + subset_record_array (l, &(out->varRecords), this, insert_catch_all_record) (varRecords[0]); + } + return_trace (bool (out->varRecords)); } @@ -3454,6 +3923,7 @@ { TRACE_SANITIZE (this); return_trace (version.sanitize (c) && + hb_barrier () && likely (version.major == 1) && varRecords.sanitize (c, this)); } @@ -3583,23 +4053,13 @@ auto *out = c->embed (this); if (unlikely (!out)) return_trace (nullptr); - unsigned new_idx = hb_first (*v); - out->varIdx = new_idx; + if (!c->check_assign (out->varIdx, hb_first (*v), HB_SERIALIZE_ERROR_INT_OVERFLOW)) + return_trace (nullptr); return_trace (out); } void collect_variation_index (hb_collect_variation_indices_context_t *c) const - { - c->layout_variation_indices->add (varIdx); - int delta = 0; - if (c->normalized_coords && c->var_store) - delta = roundf (c->var_store->get_delta (varIdx, c->normalized_coords->arrayZ, - c->normalized_coords->length, c->store_cache)); - - /* set new varidx to HB_OT_LAYOUT_NO_VARIATIONS_INDEX here, will remap - * varidx later*/ - c->varidx_delta_map->set (varIdx, hb_pair_t (HB_OT_LAYOUT_NO_VARIATIONS_INDEX, delta)); - } + { c->layout_variation_indices->add (varIdx); } bool sanitize (hb_sanitize_context_t *c) const { diff -Nru harfbuzz-8.0.1/src/hb-ot-layout-gsubgpos.hh harfbuzz-8.3.0/src/hb-ot-layout-gsubgpos.hh --- harfbuzz-8.0.1/src/hb-ot-layout-gsubgpos.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-layout-gsubgpos.hh 2023-11-11 14:08:45.000000000 +0000 @@ -402,16 +402,6 @@ { struct matcher_t { - matcher_t () : - lookup_props (0), - mask (-1), - ignore_zwnj (false), - ignore_zwj (false), - per_syllable (false), - syllable {0}, - match_func (nullptr), - match_data (nullptr) {} - typedef bool (*match_func_t) (hb_glyph_info_t &info, unsigned value, const void *data); void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; } @@ -470,14 +460,14 @@ } protected: - unsigned int lookup_props; - hb_mask_t mask; - bool ignore_zwnj; - bool ignore_zwj; - bool per_syllable; - uint8_t syllable; - match_func_t match_func; - const void *match_data; + unsigned int lookup_props = 0; + hb_mask_t mask = -1; + bool ignore_zwnj = false; + bool ignore_zwj = false; + bool per_syllable = false; + uint8_t syllable = 0; + match_func_t match_func = nullptr; + const void *match_data = nullptr; }; struct skipping_iterator_t @@ -528,11 +518,9 @@ #ifndef HB_OPTIMIZE_SIZE HB_ALWAYS_INLINE #endif - void reset (unsigned int start_index_, - unsigned int num_items_) + void reset (unsigned int start_index_) { idx = start_index_; - num_items = num_items_; end = c->buffer->len; matcher.set_syllable (start_index_ == c->buffer->idx ? c->buffer->cur().syllable () : 0); } @@ -540,17 +528,14 @@ #ifndef HB_OPTIMIZE_SIZE HB_ALWAYS_INLINE #endif - void reset_fast (unsigned int start_index_, - unsigned int num_items_) + void reset_fast (unsigned int start_index_) { // Doesn't set end or syllable. Used by GPOS which doesn't care / change. idx = start_index_; - num_items = num_items_; } void reject () { - num_items++; backup_glyph_data (); } @@ -593,12 +578,7 @@ #endif bool next (unsigned *unsafe_to = nullptr) { - assert (num_items > 0); - /* The alternate condition below is faster at string boundaries, - * but produces subpar "unsafe-to-concat" values. */ - signed stop = (signed) end - (signed) num_items; - if (c->buffer->flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) - stop = (signed) end - 1; + const signed stop = (signed) end - 1; while ((signed) idx < stop) { idx++; @@ -606,7 +586,6 @@ { case MATCH: { - num_items--; advance_glyph_data (); return true; } @@ -629,12 +608,7 @@ #endif bool prev (unsigned *unsafe_from = nullptr) { - assert (num_items > 0); - /* The alternate condition below is faster at string boundaries, - * but produces subpar "unsafe-to-concat" values. */ - unsigned stop = num_items - 1; - if (c->buffer->flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) - stop = 1 - 1; + const unsigned stop = 0; while (idx > stop) { idx--; @@ -642,7 +616,6 @@ { case MATCH: { - num_items--; advance_glyph_data (); return true; } @@ -661,6 +634,7 @@ return false; } + HB_ALWAYS_INLINE hb_codepoint_t get_glyph_data () { @@ -671,6 +645,7 @@ #endif return 0; } + HB_ALWAYS_INLINE void advance_glyph_data () { @@ -699,7 +674,6 @@ const HBUINT24 *match_glyph_data24; #endif - unsigned int num_items; unsigned int end; }; @@ -826,7 +800,7 @@ * match_props has the set index. */ if (match_props & LookupFlag::UseMarkFilteringSet) - return gdef.mark_set_covers (match_props >> 16, glyph); + return gdef_accel.mark_set_covers (match_props >> 16, glyph); /* The second byte of match_props has the meaning * "ignore marks of attachment type different than @@ -1198,6 +1172,10 @@ } +static inline bool match_always (hb_glyph_info_t &info HB_UNUSED, unsigned value HB_UNUSED, const void *data HB_UNUSED) +{ + return true; +} static inline bool match_glyph (hb_glyph_info_t &info, unsigned value, const void *data HB_UNUSED) { return info.codepoint == value; @@ -1218,6 +1196,28 @@ info.syllable() = klass; return klass == value; } +static inline bool match_class_cached1 (hb_glyph_info_t &info, unsigned value, const void *data) +{ + unsigned klass = info.syllable() & 0x0F; + if (klass < 15) + return klass == value; + const ClassDef &class_def = *reinterpret_cast(data); + klass = class_def.get_class (info.codepoint); + if (likely (klass < 15)) + info.syllable() = (info.syllable() & 0xF0) | klass; + return klass == value; +} +static inline bool match_class_cached2 (hb_glyph_info_t &info, unsigned value, const void *data) +{ + unsigned klass = (info.syllable() & 0xF0) >> 4; + if (klass < 15) + return klass == value; + const ClassDef &class_def = *reinterpret_cast(data); + klass = class_def.get_class (info.codepoint); + if (likely (klass < 15)) + info.syllable() = (info.syllable() & 0x0F) | (klass << 4); + return klass == value; +} static inline bool match_coverage (hb_glyph_info_t &info, unsigned value, const void *data) { Offset16To coverage; @@ -1265,7 +1265,7 @@ hb_buffer_t *buffer = c->buffer; hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; - skippy_iter.reset (buffer->idx, count - 1); + skippy_iter.reset (buffer->idx); skippy_iter.set_match_func (match_func, match_data); skippy_iter.set_glyph_data (input); @@ -1505,7 +1505,7 @@ TRACE_APPLY (nullptr); hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context; - skippy_iter.reset (c->buffer->backtrack_len (), count); + skippy_iter.reset (c->buffer->backtrack_len ()); skippy_iter.set_match_func (match_func, match_data); skippy_iter.set_glyph_data (backtrack); @@ -1538,7 +1538,7 @@ TRACE_APPLY (nullptr); hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context; - skippy_iter.reset (start_index - 1, count); + skippy_iter.reset (start_index - 1); skippy_iter.set_match_func (match_func, match_data); skippy_iter.set_glyph_data (lookahead); @@ -1913,12 +1913,13 @@ } template -static inline bool context_apply_lookup (hb_ot_apply_context_t *c, - unsigned int inputCount, /* Including the first glyph (not matched) */ - const HBUINT input[], /* Array of input values--start with second glyph */ - unsigned int lookupCount, - const LookupRecord lookupRecord[], - const ContextApplyLookupContext &lookup_context) +HB_ALWAYS_INLINE +static bool context_apply_lookup (hb_ot_apply_context_t *c, + unsigned int inputCount, /* Including the first glyph (not matched) */ + const HBUINT input[], /* Array of input values--start with second glyph */ + unsigned int lookupCount, + const LookupRecord lookupRecord[], + const ContextApplyLookupContext &lookup_context) { unsigned match_end = 0; unsigned match_positions[HB_MAX_CONTEXT_LENGTH]; @@ -1944,6 +1945,9 @@ template struct Rule { + template + friend struct RuleSet; + bool intersects (const hb_set_t *glyphs, ContextClosureLookupContext &lookup_context) const { return context_intersects (glyphs, @@ -2047,6 +2051,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && c->check_range (inputZ.arrayZ, inputZ.item_size * (inputCount ? inputCount - 1 : 0) + LookupRecord::static_size * lookupCount)); @@ -2065,7 +2070,6 @@ * design order */ public: DEFINE_SIZE_ARRAY (4, inputZ); - DEFINE_SIZE_MAX (65536 * (Types::HBUINT::static_size + LookupRecord::static_size)); }; template @@ -2131,13 +2135,105 @@ const ContextApplyLookupContext &lookup_context) const { TRACE_APPLY (this); - return_trace ( - + hb_iter (rule) - | hb_map (hb_add (this)) - | hb_map ([&] (const Rule &_) { return _.apply (c, lookup_context); }) - | hb_any - ) - ; + + unsigned num_rules = rule.len; + +#ifndef HB_NO_OT_RULESETS_FAST_PATH + if (HB_OPTIMIZE_SIZE_VAL || num_rules <= 4) +#endif + { + slow: + return_trace ( + + hb_iter (rule) + | hb_map (hb_add (this)) + | hb_map ([&] (const Rule &_) { return _.apply (c, lookup_context); }) + | hb_any + ) + ; + } + + /* This version is optimized for speed by matching the first & second + * components of the rule here, instead of calling into the matching code. + * + * Replicated from LigatureSet::apply(). */ + + hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; + skippy_iter.reset (c->buffer->idx); + skippy_iter.set_match_func (match_always, nullptr); + skippy_iter.set_glyph_data ((HBUINT16 *) nullptr); + unsigned unsafe_to = (unsigned) -1, unsafe_to1 = 0, unsafe_to2 = 0; + hb_glyph_info_t *first = nullptr, *second = nullptr; + bool matched = skippy_iter.next (); + if (likely (matched)) + { + first = &c->buffer->info[skippy_iter.idx]; + unsafe_to = skippy_iter.idx + 1; + + if (skippy_iter.may_skip (c->buffer->info[skippy_iter.idx])) + { + /* Can't use the fast path if eg. the next char is a default-ignorable + * or other skippable. */ + goto slow; + } + } + else + { + /* Failed to match a next glyph. Only try applying rules that have + * no further input. */ + return_trace ( + + hb_iter (rule) + | hb_map (hb_add (this)) + | hb_filter ([&] (const Rule &_) { return _.inputCount <= 1; }) + | hb_map ([&] (const Rule &_) { return _.apply (c, lookup_context); }) + | hb_any + ) + ; + } + matched = skippy_iter.next (); + if (likely (matched && !skippy_iter.may_skip (c->buffer->info[skippy_iter.idx]))) + { + second = &c->buffer->info[skippy_iter.idx]; + unsafe_to2 = skippy_iter.idx + 1; + } + + auto match_input = lookup_context.funcs.match; + auto *input_data = lookup_context.match_data; + for (unsigned int i = 0; i < num_rules; i++) + { + const auto &r = this+rule.arrayZ[i]; + + const auto &input = r.inputZ; + + if (r.inputCount <= 1 || + (!match_input || + match_input (*first, input.arrayZ[0], input_data))) + { + if (!second || + (r.inputCount <= 2 || + (!match_input || + match_input (*second, input.arrayZ[1], input_data))) + ) + { + if (r.apply (c, lookup_context)) + { + if (unsafe_to != (unsigned) -1) + c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to); + return_trace (true); + } + } + else + unsafe_to = unsafe_to2; + } + else + { + if (unsafe_to == (unsigned) -1) + unsafe_to = unsafe_to1; + } + } + if (likely (unsafe_to != (unsigned) -1)) + c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to); + + return_trace (false); } bool subset (hb_subset_context_t *c, @@ -2516,11 +2612,7 @@ if (cached && c->buffer->cur().syllable() < 255) index = c->buffer->cur().syllable (); else - { index = class_def.get_class (c->buffer->cur().codepoint); - if (cached && index < 255) - c->buffer->cur().syllable() = index; - } const RuleSet &rule_set = this+ruleSet[index]; return_trace (rule_set.apply (c, lookup_context)); } @@ -2735,6 +2827,7 @@ { TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); unsigned int count = glyphCount; if (unlikely (!count)) return_trace (false); /* We want to access coverageZ[0] freely. */ if (unlikely (!c->check_array (coverageZ.arrayZ, count))) return_trace (false); @@ -2914,16 +3007,17 @@ } template -static inline bool chain_context_apply_lookup (hb_ot_apply_context_t *c, - unsigned int backtrackCount, - const HBUINT backtrack[], - unsigned int inputCount, /* Including the first glyph (not matched) */ - const HBUINT input[], /* Array of input values--start with second glyph */ - unsigned int lookaheadCount, - const HBUINT lookahead[], - unsigned int lookupCount, - const LookupRecord lookupRecord[], - const ChainContextApplyLookupContext &lookup_context) +HB_ALWAYS_INLINE +static bool chain_context_apply_lookup (hb_ot_apply_context_t *c, + unsigned int backtrackCount, + const HBUINT backtrack[], + unsigned int inputCount, /* Including the first glyph (not matched) */ + const HBUINT input[], /* Array of input values--start with second glyph */ + unsigned int lookaheadCount, + const HBUINT lookahead[], + unsigned int lookupCount, + const LookupRecord lookupRecord[], + const ChainContextApplyLookupContext &lookup_context) { unsigned end_index = c->buffer->idx; unsigned match_end = 0; @@ -2962,6 +3056,9 @@ template struct ChainRule { + template + friend struct ChainRuleSet; + bool intersects (const hb_set_t *glyphs, ChainContextClosureLookupContext &lookup_context) const { const auto &input = StructAfter (backtrack); @@ -3124,10 +3221,13 @@ TRACE_SANITIZE (this); /* Hyper-optimized sanitized because this is really hot. */ if (unlikely (!backtrack.len.sanitize (c))) return_trace (false); + hb_barrier (); const auto &input = StructAfter (backtrack); if (unlikely (!input.lenP1.sanitize (c))) return_trace (false); + hb_barrier (); const auto &lookahead = StructAfter (input); if (unlikely (!lookahead.len.sanitize (c))) return_trace (false); + hb_barrier (); const auto &lookup = StructAfter (lookahead); return_trace (likely (lookup.sanitize (c))); } @@ -3148,7 +3248,6 @@ * design order) */ public: DEFINE_SIZE_MIN (8); - DEFINE_SIZE_MAX (65536 * (3 * Types::HBUINT::static_size + LookupRecord::static_size)); }; template @@ -3211,13 +3310,119 @@ const ChainContextApplyLookupContext &lookup_context) const { TRACE_APPLY (this); - return_trace ( - + hb_iter (rule) - | hb_map (hb_add (this)) - | hb_map ([&] (const ChainRule &_) { return _.apply (c, lookup_context); }) - | hb_any - ) - ; + + unsigned num_rules = rule.len; + +#ifndef HB_NO_OT_RULESETS_FAST_PATH + if (HB_OPTIMIZE_SIZE_VAL || num_rules <= 4) +#endif + { + slow: + return_trace ( + + hb_iter (rule) + | hb_map (hb_add (this)) + | hb_map ([&] (const ChainRule &_) { return _.apply (c, lookup_context); }) + | hb_any + ) + ; + } + + /* This version is optimized for speed by matching the first & second + * components of the rule here, instead of calling into the matching code. + * + * Replicated from LigatureSet::apply(). */ + + hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input; + skippy_iter.reset (c->buffer->idx); + skippy_iter.set_match_func (match_always, nullptr); + skippy_iter.set_glyph_data ((HBUINT16 *) nullptr); + unsigned unsafe_to = (unsigned) -1, unsafe_to1 = 0, unsafe_to2 = 0; + hb_glyph_info_t *first = nullptr, *second = nullptr; + bool matched = skippy_iter.next (); + if (likely (matched)) + { + first = &c->buffer->info[skippy_iter.idx]; + unsafe_to1 = skippy_iter.idx + 1; + + if (skippy_iter.may_skip (c->buffer->info[skippy_iter.idx])) + { + /* Can't use the fast path if eg. the next char is a default-ignorable + * or other skippable. */ + goto slow; + } + } + else + { + /* Failed to match a next glyph. Only try applying rules that have + * no further input and lookahead. */ + return_trace ( + + hb_iter (rule) + | hb_map (hb_add (this)) + | hb_filter ([&] (const ChainRule &_) + { + const auto &input = StructAfter (_.backtrack); + const auto &lookahead = StructAfter (input); + return input.lenP1 <= 1 && lookahead.len == 0; + }) + | hb_map ([&] (const ChainRule &_) { return _.apply (c, lookup_context); }) + | hb_any + ) + ; + } + matched = skippy_iter.next (); + if (likely (matched && !skippy_iter.may_skip (c->buffer->info[skippy_iter.idx]))) + { + second = &c->buffer->info[skippy_iter.idx]; + unsafe_to2 = skippy_iter.idx + 1; + } + + auto match_input = lookup_context.funcs.match[1]; + auto match_lookahead = lookup_context.funcs.match[2]; + auto *input_data = lookup_context.match_data[1]; + auto *lookahead_data = lookup_context.match_data[2]; + for (unsigned int i = 0; i < num_rules; i++) + { + const auto &r = this+rule.arrayZ[i]; + + const auto &input = StructAfter (r.backtrack); + const auto &lookahead = StructAfter (input); + + unsigned lenP1 = hb_max ((unsigned) input.lenP1, 1u); + if (lenP1 > 1 ? + (!match_input || + match_input (*first, input.arrayZ[0], input_data)) + : + (!lookahead.len || !match_lookahead || + match_lookahead (*first, lookahead.arrayZ[0], lookahead_data))) + { + if (!second || + (lenP1 > 2 ? + (!match_input || + match_input (*second, input.arrayZ[1], input_data)) + : + (lookahead.len <= 2 - lenP1 || !match_lookahead || + match_lookahead (*second, lookahead.arrayZ[2 - lenP1], lookahead_data)))) + { + if (r.apply (c, lookup_context)) + { + if (unsafe_to != (unsigned) -1) + c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to); + return_trace (true); + } + } + else + unsafe_to = unsafe_to2; + } + else + { + if (unsafe_to == (unsigned) -1) + unsafe_to = unsafe_to1; + } + } + if (likely (unsafe_to != (unsigned) -1)) + c->buffer->unsafe_to_concat (c->buffer->idx, unsafe_to); + + return_trace (false); } bool subset (hb_subset_context_t *c, @@ -3616,26 +3821,22 @@ const ClassDef &input_class_def = this+inputClassDef; const ClassDef &lookahead_class_def = this+lookaheadClassDef; - /* For ChainContextFormat2_5 we cache the LookaheadClassDef instead of InputClassDef. - * The reason is that most heavy fonts want to identify a glyph in context and apply - * a lookup to it. In this scenario, the length of the input sequence is one, whereas - * the lookahead / backtrack are typically longer. The one glyph in input sequence is - * looked-up below and no input glyph is looked up in individual rules, whereas the - * lookahead and backtrack glyphs are tried. Since we match lookahead before backtrack, - * we should cache lookahead. This decisions showed a 20% improvement in shaping of - * the Gulzar font. - */ - + /* match_class_caches1 is slightly faster. Use it for lookahead, + * which is typically longer. */ struct ChainContextApplyLookupContext lookup_context = { - {{cached && &backtrack_class_def == &lookahead_class_def ? match_class_cached : match_class, - cached && &input_class_def == &lookahead_class_def ? match_class_cached : match_class, - cached ? match_class_cached : match_class}}, + {{cached && &backtrack_class_def == &lookahead_class_def ? match_class_cached1 : match_class, + cached ? match_class_cached2 : match_class, + cached ? match_class_cached1 : match_class}}, {&backtrack_class_def, &input_class_def, &lookahead_class_def} }; - index = input_class_def.get_class (c->buffer->cur().codepoint); + // Note: Corresponds to match_class_cached2 + if (cached && ((c->buffer->cur().syllable() & 0xF0) >> 4) < 15) + index = (c->buffer->cur().syllable () & 0xF0) >> 4; + else + index = input_class_def.get_class (c->buffer->cur().codepoint); const ChainRuleSet &rule_set = this+ruleSet[index]; return_trace (rule_set.apply (c, lookup_context)); } @@ -3925,11 +4126,14 @@ { TRACE_SANITIZE (this); if (unlikely (!backtrack.sanitize (c, this))) return_trace (false); + hb_barrier (); const auto &input = StructAfter (backtrack); if (unlikely (!input.sanitize (c, this))) return_trace (false); + hb_barrier (); if (unlikely (!input.len)) return_trace (false); /* To be consistent with Context. */ const auto &lookahead = StructAfter (input); if (unlikely (!lookahead.sanitize (c, this))) return_trace (false); + hb_barrier (); const auto &lookup = StructAfter (lookahead); return_trace (likely (lookup.sanitize (c))); } @@ -4013,6 +4217,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && extensionLookupType != T::SubTable::Extension); } @@ -4139,6 +4344,9 @@ bool may_have (hb_codepoint_t g) const { return digest.may_have (g); } +#ifndef HB_OPTIMIZE_SIZE + HB_ALWAYS_INLINE +#endif bool apply (hb_ot_apply_context_t *c, unsigned subtables_count, bool use_cache) const { #ifndef HB_NO_OT_LAYOUT_LOOKUP_CACHE @@ -4273,13 +4481,6 @@ if (!c->subset_context->serializer->extend_min (&out->featureVars)) return_trace (false); - // TODO(qxliu76): the current implementation doesn't correctly handle feature variations - // that are dropped by instancing when the associated conditions don't trigger. - // Since partial instancing isn't yet supported this isn't an issue yet but will - // need to be fixed for partial instancing. - - - // if all axes are pinned all feature vars are dropped. bool ret = !c->subset_context->plan->all_axes_pinned && out->featureVars.serialize_subset (c->subset_context, featureVars, this, c); @@ -4314,6 +4515,7 @@ { TRACE_SANITIZE (this); if (unlikely (!u.version.sanitize (c))) return_trace (false); + hb_barrier (); switch (u.version.major) { case 1: return_trace (u.version1.sanitize (c)); #ifndef HB_NO_BEYOND_64K @@ -4439,11 +4641,11 @@ } void feature_variation_collect_lookups (const hb_set_t *feature_indexes, - const hb_hashmap_t *feature_substitutes_map, + const hb_hashmap_t> *feature_record_cond_idx_map, hb_set_t *lookup_indexes /* OUT */) const { #ifndef HB_NO_VAR - get_feature_variations ().collect_lookups (feature_indexes, feature_substitutes_map, lookup_indexes); + get_feature_variations ().collect_lookups (feature_indexes, feature_record_cond_idx_map, lookup_indexes); #endif } diff -Nru harfbuzz-8.0.1/src/hb-ot-layout-jstf-table.hh harfbuzz-8.3.0/src/hb-ot-layout-jstf-table.hh --- harfbuzz-8.0.1/src/hb-ot-layout-jstf-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-layout-jstf-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -214,6 +214,7 @@ { TRACE_SANITIZE (this); return_trace (version.sanitize (c) && + hb_barrier () && likely (version.major == 1) && scriptList.sanitize (c, this)); } diff -Nru harfbuzz-8.0.1/src/hb-ot-layout.cc harfbuzz-8.3.0/src/hb-ot-layout.cc --- harfbuzz-8.0.1/src/hb-ot-layout.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-layout.cc 2023-11-11 14:08:45.000000000 +0000 @@ -1241,7 +1241,7 @@ * terminated by %HB_TAG_NONE * @features: (nullable) (array zero-terminated=1): The array of features to collect, * terminated by %HB_TAG_NONE - * @feature_indexes: (out): The array of feature indexes found for the query + * @feature_indexes: (out): The set of feature indexes found for the query * * Fetches a list of all feature indexes in the specified face's GSUB table * or GPOS table, underneath the specified scripts, languages, and features. @@ -1282,6 +1282,49 @@ } } +/** + * hb_ot_layout_collect_features_map: + * @face: #hb_face_t to work upon + * @table_tag: #HB_OT_TAG_GSUB or #HB_OT_TAG_GPOS + * @script_index: The index of the requested script tag + * @language_index: The index of the requested language tag + * @feature_map: (out): The map of feature tag to feature index. + * + * Fetches the mapping from feature tags to feature indexes for + * the specified script and language. + * + * Since: 8.1.0 + **/ +void +hb_ot_layout_collect_features_map (hb_face_t *face, + hb_tag_t table_tag, + unsigned script_index, + unsigned language_index, + hb_map_t *feature_map /* OUT */) +{ + const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag); + const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index); + + unsigned int count = l.get_feature_indexes (0, nullptr, nullptr); + feature_map->alloc (count); + + /* Loop in reverse, such that earlier entries win. That emulates + * a linear search, which seems to be what other implementations do. + * We found that with arialuni_t.ttf, the "ur" language system has + * duplicate features, and the earlier ones work but not later ones. + */ + for (unsigned int i = count; i; i--) + { + unsigned feature_index = 0; + unsigned feature_count = 1; + l.get_feature_indexes (i - 1, &feature_count, &feature_index); + if (!feature_count) + break; + hb_tag_t feature_tag = g.get_feature_tag (feature_index); + feature_map->set (feature_tag, feature_index); + } +} + /** * hb_ot_layout_collect_lookups: diff -Nru harfbuzz-8.0.1/src/hb-ot-layout.h harfbuzz-8.3.0/src/hb-ot-layout.h --- harfbuzz-8.0.1/src/hb-ot-layout.h 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-layout.h 2023-11-11 14:08:45.000000000 +0000 @@ -325,6 +325,13 @@ hb_set_t *feature_indexes /* OUT */); HB_EXTERN void +hb_ot_layout_collect_features_map (hb_face_t *face, + hb_tag_t table_tag, + unsigned script_index, + unsigned language_index, + hb_map_t *feature_map /* OUT */); + +HB_EXTERN void hb_ot_layout_collect_lookups (hb_face_t *face, hb_tag_t table_tag, const hb_tag_t *scripts, diff -Nru harfbuzz-8.0.1/src/hb-ot-map.cc harfbuzz-8.3.0/src/hb-ot-map.cc --- harfbuzz-8.0.1/src/hb-ot-map.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-map.cc 2023-11-11 14:08:45.000000000 +0000 @@ -239,6 +239,13 @@ feature_infos.shrink (j + 1); } + hb_map_t feature_indices[2]; + for (unsigned int table_index = 0; table_index < 2; table_index++) + hb_ot_layout_collect_features_map (face, + table_tags[table_index], + script_index[table_index], + language_index[table_index], + &feature_indices[table_index]); /* Allocate bits now */ static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), ""); @@ -261,7 +268,6 @@ if (!info->max_value || next_bit + bits_needed >= global_bit_shift) continue; /* Feature disabled, or not enough bits. */ - bool found = false; unsigned int feature_index[2]; for (unsigned int table_index = 0; table_index < 2; table_index++) @@ -269,12 +275,14 @@ if (required_feature_tag[table_index] == info->tag) required_feature_stage[table_index] = info->stage[table_index]; - found |= (bool) hb_ot_layout_language_find_feature (face, - table_tags[table_index], - script_index[table_index], - language_index[table_index], - info->tag, - &feature_index[table_index]); + hb_codepoint_t *index; + if (feature_indices[table_index].has (info->tag, &index)) + { + feature_index[table_index] = *index; + found = true; + } + else + feature_index[table_index] = HB_OT_LAYOUT_NO_FEATURE_INDEX; } if (!found && (info->flags & F_GLOBAL_SEARCH)) { diff -Nru harfbuzz-8.0.1/src/hb-ot-math-table.hh harfbuzz-8.3.0/src/hb-ot-math-table.hh --- harfbuzz-8.0.1/src/hb-ot-math-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-math-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -333,6 +333,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && c->check_array (mathValueRecordsZ.arrayZ, 2 * heightCount + 1) && sanitize_math_value_records (c)); } @@ -984,6 +985,7 @@ return_trace (c->check_struct (this) && vertGlyphCoverage.sanitize (c, this) && horizGlyphCoverage.sanitize (c, this) && + hb_barrier () && c->check_array (glyphConstruction.arrayZ, vertGlyphCount + horizGlyphCount) && sanitize_offsets (c)); } @@ -1103,6 +1105,7 @@ TRACE_SANITIZE (this); return_trace (version.sanitize (c) && likely (version.major == 1) && + hb_barrier () && mathConstants.sanitize (c, this) && mathGlyphInfo.sanitize (c, this) && mathVariants.sanitize (c, this)); diff -Nru harfbuzz-8.0.1/src/hb-ot-maxp-table.hh harfbuzz-8.3.0/src/hb-ot-maxp-table.hh --- harfbuzz-8.0.1/src/hb-ot-maxp-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-maxp-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -85,7 +85,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); - + hb_barrier (); if (version.major == 1) { const maxpV1Tail &v1 = StructAfter (*this); @@ -103,6 +103,7 @@ maxp_prime->numGlyphs = hb_min (c->plan->num_output_glyphs (), 0xFFFFu); if (maxp_prime->version.major == 1) { + hb_barrier (); const maxpV1Tail *src_v1 = &StructAfter (*this); maxpV1Tail *dest_v1 = c->serializer->embed (src_v1); if (unlikely (!dest_v1)) return_trace (false); diff -Nru harfbuzz-8.0.1/src/hb-ot-meta-table.hh harfbuzz-8.3.0/src/hb-ot-meta-table.hh --- harfbuzz-8.0.1/src/hb-ot-meta-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-meta-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -51,6 +51,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && dataZ.sanitize (c, base, dataLength))); } @@ -101,6 +102,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version == 1 && dataMaps.sanitize (c, this))); } diff -Nru harfbuzz-8.0.1/src/hb-ot-os2-table.hh harfbuzz-8.3.0/src/hb-ot-os2-table.hh --- harfbuzz-8.0.1/src/hb-ot-os2-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-os2-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -209,6 +209,23 @@ return ret; } + static unsigned calc_avg_char_width (const hb_hashmap_t>& hmtx_map) + { + unsigned num = 0; + unsigned total_width = 0; + for (const auto& _ : hmtx_map.values_ref ()) + { + unsigned width = _.first; + if (width) + { + total_width += width; + num++; + } + } + + return num ? (unsigned) roundf (total_width / num) : 0; + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); @@ -239,31 +256,32 @@ if (os2_prime->version >= 2) { + hb_barrier (); auto *table = & const_cast (os2_prime->v2 ()); HB_ADD_MVAR_VAR (HB_OT_METRICS_TAG_X_HEIGHT, sxHeight); HB_ADD_MVAR_VAR (HB_OT_METRICS_TAG_CAP_HEIGHT, sCapHeight); } + + unsigned avg_char_width = calc_avg_char_width (c->plan->hmtx_map); + if (!c->serializer->check_assign (os2_prime->xAvgCharWidth, avg_char_width, + HB_SERIALIZE_ERROR_INT_OVERFLOW)) + return_trace (false); } #endif - if (c->plan->user_axes_location.has (HB_TAG ('w','g','h','t')) && - !c->plan->pinned_at_default) + Triple *axis_range; + if (c->plan->user_axes_location.has (HB_TAG ('w','g','h','t'), &axis_range)) { - float weight_class = c->plan->user_axes_location.get (HB_TAG ('w','g','h','t')).middle; - if (!c->serializer->check_assign (os2_prime->usWeightClass, - roundf (hb_clamp (weight_class, 1.0f, 1000.0f)), - HB_SERIALIZE_ERROR_INT_OVERFLOW)) - return_trace (false); + unsigned weight_class = static_cast (roundf (hb_clamp (axis_range->middle, 1.0f, 1000.0f))); + if (os2_prime->usWeightClass != weight_class) + os2_prime->usWeightClass = weight_class; } - if (c->plan->user_axes_location.has (HB_TAG ('w','d','t','h')) && - !c->plan->pinned_at_default) + if (c->plan->user_axes_location.has (HB_TAG ('w','d','t','h'), &axis_range)) { - float width = c->plan->user_axes_location.get (HB_TAG ('w','d','t','h')).middle; - if (!c->serializer->check_assign (os2_prime->usWidthClass, - roundf (map_wdth_to_widthclass (width)), - HB_SERIALIZE_ERROR_INT_OVERFLOW)) - return_trace (false); + unsigned width_class = static_cast (roundf (map_wdth_to_widthclass (axis_range->middle))); + if (os2_prime->usWidthClass != width_class) + os2_prime->usWidthClass = width_class; } if (c->plan->flags & HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES) @@ -339,6 +357,7 @@ { TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); if (unlikely (version >= 1 && !v1X.sanitize (c))) return_trace (false); if (unlikely (version >= 2 && !v2X.sanitize (c))) return_trace (false); if (unlikely (version >= 5 && !v5X.sanitize (c))) return_trace (false); diff -Nru harfbuzz-8.0.1/src/hb-ot-post-table.hh harfbuzz-8.3.0/src/hb-ot-post-table.hh --- harfbuzz-8.0.1/src/hb-ot-post-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-post-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -113,16 +113,19 @@ } #endif - if (c->plan->user_axes_location.has (HB_TAG ('s','l','n','t')) && - !c->plan->pinned_at_default) + Triple *axis_range; + if (c->plan->user_axes_location.has (HB_TAG ('s','l','n','t'), &axis_range)) { - float italic_angle = c->plan->user_axes_location.get (HB_TAG ('s','l','n','t')).middle; - italic_angle = hb_max (-90.f, hb_min (italic_angle, 90.f)); - post_prime->italicAngle.set_float (italic_angle); + float italic_angle = hb_max (-90.f, hb_min (axis_range->middle, 90.f)); + if (post_prime->italicAngle.to_float () != italic_angle) + post_prime->italicAngle.set_float (italic_angle); } if (glyph_names && version.major == 2) + { + hb_barrier (); return_trace (v2X.subset (c)); + } return_trace (true); } @@ -138,6 +141,7 @@ version = table->version.to_int (); if (version != 0x00020000) return; + hb_barrier (); const postV2Tail &v2 = table->v2X; @@ -217,10 +221,16 @@ unsigned int get_glyph_count () const { if (version == 0x00010000) + { + hb_barrier (); return format1_names_length; + } if (version == 0x00020000) + { + hb_barrier (); return glyphNameIndex->len; + } return 0; } @@ -245,13 +255,18 @@ { if (version == 0x00010000) { + hb_barrier (); if (glyph >= format1_names_length) return hb_bytes_t (); return format1_names (glyph); } - if (version != 0x00020000 || glyph >= glyphNameIndex->len) + if (version != 0x00020000) + return hb_bytes_t (); + hb_barrier (); + + if (glyph >= glyphNameIndex->len) return hb_bytes_t (); unsigned int index = glyphNameIndex->arrayZ[glyph]; @@ -284,6 +299,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && (version.to_int () == 0x00010000 || (version.to_int () == 0x00020000 && v2X.sanitize (c)) || version.to_int () == 0x00030000)); diff -Nru harfbuzz-8.0.1/src/hb-ot-shape.cc harfbuzz-8.3.0/src/hb-ot-shape.cc --- harfbuzz-8.0.1/src/hb-ot-shape.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shape.cc 2023-11-11 14:08:45.000000000 +0000 @@ -476,9 +476,18 @@ { _hb_glyph_info_set_unicode_props (&info[i], buffer); + unsigned gen_cat = _hb_glyph_info_get_general_category (&info[i]); + if (FLAG_UNSAFE (gen_cat) & + (FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) | + FLAG (HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER) | + FLAG (HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER) | + FLAG (HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER) | + FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR))) + continue; + /* Marks are already set as continuation by the above line. * Handle Emoji_Modifier and ZWJ-continuation. */ - if (unlikely (_hb_glyph_info_get_general_category (&info[i]) == HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL && + if (unlikely (gen_cat == HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL && hb_in_range (info[i].codepoint, 0x1F3FBu, 0x1F3FFu))) { _hb_glyph_info_set_continuation (&info[i]); @@ -756,6 +765,14 @@ _hb_glyph_info_get_general_category (&info[end]) == HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER) end++; + if (start == i || end == i + 1) + { + if (start == i) + buffer->unsafe_to_concat (start, start + 1); + if (end == i + 1) + buffer->unsafe_to_concat (end - 1, end); + continue; + } buffer->unsafe_to_break (start, end); @@ -1037,7 +1054,7 @@ * direction is backward we don't shift and it will end up * hanging over the next glyph after the final reordering. * - * Note: If fallback positinoing happens, we don't care about + * Note: If fallback positioning happens, we don't care about * this as it will be overridden. */ bool adjust_offsets_when_zeroing = c->plan->adjust_mark_positioning_when_zeroing && diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-arabic-joining-list.hh harfbuzz-8.3.0/src/hb-ot-shaper-arabic-joining-list.hh --- harfbuzz-8.0.1/src/hb-ot-shaper-arabic-joining-list.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-arabic-joining-list.hh 2023-11-11 14:08:45.000000000 +0000 @@ -6,10 +6,10 @@ * * on files with these headers: * - * # ArabicShaping-15.0.0.txt - * # Date: 2022-02-14, 18:50:00 GMT [KW, RP] - * # Scripts-15.0.0.txt - * # Date: 2022-04-26, 23:15:02 GMT + * # ArabicShaping-15.1.0.txt + * # Date: 2023-01-05 + * # Scripts-15.1.0.txt + * # Date: 2023-07-28, 16:01:07 GMT */ #ifndef HB_OT_SHAPER_ARABIC_JOINING_LIST_HH diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-arabic-table.hh harfbuzz-8.3.0/src/hb-ot-shaper-arabic-table.hh --- harfbuzz-8.0.1/src/hb-ot-shaper-arabic-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-arabic-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -6,10 +6,10 @@ * * on files with these headers: * - * # ArabicShaping-15.0.0.txt - * # Date: 2022-02-14, 18:50:00 GMT [KW, RP] - * # Blocks-15.0.0.txt - * # Date: 2022-01-28, 20:58:00 GMT [KW] + * # ArabicShaping-15.1.0.txt + * # Date: 2023-01-05 + * # Blocks-15.1.0.txt + * # Date: 2023-07-28, 15:47:20 GMT * UnicodeData.txt does not have a header. */ diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-arabic.cc harfbuzz-8.3.0/src/hb-ot-shaper-arabic.cc --- harfbuzz-8.0.1/src/hb-ot-shaper-arabic.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-arabic.cc 2023-11-11 14:08:45.000000000 +0000 @@ -486,8 +486,10 @@ if (likely (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH))) return; - /* The Arabic shaper currently always processes in RTL mode, so we should - * stretch / position the stretched pieces to the left / preceding glyphs. */ + bool rtl = buffer->props.direction == HB_DIRECTION_RTL; + + if (!rtl) + buffer->reverse (); /* We do a two pass implementation: * First pass calculates the exact number of extra glyphs we need, @@ -577,7 +579,10 @@ ++n_copies; hb_position_t excess = (n_copies + 1) * sign * w_repeating - sign * w_remaining; if (excess > 0) + { extra_repeat_overlap = excess / (n_copies * n_repeating); + w_remaining = 0; + } } if (step == MEASURE) @@ -588,7 +593,7 @@ else { buffer->unsafe_to_break (context, end); - hb_position_t x_offset = 0; + hb_position_t x_offset = w_remaining / 2; for (unsigned int k = end; k > start; k--) { hb_position_t width = font->get_glyph_h_advance (info[k - 1].codepoint); @@ -599,16 +604,27 @@ DEBUG_MSG (ARABIC, nullptr, "appending %u copies of glyph %u; j=%u", repeat, info[k - 1].codepoint, j); + pos[k - 1].x_advance = 0; for (unsigned int n = 0; n < repeat; n++) { - x_offset -= width; - if (n > 0) - x_offset += extra_repeat_overlap; + if (rtl) + { + x_offset -= width; + if (n > 0) + x_offset += extra_repeat_overlap; + } pos[k - 1].x_offset = x_offset; /* Append copy. */ --j; info[j] = info[k - 1]; pos[j] = pos[k - 1]; + + if (!rtl) + { + x_offset += width; + if (n > 0) + x_offset -= extra_repeat_overlap; + } } } } @@ -625,6 +641,9 @@ buffer->len = new_len; } } + + if (!rtl) + buffer->reverse (); } diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-indic-machine.hh harfbuzz-8.3.0/src/hb-ot-shaper-indic-machine.hh --- harfbuzz-8.0.1/src/hb-ot-shaper-indic-machine.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-indic-machine.hh 2023-11-11 14:08:45.000000000 +0000 @@ -53,7 +53,7 @@ }; -#line 54 "hb-ot-shaper-indic-machine.hh" +#line 57 "hb-ot-shaper-indic-machine.hh" #define indic_syllable_machine_ex_A 9u #define indic_syllable_machine_ex_C 1u #define indic_syllable_machine_ex_CM 16u @@ -76,7 +76,7 @@ #define indic_syllable_machine_ex_ZWNJ 5u -#line 75 "hb-ot-shaper-indic-machine.hh" +#line 80 "hb-ot-shaper-indic-machine.hh" static const unsigned char _indic_syllable_machine_trans_keys[] = { 8u, 8u, 4u, 13u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 8u, 8u, 5u, 13u, 5u, 13u, 13u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, 4u, 13u, @@ -460,7 +460,7 @@ int cs; hb_glyph_info_t *info = buffer->info; -#line 453 "hb-ot-shaper-indic-machine.hh" +#line 464 "hb-ot-shaper-indic-machine.hh" { cs = indic_syllable_machine_start; ts = 0; @@ -476,7 +476,7 @@ unsigned int syllable_serial = 1; -#line 465 "hb-ot-shaper-indic-machine.hh" +#line 480 "hb-ot-shaper-indic-machine.hh" { int _slen; int _trans; @@ -490,7 +490,7 @@ #line 1 "NONE" {ts = p;} break; -#line 477 "hb-ot-shaper-indic-machine.hh" +#line 494 "hb-ot-shaper-indic-machine.hh" } _keys = _indic_syllable_machine_trans_keys + (cs<<1); @@ -593,7 +593,7 @@ #line 114 "hb-ot-shaper-indic-machine.rl" {act = 6;} break; -#line 559 "hb-ot-shaper-indic-machine.hh" +#line 597 "hb-ot-shaper-indic-machine.hh" } _again: @@ -602,7 +602,7 @@ #line 1 "NONE" {ts = 0;} break; -#line 566 "hb-ot-shaper-indic-machine.hh" +#line 606 "hb-ot-shaper-indic-machine.hh" } if ( ++p != pe ) diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-indic-table.cc harfbuzz-8.3.0/src/hb-ot-shaper-indic-table.cc --- harfbuzz-8.0.1/src/hb-ot-shaper-indic-table.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-indic-table.cc 2023-11-11 14:08:45.000000000 +0000 @@ -6,12 +6,12 @@ * * on files with these headers: * - * # IndicSyllabicCategory-15.0.0.txt - * # Date: 2022-05-26, 02:18:00 GMT [KW, RP] - * # IndicPositionalCategory-15.0.0.txt - * # Date: 2022-05-26, 02:18:00 GMT [KW, RP] - * # Blocks-15.0.0.txt - * # Date: 2022-01-28, 20:58:00 GMT [KW] + * # IndicSyllabicCategory-15.1.0.txt + * # Date: 2023-01-05 + * # IndicPositionalCategory-15.1.0.txt + * # Date: 2023-01-05 + * # Blocks-15.1.0.txt + * # Date: 2023-07-28, 15:47:20 GMT */ #include "hb.hh" diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-khmer-machine.hh harfbuzz-8.3.0/src/hb-ot-shaper-khmer-machine.hh --- harfbuzz-8.0.1/src/hb-ot-shaper-khmer-machine.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-khmer-machine.hh 2023-11-11 14:08:45.000000000 +0000 @@ -48,7 +48,7 @@ }; -#line 49 "hb-ot-shaper-khmer-machine.hh" +#line 52 "hb-ot-shaper-khmer-machine.hh" #define khmer_syllable_machine_ex_C 1u #define khmer_syllable_machine_ex_DOTTEDCIRCLE 11u #define khmer_syllable_machine_ex_H 4u @@ -66,7 +66,7 @@ #define khmer_syllable_machine_ex_ZWNJ 5u -#line 65 "hb-ot-shaper-khmer-machine.hh" +#line 70 "hb-ot-shaper-khmer-machine.hh" static const unsigned char _khmer_syllable_machine_trans_keys[] = { 5u, 26u, 5u, 26u, 1u, 15u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 1u, 15u, 5u, 26u, 5u, 26u, @@ -294,7 +294,7 @@ int cs; hb_glyph_info_t *info = buffer->info; -#line 287 "hb-ot-shaper-khmer-machine.hh" +#line 298 "hb-ot-shaper-khmer-machine.hh" { cs = khmer_syllable_machine_start; ts = 0; @@ -310,7 +310,7 @@ unsigned int syllable_serial = 1; -#line 299 "hb-ot-shaper-khmer-machine.hh" +#line 314 "hb-ot-shaper-khmer-machine.hh" { int _slen; int _trans; @@ -324,7 +324,7 @@ #line 1 "NONE" {ts = p;} break; -#line 311 "hb-ot-shaper-khmer-machine.hh" +#line 328 "hb-ot-shaper-khmer-machine.hh" } _keys = _khmer_syllable_machine_trans_keys + (cs<<1); @@ -394,7 +394,7 @@ #line 98 "hb-ot-shaper-khmer-machine.rl" {act = 3;} break; -#line 368 "hb-ot-shaper-khmer-machine.hh" +#line 398 "hb-ot-shaper-khmer-machine.hh" } _again: @@ -403,7 +403,7 @@ #line 1 "NONE" {ts = 0;} break; -#line 375 "hb-ot-shaper-khmer-machine.hh" +#line 407 "hb-ot-shaper-khmer-machine.hh" } if ( ++p != pe ) diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-myanmar-machine.hh harfbuzz-8.3.0/src/hb-ot-shaper-myanmar-machine.hh --- harfbuzz-8.0.1/src/hb-ot-shaper-myanmar-machine.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-myanmar-machine.hh 2023-11-11 14:08:45.000000000 +0000 @@ -50,7 +50,7 @@ }; -#line 51 "hb-ot-shaper-myanmar-machine.hh" +#line 54 "hb-ot-shaper-myanmar-machine.hh" #define myanmar_syllable_machine_ex_A 9u #define myanmar_syllable_machine_ex_As 32u #define myanmar_syllable_machine_ex_C 1u @@ -77,7 +77,7 @@ #define myanmar_syllable_machine_ex_ZWNJ 5u -#line 76 "hb-ot-shaper-myanmar-machine.hh" +#line 81 "hb-ot-shaper-myanmar-machine.hh" static const unsigned char _myanmar_syllable_machine_trans_keys[] = { 1u, 41u, 3u, 41u, 5u, 39u, 5u, 8u, 3u, 41u, 3u, 39u, 3u, 39u, 5u, 39u, 5u, 39u, 3u, 39u, 3u, 39u, 3u, 41u, 5u, 39u, 1u, 15u, 3u, 39u, 3u, 39u, @@ -443,7 +443,7 @@ int cs; hb_glyph_info_t *info = buffer->info; -#line 436 "hb-ot-shaper-myanmar-machine.hh" +#line 447 "hb-ot-shaper-myanmar-machine.hh" { cs = myanmar_syllable_machine_start; ts = 0; @@ -459,7 +459,7 @@ unsigned int syllable_serial = 1; -#line 448 "hb-ot-shaper-myanmar-machine.hh" +#line 463 "hb-ot-shaper-myanmar-machine.hh" { int _slen; int _trans; @@ -473,7 +473,7 @@ #line 1 "NONE" {ts = p;} break; -#line 460 "hb-ot-shaper-myanmar-machine.hh" +#line 477 "hb-ot-shaper-myanmar-machine.hh" } _keys = _myanmar_syllable_machine_trans_keys + (cs<<1); @@ -519,7 +519,7 @@ #line 113 "hb-ot-shaper-myanmar-machine.rl" {te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }} break; -#line 498 "hb-ot-shaper-myanmar-machine.hh" +#line 523 "hb-ot-shaper-myanmar-machine.hh" } _again: @@ -528,7 +528,7 @@ #line 1 "NONE" {ts = 0;} break; -#line 505 "hb-ot-shaper-myanmar-machine.hh" +#line 532 "hb-ot-shaper-myanmar-machine.hh" } if ( ++p != pe ) diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-use-machine.hh harfbuzz-8.3.0/src/hb-ot-shaper-use-machine.hh --- harfbuzz-8.0.1/src/hb-ot-shaper-use-machine.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-use-machine.hh 2023-11-11 14:08:45.000000000 +0000 @@ -53,7 +53,7 @@ }; -#line 54 "hb-ot-shaper-use-machine.hh" +#line 57 "hb-ot-shaper-use-machine.hh" #define use_syllable_machine_ex_B 1u #define use_syllable_machine_ex_CGJ 6u #define use_syllable_machine_ex_CMAbv 31u @@ -68,7 +68,9 @@ #define use_syllable_machine_ex_G 49u #define use_syllable_machine_ex_GB 5u #define use_syllable_machine_ex_H 12u +#define use_syllable_machine_ex_HM 54u #define use_syllable_machine_ex_HN 13u +#define use_syllable_machine_ex_HR 55u #define use_syllable_machine_ex_HVM 53u #define use_syllable_machine_ex_IS 44u #define use_syllable_machine_ex_J 50u @@ -97,673 +99,662 @@ #define use_syllable_machine_ex_ZWNJ 14u -#line 96 "hb-ot-shaper-use-machine.hh" +#line 103 "hb-ot-shaper-use-machine.hh" static const unsigned char _use_syllable_machine_trans_keys[] = { - 0u, 53u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, - 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, - 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, - 12u, 53u, 11u, 53u, 1u, 14u, 1u, 48u, 11u, 53u, 14u, 42u, 14u, 42u, 11u, 53u, + 49u, 51u, 0u, 53u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, + 14u, 47u, 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, + 14u, 48u, 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, + 12u, 53u, 12u, 53u, 11u, 53u, 1u, 14u, 1u, 48u, 14u, 42u, 14u, 42u, 11u, 53u, + 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u, 14u, 14u, + 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u, 14u, 53u, + 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 1u, 14u, + 1u, 14u, 1u, 48u, 13u, 14u, 4u, 14u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, + 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, + 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, + 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 1u, 14u, 1u, 14u, 1u, 48u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, - 1u, 14u, 1u, 14u, 1u, 48u, 13u, 14u, 4u, 14u, 11u, 53u, 11u, 53u, 1u, 53u, - 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, - 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, - 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 1u, 14u, 1u, 14u, - 1u, 48u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, - 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, - 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, - 12u, 53u, 11u, 53u, 1u, 14u, 1u, 48u, 4u, 14u, 13u, 14u, 1u, 53u, 11u, 53u, - 14u, 42u, 14u, 42u, 1u, 5u, 14u, 52u, 14u, 52u, 14u, 51u, 0 + 1u, 14u, 1u, 48u, 4u, 14u, 13u, 14u, 1u, 53u, 14u, 42u, 14u, 42u, 1u, 5u, + 14u, 55u, 14u, 51u, 14u, 52u, 14u, 54u, 11u, 53u, 0 }; static const char _use_syllable_machine_key_spans[] = { - 54, 43, 43, 53, 35, 34, 34, 34, - 33, 33, 1, 35, 35, 35, 14, 35, - 40, 40, 40, 40, 42, 40, 42, 42, - 42, 43, 14, 48, 43, 29, 29, 43, + 3, 54, 43, 43, 53, 35, 34, 34, + 34, 33, 33, 1, 35, 35, 35, 14, + 35, 40, 40, 40, 40, 42, 40, 42, + 42, 42, 43, 14, 48, 29, 29, 43, + 53, 35, 34, 34, 34, 33, 33, 1, + 35, 35, 35, 14, 35, 40, 40, 40, + 40, 42, 40, 42, 42, 42, 43, 14, + 14, 48, 2, 11, 43, 43, 53, 35, + 34, 34, 34, 33, 33, 1, 35, 35, + 35, 14, 35, 40, 40, 40, 40, 42, + 40, 42, 42, 42, 43, 14, 14, 48, 43, 53, 35, 34, 34, 34, 33, 33, 1, 35, 35, 35, 14, 35, 40, 40, 40, 40, 42, 40, 42, 42, 42, 43, - 14, 14, 48, 2, 11, 43, 43, 53, - 35, 34, 34, 34, 33, 33, 1, 35, - 35, 35, 14, 35, 40, 40, 40, 40, - 42, 40, 42, 42, 42, 43, 14, 14, - 48, 43, 43, 53, 35, 34, 34, 34, - 33, 33, 1, 35, 35, 35, 14, 35, - 40, 40, 40, 40, 42, 40, 42, 42, - 42, 43, 14, 48, 11, 2, 53, 43, - 29, 29, 5, 39, 39, 38 + 14, 48, 11, 2, 53, 29, 29, 5, + 42, 38, 39, 41, 43 }; static const short _use_syllable_machine_index_offsets[] = { - 0, 55, 99, 143, 197, 233, 268, 303, - 338, 372, 406, 408, 444, 480, 516, 531, - 567, 608, 649, 690, 731, 774, 815, 858, - 901, 944, 988, 1003, 1052, 1096, 1126, 1156, - 1200, 1244, 1298, 1334, 1369, 1404, 1439, 1473, - 1507, 1509, 1545, 1581, 1617, 1632, 1668, 1709, - 1750, 1791, 1832, 1875, 1916, 1959, 2002, 2045, - 2089, 2104, 2119, 2168, 2171, 2183, 2227, 2271, - 2325, 2361, 2396, 2431, 2466, 2500, 2534, 2536, - 2572, 2608, 2644, 2659, 2695, 2736, 2777, 2818, - 2859, 2902, 2943, 2986, 3029, 3072, 3116, 3131, - 3146, 3195, 3239, 3283, 3337, 3373, 3408, 3443, - 3478, 3512, 3546, 3548, 3584, 3620, 3656, 3671, - 3707, 3748, 3789, 3830, 3871, 3914, 3955, 3998, - 4041, 4084, 4128, 4143, 4192, 4204, 4207, 4261, - 4305, 4335, 4365, 4371, 4411, 4451 + 0, 4, 59, 103, 147, 201, 237, 272, + 307, 342, 376, 410, 412, 448, 484, 520, + 535, 571, 612, 653, 694, 735, 778, 819, + 862, 905, 948, 992, 1007, 1056, 1086, 1116, + 1160, 1214, 1250, 1285, 1320, 1355, 1389, 1423, + 1425, 1461, 1497, 1533, 1548, 1584, 1625, 1666, + 1707, 1748, 1791, 1832, 1875, 1918, 1961, 2005, + 2020, 2035, 2084, 2087, 2099, 2143, 2187, 2241, + 2277, 2312, 2347, 2382, 2416, 2450, 2452, 2488, + 2524, 2560, 2575, 2611, 2652, 2693, 2734, 2775, + 2818, 2859, 2902, 2945, 2988, 3032, 3047, 3062, + 3111, 3155, 3209, 3245, 3280, 3315, 3350, 3384, + 3418, 3420, 3456, 3492, 3528, 3543, 3579, 3620, + 3661, 3702, 3743, 3786, 3827, 3870, 3913, 3956, + 4000, 4015, 4064, 4076, 4079, 4133, 4163, 4193, + 4199, 4242, 4281, 4321, 4363 }; static const unsigned char _use_syllable_machine_indicies[] = { - 0, 1, 2, 2, 3, 4, 2, 2, - 2, 2, 2, 5, 6, 7, 8, 2, - 2, 2, 9, 2, 2, 2, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 2, 24, 25, 26, - 2, 27, 28, 29, 30, 31, 32, 33, - 30, 34, 2, 35, 2, 36, 2, 38, - 39, 37, 40, 37, 37, 37, 37, 37, - 37, 37, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, - 37, 55, 56, 57, 37, 58, 59, 37, - 60, 61, 62, 63, 60, 37, 37, 37, - 37, 64, 37, 38, 39, 37, 40, 37, - 37, 37, 37, 37, 37, 37, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 51, - 51, 52, 53, 54, 37, 55, 56, 57, - 37, 37, 37, 37, 60, 61, 62, 63, - 60, 37, 37, 37, 37, 64, 37, 38, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 40, 37, 37, 37, - 37, 37, 37, 37, 37, 42, 43, 44, - 45, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 55, 56, 57, 37, 37, - 37, 37, 37, 61, 62, 63, 65, 37, - 37, 37, 37, 42, 37, 40, 37, 37, - 37, 37, 37, 37, 37, 37, 42, 43, - 44, 45, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 55, 56, 57, 37, - 37, 37, 37, 37, 61, 62, 63, 65, - 37, 40, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 43, 44, 45, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 61, 62, 63, 37, 40, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 44, - 45, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 61, 62, 63, 37, 40, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 45, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 61, 62, - 63, 37, 40, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 61, 62, 37, 40, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 62, 37, 40, 37, - 40, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 43, 44, 45, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 55, - 56, 57, 37, 37, 37, 37, 37, 61, - 62, 63, 65, 37, 40, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 43, 44, - 45, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 56, 57, 37, 37, - 37, 37, 37, 61, 62, 63, 65, 37, - 40, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 43, 44, 45, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 57, 37, 37, 37, 37, 37, 61, - 62, 63, 65, 37, 66, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 40, 37, 40, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 43, 44, 45, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 61, 62, 63, 65, 37, 40, - 37, 37, 37, 37, 37, 37, 37, 41, - 42, 43, 44, 45, 37, 37, 37, 37, - 37, 37, 52, 53, 54, 37, 55, 56, - 57, 37, 37, 37, 37, 37, 61, 62, - 63, 65, 37, 37, 37, 37, 42, 37, - 40, 37, 37, 37, 37, 37, 37, 37, - 37, 42, 43, 44, 45, 37, 37, 37, - 37, 37, 37, 52, 53, 54, 37, 55, - 56, 57, 37, 37, 37, 37, 37, 61, - 62, 63, 65, 37, 37, 37, 37, 42, - 37, 40, 37, 37, 37, 37, 37, 37, - 37, 37, 42, 43, 44, 45, 37, 37, - 37, 37, 37, 37, 37, 53, 54, 37, - 55, 56, 57, 37, 37, 37, 37, 37, - 61, 62, 63, 65, 37, 37, 37, 37, - 42, 37, 40, 37, 37, 37, 37, 37, - 37, 37, 37, 42, 43, 44, 45, 37, - 37, 37, 37, 37, 37, 37, 37, 54, - 37, 55, 56, 57, 37, 37, 37, 37, - 37, 61, 62, 63, 65, 37, 37, 37, - 37, 42, 37, 67, 37, 40, 37, 37, - 37, 37, 37, 37, 37, 41, 42, 43, - 44, 45, 37, 47, 48, 37, 37, 37, - 52, 53, 54, 37, 55, 56, 57, 37, - 37, 37, 37, 37, 61, 62, 63, 65, - 37, 37, 37, 37, 42, 37, 40, 37, - 37, 37, 37, 37, 37, 37, 37, 42, - 43, 44, 45, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 55, 56, 57, - 37, 37, 37, 37, 37, 61, 62, 63, - 65, 37, 37, 37, 37, 42, 37, 67, - 37, 40, 37, 37, 37, 37, 37, 37, - 37, 41, 42, 43, 44, 45, 37, 37, - 48, 37, 37, 37, 52, 53, 54, 37, - 55, 56, 57, 37, 37, 37, 37, 37, - 61, 62, 63, 65, 37, 37, 37, 37, - 42, 37, 67, 37, 40, 37, 37, 37, - 37, 37, 37, 37, 41, 42, 43, 44, - 45, 37, 37, 37, 37, 37, 37, 52, - 53, 54, 37, 55, 56, 57, 37, 37, - 37, 37, 37, 61, 62, 63, 65, 37, - 37, 37, 37, 42, 37, 67, 37, 40, - 37, 37, 37, 37, 37, 37, 37, 41, - 42, 43, 44, 45, 46, 47, 48, 37, - 37, 37, 52, 53, 54, 37, 55, 56, - 57, 37, 37, 37, 37, 37, 61, 62, - 63, 65, 37, 37, 37, 37, 42, 37, - 38, 39, 37, 40, 37, 37, 37, 37, - 37, 37, 37, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 37, 51, 52, 53, - 54, 37, 55, 56, 57, 37, 37, 37, - 37, 60, 61, 62, 63, 60, 37, 37, - 37, 37, 64, 37, 38, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 40, 37, 38, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 40, 37, 37, 37, 37, 37, 37, 37, - 37, 42, 43, 44, 45, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 55, - 56, 57, 37, 37, 37, 37, 37, 61, - 62, 63, 65, 37, 38, 39, 37, 40, - 37, 37, 37, 37, 37, 37, 37, 41, - 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 37, 55, 56, - 57, 37, 37, 37, 37, 60, 61, 62, - 63, 60, 37, 37, 37, 37, 64, 37, - 40, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 58, 59, 37, 40, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 59, 37, 69, 70, 68, 71, + 1, 0, 2, 0, 3, 4, 5, 5, + 6, 7, 5, 5, 5, 5, 5, 8, + 9, 10, 11, 5, 5, 5, 12, 5, + 5, 5, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 8, 22, 23, 24, 25, + 5, 26, 27, 28, 5, 29, 30, 31, + 32, 33, 34, 35, 32, 1, 5, 36, + 5, 37, 5, 39, 40, 38, 41, 38, + 38, 38, 38, 38, 38, 38, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 39, + 51, 52, 53, 54, 38, 55, 56, 57, + 38, 58, 59, 38, 60, 61, 62, 63, + 60, 38, 38, 38, 38, 64, 38, 39, + 40, 38, 41, 38, 38, 38, 38, 38, + 38, 38, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 39, 51, 52, 53, 54, + 38, 55, 56, 57, 38, 38, 38, 38, + 60, 61, 62, 63, 60, 38, 38, 38, + 38, 64, 38, 39, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 41, 38, 38, 38, 38, 38, 38, 38, + 38, 43, 44, 45, 46, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 55, + 56, 57, 38, 38, 38, 38, 38, 61, + 62, 63, 65, 38, 38, 38, 38, 43, + 38, 41, 38, 38, 38, 38, 38, 38, + 38, 38, 43, 44, 45, 46, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 55, 56, 57, 38, 38, 38, 38, 38, + 61, 62, 63, 65, 38, 41, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 44, + 45, 46, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 61, 62, 63, 38, + 41, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 45, 46, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 61, + 62, 63, 38, 41, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 46, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 61, 62, 63, 38, 41, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 61, 62, 38, + 41, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 62, 38, 41, 38, 41, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 44, 45, + 46, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 55, 56, 57, 38, 38, + 38, 38, 38, 61, 62, 63, 65, 38, + 41, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 44, 45, 46, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 56, 57, 38, 38, 38, 38, 38, 61, + 62, 63, 65, 38, 41, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 44, 45, + 46, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 57, 38, 38, + 38, 38, 38, 61, 62, 63, 65, 38, + 66, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 41, 38, 41, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 44, 45, 46, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 61, 62, + 63, 65, 38, 41, 38, 38, 38, 38, + 38, 38, 38, 42, 43, 44, 45, 46, + 38, 38, 38, 38, 38, 38, 52, 53, + 54, 38, 55, 56, 57, 38, 38, 38, + 38, 38, 61, 62, 63, 65, 38, 38, + 38, 38, 43, 38, 41, 38, 38, 38, + 38, 38, 38, 38, 38, 43, 44, 45, + 46, 38, 38, 38, 38, 38, 38, 52, + 53, 54, 38, 55, 56, 57, 38, 38, + 38, 38, 38, 61, 62, 63, 65, 38, + 38, 38, 38, 43, 38, 41, 38, 38, + 38, 38, 38, 38, 38, 38, 43, 44, + 45, 46, 38, 38, 38, 38, 38, 38, + 38, 53, 54, 38, 55, 56, 57, 38, + 38, 38, 38, 38, 61, 62, 63, 65, + 38, 38, 38, 38, 43, 38, 41, 38, + 38, 38, 38, 38, 38, 38, 38, 43, + 44, 45, 46, 38, 38, 38, 38, 38, + 38, 38, 38, 54, 38, 55, 56, 57, + 38, 38, 38, 38, 38, 61, 62, 63, + 65, 38, 38, 38, 38, 43, 38, 67, + 38, 41, 38, 38, 38, 38, 38, 38, + 38, 42, 43, 44, 45, 46, 38, 48, + 49, 38, 38, 38, 52, 53, 54, 38, + 55, 56, 57, 38, 38, 38, 38, 38, + 61, 62, 63, 65, 38, 38, 38, 38, + 43, 38, 41, 38, 38, 38, 38, 38, + 38, 38, 38, 43, 44, 45, 46, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 55, 56, 57, 38, 38, 38, 38, + 38, 61, 62, 63, 65, 38, 38, 38, + 38, 43, 38, 67, 38, 41, 38, 38, + 38, 38, 38, 38, 38, 42, 43, 44, + 45, 46, 38, 38, 49, 38, 38, 38, + 52, 53, 54, 38, 55, 56, 57, 38, + 38, 38, 38, 38, 61, 62, 63, 65, + 38, 38, 38, 38, 43, 38, 67, 38, + 41, 38, 38, 38, 38, 38, 38, 38, + 42, 43, 44, 45, 46, 38, 38, 38, + 38, 38, 38, 52, 53, 54, 38, 55, + 56, 57, 38, 38, 38, 38, 38, 61, + 62, 63, 65, 38, 38, 38, 38, 43, + 38, 67, 38, 41, 38, 38, 38, 38, + 38, 38, 38, 42, 43, 44, 45, 46, + 47, 48, 49, 38, 38, 38, 52, 53, + 54, 38, 55, 56, 57, 38, 38, 38, + 38, 38, 61, 62, 63, 65, 38, 38, + 38, 38, 43, 38, 39, 40, 38, 41, + 38, 38, 38, 38, 38, 38, 38, 42, + 43, 44, 45, 46, 47, 48, 49, 50, + 38, 51, 52, 53, 54, 38, 55, 56, + 57, 38, 38, 38, 38, 60, 61, 62, + 63, 60, 38, 38, 38, 38, 64, 38, + 39, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 41, 38, 39, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 41, 38, 38, 38, + 38, 38, 38, 38, 38, 43, 44, 45, + 46, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 55, 56, 57, 38, 38, + 38, 38, 38, 61, 62, 63, 65, 38, + 41, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 58, 59, 38, 41, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 59, 38, 4, 69, 68, 70, + 68, 68, 68, 68, 68, 68, 68, 71, + 72, 73, 74, 75, 76, 77, 78, 79, + 4, 80, 81, 82, 83, 68, 84, 85, + 86, 68, 68, 68, 68, 87, 88, 89, + 90, 91, 68, 68, 68, 68, 92, 68, + 4, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 70, 68, 68, + 68, 68, 68, 68, 68, 68, 72, 73, + 74, 75, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 84, 85, 86, 68, + 68, 68, 68, 68, 88, 89, 90, 93, + 68, 68, 68, 68, 72, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 72, - 73, 74, 75, 76, 77, 78, 79, 80, - 1, 81, 82, 83, 84, 68, 85, 86, - 87, 68, 68, 68, 68, 88, 89, 90, - 91, 92, 68, 68, 68, 68, 93, 68, - 69, 70, 68, 71, 68, 68, 68, 68, - 68, 68, 68, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 81, 82, 83, - 84, 68, 85, 86, 87, 68, 68, 68, - 68, 88, 89, 90, 91, 92, 68, 68, - 68, 68, 93, 68, 69, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 71, 68, 68, 68, 68, 68, 68, - 68, 68, 73, 74, 75, 76, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 85, 86, 87, 68, 68, 68, 68, 68, - 89, 90, 91, 94, 68, 68, 68, 68, - 73, 68, 71, 68, 68, 68, 68, 68, - 68, 68, 68, 73, 74, 75, 76, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 85, 86, 87, 68, 68, 68, 68, - 68, 89, 90, 91, 94, 68, 71, 68, + 73, 74, 75, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 84, 85, 86, + 68, 68, 68, 68, 68, 88, 89, 90, + 93, 68, 70, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 73, 74, 75, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 74, 75, 76, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 89, 90, 91, - 68, 71, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 75, 76, 68, 68, + 68, 88, 89, 90, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 74, 75, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 89, 90, 91, 68, 71, 68, 68, 68, + 68, 68, 68, 68, 88, 89, 90, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 75, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 76, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 88, + 89, 90, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 89, 90, 91, 68, 71, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 88, 89, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 89, 90, - 68, 71, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 89, 68, 70, + 68, 70, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 73, 74, 75, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 90, 68, 71, 68, 71, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 74, - 75, 76, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 85, 86, 87, 68, - 68, 68, 68, 68, 89, 90, 91, 94, - 68, 71, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 74, 75, 76, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 86, 87, 68, 68, 68, 68, 68, - 89, 90, 91, 94, 68, 71, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 74, - 75, 76, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 87, 68, - 68, 68, 68, 68, 89, 90, 91, 94, - 68, 96, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 97, 95, - 71, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 74, 75, 76, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 89, - 90, 91, 94, 68, 71, 68, 68, 68, - 68, 68, 68, 68, 72, 73, 74, 75, - 76, 68, 68, 68, 68, 68, 68, 82, - 83, 84, 68, 85, 86, 87, 68, 68, - 68, 68, 68, 89, 90, 91, 94, 68, - 68, 68, 68, 73, 68, 71, 68, 68, - 68, 68, 68, 68, 68, 68, 73, 74, - 75, 76, 68, 68, 68, 68, 68, 68, - 82, 83, 84, 68, 85, 86, 87, 68, - 68, 68, 68, 68, 89, 90, 91, 94, - 68, 68, 68, 68, 73, 68, 71, 68, + 84, 85, 86, 68, 68, 68, 68, 68, + 88, 89, 90, 93, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 73, - 74, 75, 76, 68, 68, 68, 68, 68, - 68, 68, 83, 84, 68, 85, 86, 87, - 68, 68, 68, 68, 68, 89, 90, 91, - 94, 68, 68, 68, 68, 73, 68, 71, - 68, 68, 68, 68, 68, 68, 68, 68, - 73, 74, 75, 76, 68, 68, 68, 68, - 68, 68, 68, 68, 84, 68, 85, 86, - 87, 68, 68, 68, 68, 68, 89, 90, - 91, 94, 68, 68, 68, 68, 73, 68, - 98, 68, 71, 68, 68, 68, 68, 68, - 68, 68, 72, 73, 74, 75, 76, 68, - 78, 79, 68, 68, 68, 82, 83, 84, - 68, 85, 86, 87, 68, 68, 68, 68, - 68, 89, 90, 91, 94, 68, 68, 68, - 68, 73, 68, 71, 68, 68, 68, 68, - 68, 68, 68, 68, 73, 74, 75, 76, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 85, 86, 87, 68, 68, 68, - 68, 68, 89, 90, 91, 94, 68, 68, - 68, 68, 73, 68, 98, 68, 71, 68, - 68, 68, 68, 68, 68, 68, 72, 73, - 74, 75, 76, 68, 68, 79, 68, 68, - 68, 82, 83, 84, 68, 85, 86, 87, - 68, 68, 68, 68, 68, 89, 90, 91, - 94, 68, 68, 68, 68, 73, 68, 98, - 68, 71, 68, 68, 68, 68, 68, 68, - 68, 72, 73, 74, 75, 76, 68, 68, - 68, 68, 68, 68, 82, 83, 84, 68, - 85, 86, 87, 68, 68, 68, 68, 68, - 89, 90, 91, 94, 68, 68, 68, 68, - 73, 68, 98, 68, 71, 68, 68, 68, - 68, 68, 68, 68, 72, 73, 74, 75, - 76, 77, 78, 79, 68, 68, 68, 82, - 83, 84, 68, 85, 86, 87, 68, 68, - 68, 68, 68, 89, 90, 91, 94, 68, - 68, 68, 68, 73, 68, 69, 70, 68, - 71, 68, 68, 68, 68, 68, 68, 68, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 68, 81, 82, 83, 84, 68, 85, - 86, 87, 68, 68, 68, 68, 88, 89, - 90, 91, 92, 68, 68, 68, 68, 93, - 68, 69, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 100, 99, - 69, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 97, 95, 69, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 71, 68, 68, 68, - 68, 68, 68, 68, 68, 73, 74, 75, - 76, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 85, 86, 87, 68, 68, - 68, 68, 68, 89, 90, 91, 94, 68, - 102, 103, 101, 3, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 105, 104, 106, - 107, 68, 71, 68, 68, 68, 68, 68, - 68, 68, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, - 68, 122, 123, 124, 68, 58, 59, 68, - 125, 126, 127, 128, 129, 68, 68, 68, - 68, 130, 68, 106, 107, 68, 71, 68, - 68, 68, 68, 68, 68, 68, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 118, - 118, 119, 120, 121, 68, 122, 123, 124, - 68, 68, 68, 68, 125, 126, 127, 128, - 129, 68, 68, 68, 68, 130, 68, 106, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 71, 68, 68, 68, - 68, 68, 68, 68, 68, 109, 110, 111, - 112, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 122, 123, 124, 68, 68, - 68, 68, 68, 126, 127, 128, 131, 68, - 68, 68, 68, 109, 68, 71, 68, 68, - 68, 68, 68, 68, 68, 68, 109, 110, - 111, 112, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 122, 123, 124, 68, - 68, 68, 68, 68, 126, 127, 128, 131, - 68, 71, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 110, 111, 112, 68, 68, + 74, 75, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 85, 86, 68, + 68, 68, 68, 68, 88, 89, 90, 93, + 68, 70, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 73, 74, 75, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 86, 68, 68, 68, 68, 68, + 88, 89, 90, 93, 68, 95, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 96, 94, 70, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 73, 74, + 75, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 88, 89, 90, 93, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 71, 72, 73, 74, 75, 68, 68, 68, + 68, 68, 68, 81, 82, 83, 68, 84, + 85, 86, 68, 68, 68, 68, 68, 88, + 89, 90, 93, 68, 68, 68, 68, 72, + 68, 70, 68, 68, 68, 68, 68, 68, + 68, 68, 72, 73, 74, 75, 68, 68, + 68, 68, 68, 68, 81, 82, 83, 68, + 84, 85, 86, 68, 68, 68, 68, 68, + 88, 89, 90, 93, 68, 68, 68, 68, + 72, 68, 70, 68, 68, 68, 68, 68, + 68, 68, 68, 72, 73, 74, 75, 68, + 68, 68, 68, 68, 68, 68, 82, 83, + 68, 84, 85, 86, 68, 68, 68, 68, + 68, 88, 89, 90, 93, 68, 68, 68, + 68, 72, 68, 70, 68, 68, 68, 68, + 68, 68, 68, 68, 72, 73, 74, 75, 68, 68, 68, 68, 68, 68, 68, 68, - 126, 127, 128, 68, 71, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 111, - 112, 68, 68, 68, 68, 68, 68, 68, + 83, 68, 84, 85, 86, 68, 68, 68, + 68, 68, 88, 89, 90, 93, 68, 68, + 68, 68, 72, 68, 97, 68, 70, 68, + 68, 68, 68, 68, 68, 68, 71, 72, + 73, 74, 75, 68, 77, 78, 68, 68, + 68, 81, 82, 83, 68, 84, 85, 86, + 68, 68, 68, 68, 68, 88, 89, 90, + 93, 68, 68, 68, 68, 72, 68, 70, + 68, 68, 68, 68, 68, 68, 68, 68, + 72, 73, 74, 75, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 84, 85, + 86, 68, 68, 68, 68, 68, 88, 89, + 90, 93, 68, 68, 68, 68, 72, 68, + 97, 68, 70, 68, 68, 68, 68, 68, + 68, 68, 71, 72, 73, 74, 75, 68, + 68, 78, 68, 68, 68, 81, 82, 83, + 68, 84, 85, 86, 68, 68, 68, 68, + 68, 88, 89, 90, 93, 68, 68, 68, + 68, 72, 68, 97, 68, 70, 68, 68, + 68, 68, 68, 68, 68, 71, 72, 73, + 74, 75, 68, 68, 68, 68, 68, 68, + 81, 82, 83, 68, 84, 85, 86, 68, + 68, 68, 68, 68, 88, 89, 90, 93, + 68, 68, 68, 68, 72, 68, 97, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 71, 72, 73, 74, 75, 76, 77, 78, + 68, 68, 68, 81, 82, 83, 68, 84, + 85, 86, 68, 68, 68, 68, 68, 88, + 89, 90, 93, 68, 68, 68, 68, 72, + 68, 4, 69, 68, 70, 68, 68, 68, + 68, 68, 68, 68, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 68, 80, 81, + 82, 83, 68, 84, 85, 86, 68, 68, + 68, 68, 87, 88, 89, 90, 91, 68, + 68, 68, 68, 92, 68, 4, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 99, 98, 4, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, + 94, 96, 94, 4, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 68, 72, 73, 74, 75, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 84, + 85, 86, 68, 68, 68, 68, 68, 88, + 89, 90, 93, 68, 101, 102, 100, 6, + 103, 103, 103, 103, 103, 103, 103, 103, + 103, 104, 103, 105, 106, 68, 70, 68, + 68, 68, 68, 68, 68, 68, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 105, + 116, 117, 118, 119, 68, 120, 121, 122, + 68, 58, 59, 68, 123, 124, 125, 126, + 127, 68, 68, 68, 68, 128, 68, 105, + 106, 68, 70, 68, 68, 68, 68, 68, + 68, 68, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 105, 116, 117, 118, 119, + 68, 120, 121, 122, 68, 68, 68, 68, + 123, 124, 125, 126, 127, 68, 68, 68, + 68, 128, 68, 105, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 68, 108, 109, 110, 111, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 120, + 121, 122, 68, 68, 68, 68, 68, 124, + 125, 126, 129, 68, 68, 68, 68, 108, + 68, 70, 68, 68, 68, 68, 68, 68, + 68, 68, 108, 109, 110, 111, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 126, 127, 128, 68, 71, + 120, 121, 122, 68, 68, 68, 68, 68, + 124, 125, 126, 129, 68, 70, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 109, + 110, 111, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 112, 68, 68, 68, 68, + 68, 68, 68, 68, 124, 125, 126, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 110, 111, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 126, 127, - 128, 68, 71, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 124, + 125, 126, 68, 70, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 111, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 124, 125, 126, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 126, 127, 68, 71, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 124, 125, 68, + 70, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 127, 68, 71, 68, - 71, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 110, 111, 112, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 122, - 123, 124, 68, 68, 68, 68, 68, 126, - 127, 128, 131, 68, 71, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 110, 111, - 112, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 123, 124, 68, 68, - 68, 68, 68, 126, 127, 128, 131, 68, - 71, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 110, 111, 112, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 124, 68, 68, 68, 68, 68, 126, - 127, 128, 131, 68, 132, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 97, 95, 71, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 110, 111, 112, 68, 68, 68, 68, 68, 68, 68, 68, + 125, 68, 70, 68, 70, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 109, 110, + 111, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 120, 121, 122, 68, 68, + 68, 68, 68, 124, 125, 126, 129, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 109, 110, 111, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 126, 127, 128, 131, 68, 71, - 68, 68, 68, 68, 68, 68, 68, 108, - 109, 110, 111, 112, 68, 68, 68, 68, - 68, 68, 119, 120, 121, 68, 122, 123, - 124, 68, 68, 68, 68, 68, 126, 127, - 128, 131, 68, 68, 68, 68, 109, 68, - 71, 68, 68, 68, 68, 68, 68, 68, - 68, 109, 110, 111, 112, 68, 68, 68, - 68, 68, 68, 119, 120, 121, 68, 122, - 123, 124, 68, 68, 68, 68, 68, 126, - 127, 128, 131, 68, 68, 68, 68, 109, - 68, 71, 68, 68, 68, 68, 68, 68, - 68, 68, 109, 110, 111, 112, 68, 68, - 68, 68, 68, 68, 68, 120, 121, 68, - 122, 123, 124, 68, 68, 68, 68, 68, - 126, 127, 128, 131, 68, 68, 68, 68, - 109, 68, 71, 68, 68, 68, 68, 68, - 68, 68, 68, 109, 110, 111, 112, 68, - 68, 68, 68, 68, 68, 68, 68, 121, - 68, 122, 123, 124, 68, 68, 68, 68, - 68, 126, 127, 128, 131, 68, 68, 68, - 68, 109, 68, 133, 68, 71, 68, 68, + 121, 122, 68, 68, 68, 68, 68, 124, + 125, 126, 129, 68, 70, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 109, 110, + 111, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 122, 68, 68, + 68, 68, 68, 124, 125, 126, 129, 68, + 130, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 96, 94, 70, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 109, 110, 111, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 124, 125, + 126, 129, 68, 70, 68, 68, 68, 68, + 68, 68, 68, 107, 108, 109, 110, 111, + 68, 68, 68, 68, 68, 68, 117, 118, + 119, 68, 120, 121, 122, 68, 68, 68, + 68, 68, 124, 125, 126, 129, 68, 68, + 68, 68, 108, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 108, 109, 110, - 111, 112, 68, 114, 115, 68, 68, 68, - 119, 120, 121, 68, 122, 123, 124, 68, - 68, 68, 68, 68, 126, 127, 128, 131, - 68, 68, 68, 68, 109, 68, 71, 68, - 68, 68, 68, 68, 68, 68, 68, 109, - 110, 111, 112, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 122, 123, 124, - 68, 68, 68, 68, 68, 126, 127, 128, - 131, 68, 68, 68, 68, 109, 68, 133, - 68, 71, 68, 68, 68, 68, 68, 68, - 68, 108, 109, 110, 111, 112, 68, 68, - 115, 68, 68, 68, 119, 120, 121, 68, - 122, 123, 124, 68, 68, 68, 68, 68, - 126, 127, 128, 131, 68, 68, 68, 68, - 109, 68, 133, 68, 71, 68, 68, 68, - 68, 68, 68, 68, 108, 109, 110, 111, - 112, 68, 68, 68, 68, 68, 68, 119, - 120, 121, 68, 122, 123, 124, 68, 68, - 68, 68, 68, 126, 127, 128, 131, 68, - 68, 68, 68, 109, 68, 133, 68, 71, + 111, 68, 68, 68, 68, 68, 68, 117, + 118, 119, 68, 120, 121, 122, 68, 68, + 68, 68, 68, 124, 125, 126, 129, 68, + 68, 68, 68, 108, 68, 70, 68, 68, + 68, 68, 68, 68, 68, 68, 108, 109, + 110, 111, 68, 68, 68, 68, 68, 68, + 68, 118, 119, 68, 120, 121, 122, 68, + 68, 68, 68, 68, 124, 125, 126, 129, + 68, 68, 68, 68, 108, 68, 70, 68, 68, 68, 68, 68, 68, 68, 68, 108, - 109, 110, 111, 112, 113, 114, 115, 68, - 68, 68, 119, 120, 121, 68, 122, 123, - 124, 68, 68, 68, 68, 68, 126, 127, - 128, 131, 68, 68, 68, 68, 109, 68, - 106, 107, 68, 71, 68, 68, 68, 68, - 68, 68, 68, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 68, 118, 119, 120, - 121, 68, 122, 123, 124, 68, 68, 68, - 68, 125, 126, 127, 128, 129, 68, 68, - 68, 68, 130, 68, 106, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 100, 99, 106, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 97, 95, 106, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 71, + 109, 110, 111, 68, 68, 68, 68, 68, + 68, 68, 68, 119, 68, 120, 121, 122, + 68, 68, 68, 68, 68, 124, 125, 126, + 129, 68, 68, 68, 68, 108, 68, 131, + 68, 70, 68, 68, 68, 68, 68, 68, + 68, 107, 108, 109, 110, 111, 68, 113, + 114, 68, 68, 68, 117, 118, 119, 68, + 120, 121, 122, 68, 68, 68, 68, 68, + 124, 125, 126, 129, 68, 68, 68, 68, + 108, 68, 70, 68, 68, 68, 68, 68, + 68, 68, 68, 108, 109, 110, 111, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 120, 121, 122, 68, 68, 68, 68, + 68, 124, 125, 126, 129, 68, 68, 68, + 68, 108, 68, 131, 68, 70, 68, 68, + 68, 68, 68, 68, 68, 107, 108, 109, + 110, 111, 68, 68, 114, 68, 68, 68, + 117, 118, 119, 68, 120, 121, 122, 68, + 68, 68, 68, 68, 124, 125, 126, 129, + 68, 68, 68, 68, 108, 68, 131, 68, + 70, 68, 68, 68, 68, 68, 68, 68, + 107, 108, 109, 110, 111, 68, 68, 68, + 68, 68, 68, 117, 118, 119, 68, 120, + 121, 122, 68, 68, 68, 68, 68, 124, + 125, 126, 129, 68, 68, 68, 68, 108, + 68, 131, 68, 70, 68, 68, 68, 68, + 68, 68, 68, 107, 108, 109, 110, 111, + 112, 113, 114, 68, 68, 68, 117, 118, + 119, 68, 120, 121, 122, 68, 68, 68, + 68, 68, 124, 125, 126, 129, 68, 68, + 68, 68, 108, 68, 105, 106, 68, 70, + 68, 68, 68, 68, 68, 68, 68, 107, + 108, 109, 110, 111, 112, 113, 114, 115, + 68, 116, 117, 118, 119, 68, 120, 121, + 122, 68, 68, 68, 68, 123, 124, 125, + 126, 127, 68, 68, 68, 68, 128, 68, + 105, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 99, 98, 105, + 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 96, 94, 105, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 109, 110, 111, 112, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 122, 123, - 124, 68, 68, 68, 68, 68, 126, 127, - 128, 131, 68, 106, 107, 68, 71, 68, - 68, 68, 68, 68, 68, 68, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 68, 122, 123, 124, - 68, 68, 68, 68, 125, 126, 127, 128, - 129, 68, 68, 68, 68, 130, 68, 5, - 6, 134, 8, 134, 134, 134, 134, 134, - 134, 134, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 20, 20, 21, 22, 23, - 134, 24, 25, 26, 134, 134, 134, 134, - 30, 31, 32, 33, 30, 134, 134, 134, - 134, 36, 134, 5, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 8, 134, 134, 134, 134, 134, 134, 134, - 134, 11, 12, 13, 14, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 24, - 25, 26, 134, 134, 134, 134, 134, 31, - 32, 33, 135, 134, 134, 134, 134, 11, - 134, 8, 134, 134, 134, 134, 134, 134, - 134, 134, 11, 12, 13, 14, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 24, 25, 26, 134, 134, 134, 134, 134, - 31, 32, 33, 135, 134, 8, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 12, - 13, 14, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 31, 32, 33, 134, - 8, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 13, 14, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 31, - 32, 33, 134, 8, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 14, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 31, 32, 33, 134, 8, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 31, 32, 134, - 8, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 32, 134, 8, 134, 8, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 12, 13, - 14, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 24, 25, 26, 134, 134, - 134, 134, 134, 31, 32, 33, 135, 134, - 8, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 12, 13, 14, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 25, 26, 134, 134, 134, 134, 134, 31, - 32, 33, 135, 134, 8, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 12, 13, - 14, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 26, 134, 134, - 134, 134, 134, 31, 32, 33, 135, 134, - 136, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 8, 134, 8, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 12, 13, 14, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 31, 32, - 33, 135, 134, 8, 134, 134, 134, 134, - 134, 134, 134, 10, 11, 12, 13, 14, - 134, 134, 134, 134, 134, 134, 21, 22, - 23, 134, 24, 25, 26, 134, 134, 134, - 134, 134, 31, 32, 33, 135, 134, 134, - 134, 134, 11, 134, 8, 134, 134, 134, - 134, 134, 134, 134, 134, 11, 12, 13, - 14, 134, 134, 134, 134, 134, 134, 21, - 22, 23, 134, 24, 25, 26, 134, 134, - 134, 134, 134, 31, 32, 33, 135, 134, - 134, 134, 134, 11, 134, 8, 134, 134, - 134, 134, 134, 134, 134, 134, 11, 12, - 13, 14, 134, 134, 134, 134, 134, 134, - 134, 22, 23, 134, 24, 25, 26, 134, - 134, 134, 134, 134, 31, 32, 33, 135, - 134, 134, 134, 134, 11, 134, 8, 134, - 134, 134, 134, 134, 134, 134, 134, 11, - 12, 13, 14, 134, 134, 134, 134, 134, - 134, 134, 134, 23, 134, 24, 25, 26, - 134, 134, 134, 134, 134, 31, 32, 33, - 135, 134, 134, 134, 134, 11, 134, 137, - 134, 8, 134, 134, 134, 134, 134, 134, - 134, 10, 11, 12, 13, 14, 134, 16, - 17, 134, 134, 134, 21, 22, 23, 134, - 24, 25, 26, 134, 134, 134, 134, 134, - 31, 32, 33, 135, 134, 134, 134, 134, - 11, 134, 8, 134, 134, 134, 134, 134, - 134, 134, 134, 11, 12, 13, 14, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 24, 25, 26, 134, 134, 134, 134, - 134, 31, 32, 33, 135, 134, 134, 134, - 134, 11, 134, 137, 134, 8, 134, 134, - 134, 134, 134, 134, 134, 10, 11, 12, - 13, 14, 134, 134, 17, 134, 134, 134, - 21, 22, 23, 134, 24, 25, 26, 134, - 134, 134, 134, 134, 31, 32, 33, 135, - 134, 134, 134, 134, 11, 134, 137, 134, - 8, 134, 134, 134, 134, 134, 134, 134, - 10, 11, 12, 13, 14, 134, 134, 134, - 134, 134, 134, 21, 22, 23, 134, 24, - 25, 26, 134, 134, 134, 134, 134, 31, - 32, 33, 135, 134, 134, 134, 134, 11, - 134, 137, 134, 8, 134, 134, 134, 134, - 134, 134, 134, 10, 11, 12, 13, 14, - 15, 16, 17, 134, 134, 134, 21, 22, - 23, 134, 24, 25, 26, 134, 134, 134, - 134, 134, 31, 32, 33, 135, 134, 134, - 134, 134, 11, 134, 5, 6, 134, 8, - 134, 134, 134, 134, 134, 134, 134, 10, - 11, 12, 13, 14, 15, 16, 17, 18, - 134, 20, 21, 22, 23, 134, 24, 25, - 26, 134, 134, 134, 134, 30, 31, 32, - 33, 30, 134, 134, 134, 134, 36, 134, - 5, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 8, 134, 5, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 8, 134, 134, 134, - 134, 134, 134, 134, 134, 11, 12, 13, - 14, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 24, 25, 26, 134, 134, - 134, 134, 134, 31, 32, 33, 135, 134, - 138, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 8, 134, 7, 8, 134, 1, - 134, 134, 134, 1, 134, 134, 134, 134, - 134, 5, 6, 7, 8, 134, 134, 134, - 134, 134, 134, 134, 10, 11, 12, 13, + 68, 68, 68, 70, 68, 68, 68, 68, + 68, 68, 68, 68, 108, 109, 110, 111, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 120, 121, 122, 68, 68, 68, + 68, 68, 124, 125, 126, 129, 68, 8, + 9, 132, 11, 132, 132, 132, 132, 132, + 132, 132, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 8, 22, 23, 24, 25, + 132, 26, 27, 28, 132, 132, 132, 132, + 32, 33, 34, 35, 32, 132, 132, 132, + 132, 37, 132, 8, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 11, 132, 132, 132, 132, 132, 132, 132, + 132, 14, 15, 16, 17, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 26, + 27, 28, 132, 132, 132, 132, 132, 33, + 34, 35, 133, 132, 132, 132, 132, 14, + 132, 11, 132, 132, 132, 132, 132, 132, + 132, 132, 14, 15, 16, 17, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 26, 27, 28, 132, 132, 132, 132, 132, + 33, 34, 35, 133, 132, 11, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 15, + 16, 17, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 33, 34, 35, 132, + 11, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 16, 17, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 33, + 34, 35, 132, 11, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 17, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 33, 34, 35, 132, 11, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 33, 34, 132, + 11, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 34, 132, 11, 132, 11, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 15, 16, + 17, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 26, 27, 28, 132, 132, + 132, 132, 132, 33, 34, 35, 133, 132, + 11, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 15, 16, 17, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 27, 28, 132, 132, 132, 132, 132, 33, + 34, 35, 133, 132, 11, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 15, 16, + 17, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 28, 132, 132, + 132, 132, 132, 33, 34, 35, 133, 132, + 134, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 11, 132, 11, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 15, 16, 17, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 33, 34, + 35, 133, 132, 11, 132, 132, 132, 132, + 132, 132, 132, 13, 14, 15, 16, 17, + 132, 132, 132, 132, 132, 132, 23, 24, + 25, 132, 26, 27, 28, 132, 132, 132, + 132, 132, 33, 34, 35, 133, 132, 132, + 132, 132, 14, 132, 11, 132, 132, 132, + 132, 132, 132, 132, 132, 14, 15, 16, + 17, 132, 132, 132, 132, 132, 132, 23, + 24, 25, 132, 26, 27, 28, 132, 132, + 132, 132, 132, 33, 34, 35, 133, 132, + 132, 132, 132, 14, 132, 11, 132, 132, + 132, 132, 132, 132, 132, 132, 14, 15, + 16, 17, 132, 132, 132, 132, 132, 132, + 132, 24, 25, 132, 26, 27, 28, 132, + 132, 132, 132, 132, 33, 34, 35, 133, + 132, 132, 132, 132, 14, 132, 11, 132, + 132, 132, 132, 132, 132, 132, 132, 14, + 15, 16, 17, 132, 132, 132, 132, 132, + 132, 132, 132, 25, 132, 26, 27, 28, + 132, 132, 132, 132, 132, 33, 34, 35, + 133, 132, 132, 132, 132, 14, 132, 135, + 132, 11, 132, 132, 132, 132, 132, 132, + 132, 13, 14, 15, 16, 17, 132, 19, + 20, 132, 132, 132, 23, 24, 25, 132, + 26, 27, 28, 132, 132, 132, 132, 132, + 33, 34, 35, 133, 132, 132, 132, 132, + 14, 132, 11, 132, 132, 132, 132, 132, + 132, 132, 132, 14, 15, 16, 17, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 26, 27, 28, 132, 132, 132, 132, + 132, 33, 34, 35, 133, 132, 132, 132, + 132, 14, 132, 135, 132, 11, 132, 132, + 132, 132, 132, 132, 132, 13, 14, 15, + 16, 17, 132, 132, 20, 132, 132, 132, + 23, 24, 25, 132, 26, 27, 28, 132, + 132, 132, 132, 132, 33, 34, 35, 133, + 132, 132, 132, 132, 14, 132, 135, 132, + 11, 132, 132, 132, 132, 132, 132, 132, + 13, 14, 15, 16, 17, 132, 132, 132, + 132, 132, 132, 23, 24, 25, 132, 26, + 27, 28, 132, 132, 132, 132, 132, 33, + 34, 35, 133, 132, 132, 132, 132, 14, + 132, 135, 132, 11, 132, 132, 132, 132, + 132, 132, 132, 13, 14, 15, 16, 17, + 18, 19, 20, 132, 132, 132, 23, 24, + 25, 132, 26, 27, 28, 132, 132, 132, + 132, 132, 33, 34, 35, 133, 132, 132, + 132, 132, 14, 132, 8, 9, 132, 11, + 132, 132, 132, 132, 132, 132, 132, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 134, 24, 25, 26, 134, 27, - 28, 134, 30, 31, 32, 33, 30, 134, - 134, 134, 134, 36, 134, 5, 6, 134, - 8, 134, 134, 134, 134, 134, 134, 134, - 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 134, 24, - 25, 26, 134, 134, 134, 134, 30, 31, - 32, 33, 30, 134, 134, 134, 134, 36, - 134, 8, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 27, 28, 134, 8, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 28, 134, 1, 139, 139, - 139, 1, 139, 141, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 142, - 140, 34, 140, 141, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 34, 142, - 140, 142, 140, 141, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 140, 140, 34, 140, - 35, 140, 0 + 132, 22, 23, 24, 25, 132, 26, 27, + 28, 132, 132, 132, 132, 32, 33, 34, + 35, 32, 132, 132, 132, 132, 37, 132, + 8, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 11, 132, 8, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 11, 132, 132, 132, + 132, 132, 132, 132, 132, 14, 15, 16, + 17, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 26, 27, 28, 132, 132, + 132, 132, 132, 33, 34, 35, 133, 132, + 136, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 11, 132, 10, 11, 132, 4, + 132, 132, 132, 4, 132, 132, 132, 132, + 132, 8, 9, 10, 11, 132, 132, 132, + 132, 132, 132, 132, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 8, 22, 23, + 24, 25, 132, 26, 27, 28, 132, 29, + 30, 132, 32, 33, 34, 35, 32, 132, + 132, 132, 132, 37, 132, 11, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 29, 30, 132, 11, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 30, + 132, 4, 137, 137, 137, 4, 137, 139, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 140, 138, 141, 138, 141, + 142, 138, 139, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 1, 140, 140, + 138, 139, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 140, 138, 141, + 138, 139, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 140, 138, 141, + 138, 141, 138, 39, 40, 38, 41, 38, + 38, 38, 38, 38, 38, 38, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 39, + 51, 52, 53, 54, 38, 55, 56, 57, + 38, 58, 59, 38, 60, 61, 62, 63, + 60, 1, 38, 2, 38, 64, 38, 0 }; static const char _use_syllable_machine_trans_targs[] = { - 1, 31, 0, 59, 61, 90, 91, 116, - 0, 118, 104, 92, 93, 94, 95, 108, - 110, 111, 112, 119, 113, 105, 106, 107, - 99, 100, 101, 120, 121, 122, 114, 96, - 97, 98, 123, 125, 115, 0, 2, 3, - 0, 16, 4, 5, 6, 7, 20, 22, - 23, 24, 28, 25, 17, 18, 19, 11, - 12, 13, 29, 30, 26, 8, 9, 10, - 27, 14, 15, 21, 0, 32, 33, 0, - 46, 34, 35, 36, 37, 50, 52, 53, - 54, 55, 47, 48, 49, 41, 42, 43, - 56, 38, 39, 40, 57, 58, 44, 0, - 45, 0, 51, 0, 0, 0, 60, 0, - 0, 0, 62, 63, 76, 64, 65, 66, - 67, 80, 82, 83, 84, 89, 85, 77, - 78, 79, 71, 72, 73, 86, 68, 69, - 70, 87, 88, 74, 75, 81, 0, 102, - 103, 109, 117, 0, 0, 0, 124 + 1, 120, 0, 2, 31, 1, 58, 60, + 88, 89, 114, 1, 116, 102, 90, 91, + 92, 93, 106, 108, 109, 110, 111, 103, + 104, 105, 97, 98, 99, 117, 118, 119, + 112, 94, 95, 96, 124, 113, 1, 3, + 4, 1, 17, 5, 6, 7, 8, 21, + 23, 24, 25, 26, 18, 19, 20, 12, + 13, 14, 29, 30, 27, 9, 10, 11, + 28, 15, 16, 22, 1, 32, 1, 45, + 33, 34, 35, 36, 49, 51, 52, 53, + 54, 46, 47, 48, 40, 41, 42, 55, + 37, 38, 39, 56, 57, 43, 1, 44, + 1, 50, 1, 1, 1, 59, 1, 1, + 1, 61, 62, 75, 63, 64, 65, 66, + 79, 81, 82, 83, 84, 76, 77, 78, + 70, 71, 72, 85, 67, 68, 69, 86, + 87, 73, 74, 80, 1, 100, 101, 107, + 115, 1, 1, 1, 121, 122, 123 }; static const char _use_syllable_machine_trans_actions[] = { - 0, 0, 3, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 4, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 7, 0, + 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 8, + 0, 0, 0, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, - 0, 10, 0, 11, 12, 13, 0, 14, - 15, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 11, 0, + 12, 0, 13, 14, 15, 0, 16, 17, + 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 0, - 0, 0, 0, 18, 19, 20, 0 + 0, 0, 0, 0, 19, 0, 0, 0, + 0, 20, 21, 22, 0, 0, 0 }; static const char _use_syllable_machine_to_state_actions[] = { - 1, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -778,11 +769,11 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0 }; static const char _use_syllable_machine_from_state_actions[] = { - 2, 0, 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -797,40 +788,40 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0 }; static const short _use_syllable_machine_eof_trans[] = { - 0, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 69, + 1, 0, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 96, 69, 69, 69, + 69, 69, 69, 95, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 99, + 95, 69, 101, 104, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 100, 96, 69, 102, 105, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 96, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 100, 96, - 69, 69, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 140, 141, 141, 141 + 69, 95, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 99, 95, 69, + 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 138, + 139, 139, 139, 139, 39 }; -static const int use_syllable_machine_start = 0; -static const int use_syllable_machine_first_final = 0; +static const int use_syllable_machine_start = 1; +static const int use_syllable_machine_first_final = 1; static const int use_syllable_machine_error = -1; -static const int use_syllable_machine_en_main = 0; +static const int use_syllable_machine_en_main = 1; #line 58 "hb-ot-shaper-use-machine.rl" -#line 182 "hb-ot-shaper-use-machine.rl" +#line 184 "hb-ot-shaper-use-machine.rl" #define found_syllable(syllable_type) \ @@ -929,7 +920,7 @@ unsigned int act HB_UNUSED; int cs; -#line 922 "hb-ot-shaper-use-machine.hh" +#line 924 "hb-ot-shaper-use-machine.hh" { cs = use_syllable_machine_start; ts = 0; @@ -937,12 +928,12 @@ act = 0; } -#line 282 "hb-ot-shaper-use-machine.rl" +#line 284 "hb-ot-shaper-use-machine.rl" unsigned int syllable_serial = 1; -#line 931 "hb-ot-shaper-use-machine.hh" +#line 937 "hb-ot-shaper-use-machine.hh" { int _slen; int _trans; @@ -952,11 +943,11 @@ goto _test_eof; _resume: switch ( _use_syllable_machine_from_state_actions[cs] ) { - case 2: + case 3: #line 1 "NONE" {ts = p;} break; -#line 943 "hb-ot-shaper-use-machine.hh" +#line 951 "hb-ot-shaper-use-machine.hh" } _keys = _use_syllable_machine_trans_keys + (cs<<1); @@ -974,88 +965,96 @@ goto _again; switch ( _use_syllable_machine_trans_actions[_trans] ) { - case 12: -#line 170 "hb-ot-shaper-use-machine.rl" + case 6: +#line 1 "NONE" + {te = p+1;} + break; + case 14: +#line 172 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_virama_terminated_cluster); }} break; - case 10: -#line 171 "hb-ot-shaper-use-machine.rl" + case 12: +#line 173 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_sakot_terminated_cluster); }} break; - case 8: -#line 172 "hb-ot-shaper-use-machine.rl" + case 10: +#line 174 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_standard_cluster); }} break; - case 16: -#line 173 "hb-ot-shaper-use-machine.rl" + case 18: +#line 175 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_number_joiner_terminated_cluster); }} break; - case 14: -#line 174 "hb-ot-shaper-use-machine.rl" + case 16: +#line 176 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_numeral_cluster); }} break; - case 6: -#line 175 "hb-ot-shaper-use-machine.rl" + case 8: +#line 177 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_symbol_cluster); }} break; - case 20: -#line 176 "hb-ot-shaper-use-machine.rl" + case 22: +#line 178 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_hieroglyph_cluster); }} break; - case 4: -#line 177 "hb-ot-shaper-use-machine.rl" + case 5: +#line 179 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }} break; - case 3: -#line 178 "hb-ot-shaper-use-machine.rl" + case 4: +#line 180 "hb-ot-shaper-use-machine.rl" {te = p+1;{ found_syllable (use_non_cluster); }} break; - case 11: -#line 170 "hb-ot-shaper-use-machine.rl" + case 13: +#line 172 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_virama_terminated_cluster); }} break; - case 9: -#line 171 "hb-ot-shaper-use-machine.rl" + case 11: +#line 173 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }} break; - case 7: -#line 172 "hb-ot-shaper-use-machine.rl" + case 9: +#line 174 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_standard_cluster); }} break; - case 15: -#line 173 "hb-ot-shaper-use-machine.rl" + case 17: +#line 175 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }} break; - case 13: -#line 174 "hb-ot-shaper-use-machine.rl" + case 15: +#line 176 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_numeral_cluster); }} break; - case 5: -#line 175 "hb-ot-shaper-use-machine.rl" + case 7: +#line 177 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_symbol_cluster); }} break; - case 19: -#line 176 "hb-ot-shaper-use-machine.rl" + case 21: +#line 178 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_hieroglyph_cluster); }} break; - case 17: -#line 177 "hb-ot-shaper-use-machine.rl" + case 19: +#line 179 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }} break; - case 18: -#line 178 "hb-ot-shaper-use-machine.rl" + case 20: +#line 180 "hb-ot-shaper-use-machine.rl" {te = p;p--;{ found_syllable (use_non_cluster); }} break; -#line 1014 "hb-ot-shaper-use-machine.hh" + case 1: +#line 177 "hb-ot-shaper-use-machine.rl" + {{p = ((te))-1;}{ found_syllable (use_symbol_cluster); }} + break; +#line 1049 "hb-ot-shaper-use-machine.hh" } _again: switch ( _use_syllable_machine_to_state_actions[cs] ) { - case 1: + case 2: #line 1 "NONE" {ts = 0;} break; -#line 1021 "hb-ot-shaper-use-machine.hh" +#line 1058 "hb-ot-shaper-use-machine.hh" } if ( ++p != pe ) @@ -1071,7 +1070,7 @@ } -#line 287 "hb-ot-shaper-use-machine.rl" +#line 289 "hb-ot-shaper-use-machine.rl" } diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-use-machine.rl harfbuzz-8.3.0/src/hb-ot-shaper-use-machine.rl --- harfbuzz-8.0.1/src/hb-ot-shaper-use-machine.rl 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-use-machine.rl 2023-11-11 14:08:45.000000000 +0000 @@ -83,6 +83,8 @@ export SB = 51; # HIEROGLYPH_SEGMENT_BEGIN export SE = 52; # HIEROGLYPH_SEGMENT_END export HVM = 53; # HALANT_OR_VOWEL_MODIFIER +export HM = 54; # HIEROGLYPH_MOD +export HR = 55; # HIEROGLYPH_MIRROR export FAbv = 24; # CONS_FINAL_ABOVE export FBlw = 25; # CONS_FINAL_BELOW @@ -162,8 +164,8 @@ number_joiner_terminated_cluster = N number_joiner_terminated_cluster_tail; numeral_cluster = N numeral_cluster_tail?; -symbol_cluster = (O | GB) tail?; -hieroglyph_cluster = SB+ | SB* G SE* (J SE* (G SE*)?)*; +symbol_cluster = (O | GB | SB) tail?; +hieroglyph_cluster = SB* G HR? HM? SE* (J SB* (G HR? HM? SE*)?)*; other = any; main := |* diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-use-table.hh harfbuzz-8.3.0/src/hb-ot-shaper-use-table.hh --- harfbuzz-8.0.1/src/hb-ot-shaper-use-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-use-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -6,18 +6,18 @@ * * on files with these headers: * - * # IndicSyllabicCategory-15.0.0.txt - * # Date: 2022-05-26, 02:18:00 GMT [KW, RP] - * # IndicPositionalCategory-15.0.0.txt - * # Date: 2022-05-26, 02:18:00 GMT [KW, RP] - * # ArabicShaping-15.0.0.txt - * # Date: 2022-02-14, 18:50:00 GMT [KW, RP] - * # DerivedCoreProperties-15.0.0.txt - * # Date: 2022-08-05, 22:17:05 GMT - * # Blocks-15.0.0.txt - * # Date: 2022-01-28, 20:58:00 GMT [KW] - * # Scripts-15.0.0.txt - * # Date: 2022-04-26, 23:15:02 GMT + * # IndicSyllabicCategory-15.1.0.txt + * # Date: 2023-01-05 + * # IndicPositionalCategory-15.1.0.txt + * # Date: 2023-01-05 + * # ArabicShaping-15.1.0.txt + * # Date: 2023-01-05 + * # DerivedCoreProperties-15.1.0.txt + * # Date: 2023-08-07, 15:21:24 GMT + * # Blocks-15.1.0.txt + * # Date: 2023-07-28, 15:47:20 GMT + * # Scripts-15.1.0.txt + * # Date: 2023-07-28, 16:01:07 GMT * # Override values For Indic_Syllabic_Category * # Not derivable * # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17 @@ -26,6 +26,7 @@ * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28 * # Updated for Unicode 14.0 by Andrew Glass 2021-09-25 * # Updated for Unicode 15.0 by Andrew Glass 2022-09-16 + * # Updated for Unicode 15.1 by Andrew Glass 2023-09-14 * # Override values For Indic_Positional_Category * # Not derivable * # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17 @@ -36,6 +37,7 @@ * # Updated for Unicode 13.0 by Andrew Glass 2020-07-28 * # Updated for Unicode 14.0 by Andrew Glass 2021-09-28 * # Updated for Unicode 15.0 by Andrew Glass 2022-09-16 + * # Updated for Unicode 15.1 by Andrew Glass 2023-09-14 * UnicodeData.txt does not have a header. */ @@ -54,7 +56,9 @@ #define G USE(G) /* HIEROGLYPH */ #define GB USE(GB) /* BASE_OTHER */ #define H USE(H) /* HALANT */ +#define HM USE(HM) /* HIEROGLYPH_MOD */ #define HN USE(HN) /* HALANT_NUM */ +#define HR USE(HR) /* HIEROGLYPH_MIRROR */ #define HVM USE(HVM) /* HALANT_OR_VOWEL_MODIFIER */ #define IS USE(IS) /* INVISIBLE_STACKER */ #define J USE(J) /* HIEROGLYPH_JOINER */ @@ -95,7 +99,7 @@ #ifndef HB_OPTIMIZE_SIZE static const uint8_t -hb_use_u8[3141] = +hb_use_u8[3187] = { 16, 50, 51, 51, 51, 52, 51, 83, 118, 131, 51, 57, 58, 179, 195, 61, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, @@ -109,244 +113,249 @@ 18, 19, 20, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 2, 33, 2, 2, 2, 2, 34, 35, 2, 2, 2, 2, 2, 2, 2, 2, 2, 36, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 37, 2, 2, 2, 2, + 37, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 38, 2, 39, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 38, 39, 40, 41, 42, 43, 2, 44, 2, 2, 2, 2, 2, 2, 2, + 2, 40, 41, 42, 43, 44, 45, 2, 46, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 45, 46, 2, - 47, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 48, 49, 2, 2, 2, - 2, 2, 2, 2, 2, 50, 51, 2, 52, 2, 2, 53, 2, 2, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 2, 64, 65, 2, 66, 67, 68, 69, - 2, 70, 2, 71, 72, 73, 74, 2, 2, 75, 76, 77, 78, 2, 79, 80, - 2, 81, 81, 81, 81, 81, 81, 81, 81, 82, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 47, 48, 2, + 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 51, 2, 2, 2, + 2, 2, 2, 2, 2, 52, 53, 2, 54, 2, 2, 55, 2, 2, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 2, 66, 67, 2, 68, 69, 70, 71, + 2, 72, 2, 73, 74, 75, 76, 2, 2, 77, 78, 79, 80, 2, 81, 82, + 2, 83, 83, 83, 83, 83, 83, 83, 83, 84, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 83, 84, 2, 2, 2, 2, 2, 2, 2, 85, - 86, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 81, 81, 81, 87, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 85, 86, 2, 2, 2, 2, 2, 2, 2, 87, + 88, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 89, 89, 89, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 88, 89, 2, 2, 2, 2, 2, - 2, 2, 2, 90, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 91, 92, 2, 2, 2, 2, 2, + 2, 2, 2, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 91, 2, 2, 92, 2, 2, 2, 93, 2, 2, 2, 2, 2, - 2, 2, 2, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 95, 95, 96, 97, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 2, 2, 2, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 8, 9, 9, 9, 9, 0, 0, 0, 7, 10, - 0, 2, 2, 2, 2, 11, 12, 0, 0, 9, 13, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 14, 15, 16, 17, 18, 19, 20, 14, 21, 22, - 23, 10, 24, 25, 18, 2, 2, 2, 2, 2, 18, 0, 2, 2, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 26, 27, 28, 2, 2, 2, 7, - 28, 7, 28, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, - 2, 7, 7, 0, 2, 2, 0, 15, 16, 17, 18, 29, 30, 31, 30, 32, - 0, 0, 0, 0, 33, 0, 0, 2, 28, 2, 0, 0, 0, 0, 0, 7, - 34, 10, 13, 28, 2, 2, 7, 0, 28, 7, 2, 28, 7, 2, 0, 35, - 16, 17, 29, 0, 25, 36, 25, 37, 0, 38, 0, 0, 0, 28, 2, 7, - 7, 0, 0, 0, 2, 2, 2, 2, 2, 39, 40, 41, 0, 0, 0, 0, - 0, 10, 13, 28, 2, 2, 2, 2, 28, 2, 28, 2, 2, 2, 2, 2, - 2, 7, 2, 28, 2, 2, 0, 15, 16, 17, 18, 19, 25, 20, 33, 22, - 0, 0, 0, 0, 0, 28, 39, 39, 42, 10, 27, 28, 2, 2, 2, 7, - 28, 7, 2, 28, 2, 2, 0, 15, 43, 0, 0, 25, 20, 0, 0, 2, - 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 44, 28, 2, 2, 7, 0, - 2, 7, 2, 2, 0, 28, 7, 7, 2, 0, 28, 7, 0, 2, 7, 0, - 2, 2, 2, 2, 2, 2, 0, 0, 21, 14, 45, 0, 46, 31, 46, 32, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 13, 27, 47, 2, 2, 2, 7, - 2, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 15, - 20, 14, 21, 45, 20, 36, 20, 37, 0, 0, 0, 25, 29, 2, 7, 0, - 0, 8, 27, 28, 2, 2, 2, 7, 2, 2, 2, 28, 2, 2, 0, 15, - 43, 0, 0, 33, 45, 0, 0, 0, 7, 48, 49, 0, 0, 0, 0, 0, - 0, 9, 27, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 50, 51, - 21, 21, 17, 29, 46, 31, 46, 32, 52, 0, 0, 0, 33, 0, 0, 0, - 28, 10, 27, 28, 2, 2, 2, 2, 2, 2, 2, 2, 7, 0, 2, 2, - 2, 2, 28, 2, 2, 2, 2, 28, 0, 2, 2, 2, 7, 0, 53, 0, - 33, 21, 20, 29, 29, 16, 46, 46, 23, 0, 21, 0, 0, 0, 0, 0, - 0, 2, 0, 2, 7, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 2, 2, 54, 54, 55, 0, 0, 16, 2, 2, 2, 2, 28, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 7, 0, 56, 19, 57, 20, 20, 18, 18, - 44, 19, 9, 29, 9, 2, 2, 58, 59, 59, 59, 59, 59, 60, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, - 0, 0, 0, 0, 62, 0, 0, 0, 0, 2, 2, 2, 2, 2, 63, 43, - 57, 64, 20, 20, 65, 66, 67, 68, 69, 2, 2, 2, 2, 2, 1, 0, - 3, 2, 2, 2, 21, 18, 2, 2, 70, 69, 71, 72, 63, 71, 27, 27, - 2, 50, 20, 51, 2, 2, 2, 2, 2, 2, 73, 74, 75, 27, 27, 76, - 77, 2, 2, 2, 2, 2, 27, 43, 0, 2, 57, 78, 0, 0, 0, 0, - 28, 2, 57, 45, 0, 0, 0, 0, 0, 2, 57, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 7, 2, 7, 57, 0, 0, 0, 0, 0, - 0, 2, 2, 79, 43, 20, 57, 18, 46, 46, 46, 46, 13, 80, 81, 82, - 83, 84, 85, 0, 0, 0, 0, 86, 0, 7, 0, 0, 28, 0, 87, 79, - 88, 2, 2, 2, 2, 7, 0, 0, 0, 40, 40, 89, 90, 2, 2, 2, - 2, 2, 2, 2, 2, 11, 7, 0, 0, 91, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 7, 20, 78, 43, 20, 92, 59, 0, - 0, 93, 94, 93, 93, 95, 96, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 0, 2, 2, 7, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, - 0, 2, 2, 2, 2, 27, 0, 0, 0, 2, 2, 2, 2, 2, 7, 0, - 0, 2, 2, 2, 50, 97, 43, 0, 0, 2, 2, 98, 99, 100, 101, 59, - 61, 102, 14, 43, 20, 57, 19, 78, 46, 46, 74, 9, 9, 9, 103, 44, - 38, 9, 104, 72, 2, 2, 2, 2, 2, 2, 2, 105, 20, 18, 18, 20, - 46, 46, 20, 106, 2, 2, 2, 7, 0, 0, 0, 0, 0, 0, 107, 108, - 109, 109, 109, 0, 0, 0, 0, 0, 0, 104, 72, 2, 2, 2, 2, 2, - 2, 58, 59, 57, 23, 20, 110, 59, 2, 2, 2, 2, 105, 20, 21, 43, - 43, 100, 12, 0, 0, 0, 0, 0, 0, 2, 2, 59, 16, 46, 21, 111, - 100, 100, 100, 112, 113, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 28, - 2, 9, 44, 114, 114, 114, 9, 114, 114, 13, 114, 114, 114, 24, 0, 38, - 0, 0, 0, 115, 49, 9, 3, 0, 0, 0, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 0, 0, 0, 4, 117, 118, 40, 40, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 118, 118, 119, 118, 118, 118, 118, 118, 118, 118, - 118, 0, 0, 120, 0, 0, 0, 0, 0, 0, 5, 120, 0, 0, 0, 0, - 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 2, 2, 2, 2, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 121, 2, 51, 2, 106, 2, 8, 2, 2, 2, 63, 17, 14, 0, 0, 29, - 0, 2, 2, 0, 0, 0, 0, 0, 0, 27, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 122, 21, 21, 21, 21, 21, 21, 21, 123, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, 0, 0, 0, - 50, 2, 2, 2, 20, 20, 124, 114, 0, 2, 2, 2, 125, 18, 57, 18, - 111, 100, 126, 0, 0, 0, 0, 0, 0, 9, 127, 2, 2, 2, 2, 2, - 2, 2, 128, 21, 20, 18, 46, 129, 130, 131, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 50, 28, 2, 2, 2, 2, 2, 2, 2, 2, 8, 20, 57, - 97, 74, 132, 133, 134, 0, 0, 0, 0, 2, 135, 2, 2, 2, 2, 136, - 0, 28, 2, 40, 3, 0, 77, 13, 2, 51, 20, 137, 50, 51, 2, 2, - 103, 8, 7, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 138, 19, - 23, 0, 0, 139, 140, 0, 0, 0, 0, 2, 63, 43, 21, 78, 45, 141, - 0, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, - 4, 118, 118, 118, 118, 119, 0, 0, 0, 2, 2, 2, 2, 2, 7, 2, - 2, 2, 7, 2, 28, 2, 2, 2, 2, 2, 28, 2, 2, 2, 28, 7, - 0, 125, 18, 25, 29, 0, 0, 142, 143, 2, 2, 28, 2, 28, 2, 2, - 2, 2, 2, 2, 0, 12, 35, 0, 144, 2, 2, 11, 35, 0, 28, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 2, 2, - 7, 2, 2, 9, 39, 0, 0, 0, 0, 2, 2, 2, 2, 2, 25, 36, - 0, 2, 2, 2, 114, 114, 114, 114, 114, 145, 2, 7, 0, 0, 0, 0, - 0, 2, 12, 12, 0, 0, 0, 0, 0, 7, 2, 2, 7, 2, 2, 2, - 2, 28, 2, 7, 0, 28, 2, 0, 0, 146, 147, 148, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 20, 20, 18, 18, 18, 20, 20, 131, 0, 0, 0, - 0, 0, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 2, 2, 2, 2, - 2, 51, 50, 51, 0, 0, 0, 0, 150, 9, 72, 2, 2, 2, 2, 2, - 2, 16, 17, 19, 14, 22, 35, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 9, 47, 2, 2, 2, 2, 2, 2, 2, 2, 2, 125, 18, 20, 151, - 20, 19, 152, 153, 2, 2, 2, 2, 2, 0, 0, 63, 154, 0, 0, 0, - 0, 2, 11, 0, 0, 0, 0, 0, 0, 2, 63, 23, 18, 18, 18, 20, - 20, 106, 155, 0, 0, 54, 156, 29, 157, 28, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 21, 17, 20, 20, 158, 42, 0, 0, 0, - 47, 125, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 7, 7, 2, 2, - 28, 2, 2, 2, 2, 2, 2, 2, 28, 2, 2, 2, 2, 2, 2, 2, - 8, 16, 17, 19, 20, 159, 29, 0, 0, 9, 9, 28, 2, 2, 2, 7, - 28, 7, 2, 28, 2, 2, 56, 15, 21, 14, 21, 45, 30, 31, 30, 32, - 0, 0, 0, 0, 33, 0, 0, 0, 2, 2, 21, 0, 9, 9, 9, 44, - 0, 9, 9, 44, 0, 0, 0, 0, 0, 2, 2, 63, 23, 18, 18, 18, - 20, 21, 123, 13, 15, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, - 160, 161, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 18, 64, 97, 23, - 157, 9, 162, 7, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 63, 23, 18, 18, 0, 46, 46, 9, 163, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 18, 0, 21, 17, 18, 18, 19, 14, 80, - 163, 36, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 8, 164, - 23, 18, 20, 20, 162, 7, 0, 0, 0, 2, 2, 2, 2, 2, 7, 41, - 133, 21, 20, 18, 74, 19, 20, 0, 0, 2, 2, 2, 7, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 16, 17, 18, 19, 20, 103, 163, 35, 0, - 0, 2, 2, 2, 7, 28, 0, 2, 2, 2, 2, 28, 7, 2, 2, 2, - 2, 21, 21, 16, 30, 31, 10, 165, 166, 167, 168, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 0, 2, 2, 2, 63, 23, 18, 18, 0, 20, 21, - 27, 106, 0, 31, 0, 0, 0, 0, 0, 50, 18, 20, 20, 20, 137, 2, - 2, 2, 169, 170, 9, 13, 171, 70, 172, 0, 0, 1, 144, 0, 0, 0, - 0, 50, 18, 20, 14, 17, 18, 2, 2, 2, 2, 155, 155, 155, 173, 173, - 173, 173, 173, 173, 13, 174, 0, 28, 0, 20, 18, 18, 29, 20, 20, 9, - 163, 0, 59, 59, 59, 59, 59, 59, 59, 64, 19, 80, 44, 0, 0, 0, - 0, 2, 2, 2, 7, 2, 28, 2, 2, 50, 20, 20, 29, 0, 36, 20, - 25, 9, 156, 175, 171, 0, 0, 0, 0, 2, 2, 2, 28, 7, 2, 2, - 2, 2, 2, 2, 2, 2, 21, 21, 45, 20, 33, 80, 66, 0, 0, 0, - 0, 2, 176, 64, 45, 0, 0, 0, 0, 9, 177, 2, 2, 2, 2, 2, - 2, 2, 2, 21, 20, 18, 29, 0, 46, 14, 140, 0, 0, 0, 0, 0, - 0, 178, 178, 178, 106, 179, 178, 0, 0, 145, 2, 2, 180, 114, 114, 114, - 114, 114, 114, 114, 0, 0, 0, 0, 0, 9, 9, 9, 44, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 7, 0, 56, 181, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, - 38, 114, 24, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 56, - 35, 0, 4, 118, 118, 118, 119, 0, 0, 9, 9, 9, 47, 2, 2, 2, + 2, 2, 2, 94, 2, 2, 95, 2, 2, 2, 96, 2, 2, 2, 2, 2, + 2, 2, 2, 97, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 98, 98, 99, 100, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, + 0, 5, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 11, + 11, 11, 11, 0, 0, 0, 9, 12, 0, 2, 2, 2, 2, 13, 14, 0, + 0, 11, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 17, + 18, 19, 20, 21, 22, 16, 23, 24, 25, 12, 26, 27, 20, 2, 2, 2, + 2, 2, 20, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, + 2, 28, 29, 30, 2, 2, 2, 9, 30, 9, 30, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 9, 2, 2, 2, 9, 9, 0, 2, 2, 0, 17, + 18, 19, 20, 31, 32, 33, 32, 34, 0, 0, 0, 0, 35, 0, 0, 2, + 30, 2, 0, 0, 0, 0, 0, 9, 36, 12, 15, 30, 2, 2, 9, 0, + 30, 9, 2, 30, 9, 2, 0, 37, 18, 19, 31, 0, 27, 38, 27, 39, + 0, 40, 0, 0, 0, 30, 2, 9, 9, 0, 0, 0, 2, 2, 2, 2, + 2, 41, 42, 43, 0, 0, 0, 0, 0, 12, 15, 30, 2, 2, 2, 2, + 30, 2, 30, 2, 2, 2, 2, 2, 2, 9, 2, 30, 2, 2, 0, 17, + 18, 19, 20, 21, 27, 22, 35, 24, 0, 0, 0, 0, 0, 30, 41, 41, + 44, 12, 29, 30, 2, 2, 2, 9, 30, 9, 2, 30, 2, 2, 0, 17, + 45, 0, 0, 27, 22, 0, 0, 2, 30, 30, 0, 0, 0, 0, 0, 0, + 0, 0, 46, 30, 2, 2, 9, 0, 2, 9, 2, 2, 0, 30, 9, 9, + 2, 0, 30, 9, 0, 2, 9, 0, 2, 2, 2, 2, 2, 2, 0, 0, + 23, 16, 47, 0, 48, 33, 48, 34, 0, 0, 0, 0, 35, 0, 0, 0, + 0, 15, 29, 49, 2, 2, 2, 9, 2, 9, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 0, 17, 22, 16, 23, 47, 22, 38, 22, 39, + 0, 0, 0, 27, 31, 2, 9, 0, 0, 10, 29, 30, 2, 2, 2, 9, + 2, 2, 2, 30, 2, 2, 0, 17, 45, 0, 0, 35, 47, 0, 0, 0, + 9, 50, 51, 0, 0, 0, 0, 0, 0, 11, 29, 2, 2, 2, 2, 9, + 2, 2, 2, 2, 2, 2, 52, 53, 23, 23, 19, 31, 48, 33, 48, 34, + 54, 0, 0, 0, 35, 0, 0, 0, 30, 12, 29, 30, 2, 2, 2, 2, + 2, 2, 2, 2, 9, 0, 2, 2, 2, 2, 30, 2, 2, 2, 2, 30, + 0, 2, 2, 2, 9, 0, 55, 0, 35, 23, 22, 31, 31, 18, 48, 48, + 25, 0, 23, 0, 0, 0, 0, 0, 0, 2, 0, 2, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 0, 0, 2, 2, 56, 56, 57, 0, 0, + 18, 2, 2, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, + 0, 58, 21, 59, 22, 22, 20, 20, 46, 21, 11, 31, 11, 2, 2, 60, + 61, 61, 61, 61, 61, 62, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 63, 0, 0, 0, 0, 64, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 65, 45, 59, 66, 22, 22, 67, 68, 69, 70, + 71, 2, 2, 2, 2, 2, 1, 0, 5, 2, 2, 2, 23, 20, 2, 2, + 72, 71, 73, 74, 65, 73, 29, 29, 2, 52, 22, 53, 2, 2, 2, 2, + 2, 2, 75, 76, 77, 29, 29, 78, 79, 2, 2, 2, 2, 2, 29, 45, + 0, 2, 59, 80, 0, 0, 0, 0, 30, 2, 59, 47, 0, 0, 0, 0, + 0, 2, 59, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 9, + 2, 9, 59, 0, 0, 0, 0, 0, 0, 2, 2, 81, 45, 22, 59, 20, + 48, 48, 48, 48, 15, 82, 83, 84, 85, 86, 87, 0, 0, 0, 0, 88, + 0, 9, 0, 0, 30, 0, 89, 81, 90, 2, 2, 2, 2, 9, 0, 0, + 0, 42, 42, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 13, 9, 0, + 0, 93, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 9, 22, 80, 45, 22, 94, 61, 0, 0, 95, 96, 95, 95, 97, 98, 0, + 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 9, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 29, 0, 0, + 0, 2, 2, 2, 2, 2, 9, 0, 0, 2, 2, 2, 52, 99, 45, 0, + 0, 2, 2, 100, 101, 102, 103, 61, 63, 104, 16, 45, 22, 59, 21, 80, + 48, 48, 76, 11, 11, 11, 105, 46, 40, 11, 106, 74, 2, 2, 2, 2, + 2, 2, 2, 107, 22, 20, 20, 22, 48, 48, 22, 108, 2, 2, 2, 9, + 0, 0, 0, 0, 0, 0, 109, 110, 111, 111, 111, 0, 0, 0, 0, 0, + 0, 106, 74, 2, 2, 2, 2, 2, 2, 60, 61, 59, 25, 22, 112, 61, + 2, 2, 2, 2, 107, 22, 23, 45, 45, 102, 14, 0, 0, 0, 0, 0, + 0, 2, 2, 61, 18, 48, 23, 113, 102, 102, 102, 114, 115, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 0, 30, 2, 11, 46, 116, 116, 116, 11, 116, + 116, 15, 116, 116, 116, 26, 0, 40, 0, 0, 0, 117, 51, 11, 5, 0, + 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 6, 119, + 120, 42, 42, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 120, + 121, 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, 122, 0, 0, 0, 0, + 0, 0, 7, 122, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 123, 123, 0, 0, + 0, 2, 2, 2, 2, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, + 124, 0, 123, 123, 0, 0, 0, 0, 0, 2, 53, 2, 108, 2, 10, 2, + 2, 2, 65, 19, 16, 0, 0, 31, 0, 2, 2, 0, 0, 0, 0, 0, + 0, 29, 2, 2, 2, 2, 2, 2, 2, 2, 2, 125, 23, 23, 23, 23, + 23, 23, 23, 126, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 2, 0, 0, 0, 0, 0, 52, 2, 2, 2, 22, 22, 127, 116, + 0, 2, 2, 2, 128, 20, 59, 20, 113, 102, 129, 0, 0, 0, 0, 0, + 0, 11, 130, 2, 2, 2, 2, 2, 2, 2, 131, 23, 22, 20, 48, 132, + 133, 134, 0, 0, 0, 0, 0, 0, 0, 2, 2, 52, 30, 2, 2, 2, + 2, 2, 2, 2, 2, 10, 22, 59, 99, 76, 135, 136, 137, 0, 0, 0, + 0, 2, 138, 2, 2, 2, 2, 139, 0, 30, 2, 42, 5, 0, 79, 15, + 2, 53, 22, 140, 52, 53, 2, 2, 105, 10, 9, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 141, 21, 25, 0, 0, 142, 143, 0, 0, 0, + 0, 2, 65, 45, 23, 80, 47, 144, 0, 81, 81, 81, 81, 81, 81, 81, + 81, 0, 0, 0, 0, 0, 0, 0, 6, 120, 120, 120, 120, 121, 0, 0, + 0, 2, 2, 2, 2, 2, 9, 2, 2, 2, 9, 2, 30, 2, 2, 2, + 2, 2, 30, 2, 2, 2, 30, 9, 0, 128, 20, 27, 31, 0, 0, 145, + 146, 2, 2, 30, 2, 30, 2, 2, 2, 2, 2, 2, 0, 14, 37, 0, + 147, 2, 2, 13, 37, 0, 30, 2, 2, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 30, 2, 2, 9, 2, 2, 11, 41, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 27, 38, 0, 2, 2, 2, 116, 116, 116, 116, + 116, 148, 2, 9, 0, 0, 0, 0, 0, 2, 14, 14, 0, 0, 0, 0, + 0, 9, 2, 2, 9, 2, 2, 2, 2, 30, 2, 9, 0, 30, 2, 0, + 0, 149, 150, 151, 2, 2, 2, 2, 2, 2, 2, 2, 2, 22, 22, 20, + 20, 20, 22, 22, 134, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 2, 2, 2, 2, 2, 53, 52, 53, 0, 0, 0, 0, + 153, 11, 74, 2, 2, 2, 2, 2, 2, 18, 19, 21, 16, 24, 37, 0, + 0, 0, 31, 0, 0, 0, 0, 0, 0, 11, 49, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 128, 20, 22, 154, 22, 21, 155, 156, 2, 2, 2, 2, + 2, 0, 0, 65, 157, 0, 0, 0, 0, 2, 13, 0, 0, 0, 0, 0, + 0, 2, 65, 25, 20, 20, 20, 22, 22, 108, 158, 0, 0, 56, 159, 31, + 160, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 23, + 19, 22, 22, 161, 44, 0, 0, 0, 49, 128, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 9, 9, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2, + 30, 2, 2, 2, 2, 2, 2, 2, 10, 18, 19, 21, 22, 162, 31, 0, + 0, 11, 11, 30, 2, 2, 2, 9, 30, 9, 2, 30, 2, 2, 58, 17, + 23, 16, 23, 47, 32, 33, 32, 34, 0, 0, 0, 0, 35, 0, 0, 0, + 2, 2, 23, 0, 11, 11, 11, 46, 0, 11, 11, 46, 0, 0, 0, 0, + 0, 2, 2, 65, 25, 20, 20, 20, 22, 23, 126, 15, 17, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 0, 0, 163, 164, 0, 0, 0, 0, 0, 0, + 0, 18, 19, 20, 20, 66, 99, 25, 160, 11, 165, 9, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 2, 65, 25, 20, 20, 0, 48, 48, 11, + 166, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 20, + 0, 23, 19, 20, 20, 21, 16, 82, 166, 38, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 10, 167, 25, 20, 22, 22, 165, 9, 0, 0, + 0, 2, 2, 2, 2, 2, 9, 43, 136, 23, 22, 20, 76, 21, 22, 0, + 0, 2, 2, 2, 9, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 18, + 19, 20, 21, 22, 105, 166, 37, 0, 0, 2, 2, 2, 9, 30, 0, 2, + 2, 2, 2, 30, 9, 2, 2, 2, 2, 23, 23, 18, 32, 33, 12, 168, + 169, 170, 171, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, + 2, 65, 25, 20, 20, 0, 22, 23, 29, 108, 0, 33, 0, 0, 0, 0, + 0, 52, 20, 22, 22, 22, 140, 2, 2, 2, 172, 173, 11, 15, 174, 72, + 175, 0, 0, 1, 147, 0, 0, 0, 0, 52, 20, 22, 16, 19, 20, 2, + 2, 2, 2, 158, 158, 158, 176, 176, 176, 176, 176, 176, 15, 177, 0, 30, + 0, 22, 20, 20, 31, 22, 22, 11, 166, 0, 61, 61, 61, 61, 61, 61, + 61, 66, 21, 82, 46, 0, 0, 0, 0, 2, 2, 2, 9, 2, 30, 2, + 2, 52, 22, 22, 31, 0, 38, 22, 27, 11, 159, 178, 174, 0, 0, 0, + 0, 2, 2, 2, 30, 9, 2, 2, 2, 2, 2, 2, 2, 2, 23, 23, + 47, 22, 35, 82, 68, 0, 0, 0, 0, 2, 179, 66, 47, 0, 0, 0, + 0, 11, 180, 2, 2, 2, 2, 2, 2, 2, 2, 23, 22, 20, 31, 0, + 48, 16, 143, 0, 0, 0, 0, 0, 0, 181, 181, 181, 181, 181, 181, 181, + 181, 182, 182, 182, 183, 184, 182, 181, 181, 185, 181, 181, 186, 187, 187, 187, + 187, 187, 187, 187, 0, 0, 0, 0, 0, 11, 11, 11, 46, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 9, 0, 58, 188, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, + 40, 116, 26, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 58, + 37, 0, 6, 120, 120, 120, 121, 0, 0, 11, 11, 11, 49, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 44, 2, 2, 2, 2, 2, 2, 9, 9, 2, 2, 2, 2, 2, 2, 20, - 20, 2, 2, 42, 42, 42, 90, 0, 0, O, O, O, GB, B, B, GB, - O, O, WJ,FMPst,FMPst, O, CGJ, B, O, B,VMAbv,VMAbv,VMAbv, O,VMAbv, B, - CMBlw,CMBlw,CMBlw,VMAbv,VMPst, VAbv, VPst,CMBlw, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, - VAbv, VAbv, VAbv, VPst, VPst, VPst, H, VPre, VPst,VMBlw, O, O, VAbv, GB,VMAbv,VMPst, - VMPst, O, B, VBlw, O, O, VPre, VPre, O, VPre, H, O, VPst,FMAbv, O,CMBlw, - O, VAbv, O, VAbv, H, O,VMBlw,VMAbv,CMAbv, GB, GB, O, MBlw,CMAbv,CMAbv, VPst, - VAbv,VMAbv, O, VPst, O, VPre, VPre,VMAbv, B, O, CS, CS,VMPst, B, VAbv, VAbv, - B, R, O, HVM, O, O,FMBlw, O,CMAbv, O,CMBlw, VAbv, VBlw, B, SUB, SUB, - SUB, O, SUB, SUB, O,FMBlw, O, B, VPst, VBlw, VPre,VMAbv,VMBlw,VMPst, IS, VAbv, - MPst, MPre, MBlw, MBlw, B, MBlw, MBlw, VPst,VMPst,VMPst, B, MBlw, VPst, VPre, VAbv, VAbv, - VMPst,VMPst,VMBlw, B,VMPst, VBlw, VPst, CGJ, CGJ, VPst,VMAbv,VMAbv,FMAbv, FAbv,CMAbv,FMAbv, - VMAbv,FMAbv, VAbv, IS,FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,CMAbv,CMAbv, B, GB, - B, VAbv, SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre, B, MPre, MBlw, - SUB, FAbv, FAbv, MAbv, SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, H, B, O, - SMAbv,SMBlw,SMAbv,SMAbv,SMAbv, VPst, IS, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,VMBlw,VMAbv, - CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, O, H, MPst, VPst, H, - VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv, MBlw, MPst, MBlw, H, - O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw, B, B, VPre, O, - VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O, IS,VMBlw, B,VMPst,VMAbv,VMPst, - CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv, IS,CMAbv, O, VPst, B, R, - R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,FMAbv, B, CS, CS, H,CMBlw,VMPst, - H,VMPst, VAbv,VMAbv, VPst, IS, R, MPst, R, MPst,CMBlw, B,FMBlw, VBlw,VMAbv, R, - MBlw, MBlw, GB, FBlw, FBlw,CMAbv, IS, VBlw, IS, GB, VAbv, R,VMPst, H, H, B, - H, B,VMBlw, O, VBlw, + 46, 2, 2, 2, 2, 2, 2, 11, 11, 2, 2, 2, 2, 2, 2, 22, + 22, 2, 2, 44, 44, 44, 92, 0, 0, O, O, O, GB, B, B, O, + SB, O, SE, GB, O, O, WJ,FMPst,FMPst, O, CGJ, B, O, B,VMAbv,VMAbv, + VMAbv, O,VMAbv, B,CMBlw,CMBlw,CMBlw,VMAbv,VMPst, VAbv, VPst,CMBlw, B, VPst, VPre, VPst, + VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, VPst, VPst, H, VPre, VPst,VMBlw, O, O, + VAbv, GB,VMAbv,VMPst,VMPst, O, B, VBlw, O, O, VPre, VPre, O, VPre, H, O, + VPst,FMAbv, O,CMBlw, O, VAbv, O, VAbv, H, O,VMBlw,VMAbv,CMAbv, GB, GB, O, + MBlw,CMAbv,CMAbv, VPst, VAbv,VMAbv, O, VPst, O, VPre, VPre,VMAbv, B, O, CS, CS, + VMPst, B, VAbv, VAbv, B, R, O, HVM, O, O,FMBlw, O,CMAbv, O,CMBlw, VAbv, + VBlw, B, SUB, SUB, SUB, O, SUB, SUB, O,FMBlw, O, B, VPst, VBlw, VPre,VMAbv, + VMBlw,VMPst, IS, VAbv, MPst, MPre, MBlw, MBlw, B, MBlw, MBlw, VPst,VMPst,VMPst, B, MBlw, + VPst, VPre, VAbv, VAbv,VMPst,VMPst,VMBlw, B,VMPst, VBlw, VPst, CGJ, CGJ, VPst,VMAbv,VMAbv, + FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv, IS,FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB, + CMAbv,CMAbv, B, GB, B, VAbv, SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, + VPre, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv, SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, + VPst, H, B, O,SMAbv,SMBlw,SMAbv,SMAbv,SMAbv, VPst, IS, VBlw, FAbv,VMPre,VMPre,FMAbv, + CMBlw,VMBlw,VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, SB, + SE, O, H, MPst, VPst, H,VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B, + CMAbv, VAbv, MBlw, MPst, MBlw, H, O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, + FPst, VBlw, B, B, VPre, O,VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O, + IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv, + IS,CMAbv, O, VPst, B, R, R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,FMAbv, + B, CS, CS, H,CMBlw,VMPst, H,VMPst, VAbv,VMAbv, VPst, IS, R, MPst, R, MPst, + CMBlw, B,FMBlw, VBlw,VMAbv, R, MBlw, MBlw, GB, FBlw, FBlw,CMAbv, IS, VBlw, IS, GB, + VAbv, R,VMPst, G, G, J, J, J, SB, SE, J, HR, G, G, HM, HM, + HM, O, VBlw, }; static const uint16_t -hb_use_u16[784] = +hb_use_u16[808] = { - 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 9, 10, 11, - 0, 0, 0, 0, 9, 12, 0, 0, 13, 9, 9, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 17, 25, 26, 20, 21, 27, 28, 29, 30, 31, - 32, 33, 21, 34, 35, 0, 17, 36, 37, 20, 21, 38, 23, 39, 17, 40, - 41, 42, 43, 44, 45, 46, 30, 0, 47, 48, 21, 49, 50, 51, 17, 0, - 52, 48, 21, 53, 50, 54, 17, 55, 56, 48, 9, 57, 58, 59, 17, 0, - 60, 61, 9, 62, 63, 64, 30, 65, 66, 67, 9, 68, 69, 9, 70, 71, - 72, 73, 74, 75, 76, 0, 0, 0, 9, 9, 77, 78, 79, 80, 81, 82, - 83, 84, 0, 0, 0, 0, 0, 0, 9, 85, 9, 86, 9, 87, 88, 89, - 9, 9, 9, 90, 91, 92, 2, 0, 93, 0, 9, 9, 9, 9, 9, 94, - 95, 9, 96, 0, 0, 0, 0, 0, 97, 98, 99,100, 30, 9,101,102, - 9, 9,103, 9,104,105, 0, 0, 9,106, 9, 9, 9,107,108,109, - 2, 2, 0, 0, 0, 0, 0, 0,110, 9, 9,111,112, 2,113,114, - 115, 9,116, 9, 9, 9,117,118, 9, 9,119,120,121, 0, 0, 0, - 0, 0, 0, 0, 0,122,123,124, 0, 0, 0, 0, 0, 0, 0,125, - 126,127,128, 0, 0, 0,129,130,131, 0, 0, 0, 0, 0, 0,132, - 0, 0, 0, 0,133, 0, 0, 0, 0, 0, 0, 9, 9, 9,134,135, - 136, 9,137, 0, 9, 9, 9,138,139, 9, 9,140,141, 2,142,143, - 9, 9,144, 9,145,146, 0, 0,147, 9, 9,148,149, 2,150, 98, - 9, 9,151,152,153, 2, 9,154, 9, 9, 9,155,156, 0,157,158, - 0, 0, 0, 0, 9, 9,159, 2,160, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,161, 0, 0, 0, 0, 0, 0, 0,162, - 0, 0, 0, 0, 0, 0, 0,163,163,164, 33,165, 0, 0, 0, 0, - 166,167, 9,168, 94, 0, 0, 0, 0, 0, 0, 0, 69, 9,169, 0, - 9,170,171, 0, 0, 0, 0, 0, 9, 9,172, 2, 0, 0, 0, 0, - 9, 9,173,170, 0, 0, 0, 0, 0, 0, 0, 9,174,175, 0, 9, - 176, 0, 0,177,178, 0, 0, 0,179, 9, 9,180,181,182,183,184, - 185, 9, 9,186,187, 0, 0, 0,188, 9,189,190,191, 9, 9,192, - 185, 9, 9,193,194,105,195,102, 9, 33,196,197,198, 0, 0, 0, - 199,200, 94, 9, 9,201,202, 2,203, 20, 21,204,205,206,207,208, - 9, 9, 9,209,210,211,212, 0,195, 9, 9,213,214, 2, 0, 0, - 9, 9,215,216,217,218, 0, 0, 9, 9, 9,219,220, 2, 0, 0, - 9, 9,221,222, 2, 0, 0, 0, 9,223,224,103,225, 0, 0, 0, - 9, 9,226,227, 0, 0, 0, 0,228,229, 9,230,231, 2, 0, 0, - 0, 0,232, 9, 9,233,234, 0,235, 9, 9,236,237,238, 9, 9, - 239,240, 0, 0, 0, 0, 0, 0, 21, 9,215,241, 7, 9, 70, 18, - 9,242, 73,243, 0, 0, 0, 0,244, 9, 9,245,246, 2,247, 9, - 248,249, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,250, - 251, 48, 9,252,253, 2, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9,254,255,256, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 9, 9, 9,257, 0, 0, 0, 0, 9, 9, 9, 9,258,259,260,260, - 261,262, 0, 0, 0, 0,263, 0, 9, 9, 9, 9, 9,264, 0, 0, - 9, 9, 9, 9, 9, 9,105, 70, 94,265, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,266, 9, 9, 70,267,268, 0, 0, 0, - 0, 9,269, 0, 9, 9,270, 2, 0, 0, 0, 0, 0, 9,271, 2, - 9, 9, 9, 9,272, 2, 0, 0,129,129,129,129,129,129,129,129, - 160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,129, + 0, 0, 1, 2, 0, 3, 0, 3, 0, 0, 4, 5, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 12, + 0, 0, 0, 0, 10, 13, 0, 0, 14, 10, 10, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 18, 26, 27, 21, 22, 28, 29, 30, 31, 32, + 33, 34, 22, 35, 36, 0, 18, 37, 38, 21, 22, 39, 24, 40, 18, 41, + 42, 43, 44, 45, 46, 47, 31, 0, 48, 49, 22, 50, 51, 52, 18, 0, + 53, 49, 22, 54, 51, 55, 18, 56, 57, 49, 10, 58, 59, 60, 18, 0, + 61, 62, 10, 63, 64, 65, 31, 66, 67, 68, 10, 69, 70, 10, 71, 72, + 73, 74, 75, 76, 77, 0, 0, 0, 10, 10, 78, 79, 80, 81, 82, 83, + 84, 85, 0, 0, 0, 0, 0, 0, 10, 86, 10, 87, 10, 88, 89, 90, + 10, 10, 10, 91, 92, 93, 2, 0, 94, 0, 10, 10, 10, 10, 10, 95, + 96, 10, 97, 0, 0, 0, 0, 0, 98, 99,100,101, 31, 10,102,103, + 10, 10,104, 10,105,106, 0, 0, 10,107, 10, 10, 10,108,109,110, + 2, 2, 0, 0, 0, 0, 0, 0,111, 10, 10,112,113, 2,114,115, + 116, 10,117, 10, 10, 10,118,119, 10, 10,120,121,122, 0, 0, 0, + 0, 0, 0, 0, 0,123,124,125, 0, 0, 0, 0, 0, 0, 0,126, + 127,128,129, 0, 0, 0,130,131,132, 0, 0, 0, 0, 0, 0,133, + 0, 0, 0, 0,134, 0, 0, 0, 0, 0, 0, 0, 0, 0,135, 0, + 0, 0, 0, 10, 10, 10,136,137, 0, 0,138, 0, 0, 0, 0, 0, + 139, 10,140, 0, 10, 10, 10,141,142, 10, 10,143,144, 2,145,146, + 10, 10,147, 10,148,149, 0, 0,150, 10, 10,151,152, 2,153, 99, + 10, 10,154,155,156, 2, 10,157, 10, 10, 10,158,159, 0,160,161, + 0, 0, 0, 0, 10, 10,162, 2,163, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,164, 0, 0, 0, 0, 0, 0, 0,165, + 0, 0, 0, 0, 0, 0, 0,166,166,167, 34,168, 0, 0, 0, 0, + 169,170, 10,171, 95, 0, 0, 0, 0, 0, 0, 0, 70, 10,172, 0, + 10,173,174, 0, 0, 0, 0, 0, 10, 10,175, 2, 0, 0, 0, 0, + 10, 10,176,173, 0, 0, 0, 0, 0, 0, 0, 10,177,178, 0, 10, + 179, 0, 0,180,181, 0, 0, 0,182, 10, 10,183,184,185,186,187, + 188, 10, 10,189,190, 0, 0, 0,191, 10,192,193,194, 10, 10,195, + 188, 10, 10,196,197,106,198,103, 10, 34,199,200,201, 0, 0, 0, + 202,203, 95, 10, 10,204,205, 2,206, 21, 22,207,208,209,210,211, + 10, 10, 10,212,213,214,215, 0,198, 10, 10,216,217, 2, 0, 0, + 10, 10,218,219,220,221, 0, 0, 10, 10, 10,222,223, 2, 0, 0, + 10, 10,224,225, 2, 0, 0, 0, 10,226,227,104,228, 0, 0, 0, + 10, 10,229,230, 0, 0, 0, 0,231,232, 10,233,234, 2, 0, 0, + 0, 0,235, 10, 10,236,237, 0,238, 10, 10,239,240,241, 10, 10, + 242,243, 0, 0, 0, 0, 0, 0, 22, 10,218,244, 8, 10, 71, 19, + 10,245, 74,246, 0, 0, 0, 0,247, 10, 10,248,249, 2,250, 10, + 251,252, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10,253, + 254, 49, 10,255,256, 2, 0, 0,257,257,257,257,257,257,257,257, + 257,257,257,258,259,260, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 10, 10, 10,261, 0, 0, 0, 0, 10, 10, 10, 10,262,263,264,264, + 265,266, 0, 0, 0, 0,267, 0, 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10,268, 0, 0, 10, 10, 10, 10, 10, 10,106, 71, + 95,269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,270, + 10, 10, 71,271,272, 0, 0, 0, 0, 10,273, 0, 10, 10,274, 2, + 0, 0, 0, 0, 0, 10,275, 2, 10, 10, 10, 10,276, 2, 0, 0, + 130,130,130,130,130,130,130,130,163,163,163,163,163,163,163,163, + 163,163,163,163,163,163,163,130, }; static inline unsigned @@ -357,14 +366,14 @@ static inline uint_fast8_t hb_use_get_category (unsigned u) { - return u<921600u?hb_use_u8[2777+(((hb_use_u8[593+(((hb_use_u16[((hb_use_u8[113+(((hb_use_b4(hb_use_u8,u>>1>>3>>3>>5))<<5)+((u>>1>>3>>3)&31u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:O; + return u<921600u?hb_use_u8[2809+(((hb_use_u8[593+(((hb_use_u16[((hb_use_u8[113+(((hb_use_b4(hb_use_u8,u>>1>>3>>3>>5))<<5)+((u>>1>>3>>3)&31u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:O; } #else static const uint8_t -hb_use_u8[3413] = +hb_use_u8[3483] = { 16, 50, 51, 51, 51, 52, 51, 83, 118, 131, 51, 57, 58, 179, 195, 61, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, @@ -375,243 +384,248 @@ 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 14, 0, 1, 1, 2, 1, 1, 3, 4, 5, 6, 7, 8, 9, 10, 1, 11, 12, 1, 1, 1, 1, 1, 1, 13, 14, 15, 16, 17, 18, 19, 1, - 1, 20, 1, 1, 1, 1, 21, 1, 1, 1, 1, 1, 1, 1, 22, 1, + 1, 20, 1, 1, 1, 1, 21, 1, 22, 1, 1, 1, 1, 1, 23, 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 24, 25, 26, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, - 28, 1, 1, 1, 1, 1, 29, 1, 1, 1, 1, 30, 31, 1, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 1, 46, 47, 48, - 49, 50, 50, 50, 50, 51, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 53, 1, 1, 1, - 54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 55, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 56, 1, 1, - 1, 1, 57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 58, 59, 1, 60, 1, 1, 1, 1, 61, 1, 1, 1, 1, 1, - 1, 62, 63, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 8, 0, 0, 0, 0, - 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 0, 55, 56, 57, 58, 59, 0, 0, 0, 60, 61, 62, 63, 55, 64, 65, - 66, 67, 55, 55, 68, 69, 70, 0, 0, 71, 72, 73, 74, 55, 75, 76, - 0, 77, 55, 78, 79, 80, 0, 0, 0, 81, 82, 83, 84, 85, 86, 55, - 87, 55, 88, 89, 0, 0, 0, 90, 91, 0, 0, 0, 0, 0, 0, 0, - 92, 93, 94, 0, 95, 96, 0, 0, 97, 0, 0, 0, 0, 0, 0, 98, - 0, 0, 99, 55, 100, 0, 0, 0, 0, 101, 102, 55, 103, 104, 105, 106, - 107, 55, 108, 109, 0, 110, 111, 112, 113, 55, 114, 115, 116, 55, 117, 118, - 119, 0, 0, 0, 0, 0, 0, 55, 120, 121, 0, 0, 0, 0, 0, 0, - 122, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 124, 125, 126, 0, - 0, 127, 128, 129, 0, 0, 0, 50, 130, 0, 0, 0, 0, 131, 132, 0, - 0, 55, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 134, 0, - 0, 0, 99, 135, 99, 136, 137, 138, 0, 139, 140, 141, 142, 143, 144, 145, - 0, 146, 147, 148, 149, 143, 150, 151, 152, 153, 154, 155, 0, 156, 157, 158, - 159, 160, 161, 162, 163, 0, 0, 0, 0, 55, 164, 165, 166, 167, 168, 169, - 0, 0, 0, 0, 0, 55, 170, 171, 0, 55, 172, 173, 0, 55, 174, 66, - 0, 175, 176, 177, 0, 0, 0, 0, 0, 55, 178, 0, 0, 0, 0, 0, - 0, 179, 180, 181, 0, 0, 182, 183, 184, 185, 186, 187, 55, 188, 0, 0, - 0, 189, 190, 191, 192, 193, 194, 0, 0, 195, 196, 197, 198, 199, 66, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 200, 201, 202, 203, 0, 0, 0, 0, - 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 204, 205, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 66, 0, 55, 206, 0, 0, 0, 0, 0, - 0, 55, 55, 207, 208, 209, 0, 0, 210, 55, 55, 55, 55, 55, 55, 211, - 0, 55, 55, 55, 212, 213, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, - 0, 55, 215, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 217, 55, - 218, 0, 0, 0, 0, 0, 0, 99, 219, 55, 55, 220, 0, 0, 0, 0, - 0, 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 222, - 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 2, 2, 2, 2, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, - 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 26, 27, 28, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 29, + 30, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 32, 33, 1, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 1, 48, 49, 50, + 51, 52, 52, 52, 52, 53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 55, 1, 1, 1, + 56, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 58, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 59, 1, 1, + 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 61, 62, 1, 63, 1, 1, 1, 1, 64, 1, 1, 1, 1, 1, + 1, 65, 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 0, 1, 2, 2, 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 9, 0, 0, 0, 0, + 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 37, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 0, 56, 57, 58, 59, 60, 0, 0, 0, 61, 62, 63, 64, 56, 65, 66, + 67, 68, 56, 56, 69, 70, 71, 0, 0, 72, 73, 74, 75, 56, 76, 77, + 0, 78, 56, 79, 80, 81, 0, 0, 0, 82, 83, 84, 85, 86, 87, 56, + 88, 56, 89, 90, 0, 0, 0, 91, 92, 0, 0, 0, 0, 0, 0, 0, + 93, 94, 95, 0, 96, 97, 0, 0, 98, 0, 0, 0, 0, 0, 0, 99, + 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 101, 56, 102, 0, 0, 0, + 0, 0, 103, 0, 0, 0, 0, 0, 0, 104, 105, 56, 106, 107, 108, 109, + 110, 56, 111, 112, 0, 113, 114, 115, 116, 56, 117, 118, 119, 56, 120, 121, + 122, 0, 0, 0, 0, 0, 0, 56, 123, 124, 0, 0, 0, 0, 0, 0, + 125, 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, 127, 128, 129, 0, + 0, 130, 131, 132, 0, 0, 0, 51, 133, 0, 0, 0, 0, 134, 135, 0, + 0, 56, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 137, 0, + 0, 0, 101, 138, 101, 139, 140, 141, 0, 142, 143, 144, 145, 146, 147, 148, + 0, 149, 150, 151, 152, 146, 153, 154, 155, 156, 157, 158, 0, 159, 160, 161, + 162, 163, 164, 165, 166, 0, 0, 0, 0, 56, 167, 168, 169, 170, 171, 172, + 0, 0, 0, 0, 0, 56, 173, 174, 0, 56, 175, 176, 0, 56, 177, 67, + 0, 178, 179, 180, 0, 0, 0, 0, 0, 56, 181, 0, 0, 0, 0, 0, + 0, 182, 183, 184, 0, 0, 185, 186, 187, 188, 189, 190, 56, 191, 0, 0, + 0, 192, 193, 194, 195, 196, 197, 0, 0, 198, 199, 200, 201, 202, 67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 205, 206, 0, 0, 0, 0, + 0, 207, 207, 207, 207, 207, 207, 207, 207, 207, 208, 209, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 67, 0, 56, 210, 0, 0, 0, 0, 0, + 0, 56, 56, 211, 212, 213, 0, 0, 214, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 215, 0, 56, 56, 56, 216, 217, 0, 0, + 0, 0, 0, 0, 218, 0, 0, 0, 0, 56, 219, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 101, 221, 56, 222, 0, 0, 0, 0, 0, 0, 101, + 223, 56, 56, 224, 0, 0, 0, 0, 0, 225, 225, 225, 225, 225, 225, 225, + 225, 226, 226, 226, 226, 226, 226, 226, 227, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 4, 0, 5, 0, 0, 0, 0, 0, 6, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 8, 9, 9, 9, 9, 0, 0, 0, 7, 10, - 0, 2, 2, 2, 2, 11, 12, 0, 0, 9, 13, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 14, 15, 16, 17, 18, 19, 20, 14, 21, 22, - 23, 10, 24, 25, 18, 2, 2, 2, 2, 2, 18, 0, 2, 2, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 26, 27, 28, 2, 2, 2, 7, - 28, 7, 28, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 2, 2, - 2, 7, 7, 0, 2, 2, 0, 15, 16, 17, 18, 29, 30, 31, 30, 32, - 0, 0, 0, 0, 33, 0, 0, 2, 28, 2, 0, 0, 0, 0, 0, 7, - 34, 10, 13, 28, 2, 2, 7, 0, 28, 7, 2, 28, 7, 2, 0, 35, - 16, 17, 29, 0, 25, 36, 25, 37, 0, 38, 0, 0, 0, 28, 2, 7, - 7, 0, 0, 0, 2, 2, 2, 2, 2, 39, 40, 41, 0, 0, 0, 0, - 0, 10, 13, 28, 2, 2, 2, 2, 28, 2, 28, 2, 2, 2, 2, 2, - 2, 7, 2, 28, 2, 2, 0, 15, 16, 17, 18, 19, 25, 20, 33, 22, - 0, 0, 0, 0, 0, 28, 39, 39, 42, 10, 27, 28, 2, 2, 2, 7, - 28, 7, 2, 28, 2, 2, 0, 15, 43, 0, 0, 25, 20, 0, 0, 2, - 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, 44, 28, 2, 2, 7, 0, - 2, 7, 2, 2, 0, 28, 7, 7, 2, 0, 28, 7, 0, 2, 7, 0, - 2, 2, 2, 2, 2, 2, 0, 0, 21, 14, 45, 0, 46, 31, 46, 32, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 13, 27, 47, 2, 2, 2, 7, - 2, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 15, - 20, 14, 21, 45, 20, 36, 20, 37, 0, 0, 0, 25, 29, 2, 7, 0, - 0, 8, 27, 28, 2, 2, 2, 7, 2, 2, 2, 28, 2, 2, 0, 15, - 43, 0, 0, 33, 45, 0, 0, 0, 7, 48, 49, 0, 0, 0, 0, 0, - 0, 9, 27, 2, 2, 2, 2, 7, 2, 2, 2, 2, 2, 2, 50, 51, - 21, 21, 17, 29, 46, 31, 46, 32, 52, 0, 0, 0, 33, 0, 0, 0, - 28, 10, 27, 28, 2, 2, 2, 2, 2, 2, 2, 2, 7, 0, 2, 2, - 2, 2, 28, 2, 2, 2, 2, 28, 0, 2, 2, 2, 7, 0, 53, 0, - 33, 21, 20, 29, 29, 16, 46, 46, 23, 0, 21, 0, 0, 0, 0, 0, - 0, 2, 0, 2, 7, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 2, 2, 54, 54, 55, 0, 0, 16, 2, 2, 2, 2, 28, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 7, 0, 56, 19, 57, 20, 20, 18, 18, - 44, 19, 9, 29, 9, 2, 2, 58, 59, 59, 59, 59, 59, 60, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, - 0, 0, 0, 0, 62, 0, 0, 0, 0, 2, 2, 2, 2, 2, 63, 43, - 57, 64, 20, 20, 65, 66, 67, 68, 69, 2, 2, 2, 2, 2, 1, 0, - 3, 2, 2, 2, 21, 18, 2, 2, 70, 69, 71, 72, 63, 71, 27, 27, - 2, 50, 20, 51, 2, 2, 2, 2, 2, 2, 73, 74, 75, 27, 27, 76, - 77, 2, 2, 2, 2, 2, 27, 43, 0, 2, 57, 78, 0, 0, 0, 0, - 28, 2, 57, 45, 0, 0, 0, 0, 0, 2, 57, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 7, 2, 7, 57, 0, 0, 0, 0, 0, - 0, 2, 2, 79, 43, 20, 57, 18, 46, 46, 46, 46, 13, 80, 81, 82, - 83, 84, 85, 0, 0, 0, 0, 86, 0, 7, 0, 0, 28, 0, 87, 79, - 88, 2, 2, 2, 2, 7, 0, 0, 0, 40, 40, 89, 90, 2, 2, 2, - 2, 2, 2, 2, 2, 11, 7, 0, 0, 91, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 7, 20, 78, 43, 20, 92, 59, 0, - 0, 93, 94, 93, 93, 95, 96, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 0, 2, 2, 7, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, - 0, 2, 2, 2, 2, 27, 0, 0, 0, 2, 2, 2, 2, 2, 7, 0, - 0, 2, 2, 2, 50, 97, 43, 0, 0, 2, 2, 98, 99, 100, 101, 59, - 61, 102, 14, 43, 20, 57, 19, 78, 46, 46, 74, 9, 9, 9, 103, 44, - 38, 9, 104, 72, 2, 2, 2, 2, 2, 2, 2, 105, 20, 18, 18, 20, - 46, 46, 20, 106, 2, 2, 2, 7, 0, 0, 0, 0, 0, 0, 107, 108, - 109, 109, 109, 0, 0, 0, 0, 0, 0, 104, 72, 2, 2, 2, 2, 2, - 2, 58, 59, 57, 23, 20, 110, 59, 2, 2, 2, 2, 105, 20, 21, 43, - 43, 100, 12, 0, 0, 0, 0, 0, 0, 2, 2, 59, 16, 46, 21, 111, - 100, 100, 100, 112, 113, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 28, - 2, 9, 44, 114, 114, 114, 9, 114, 114, 13, 114, 114, 114, 24, 0, 38, - 0, 0, 0, 115, 49, 9, 3, 0, 0, 0, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 0, 0, 0, 4, 117, 118, 40, 40, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 118, 118, 119, 118, 118, 118, 118, 118, 118, 118, - 118, 0, 0, 120, 0, 0, 0, 0, 0, 0, 5, 120, 0, 0, 0, 0, - 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 2, 2, 2, 2, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, - 121, 2, 51, 2, 106, 2, 8, 2, 2, 2, 63, 17, 14, 0, 0, 29, - 0, 2, 2, 0, 0, 0, 0, 0, 0, 27, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 122, 21, 21, 21, 21, 21, 21, 21, 123, 0, 0, 0, 0, - 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, 0, 0, 0, - 50, 2, 2, 2, 20, 20, 124, 114, 0, 2, 2, 2, 125, 18, 57, 18, - 111, 100, 126, 0, 0, 0, 0, 0, 0, 9, 127, 2, 2, 2, 2, 2, - 2, 2, 128, 21, 20, 18, 46, 129, 130, 131, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 50, 28, 2, 2, 2, 2, 2, 2, 2, 2, 8, 20, 57, - 97, 74, 132, 133, 134, 0, 0, 0, 0, 2, 135, 2, 2, 2, 2, 136, - 0, 28, 2, 40, 3, 0, 77, 13, 2, 51, 20, 137, 50, 51, 2, 2, - 103, 8, 7, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 138, 19, - 23, 0, 0, 139, 140, 0, 0, 0, 0, 2, 63, 43, 21, 78, 45, 141, - 0, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, - 4, 118, 118, 118, 118, 119, 0, 0, 0, 2, 2, 2, 2, 2, 7, 2, - 2, 2, 7, 2, 28, 2, 2, 2, 2, 2, 28, 2, 2, 2, 28, 7, - 0, 125, 18, 25, 29, 0, 0, 142, 143, 2, 2, 28, 2, 28, 2, 2, - 2, 2, 2, 2, 0, 12, 35, 0, 144, 2, 2, 11, 35, 0, 28, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 2, 2, - 7, 2, 2, 9, 39, 0, 0, 0, 0, 2, 2, 2, 2, 2, 25, 36, - 0, 2, 2, 2, 114, 114, 114, 114, 114, 145, 2, 7, 0, 0, 0, 0, - 0, 2, 12, 12, 0, 0, 0, 0, 0, 7, 2, 2, 7, 2, 2, 2, - 2, 28, 2, 7, 0, 28, 2, 0, 0, 146, 147, 148, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 20, 20, 18, 18, 18, 20, 20, 131, 0, 0, 0, - 0, 0, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 2, 2, 2, 2, - 2, 51, 50, 51, 0, 0, 0, 0, 150, 9, 72, 2, 2, 2, 2, 2, - 2, 16, 17, 19, 14, 22, 35, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 9, 47, 2, 2, 2, 2, 2, 2, 2, 2, 2, 125, 18, 20, 151, - 20, 19, 152, 153, 2, 2, 2, 2, 2, 0, 0, 63, 154, 0, 0, 0, - 0, 2, 11, 0, 0, 0, 0, 0, 0, 2, 63, 23, 18, 18, 18, 20, - 20, 106, 155, 0, 0, 54, 156, 29, 157, 28, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 21, 17, 20, 20, 158, 42, 0, 0, 0, - 47, 125, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 7, 7, 2, 2, - 28, 2, 2, 2, 2, 2, 2, 2, 28, 2, 2, 2, 2, 2, 2, 2, - 8, 16, 17, 19, 20, 159, 29, 0, 0, 9, 9, 28, 2, 2, 2, 7, - 28, 7, 2, 28, 2, 2, 56, 15, 21, 14, 21, 45, 30, 31, 30, 32, - 0, 0, 0, 0, 33, 0, 0, 0, 2, 2, 21, 0, 9, 9, 9, 44, - 0, 9, 9, 44, 0, 0, 0, 0, 0, 2, 2, 63, 23, 18, 18, 18, - 20, 21, 123, 13, 15, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, - 160, 161, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 18, 64, 97, 23, - 157, 9, 162, 7, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 63, 23, 18, 18, 0, 46, 46, 9, 163, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, 2, 18, 0, 21, 17, 18, 18, 19, 14, 80, - 163, 36, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 8, 164, - 23, 18, 20, 20, 162, 7, 0, 0, 0, 2, 2, 2, 2, 2, 7, 41, - 133, 21, 20, 18, 74, 19, 20, 0, 0, 2, 2, 2, 7, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 16, 17, 18, 19, 20, 103, 163, 35, 0, - 0, 2, 2, 2, 7, 28, 0, 2, 2, 2, 2, 28, 7, 2, 2, 2, - 2, 21, 21, 16, 30, 31, 10, 165, 166, 167, 168, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 0, 2, 2, 2, 63, 23, 18, 18, 0, 20, 21, - 27, 106, 0, 31, 0, 0, 0, 0, 0, 50, 18, 20, 20, 20, 137, 2, - 2, 2, 169, 170, 9, 13, 171, 70, 172, 0, 0, 1, 144, 0, 0, 0, - 0, 50, 18, 20, 14, 17, 18, 2, 2, 2, 2, 155, 155, 155, 173, 173, - 173, 173, 173, 173, 13, 174, 0, 28, 0, 20, 18, 18, 29, 20, 20, 9, - 163, 0, 59, 59, 59, 59, 59, 59, 59, 64, 19, 80, 44, 0, 0, 0, - 0, 2, 2, 2, 7, 2, 28, 2, 2, 50, 20, 20, 29, 0, 36, 20, - 25, 9, 156, 175, 171, 0, 0, 0, 0, 2, 2, 2, 28, 7, 2, 2, - 2, 2, 2, 2, 2, 2, 21, 21, 45, 20, 33, 80, 66, 0, 0, 0, - 0, 2, 176, 64, 45, 0, 0, 0, 0, 9, 177, 2, 2, 2, 2, 2, - 2, 2, 2, 21, 20, 18, 29, 0, 46, 14, 140, 0, 0, 0, 0, 0, - 0, 178, 178, 178, 106, 179, 178, 0, 0, 145, 2, 2, 180, 114, 114, 114, - 114, 114, 114, 114, 0, 0, 0, 0, 0, 9, 9, 9, 44, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 7, 0, 56, 181, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, - 38, 114, 24, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, - 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 56, - 35, 0, 4, 118, 118, 118, 119, 0, 0, 9, 9, 9, 47, 2, 2, 2, - 0, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 44, 2, 2, 2, 2, 2, 2, 9, 9, 2, 2, 2, 2, 2, 2, 20, - 20, 2, 2, 42, 42, 42, 90, 0, 0, O, O, O, GB, B, B, GB, - O, O, WJ,FMPst,FMPst, O, CGJ, B, O, B,VMAbv,VMAbv,VMAbv, O,VMAbv, B, - CMBlw,CMBlw,CMBlw,VMAbv,VMPst, VAbv, VPst,CMBlw, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, - VAbv, VAbv, VAbv, VPst, VPst, VPst, H, VPre, VPst,VMBlw, O, O, VAbv, GB,VMAbv,VMPst, - VMPst, O, B, VBlw, O, O, VPre, VPre, O, VPre, H, O, VPst,FMAbv, O,CMBlw, - O, VAbv, O, VAbv, H, O,VMBlw,VMAbv,CMAbv, GB, GB, O, MBlw,CMAbv,CMAbv, VPst, - VAbv,VMAbv, O, VPst, O, VPre, VPre,VMAbv, B, O, CS, CS,VMPst, B, VAbv, VAbv, - B, R, O, HVM, O, O,FMBlw, O,CMAbv, O,CMBlw, VAbv, VBlw, B, SUB, SUB, - SUB, O, SUB, SUB, O,FMBlw, O, B, VPst, VBlw, VPre,VMAbv,VMBlw,VMPst, IS, VAbv, - MPst, MPre, MBlw, MBlw, B, MBlw, MBlw, VPst,VMPst,VMPst, B, MBlw, VPst, VPre, VAbv, VAbv, - VMPst,VMPst,VMBlw, B,VMPst, VBlw, VPst, CGJ, CGJ, VPst,VMAbv,VMAbv,FMAbv, FAbv,CMAbv,FMAbv, - VMAbv,FMAbv, VAbv, IS,FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,CMAbv,CMAbv, B, GB, - B, VAbv, SUB, FPst, FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre, B, MPre, MBlw, - SUB, FAbv, FAbv, MAbv, SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, H, B, O, - SMAbv,SMBlw,SMAbv,SMAbv,SMAbv, VPst, IS, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,VMBlw,VMAbv, - CS, O,FMAbv, ZWNJ, CGJ, WJ, WJ, WJ, O,FMPst, O, O, H, MPst, VPst, H, - VMAbv, VAbv,VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv, MBlw, MPst, MBlw, H, - O, VBlw, MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw, B, B, VPre, O, - VMPst, IS, O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O, IS,VMBlw, B,VMPst,VMAbv,VMPst, - CS, CS, B, N, N, O, HN, VPre, VBlw, VAbv, IS,CMAbv, O, VPst, B, R, - R,CMBlw, VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,FMAbv, B, CS, CS, H,CMBlw,VMPst, - H,VMPst, VAbv,VMAbv, VPst, IS, R, MPst, R, MPst,CMBlw, B,FMBlw, VBlw,VMAbv, R, - MBlw, MBlw, GB, FBlw, FBlw,CMAbv, IS, VBlw, IS, GB, VAbv, R,VMPst, H, H, B, - H, B,VMBlw, O, VBlw, + 2, 2, 2, 2, 2, 2, 10, 11, 11, 11, 11, 0, 0, 0, 9, 12, + 0, 2, 2, 2, 2, 13, 14, 0, 0, 11, 15, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 16, 17, 18, 19, 20, 21, 22, 16, 23, 24, + 25, 12, 26, 27, 20, 2, 2, 2, 2, 2, 20, 0, 2, 2, 2, 2, + 2, 0, 2, 2, 2, 2, 2, 2, 2, 28, 29, 30, 2, 2, 2, 9, + 30, 9, 30, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 2, 2, + 2, 9, 9, 0, 2, 2, 0, 17, 18, 19, 20, 31, 32, 33, 32, 34, + 0, 0, 0, 0, 35, 0, 0, 2, 30, 2, 0, 0, 0, 0, 0, 9, + 36, 12, 15, 30, 2, 2, 9, 0, 30, 9, 2, 30, 9, 2, 0, 37, + 18, 19, 31, 0, 27, 38, 27, 39, 0, 40, 0, 0, 0, 30, 2, 9, + 9, 0, 0, 0, 2, 2, 2, 2, 2, 41, 42, 43, 0, 0, 0, 0, + 0, 12, 15, 30, 2, 2, 2, 2, 30, 2, 30, 2, 2, 2, 2, 2, + 2, 9, 2, 30, 2, 2, 0, 17, 18, 19, 20, 21, 27, 22, 35, 24, + 0, 0, 0, 0, 0, 30, 41, 41, 44, 12, 29, 30, 2, 2, 2, 9, + 30, 9, 2, 30, 2, 2, 0, 17, 45, 0, 0, 27, 22, 0, 0, 2, + 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 46, 30, 2, 2, 9, 0, + 2, 9, 2, 2, 0, 30, 9, 9, 2, 0, 30, 9, 0, 2, 9, 0, + 2, 2, 2, 2, 2, 2, 0, 0, 23, 16, 47, 0, 48, 33, 48, 34, + 0, 0, 0, 0, 35, 0, 0, 0, 0, 15, 29, 49, 2, 2, 2, 9, + 2, 9, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 17, + 22, 16, 23, 47, 22, 38, 22, 39, 0, 0, 0, 27, 31, 2, 9, 0, + 0, 10, 29, 30, 2, 2, 2, 9, 2, 2, 2, 30, 2, 2, 0, 17, + 45, 0, 0, 35, 47, 0, 0, 0, 9, 50, 51, 0, 0, 0, 0, 0, + 0, 11, 29, 2, 2, 2, 2, 9, 2, 2, 2, 2, 2, 2, 52, 53, + 23, 23, 19, 31, 48, 33, 48, 34, 54, 0, 0, 0, 35, 0, 0, 0, + 30, 12, 29, 30, 2, 2, 2, 2, 2, 2, 2, 2, 9, 0, 2, 2, + 2, 2, 30, 2, 2, 2, 2, 30, 0, 2, 2, 2, 9, 0, 55, 0, + 35, 23, 22, 31, 31, 18, 48, 48, 25, 0, 23, 0, 0, 0, 0, 0, + 0, 2, 0, 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, + 0, 2, 2, 56, 56, 57, 0, 0, 18, 2, 2, 2, 2, 30, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 9, 0, 58, 21, 59, 22, 22, 20, 20, + 46, 21, 11, 31, 11, 2, 2, 60, 61, 61, 61, 61, 61, 62, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 63, + 0, 0, 0, 0, 64, 0, 0, 0, 0, 2, 2, 2, 2, 2, 65, 45, + 59, 66, 22, 22, 67, 68, 69, 70, 71, 2, 2, 2, 2, 2, 1, 0, + 5, 2, 2, 2, 23, 20, 2, 2, 72, 71, 73, 74, 65, 73, 29, 29, + 2, 52, 22, 53, 2, 2, 2, 2, 2, 2, 75, 76, 77, 29, 29, 78, + 79, 2, 2, 2, 2, 2, 29, 45, 0, 2, 59, 80, 0, 0, 0, 0, + 30, 2, 59, 47, 0, 0, 0, 0, 0, 2, 59, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 9, 2, 9, 59, 0, 0, 0, 0, 0, + 0, 2, 2, 81, 45, 22, 59, 20, 48, 48, 48, 48, 15, 82, 83, 84, + 85, 86, 87, 0, 0, 0, 0, 88, 0, 9, 0, 0, 30, 0, 89, 81, + 90, 2, 2, 2, 2, 9, 0, 0, 0, 42, 42, 91, 92, 2, 2, 2, + 2, 2, 2, 2, 2, 13, 9, 0, 0, 93, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 9, 22, 80, 45, 22, 94, 61, 0, + 0, 95, 96, 95, 95, 97, 98, 0, 0, 2, 2, 2, 2, 2, 2, 2, + 0, 2, 2, 9, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, + 0, 2, 2, 2, 2, 29, 0, 0, 0, 2, 2, 2, 2, 2, 9, 0, + 0, 2, 2, 2, 52, 99, 45, 0, 0, 2, 2, 100, 101, 102, 103, 61, + 63, 104, 16, 45, 22, 59, 21, 80, 48, 48, 76, 11, 11, 11, 105, 46, + 40, 11, 106, 74, 2, 2, 2, 2, 2, 2, 2, 107, 22, 20, 20, 22, + 48, 48, 22, 108, 2, 2, 2, 9, 0, 0, 0, 0, 0, 0, 109, 110, + 111, 111, 111, 0, 0, 0, 0, 0, 0, 106, 74, 2, 2, 2, 2, 2, + 2, 60, 61, 59, 25, 22, 112, 61, 2, 2, 2, 2, 107, 22, 23, 45, + 45, 102, 14, 0, 0, 0, 0, 0, 0, 2, 2, 61, 18, 48, 23, 113, + 102, 102, 102, 114, 115, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 30, + 2, 11, 46, 116, 116, 116, 11, 116, 116, 15, 116, 116, 116, 26, 0, 40, + 0, 0, 0, 117, 51, 11, 5, 0, 0, 0, 0, 0, 0, 0, 118, 0, + 0, 0, 0, 0, 0, 0, 6, 119, 120, 42, 42, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 120, 120, 121, 120, 120, 120, 120, 120, 120, 120, + 120, 0, 0, 122, 0, 0, 0, 0, 0, 0, 7, 122, 0, 0, 0, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 123, 123, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 0, 124, 0, 123, 123, 0, 0, 0, 0, + 0, 2, 53, 2, 108, 2, 10, 2, 2, 2, 65, 19, 16, 0, 0, 31, + 0, 2, 2, 0, 0, 0, 0, 0, 0, 29, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 125, 23, 23, 23, 23, 23, 23, 23, 126, 0, 0, 0, 0, + 0, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, 0, 0, 0, 0, 0, + 52, 2, 2, 2, 22, 22, 127, 116, 0, 2, 2, 2, 128, 20, 59, 20, + 113, 102, 129, 0, 0, 0, 0, 0, 0, 11, 130, 2, 2, 2, 2, 2, + 2, 2, 131, 23, 22, 20, 48, 132, 133, 134, 0, 0, 0, 0, 0, 0, + 0, 2, 2, 52, 30, 2, 2, 2, 2, 2, 2, 2, 2, 10, 22, 59, + 99, 76, 135, 136, 137, 0, 0, 0, 0, 2, 138, 2, 2, 2, 2, 139, + 0, 30, 2, 42, 5, 0, 79, 15, 2, 53, 22, 140, 52, 53, 2, 2, + 105, 10, 9, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 141, 21, + 25, 0, 0, 142, 143, 0, 0, 0, 0, 2, 65, 45, 23, 80, 47, 144, + 0, 81, 81, 81, 81, 81, 81, 81, 81, 0, 0, 0, 0, 0, 0, 0, + 6, 120, 120, 120, 120, 121, 0, 0, 0, 2, 2, 2, 2, 2, 9, 2, + 2, 2, 9, 2, 30, 2, 2, 2, 2, 2, 30, 2, 2, 2, 30, 9, + 0, 128, 20, 27, 31, 0, 0, 145, 146, 2, 2, 30, 2, 30, 2, 2, + 2, 2, 2, 2, 0, 14, 37, 0, 147, 2, 2, 13, 37, 0, 30, 2, + 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 2, 2, + 9, 2, 2, 11, 41, 0, 0, 0, 0, 2, 2, 2, 2, 2, 27, 38, + 0, 2, 2, 2, 116, 116, 116, 116, 116, 148, 2, 9, 0, 0, 0, 0, + 0, 2, 14, 14, 0, 0, 0, 0, 0, 9, 2, 2, 9, 2, 2, 2, + 2, 30, 2, 9, 0, 30, 2, 0, 0, 149, 150, 151, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 22, 22, 20, 20, 20, 22, 22, 134, 0, 0, 0, + 0, 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 2, 2, 2, 2, + 2, 53, 52, 53, 0, 0, 0, 0, 153, 11, 74, 2, 2, 2, 2, 2, + 2, 18, 19, 21, 16, 24, 37, 0, 0, 0, 31, 0, 0, 0, 0, 0, + 0, 11, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 128, 20, 22, 154, + 22, 21, 155, 156, 2, 2, 2, 2, 2, 0, 0, 65, 157, 0, 0, 0, + 0, 2, 13, 0, 0, 0, 0, 0, 0, 2, 65, 25, 20, 20, 20, 22, + 22, 108, 158, 0, 0, 56, 159, 31, 160, 30, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 23, 19, 22, 22, 161, 44, 0, 0, 0, + 49, 128, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 9, 9, 2, 2, + 30, 2, 2, 2, 2, 2, 2, 2, 30, 2, 2, 2, 2, 2, 2, 2, + 10, 18, 19, 21, 22, 162, 31, 0, 0, 11, 11, 30, 2, 2, 2, 9, + 30, 9, 2, 30, 2, 2, 58, 17, 23, 16, 23, 47, 32, 33, 32, 34, + 0, 0, 0, 0, 35, 0, 0, 0, 2, 2, 23, 0, 11, 11, 11, 46, + 0, 11, 11, 46, 0, 0, 0, 0, 0, 2, 2, 65, 25, 20, 20, 20, + 22, 23, 126, 15, 17, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, + 163, 164, 0, 0, 0, 0, 0, 0, 0, 18, 19, 20, 20, 66, 99, 25, + 160, 11, 165, 9, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, + 65, 25, 20, 20, 0, 48, 48, 11, 166, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 2, 20, 0, 23, 19, 20, 20, 21, 16, 82, + 166, 38, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 10, 167, + 25, 20, 22, 22, 165, 9, 0, 0, 0, 2, 2, 2, 2, 2, 9, 43, + 136, 23, 22, 20, 76, 21, 22, 0, 0, 2, 2, 2, 9, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 2, 18, 19, 20, 21, 22, 105, 166, 37, 0, + 0, 2, 2, 2, 9, 30, 0, 2, 2, 2, 2, 30, 9, 2, 2, 2, + 2, 23, 23, 18, 32, 33, 12, 168, 169, 170, 171, 0, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 0, 2, 2, 2, 65, 25, 20, 20, 0, 22, 23, + 29, 108, 0, 33, 0, 0, 0, 0, 0, 52, 20, 22, 22, 22, 140, 2, + 2, 2, 172, 173, 11, 15, 174, 72, 175, 0, 0, 1, 147, 0, 0, 0, + 0, 52, 20, 22, 16, 19, 20, 2, 2, 2, 2, 158, 158, 158, 176, 176, + 176, 176, 176, 176, 15, 177, 0, 30, 0, 22, 20, 20, 31, 22, 22, 11, + 166, 0, 61, 61, 61, 61, 61, 61, 61, 66, 21, 82, 46, 0, 0, 0, + 0, 2, 2, 2, 9, 2, 30, 2, 2, 52, 22, 22, 31, 0, 38, 22, + 27, 11, 159, 178, 174, 0, 0, 0, 0, 2, 2, 2, 30, 9, 2, 2, + 2, 2, 2, 2, 2, 2, 23, 23, 47, 22, 35, 82, 68, 0, 0, 0, + 0, 2, 179, 66, 47, 0, 0, 0, 0, 11, 180, 2, 2, 2, 2, 2, + 2, 2, 2, 23, 22, 20, 31, 0, 48, 16, 143, 0, 0, 0, 0, 0, + 0, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 183, 184, 182, 181, + 181, 185, 181, 181, 186, 187, 187, 187, 187, 187, 187, 187, 0, 0, 0, 0, + 0, 11, 11, 11, 46, 0, 0, 0, 0, 2, 2, 2, 2, 2, 9, 0, + 58, 188, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 0, 0, 0, 40, 116, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, + 0, 2, 2, 2, 2, 2, 0, 58, 37, 0, 6, 120, 120, 120, 121, 0, + 0, 11, 11, 11, 49, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 46, 2, 2, 2, 2, 2, 2, 11, + 11, 2, 2, 2, 2, 2, 2, 22, 22, 2, 2, 44, 44, 44, 92, 0, + 0, O, O, O, GB, B, B, O, SB, O, SE, GB, O, O, WJ,FMPst, + FMPst, O, CGJ, B, O, B,VMAbv,VMAbv,VMAbv, O,VMAbv, B,CMBlw,CMBlw,CMBlw,VMAbv, + VMPst, VAbv, VPst,CMBlw, B, VPst, VPre, VPst, VBlw, VBlw, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, + VPst, VPst, H, VPre, VPst,VMBlw, O, O, VAbv, GB,VMAbv,VMPst,VMPst, O, B, VBlw, + O, O, VPre, VPre, O, VPre, H, O, VPst,FMAbv, O,CMBlw, O, VAbv, O, VAbv, + H, O,VMBlw,VMAbv,CMAbv, GB, GB, O, MBlw,CMAbv,CMAbv, VPst, VAbv,VMAbv, O, VPst, + O, VPre, VPre,VMAbv, B, O, CS, CS,VMPst, B, VAbv, VAbv, B, R, O, HVM, + O, O,FMBlw, O,CMAbv, O,CMBlw, VAbv, VBlw, B, SUB, SUB, SUB, O, SUB, SUB, + O,FMBlw, O, B, VPst, VBlw, VPre,VMAbv,VMBlw,VMPst, IS, VAbv, MPst, MPre, MBlw, MBlw, + B, MBlw, MBlw, VPst,VMPst,VMPst, B, MBlw, VPst, VPre, VAbv, VAbv,VMPst,VMPst,VMBlw, B, + VMPst, VBlw, VPst, CGJ, CGJ, VPst,VMAbv,VMAbv,FMAbv, FAbv,CMAbv,FMAbv,VMAbv,FMAbv, VAbv, IS, + FMAbv, B,FMAbv, B, CGJ, WJ, CGJ, GB,CMAbv,CMAbv, B, GB, B, VAbv, SUB, FPst, + FPst,VMBlw, FPst, FPst, FBlw,VMAbv,FMBlw, VAbv, VPre, B, MPre, MBlw, SUB, FAbv, FAbv, MAbv, + SUB, Sk, VPst, VAbv,VMAbv,VMAbv, FAbv,CMAbv, VPst, H, B, O,SMAbv,SMBlw,SMAbv,SMAbv, + SMAbv, VPst, IS, VBlw, FAbv,VMPre,VMPre,FMAbv,CMBlw,VMBlw,VMBlw,VMAbv, CS, O,FMAbv, ZWNJ, + CGJ, WJ, WJ, WJ, O,FMPst, O, SB, SE, O, H, MPst, VPst, H,VMAbv, VAbv, + VMBlw, B, VBlw, FPst, VPst, FAbv,VMPst, B,CMAbv, VAbv, MBlw, MPst, MBlw, H, O, VBlw, + MPst, MPre, MAbv, MBlw, O, B, FAbv, FAbv, FPst, VBlw, B, B, VPre, O,VMPst, IS, + O,VMPst, VBlw, VPst,VMBlw,VMBlw,VMAbv, O, IS,VMBlw, B,VMPst,VMAbv,VMPst, CS, CS, + B, N, N, O, HN, VPre, VBlw, VAbv, IS,CMAbv, O, VPst, B, R, R,CMBlw, + VAbv, VPre,VMAbv,VMAbv, H, VAbv,CMBlw,FMAbv, B, CS, CS, H,CMBlw,VMPst, H,VMPst, + VAbv,VMAbv, VPst, IS, R, MPst, R, MPst,CMBlw, B,FMBlw, VBlw,VMAbv, R, MBlw, MBlw, + GB, FBlw, FBlw,CMAbv, IS, VBlw, IS, GB, VAbv, R,VMPst, G, G, J, J, J, + SB, SE, J, HR, G, G, HM, HM, HM, O, VBlw, }; static const uint16_t -hb_use_u16[448] = +hb_use_u16[456] = { - 0, 0, 1, 2, 3, 4, 0, 5, 6, 0, 7, 0, 8, 9, 10, 11, - 9, 12, 13, 9, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 17, 25, 26, 20, 21, 27, 28, 29, 30, 31, 32, 33, 21, 34, 35, 0, - 17, 36, 37, 20, 21, 38, 23, 39, 17, 40, 41, 42, 43, 44, 45, 46, - 30, 0, 47, 48, 21, 49, 50, 51, 17, 0, 52, 48, 21, 53, 50, 54, - 17, 55, 56, 48, 9, 57, 58, 59, 60, 61, 9, 62, 63, 64, 30, 65, - 66, 67, 9, 68, 69, 9, 70, 71, 72, 73, 74, 75, 76, 0, 9, 9, - 77, 78, 79, 80, 81, 82, 83, 84, 9, 85, 9, 86, 9, 87, 88, 89, - 9, 90, 91, 92, 2, 0, 93, 0, 9, 94, 95, 9, 96, 0, 97, 98, - 99,100, 30, 9,101,102,103, 9,104,105, 9,106, 9,107,108,109, - 2, 2,110, 9, 9,111,112, 2,113,114,115, 9,116, 9,117,118, - 119,120,121, 0, 0,122,123,124, 0,125,126,127,128, 0,129,130, - 131, 0, 0,132,133, 0, 0, 9,134,135,136, 9,137, 0, 9,138, - 139, 9, 9,140,141, 2,142,143,144, 9,145,146,147, 9, 9,148, - 149, 2,150, 98,151,152,153, 2, 9,154, 9,155,156, 0,157,158, - 159, 2,160, 0, 0,161, 0,162, 0,163,163,164, 33,165,166,167, - 9,168, 94, 0,169, 0, 9,170,171, 0,172, 2,173,170,174,175, - 176, 0, 0,177,178, 0,179, 9, 9,180,181,182,183,184,185, 9, - 9,186,187, 0,188, 9,189,190,191, 9, 9,192, 9,193,194,105, - 195,102, 9, 33,196,197,198, 0,199,200, 94, 9, 9,201,202, 2, - 203, 20, 21,204,205,206,207,208, 9,209,210,211,212, 0,195, 9, - 9,213,214, 2,215,216,217,218, 9,219,220, 2,221,222, 9,223, - 224,103,225, 0,226,227,228,229, 9,230,231, 2,232, 9, 9,233, - 234, 0,235, 9, 9,236,237,238,239,240, 21, 9,215,241, 7, 9, - 70, 18, 9,242, 73,243,244, 9, 9,245,246, 2,247, 9,248,249, - 9,250,251, 48, 9,252,253, 2, 9,254,255,256, 9,257,258,259, - 260,260,261,262,263, 0, 9,264,105, 70, 94,265, 0,266, 70,267, - 268, 0,269, 0,270, 2,271, 2,272, 2,129,129,160,160,160,129, + 0, 0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9, 10, + 11, 12, 10, 13, 14, 10, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 18, 26, 27, 21, 22, 28, 29, 30, 31, 32, 33, 34, 22, 35, + 36, 0, 18, 37, 38, 21, 22, 39, 24, 40, 18, 41, 42, 43, 44, 45, + 46, 47, 31, 0, 48, 49, 22, 50, 51, 52, 18, 0, 53, 49, 22, 54, + 51, 55, 18, 56, 57, 49, 10, 58, 59, 60, 61, 62, 10, 63, 64, 65, + 31, 66, 67, 68, 10, 69, 70, 10, 71, 72, 73, 74, 75, 76, 77, 0, + 10, 10, 78, 79, 80, 81, 82, 83, 84, 85, 10, 86, 10, 87, 10, 88, + 89, 90, 10, 91, 92, 93, 2, 0, 94, 0, 10, 95, 96, 10, 97, 0, + 98, 99,100,101, 31, 10,102,103,104, 10,105,106, 10,107, 10,108, + 109,110, 2, 2,111, 10, 10,112,113, 2,114,115,116, 10,117, 10, + 118,119,120,121,122, 0, 0,123,124,125, 0,126,127,128,129, 0, + 130,131,132, 0, 0,133,134, 0,135, 0, 0, 10,136,137,138, 0, + 139, 10,140, 0, 10,141,142, 10, 10,143,144, 2,145,146,147, 10, + 148,149,150, 10, 10,151,152, 2,153, 99,154,155,156, 2, 10,157, + 10,158,159, 0,160,161,162, 2,163, 0, 0,164, 0,165, 0,166, + 166,167, 34,168,169,170, 10,171, 95, 0,172, 0, 10,173,174, 0, + 175, 2,176,173,177,178,179, 0, 0,180,181, 0,182, 10, 10,183, + 184,185,186,187,188, 10, 10,189,190, 0,191, 10,192,193,194, 10, + 10,195, 10,196,197,106,198,103, 10, 34,199,200,201, 0,202,203, + 95, 10, 10,204,205, 2,206, 21, 22,207,208,209,210,211, 10,212, + 213,214,215, 0,198, 10, 10,216,217, 2,218,219,220,221, 10,222, + 223, 2,224,225, 10,226,227,104,228, 0,229,230,231,232, 10,233, + 234, 2,235, 10, 10,236,237, 0,238, 10, 10,239,240,241,242,243, + 22, 10,218,244, 8, 10, 71, 19, 10,245, 74,246,247, 10, 10,248, + 249, 2,250, 10,251,252, 10,253,254, 49, 10,255,256, 2,257,257, + 257,258,259,260, 10,261,262,263,264,264,265,266,267, 0, 10,268, + 106, 71, 95,269, 0,270, 71,271,272, 0,273, 0,274, 2,275, 2, + 276, 2,130,130,163,163,163,130, }; static inline unsigned @@ -622,7 +636,7 @@ static inline uint_fast8_t hb_use_get_category (unsigned u) { - return u<921600u?hb_use_u8[3049+(((hb_use_u8[865+(((hb_use_u16[((hb_use_u8[353+(((hb_use_u8[113+(((hb_use_b4(hb_use_u8,u>>1>>3>>1>>3>>4))<<4)+((u>>1>>3>>1>>3)&15u))])<<3)+((u>>1>>3>>1)&7u))])<<1)+((u>>1>>3)&1u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:O; + return u<921600u?hb_use_u8[3105+(((hb_use_u8[889+(((hb_use_u16[((hb_use_u8[353+(((hb_use_u8[113+(((hb_use_b4(hb_use_u8,u>>1>>3>>1>>3>>4))<<4)+((u>>1>>3>>1>>3)&15u))])<<3)+((u>>1>>3>>1)&7u))])<<1)+((u>>1>>3)&1u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:O; } #endif @@ -633,7 +647,9 @@ #undef G #undef GB #undef H +#undef HM #undef HN +#undef HR #undef HVM #undef IS #undef J diff -Nru harfbuzz-8.0.1/src/hb-ot-shaper-vowel-constraints.cc harfbuzz-8.3.0/src/hb-ot-shaper-vowel-constraints.cc --- harfbuzz-8.0.1/src/hb-ot-shaper-vowel-constraints.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-shaper-vowel-constraints.cc 2023-11-11 14:08:45.000000000 +0000 @@ -10,8 +10,8 @@ * # Date: 2015-03-12, 21:17:00 GMT [AG] * # Date: 2019-11-08, 23:22:00 GMT [AG] * - * # Scripts-15.0.0.txt - * # Date: 2022-04-26, 23:15:02 GMT + * # Scripts-15.1.0.txt + * # Date: 2023-07-28, 16:01:07 GMT */ #include "hb.hh" diff -Nru harfbuzz-8.0.1/src/hb-ot-stat-table.hh harfbuzz-8.3.0/src/hb-ot-stat-table.hh --- harfbuzz-8.0.1/src/hb-ot-stat-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-stat-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -327,6 +327,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && axisValues.sanitize (c, axisCount))); } @@ -416,6 +417,7 @@ TRACE_SANITIZE (this); if (unlikely (!c->check_struct (this))) return_trace (false); + hb_barrier (); switch (u.format) { @@ -560,6 +562,7 @@ { TRACE_SANITIZE (this); return_trace (likely (c->check_struct (this) && + hb_barrier () && version.major == 1 && version.minor > 0 && designAxesOffset.sanitize (c, this, designAxisCount) && diff -Nru harfbuzz-8.0.1/src/hb-ot-tag-table.hh harfbuzz-8.3.0/src/hb-ot-tag-table.hh --- harfbuzz-8.0.1/src/hb-ot-tag-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-tag-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -6,8 +6,8 @@ * * on files with these headers: * - * - * File-Date: 2022-03-02 + * + * File-Date: 2023-08-02 */ #ifndef HB_OT_TAG_TABLE_HH @@ -257,7 +257,7 @@ {HB_TAG('a','i','i',' '), HB_TAG('S','Y','R',' ')}, /* Assyrian Neo-Aramaic -> Syriac */ /*{HB_TAG('a','i','o',' '), HB_TAG('A','I','O',' ')},*/ /* Aiton */ {HB_TAG('a','i','w',' '), HB_TAG('A','R','I',' ')}, /* Aari */ - {HB_TAG('a','j','p',' '), HB_TAG('A','R','A',' ')}, /* South Levantine Arabic -> Arabic */ + {HB_TAG('a','j','p',' '), HB_TAG('A','R','A',' ')}, /* South Levantine Arabic (retired code) -> Arabic */ {HB_TAG('a','j','t',' '), HB_TAG('A','R','A',' ')}, /* Judeo-Tunisian Arabic (retired code) -> Arabic */ {HB_TAG('a','k','b',' '), HB_TAG('A','K','B',' ')}, /* Batak Angkola */ {HB_TAG('a','k','b',' '), HB_TAG('B','T','K',' ')}, /* Batak Angkola -> Batak */ @@ -269,7 +269,7 @@ /*{HB_TAG('a','n','g',' '), HB_TAG('A','N','G',' ')},*/ /* Old English (ca. 450-1100) -> Anglo-Saxon */ {HB_TAG('a','o','a',' '), HB_TAG('C','P','P',' ')}, /* Angolar -> Creoles */ {HB_TAG('a','p','a',' '), HB_TAG('A','T','H',' ')}, /* Apache [collection] -> Athapaskan */ - {HB_TAG('a','p','c',' '), HB_TAG('A','R','A',' ')}, /* North Levantine Arabic -> Arabic */ + {HB_TAG('a','p','c',' '), HB_TAG('A','R','A',' ')}, /* Levantine Arabic -> Arabic */ {HB_TAG('a','p','d',' '), HB_TAG('A','R','A',' ')}, /* Sudanese Arabic -> Arabic */ {HB_TAG('a','p','j',' '), HB_TAG('A','T','H',' ')}, /* Jicarilla Apache -> Athapaskan */ {HB_TAG('a','p','k',' '), HB_TAG('A','T','H',' ')}, /* Kiowa Apache -> Athapaskan */ @@ -1211,6 +1211,7 @@ {HB_TAG('p','p','a',' '), HB_TAG('B','A','G',' ')}, /* Pao (retired code) -> Baghelkhandi */ {HB_TAG('p','r','e',' '), HB_TAG('C','P','P',' ')}, /* Principense -> Creoles */ /*{HB_TAG('p','r','o',' '), HB_TAG('P','R','O',' ')},*/ /* Old Provençal (to 1500) -> Provençal / Old Provençal */ + {HB_TAG('p','r','p',' '), HB_TAG('G','U','J',' ')}, /* Parsi (retired code) -> Gujarati */ {HB_TAG('p','r','s',' '), HB_TAG('D','R','I',' ')}, /* Dari */ {HB_TAG('p','r','s',' '), HB_TAG('F','A','R',' ')}, /* Dari -> Persian */ {HB_TAG('p','s','e',' '), HB_TAG('M','L','Y',' ')}, /* Central Malay -> Malay */ @@ -1439,7 +1440,7 @@ {HB_TAG('t','c','h',' '), HB_TAG('C','P','P',' ')}, /* Turks And Caicos Creole English -> Creoles */ {HB_TAG('t','c','p',' '), HB_TAG('Q','I','N',' ')}, /* Tawr Chin -> Chin */ {HB_TAG('t','c','s',' '), HB_TAG('C','P','P',' ')}, /* Torres Strait Creole -> Creoles */ - {HB_TAG('t','c','y',' '), HB_TAG('T','U','L',' ')}, /* Tulu -> Tumbuka */ + {HB_TAG('t','c','y',' '), HB_TAG('T','U','L',' ')}, /* Tulu */ {HB_TAG('t','c','z',' '), HB_TAG('Q','I','N',' ')}, /* Thado Chin -> Chin */ /*{HB_TAG('t','d','d',' '), HB_TAG('T','D','D',' ')},*/ /* Tai Nüa -> Dehong Dai */ {HB_TAG('t','d','x',' '), HB_TAG('M','L','G',' ')}, /* Tandroy-Mahafaly Malagasy -> Malagasy */ @@ -1495,8 +1496,8 @@ {HB_TAG('t','t','q',' '), HB_TAG('T','M','H',' ')}, /* Tawallammat Tamajaq -> Tamashek */ {HB_TAG('t','t','q',' '), HB_TAG('B','B','R',' ')}, /* Tawallammat Tamajaq -> Berber */ {HB_TAG('t','u','a',' '), HB_TAG_NONE }, /* Wiarumus != Turoyo Aramaic */ - {HB_TAG('t','u','l',' '), HB_TAG_NONE }, /* Tula != Tumbuka */ -/*{HB_TAG('t','u','m',' '), HB_TAG('T','U','M',' ')},*/ /* Tumbuka -> Tulu */ + {HB_TAG('t','u','l',' '), HB_TAG_NONE }, /* Tula != Tulu */ +/*{HB_TAG('t','u','m',' '), HB_TAG('T','U','M',' ')},*/ /* Tumbuka */ {HB_TAG('t','u','u',' '), HB_TAG('A','T','H',' ')}, /* Tututni -> Athapaskan */ {HB_TAG('t','u','v',' '), HB_TAG_NONE }, /* Turkana != Tuvin */ {HB_TAG('t','u','y',' '), HB_TAG('K','A','L',' ')}, /* Tugen -> Kalenjin */ @@ -1581,6 +1582,7 @@ {HB_TAG('y','b','a',' '), HB_TAG_NONE }, /* Yala != Yoruba */ {HB_TAG('y','b','b',' '), HB_TAG('B','M','L',' ')}, /* Yemba -> Bamileke */ {HB_TAG('y','b','d',' '), HB_TAG('A','R','K',' ')}, /* Yangbye (retired code) -> Rakhine */ + {HB_TAG('y','c','r',' '), HB_TAG_NONE }, /* Yilan Creole != Y-Cree */ {HB_TAG('y','d','d',' '), HB_TAG('J','I','I',' ')}, /* Eastern Yiddish -> Yiddish */ /*{HB_TAG('y','g','p',' '), HB_TAG('Y','G','P',' ')},*/ /* Gepo */ {HB_TAG('y','i','h',' '), HB_TAG('J','I','I',' ')}, /* Western Yiddish -> Yiddish */ @@ -1602,6 +1604,7 @@ {HB_TAG('z','g','n',' '), HB_TAG('Z','H','A',' ')}, /* Guibian Zhuang -> Zhuang */ {HB_TAG('z','h','d',' '), HB_TAG('Z','H','A',' ')}, /* Dai Zhuang -> Zhuang */ {HB_TAG('z','h','n',' '), HB_TAG('Z','H','A',' ')}, /* Nong Zhuang -> Zhuang */ + {HB_TAG('z','k','b',' '), HB_TAG('K','H','A',' ')}, /* Koibal (retired code) -> Khakass */ {HB_TAG('z','l','j',' '), HB_TAG('Z','H','A',' ')}, /* Liujiang Zhuang -> Zhuang */ {HB_TAG('z','l','m',' '), HB_TAG('M','L','Y',' ')}, /* Malay */ {HB_TAG('z','l','n',' '), HB_TAG('Z','H','A',' ')}, /* Lianshan Zhuang -> Zhuang */ diff -Nru harfbuzz-8.0.1/src/hb-ot-var-avar-table.hh harfbuzz-8.3.0/src/hb-ot-var-avar-table.hh --- harfbuzz-8.0.1/src/hb-ot-var-avar-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-var-avar-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -72,6 +72,65 @@ return_trace (c->check_struct (this)); } + void set_mapping (float from_coord, float to_coord) + { + coords[0].set_float (from_coord); + coords[1].set_float (to_coord); + } + + bool is_outside_axis_range (const Triple& axis_range) const + { + float from_coord = coords[0].to_float (); + return !axis_range.contains (from_coord); + } + + bool must_include () const + { + float from_coord = coords[0].to_float (); + float to_coord = coords[1].to_float (); + return (from_coord == -1.f && to_coord == -1.f) || + (from_coord == 0.f && to_coord == 0.f) || + (from_coord == 1.f && to_coord == 1.f); + } + + void instantiate (const Triple& axis_range, + const Triple& unmapped_range, + const TripleDistances& triple_distances) + { + float from_coord = coords[0].to_float (); + float to_coord = coords[1].to_float (); + + from_coord = renormalizeValue (from_coord, unmapped_range, triple_distances); + to_coord = renormalizeValue (to_coord, axis_range, triple_distances); + + coords[0].set_float (from_coord); + coords[1].set_float (to_coord); + } + + HB_INTERNAL static int cmp (const void *pa, const void *pb) + { + const AxisValueMap *a = (const AxisValueMap *) pa; + const AxisValueMap *b = (const AxisValueMap *) pb; + + int a_from = a->coords[0].to_int (); + int b_from = b->coords[0].to_int (); + if (a_from != b_from) + return a_from - b_from; + + /* this should never be reached. according to the spec, all of the axis + * value map records for a given axis must have different fromCoord values + * */ + int a_to = a->coords[1].to_int (); + int b_to = b->coords[1].to_int (); + return a_to - b_to; + } + + bool serialize (hb_serialize_context_t *c) const + { + TRACE_SERIALIZE (this); + return_trace (c->embed (this)); + } + public: F2DOT14 coords[2]; // F2DOT14 fromCoord; /* A normalized coordinate value obtained using @@ -122,6 +181,78 @@ int unmap (int value) const { return map (value, 1, 0); } + Triple unmap_axis_range (const Triple& axis_range) const + { + F2DOT14 val, unmapped_val; + + val.set_float (axis_range.minimum); + unmapped_val.set_int (unmap (val.to_int ())); + float unmapped_min = unmapped_val.to_float (); + + val.set_float (axis_range.middle); + unmapped_val.set_int (unmap (val.to_int ())); + float unmapped_middle = unmapped_val.to_float (); + + val.set_float (axis_range.maximum); + unmapped_val.set_int (unmap (val.to_int ())); + float unmapped_max = unmapped_val.to_float (); + + return Triple{unmapped_min, unmapped_middle, unmapped_max}; + } + + bool subset (hb_subset_context_t *c, hb_tag_t axis_tag) const + { + TRACE_SUBSET (this); + /* avar mapped normalized axis range*/ + Triple *axis_range; + if (!c->plan->axes_location.has (axis_tag, &axis_range)) + return c->serializer->embed (*this); + + TripleDistances *axis_triple_distances; + if (!c->plan->axes_triple_distances.has (axis_tag, &axis_triple_distances)) + return_trace (false); + + auto *out = c->serializer->start_embed (this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + + Triple unmapped_range = unmap_axis_range (*axis_range); + + /* create a vector of retained mappings and sort */ + hb_vector_t value_mappings; + for (const auto& _ : as_array ()) + { + if (_.is_outside_axis_range (unmapped_range)) + continue; + AxisValueMap mapping; + mapping = _; + mapping.instantiate (*axis_range, unmapped_range, *axis_triple_distances); + /* (-1, -1), (0, 0), (1, 1) mappings will be added later, so avoid + * duplicates here */ + if (mapping.must_include ()) + continue; + value_mappings.push (std::move (mapping)); + } + + AxisValueMap m; + m.set_mapping (-1.f, -1.f); + value_mappings.push (m); + + m.set_mapping (0.f, 0.f); + value_mappings.push (m); + + m.set_mapping (1.f, 1.f); + value_mappings.push (m); + + value_mappings.qsort (); + + for (const auto& _ : value_mappings) + { + if (!_.serialize (c->serializer)) + return_trace (false); + } + return_trace (c->serializer->check_assign (out->len, value_mappings.length, HB_SERIALIZE_ERROR_INT_OVERFLOW)); + } + public: DEFINE_SIZE_ARRAY (2, *this); }; @@ -142,6 +273,7 @@ { TRACE_SANITIZE (this); if (!(version.sanitize (c) && + hb_barrier () && (version.major == 1 #ifndef HB_NO_AVAR2 || version.major == 2 @@ -162,6 +294,7 @@ #ifndef HB_NO_AVAR2 if (version.major < 2) return_trace (true); + hb_barrier (); const auto &v2 = * (const avarV2Tail *) map; if (unlikely (!v2.sanitize (c, this))) @@ -185,6 +318,7 @@ #ifndef HB_NO_AVAR2 if (version.major < 2) return; + hb_barrier (); for (; count < axisCount; count++) map = &StructAfter (*map); @@ -225,6 +359,39 @@ } } + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + unsigned retained_axis_count = c->plan->axes_index_map.get_population (); + if (!retained_axis_count) //all axes are pinned/dropped + return_trace (false); + + avar *out = c->serializer->allocate_min (); + if (unlikely (!out)) return_trace (false); + + out->version.major = 1; + out->version.minor = 0; + if (!c->serializer->check_assign (out->axisCount, retained_axis_count, HB_SERIALIZE_ERROR_INT_OVERFLOW)) + return_trace (false); + + const hb_map_t& axes_index_map = c->plan->axes_index_map; + const SegmentMaps *map = &firstAxisSegmentMaps; + unsigned count = axisCount; + for (unsigned int i = 0; i < count; i++) + { + if (axes_index_map.has (i)) + { + hb_tag_t *axis_tag; + if (!c->plan->axes_old_index_tag_map.has (i, &axis_tag)) + return_trace (false); + if (!map->subset (c, *axis_tag)) + return_trace (false); + } + map = &StructAfter (*map); + } + return_trace (true); + } + protected: FixedVersion<>version; /* Version of the avar table * initially set to 0x00010000u */ diff -Nru harfbuzz-8.0.1/src/hb-ot-var-common.hh harfbuzz-8.3.0/src/hb-ot-var-common.hh --- harfbuzz-8.0.1/src/hb-ot-var-common.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-var-common.hh 2023-11-11 14:08:45.000000000 +0000 @@ -27,6 +27,7 @@ #define HB_OT_VAR_COMMON_HH #include "hb-ot-layout-common.hh" +#include "hb-priority-queue.hh" namespace OT { @@ -118,6 +119,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && c->check_range (mapDataZ.arrayZ, mapCount, get_width ())); @@ -190,6 +192,7 @@ { TRACE_SANITIZE (this); if (!u.format.sanitize (c)) return_trace (false); + hb_barrier (); switch (u.format) { case 0: return_trace (u.format0.sanitize (c)); case 1: return_trace (u.format1.sanitize (c)); @@ -230,7 +233,7 @@ /* according to the spec, if colr table has varStore but does not have * varIdxMap, then an implicit identity mapping is used */ float operator() (uint32_t varIdx, unsigned short offset = 0) const - { return varStore->get_delta (varIdxMap ? varIdxMap->map (VarIdx::add (varIdx, offset)) : varIdx + offset, coords); } + { return coords ? varStore->get_delta (varIdxMap ? varIdxMap->map (VarIdx::add (varIdx, offset)) : varIdx + offset, coords) : 0; } const VariationStore *varStore; const DeltaSetIndexMap *varIdxMap; @@ -424,25 +427,6 @@ DEFINE_SIZE_MIN (4); }; -/* not using hb_bytes_t: avoid potential build issues with some compilers */ -struct byte_data_t -{ - hb_bytes_t bytes; - - byte_data_t () = default; - byte_data_t (const char *p_, unsigned len_) : bytes (hb_bytes_t (p_, len_)) {} - - void fini () { bytes.fini (); } - - bool operator == (const byte_data_t& o) const - { return bytes.arrayZ == o.bytes.arrayZ && bytes.length == o.bytes.length; } - - explicit operator bool () const { return bytes.length; } - - void copy (hb_serialize_context_t *c) const - { c->embed (bytes.arrayZ, bytes.length); } -}; - enum packed_delta_flag_t { DELTAS_ARE_ZERO = 0x80, @@ -452,6 +436,8 @@ struct tuple_delta_t { + static constexpr bool realloc_move = true; // Watch out when adding new members! + public: hb_hashmap_t axis_tuples; @@ -468,17 +454,26 @@ hb_vector_t compiled_tuple_header; hb_vector_t compiled_deltas; + /* compiled peak coords, empty for non-gvar tuples */ + hb_vector_t compiled_peak_coords; + tuple_delta_t () = default; tuple_delta_t (const tuple_delta_t& o) = default; - tuple_delta_t (tuple_delta_t&& o) : tuple_delta_t () + friend void swap (tuple_delta_t& a, tuple_delta_t& b) { - axis_tuples = std::move (o.axis_tuples); - indices = std::move (o.indices); - deltas_x = std::move (o.deltas_x); - deltas_y = std::move (o.deltas_y); + hb_swap (a.axis_tuples, b.axis_tuples); + hb_swap (a.indices, b.indices); + hb_swap (a.deltas_x, b.deltas_x); + hb_swap (a.deltas_y, b.deltas_y); + hb_swap (a.compiled_tuple_header, b.compiled_tuple_header); + hb_swap (a.compiled_deltas, b.compiled_deltas); + hb_swap (a.compiled_peak_coords, b.compiled_peak_coords); } + tuple_delta_t (tuple_delta_t&& o) : tuple_delta_t () + { hb_swap (*this, o); } + tuple_delta_t& operator = (tuple_delta_t&& o) { hb_swap (*this, o); @@ -508,6 +503,7 @@ else { if (!o.indices.arrayZ[i]) continue; + indices.arrayZ[i] = true; deltas_x[i] = o.deltas_x[i]; if (deltas_y && o.deltas_y) deltas_y[i] = o.deltas_y[i]; @@ -522,18 +518,24 @@ return *this; unsigned num = indices.length; - for (unsigned i = 0; i < num; i++) - { - if (!indices.arrayZ[i]) continue; - - deltas_x[i] *= scalar; - if (deltas_y) - deltas_y[i] *= scalar; - } + if (deltas_y) + for (unsigned i = 0; i < num; i++) + { + if (!indices.arrayZ[i]) continue; + deltas_x[i] *= scalar; + deltas_y[i] *= scalar; + } + else + for (unsigned i = 0; i < num; i++) + { + if (!indices.arrayZ[i]) continue; + deltas_x[i] *= scalar; + } return *this; } - hb_vector_t change_tuple_var_axis_limit (hb_tag_t axis_tag, Triple axis_limit) const + hb_vector_t change_tuple_var_axis_limit (hb_tag_t axis_tag, Triple axis_limit, + TripleDistances axis_triple_distances) const { hb_vector_t out; Triple *tent; @@ -553,7 +555,7 @@ return out; } - result_t solutions = rebase_tent (*tent, axis_limit); + result_t solutions = rebase_tent (*tent, axis_limit, axis_triple_distances); for (auto t : solutions) { tuple_delta_t new_var = *this; @@ -569,13 +571,43 @@ return out; } + bool compile_peak_coords (const hb_map_t& axes_index_map, + const hb_map_t& axes_old_index_tag_map) + { + unsigned axis_count = axes_index_map.get_population (); + if (unlikely (!compiled_peak_coords.alloc (axis_count * F2DOT14::static_size))) + return false; + + unsigned orig_axis_count = axes_old_index_tag_map.get_population (); + for (unsigned i = 0; i < orig_axis_count; i++) + { + if (!axes_index_map.has (i)) + continue; + + hb_tag_t axis_tag = axes_old_index_tag_map.get (i); + Triple *coords; + F2DOT14 peak_coord; + if (axis_tuples.has (axis_tag, &coords)) + peak_coord.set_float (coords->middle); + else + peak_coord.set_int (0); + + /* push F2DOT14 value into char vector */ + int16_t val = peak_coord.to_int (); + compiled_peak_coords.push (static_cast (val >> 8)); + compiled_peak_coords.push (static_cast (val & 0xFF)); + } + + return !compiled_peak_coords.in_error (); + } + /* deltas should be compiled already before we compile tuple * variation header cause we need to fill in the size of the * serialized data for this tuple variation */ - //TODO(qxliu):add option to use sharedTuples in gvar bool compile_tuple_var_header (const hb_map_t& axes_index_map, unsigned points_data_length, - const hb_map_t& axes_old_index_tag_map) + const hb_map_t& axes_old_index_tag_map, + const hb_hashmap_t*, unsigned>* shared_tuples_idx_map) { if (!compiled_deltas) return false; @@ -591,14 +623,25 @@ hb_array_t coords (p, end - p); /* encode peak coords */ - unsigned peak_count = encode_peak_coords(coords, flag, axes_index_map, axes_old_index_tag_map); - if (!peak_count) return false; + unsigned peak_count = 0; + unsigned *shared_tuple_idx; + if (shared_tuples_idx_map && + shared_tuples_idx_map->has (&compiled_peak_coords, &shared_tuple_idx)) + { + flag = *shared_tuple_idx; + } + else + { + peak_count = encode_peak_coords(coords, flag, axes_index_map, axes_old_index_tag_map); + if (!peak_count) return false; + } /* encode interim coords, it's optional so returned num could be 0 */ unsigned interim_count = encode_interm_coords (coords.sub_array (peak_count), flag, axes_index_map, axes_old_index_tag_map); - //TODO(qxliu): add option to use shared_points in gvar - flag |= TupleVariationHeader::TuppleIndex::PrivatePointNumbers; + /* pointdata length = 0 implies "use shared points" */ + if (points_data_length) + flag |= TupleVariationHeader::TuppleIndex::PrivatePointNumbers; unsigned serialized_data_size = points_data_length + compiled_deltas.length; TupleVariationHeader *o = reinterpret_cast (compiled_tuple_header.begin ()); @@ -718,6 +761,8 @@ } if (j != rounded_deltas.length) return false; + /* reset i because we reuse rounded_deltas for deltas_y */ + i = 0; encoded_len += encode_delta_run (i, compiled_deltas.as_array ().sub_array (encoded_len), rounded_deltas); } return compiled_deltas.resize (encoded_len); @@ -731,7 +776,7 @@ unsigned encoded_len = 0; while (i < num_deltas) { - int val = deltas[i]; + int val = deltas.arrayZ[i]; if (val == 0) encoded_len += encode_delta_run_as_zeroes (i, encoded_bytes.sub_array (encoded_len), deltas); else if (val >= -128 && val <= 127) @@ -750,7 +795,7 @@ unsigned run_length = 0; auto it = encoded_bytes.iter (); unsigned encoded_len = 0; - while (i < num_deltas && deltas[i] == 0) + while (i < num_deltas && deltas.arrayZ[i] == 0) { i++; run_length++; @@ -779,13 +824,13 @@ unsigned num_deltas = deltas.length; while (i < num_deltas) { - int val = deltas[i]; + int val = deltas.arrayZ[i]; if (val > 127 || val < -128) break; /* from fonttools: if there're 2 or more zeros in a sequence, * it is better to start a new run to save bytes. */ - if (val == 0 && i + 1 < num_deltas && deltas[i+1] == 0) + if (val == 0 && i + 1 < num_deltas && deltas.arrayZ[i+1] == 0) break; i++; @@ -802,7 +847,7 @@ for (unsigned j = 0; j < 64; j++) { - *it++ = static_cast (deltas[start + j]); + *it++ = static_cast (deltas.arrayZ[start + j]); encoded_len++; } @@ -817,7 +862,7 @@ while (start < i) { - *it++ = static_cast (deltas[start++]); + *it++ = static_cast (deltas.arrayZ[start++]); encoded_len++; } } @@ -833,8 +878,8 @@ unsigned num_deltas = deltas.length; while (i < num_deltas) { - int val = deltas[i]; - + int val = deltas.arrayZ[i]; + /* start a new run for a single zero value*/ if (val == 0) break; @@ -843,7 +888,7 @@ * Only start a new run when there're 2 continuous such values. */ if (val >= -128 && val <= 127 && i + 1 < num_deltas && - deltas[i+1] >= -128 && deltas[i+1] <= 127) + deltas.arrayZ[i+1] >= -128 && deltas.arrayZ[i+1] <= 127) break; i++; @@ -859,7 +904,7 @@ for (unsigned j = 0; j < 64; j++) { - int16_t delta_val = deltas[start + j]; + int16_t delta_val = deltas.arrayZ[start + j]; *it++ = static_cast (delta_val >> 8); *it++ = static_cast (delta_val & 0xFF); @@ -873,9 +918,10 @@ if (run_length) { *it++ = (DELTAS_ARE_WORDS | (run_length - 1)); + encoded_len++; while (start < i) { - int16_t delta_val = deltas[start++]; + int16_t delta_val = deltas.arrayZ[start++]; *it++ = static_cast (delta_val >> 8); *it++ = static_cast (delta_val & 0xFF); @@ -884,6 +930,111 @@ } return encoded_len; } + + bool calc_inferred_deltas (const contour_point_vector_t& orig_points) + { + unsigned point_count = orig_points.length; + if (point_count != indices.length) + return false; + + unsigned ref_count = 0; + hb_vector_t end_points; + + for (unsigned i = 0; i < point_count; i++) + { + if (indices.arrayZ[i]) + ref_count++; + if (orig_points.arrayZ[i].is_end_point) + end_points.push (i); + } + /* all points are referenced, nothing to do */ + if (ref_count == point_count) + return true; + if (unlikely (end_points.in_error ())) return false; + + hb_set_t inferred_idxes; + unsigned start_point = 0; + for (unsigned end_point : end_points) + { + /* Check the number of unreferenced points in a contour. If no unref points or no ref points, nothing to do. */ + unsigned unref_count = 0; + for (unsigned i = start_point; i < end_point + 1; i++) + unref_count += indices.arrayZ[i]; + unref_count = (end_point - start_point + 1) - unref_count; + + unsigned j = start_point; + if (unref_count == 0 || unref_count > end_point - start_point) + goto no_more_gaps; + for (;;) + { + /* Locate the next gap of unreferenced points between two referenced points prev and next. + * Note that a gap may wrap around at left (start_point) and/or at right (end_point). + */ + unsigned int prev, next, i; + for (;;) + { + i = j; + j = next_index (i, start_point, end_point); + if (indices.arrayZ[i] && !indices.arrayZ[j]) break; + } + prev = j = i; + for (;;) + { + i = j; + j = next_index (i, start_point, end_point); + if (!indices.arrayZ[i] && indices.arrayZ[j]) break; + } + next = j; + /* Infer deltas for all unref points in the gap between prev and next */ + i = prev; + for (;;) + { + i = next_index (i, start_point, end_point); + if (i == next) break; + deltas_x.arrayZ[i] = infer_delta (orig_points.arrayZ[i].x, orig_points.arrayZ[prev].x, orig_points.arrayZ[next].x, + deltas_x.arrayZ[prev], deltas_x.arrayZ[next]); + deltas_y.arrayZ[i] = infer_delta (orig_points.arrayZ[i].y, orig_points.arrayZ[prev].y, orig_points.arrayZ[next].y, + deltas_y.arrayZ[prev], deltas_y.arrayZ[next]); + inferred_idxes.add (i); + if (--unref_count == 0) goto no_more_gaps; + } + } + no_more_gaps: + start_point = end_point + 1; + } + + for (unsigned i = 0; i < point_count; i++) + { + /* if points are not referenced and deltas are not inferred, set to 0. + * reference all points for gvar */ + if ( !indices[i]) + { + if (!inferred_idxes.has (i)) + { + deltas_x.arrayZ[i] = 0.f; + deltas_y.arrayZ[i] = 0.f; + } + indices[i] = true; + } + } + return true; + } + + static float infer_delta (float target_val, float prev_val, float next_val, float prev_delta, float next_delta) + { + if (prev_val == next_val) + return (prev_delta == next_delta) ? prev_delta : 0.f; + else if (target_val <= hb_min (prev_val, next_val)) + return (prev_val < next_val) ? prev_delta : next_delta; + else if (target_val >= hb_max (prev_val, next_val)) + return (prev_val > next_val) ? prev_delta : next_delta; + + float r = (target_val - prev_val) / (next_val - prev_val); + return prev_delta + r * (next_delta - prev_delta); + } + + static unsigned int next_index (unsigned int i, unsigned int start, unsigned int end) + { return (i >= end) ? start : (i + 1); } }; struct TupleVariationData @@ -920,11 +1071,26 @@ private: /* referenced point set->compiled point data map */ - hb_hashmap_t*, byte_data_t> point_data_map; + hb_hashmap_t*, hb_bytes_t> point_data_map; /* referenced point set-> count map, used in finding shared points */ hb_hashmap_t*, unsigned> point_set_count_map; + /* empty for non-gvar tuples. + * shared_points_bytes is just a copy of some value in the point_data_map, + * which will be freed during map destruction. Save it for serialization, so + * no need to do find_shared_points () again */ + hb_bytes_t shared_points_bytes; + + /* total compiled byte size as TupleVariationData format, initialized to its + * min_size: 4 */ + unsigned compiled_byte_size = 4; + public: + tuple_variations_t () = default; + tuple_variations_t (const tuple_variations_t&) = delete; + tuple_variations_t& operator=(const tuple_variations_t&) = delete; + tuple_variations_t (tuple_variations_t&&) = default; + tuple_variations_t& operator=(tuple_variations_t&&) = default; ~tuple_variations_t () { fini (); } void fini () { @@ -935,8 +1101,17 @@ tuple_vars.fini (); } + explicit operator bool () const { return bool (tuple_vars); } unsigned get_var_count () const - { return tuple_vars.length; } + { + unsigned count = tuple_vars.length; + if (shared_points_bytes.length) + count |= TupleVarCount::SharedPointNumbers; + return count; + } + + unsigned get_compiled_byte_size () const + { return compiled_byte_size; } bool create_from_tuple_var_data (tuple_iterator_t iterator, unsigned tuple_var_count, @@ -1006,21 +1181,87 @@ return true; } - void change_tuple_variations_axis_limits (const hb_hashmap_t *normalized_axes_location) + bool create_from_item_var_data (const VarData &var_data, + const hb_vector_t>& regions, + const hb_map_t& axes_old_index_tag_map, + unsigned& item_count, + const hb_inc_bimap_t* inner_map = nullptr) + { + /* NULL offset, to keep original varidx valid, just return */ + if (&var_data == &Null (VarData)) + return true; + + unsigned num_regions = var_data.get_region_index_count (); + if (!tuple_vars.alloc (num_regions)) return false; + + item_count = inner_map ? inner_map->get_population () : var_data.get_item_count (); + if (!item_count) return true; + unsigned row_size = var_data.get_row_size (); + const HBUINT8 *delta_bytes = var_data.get_delta_bytes (); + + for (unsigned r = 0; r < num_regions; r++) + { + /* In VarData, deltas are organized in rows, convert them into + * column(region) based tuples, resize deltas_x first */ + tuple_delta_t tuple; + if (!tuple.deltas_x.resize (item_count, false) || + !tuple.indices.resize (item_count, false)) + return false; + + for (unsigned i = 0; i < item_count; i++) + { + tuple.indices.arrayZ[i] = true; + tuple.deltas_x.arrayZ[i] = var_data.get_item_delta_fast (inner_map ? inner_map->backward (i) : i, + r, delta_bytes, row_size); + } + + unsigned region_index = var_data.get_region_index (r); + if (region_index >= regions.length) return false; + tuple.axis_tuples = regions.arrayZ[region_index]; + + tuple_vars.push (std::move (tuple)); + } + return !tuple_vars.in_error (); + } + + private: + static int _cmp_axis_tag (const void *pa, const void *pb) + { + const hb_tag_t *a = (const hb_tag_t*) pa; + const hb_tag_t *b = (const hb_tag_t*) pb; + return (int)(*a) - (int)(*b); + } + + bool change_tuple_variations_axis_limits (const hb_hashmap_t& normalized_axes_location, + const hb_hashmap_t& axes_triple_distances) { - for (auto _ : *normalized_axes_location) + /* sort axis_tag/axis_limits, make result deterministic */ + hb_vector_t axis_tags; + if (!axis_tags.alloc (normalized_axes_location.get_population ())) + return false; + for (auto t : normalized_axes_location.keys ()) + axis_tags.push (t); + + axis_tags.qsort (_cmp_axis_tag); + for (auto axis_tag : axis_tags) { - hb_tag_t axis_tag = _.first; - Triple axis_limit = _.second; + Triple *axis_limit; + if (!normalized_axes_location.has (axis_tag, &axis_limit)) + return false; + TripleDistances axis_triple_distances{1.f, 1.f}; + if (axes_triple_distances.has (axis_tag)) + axis_triple_distances = axes_triple_distances.get (axis_tag); + hb_vector_t new_vars; for (const tuple_delta_t& var : tuple_vars) { - hb_vector_t out = var.change_tuple_var_axis_limit (axis_tag, axis_limit); + hb_vector_t out = var.change_tuple_var_axis_limit (axis_tag, *axis_limit, axis_triple_distances); if (!out) continue; + unsigned new_len = new_vars.length + out.length; if (unlikely (!new_vars.alloc (new_len, false))) - { fini (); return;} + { fini (); return false;} for (unsigned i = 0; i < out.length; i++) new_vars.push (std::move (out[i])); @@ -1028,13 +1269,14 @@ tuple_vars.fini (); tuple_vars = std::move (new_vars); } + return true; } /* merge tuple variations with overlapping tents */ void merge_tuple_variations () { hb_vector_t new_vars; - hb_hashmap_t, unsigned> m; + hb_hashmap_t*, unsigned> m; unsigned i = 0; for (const tuple_delta_t& var : tuple_vars) { @@ -1042,14 +1284,14 @@ if (var.axis_tuples.is_empty ()) continue; unsigned *idx; - if (m.has (var.axis_tuples, &idx)) + if (m.has (&(var.axis_tuples), &idx)) { new_vars[*idx] += var; } else { new_vars.push (var); - m.set (var.axis_tuples, i); + m.set (&(var.axis_tuples), i); i++; } } @@ -1057,7 +1299,7 @@ tuple_vars = std::move (new_vars); } - byte_data_t compile_point_set (const hb_vector_t &point_indices) + hb_bytes_t compile_point_set (const hb_vector_t &point_indices) { unsigned num_points = 0; for (bool i : point_indices) @@ -1069,15 +1311,15 @@ if (num_points == indices_length) { char *p = (char *) hb_calloc (1, sizeof (char)); - if (unlikely (!p)) return byte_data_t (); + if (unlikely (!p)) return hb_bytes_t (); - return byte_data_t (p, 1); + return hb_bytes_t (p, 1); } /* allocate enough memories: 2 bytes for count + 3 bytes for each point */ unsigned num_bytes = 2 + 3 *num_points; char *p = (char *) hb_calloc (num_bytes, sizeof (char)); - if (unlikely (!p)) return byte_data_t (); + if (unlikely (!p)) return hb_bytes_t (); unsigned pos = 0; /* binary data starts with the total number of reference points */ @@ -1140,10 +1382,10 @@ else p[header_pos] = (run_length - 1) | 0x80; } - return byte_data_t (p, pos); + return hb_bytes_t (p, pos); } - /* compile all point set and store byte data in a point_set->byte_data_t hashmap, + /* compile all point set and store byte data in a point_set->hb_bytes_t hashmap, * also update point_set->count map, which will be used in finding shared * point set*/ bool compile_all_point_sets () @@ -1160,8 +1402,8 @@ continue; } - byte_data_t compiled_data = compile_point_set (*points_set); - if (unlikely (compiled_data == byte_data_t ())) + hb_bytes_t compiled_data = compile_point_set (*points_set); + if (unlikely (compiled_data == hb_bytes_t ())) return false; if (!point_data_map.set (points_set, compiled_data) || @@ -1172,19 +1414,19 @@ } /* find shared points set which saves most bytes */ - byte_data_t find_shared_points () + hb_bytes_t find_shared_points () { unsigned max_saved_bytes = 0; - byte_data_t res{}; + hb_bytes_t res{}; for (const auto& _ : point_data_map.iter ()) { const hb_vector_t* points_set = _.first; - unsigned data_length = _.second.bytes.length; + unsigned data_length = _.second.length; unsigned *count; if (unlikely (!point_set_count_map.has (points_set, &count) || *count <= 1)) - return byte_data_t (); + return hb_bytes_t (); unsigned saved_bytes = data_length * ((*count) -1); if (saved_bytes > max_saved_bytes) @@ -1196,31 +1438,62 @@ return res; } - void instantiate (const hb_hashmap_t& normalized_axes_location) + bool calc_inferred_deltas (contour_point_vector_t& contour_points) { - change_tuple_variations_axis_limits (&normalized_axes_location); + for (tuple_delta_t& var : tuple_vars) + if (!var.calc_inferred_deltas (contour_points)) + return false; + + return true; + } + + public: + bool instantiate (const hb_hashmap_t& normalized_axes_location, + const hb_hashmap_t& axes_triple_distances, + contour_point_vector_t* contour_points = nullptr) + { + if (!tuple_vars) return true; + if (!change_tuple_variations_axis_limits (normalized_axes_location, axes_triple_distances)) + return false; + /* compute inferred deltas only for gvar */ + if (contour_points) + if (!calc_inferred_deltas (*contour_points)) + return false; + merge_tuple_variations (); + return !tuple_vars.in_error (); } bool compile_bytes (const hb_map_t& axes_index_map, - const hb_map_t& axes_old_index_tag_map) + const hb_map_t& axes_old_index_tag_map, + bool use_shared_points, + const hb_hashmap_t*, unsigned>* shared_tuples_idx_map = nullptr) { // compile points set and store data in hashmap if (!compile_all_point_sets ()) return false; + + if (use_shared_points) + { + shared_points_bytes = find_shared_points (); + compiled_byte_size += shared_points_bytes.length; + } // compile delta and tuple var header for each tuple variation for (auto& tuple: tuple_vars) { const hb_vector_t* points_set = &(tuple.indices); - byte_data_t *points_data; + hb_bytes_t *points_data; if (unlikely (!point_data_map.has (points_set, &points_data))) return false; if (!tuple.compile_deltas ()) return false; - if (!tuple.compile_tuple_var_header (axes_index_map, points_data->bytes.length, axes_old_index_tag_map)) + unsigned points_data_length = (*points_data != shared_points_bytes) ? points_data->length : 0; + if (!tuple.compile_tuple_var_header (axes_index_map, points_data_length, axes_old_index_tag_map, + shared_tuples_idx_map)) return false; + compiled_byte_size += tuple.compiled_tuple_header.length + points_data_length + tuple.compiled_deltas.length; } return true; } @@ -1230,29 +1503,40 @@ TRACE_SERIALIZE (this); for (const auto& tuple: tuple_vars) { - byte_data_t compiled_bytes {tuple.compiled_tuple_header.arrayZ, tuple.compiled_tuple_header.length}; - compiled_bytes.copy (c); + tuple.compiled_tuple_header.as_array ().copy (c); if (c->in_error ()) return_trace (false); total_header_len += tuple.compiled_tuple_header.length; } return_trace (true); } - bool serialize_var_data (hb_serialize_context_t *c) const + bool serialize_var_data (hb_serialize_context_t *c, bool is_gvar) const { TRACE_SERIALIZE (this); + if (is_gvar) + shared_points_bytes.copy (c); + for (const auto& tuple: tuple_vars) { const hb_vector_t* points_set = &(tuple.indices); - byte_data_t *point_data; + hb_bytes_t *point_data; if (!point_data_map.has (points_set, &point_data)) return_trace (false); - point_data->copy (c); - byte_data_t compiled_bytes {tuple.compiled_deltas.arrayZ, tuple.compiled_deltas.length}; - compiled_bytes.copy (c); + if (!is_gvar || *point_data != shared_points_bytes) + point_data->copy (c); + + tuple.compiled_deltas.as_array ().copy (c); if (c->in_error ()) return_trace (false); } + + /* padding for gvar */ + if (is_gvar && (compiled_byte_size % 2)) + { + HBUINT8 pad; + pad = 0; + if (!c->embed (pad)) return_trace (false); + } return_trace (true); } }; @@ -1438,9 +1722,12 @@ bool serialize (hb_serialize_context_t *c, bool is_gvar, - tuple_variations_t& tuple_variations) const + const tuple_variations_t& tuple_variations) const { TRACE_SERIALIZE (this); + /* empty tuple variations, just return and skip serialization. */ + if (!tuple_variations) return_trace (true); + auto *out = c->start_embed (this); if (unlikely (!c->extend_min (out))) return_trace (false); @@ -1456,15 +1743,17 @@ if (!is_gvar) data_offset += 4; if (!c->check_assign (out->data, data_offset, HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false); - return tuple_variations.serialize_var_data (c); + return tuple_variations.serialize_var_data (c, is_gvar); } protected: struct TupleVarCount : HBUINT16 { + friend struct tuple_variations_t; bool has_shared_point_numbers () const { return ((*this) & SharedPointNumbers); } unsigned int get_count () const { return (*this) & CountMask; } TupleVarCount& operator = (uint16_t i) { HBUINT16::operator= (i); return *this; } + explicit operator bool () const { return get_count (); } protected: enum Flags @@ -1488,6 +1777,471 @@ DEFINE_SIZE_MIN (4); }; +using tuple_variations_t = TupleVariationData::tuple_variations_t; +struct item_variations_t +{ + using region_t = const hb_hashmap_t*; + private: + /* each subtable is decompiled into a tuple_variations_t, in which all tuples + * have the same num of deltas (rows) */ + hb_vector_t vars; + + /* num of retained rows for each subtable, there're 2 cases when var_data is empty: + * 1. retained item_count is zero + * 2. regions is empty and item_count is non-zero. + * when converting to tuples, both will be dropped because the tuple is empty, + * however, we need to retain 2. as all-zero rows to keep original varidx + * valid, so we need a way to remember the num of rows for each subtable */ + hb_vector_t var_data_num_rows; + + /* original region list, decompiled from item varstore, used when rebuilding + * region list after instantiation */ + hb_vector_t> orig_region_list; + + /* region list: vector of Regions, maintain the original order for the regions + * that existed before instantiate (), append the new regions at the end. + * Regions are stored in each tuple already, save pointers only. + * When converting back to item varstore, unused regions will be pruned */ + hb_vector_t region_list; + + /* region -> idx map after instantiation and pruning unused regions */ + hb_hashmap_t region_map; + + /* all delta rows after instantiation */ + hb_vector_t> delta_rows; + /* final optimized vector of encoding objects used to assemble the varstore */ + hb_vector_t encodings; + + /* old varidxes -> new var_idxes map */ + hb_map_t varidx_map; + + /* has long words */ + bool has_long = false; + + public: + bool has_long_word () const + { return has_long; } + + const hb_vector_t& get_region_list () const + { return region_list; } + + const hb_vector_t& get_vardata_encodings () const + { return encodings; } + + const hb_map_t& get_varidx_map () const + { return varidx_map; } + + bool instantiate (const VariationStore& varStore, + const hb_subset_plan_t *plan, + bool optimize=true, + bool use_no_variation_idx=true, + const hb_array_t inner_maps = hb_array_t ()) + { + if (!create_from_item_varstore (varStore, plan->axes_old_index_tag_map, inner_maps)) + return false; + if (!instantiate_tuple_vars (plan->axes_location, plan->axes_triple_distances)) + return false; + return as_item_varstore (optimize, use_no_variation_idx); + } + + /* keep below APIs public only for unit test: test-item-varstore */ + bool create_from_item_varstore (const VariationStore& varStore, + const hb_map_t& axes_old_index_tag_map, + const hb_array_t inner_maps = hb_array_t ()) + { + const VarRegionList& regionList = varStore.get_region_list (); + if (!regionList.get_var_regions (axes_old_index_tag_map, orig_region_list)) + return false; + + unsigned num_var_data = varStore.get_sub_table_count (); + if (inner_maps && inner_maps.length != num_var_data) return false; + if (!vars.alloc (num_var_data) || + !var_data_num_rows.alloc (num_var_data)) return false; + + for (unsigned i = 0; i < num_var_data; i++) + { + if (inner_maps && !inner_maps.arrayZ[i].get_population ()) + continue; + tuple_variations_t var_data_tuples; + unsigned item_count = 0; + if (!var_data_tuples.create_from_item_var_data (varStore.get_sub_table (i), + orig_region_list, + axes_old_index_tag_map, + item_count, + inner_maps ? &(inner_maps.arrayZ[i]) : nullptr)) + return false; + + var_data_num_rows.push (item_count); + vars.push (std::move (var_data_tuples)); + } + return !vars.in_error () && !var_data_num_rows.in_error () && vars.length == var_data_num_rows.length; + } + + bool instantiate_tuple_vars (const hb_hashmap_t& normalized_axes_location, + const hb_hashmap_t& axes_triple_distances) + { + for (tuple_variations_t& tuple_vars : vars) + if (!tuple_vars.instantiate (normalized_axes_location, axes_triple_distances)) + return false; + + if (!build_region_list ()) return false; + return true; + } + + bool build_region_list () + { + /* scan all tuples and collect all unique regions, prune unused regions */ + hb_hashmap_t all_regions; + hb_hashmap_t used_regions; + + /* use a vector when inserting new regions, make result deterministic */ + hb_vector_t all_unique_regions; + for (const tuple_variations_t& sub_table : vars) + { + for (const tuple_delta_t& tuple : sub_table.tuple_vars) + { + region_t r = &(tuple.axis_tuples); + if (!used_regions.has (r)) + { + bool all_zeros = true; + for (float d : tuple.deltas_x) + { + int delta = (int) roundf (d); + if (delta != 0) + { + all_zeros = false; + break; + } + } + if (!all_zeros) + { + if (!used_regions.set (r, 1)) + return false; + } + } + if (all_regions.has (r)) + continue; + if (!all_regions.set (r, 1)) + return false; + all_unique_regions.push (r); + } + } + + if (!all_regions || !all_unique_regions) return false; + if (!region_list.alloc (all_regions.get_population ())) + return false; + + unsigned idx = 0; + /* append the original regions that pre-existed */ + for (const auto& r : orig_region_list) + { + if (!all_regions.has (&r) || !used_regions.has (&r)) + continue; + + region_list.push (&r); + if (!region_map.set (&r, idx)) + return false; + all_regions.del (&r); + idx++; + } + + /* append the new regions at the end */ + for (const auto& r: all_unique_regions) + { + if (!all_regions.has (r) || !used_regions.has (r)) + continue; + region_list.push (r); + if (!region_map.set (r, idx)) + return false; + all_regions.del (r); + idx++; + } + return (!region_list.in_error ()) && (!region_map.in_error ()); + } + + /* main algorithm ported from fonttools VarStore_optimize() method, optimize + * varstore by default */ + + struct combined_gain_idx_tuple_t + { + int gain; + unsigned idx_1; + unsigned idx_2; + + combined_gain_idx_tuple_t () = default; + combined_gain_idx_tuple_t (int gain_, unsigned i, unsigned j) + :gain (gain_), idx_1 (i), idx_2 (j) {} + + bool operator < (const combined_gain_idx_tuple_t& o) + { + if (gain != o.gain) + return gain < o.gain; + + if (idx_1 != o.idx_1) + return idx_1 < o.idx_1; + + return idx_2 < o.idx_2; + } + + bool operator <= (const combined_gain_idx_tuple_t& o) + { + if (*this < o) return true; + return gain == o.gain && idx_1 == o.idx_1 && idx_2 == o.idx_2; + } + }; + + bool as_item_varstore (bool optimize=true, bool use_no_variation_idx=true) + { + if (!region_list) return false; + unsigned num_cols = region_list.length; + /* pre-alloc a 2D vector for all sub_table's VarData rows */ + unsigned total_rows = 0; + for (unsigned major = 0; major < var_data_num_rows.length; major++) + total_rows += var_data_num_rows[major]; + + if (!delta_rows.resize (total_rows)) return false; + /* init all rows to [0]*num_cols */ + for (unsigned i = 0; i < total_rows; i++) + if (!(delta_rows[i].resize (num_cols))) return false; + + /* old VarIdxes -> full encoding_row mapping */ + hb_hashmap_t*> front_mapping; + unsigned start_row = 0; + hb_vector_t encoding_objs; + hb_hashmap_t, unsigned> chars_idx_map; + + /* delta_rows map, used for filtering out duplicate rows */ + hb_hashmap_t*, unsigned> delta_rows_map; + for (unsigned major = 0; major < vars.length; major++) + { + /* deltas are stored in tuples(column based), convert them back into items + * (row based) delta */ + const tuple_variations_t& tuples = vars[major]; + unsigned num_rows = var_data_num_rows[major]; + for (const tuple_delta_t& tuple: tuples.tuple_vars) + { + if (tuple.deltas_x.length != num_rows) + return false; + + /* skip unused regions */ + unsigned *col_idx; + if (!region_map.has (&(tuple.axis_tuples), &col_idx)) + continue; + + for (unsigned i = 0; i < num_rows; i++) + { + int rounded_delta = roundf (tuple.deltas_x[i]); + delta_rows[start_row + i][*col_idx] += rounded_delta; + if ((!has_long) && (rounded_delta < -65536 || rounded_delta > 65535)) + has_long = true; + } + } + + if (!optimize) + { + /* assemble a delta_row_encoding_t for this subtable, skip optimization so + * chars is not initialized, we only need delta rows for serialization */ + delta_row_encoding_t obj; + for (unsigned r = start_row; r < start_row + num_rows; r++) + obj.add_row (&(delta_rows.arrayZ[r])); + + encodings.push (std::move (obj)); + start_row += num_rows; + continue; + } + + for (unsigned minor = 0; minor < num_rows; minor++) + { + const hb_vector_t& row = delta_rows[start_row + minor]; + if (use_no_variation_idx) + { + bool all_zeros = true; + for (int delta : row) + { + if (delta != 0) + { + all_zeros = false; + break; + } + } + if (all_zeros) + continue; + } + + if (!front_mapping.set ((major<<16) + minor, &row)) + return false; + + hb_vector_t chars = delta_row_encoding_t::get_row_chars (row); + if (!chars) return false; + + if (delta_rows_map.has (&row)) + continue; + + delta_rows_map.set (&row, 1); + unsigned *obj_idx; + if (chars_idx_map.has (chars, &obj_idx)) + { + delta_row_encoding_t& obj = encoding_objs[*obj_idx]; + if (!obj.add_row (&row)) + return false; + } + else + { + if (!chars_idx_map.set (chars, encoding_objs.length)) + return false; + delta_row_encoding_t obj (std::move (chars), &row); + encoding_objs.push (std::move (obj)); + } + } + + start_row += num_rows; + } + + /* return directly if no optimization, maintain original VariationIndex so + * varidx_map would be empty */ + if (!optimize) return !encodings.in_error (); + + /* sort encoding_objs */ + encoding_objs.qsort (); + + /* main algorithm: repeatedly pick 2 best encodings to combine, and combine + * them */ + hb_priority_queue_t queue; + unsigned num_todos = encoding_objs.length; + for (unsigned i = 0; i < num_todos; i++) + { + for (unsigned j = i + 1; j < num_todos; j++) + { + int combining_gain = encoding_objs.arrayZ[i].gain_from_merging (encoding_objs.arrayZ[j]); + if (combining_gain > 0) + queue.insert (combined_gain_idx_tuple_t (-combining_gain, i, j), 0); + } + } + + hb_set_t removed_todo_idxes; + while (queue) + { + auto t = queue.pop_minimum ().first; + unsigned i = t.idx_1; + unsigned j = t.idx_2; + + if (removed_todo_idxes.has (i) || removed_todo_idxes.has (j)) + continue; + + delta_row_encoding_t& encoding = encoding_objs.arrayZ[i]; + delta_row_encoding_t& other_encoding = encoding_objs.arrayZ[j]; + + removed_todo_idxes.add (i); + removed_todo_idxes.add (j); + + hb_vector_t combined_chars; + if (!combined_chars.alloc (encoding.chars.length)) + return false; + + for (unsigned idx = 0; idx < encoding.chars.length; idx++) + { + uint8_t v = hb_max (encoding.chars.arrayZ[idx], other_encoding.chars.arrayZ[idx]); + combined_chars.push (v); + } + + delta_row_encoding_t combined_encoding_obj (std::move (combined_chars)); + for (const auto& row : hb_concat (encoding.items, other_encoding.items)) + combined_encoding_obj.add_row (row); + + for (unsigned idx = 0; idx < encoding_objs.length; idx++) + { + if (removed_todo_idxes.has (idx)) continue; + + const delta_row_encoding_t& obj = encoding_objs.arrayZ[idx]; + if (obj.chars == combined_chars) + { + for (const auto& row : obj.items) + combined_encoding_obj.add_row (row); + + removed_todo_idxes.add (idx); + continue; + } + + int combined_gain = combined_encoding_obj.gain_from_merging (obj); + if (combined_gain > 0) + queue.insert (combined_gain_idx_tuple_t (-combined_gain, idx, encoding_objs.length), 0); + } + + encoding_objs.push (std::move (combined_encoding_obj)); + } + + int num_final_encodings = (int) encoding_objs.length - (int) removed_todo_idxes.get_population (); + if (num_final_encodings <= 0) return false; + + if (!encodings.alloc (num_final_encodings)) return false; + for (unsigned i = 0; i < encoding_objs.length; i++) + { + if (removed_todo_idxes.has (i)) continue; + encodings.push (std::move (encoding_objs.arrayZ[i])); + } + + /* sort again based on width, make result deterministic */ + encodings.qsort (delta_row_encoding_t::cmp_width); + + return compile_varidx_map (front_mapping); + } + + private: + /* compile varidx_map for one VarData subtable (index specified by major) */ + bool compile_varidx_map (const hb_hashmap_t*>& front_mapping) + { + /* full encoding_row -> new VarIdxes mapping */ + hb_hashmap_t*, unsigned> back_mapping; + + for (unsigned major = 0; major < encodings.length; major++) + { + delta_row_encoding_t& encoding = encodings[major]; + /* just sanity check, this shouldn't happen */ + if (encoding.is_empty ()) + return false; + + unsigned num_rows = encoding.items.length; + + /* sort rows, make result deterministic */ + encoding.items.qsort (_cmp_row); + + /* compile old to new var_idxes mapping */ + for (unsigned minor = 0; minor < num_rows; minor++) + { + unsigned new_varidx = (major << 16) + minor; + back_mapping.set (encoding.items.arrayZ[minor], new_varidx); + } + } + + for (auto _ : front_mapping.iter ()) + { + unsigned old_varidx = _.first; + unsigned *new_varidx; + if (back_mapping.has (_.second, &new_varidx)) + varidx_map.set (old_varidx, *new_varidx); + else + varidx_map.set (old_varidx, HB_OT_LAYOUT_NO_VARIATIONS_INDEX); + } + return !varidx_map.in_error (); + } + + static int _cmp_row (const void *pa, const void *pb) + { + /* compare pointers of vectors(const hb_vector_t*) that represent a row */ + const hb_vector_t** a = (const hb_vector_t**) pa; + const hb_vector_t** b = (const hb_vector_t**) pb; + + for (unsigned i = 0; i < (*b)->length; i++) + { + int va = (*a)->arrayZ[i]; + int vb = (*b)->arrayZ[i]; + if (va != vb) + return va < vb ? -1 : 1; + } + return 0; + } +}; + } /* namespace OT */ diff -Nru harfbuzz-8.0.1/src/hb-ot-var-cvar-table.hh harfbuzz-8.3.0/src/hb-ot-var-cvar-table.hh --- harfbuzz-8.0.1/src/hb-ot-var-cvar-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-var-cvar-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -45,7 +45,8 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && - version.sanitize (c) && likely (version.major == 1) && + hb_barrier () && + likely (version.major == 1) && tupleVariationData.sanitize (c)); } @@ -54,14 +55,14 @@ bool decompile_tuple_variations (unsigned axis_count, unsigned point_count, + hb_blob_t *blob, bool is_gvar, const hb_map_t *axes_old_index_tag_map, TupleVariationData::tuple_variations_t& tuple_variations /* OUT */) const { hb_vector_t shared_indices; TupleVariationData::tuple_iterator_t iterator; - unsigned var_data_length = tupleVariationData.get_size (axis_count); - hb_bytes_t var_data_bytes = hb_bytes_t (reinterpret_cast (get_tuple_var_data ()), var_data_length); + hb_bytes_t var_data_bytes = blob->as_bytes ().sub_array (4); if (!TupleVariationData::get_tuple_iterator (var_data_bytes, axis_count, this, shared_indices, &iterator)) return false; @@ -131,6 +132,7 @@ TupleVariationData::tuple_variations_t& tuple_variations) const { TRACE_SERIALIZE (this); + if (!tuple_variations) return_trace (false); if (unlikely (!c->embed (version))) return_trace (false); return_trace (tupleVariationData.serialize (c, false, tuple_variations)); @@ -142,33 +144,25 @@ if (c->plan->all_axes_pinned) return_trace (false); - /* subset() for cvar is called by partial instancing only, we always pass - * through cvar table in other cases */ - if (!c->plan->normalized_coords) - { - unsigned axis_count = c->plan->source->table.fvar->get_axis_count (); - unsigned total_size = min_size + tupleVariationData.get_size (axis_count); - char *out = c->serializer->allocate_size (total_size); - if (unlikely (!out)) return_trace (false); - - hb_memcpy (out, this, total_size); - return_trace (true); - } - OT::TupleVariationData::tuple_variations_t tuple_variations; unsigned axis_count = c->plan->axes_old_index_tag_map.get_population (); const hb_tag_t cvt = HB_TAG('c','v','t',' '); hb_blob_t *cvt_blob = hb_face_reference_table (c->plan->source, cvt); unsigned point_count = hb_blob_get_length (cvt_blob) / FWORD::static_size; + hb_blob_destroy (cvt_blob); - if (!decompile_tuple_variations (axis_count, point_count, false, + if (!decompile_tuple_variations (axis_count, point_count, + c->source_blob, false, &(c->plan->axes_old_index_tag_map), tuple_variations)) return_trace (false); - tuple_variations.instantiate (c->plan->axes_location); - if (!tuple_variations.compile_bytes (c->plan->axes_index_map, c->plan->axes_old_index_tag_map)) + if (!tuple_variations.instantiate (c->plan->axes_location, c->plan->axes_triple_distances)) + return_trace (false); + + if (!tuple_variations.compile_bytes (c->plan->axes_index_map, c->plan->axes_old_index_tag_map, + false /* do not use shared points */)) return_trace (false); return_trace (serialize (c->serializer, tuple_variations)); diff -Nru harfbuzz-8.0.1/src/hb-ot-var-fvar-table.hh harfbuzz-8.3.0/src/hb-ot-var-fvar-table.hh --- harfbuzz-8.0.1/src/hb-ot-var-fvar-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-var-fvar-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -99,16 +99,16 @@ for (unsigned i = 0 ; i < axis_count; i++) { uint32_t *axis_tag; + Triple *axis_limit; // only keep instances whose coordinates == pinned axis location - if (!c->plan->axes_old_index_tag_map.has (i, &axis_tag)) continue; - if (axes_location->has (*axis_tag)) + if (!c->plan->axes_old_index_tag_map.has (i, &axis_tag)) return_trace (false); + if (axes_location->has (*axis_tag, &axis_limit)) { - Triple axis_limit = axes_location->get (*axis_tag); - if (!axis_coord_pinned_or_within_axis_range (coords, i, axis_limit)) + if (!axis_coord_pinned_or_within_axis_range (coords, i, *axis_limit)) return_trace (false); //skip pinned axis - if (axis_limit.is_point ()) + if (axis_limit->is_point ()) continue; } @@ -131,6 +131,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && c->check_array (coordinatesZ.arrayZ, axis_count)); } @@ -228,6 +229,30 @@ return defaultValue.to_float (); } + TripleDistances get_triple_distances () const + { + float min, default_, max; + get_coordinates (min, default_, max); + return TripleDistances (min, default_, max); + } + + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (this); + if (unlikely (!out)) return_trace (false); + + const hb_hashmap_t& user_axes_location = c->plan->user_axes_location; + Triple *axis_limit; + if (user_axes_location.has (axisTag, &axis_limit)) + { + out->minValue.set_float (axis_limit->minimum); + out->defaultValue.set_float (axis_limit->middle); + out->maxValue.set_float (axis_limit->maximum); + } + return_trace (true); + } + public: Tag axisTag; /* Tag identifying the design variation for the axis. */ protected: @@ -253,8 +278,10 @@ { TRACE_SANITIZE (this); return_trace (version.sanitize (c) && + hb_barrier () && likely (version.major == 1) && c->check_struct (this) && + hb_barrier () && axisSize == 20 && /* Assumed in our code. */ instanceSize >= axisCount * 4 + 4 && get_axes ().sanitize (c) && @@ -416,21 +443,25 @@ for (unsigned i = 0 ; i < (unsigned)axisCount; i++) { if (!c->plan->axes_index_map.has (i)) continue; - if (unlikely (!c->serializer->embed (axes_records[i]))) + if (unlikely (!axes_records[i].subset (c))) return_trace (false); } if (!c->serializer->check_assign (out->firstAxis, get_size (), HB_SERIALIZE_ERROR_INT_OVERFLOW)) return_trace (false); + unsigned num_retained_instances = 0; for (unsigned i = 0 ; i < (unsigned)instanceCount; i++) { const InstanceRecord *instance = get_instance (i); auto snap = c->serializer->snapshot (); if (!instance->subset (c, axisCount, has_postscript_nameid)) c->serializer->revert (snap); + else + num_retained_instances++; } - return_trace (true); + + return_trace (c->serializer->check_assign (out->instanceCount, num_retained_instances, HB_SERIALIZE_ERROR_INT_OVERFLOW)); } public: diff -Nru harfbuzz-8.0.1/src/hb-ot-var-gvar-table.hh harfbuzz-8.3.0/src/hb-ot-var-gvar-table.hh --- harfbuzz-8.0.1/src/hb-ot-var-gvar-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-var-gvar-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -39,42 +39,255 @@ namespace OT { -struct contour_point_t +struct GlyphVariationData : TupleVariationData +{}; + +struct glyph_variations_t { - void init (float x_ = 0.f, float y_ = 0.f, bool is_end_point_ = false) - { flag = 0; x = x_; y = y_; is_end_point = is_end_point_; } + using tuple_variations_t = TupleVariationData::tuple_variations_t; + hb_vector_t glyph_variations; + + hb_vector_t compiled_shared_tuples; + private: + unsigned shared_tuples_count = 0; - void transform (const float (&matrix)[4]) + /* shared coords-> index map after instantiation */ + hb_hashmap_t*, unsigned> shared_tuples_idx_map; + + public: + unsigned compiled_shared_tuples_count () const + { return shared_tuples_count; } + + unsigned compiled_byte_size () const { - float x_ = x * matrix[0] + y * matrix[2]; - y = x * matrix[1] + y * matrix[3]; - x = x_; + unsigned byte_size = 0; + for (const auto& _ : glyph_variations) + byte_size += _.get_compiled_byte_size (); + + return byte_size; } - HB_ALWAYS_INLINE - void translate (const contour_point_t &p) { x += p.x; y += p.y; } + bool create_from_glyphs_var_data (unsigned axis_count, + const hb_array_t shared_tuples, + const hb_subset_plan_t *plan, + const hb_hashmap_t& new_gid_var_data_map) + { + if (unlikely (!glyph_variations.alloc (plan->new_to_old_gid_list.length, true))) + return false; - float x; - float y; - uint8_t flag; - bool is_end_point; -}; + auto it = hb_iter (plan->new_to_old_gid_list); + for (auto &_ : it) + { + hb_codepoint_t new_gid = _.first; + contour_point_vector_t *all_contour_points; + if (!new_gid_var_data_map.has (new_gid) || + !plan->new_gid_contour_points_map.has (new_gid, &all_contour_points)) + return false; + hb_bytes_t var_data = new_gid_var_data_map.get (new_gid); + + const GlyphVariationData* p = reinterpret_cast (var_data.arrayZ); + hb_vector_t shared_indices; + GlyphVariationData::tuple_iterator_t iterator; + tuple_variations_t tuple_vars; + + /* in case variation data is empty, push an empty struct into the vector, + * keep the vector in sync with the new_to_old_gid_list */ + if (!var_data || ! p->has_data () || !all_contour_points->length || + !GlyphVariationData::get_tuple_iterator (var_data, axis_count, + var_data.arrayZ, + shared_indices, &iterator)) + { + glyph_variations.push (std::move (tuple_vars)); + continue; + } + + if (!p->decompile_tuple_variations (all_contour_points->length, true /* is_gvar */, + iterator, &(plan->axes_old_index_tag_map), + shared_indices, shared_tuples, + tuple_vars /* OUT */)) + return false; + glyph_variations.push (std::move (tuple_vars)); + } + return !glyph_variations.in_error () && glyph_variations.length == plan->new_to_old_gid_list.length; + } -struct contour_point_vector_t : hb_vector_t -{ - void extend (const hb_array_t &a) + bool instantiate (const hb_subset_plan_t *plan) { - unsigned int old_len = length; - if (unlikely (!resize (old_len + a.length, false))) - return; - auto arrayZ = this->arrayZ + old_len; - unsigned count = a.length; - hb_memcpy (arrayZ, a.arrayZ, count * sizeof (arrayZ[0])); + unsigned count = plan->new_to_old_gid_list.length; + for (unsigned i = 0; i < count; i++) + { + hb_codepoint_t new_gid = plan->new_to_old_gid_list[i].first; + contour_point_vector_t *all_points; + if (!plan->new_gid_contour_points_map.has (new_gid, &all_points)) + return false; + if (!glyph_variations[i].instantiate (plan->axes_location, plan->axes_triple_distances, all_points)) + return false; + } + return true; } -}; -struct GlyphVariationData : TupleVariationData -{}; + bool compile_bytes (const hb_map_t& axes_index_map, + const hb_map_t& axes_old_index_tag_map) + { + if (!compile_shared_tuples (axes_index_map, axes_old_index_tag_map)) + return false; + for (tuple_variations_t& vars: glyph_variations) + if (!vars.compile_bytes (axes_index_map, axes_old_index_tag_map, + true, /* use shared points*/ + &shared_tuples_idx_map)) + return false; + + return true; + } + + bool compile_shared_tuples (const hb_map_t& axes_index_map, + const hb_map_t& axes_old_index_tag_map) + { + /* key is pointer to compiled_peak_coords inside each tuple, hashing + * function will always deref pointers first */ + hb_hashmap_t*, unsigned> coords_count_map; + + /* count the num of shared coords */ + for (tuple_variations_t& vars: glyph_variations) + { + for (tuple_delta_t& var : vars.tuple_vars) + { + if (!var.compile_peak_coords (axes_index_map, axes_old_index_tag_map)) + return false; + unsigned* count; + if (coords_count_map.has (&(var.compiled_peak_coords), &count)) + coords_count_map.set (&(var.compiled_peak_coords), *count + 1); + else + coords_count_map.set (&(var.compiled_peak_coords), 1); + } + } + + if (!coords_count_map || coords_count_map.in_error ()) + return false; + + /* add only those coords that are used more than once into the vector and sort */ + hb_vector_t*> shared_coords; + if (unlikely (!shared_coords.alloc (coords_count_map.get_population ()))) + return false; + + for (const auto _ : coords_count_map.iter ()) + { + if (_.second == 1) continue; + shared_coords.push (_.first); + } + + /* no shared tuples: no coords are used more than once */ + if (!shared_coords) return true; + /* sorting based on the coords frequency first (high to low), then compare + * the coords bytes */ + hb_qsort (shared_coords.arrayZ, shared_coords.length, sizeof (hb_vector_t*), _cmp_coords, (void *) (&coords_count_map)); + + /* build shared_coords->idx map and shared tuples byte array */ + + shared_tuples_count = hb_min (0xFFFu + 1, shared_coords.length); + unsigned len = shared_tuples_count * (shared_coords[0]->length); + if (unlikely (!compiled_shared_tuples.alloc (len))) + return false; + + for (unsigned i = 0; i < shared_tuples_count; i++) + { + shared_tuples_idx_map.set (shared_coords[i], i); + /* add a concat() in hb_vector_t? */ + for (char c : shared_coords[i]->iter ()) + compiled_shared_tuples.push (c); + } + + return true; + } + + static int _cmp_coords (const void *pa, const void *pb, void *arg) + { + const hb_hashmap_t*, unsigned>* coords_count_map = + reinterpret_cast*, unsigned>*> (arg); + + /* shared_coords is hb_vector_t*> so casting pa/pb + * to be a pointer to a pointer */ + const hb_vector_t** a = reinterpret_cast**> (const_cast(pa)); + const hb_vector_t** b = reinterpret_cast**> (const_cast(pb)); + + bool has_a = coords_count_map->has (*a); + bool has_b = coords_count_map->has (*b); + + if (has_a && has_b) + { + unsigned a_num = coords_count_map->get (*a); + unsigned b_num = coords_count_map->get (*b); + + if (a_num != b_num) + return b_num - a_num; + + return (*b)->as_array().cmp ((*a)->as_array ()); + } + else if (has_a) return -1; + else if (has_b) return 1; + else return 0; + } + + template + bool serialize_glyph_var_data (hb_serialize_context_t *c, + Iterator it, + bool long_offset, + unsigned num_glyphs, + char* glyph_var_data_offsets /* OUT: glyph var data offsets array */) const + { + TRACE_SERIALIZE (this); + + if (long_offset) + { + ((HBUINT32 *) glyph_var_data_offsets)[0] = 0; + glyph_var_data_offsets += 4; + } + else + { + ((HBUINT16 *) glyph_var_data_offsets)[0] = 0; + glyph_var_data_offsets += 2; + } + unsigned glyph_offset = 0; + hb_codepoint_t last_gid = 0; + unsigned idx = 0; + + TupleVariationData* cur_glyph = c->start_embed (); + if (!cur_glyph) return_trace (false); + for (auto &_ : it) + { + hb_codepoint_t gid = _.first; + if (long_offset) + for (; last_gid < gid; last_gid++) + ((HBUINT32 *) glyph_var_data_offsets)[last_gid] = glyph_offset; + else + for (; last_gid < gid; last_gid++) + ((HBUINT16 *) glyph_var_data_offsets)[last_gid] = glyph_offset / 2; + + if (idx >= glyph_variations.length) return_trace (false); + if (!cur_glyph->serialize (c, true, glyph_variations[idx])) return_trace (false); + TupleVariationData* next_glyph = c->start_embed (); + glyph_offset += (char *) next_glyph - (char *) cur_glyph; + + if (long_offset) + ((HBUINT32 *) glyph_var_data_offsets)[gid] = glyph_offset; + else + ((HBUINT16 *) glyph_var_data_offsets)[gid] = glyph_offset / 2; + + last_gid++; + idx++; + cur_glyph = next_glyph; + } + + if (long_offset) + for (; last_gid < num_glyphs; last_gid++) + ((HBUINT32 *) glyph_var_data_offsets)[last_gid] = glyph_offset; + else + for (; last_gid < num_glyphs; last_gid++) + ((HBUINT16 *) glyph_var_data_offsets)[last_gid] = glyph_offset / 2; + return_trace (true); + } +}; struct gvar { @@ -83,7 +296,9 @@ bool sanitize_shallow (hb_sanitize_context_t *c) const { TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && (version.major == 1) && + return_trace (c->check_struct (this) && + hb_barrier () && + (version.major == 1) && sharedTuples.sanitize (c, this, axisCount * sharedTupleCount) && (is_long_offset () ? c->check_array (get_long_offset_array (), c->get_num_glyphs () + 1) : @@ -94,9 +309,101 @@ bool sanitize (hb_sanitize_context_t *c) const { return sanitize_shallow (c); } + bool decompile_glyph_variations (hb_subset_context_t *c, + glyph_variations_t& glyph_vars /* OUT */) const + { + hb_hashmap_t new_gid_var_data_map; + auto it = hb_iter (c->plan->new_to_old_gid_list); + if (it->first == 0 && !(c->plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE)) + { + new_gid_var_data_map.set (0, hb_bytes_t ()); + it++; + } + + for (auto &_ : it) + { + hb_codepoint_t new_gid = _.first; + hb_codepoint_t old_gid = _.second; + hb_bytes_t var_data_bytes = get_glyph_var_data_bytes (c->source_blob, glyphCountX, old_gid); + new_gid_var_data_map.set (new_gid, var_data_bytes); + } + + if (new_gid_var_data_map.in_error ()) return false; + + hb_array_t shared_tuples = (this+sharedTuples).as_array ((unsigned) sharedTupleCount * (unsigned) axisCount); + return glyph_vars.create_from_glyphs_var_data (axisCount, shared_tuples, c->plan, new_gid_var_data_map); + } + + template + bool serialize (hb_serialize_context_t *c, + const glyph_variations_t& glyph_vars, + Iterator it, + unsigned axis_count, + unsigned num_glyphs) const + { + TRACE_SERIALIZE (this); + gvar *out = c->allocate_min (); + if (unlikely (!out)) return_trace (false); + + out->version.major = 1; + out->version.minor = 0; + out->axisCount = axis_count; + out->glyphCountX = hb_min (0xFFFFu, num_glyphs); + + unsigned glyph_var_data_size = glyph_vars.compiled_byte_size (); + bool long_offset = glyph_var_data_size & ~0xFFFFu; + out->flags = long_offset ? 1 : 0; + + HBUINT8 *glyph_var_data_offsets = c->allocate_size ((long_offset ? 4 : 2) * (num_glyphs + 1), false); + if (!glyph_var_data_offsets) return_trace (false); + + /* shared tuples */ + unsigned shared_tuple_count = glyph_vars.compiled_shared_tuples_count (); + out->sharedTupleCount = shared_tuple_count; + + if (!shared_tuple_count) + out->sharedTuples = 0; + else + { + hb_array_t shared_tuples = glyph_vars.compiled_shared_tuples.as_array ().copy (c); + if (!shared_tuples.arrayZ) return_trace (false); + out->sharedTuples = shared_tuples.arrayZ - (char *) out; + } + + char *glyph_var_data = c->start_embed (); + if (!glyph_var_data) return_trace (false); + out->dataZ = glyph_var_data - (char *) out; + + return_trace (glyph_vars.serialize_glyph_var_data (c, it, long_offset, num_glyphs, + (char *) glyph_var_data_offsets)); + } + + bool instantiate (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); + glyph_variations_t glyph_vars; + if (!decompile_glyph_variations (c, glyph_vars)) + return_trace (false); + + if (!glyph_vars.instantiate (c->plan)) return_trace (false); + if (!glyph_vars.compile_bytes (c->plan->axes_index_map, c->plan->axes_old_index_tag_map)) + return_trace (false); + + unsigned axis_count = c->plan->axes_index_map.get_population (); + unsigned num_glyphs = c->plan->num_output_glyphs (); + auto it = hb_iter (c->plan->new_to_old_gid_list); + return_trace (serialize (c->serializer, glyph_vars, it, axis_count, num_glyphs)); + } + bool subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); + if (c->plan->all_axes_pinned) + return_trace (false); + + if (c->plan->normalized_coords) + return_trace (instantiate (c)); unsigned glyph_count = version.to_int () ? c->plan->source->get_num_glyphs () : 0; @@ -121,7 +428,10 @@ subset_data_size += get_glyph_var_data_bytes (c->source_blob, glyph_count, old_gid).length; } - bool long_offset = subset_data_size & ~0xFFFFu; + bool long_offset = (subset_data_size & ~0xFFFFu); + #ifdef HB_EXPERIMENTAL_API + long_offset = long_offset || (c->plan->flags & HB_SUBSET_FLAGS_IFTB_REQUIREMENTS); +#endif out->flags = long_offset ? 1 : 0; HBUINT8 *subset_offsets = c->serializer->allocate_size ((long_offset ? 4 : 2) * (num_glyphs + 1), false); @@ -139,6 +449,8 @@ hb_memcpy (tuples, this+sharedTuples, shared_tuple_size); } + /* This ordering relative to the shared tuples array, which puts the glyphVariationData + last in the table, is required when HB_SUBSET_FLAGS_IFTB_REQUIREMENTS is set */ char *subset_data = c->serializer->allocate_size (subset_data_size, false); if (!subset_data) return_trace (false); out->dataZ = subset_data - (char *) out; diff -Nru harfbuzz-8.0.1/src/hb-ot-var-hvar-table.hh harfbuzz-8.3.0/src/hb-ot-var-hvar-table.hh --- harfbuzz-8.0.1/src/hb-ot-var-hvar-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-var-hvar-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -134,6 +134,36 @@ } } + bool remap_after_instantiation (const hb_subset_plan_t *plan, + const hb_map_t& varidx_map) + { + /* recalculate bit_count after remapping */ + outer_bit_count = 1; + inner_bit_count = 1; + + for (const auto &_ : plan->new_to_old_gid_list) + { + hb_codepoint_t new_gid = _.first; + if (unlikely (new_gid >= map_count)) break; + + uint32_t v = output_map.arrayZ[new_gid]; + uint32_t *new_varidx; + if (!varidx_map.has (v, &new_varidx)) + return false; + + output_map.arrayZ[new_gid] = *new_varidx; + + unsigned outer = (*new_varidx) >> 16; + unsigned bit_count = (outer == 0) ? 1 : hb_bit_storage (outer); + outer_bit_count = hb_max (bit_count, outer_bit_count); + + unsigned inner = (*new_varidx) & 0xFFFF; + bit_count = (inner == 0) ? 1 : hb_bit_storage (inner); + inner_bit_count = hb_max (bit_count, inner_bit_count); + } + return true; + } + unsigned int get_inner_bit_count () const { return inner_bit_count; } unsigned int get_width () const { return ((outer_bit_count + inner_bit_count + 7) / 8); } unsigned int get_map_count () const { return map_count; } @@ -211,6 +241,16 @@ index_map_plans[i].remap (index_maps[i], outer_map, inner_maps, plan); } + /* remap */ + bool remap_index_map_plans (const hb_subset_plan_t *plan, + const hb_map_t& varidx_map) + { + for (unsigned i = 0; i < index_map_plans.length; i++) + if (!index_map_plans[i].remap_after_instantiation (plan, varidx_map)) + return false; + return true; + } + void fini () { for (unsigned int i = 0; i < inner_sets.length; i++) @@ -248,6 +288,7 @@ { TRACE_SANITIZE (this); return_trace (version.sanitize (c) && + hb_barrier () && likely (version.major == 1) && varStore.sanitize (c, this) && advMap.sanitize (c, this) && @@ -289,6 +330,9 @@ bool _subset (hb_subset_context_t *c) const { TRACE_SUBSET (this); + if (c->plan->all_axes_pinned) + return_trace (false); + hvarvvar_subset_plan_t hvar_plan; hb_vector_t index_maps; @@ -302,11 +346,37 @@ out->version.major = 1; out->version.minor = 0; - if (unlikely (!out->varStore - .serialize_serialize (c->serializer, - hvar_plan.var_store, - hvar_plan.inner_maps.as_array ()))) + if (c->plan->normalized_coords) + { + item_variations_t item_vars; + if (!item_vars.instantiate (this+varStore, c->plan, + advMap == 0 ? false : true, + false, /* use_no_variation_idx = false */ + hvar_plan.inner_maps.as_array ())) + return_trace (false); + + if (!out->varStore.serialize_serialize (c->serializer, + item_vars.has_long_word (), + c->plan->axis_tags, + item_vars.get_region_list (), + item_vars.get_vardata_encodings ())) + return_trace (false); + + /* if varstore is optimized, remap output_map */ + if (advMap) + { + if (!hvar_plan.remap_index_map_plans (c->plan, item_vars.get_varidx_map ())) + return_trace (false); + } + } + else + { + if (unlikely (!out->varStore + .serialize_serialize (c->serializer, + hvar_plan.var_store, + hvar_plan.inner_maps.as_array ()))) return_trace (false); + } return_trace (out->T::serialize_index_maps (c->serializer, hvar_plan.index_map_plans.as_array ())); diff -Nru harfbuzz-8.0.1/src/hb-ot-var-mvar-table.hh harfbuzz-8.3.0/src/hb-ot-var-mvar-table.hh --- harfbuzz-8.0.1/src/hb-ot-var-mvar-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-var-mvar-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -27,7 +27,7 @@ #ifndef HB_OT_VAR_MVAR_TABLE_HH #define HB_OT_VAR_MVAR_TABLE_HH -#include "hb-ot-layout-common.hh" +#include "hb-ot-var-common.hh" namespace OT { @@ -41,6 +41,19 @@ return_trace (c->check_struct (this)); } + bool subset (hb_subset_context_t *c, + const hb_map_t& varidx_map) const + { + TRACE_SUBSET (this); + auto *out = c->serializer->embed (*this); + if (unlikely (!out)) return_trace (false); + + hb_codepoint_t *new_idx; + return_trace (c->serializer->check_assign (out->varIdx, + (varidx_map.has (varIdx, &new_idx)) ? *new_idx : HB_OT_LAYOUT_NO_VARIATIONS_INDEX, + HB_SERIALIZE_ERROR_INT_OVERFLOW)); + } + public: Tag valueTag; /* Four-byte tag identifying a font-wide measure. */ VarIdx varIdx; /* Outer/inner index into VariationStore item. */ @@ -64,8 +77,10 @@ { TRACE_SANITIZE (this); return_trace (version.sanitize (c) && + hb_barrier () && likely (version.major == 1) && c->check_struct (this) && + hb_barrier () && valueRecordSize >= VariationValueRecord::static_size && varStore.sanitize (c, this) && c->check_range (valuesZ.arrayZ, @@ -73,6 +88,47 @@ valueRecordSize)); } + bool subset (hb_subset_context_t *c) const + { + TRACE_SUBSET (this); +#ifdef HB_NO_VAR + return_trace (false); +#endif + + if (c->plan->all_axes_pinned) + return_trace (false); + + MVAR *out = c->serializer->start_embed (*this); + if (unlikely (!c->serializer->extend_min (out))) return_trace (false); + out->version = version; + out->reserved = reserved; + out->valueRecordSize = valueRecordSize; + out->valueRecordCount = valueRecordCount; + + item_variations_t item_vars; + const VariationStore& src_var_store = this+varStore; + + if (!item_vars.instantiate (src_var_store, c->plan)) + return_trace (false); + + /* serialize varstore */ + if (!out->varStore.serialize_serialize (c->serializer, item_vars.has_long_word (), + c->plan->axis_tags, + item_vars.get_region_list (), + item_vars.get_vardata_encodings ())) + return_trace (false); + + /* serialize value records array */ + unsigned value_rec_count = valueRecordCount; + const VariationValueRecord *record = reinterpret_cast (valuesZ.arrayZ); + for (unsigned i = 0; i < value_rec_count; i++) + { + if (!record->subset (c, item_vars.get_varidx_map ())) return_trace (false); + record++; + } + return_trace (true); + } + float get_var (hb_tag_t tag, const int *coords, unsigned int coord_count) const { diff -Nru harfbuzz-8.0.1/src/hb-ot-vorg-table.hh harfbuzz-8.3.0/src/hb-ot-vorg-table.hh --- harfbuzz-8.0.1/src/hb-ot-vorg-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ot-vorg-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -117,6 +117,7 @@ { TRACE_SANITIZE (this); return_trace (c->check_struct (this) && + hb_barrier () && version.major == 1 && vertYOrigins.sanitize (c)); } diff -Nru harfbuzz-8.0.1/src/hb-paint.cc harfbuzz-8.3.0/src/hb-paint.cc --- harfbuzz-8.0.1/src/hb-paint.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-paint.cc 2023-11-11 14:08:45.000000000 +0000 @@ -54,6 +54,12 @@ hb_paint_pop_transform_nil (hb_paint_funcs_t *funcs, void *paint_data, void *user_data) {} +static hb_bool_t +hb_paint_color_glyph_nil (hb_paint_funcs_t *funcs, void *paint_data, + hb_codepoint_t glyph, + hb_font_t *font, + void *user_data) { return false; } + static void hb_paint_push_clip_glyph_nil (hb_paint_funcs_t *funcs, void *paint_data, hb_codepoint_t glyph, @@ -474,6 +480,25 @@ } /** + * hb_paint_color_glyph: + * @funcs: paint functions + * @paint_data: associated data passed by the caller + * @glyph: the glyph ID + * @font: the font + * + * Perform a "color-glyph" paint operation. + * + * Since: 8.2.0 + */ +hb_bool_t +hb_paint_color_glyph (hb_paint_funcs_t *funcs, void *paint_data, + hb_codepoint_t glyph, + hb_font_t *font) +{ + return funcs->color_glyph (paint_data, glyph, font); +} + +/** * hb_paint_push_clip_glyph: * @funcs: paint functions * @paint_data: associated data passed by the caller diff -Nru harfbuzz-8.0.1/src/hb-paint.h harfbuzz-8.3.0/src/hb-paint.h --- harfbuzz-8.0.1/src/hb-paint.h 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-paint.h 2023-11-11 14:08:45.000000000 +0000 @@ -137,6 +137,26 @@ void *user_data); /** + * hb_paint_color_glyph_func_t: + * @funcs: paint functions object + * @paint_data: The data accompanying the paint functions in hb_font_paint_glyph() + * @glyph: the glyph ID + * @font: the font + * @user_data: User data pointer passed to hb_paint_funcs_set_color_glyph_func() + * + * A virtual method for the #hb_paint_funcs_t to render a color glyph by glyph index. + * + * Return value: %true if the glyph was painted, %false otherwise. + * + * Since: 8.2.0 + */ +typedef hb_bool_t (*hb_paint_color_glyph_func_t) (hb_paint_funcs_t *funcs, + void *paint_data, + hb_codepoint_t glyph, + hb_font_t *font, + void *user_data); + +/** * hb_paint_push_clip_glyph_func_t: * @funcs: paint functions object * @paint_data: The data accompanying the paint functions in hb_font_paint_glyph() @@ -724,6 +744,23 @@ hb_destroy_func_t destroy); /** + * hb_paint_funcs_set_color_glyph_func: + * @funcs: A paint functions struct + * @func: (closure user_data) (destroy destroy) (scope notified): The color-glyph callback + * @user_data: Data to pass to @func + * @destroy: (nullable): Function to call when @user_data is no longer needed + * + * Sets the color-glyph callback on the paint functions struct. + * + * Since: 8.2.0 + */ +HB_EXTERN void +hb_paint_funcs_set_color_glyph_func (hb_paint_funcs_t *funcs, + hb_paint_color_glyph_func_t func, + void *user_data, + hb_destroy_func_t destroy); + +/** * hb_paint_funcs_set_push_clip_glyph_func: * @funcs: A paint functions struct * @func: (closure user_data) (destroy destroy) (scope notified): The push-clip-glyph callback @@ -922,6 +959,11 @@ HB_EXTERN void hb_paint_pop_transform (hb_paint_funcs_t *funcs, void *paint_data); +HB_EXTERN hb_bool_t +hb_paint_color_glyph (hb_paint_funcs_t *funcs, void *paint_data, + hb_codepoint_t glyph, + hb_font_t *font); + HB_EXTERN void hb_paint_push_clip_glyph (hb_paint_funcs_t *funcs, void *paint_data, hb_codepoint_t glyph, diff -Nru harfbuzz-8.0.1/src/hb-paint.hh harfbuzz-8.3.0/src/hb-paint.hh --- harfbuzz-8.0.1/src/hb-paint.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-paint.hh 2023-11-11 14:08:45.000000000 +0000 @@ -32,6 +32,7 @@ #define HB_PAINT_FUNCS_IMPLEMENT_CALLBACKS \ HB_PAINT_FUNC_IMPLEMENT (push_transform) \ HB_PAINT_FUNC_IMPLEMENT (pop_transform) \ + HB_PAINT_FUNC_IMPLEMENT (color_glyph) \ HB_PAINT_FUNC_IMPLEMENT (push_clip_glyph) \ HB_PAINT_FUNC_IMPLEMENT (push_clip_rectangle) \ HB_PAINT_FUNC_IMPLEMENT (pop_clip) \ @@ -77,6 +78,13 @@ void pop_transform (void *paint_data) { func.pop_transform (this, paint_data, !user_data ? nullptr : user_data->pop_transform); } + bool color_glyph (void *paint_data, + hb_codepoint_t glyph, + hb_font_t *font) + { return func.color_glyph (this, paint_data, + glyph, + font, + !user_data ? nullptr : user_data->push_clip_glyph); } void push_clip_glyph (void *paint_data, hb_codepoint_t glyph, hb_font_t *font) diff -Nru harfbuzz-8.0.1/src/hb-priority-queue.hh harfbuzz-8.3.0/src/hb-priority-queue.hh --- harfbuzz-8.0.1/src/hb-priority-queue.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-priority-queue.hh 2023-11-11 14:08:45.000000000 +0000 @@ -42,10 +42,11 @@ * priority of its children. The heap is stored in an array, with the * children of node i stored at indices 2i + 1 and 2i + 2. */ +template struct hb_priority_queue_t { private: - typedef hb_pair_t item_t; + typedef hb_pair_t item_t; hb_vector_t heap; public: @@ -54,7 +55,13 @@ bool in_error () const { return heap.in_error (); } - void insert (int64_t priority, unsigned value) + bool alloc (unsigned size) + { return heap.alloc (size); } + +#ifndef HB_OPTIMIZE_SIZE + HB_ALWAYS_INLINE +#endif + void insert (K priority, unsigned value) { heap.push (item_t (priority, value)); if (unlikely (heap.in_error ())) return; @@ -139,6 +146,7 @@ goto repeat; } + HB_ALWAYS_INLINE void bubble_up (unsigned index) { repeat: diff -Nru harfbuzz-8.0.1/src/hb-repacker.hh harfbuzz-8.3.0/src/hb-repacker.hh --- harfbuzz-8.0.1/src/hb-repacker.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-repacker.hh 2023-11-11 14:08:45.000000000 +0000 @@ -79,7 +79,12 @@ // pass after this processing is done. Not super necessary as splits are // only done where overflow is likely, so de-dup probably will get undone // later anyways. - for (unsigned lookup_index : ext_context.lookups.keys ()) + + // The loop below can modify the contents of ext_context.lookups if new subtables are added + // to a lookup during a split. So save the initial set of lookup indices so the iteration doesn't + // risk access free'd memory if ext_context.lookups gets resized. + hb_set_t lookup_indices(ext_context.lookups.keys ()); + for (unsigned lookup_index : lookup_indices) { graph::Lookup* lookup = ext_context.lookups.get(lookup_index); if (!lookup->split_subtables_if_needed (ext_context, lookup_index)) @@ -114,11 +119,15 @@ // TODO(grieger): skip this for the 24 bit case. if (!ext_context.lookups) return true; + unsigned total_lookup_table_sizes = 0; hb_vector_t lookup_sizes; lookup_sizes.alloc (ext_context.lookups.get_population (), true); for (unsigned lookup_index : ext_context.lookups.keys ()) { + const auto& lookup_v = ext_context.graph.vertices_[lookup_index]; + total_lookup_table_sizes += lookup_v.table_size (); + const graph::Lookup* lookup = ext_context.lookups.get(lookup_index); hb_set_t visited; lookup_sizes.push (lookup_size_t { @@ -131,14 +140,16 @@ lookup_sizes.qsort (); size_t lookup_list_size = ext_context.graph.vertices_[ext_context.lookup_list_index].table_size (); - size_t l2_l3_size = lookup_list_size; // Lookup List + Lookups - size_t l3_l4_size = 0; // Lookups + SubTables + size_t l2_l3_size = lookup_list_size + total_lookup_table_sizes; // Lookup List + Lookups + size_t l3_l4_size = total_lookup_table_sizes; // Lookups + SubTables size_t l4_plus_size = 0; // SubTables + their descendants // Start by assuming all lookups are using extension subtables, this size will be removed later // if it's decided to not make a lookup extension. for (auto p : lookup_sizes) { + // TODO(garretrieger): this overestimates the extension subtables size because some extension subtables may be + // reused. However, we can't correct this until we have connected component analysis in place. unsigned subtables_size = p.num_subtables * 8; l3_l4_size += subtables_size; l4_plus_size += subtables_size; @@ -159,8 +170,7 @@ size_t subtables_size = ext_context.graph.find_subgraph_size (p.lookup_index, visited, 1) - lookup_size; size_t remaining_size = p.size - subtables_size - lookup_size; - l2_l3_size += lookup_size; - l3_l4_size += lookup_size + subtables_size; + l3_l4_size += subtables_size; l3_l4_size -= p.num_subtables * 8; l4_plus_size += subtables_size + remaining_size; diff -Nru harfbuzz-8.0.1/src/hb-sanitize.hh harfbuzz-8.3.0/src/hb-sanitize.hh --- harfbuzz-8.0.1/src/hb-sanitize.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-sanitize.hh 2023-11-11 14:08:45.000000000 +0000 @@ -134,7 +134,10 @@ const char *get_name () { return "SANITIZE"; } template bool may_dispatch (const T *obj HB_UNUSED, const F *format) - { return format->sanitize (this); } + { + return format->sanitize (this) && + hb_barrier (); + } static return_t default_return_value () { return true; } static return_t no_dispatch_return_value () { return false; } bool stop_sublookup_iteration (const return_t r) const { return !r; } @@ -258,7 +261,8 @@ this->max_ops = -1; return false; } - return (this->max_ops -= (int) count) > 0; + this->max_ops -= (int) count; + return true; } #ifndef HB_OPTIMIZE_SIZE @@ -381,6 +385,9 @@ } template +#ifndef HB_OPTIMIZE_SIZE + HB_ALWAYS_INLINE +#endif bool check_struct (const Type *obj) const { if (sizeof (uintptr_t) == sizeof (uint32_t)) @@ -449,7 +456,7 @@ edit_count = 0; sane = t->sanitize (this); if (edit_count) { - DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILLING", edit_count); + DEBUG_MSG_FUNC (SANITIZE, start, "requested %u edits in second round; FAILING", edit_count); sane = false; } } diff -Nru harfbuzz-8.0.1/src/hb-set.cc harfbuzz-8.3.0/src/hb-set.cc --- harfbuzz-8.0.1/src/hb-set.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-set.cc 2023-11-11 14:08:45.000000000 +0000 @@ -200,7 +200,7 @@ void hb_set_clear (hb_set_t *set) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->clear (); } @@ -251,7 +251,7 @@ hb_set_add (hb_set_t *set, hb_codepoint_t codepoint) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->add (codepoint); } @@ -272,7 +272,7 @@ const hb_codepoint_t *sorted_codepoints, unsigned int num_codepoints) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->add_sorted_array (sorted_codepoints, num_codepoints, sizeof(hb_codepoint_t)); @@ -294,7 +294,7 @@ hb_codepoint_t first, hb_codepoint_t last) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->add_range (first, last); } @@ -311,7 +311,7 @@ hb_set_del (hb_set_t *set, hb_codepoint_t codepoint) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->del (codepoint); } @@ -334,7 +334,7 @@ hb_codepoint_t first, hb_codepoint_t last) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->del_range (first, last); } @@ -405,7 +405,7 @@ hb_set_set (hb_set_t *set, const hb_set_t *other) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->set (*other); } @@ -422,7 +422,7 @@ hb_set_union (hb_set_t *set, const hb_set_t *other) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->union_ (*other); } @@ -439,7 +439,7 @@ hb_set_intersect (hb_set_t *set, const hb_set_t *other) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->intersect (*other); } @@ -456,7 +456,7 @@ hb_set_subtract (hb_set_t *set, const hb_set_t *other) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->subtract (*other); } @@ -474,7 +474,7 @@ hb_set_symmetric_difference (hb_set_t *set, const hb_set_t *other) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->symmetric_difference (*other); } @@ -489,7 +489,7 @@ void hb_set_invert (hb_set_t *set) { - /* Immutible-safe. */ + /* Immutable-safe. */ set->invert (); } diff -Nru harfbuzz-8.0.1/src/hb-set.hh harfbuzz-8.3.0/src/hb-set.hh --- harfbuzz-8.0.1/src/hb-set.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-set.hh 2023-11-11 14:08:45.000000000 +0000 @@ -35,6 +35,8 @@ template struct hb_sparseset_t { + static constexpr bool realloc_move = true; + hb_object_header_t header; impl_t s; diff -Nru harfbuzz-8.0.1/src/hb-subset-cff1.cc harfbuzz-8.3.0/src/hb-subset-cff1.cc --- harfbuzz-8.0.1/src/hb-subset-cff1.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-cff1.cc 2023-11-11 14:08:45.000000000 +0000 @@ -620,6 +620,12 @@ drop_hints = plan->flags & HB_SUBSET_FLAGS_NO_HINTING; desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE; + #ifdef HB_EXPERIMENTAL_API + min_charstrings_off_size = (plan->flags & HB_SUBSET_FLAGS_IFTB_REQUIREMENTS) ? 4 : 0; + #else + min_charstrings_off_size = 0; + #endif + subset_charset = !acc.is_predef_charset (); if (!subset_charset) /* check whether the subset renumbers any glyph IDs */ @@ -778,13 +784,43 @@ unsigned int topDictModSIDs[name_dict_values_t::ValCount]; bool desubroutinize = false; + + unsigned min_charstrings_off_size = 0; }; } // namespace OT +static bool _serialize_cff1_charstrings (hb_serialize_context_t *c, + struct OT::cff1_subset_plan &plan, + const OT::cff1::accelerator_subset_t &acc) +{ + c->push (); + + unsigned data_size = 0; + unsigned total_size = CFF1CharStrings::total_size (plan.subset_charstrings, &data_size, plan.min_charstrings_off_size); + if (unlikely (!c->start_zerocopy (total_size))) + return false; + + auto *cs = c->start_embed (); + if (unlikely (!cs->serialize (c, plan.subset_charstrings, &data_size, plan.min_charstrings_off_size))) { + c->pop_discard (); + return false; + } + + plan.info.char_strings_link = c->pop_pack (false); + return true; +} + bool OT::cff1::accelerator_subset_t::serialize (hb_serialize_context_t *c, struct OT::cff1_subset_plan &plan) const { + /* push charstrings onto the object stack first which will ensure it packs as the last + object in the table. Keeping the chastrings last satisfies the requirements for patching + via IFTB. If this ordering needs to be changed in the future, charstrings should be left + at the end whenever HB_SUBSET_FLAGS_ITFB_REQUIREMENTS is enabled. */ + if (!_serialize_cff1_charstrings(c, plan, *this)) + return false; + /* private dicts & local subrs */ for (int i = (int) privateDicts.length; --i >= 0 ;) { @@ -823,25 +859,6 @@ if (!is_CID ()) plan.info.privateDictInfo = plan.fontdicts_mod[0].privateDictInfo; - /* CharStrings */ - { - c->push (); - - unsigned data_size = 0; - unsigned total_size = CFF1CharStrings::total_size (plan.subset_charstrings, &data_size); - if (unlikely (!c->start_zerocopy (total_size))) - return false; - - auto *cs = c->start_embed (); - if (likely (cs->serialize (c, plan.subset_charstrings, &data_size))) - plan.info.char_strings_link = c->pop_pack (false); - else - { - c->pop_discard (); - return false; - } - } - /* FDArray (FD Index) */ if (fdArray != &Null (CFF1FDArray)) { diff -Nru harfbuzz-8.0.1/src/hb-subset-cff2.cc harfbuzz-8.3.0/src/hb-subset-cff2.cc --- harfbuzz-8.0.1/src/hb-subset-cff2.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-cff2.cc 2023-11-11 14:08:45.000000000 +0000 @@ -439,6 +439,12 @@ desubroutinize = plan->flags & HB_SUBSET_FLAGS_DESUBROUTINIZE || pinned; // For instancing we need this path + #ifdef HB_EXPERIMENTAL_API + min_charstrings_off_size = (plan->flags & HB_SUBSET_FLAGS_IFTB_REQUIREMENTS) ? 4 : 0; + #else + min_charstrings_off_size = 0; + #endif + if (desubroutinize) { /* Flatten global & local subrs */ @@ -510,14 +516,45 @@ bool drop_hints = false; bool desubroutinize = false; + + unsigned min_charstrings_off_size = 0; }; } // namespace OT +static bool _serialize_cff2_charstrings (hb_serialize_context_t *c, + cff2_subset_plan &plan, + const OT::cff2::accelerator_subset_t &acc) +{ + c->push (); + + unsigned data_size = 0; + unsigned total_size = CFF2CharStrings::total_size (plan.subset_charstrings, &data_size, plan.min_charstrings_off_size); + if (unlikely (!c->start_zerocopy (total_size))) + return false; + + auto *cs = c->start_embed (); + if (unlikely (!cs->serialize (c, plan.subset_charstrings, &data_size, plan.min_charstrings_off_size))) + { + c->pop_discard (); + return false; + } + + plan.info.char_strings_link = c->pop_pack (false); + return true; +} + bool OT::cff2::accelerator_subset_t::serialize (hb_serialize_context_t *c, struct cff2_subset_plan &plan, hb_array_t normalized_coords) const { + /* push charstrings onto the object stack first which will ensure it packs as the last + object in the table. Keeping the chastrings last satisfies the requirements for patching + via IFTB. If this ordering needs to be changed in the future, charstrings should be left + at the end whenever HB_SUBSET_FLAGS_ITFB_REQUIREMENTS is enabled. */ + if (!_serialize_cff2_charstrings(c, plan, *this)) + return false; + /* private dicts & local subrs */ hb_vector_t private_dict_infos; if (unlikely (!private_dict_infos.resize (plan.subset_fdcount))) return false; @@ -556,25 +593,6 @@ } } - /* CharStrings */ - { - c->push (); - - unsigned data_size = 0; - unsigned total_size = CFF2CharStrings::total_size (plan.subset_charstrings, &data_size); - if (unlikely (!c->start_zerocopy (total_size))) - return false; - - auto *cs = c->start_embed (); - if (likely (cs->serialize (c, plan.subset_charstrings, &data_size))) - plan.info.char_strings_link = c->pop_pack (false); - else - { - c->pop_discard (); - return false; - } - } - /* FDSelect */ if (fdSelect != &Null (CFF2FDSelect)) { diff -Nru harfbuzz-8.0.1/src/hb-subset-input.cc harfbuzz-8.3.0/src/hb-subset-input.cc --- harfbuzz-8.0.1/src/hb-subset-input.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-input.cc 2023-11-11 14:08:45.000000000 +0000 @@ -69,14 +69,11 @@ sets.drop_tables->add_array (default_drop_tables, ARRAY_LENGTH (default_drop_tables)); hb_tag_t default_no_subset_tables[] = { - HB_TAG ('a', 'v', 'a', 'r'), HB_TAG ('g', 'a', 's', 'p'), HB_TAG ('f', 'p', 'g', 'm'), HB_TAG ('p', 'r', 'e', 'p'), HB_TAG ('V', 'D', 'M', 'X'), HB_TAG ('D', 'S', 'I', 'G'), - HB_TAG ('M', 'V', 'A', 'R'), - HB_TAG ('c', 'v', 'a', 'r'), }; sets.no_subset_tables->add_array (default_no_subset_tables, ARRAY_LENGTH (default_no_subset_tables)); @@ -126,6 +123,12 @@ //justify HB_TAG ('j', 'a', 'l', 't'), // HarfBuzz doesn't use; others might + //East Asian spacing + HB_TAG ('c', 'h', 'w', 's'), + HB_TAG ('v', 'c', 'h', 'w'), + HB_TAG ('h', 'a', 'l', 't'), + HB_TAG ('v', 'h', 'a', 'l'), + //private HB_TAG ('H', 'a', 'r', 'f'), HB_TAG ('H', 'A', 'R', 'F'), @@ -480,16 +483,21 @@ * @axis_tag: Tag of the axis * @axis_min_value: Minimum value of the axis variation range to set * @axis_max_value: Maximum value of the axis variation range to set + * @axis_def_value: Default value of the axis variation range to set, in case of + * null, it'll be determined automatically * * Restricting the range of variation on an axis in the given subset input object. - * New min/max values will be clamped if they're not within the fvar axis range. + * New min/default/max values will be clamped if they're not within the fvar axis range. + * If the new default value is null: + * If the fvar axis default value is within the new range, then new default + * value is the same as original default value. * If the fvar axis default value is not within the new range, the new default * value will be changed to the new min or max value, whichever is closer to the fvar * axis default. * - * Note: input min value can not be bigger than input max value - * Note: currently this API does not support changing axis limits yet.It'd be only - * used internally for setting axis limits in the internal data structures + * Note: input min value can not be bigger than input max value. If the input + * default value is not within the new min/max range, it'll be clamped. + * Note: currently it supports gvar and cvar tables only. * * Return value: `true` if success, `false` otherwise * @@ -500,7 +508,8 @@ hb_face_t *face, hb_tag_t axis_tag, float axis_min_value, - float axis_max_value) + float axis_max_value, + float *axis_def_value /* IN, maybe NULL */) { if (axis_min_value > axis_max_value) return false; @@ -511,7 +520,8 @@ float new_min_val = hb_clamp(axis_min_value, axis_info.min_value, axis_info.max_value); float new_max_val = hb_clamp(axis_max_value, axis_info.min_value, axis_info.max_value); - float new_default_val = hb_clamp(axis_info.default_value, new_min_val, new_max_val); + float new_default_val = axis_def_value ? *axis_def_value : axis_info.default_value; + new_default_val = hb_clamp(new_default_val, new_min_val, new_max_val); return input->axes_location.set (axis_tag, Triple (new_min_val, new_default_val, new_max_val)); } #endif diff -Nru harfbuzz-8.0.1/src/hb-subset-instancer-solver.cc harfbuzz-8.3.0/src/hb-subset-instancer-solver.cc --- harfbuzz-8.0.1/src/hb-subset-instancer-solver.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-instancer-solver.cc 2023-11-11 14:08:45.000000000 +0000 @@ -168,12 +168,14 @@ * | * crossing */ - if (gain > outGain) + if (gain >= outGain) { + // Note that this is the branch taken if both gain and outGain are 0. + // Crossing point on the axis. float crossing = peak + (1 - gain) * (upper - peak); - Triple loc{axisDef, peak, crossing}; + Triple loc{hb_max (lower, axisDef), peak, crossing}; float scalar = 1.f; // The part before the crossing point. @@ -253,9 +255,8 @@ * axisDef axisMax */ float newUpper = peak + (1 - gain) * (upper - peak); - // I feel like the first condition is always true because - // outGain >= gain. - if (axisMax <= newUpper && newUpper <= axisDef + (axisMax - axisDef) * 2) + assert (axisMax <= newUpper); // Because outGain > gain + if (newUpper <= axisDef + (axisMax - axisDef) * 2) { upper = newUpper; if (!negative && axisDef + (axisMax - axisDef) * MAX_F2DOT14 < upper) @@ -362,38 +363,47 @@ return out; } -/* Normalizes value based on a min/default/max triple. */ -static inline float normalizeValue (float v, const Triple &triple, bool extrapolate = false) +static inline TripleDistances _reverse_triple_distances (const TripleDistances &v) +{ return TripleDistances (v.positive, v.negative); } + +float renormalizeValue (float v, const Triple &triple, + const TripleDistances &triple_distances, bool extrapolate) { - /* - >>> normalizeValue(400, (100, 400, 900)) - 0.0 - >>> normalizeValue(100, (100, 400, 900)) - -1.0 - >>> normalizeValue(650, (100, 400, 900)) - 0.5 - */ float lower = triple.minimum, def = triple.middle, upper = triple.maximum; assert (lower <= def && def <= upper); if (!extrapolate) v = hb_max (hb_min (v, upper), lower); - if ((v == def) || (lower == upper)) + if (v == def) return 0.f; - if ((v < def && lower != def) || (v > def && upper == def)) + if (def < 0.f) + return -renormalizeValue (-v, _reverse_negate (triple), + _reverse_triple_distances (triple_distances), extrapolate); + + /* default >= 0 and v != default */ + if (v > def) + return (v - def) / (upper - def); + + /* v < def */ + if (lower >= 0.f) return (v - def) / (def - lower); + + /* lower < 0 and v < default */ + float total_distance = triple_distances.negative * (-lower) + triple_distances.positive * def; + + float v_distance; + if (v >= 0.f) + v_distance = (def - v) * triple_distances.positive; else - { - assert ((v > def && upper != def) || - (v < def && lower == def)); - return (v - def) / (upper - def); - } + v_distance = (-v) * triple_distances.negative + triple_distances.positive * def; + + return (-v_distance) /total_distance; } result_t -rebase_tent (Triple tent, Triple axisLimit) +rebase_tent (Triple tent, Triple axisLimit, TripleDistances axis_triple_distances) { assert (-1.f <= axisLimit.minimum && axisLimit.minimum <= axisLimit.middle && axisLimit.middle <= axisLimit.maximum && axisLimit.maximum <= +1.f); assert (-2.f <= tent.minimum && tent.minimum <= tent.middle && tent.middle <= tent.maximum && tent.maximum <= +2.f); @@ -401,7 +411,7 @@ result_t sols = _solve (tent, axisLimit); - auto n = [&axisLimit] (float v) { return normalizeValue (v, axisLimit, true); }; + auto n = [&axisLimit, &axis_triple_distances] (float v) { return renormalizeValue (v, axisLimit, axis_triple_distances); }; result_t out; for (auto &p : sols) diff -Nru harfbuzz-8.0.1/src/hb-subset-instancer-solver.hh harfbuzz-8.3.0/src/hb-subset-instancer-solver.hh --- harfbuzz-8.0.1/src/hb-subset-instancer-solver.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-instancer-solver.hh 2023-11-11 14:08:45.000000000 +0000 @@ -27,6 +27,21 @@ #include "hb.hh" +/* pre-normalized distances */ +struct TripleDistances +{ + TripleDistances (): negative (1.f), positive (1.f) {} + TripleDistances (float neg_, float pos_): negative (neg_), positive (pos_) {} + TripleDistances (float min, float default_, float max) + { + negative = default_ - min; + positive = max - default_; + } + + float negative; + float positive; +}; + struct Triple { Triple () : @@ -66,6 +81,7 @@ return current; } + float minimum; float middle; float maximum; @@ -74,6 +90,12 @@ using result_item_t = hb_pair_t; using result_t = hb_vector_t; +/* renormalize a normalized value v to the range of an axis, + * considering the prenormalized distances as well as the new axis limits. + * Ported from fonttools */ +HB_INTERNAL float renormalizeValue (float v, const Triple &triple, + const TripleDistances &triple_distances, + bool extrapolate = true); /* Given a tuple (lower,peak,upper) "tent" and new axis limits * (axisMin,axisDefault,axisMax), solves how to represent the tent * under the new axis configuration. All values are in normalized @@ -85,6 +107,6 @@ * If tent value is Triple{}, that is a special deltaset that should * be always-enabled (called "gain"). */ -HB_INTERNAL result_t rebase_tent (Triple tent, Triple axisLimit); +HB_INTERNAL result_t rebase_tent (Triple tent, Triple axisLimit, TripleDistances axis_triple_distances); #endif /* HB_SUBSET_INSTANCER_SOLVER_HH */ diff -Nru harfbuzz-8.0.1/src/hb-subset-plan-member-list.hh harfbuzz-8.3.0/src/hb-subset-plan-member-list.hh --- harfbuzz-8.0.1/src/hb-subset-plan-member-list.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-plan-member-list.hh 2023-11-11 14:08:45.000000000 +0000 @@ -70,6 +70,9 @@ HB_SUBSET_PLAN_MEMBER (hb_map_t, gsub_lookups) HB_SUBSET_PLAN_MEMBER (hb_map_t, gpos_lookups) +//use_mark_sets mapping: old->new +HB_SUBSET_PLAN_MEMBER (hb_map_t, used_mark_sets_map) + //active langsys we'd like to retain HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(>), gsub_langsys) HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(>), gpos_langsys) @@ -87,12 +90,21 @@ HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(), gsub_feature_substitutes_map) HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(), gpos_feature_substitutes_map) +// old feature_indexes set, used to reinstate the old features +HB_SUBSET_PLAN_MEMBER (hb_set_t, gsub_old_features) +HB_SUBSET_PLAN_MEMBER (hb_set_t, gpos_old_features) + +//feature_index->pair of (address of old feature, feature tag), used for inserting a catch all record +//if necessary +HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E()>), gsub_old_feature_idx_tag_map) +HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E()>), gpos_old_feature_idx_tag_map) + //active layers/palettes we'd like to retain HB_SUBSET_PLAN_MEMBER (hb_map_t, colrv1_layers) HB_SUBSET_PLAN_MEMBER (hb_map_t, colr_palettes) //Old layout item variation index -> (New varidx, delta) mapping -HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E()>), layout_variation_idx_delta_map) +HB_SUBSET_PLAN_MEMBER (mutable hb_hashmap_t E()>), layout_variation_idx_delta_map) //gdef varstore retained varidx mapping HB_SUBSET_PLAN_MEMBER (hb_vector_t, gdef_varstore_inner_maps) @@ -105,12 +117,16 @@ //user specified axes range map HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(), user_axes_location) +//axis->TripleDistances map (distances in the pre-normalized space) +HB_SUBSET_PLAN_MEMBER (hb_hashmap_t E(), axes_triple_distances) //retained old axis index -> new axis index mapping in fvar axis array HB_SUBSET_PLAN_MEMBER (hb_map_t, axes_index_map) //axis_index->axis_tag mapping in fvar axis array HB_SUBSET_PLAN_MEMBER (hb_map_t, axes_old_index_tag_map) +//vector of retained axis tags in the order of axes given in the 'fvar' table +HB_SUBSET_PLAN_MEMBER (hb_vector_t, axis_tags) //hmtx metrics map: new gid->(advance, lsb) HB_SUBSET_PLAN_MEMBER (mutable hb_hashmap_t E()>), hmtx_map) @@ -121,6 +137,9 @@ //boundsHeight map: new gid->boundsHeight, boundsHeight=yMax - yMin HB_SUBSET_PLAN_MEMBER (mutable hb_vector_t, bounds_height_vec) +//map: new_gid -> contour points vector +HB_SUBSET_PLAN_MEMBER (mutable hb_hashmap_t E(), new_gid_contour_points_map) + #ifdef HB_EXPERIMENTAL_API // name table overrides map: hb_ot_name_record_ids_t-> name string new value or // None to indicate should remove diff -Nru harfbuzz-8.0.1/src/hb-subset-plan.cc harfbuzz-8.3.0/src/hb-subset-plan.cc --- harfbuzz-8.0.1/src/hb-subset-plan.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-plan.cc 2023-11-11 14:08:45.000000000 +0000 @@ -150,7 +150,8 @@ hb_set_t *feature_indices, /* OUT */ hb_hashmap_t> *feature_record_cond_idx_map, /* OUT */ hb_hashmap_t *feature_substitutes_map, /* OUT */ - bool& insert_catch_all_feature_variation_record) + hb_set_t& catch_all_record_feature_idxes, /* OUT */ + hb_hashmap_t>& catch_all_record_idx_feature_map /* OUT */) { unsigned num_features = table.get_feature_count (); hb_vector_t features; @@ -186,7 +187,7 @@ &plan->axes_location, feature_record_cond_idx_map, feature_substitutes_map, - insert_catch_all_feature_variation_record, + catch_all_record_feature_idxes, feature_indices, false, false, @@ -208,17 +209,25 @@ f->add_lookup_indexes_to (lookup_indices); } +#ifndef HB_NO_VAR + if (catch_all_record_feature_idxes) + { + for (unsigned feature_index : catch_all_record_feature_idxes) + { + const OT::Feature& f = table.get_feature (feature_index); + f.add_lookup_indexes_to (lookup_indices); + const void *tag = reinterpret_cast (&(table.get_feature_list ().get_tag (feature_index))); + catch_all_record_idx_feature_map.set (feature_index, hb_pair (&f, tag)); + } + } + // If all axes are pinned then all feature variations will be dropped so there's no need // to collect lookups from them. if (!plan->all_axes_pinned) - { - // TODO(qxliu76): this collection doesn't work correctly for feature variations that are dropped - // but not applied. The collection will collect and retain the lookup indices - // associated with those dropped but not activated rules. Since partial instancing - // isn't yet supported this isn't an issue yet but will need to be fixed for - // partial instancing. - table.feature_variation_collect_lookups (feature_indices, feature_substitutes_map, lookup_indices); - } + table.feature_variation_collect_lookups (feature_indices, + plan->user_axes_location.is_empty () ? nullptr: feature_record_cond_idx_map, + lookup_indices); +#endif } @@ -302,7 +311,8 @@ script_langsys_map *langsys_map, hb_hashmap_t> *feature_record_cond_idx_map, hb_hashmap_t *feature_substitutes_map, - bool& insert_catch_all_feature_variation_record) + hb_set_t &catch_all_record_feature_idxes, + hb_hashmap_t>& catch_all_record_idx_feature_map) { hb_blob_ptr_t table = plan->source_table (); hb_tag_t table_tag = table->tableTag; @@ -313,7 +323,8 @@ &feature_indices, feature_record_cond_idx_map, feature_substitutes_map, - insert_catch_all_feature_variation_record); + catch_all_record_feature_idxes, + catch_all_record_idx_feature_map); if (table_tag == HB_OT_TAG_GSUB && !(plan->flags & HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE)) hb_ot_layout_lookups_substitute_closure (plan->source, @@ -399,34 +410,20 @@ return; } - const OT::VariationStore *var_store = nullptr; hb_set_t varidx_set; - float *store_cache = nullptr; - bool collect_delta = plan->pinned_at_default ? false : true; - if (collect_delta) - { - if (gdef->has_var_store ()) - { - var_store = &(gdef->get_var_store ()); - store_cache = var_store->create_cache (); - } - } - OT::hb_collect_variation_indices_context_t c (&varidx_set, - &plan->layout_variation_idx_delta_map, - plan->normalized_coords ? &(plan->normalized_coords) : nullptr, - var_store, &plan->_glyphset_gsub, - &plan->gpos_lookups, - store_cache); + &plan->gpos_lookups); gdef->collect_variation_indices (&c); if (hb_ot_layout_has_positioning (plan->source)) gpos->collect_variation_indices (&c); - var_store->destroy_cache (store_cache); - - gdef->remap_layout_variation_indices (&varidx_set, &plan->layout_variation_idx_delta_map); + gdef->remap_layout_variation_indices (&varidx_set, + plan->normalized_coords, + !plan->pinned_at_default, + plan->all_axes_pinned, + &plan->layout_variation_idx_delta_map); unsigned subtable_count = gdef->has_var_store () ? gdef->get_var_store ().get_sub_table_count () : 0; _generate_varstore_inner_maps (varidx_set, subtable_count, plan->gdef_varstore_inner_maps); @@ -479,6 +476,24 @@ math.destroy (); } +static inline void +_remap_used_mark_sets (hb_subset_plan_t *plan, + hb_map_t& used_mark_sets_map) +{ + hb_blob_ptr_t gdef = plan->source_table (); + + if (!gdef->has_data () || !gdef->has_mark_glyph_sets ()) + { + gdef.destroy (); + return; + } + + hb_set_t used_mark_sets; + gdef->get_mark_glyph_sets ().collect_used_mark_sets (plan->_glyphset_gsub, used_mark_sets); + gdef.destroy (); + + _remap_indexes (&used_mark_sets, &used_mark_sets_map); +} static inline void _remove_invalid_gids (hb_set_t *glyphs, @@ -592,24 +607,31 @@ else { plan->codepoint_to_glyph->alloc (cmap_unicodes->get_population ()); - for (hb_codepoint_t cp : *cmap_unicodes) + hb_codepoint_t first = HB_SET_VALUE_INVALID, last = HB_SET_VALUE_INVALID; + for (; cmap_unicodes->next_range (&first, &last); ) { - hb_codepoint_t gid = (*unicode_glyphid_map)[cp]; - if (!unicodes->has (cp) && !glyphs->has (gid)) - continue; + for (unsigned cp = first; cp <= last; cp++) + { + hb_codepoint_t gid = (*unicode_glyphid_map)[cp]; + if (!unicodes->has (cp) && !glyphs->has (gid)) + continue; - plan->codepoint_to_glyph->set (cp, gid); - plan->unicode_to_new_gid_list.push (hb_pair (cp, gid)); + plan->codepoint_to_glyph->set (cp, gid); + plan->unicode_to_new_gid_list.push (hb_pair (cp, gid)); + } } } /* Add gids which where requested, but not mapped in cmap */ unsigned num_glyphs = plan->source->get_num_glyphs (); - for (hb_codepoint_t gid : *glyphs) + hb_codepoint_t first = HB_SET_VALUE_INVALID, last = HB_SET_VALUE_INVALID; + for (; glyphs->next_range (&first, &last); ) { - if (gid >= num_glyphs) + if (first >= num_glyphs) break; - plan->_glyphset_gsub.add (gid); + if (last >= num_glyphs) + last = num_glyphs - 1; + plan->_glyphset_gsub.add_range (first, last); } } @@ -725,7 +747,8 @@ &plan->gsub_langsys, &plan->gsub_feature_record_cond_idx_map, &plan->gsub_feature_substitutes_map, - plan->gsub_insert_catch_all_feature_variation_rec); + plan->gsub_old_features, + plan->gsub_old_feature_idx_tag_map); if (!drop_tables->has (HB_OT_TAG_GPOS)) _closure_glyphs_lookups_features ( @@ -736,7 +759,8 @@ &plan->gpos_langsys, &plan->gpos_feature_record_cond_idx_map, &plan->gpos_feature_substitutes_map, - plan->gpos_insert_catch_all_feature_variation_rec); + plan->gpos_old_features, + plan->gpos_old_feature_idx_tag_map); #endif _remove_invalid_gids (&plan->_glyphset_gsub, plan->source->get_num_glyphs ()); @@ -825,12 +849,12 @@ if (retain_gids) { - DEBUG_MSG (SUBSET, nullptr, + DEBUG_MSG (SUBSET, nullptr, "HB_SUBSET_FLAGS_RETAIN_GIDS cannot be set if " "a custom glyph mapping has been provided."); return false; } - + hb_codepoint_t max_glyph = 0; hb_set_t remaining; for (auto old_gid : all_gids_to_retain->iter ()) @@ -882,9 +906,11 @@ *num_glyphs = max_glyph + 1; } + reverse_glyph_map->alloc (reverse_glyph_map->get_population () + new_to_old_gid_list->length); + hb_iter (new_to_old_gid_list) | hb_sink (reverse_glyph_map) ; + glyph_map->alloc (glyph_map->get_population () + new_to_old_gid_list->length); + hb_iter (new_to_old_gid_list) | hb_map (&hb_codepoint_pair_t::reverse) | hb_sink (glyph_map) @@ -924,15 +950,18 @@ { axis_not_pinned = true; plan->axes_index_map.set (old_axis_idx, new_axis_idx); + plan->axis_tags.push (axis_tag); new_axis_idx++; } - if (plan->user_axes_location.has (axis_tag)) + Triple *axis_range; + if (plan->user_axes_location.has (axis_tag, &axis_range)) { - Triple axis_range = plan->user_axes_location.get (axis_tag); - int normalized_min = axis.normalize_axis_value (axis_range.minimum); - int normalized_default = axis.normalize_axis_value (axis_range.middle); - int normalized_max = axis.normalize_axis_value (axis_range.maximum); + plan->axes_triple_distances.set (axis_tag, axis.get_triple_distances ()); + + int normalized_min = axis.normalize_axis_value (axis_range->minimum); + int normalized_default = axis.normalize_axis_value (axis_range->middle); + int normalized_max = axis.normalize_axis_value (axis_range->maximum); if (has_avar && old_axis_idx < avar_axis_count) { @@ -940,9 +969,9 @@ normalized_default = seg_maps->map (normalized_default); normalized_max = seg_maps->map (normalized_max); } - plan->axes_location.set (axis_tag, Triple (static_cast (normalized_min), - static_cast (normalized_default), - static_cast (normalized_max))); + plan->axes_location.set (axis_tag, Triple (static_cast (normalized_min / 16384.f), + static_cast (normalized_default / 16384.f), + static_cast (normalized_max / 16384.f))); if (normalized_default != 0) plan->pinned_at_default = false; @@ -977,7 +1006,7 @@ float *hvar_store_cache = nullptr; if (_hmtx.has_data () && _hmtx.var_table.get_length ()) hvar_store_cache = _hmtx.var_table->get_var_store ().create_cache (); - + OT::vmtx_accelerator_t _vmtx (plan->source); float *vvar_store_cache = nullptr; if (_vmtx.has_data () && _vmtx.var_table.get_length ()) @@ -1040,6 +1069,36 @@ if (vvar_store_cache) _vmtx.var_table->get_var_store ().destroy_cache (vvar_store_cache); } + +static bool +_get_instance_glyphs_contour_points (hb_subset_plan_t *plan) +{ + /* contour_points vector only needed for updating gvar table (infer delta) + * during partial instancing */ + if (plan->user_axes_location.is_empty () || plan->all_axes_pinned) + return true; + + OT::glyf_accelerator_t glyf (plan->source); + + for (auto &_ : plan->new_to_old_gid_list) + { + hb_codepoint_t new_gid = _.first; + contour_point_vector_t all_points; + if (new_gid == 0 && !(plan->flags & HB_SUBSET_FLAGS_NOTDEF_OUTLINE)) + { + if (unlikely (!plan->new_gid_contour_points_map.set (new_gid, all_points))) + return false; + continue; + } + + hb_codepoint_t old_gid = _.second; + if (unlikely (!glyf.glyph_for_gid (old_gid).get_all_points_without_var (plan->source, all_points))) + return false; + if (unlikely (!plan->new_gid_contour_points_map.set (new_gid, all_points))) + return false; + } + return true; +} #endif hb_subset_plan_t::hb_subset_plan_t (hb_face_t *face, @@ -1071,6 +1130,7 @@ user_axes_location = input->axes_location; all_axes_pinned = false; pinned_at_default = true; + has_gdef_varstore = false; #ifdef HB_EXPERIMENTAL_API for (auto _ : input->name_table_overrides) @@ -1090,6 +1150,10 @@ attach_accelerator_data = input->attach_accelerator_data; force_long_loca = input->force_long_loca; +#ifdef HB_EXPERIMENTAL_API + force_long_loca = force_long_loca || (flags & HB_SUBSET_FLAGS_IFTB_REQUIREMENTS); +#endif + if (accel) accelerator = (hb_subset_accelerator_t*) accel; @@ -1138,11 +1202,16 @@ for (auto &v : bounds_height_vec) v = 0xFFFFFFFF; + if (!drop_tables.has (HB_OT_TAG_GDEF)) + _remap_used_mark_sets (this, used_mark_sets_map); + if (unlikely (in_error ())) return; #ifndef HB_NO_VAR _update_instance_metrics_map_from_cff2 (this); + if (!check_success (_get_instance_glyphs_contour_points (this))) + return; #endif if (attach_accelerator_data) diff -Nru harfbuzz-8.0.1/src/hb-subset-plan.hh harfbuzz-8.3.0/src/hb-subset-plan.hh --- harfbuzz-8.0.1/src/hb-subset-plan.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset-plan.hh 2023-11-11 14:08:45.000000000 +0000 @@ -67,6 +67,40 @@ typedef struct head_maxp_info_t head_maxp_info_t; +struct contour_point_t +{ + void init (float x_ = 0.f, float y_ = 0.f, bool is_end_point_ = false) + { flag = 0; x = x_; y = y_; is_end_point = is_end_point_; } + + void transform (const float (&matrix)[4]) + { + float x_ = x * matrix[0] + y * matrix[2]; + y = x * matrix[1] + y * matrix[3]; + x = x_; + } + HB_ALWAYS_INLINE + void translate (const contour_point_t &p) { x += p.x; y += p.y; } + + + float x; + float y; + uint8_t flag; + bool is_end_point; +}; + +struct contour_point_vector_t : hb_vector_t +{ + void extend (const hb_array_t &a) + { + unsigned int old_len = length; + if (unlikely (!resize (old_len + a.length, false))) + return; + auto arrayZ = this->arrayZ + old_len; + unsigned count = a.length; + hb_memcpy (arrayZ, a.arrayZ, count * sizeof (arrayZ[0])); + } +}; + namespace OT { struct cff1_subset_accelerator_t; struct cff2_subset_accelerator_t; @@ -113,6 +147,9 @@ bool gsub_insert_catch_all_feature_variation_rec; bool gpos_insert_catch_all_feature_variation_rec; + // whether GDEF VarStore is retained + mutable bool has_gdef_varstore; + #define HB_SUBSET_PLAN_MEMBER(Type, Name) Type Name; #include "hb-subset-plan-member-list.hh" #undef HB_SUBSET_PLAN_MEMBER diff -Nru harfbuzz-8.0.1/src/hb-subset.cc harfbuzz-8.3.0/src/hb-subset.cc --- harfbuzz-8.0.1/src/hb-subset.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset.cc 2023-11-11 14:08:45.000000000 +0000 @@ -50,10 +50,12 @@ #include "hb-ot-name-table.hh" #include "hb-ot-layout-gsub-table.hh" #include "hb-ot-layout-gpos-table.hh" +#include "hb-ot-var-avar-table.hh" #include "hb-ot-var-cvar-table.hh" #include "hb-ot-var-fvar-table.hh" #include "hb-ot-var-gvar-table.hh" #include "hb-ot-var-hvar-table.hh" +#include "hb-ot-var-mvar-table.hh" #include "hb-ot-math-table.hh" #include "hb-ot-stat-table.hh" #include "hb-repacker.hh" @@ -458,7 +460,10 @@ case HB_OT_TAG_hmtx: case HB_OT_TAG_vmtx: case HB_OT_TAG_maxp: + case HB_OT_TAG_OS2: return !plan->normalized_coords || !pending_subset_tags.has (HB_OT_TAG_glyf); + case HB_OT_TAG_GPOS: + return plan->all_axes_pinned || !pending_subset_tags.has (HB_OT_TAG_GDEF); default: return true; } @@ -513,13 +518,24 @@ case HB_OT_TAG_HVAR: return _subset (plan, buf); case HB_OT_TAG_VVAR: return _subset (plan, buf); #endif + +#ifndef HB_NO_VAR case HB_OT_TAG_fvar: if (plan->user_axes_location.is_empty ()) return _passthrough (plan, tag); return _subset (plan, buf); + case HB_OT_TAG_avar: + if (plan->user_axes_location.is_empty ()) return _passthrough (plan, tag); + return _subset (plan, buf); + case HB_OT_TAG_cvar: + if (plan->user_axes_location.is_empty ()) return _passthrough (plan, tag); + return _subset (plan, buf); + case HB_OT_TAG_MVAR: + if (plan->user_axes_location.is_empty ()) return _passthrough (plan, tag); + return _subset (plan, buf); +#endif + case HB_OT_TAG_STAT: - /*TODO(qxliu): change the condition as we support more complex - * instancing operation*/ - if (plan->all_axes_pinned) return _subset (plan, buf); + if (!plan->user_axes_location.is_empty ()) return _subset (plan, buf); else return _passthrough (plan, tag); case HB_TAG ('c', 'v', 't', ' '): diff -Nru harfbuzz-8.0.1/src/hb-subset.h harfbuzz-8.3.0/src/hb-subset.h --- harfbuzz-8.0.1/src/hb-subset.h 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-subset.h 2023-11-11 14:08:45.000000000 +0000 @@ -73,6 +73,9 @@ * OS/2 will not be recalculated. * @HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE: If set don't perform glyph closure on layout * substitution rules (GSUB). Since: 7.2.0. + * @HB_SUBSET_FLAGS_IFTB_REQUIREMENTS: If set enforce requirements on the output subset + * to allow it to be used with incremental font transfer IFTB patches. Primarily, + * this forces all outline data to use long (32 bit) offsets. Since: EXPERIMENTAL * * List of boolean properties that can be configured on the subset input. * @@ -90,6 +93,9 @@ HB_SUBSET_FLAGS_GLYPH_NAMES = 0x00000080u, HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES = 0x00000100u, HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE = 0x00000200u, +#ifdef HB_EXPERIMENTAL_API + HB_SUBSET_FLAGS_IFTB_REQUIREMENTS = 0x00000400u, +#endif } hb_subset_flags_t; /** @@ -181,7 +187,8 @@ hb_face_t *face, hb_tag_t axis_tag, float axis_min_value, - float axis_max_value); + float axis_max_value, + float *axis_def_value); HB_EXTERN hb_bool_t hb_subset_input_override_name_table (hb_subset_input_t *input, diff -Nru harfbuzz-8.0.1/src/hb-ucd-table.hh harfbuzz-8.3.0/src/hb-ucd-table.hh --- harfbuzz-8.0.1/src/hb-ucd-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-ucd-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -4,7 +4,7 @@ * * ./gen-ucd-table.py ucd.nounihan.grouped.xml * - * on file with this description: Unicode 15.0.0 + * on file with this description: Unicode 15.1.0 */ #ifndef HB_UCD_TABLE_HH @@ -1069,7 +1069,7 @@ #ifndef HB_OPTIMIZE_SIZE static const uint8_t -_hb_ucd_u8[17868] = +_hb_ucd_u8[17884] = { 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 7, 7, 7, 7, 11, 12, 13, 13, 13, 14, @@ -1146,13 +1146,13 @@ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,243, 34, 244, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,245, 34, 34, - 34, 34, 34, 34, 34, 34, 34,246,122,122,122,122,122,122,122,122, - 34, 34, 34, 34,247,122,122,122,122,122,122,122,122,122,122,122, - 34, 34, 34, 34, 34, 34,248, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34,249,122,122,122,122,122,122,122,122, - 250,122,251,252,122,122,122,122,122,122,122,122,122,122,122,122, - 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,253, + 34, 34, 34, 34, 34, 34, 34,246, 34, 34, 34, 34,247,122,122,122, + 34, 34, 34, 34,248,122,122,122,122,122,122,122,122,122,122,122, + 34, 34, 34, 34, 34, 34,249, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34,250,122,122,122,122,122,122,122,122, + 251,122,252,253,122,122,122,122,122,122,122,122,122,122,122,122, 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,254, + 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2, 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, @@ -1315,11 +1315,11 @@ 121, 4, 4, 4, 4, 2, 2, 88, 2, 2, 2, 2, 2,120, 2, 2, 108,151, 2, 2, 2, 2, 2, 2, 67, 2,152,148,148,148,153, 44, 67, 67, 67, 67, 67, 55, 67, 67, 67, 67, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 44, 44, - 1, 2,154,155, 4, 4, 4, 4, 4, 67, 4, 4, 4, 4,156,157, - 158,105,105,105,105, 43, 43, 86,159, 40, 40, 67,105,160, 63, 67, - 36, 36, 36, 61, 57,161,162, 69, 36, 36, 36, 36, 36, 63, 40, 69, - 44, 44, 62, 36, 36, 36, 36, 36, 67, 27, 27, 67, 67, 67, 67, 67, + 67, 67, 67, 44, 44, 44, 44, 44, 1, 2,154,155, 4, 4, 4, 4, + 4, 67, 4, 4, 4, 4,156,157,158,105,105,105,105, 43, 43, 86, + 159, 40, 40, 67,105,160, 63, 67, 36, 36, 36, 61, 57,161,162, 69, + 36, 36, 36, 36, 36, 63, 40, 69, 44, 44, 62, 36, 36, 36, 36, 36, + 67, 27, 27, 67, 67, 67, 67, 67, 67, 67, 44, 44, 44, 44, 44, 55, 67, 67, 67, 67, 67, 67, 67, 92, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27,163, 27, 27, 27, 27, 27, 27, 27, 36, 36, 83, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,164, 2, @@ -1487,215 +1487,215 @@ 44, 61, 44, 62, 62, 62, 62, 36, 62, 61, 61, 62, 62, 62, 62, 62, 62, 61, 61, 62, 36, 61, 36, 36, 36, 61, 36, 36, 62, 36, 61, 61, 36, 36, 36, 36, 36, 62, 36, 36, 62, 36, 62, 36, 36, 62, 36, 36, - 8, 44, 44, 44, 44, 44, 44, 44, 55, 67, 67, 67, 67, 67, 67, 67, - 27, 27, 27, 27, 27, 27, 91, 67, 67, 67, 67, 67, 67, 67, 67, 44, - 44, 44, 44, 67, 67, 67, 67, 67, 67, 92, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 67, 92, 44, 44, 44, 67, 44, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 67, 67, 25, 41, 41, 67, 67, 67, 67, 44, 44, 67, 67, - 67, 67, 67, 92, 44, 55, 67, 67, 67, 67, 67, 67, 44, 44, 44, 44, - 67, 67, 67, 67, 67, 67, 67, 55, 67, 67, 67, 44, 44, 44, 44, 67, - 67, 92, 67, 67, 67, 67, 67, 67, 79, 44, 44, 44, 44, 44, 44, 44, - 171,171,171,171,171,171,171, 44,171,171,171,171,171,171,171, 0, - 0, 0, 29, 21, 21, 21, 23, 21, 22, 18, 21, 25, 21, 17, 13, 13, - 25, 25, 25, 21, 21, 9, 9, 9, 9, 22, 21, 18, 24, 16, 24, 5, - 5, 5, 5, 22, 25, 18, 25, 0, 23, 23, 26, 21, 24, 26, 7, 20, - 25, 1, 26, 24, 26, 25, 15, 15, 24, 15, 7, 19, 15, 21, 9, 25, - 9, 5, 5, 25, 5, 9, 5, 7, 7, 7, 9, 8, 8, 5, 7, 5, - 6, 6, 24, 24, 6, 24, 12, 12, 2, 2, 6, 5, 9, 21, 9, 2, - 2, 9, 25, 9, 26, 12, 11, 11, 2, 6, 5, 21, 17, 2, 2, 26, - 26, 23, 2, 12, 17, 12, 21, 12, 12, 21, 7, 2, 2, 7, 7, 21, - 21, 2, 1, 1, 21, 23, 26, 26, 1, 21, 6, 7, 7, 12, 12, 7, - 21, 7, 12, 1, 12, 6, 6, 12, 12, 26, 7, 26, 26, 7, 2, 1, - 12, 2, 6, 2, 24, 7, 7, 6, 1, 12, 12, 10, 10, 10, 10, 12, - 21, 6, 2, 10, 10, 2, 15, 26, 26, 2, 2, 21, 7, 10, 15, 7, - 2, 23, 21, 26, 10, 7, 21, 15, 15, 2, 17, 7, 29, 7, 7, 22, - 18, 2, 14, 14, 14, 7, 10, 21, 17, 21, 11, 12, 5, 2, 5, 6, - 8, 8, 8, 24, 5, 24, 2, 24, 9, 24, 24, 2, 29, 29, 29, 1, - 17, 17, 20, 19, 22, 20, 27, 28, 1, 29, 21, 20, 19, 21, 21, 16, - 16, 21, 25, 22, 18, 21, 21, 29, 1, 2, 15, 6, 18, 6, 23, 2, - 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14, 14, 15, - 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 2, 5, 22, 21, - 21, 22, 18, 17, 26, 6, 7, 14, 17, 22, 18, 18, 26, 14, 17, 6, - 14, 6, 12, 24, 24, 6, 26, 15, 6, 21, 11, 21, 24, 9, 6, 9, - 23, 26, 6, 10, 4, 4, 3, 3, 7, 25, 17, 16, 16, 22, 16, 16, - 25, 17, 25, 2, 25, 24, 2, 15, 12, 15, 14, 2, 21, 14, 7, 15, - 12, 17, 21, 1, 26, 10, 10, 1, 23, 15, 0, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 0, 10, 11, 12, 13, 0, 14, 0, 0, 0, 0, 0, - 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, 0, 0, 0, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, - 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 40, 41, 42, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, - 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, 0, 8, 9, 10, 0, 11, - 12, 13, 14, 15, 16, 17, 16, 18, 16, 19, 16, 19, 16, 19, 0, 19, - 16, 20, 16, 19, 21, 19, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 0, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 0, 0, 47, 0, 0, 0, 48, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 52, - 53, 0, 54, 0, 0, 0, 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, - 58, 0, 0, 59, 60, 61, 62, 63, 0, 0, 64, 65, 0, 0, 0, 66, - 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, - 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, - 0, 0, 75, 76, 0, 77, 78, 0, 0, 79, 80, 0, 81, 62, 0, 82, - 83, 0, 0, 84, 85, 86, 0, 0, 0, 87, 0, 88, 0, 0, 51, 89, - 51, 0, 90, 0, 91, 0, 0, 0, 80, 0, 0, 0, 92, 93, 0, 94, - 95, 96, 97, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 98, 99, 0, - 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0,101,102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,103, 0, 0,104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,105,106, 0, 0,107, 0, 0, 0, 0, 0, 0, - 108, 0,109, 0,102, 0, 0, 0, 0, 0,110,111, 0, 0, 0, 0, - 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0,113, 0,114, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 0, 0, 0, - 0, 9, 10, 11, 12, 0, 0, 0, 0, 13, 0, 0, 14, 15, 0, 16, - 0, 17, 18, 0, 0, 19, 0, 20, 21, 0, 0, 0, 0, 0, 22, 23, - 0, 24, 25, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 29, 30, 31, - 0, 0, 0, 32, 33, 34, 0, 0, 33, 0, 0, 35, 33, 0, 0, 0, - 33, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, - 40, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 43, 0, 44, - 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, - 49, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 57, 58, - 0, 0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 61, 52, 0, 62, 63, - 0, 0, 64, 0, 0, 0, 65, 66, 0, 0, 0, 67, 0, 68, 69, 70, - 71, 72, 1, 73, 0, 74, 75, 76, 0, 0, 77, 78, 0, 0, 0, 79, - 0, 0, 1, 1, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 77, 82, - 0, 83, 0, 0, 0, 0, 0, 78, 84, 0, 85, 0, 52, 0, 1, 78, - 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 0, 88, 57, 0, 0, 0, - 0, 0, 0, 89, 90, 0, 0, 84, 0, 0, 33, 0, 0, 91, 0, 0, - 0, 0, 92, 0, 0, 0, 0, 49, 0, 0, 93, 0, 0, 0, 0, 94, - 95, 0, 0, 96, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, - 0, 0, 0,100,101, 93, 0, 0,102, 0, 0, 0, 84, 0, 0,103, - 0, 0, 0,104,105, 0, 0,106,107, 0, 0, 0, 0, 0, 0,108, - 0, 0,109, 0, 0, 0, 0,110, 33, 0,111,112,113, 35, 0, 0, - 114, 0, 0, 0,115, 0, 0, 0, 0, 0, 0,116, 0, 0,117, 0, - 0, 0, 0,118, 88, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 52, - 119, 0, 0, 0, 0,120, 0, 0,121, 0, 0, 0, 0,119, 0, 0, - 122, 0, 0, 0, 0, 0, 0,123, 0, 0, 0,124, 0, 0, 0,125, - 0,126, 0, 0, 0, 0,127,128,129, 0,130, 0,131, 0, 0, 0, - 132,133,134, 0, 77, 0, 0, 0, 0, 0, 35, 0, 0, 0,135, 0, - 0, 0,136, 0, 0,137, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 4, 4, 8, 9, 10, - 1, 11, 12, 13, 14, 15, 16, 17, 18, 1, 1, 1, 19, 1, 0, 0, - 20, 21, 22, 1, 23, 4, 21, 24, 25, 26, 27, 28, 29, 30, 0, 0, - 1, 1, 31, 0, 0, 0, 32, 33, 34, 35, 1, 36, 37, 0, 0, 0, - 0, 38, 1, 39, 14, 39, 40, 41, 42, 0, 0, 0, 43, 36, 44, 45, - 21, 45, 46, 0, 0, 0, 19, 1, 21, 0, 0, 47, 0, 38, 48, 1, - 1, 49, 49, 50, 0, 0, 51, 0, 0, 0, 52, 1, 0, 0, 38, 14, - 4, 1, 1, 1, 53, 21, 43, 52, 54, 21, 35, 1, 0, 0, 0, 55, - 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, - 0, 0, 61, 62, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 0, - 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 70, 0, - 71, 72, 73, 74, 75, 76, 0, 0, 0, 77, 0, 0, 0, 78, 79, 0, - 0, 0, 0, 47, 0, 0, 0, 49, 0, 80, 0, 0, 0, 62, 0, 0, - 63, 0, 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 0, 19, 84, 0, - 62, 0, 0, 0, 0, 49, 1, 85, 1, 52, 15, 86, 36, 10, 21, 87, - 0, 55, 0, 0, 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 88, 0, - 0, 89, 0, 0, 88, 0, 0, 0, 0, 78, 0, 0, 87, 9, 12, 4, - 90, 8, 91, 47, 0, 58, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1, - 1, 94, 95, 96, 97, 1, 98, 58, 81, 99,100, 4, 58, 0, 0, 0, - 0, 0, 0, 19, 50, 0, 0, 0, 0, 0, 0, 61, 0, 0,101,102, - 0, 0,103, 0, 0, 1, 1, 50, 0, 0, 0, 38, 0, 63, 0, 0, - 0, 0, 0, 62, 0, 0,104, 68, 61, 0, 0, 0, 78, 0, 0, 0, - 105,106, 58, 38, 81, 0, 0, 0, 0, 0, 0,107, 1, 14, 4, 12, - 84, 0, 0, 0, 0, 38, 87, 0, 0, 0, 0,108, 0, 0,109, 61, - 0,110, 0, 0, 0, 1, 0, 0, 0, 0, 19, 58, 0, 0, 0, 51, - 0,111, 14, 52,112, 41, 0, 0, 62, 0, 0, 61, 0, 0,113, 0, - 87, 0, 0, 0, 61, 62, 0, 0, 62, 0, 89, 0, 0,113, 0, 0, - 0, 0,114, 0, 0, 0, 78, 55, 0, 38, 1, 58, 1, 58, 0, 0, - 63, 89, 0, 0,115, 0, 0, 0, 55, 0, 0, 0, 0,115, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 79, 0, 61, 0, 0, 0, 0, 56, 0, - 89, 80, 0, 0, 79, 0, 0, 0, 8, 91, 0, 0, 1, 87, 0, 0, - 116, 0, 0, 0, 0, 0, 0,117, 0,118,119,120,121, 0,104, 4, - 122, 49, 23, 0, 0, 0, 38, 50, 38, 58, 0, 0, 1, 87, 1, 1, - 1, 1, 39, 1, 48,105, 87, 0, 0, 0, 0, 1, 0, 0, 0,123, - 4,122, 0, 0, 0, 1,124, 0, 0, 0, 0, 0,230,230,230,230, - 230,232,220,220,220,220,232,216,220,220,220,220,220,202,202,220, - 220,220,220,202,202,220,220,220, 1, 1, 1, 1, 1,220,220,220, - 220,230,230,230,230,240,230,220,220,220,230,230,230,220,220, 0, - 230,230,230,220,220,220,220,230,232,220,220,230,233,234,234,233, - 234,234,233,230, 0, 0, 0,230, 0,220,230,230,230,230,220,230, - 230,230,222,220,230,230,220,220,230,222,228,230, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24, 25, 0, - 230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27, 28, 29, 30, 31, - 32, 33, 34,230,230,220,220,230,220,230,230,220, 35, 0, 0, 0, - 0, 0,230,230,230, 0, 0,230,230, 0,220,230,230,220, 0, 0, - 0, 36, 0, 0,230,220,230,230,220,220,230,220,220,230,220,230, - 220,230,230, 0, 0,220, 0, 0,230,230, 0,230, 0,230,230,230, - 230,230, 0, 0, 0,220,220,220,230,220,220,220,230,230, 0,220, - 27, 28, 29,230, 7, 0, 0, 0, 0, 9, 0, 0, 0,230,220,230, - 230, 0, 0, 0, 0, 0,230, 0, 0, 84, 91, 0, 0, 0, 0, 9, - 9, 0, 0, 0, 0, 0, 9, 0,103,103, 9, 0,107,107,107,107, - 118,118, 9, 0,122,122,122,122,220,220, 0, 0, 0,220, 0,220, - 0,216, 0, 0, 0,129,130, 0,132, 0, 0, 0, 0, 0,130,130, - 130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0,220, 0, - 0, 0, 0, 7, 0, 9, 9, 0, 9, 9, 0, 0, 0,230, 0, 0, - 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0,230, 0, 0,220, - 230,220, 0,220,230,230,230, 0, 0, 0, 9, 9, 0, 0, 7, 0, - 230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220,202,230,230,230, - 230,230,232,228,228,220,218,230,233,220,230,220,230,230, 1, 1, - 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1, 0, 0,218,228, - 232,222,224,224, 0, 8, 8, 0, 0, 0, 0,220,230, 0,230,230, - 220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1,220, 0, - 0,230,220, 0, 0, 0,220,220, 0, 0,230,220, 0, 9, 7, 0, - 0, 7, 9, 0, 0, 0, 9, 7, 6, 6, 0, 0, 0, 0, 1, 0, - 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216,216, 0, - 220,220,220, 0,232,232,220,230,230,230, 7, 0, 16, 17, 17, 17, - 17, 17, 17, 33, 17, 17, 17, 19, 17, 17, 17, 17, 20,101, 17,113, - 129,169, 17, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 8, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 44, 44, + 55, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27, 27, 27, 91, 67, + 67, 67, 67, 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 67, + 67, 92, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 92, 44, 44, 44, + 67, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 25, 41, 41, + 67, 67, 67, 67, 44, 44, 67, 67, 67, 67, 67, 92, 44, 55, 67, 67, + 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 67, 55, + 67, 67, 67, 44, 44, 44, 44, 67, 67, 92, 67, 67, 67, 67, 67, 67, + 79, 44, 44, 44, 44, 44, 44, 44,171,171,171,171,171,171,171, 44, + 171,171,171,171,171,171,171, 0, 0, 0, 29, 21, 21, 21, 23, 21, + 22, 18, 21, 25, 21, 17, 13, 13, 25, 25, 25, 21, 21, 9, 9, 9, + 9, 22, 21, 18, 24, 16, 24, 5, 5, 5, 5, 22, 25, 18, 25, 0, + 23, 23, 26, 21, 24, 26, 7, 20, 25, 1, 26, 24, 26, 25, 15, 15, + 24, 15, 7, 19, 15, 21, 9, 25, 9, 5, 5, 25, 5, 9, 5, 7, + 7, 7, 9, 8, 8, 5, 7, 5, 6, 6, 24, 24, 6, 24, 12, 12, + 2, 2, 6, 5, 9, 21, 9, 2, 2, 9, 25, 9, 26, 12, 11, 11, + 2, 6, 5, 21, 17, 2, 2, 26, 26, 23, 2, 12, 17, 12, 21, 12, + 12, 21, 7, 2, 2, 7, 7, 21, 21, 2, 1, 1, 21, 23, 26, 26, + 1, 21, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12, + 12, 26, 7, 26, 26, 7, 2, 1, 12, 2, 6, 2, 24, 7, 7, 6, + 1, 12, 12, 10, 10, 10, 10, 12, 21, 6, 2, 10, 10, 2, 15, 26, + 26, 2, 2, 21, 7, 10, 15, 7, 2, 23, 21, 26, 10, 7, 21, 15, + 15, 2, 17, 7, 29, 7, 7, 22, 18, 2, 14, 14, 14, 7, 10, 21, + 17, 21, 11, 12, 5, 2, 5, 6, 8, 8, 8, 24, 5, 24, 2, 24, + 9, 24, 24, 2, 29, 29, 29, 1, 17, 17, 20, 19, 22, 20, 27, 28, + 1, 29, 21, 20, 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, + 1, 2, 15, 6, 18, 6, 23, 2, 12, 11, 9, 26, 26, 9, 26, 5, + 5, 26, 14, 9, 5, 14, 14, 15, 25, 26, 26, 22, 18, 26, 18, 25, + 18, 22, 5, 12, 2, 5, 22, 21, 21, 22, 18, 17, 26, 6, 7, 14, + 17, 22, 18, 18, 26, 14, 17, 6, 14, 6, 12, 24, 24, 6, 26, 15, + 6, 21, 11, 21, 24, 9, 6, 9, 23, 26, 6, 10, 4, 4, 3, 3, + 7, 25, 17, 16, 16, 22, 16, 16, 25, 17, 25, 2, 25, 24, 2, 15, + 12, 15, 14, 2, 21, 14, 7, 15, 12, 17, 21, 1, 26, 10, 10, 1, + 23, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, + 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 21, 22, 23, 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, + 0, 0, 40, 41, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, + 6, 7, 0, 8, 9, 10, 0, 11, 12, 13, 14, 15, 16, 17, 16, 18, + 16, 19, 16, 19, 16, 19, 0, 19, 16, 20, 16, 19, 21, 19, 0, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, + 0, 0, 36, 0, 37, 0, 0, 0, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, + 0, 0, 0, 50, 0, 51, 0, 52, 53, 0, 54, 0, 0, 0, 0, 0, + 0, 55, 56, 57, 0, 0, 0, 0, 58, 0, 0, 59, 60, 61, 62, 63, + 0, 0, 64, 65, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, + 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, + 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 76, 0, 77, 78, 0, + 0, 79, 80, 0, 81, 62, 0, 82, 83, 0, 0, 84, 85, 86, 0, 0, + 0, 87, 0, 88, 0, 0, 51, 89, 51, 0, 90, 0, 91, 0, 0, 0, + 80, 0, 0, 0, 92, 93, 0, 94, 95, 96, 97, 0, 0, 0, 0, 0, + 51, 0, 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, 0,100, 0, 0, + 0, 0, 0,101,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, + 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,106, 0, + 0,107, 0, 0, 0, 0, 0, 0,108, 0,109, 0,102, 0, 0, 0, + 0, 0,110,111, 0, 0, 0, 0, 0, 0, 0,112, 0, 0, 0, 0, + 0, 0, 0,113, 0,114, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, + 5, 6, 7, 0, 8, 0, 0, 0, 0, 9, 10, 11, 12, 0, 0, 0, + 0, 13, 0, 0, 14, 15, 0, 16, 0, 17, 18, 0, 0, 19, 0, 20, + 21, 0, 0, 0, 0, 0, 22, 23, 0, 24, 25, 0, 0, 26, 0, 0, + 0, 27, 0, 0, 28, 29, 30, 31, 0, 0, 0, 32, 33, 34, 0, 0, + 33, 0, 0, 35, 33, 0, 0, 0, 33, 36, 0, 0, 0, 0, 0, 37, + 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 41, + 42, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 45, 46, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 50, 0, 0, + 0, 51, 0, 52, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, 0, 55, + 0, 56, 0, 0, 0, 0, 57, 58, 0, 0, 0, 59, 60, 0, 0, 0, + 0, 0, 0, 61, 52, 0, 62, 63, 0, 0, 64, 0, 0, 0, 65, 66, + 0, 0, 0, 67, 0, 68, 69, 70, 71, 72, 1, 73, 0, 74, 75, 76, + 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, 1, 1, 0, 0, 80, 0, + 0, 81, 0, 0, 0, 0, 77, 82, 0, 83, 0, 0, 0, 0, 0, 78, + 84, 0, 85, 0, 52, 0, 1, 78, 0, 0, 86, 0, 0, 87, 0, 0, + 0, 0, 0, 88, 57, 0, 0, 0, 0, 0, 0, 89, 90, 0, 0, 84, + 0, 0, 33, 0, 0, 91, 0, 0, 0, 0, 92, 0, 0, 0, 0, 49, + 0, 0, 93, 0, 0, 0, 0, 94, 95, 0, 0, 96, 0, 0, 97, 0, + 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0,100,101, 93, 0, 0, + 102, 0, 0, 0, 84, 0, 0,103, 0, 0, 0,104,105, 0, 0,106, + 107, 0, 0, 0, 0, 0, 0,108, 0, 0,109, 0, 0, 0, 0,110, + 33, 0,111,112,113, 35, 0, 0,114, 0, 0, 0,115, 0, 0, 0, + 0, 0, 0,116, 0, 0,117, 0, 0, 0, 0,118, 88, 0, 0, 0, + 0, 0, 57, 0, 0, 0, 0, 52,119, 0, 0, 0, 0,120, 0, 0, + 121, 0, 0, 0, 0,119, 0, 0,122, 0, 0, 0, 0, 0, 0,123, + 0, 0, 0,124, 0, 0, 0,125, 0,126, 0, 0, 0, 0,127,128, + 129, 0,130, 0,131, 0, 0, 0,132,133,134, 0, 77, 0, 0, 0, + 0, 0, 35, 0, 0, 0,135, 0, 0, 0,136, 0, 0,137, 0, 0, + 138, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, + 5, 6, 7, 4, 4, 8, 9, 10, 1, 11, 12, 13, 14, 15, 16, 17, + 18, 1, 1, 1, 19, 1, 0, 0, 20, 21, 22, 1, 23, 4, 21, 24, + 25, 26, 27, 28, 29, 30, 0, 0, 1, 1, 31, 0, 0, 0, 32, 33, + 34, 35, 1, 36, 37, 0, 0, 0, 0, 38, 1, 39, 14, 39, 40, 41, + 42, 0, 0, 0, 43, 36, 44, 45, 21, 45, 46, 0, 0, 0, 19, 1, + 21, 0, 0, 47, 0, 38, 48, 1, 1, 49, 49, 50, 0, 0, 51, 0, + 0, 0, 52, 1, 0, 0, 38, 14, 4, 1, 1, 1, 53, 21, 43, 52, + 54, 21, 35, 1, 0, 0, 0, 55, 0, 0, 0, 56, 57, 58, 0, 0, + 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 61, 62, 0, 0, 63, 0, + 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, + 0, 0, 68, 0, 0, 69, 70, 0, 71, 72, 73, 74, 75, 76, 0, 0, + 0, 77, 0, 0, 0, 78, 79, 0, 0, 0, 0, 47, 0, 0, 0, 49, + 0, 80, 0, 0, 0, 62, 0, 0, 63, 0, 0, 81, 0, 0, 82, 0, + 0, 0, 83, 0, 0, 19, 84, 0, 62, 0, 0, 0, 0, 49, 1, 85, + 1, 52, 15, 86, 36, 10, 21, 87, 0, 55, 0, 0, 0, 0, 19, 10, + 1, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 88, 0, 0, 0, + 0, 78, 0, 0, 87, 9, 12, 4, 90, 8, 91, 47, 0, 58, 50, 0, + 21, 1, 21, 92, 93, 1, 1, 1, 1, 94, 95, 96, 97, 1, 98, 58, + 81, 99,100, 4, 58, 0, 0, 0, 0, 0, 0, 19, 50, 0, 0, 0, + 0, 0, 0, 61, 0, 0,101,102, 0, 0,103, 0, 0, 1, 1, 50, + 0, 0, 0, 38, 0, 63, 0, 0, 0, 0, 0, 62, 0, 0,104, 68, + 61, 0, 0, 0, 78, 0, 0, 0,105,106, 58, 38, 81, 0, 0, 0, + 0, 0, 0,107, 1, 14, 4, 12, 84, 0, 0, 0, 0, 38, 87, 0, + 0, 0, 0,108, 0, 0,109, 61, 0,110, 0, 0, 0, 1, 0, 0, + 0, 0, 19, 58, 0, 0, 0, 51, 0,111, 14, 52,112, 41, 0, 0, + 62, 0, 0, 61, 0, 0,113, 0, 87, 0, 0, 0, 61, 62, 0, 0, + 62, 0, 89, 0, 0,113, 0, 0, 0, 0,114, 0, 0, 0, 78, 55, + 0, 38, 1, 58, 1, 58, 0, 0, 63, 89, 0, 0,115, 0, 0, 0, + 55, 0, 0, 0, 0,115, 0, 0, 0, 0, 61, 0, 0, 0, 0, 79, + 0, 61, 0, 0, 0, 0, 56, 0, 89, 80, 0, 0, 79, 0, 0, 0, + 8, 91, 0, 0, 1, 87, 0, 0,116, 0, 0, 0, 0, 0, 0,117, + 0,118,119,120,121, 0,104, 4,122, 49, 23, 0, 0, 0, 38, 50, + 38, 58, 0, 0, 1, 87, 1, 1, 1, 1, 39, 1, 48,105, 87, 0, + 0, 0, 0, 1, 0, 0, 0,123, 4,122, 0, 0, 0, 1,124, 0, + 0, 0, 0, 0,230,230,230,230,230,232,220,220,220,220,232,216, + 220,220,220,220,220,202,202,220,220,220,220,202,202,220,220,220, + 1, 1, 1, 1, 1,220,220,220,220,230,230,230,230,240,230,220, + 220,220,230,230,230,220,220, 0,230,230,230,220,220,220,220,230, + 232,220,220,230,233,234,234,233,234,234,233,230, 0, 0, 0,230, + 0,220,230,230,230,230,220,230,230,230,222,220,230,230,220,220, + 230,222,228,230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, + 21, 22, 0, 23, 0, 24, 25, 0,230,220, 0, 18, 30, 31, 32, 0, + 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34,230,230,220,220,230, + 220,230,230,220, 35, 0, 0, 0, 0, 0,230,230,230, 0, 0,230, + 230, 0,220,230,230,220, 0, 0, 0, 36, 0, 0,230,220,230,230, + 220,220,230,220,220,230,220,230,220,230,230, 0, 0,220, 0, 0, + 230,230, 0,230, 0,230,230,230,230,230, 0, 0, 0,220,220,220, + 230,220,220,220,230,230, 0,220, 27, 28, 29,230, 7, 0, 0, 0, + 0, 9, 0, 0, 0,230,220,230,230, 0, 0, 0, 0, 0,230, 0, + 0, 84, 91, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 9, 0, + 103,103, 9, 0,107,107,107,107,118,118, 9, 0,122,122,122,122, + 220,220, 0, 0, 0,220, 0,220, 0,216, 0, 0, 0,129,130, 0, + 132, 0, 0, 0, 0, 0,130,130,130,130, 0, 0,130, 0,230,230, + 9, 0,230,230, 0, 0,220, 0, 0, 0, 0, 7, 0, 9, 9, 0, + 9, 9, 0, 0, 0,230, 0, 0, 0,228, 0, 0, 0,222,230,220, + 220, 0, 0, 0,230, 0, 0,220,230,220, 0,220,230,230,230, 0, + 0, 0, 9, 9, 0, 0, 7, 0,230, 0, 1, 1, 1, 0, 0, 0, + 230,234,214,220,202,230,230,230,230,230,232,228,228,220,218,230, + 233,220,230,220,230,230, 1, 1, 1, 1, 1,230, 0, 1, 1,230, + 220,230, 1, 1, 0, 0,218,228,232,222,224,224, 0, 8, 8, 0, + 0, 0, 0,220,230, 0,230,230,220, 0, 0,230, 0, 0, 26, 0, + 0,220, 0,230,230, 1,220, 0, 0,230,220, 0, 0, 0,220,220, + 0, 0,230,220, 0, 9, 7, 0, 0, 7, 9, 0, 0, 0, 9, 7, + 6, 6, 0, 0, 0, 0, 1, 0, 0,216,216, 1, 1, 1, 0, 0, + 0,226,216,216,216,216,216, 0,220,220,220, 0,232,232,220,230, + 230,230, 7, 0, 16, 17, 17, 17, 17, 17, 17, 33, 17, 17, 17, 19, + 17, 17, 17, 17, 20,101, 17,113,129,169, 17, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,237, 0, 1, 2, 2, - 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 6, 7, 8, - 9, 0, 0, 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 21, 22, 0, 0, 0, 0, - 23, 24, 25, 26, 0, 27, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0, - 0, 0, 0, 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 1, 2, 40, 41, - 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 4, 0, 0, 5, 0, - 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, - 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 10, - 0, 0, 0, 0, 0, 0, 11, 12, 0, 13, 0, 14, 15, 16, 0, 0, - 0, 0, 0, 1, 17, 18, 0, 19, 7, 1, 0, 0, 0, 20, 20, 7, - 20, 20, 20, 20, 20, 20, 20, 8, 21, 0, 22, 0, 7, 23, 24, 0, - 20, 20, 25, 0, 0, 0, 26, 27, 1, 7, 20, 20, 20, 20, 20, 1, - 28, 29, 30, 31, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 10, 0, - 0, 0, 0, 0, 0, 0, 20, 20, 20, 1, 0, 0, 8, 21, 32, 4, - 0, 10, 0, 33, 7, 20, 20, 20, 0, 0, 0, 0, 8, 34, 34, 35, - 36, 34, 37, 0, 38, 1, 20, 20, 0, 0, 39, 0, 1, 1, 0, 8, - 21, 1, 20, 0, 0, 0, 1, 0, 0, 40, 1, 1, 0, 0, 8, 21, - 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 26, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 21, 7, 20, 41, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 21, 0, 42, 43, 44, 0, 45, 0, 8, 21, 0, 0, 0, 0, 0, - 0, 0, 0, 46, 7, 1, 10, 1, 0, 0, 0, 1, 20, 20, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 34, 9, 0, 0, 20, 20, - 1, 20, 20, 0, 0, 0, 0, 0, 0, 0, 26, 21, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 11, 11, 11, 12, 13, - 13, 13, 13, 14, 15, 16, 17, 18, 19, 20, 21, 13, 22, 13, 13, 13, - 13, 23, 24, 24, 25, 26, 13, 13, 13, 27, 28, 29, 13, 30, 31, 32, - 33, 34, 35, 36, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 37, 7, 38, 39, 7, 40, 7, 7, - 7, 41, 13, 42, 7, 7, 43, 7, 44, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17,237, 0, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 0, 6, 7, 8, 9, 0, 0, 0, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 0, 21, 22, 0, 0, 0, 0, 23, 24, 25, 26, 0, 27, 0, 28, + 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 33, 34, 35, 36, 0, + 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, + 0, 0, 0, 0, 1, 2, 40, 41, 0, 1, 2, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 3, 4, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, + 0, 0, 10, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 11, 12, + 0, 13, 0, 14, 15, 16, 0, 0, 0, 0, 0, 1, 17, 18, 0, 19, + 7, 1, 0, 0, 0, 20, 20, 7, 20, 20, 20, 20, 20, 20, 20, 8, + 21, 0, 22, 0, 7, 23, 24, 0, 20, 20, 25, 0, 0, 0, 26, 27, + 1, 7, 20, 20, 20, 20, 20, 1, 28, 29, 30, 31, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 20, 20, + 20, 1, 0, 0, 8, 21, 32, 4, 0, 10, 0, 33, 7, 20, 20, 20, + 0, 0, 0, 0, 8, 34, 34, 35, 36, 34, 37, 0, 38, 1, 20, 20, + 0, 0, 39, 0, 1, 1, 0, 8, 21, 1, 20, 0, 0, 0, 1, 0, + 0, 40, 1, 1, 0, 0, 8, 21, 0, 1, 0, 1, 0, 1, 0, 0, + 0, 0, 26, 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, 7, 20, 41, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, 0, 42, 43, 44, 0, 45, + 0, 8, 21, 0, 0, 0, 0, 0, 0, 0, 0, 46, 7, 1, 10, 1, + 0, 0, 0, 1, 20, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 26, 34, 9, 0, 0, 20, 20, 1, 20, 20, 0, 0, 0, 0, 0, + 0, 0, 26, 21, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, + 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 9, 10, 11, 11, 11, 11, 12, 13, 13, 13, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 13, 22, 13, 13, 13, 13, 23, 24, 24, 25, 26, 13, 13, + 13, 27, 28, 29, 13, 30, 31, 32, 33, 34, 35, 36, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 37, 7, 38, 39, 7, 40, 7, 7, 7, 41, 13, 42, 7, 7, 43, 7, + 44, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, @@ -1716,201 +1716,202 @@ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 45, 0, 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, - 37, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 2, 2, 53, 54, 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, - 59, 59, 59, 59, 59, 59, 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 59, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 45, 0, 0, 1, + 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54, 55, 56, + 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59, 61, 61, + 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 79, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, - 82, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70, 70, 70, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 81, 82, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 70, 70, 97, 98, 99,100,101,101, - 102,103,104,105,106,107,108,109,110,111, 96,112,113,114,115,116, - 117,118,119,119,120,121,122,123,124,125,126,127,128,129,130,131, - 132, 96,133,134,135,136,137,138,139,140,141,142,143, 96,144,145, - 96,146,147,148,149, 96,150,151,152,153,154,155,156, 96,157,158, - 159,160, 96,161,162,163,164,164,164,164,164,164,164,165,166,164, - 167, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96,168,169,169,169,169,169,169,169,169,170, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,171,171, - 171,171,172, 96, 96, 96,173,173,173,173,174,175,176,177, 96, 96, - 96, 96,178,179,180,181,182,182,182,182,182,182,182,182,182,182, - 182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, - 182,182,182,182,182,183,182,182,182,182,182,182,184,184,184,185, - 186, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96,187,188,189,190,191,191,192, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,193,194, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96,195,196, 59,197,198,199,200,201,202, 96,203,204, - 205, 59, 59,206, 59,207,208,208,208,208,208,209, 96, 96, 96, 96, - 96, 96, 96, 96,210, 96,211,212,213, 96, 96,214, 96, 96, 96,215, - 96, 96, 96, 96, 96,216,217,218,219, 96, 96, 96, 96, 96,220,221, - 222, 96,223,224, 96, 96,225,226, 59,227,228, 96, 59, 59, 59, 59, - 59, 59, 59,229,230,231,232,233, 59, 59,234,235, 59,236, 96, 96, - 96, 96, 96, 96, 96, 96, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70,237, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70,238, 70,239, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 97, 98, 99,100,101,101,102,103,104,105,106,107,108,109, + 110,111, 96,112,113,114,115,116,117,118,119,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132, 96,133,134,135,136,137,138, + 139,140,141,142,143, 96,144,145, 96,146,147,148,149, 96,150,151, + 152,153,154,155,156, 96,157,158,159,160, 96,161,162,163,164,164, + 164,164,164,164,164,165,166,164,167, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,168,169,169, + 169,169,169,169,169,169,170, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96,171,171,171,171,172, 96, 96, 96,173,173, + 173,173,174,175,176,177, 96, 96, 96, 96,178,179,180,181,182,182, + 182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, + 182,182,182,182,182,182,182,182,182,182,182,182,182,183,182,182, + 182,182,182,182,184,184,184,185,186, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,187,188,189, + 190,191,191,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96,193,194, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,195,196, 59,197, + 198,199,200,201,202, 96,203,204,205, 59, 59,206, 59,207,208,208, + 208,208,208,209, 96, 96, 96, 96, 96, 96, 96, 96,210, 96,211,212, + 213, 96, 96,214, 96, 96, 96,215, 96, 96, 96, 96, 96,216,217,218, + 219, 96, 96, 96, 96, 96,220,221,222, 96,223,224, 96, 96,225,226, + 59,227,228, 96, 59, 59, 59, 59, 59, 59, 59,229,230,231,232,233, + 59, 59,234,235, 59,236, 96, 96, 96, 96, 96, 96, 96, 96, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,237, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,238, 70,239, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70,240, 70, 70, 70, 70, 70, 70, 70, 70, 70,241, 96, 96, - 96, 96, 96, 96, 96, 96, 70, 70, 70, 70,242, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 70, 70, 70, 70, 70, 70,243, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,244, 96, 96, - 96, 96, 96, 96, 96, 96,245, 96,246,247, 0, 1, 2, 2, 0, 1, - 2, 2, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 19, 19, - 19, 19, 19, 19, 19, 0, 19, 0, 0, 0, 0, 0, 0, 0, 19, 19, - 19, 19, 19, 0, 0, 0, 0, 0, 26, 26, 0, 0, 0, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 0, 9, 9, 9, 2, 2, - 9, 9, 9, 9, 0, 9, 2, 2, 2, 2, 9, 0, 9, 0, 9, 9, - 9, 2, 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 2, 9, 9, 9, 9, 9, 9, 9, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 1, 1, 6, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, - 4, 2, 2, 4, 4, 4, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 2, 2, 2, 2, 2, 2, 2, 2, 14, 14, - 14, 2, 2, 2, 2, 14, 14, 14, 14, 14, 14, 2, 2, 2, 3, 3, - 3, 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 0, 0, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 2, 37, 37, 37, - 37, 2, 2, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 2, 2, 2, 2, 2, 2, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 2, 2, 64, 64, 64, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 2, 2, 90, 90, 90, 90, 90, 90, 90, 2, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 2, 2, 95, 2, 37, 37, - 37, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, - 2, 2, 2, 2, 2, 2, 3, 3, 0, 3, 3, 3, 3, 3, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 7, 7, - 7, 7, 0, 0, 7, 7, 5, 5, 5, 5, 2, 5, 5, 5, 5, 5, - 5, 5, 5, 2, 2, 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 2, - 5, 2, 2, 2, 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 5, 2, - 2, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, - 2, 2, 5, 5, 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 2, 2, 11, 11, 11, 2, 11, 11, 11, 11, 11, - 11, 2, 2, 2, 2, 11, 11, 2, 2, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 2, 11, 11, 11, 11, 11, 11, 11, 2, - 11, 11, 2, 11, 11, 2, 11, 11, 2, 2, 11, 2, 11, 11, 11, 2, - 2, 11, 11, 11, 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 11, - 11, 11, 11, 2, 11, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 2, 2, 10, 10, 10, 2, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 2, 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 2, - 10, 10, 2, 10, 10, 10, 10, 10, 2, 2, 10, 10, 10, 10, 10, 10, - 2, 10, 10, 10, 2, 2, 10, 2, 2, 2, 2, 2, 2, 2, 10, 10, - 10, 10, 2, 2, 10, 10, 10, 10, 2, 2, 2, 2, 2, 2, 2, 10, - 10, 10, 10, 10, 10, 10, 2, 21, 21, 21, 2, 21, 21, 21, 21, 21, - 21, 21, 21, 2, 2, 21, 21, 2, 2, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 2, - 21, 21, 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 21, 21, 21, 2, - 2, 21, 21, 21, 2, 2, 2, 2, 2, 2, 2, 21, 21, 21, 2, 2, - 2, 2, 21, 21, 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 2, 2, - 22, 22, 2, 22, 22, 22, 22, 22, 22, 2, 2, 2, 22, 22, 22, 2, - 22, 22, 22, 22, 2, 2, 2, 22, 22, 2, 22, 2, 22, 22, 2, 2, - 2, 22, 22, 2, 2, 2, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 2, 2, 2, 2, 22, 22, 22, 2, 2, 2, 2, 2, 2, 22, 2, 2, - 2, 2, 2, 2, 22, 22, 22, 22, 22, 2, 2, 2, 2, 2, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 2, 23, 23, 23, 2, - 23, 23, 23, 23, 23, 23, 23, 23, 2, 2, 23, 23, 23, 23, 23, 2, - 23, 23, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 23, 2, 23, 23, - 23, 2, 2, 23, 2, 2, 23, 23, 23, 23, 2, 2, 23, 23, 2, 2, - 2, 2, 2, 2, 2, 23, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 2, 16, 16, 16, 2, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 2, 16, 16, 16, 16, 16, 2, 2, 16, 16, 16, 16, 16, 2, - 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, 16, 16, - 16, 16, 2, 2, 16, 16, 2, 16, 16, 16, 2, 2, 2, 2, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 2, 20, 20, 20, 2, - 20, 20, 20, 20, 20, 20, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, - 20, 20, 2, 2, 20, 20, 2, 36, 36, 36, 2, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2, - 36, 36, 36, 36, 36, 36, 36, 36, 2, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 2, 36, 2, 2, 2, 2, 36, 2, 2, 2, 2, 36, 36, 36, - 36, 36, 36, 2, 36, 2, 2, 2, 2, 2, 2, 2, 36, 36, 2, 2, - 36, 36, 36, 2, 2, 2, 2, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 2, 2, 2, 2, 0, 24, 24, - 24, 24, 2, 2, 2, 2, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18, - 18, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 18, 18, 2, 2, 18, 18, - 18, 18, 18, 2, 18, 2, 18, 18, 18, 18, 18, 18, 18, 2, 18, 18, - 2, 2, 18, 18, 18, 18, 25, 25, 25, 25, 25, 25, 25, 25, 2, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 2, 2, 2, 25, 25, - 25, 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 0, 25, - 25, 2, 2, 2, 2, 2, 33, 33, 33, 33, 33, 33, 33, 33, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 2, 8, 2, 2, - 2, 2, 2, 8, 2, 2, 8, 8, 8, 0, 8, 8, 8, 8, 12, 12, - 12, 12, 12, 12, 12, 12, 30, 30, 30, 30, 30, 30, 30, 30, 30, 2, - 30, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30, 30, 30, 2, 30, 30, - 30, 2, 2, 30, 30, 30, 30, 30, 30, 30, 30, 2, 2, 2, 30, 30, - 2, 2, 2, 2, 2, 2, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 2, 2, 28, 28, 28, 28, 28, 28, 28, 28, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 2, 2, 2, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 35, 35, 35, 2, - 2, 2, 2, 2, 2, 2, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 2, 2, 2, 2, 2, 2, 2, 2, 2, 45, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 0, 2, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 2, 2, 2, 2, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 2, 46, 46, 46, 2, - 46, 46, 2, 2, 2, 2, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 2, 2, 31, 31, 2, 2, 2, 2, 2, 2, 32, 32, - 0, 0, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 2, 2, 2, 2, 2, 2, 32, 2, 2, 2, 2, 2, 2, 2, 32, 32, - 32, 2, 2, 2, 2, 2, 28, 28, 28, 28, 28, 28, 2, 2, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 2, 48, 48, - 48, 48, 2, 2, 2, 2, 48, 2, 2, 2, 48, 48, 48, 48, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 2, 2, 52, 52, - 52, 52, 52, 2, 2, 2, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 2, 2, 2, 2, 58, 58, 2, 2, 2, 2, 2, 2, 58, 58, - 58, 2, 2, 2, 58, 58, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 2, 2, 54, 54, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 2, 91, 91, 91, 91, 91, 2, 2, 91, 91, 91, - 2, 2, 2, 2, 2, 2, 91, 91, 91, 91, 91, 91, 2, 2, 1, 1, - 1, 1, 1, 1, 1, 2, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 2, 2, 2, 62, 62, 62, 62, 62, 62, 62, 2, 76, 76, - 76, 76, 76, 76, 76, 76, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 2, 2, 2, 2, 2, 2, 2, 2, 93, 93, 93, 93, 70, 70, - 70, 70, 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, 70, 70, 70, 70, - 2, 2, 2, 70, 70, 70, 73, 73, 73, 73, 73, 73, 73, 73, 6, 2, - 2, 2, 2, 2, 2, 2, 8, 8, 8, 2, 2, 8, 8, 8, 1, 1, - 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, - 0, 2, 2, 2, 2, 2, 19, 19, 19, 19, 19, 19, 9, 9, 9, 9, - 9, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 9, 9, 9, 9, - 19, 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, 19, 19, 6, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 9, 9, 9, - 9, 9, 9, 9, 2, 2, 2, 9, 2, 9, 2, 9, 2, 9, 9, 9, - 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 2, 2, 9, 9, 9, 9, - 9, 9, 2, 9, 9, 9, 2, 2, 9, 9, 9, 2, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 19, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 2, 19, 19, - 19, 19, 19, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 1, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 19, 0, - 0, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 27, 27, - 27, 27, 27, 27, 27, 27, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, 56, 56, 56, 56, 56, 56, 56, 56, 55, 55, - 55, 55, 2, 2, 2, 2, 2, 55, 55, 55, 55, 55, 55, 55, 61, 61, - 61, 61, 61, 61, 61, 61, 2, 2, 2, 2, 2, 2, 2, 61, 61, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 2, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 2, 2, 2, 2, 13, 13, 13, 13, 13, 13, 2, 2, 0, 0, - 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 13, 0, 13, 0, 13, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,240, 70, 70, 70, 70, + 70, 70, 70, 70, 70,241, 70, 70, 70, 70,242, 96, 96, 96, 70, 70, + 70, 70,243, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 70, 70, + 70, 70, 70, 70,244, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70,245, 96, 96, 96, 96, 96, 96, 96, 96,246, 96, + 247,248, 0, 1, 2, 2, 0, 1, 2, 2, 2, 3, 4, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, + 19, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, + 26, 26, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, + 9, 9, 0, 9, 9, 9, 2, 2, 9, 9, 9, 9, 0, 9, 2, 2, + 2, 2, 9, 0, 9, 0, 9, 9, 9, 2, 9, 2, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9, + 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 1, 6, 2, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 2, 4, 4, 4, 2, 2, 4, 4, 4, 2, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 2, + 2, 2, 2, 2, 2, 2, 14, 14, 14, 2, 2, 2, 2, 14, 14, 14, + 14, 14, 14, 2, 2, 2, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, + 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 0, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 3, + 3, 3, 3, 3, 3, 3, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 2, 37, 37, 37, 37, 2, 2, 37, 37, 37, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 2, 2, 2, 2, 2, 2, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 2, 2, 64, 64, 64, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 2, 2, 90, 90, + 90, 90, 90, 90, 90, 2, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 2, 2, 95, 2, 37, 37, 37, 2, 2, 2, 2, 2, 3, 3, + 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, + 0, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, + 1, 1, 1, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7, 5, 5, + 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 5, 5, 2, + 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, + 5, 5, 5, 5, 5, 5, 5, 2, 5, 2, 2, 2, 5, 5, 5, 5, + 2, 2, 5, 5, 5, 5, 5, 2, 2, 5, 5, 5, 5, 2, 2, 2, + 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 5, 5, 2, 5, 5, 5, + 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 11, + 11, 11, 2, 11, 11, 11, 11, 11, 11, 2, 2, 2, 2, 11, 11, 2, + 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, + 11, 11, 11, 11, 11, 11, 11, 2, 11, 11, 2, 11, 11, 2, 11, 11, + 2, 2, 11, 2, 11, 11, 11, 2, 2, 11, 11, 11, 2, 2, 2, 11, + 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 11, 2, 11, 2, 2, 2, + 2, 2, 2, 2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2, 2, 10, + 10, 10, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10, + 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 2, + 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 2, 10, 10, 10, 10, 10, + 2, 2, 10, 10, 10, 10, 10, 10, 2, 10, 10, 10, 2, 2, 10, 2, + 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 2, 2, 10, 10, 10, 10, + 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 2, 21, + 21, 21, 2, 21, 21, 21, 21, 21, 21, 21, 21, 2, 2, 21, 21, 2, + 2, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 2, + 21, 21, 21, 21, 21, 21, 21, 2, 21, 21, 2, 21, 21, 21, 21, 21, + 2, 2, 21, 21, 21, 21, 21, 2, 2, 21, 21, 21, 2, 2, 2, 2, + 2, 2, 2, 21, 21, 21, 2, 2, 2, 2, 21, 21, 2, 21, 21, 21, + 21, 21, 2, 2, 21, 21, 2, 2, 22, 22, 2, 22, 22, 22, 22, 22, + 22, 2, 2, 2, 22, 22, 22, 2, 22, 22, 22, 22, 2, 2, 2, 22, + 22, 2, 22, 2, 22, 22, 2, 2, 2, 22, 22, 2, 2, 2, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 2, 2, 2, 2, 22, 22, 22, 2, + 2, 2, 2, 2, 2, 22, 2, 2, 2, 2, 2, 2, 22, 22, 22, 22, + 22, 2, 2, 2, 2, 2, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 2, 23, 23, 23, 2, 23, 23, 23, 23, 23, 23, 23, 23, + 2, 2, 23, 23, 23, 23, 23, 2, 23, 23, 23, 23, 2, 2, 2, 2, + 2, 2, 2, 23, 23, 2, 23, 23, 23, 2, 2, 23, 2, 2, 23, 23, + 23, 23, 2, 2, 23, 23, 2, 2, 2, 2, 2, 2, 2, 23, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 2, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 16, + 2, 2, 16, 16, 16, 16, 16, 2, 16, 16, 16, 16, 2, 2, 2, 2, + 2, 2, 2, 16, 16, 2, 16, 16, 16, 16, 2, 2, 16, 16, 2, 16, + 16, 16, 2, 2, 2, 2, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 2, 20, 20, 20, 2, 20, 20, 20, 20, 20, 20, 2, 2, + 2, 2, 20, 20, 20, 20, 20, 20, 20, 20, 2, 2, 20, 20, 2, 36, + 36, 36, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 2, 2, 2, 36, 36, 36, 36, 36, 36, 36, 36, + 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 36, 2, 2, 2, 2, + 36, 2, 2, 2, 2, 36, 36, 36, 36, 36, 36, 2, 36, 2, 2, 2, + 2, 2, 2, 2, 36, 36, 2, 2, 36, 36, 36, 2, 2, 2, 2, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 2, 2, 2, 2, 0, 24, 24, 24, 24, 2, 2, 2, 2, 2, 18, + 18, 2, 18, 2, 18, 18, 18, 18, 18, 2, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 2, 18, 2, 18, 18, 18, + 18, 18, 18, 18, 2, 2, 18, 18, 18, 18, 18, 2, 18, 2, 18, 18, + 18, 18, 18, 18, 18, 2, 18, 18, 2, 2, 18, 18, 18, 18, 25, 25, + 25, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 2, 2, 2, 25, 25, 25, 25, 25, 2, 25, 25, 25, 25, + 25, 25, 25, 0, 0, 0, 0, 25, 25, 2, 2, 2, 2, 2, 33, 33, + 33, 33, 33, 33, 33, 33, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 2, 8, 2, 2, 2, 2, 2, 8, 2, 2, 8, 8, + 8, 0, 8, 8, 8, 8, 12, 12, 12, 12, 12, 12, 12, 12, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 2, 30, 30, 30, 30, 2, 2, 30, 30, + 30, 30, 30, 30, 30, 2, 30, 30, 30, 2, 2, 30, 30, 30, 30, 30, + 30, 30, 30, 2, 2, 2, 30, 30, 2, 2, 2, 2, 2, 2, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 2, 2, 28, 28, + 28, 28, 28, 28, 28, 28, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 2, 2, 2, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 0, 0, 0, 35, 35, 35, 2, 2, 2, 2, 2, 2, 2, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 45, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 0, 0, 2, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 2, 2, 2, 2, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 2, 46, 46, 46, 2, 46, 46, 2, 2, 2, 2, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 2, 2, 31, 31, + 2, 2, 2, 2, 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 2, 2, 2, 2, 2, 2, 32, 2, + 2, 2, 2, 2, 2, 2, 32, 32, 32, 2, 2, 2, 2, 2, 28, 28, + 28, 28, 28, 28, 2, 2, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 2, 48, 48, 48, 48, 2, 2, 2, 2, 48, 2, + 2, 2, 48, 48, 48, 48, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 2, 2, 52, 52, 52, 52, 52, 2, 2, 2, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 2, 2, 2, 2, 58, 58, + 2, 2, 2, 2, 2, 2, 58, 58, 58, 2, 2, 2, 58, 58, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 2, 2, 54, 54, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 2, 91, 91, + 91, 91, 91, 2, 2, 91, 91, 91, 2, 2, 2, 2, 2, 2, 91, 91, + 91, 91, 91, 91, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 2, 2, 2, 62, 62, + 62, 62, 62, 62, 62, 2, 76, 76, 76, 76, 76, 76, 76, 76, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 2, 2, 2, 2, 2, 2, + 2, 2, 93, 93, 93, 93, 70, 70, 70, 70, 70, 70, 70, 70, 2, 2, + 2, 70, 70, 70, 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, 73, 73, + 73, 73, 73, 73, 73, 73, 6, 2, 2, 2, 2, 2, 2, 2, 8, 8, + 8, 2, 2, 8, 8, 8, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 1, 1, 0, 2, 2, 2, 2, 2, 19, 19, + 19, 19, 19, 19, 9, 9, 9, 9, 9, 6, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 9, 9, 9, 9, 9, 19, 19, 19, 19, 9, 9, 9, 9, + 9, 19, 19, 19, 19, 19, 6, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 9, 9, 9, 9, 9, 9, 9, 2, 2, 2, 9, + 2, 9, 2, 9, 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 9, + 9, 9, 2, 2, 9, 9, 9, 9, 9, 9, 2, 9, 9, 9, 2, 2, + 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 2, 0, 0, + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 19, + 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, + 0, 0, 0, 0, 0, 2, 19, 19, 19, 19, 19, 2, 2, 2, 0, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 0, 19, 0, 0, 0, 2, 2, 2, 2, 0, 0, + 0, 2, 2, 2, 2, 2, 27, 27, 27, 27, 27, 27, 27, 27, 0, 0, + 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 56, 56, + 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 2, 2, 2, 2, 2, 55, + 55, 55, 55, 55, 55, 55, 61, 61, 61, 61, 61, 61, 61, 61, 2, 2, + 2, 2, 2, 2, 2, 61, 61, 2, 2, 2, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 2, 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 2, 13, 13, 13, 13, 13, 13, 13, 13, 13, 2, 2, 2, 2, 13, 13, + 13, 13, 13, 13, 2, 2, 0, 0, 0, 0, 0, 13, 0, 13, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1, 1, 1, 1, 12, 12, 13, 13, 13, 13, 0, 0, 0, 0, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 1, 1, 0, 0, 15, 15, 15, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 0, 17, 17, 17, 2, 2, 2, 2, 2, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 2, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 2, 0, 0, + 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 12, 12, 12, 12, 12, 12, 12, 0, 17, 17, 17, 17, 17, 17, 17, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 2, 2, 2, 39, 39, 39, 39, 39, 39, 39, 2, 86, 86, 86, 86, 86, 86, 86, 86, 77, 77, @@ -2190,7 +2191,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, }; static const uint16_t -_hb_ucd_u16[9320] = +_hb_ucd_u16[9344] = { 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12, 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23, @@ -2233,9 +2234,9 @@ 209, 306, 209, 209, 209, 209, 209, 209, 9, 9, 9, 11, 11, 11, 307, 308, 13, 13, 13, 13, 13, 13, 309, 310, 11, 11, 311, 48, 48, 48, 312, 313, 48, 314, 315, 315, 315, 315, 32, 32, 316, 317, 318, 319, 320, 321, 140, 140, - 209, 322, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 324, 140, 325, - 326, 327, 328, 329, 136, 48, 48, 48, 48, 330, 178, 48, 48, 48, 48, 331, - 332, 48, 48, 136, 48, 48, 48, 48, 200, 333, 48, 48, 209, 209, 323, 48, + 209, 322, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 324, 140, 209, + 325, 326, 327, 328, 136, 48, 48, 48, 48, 329, 178, 48, 48, 48, 48, 330, + 331, 48, 48, 136, 48, 48, 48, 48, 200, 332, 48, 48, 209, 209, 333, 48, 209, 334, 335, 209, 336, 337, 209, 209, 335, 209, 209, 337, 209, 209, 209, 209, 48, 48, 48, 48, 209, 209, 209, 209, 48, 338, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 287, 48, 48, 229, 339, 48, 340, 140, 13, 13, 341, 342, @@ -2306,475 +2307,476 @@ 9, 9, 607, 11, 654, 370, 140, 140, 140, 140, 140, 140, 140, 140, 140, 499, 271, 271, 655, 656, 140, 140, 140, 140, 499, 271, 657, 658, 140, 140, 140, 140, 659, 48, 660, 661, 662, 663, 664, 665, 666, 206, 667, 206, 140, 140, 140, 668, - 209, 209, 325, 209, 209, 209, 209, 209, 209, 323, 334, 669, 669, 669, 209, 324, - 670, 209, 209, 209, 209, 209, 209, 209, 209, 209, 671, 140, 140, 140, 672, 209, - 673, 209, 209, 325, 674, 675, 324, 140, 209, 209, 209, 209, 209, 209, 209, 676, - 209, 209, 209, 209, 209, 677, 426, 426, 209, 209, 209, 209, 209, 209, 209, 678, - 209, 209, 209, 209, 209, 176, 325, 427, 325, 209, 209, 209, 679, 176, 209, 209, - 679, 209, 671, 675, 140, 140, 140, 140, 209, 209, 209, 209, 209, 323, 671, 426, - 674, 209, 209, 680, 681, 325, 674, 674, 209, 682, 209, 209, 288, 140, 140, 192, + 209, 209, 669, 209, 209, 209, 209, 209, 209, 323, 334, 670, 670, 670, 209, 324, + 671, 209, 209, 209, 209, 209, 209, 209, 209, 209, 672, 140, 140, 140, 673, 209, + 674, 209, 209, 669, 675, 676, 324, 140, 209, 209, 209, 209, 209, 209, 209, 677, + 209, 209, 209, 209, 209, 678, 426, 426, 209, 209, 209, 209, 209, 209, 209, 679, + 209, 209, 209, 209, 209, 176, 669, 427, 669, 209, 209, 209, 680, 176, 209, 209, + 680, 209, 672, 676, 140, 140, 140, 140, 209, 209, 209, 209, 209, 323, 672, 426, + 675, 209, 209, 681, 682, 669, 675, 675, 209, 683, 209, 209, 288, 140, 140, 192, 48, 48, 48, 48, 48, 48, 140, 140, 48, 48, 48, 207, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 478, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 100, 140, 48, 204, 140, 140, 140, 140, 140, 140, - 48, 48, 48, 48, 71, 48, 48, 48, 48, 48, 48, 140, 140, 140, 140, 140, - 683, 140, 570, 570, 570, 570, 570, 570, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 140, 391, 391, 391, 391, 391, 391, 391, 684, - 391, 391, 391, 391, 391, 391, 391, 685, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 2, 3, 1, 2, 2, 3, 0, 0, 0, 0, 0, 4, 0, 4, - 2, 2, 5, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, - 0, 0, 0, 0, 7, 8, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 10, 11, 12, 13, 14, 14, 15, 14, 14, 14, - 14, 14, 14, 14, 16, 17, 14, 14, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 19, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 20, 21, - 21, 21, 22, 20, 21, 21, 21, 21, 21, 23, 24, 25, 25, 25, 25, 25, - 25, 26, 25, 25, 25, 27, 28, 26, 29, 30, 31, 32, 31, 31, 31, 31, - 33, 34, 35, 31, 31, 31, 36, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 29, 31, 31, 31, 31, 37, 38, 37, 37, 37, 37, 37, 37, - 37, 39, 31, 31, 31, 31, 31, 31, 40, 40, 40, 40, 40, 40, 41, 26, - 42, 42, 42, 42, 42, 42, 42, 43, 44, 44, 44, 44, 44, 45, 44, 46, - 47, 47, 47, 48, 37, 49, 31, 31, 31, 50, 51, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 52, 31, 31, 31, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 54, 53, 55, 53, 53, 53, 56, 57, 58, 59, 59, 60, 61, 62, - 57, 63, 64, 65, 66, 59, 59, 67, 68, 69, 70, 71, 71, 72, 73, 74, - 69, 75, 76, 77, 78, 71, 79, 26, 80, 81, 82, 83, 83, 84, 85, 86, - 81, 87, 88, 26, 89, 83, 90, 91, 92, 93, 94, 95, 95, 96, 97, 98, - 93, 99, 100, 101, 102, 95, 95, 26, 103, 104, 105, 106, 107, 104, 108, 109, - 104, 105, 110, 26, 111, 108, 108, 112, 113, 114, 115, 113, 113, 115, 113, 116, - 114, 117, 118, 119, 120, 113, 121, 113, 122, 123, 124, 122, 122, 124, 125, 126, - 123, 127, 128, 128, 129, 122, 130, 26, 131, 132, 133, 131, 131, 131, 131, 131, - 132, 133, 134, 131, 135, 131, 131, 131, 136, 137, 138, 139, 137, 137, 140, 141, - 138, 142, 143, 137, 144, 137, 145, 26, 146, 147, 147, 147, 147, 147, 147, 148, - 147, 147, 147, 149, 26, 26, 26, 26, 150, 151, 152, 152, 153, 152, 152, 154, - 155, 156, 152, 157, 26, 26, 26, 26, 158, 158, 158, 158, 158, 158, 158, 158, - 158, 159, 158, 158, 158, 160, 159, 158, 158, 158, 158, 159, 158, 158, 158, 161, - 158, 161, 162, 163, 26, 26, 26, 26, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, - 166, 167, 165, 165, 165, 165, 165, 168, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, - 170, 171, 172, 171, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 171, 172, - 171, 170, 172, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, - 170, 170, 170, 173, 170, 170, 170, 174, 170, 170, 170, 175, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 180, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 182, 181, 183, 184, 184, 185, 186, 187, 187, 188, 26, - 189, 189, 190, 26, 191, 192, 193, 26, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 195, 194, 196, 194, 196, 197, 198, 198, 199, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 200, 198, 198, 198, 198, 198, 201, 178, 178, - 178, 178, 178, 178, 178, 178, 202, 26, 203, 203, 203, 204, 203, 205, 203, 205, - 206, 203, 207, 207, 207, 208, 209, 26, 210, 210, 210, 210, 210, 211, 210, 210, - 210, 212, 210, 213, 194, 194, 194, 194, 214, 214, 214, 215, 216, 216, 216, 216, - 216, 216, 216, 217, 216, 216, 216, 218, 216, 219, 216, 219, 216, 220, 9, 9, - 9, 221, 26, 26, 26, 26, 26, 26, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 223, 222, 222, 222, 222, 222, 224, 225, 225, 225, 225, 225, 225, 225, 225, - 226, 226, 226, 226, 226, 226, 227, 228, 229, 229, 229, 229, 229, 229, 229, 230, - 229, 231, 232, 232, 232, 232, 232, 232, 18, 233, 165, 165, 165, 165, 165, 234, - 225, 26, 235, 9, 236, 237, 238, 239, 2, 2, 2, 2, 240, 241, 2, 2, - 2, 2, 2, 242, 243, 244, 2, 245, 2, 2, 2, 2, 2, 2, 2, 246, - 9, 9, 9, 9, 9, 9, 9, 9, 14, 14, 247, 247, 14, 14, 14, 14, - 247, 247, 14, 248, 14, 14, 14, 247, 14, 14, 14, 14, 14, 14, 249, 14, - 249, 14, 250, 251, 14, 14, 252, 253, 0, 254, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 255, 0, 256, 257, 0, 258, 2, 259, 0, 0, 0, 0, - 260, 26, 9, 9, 9, 9, 261, 26, 0, 0, 0, 0, 262, 263, 4, 0, - 0, 264, 0, 0, 2, 2, 2, 2, 2, 265, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 100, 48, 48, 48, 48, 48, 48, 204, 140, 140, + 48, 204, 140, 140, 140, 140, 140, 140, 48, 48, 48, 48, 71, 48, 48, 48, + 48, 48, 48, 140, 140, 140, 140, 140, 684, 140, 570, 570, 570, 570, 570, 570, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 140, + 391, 391, 391, 391, 391, 391, 391, 685, 391, 391, 391, 391, 391, 391, 391, 686, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, + 0, 0, 0, 0, 0, 4, 0, 4, 2, 2, 5, 2, 2, 2, 5, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 6, 0, 0, 0, 0, 7, 8, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11, + 12, 13, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, 16, 17, 14, 14, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 19, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 20, 21, 21, 21, 22, 20, 21, 21, 21, 21, + 21, 23, 24, 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, 27, 28, 26, + 29, 30, 31, 32, 31, 31, 31, 31, 33, 34, 35, 31, 31, 31, 36, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 29, 31, 31, 31, 31, + 37, 38, 37, 37, 37, 37, 37, 37, 37, 39, 31, 31, 31, 31, 31, 31, + 40, 40, 40, 40, 40, 40, 41, 26, 42, 42, 42, 42, 42, 42, 42, 43, + 44, 44, 44, 44, 44, 45, 44, 46, 47, 47, 47, 48, 37, 49, 31, 31, + 31, 50, 51, 31, 31, 31, 31, 31, 31, 31, 31, 31, 52, 31, 31, 31, + 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 53, 55, 53, 53, 53, + 56, 57, 58, 59, 59, 60, 61, 62, 57, 63, 64, 65, 66, 59, 59, 67, + 68, 69, 70, 71, 71, 72, 73, 74, 69, 75, 76, 77, 78, 71, 79, 26, + 80, 81, 82, 83, 83, 84, 85, 86, 81, 87, 88, 26, 89, 83, 90, 91, + 92, 93, 94, 95, 95, 96, 97, 98, 93, 99, 100, 101, 102, 95, 95, 26, + 103, 104, 105, 106, 107, 104, 108, 109, 104, 105, 110, 26, 111, 108, 108, 112, + 113, 114, 115, 113, 113, 115, 113, 116, 114, 117, 118, 119, 120, 113, 121, 113, + 122, 123, 124, 122, 122, 124, 125, 126, 123, 127, 128, 128, 129, 122, 130, 26, + 131, 132, 133, 131, 131, 131, 131, 131, 132, 133, 134, 131, 135, 131, 131, 131, + 136, 137, 138, 139, 137, 137, 140, 141, 138, 142, 143, 137, 144, 137, 145, 26, + 146, 147, 147, 147, 147, 147, 147, 148, 147, 147, 147, 149, 26, 26, 26, 26, + 150, 151, 152, 152, 153, 152, 152, 154, 155, 156, 152, 157, 26, 26, 26, 26, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 158, 158, 158, 160, 159, 158, + 158, 158, 158, 159, 158, 158, 158, 161, 158, 161, 162, 163, 26, 26, 26, 26, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 165, 165, 165, 165, 166, 167, 165, 165, 165, 165, 165, 168, + 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 172, 171, 170, 170, 170, 170, + 170, 171, 170, 170, 170, 170, 171, 172, 171, 170, 172, 170, 170, 170, 170, 170, + 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 170, 170, 170, 174, + 170, 170, 170, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, + 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, + 179, 179, 179, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 181, 183, + 184, 184, 185, 186, 187, 187, 188, 26, 189, 189, 190, 26, 191, 192, 193, 26, + 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 195, 194, 196, 194, 196, + 197, 198, 198, 199, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 200, + 198, 198, 198, 198, 198, 201, 178, 178, 178, 178, 178, 178, 178, 178, 202, 26, + 203, 203, 203, 204, 203, 205, 203, 205, 206, 203, 207, 207, 207, 208, 209, 26, + 210, 210, 210, 210, 210, 211, 210, 210, 210, 212, 210, 213, 194, 194, 194, 194, + 214, 214, 214, 215, 216, 216, 216, 216, 216, 216, 216, 217, 216, 216, 216, 218, + 216, 219, 216, 219, 216, 220, 9, 9, 9, 221, 26, 26, 26, 26, 26, 26, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 223, 222, 222, 222, 222, 222, 224, + 225, 225, 225, 225, 225, 225, 225, 225, 226, 226, 226, 226, 226, 226, 227, 228, + 229, 229, 229, 229, 229, 229, 229, 230, 229, 231, 232, 232, 232, 232, 232, 232, + 18, 233, 165, 165, 165, 165, 165, 234, 225, 26, 235, 9, 236, 237, 238, 239, + 2, 2, 2, 2, 240, 241, 2, 2, 2, 2, 2, 242, 243, 244, 2, 245, + 2, 2, 2, 2, 2, 2, 2, 246, 9, 9, 9, 9, 9, 9, 9, 9, + 14, 14, 247, 247, 14, 14, 14, 14, 247, 247, 14, 248, 14, 14, 14, 247, + 14, 14, 14, 14, 14, 14, 249, 14, 249, 14, 250, 251, 14, 14, 252, 253, + 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 256, 257, + 0, 258, 2, 259, 0, 0, 0, 0, 260, 26, 9, 9, 9, 9, 261, 26, + 0, 0, 0, 0, 262, 263, 4, 0, 0, 264, 0, 0, 2, 2, 2, 2, + 2, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 26, 26, 26, - 0, 266, 26, 26, 0, 0, 0, 0, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 269, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 2, 2, 2, 2, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 271, 272, 165, 165, 165, 165, 166, 167, 273, 273, - 273, 273, 273, 273, 273, 274, 275, 274, 170, 170, 172, 26, 172, 172, 172, 172, - 172, 172, 172, 172, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 276, 26, 26, 26, 26, 277, 277, 277, 278, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 279, 26, 277, 277, 277, 277, 277, 277, 277, 277, + 0, 0, 0, 0, 258, 26, 26, 26, 0, 266, 26, 26, 0, 0, 0, 0, + 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, + 0, 0, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 2, 2, 2, 2, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 271, 272, + 165, 165, 165, 165, 166, 167, 273, 273, 273, 273, 273, 273, 273, 274, 275, 274, + 170, 170, 172, 26, 172, 172, 172, 172, 172, 172, 172, 172, 18, 18, 18, 18, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 26, 26, 26, 26, + 277, 277, 277, 278, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 279, 26, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 280, 26, 26, 26, 0, 281, 282, 0, 0, 0, 283, 284, 0, 285, - 286, 287, 287, 287, 287, 287, 287, 287, 287, 287, 288, 289, 290, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 292, 293, 294, 294, 294, 294, 294, 295, 169, - 169, 169, 169, 169, 169, 169, 169, 169, 169, 296, 0, 0, 294, 294, 294, 294, - 0, 0, 0, 0, 281, 26, 291, 291, 169, 169, 169, 296, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 169, 169, 297, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 291, 291, 291, 291, 298, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277, - 0, 0, 0, 0, 0, 0, 0, 0, 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, 299, 300, 299, 299, 299, 299, 299, 299, - 301, 26, 302, 302, 302, 302, 302, 302, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 304, 26, 26, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 26, 0, 0, 0, 0, 306, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 307, 2, 2, 2, 2, 2, 2, - 2, 308, 309, 310, 26, 26, 311, 2, 312, 312, 312, 312, 312, 313, 0, 314, - 315, 315, 315, 315, 315, 315, 315, 26, 316, 316, 316, 316, 316, 316, 316, 316, - 317, 318, 316, 319, 53, 53, 53, 53, 320, 320, 320, 320, 320, 321, 322, 322, - 322, 322, 323, 324, 169, 169, 169, 325, 326, 326, 326, 326, 326, 326, 326, 326, - 326, 327, 326, 328, 164, 164, 164, 329, 330, 330, 330, 330, 330, 330, 331, 26, - 330, 332, 330, 333, 164, 164, 164, 164, 334, 334, 334, 334, 334, 334, 334, 334, - 335, 26, 26, 336, 337, 337, 338, 26, 339, 339, 339, 26, 172, 172, 2, 2, - 2, 2, 2, 340, 341, 342, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 337, 337, 337, 337, 337, 343, 337, 344, 169, 169, 169, 169, 345, 26, 169, 169, - 296, 346, 169, 169, 169, 169, 169, 345, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 280, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 347, 26, 26, 26, 26, 348, 26, 349, 350, 25, 25, 351, 352, - 353, 25, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 354, 26, 355, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 356, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 357, 31, 31, 31, 31, 31, - 31, 358, 26, 26, 26, 26, 31, 31, 9, 9, 0, 314, 9, 359, 0, 0, - 0, 0, 360, 0, 258, 281, 361, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 362, 363, 0, 0, 0, 1, 2, 2, 3, - 1, 2, 2, 3, 364, 291, 290, 291, 291, 291, 291, 365, 169, 169, 169, 296, - 366, 366, 366, 367, 258, 258, 26, 368, 369, 370, 369, 369, 371, 369, 369, 372, - 369, 373, 369, 373, 26, 26, 26, 26, 369, 369, 369, 369, 369, 369, 369, 369, - 369, 369, 369, 369, 369, 369, 369, 374, 375, 0, 0, 0, 0, 0, 376, 0, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 253, 0, 377, 378, 26, 26, 26, - 26, 26, 0, 0, 0, 0, 0, 379, 380, 380, 380, 381, 382, 382, 382, 382, - 382, 382, 383, 26, 384, 0, 0, 281, 385, 385, 385, 385, 386, 387, 388, 388, - 388, 389, 390, 390, 390, 390, 390, 391, 392, 392, 392, 393, 394, 394, 394, 394, - 395, 394, 396, 26, 26, 26, 26, 26, 397, 397, 397, 397, 397, 397, 397, 397, - 397, 397, 398, 398, 398, 398, 398, 398, 399, 399, 399, 400, 399, 401, 402, 402, - 402, 402, 403, 402, 402, 402, 402, 403, 404, 404, 404, 404, 404, 26, 405, 405, - 405, 405, 405, 405, 406, 407, 408, 409, 408, 409, 410, 408, 411, 408, 411, 412, - 26, 26, 26, 26, 26, 26, 26, 26, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, 414, 26, - 413, 413, 415, 26, 413, 26, 26, 26, 416, 2, 2, 2, 2, 2, 417, 308, - 26, 26, 26, 26, 26, 26, 26, 26, 418, 419, 420, 420, 420, 420, 421, 422, - 423, 423, 424, 423, 425, 425, 425, 425, 426, 426, 426, 427, 428, 426, 26, 26, - 26, 26, 26, 26, 429, 429, 430, 431, 432, 432, 432, 433, 434, 434, 434, 435, - 26, 26, 26, 26, 26, 26, 26, 26, 436, 436, 436, 436, 437, 437, 437, 438, - 437, 437, 439, 437, 437, 437, 437, 437, 440, 441, 442, 443, 444, 444, 445, 446, - 444, 447, 444, 447, 448, 448, 448, 448, 449, 449, 449, 449, 26, 26, 26, 26, - 450, 450, 450, 450, 451, 452, 451, 26, 453, 453, 453, 453, 453, 453, 454, 455, - 456, 456, 457, 456, 458, 458, 459, 458, 460, 460, 461, 462, 26, 463, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 465, 26, 26, 26, 26, 26, 26, 466, 466, 466, 466, 466, 466, 467, 26, - 466, 466, 466, 466, 466, 466, 467, 468, 469, 469, 469, 469, 469, 26, 469, 470, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 31, 31, 31, 50, 471, 471, 471, 471, 471, 472, 473, 26, - 26, 26, 26, 26, 26, 26, 26, 474, 475, 475, 475, 475, 475, 26, 476, 476, - 476, 476, 476, 477, 26, 26, 478, 478, 478, 479, 26, 26, 26, 26, 480, 480, - 480, 481, 26, 26, 482, 482, 483, 26, 484, 484, 484, 484, 484, 484, 484, 484, - 484, 485, 486, 484, 484, 484, 485, 487, 488, 488, 488, 488, 488, 488, 488, 488, - 489, 490, 491, 491, 491, 492, 491, 493, 494, 494, 494, 494, 494, 494, 495, 494, - 494, 26, 496, 496, 496, 496, 497, 26, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 499, 137, 500, 26, 501, 501, 502, 501, 501, 501, 501, 501, - 503, 26, 26, 26, 26, 26, 26, 26, 504, 505, 506, 507, 506, 508, 509, 509, - 509, 509, 509, 509, 509, 510, 509, 511, 512, 513, 514, 515, 515, 516, 517, 518, - 513, 519, 520, 521, 522, 523, 523, 26, 524, 524, 524, 524, 524, 524, 524, 524, - 524, 524, 524, 525, 526, 26, 26, 26, 527, 527, 527, 527, 527, 527, 527, 527, - 527, 26, 527, 528, 26, 26, 26, 26, 529, 529, 529, 529, 529, 529, 530, 529, - 529, 529, 529, 530, 26, 26, 26, 26, 531, 531, 531, 531, 531, 531, 531, 531, - 532, 26, 531, 533, 198, 534, 26, 26, 535, 535, 535, 535, 535, 535, 535, 536, - 535, 536, 26, 26, 26, 26, 26, 26, 537, 537, 537, 538, 537, 539, 537, 537, - 540, 26, 26, 26, 26, 26, 26, 26, 541, 541, 541, 541, 541, 541, 541, 542, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 544, 545, 546, 547, 548, 549, 549, 549, 550, 551, - 546, 26, 549, 552, 26, 26, 26, 26, 26, 26, 26, 26, 553, 554, 553, 553, - 553, 553, 553, 554, 555, 26, 26, 26, 556, 556, 556, 556, 556, 556, 556, 556, - 556, 26, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 558, 26, 178, 178, - 559, 559, 559, 559, 559, 559, 559, 560, 53, 561, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 562, 563, 562, 562, 562, 562, 564, 562, - 565, 26, 562, 562, 562, 566, 567, 567, 567, 567, 568, 567, 567, 569, 570, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 571, 572, 573, 573, 573, 573, 571, 574, - 573, 26, 573, 575, 576, 577, 578, 578, 578, 579, 580, 581, 578, 582, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 583, 583, 583, 584, 585, 585, 586, 585, 585, 585, 585, 587, - 585, 585, 585, 588, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 589, 26, - 108, 108, 108, 108, 108, 108, 590, 591, 592, 592, 592, 592, 592, 592, 592, 592, - 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, 593, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 592, 592, 592, 592, 592, 592, 592, 592, - 592, 592, 592, 592, 592, 594, 595, 26, 592, 592, 592, 592, 592, 592, 592, 592, - 596, 26, 26, 26, 26, 26, 26, 26, 26, 26, 597, 597, 597, 597, 597, 597, - 597, 597, 597, 597, 597, 597, 598, 26, 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 600, 26, 26, 26, 26, 26, 601, 601, 601, 601, 601, 601, 601, 601, - 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, - 602, 26, 26, 26, 26, 26, 26, 26, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 603, - 604, 604, 604, 605, 604, 606, 607, 607, 607, 607, 607, 607, 607, 607, 607, 608, - 607, 609, 610, 610, 610, 611, 611, 26, 612, 612, 612, 612, 612, 612, 612, 612, - 613, 26, 612, 614, 614, 612, 612, 615, 612, 612, 26, 26, 26, 26, 26, 26, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 280, 26, 26, 26, 0, 0, + 281, 0, 0, 0, 282, 283, 0, 284, 285, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 287, 288, 289, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 291, + 292, 293, 293, 293, 293, 293, 294, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 295, 0, 0, 293, 293, 293, 293, 0, 0, 0, 0, 296, 297, 290, 290, + 169, 169, 169, 295, 0, 0, 0, 0, 0, 0, 0, 0, 169, 169, 169, 298, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 290, 290, 290, 290, 299, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 0, 0, 0, 0, 0, + 277, 277, 277, 277, 277, 277, 277, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 301, 300, 300, 300, 300, 300, 300, 302, 26, 303, 303, 303, 303, 303, 303, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 305, 26, 26, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 26, + 0, 0, 0, 0, 307, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 308, 2, 2, 2, 2, 2, 2, 2, 309, 310, 311, 26, 26, 312, 2, + 313, 313, 313, 313, 313, 314, 0, 315, 316, 316, 316, 316, 316, 316, 316, 26, + 317, 317, 317, 317, 317, 317, 317, 317, 318, 319, 317, 320, 53, 53, 53, 53, + 321, 321, 321, 321, 321, 322, 323, 323, 323, 323, 324, 325, 169, 169, 169, 326, + 327, 327, 327, 327, 327, 327, 327, 327, 327, 328, 327, 329, 164, 164, 164, 330, + 331, 331, 331, 331, 331, 331, 332, 26, 331, 333, 331, 334, 164, 164, 164, 164, + 335, 335, 335, 335, 335, 335, 335, 335, 336, 26, 26, 337, 338, 338, 339, 26, + 340, 340, 340, 26, 172, 172, 2, 2, 2, 2, 2, 341, 342, 343, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 338, 338, 338, 338, 338, 344, 338, 345, + 169, 169, 169, 169, 346, 26, 169, 169, 295, 347, 169, 169, 169, 169, 169, 346, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 617, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 618, 618, 618, 618, 618, 618, 618, 618, - 618, 619, 618, 618, 618, 618, 618, 618, 618, 620, 618, 618, 26, 26, 26, 26, - 26, 26, 26, 26, 621, 26, 347, 26, 622, 622, 622, 622, 622, 622, 622, 622, - 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, - 622, 622, 622, 622, 622, 622, 622, 26, 623, 623, 623, 623, 623, 623, 623, 623, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 280, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 348, 26, 26, 26, 26, + 349, 26, 350, 351, 25, 25, 352, 353, 354, 25, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 355, 26, 356, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 357, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 358, 31, 31, 31, 31, 31, 31, 359, 26, 26, 26, 26, 31, 31, + 9, 9, 0, 315, 9, 360, 0, 0, 0, 0, 361, 0, 258, 296, 362, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 363, + 364, 0, 0, 0, 1, 2, 2, 3, 1, 2, 2, 3, 365, 290, 289, 290, + 290, 290, 290, 366, 169, 169, 169, 295, 367, 367, 367, 368, 258, 258, 26, 369, + 370, 371, 370, 370, 372, 370, 370, 373, 370, 374, 370, 374, 26, 26, 26, 26, + 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 375, + 376, 0, 0, 0, 0, 0, 377, 0, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 253, 0, 378, 379, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 380, + 381, 381, 381, 382, 383, 383, 383, 383, 383, 383, 384, 26, 385, 0, 0, 296, + 386, 386, 386, 386, 387, 388, 389, 389, 389, 390, 391, 391, 391, 391, 391, 392, + 393, 393, 393, 394, 395, 395, 395, 395, 396, 395, 397, 26, 26, 26, 26, 26, + 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 399, 399, 399, 399, 399, 399, + 400, 400, 400, 401, 400, 402, 403, 403, 403, 403, 404, 403, 403, 403, 403, 404, + 405, 405, 405, 405, 405, 26, 406, 406, 406, 406, 406, 406, 407, 408, 409, 410, + 409, 410, 411, 409, 412, 409, 412, 413, 26, 26, 26, 26, 26, 26, 26, 26, + 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, + 414, 414, 414, 414, 414, 414, 415, 26, 414, 414, 416, 26, 414, 26, 26, 26, + 417, 2, 2, 2, 2, 2, 418, 309, 26, 26, 26, 26, 26, 26, 26, 26, + 419, 420, 421, 421, 421, 421, 422, 423, 424, 424, 425, 424, 426, 426, 426, 426, + 427, 427, 427, 428, 429, 427, 26, 26, 26, 26, 26, 26, 430, 430, 431, 432, + 433, 433, 433, 434, 435, 435, 435, 436, 26, 26, 26, 26, 26, 26, 26, 26, + 437, 437, 437, 437, 438, 438, 438, 439, 438, 438, 440, 438, 438, 438, 438, 438, + 441, 442, 443, 444, 445, 445, 446, 447, 445, 448, 445, 448, 449, 449, 449, 449, + 450, 450, 450, 450, 26, 26, 26, 26, 451, 451, 451, 451, 452, 453, 452, 26, + 454, 454, 454, 454, 454, 454, 455, 456, 457, 457, 458, 457, 459, 459, 460, 459, + 461, 461, 462, 463, 26, 464, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 465, 465, 465, 465, 465, 465, 465, 465, 465, 466, 26, 26, 26, 26, 26, 26, + 467, 467, 467, 467, 467, 467, 468, 26, 467, 467, 467, 467, 467, 467, 468, 469, + 470, 470, 470, 470, 470, 26, 470, 471, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 31, 31, 31, 50, + 472, 472, 472, 472, 472, 473, 474, 26, 26, 26, 26, 26, 26, 26, 26, 475, + 476, 476, 476, 476, 476, 26, 477, 477, 477, 477, 477, 478, 26, 26, 479, 479, + 479, 480, 26, 26, 26, 26, 481, 481, 481, 482, 26, 26, 483, 483, 484, 26, + 485, 485, 485, 485, 485, 485, 485, 485, 485, 486, 487, 485, 485, 485, 486, 488, + 489, 489, 489, 489, 489, 489, 489, 489, 490, 491, 492, 492, 492, 493, 492, 494, + 495, 495, 495, 495, 495, 495, 496, 495, 495, 26, 497, 497, 497, 497, 498, 26, + 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 500, 137, 501, 26, + 502, 502, 503, 502, 502, 502, 502, 502, 504, 26, 26, 26, 26, 26, 26, 26, + 505, 506, 507, 508, 507, 509, 510, 510, 510, 510, 510, 510, 510, 511, 510, 512, + 513, 514, 515, 516, 516, 517, 518, 519, 514, 520, 521, 522, 523, 524, 524, 26, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 526, 527, 26, 26, 26, + 528, 528, 528, 528, 528, 528, 528, 528, 528, 26, 528, 529, 26, 26, 26, 26, + 530, 530, 530, 530, 530, 530, 531, 530, 530, 530, 530, 531, 26, 26, 26, 26, + 532, 532, 532, 532, 532, 532, 532, 532, 533, 26, 532, 534, 198, 535, 26, 26, + 536, 536, 536, 536, 536, 536, 536, 537, 536, 537, 26, 26, 26, 26, 26, 26, + 538, 538, 538, 539, 538, 540, 538, 538, 541, 26, 26, 26, 26, 26, 26, 26, + 542, 542, 542, 542, 542, 542, 542, 543, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 545, 546, + 547, 548, 549, 550, 550, 550, 551, 552, 547, 26, 550, 553, 26, 26, 26, 26, + 26, 26, 26, 26, 554, 555, 554, 554, 554, 554, 554, 555, 556, 26, 26, 26, + 557, 557, 557, 557, 557, 557, 557, 557, 557, 26, 558, 558, 558, 558, 558, 558, + 558, 558, 558, 558, 559, 26, 178, 178, 560, 560, 560, 560, 560, 560, 560, 561, + 53, 562, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 563, 564, 563, 563, 563, 563, 565, 563, 566, 26, 563, 563, 563, 567, 568, 568, + 568, 568, 569, 568, 568, 570, 571, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 572, 573, 574, 574, 574, 574, 572, 575, 574, 26, 574, 576, 577, 578, 579, 579, + 579, 580, 581, 582, 579, 583, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 584, 584, 584, 585, + 586, 586, 587, 586, 586, 586, 586, 588, 586, 586, 586, 589, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 590, 26, 108, 108, 108, 108, 108, 108, 591, 592, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 594, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 595, 596, 26, + 593, 593, 593, 593, 593, 593, 593, 593, 597, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 599, 26, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 601, 26, 26, 26, 26, 26, + 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, + 602, 602, 602, 602, 602, 602, 602, 602, 603, 26, 26, 26, 26, 26, 26, 26, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 604, 605, 605, 605, 606, 605, 607, 608, 608, + 608, 608, 608, 608, 608, 608, 608, 609, 608, 610, 611, 611, 611, 612, 612, 26, + 613, 613, 613, 613, 613, 613, 613, 613, 614, 26, 613, 615, 615, 613, 613, 616, + 613, 613, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 617, 617, 617, 617, 617, 617, 617, 617, + 617, 617, 617, 618, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 619, 619, 619, 619, 619, 619, 619, 619, 619, 620, 619, 619, 619, 619, 619, 619, + 619, 621, 619, 619, 26, 26, 26, 26, 26, 26, 26, 26, 622, 26, 348, 26, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, - 623, 623, 624, 26, 26, 26, 26, 26, 622, 625, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 626, 627, 628, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 629, 26, 630, 26, - 26, 26, 631, 26, 632, 26, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, - 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, - 633, 633, 633, 633, 633, 633, 633, 634, 635, 635, 635, 635, 635, 635, 635, 635, - 635, 635, 635, 635, 635, 636, 635, 637, 635, 638, 635, 639, 281, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 9, 9, 9, 9, 9, 640, 9, 9, - 221, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 281, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 276, 26, 0, 0, 0, 0, 258, 363, 0, 0, - 0, 0, 0, 0, 641, 642, 0, 643, 644, 645, 0, 0, 0, 646, 0, 0, - 0, 0, 0, 0, 0, 266, 26, 26, 14, 14, 14, 14, 14, 14, 14, 14, - 247, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 0, 0, 281, 26, 0, 0, 281, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 258, 26, 0, 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 647, 648, 0, 649, - 650, 0, 0, 0, 0, 0, 0, 0, 269, 651, 255, 255, 0, 0, 0, 652, - 653, 654, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 268, 0, 0, 0, 0, 0, 0, 656, 656, 656, 656, 656, 656, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, 656, 657, 26, 658, 659, 656, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 2, 2, 2, 348, 660, 308, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 661, 270, 270, 662, 663, 664, 18, 18, - 18, 18, 18, 18, 18, 665, 26, 26, 26, 666, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 667, 667, 667, 667, 667, 668, 667, 669, - 667, 670, 26, 26, 26, 26, 26, 26, 26, 26, 671, 671, 671, 672, 26, 26, - 673, 673, 673, 673, 673, 673, 673, 674, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 675, 675, 675, 675, 675, 676, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 172, 677, 170, 172, 678, 678, 678, 678, 678, 678, 678, 678, - 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, - 679, 678, 680, 26, 26, 26, 26, 26, 681, 681, 681, 681, 681, 681, 681, 681, - 681, 682, 681, 683, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 363, 0, 0, 0, 0, 0, 0, 0, 377, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 363, 0, 0, 0, 0, 0, 0, 276, - 26, 26, 26, 26, 26, 26, 26, 26, 684, 31, 31, 31, 685, 686, 687, 688, - 689, 690, 685, 691, 685, 687, 687, 692, 31, 693, 31, 694, 695, 693, 31, 694, - 26, 26, 26, 26, 26, 26, 51, 26, 0, 0, 0, 0, 0, 281, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 281, 26, 0, 258, 363, 0, - 363, 0, 363, 0, 0, 0, 276, 26, 0, 0, 0, 0, 0, 276, 26, 26, - 26, 26, 26, 26, 696, 0, 0, 0, 697, 26, 0, 0, 0, 0, 0, 281, - 0, 260, 314, 26, 276, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 698, 0, 377, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 258, 699, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 314, 0, 281, 260, 26, 0, 281, 0, 0, 0, 0, 0, 0, - 0, 26, 0, 314, 0, 0, 0, 0, 0, 26, 0, 0, 0, 276, 314, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 281, 26, 0, 276, 0, 377, 0, 260, 0, 0, 0, 0, 0, 269, - 276, 696, 0, 281, 0, 260, 0, 260, 0, 0, 360, 0, 0, 0, 0, 0, - 0, 266, 26, 26, 26, 26, 0, 314, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 347, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 280, 277, 277, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 347, 26, 277, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 277, 277, 700, 26, 26, 26, 277, 277, 277, 280, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 701, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 702, 26, 26, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, + 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 26, + 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, + 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 625, 26, 26, 26, 26, 26, + 623, 626, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 627, 628, + 629, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 630, 26, 631, 26, 26, 26, 632, 26, 633, 26, 634, 634, + 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, + 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 635, + 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 637, 636, 638, + 636, 639, 636, 640, 296, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 9, 9, 9, 9, 9, 641, 9, 9, 221, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 26, + 0, 0, 0, 0, 258, 364, 0, 0, 0, 0, 0, 0, 642, 643, 0, 644, + 645, 646, 0, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 266, 26, 26, + 14, 14, 14, 14, 14, 14, 14, 14, 247, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 296, 26, 0, 0, 296, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 26, 0, 0, 0, 260, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 648, 649, 0, 650, 651, 0, 0, 0, 0, 0, 0, 0, + 269, 652, 255, 255, 0, 0, 0, 653, 654, 655, 656, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 658, 26, 659, 660, 657, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 2, 2, 2, 349, 661, 309, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 662, 270, 270, 663, 664, 665, 18, 18, 18, 18, 18, 18, 18, 666, 26, 26, + 26, 667, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 668, 668, 668, 668, 668, 669, 668, 670, 668, 671, 26, 26, 26, 26, 26, 26, + 26, 26, 672, 672, 672, 673, 26, 26, 674, 674, 674, 674, 674, 674, 674, 675, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 676, 676, 676, 676, 676, 677, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 172, 678, 170, 172, + 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, + 679, 679, 679, 679, 679, 679, 679, 679, 680, 679, 681, 26, 26, 26, 26, 26, + 682, 682, 682, 682, 682, 682, 682, 682, 682, 683, 682, 684, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 364, 0, + 0, 0, 0, 0, 0, 0, 378, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 364, 0, 0, 0, 0, 0, 0, 276, 26, 26, 26, 26, 26, 26, 26, 26, + 685, 31, 31, 31, 686, 687, 688, 689, 690, 691, 686, 692, 686, 688, 688, 693, + 31, 694, 31, 695, 696, 694, 31, 695, 26, 26, 26, 26, 26, 26, 51, 26, + 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 26, 0, 258, 364, 0, 364, 0, 364, 0, 0, 0, 276, 26, + 0, 0, 0, 0, 0, 276, 26, 26, 26, 26, 26, 26, 697, 0, 0, 0, + 698, 26, 0, 0, 0, 0, 0, 296, 0, 260, 315, 26, 276, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, 0, 378, 0, 378, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 258, 700, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 315, 0, 296, 260, 26, + 0, 296, 0, 0, 0, 0, 0, 0, 0, 26, 0, 315, 0, 0, 0, 0, + 0, 26, 0, 0, 0, 276, 315, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 26, 0, 276, 0, 378, + 0, 260, 0, 0, 0, 0, 0, 269, 276, 697, 0, 296, 0, 260, 0, 260, + 0, 0, 361, 0, 0, 0, 0, 0, 0, 266, 26, 26, 26, 26, 0, 315, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 26, 26, 26, 26, + 277, 277, 277, 277, 277, 277, 277, 348, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 280, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 348, 26, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 701, 26, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 280, 26, 26, 26, 26, + 277, 277, 277, 280, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 702, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 703, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, 946, 948, 0, 962, - 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041,1042,1043,1047, 0, - 0,1080,1081,1082,1086,1110, 0, 0,1124,1125,1126,1127,1131,1133, 0,1147, - 1154,1155,1156,1161,1187,1188,1189,1193, 0,1219,1226,1227,1228,1229,1233, 0, - 0,1267,1268,1269,1273,1298, 0,1303, 943,1128, 944,1129, 954,1139, 958,1143, - 959,1144, 960,1145, 961,1146, 964,1149, 0, 0, 973,1158, 974,1159, 975,1160, - 983,1168, 978,1163, 988,1173, 990,1175, 991,1176, 993,1178, 994,1179, 0, 0, - 1004,1190,1005,1191,1006,1192,1014,1199,1007, 0, 0, 0,1016,1201,1020,1206, - 0,1022,1208,1025,1211,1023,1209, 0, 0, 0, 0,1032,1218,1037,1223,1035, - 1221, 0, 0, 0,1044,1230,1045,1231,1049,1235, 0, 0,1058,1244,1064,1250, - 1060,1246,1066,1252,1067,1253,1072,1258,1069,1255,1077,1264,1074,1261, 0, 0, - 1083,1270,1084,1271,1085,1272,1088,1275,1089,1276,1096,1283,1103,1290,1111,1299, - 1115,1118,1307,1120,1309,1121,1310, 0,1053,1239, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,1093,1280, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 949,1134,1010,1195,1050,1236,1090,1277,1341,1368,1340, - 1367,1342,1369,1339,1366, 0,1320,1347,1418,1419,1323,1350, 0, 0, 992,1177, - 1018,1204,1055,1241,1416,1417,1415,1424,1202, 0, 0, 0, 987,1172, 0, 0, - 1031,1217,1321,1348,1322,1349,1338,1365, 950,1135, 951,1136, 979,1164, 980,1165, - 1011,1196,1012,1197,1051,1237,1052,1238,1061,1247,1062,1248,1091,1278,1092,1279, - 1071,1257,1076,1263, 0, 0, 997,1182, 0, 0, 0, 0, 0, 0, 945,1130, - 982,1167,1337,1364,1335,1362,1046,1232,1422,1423,1113,1301, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10,1425, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,1314,1427, 5, - 1434,1438,1443, 0,1450, 0,1455,1461,1514, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1446,1458,1468,1476,1480,1486,1517, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1489,1503,1494,1500,1508, 0, 0, 0, 0,1520,1521, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1526,1528, 0,1525, 0, 0, 0,1522, - 0, 0, 0, 0,1536,1532,1539, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1556, 0, 0, 0, 0, 0, 0,1548,1550, 0,1547, 0, 0, 0,1567, - 0, 0, 0, 0,1558,1554,1561, 0, 0, 0, 0, 0, 0, 0,1568,1569, - 0, 0, 0, 0, 0, 0, 0, 0, 0,1529,1551, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1523,1545,1524,1546, 0, 0,1527,1549, - 0, 0,1570,1571,1530,1552,1531,1553, 0, 0,1533,1555,1535,1557,1537,1559, - 0, 0,1572,1573,1544,1566,1538,1560,1540,1562,1541,1563,1542,1564, 0, 0, - 1543,1565, 0, 0, 0, 0, 0, 0, 0, 0,1606,1607,1609,1608,1610, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1613, 0,1611, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1612, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1620, 0, 0, 0, 0, 0, 0, 0,1623, 0, 0,1624, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1614,1615,1616,1617,1618,1619,1621,1622, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1628,1629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1625,1626, 0,1627, 0, 0, 0,1634, 0, 0,1635, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1630,1631,1632, 0, 0,1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1639, 0, 0,1638,1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1636,1637, 0, 0, 0, 0, 0, 0,1641, 0, 0, 0, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1642,1644,1643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1645, 0, 0, 0, 0, 0, 0, 0,1646, 0, 0, 0, 0, 0, 0,1648, - 1649, 0,1647,1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1651,1653,1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1654, 0,1655,1657,1656, 0, 0, 0, 0,1659, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1660, 0, 0, 0, 0,1661, 0, 0, 0, 0,1662, - 0, 0, 0, 0,1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1658, 0, 0, 0, 0, 0, 0, 0, 0, 0,1664, 0,1665,1673, 0, - 1674, 0, 0, 0, 0, 0, 0, 0, 0,1666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1668, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1669, 0, 0, 0, 0,1670, 0, 0, 0, 0,1671, - 0, 0, 0, 0,1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1675, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1676, 0, - 1677, 0,1678, 0,1679, 0,1680, 0, 0, 0,1681, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1682, 0,1683, 0, 0,1684,1685, 0,1686, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 953,1138, 955,1140, 956,1141, 957,1142, - 1324,1351, 963,1148, 965,1150, 968,1153, 966,1151, 967,1152,1378,1380,1379,1381, - 984,1169, 985,1170,1420,1421, 986,1171, 989,1174, 995,1180, 998,1183, 996,1181, - 999,1184,1000,1185,1015,1200,1329,1356,1017,1203,1019,1205,1021,1207,1024,1210, - 1687,1688,1027,1213,1026,1212,1028,1214,1029,1215,1030,1216,1034,1220,1036,1222, - 1039,1225,1038,1224,1334,1361,1336,1363,1382,1384,1383,1385,1056,1242,1057,1243, - 1059,1245,1063,1249,1689,1690,1065,1251,1068,1254,1070,1256,1386,1387,1388,1389, - 1691,1692,1073,1259,1075,1262,1079,1266,1078,1265,1095,1282,1098,1285,1097,1284, - 1390,1391,1392,1393,1099,1286,1100,1287,1101,1288,1102,1289,1105,1292,1104,1291, - 1106,1294,1107,1295,1108,1296,1114,1302,1119,1308,1122,1311,1123,1312,1186,1260, - 1293,1305, 0,1394, 0, 0, 0, 0, 952,1137, 947,1132,1317,1344,1316,1343, - 1319,1346,1318,1345,1693,1695,1371,1375,1370,1374,1373,1377,1372,1376,1694,1696, - 981,1166, 977,1162, 972,1157,1326,1353,1325,1352,1328,1355,1327,1354,1697,1698, - 1009,1194,1013,1198,1054,1240,1048,1234,1331,1358,1330,1357,1333,1360,1332,1359, - 1699,1700,1396,1401,1395,1400,1398,1403,1397,1402,1399,1404,1094,1281,1087,1274, - 1406,1411,1405,1410,1408,1413,1407,1412,1409,1414,1109,1297,1117,1306,1116,1304, - 1112,1300, 0, 0, 0, 0, 0, 0,1471,1472,1701,1705,1702,1706,1703,1707, - 1430,1431,1715,1719,1716,1720,1717,1721,1477,1478,1729,1731,1730,1732, 0, 0, - 1435,1436,1733,1735,1734,1736, 0, 0,1481,1482,1737,1741,1738,1742,1739,1743, - 1439,1440,1751,1755,1752,1756,1753,1757,1490,1491,1765,1768,1766,1769,1767,1770, - 1447,1448,1771,1774,1772,1775,1773,1776,1495,1496,1777,1779,1778,1780, 0, 0, - 1451,1452,1781,1783,1782,1784, 0, 0,1504,1505,1785,1788,1786,1789,1787,1790, - 0,1459, 0,1791, 0,1792, 0,1793,1509,1510,1794,1798,1795,1799,1796,1800, - 1462,1463,1808,1812,1809,1813,1810,1814,1467, 21,1475, 22,1479, 23,1485, 24, - 1493, 27,1499, 28,1507, 29, 0, 0,1704,1708,1709,1710,1711,1712,1713,1714, - 1718,1722,1723,1724,1725,1726,1727,1728,1740,1744,1745,1746,1747,1748,1749,1750, - 1754,1758,1759,1760,1761,1762,1763,1764,1797,1801,1802,1803,1804,1805,1806,1807, - 1811,1815,1816,1817,1818,1819,1820,1821,1470,1469,1822,1474,1465, 0,1473,1825, - 1429,1428,1426, 12,1432, 0, 26, 0, 0,1315,1823,1484,1466, 0,1483,1829, - 1433, 13,1437, 14,1441,1826,1827,1828,1488,1487,1513, 19, 0, 0,1492,1515, - 1445,1444,1442, 15, 0,1831,1832,1833,1502,1501,1516, 25,1497,1498,1506,1518, - 1457,1456,1454, 17,1453,1313, 11, 3, 0, 0,1824,1512,1519, 0,1511,1830, - 1449, 16,1460, 18,1464, 4, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, - 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1834,1835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1836, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1837,1839,1838, 0, 0, 0, 0,1840, 0, 0, 0, - 0,1841, 0, 0,1842, 0, 0, 0, 0, 0, 0, 0,1843, 0,1844, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,1845, 0, 0,1846, 0, 0,1847, - 0,1848, 0, 0, 0, 0, 0, 0, 937, 0,1850, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1849, 936, 938,1851,1852, 0, 0,1853,1854, 0, 0, - 1855,1856, 0, 0, 0, 0, 0, 0,1857,1858, 0, 0,1861,1862, 0, 0, - 1863,1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1867,1868,1869,1870,1859,1860,1865,1866, 0, 0, 0, 0, - 0, 0,1871,1872,1873,1874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1877, 0,1878, 0,1879, 0,1880, 0,1881, 0,1882, 0, - 1883, 0,1884, 0,1885, 0,1886, 0,1887, 0,1888, 0, 0,1889, 0,1890, - 0,1891, 0, 0, 0, 0, 0, 0,1892,1893, 0,1894,1895, 0,1896,1897, - 0,1898,1899, 0,1900,1901, 0, 0, 0, 0, 0, 0,1876, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1902, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1904, 0,1905, 0,1906, 0,1907, 0,1908, 0,1909, 0, - 1910, 0,1911, 0,1912, 0,1913, 0,1914, 0,1915, 0, 0,1916, 0,1917, - 0,1918, 0, 0, 0, 0, 0, 0,1919,1920, 0,1921,1922, 0,1923,1924, - 0,1925,1926, 0,1927,1928, 0, 0, 0, 0, 0, 0,1903, 0, 0,1929, - 1930,1931,1932, 0, 0, 0,1933, 0, 710, 385, 724, 715, 455, 103, 186, 825, - 825, 242, 751, 205, 241, 336, 524, 601, 663, 676, 688, 738, 411, 434, 474, 500, - 649, 746, 799, 108, 180, 416, 482, 662, 810, 275, 462, 658, 692, 344, 618, 679, - 293, 388, 440, 492, 740, 116, 146, 168, 368, 414, 481, 527, 606, 660, 665, 722, - 781, 803, 809, 538, 553, 588, 642, 758, 811, 701, 233, 299, 573, 612, 487, 540, - 714, 779, 232, 267, 412, 445, 457, 585, 594, 766, 167, 613, 149, 148, 560, 589, - 648, 768, 708, 345, 411, 704, 105, 259, 313, 496, 518, 174, 542, 120, 307, 101, - 430, 372, 584, 183, 228, 529, 650, 697, 424, 732, 428, 349, 632, 355, 517, 110, - 135, 147, 403, 580, 624, 700, 750, 170, 193, 245, 297, 374, 463, 543, 763, 801, - 812, 815, 162, 384, 420, 730, 287, 330, 337, 366, 459, 476, 509, 558, 591, 610, - 726, 652, 734, 759, 154, 163, 198, 473, 683, 697, 292, 311, 353, 423, 572, 494, - 113, 217, 259, 280, 314, 499, 506, 603, 608, 752, 778, 782, 788, 117, 557, 748, - 774, 320, 109, 126, 260, 265, 373, 411, 479, 523, 655, 737, 823, 380, 765, 161, - 395, 398, 438, 451, 502, 516, 537, 583, 791, 136, 340, 769, 122, 273, 446, 727, - 305, 322, 400, 496, 771, 155, 190, 269, 377, 391, 406, 432, 501, 519, 599, 684, - 687, 749, 776, 175, 452, 191, 480, 510, 659, 772, 805, 813, 397, 444, 619, 566, - 568, 575, 491, 471, 707, 111, 636, 156, 153, 288, 346, 578, 256, 435, 383, 729, - 680, 767, 694, 295, 128, 210, 0, 0, 227, 0, 379, 0, 0, 150, 493, 525, - 544, 551, 552, 556, 783, 576, 604, 0, 661, 0, 703, 0, 0, 735, 743, 0, - 0, 0, 793, 794, 795, 808, 741, 773, 118, 127, 130, 166, 169, 177, 207, 213, - 215, 226, 229, 268, 270, 317, 327, 329, 335, 369, 375, 381, 404, 441, 448, 458, - 477, 484, 503, 539, 545, 547, 546, 548, 549, 550, 554, 555, 561, 564, 569, 591, - 593, 595, 598, 607, 620, 625, 625, 651, 690, 695, 705, 706, 716, 717, 733, 735, - 777, 786, 790, 315, 869, 623, 0, 0, 102, 145, 134, 115, 129, 138, 165, 171, - 207, 202, 206, 212, 227, 231, 240, 243, 250, 254, 294, 296, 303, 308, 319, 325, - 321, 329, 326, 335, 341, 357, 360, 362, 370, 379, 388, 389, 393, 421, 424, 438, - 456, 454, 458, 465, 477, 535, 485, 490, 493, 507, 512, 514, 521, 522, 525, 526, - 528, 533, 532, 541, 565, 569, 574, 586, 591, 597, 607, 637, 647, 674, 691, 693, - 695, 698, 703, 699, 705, 704, 702, 706, 709, 717, 728, 736, 747, 754, 770, 777, - 783, 784, 786, 787, 790, 802, 825, 848, 847, 857, 55, 65, 66, 883, 892, 916, - 822, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1586, 0,1605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1602,1603,1934,1935,1574,1575,1576,1577,1579,1580,1581,1583,1584, 0, - 1585,1587,1588,1589,1591, 0,1592, 0,1593,1594, 0,1595,1596, 0,1598,1599, - 1600,1601,1604,1582,1578,1590,1597, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1936, 0,1937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1939,1940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1941,1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1944,1943, 0,1945, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1946,1947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1949,1950,1951,1952,1953,1954,1955, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1956,1957,1958,1960,1959,1961, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 104, 107, 826, 114, 118, 119, 121, - 123, 124, 127, 125, 34, 830, 130, 131, 132, 137, 827, 35, 133, 139, 829, 142, - 143, 112, 144, 145, 924, 151, 152, 37, 157, 158, 159, 160, 38, 165, 166, 169, - 171, 172, 173, 174, 176, 177, 178, 179, 181, 182, 182, 182, 833, 468, 184, 185, - 834, 187, 188, 189, 196, 192, 194, 195, 197, 199, 200, 201, 203, 204, 204, 206, - 208, 209, 211, 218, 213, 219, 214, 216, 153, 234, 221, 222, 223, 220, 225, 224, - 230, 835, 235, 236, 237, 238, 239, 244, 836, 837, 247, 248, 249, 246, 251, 39, - 40, 253, 255, 255, 838, 257, 258, 259, 261, 839, 262, 263, 301, 264, 41, 266, - 270, 272, 271, 841, 274, 842, 277, 276, 278, 281, 282, 42, 283, 284, 285, 286, - 43, 843, 44, 289, 290, 291, 293, 934, 298, 845, 845, 621, 300, 300, 45, 852, - 894, 302, 304, 46, 306, 309, 310, 312, 316, 48, 47, 317, 846, 318, 323, 324, - 325, 324, 328, 329, 333, 331, 332, 334, 335, 336, 338, 339, 342, 343, 347, 351, - 849, 350, 348, 352, 354, 359, 850, 361, 358, 356, 49, 363, 365, 367, 364, 50, - 369, 371, 851, 376, 386, 378, 53, 381, 52, 51, 140, 141, 387, 382, 614, 78, - 388, 389, 390, 394, 392, 856, 54, 399, 396, 402, 404, 858, 405, 401, 407, 55, - 408, 409, 410, 413, 859, 415, 56, 417, 860, 418, 57, 419, 422, 424, 425, 861, - 840, 862, 426, 863, 429, 431, 427, 433, 437, 441, 438, 439, 442, 443, 864, 436, - 449, 450, 58, 454, 453, 865, 447, 460, 866, 867, 461, 466, 465, 464, 59, 467, - 470, 469, 472, 828, 475, 868, 478, 870, 483, 485, 486, 871, 488, 489, 872, 873, - 495, 497, 60, 498, 61, 61, 504, 505, 507, 508, 511, 62, 513, 874, 515, 875, - 518, 844, 520, 876, 877, 878, 63, 64, 528, 880, 879, 881, 882, 530, 531, 531, - 533, 66, 534, 67, 68, 884, 536, 538, 541, 69, 885, 549, 886, 887, 556, 559, - 70, 561, 562, 563, 888, 889, 889, 567, 71, 890, 570, 571, 72, 891, 577, 73, - 581, 579, 582, 893, 587, 74, 590, 592, 596, 75, 895, 896, 76, 897, 600, 898, - 602, 605, 607, 899, 900, 609, 901, 611, 853, 77, 615, 616, 79, 617, 252, 902, - 903, 854, 855, 621, 622, 731, 80, 627, 626, 628, 164, 629, 630, 631, 633, 904, - 632, 634, 639, 640, 635, 641, 646, 651, 638, 643, 644, 645, 905, 907, 906, 81, - 653, 654, 656, 911, 657, 908, 82, 83, 909, 910, 84, 664, 665, 666, 667, 669, - 668, 671, 670, 674, 672, 673, 675, 85, 677, 678, 86, 681, 682, 912, 685, 686, - 87, 689, 36, 913, 914, 88, 89, 696, 702, 709, 711, 915, 712, 713, 718, 719, - 917, 831, 721, 720, 723, 832, 725, 728, 918, 919, 739, 742, 744, 920, 745, 753, - 756, 757, 755, 760, 761, 921, 762, 90, 764, 922, 91, 775, 279, 780, 923, 925, - 92, 93, 785, 926, 94, 927, 787, 787, 789, 928, 792, 95, 796, 797, 798, 800, - 96, 929, 802, 804, 806, 97, 98, 807, 930, 99, 931, 932, 933, 814, 100, 816, - 817, 818, 819, 820, 821, 935, 0, 0, + 939, 940, 941, 942, 946, 948, 0, 962, 969, 970, 971, 976,1001,1002,1003,1008, + 0,1033,1040,1041,1042,1043,1047, 0, 0,1080,1081,1082,1086,1110, 0, 0, + 1124,1125,1126,1127,1131,1133, 0,1147,1154,1155,1156,1161,1187,1188,1189,1193, + 0,1219,1226,1227,1228,1229,1233, 0, 0,1267,1268,1269,1273,1298, 0,1303, + 943,1128, 944,1129, 954,1139, 958,1143, 959,1144, 960,1145, 961,1146, 964,1149, + 0, 0, 973,1158, 974,1159, 975,1160, 983,1168, 978,1163, 988,1173, 990,1175, + 991,1176, 993,1178, 994,1179, 0, 0,1004,1190,1005,1191,1006,1192,1014,1199, + 1007, 0, 0, 0,1016,1201,1020,1206, 0,1022,1208,1025,1211,1023,1209, 0, + 0, 0, 0,1032,1218,1037,1223,1035,1221, 0, 0, 0,1044,1230,1045,1231, + 1049,1235, 0, 0,1058,1244,1064,1250,1060,1246,1066,1252,1067,1253,1072,1258, + 1069,1255,1077,1264,1074,1261, 0, 0,1083,1270,1084,1271,1085,1272,1088,1275, + 1089,1276,1096,1283,1103,1290,1111,1299,1115,1118,1307,1120,1309,1121,1310, 0, + 1053,1239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1093, + 1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 949,1134,1010, + 1195,1050,1236,1090,1277,1341,1368,1340,1367,1342,1369,1339,1366, 0,1320,1347, + 1418,1419,1323,1350, 0, 0, 992,1177,1018,1204,1055,1241,1416,1417,1415,1424, + 1202, 0, 0, 0, 987,1172, 0, 0,1031,1217,1321,1348,1322,1349,1338,1365, + 950,1135, 951,1136, 979,1164, 980,1165,1011,1196,1012,1197,1051,1237,1052,1238, + 1061,1247,1062,1248,1091,1278,1092,1279,1071,1257,1076,1263, 0, 0, 997,1182, + 0, 0, 0, 0, 0, 0, 945,1130, 982,1167,1337,1364,1335,1362,1046,1232, + 1422,1423,1113,1301, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 9, 0, 10,1425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0,1314,1427, 5,1434,1438,1443, 0,1450, 0,1455,1461, + 1514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1446,1458,1468,1476,1480,1486, + 1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1489,1503,1494,1500,1508, 0, + 0, 0, 0,1520,1521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1526,1528, 0,1525, 0, 0, 0,1522, 0, 0, 0, 0,1536,1532,1539, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1534, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1556, 0, 0, 0, 0, 0, 0, + 1548,1550, 0,1547, 0, 0, 0,1567, 0, 0, 0, 0,1558,1554,1561, 0, + 0, 0, 0, 0, 0, 0,1568,1569, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1529,1551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1523,1545,1524,1546, 0, 0,1527,1549, 0, 0,1570,1571,1530,1552,1531,1553, + 0, 0,1533,1555,1535,1557,1537,1559, 0, 0,1572,1573,1544,1566,1538,1560, + 1540,1562,1541,1563,1542,1564, 0, 0,1543,1565, 0, 0, 0, 0, 0, 0, + 0, 0,1606,1607,1609,1608,1610, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1613, 0,1611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1620, 0, 0, 0, 0, 0, 0, + 0,1623, 0, 0,1624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1614,1615,1616,1617,1618,1619,1621,1622, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1628,1629, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1625,1626, 0,1627, + 0, 0, 0,1634, 0, 0,1635, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1630,1631,1632, 0, 0,1633, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1639, 0, 0,1638,1640, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1636,1637, 0, 0, + 0, 0, 0, 0,1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1642,1644,1643, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1645, 0, 0, 0, 0, 0, 0, 0, + 1646, 0, 0, 0, 0, 0, 0,1648,1649, 0,1647,1650, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1651,1653,1652, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1654, 0,1655,1657,1656, 0, + 0, 0, 0,1659, 0, 0, 0, 0, 0, 0, 0, 0, 0,1660, 0, 0, + 0, 0,1661, 0, 0, 0, 0,1662, 0, 0, 0, 0,1663, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1658, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1664, 0,1665,1673, 0,1674, 0, 0, 0, 0, 0, 0, 0, + 0,1666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,1668, 0, 0, 0, 0, 0, 0, 0, 0, 0,1669, 0, 0, + 0, 0,1670, 0, 0, 0, 0,1671, 0, 0, 0, 0,1672, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1667, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1675, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1676, 0,1677, 0,1678, 0,1679, 0,1680, 0, + 0, 0,1681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1682, 0,1683, 0, 0, + 1684,1685, 0,1686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 953,1138, 955,1140, 956,1141, 957,1142,1324,1351, 963,1148, 965,1150, 968,1153, + 966,1151, 967,1152,1378,1380,1379,1381, 984,1169, 985,1170,1420,1421, 986,1171, + 989,1174, 995,1180, 998,1183, 996,1181, 999,1184,1000,1185,1015,1200,1329,1356, + 1017,1203,1019,1205,1021,1207,1024,1210,1687,1688,1027,1213,1026,1212,1028,1214, + 1029,1215,1030,1216,1034,1220,1036,1222,1039,1225,1038,1224,1334,1361,1336,1363, + 1382,1384,1383,1385,1056,1242,1057,1243,1059,1245,1063,1249,1689,1690,1065,1251, + 1068,1254,1070,1256,1386,1387,1388,1389,1691,1692,1073,1259,1075,1262,1079,1266, + 1078,1265,1095,1282,1098,1285,1097,1284,1390,1391,1392,1393,1099,1286,1100,1287, + 1101,1288,1102,1289,1105,1292,1104,1291,1106,1294,1107,1295,1108,1296,1114,1302, + 1119,1308,1122,1311,1123,1312,1186,1260,1293,1305, 0,1394, 0, 0, 0, 0, + 952,1137, 947,1132,1317,1344,1316,1343,1319,1346,1318,1345,1693,1695,1371,1375, + 1370,1374,1373,1377,1372,1376,1694,1696, 981,1166, 977,1162, 972,1157,1326,1353, + 1325,1352,1328,1355,1327,1354,1697,1698,1009,1194,1013,1198,1054,1240,1048,1234, + 1331,1358,1330,1357,1333,1360,1332,1359,1699,1700,1396,1401,1395,1400,1398,1403, + 1397,1402,1399,1404,1094,1281,1087,1274,1406,1411,1405,1410,1408,1413,1407,1412, + 1409,1414,1109,1297,1117,1306,1116,1304,1112,1300, 0, 0, 0, 0, 0, 0, + 1471,1472,1701,1705,1702,1706,1703,1707,1430,1431,1715,1719,1716,1720,1717,1721, + 1477,1478,1729,1731,1730,1732, 0, 0,1435,1436,1733,1735,1734,1736, 0, 0, + 1481,1482,1737,1741,1738,1742,1739,1743,1439,1440,1751,1755,1752,1756,1753,1757, + 1490,1491,1765,1768,1766,1769,1767,1770,1447,1448,1771,1774,1772,1775,1773,1776, + 1495,1496,1777,1779,1778,1780, 0, 0,1451,1452,1781,1783,1782,1784, 0, 0, + 1504,1505,1785,1788,1786,1789,1787,1790, 0,1459, 0,1791, 0,1792, 0,1793, + 1509,1510,1794,1798,1795,1799,1796,1800,1462,1463,1808,1812,1809,1813,1810,1814, + 1467, 21,1475, 22,1479, 23,1485, 24,1493, 27,1499, 28,1507, 29, 0, 0, + 1704,1708,1709,1710,1711,1712,1713,1714,1718,1722,1723,1724,1725,1726,1727,1728, + 1740,1744,1745,1746,1747,1748,1749,1750,1754,1758,1759,1760,1761,1762,1763,1764, + 1797,1801,1802,1803,1804,1805,1806,1807,1811,1815,1816,1817,1818,1819,1820,1821, + 1470,1469,1822,1474,1465, 0,1473,1825,1429,1428,1426, 12,1432, 0, 26, 0, + 0,1315,1823,1484,1466, 0,1483,1829,1433, 13,1437, 14,1441,1826,1827,1828, + 1488,1487,1513, 19, 0, 0,1492,1515,1445,1444,1442, 15, 0,1831,1832,1833, + 1502,1501,1516, 25,1497,1498,1506,1518,1457,1456,1454, 17,1453,1313, 11, 3, + 0, 0,1824,1512,1519, 0,1511,1830,1449, 16,1460, 18,1464, 4, 0, 0, + 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 2, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1834,1835, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1836, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1837,1839,1838, + 0, 0, 0, 0,1840, 0, 0, 0, 0,1841, 0, 0,1842, 0, 0, 0, + 0, 0, 0, 0,1843, 0,1844, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,1845, 0, 0,1846, 0, 0,1847, 0,1848, 0, 0, 0, 0, 0, 0, + 937, 0,1850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1849, 936, 938, + 1851,1852, 0, 0,1853,1854, 0, 0,1855,1856, 0, 0, 0, 0, 0, 0, + 1857,1858, 0, 0,1861,1862, 0, 0,1863,1864, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1867,1868,1869,1870, + 1859,1860,1865,1866, 0, 0, 0, 0, 0, 0,1871,1872,1873,1874, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1875, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1877, 0,1878, 0, + 1879, 0,1880, 0,1881, 0,1882, 0,1883, 0,1884, 0,1885, 0,1886, 0, + 1887, 0,1888, 0, 0,1889, 0,1890, 0,1891, 0, 0, 0, 0, 0, 0, + 1892,1893, 0,1894,1895, 0,1896,1897, 0,1898,1899, 0,1900,1901, 0, 0, + 0, 0, 0, 0,1876, 0, 0, 0, 0, 0, 0, 0, 0, 0,1902, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1904, 0,1905, 0, + 1906, 0,1907, 0,1908, 0,1909, 0,1910, 0,1911, 0,1912, 0,1913, 0, + 1914, 0,1915, 0, 0,1916, 0,1917, 0,1918, 0, 0, 0, 0, 0, 0, + 1919,1920, 0,1921,1922, 0,1923,1924, 0,1925,1926, 0,1927,1928, 0, 0, + 0, 0, 0, 0,1903, 0, 0,1929,1930,1931,1932, 0, 0, 0,1933, 0, + 710, 385, 724, 715, 455, 103, 186, 825, 825, 242, 751, 205, 241, 336, 524, 601, + 663, 676, 688, 738, 411, 434, 474, 500, 649, 746, 799, 108, 180, 416, 482, 662, + 810, 275, 462, 658, 692, 344, 618, 679, 293, 388, 440, 492, 740, 116, 146, 168, + 368, 414, 481, 527, 606, 660, 665, 722, 781, 803, 809, 538, 553, 588, 642, 758, + 811, 701, 233, 299, 573, 612, 487, 540, 714, 779, 232, 267, 412, 445, 457, 585, + 594, 766, 167, 613, 149, 148, 560, 589, 648, 768, 708, 345, 411, 704, 105, 259, + 313, 496, 518, 174, 542, 120, 307, 101, 430, 372, 584, 183, 228, 529, 650, 697, + 424, 732, 428, 349, 632, 355, 517, 110, 135, 147, 403, 580, 624, 700, 750, 170, + 193, 245, 297, 374, 463, 543, 763, 801, 812, 815, 162, 384, 420, 730, 287, 330, + 337, 366, 459, 476, 509, 558, 591, 610, 726, 652, 734, 759, 154, 163, 198, 473, + 683, 697, 292, 311, 353, 423, 572, 494, 113, 217, 259, 280, 314, 499, 506, 603, + 608, 752, 778, 782, 788, 117, 557, 748, 774, 320, 109, 126, 260, 265, 373, 411, + 479, 523, 655, 737, 823, 380, 765, 161, 395, 398, 438, 451, 502, 516, 537, 583, + 791, 136, 340, 769, 122, 273, 446, 727, 305, 322, 400, 496, 771, 155, 190, 269, + 377, 391, 406, 432, 501, 519, 599, 684, 687, 749, 776, 175, 452, 191, 480, 510, + 659, 772, 805, 813, 397, 444, 619, 566, 568, 575, 491, 471, 707, 111, 636, 156, + 153, 288, 346, 578, 256, 435, 383, 729, 680, 767, 694, 295, 128, 210, 0, 0, + 227, 0, 379, 0, 0, 150, 493, 525, 544, 551, 552, 556, 783, 576, 604, 0, + 661, 0, 703, 0, 0, 735, 743, 0, 0, 0, 793, 794, 795, 808, 741, 773, + 118, 127, 130, 166, 169, 177, 207, 213, 215, 226, 229, 268, 270, 317, 327, 329, + 335, 369, 375, 381, 404, 441, 448, 458, 477, 484, 503, 539, 545, 547, 546, 548, + 549, 550, 554, 555, 561, 564, 569, 591, 593, 595, 598, 607, 620, 625, 625, 651, + 690, 695, 705, 706, 716, 717, 733, 735, 777, 786, 790, 315, 869, 623, 0, 0, + 102, 145, 134, 115, 129, 138, 165, 171, 207, 202, 206, 212, 227, 231, 240, 243, + 250, 254, 294, 296, 303, 308, 319, 325, 321, 329, 326, 335, 341, 357, 360, 362, + 370, 379, 388, 389, 393, 421, 424, 438, 456, 454, 458, 465, 477, 535, 485, 490, + 493, 507, 512, 514, 521, 522, 525, 526, 528, 533, 532, 541, 565, 569, 574, 586, + 591, 597, 607, 637, 647, 674, 691, 693, 695, 698, 703, 699, 705, 704, 702, 706, + 709, 717, 728, 736, 747, 754, 770, 777, 783, 784, 786, 787, 790, 802, 825, 848, + 847, 857, 55, 65, 66, 883, 892, 916, 822, 824, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1586, 0,1605, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1602,1603,1934,1935,1574,1575, + 1576,1577,1579,1580,1581,1583,1584, 0,1585,1587,1588,1589,1591, 0,1592, 0, + 1593,1594, 0,1595,1596, 0,1598,1599,1600,1601,1604,1582,1578,1590,1597, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1936, 0,1937, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1938, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1939,1940, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1941,1942, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1944,1943, 0,1945, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1946,1947, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1948, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1949,1950, + 1951,1952,1953,1954,1955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1956,1957,1958,1960,1959, + 1961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 106, 104, 107, 826, 114, 118, 119, 121, 123, 124, 127, 125, 34, 830, 130, 131, + 132, 137, 827, 35, 133, 139, 829, 142, 143, 112, 144, 145, 924, 151, 152, 37, + 157, 158, 159, 160, 38, 165, 166, 169, 171, 172, 173, 174, 176, 177, 178, 179, + 181, 182, 182, 182, 833, 468, 184, 185, 834, 187, 188, 189, 196, 192, 194, 195, + 197, 199, 200, 201, 203, 204, 204, 206, 208, 209, 211, 218, 213, 219, 214, 216, + 153, 234, 221, 222, 223, 220, 225, 224, 230, 835, 235, 236, 237, 238, 239, 244, + 836, 837, 247, 248, 249, 246, 251, 39, 40, 253, 255, 255, 838, 257, 258, 259, + 261, 839, 262, 263, 301, 264, 41, 266, 270, 272, 271, 841, 274, 842, 277, 276, + 278, 281, 282, 42, 283, 284, 285, 286, 43, 843, 44, 289, 290, 291, 293, 934, + 298, 845, 845, 621, 300, 300, 45, 852, 894, 302, 304, 46, 306, 309, 310, 312, + 316, 48, 47, 317, 846, 318, 323, 324, 325, 324, 328, 329, 333, 331, 332, 334, + 335, 336, 338, 339, 342, 343, 347, 351, 849, 350, 348, 352, 354, 359, 850, 361, + 358, 356, 49, 363, 365, 367, 364, 50, 369, 371, 851, 376, 386, 378, 53, 381, + 52, 51, 140, 141, 387, 382, 614, 78, 388, 389, 390, 394, 392, 856, 54, 399, + 396, 402, 404, 858, 405, 401, 407, 55, 408, 409, 410, 413, 859, 415, 56, 417, + 860, 418, 57, 419, 422, 424, 425, 861, 840, 862, 426, 863, 429, 431, 427, 433, + 437, 441, 438, 439, 442, 443, 864, 436, 449, 450, 58, 454, 453, 865, 447, 460, + 866, 867, 461, 466, 465, 464, 59, 467, 470, 469, 472, 828, 475, 868, 478, 870, + 483, 485, 486, 871, 488, 489, 872, 873, 495, 497, 60, 498, 61, 61, 504, 505, + 507, 508, 511, 62, 513, 874, 515, 875, 518, 844, 520, 876, 877, 878, 63, 64, + 528, 880, 879, 881, 882, 530, 531, 531, 533, 66, 534, 67, 68, 884, 536, 538, + 541, 69, 885, 549, 886, 887, 556, 559, 70, 561, 562, 563, 888, 889, 889, 567, + 71, 890, 570, 571, 72, 891, 577, 73, 581, 579, 582, 893, 587, 74, 590, 592, + 596, 75, 895, 896, 76, 897, 600, 898, 602, 605, 607, 899, 900, 609, 901, 611, + 853, 77, 615, 616, 79, 617, 252, 902, 903, 854, 855, 621, 622, 731, 80, 627, + 626, 628, 164, 629, 630, 631, 633, 904, 632, 634, 639, 640, 635, 641, 646, 651, + 638, 643, 644, 645, 905, 907, 906, 81, 653, 654, 656, 911, 657, 908, 82, 83, + 909, 910, 84, 664, 665, 666, 667, 669, 668, 671, 670, 674, 672, 673, 675, 85, + 677, 678, 86, 681, 682, 912, 685, 686, 87, 689, 36, 913, 914, 88, 89, 696, + 702, 709, 711, 915, 712, 713, 718, 719, 917, 831, 721, 720, 723, 832, 725, 728, + 918, 919, 739, 742, 744, 920, 745, 753, 756, 757, 755, 760, 761, 921, 762, 90, + 764, 922, 91, 775, 279, 780, 923, 925, 92, 93, 785, 926, 94, 927, 787, 787, + 789, 928, 792, 95, 796, 797, 798, 800, 96, 929, 802, 804, 806, 97, 98, 807, + 930, 99, 931, 932, 933, 814, 100, 816, 817, 818, 819, 820, 821, 935, 0, 0, }; static const int16_t _hb_ucd_i16[196] = @@ -2797,12 +2799,12 @@ static inline uint_fast8_t _hb_ucd_gc (unsigned u) { - return u<1114110u?_hb_ucd_u8[6800+(((_hb_ucd_u8[1312+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; + return u<1114110u?_hb_ucd_u8[6808+(((_hb_ucd_u8[1312+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; } static inline uint_fast8_t _hb_ucd_ccc (unsigned u) { - return u<125259u?_hb_ucd_u8[8792+(((_hb_ucd_u8[8236+(((_hb_ucd_u8[7776+(((_hb_ucd_u8[7424+(((_hb_ucd_u8[7178+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; + return u<125259u?_hb_ucd_u8[8800+(((_hb_ucd_u8[8244+(((_hb_ucd_u8[7784+(((_hb_ucd_u8[7432+(((_hb_ucd_u8[7186+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; } static inline unsigned _hb_ucd_b4 (const uint8_t* a, unsigned i) @@ -2812,24 +2814,24 @@ static inline int_fast16_t _hb_ucd_bmg (unsigned u) { - return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9540+(((_hb_ucd_u8[9420+(((_hb_ucd_b4(9292+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0; + return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9548+(((_hb_ucd_u8[9428+(((_hb_ucd_b4(9300+_hb_ucd_u8,u>>2>>3>>3))<<3)+((u>>2>>3)&7u))])<<3)+((u>>2)&7u))])<<2)+((u)&3u)]:0; } static inline uint_fast8_t _hb_ucd_sc (unsigned u) { - return u<918000u?_hb_ucd_u8[11062+(((_hb_ucd_u16[2040+(((_hb_ucd_u8[10326+(((_hb_ucd_u8[9876+(u>>3>>4>>4)])<<4)+((u>>3>>4)&15u))])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:2; + return u<918000u?_hb_ucd_u8[11070+(((_hb_ucd_u16[2048+(((_hb_ucd_u8[10334+(((_hb_ucd_u8[9884+(u>>3>>4>>4)])<<4)+((u>>3>>4)&15u))])<<4)+((u>>3)&15u))])<<3)+((u)&7u))]:2; } static inline uint_fast16_t _hb_ucd_dm (unsigned u) { - return u<195102u?_hb_ucd_u16[6008+(((_hb_ucd_u8[17068+(((_hb_ucd_u8[16686+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; + return u<195102u?_hb_ucd_u16[6032+(((_hb_ucd_u8[17084+(((_hb_ucd_u8[16702+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; } #elif !defined(HB_NO_UCD_UNASSIGNED) static const uint8_t -_hb_ucd_u8[14744] = +_hb_ucd_u8[14752] = { 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 7, 7, 7, 7, 11, 12, 13, 13, 13, 14, @@ -2906,13 +2908,13 @@ 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,243, 34, 244, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,245, 34, 34, - 34, 34, 34, 34, 34, 34, 34,246,122,122,122,122,122,122,122,122, - 34, 34, 34, 34,247,122,122,122,122,122,122,122,122,122,122,122, - 34, 34, 34, 34, 34, 34,248, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34,249,122,122,122,122,122,122,122,122, - 250,122,251,252,122,122,122,122,122,122,122,122,122,122,122,122, - 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,253, + 34, 34, 34, 34, 34, 34, 34,246, 34, 34, 34, 34,247,122,122,122, + 34, 34, 34, 34,248,122,122,122,122,122,122,122,122,122,122,122, + 34, 34, 34, 34, 34, 34,249, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34,250,122,122,122,122,122,122,122,122, + 251,122,252,253,122,122,122,122,122,122,122,122,122,122,122,122, 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,254, + 107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2, 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, @@ -3075,11 +3077,11 @@ 121, 4, 4, 4, 4, 2, 2, 88, 2, 2, 2, 2, 2,120, 2, 2, 108,151, 2, 2, 2, 2, 2, 2, 67, 2,152,148,148,148,153, 44, 67, 67, 67, 67, 67, 55, 67, 67, 67, 67, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 44, 44, - 1, 2,154,155, 4, 4, 4, 4, 4, 67, 4, 4, 4, 4,156,157, - 158,105,105,105,105, 43, 43, 86,159, 40, 40, 67,105,160, 63, 67, - 36, 36, 36, 61, 57,161,162, 69, 36, 36, 36, 36, 36, 63, 40, 69, - 44, 44, 62, 36, 36, 36, 36, 36, 67, 27, 27, 67, 67, 67, 67, 67, + 67, 67, 67, 44, 44, 44, 44, 44, 1, 2,154,155, 4, 4, 4, 4, + 4, 67, 4, 4, 4, 4,156,157,158,105,105,105,105, 43, 43, 86, + 159, 40, 40, 67,105,160, 63, 67, 36, 36, 36, 61, 57,161,162, 69, + 36, 36, 36, 36, 36, 63, 40, 69, 44, 44, 62, 36, 36, 36, 36, 36, + 67, 27, 27, 67, 67, 67, 67, 67, 67, 67, 44, 44, 44, 44, 44, 55, 67, 67, 67, 67, 67, 67, 67, 92, 27, 27, 27, 27, 27, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27,163, 27, 27, 27, 27, 27, 27, 27, 36, 36, 83, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,164, 2, @@ -3247,218 +3249,218 @@ 44, 61, 44, 62, 62, 62, 62, 36, 62, 61, 61, 62, 62, 62, 62, 62, 62, 61, 61, 62, 36, 61, 36, 36, 36, 61, 36, 36, 62, 36, 61, 61, 36, 36, 36, 36, 36, 62, 36, 36, 62, 36, 62, 36, 36, 62, 36, 36, - 8, 44, 44, 44, 44, 44, 44, 44, 55, 67, 67, 67, 67, 67, 67, 67, - 27, 27, 27, 27, 27, 27, 91, 67, 67, 67, 67, 67, 67, 67, 67, 44, - 44, 44, 44, 67, 67, 67, 67, 67, 67, 92, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 67, 92, 44, 44, 44, 67, 44, 44, 44, 44, 44, 44, 44, - 67, 67, 67, 67, 67, 25, 41, 41, 67, 67, 67, 67, 44, 44, 67, 67, - 67, 67, 67, 92, 44, 55, 67, 67, 67, 67, 67, 67, 44, 44, 44, 44, - 67, 67, 67, 67, 67, 67, 67, 55, 67, 67, 67, 44, 44, 44, 44, 67, - 67, 92, 67, 67, 67, 67, 67, 67, 79, 44, 44, 44, 44, 44, 44, 44, - 171,171,171,171,171,171,171, 44,171,171,171,171,171,171,171, 0, - 0, 0, 29, 21, 21, 21, 23, 21, 22, 18, 21, 25, 21, 17, 13, 13, - 25, 25, 25, 21, 21, 9, 9, 9, 9, 22, 21, 18, 24, 16, 24, 5, - 5, 5, 5, 22, 25, 18, 25, 0, 23, 23, 26, 21, 24, 26, 7, 20, - 25, 1, 26, 24, 26, 25, 15, 15, 24, 15, 7, 19, 15, 21, 9, 25, - 9, 5, 5, 25, 5, 9, 5, 7, 7, 7, 9, 8, 8, 5, 7, 5, - 6, 6, 24, 24, 6, 24, 12, 12, 2, 2, 6, 5, 9, 21, 9, 2, - 2, 9, 25, 9, 26, 12, 11, 11, 2, 6, 5, 21, 17, 2, 2, 26, - 26, 23, 2, 12, 17, 12, 21, 12, 12, 21, 7, 2, 2, 7, 7, 21, - 21, 2, 1, 1, 21, 23, 26, 26, 1, 21, 6, 7, 7, 12, 12, 7, - 21, 7, 12, 1, 12, 6, 6, 12, 12, 26, 7, 26, 26, 7, 2, 1, - 12, 2, 6, 2, 24, 7, 7, 6, 1, 12, 12, 10, 10, 10, 10, 12, - 21, 6, 2, 10, 10, 2, 15, 26, 26, 2, 2, 21, 7, 10, 15, 7, - 2, 23, 21, 26, 10, 7, 21, 15, 15, 2, 17, 7, 29, 7, 7, 22, - 18, 2, 14, 14, 14, 7, 10, 21, 17, 21, 11, 12, 5, 2, 5, 6, - 8, 8, 8, 24, 5, 24, 2, 24, 9, 24, 24, 2, 29, 29, 29, 1, - 17, 17, 20, 19, 22, 20, 27, 28, 1, 29, 21, 20, 19, 21, 21, 16, - 16, 21, 25, 22, 18, 21, 21, 29, 1, 2, 15, 6, 18, 6, 23, 2, - 12, 11, 9, 26, 26, 9, 26, 5, 5, 26, 14, 9, 5, 14, 14, 15, - 25, 26, 26, 22, 18, 26, 18, 25, 18, 22, 5, 12, 2, 5, 22, 21, - 21, 22, 18, 17, 26, 6, 7, 14, 17, 22, 18, 18, 26, 14, 17, 6, - 14, 6, 12, 24, 24, 6, 26, 15, 6, 21, 11, 21, 24, 9, 6, 9, - 23, 26, 6, 10, 4, 4, 3, 3, 7, 25, 17, 16, 16, 22, 16, 16, - 25, 17, 25, 2, 25, 24, 2, 15, 12, 15, 14, 2, 21, 14, 7, 15, - 12, 17, 21, 1, 26, 10, 10, 1, 23, 15, 0, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 0, 10, 11, 12, 13, 0, 14, 0, 0, 0, 0, 0, - 15, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, 0, 0, 0, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, - 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 40, 41, 42, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, - 0, 0, 3, 0, 0, 0, 4, 5, 6, 7, 0, 8, 9, 10, 0, 11, - 12, 13, 14, 15, 16, 17, 16, 18, 16, 19, 16, 19, 16, 19, 0, 19, - 16, 20, 16, 19, 21, 19, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 37, 0, 0, 0, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 0, 0, 47, 0, 0, 0, 48, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0, 52, - 53, 0, 54, 0, 0, 0, 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, - 58, 0, 0, 59, 60, 61, 62, 63, 0, 0, 64, 65, 0, 0, 0, 66, - 0, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, - 72, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, - 0, 0, 75, 76, 0, 77, 78, 0, 0, 79, 80, 0, 81, 62, 0, 82, - 83, 0, 0, 84, 85, 86, 0, 0, 0, 87, 0, 88, 0, 0, 51, 89, - 51, 0, 90, 0, 91, 0, 0, 0, 80, 0, 0, 0, 92, 93, 0, 94, - 95, 96, 97, 0, 0, 0, 0, 0, 51, 0, 0, 0, 0, 98, 99, 0, - 0, 0, 0, 0, 0,100, 0, 0, 0, 0, 0,101,102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,103, 0, 0,104, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,105,106, 0, 0,107, 0, 0, 0, 0, 0, 0, - 108, 0,109, 0,102, 0, 0, 0, 0, 0,110,111, 0, 0, 0, 0, - 0, 0, 0,112, 0, 0, 0, 0, 0, 0, 0,113, 0,114, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 8, 0, 0, 0, - 0, 9, 10, 11, 12, 0, 0, 0, 0, 13, 0, 0, 14, 15, 0, 16, - 0, 17, 18, 0, 0, 19, 0, 20, 21, 0, 0, 0, 0, 0, 22, 23, - 0, 24, 25, 0, 0, 26, 0, 0, 0, 27, 0, 0, 28, 29, 30, 31, - 0, 0, 0, 32, 33, 34, 0, 0, 33, 0, 0, 35, 33, 0, 0, 0, - 33, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 39, - 40, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 43, 0, 44, - 0, 0, 0, 45, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, - 49, 0, 0, 0, 0, 50, 0, 0, 0, 51, 0, 52, 0, 53, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 55, 0, 56, 0, 0, 0, 0, 57, 58, - 0, 0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 61, 52, 0, 62, 63, - 0, 0, 64, 0, 0, 0, 65, 66, 0, 0, 0, 67, 0, 68, 69, 70, - 71, 72, 1, 73, 0, 74, 75, 76, 0, 0, 77, 78, 0, 0, 0, 79, - 0, 0, 1, 1, 0, 0, 80, 0, 0, 81, 0, 0, 0, 0, 77, 82, - 0, 83, 0, 0, 0, 0, 0, 78, 84, 0, 85, 0, 52, 0, 1, 78, - 0, 0, 86, 0, 0, 87, 0, 0, 0, 0, 0, 88, 57, 0, 0, 0, - 0, 0, 0, 89, 90, 0, 0, 84, 0, 0, 33, 0, 0, 91, 0, 0, - 0, 0, 92, 0, 0, 0, 0, 49, 0, 0, 93, 0, 0, 0, 0, 94, - 95, 0, 0, 96, 0, 0, 97, 0, 0, 0, 98, 0, 0, 0, 99, 0, - 0, 0, 0,100,101, 93, 0, 0,102, 0, 0, 0, 84, 0, 0,103, - 0, 0, 0,104,105, 0, 0,106,107, 0, 0, 0, 0, 0, 0,108, - 0, 0,109, 0, 0, 0, 0,110, 33, 0,111,112,113, 35, 0, 0, - 114, 0, 0, 0,115, 0, 0, 0, 0, 0, 0,116, 0, 0,117, 0, - 0, 0, 0,118, 88, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 52, - 119, 0, 0, 0, 0,120, 0, 0,121, 0, 0, 0, 0,119, 0, 0, - 122, 0, 0, 0, 0, 0, 0,123, 0, 0, 0,124, 0, 0, 0,125, - 0,126, 0, 0, 0, 0,127,128,129, 0,130, 0,131, 0, 0, 0, - 132,133,134, 0, 77, 0, 0, 0, 0, 0, 35, 0, 0, 0,135, 0, - 0, 0,136, 0, 0,137, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 4, 4, 8, 9, 10, - 1, 11, 12, 13, 14, 15, 16, 17, 18, 1, 1, 1, 19, 1, 0, 0, - 20, 21, 22, 1, 23, 4, 21, 24, 25, 26, 27, 28, 29, 30, 0, 0, - 1, 1, 31, 0, 0, 0, 32, 33, 34, 35, 1, 36, 37, 0, 0, 0, - 0, 38, 1, 39, 14, 39, 40, 41, 42, 0, 0, 0, 43, 36, 44, 45, - 21, 45, 46, 0, 0, 0, 19, 1, 21, 0, 0, 47, 0, 38, 48, 1, - 1, 49, 49, 50, 0, 0, 51, 0, 0, 0, 52, 1, 0, 0, 38, 14, - 4, 1, 1, 1, 53, 21, 43, 52, 54, 21, 35, 1, 0, 0, 0, 55, - 0, 0, 0, 56, 57, 58, 0, 0, 0, 0, 0, 59, 0, 60, 0, 0, - 0, 0, 61, 62, 0, 0, 63, 0, 0, 0, 64, 0, 0, 0, 65, 0, - 0, 0, 66, 0, 0, 0, 67, 0, 0, 0, 68, 0, 0, 69, 70, 0, - 71, 72, 73, 74, 75, 76, 0, 0, 0, 77, 0, 0, 0, 78, 79, 0, - 0, 0, 0, 47, 0, 0, 0, 49, 0, 80, 0, 0, 0, 62, 0, 0, - 63, 0, 0, 81, 0, 0, 82, 0, 0, 0, 83, 0, 0, 19, 84, 0, - 62, 0, 0, 0, 0, 49, 1, 85, 1, 52, 15, 86, 36, 10, 21, 87, - 0, 55, 0, 0, 0, 0, 19, 10, 1, 0, 0, 0, 0, 0, 88, 0, - 0, 89, 0, 0, 88, 0, 0, 0, 0, 78, 0, 0, 87, 9, 12, 4, - 90, 8, 91, 47, 0, 58, 50, 0, 21, 1, 21, 92, 93, 1, 1, 1, - 1, 94, 95, 96, 97, 1, 98, 58, 81, 99,100, 4, 58, 0, 0, 0, - 0, 0, 0, 19, 50, 0, 0, 0, 0, 0, 0, 61, 0, 0,101,102, - 0, 0,103, 0, 0, 1, 1, 50, 0, 0, 0, 38, 0, 63, 0, 0, - 0, 0, 0, 62, 0, 0,104, 68, 61, 0, 0, 0, 78, 0, 0, 0, - 105,106, 58, 38, 81, 0, 0, 0, 0, 0, 0,107, 1, 14, 4, 12, - 84, 0, 0, 0, 0, 38, 87, 0, 0, 0, 0,108, 0, 0,109, 61, - 0,110, 0, 0, 0, 1, 0, 0, 0, 0, 19, 58, 0, 0, 0, 51, - 0,111, 14, 52,112, 41, 0, 0, 62, 0, 0, 61, 0, 0,113, 0, - 87, 0, 0, 0, 61, 62, 0, 0, 62, 0, 89, 0, 0,113, 0, 0, - 0, 0,114, 0, 0, 0, 78, 55, 0, 38, 1, 58, 1, 58, 0, 0, - 63, 89, 0, 0,115, 0, 0, 0, 55, 0, 0, 0, 0,115, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 79, 0, 61, 0, 0, 0, 0, 56, 0, - 89, 80, 0, 0, 79, 0, 0, 0, 8, 91, 0, 0, 1, 87, 0, 0, - 116, 0, 0, 0, 0, 0, 0,117, 0,118,119,120,121, 0,104, 4, - 122, 49, 23, 0, 0, 0, 38, 50, 38, 58, 0, 0, 1, 87, 1, 1, - 1, 1, 39, 1, 48,105, 87, 0, 0, 0, 0, 1, 0, 0, 0,123, - 4,122, 0, 0, 0, 1,124, 0, 0, 0, 0, 0,230,230,230,230, - 230,232,220,220,220,220,232,216,220,220,220,220,220,202,202,220, - 220,220,220,202,202,220,220,220, 1, 1, 1, 1, 1,220,220,220, - 220,230,230,230,230,240,230,220,220,220,230,230,230,220,220, 0, - 230,230,230,220,220,220,220,230,232,220,220,230,233,234,234,233, - 234,234,233,230, 0, 0, 0,230, 0,220,230,230,230,230,220,230, - 230,230,222,220,230,230,220,220,230,222,228,230, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24, 25, 0, - 230,220, 0, 18, 30, 31, 32, 0, 0, 0, 0, 27, 28, 29, 30, 31, - 32, 33, 34,230,230,220,220,230,220,230,230,220, 35, 0, 0, 0, - 0, 0,230,230,230, 0, 0,230,230, 0,220,230,230,220, 0, 0, - 0, 36, 0, 0,230,220,230,230,220,220,230,220,220,230,220,230, - 220,230,230, 0, 0,220, 0, 0,230,230, 0,230, 0,230,230,230, - 230,230, 0, 0, 0,220,220,220,230,220,220,220,230,230, 0,220, - 27, 28, 29,230, 7, 0, 0, 0, 0, 9, 0, 0, 0,230,220,230, - 230, 0, 0, 0, 0, 0,230, 0, 0, 84, 91, 0, 0, 0, 0, 9, - 9, 0, 0, 0, 0, 0, 9, 0,103,103, 9, 0,107,107,107,107, - 118,118, 9, 0,122,122,122,122,220,220, 0, 0, 0,220, 0,220, - 0,216, 0, 0, 0,129,130, 0,132, 0, 0, 0, 0, 0,130,130, - 130,130, 0, 0,130, 0,230,230, 9, 0,230,230, 0, 0,220, 0, - 0, 0, 0, 7, 0, 9, 9, 0, 9, 9, 0, 0, 0,230, 0, 0, - 0,228, 0, 0, 0,222,230,220,220, 0, 0, 0,230, 0, 0,220, - 230,220, 0,220,230,230,230, 0, 0, 0, 9, 9, 0, 0, 7, 0, - 230, 0, 1, 1, 1, 0, 0, 0,230,234,214,220,202,230,230,230, - 230,230,232,228,228,220,218,230,233,220,230,220,230,230, 1, 1, - 1, 1, 1,230, 0, 1, 1,230,220,230, 1, 1, 0, 0,218,228, - 232,222,224,224, 0, 8, 8, 0, 0, 0, 0,220,230, 0,230,230, - 220, 0, 0,230, 0, 0, 26, 0, 0,220, 0,230,230, 1,220, 0, - 0,230,220, 0, 0, 0,220,220, 0, 0,230,220, 0, 9, 7, 0, - 0, 7, 9, 0, 0, 0, 9, 7, 6, 6, 0, 0, 0, 0, 1, 0, - 0,216,216, 1, 1, 1, 0, 0, 0,226,216,216,216,216,216, 0, - 220,220,220, 0,232,232,220,230,230,230, 7, 0, 16, 17, 17, 33, - 17, 49, 17, 17, 84, 97,135,145, 26, 17, 17, 17, 17, 17, 17, 17, + 8, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 44, 44, + 55, 67, 67, 67, 67, 67, 67, 67, 27, 27, 27, 27, 27, 27, 91, 67, + 67, 67, 67, 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 67, + 67, 92, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 92, 44, 44, 44, + 67, 44, 44, 44, 44, 44, 44, 44, 67, 67, 67, 67, 67, 25, 41, 41, + 67, 67, 67, 67, 44, 44, 67, 67, 67, 67, 67, 92, 44, 55, 67, 67, + 67, 67, 67, 67, 44, 44, 44, 44, 67, 67, 67, 67, 67, 67, 67, 55, + 67, 67, 67, 44, 44, 44, 44, 67, 67, 92, 67, 67, 67, 67, 67, 67, + 79, 44, 44, 44, 44, 44, 44, 44,171,171,171,171,171,171,171, 44, + 171,171,171,171,171,171,171, 0, 0, 0, 29, 21, 21, 21, 23, 21, + 22, 18, 21, 25, 21, 17, 13, 13, 25, 25, 25, 21, 21, 9, 9, 9, + 9, 22, 21, 18, 24, 16, 24, 5, 5, 5, 5, 22, 25, 18, 25, 0, + 23, 23, 26, 21, 24, 26, 7, 20, 25, 1, 26, 24, 26, 25, 15, 15, + 24, 15, 7, 19, 15, 21, 9, 25, 9, 5, 5, 25, 5, 9, 5, 7, + 7, 7, 9, 8, 8, 5, 7, 5, 6, 6, 24, 24, 6, 24, 12, 12, + 2, 2, 6, 5, 9, 21, 9, 2, 2, 9, 25, 9, 26, 12, 11, 11, + 2, 6, 5, 21, 17, 2, 2, 26, 26, 23, 2, 12, 17, 12, 21, 12, + 12, 21, 7, 2, 2, 7, 7, 21, 21, 2, 1, 1, 21, 23, 26, 26, + 1, 21, 6, 7, 7, 12, 12, 7, 21, 7, 12, 1, 12, 6, 6, 12, + 12, 26, 7, 26, 26, 7, 2, 1, 12, 2, 6, 2, 24, 7, 7, 6, + 1, 12, 12, 10, 10, 10, 10, 12, 21, 6, 2, 10, 10, 2, 15, 26, + 26, 2, 2, 21, 7, 10, 15, 7, 2, 23, 21, 26, 10, 7, 21, 15, + 15, 2, 17, 7, 29, 7, 7, 22, 18, 2, 14, 14, 14, 7, 10, 21, + 17, 21, 11, 12, 5, 2, 5, 6, 8, 8, 8, 24, 5, 24, 2, 24, + 9, 24, 24, 2, 29, 29, 29, 1, 17, 17, 20, 19, 22, 20, 27, 28, + 1, 29, 21, 20, 19, 21, 21, 16, 16, 21, 25, 22, 18, 21, 21, 29, + 1, 2, 15, 6, 18, 6, 23, 2, 12, 11, 9, 26, 26, 9, 26, 5, + 5, 26, 14, 9, 5, 14, 14, 15, 25, 26, 26, 22, 18, 26, 18, 25, + 18, 22, 5, 12, 2, 5, 22, 21, 21, 22, 18, 17, 26, 6, 7, 14, + 17, 22, 18, 18, 26, 14, 17, 6, 14, 6, 12, 24, 24, 6, 26, 15, + 6, 21, 11, 21, 24, 9, 6, 9, 23, 26, 6, 10, 4, 4, 3, 3, + 7, 25, 17, 16, 16, 22, 16, 16, 25, 17, 25, 2, 25, 24, 2, 15, + 12, 15, 14, 2, 21, 14, 7, 15, 12, 17, 21, 1, 26, 10, 10, 1, + 23, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, + 13, 0, 14, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 21, 22, 23, 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 0, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, + 0, 0, 40, 41, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 0, 4, 5, + 6, 7, 0, 8, 9, 10, 0, 11, 12, 13, 14, 15, 16, 17, 16, 18, + 16, 19, 16, 19, 16, 19, 0, 19, 16, 20, 16, 19, 21, 19, 0, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 34, 0, 0, 35, + 0, 0, 36, 0, 37, 0, 0, 0, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 0, 0, 47, 0, 0, 0, 48, 0, 0, 0, 49, 0, 0, 0, 0, + 0, 0, 0, 50, 0, 51, 0, 52, 53, 0, 54, 0, 0, 0, 0, 0, + 0, 55, 56, 57, 0, 0, 0, 0, 58, 0, 0, 59, 60, 61, 62, 63, + 0, 0, 64, 65, 0, 0, 0, 66, 0, 0, 0, 0, 67, 0, 0, 0, + 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, + 0, 0, 0, 70, 0, 71, 0, 0, 72, 0, 0, 73, 0, 0, 0, 0, + 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 75, 76, 0, 77, 78, 0, + 0, 79, 80, 0, 81, 62, 0, 82, 83, 0, 0, 84, 85, 86, 0, 0, + 0, 87, 0, 88, 0, 0, 51, 89, 51, 0, 90, 0, 91, 0, 0, 0, + 80, 0, 0, 0, 92, 93, 0, 94, 95, 96, 97, 0, 0, 0, 0, 0, + 51, 0, 0, 0, 0, 98, 99, 0, 0, 0, 0, 0, 0,100, 0, 0, + 0, 0, 0,101,102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,103, + 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,105,106, 0, + 0,107, 0, 0, 0, 0, 0, 0,108, 0,109, 0,102, 0, 0, 0, + 0, 0,110,111, 0, 0, 0, 0, 0, 0, 0,112, 0, 0, 0, 0, + 0, 0, 0,113, 0,114, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, + 5, 6, 7, 0, 8, 0, 0, 0, 0, 9, 10, 11, 12, 0, 0, 0, + 0, 13, 0, 0, 14, 15, 0, 16, 0, 17, 18, 0, 0, 19, 0, 20, + 21, 0, 0, 0, 0, 0, 22, 23, 0, 24, 25, 0, 0, 26, 0, 0, + 0, 27, 0, 0, 28, 29, 30, 31, 0, 0, 0, 32, 33, 34, 0, 0, + 33, 0, 0, 35, 33, 0, 0, 0, 33, 36, 0, 0, 0, 0, 0, 37, + 38, 0, 0, 0, 0, 0, 0, 39, 40, 0, 0, 0, 0, 0, 0, 41, + 42, 0, 0, 0, 0, 43, 0, 44, 0, 0, 0, 45, 46, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 0, 48, 49, 0, 0, 0, 0, 50, 0, 0, + 0, 51, 0, 52, 0, 53, 0, 0, 0, 0, 54, 0, 0, 0, 0, 55, + 0, 56, 0, 0, 0, 0, 57, 58, 0, 0, 0, 59, 60, 0, 0, 0, + 0, 0, 0, 61, 52, 0, 62, 63, 0, 0, 64, 0, 0, 0, 65, 66, + 0, 0, 0, 67, 0, 68, 69, 70, 71, 72, 1, 73, 0, 74, 75, 76, + 0, 0, 77, 78, 0, 0, 0, 79, 0, 0, 1, 1, 0, 0, 80, 0, + 0, 81, 0, 0, 0, 0, 77, 82, 0, 83, 0, 0, 0, 0, 0, 78, + 84, 0, 85, 0, 52, 0, 1, 78, 0, 0, 86, 0, 0, 87, 0, 0, + 0, 0, 0, 88, 57, 0, 0, 0, 0, 0, 0, 89, 90, 0, 0, 84, + 0, 0, 33, 0, 0, 91, 0, 0, 0, 0, 92, 0, 0, 0, 0, 49, + 0, 0, 93, 0, 0, 0, 0, 94, 95, 0, 0, 96, 0, 0, 97, 0, + 0, 0, 98, 0, 0, 0, 99, 0, 0, 0, 0,100,101, 93, 0, 0, + 102, 0, 0, 0, 84, 0, 0,103, 0, 0, 0,104,105, 0, 0,106, + 107, 0, 0, 0, 0, 0, 0,108, 0, 0,109, 0, 0, 0, 0,110, + 33, 0,111,112,113, 35, 0, 0,114, 0, 0, 0,115, 0, 0, 0, + 0, 0, 0,116, 0, 0,117, 0, 0, 0, 0,118, 88, 0, 0, 0, + 0, 0, 57, 0, 0, 0, 0, 52,119, 0, 0, 0, 0,120, 0, 0, + 121, 0, 0, 0, 0,119, 0, 0,122, 0, 0, 0, 0, 0, 0,123, + 0, 0, 0,124, 0, 0, 0,125, 0,126, 0, 0, 0, 0,127,128, + 129, 0,130, 0,131, 0, 0, 0,132,133,134, 0, 77, 0, 0, 0, + 0, 0, 35, 0, 0, 0,135, 0, 0, 0,136, 0, 0,137, 0, 0, + 138, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, + 5, 6, 7, 4, 4, 8, 9, 10, 1, 11, 12, 13, 14, 15, 16, 17, + 18, 1, 1, 1, 19, 1, 0, 0, 20, 21, 22, 1, 23, 4, 21, 24, + 25, 26, 27, 28, 29, 30, 0, 0, 1, 1, 31, 0, 0, 0, 32, 33, + 34, 35, 1, 36, 37, 0, 0, 0, 0, 38, 1, 39, 14, 39, 40, 41, + 42, 0, 0, 0, 43, 36, 44, 45, 21, 45, 46, 0, 0, 0, 19, 1, + 21, 0, 0, 47, 0, 38, 48, 1, 1, 49, 49, 50, 0, 0, 51, 0, + 0, 0, 52, 1, 0, 0, 38, 14, 4, 1, 1, 1, 53, 21, 43, 52, + 54, 21, 35, 1, 0, 0, 0, 55, 0, 0, 0, 56, 57, 58, 0, 0, + 0, 0, 0, 59, 0, 60, 0, 0, 0, 0, 61, 62, 0, 0, 63, 0, + 0, 0, 64, 0, 0, 0, 65, 0, 0, 0, 66, 0, 0, 0, 67, 0, + 0, 0, 68, 0, 0, 69, 70, 0, 71, 72, 73, 74, 75, 76, 0, 0, + 0, 77, 0, 0, 0, 78, 79, 0, 0, 0, 0, 47, 0, 0, 0, 49, + 0, 80, 0, 0, 0, 62, 0, 0, 63, 0, 0, 81, 0, 0, 82, 0, + 0, 0, 83, 0, 0, 19, 84, 0, 62, 0, 0, 0, 0, 49, 1, 85, + 1, 52, 15, 86, 36, 10, 21, 87, 0, 55, 0, 0, 0, 0, 19, 10, + 1, 0, 0, 0, 0, 0, 88, 0, 0, 89, 0, 0, 88, 0, 0, 0, + 0, 78, 0, 0, 87, 9, 12, 4, 90, 8, 91, 47, 0, 58, 50, 0, + 21, 1, 21, 92, 93, 1, 1, 1, 1, 94, 95, 96, 97, 1, 98, 58, + 81, 99,100, 4, 58, 0, 0, 0, 0, 0, 0, 19, 50, 0, 0, 0, + 0, 0, 0, 61, 0, 0,101,102, 0, 0,103, 0, 0, 1, 1, 50, + 0, 0, 0, 38, 0, 63, 0, 0, 0, 0, 0, 62, 0, 0,104, 68, + 61, 0, 0, 0, 78, 0, 0, 0,105,106, 58, 38, 81, 0, 0, 0, + 0, 0, 0,107, 1, 14, 4, 12, 84, 0, 0, 0, 0, 38, 87, 0, + 0, 0, 0,108, 0, 0,109, 61, 0,110, 0, 0, 0, 1, 0, 0, + 0, 0, 19, 58, 0, 0, 0, 51, 0,111, 14, 52,112, 41, 0, 0, + 62, 0, 0, 61, 0, 0,113, 0, 87, 0, 0, 0, 61, 62, 0, 0, + 62, 0, 89, 0, 0,113, 0, 0, 0, 0,114, 0, 0, 0, 78, 55, + 0, 38, 1, 58, 1, 58, 0, 0, 63, 89, 0, 0,115, 0, 0, 0, + 55, 0, 0, 0, 0,115, 0, 0, 0, 0, 61, 0, 0, 0, 0, 79, + 0, 61, 0, 0, 0, 0, 56, 0, 89, 80, 0, 0, 79, 0, 0, 0, + 8, 91, 0, 0, 1, 87, 0, 0,116, 0, 0, 0, 0, 0, 0,117, + 0,118,119,120,121, 0,104, 4,122, 49, 23, 0, 0, 0, 38, 50, + 38, 58, 0, 0, 1, 87, 1, 1, 1, 1, 39, 1, 48,105, 87, 0, + 0, 0, 0, 1, 0, 0, 0,123, 4,122, 0, 0, 0, 1,124, 0, + 0, 0, 0, 0,230,230,230,230,230,232,220,220,220,220,232,216, + 220,220,220,220,220,202,202,220,220,220,220,202,202,220,220,220, + 1, 1, 1, 1, 1,220,220,220,220,230,230,230,230,240,230,220, + 220,220,230,230,230,220,220, 0,230,230,230,220,220,220,220,230, + 232,220,220,230,233,234,234,233,234,234,233,230, 0, 0, 0,230, + 0,220,230,230,230,230,220,230,230,230,222,220,230,230,220,220, + 230,222,228,230, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, + 21, 22, 0, 23, 0, 24, 25, 0,230,220, 0, 18, 30, 31, 32, 0, + 0, 0, 0, 27, 28, 29, 30, 31, 32, 33, 34,230,230,220,220,230, + 220,230,230,220, 35, 0, 0, 0, 0, 0,230,230,230, 0, 0,230, + 230, 0,220,230,230,220, 0, 0, 0, 36, 0, 0,230,220,230,230, + 220,220,230,220,220,230,220,230,220,230,230, 0, 0,220, 0, 0, + 230,230, 0,230, 0,230,230,230,230,230, 0, 0, 0,220,220,220, + 230,220,220,220,230,230, 0,220, 27, 28, 29,230, 7, 0, 0, 0, + 0, 9, 0, 0, 0,230,220,230,230, 0, 0, 0, 0, 0,230, 0, + 0, 84, 91, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 9, 0, + 103,103, 9, 0,107,107,107,107,118,118, 9, 0,122,122,122,122, + 220,220, 0, 0, 0,220, 0,220, 0,216, 0, 0, 0,129,130, 0, + 132, 0, 0, 0, 0, 0,130,130,130,130, 0, 0,130, 0,230,230, + 9, 0,230,230, 0, 0,220, 0, 0, 0, 0, 7, 0, 9, 9, 0, + 9, 9, 0, 0, 0,230, 0, 0, 0,228, 0, 0, 0,222,230,220, + 220, 0, 0, 0,230, 0, 0,220,230,220, 0,220,230,230,230, 0, + 0, 0, 9, 9, 0, 0, 7, 0,230, 0, 1, 1, 1, 0, 0, 0, + 230,234,214,220,202,230,230,230,230,230,232,228,228,220,218,230, + 233,220,230,220,230,230, 1, 1, 1, 1, 1,230, 0, 1, 1,230, + 220,230, 1, 1, 0, 0,218,228,232,222,224,224, 0, 8, 8, 0, + 0, 0, 0,220,230, 0,230,230,220, 0, 0,230, 0, 0, 26, 0, + 0,220, 0,230,230, 1,220, 0, 0,230,220, 0, 0, 0,220,220, + 0, 0,230,220, 0, 9, 7, 0, 0, 7, 9, 0, 0, 0, 9, 7, + 6, 6, 0, 0, 0, 0, 1, 0, 0,216,216, 1, 1, 1, 0, 0, + 0,226,216,216,216,216,216, 0,220,220,220, 0,232,232,220,230, + 230,230, 7, 0, 16, 17, 17, 33, 17, 49, 17, 17, 84, 97,135,145, + 26, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,177, 0, 1, 2, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 6, 7, 8, 3, - 3, 3, 3, 3, 9, 10, 11, 12, 13, 3, 3, 3, 3, 3, 3, 3, - 3, 14, 3, 15, 3, 3, 3, 3, 3, 3, 16, 17, 18, 19, 20, 21, - 3, 3, 3, 22, 23, 24, 3, 3, 3, 3, 3, 3, 25, 3, 3, 3, - 3, 3, 3, 3, 3, 26, 3, 3, 27, 28, 0, 1, 0, 0, 0, 0, - 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 4, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 9, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 10, 11, 12, 13, 0, 0, 14, 15, 16, 6, 0, - 17, 18, 19, 19, 19, 20, 21, 22, 23, 24, 19, 25, 0, 26, 27, 19, - 19, 28, 29, 30, 0, 31, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, - 0, 19, 28, 0, 32, 33, 9, 34, 35, 19, 0, 0, 36, 37, 38, 39, - 40, 19, 0, 41, 42, 43, 44, 31, 0, 1, 45, 42, 0, 0, 0, 0, - 0, 32, 14, 14, 0, 0, 0, 0, 14, 0, 0, 46, 47, 47, 47, 47, - 48, 49, 47, 47, 47, 47, 50, 51, 52, 53, 43, 21, 0, 0, 0, 0, - 0, 0, 0, 54, 6, 55, 0, 14, 19, 1, 0, 0, 0, 0, 56, 57, - 0, 0, 0, 0, 0, 19, 58, 31, 0, 0, 0, 0, 0, 0, 0, 59, - 14, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 60, - 61, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 3, - 0, 4, 5, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 1, 1, 0, - 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 8, 9, 10, 11, 12, 0, - 0, 0, 13, 0, 0, 0, 0, 14, 15, 16, 17, 0, 0, 0, 1, 0, - 0, 18, 19, 0, 0, 0, 20, 0, 0, 0, 1, 1, 1, 1, 0, 1, - 1, 1, 1, 1, 1, 1, 0, 8, 21, 9, 0, 0, 22, 0, 0, 0, - 0, 1, 0, 23, 24, 25, 0, 0, 26, 0, 0, 0, 8, 21, 27, 0, - 1, 0, 0, 1, 1, 1, 1, 0, 1, 28, 29, 30, 0, 31, 32, 20, - 1, 1, 0, 0, 0, 8, 21, 9, 1, 4, 5, 0, 0, 0, 33, 9, - 0, 1, 1, 1, 0, 8, 21, 21, 21, 21, 34, 1, 35, 21, 21, 21, - 9, 36, 0, 0, 37, 38, 1, 0, 39, 0, 0, 0, 1, 0, 1, 0, - 0, 0, 0, 8, 21, 9, 1, 0, 0, 0, 40, 0, 8, 21, 21, 21, - 21, 21, 21, 21, 21, 9, 0, 1, 1, 1, 1, 8, 21, 21, 21, 9, - 0, 0, 0, 41, 0, 42, 43, 0, 0, 0, 1, 44, 0, 0, 0, 45, - 8, 9, 1, 0, 0, 0, 8, 21, 21, 21, 9, 0, 1, 0, 1, 1, - 8, 21, 21, 9, 0, 4, 5, 8, 9, 1, 0, 0, 0, 1, 2, 3, - 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 9, 10, 11, 11, 11, 11, 12, 13, 13, 13, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 13, 22, 13, 13, 13, 13, 23, 24, 24, 25, 26, 13, 13, - 13, 27, 28, 29, 13, 30, 31, 32, 33, 34, 35, 36, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 37, 7, 38, 39, 7, 40, 7, 7, 7, 41, 13, 42, 7, 7, 43, 7, - 44, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 17, 17, 17,177, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 5, 3, + 3, 3, 3, 3, 6, 7, 8, 3, 3, 3, 3, 3, 9, 10, 11, 12, + 13, 3, 3, 3, 3, 3, 3, 3, 3, 14, 3, 15, 3, 3, 3, 3, + 3, 3, 16, 17, 18, 19, 20, 21, 3, 3, 3, 22, 23, 24, 3, 3, + 3, 3, 3, 3, 25, 3, 3, 3, 3, 3, 3, 3, 3, 26, 3, 3, + 27, 28, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 3, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 4, 0, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, + 0, 0, 0, 9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, + 13, 0, 0, 14, 15, 16, 6, 0, 17, 18, 19, 19, 19, 20, 21, 22, + 23, 24, 19, 25, 0, 26, 27, 19, 19, 28, 29, 30, 0, 31, 0, 0, + 0, 8, 0, 0, 0, 0, 0, 0, 0, 19, 28, 0, 32, 33, 9, 34, + 35, 19, 0, 0, 36, 37, 38, 39, 40, 19, 0, 41, 42, 43, 44, 31, + 0, 1, 45, 42, 0, 0, 0, 0, 0, 32, 14, 14, 0, 0, 0, 0, + 14, 0, 0, 46, 47, 47, 47, 47, 48, 49, 47, 47, 47, 47, 50, 51, + 52, 53, 43, 21, 0, 0, 0, 0, 0, 0, 0, 54, 6, 55, 0, 14, + 19, 1, 0, 0, 0, 0, 56, 57, 0, 0, 0, 0, 0, 19, 58, 31, + 0, 0, 0, 0, 0, 0, 0, 59, 14, 0, 0, 0, 0, 1, 0, 2, + 0, 0, 0, 3, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 2, 3, 0, 4, 5, 0, 0, 6, 0, 0, + 0, 7, 0, 0, 0, 1, 1, 0, 0, 8, 9, 0, 8, 9, 0, 0, + 0, 0, 8, 9, 10, 11, 12, 0, 0, 0, 13, 0, 0, 0, 0, 14, + 15, 16, 17, 0, 0, 0, 1, 0, 0, 18, 19, 0, 0, 0, 20, 0, + 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 8, + 21, 9, 0, 0, 22, 0, 0, 0, 0, 1, 0, 23, 24, 25, 0, 0, + 26, 0, 0, 0, 8, 21, 27, 0, 1, 0, 0, 1, 1, 1, 1, 0, + 1, 28, 29, 30, 0, 31, 32, 20, 1, 1, 0, 0, 0, 8, 21, 9, + 1, 4, 5, 0, 0, 0, 33, 9, 0, 1, 1, 1, 0, 8, 21, 21, + 21, 21, 34, 1, 35, 21, 21, 21, 9, 36, 0, 0, 37, 38, 1, 0, + 39, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 8, 21, 9, 1, 0, + 0, 0, 40, 0, 8, 21, 21, 21, 21, 21, 21, 21, 21, 9, 0, 1, + 1, 1, 1, 8, 21, 21, 21, 9, 0, 0, 0, 41, 0, 42, 43, 0, + 0, 0, 1, 44, 0, 0, 0, 45, 8, 9, 1, 0, 0, 0, 8, 21, + 21, 21, 9, 0, 1, 0, 1, 1, 8, 21, 21, 9, 0, 4, 5, 8, + 9, 1, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 11, 11, 11, 11, 12, 13, + 13, 13, 13, 14, 15, 16, 17, 18, 19, 20, 21, 13, 22, 13, 13, 13, + 13, 23, 24, 24, 25, 26, 13, 13, 13, 27, 28, 29, 13, 30, 31, 32, + 33, 34, 35, 36, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 37, 7, 38, 39, 7, 40, 7, 7, + 7, 41, 13, 42, 7, 7, 43, 7, 44, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, @@ -3479,221 +3481,221 @@ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 45, 0, 0, 1, - 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 32, 33, 34, 35, 36, 37, 37, 37, 37, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 2, 2, 53, 54, 55, 56, - 57, 58, 59, 59, 59, 59, 60, 59, 59, 59, 59, 59, 59, 59, 61, 61, - 59, 59, 59, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 45, 0, 0, 1, 2, 2, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37, 37, + 37, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 2, 2, 53, 54, 55, 56, 57, 58, 59, 59, 59, 59, 60, 59, + 59, 59, 59, 59, 59, 59, 61, 61, 59, 59, 59, 59, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 59, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 79, 70, 70, 70, 70, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 81, 82, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 79, 70, 70, 70, 70, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, + 82, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 95, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 70, 70, 97, 98, 99,100,101,101,102,103,104,105,106,107,108,109, - 110,111, 96,112,113,114,115,116,117,118,119,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132, 96,133,134,135,136,137,138, - 139,140,141,142,143, 96,144,145, 96,146,147,148,149, 96,150,151, - 152,153,154,155,156, 96,157,158,159,160, 96,161,162,163,164,164, - 164,164,164,164,164,165,166,164,167, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,168,169,169, - 169,169,169,169,169,169,170, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96,171,171,171,171,172, 96, 96, 96,173,173, - 173,173,174,175,176,177, 96, 96, 96, 96,178,179,180,181,182,182, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 70, 70, 97, 98, 99,100,101,101, + 102,103,104,105,106,107,108,109,110,111, 96,112,113,114,115,116, + 117,118,119,119,120,121,122,123,124,125,126,127,128,129,130,131, + 132, 96,133,134,135,136,137,138,139,140,141,142,143, 96,144,145, + 96,146,147,148,149, 96,150,151,152,153,154,155,156, 96,157,158, + 159,160, 96,161,162,163,164,164,164,164,164,164,164,165,166,164, + 167, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96,168,169,169,169,169,169,169,169,169,170, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,171,171, + 171,171,172, 96, 96, 96,173,173,173,173,174,175,176,177, 96, 96, + 96, 96,178,179,180,181,182,182,182,182,182,182,182,182,182,182, 182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, - 182,182,182,182,182,182,182,182,182,182,182,182,182,183,182,182, - 182,182,182,182,184,184,184,185,186, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,187,188,189, - 190,191,191,192, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96,193,194, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,195,196, 59,197, - 198,199,200,201,202, 96,203,204,205, 59, 59,206, 59,207,208,208, - 208,208,208,209, 96, 96, 96, 96, 96, 96, 96, 96,210, 96,211,212, - 213, 96, 96,214, 96, 96, 96,215, 96, 96, 96, 96, 96,216,217,218, - 219, 96, 96, 96, 96, 96,220,221,222, 96,223,224, 96, 96,225,226, - 59,227,228, 96, 59, 59, 59, 59, 59, 59, 59,229,230,231,232,233, - 59, 59,234,235, 59,236, 96, 96, 96, 96, 96, 96, 96, 96, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,237, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,238, 70,239, 70, + 182,182,182,182,182,183,182,182,182,182,182,182,184,184,184,185, + 186, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96,187,188,189,190,191,191,192, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,193,194, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96,195,196, 59,197,198,199,200,201,202, 96,203,204, + 205, 59, 59,206, 59,207,208,208,208,208,208,209, 96, 96, 96, 96, + 96, 96, 96, 96,210, 96,211,212,213, 96, 96,214, 96, 96, 96,215, + 96, 96, 96, 96, 96,216,217,218,219, 96, 96, 96, 96, 96,220,221, + 222, 96,223,224, 96, 96,225,226, 59,227,228, 96, 59, 59, 59, 59, + 59, 59, 59,229,230,231,232,233, 59, 59,234,235, 59,236, 96, 96, + 96, 96, 96, 96, 96, 96, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70,237, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70,238, 70,239, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,240, 70, 70, 70, 70, - 70, 70, 70, 70, 70,241, 96, 96, 96, 96, 96, 96, 96, 96, 70, 70, - 70, 70,242, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 70, 70, - 70, 70, 70, 70,243, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70,244, 96, 96, 96, 96, 96, 96, 96, 96,245, 96, - 246,247, 0, 1, 2, 2, 0, 1, 2, 2, 2, 3, 4, 5, 0, 0, - 0, 0, 0, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, - 19, 0, 19, 0, 0, 0, 0, 0, 26, 26, 1, 1, 1, 1, 9, 9, - 9, 9, 0, 9, 9, 9, 2, 2, 9, 9, 9, 9, 0, 9, 2, 2, - 2, 2, 9, 0, 9, 0, 9, 9, 9, 2, 9, 2, 9, 9, 9, 9, - 2, 9, 9, 9, 55, 55, 55, 55, 55, 55, 6, 6, 6, 6, 6, 1, - 1, 6, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 2, 2, 2, 2, 14, 14, 2, - 2, 2, 3, 3, 3, 3, 3, 0, 3, 3, 0, 3, 3, 3, 3, 3, - 3, 0, 3, 3, 3, 1, 1, 1, 3, 3, 1, 3, 3, 3, 37, 37, - 37, 37, 37, 37, 2, 37, 37, 37, 37, 2, 2, 37, 37, 37, 38, 38, - 38, 38, 38, 38, 2, 2, 64, 64, 64, 64, 64, 64, 64, 2, 2, 64, - 64, 64, 90, 90, 90, 90, 90, 90, 2, 2, 90, 90, 90, 2, 95, 95, - 95, 95, 2, 2, 95, 2, 3, 3, 3, 2, 3, 3, 2, 2, 3, 3, - 0, 3, 7, 7, 7, 7, 7, 1, 1, 1, 1, 7, 7, 7, 0, 0, - 7, 7, 5, 5, 5, 5, 2, 5, 5, 5, 5, 2, 2, 5, 5, 2, - 5, 5, 5, 2, 5, 2, 2, 2, 5, 5, 5, 5, 2, 2, 5, 5, - 5, 2, 2, 2, 2, 5, 5, 5, 2, 5, 2, 11, 11, 11, 11, 11, - 11, 2, 2, 2, 2, 11, 11, 2, 2, 11, 11, 11, 11, 11, 11, 2, - 11, 11, 2, 11, 11, 2, 11, 11, 2, 2, 2, 11, 2, 2, 11, 2, - 11, 2, 2, 2, 11, 11, 2, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 2, 10, 10, 2, 10, 10, 10, 10, 2, 2, 10, 2, 2, 2, 2, 2, - 10, 10, 2, 21, 21, 21, 21, 21, 21, 21, 21, 2, 2, 21, 21, 2, - 21, 21, 21, 21, 2, 2, 21, 21, 2, 21, 2, 2, 21, 21, 2, 2, - 22, 22, 2, 22, 22, 22, 22, 22, 22, 2, 22, 2, 22, 22, 22, 22, - 2, 2, 2, 22, 22, 2, 2, 2, 2, 22, 22, 2, 2, 2, 22, 22, - 22, 22, 23, 23, 23, 23, 23, 2, 23, 23, 23, 23, 2, 2, 2, 23, - 23, 2, 23, 23, 23, 2, 2, 23, 2, 2, 2, 2, 23, 23, 2, 2, - 2, 23, 16, 16, 16, 16, 16, 2, 16, 16, 2, 16, 16, 16, 16, 16, - 2, 2, 2, 16, 16, 2, 2, 2, 16, 16, 20, 20, 20, 20, 20, 2, - 20, 20, 2, 2, 20, 20, 2, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 2, 2, 2, 36, 36, 36, 36, 2, 36, 2, 36, 2, 2, 2, 2, - 36, 2, 2, 2, 2, 36, 36, 2, 36, 2, 36, 2, 2, 2, 2, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 2, 2, 2, 2, 0, 2, 18, - 18, 2, 18, 2, 18, 18, 18, 18, 18, 2, 18, 18, 18, 18, 2, 18, - 2, 18, 18, 18, 2, 2, 18, 2, 18, 2, 25, 25, 25, 25, 2, 25, - 25, 25, 25, 2, 2, 2, 25, 2, 25, 25, 25, 0, 0, 0, 0, 25, - 25, 2, 33, 33, 33, 33, 8, 8, 8, 8, 8, 8, 2, 8, 2, 8, - 2, 2, 8, 8, 8, 0, 12, 12, 12, 12, 30, 30, 30, 30, 30, 2, - 30, 30, 30, 30, 2, 2, 30, 30, 30, 2, 2, 30, 30, 30, 30, 2, - 2, 2, 29, 29, 29, 29, 29, 29, 2, 2, 28, 28, 28, 28, 34, 34, - 34, 34, 34, 2, 2, 2, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, - 35, 35, 35, 2, 2, 2, 45, 45, 45, 45, 45, 45, 2, 2, 2, 2, - 2, 45, 44, 44, 44, 44, 44, 0, 0, 2, 43, 43, 43, 43, 46, 46, - 46, 46, 46, 2, 46, 46, 31, 31, 31, 31, 31, 31, 2, 2, 32, 32, - 0, 0, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 2, 2, 32, 2, - 2, 2, 32, 32, 32, 2, 28, 28, 2, 2, 48, 48, 48, 48, 48, 48, - 48, 2, 48, 2, 2, 2, 52, 52, 52, 52, 52, 52, 2, 2, 52, 2, - 2, 2, 58, 58, 58, 58, 58, 58, 2, 2, 58, 58, 58, 2, 2, 2, - 58, 58, 54, 54, 54, 54, 2, 2, 54, 54, 91, 91, 91, 91, 91, 91, - 91, 2, 91, 2, 2, 91, 91, 91, 2, 2, 1, 1, 1, 2, 62, 62, - 62, 62, 62, 2, 2, 2, 62, 62, 62, 2, 76, 76, 76, 76, 93, 93, - 93, 93, 70, 70, 70, 70, 2, 2, 2, 70, 70, 70, 2, 2, 2, 70, - 70, 70, 73, 73, 73, 73, 6, 2, 2, 2, 8, 8, 8, 2, 2, 8, - 8, 8, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 0, 2, 19, 19, 9, 9, 9, 9, 9, 6, 19, 9, - 9, 9, 9, 9, 19, 19, 9, 9, 9, 19, 6, 19, 19, 19, 19, 19, - 19, 9, 9, 9, 2, 2, 2, 9, 2, 9, 2, 9, 9, 9, 1, 1, - 0, 0, 0, 2, 0, 0, 0, 19, 2, 2, 0, 0, 0, 19, 0, 0, - 0, 2, 19, 2, 2, 2, 0, 2, 2, 2, 1, 2, 2, 2, 0, 0, - 9, 0, 0, 0, 19, 19, 27, 27, 27, 27, 2, 2, 0, 0, 0, 0, - 2, 0, 56, 56, 56, 56, 2, 55, 55, 55, 61, 61, 61, 61, 2, 2, - 2, 61, 61, 2, 2, 2, 0, 0, 2, 2, 13, 13, 13, 13, 13, 13, - 2, 13, 13, 13, 2, 2, 0, 13, 0, 13, 0, 13, 13, 13, 13, 13, - 1, 1, 1, 1, 12, 12, 2, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 2, 2, 1, 1, 0, 0, 15, 15, 15, 0, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 0, 2, 26, 26, 26, 26, 26, 26, 26, 2, 12, - 12, 12, 12, 12, 12, 2, 12, 12, 12, 0, 39, 39, 39, 39, 39, 2, - 2, 2, 39, 39, 39, 2, 86, 86, 86, 86, 77, 77, 77, 77, 79, 79, - 79, 79, 19, 19, 19, 2, 19, 19, 2, 19, 2, 19, 19, 19, 19, 19, - 2, 2, 2, 2, 19, 19, 60, 60, 60, 60, 60, 2, 2, 2, 65, 65, - 65, 65, 75, 75, 75, 75, 75, 75, 2, 2, 2, 2, 75, 75, 69, 69, - 69, 69, 69, 69, 0, 69, 74, 74, 74, 74, 2, 2, 2, 74, 12, 2, - 2, 2, 84, 84, 84, 84, 84, 84, 2, 0, 84, 84, 2, 2, 2, 2, - 84, 84, 33, 33, 33, 2, 68, 68, 68, 68, 68, 68, 68, 2, 68, 68, - 2, 2, 92, 92, 92, 92, 92, 92, 92, 2, 2, 2, 2, 92, 87, 87, - 87, 87, 87, 87, 87, 2, 19, 9, 19, 19, 19, 19, 0, 0, 87, 87, - 2, 2, 2, 2, 2, 12, 2, 2, 2, 4, 14, 2, 14, 2, 14, 14, - 2, 14, 14, 2, 14, 14, 2, 2, 2, 3, 3, 3, 0, 0, 2, 2, - 3, 3, 1, 1, 6, 6, 3, 2, 3, 3, 3, 2, 2, 0, 2, 0, - 0, 0, 0, 0, 17, 17, 17, 17, 0, 0, 2, 2, 12, 12, 49, 49, - 49, 49, 2, 49, 49, 49, 49, 49, 49, 2, 49, 49, 2, 49, 49, 49, - 2, 2, 9, 2, 2, 2, 0, 1, 2, 2, 71, 71, 71, 71, 71, 2, - 2, 2, 67, 67, 67, 67, 67, 2, 2, 2, 42, 42, 42, 42, 2, 42, - 42, 42, 41, 41, 41, 41, 41, 41, 41, 2,118,118,118,118,118,118, - 118, 2, 53, 53, 53, 53, 53, 53, 2, 53, 59, 59, 59, 59, 59, 59, - 2, 2, 40, 40, 40, 40, 51, 51, 51, 51, 50, 50, 50, 50, 50, 50, - 2, 2,135,135,135,135,106,106,106,106,104,104,104,104, 2, 2, - 2,104,161,161,161,161,161,161,161, 2,161,161, 2,161,161, 2, - 2, 2,110,110,110,110,110,110,110, 2,110,110, 2, 2, 19, 2, - 19, 19, 47, 47, 47, 47, 47, 47, 2, 2, 47, 2, 47, 47, 47, 47, - 2, 47, 47, 2, 2, 2, 47, 2, 2, 47, 81, 81, 81, 81, 81, 81, - 2, 81,120,120,120,120,116,116,116,116,116,116,116, 2, 2, 2, - 2,116,128,128,128,128,128,128,128, 2,128,128, 2, 2, 2, 2, - 2,128, 66, 66, 66, 66, 2, 2, 2, 66, 72, 72, 72, 72, 72, 72, - 2, 2, 2, 2, 2, 72, 98, 98, 98, 98, 97, 97, 97, 97, 2, 2, - 97, 97, 57, 57, 57, 57, 2, 57, 57, 2, 2, 57, 57, 57, 57, 57, - 2, 2, 57, 57, 57, 2, 2, 2, 2, 57, 57, 2, 2, 2, 88, 88, - 88, 88,117,117,117,117,112,112,112,112,112,112,112, 2, 2, 2, - 2,112, 78, 78, 78, 78, 78, 78, 2, 2, 2, 78, 78, 78, 83, 83, - 83, 83, 83, 83, 2, 2, 82, 82, 82, 82, 82, 82, 82, 2,122,122, - 122,122,122,122, 2, 2, 2,122,122,122,122, 2, 2, 2, 89, 89, - 89, 89, 89, 2, 2, 2,130,130,130,130,130,130,130, 2, 2, 2, - 130,130,144,144,144,144,144,144, 2, 2,156,156,156,156,156,156, - 2,156,156,156, 2, 2, 2, 3, 3, 3,147,147,147,147,148,148, - 148,148,148,148, 2, 2,158,158,158,158,158,158, 2, 2,153,153, - 153,153,149,149,149,149,149,149,149, 2, 94, 94, 94, 94, 94, 94, - 2, 2, 2, 2, 94, 94, 2, 2, 2, 94, 85, 85, 85, 85, 85, 85, - 85, 2, 2, 85, 2, 2,101,101,101,101,101, 2, 2, 2,101,101, - 2, 2, 96, 96, 96, 96, 96, 2, 96, 96,111,111,111,111,111,111, - 111, 2,100,100,100,100,108,108,108,108,108,108, 2,108,108,108, - 2, 2,129,129,129,129,129,129,129, 2,129, 2,129,129,129,129, - 2,129,129,129, 2, 2,109,109,109,109,109,109,109, 2,109,109, - 2, 2,107,107,107,107, 2,107,107,107,107, 2, 2,107,107, 2, - 107,107,107,107, 2, 1,107,107, 2, 2,107, 2, 2, 2, 2, 2, - 2,107, 2, 2,107,107,137,137,137,137, 2,137,137,137,137,137, - 2, 2,124,124,124,124,124,124, 2, 2,123,123,123,123,123,123, - 2, 2,114,114,114,114,114, 2, 2, 2,114,114, 2, 2,102,102, - 102,102,102,102, 2, 2,126,126,126,126,126,126,126, 2, 2,126, - 126,126,142,142,142,142,125,125,125,125,125,125,125, 2, 2, 2, - 2,125,154,154,154,154,154,154,154, 2, 2,154, 2, 2, 2,154, - 154, 2,154,154, 2,154,154, 2, 2,154,154,154, 2, 2,150,150, - 150,150, 2, 2,150,150,150, 2, 2, 2,141,141,141,141,140,140, - 140,140,140,140,140, 2,121,121,121,121,121, 2, 2, 2, 7, 7, - 2, 2,133,133,133,133,133, 2,133,133,133,133,133, 2,133,133, - 2, 2,133, 2, 2, 2,134,134,134,134, 2, 2,134,134, 2,134, - 134,134,134,134,134, 2,138,138,138,138,138,138,138, 2,138,138, - 2,138, 2, 2,138, 2,138,138, 2, 2,143,143,143,143,143,143, - 2,143,143, 2,143,143,143,143,143, 2,143, 2, 2, 2,143,143, - 2, 2,145,145,145,145,145, 2, 2, 2,163,163,163,163,163, 2, - 163,163,163,163,163, 2, 2, 2,163,163,163,163, 2, 2, 86, 2, - 2, 2, 63, 63, 63, 63, 63, 63, 2, 2, 63, 63, 63, 2, 63, 2, - 2, 2,157,157,157,157,157,157,157, 2, 80, 80, 80, 80, 80, 80, - 2, 2,127,127,127,127,127,127,127, 2, 79, 2, 2, 2,115,115, - 115,115,115,115,115, 2,115,115, 2, 2, 2, 2,115,115,159,159, - 159,159,159,159,159, 2,159,159, 2, 2,103,103,103,103,103,103, - 2, 2,119,119,119,119,119,119, 2, 2,119,119, 2,119, 2,119, - 119,119,146,146,146,146,146,146,146, 2, 99, 99, 99, 99, 99, 99, - 99, 2, 2, 2, 2, 99,136,139, 13, 13,155, 2, 2, 2,136,136, - 136,136,155,155,155,155,155,155, 2, 2,136, 2, 2, 2, 2, 17, - 17, 17, 2, 17, 17, 2, 17, 15, 15, 15, 17, 17, 17, 2, 2, 2, - 15, 2, 2, 17, 2, 2,139,139,139,139,105,105,105,105,105,105, - 105, 2,105, 2, 2, 2,105,105, 2, 2, 1, 1, 2, 2, 0, 0, - 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 2, 2, 0, 2, 2, 0, - 0, 2, 0, 2, 0, 2,131,131,131,131, 2, 2, 2,131, 2,131, - 131,131, 56, 56, 56, 2, 56, 2, 2, 56, 56, 56, 2, 56, 56, 2, - 56, 56, 6, 6, 2, 2, 2, 2, 2, 6,151,151,151,151,151, 2, - 2, 2,151,151, 2, 2, 2, 2,151,151,160,160,160,160,160,160, - 160, 2,152,152,152,152,152,152, 2, 2, 2, 2, 2,152,164,164, - 164,164,164,164, 2, 2, 2, 30, 30, 2,113,113,113,113,113, 2, - 2,113,113,113,113, 2,132,132,132,132,132,132, 2, 2, 2, 2, - 132,132, 2, 3, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 2, 2, - 3, 2, 3, 2, 3, 2, 3, 3, 2, 3, 15, 0, 0, 2, 13, 2, - 2, 2, 13, 13, 13, 2, 2, 0, 2, 2, 0, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 9, 9, 9, 10, 9, 11, 12, 13, 9, 9, 9, 14, - 9, 9, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 70, 70, 70,240, 70, 70, 70, 70, 70, 70, 70, 70, 70,241, 70, 70, + 70, 70,242, 96, 96, 96, 70, 70, 70, 70,243, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 70, 70, 70, 70, 70, 70,244, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,245, 96, 96, + 96, 96, 96, 96, 96, 96,246, 96,247,248, 0, 1, 2, 2, 0, 1, + 2, 2, 2, 3, 4, 5, 0, 0, 0, 0, 0, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 0, 0, 0, 19, 0, 19, 0, 0, 0, 0, 0, + 26, 26, 1, 1, 1, 1, 9, 9, 9, 9, 0, 9, 9, 9, 2, 2, + 9, 9, 9, 9, 0, 9, 2, 2, 2, 2, 9, 0, 9, 0, 9, 9, + 9, 2, 9, 2, 9, 9, 9, 9, 2, 9, 9, 9, 55, 55, 55, 55, + 55, 55, 6, 6, 6, 6, 6, 1, 1, 6, 2, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 2, 2, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 2, 2, 2, 2, 14, 14, 2, 2, 2, 3, 3, 3, 3, 3, 0, + 3, 3, 0, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 1, 1, 1, + 3, 3, 1, 3, 3, 3, 37, 37, 37, 37, 37, 37, 2, 37, 37, 37, + 37, 2, 2, 37, 37, 37, 38, 38, 38, 38, 38, 38, 2, 2, 64, 64, + 64, 64, 64, 64, 64, 2, 2, 64, 64, 64, 90, 90, 90, 90, 90, 90, + 2, 2, 90, 90, 90, 2, 95, 95, 95, 95, 2, 2, 95, 2, 3, 3, + 3, 2, 3, 3, 2, 2, 3, 3, 0, 3, 7, 7, 7, 7, 7, 1, + 1, 1, 1, 7, 7, 7, 0, 0, 7, 7, 5, 5, 5, 5, 2, 5, + 5, 5, 5, 2, 2, 5, 5, 2, 5, 5, 5, 2, 5, 2, 2, 2, + 5, 5, 5, 5, 2, 2, 5, 5, 5, 2, 2, 2, 2, 5, 5, 5, + 2, 5, 2, 11, 11, 11, 11, 11, 11, 2, 2, 2, 2, 11, 11, 2, + 2, 11, 11, 11, 11, 11, 11, 2, 11, 11, 2, 11, 11, 2, 11, 11, + 2, 2, 2, 11, 2, 2, 11, 2, 11, 2, 2, 2, 11, 11, 2, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 2, 10, 10, 2, 10, 10, 10, 10, + 2, 2, 10, 2, 2, 2, 2, 2, 10, 10, 2, 21, 21, 21, 21, 21, + 21, 21, 21, 2, 2, 21, 21, 2, 21, 21, 21, 21, 2, 2, 21, 21, + 2, 21, 2, 2, 21, 21, 2, 2, 22, 22, 2, 22, 22, 22, 22, 22, + 22, 2, 22, 2, 22, 22, 22, 22, 2, 2, 2, 22, 22, 2, 2, 2, + 2, 22, 22, 2, 2, 2, 22, 22, 22, 22, 23, 23, 23, 23, 23, 2, + 23, 23, 23, 23, 2, 2, 2, 23, 23, 2, 23, 23, 23, 2, 2, 23, + 2, 2, 2, 2, 23, 23, 2, 2, 2, 23, 16, 16, 16, 16, 16, 2, + 16, 16, 2, 16, 16, 16, 16, 16, 2, 2, 2, 16, 16, 2, 2, 2, + 16, 16, 20, 20, 20, 20, 20, 2, 20, 20, 2, 2, 20, 20, 2, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 2, 2, 2, 36, 36, 36, 36, + 2, 36, 2, 36, 2, 2, 2, 2, 36, 2, 2, 2, 2, 36, 36, 2, + 36, 2, 36, 2, 2, 2, 2, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 2, 2, 2, 2, 0, 2, 18, 18, 2, 18, 2, 18, 18, 18, 18, + 18, 2, 18, 18, 18, 18, 2, 18, 2, 18, 18, 18, 2, 2, 18, 2, + 18, 2, 25, 25, 25, 25, 2, 25, 25, 25, 25, 2, 2, 2, 25, 2, + 25, 25, 25, 0, 0, 0, 0, 25, 25, 2, 33, 33, 33, 33, 8, 8, + 8, 8, 8, 8, 2, 8, 2, 8, 2, 2, 8, 8, 8, 0, 12, 12, + 12, 12, 30, 30, 30, 30, 30, 2, 30, 30, 30, 30, 2, 2, 30, 30, + 30, 2, 2, 30, 30, 30, 30, 2, 2, 2, 29, 29, 29, 29, 29, 29, + 2, 2, 28, 28, 28, 28, 34, 34, 34, 34, 34, 2, 2, 2, 35, 35, + 35, 35, 35, 35, 35, 0, 0, 0, 35, 35, 35, 2, 2, 2, 45, 45, + 45, 45, 45, 45, 2, 2, 2, 2, 2, 45, 44, 44, 44, 44, 44, 0, + 0, 2, 43, 43, 43, 43, 46, 46, 46, 46, 46, 2, 46, 46, 31, 31, + 31, 31, 31, 31, 2, 2, 32, 32, 0, 0, 32, 0, 32, 32, 32, 32, + 32, 32, 32, 32, 2, 2, 32, 2, 2, 2, 32, 32, 32, 2, 28, 28, + 2, 2, 48, 48, 48, 48, 48, 48, 48, 2, 48, 2, 2, 2, 52, 52, + 52, 52, 52, 52, 2, 2, 52, 2, 2, 2, 58, 58, 58, 58, 58, 58, + 2, 2, 58, 58, 58, 2, 2, 2, 58, 58, 54, 54, 54, 54, 2, 2, + 54, 54, 91, 91, 91, 91, 91, 91, 91, 2, 91, 2, 2, 91, 91, 91, + 2, 2, 1, 1, 1, 2, 62, 62, 62, 62, 62, 2, 2, 2, 62, 62, + 62, 2, 76, 76, 76, 76, 93, 93, 93, 93, 70, 70, 70, 70, 2, 2, + 2, 70, 70, 70, 2, 2, 2, 70, 70, 70, 73, 73, 73, 73, 6, 2, + 2, 2, 8, 8, 8, 2, 2, 8, 8, 8, 1, 1, 1, 0, 1, 0, + 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 2, 19, 19, + 9, 9, 9, 9, 9, 6, 19, 9, 9, 9, 9, 9, 19, 19, 9, 9, + 9, 19, 6, 19, 19, 19, 19, 19, 19, 9, 9, 9, 2, 2, 2, 9, + 2, 9, 2, 9, 9, 9, 1, 1, 0, 0, 0, 2, 0, 0, 0, 19, + 2, 2, 0, 0, 0, 19, 0, 0, 0, 2, 19, 2, 2, 2, 0, 2, + 2, 2, 1, 2, 2, 2, 0, 0, 9, 0, 0, 0, 19, 19, 27, 27, + 27, 27, 2, 2, 0, 0, 0, 0, 2, 0, 56, 56, 56, 56, 2, 55, + 55, 55, 61, 61, 61, 61, 2, 2, 2, 61, 61, 2, 2, 2, 0, 0, + 2, 2, 13, 13, 13, 13, 13, 13, 2, 13, 13, 13, 2, 2, 0, 13, + 0, 13, 0, 13, 13, 13, 13, 13, 1, 1, 1, 1, 12, 12, 2, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 2, 2, 1, 1, 0, 0, 15, + 15, 15, 0, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 0, 2, 26, + 26, 26, 26, 26, 26, 26, 2, 12, 12, 12, 12, 12, 12, 2, 12, 12, + 12, 0, 39, 39, 39, 39, 39, 2, 2, 2, 39, 39, 39, 2, 86, 86, + 86, 86, 77, 77, 77, 77, 79, 79, 79, 79, 19, 19, 19, 2, 19, 19, + 2, 19, 2, 19, 19, 19, 19, 19, 2, 2, 2, 2, 19, 19, 60, 60, + 60, 60, 60, 2, 2, 2, 65, 65, 65, 65, 75, 75, 75, 75, 75, 75, + 2, 2, 2, 2, 75, 75, 69, 69, 69, 69, 69, 69, 0, 69, 74, 74, + 74, 74, 2, 2, 2, 74, 12, 2, 2, 2, 84, 84, 84, 84, 84, 84, + 2, 0, 84, 84, 2, 2, 2, 2, 84, 84, 33, 33, 33, 2, 68, 68, + 68, 68, 68, 68, 68, 2, 68, 68, 2, 2, 92, 92, 92, 92, 92, 92, + 92, 2, 2, 2, 2, 92, 87, 87, 87, 87, 87, 87, 87, 2, 19, 9, + 19, 19, 19, 19, 0, 0, 87, 87, 2, 2, 2, 2, 2, 12, 2, 2, + 2, 4, 14, 2, 14, 2, 14, 14, 2, 14, 14, 2, 14, 14, 2, 2, + 2, 3, 3, 3, 0, 0, 2, 2, 3, 3, 1, 1, 6, 6, 3, 2, + 3, 3, 3, 2, 2, 0, 2, 0, 0, 0, 0, 0, 17, 17, 17, 17, + 0, 0, 2, 2, 12, 12, 49, 49, 49, 49, 2, 49, 49, 49, 49, 49, + 49, 2, 49, 49, 2, 49, 49, 49, 2, 2, 9, 2, 2, 2, 0, 1, + 2, 2, 71, 71, 71, 71, 71, 2, 2, 2, 67, 67, 67, 67, 67, 2, + 2, 2, 42, 42, 42, 42, 2, 42, 42, 42, 41, 41, 41, 41, 41, 41, + 41, 2,118,118,118,118,118,118,118, 2, 53, 53, 53, 53, 53, 53, + 2, 53, 59, 59, 59, 59, 59, 59, 2, 2, 40, 40, 40, 40, 51, 51, + 51, 51, 50, 50, 50, 50, 50, 50, 2, 2,135,135,135,135,106,106, + 106,106,104,104,104,104, 2, 2, 2,104,161,161,161,161,161,161, + 161, 2,161,161, 2,161,161, 2, 2, 2,110,110,110,110,110,110, + 110, 2,110,110, 2, 2, 19, 2, 19, 19, 47, 47, 47, 47, 47, 47, + 2, 2, 47, 2, 47, 47, 47, 47, 2, 47, 47, 2, 2, 2, 47, 2, + 2, 47, 81, 81, 81, 81, 81, 81, 2, 81,120,120,120,120,116,116, + 116,116,116,116,116, 2, 2, 2, 2,116,128,128,128,128,128,128, + 128, 2,128,128, 2, 2, 2, 2, 2,128, 66, 66, 66, 66, 2, 2, + 2, 66, 72, 72, 72, 72, 72, 72, 2, 2, 2, 2, 2, 72, 98, 98, + 98, 98, 97, 97, 97, 97, 2, 2, 97, 97, 57, 57, 57, 57, 2, 57, + 57, 2, 2, 57, 57, 57, 57, 57, 2, 2, 57, 57, 57, 2, 2, 2, + 2, 57, 57, 2, 2, 2, 88, 88, 88, 88,117,117,117,117,112,112, + 112,112,112,112,112, 2, 2, 2, 2,112, 78, 78, 78, 78, 78, 78, + 2, 2, 2, 78, 78, 78, 83, 83, 83, 83, 83, 83, 2, 2, 82, 82, + 82, 82, 82, 82, 82, 2,122,122,122,122,122,122, 2, 2, 2,122, + 122,122,122, 2, 2, 2, 89, 89, 89, 89, 89, 2, 2, 2,130,130, + 130,130,130,130,130, 2, 2, 2,130,130,144,144,144,144,144,144, + 2, 2,156,156,156,156,156,156, 2,156,156,156, 2, 2, 2, 3, + 3, 3,147,147,147,147,148,148,148,148,148,148, 2, 2,158,158, + 158,158,158,158, 2, 2,153,153,153,153,149,149,149,149,149,149, + 149, 2, 94, 94, 94, 94, 94, 94, 2, 2, 2, 2, 94, 94, 2, 2, + 2, 94, 85, 85, 85, 85, 85, 85, 85, 2, 2, 85, 2, 2,101,101, + 101,101,101, 2, 2, 2,101,101, 2, 2, 96, 96, 96, 96, 96, 2, + 96, 96,111,111,111,111,111,111,111, 2,100,100,100,100,108,108, + 108,108,108,108, 2,108,108,108, 2, 2,129,129,129,129,129,129, + 129, 2,129, 2,129,129,129,129, 2,129,129,129, 2, 2,109,109, + 109,109,109,109,109, 2,109,109, 2, 2,107,107,107,107, 2,107, + 107,107,107, 2, 2,107,107, 2,107,107,107,107, 2, 1,107,107, + 2, 2,107, 2, 2, 2, 2, 2, 2,107, 2, 2,107,107,137,137, + 137,137, 2,137,137,137,137,137, 2, 2,124,124,124,124,124,124, + 2, 2,123,123,123,123,123,123, 2, 2,114,114,114,114,114, 2, + 2, 2,114,114, 2, 2,102,102,102,102,102,102, 2, 2,126,126, + 126,126,126,126,126, 2, 2,126,126,126,142,142,142,142,125,125, + 125,125,125,125,125, 2, 2, 2, 2,125,154,154,154,154,154,154, + 154, 2, 2,154, 2, 2, 2,154,154, 2,154,154, 2,154,154, 2, + 2,154,154,154, 2, 2,150,150,150,150, 2, 2,150,150,150, 2, + 2, 2,141,141,141,141,140,140,140,140,140,140,140, 2,121,121, + 121,121,121, 2, 2, 2, 7, 7, 2, 2,133,133,133,133,133, 2, + 133,133,133,133,133, 2,133,133, 2, 2,133, 2, 2, 2,134,134, + 134,134, 2, 2,134,134, 2,134,134,134,134,134,134, 2,138,138, + 138,138,138,138,138, 2,138,138, 2,138, 2, 2,138, 2,138,138, + 2, 2,143,143,143,143,143,143, 2,143,143, 2,143,143,143,143, + 143, 2,143, 2, 2, 2,143,143, 2, 2,145,145,145,145,145, 2, + 2, 2,163,163,163,163,163, 2,163,163,163,163,163, 2, 2, 2, + 163,163,163,163, 2, 2, 86, 2, 2, 2, 63, 63, 63, 63, 63, 63, + 2, 2, 63, 63, 63, 2, 63, 2, 2, 2,157,157,157,157,157,157, + 157, 2, 80, 80, 80, 80, 80, 80, 2, 2,127,127,127,127,127,127, + 127, 2, 79, 2, 2, 2,115,115,115,115,115,115,115, 2,115,115, + 2, 2, 2, 2,115,115,159,159,159,159,159,159,159, 2,159,159, + 2, 2,103,103,103,103,103,103, 2, 2,119,119,119,119,119,119, + 2, 2,119,119, 2,119, 2,119,119,119,146,146,146,146,146,146, + 146, 2, 99, 99, 99, 99, 99, 99, 99, 2, 2, 2, 2, 99,136,139, + 13, 13,155, 2, 2, 2,136,136,136,136,155,155,155,155,155,155, + 2, 2,136, 2, 2, 2, 2, 17, 17, 17, 2, 17, 17, 2, 17, 15, + 15, 15, 17, 17, 17, 2, 2, 2, 15, 2, 2, 17, 2, 2,139,139, + 139,139,105,105,105,105,105,105,105, 2,105, 2, 2, 2,105,105, + 2, 2, 1, 1, 2, 2, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, + 1, 1, 2, 2, 0, 2, 2, 0, 0, 2, 0, 2, 0, 2,131,131, + 131,131, 2, 2, 2,131, 2,131,131,131, 56, 56, 56, 2, 56, 2, + 2, 56, 56, 56, 2, 56, 56, 2, 56, 56, 6, 6, 2, 2, 2, 2, + 2, 6,151,151,151,151,151, 2, 2, 2,151,151, 2, 2, 2, 2, + 151,151,160,160,160,160,160,160,160, 2,152,152,152,152,152,152, + 2, 2, 2, 2, 2,152,164,164,164,164,164,164, 2, 2, 2, 30, + 30, 2,113,113,113,113,113, 2, 2,113,113,113,113, 2,132,132, + 132,132,132,132, 2, 2, 2, 2,132,132, 2, 3, 3, 2, 3, 2, + 2, 3, 2, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, 3, + 2, 3, 15, 0, 0, 2, 13, 2, 2, 2, 13, 13, 13, 2, 2, 0, + 2, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 10, + 9, 11, 12, 13, 9, 9, 9, 14, 9, 9, 15, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 16, 17, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 18, 19, 20, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 16, 17, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 18, 19, 20, 9, 21, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 22, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 22, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, @@ -3702,60 +3704,60 @@ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 24, - 25, 26, 27, 28, 29, 30, 0, 0, 31, 32, 0, 33, 0, 34, 0, 35, - 0, 0, 0, 0, 36, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 41, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 0, 45, 0, 0, - 0, 0, 0, 0, 46, 47, 0, 0, 0, 0, 0, 48, 0, 49, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 0, 0, - 0, 52, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, - 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 59, 60, 61, - 62, 63, 64, 65, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67, 68, 0, 69, 70, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99,100,101,102,103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, - 0,105,106, 0,107, 0, 0, 0,108, 0,109, 0,110, 0,111,112, - 113, 0,114, 0, 0, 0,115, 0, 0, 0,116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,118,119,120,121, - 0,122,123,124,125,126, 0,127, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157, 0, 0, 0,158,159,160,161, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,162,163, 0, 0, 0, 0, 0, 0, 0,164, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,169,170, 0, - 0, 0, 0,171,172, 0, 0, 0,173,174,175,176,177,178,179,180, - 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196, - 197,198,199,200,201,202,203,204,205,206, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 2, 3, 4, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 23, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, 0, 0, + 31, 32, 0, 33, 0, 34, 0, 35, 0, 0, 0, 0, 36, 37, 38, 39, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 43, 44, 0, 45, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, + 0, 0, 0, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 50, 51, 0, 0, 0, 52, 0, 0, 53, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, + 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 58, 59, 60, 61, 62, 63, 64, 65, 0, 0, 0, 0, + 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 68, 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102, + 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,104, 0, 0, 0, 0, 0, 0,105,106, 0,107, 0, 0, 0, + 108, 0,109, 0,110, 0,111,112,113, 0,114, 0, 0, 0,115, 0, + 0, 0,116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,117, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,118,119,120,121, 0,122,123,124,125,126, 0,127, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153,154,155,156,157, 0, 0, + 0,158,159,160,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,162,163, 0, 0, 0, 0, 0, + 0, 0,164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,167, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0,168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,169,170, 0, 0, 0, 0,171,172, 0, 0, 0, + 173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188, + 189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204, + 205,206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, }; static const uint16_t -_hb_ucd_u16[10040] = +_hb_ucd_u16[10060] = { 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 7, 8, 9, 10, 11, 12, 13, 13, 13, 14, 15, 13, 13, 16, 17, 18, 19, 20, 21, 22, 13, 23, @@ -3798,9 +3800,9 @@ 209, 306, 209, 209, 209, 209, 209, 209, 9, 9, 9, 11, 11, 11, 307, 308, 13, 13, 13, 13, 13, 13, 309, 310, 11, 11, 311, 48, 48, 48, 312, 313, 48, 314, 315, 315, 315, 315, 32, 32, 316, 317, 318, 319, 320, 321, 140, 140, - 209, 322, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 324, 140, 325, - 326, 327, 328, 329, 136, 48, 48, 48, 48, 330, 178, 48, 48, 48, 48, 331, - 332, 48, 48, 136, 48, 48, 48, 48, 200, 333, 48, 48, 209, 209, 323, 48, + 209, 322, 209, 209, 209, 209, 209, 323, 209, 209, 209, 209, 209, 324, 140, 209, + 325, 326, 327, 328, 136, 48, 48, 48, 48, 329, 178, 48, 48, 48, 48, 330, + 331, 48, 48, 136, 48, 48, 48, 48, 200, 332, 48, 48, 209, 209, 333, 48, 209, 334, 335, 209, 336, 337, 209, 209, 335, 209, 209, 337, 209, 209, 209, 209, 48, 48, 48, 48, 209, 209, 209, 209, 48, 338, 48, 48, 48, 48, 48, 48, 151, 209, 209, 209, 287, 48, 48, 229, 339, 48, 340, 140, 13, 13, 341, 342, @@ -3871,143 +3873,144 @@ 9, 9, 607, 11, 654, 370, 140, 140, 140, 140, 140, 140, 140, 140, 140, 499, 271, 271, 655, 656, 140, 140, 140, 140, 499, 271, 657, 658, 140, 140, 140, 140, 659, 48, 660, 661, 662, 663, 664, 665, 666, 206, 667, 206, 140, 140, 140, 668, - 209, 209, 325, 209, 209, 209, 209, 209, 209, 323, 334, 669, 669, 669, 209, 324, - 670, 209, 209, 209, 209, 209, 209, 209, 209, 209, 671, 140, 140, 140, 672, 209, - 673, 209, 209, 325, 674, 675, 324, 140, 209, 209, 209, 209, 209, 209, 209, 676, - 209, 209, 209, 209, 209, 677, 426, 426, 209, 209, 209, 209, 209, 209, 209, 678, - 209, 209, 209, 209, 209, 176, 325, 427, 325, 209, 209, 209, 679, 176, 209, 209, - 679, 209, 671, 675, 140, 140, 140, 140, 209, 209, 209, 209, 209, 323, 671, 426, - 674, 209, 209, 680, 681, 325, 674, 674, 209, 682, 209, 209, 288, 140, 140, 192, + 209, 209, 669, 209, 209, 209, 209, 209, 209, 323, 334, 670, 670, 670, 209, 324, + 671, 209, 209, 209, 209, 209, 209, 209, 209, 209, 672, 140, 140, 140, 673, 209, + 674, 209, 209, 669, 675, 676, 324, 140, 209, 209, 209, 209, 209, 209, 209, 677, + 209, 209, 209, 209, 209, 678, 426, 426, 209, 209, 209, 209, 209, 209, 209, 679, + 209, 209, 209, 209, 209, 176, 669, 427, 669, 209, 209, 209, 680, 176, 209, 209, + 680, 209, 672, 676, 140, 140, 140, 140, 209, 209, 209, 209, 209, 323, 672, 426, + 675, 209, 209, 681, 682, 669, 675, 675, 209, 683, 209, 209, 288, 140, 140, 192, 48, 48, 48, 48, 48, 48, 140, 140, 48, 48, 48, 207, 48, 48, 48, 48, 48, 204, 48, 48, 48, 48, 48, 48, 48, 48, 478, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 100, 140, 48, 204, 140, 140, 140, 140, 140, 140, - 48, 48, 48, 48, 71, 48, 48, 48, 48, 48, 48, 140, 140, 140, 140, 140, - 683, 140, 570, 570, 570, 570, 570, 570, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 140, 391, 391, 391, 391, 391, 391, 391, 684, - 391, 391, 391, 391, 391, 391, 391, 685, 0, 0, 0, 0, 1, 2, 1, 2, - 0, 0, 3, 3, 4, 5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 6, 0, 0, 7, 0, 8, 8, 8, 8, 8, 8, 8, 9, - 10, 11, 12, 11, 11, 11, 13, 11, 14, 14, 14, 14, 14, 14, 14, 14, - 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 16, 17, 18, 17, 17, - 19, 20, 21, 21, 22, 21, 23, 24, 25, 26, 27, 27, 28, 29, 27, 30, - 27, 27, 27, 27, 27, 31, 27, 27, 32, 33, 33, 33, 34, 27, 27, 27, - 35, 35, 35, 36, 37, 37, 37, 38, 39, 39, 40, 41, 42, 43, 44, 27, - 45, 46, 27, 27, 27, 27, 47, 27, 48, 48, 48, 48, 48, 49, 50, 48, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 109, 110, 111, 112, 109, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 122, 123, 122, 124, 125, 125, - 126, 127, 128, 129, 130, 131, 125, 125, 132, 132, 132, 132, 133, 132, 134, 135, - 132, 133, 132, 136, 136, 137, 125, 125, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 139, 139, 140, 139, 139, 141, 142, 142, 142, 142, 142, 142, 142, 142, - 143, 143, 143, 143, 144, 145, 143, 143, 144, 143, 143, 146, 147, 148, 143, 143, - 143, 147, 143, 143, 143, 149, 143, 150, 143, 151, 152, 152, 152, 152, 152, 153, - 154, 154, 154, 154, 154, 154, 154, 154, 155, 156, 157, 157, 157, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 168, 168, 168, 168, 169, 170, 170, - 171, 172, 173, 173, 173, 173, 173, 174, 173, 173, 175, 154, 154, 154, 154, 176, - 177, 178, 179, 179, 180, 181, 182, 183, 184, 184, 185, 184, 186, 187, 168, 168, - 188, 189, 190, 190, 190, 191, 190, 192, 193, 193, 194, 8, 195, 125, 125, 125, - 196, 196, 196, 196, 197, 196, 196, 198, 199, 199, 199, 199, 200, 200, 200, 201, - 202, 202, 202, 203, 204, 205, 205, 205, 206, 139, 139, 207, 208, 209, 210, 211, - 4, 4, 212, 4, 4, 213, 214, 215, 4, 4, 4, 216, 8, 8, 8, 8, - 11, 217, 11, 11, 217, 218, 11, 219, 11, 11, 11, 220, 220, 221, 11, 222, - 223, 0, 0, 0, 0, 0, 224, 225, 226, 227, 0, 0, 228, 8, 8, 229, - 0, 0, 230, 231, 232, 0, 4, 4, 233, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 125, 235, 125, 0, 0, - 236, 236, 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 238, 0, 0, 0, 0, 0, 0, 239, 239, 239, 239, 239, 239, 4, 4, - 240, 240, 240, 240, 240, 240, 240, 241, 139, 139, 140, 242, 242, 242, 243, 244, - 143, 245, 246, 246, 246, 246, 14, 14, 0, 0, 0, 0, 0, 247, 125, 125, - 248, 249, 248, 248, 248, 248, 248, 250, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 251, 125, 252, 253, 0, 254, 255, 256, 257, 257, 257, - 257, 258, 259, 260, 260, 260, 260, 261, 262, 263, 263, 264, 142, 142, 142, 142, - 265, 0, 263, 263, 0, 0, 266, 260, 142, 265, 0, 0, 0, 0, 142, 267, - 0, 0, 0, 0, 0, 260, 260, 268, 260, 260, 260, 260, 260, 269, 0, 0, - 248, 248, 248, 248, 0, 0, 0, 0, 270, 270, 270, 270, 270, 270, 270, 270, - 271, 270, 270, 270, 272, 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 275, 125, 14, 14, 14, 14, 14, 14, 276, 276, 276, 276, 276, 277, - 0, 0, 278, 4, 4, 4, 4, 4, 279, 4, 4, 4, 280, 281, 125, 282, - 283, 283, 284, 285, 286, 286, 286, 287, 288, 288, 288, 288, 289, 290, 48, 48, - 291, 291, 292, 293, 293, 294, 142, 295, 296, 296, 296, 296, 297, 298, 138, 299, - 300, 300, 300, 301, 302, 303, 138, 138, 304, 304, 304, 304, 305, 306, 307, 308, - 309, 310, 246, 4, 4, 311, 312, 152, 152, 152, 152, 152, 307, 307, 313, 314, - 142, 142, 315, 142, 316, 142, 142, 317, 125, 125, 125, 125, 125, 125, 125, 125, - 248, 248, 248, 248, 248, 248, 318, 248, 248, 248, 248, 248, 248, 319, 125, 125, - 320, 321, 21, 322, 323, 27, 27, 27, 27, 27, 27, 27, 324, 325, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 326, 27, 27, 27, 27, - 27, 327, 27, 27, 328, 125, 125, 27, 8, 285, 329, 0, 0, 330, 331, 332, - 27, 27, 27, 27, 27, 27, 27, 333, 334, 0, 1, 2, 1, 2, 335, 259, - 260, 336, 142, 265, 337, 338, 339, 340, 341, 342, 343, 344, 345, 345, 125, 125, - 342, 342, 342, 342, 342, 342, 342, 346, 347, 0, 0, 348, 11, 11, 11, 11, - 349, 350, 351, 125, 125, 0, 0, 352, 353, 354, 355, 355, 355, 356, 357, 252, - 358, 358, 359, 360, 361, 362, 362, 363, 364, 365, 366, 366, 367, 368, 125, 125, - 369, 369, 369, 369, 369, 370, 370, 370, 371, 372, 373, 374, 374, 375, 374, 376, - 377, 377, 378, 379, 379, 379, 380, 381, 381, 382, 383, 384, 125, 125, 125, 125, - 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 386, 385, 387, 388, 125, - 389, 4, 4, 390, 125, 125, 125, 125, 391, 392, 392, 393, 394, 395, 396, 396, - 397, 398, 399, 125, 125, 125, 400, 401, 402, 403, 404, 405, 125, 125, 125, 125, - 406, 406, 407, 408, 407, 409, 407, 407, 410, 411, 412, 413, 414, 414, 415, 415, - 416, 416, 125, 125, 417, 417, 418, 419, 420, 420, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 125, 125, 125, 125, 125, 429, 429, 429, 429, 430, 125, 125, 125, - 431, 431, 431, 432, 431, 431, 431, 433, 434, 434, 435, 436, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 27, 45, 437, 437, 438, 439, 125, 125, 125, 440, - 441, 441, 442, 443, 443, 444, 125, 445, 446, 125, 125, 447, 448, 125, 449, 450, - 451, 451, 451, 451, 452, 453, 451, 454, 455, 455, 455, 455, 456, 457, 458, 459, - 460, 460, 460, 461, 462, 463, 463, 464, 465, 465, 465, 465, 465, 465, 466, 467, - 468, 469, 468, 468, 470, 125, 125, 125, 471, 472, 473, 474, 474, 474, 475, 476, - 477, 478, 479, 480, 481, 482, 483, 484, 485, 485, 485, 485, 485, 486, 487, 125, - 488, 488, 488, 488, 489, 490, 125, 125, 491, 491, 491, 492, 491, 493, 125, 125, - 494, 494, 494, 494, 495, 496, 497, 125, 498, 498, 498, 499, 499, 125, 125, 125, - 500, 501, 502, 500, 503, 125, 125, 125, 504, 504, 504, 505, 125, 125, 125, 125, - 125, 125, 506, 506, 506, 506, 506, 507, 508, 509, 510, 511, 512, 513, 125, 125, - 125, 125, 514, 515, 515, 514, 516, 125, 517, 517, 517, 517, 518, 519, 519, 519, - 519, 519, 520, 154, 521, 521, 521, 522, 523, 125, 125, 125, 125, 125, 125, 125, - 524, 525, 525, 526, 527, 525, 528, 529, 529, 530, 531, 532, 125, 125, 125, 125, - 533, 534, 534, 535, 536, 537, 538, 539, 540, 541, 542, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 543, 544, 545, 546, 545, 547, 545, 548, 125, 125, - 125, 125, 125, 549, 550, 550, 550, 551, 552, 552, 552, 552, 552, 552, 552, 552, - 552, 553, 125, 125, 125, 125, 125, 125, 552, 552, 552, 552, 552, 552, 554, 555, - 552, 552, 552, 552, 556, 125, 125, 125, 125, 557, 557, 557, 557, 557, 557, 558, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 560, 125, 125, - 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 562, 125, 125, 125, - 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 563, 564, 565, 566, 567, - 567, 567, 567, 568, 569, 570, 571, 572, 573, 573, 573, 573, 574, 575, 576, 577, - 573, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 578, 578, 578, 578, - 578, 579, 125, 125, 125, 125, 125, 125, 580, 580, 580, 580, 581, 580, 580, 580, - 582, 580, 125, 125, 125, 125, 583, 584, 585, 585, 585, 585, 585, 585, 585, 585, - 585, 585, 585, 585, 585, 585, 585, 586, 587, 587, 587, 587, 587, 587, 587, 587, - 587, 587, 587, 587, 587, 588, 125, 125, 589, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 590, 591, 257, 257, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 592, 593, 125, 594, 595, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 597, - 598, 598, 598, 598, 598, 598, 599, 600, 601, 602, 266, 125, 125, 125, 125, 125, - 8, 8, 603, 8, 604, 0, 0, 0, 0, 0, 0, 0, 266, 125, 125, 125, - 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 606, 0, 0, 0, 607, 608, - 609, 0, 610, 0, 0, 0, 235, 125, 11, 11, 11, 11, 611, 125, 125, 125, - 125, 125, 125, 125, 0, 266, 0, 266, 0, 0, 0, 0, 0, 234, 0, 612, - 0, 0, 0, 0, 0, 224, 0, 0, 0, 613, 614, 615, 616, 0, 0, 0, - 617, 618, 0, 619, 620, 621, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 623, 0, 0, 0, 624, 624, 624, 624, 624, 624, 624, 624, - 625, 626, 627, 125, 125, 125, 125, 125, 4, 628, 629, 125, 125, 125, 125, 125, - 630, 631, 632, 14, 14, 14, 633, 125, 634, 125, 125, 125, 125, 125, 125, 125, - 635, 635, 636, 637, 638, 125, 125, 125, 125, 639, 640, 125, 641, 641, 641, 642, - 125, 125, 125, 125, 125, 643, 643, 644, 125, 125, 125, 125, 125, 125, 645, 646, - 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 648, 649, 125, 125, - 650, 650, 650, 650, 651, 652, 125, 125, 125, 125, 125, 125, 125, 125, 125, 334, - 0, 0, 0, 653, 125, 125, 125, 125, 334, 0, 0, 247, 125, 125, 125, 125, - 654, 27, 655, 656, 657, 658, 659, 660, 661, 662, 663, 662, 125, 125, 125, 664, - 0, 0, 252, 0, 0, 0, 0, 0, 0, 266, 226, 334, 334, 334, 0, 605, - 0, 0, 247, 125, 125, 125, 665, 0, 666, 0, 0, 252, 612, 667, 605, 125, - 0, 0, 0, 0, 0, 668, 350, 350, 0, 0, 0, 0, 0, 0, 0, 669, - 0, 0, 0, 0, 0, 285, 252, 228, 252, 0, 0, 0, 670, 285, 0, 0, - 670, 0, 247, 667, 125, 125, 125, 125, 0, 0, 0, 0, 0, 266, 247, 350, - 612, 0, 0, 671, 672, 252, 612, 612, 0, 330, 0, 0, 235, 125, 125, 285, - 248, 248, 248, 248, 248, 248, 125, 125, 248, 248, 248, 319, 248, 248, 248, 248, - 248, 318, 248, 248, 248, 248, 248, 248, 248, 248, 584, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 673, 125, 248, 318, 125, 125, 125, 125, 125, 125, - 248, 248, 248, 248, 674, 248, 248, 248, 248, 248, 248, 125, 125, 125, 125, 125, - 675, 125, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, + 48, 48, 48, 48, 48, 48, 100, 48, 48, 48, 48, 48, 48, 204, 140, 140, + 48, 204, 140, 140, 140, 140, 140, 140, 48, 48, 48, 48, 71, 48, 48, 48, + 48, 48, 48, 140, 140, 140, 140, 140, 684, 140, 570, 570, 570, 570, 570, 570, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 140, + 391, 391, 391, 391, 391, 391, 391, 685, 391, 391, 391, 391, 391, 391, 391, 686, + 0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 3, 3, 4, 5, 4, 5, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 0, 0, 7, 0, + 8, 8, 8, 8, 8, 8, 8, 9, 10, 11, 12, 11, 11, 11, 13, 11, + 14, 14, 14, 14, 14, 14, 14, 14, 15, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 16, 17, 18, 17, 17, 19, 20, 21, 21, 22, 21, 23, 24, + 25, 26, 27, 27, 28, 29, 27, 30, 27, 27, 27, 27, 27, 31, 27, 27, + 32, 33, 33, 33, 34, 27, 27, 27, 35, 35, 35, 36, 37, 37, 37, 38, + 39, 39, 40, 41, 42, 43, 44, 27, 45, 46, 27, 27, 27, 27, 47, 27, + 48, 48, 48, 48, 48, 49, 50, 48, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 109, 110, 111, 112, 109, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 122, 123, 122, 124, 125, 125, 126, 127, 128, 129, 130, 131, 125, 125, + 132, 132, 132, 132, 133, 132, 134, 135, 132, 133, 132, 136, 136, 137, 125, 125, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 140, 139, 139, 141, + 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 144, 145, 143, 143, + 144, 143, 143, 146, 147, 148, 143, 143, 143, 147, 143, 143, 143, 149, 143, 150, + 143, 151, 152, 152, 152, 152, 152, 153, 154, 154, 154, 154, 154, 154, 154, 154, + 155, 156, 157, 157, 157, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 168, 168, 168, 168, 169, 170, 170, 171, 172, 173, 173, 173, 173, 173, 174, + 173, 173, 175, 154, 154, 154, 154, 176, 177, 178, 179, 179, 180, 181, 182, 183, + 184, 184, 185, 184, 186, 187, 168, 168, 188, 189, 190, 190, 190, 191, 190, 192, + 193, 193, 194, 8, 195, 125, 125, 125, 196, 196, 196, 196, 197, 196, 196, 198, + 199, 199, 199, 199, 200, 200, 200, 201, 202, 202, 202, 203, 204, 205, 205, 205, + 206, 139, 139, 207, 208, 209, 210, 211, 4, 4, 212, 4, 4, 213, 214, 215, + 4, 4, 4, 216, 8, 8, 8, 8, 11, 217, 11, 11, 217, 218, 11, 219, + 11, 11, 11, 220, 220, 221, 11, 222, 223, 0, 0, 0, 0, 0, 224, 225, + 226, 227, 0, 0, 228, 8, 8, 229, 0, 0, 230, 231, 232, 0, 4, 4, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 234, 125, 235, 125, 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 238, 0, 0, 0, 0, 0, 0, + 239, 239, 239, 239, 239, 239, 4, 4, 240, 240, 240, 240, 240, 240, 240, 241, + 139, 139, 140, 242, 242, 242, 243, 244, 143, 245, 246, 246, 246, 246, 14, 14, + 0, 0, 0, 0, 0, 247, 125, 125, 248, 249, 248, 248, 248, 248, 248, 250, + 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 251, 125, 0, + 252, 0, 253, 254, 255, 256, 256, 256, 256, 257, 258, 259, 259, 259, 259, 260, + 261, 262, 262, 263, 142, 142, 142, 142, 264, 0, 262, 262, 0, 0, 265, 259, + 142, 264, 0, 0, 0, 0, 142, 266, 0, 0, 0, 0, 0, 259, 259, 267, + 259, 259, 259, 259, 259, 268, 0, 0, 248, 248, 248, 248, 0, 0, 0, 0, + 269, 269, 269, 269, 269, 269, 269, 269, 270, 269, 269, 269, 271, 272, 272, 272, + 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 274, 125, 14, 14, 14, 14, + 14, 14, 275, 275, 275, 275, 275, 276, 0, 0, 277, 4, 4, 4, 4, 4, + 278, 4, 4, 4, 279, 280, 125, 281, 282, 282, 283, 284, 285, 285, 285, 286, + 287, 287, 287, 287, 288, 289, 48, 48, 290, 290, 291, 292, 292, 293, 142, 294, + 295, 295, 295, 295, 296, 297, 138, 298, 299, 299, 299, 300, 301, 302, 138, 138, + 303, 303, 303, 303, 304, 305, 306, 307, 308, 309, 246, 4, 4, 310, 311, 152, + 152, 152, 152, 152, 306, 306, 312, 313, 142, 142, 314, 142, 315, 142, 142, 316, + 125, 125, 125, 125, 125, 125, 125, 125, 248, 248, 248, 248, 248, 248, 317, 248, + 248, 248, 248, 248, 248, 318, 125, 125, 319, 320, 21, 321, 322, 27, 27, 27, + 27, 27, 27, 27, 323, 324, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 325, 27, 27, 27, 27, 27, 326, 27, 27, 327, 125, 125, 27, + 8, 284, 328, 0, 0, 329, 330, 331, 27, 27, 27, 27, 27, 27, 27, 332, + 333, 0, 1, 2, 1, 2, 334, 258, 259, 335, 142, 264, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 344, 125, 125, 341, 341, 341, 341, 341, 341, 341, 345, + 346, 0, 0, 347, 11, 11, 11, 11, 348, 349, 350, 125, 125, 0, 0, 351, + 352, 353, 354, 354, 354, 355, 356, 357, 358, 358, 359, 360, 361, 362, 362, 363, + 364, 365, 366, 366, 367, 368, 125, 125, 369, 369, 369, 369, 369, 370, 370, 370, + 371, 372, 373, 374, 374, 375, 374, 376, 377, 377, 378, 379, 379, 379, 380, 381, + 381, 382, 383, 384, 125, 125, 125, 125, 385, 385, 385, 385, 385, 385, 385, 385, + 385, 385, 385, 386, 385, 387, 388, 125, 389, 4, 4, 390, 125, 125, 125, 125, + 391, 392, 392, 393, 394, 395, 396, 396, 397, 398, 399, 125, 125, 125, 400, 401, + 402, 403, 404, 405, 125, 125, 125, 125, 406, 406, 407, 408, 407, 409, 407, 407, + 410, 411, 412, 413, 414, 414, 415, 415, 416, 416, 125, 125, 417, 417, 418, 419, + 420, 420, 420, 421, 422, 423, 424, 425, 426, 427, 428, 125, 125, 125, 125, 125, + 429, 429, 429, 429, 430, 125, 125, 125, 431, 431, 431, 432, 431, 431, 431, 433, + 434, 434, 435, 436, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 27, 45, + 437, 437, 438, 439, 125, 125, 125, 440, 441, 441, 442, 443, 443, 444, 125, 445, + 446, 125, 125, 447, 448, 125, 449, 450, 451, 451, 451, 451, 452, 453, 451, 454, + 455, 455, 455, 455, 456, 457, 458, 459, 460, 460, 460, 461, 462, 463, 463, 464, + 465, 465, 465, 465, 465, 465, 466, 467, 468, 469, 468, 468, 470, 125, 125, 125, + 471, 472, 473, 474, 474, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 485, 485, 485, 485, 486, 487, 125, 488, 488, 488, 488, 489, 490, 125, 125, + 491, 491, 491, 492, 491, 493, 125, 125, 494, 494, 494, 494, 495, 496, 497, 125, + 498, 498, 498, 499, 499, 125, 125, 125, 500, 501, 502, 500, 503, 125, 125, 125, + 504, 504, 504, 505, 125, 125, 125, 125, 125, 125, 506, 506, 506, 506, 506, 507, + 508, 509, 510, 511, 512, 513, 125, 125, 125, 125, 514, 515, 515, 514, 516, 125, + 517, 517, 517, 517, 518, 519, 519, 519, 519, 519, 520, 154, 521, 521, 521, 522, + 523, 125, 125, 125, 125, 125, 125, 125, 524, 525, 525, 526, 527, 525, 528, 529, + 529, 530, 531, 532, 125, 125, 125, 125, 533, 534, 534, 535, 536, 537, 538, 539, + 540, 541, 542, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 543, 544, + 545, 546, 545, 547, 545, 548, 125, 125, 125, 125, 125, 549, 550, 550, 550, 551, + 552, 552, 552, 552, 552, 552, 552, 552, 552, 553, 125, 125, 125, 125, 125, 125, + 552, 552, 552, 552, 552, 552, 554, 555, 552, 552, 552, 552, 556, 125, 125, 125, + 125, 557, 557, 557, 557, 557, 557, 558, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 560, 125, 125, 561, 561, 561, 561, 561, 561, 561, 561, + 561, 561, 561, 561, 562, 125, 125, 125, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 563, 564, 565, 566, 567, 567, 567, 567, 568, 569, 570, 571, 572, + 573, 573, 573, 573, 574, 575, 576, 577, 573, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 578, 578, 578, 578, 578, 579, 125, 125, 125, 125, 125, 125, + 580, 580, 580, 580, 581, 580, 580, 580, 582, 580, 125, 125, 125, 125, 583, 584, + 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 586, + 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 588, 125, 125, + 589, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 590, + 591, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 592, 593, 125, 594, 595, 596, 596, 596, 596, 596, 596, 596, 596, 596, + 596, 596, 596, 596, 596, 596, 596, 597, 598, 598, 598, 598, 598, 598, 599, 600, + 601, 602, 603, 125, 125, 125, 125, 125, 8, 8, 604, 8, 605, 0, 0, 0, + 0, 0, 0, 0, 603, 125, 125, 125, 0, 0, 0, 0, 0, 0, 0, 606, + 0, 0, 607, 0, 0, 0, 608, 609, 610, 0, 611, 0, 0, 0, 235, 125, + 11, 11, 11, 11, 612, 125, 125, 125, 125, 125, 125, 125, 0, 603, 0, 603, + 0, 0, 0, 0, 0, 234, 0, 613, 0, 0, 0, 0, 0, 224, 0, 0, + 0, 614, 615, 616, 617, 0, 0, 0, 618, 619, 0, 620, 621, 622, 0, 0, + 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624, 0, 0, 0, + 625, 625, 625, 625, 625, 625, 625, 625, 626, 627, 628, 125, 125, 125, 125, 125, + 4, 629, 630, 125, 125, 125, 125, 125, 631, 632, 633, 14, 14, 14, 634, 125, + 635, 125, 125, 125, 125, 125, 125, 125, 636, 636, 637, 638, 639, 125, 125, 125, + 125, 640, 641, 125, 642, 642, 642, 643, 125, 125, 125, 125, 125, 644, 644, 645, + 125, 125, 125, 125, 125, 125, 646, 647, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 648, 648, 648, 649, 650, 125, 125, 651, 651, 651, 651, 652, 653, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 333, 0, 0, 0, 654, 125, 125, 125, 125, + 333, 0, 0, 247, 125, 125, 125, 125, 655, 27, 656, 657, 658, 659, 660, 661, + 662, 663, 664, 663, 125, 125, 125, 665, 0, 0, 357, 0, 0, 0, 0, 0, + 0, 603, 226, 333, 333, 333, 0, 606, 0, 0, 247, 125, 125, 125, 666, 0, + 667, 0, 0, 357, 613, 668, 606, 125, 0, 0, 0, 0, 0, 669, 349, 349, + 0, 0, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 284, 357, 228, + 357, 0, 0, 0, 671, 284, 0, 0, 671, 0, 247, 668, 125, 125, 125, 125, + 0, 0, 0, 0, 0, 603, 247, 349, 613, 0, 0, 672, 673, 357, 613, 613, + 0, 329, 0, 0, 235, 125, 125, 284, 248, 248, 248, 248, 248, 248, 125, 125, + 248, 248, 248, 318, 248, 248, 248, 248, 248, 317, 248, 248, 248, 248, 248, 248, + 248, 248, 584, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 674, 248, + 248, 248, 248, 248, 248, 317, 125, 125, 248, 317, 125, 125, 125, 125, 125, 125, + 248, 248, 248, 248, 675, 248, 248, 248, 248, 248, 248, 125, 125, 125, 125, 125, + 676, 125, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 3, 0, 0, 0, 4, 0, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 5, 0, 2, 5, 6, 0, 7, 7, 7, 7, 8, 9, 10, 11, @@ -4071,33 +4074,33 @@ 0, 240, 0, 0, 241, 241, 241, 241, 18, 18, 18, 18, 18, 12, 242, 18, 243, 243, 243, 243, 243, 243, 12, 244, 245, 12, 12, 244, 151, 154, 12, 12, 151, 154, 151, 154, 0, 0, 0, 246, 247, 247, 247, 247, 247, 247, 248, 247, - 247, 12, 12, 12, 247, 249, 12, 12, 0, 0, 0, 12, 0, 250, 0, 0, - 251, 247, 252, 253, 0, 0, 247, 0, 254, 255, 255, 255, 255, 255, 255, 255, - 255, 256, 257, 258, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 259, - 12, 262, 263, 263, 263, 263, 263, 263, 264, 150, 150, 150, 150, 150, 150, 265, - 0, 12, 12, 12, 150, 150, 150, 266, 260, 260, 260, 261, 260, 260, 0, 0, - 267, 267, 267, 267, 267, 267, 267, 268, 267, 269, 12, 12, 270, 270, 270, 270, - 271, 271, 271, 271, 271, 271, 271, 12, 272, 272, 272, 272, 272, 272, 12, 12, - 237, 2, 2, 2, 2, 2, 231, 2, 2, 2, 273, 12, 274, 275, 276, 12, - 277, 2, 2, 2, 278, 278, 278, 278, 278, 278, 278, 279, 0, 0, 246, 12, - 280, 280, 280, 280, 280, 280, 12, 12, 281, 281, 281, 281, 281, 282, 12, 283, - 281, 281, 282, 12, 284, 284, 284, 284, 284, 284, 284, 285, 286, 286, 286, 286, - 286, 12, 12, 287, 150, 150, 150, 288, 289, 289, 289, 289, 289, 289, 289, 290, - 289, 289, 291, 292, 145, 145, 145, 293, 294, 294, 294, 294, 294, 295, 12, 12, - 294, 294, 294, 296, 294, 294, 296, 294, 297, 297, 297, 297, 298, 12, 12, 12, - 12, 12, 299, 297, 300, 300, 300, 300, 300, 301, 12, 12, 155, 154, 155, 154, - 155, 154, 12, 12, 2, 2, 3, 2, 2, 302, 303, 12, 300, 300, 300, 304, - 300, 300, 304, 12, 150, 12, 12, 12, 150, 265, 305, 150, 150, 150, 150, 12, - 247, 247, 247, 249, 247, 247, 249, 12, 2, 273, 12, 12, 306, 22, 12, 24, - 25, 26, 25, 307, 308, 309, 25, 25, 50, 12, 12, 12, 310, 29, 29, 29, - 29, 29, 29, 311, 312, 29, 29, 29, 29, 29, 12, 310, 7, 7, 7, 313, - 232, 0, 0, 0, 0, 232, 0, 12, 29, 314, 29, 29, 29, 29, 29, 315, - 316, 0, 0, 0, 0, 317, 260, 260, 260, 260, 260, 318, 319, 150, 319, 150, - 319, 150, 319, 288, 0, 232, 0, 232, 12, 12, 316, 246, 320, 320, 320, 321, - 320, 320, 320, 320, 320, 322, 320, 320, 320, 320, 322, 323, 320, 320, 320, 324, - 320, 320, 322, 12, 232, 131, 0, 0, 0, 131, 0, 0, 8, 8, 8, 14, - 0, 0, 0, 234, 325, 12, 12, 12, 0, 0, 0, 326, 327, 327, 327, 327, - 327, 327, 327, 328, 329, 329, 329, 329, 330, 12, 12, 12, 215, 0, 0, 0, + 247, 12, 12, 12, 247, 249, 12, 12, 0, 250, 0, 0, 251, 247, 252, 253, + 0, 0, 247, 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 256, 257, 258, + 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261, 259, 12, 262, 263, 263, + 263, 263, 263, 263, 264, 150, 150, 150, 150, 150, 150, 265, 0, 12, 12, 131, + 150, 150, 150, 266, 260, 260, 260, 261, 260, 260, 0, 0, 267, 267, 267, 267, + 267, 267, 267, 268, 267, 269, 12, 12, 270, 270, 270, 270, 271, 271, 271, 271, + 271, 271, 271, 12, 272, 272, 272, 272, 272, 272, 12, 12, 237, 2, 2, 2, + 2, 2, 231, 2, 2, 2, 273, 12, 274, 275, 276, 12, 277, 2, 2, 2, + 278, 278, 278, 278, 278, 278, 278, 279, 0, 0, 246, 12, 280, 280, 280, 280, + 280, 280, 12, 12, 281, 281, 281, 281, 281, 282, 12, 283, 281, 281, 282, 12, + 284, 284, 284, 284, 284, 284, 284, 285, 286, 286, 286, 286, 286, 12, 12, 287, + 150, 150, 150, 288, 289, 289, 289, 289, 289, 289, 289, 290, 289, 289, 291, 292, + 145, 145, 145, 293, 294, 294, 294, 294, 294, 295, 12, 12, 294, 294, 294, 296, + 294, 294, 296, 294, 297, 297, 297, 297, 298, 12, 12, 12, 12, 12, 299, 297, + 300, 300, 300, 300, 300, 301, 12, 12, 155, 154, 155, 154, 155, 154, 12, 12, + 2, 2, 3, 2, 2, 302, 303, 12, 300, 300, 300, 304, 300, 300, 304, 12, + 150, 12, 12, 12, 150, 265, 305, 150, 150, 150, 150, 12, 247, 247, 247, 249, + 247, 247, 249, 12, 2, 273, 12, 12, 306, 22, 12, 24, 25, 26, 25, 307, + 308, 309, 25, 25, 50, 12, 12, 12, 310, 29, 29, 29, 29, 29, 29, 311, + 312, 29, 29, 29, 29, 29, 12, 310, 7, 7, 7, 313, 232, 0, 0, 0, + 0, 232, 0, 12, 29, 314, 29, 29, 29, 29, 29, 315, 316, 0, 0, 0, + 0, 317, 260, 260, 260, 260, 260, 318, 319, 150, 319, 150, 319, 150, 319, 288, + 0, 232, 0, 232, 12, 12, 316, 246, 320, 320, 320, 321, 320, 320, 320, 320, + 320, 322, 320, 320, 320, 320, 322, 323, 320, 320, 320, 324, 320, 320, 322, 12, + 232, 131, 0, 0, 0, 131, 0, 0, 8, 8, 8, 14, 0, 0, 0, 234, + 325, 12, 12, 12, 0, 0, 0, 326, 327, 327, 327, 327, 327, 327, 327, 328, + 329, 329, 329, 329, 330, 12, 12, 12, 215, 0, 0, 0, 0, 0, 0, 12, 331, 331, 331, 331, 331, 12, 12, 332, 333, 333, 333, 333, 333, 333, 334, 12, 335, 335, 335, 335, 335, 335, 336, 12, 337, 337, 337, 337, 337, 337, 337, 338, 339, 339, 339, 339, 339, 12, 339, 339, 339, 340, 12, 12, 341, 341, 341, 341, @@ -4159,232 +4162,232 @@ 260, 556, 260, 557, 558, 255, 255, 255, 559, 12, 12, 12, 560, 12, 12, 12, 256, 561, 12, 12, 12, 260, 12, 12, 562, 562, 562, 562, 562, 562, 562, 12, 563, 563, 563, 563, 563, 563, 564, 12, 563, 563, 563, 565, 563, 563, 565, 12, - 563, 563, 566, 563, 7, 7, 7, 567, 7, 199, 12, 12, 0, 246, 12, 12, - 0, 232, 316, 0, 0, 568, 228, 0, 0, 0, 568, 7, 213, 569, 7, 0, - 0, 0, 570, 228, 8, 225, 12, 12, 0, 0, 234, 12, 0, 0, 0, 229, - 571, 572, 316, 229, 0, 0, 240, 316, 0, 316, 0, 0, 0, 240, 232, 316, - 0, 229, 0, 229, 0, 0, 240, 232, 0, 573, 239, 0, 229, 0, 0, 0, - 0, 246, 0, 0, 0, 0, 0, 239, 574, 574, 574, 574, 574, 574, 574, 12, - 12, 12, 575, 574, 576, 574, 574, 574, 2, 2, 2, 273, 12, 275, 273, 12, - 241, 577, 241, 241, 241, 241, 578, 241, 579, 580, 577, 12, 19, 19, 19, 581, - 12, 12, 12, 582, 583, 583, 583, 583, 583, 583, 583, 584, 583, 583, 583, 585, - 583, 583, 585, 586, 587, 587, 587, 587, 587, 587, 587, 588, 589, 589, 589, 589, - 589, 589, 590, 591, 592, 592, 592, 592, 592, 592, 593, 12, 151, 154, 151, 594, - 151, 151, 151, 154, 595, 595, 595, 595, 595, 596, 595, 595, 595, 597, 12, 12, - 598, 598, 598, 598, 598, 598, 598, 12, 598, 598, 599, 600, 0, 234, 12, 12, - 29, 414, 29, 29, 601, 602, 414, 29, 50, 29, 603, 12, 604, 310, 603, 414, - 601, 602, 603, 603, 601, 602, 50, 29, 50, 29, 414, 605, 29, 29, 606, 29, - 29, 29, 29, 12, 414, 414, 606, 29, 51, 12, 12, 12, 12, 239, 0, 0, - 607, 12, 12, 12, 246, 12, 12, 12, 0, 0, 12, 0, 0, 232, 131, 0, - 0, 0, 12, 12, 0, 0, 0, 240, 0, 246, 12, 239, 608, 12, 12, 12, - 247, 247, 609, 12, 610, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, 946, 948, 0, 962, - 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041,1042,1043,1047, 0, - 0,1080,1081,1082,1086,1110, 0, 0,1124,1125,1126,1127,1131,1133, 0,1147, - 1154,1155,1156,1161,1187,1188,1189,1193, 0,1219,1226,1227,1228,1229,1233, 0, - 0,1267,1268,1269,1273,1298, 0,1303, 943,1128, 944,1129, 954,1139, 958,1143, - 959,1144, 960,1145, 961,1146, 964,1149, 0, 0, 973,1158, 974,1159, 975,1160, - 983,1168, 978,1163, 988,1173, 990,1175, 991,1176, 993,1178, 994,1179, 0, 0, - 1004,1190,1005,1191,1006,1192,1014,1199,1007, 0, 0, 0,1016,1201,1020,1206, - 0,1022,1208,1025,1211,1023,1209, 0, 0, 0, 0,1032,1218,1037,1223,1035, - 1221, 0, 0, 0,1044,1230,1045,1231,1049,1235, 0, 0,1058,1244,1064,1250, - 1060,1246,1066,1252,1067,1253,1072,1258,1069,1255,1077,1264,1074,1261, 0, 0, - 1083,1270,1084,1271,1085,1272,1088,1275,1089,1276,1096,1283,1103,1290,1111,1299, - 1115,1118,1307,1120,1309,1121,1310, 0,1053,1239, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,1093,1280, 0, 0, 0, 0, 0, 0, 0, + 563, 563, 566, 563, 0, 12, 12, 12, 7, 7, 7, 567, 7, 199, 12, 12, + 0, 246, 12, 12, 0, 232, 316, 0, 0, 568, 228, 0, 0, 0, 568, 7, + 213, 569, 7, 0, 0, 0, 570, 228, 8, 225, 12, 12, 0, 0, 234, 12, + 0, 0, 0, 229, 571, 572, 316, 229, 0, 0, 240, 316, 0, 316, 0, 0, + 0, 240, 232, 316, 0, 229, 0, 229, 0, 0, 240, 232, 0, 573, 239, 0, + 229, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 239, 574, 574, 574, 574, + 574, 574, 574, 12, 12, 12, 575, 574, 576, 574, 574, 574, 2, 2, 2, 273, + 12, 275, 273, 12, 241, 577, 241, 241, 241, 241, 578, 241, 579, 580, 577, 12, + 19, 19, 19, 581, 12, 12, 12, 582, 583, 583, 583, 583, 583, 583, 583, 584, + 583, 583, 583, 585, 583, 583, 585, 586, 587, 587, 587, 587, 587, 587, 587, 588, + 589, 589, 589, 589, 589, 589, 590, 591, 592, 592, 592, 592, 592, 592, 593, 12, + 151, 154, 151, 594, 151, 151, 151, 154, 595, 595, 595, 595, 595, 596, 595, 595, + 595, 597, 12, 12, 598, 598, 598, 598, 598, 598, 598, 12, 598, 598, 599, 600, + 0, 234, 12, 12, 29, 414, 29, 29, 601, 602, 414, 29, 50, 29, 603, 12, + 604, 310, 603, 414, 601, 602, 603, 603, 601, 602, 50, 29, 50, 29, 414, 605, + 29, 29, 606, 29, 29, 29, 29, 12, 414, 414, 606, 29, 51, 12, 12, 12, + 12, 239, 0, 0, 607, 12, 12, 12, 246, 12, 12, 12, 0, 0, 12, 0, + 0, 232, 131, 0, 0, 0, 12, 12, 0, 0, 0, 240, 0, 246, 12, 239, + 608, 12, 12, 12, 247, 247, 609, 12, 610, 12, 12, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 939, 940, 941, 942, + 946, 948, 0, 962, 969, 970, 971, 976,1001,1002,1003,1008, 0,1033,1040,1041, + 1042,1043,1047, 0, 0,1080,1081,1082,1086,1110, 0, 0,1124,1125,1126,1127, + 1131,1133, 0,1147,1154,1155,1156,1161,1187,1188,1189,1193, 0,1219,1226,1227, + 1228,1229,1233, 0, 0,1267,1268,1269,1273,1298, 0,1303, 943,1128, 944,1129, + 954,1139, 958,1143, 959,1144, 960,1145, 961,1146, 964,1149, 0, 0, 973,1158, + 974,1159, 975,1160, 983,1168, 978,1163, 988,1173, 990,1175, 991,1176, 993,1178, + 994,1179, 0, 0,1004,1190,1005,1191,1006,1192,1014,1199,1007, 0, 0, 0, + 1016,1201,1020,1206, 0,1022,1208,1025,1211,1023,1209, 0, 0, 0, 0,1032, + 1218,1037,1223,1035,1221, 0, 0, 0,1044,1230,1045,1231,1049,1235, 0, 0, + 1058,1244,1064,1250,1060,1246,1066,1252,1067,1253,1072,1258,1069,1255,1077,1264, + 1074,1261, 0, 0,1083,1270,1084,1271,1085,1272,1088,1275,1089,1276,1096,1283, + 1103,1290,1111,1299,1115,1118,1307,1120,1309,1121,1310, 0,1053,1239, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1093,1280, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 949,1134,1010,1195,1050,1236,1090,1277,1341,1368,1340, - 1367,1342,1369,1339,1366, 0,1320,1347,1418,1419,1323,1350, 0, 0, 992,1177, - 1018,1204,1055,1241,1416,1417,1415,1424,1202, 0, 0, 0, 987,1172, 0, 0, - 1031,1217,1321,1348,1322,1349,1338,1365, 950,1135, 951,1136, 979,1164, 980,1165, - 1011,1196,1012,1197,1051,1237,1052,1238,1061,1247,1062,1248,1091,1278,1092,1279, - 1071,1257,1076,1263, 0, 0, 997,1182, 0, 0, 0, 0, 0, 0, 945,1130, - 982,1167,1337,1364,1335,1362,1046,1232,1422,1423,1113,1301, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10,1425, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,1314,1427, 5, - 1434,1438,1443, 0,1450, 0,1455,1461,1514, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 949,1134,1010,1195,1050,1236,1090, + 1277,1341,1368,1340,1367,1342,1369,1339,1366, 0,1320,1347,1418,1419,1323,1350, + 0, 0, 992,1177,1018,1204,1055,1241,1416,1417,1415,1424,1202, 0, 0, 0, + 987,1172, 0, 0,1031,1217,1321,1348,1322,1349,1338,1365, 950,1135, 951,1136, + 979,1164, 980,1165,1011,1196,1012,1197,1051,1237,1052,1238,1061,1247,1062,1248, + 1091,1278,1092,1279,1071,1257,1076,1263, 0, 0, 997,1182, 0, 0, 0, 0, + 0, 0, 945,1130, 982,1167,1337,1364,1335,1362,1046,1232,1422,1423,1113,1301, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10, + 1425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, + 0,1314,1427, 5,1434,1438,1443, 0,1450, 0,1455,1461,1514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1446,1458,1468,1476,1480,1486,1517, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1446,1458,1468,1476,1480,1486,1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1489,1503,1494,1500,1508, 0, 0, 0, 0,1520,1521, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1526,1528, 0,1525, 0, 0, 0,1522, - 0, 0, 0, 0,1536,1532,1539, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1556, 0, 0, 0, 0, 0, 0,1548,1550, 0,1547, 0, 0, 0,1567, - 0, 0, 0, 0,1558,1554,1561, 0, 0, 0, 0, 0, 0, 0,1568,1569, - 0, 0, 0, 0, 0, 0, 0, 0, 0,1529,1551, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1523,1545,1524,1546, 0, 0,1527,1549, - 0, 0,1570,1571,1530,1552,1531,1553, 0, 0,1533,1555,1535,1557,1537,1559, - 0, 0,1572,1573,1544,1566,1538,1560,1540,1562,1541,1563,1542,1564, 0, 0, - 1543,1565, 0, 0, 0, 0, 0, 0, 0, 0,1606,1607,1609,1608,1610, 0, - 0, 0, 0, 0, 0, 0, 0, 0,1613, 0,1611, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1612, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1489,1503,1494,1500,1508, 0, 0, 0, 0,1520, + 1521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1526,1528, 0,1525, + 0, 0, 0,1522, 0, 0, 0, 0,1536,1532,1539, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1556, 0, 0, 0, 0, 0, 0,1548,1550, 0,1547, + 0, 0, 0,1567, 0, 0, 0, 0,1558,1554,1561, 0, 0, 0, 0, 0, + 0, 0,1568,1569, 0, 0, 0, 0, 0, 0, 0, 0, 0,1529,1551, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1523,1545,1524,1546, + 0, 0,1527,1549, 0, 0,1570,1571,1530,1552,1531,1553, 0, 0,1533,1555, + 1535,1557,1537,1559, 0, 0,1572,1573,1544,1566,1538,1560,1540,1562,1541,1563, + 1542,1564, 0, 0,1543,1565, 0, 0, 0, 0, 0, 0, 0, 0,1606,1607, + 1609,1608,1610, 0, 0, 0, 0, 0, 0, 0, 0, 0,1613, 0,1611, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1620, 0, 0, 0, 0, 0, 0, 0,1623, 0, 0,1624, 0, 0, 0, + 0, 0, 0, 0, 0,1620, 0, 0, 0, 0, 0, 0, 0,1623, 0, 0, + 1624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1614,1615,1616,1617,1618,1619,1621,1622, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1628,1629, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1625,1626, 0,1627, 0, 0, 0,1634, + 0, 0,1635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1630,1631,1632, 0, 0,1633, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1639, 0, 0,1638,1640, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1636,1637, 0, 0, 0, 0, 0, 0, + 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1642,1644,1643, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1645, 0, 0, 0, 0, 0, 0, 0,1646, 0, 0, 0, + 0, 0, 0,1648,1649, 0,1647,1650, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1651,1653,1652, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1654, 0,1655,1657,1656, 0, 0, 0, 0,1659, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1660, 0, 0, 0, 0,1661, 0, + 0, 0, 0,1662, 0, 0, 0, 0,1663, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1658, 0, 0, 0, 0, 0, 0, 0, 0, 0,1664, + 0,1665,1673, 0,1674, 0, 0, 0, 0, 0, 0, 0, 0,1666, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1668, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1669, 0, 0, 0, 0,1670, 0, + 0, 0, 0,1671, 0, 0, 0, 0,1672, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,1676, 0,1677, 0,1678, 0,1679, 0,1680, 0, 0, 0,1681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1614,1615,1616,1617,1618,1619,1621,1622, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1628,1629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1625,1626, 0,1627, 0, 0, 0,1634, 0, 0,1635, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1630,1631,1632, 0, 0,1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1639, 0, 0,1638,1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1636,1637, 0, 0, 0, 0, 0, 0,1641, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1682, 0,1683, 0, 0,1684,1685, 0,1686, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 953,1138, 955,1140, + 956,1141, 957,1142,1324,1351, 963,1148, 965,1150, 968,1153, 966,1151, 967,1152, + 1378,1380,1379,1381, 984,1169, 985,1170,1420,1421, 986,1171, 989,1174, 995,1180, + 998,1183, 996,1181, 999,1184,1000,1185,1015,1200,1329,1356,1017,1203,1019,1205, + 1021,1207,1024,1210,1687,1688,1027,1213,1026,1212,1028,1214,1029,1215,1030,1216, + 1034,1220,1036,1222,1039,1225,1038,1224,1334,1361,1336,1363,1382,1384,1383,1385, + 1056,1242,1057,1243,1059,1245,1063,1249,1689,1690,1065,1251,1068,1254,1070,1256, + 1386,1387,1388,1389,1691,1692,1073,1259,1075,1262,1079,1266,1078,1265,1095,1282, + 1098,1285,1097,1284,1390,1391,1392,1393,1099,1286,1100,1287,1101,1288,1102,1289, + 1105,1292,1104,1291,1106,1294,1107,1295,1108,1296,1114,1302,1119,1308,1122,1311, + 1123,1312,1186,1260,1293,1305, 0,1394, 0, 0, 0, 0, 952,1137, 947,1132, + 1317,1344,1316,1343,1319,1346,1318,1345,1693,1695,1371,1375,1370,1374,1373,1377, + 1372,1376,1694,1696, 981,1166, 977,1162, 972,1157,1326,1353,1325,1352,1328,1355, + 1327,1354,1697,1698,1009,1194,1013,1198,1054,1240,1048,1234,1331,1358,1330,1357, + 1333,1360,1332,1359,1699,1700,1396,1401,1395,1400,1398,1403,1397,1402,1399,1404, + 1094,1281,1087,1274,1406,1411,1405,1410,1408,1413,1407,1412,1409,1414,1109,1297, + 1117,1306,1116,1304,1112,1300, 0, 0, 0, 0, 0, 0,1471,1472,1701,1705, + 1702,1706,1703,1707,1430,1431,1715,1719,1716,1720,1717,1721,1477,1478,1729,1731, + 1730,1732, 0, 0,1435,1436,1733,1735,1734,1736, 0, 0,1481,1482,1737,1741, + 1738,1742,1739,1743,1439,1440,1751,1755,1752,1756,1753,1757,1490,1491,1765,1768, + 1766,1769,1767,1770,1447,1448,1771,1774,1772,1775,1773,1776,1495,1496,1777,1779, + 1778,1780, 0, 0,1451,1452,1781,1783,1782,1784, 0, 0,1504,1505,1785,1788, + 1786,1789,1787,1790, 0,1459, 0,1791, 0,1792, 0,1793,1509,1510,1794,1798, + 1795,1799,1796,1800,1462,1463,1808,1812,1809,1813,1810,1814,1467, 21,1475, 22, + 1479, 23,1485, 24,1493, 27,1499, 28,1507, 29, 0, 0,1704,1708,1709,1710, + 1711,1712,1713,1714,1718,1722,1723,1724,1725,1726,1727,1728,1740,1744,1745,1746, + 1747,1748,1749,1750,1754,1758,1759,1760,1761,1762,1763,1764,1797,1801,1802,1803, + 1804,1805,1806,1807,1811,1815,1816,1817,1818,1819,1820,1821,1470,1469,1822,1474, + 1465, 0,1473,1825,1429,1428,1426, 12,1432, 0, 26, 0, 0,1315,1823,1484, + 1466, 0,1483,1829,1433, 13,1437, 14,1441,1826,1827,1828,1488,1487,1513, 19, + 0, 0,1492,1515,1445,1444,1442, 15, 0,1831,1832,1833,1502,1501,1516, 25, + 1497,1498,1506,1518,1457,1456,1454, 17,1453,1313, 11, 3, 0, 0,1824,1512, + 1519, 0,1511,1830,1449, 16,1460, 18,1464, 4, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1642,1644,1643, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1645, 0, 0, 0, 0, 0, 0, 0,1646, 0, 0, 0, 0, 0, 0,1648, - 1649, 0,1647,1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1651,1653,1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1654, 0,1655,1657,1656, 0, 0, 0, 0,1659, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1660, 0, 0, 0, 0,1661, 0, 0, 0, 0,1662, - 0, 0, 0, 0,1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1658, 0, 0, 0, 0, 0, 0, 0, 0, 0,1664, 0,1665,1673, 0, - 1674, 0, 0, 0, 0, 0, 0, 0, 0,1666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1668, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1669, 0, 0, 0, 0,1670, 0, 0, 0, 0,1671, - 0, 0, 0, 0,1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1675, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1676, 0, - 1677, 0,1678, 0,1679, 0,1680, 0, 0, 0,1681, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1682, 0,1683, 0, 0,1684,1685, 0,1686, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 953,1138, 955,1140, 956,1141, 957,1142, - 1324,1351, 963,1148, 965,1150, 968,1153, 966,1151, 967,1152,1378,1380,1379,1381, - 984,1169, 985,1170,1420,1421, 986,1171, 989,1174, 995,1180, 998,1183, 996,1181, - 999,1184,1000,1185,1015,1200,1329,1356,1017,1203,1019,1205,1021,1207,1024,1210, - 1687,1688,1027,1213,1026,1212,1028,1214,1029,1215,1030,1216,1034,1220,1036,1222, - 1039,1225,1038,1224,1334,1361,1336,1363,1382,1384,1383,1385,1056,1242,1057,1243, - 1059,1245,1063,1249,1689,1690,1065,1251,1068,1254,1070,1256,1386,1387,1388,1389, - 1691,1692,1073,1259,1075,1262,1079,1266,1078,1265,1095,1282,1098,1285,1097,1284, - 1390,1391,1392,1393,1099,1286,1100,1287,1101,1288,1102,1289,1105,1292,1104,1291, - 1106,1294,1107,1295,1108,1296,1114,1302,1119,1308,1122,1311,1123,1312,1186,1260, - 1293,1305, 0,1394, 0, 0, 0, 0, 952,1137, 947,1132,1317,1344,1316,1343, - 1319,1346,1318,1345,1693,1695,1371,1375,1370,1374,1373,1377,1372,1376,1694,1696, - 981,1166, 977,1162, 972,1157,1326,1353,1325,1352,1328,1355,1327,1354,1697,1698, - 1009,1194,1013,1198,1054,1240,1048,1234,1331,1358,1330,1357,1333,1360,1332,1359, - 1699,1700,1396,1401,1395,1400,1398,1403,1397,1402,1399,1404,1094,1281,1087,1274, - 1406,1411,1405,1410,1408,1413,1407,1412,1409,1414,1109,1297,1117,1306,1116,1304, - 1112,1300, 0, 0, 0, 0, 0, 0,1471,1472,1701,1705,1702,1706,1703,1707, - 1430,1431,1715,1719,1716,1720,1717,1721,1477,1478,1729,1731,1730,1732, 0, 0, - 1435,1436,1733,1735,1734,1736, 0, 0,1481,1482,1737,1741,1738,1742,1739,1743, - 1439,1440,1751,1755,1752,1756,1753,1757,1490,1491,1765,1768,1766,1769,1767,1770, - 1447,1448,1771,1774,1772,1775,1773,1776,1495,1496,1777,1779,1778,1780, 0, 0, - 1451,1452,1781,1783,1782,1784, 0, 0,1504,1505,1785,1788,1786,1789,1787,1790, - 0,1459, 0,1791, 0,1792, 0,1793,1509,1510,1794,1798,1795,1799,1796,1800, - 1462,1463,1808,1812,1809,1813,1810,1814,1467, 21,1475, 22,1479, 23,1485, 24, - 1493, 27,1499, 28,1507, 29, 0, 0,1704,1708,1709,1710,1711,1712,1713,1714, - 1718,1722,1723,1724,1725,1726,1727,1728,1740,1744,1745,1746,1747,1748,1749,1750, - 1754,1758,1759,1760,1761,1762,1763,1764,1797,1801,1802,1803,1804,1805,1806,1807, - 1811,1815,1816,1817,1818,1819,1820,1821,1470,1469,1822,1474,1465, 0,1473,1825, - 1429,1428,1426, 12,1432, 0, 26, 0, 0,1315,1823,1484,1466, 0,1483,1829, - 1433, 13,1437, 14,1441,1826,1827,1828,1488,1487,1513, 19, 0, 0,1492,1515, - 1445,1444,1442, 15, 0,1831,1832,1833,1502,1501,1516, 25,1497,1498,1506,1518, - 1457,1456,1454, 17,1453,1313, 11, 3, 0, 0,1824,1512,1519, 0,1511,1830, - 1449, 16,1460, 18,1464, 4, 0, 0, 30, 31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, - 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1834,1835, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1836, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1837,1839,1838, 0, 0, 0, 0,1840, 0, 0, 0, - 0,1841, 0, 0,1842, 0, 0, 0, 0, 0, 0, 0,1843, 0,1844, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,1845, 0, 0,1846, 0, 0,1847, - 0,1848, 0, 0, 0, 0, 0, 0, 937, 0,1850, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1849, 936, 938,1851,1852, 0, 0,1853,1854, 0, 0, - 1855,1856, 0, 0, 0, 0, 0, 0,1857,1858, 0, 0,1861,1862, 0, 0, - 1863,1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1867,1868,1869,1870,1859,1860,1865,1866, 0, 0, 0, 0, - 0, 0,1871,1872,1873,1874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1877, 0,1878, 0,1879, 0,1880, 0,1881, 0,1882, 0, - 1883, 0,1884, 0,1885, 0,1886, 0,1887, 0,1888, 0, 0,1889, 0,1890, - 0,1891, 0, 0, 0, 0, 0, 0,1892,1893, 0,1894,1895, 0,1896,1897, - 0,1898,1899, 0,1900,1901, 0, 0, 0, 0, 0, 0,1876, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1902, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,1904, 0,1905, 0,1906, 0,1907, 0,1908, 0,1909, 0, - 1910, 0,1911, 0,1912, 0,1913, 0,1914, 0,1915, 0, 0,1916, 0,1917, - 0,1918, 0, 0, 0, 0, 0, 0,1919,1920, 0,1921,1922, 0,1923,1924, - 0,1925,1926, 0,1927,1928, 0, 0, 0, 0, 0, 0,1903, 0, 0,1929, - 1930,1931,1932, 0, 0, 0,1933, 0, 710, 385, 724, 715, 455, 103, 186, 825, - 825, 242, 751, 205, 241, 336, 524, 601, 663, 676, 688, 738, 411, 434, 474, 500, - 649, 746, 799, 108, 180, 416, 482, 662, 810, 275, 462, 658, 692, 344, 618, 679, - 293, 388, 440, 492, 740, 116, 146, 168, 368, 414, 481, 527, 606, 660, 665, 722, - 781, 803, 809, 538, 553, 588, 642, 758, 811, 701, 233, 299, 573, 612, 487, 540, - 714, 779, 232, 267, 412, 445, 457, 585, 594, 766, 167, 613, 149, 148, 560, 589, - 648, 768, 708, 345, 411, 704, 105, 259, 313, 496, 518, 174, 542, 120, 307, 101, - 430, 372, 584, 183, 228, 529, 650, 697, 424, 732, 428, 349, 632, 355, 517, 110, - 135, 147, 403, 580, 624, 700, 750, 170, 193, 245, 297, 374, 463, 543, 763, 801, - 812, 815, 162, 384, 420, 730, 287, 330, 337, 366, 459, 476, 509, 558, 591, 610, - 726, 652, 734, 759, 154, 163, 198, 473, 683, 697, 292, 311, 353, 423, 572, 494, - 113, 217, 259, 280, 314, 499, 506, 603, 608, 752, 778, 782, 788, 117, 557, 748, - 774, 320, 109, 126, 260, 265, 373, 411, 479, 523, 655, 737, 823, 380, 765, 161, - 395, 398, 438, 451, 502, 516, 537, 583, 791, 136, 340, 769, 122, 273, 446, 727, - 305, 322, 400, 496, 771, 155, 190, 269, 377, 391, 406, 432, 501, 519, 599, 684, - 687, 749, 776, 175, 452, 191, 480, 510, 659, 772, 805, 813, 397, 444, 619, 566, - 568, 575, 491, 471, 707, 111, 636, 156, 153, 288, 346, 578, 256, 435, 383, 729, - 680, 767, 694, 295, 128, 210, 0, 0, 227, 0, 379, 0, 0, 150, 493, 525, - 544, 551, 552, 556, 783, 576, 604, 0, 661, 0, 703, 0, 0, 735, 743, 0, - 0, 0, 793, 794, 795, 808, 741, 773, 118, 127, 130, 166, 169, 177, 207, 213, - 215, 226, 229, 268, 270, 317, 327, 329, 335, 369, 375, 381, 404, 441, 448, 458, - 477, 484, 503, 539, 545, 547, 546, 548, 549, 550, 554, 555, 561, 564, 569, 591, - 593, 595, 598, 607, 620, 625, 625, 651, 690, 695, 705, 706, 716, 717, 733, 735, - 777, 786, 790, 315, 869, 623, 0, 0, 102, 145, 134, 115, 129, 138, 165, 171, - 207, 202, 206, 212, 227, 231, 240, 243, 250, 254, 294, 296, 303, 308, 319, 325, - 321, 329, 326, 335, 341, 357, 360, 362, 370, 379, 388, 389, 393, 421, 424, 438, - 456, 454, 458, 465, 477, 535, 485, 490, 493, 507, 512, 514, 521, 522, 525, 526, - 528, 533, 532, 541, 565, 569, 574, 586, 591, 597, 607, 637, 647, 674, 691, 693, - 695, 698, 703, 699, 705, 704, 702, 706, 709, 717, 728, 736, 747, 754, 770, 777, - 783, 784, 786, 787, 790, 802, 825, 848, 847, 857, 55, 65, 66, 883, 892, 916, - 822, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,1586, 0,1605, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1602,1603,1934,1935,1574,1575,1576,1577,1579,1580,1581,1583,1584, 0, - 1585,1587,1588,1589,1591, 0,1592, 0,1593,1594, 0,1595,1596, 0,1598,1599, - 1600,1601,1604,1582,1578,1590,1597, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1936, 0,1937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1939,1940, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1941,1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1944,1943, 0,1945, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,1946,1947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,1949,1950,1951,1952,1953,1954,1955, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,1956,1957,1958,1960,1959,1961, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 104, 107, 826, 114, 118, 119, 121, - 123, 124, 127, 125, 34, 830, 130, 131, 132, 137, 827, 35, 133, 139, 829, 142, - 143, 112, 144, 145, 924, 151, 152, 37, 157, 158, 159, 160, 38, 165, 166, 169, - 171, 172, 173, 174, 176, 177, 178, 179, 181, 182, 182, 182, 833, 468, 184, 185, - 834, 187, 188, 189, 196, 192, 194, 195, 197, 199, 200, 201, 203, 204, 204, 206, - 208, 209, 211, 218, 213, 219, 214, 216, 153, 234, 221, 222, 223, 220, 225, 224, - 230, 835, 235, 236, 237, 238, 239, 244, 836, 837, 247, 248, 249, 246, 251, 39, - 40, 253, 255, 255, 838, 257, 258, 259, 261, 839, 262, 263, 301, 264, 41, 266, - 270, 272, 271, 841, 274, 842, 277, 276, 278, 281, 282, 42, 283, 284, 285, 286, - 43, 843, 44, 289, 290, 291, 293, 934, 298, 845, 845, 621, 300, 300, 45, 852, - 894, 302, 304, 46, 306, 309, 310, 312, 316, 48, 47, 317, 846, 318, 323, 324, - 325, 324, 328, 329, 333, 331, 332, 334, 335, 336, 338, 339, 342, 343, 347, 351, - 849, 350, 348, 352, 354, 359, 850, 361, 358, 356, 49, 363, 365, 367, 364, 50, - 369, 371, 851, 376, 386, 378, 53, 381, 52, 51, 140, 141, 387, 382, 614, 78, - 388, 389, 390, 394, 392, 856, 54, 399, 396, 402, 404, 858, 405, 401, 407, 55, - 408, 409, 410, 413, 859, 415, 56, 417, 860, 418, 57, 419, 422, 424, 425, 861, - 840, 862, 426, 863, 429, 431, 427, 433, 437, 441, 438, 439, 442, 443, 864, 436, - 449, 450, 58, 454, 453, 865, 447, 460, 866, 867, 461, 466, 465, 464, 59, 467, - 470, 469, 472, 828, 475, 868, 478, 870, 483, 485, 486, 871, 488, 489, 872, 873, - 495, 497, 60, 498, 61, 61, 504, 505, 507, 508, 511, 62, 513, 874, 515, 875, - 518, 844, 520, 876, 877, 878, 63, 64, 528, 880, 879, 881, 882, 530, 531, 531, - 533, 66, 534, 67, 68, 884, 536, 538, 541, 69, 885, 549, 886, 887, 556, 559, - 70, 561, 562, 563, 888, 889, 889, 567, 71, 890, 570, 571, 72, 891, 577, 73, - 581, 579, 582, 893, 587, 74, 590, 592, 596, 75, 895, 896, 76, 897, 600, 898, - 602, 605, 607, 899, 900, 609, 901, 611, 853, 77, 615, 616, 79, 617, 252, 902, - 903, 854, 855, 621, 622, 731, 80, 627, 626, 628, 164, 629, 630, 631, 633, 904, - 632, 634, 639, 640, 635, 641, 646, 651, 638, 643, 644, 645, 905, 907, 906, 81, - 653, 654, 656, 911, 657, 908, 82, 83, 909, 910, 84, 664, 665, 666, 667, 669, - 668, 671, 670, 674, 672, 673, 675, 85, 677, 678, 86, 681, 682, 912, 685, 686, - 87, 689, 36, 913, 914, 88, 89, 696, 702, 709, 711, 915, 712, 713, 718, 719, - 917, 831, 721, 720, 723, 832, 725, 728, 918, 919, 739, 742, 744, 920, 745, 753, - 756, 757, 755, 760, 761, 921, 762, 90, 764, 922, 91, 775, 279, 780, 923, 925, - 92, 93, 785, 926, 94, 927, 787, 787, 789, 928, 792, 95, 796, 797, 798, 800, - 96, 929, 802, 804, 806, 97, 98, 807, 930, 99, 931, 932, 933, 814, 100, 816, - 817, 818, 819, 820, 821, 935, 0, 0, + 0, 0, 20, 0, 0, 0, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1834,1835, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1836, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1837,1839,1838, 0, 0, 0, 0, + 1840, 0, 0, 0, 0,1841, 0, 0,1842, 0, 0, 0, 0, 0, 0, 0, + 1843, 0,1844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1845, 0, 0, + 1846, 0, 0,1847, 0,1848, 0, 0, 0, 0, 0, 0, 937, 0,1850, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1849, 936, 938,1851,1852, 0, 0, + 1853,1854, 0, 0,1855,1856, 0, 0, 0, 0, 0, 0,1857,1858, 0, 0, + 1861,1862, 0, 0,1863,1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1867,1868,1869,1870,1859,1860,1865,1866, + 0, 0, 0, 0, 0, 0,1871,1872,1873,1874, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1875, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1877, 0,1878, 0,1879, 0,1880, 0, + 1881, 0,1882, 0,1883, 0,1884, 0,1885, 0,1886, 0,1887, 0,1888, 0, + 0,1889, 0,1890, 0,1891, 0, 0, 0, 0, 0, 0,1892,1893, 0,1894, + 1895, 0,1896,1897, 0,1898,1899, 0,1900,1901, 0, 0, 0, 0, 0, 0, + 1876, 0, 0, 0, 0, 0, 0, 0, 0, 0,1902, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,1904, 0,1905, 0,1906, 0,1907, 0, + 1908, 0,1909, 0,1910, 0,1911, 0,1912, 0,1913, 0,1914, 0,1915, 0, + 0,1916, 0,1917, 0,1918, 0, 0, 0, 0, 0, 0,1919,1920, 0,1921, + 1922, 0,1923,1924, 0,1925,1926, 0,1927,1928, 0, 0, 0, 0, 0, 0, + 1903, 0, 0,1929,1930,1931,1932, 0, 0, 0,1933, 0, 710, 385, 724, 715, + 455, 103, 186, 825, 825, 242, 751, 205, 241, 336, 524, 601, 663, 676, 688, 738, + 411, 434, 474, 500, 649, 746, 799, 108, 180, 416, 482, 662, 810, 275, 462, 658, + 692, 344, 618, 679, 293, 388, 440, 492, 740, 116, 146, 168, 368, 414, 481, 527, + 606, 660, 665, 722, 781, 803, 809, 538, 553, 588, 642, 758, 811, 701, 233, 299, + 573, 612, 487, 540, 714, 779, 232, 267, 412, 445, 457, 585, 594, 766, 167, 613, + 149, 148, 560, 589, 648, 768, 708, 345, 411, 704, 105, 259, 313, 496, 518, 174, + 542, 120, 307, 101, 430, 372, 584, 183, 228, 529, 650, 697, 424, 732, 428, 349, + 632, 355, 517, 110, 135, 147, 403, 580, 624, 700, 750, 170, 193, 245, 297, 374, + 463, 543, 763, 801, 812, 815, 162, 384, 420, 730, 287, 330, 337, 366, 459, 476, + 509, 558, 591, 610, 726, 652, 734, 759, 154, 163, 198, 473, 683, 697, 292, 311, + 353, 423, 572, 494, 113, 217, 259, 280, 314, 499, 506, 603, 608, 752, 778, 782, + 788, 117, 557, 748, 774, 320, 109, 126, 260, 265, 373, 411, 479, 523, 655, 737, + 823, 380, 765, 161, 395, 398, 438, 451, 502, 516, 537, 583, 791, 136, 340, 769, + 122, 273, 446, 727, 305, 322, 400, 496, 771, 155, 190, 269, 377, 391, 406, 432, + 501, 519, 599, 684, 687, 749, 776, 175, 452, 191, 480, 510, 659, 772, 805, 813, + 397, 444, 619, 566, 568, 575, 491, 471, 707, 111, 636, 156, 153, 288, 346, 578, + 256, 435, 383, 729, 680, 767, 694, 295, 128, 210, 0, 0, 227, 0, 379, 0, + 0, 150, 493, 525, 544, 551, 552, 556, 783, 576, 604, 0, 661, 0, 703, 0, + 0, 735, 743, 0, 0, 0, 793, 794, 795, 808, 741, 773, 118, 127, 130, 166, + 169, 177, 207, 213, 215, 226, 229, 268, 270, 317, 327, 329, 335, 369, 375, 381, + 404, 441, 448, 458, 477, 484, 503, 539, 545, 547, 546, 548, 549, 550, 554, 555, + 561, 564, 569, 591, 593, 595, 598, 607, 620, 625, 625, 651, 690, 695, 705, 706, + 716, 717, 733, 735, 777, 786, 790, 315, 869, 623, 0, 0, 102, 145, 134, 115, + 129, 138, 165, 171, 207, 202, 206, 212, 227, 231, 240, 243, 250, 254, 294, 296, + 303, 308, 319, 325, 321, 329, 326, 335, 341, 357, 360, 362, 370, 379, 388, 389, + 393, 421, 424, 438, 456, 454, 458, 465, 477, 535, 485, 490, 493, 507, 512, 514, + 521, 522, 525, 526, 528, 533, 532, 541, 565, 569, 574, 586, 591, 597, 607, 637, + 647, 674, 691, 693, 695, 698, 703, 699, 705, 704, 702, 706, 709, 717, 728, 736, + 747, 754, 770, 777, 783, 784, 786, 787, 790, 802, 825, 848, 847, 857, 55, 65, + 66, 883, 892, 916, 822, 824, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,1586, 0,1605, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1602,1603,1934,1935,1574,1575,1576,1577,1579,1580, + 1581,1583,1584, 0,1585,1587,1588,1589,1591, 0,1592, 0,1593,1594, 0,1595, + 1596, 0,1598,1599,1600,1601,1604,1582,1578,1590,1597, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1936, 0,1937, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1938, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1939,1940, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1941,1942, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1944,1943, 0,1945, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0,1946,1947, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0,1948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,1949,1950,1951,1952,1953,1954, + 1955, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,1956,1957,1958,1960,1959,1961, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 104, 107, 826, + 114, 118, 119, 121, 123, 124, 127, 125, 34, 830, 130, 131, 132, 137, 827, 35, + 133, 139, 829, 142, 143, 112, 144, 145, 924, 151, 152, 37, 157, 158, 159, 160, + 38, 165, 166, 169, 171, 172, 173, 174, 176, 177, 178, 179, 181, 182, 182, 182, + 833, 468, 184, 185, 834, 187, 188, 189, 196, 192, 194, 195, 197, 199, 200, 201, + 203, 204, 204, 206, 208, 209, 211, 218, 213, 219, 214, 216, 153, 234, 221, 222, + 223, 220, 225, 224, 230, 835, 235, 236, 237, 238, 239, 244, 836, 837, 247, 248, + 249, 246, 251, 39, 40, 253, 255, 255, 838, 257, 258, 259, 261, 839, 262, 263, + 301, 264, 41, 266, 270, 272, 271, 841, 274, 842, 277, 276, 278, 281, 282, 42, + 283, 284, 285, 286, 43, 843, 44, 289, 290, 291, 293, 934, 298, 845, 845, 621, + 300, 300, 45, 852, 894, 302, 304, 46, 306, 309, 310, 312, 316, 48, 47, 317, + 846, 318, 323, 324, 325, 324, 328, 329, 333, 331, 332, 334, 335, 336, 338, 339, + 342, 343, 347, 351, 849, 350, 348, 352, 354, 359, 850, 361, 358, 356, 49, 363, + 365, 367, 364, 50, 369, 371, 851, 376, 386, 378, 53, 381, 52, 51, 140, 141, + 387, 382, 614, 78, 388, 389, 390, 394, 392, 856, 54, 399, 396, 402, 404, 858, + 405, 401, 407, 55, 408, 409, 410, 413, 859, 415, 56, 417, 860, 418, 57, 419, + 422, 424, 425, 861, 840, 862, 426, 863, 429, 431, 427, 433, 437, 441, 438, 439, + 442, 443, 864, 436, 449, 450, 58, 454, 453, 865, 447, 460, 866, 867, 461, 466, + 465, 464, 59, 467, 470, 469, 472, 828, 475, 868, 478, 870, 483, 485, 486, 871, + 488, 489, 872, 873, 495, 497, 60, 498, 61, 61, 504, 505, 507, 508, 511, 62, + 513, 874, 515, 875, 518, 844, 520, 876, 877, 878, 63, 64, 528, 880, 879, 881, + 882, 530, 531, 531, 533, 66, 534, 67, 68, 884, 536, 538, 541, 69, 885, 549, + 886, 887, 556, 559, 70, 561, 562, 563, 888, 889, 889, 567, 71, 890, 570, 571, + 72, 891, 577, 73, 581, 579, 582, 893, 587, 74, 590, 592, 596, 75, 895, 896, + 76, 897, 600, 898, 602, 605, 607, 899, 900, 609, 901, 611, 853, 77, 615, 616, + 79, 617, 252, 902, 903, 854, 855, 621, 622, 731, 80, 627, 626, 628, 164, 629, + 630, 631, 633, 904, 632, 634, 639, 640, 635, 641, 646, 651, 638, 643, 644, 645, + 905, 907, 906, 81, 653, 654, 656, 911, 657, 908, 82, 83, 909, 910, 84, 664, + 665, 666, 667, 669, 668, 671, 670, 674, 672, 673, 675, 85, 677, 678, 86, 681, + 682, 912, 685, 686, 87, 689, 36, 913, 914, 88, 89, 696, 702, 709, 711, 915, + 712, 713, 718, 719, 917, 831, 721, 720, 723, 832, 725, 728, 918, 919, 739, 742, + 744, 920, 745, 753, 756, 757, 755, 760, 761, 921, 762, 90, 764, 922, 91, 775, + 279, 780, 923, 925, 92, 93, 785, 926, 94, 927, 787, 787, 789, 928, 792, 95, + 796, 797, 798, 800, 96, 929, 802, 804, 806, 97, 98, 807, 930, 99, 931, 932, + 933, 814, 100, 816, 817, 818, 819, 820, 821, 935, 0, 0, }; static const int16_t _hb_ucd_i16[92] = @@ -4400,12 +4403,12 @@ static inline uint_fast8_t _hb_ucd_gc (unsigned u) { - return u<1114110u?_hb_ucd_u8[6800+(((_hb_ucd_u8[1312+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; + return u<1114110u?_hb_ucd_u8[6808+(((_hb_ucd_u8[1312+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; } static inline uint_fast8_t _hb_ucd_ccc (unsigned u) { - return u<125259u?_hb_ucd_u8[8792+(((_hb_ucd_u8[8236+(((_hb_ucd_u8[7776+(((_hb_ucd_u8[7424+(((_hb_ucd_u8[7178+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; + return u<125259u?_hb_ucd_u8[8800+(((_hb_ucd_u8[8244+(((_hb_ucd_u8[7784+(((_hb_ucd_u8[7432+(((_hb_ucd_u8[7186+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; } static inline unsigned _hb_ucd_b4 (const uint8_t* a, unsigned i) @@ -4415,24 +4418,24 @@ static inline int_fast16_t _hb_ucd_bmg (unsigned u) { - return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9684+(((_hb_ucd_u8[9452+(((_hb_ucd_u8[9356+(((_hb_ucd_b4(9292+_hb_ucd_u8,u>>1>>2>>3>>3))<<3)+((u>>1>>2>>3)&7u))])<<3)+((u>>1>>2)&7u))])<<2)+((u>>1)&3u))])<<1)+((u)&1u)]:0; + return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[9692+(((_hb_ucd_u8[9460+(((_hb_ucd_u8[9364+(((_hb_ucd_b4(9300+_hb_ucd_u8,u>>1>>2>>3>>3))<<3)+((u>>1>>2>>3)&7u))])<<3)+((u>>1>>2)&7u))])<<2)+((u>>1)&3u))])<<1)+((u)&1u)]:0; } static inline uint_fast8_t _hb_ucd_sc (unsigned u) { - return u<918000u?_hb_ucd_u8[11118+(((_hb_ucd_u16[4024+(((_hb_ucd_u16[2040+(((_hb_ucd_u8[10382+(((_hb_ucd_u8[9932+(u>>2>>2>>3>>4)])<<4)+((u>>2>>2>>3)&15u))])<<3)+((u>>2>>2)&7u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2; + return u<918000u?_hb_ucd_u8[11126+(((_hb_ucd_u16[4040+(((_hb_ucd_u16[2048+(((_hb_ucd_u8[10390+(((_hb_ucd_u8[9940+(u>>2>>2>>3>>4)])<<4)+((u>>2>>2>>3)&15u))])<<3)+((u>>2>>2)&7u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2; } static inline uint_fast16_t _hb_ucd_dm (unsigned u) { - return u<195102u?_hb_ucd_u16[6728+(((_hb_ucd_u8[13944+(((_hb_ucd_u8[13562+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; + return u<195102u?_hb_ucd_u16[6748+(((_hb_ucd_u8[13952+(((_hb_ucd_u8[13570+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; } #else static const uint8_t -_hb_ucd_u8[13370] = +_hb_ucd_u8[13386] = { 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 10, 7, 7, 7, 7, 7, 11, 12, 12, 12, 13, @@ -4440,7 +4443,7 @@ 7, 24, 21, 21, 21, 25, 26, 27, 21, 28, 29, 30, 31, 32, 33, 34, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 21, 36, - 7, 7, 7, 7, 35, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 7, 7, 7, 7, 37, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -4462,7 +4465,7 @@ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 37, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 38, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, @@ -4503,8 +4506,9 @@ 34,192,193,111,111,111,111,111,130,194,195,111, 34,196,111,111, 67, 67,197, 67, 67,111, 67,198, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,199,111,111,111,111,111,111,111,111, - 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,111,111,111, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111,111,111,111, + 34, 34, 34, 34, 34, 34, 34, 34,111,111,111,111,111,111,111,111, 200,111,188,188,111,111,111,111,111,111,111,111,111,111,111,111, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 4, 5, 6, 2, 7, 7, 7, 7, 7, 2, 8, 9, 10, 11, 11, 11, 11, 11, 11, 11, @@ -4967,7 +4971,7 @@ 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 65, 66, 67, 31, 31, 31, 31, 68, 31, 31, 31, 31, 31, 31, 31, 31, 69, 70, 71, 17, 17, 72, 73, 31, 74, 75, 76, 77, 78, 79, 31, 80, 81, 17, 82, 17, 17, - 17, 17, 31, 31, 23, 23, 23, 23, 23, 23, 31, 31, 31, 31, 31, 31, + 17, 17, 31, 31, 23, 23, 23, 23, 23, 23, 23, 83, 31, 31, 31, 31, 23, 83, 31, 31, 23, 23, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 84, 0, 0, 1, 0, 1, 2, 3, 0, 1, 2, 3, @@ -5597,12 +5601,12 @@ static inline uint_fast8_t _hb_ucd_gc (unsigned u) { - return u<1114112u?_hb_ucd_u8[5080+(((_hb_ucd_u8[1152+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; + return u<1114112u?_hb_ucd_u8[5096+(((_hb_ucd_u8[1168+(((_hb_ucd_u16[((_hb_ucd_u8[544+(((_hb_ucd_u8[u>>1>>3>>3>>4])<<4)+((u>>1>>3>>3)&15u))])<<3)+((u>>1>>3)&7u)])<<3)+((u>>1)&7u))])<<1)+((u)&1u))]:2; } static inline uint_fast8_t _hb_ucd_ccc (unsigned u) { - return u<125259u?_hb_ucd_u8[7038+(((_hb_ucd_u8[6482+(((_hb_ucd_u8[6022+(((_hb_ucd_u8[5670+(((_hb_ucd_u8[5424+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; + return u<125259u?_hb_ucd_u8[7054+(((_hb_ucd_u8[6498+(((_hb_ucd_u8[6038+(((_hb_ucd_u8[5686+(((_hb_ucd_u8[5440+(u>>2>>2>>2>>3)])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:0; } static inline unsigned _hb_ucd_b4 (const uint8_t* a, unsigned i) @@ -5612,17 +5616,17 @@ static inline int_fast16_t _hb_ucd_bmg (unsigned u) { - return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[7930+(((_hb_ucd_u8[7698+(((_hb_ucd_u8[7602+(((_hb_ucd_b4(7538+_hb_ucd_u8,u>>1>>2>>3>>3))<<3)+((u>>1>>2>>3)&7u))])<<3)+((u>>1>>2)&7u))])<<2)+((u>>1)&3u))])<<1)+((u)&1u)]:0; + return u<65380u?_hb_ucd_i16[((_hb_ucd_u8[7946+(((_hb_ucd_u8[7714+(((_hb_ucd_u8[7618+(((_hb_ucd_b4(7554+_hb_ucd_u8,u>>1>>2>>3>>3))<<3)+((u>>1>>2>>3)&7u))])<<3)+((u>>1>>2)&7u))])<<2)+((u>>1)&3u))])<<1)+((u)&1u)]:0; } static inline uint_fast8_t _hb_ucd_sc (unsigned u) { - return u<918016u?_hb_ucd_u8[11228+(((_hb_ucd_u8[10264+(((_hb_ucd_u8[9276+(((_hb_ucd_u8[8596+(((_hb_ucd_u8[8292+(((_hb_ucd_u8[8178+(u>>2>>2>>2>>3>>4)])<<4)+((u>>2>>2>>2>>3)&15u))])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2; + return u<918016u?_hb_ucd_u8[11244+(((_hb_ucd_u8[10280+(((_hb_ucd_u8[9292+(((_hb_ucd_u8[8612+(((_hb_ucd_u8[8308+(((_hb_ucd_u8[8194+(u>>2>>2>>2>>3>>4)])<<4)+((u>>2>>2>>2>>3)&15u))])<<3)+((u>>2>>2>>2)&7u))])<<2)+((u>>2>>2)&3u))])<<2)+((u>>2)&3u))])<<2)+((u)&3u))]:2; } static inline uint_fast16_t _hb_ucd_dm (unsigned u) { - return u<195102u?_hb_ucd_u16[1608+(((_hb_ucd_u8[12570+(((_hb_ucd_u8[12188+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; + return u<195102u?_hb_ucd_u16[1608+(((_hb_ucd_u8[12586+(((_hb_ucd_u8[12204+(u>>4>>5)])<<5)+((u>>4)&31u))])<<4)+((u)&15u))]:0; } #endif diff -Nru harfbuzz-8.0.1/src/hb-unicode-emoji-table.hh harfbuzz-8.3.0/src/hb-unicode-emoji-table.hh --- harfbuzz-8.0.1/src/hb-unicode-emoji-table.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-unicode-emoji-table.hh 2023-11-11 14:08:45.000000000 +0000 @@ -7,13 +7,13 @@ * on file with this header: * * # emoji-data.txt - * # Date: 2022-08-02, 00:26:10 GMT - * # © 2022 Unicode®, Inc. + * # Date: 2023-02-01, 02:22:54 GMT + * # © 2023 Unicode®, Inc. * # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. * # For terms of use, see https://www.unicode.org/terms_of_use.html * # * # Emoji Data for UTS #51 - * # Used with Emoji Version 15.0 and subsequent minor revisions (if any) + * # Used with Emoji Version 15.1 and subsequent minor revisions (if any) * # * # For documentation and usage, see https://www.unicode.org/reports/tr51 */ diff -Nru harfbuzz-8.0.1/src/hb-uniscribe.cc harfbuzz-8.3.0/src/hb-uniscribe.cc --- harfbuzz-8.0.1/src/hb-uniscribe.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-uniscribe.cc 2023-11-11 14:08:45.000000000 +0000 @@ -699,7 +699,7 @@ script_tags, &item_count); if (unlikely (FAILED (hr))) - FAIL ("ScriptItemizeOpenType() failed: 0x%08lx", hr); + FAIL ("ScriptItemizeOpenType() failed: 0x%08lx", (unsigned long) hr); #undef MAX_ITEMS @@ -785,7 +785,7 @@ } if (unlikely (FAILED (hr))) { - FAIL ("ScriptShapeOpenType() failed: 0x%08lx", hr); + FAIL ("ScriptShapeOpenType() failed: 0x%08lx", (unsigned long) hr); } for (unsigned int j = chars_offset; j < chars_offset + item_chars_len; j++) @@ -811,7 +811,7 @@ offsets + glyphs_offset, nullptr); if (unlikely (FAILED (hr))) - FAIL ("ScriptPlaceOpenType() failed: 0x%08lx", hr); + FAIL ("ScriptPlaceOpenType() failed: 0x%08lx", (unsigned long) hr); if (DEBUG_ENABLED (UNISCRIBE)) fprintf (stderr, "Item %d RTL %d LayoutRTL %d LogicalOrder %d ScriptTag %c%c%c%c\n", diff -Nru harfbuzz-8.0.1/src/hb-vector.hh harfbuzz-8.3.0/src/hb-vector.hh --- harfbuzz-8.0.1/src/hb-vector.hh 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-vector.hh 2023-11-11 14:08:45.000000000 +0000 @@ -37,6 +37,8 @@ bool sorted=false> struct hb_vector_t { + static constexpr bool realloc_move = true; + typedef Type item_t; static constexpr unsigned item_size = hb_static_size (Type); using array_t = typename std::conditional, hb_array_t>::type; @@ -102,7 +104,7 @@ void fini () { - /* We allow a hack to make the vector point to a foriegn array + /* We allow a hack to make the vector point to a foreign array * by the user. In that case length/arrayZ are non-zero but * allocated is zero. Don't free anything. */ if (allocated) @@ -208,25 +210,7 @@ return std::addressof (Crap (Type)); return std::addressof (arrayZ[length - 1]); } - template ::value && - std::is_copy_assignable::value)> - Type *push (T&& v) - { - Type *p = push (); - if (p == std::addressof (Crap (Type))) - // If push failed to allocate then don't copy v, since this may cause - // the created copy to leak memory since we won't have stored a - // reference to it. - return p; - *p = std::forward (v); - return p; - } - template ::value)> - Type *push (T&& v) + template Type *push (Args&&... args) { if (unlikely ((int) length >= allocated && !alloc (length + 1))) // If push failed to allocate then don't copy v, since this may cause @@ -236,7 +220,7 @@ /* Emplace. */ Type *p = std::addressof (arrayZ[length++]); - return new (p) Type (std::forward (v)); + return new (p) Type (std::forward (args)...); } bool in_error () const { return allocated < 0; } @@ -286,10 +270,9 @@ } return new_array; } - /* Specialization for hb_vector_t> to speed up. */ + /* Specialization for types that can be moved using realloc(). */ template ) || - hb_is_same (T, hb_array_t ))> + hb_enable_if (T::realloc_move)> Type * realloc_vector (unsigned new_allocated, hb_priority<1>) { @@ -478,7 +461,7 @@ Type pop () { if (!length) return Null (Type); - Type v {std::move (arrayZ[length - 1])}; + Type v (std::move (arrayZ[length - 1])); arrayZ[length - 1].~Type (); length--; return v; diff -Nru harfbuzz-8.0.1/src/hb-version.h harfbuzz-8.3.0/src/hb-version.h --- harfbuzz-8.0.1/src/hb-version.h 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-version.h 2023-11-11 14:08:45.000000000 +0000 @@ -47,20 +47,20 @@ * * The minor component of the library version available at compile-time. */ -#define HB_VERSION_MINOR 0 +#define HB_VERSION_MINOR 3 /** * HB_VERSION_MICRO: * * The micro component of the library version available at compile-time. */ -#define HB_VERSION_MICRO 1 +#define HB_VERSION_MICRO 0 /** * HB_VERSION_STRING: * * A string literal containing the library version available at compile-time. */ -#define HB_VERSION_STRING "8.0.1" +#define HB_VERSION_STRING "8.3.0" /** * HB_VERSION_ATLEAST: diff -Nru harfbuzz-8.0.1/src/hb-wasm-shape.cc harfbuzz-8.3.0/src/hb-wasm-shape.cc --- harfbuzz-8.0.1/src/hb-wasm-shape.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/hb-wasm-shape.cc 2023-11-11 14:08:45.000000000 +0000 @@ -48,7 +48,7 @@ * * - Build your font's wasm code importing the shared modules with the desired * name. This can be done eg.: __attribute__((import_module("graphite2"))) - * before each symbol in the the shared-module's headers. + * before each symbol in the shared-module's headers. * * - Try shaping your font and hope for the best... * diff -Nru harfbuzz-8.0.1/src/meson.build harfbuzz-8.3.0/src/meson.build --- harfbuzz-8.0.1/src/meson.build 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/meson.build 2023-11-11 14:08:45.000000000 +0000 @@ -1,3 +1,5 @@ +fs = import('fs') + hb_version_h = configure_file( command: [find_program('gen-hb-version.py'), meson.project_version(), '@OUTPUT@', '@INPUT@'], input: 'hb-version.h.in', @@ -560,7 +562,7 @@ version = '0.@0@.0'.format(hb_version_int) extra_hb_cpp_args = [] -if cpp.get_argument_syntax() == 'msvc' +if cpp.get_define('_MSC_FULL_VER') != '' if get_option('default_library') != 'static' extra_hb_cpp_args += '-DHB_DLL_EXPORT' endif @@ -680,7 +682,7 @@ if get_option('tests').enabled() # TODO: MSVC gives the following, # error LNK2019: unresolved external symbol "unsigned __int64 const * const _hb_NullPool" - if cpp.get_argument_syntax() != 'msvc' + if cpp.get_define('_MSC_FULL_VER') == '' noinst_programs = { 'main': 'main.cc', 'test-basics': 'test.cc', @@ -696,7 +698,7 @@ foreach name, source : noinst_programs executable(name, source, include_directories: incconfig, - cpp_args: cpp_args, + cpp_args: cpp_args + ['-UNDEBUG'], dependencies: libharfbuzz_dep, install: false, ) @@ -706,22 +708,23 @@ compiled_tests = { 'test-algs': ['test-algs.cc', 'hb-static.cc'], 'test-array': ['test-array.cc'], + 'test-bimap': ['test-bimap.cc', 'hb-static.cc'], + 'test-classdef-graph': ['graph/test-classdef-graph.cc', 'hb-static.cc', 'graph/gsubgpos-context.cc'], 'test-iter': ['test-iter.cc', 'hb-static.cc'], 'test-machinery': ['test-machinery.cc', 'hb-static.cc'], 'test-map': ['test-map.cc', 'hb-static.cc'], 'test-multimap': ['test-multimap.cc', 'hb-static.cc'], 'test-number': ['test-number.cc', 'hb-number.cc'], 'test-ot-tag': ['hb-ot-tag.cc'], - 'test-priority-queue': ['test-priority-queue.cc', 'hb-static.cc'], - 'test-repacker': ['test-repacker.cc', 'hb-static.cc', 'graph/gsubgpos-context.cc'], - 'test-classdef-graph': ['graph/test-classdef-graph.cc', 'hb-static.cc', 'graph/gsubgpos-context.cc'], 'test-set': ['test-set.cc', 'hb-static.cc'], 'test-serialize': ['test-serialize.cc', 'hb-static.cc'], - 'test-unicode-ranges': ['test-unicode-ranges.cc'], 'test-vector': ['test-vector.cc', 'hb-static.cc'], - 'test-bimap': ['test-bimap.cc', 'hb-static.cc'], + 'test-repacker': ['test-repacker.cc', 'hb-static.cc', 'graph/gsubgpos-context.cc'], 'test-instancer-solver': ['test-subset-instancer-solver.cc', 'hb-subset-instancer-solver.cc', 'hb-static.cc'], + 'test-priority-queue': ['test-priority-queue.cc', 'hb-static.cc'], 'test-tuple-varstore': ['test-tuple-varstore.cc', 'hb-subset-instancer-solver.cc', 'hb-static.cc'], + 'test-item-varstore': ['test-item-varstore.cc', 'hb-subset-instancer-solver.cc', 'hb-static.cc'], + 'test-unicode-ranges': ['test-unicode-ranges.cc'], } foreach name, source : compiled_tests if cpp.get_argument_syntax() == 'msvc' and source.contains('hb-static.cc') @@ -789,15 +792,95 @@ have_gobject = conf.get('HAVE_GOBJECT', 0) == 1 +# This code (especially PACKAGE_INIT) kept similar to what CMake's own +# configure_package_config_file() generates, see +# https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html#command:configure_package_config_file + cmake_config = configuration_data() -cmake_config.set('libdir', get_option('prefix') / get_option('libdir')) -cmake_config.set('includedir', get_option('prefix') / get_option('includedir')) -cmake_config.set('HB_LIBTOOL_VERSION_INFO', hb_libtool_version_info) -cmake_config.set('have_gobject', '@0@'.format(have_gobject)) +cmake_config_dir = cmake_package_install_dir / 'harfbuzz' + +have_fs_relative_to = meson.version().version_compare('>=1.3.0') + +if not have_fs_relative_to + relative_to = find_program('relative_to.py') +endif + +if have_fs_relative_to + cmake_package_prefix_dir = fs.relative_to(get_option('prefix'), get_option('prefix') / cmake_config_dir) +else + cmake_package_prefix_dir = run_command(relative_to, get_option('prefix'), get_option('prefix') / cmake_config_dir, check: true).stdout().strip() +endif + +cmake_package_prefix_dir = '${CMAKE_CURRENT_LIST_DIR}/@0@'.format(cmake_package_prefix_dir) + +# Make all the relevant paths relative to our prefix, so we can later append +# them onto ${PACKAGE_PREFIX_DIR} to get the correct paths. + +cmake_install_includedir = get_option('includedir') + +if fs.is_absolute(cmake_install_includedir) + if have_fs_relative_to + cmake_install_includedir = fs.relative_to(cmake_install_includedir, get_option('prefix')) + else + cmake_install_includedir = run_command(relative_to, cmake_install_includedir, get_option('prefix'), check: true).stdout().strip() + endif +endif + +cmake_install_libdir = get_option('libdir') + +if fs.is_absolute(cmake_install_libdir) + if have_fs_relative_to + cmake_install_libdir = fs.relative_to(cmake_install_libdir, get_option('prefix')) + else + cmake_install_libdir = run_command(relative_to, cmake_install_libdir, get_option('prefix'), check: true).stdout().strip() + endif +endif + +cmake_config.set('PACKAGE_INIT', ''' +get_filename_component(PACKAGE_PREFIX_DIR "@0@" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() +'''.format(cmake_package_prefix_dir)) + +cmake_config.set('PACKAGE_CMAKE_INSTALL_INCLUDEDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_includedir)) +cmake_config.set('PACKAGE_CMAKE_INSTALL_LIBDIR', '${PACKAGE_PREFIX_DIR}/@0@'.format(cmake_install_libdir)) +cmake_config.set('PACKAGE_INCLUDE_INSTALL_DIR', '${PACKAGE_PREFIX_DIR}/@0@/@1@'.format(cmake_install_includedir, meson.project_name())) +cmake_config.set('HB_HAVE_GOBJECT', have_gobject ? 'YES' : 'NO') +cmake_config.set('HB_LIBRARY_TYPE', get_option('default_library') == 'static' ? 'STATIC' : 'SHARED') + +if get_option('default_library') == 'static' + cmake_config.set('HB_LIB_PREFIX', '${CMAKE_STATIC_LIBRARY_PREFIX}') + cmake_config.set('HB_LIB_SUFFIX', '${CMAKE_STATIC_LIBRARY_SUFFIX}') +elif host_machine.system() == 'darwin' + cmake_config.set('HB_LIB_PREFIX', '${CMAKE_SHARED_LIBRARY_PREFIX}') + cmake_config.set('HB_LIB_SUFFIX', '.@0@${CMAKE_SHARED_LIBRARY_SUFFIX}'.format(hb_so_version)) +elif host_machine.system() == 'windows' + cmake_config.set('HB_LIB_PREFIX', '${CMAKE_IMPORT_LIBRARY_PREFIX}') + cmake_config.set('HB_LIB_SUFFIX', '${CMAKE_IMPORT_LIBRARY_SUFFIX}') +else + cmake_config.set('HB_LIB_PREFIX', '${CMAKE_SHARED_LIBRARY_PREFIX}') + cmake_config.set('HB_LIB_SUFFIX', '${CMAKE_SHARED_LIBRARY_SUFFIX}.@0@'.format(version)) +endif + configure_file(input: 'harfbuzz-config.cmake.in', output: 'harfbuzz-config.cmake', configuration: cmake_config, - install_dir: get_option('libdir') / 'cmake' / 'harfbuzz', + install_dir: cmake_config_dir, ) gobject_enums_c = [] diff -Nru harfbuzz-8.0.1/src/relative_to.py harfbuzz-8.3.0/src/relative_to.py --- harfbuzz-8.0.1/src/relative_to.py 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/src/relative_to.py 2023-11-11 14:08:45.000000000 +0000 @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 + +import sys +from os import path + +print(path.relpath(sys.argv[1], sys.argv[2])) diff -Nru harfbuzz-8.0.1/src/test-item-varstore.cc harfbuzz-8.3.0/src/test-item-varstore.cc --- harfbuzz-8.0.1/src/test-item-varstore.cc 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/src/test-item-varstore.cc 2023-11-11 14:08:45.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright © 2020 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + */ +#include "hb-ot-var-common.hh" +#include "hb-ot-var-hvar-table.hh" +// HVAR table data from SourceSerif4Variable-Roman_subset.otf +const char hvar_data[] = "\x0\x1\x0\x0\x0\x0\x0\x14\x0\x0\x0\xc4\x0\x0\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x10\x0\x2\x0\x0\x0\x74\x0\x0\x0\x7a\x0\x2\x0\x8\xc0\x0\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x40\x0\x40\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xc0\x0\xc0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x40\x0\x40\x0\xc0\x0\xc0\x0\x0\x0\xc0\x0\xc0\x0\x0\x0\xc0\x0\xc0\x0\x0\x0\x0\x0\x40\x0\x40\x0\x0\x0\x40\x0\x40\x0\xc0\x0\xc0\x0\x0\x0\x0\x0\x40\x0\x40\x0\x0\x0\x40\x0\x40\x0\x0\x1\x0\x0\x0\x0\x0\x4\x0\x0\x0\x8\x0\x0\x0\x1\x0\x2\x0\x3\x0\x4\x0\x5\x0\x6\x0\x7\xf9\xf\x2f\xbf\xfb\xfb\x35\xf9\x4\x4\xf3\xb4\xf2\xfb\x2e\xf3\x4\x4\xe\xad\xfa\x1\x1a\x1\x15\x22\x59\xd6\xe3\xf6\x6\xf5\x0\x1\x0\x5\x0\x4\x7\x5\x6"; + +static void +test_item_variations () +{ + const OT::HVAR* hvar_table = reinterpret_cast (hvar_data); + + hb_tag_t axis_tag = HB_TAG ('w', 'g', 'h', 't'); + hb_map_t axis_idx_tag_map; + axis_idx_tag_map.set (0, axis_tag); + + axis_tag = HB_TAG ('o', 'p', 's', 'z'); + axis_idx_tag_map.set (1, axis_tag); + + OT::item_variations_t item_vars; + const OT::VariationStore& src_var_store = hvar_table+(hvar_table->varStore); + bool result = item_vars.create_from_item_varstore (src_var_store, axis_idx_tag_map); + + assert (result); + + /* partial instancing wght=300:800 */ + hb_hashmap_t normalized_axes_location; + normalized_axes_location.set (axis_tag, Triple (-0.512817f, 0.f, 0.700012f)); + + hb_hashmap_t axes_triple_distances; + axes_triple_distances.set (axis_tag, TripleDistances (200.f, 500.f)); + + result = item_vars.instantiate_tuple_vars (normalized_axes_location, axes_triple_distances); + assert (result); + result = item_vars.as_item_varstore (false); + assert (result); + assert (item_vars.get_region_list().length == 8); +} + +int +main (int argc, char **argv) +{ + test_item_variations (); +} diff -Nru harfbuzz-8.0.1/src/test-priority-queue.cc harfbuzz-8.3.0/src/test-priority-queue.cc --- harfbuzz-8.0.1/src/test-priority-queue.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/test-priority-queue.cc 2023-11-11 14:08:45.000000000 +0000 @@ -30,7 +30,7 @@ static void test_insert () { - hb_priority_queue_t queue; + hb_priority_queue_t queue; assert (queue.is_empty ()); queue.insert (10, 0); @@ -53,7 +53,7 @@ static void test_extract () { - hb_priority_queue_t queue; + hb_priority_queue_t queue; queue.insert (0, 0); queue.insert (60, 6); queue.insert (30, 3); diff -Nru harfbuzz-8.0.1/src/test-repacker.cc harfbuzz-8.3.0/src/test-repacker.cc --- harfbuzz-8.0.1/src/test-repacker.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/test-repacker.cc 2023-11-11 14:08:45.000000000 +0000 @@ -448,6 +448,7 @@ name); graph_t graph (overflowing.object_graph ()); + graph_t expected_graph (expected.object_graph ()); if (graph::will_overflow (expected_graph)) { @@ -473,6 +474,12 @@ // Check the graphs are equivalent graph.normalize (); expected_graph.normalize (); + if (!(graph == expected_graph)) { + printf("## Expected:\n"); + expected_graph.print(); + printf("## Result:\n"); + graph.print(); + } assert (graph == expected_graph); } @@ -1239,7 +1246,8 @@ static void populate_serializer_with_extension_promotion (hb_serialize_context_t* c, - int num_extensions = 0) + int num_extensions = 0, + bool shared_subtables = false) { constexpr int num_lookups = 5; constexpr int num_subtables = num_lookups * 2; @@ -1252,15 +1260,13 @@ for (int i = num_subtables - 1; i >= 0; i--) - subtables[i] = add_object(large_string.c_str (), 15000, c); + subtables[i] = add_object(large_string.c_str (), 15000 + i, c); for (int i = num_subtables - 1; i >= (num_lookups - num_extensions) * 2; i--) { - unsigned ext_index = i - (num_lookups - num_extensions) * 2; - unsigned subtable_index = num_subtables - ext_index - 1; - extensions[i] = add_extension (subtables[subtable_index], 5, c); + extensions[i] = add_extension (subtables[i], 5, c); } for (int i = num_lookups - 1; i >= 0; i--) @@ -1268,13 +1274,19 @@ bool is_ext = (i >= (num_lookups - num_extensions)); start_lookup (is_ext ? (char) 7 : (char) 5, - 2, + shared_subtables && i > 2 ? 3 : 2, c); if (is_ext) { + if (shared_subtables && i > 2) { + add_offset (extensions[i * 2 - 1], c); + } add_offset (extensions[i * 2], c); add_offset (extensions[i * 2 + 1], c); } else { + if (shared_subtables && i > 2) { + add_offset (subtables[i * 2 - 1], c); + } add_offset (subtables[i * 2], c); add_offset (subtables[i * 2 + 1], c); } @@ -1837,6 +1849,28 @@ free (expected_buffer); } +static void test_resolve_with_shared_extension_promotion () +{ + size_t buffer_size = 200000; + void* buffer = malloc (buffer_size); + assert (buffer); + hb_serialize_context_t c (buffer, buffer_size); + populate_serializer_with_extension_promotion (&c, 0, true); + + void* expected_buffer = malloc (buffer_size); + assert (expected_buffer); + hb_serialize_context_t e (expected_buffer, buffer_size); + populate_serializer_with_extension_promotion (&e, 3, true); + + run_resolve_overflow_test ("test_resolve_with_extension_promotion", + c, + e, + 20, + true); + free (buffer); + free (expected_buffer); +} + static void test_resolve_with_basic_pair_pos_1_split () { size_t buffer_size = 200000; @@ -2122,6 +2156,7 @@ test_virtual_link (); test_shared_node_with_virtual_links (); test_resolve_with_extension_promotion (); + test_resolve_with_shared_extension_promotion (); test_resolve_with_basic_pair_pos_1_split (); test_resolve_with_extension_pair_pos_1_split (); test_resolve_with_basic_pair_pos_2_split (); diff -Nru harfbuzz-8.0.1/src/test-subset-instancer-solver.cc harfbuzz-8.3.0/src/test-subset-instancer-solver.cc --- harfbuzz-8.0.1/src/test-subset-instancer-solver.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/test-subset-instancer-solver.cc 2023-11-11 14:08:45.000000000 +0000 @@ -41,12 +41,13 @@ int main (int argc, char **argv) { + TripleDistances default_axis_distances{1.f, 1.f}; /* Case 1 */ { /* pin axis*/ Triple tent (0.f, 1.f, 1.f); Triple axis_range (0.f, 0.f, 0.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 0); } @@ -54,7 +55,7 @@ /* pin axis*/ Triple tent (0.f, 1.f, 1.f); Triple axis_range (0.5f, 0.5f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 0.5f); assert (out[0].second == Triple ()); @@ -64,7 +65,7 @@ /* tent falls outside the new axis range */ Triple tent (0.3f, 0.5f, 0.8f); Triple axis_range (0.1f, 0.2f, 0.3f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 0); } @@ -72,7 +73,7 @@ { Triple tent (0.f, 1.f, 1.f); Triple axis_range (-1.f, 0.f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 0.5f); assert (out[0].second == Triple (0.f, 1.f, 1.f)); @@ -82,7 +83,7 @@ { Triple tent (0.f, 1.f, 1.f); Triple axis_range (-1.f, 0.f, 0.75f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 0.75f); assert (out[0].second == Triple (0.f, 1.f, 1.f)); @@ -93,7 +94,7 @@ { Triple tent (0.f, 0.2f, 1.f); Triple axis_range (-1.f, 0.f, 0.8f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple (0.f, 0.25f, 1.25f)); @@ -103,7 +104,7 @@ { Triple tent (0.f, 0.4f, 1.f); Triple axis_range (-1.f, 0.f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple (0.f, 0.8f, 32767/(float) (1 << 14))); @@ -113,7 +114,7 @@ { Triple tent (0.f, 0.25f, 1.f); Triple axis_range (-1.f, 0.f, 0.4f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 2); assert (out[0].first == 1.f); assert (out[0].second == Triple (0.f, 0.625f, 1.f)); @@ -125,7 +126,7 @@ { Triple tent (0.25f, 0.3f, 1.05f); Triple axis_range (0.f, 0.2f, 0.4f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 2); assert (out[0].first == 1.f); assert (approx (out[0].second, Triple (0.25f, 0.5f, 1.f))); @@ -137,7 +138,7 @@ { Triple tent (0.25f, 0.5f, 1.f); Triple axis_range (0.f, 0.25f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple (0.f, 1.f, 1.f)); @@ -148,7 +149,7 @@ { Triple tent (0.f, 0.5f, 1.f); Triple axis_range (0.f, 0.5f, 1.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 3); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -161,7 +162,7 @@ { Triple tent (0.f, 0.5f, 1.f); Triple axis_range (0.f, 0.5f, 0.75f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 3); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -174,7 +175,7 @@ { Triple tent (0.f, 0.5f, 1.f); Triple axis_range (0.f, 0.25f, 0.8f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 4); assert (out[0].first == 0.5f); assert (out[0].second == Triple ()); @@ -190,7 +191,7 @@ { Triple tent (0.f, 0.5f, 2.f); Triple axis_range (0.2f, 0.5f, 0.8f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 3); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -204,7 +205,7 @@ { Triple tent (0.f, 0.5f, 2.f); Triple axis_range (0.2f, 0.5f, 1.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 3); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -218,7 +219,7 @@ { Triple tent (0.f, 0.5f, 1.f); Triple axis_range (0.25f, 0.25f, 0.75f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 2); assert (out[0].first == 0.5f); assert (out[0].second == Triple ()); @@ -230,7 +231,7 @@ { Triple tent (0.f, 0.5f, 1.f); Triple axis_range (0.f, 0.25f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 3); assert (out[0].first == 0.5f); assert (out[0].second == Triple ()); @@ -244,7 +245,7 @@ { Triple tent (0.05f, 0.55f, 1.f); Triple axis_range (0.f, 0.25f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 4); assert (approx (out[0].first, 0.4f)); assert (out[0].second == Triple ()); @@ -260,7 +261,7 @@ { Triple tent (-1.f, -0.55f, -0.05f); Triple axis_range (-0.5f, -0.25f, 0.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 4); assert (approx (out[0].first, 0.4f)); assert (out[0].second == Triple ()); @@ -276,7 +277,7 @@ { Triple tent (0.5f, 0.5f, 0.5f); Triple axis_range (0.5f, 0.5f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -285,7 +286,7 @@ { Triple tent (0.3f, 0.5f, 0.7f); Triple axis_range (0.1f, 0.5f, 0.9f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 5); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -302,7 +303,7 @@ { Triple tent (0.5f, 0.5f, 0.5f); Triple axis_range (0.25f, 0.25f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple (1.f, 1.f, 1.f)); @@ -311,7 +312,7 @@ { Triple tent (0.5f, 0.5f, 0.5f); Triple axis_range (0.25f, 0.35f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple (1.f, 1.f, 1.f)); @@ -320,7 +321,7 @@ { Triple tent (0.5f, 0.5f, 0.55f); Triple axis_range (0.25f, 0.35f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple (1.f, 1.f, 1.f)); @@ -329,7 +330,7 @@ { Triple tent (0.5f, 0.5f, 1.f); Triple axis_range (0.5f, 0.5f, 1.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 2); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -340,7 +341,7 @@ { Triple tent (0.25f, 0.5f, 1.f); Triple axis_range (0.5f, 0.5f, 1.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 2); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -351,7 +352,7 @@ { Triple tent (0.f, 0.2f, 1.f); Triple axis_range (0.f, 0.f, 0.5f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 1); assert (out[0].first == 1.f); assert (out[0].second == Triple (0.f, 0.4f, 32767/(float) (1 << 14))); @@ -361,7 +362,7 @@ { Triple tent (0.f, 0.5f, 1.f); Triple axis_range (-1.f, 0.25f, 1.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 5); assert (out[0].first == 0.5f); assert (out[0].second == Triple ()); @@ -378,7 +379,7 @@ { Triple tent (0.5f, 0.5f, 0.5f); Triple axis_range (0.f, 0.5f, 1.f); - result_t out = rebase_tent (tent, axis_range); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); assert (out.length == 5); assert (out[0].first == 1.f); assert (out[0].second == Triple ()); @@ -391,5 +392,34 @@ assert (out[4].first == -1.f); assert (out[4].second == Triple (-1.f, -1.f, -2/(float) (1 << 14))); } + + { + Triple tent (0.f, 1.f, 1.f); + Triple axis_range (-1.f, -0.5f, 1.f); + result_t out = rebase_tent (tent, axis_range, default_axis_distances); + assert (out.length == 1); + assert (out[0].first == 1.f); + assert (out[0].second == Triple (1.f/3, 1.f, 1.f)); + } + + { + Triple tent (0.f, 1.f, 1.f); + Triple axis_range (-1.f, -0.5f, 1.f); + TripleDistances axis_distances{2.f, 1.f}; + result_t out = rebase_tent (tent, axis_range, axis_distances); + assert (out.length == 1); + assert (out[0].first == 1.f); + assert (out[0].second == Triple (0.5f, 1.f, 1.f)); + } + + { + Triple tent (0.6f, 0.7f, 0.8f); + Triple axis_range (-1.f, 0.2f, 1.f); + TripleDistances axis_distances{1.f, 1.f}; + result_t out = rebase_tent (tent, axis_range, axis_distances); + assert (out.length == 1); + assert (out[0].first == 1.f); + assert (approx (out[0].second, Triple (0.5f, 0.625f, 0.75f))); + } } diff -Nru harfbuzz-8.0.1/src/test-tuple-varstore.cc harfbuzz-8.3.0/src/test-tuple-varstore.cc --- harfbuzz-8.0.1/src/test-tuple-varstore.cc 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/src/test-tuple-varstore.cc 2023-11-11 14:08:45.000000000 +0000 @@ -39,7 +39,21 @@ axis_idx_tag_map.set (0, axis_tag); OT::TupleVariationData::tuple_variations_t tuple_variations; - bool result = cvar_table->decompile_tuple_variations (axis_count, point_count, false, &axis_idx_tag_map, tuple_variations); + hb_vector_t shared_indices; + OT::TupleVariationData::tuple_iterator_t iterator; + + const OT::TupleVariationData* tuple_var_data = reinterpret_cast (cvar_data + 4); + + unsigned len = sizeof (cvar_data); + hb_bytes_t var_data_bytes{cvar_data+4, len - 4}; + bool result = OT::TupleVariationData::get_tuple_iterator (var_data_bytes, axis_count, cvar_table, + shared_indices, &iterator); + assert (result); + + result = tuple_var_data->decompile_tuple_variations (point_count, false, iterator, &axis_idx_tag_map, + shared_indices, hb_array (), + tuple_variations); + assert (result); assert (tuple_variations.tuple_vars.length == 2); for (unsigned i = 0; i < 2; i++) @@ -80,8 +94,10 @@ hb_hashmap_t normalized_axes_location; normalized_axes_location.set (axis_tag, Triple (-0.512817f, 0.f, 0.700012f)); - tuple_variations.change_tuple_variations_axis_limits (&normalized_axes_location); - tuple_variations.merge_tuple_variations (); + hb_hashmap_t axes_triple_distances; + axes_triple_distances.set (axis_tag, TripleDistances (1.f, 1.f)); + + tuple_variations.instantiate (normalized_axes_location, axes_triple_distances); assert (tuple_variations.tuple_vars[0].indices.length == 65); assert (tuple_variations.tuple_vars[1].indices.length == 65); @@ -112,7 +128,7 @@ hb_map_t axes_index_map; axes_index_map.set (0, 0); - bool res = tuple_variations.compile_bytes (axes_index_map, axis_idx_tag_map); + bool res = tuple_variations.compile_bytes (axes_index_map, axis_idx_tag_map, false); assert (res); assert (tuple_variations.tuple_vars[0].compiled_tuple_header.length == 6); const char tuple_var_header_1[] = "\x0\x51\xa0\x0\xc0\x0"; diff -Nru harfbuzz-8.0.1/subprojects/freetype2.wrap harfbuzz-8.3.0/subprojects/freetype2.wrap --- harfbuzz-8.0.1/subprojects/freetype2.wrap 2023-07-12 05:28:28.000000000 +0000 +++ harfbuzz-8.3.0/subprojects/freetype2.wrap 2023-11-11 14:08:45.000000000 +0000 @@ -1,6 +1,7 @@ [wrap-file] directory = freetype-2.13.0 source_url = https://download.savannah.gnu.org/releases/freetype/freetype-2.13.0.tar.xz +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/freetype2_2.13.0-1/freetype-2.13.0.tar.xz source_filename = freetype-2.13.0.tar.xz source_hash = 5ee23abd047636c24b2d43c6625dcafc66661d1aca64dec9e0d05df29592624c diff -Nru harfbuzz-8.0.1/test/Makefile.in harfbuzz-8.3.0/test/Makefile.in --- harfbuzz-8.0.1/test/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/test/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,8 +157,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in COPYING DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -214,6 +212,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -228,6 +228,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -518,7 +519,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/api/Makefile.in harfbuzz-8.3.0/test/api/Makefile.in --- harfbuzz-8.0.1/test/api/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/test/api/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -700,8 +700,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no @@ -884,6 +882,7 @@ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log @@ -936,6 +935,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -950,6 +951,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -1904,7 +1906,7 @@ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ @@ -2393,7 +2395,6 @@ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/AdobeVFPrototype.abc.long_off.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/AdobeVFPrototype.abc.long_off.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/AdobeVFPrototype.abc.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/AdobeVFPrototype.abc.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/AdobeVFPrototype.abc.static.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/AdobeVFPrototype.abc.static.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/AdobeVFPrototype.ac.nohints.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/AdobeVFPrototype.ac.nohints.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/AdobeVFPrototype.ac.nosubrs.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/AdobeVFPrototype.ac.nosubrs.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/AdobeVFPrototype.ac.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/AdobeVFPrototype.ac.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/AdobeVFPrototype.ac.retaingids.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/AdobeVFPrototype.ac.retaingids.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/Roboto-Variable.abc.long_loca.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/Roboto-Variable.abc.long_loca.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/Roboto-Variable.abc.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/Roboto-Variable.abc.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceHanSans-Regular.41,4C2E.nohints.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceHanSans-Regular.41,4C2E.nohints.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceHanSans-Regular.41,4C2E.nosubrs.nohints.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceHanSans-Regular.41,4C2E.nosubrs.nohints.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceHanSans-Regular.41,4C2E.nosubrs.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceHanSans-Regular.41,4C2E.nosubrs.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceHanSans-Regular.41,4C2E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceHanSans-Regular.41,4C2E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceHanSans-Regular.41,4C2E.retaingids.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceHanSans-Regular.41,4C2E.retaingids.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceSansPro-Regular.abc.long_off.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceSansPro-Regular.abc.long_off.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceSansPro-Regular.abc.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceSansPro-Regular.abc.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceSansPro-Regular.ac.nohints.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceSansPro-Regular.ac.nohints.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceSansPro-Regular.ac.nosubrs.nohints.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceSansPro-Regular.ac.nosubrs.nohints.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceSansPro-Regular.ac.nosubrs.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceSansPro-Regular.ac.nosubrs.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceSansPro-Regular.ac.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceSansPro-Regular.ac.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/SourceSansPro-Regular.ac.retaingids.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/SourceSansPro-Regular.ac.retaingids.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/cff1_dotsect.nohints.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/cff1_dotsect.nohints.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/cff1_expert.2D,F6E9,FB00.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/cff1_expert.2D,F6E9,FB00.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/api/fonts/cff1_seac.C0.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/api/fonts/cff1_seac.C0.otf differ diff -Nru harfbuzz-8.0.1/test/api/results/bad-154 harfbuzz-8.3.0/test/api/results/bad-154 --- harfbuzz-8.0.1/test/api/results/bad-154 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/results/bad-154 2023-11-11 14:08:45.000000000 +0000 @@ -1,351 +1,9 @@ -# random seed: R02S345aec86e0be01a834deb6fc61057f9c +# random seed: R02S13f44c97ec7b03f792b3b9650a81b62a # Start of hb tests # Start of paint tests # Start of ot tests start clip rectangle 0 500 500 1e+03 start transform 1 0 0 1 0 0 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - start clip rectangle 0 500 500 1e+03 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip - push group - start transform 1 0 -0 1 0 0 - start clip glyph 159 - start transform 1 0 0 1 0 0 - solid 128 128 128 102 - end transform - end clip - end transform - pop group mode 3 - end clip push group start transform 1 0 -0 1 0 0 start clip glyph 159 diff -Nru harfbuzz-8.0.1/test/api/results/test-154 harfbuzz-8.3.0/test/api/results/test-154 --- harfbuzz-8.0.1/test/api/results/test-154 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/results/test-154 2023-11-11 14:08:45.000000000 +0000 @@ -1,10 +1,16 @@ -# random seed: R02S9ffd1e4fb7cd9c50371f61b259bb32b5 +# random seed: R02S46170a7a8abc3ad07d2b70fd08efc176 # Start of hb tests # Start of paint tests # Start of ot tests start clip rectangle 0 500 500 1e+03 start transform 1 0 0 1 0 0 + start transform 1 0 -0 1 0 0 + paint color glyph 164; acting as failed + end transform start clip rectangle 100 100 900 900 + start transform 1 0 -0 1 0 0 + paint color glyph 93; acting as failed + end transform start clip rectangle 0 0 1e+03 1e+03 start transform 1 0 -0 1 0 0 start clip glyph 2 diff -Nru harfbuzz-8.0.1/test/api/results/testvf-154 harfbuzz-8.3.0/test/api/results/testvf-154 --- harfbuzz-8.0.1/test/api/results/testvf-154 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/results/testvf-154 2023-11-11 14:08:45.000000000 +0000 @@ -1,10 +1,16 @@ -# random seed: R02S2212d33e4705ca20b6475a83d116b9ab +# random seed: R02Sd6c6e6b574cffce42448b4c7ec9ed3b1 # Start of hb tests # Start of paint tests # Start of ot tests start clip rectangle 0 500 500 1e+03 start transform 1 0 0 1 0 0 + start transform 1 0 -0 1 0 0 + paint color glyph 164; acting as failed + end transform start clip rectangle 100 100 900 900 + start transform 1 0 -0 1 0 0 + paint color glyph 93; acting as failed + end transform start clip rectangle 0 0 1e+03 1e+03 start transform 1 0 -0 1 0 0 start clip glyph 2 diff -Nru harfbuzz-8.0.1/test/api/test-common.c harfbuzz-8.3.0/test/api/test-common.c --- harfbuzz-8.0.1/test/api/test-common.c 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/test-common.c 2023-11-11 14:08:45.000000000 +0000 @@ -210,6 +210,113 @@ g_assert (HB_LANGUAGE_INVALID != hb_language_get_default ()); } +static void +test_types_feature (void) +{ + hb_feature_t feature; + char buf[100]; + + g_assert (hb_feature_from_string ("abcd", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd", buf)); + + g_assert (hb_feature_from_string ("abcd=1", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd", buf)); + + g_assert (hb_feature_from_string ("+abcd", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd", buf)); + + g_assert (hb_feature_from_string ("abcd=0", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("-abcd", buf)); + + g_assert (hb_feature_from_string ("-abcd", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("-abcd", buf)); + + g_assert (hb_feature_from_string ("abcd=2", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd=2", buf)); + + g_assert (hb_feature_from_string ("+abcd=2", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd=2", buf)); + + g_assert (hb_feature_from_string ("-abcd=2", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd=2", buf)); + + g_assert (hb_feature_from_string ("\"abcd\" on", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd", buf)); + + g_assert (hb_feature_from_string ("\"abcd\" off", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("-abcd", buf)); + + g_assert (hb_feature_from_string ("\"abcd\" 1", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd", buf)); + + g_assert (hb_feature_from_string ("\"abcd\" 0", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("-abcd", buf)); + + g_assert (hb_feature_from_string ("\"abcd\" 2", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd=2", buf)); + + g_assert (hb_feature_from_string ("abcd[0]", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[]", buf)); + + g_assert (hb_feature_from_string ("abcd[1]", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[1]", buf)); + + g_assert (hb_feature_from_string ("abcd[1]=1", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[1]", buf)); + + g_assert (hb_feature_from_string ("abcd[1]=2", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[1]=2", buf)); + + g_assert (hb_feature_from_string ("abcd[1]=0", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("-abcd[1]", buf)); + + g_assert (hb_feature_from_string ("abcd[]", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd", buf)); + + g_assert (hb_feature_from_string ("abcd[:]", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd", buf)); + + g_assert (hb_feature_from_string ("abcd[1:]", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[1:]", buf)); + + g_assert (hb_feature_from_string ("abcd[:1]", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[]", buf)); + + g_assert (hb_feature_from_string ("abcd[1:3]", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[1:3]", buf)); + + g_assert (hb_feature_from_string ("abcd[1:2]=1", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[1]", buf)); + + g_assert (hb_feature_from_string ("abcd[1:4]=2", -1, &feature)); + hb_feature_to_string (&feature, buf, 100); + g_assert (0 == strcmp ("abcd[1:4]=2", buf)); +} + int main (int argc, char **argv) { @@ -220,6 +327,7 @@ hb_test_add (test_types_tag); hb_test_add (test_types_script); hb_test_add (test_types_language); + hb_test_add (test_types_feature); return hb_test_run(); } diff -Nru harfbuzz-8.0.1/test/api/test-paint.c harfbuzz-8.3.0/test/api/test-paint.c --- harfbuzz-8.0.1/test/api/test-paint.c 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/test-paint.c 2023-11-11 14:08:45.000000000 +0000 @@ -97,6 +97,20 @@ print (data, "end transform"); } +static hb_bool_t +paint_color_glyph (hb_paint_funcs_t *funcs, + void *paint_data, + hb_codepoint_t glyph, + hb_font_t *font, + void *user_data) +{ + paint_data_t *data = paint_data; + + print (data, "paint color glyph %u; acting as failed", glyph); + + return FALSE; +} + static void push_clip_glyph (hb_paint_funcs_t *funcs, void *paint_data, @@ -286,6 +300,7 @@ hb_paint_funcs_set_push_transform_func (funcs, push_transform, NULL, NULL); hb_paint_funcs_set_pop_transform_func (funcs, pop_transform, NULL, NULL); + hb_paint_funcs_set_color_glyph_func (funcs, paint_color_glyph, NULL, NULL); hb_paint_funcs_set_push_clip_glyph_func (funcs, push_clip_glyph, NULL, NULL); hb_paint_funcs_set_push_clip_rectangle_func (funcs, push_clip_rectangle, NULL, NULL); hb_paint_funcs_set_pop_clip_func (funcs, pop_clip, NULL, NULL); @@ -389,7 +404,7 @@ /* Run * - * GENERATE_DATA=1 G_TEST_SRCDIR=./test/api ./build/test/api/test-ot-color -p TESTCASE > test/api/results/OUTPUT + * GENERATE_DATA=1 G_TEST_SRCDIR=./test/api ./build/test/api/test-paint -p TESTCASE > test/api/results/OUTPUT * * to produce the expected results file. */ diff -Nru harfbuzz-8.0.1/test/api/test-subset-cff1.c harfbuzz-8.3.0/test/api/test-subset-cff1.c --- harfbuzz-8.0.1/test/api/test-subset-cff1.c 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/test-subset-cff1.c 2023-11-11 14:08:45.000000000 +0000 @@ -336,6 +336,34 @@ hb_face_destroy (face_41_4c2e); } +#ifdef HB_EXPERIMENTAL_API +static void +test_subset_cff1_iftb_requirements (void) +{ + hb_face_t *face_abc = hb_test_open_font_file ("fonts/SourceSansPro-Regular.abc.otf"); + hb_face_t *face_long_off = hb_test_open_font_file ("fonts/SourceSansPro-Regular.abc.long_off.otf"); + + hb_set_t *codepoints = hb_set_create(); + hb_face_t *face_abc_subset; + hb_set_add (codepoints, 97); + hb_set_add (codepoints, 98); + hb_set_add (codepoints, 99); + + hb_subset_input_t *input = hb_subset_test_create_input (codepoints); + hb_subset_input_set_flags (input, HB_SUBSET_FLAGS_IFTB_REQUIREMENTS); + face_abc_subset = hb_subset_test_create_subset (face_abc, input); + hb_set_destroy (codepoints); + + hb_subset_test_check (face_long_off, face_abc_subset, HB_TAG ('C','F','F', ' ')); + + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_abc); + hb_face_destroy (face_long_off); + +} +#endif + + int main (int argc, char **argv) { @@ -356,5 +384,9 @@ hb_test_add (test_subset_cff1_retaingids); hb_test_add (test_subset_cff1_j_retaingids); +#ifdef HB_EXPERIMENTAL_API + hb_test_add (test_subset_cff1_iftb_requirements); +#endif + return hb_test_run (); } diff -Nru harfbuzz-8.0.1/test/api/test-subset-cff2.c harfbuzz-8.3.0/test/api/test-subset-cff2.c --- harfbuzz-8.0.1/test/api/test-subset-cff2.c 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/test-subset-cff2.c 2023-11-11 14:08:45.000000000 +0000 @@ -161,6 +161,33 @@ hb_face_destroy (face_ac); } +#ifdef HB_EXPERIMENTAL_API +static void +test_subset_cff2_iftb_requirements (void) +{ + hb_face_t *face_abc = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.otf"); + hb_face_t *face_long_off = hb_test_open_font_file ("fonts/AdobeVFPrototype.abc.long_off.otf"); + + hb_set_t *codepoints = hb_set_create(); + hb_face_t *face_abc_subset; + hb_set_add (codepoints, 97); + hb_set_add (codepoints, 98); + hb_set_add (codepoints, 99); + + hb_subset_input_t *input = hb_subset_test_create_input (codepoints); + hb_subset_input_set_flags (input, HB_SUBSET_FLAGS_IFTB_REQUIREMENTS); + face_abc_subset = hb_subset_test_create_subset (face_abc, input); + hb_set_destroy (codepoints); + + hb_subset_test_check (face_long_off, face_abc_subset, HB_TAG ('C','F','F', '2')); + + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_abc); + hb_face_destroy (face_long_off); + +} +#endif + int main (int argc, char **argv) { @@ -173,5 +200,9 @@ hb_test_add (test_subset_cff2_desubr_strip_hints); hb_test_add (test_subset_cff2_retaingids); +#ifdef HB_EXPERIMENTAL_API + hb_test_add (test_subset_cff2_iftb_requirements); +#endif + return hb_test_run (); } diff -Nru harfbuzz-8.0.1/test/api/test-subset-glyf.c harfbuzz-8.3.0/test/api/test-subset-glyf.c --- harfbuzz-8.0.1/test/api/test-subset-glyf.c 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/test-subset-glyf.c 2023-11-11 14:08:45.000000000 +0000 @@ -357,6 +357,35 @@ hb_face_destroy (face_a); } +#ifdef HB_EXPERIMENTAL_API +static void +test_subset_glyf_iftb_requirements (void) +{ + hb_face_t *face_abc = hb_test_open_font_file ("fonts/Roboto-Variable.abc.ttf"); + hb_face_t *face_long_loca = hb_test_open_font_file ("fonts/Roboto-Variable.abc.long_loca.ttf"); + + hb_set_t *codepoints = hb_set_create(); + hb_face_t *face_abc_subset; + hb_set_add (codepoints, 97); + hb_set_add (codepoints, 98); + hb_set_add (codepoints, 99); + + hb_subset_input_t *input = hb_subset_test_create_input (codepoints); + hb_subset_input_set_flags (input, HB_SUBSET_FLAGS_IFTB_REQUIREMENTS); + face_abc_subset = hb_subset_test_create_subset (face_abc, input); + hb_set_destroy (codepoints); + + hb_subset_test_check (face_long_loca, face_abc_subset, HB_TAG ('l','o','c', 'a')); + hb_subset_test_check (face_long_loca, face_abc_subset, HB_TAG ('g','l','y','f')); + hb_subset_test_check (face_long_loca, face_abc_subset, HB_TAG ('g','v','a','r')); + + hb_face_destroy (face_abc_subset); + hb_face_destroy (face_abc); + hb_face_destroy (face_long_loca); + +} +#endif + // TODO(grieger): test for long loca generation. int @@ -377,5 +406,9 @@ hb_test_add (test_subset_glyf_retain_gids); hb_test_add (test_subset_glyf_retain_gids_truncates); +#ifdef HB_EXPERIMENTAL_API + hb_test_add (test_subset_glyf_iftb_requirements); +#endif + return hb_test_run(); } diff -Nru harfbuzz-8.0.1/test/api/test-unicode.c harfbuzz-8.3.0/test/api/test-unicode.c --- harfbuzz-8.0.1/test/api/test-unicode.c 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/api/test-unicode.c 2023-11-11 14:08:45.000000000 +0000 @@ -273,6 +273,9 @@ /* Unicode-15.0 character additions */ { 0x0CF3, HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK }, + /* Unicode-15.1 character additions */ + { 0x31EF, HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL }, + { 0x111111, HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED } }; diff -Nru harfbuzz-8.0.1/test/fuzzing/Makefile.in harfbuzz-8.3.0/test/fuzzing/Makefile.in --- harfbuzz-8.0.1/test/fuzzing/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/test/fuzzing/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -213,9 +213,8 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + README.md DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ @@ -244,6 +243,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -258,6 +259,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -734,7 +736,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-repacker-fuzzer-4579249263345664 and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-repacker-fuzzer-4579249263345664 differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-repacker-fuzzer-6490945267564544 and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-repacker-fuzzer-6490945267564544 differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-repacker-fuzzer-6697168080338944 and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-repacker-fuzzer-6697168080338944 differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5458896606855168 and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5458896606855168 differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5842152921628672 and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-5842152921628672 differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-6032126569742336 and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/fuzzing/fonts/clusterfuzz-testcase-minimized-hb-subset-fuzzer-6032126569742336 differ diff -Nru harfbuzz-8.0.1/test/shape/Makefile.in harfbuzz-8.3.0/test/shape/Makefile.in --- harfbuzz-8.0.1/test/shape/Makefile.in 2023-07-12 05:29:03.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,10 +157,8 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) -am__DIST_COMMON = $(srcdir)/Makefile.in +am__DIST_COMMON = $(srcdir)/Makefile.in README.md DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -214,6 +212,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -228,6 +228,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -526,7 +527,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/shape/data/Makefile.in harfbuzz-8.3.0/test/shape/data/Makefile.in --- harfbuzz-8.0.1/test/shape/data/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,8 +157,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -214,6 +212,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -228,6 +228,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -522,7 +523,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/shape/data/aots/Makefile.in harfbuzz-8.3.0/test/shape/data/aots/Makefile.in --- harfbuzz-8.0.1/test/shape/data/aots/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/aots/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -410,6 +410,7 @@ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = @@ -460,6 +461,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -474,6 +477,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -791,7 +795,7 @@ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ @@ -839,7 +843,6 @@ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TESTS_LOG_DRIVER_FLAGS) $(TESTS_LOG_DRIVER_FLAGS) -- $(TESTS_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/shape/data/in-house/Makefile.in harfbuzz-8.3.0/test/shape/data/in-house/Makefile.in --- harfbuzz-8.0.1/test/shape/data/in-house/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/in-house/Makefile.in 2023-11-11 14:09:18.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -354,6 +354,7 @@ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = @@ -404,6 +405,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -418,6 +421,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -736,7 +740,7 @@ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ @@ -784,7 +788,6 @@ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TESTS_LOG_DRIVER_FLAGS) $(TESTS_LOG_DRIVER_FLAGS) -- $(TESTS_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/shape/data/in-house/fonts/507637795ce4f2975593da54d12b46f76c7cc4cc.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/shape/data/in-house/fonts/507637795ce4f2975593da54d12b46f76c7cc4cc.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/shape/data/in-house/fonts/bef923f4ccb474f961c43b63a9c74b7d9b7a023f.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/shape/data/in-house/fonts/bef923f4ccb474f961c43b63a9c74b7d9b7a023f.ttf differ diff -Nru harfbuzz-8.0.1/test/shape/data/in-house/tests/arabic-stch.tests harfbuzz-8.3.0/test/shape/data/in-house/tests/arabic-stch.tests --- harfbuzz-8.0.1/test/shape/data/in-house/tests/arabic-stch.tests 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/in-house/tests/arabic-stch.tests 2023-11-11 14:08:45.000000000 +0000 @@ -1 +1,3 @@ ../fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf;--no-glyph-names;U+0718,U+070F,U+0718,U+0718,U+002E;[1=4+168|3=3+502|3=2+502|4=1@-1004,0+0|5=1@-876,0+0|5=1@-799,0+0|5=1@-722,0+0|5=1@-645,0+0|4=1@-566,0+0|5=1@-438,0+0|5=1@-361,0+0|5=1@-284,0+0|5=1@-207,0+0|4=1@-128,0+0|3=0+502] +../fonts/507637795ce4f2975593da54d12b46f76c7cc4cc.ttf;--direction=l;U+0891,U+0661,U+0662,U+0663,U+0664,U+066B;[piastre-ar.head=0+0|piastre-ar.repeat=0@644,0+0|piastre-ar.repeat=0@778,0+0|piastre-ar.repeat=0@897,0+0|piastre-ar.repeat=0@1016,0+0|piastre-ar.repeat=0@1135,0+0|piastre-ar.repeat=0@1254,0+0|piastre-ar.repeat=0@1373,0+0|piastre-ar.repeat=0@1492,0+0|piastre-ar.tail=0@1611,0+0|one-ar=1+449|two-ar=2+449|three-ar=3+449|four-ar=4+449|decimalseparator-ar=5+222] +../fonts/507637795ce4f2975593da54d12b46f76c7cc4cc.ttf;--direction=l;U+0661,U+0662,U+0663,U+0891,U+0664,U+066B;[one-ar=0+449|two-ar=1+449|three-ar=2+449|piastre-ar.head=3@-192,0+0|piastre-ar.repeat=3@452,0+0|piastre-ar.tail=3@586,0+0|four-ar=4+449|decimalseparator-ar=5+222] diff -Nru harfbuzz-8.0.1/test/shape/data/in-house/tests/automatic-fractions.tests harfbuzz-8.3.0/test/shape/data/in-house/tests/automatic-fractions.tests --- harfbuzz-8.0.1/test/shape/data/in-house/tests/automatic-fractions.tests 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/in-house/tests/automatic-fractions.tests 2023-11-11 14:08:45.000000000 +0000 @@ -1,3 +1,7 @@ ../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf;;U+0031,U+0032,U+0033,U+2044,U+0034,U+0035,U+0036;[one.numr=0+600|two.numr=1+600|three.numr=2+600|fraction=3+252|four.small=4+600|five.small=5+600|six.small=6+600] ../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf;--direction=l --script=arab;U+0031,U+0032,U+0033,U+2044,U+0034,U+0035,U+0036;[one.numr=0+600|two.numr=1+600|three.numr=2+600|fraction=3+252|four.small=4+600|five.small=5+600|six.small=6+600] ../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf;--direction=l;U+0661,U+0662,U+0663,U+2044,U+0664,U+0665,U+0666;[uni0661.numr=0+600|uni0662.numr=1+600|uni0663.numr=2+600|fraction=3+252|uni0664.small=4+600|uni0665.small=5+600|uni0666.small=6+600] +../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf;;U+0031,U+0032,U+0033,U+2044;[one=0+1090|two=1+1090|three=2+1090|fraction=3+252] +../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf;--direction=l;U+0661,U+0662,U+0663,U+2044;[uni0661=0+1200|uni0662=1+1200|uni0663=2+1200|fraction=3+252] +../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf;;U+2044,U+0034,U+0035,U+0036;[fraction=0+252|four=1+1090|five=2+1090|six=3+1090] +../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf;--direction=l;U+2044,U+0664,U+0665,U+0666;[fraction=0+252|uni0664=1+1200|uni0665=2+1200|uni0666=3+1200] diff -Nru harfbuzz-8.0.1/test/shape/data/in-house/tests/context-matching.tests harfbuzz-8.3.0/test/shape/data/in-house/tests/context-matching.tests --- harfbuzz-8.0.1/test/shape/data/in-house/tests/context-matching.tests 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/in-house/tests/context-matching.tests 2023-11-11 14:08:45.000000000 +0000 @@ -3,3 +3,4 @@ ../fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf;;U+09B0,U+09CD,U+09A5,U+09CD,U+09AF,U+09C0;[gid1=0+1320|gid13=0+523|gid18=0+545] ../fonts/5bbf3712e6f79775c66a4407837a90e591efbef2.ttf;;U+1F1FA,U+1F1FC;[gid3=0+2550] ../fonts/a59fd13f1525a91cbe529c882e93d9d1fbb80463.ttf;;U+0041,U+0042;[gid4=0+1366|gid4=0+1366|gid4=0+1366|gid4=0+1366|gid5=1+1366] +../fonts/bef923f4ccb474f961c43b63a9c74b7d9b7a023f.ttf;;U+0061,U+002E,U+002E,U+002E;[a=0+600|SPC=1+600|SPC=2+600|period_period_period.liga=3+600] diff -Nru harfbuzz-8.0.1/test/shape/data/in-house/tests/emoji-clusters.tests harfbuzz-8.3.0/test/shape/data/in-house/tests/emoji-clusters.tests --- harfbuzz-8.0.1/test/shape/data/in-house/tests/emoji-clusters.tests 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/in-house/tests/emoji-clusters.tests 2023-11-11 14:08:45.000000000 +0000 @@ -2,6 +2,10 @@ ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F636,200D,1F32B,FE0F;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F636,200D,1F32B;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F62E,200D,1F4A8;[1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F642,200D,2194,FE0F;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F642,200D,2194;[1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F642,200D,2195,FE0F;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F642,200D,2195;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F635,200D,1F4AB;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;2639,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;2620,FE0F;[1=0|1=0] @@ -1695,6 +1699,66 @@ ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2640;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2640,FE0F;[1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2640;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,27A1,FE0F;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,27A1;[1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FB,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FC,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FD,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FE,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6B6,1F3FF,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CD,1F3FB;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CD,1F3FC;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CD,1F3FD;[1=0|1=0] @@ -1753,60 +1817,228 @@ ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2640;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2640,FE0F;[1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2640;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,27A1,FE0F;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,27A1;[1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FB,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FC,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FD,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FE,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9CE,1F3FF,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9AF;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9AF;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9AF;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9AF;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9AF;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9AF;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9AF;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9AF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9AF,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9BC;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9BC;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9BC;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9BC;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9BC;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9BC;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9BC;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9BC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9BC,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9BD;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9BD;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FB,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FC,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FD,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FE,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,1F3FF,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9BD;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9BD;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FB,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FC,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FD,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FE,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F468,1F3FF,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9BD;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9BD;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9BD;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FB,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FC,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FD,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FE,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9BD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,1F3FF,200D,1F9BD,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD;[1=0|1=0] @@ -1836,6 +2068,66 @@ ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2640;[1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2640,FE0F;[1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2640;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,27A1,FE0F;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,27A1;[1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,27A1;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2640,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2640,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2640,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2640,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FB,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FC,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FD,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FE,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2642,FE0F,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2642,200D,27A1,FE0F;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2642,FE0F,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3C3,1F3FF,200D,2642,200D,27A1;[1=0|1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F483,1F3FB;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F483,1F3FC;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F483,1F3FD;[1=0|1=0] @@ -2860,6 +3152,10 @@ ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F467,200D,1F466;[1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F469,200D,1F467,200D,1F467;[1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F5E3,FE0F;[1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9D1,200D,1F9D2;[1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9D1,200D,1F9D2,200D,1F9D2;[1=0|1=0|1=0|1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9D2;[1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F9D1,200D,1F9D2,200D,1F9D2;[1=0|1=0|1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F415,200D,1F9BA;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F408,200D,2B1B;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F43F,FE0F;[1=0|1=0] @@ -2867,11 +3163,14 @@ ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F43B,200D,2744;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F54A,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F426,200D,2B1B;[1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F426,200D,1F525;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F577,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F578,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3F5,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;2618,FE0F;[1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F34B,200D,1F7E9;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F336,FE0F;[1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F344,200D,1F7EB;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F37D,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F5FA,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F3D4,FE0F;[1=0|1=0] @@ -2976,6 +3275,8 @@ ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;2699,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F5DC,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;2696,FE0F;[1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;26D3,FE0F,200D,1F4A5;[1=0|1=0|1=0|1=0] +../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;26D3,200D,1F4A5;[1=0|1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;26D3,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;2697,FE0F;[1=0|1=0] ../fonts/AdobeBlank2.ttf;--no-glyph-names --no-positions --font-funcs=ot;1F6CF,FE0F;[1=0|1=0] diff -Nru harfbuzz-8.0.1/test/shape/data/in-house/tests/macos.tests harfbuzz-8.3.0/test/shape/data/in-house/tests/macos.tests --- harfbuzz-8.0.1/test/shape/data/in-house/tests/macos.tests 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/in-house/tests/macos.tests 2023-11-11 14:08:45.000000000 +0000 @@ -18,7 +18,7 @@ /System/Library/Fonts/ヒラギノ丸ゴ\ ProN\ W4.ttc;--features=palt;U+FF11;[gid781=0@-78,0+842] # https://github.com/harfbuzz/harfbuzz/pull/2871 -/System/Library/Fonts/LucidaGrande.ttc;--font-funcs ot --show-flags;U+0041,U+0042,U+0043,U+0044;[A=0+1413|B=1+1178#2|C=2+1417#2|D=3+1534#2] +/System/Library/Fonts/LucidaGrande.ttc;--font-funcs ot --show-flags;U+0041,U+0042,U+0043,U+0044;[A=0+1413#2|B=1+1178#2|C=2+1417#2|D=3+1534#2] # 10.12.6 https;//gist.github.com/ebraminio/1704341fa16b06979e605aafd88198cf /System/Library/Fonts/Helvetica.dfont@c7bec2785a4c402b7809b5e35337c3d24c18e281;--font-funcs ot;U+006D,U+0300;[m=0+1706|gravecmb=0@-284,10+0] diff -Nru harfbuzz-8.0.1/test/shape/data/text-rendering-tests/Makefile.in harfbuzz-8.3.0/test/shape/data/text-rendering-tests/Makefile.in --- harfbuzz-8.0.1/test/shape/data/text-rendering-tests/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/shape/data/text-rendering-tests/Makefile.in 2023-11-11 14:09:19.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,6 +332,7 @@ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck am__EXEEXT_1 = @@ -382,6 +383,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -396,6 +399,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -734,7 +738,7 @@ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ @@ -782,7 +786,6 @@ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TESTS_LOG_DRIVER_FLAGS) $(TESTS_LOG_DRIVER_FLAGS) -- $(TESTS_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/subset/Makefile.in harfbuzz-8.3.0/test/subset/Makefile.in --- harfbuzz-8.0.1/test/subset/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/Makefile.in 2023-11-11 14:09:19.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,8 +157,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -214,6 +212,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -228,6 +228,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -520,7 +521,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/subset/data/Makefile.am harfbuzz-8.3.0/test/subset/data/Makefile.am --- harfbuzz-8.0.1/test/subset/data/Makefile.am 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/Makefile.am 2023-11-11 14:08:45.000000000 +0000 @@ -56,6 +56,7 @@ expected/cbdt \ expected/variable \ expected/glyph_names \ + expected/glyph_map \ expected/math \ expected/math_coverage_offset \ expected/post \ @@ -72,6 +73,7 @@ expected/collect_name_ids \ expected/instantiate_colrv1 \ expected/instantiate_cff2_update_metrics \ + expected/layout.empty_ligature_offset \ fonts \ profiles \ $(NULL) diff -Nru harfbuzz-8.0.1/test/subset/data/Makefile.in harfbuzz-8.3.0/test/subset/data/Makefile.in --- harfbuzz-8.0.1/test/subset/data/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/Makefile.in 2023-11-11 14:09:19.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -113,8 +113,9 @@ tests/layout.unsorted_featurelist.tests \ tests/layout.drop_feature.tests tests/no_layout_closure.tests \ tests/sbix.tests tests/variable.tests tests/glyph_names.tests \ - tests/math.tests tests/math_coverage_offset.tests \ - tests/post.tests tests/full_instance.tests \ + tests/glyph_map.tests tests/math.tests \ + tests/math_coverage_offset.tests tests/post.tests \ + tests/full_instance.tests \ tests/instance_feature_variations.tests \ tests/instantiate_glyf.tests tests/instantiate_cff2.tests \ tests/pin_all_at_default.tests \ @@ -123,7 +124,8 @@ tests/instance_comp_glyph_empty_child.tests \ tests/post_apply_mvar_delta.tests tests/apply_cvar_delta.tests \ tests/collect_name_ids.tests tests/instantiate_colrv1.tests \ - tests/instantiate_cff2_update_metrics.tests $(am__EXEEXT_1) + tests/instantiate_cff2_update_metrics.tests \ + tests/layout.empty_ligature_offset.tests $(am__EXEEXT_1) XFAIL_TESTS = $(am__EXEEXT_1) subdir = test/subset/data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -193,8 +195,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no @@ -377,6 +377,7 @@ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) am__EXEEXT_1 = TEST_SUITE_LOG = test-suite.log @@ -452,6 +453,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -466,6 +469,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -641,16 +645,16 @@ expected/colr_glyphs expected/colrv1 \ expected/colrv1_copy_varstore expected/colr_with_components \ expected/cbdt expected/variable expected/glyph_names \ - expected/math expected/math_coverage_offset expected/post \ - expected/full_instance expected/instance_feature_variations \ - expected/instantiate_glyf expected/instantiate_cff2 \ - expected/pin_all_at_default expected/instance_no_double_free \ - expected/mvar_full_instance \ + expected/glyph_map expected/math expected/math_coverage_offset \ + expected/post expected/full_instance \ + expected/instance_feature_variations expected/instantiate_glyf \ + expected/instantiate_cff2 expected/pin_all_at_default \ + expected/instance_no_double_free expected/mvar_full_instance \ expected/instance_comp_glyph_empty_child \ expected/post_apply_mvar_delta expected/apply_cvar_delta \ expected/collect_name_ids expected/instantiate_colrv1 \ - expected/instantiate_cff2_update_metrics fonts profiles \ - $(NULL) + expected/instantiate_cff2_update_metrics \ + expected/layout.empty_ligature_offset fonts profiles $(NULL) CLEANFILES = SUBDIRS = repack_tests TEST_EXTENSIONS = .tests @@ -907,7 +911,7 @@ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ @@ -955,7 +959,6 @@ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TESTS_LOG_DRIVER_FLAGS) $(TESTS_LOG_DRIVER_FLAGS) -- $(TESTS_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/subset/data/Makefile.sources harfbuzz-8.3.0/test/subset/data/Makefile.sources --- harfbuzz-8.0.1/test/subset/data/Makefile.sources 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/Makefile.sources 2023-11-11 14:08:45.000000000 +0000 @@ -47,6 +47,7 @@ tests/sbix.tests \ tests/variable.tests \ tests/glyph_names.tests \ + tests/glyph_map.tests \ tests/math.tests \ tests/math_coverage_offset.tests \ tests/post.tests \ @@ -63,6 +64,7 @@ tests/collect_name_ids.tests \ tests/instantiate_colrv1.tests \ tests/instantiate_cff2_update_metrics.tests \ + tests/layout.empty_ligature_offset.tests \ $(NULL) # TODO: re-enable once colrv1 subsetting is stabilized. Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,62,63,64.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,62,63,64.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,62.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,62.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,64.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61,64.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.61.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.62.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.62.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.64.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline-retain-gids.64.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,62,63,64.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,62,63,64.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,62.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,62.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,64.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61,64.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.61.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.62.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.62.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.64.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/32bit_var_store/32bit_var_store.notdef-outline.64.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/apply_cvar_delta/Comfortaa-Regular-new.default.retain-all-codepoint.wght=300.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/apply_cvar_delta/Comfortaa-Regular-new.default.retain-all-codepoint.wght=300.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/apply_cvar_delta/Comfortaa-Regular-new.default.retain-all-codepoint.wght=700.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/apply_cvar_delta/Comfortaa-Regular-new.default.retain-all-codepoint.wght=700.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/apply_cvar_delta/Muli-ABC.default.retain-all-codepoint.wght=300.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/apply_cvar_delta/Muli-ABC.default.retain-all-codepoint.wght=300.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/apply_cvar_delta/Muli-ABC.default.retain-all-codepoint.wght=700.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/apply_cvar_delta/Muli-ABC.default.retain-all-codepoint.wght=700.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.default.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.default.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.default.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.default.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.glyph-names.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.no-prune-unicode-ranges.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.notdef-outline.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.default.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.default.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.default.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.default.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.default.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.default.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.default.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.default.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints-retain-gids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.drop-hints.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.gids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.gids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.gids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.gids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.gids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.gids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.gids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.gids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.gids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.gids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.gids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.gids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.glyph-names.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-ids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-languages.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.name-legacy.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.no-prune-unicode-ranges.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.notdef-outline.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.61,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.61,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.61.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.61.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.62.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.62.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/basics/Roboto-Regular.abc.retain-gids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize-retain-gids.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize-retain-gids.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-desubroutinize.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize-retain-gids.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize-retain-gids.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-retain-gids.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-retain-gids.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-retain-gids.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-retain-gids.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-retain-gids.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints-retain-gids.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-drop-hints.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-retain-gids.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-retain-gids.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-retain-gids.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-retain-gids.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-retain-gids.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline-retain-gids.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline.1FC,21,41,20,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline.1FC,21,41,20,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline.61,62,63.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline.61,62,63.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline.D7,D8,D9,DA,DE.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.notdef-outline.D7,D8,D9,DA,DE.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.default.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize-retain-gids.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.desubroutinize.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize-retain-gids.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-desubroutinize.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints-retain-gids.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.drop-hints.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.3042,3044,3046,3048,304A,304B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.3042,3044,3046,3048,304A,304B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.3042,3044,3046,73E0,5EA6,8F38.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.61,63,65,6B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.61,63,65,6B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.660E,6975,73E0,5EA6,8F38,6E05.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.660E.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff-japanese/SourceHanSans-Regular_subset.retain-gids.660E.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cff.notoserifmyanmar/NotoSerifMyanmar-Regular.notdef-outline.1092.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cff.notoserifmyanmar/NotoSerifMyanmar-Regular.notdef-outline.1092.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-drop-hints.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-name-ids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font1.notdef-outline.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-drop-hints.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-name-ids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E02,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E00,4E05,4E07.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02,4E03,4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E02.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E03.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E05,4E07,4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08,4E09.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.4E08.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/cmap14/cmap14_font2.notdef-outline.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/collect_name_ids/SourceSerif4Variable-Roman_subset.keep-all-layout-features.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/collect_name_ids/SourceSerif4Variable-Roman_subset.keep-all-layout-features.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.default.41,42.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.default.41,42.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.default.41.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.default.41.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.default.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.default.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints-retain-gids.41,42.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints-retain-gids.41,42.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints-retain-gids.41.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints-retain-gids.41.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints-retain-gids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints-retain-gids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints.41,42.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints.41,42.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints.41.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints.41.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.drop-hints.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.retain-gids.41,42.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.retain-gids.41,42.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.retain-gids.41.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.retain-gids.41.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/colrv1_copy_varstore/Foldit.retain-gids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/colrv1_copy_varstore/Foldit.retain-gids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.default.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.default.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.2.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts-features.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.filter-scripts.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/Roboto-Regular.no-scripts.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.2.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.filter-scripts-features.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.1FC,21,41,20,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.1FC,21,41,20,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.61,62,63,64,65,66,67,68,69,6A,6B.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.61,62,63.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.61,62,63.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.D7,D8,D9,DA,DE.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full-font/SourceSerifVariable-Roman.no-scripts.D7,D8,D9,DA,DE.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full_instance/Roboto-Variable.default.retain-all-codepoint.wght=150,wdth=80.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full_instance/Roboto-Variable.default.retain-all-codepoint.wght=150,wdth=80.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full_instance/Roboto-Variable.default.retain-all-codepoint.wght=300,wdth=90.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full_instance/Roboto-Variable.default.retain-all-codepoint.wght=300,wdth=90.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full_instance/Roboto-Variable.no-prune-unicode-ranges.retain-all-codepoint.wght=150,wdth=80.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full_instance/Roboto-Variable.no-prune-unicode-ranges.retain-all-codepoint.wght=150,wdth=80.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/full_instance/Roboto-Variable.no-prune-unicode-ranges.retain-all-codepoint.wght=300,wdth=90.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/full_instance/Roboto-Variable.no-prune-unicode-ranges.retain-all-codepoint.wght=300,wdth=90.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/glyph_map/Roboto-Regular.glyph_map_roboto.41,43,61,66,69.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/glyph_map/Roboto-Regular.glyph_map_roboto.41,43,61,66,69.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=100.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=100.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=400.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=400.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instance_no_double_free/Handjet.default.retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instance_no_double_free/Handjet.default.retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instance_no_double_free/Handjet.notdef-outline.retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instance_no_double_free/Handjet.notdef-outline.retain-all-codepoint.wght=100,ELGR=1,ELSH=2.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_cff2/AdobeVFPrototype.default.retain-all-codepoint.wght=650,CNTR=50.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_cff2/AdobeVFPrototype.default.retain-all-codepoint.wght=650,CNTR=50.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_cff2_update_metrics/Cantarell-VF-ABC.default.retain-all-codepoint.wght=800.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_cff2_update_metrics/Cantarell-VF-ABC.default.retain-all-codepoint.wght=800.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_cff2_update_metrics/Cantarell-VF-ABC.retain-gids.retain-all-codepoint.wght=800.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_cff2_update_metrics/Cantarell-VF-ABC.retain-gids.retain-all-codepoint.wght=800.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_colrv1/Foldit.default.retain-all-codepoint.wght=900.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_colrv1/Foldit.default.retain-all-codepoint.wght=900.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_glyf/Roboto-Variable.ABC.default.retain-all-codepoint.wght=200,wdth=90.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_glyf/Roboto-Variable.ABC.default.retain-all-codepoint.wght=200,wdth=90.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_glyf/Roboto-Variable.ABC.default.retain-all-codepoint.wght=650,wdth=85.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_glyf/Roboto-Variable.ABC.default.retain-all-codepoint.wght=650,wdth=85.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_glyf/Roboto-Variable.composite.default.retain-all-codepoint.wght=200,wdth=90.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_glyf/Roboto-Variable.composite.default.retain-all-codepoint.wght=200,wdth=90.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/instantiate_glyf/Roboto-Variable.composite.default.retain-all-codepoint.wght=650,wdth=85.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/instantiate_glyf/Roboto-Variable.composite.default.retain-all-codepoint.wght=650,wdth=85.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,42,43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,42,43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.CA,CB.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.CA,CB.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,42,43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,42,43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.context/gpos_context3_simple_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.default.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.default.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.glyph-names.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.glyph-names.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.notdef-outline.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.duplicate_features/AlegreyaSans-BlackItalic.notdef-outline.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.empty_ligature_offset/AnekBangla-latin-subset.default.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.empty_ligature_offset/AnekBangla-latin-subset.default.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.default.1E00,303.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.default.1E00,303.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.default.303.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.default.303.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.default.309,20,30F.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.default.309,20,30F.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.default.323.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.default.323.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.1E00,303.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.1E00,303.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.303.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.303.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.309,20,30F.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.309,20,30F.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.323.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.323.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.1E00,303.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.1E00,303.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.303.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.303.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.309,20,30F.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.309,20,30F.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.323.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.323.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.41,42,43.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.41,42,43.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43,57.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43,57.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,56,57.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,56,57.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.42,57.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.42,57.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43,57.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43,57.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,56,57.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,56,57.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.42,57.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.42,57.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.41,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.41,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.42,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.42,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.43,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.43,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.41,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.41,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.42,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.42,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.43,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.43,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos/gpos1_2_font.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.21,23,25.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.21,23,25.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.21,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.21,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.2E,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.2E,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.21,23,25.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.21,23,25.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.21,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.21,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.2E,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.2E,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_1_font7.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.21,23,25.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.21,23,25.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.21,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.21,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.2E,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.2E,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.21,23,25.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.21,23,25.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.21,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.21,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.2E,23.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.2E,23.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos2/gpos2_2_font5.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.28,29.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.28,29.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.28,2B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.28,2B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.29,2B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.29,2B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.28,29.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.28,29.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.28,2B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.28,2B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.29,2B.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.29,2B.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos3/gpos3_font3.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43,44,45,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43,44,45,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43,44,45,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43,44,45,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos5/gpos5_font1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43,44,45,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43,44,45,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43,44,45,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43,44,45,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43,44.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43,44.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43,45.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43,45.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos6/gpos6_font1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test-retain-gids.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test-retain-gids.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test-retain-gids.42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test-retain-gids.42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test.42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gpos9/gpos9_font2.layout-test.42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9,53F1.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9,53F1.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53A9.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53F1.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.53F1.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9,53F1.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9,53F1.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53A9.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53F1.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.53F1.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41,42.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41,42.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test-retain-gids.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test-retain-gids.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test-retain-gids.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test.30,31,32,33.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test.30,31,32,33.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,47,48,49.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,47,48,49.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,47.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,47.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,4D.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,4D.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,51.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46,51.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43,44,45,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.61.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.61.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test-retain-gids.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,47,48,49.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,47,48,49.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,47.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,47.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,4D.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,4D.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,51.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46,51.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43,44,45,46.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41,42,43.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.41.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.61.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.61.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.retain-all-codepoint.otf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.gsub8/gsub8_manually_created.layout-test.retain-all-codepoint.otf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.default.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Bold.retain-gids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.627,644,623,62D,644,627,645,2E.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.627,644,623,62D,644,627,645,2E.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.627,644,62D,628.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.627,644,62D,628.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.627,644.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.627,644.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.633,645,627,621,20,644,627.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.633,645,627,621,20,644,627.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.633,6D2.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.633,6D2.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.63A,64A,631.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.default.63A,64A,631.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.627,644,623,62D,644,627,645,2E.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.627,644,623,62D,644,627,645,2E.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.627,644,62D,628.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.627,644,62D,628.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.627,644.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.627,644.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.633,645,627,621,20,644,627.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.633,645,627,621,20,644,627.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.633,6D2.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.633,6D2.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.63A,64A,631.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.notonastaliqurdu/NotoNastaliqUrdu-Regular.retain-gids.63A,64A,631.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.default.392,3a7,3b2,3c7.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.default.392,3a7,3b2,3c7.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.default.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.default.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.layout-test.392,3a7,3b2,3c7.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.layout-test.392,3a7,3b2,3c7.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.layout-test.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.layout-test.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.retain-gids.392,3a7,3b2,3c7.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.retain-gids.392,3a7,3b2,3c7.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.retain-gids.retain-all-codepoint.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/layout.unsorted_featurelist/NotoIKEAHebrewLatin-Regular.retain-gids.retain-all-codepoint.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/mvar_full_instance/NotoSans-VF.abc.no-layout.retain-all-codepoint.wght=150,wdth=80,CTGR=0.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/mvar_full_instance/NotoSans-VF.abc.no-layout.retain-all-codepoint.wght=150,wdth=80,CTGR=0.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/mvar_full_instance/NotoSans-VF.abc.no-layout.retain-all-codepoint.wght=300,wdth=90,CTGR=0.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/mvar_full_instance/NotoSans-VF.abc.no-layout.retain-all-codepoint.wght=300,wdth=90,CTGR=0.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/no_layout_closure/Roboto-Regular.no-layout-closure-gids.no-unicodes.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/no_layout_closure/Roboto-Regular.no-layout-closure-gids.no-unicodes.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/no_layout_closure/Roboto-Regular.no-layout-closure-gids2.no-unicodes.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/no_layout_closure/Roboto-Regular.no-layout-closure-gids2.no-unicodes.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=400,wdth=100.0.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=400,wdth=100.0.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=drop,wdth=100.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/pin_all_at_default/Roboto-Variable.ABC.default.retain-all-codepoint.wght=drop,wdth=100.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/post_apply_mvar_delta/Recursive-ABC.no-layout.retain-all-codepoint.wght=400,CASL=0,CRSV=0,MONO=0,slnt=0.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/post_apply_mvar_delta/Recursive-ABC.no-layout.retain-all-codepoint.wght=400,CASL=0,CRSV=0,MONO=0,slnt=0.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/expected/preprocess/Roboto-Regular.gids.61,62,63,30D9.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/expected/preprocess/Roboto-Regular.gids.61,62,63,30D9.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/fonts/AnekBangla-latin-subset.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/fonts/AnekBangla-latin-subset.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/fonts/AnekBangla-question-subset.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/fonts/AnekBangla-question-subset.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/fonts/AnekBangla-subset.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/fonts/AnekBangla-subset.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/fonts/NotoSansOriya-subset.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/fonts/NotoSansOriya-subset.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/fonts/NotoSansOriya-valueformat-subset.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/fonts/NotoSansOriya-valueformat-subset.ttf differ Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/test/subset/data/fonts/RobotoFlex-Variable.ABC.ttf and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/test/subset/data/fonts/RobotoFlex-Variable.ABC.ttf differ diff -Nru harfbuzz-8.0.1/test/subset/data/profiles/glyph_map_roboto_retain_gids.txt harfbuzz-8.3.0/test/subset/data/profiles/glyph_map_roboto_retain_gids.txt --- harfbuzz-8.0.1/test/subset/data/profiles/glyph_map_roboto_retain_gids.txt 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/profiles/glyph_map_roboto_retain_gids.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ ---gid-map=37:37,39:39,69:69,74:74,77:77,444:444,446:446,561:561,563:563 ---gids=444,446,561,563 ---layout-features+=c2sc ---retain-gids diff -Nru harfbuzz-8.0.1/test/subset/data/profiles/iftb_requirements.txt harfbuzz-8.3.0/test/subset/data/profiles/iftb_requirements.txt --- harfbuzz-8.0.1/test/subset/data/profiles/iftb_requirements.txt 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/profiles/iftb_requirements.txt 2023-11-11 14:08:46.000000000 +0000 @@ -0,0 +1 @@ +--iftb-requirements diff -Nru harfbuzz-8.0.1/test/subset/data/repack_tests/Makefile.in harfbuzz-8.3.0/test/subset/data/repack_tests/Makefile.in --- harfbuzz-8.0.1/test/subset/data/repack_tests/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/repack_tests/Makefile.in 2023-11-11 14:09:19.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -161,8 +161,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no @@ -345,6 +343,7 @@ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` +AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) am__EXEEXT_1 = TEST_SUITE_LOG = test-suite.log @@ -420,6 +419,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -434,6 +435,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -840,7 +842,7 @@ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ - echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ @@ -888,7 +890,6 @@ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TESTS_LOG_DRIVER_FLAGS) $(TESTS_LOG_DRIVER_FLAGS) -- $(TESTS_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test/subset/data/tests/glyph_map.tests harfbuzz-8.3.0/test/subset/data/tests/glyph_map.tests --- harfbuzz-8.0.1/test/subset/data/tests/glyph_map.tests 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/tests/glyph_map.tests 2023-11-11 14:08:46.000000000 +0000 @@ -0,0 +1,8 @@ +FONTS: +Roboto-Regular.ttf + +PROFILES: +glyph_map_roboto.txt + +SUBSETS: +ACafi diff -Nru harfbuzz-8.0.1/test/subset/data/tests/layout.empty_ligature_offset.tests harfbuzz-8.3.0/test/subset/data/tests/layout.empty_ligature_offset.tests --- harfbuzz-8.0.1/test/subset/data/tests/layout.empty_ligature_offset.tests 1970-01-01 00:00:00.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/data/tests/layout.empty_ligature_offset.tests 2023-11-11 14:08:46.000000000 +0000 @@ -0,0 +1,8 @@ +FONTS: +AnekBangla-latin-subset.ttf + +PROFILES: +default.txt + +SUBSETS: +* diff -Nru harfbuzz-8.0.1/test/subset/meson.build harfbuzz-8.3.0/test/subset/meson.build --- harfbuzz-8.0.1/test/subset/meson.build 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/test/subset/meson.build 2023-11-11 14:08:46.000000000 +0000 @@ -50,6 +50,7 @@ 'cbdt', 'variable', 'glyph_names', + 'glyph_map', 'post', '32bit_var_store', 'pin_all_at_default', @@ -65,8 +66,23 @@ 'collect_name_ids', 'instantiate_colrv1', 'instantiate_cff2_update_metrics', + 'layout.empty_ligature_offset', ] +if get_option('experimental_api') + tests += [ + 'glyf_partial_instancing', + 'mvar_partial_instance', + 'update_def_wght', + 'empty_region_vardata', + 'feature_variations_partial_instance', + 'gdef_partial_instance', + 'value_format_partial_instance', + 'feature_variation_instance_collect_lookups', + 'iftb_requirements' + ] +endif + repack_tests = [ 'basic', 'prioritization', diff -Nru harfbuzz-8.0.1/test/threads/Makefile.in harfbuzz-8.3.0/test/threads/Makefile.in --- harfbuzz-8.0.1/test/threads/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test/threads/Makefile.in 2023-11-11 14:09:19.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -157,8 +157,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -214,6 +212,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -228,6 +228,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -519,7 +520,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/test-driver harfbuzz-8.3.0/test-driver --- harfbuzz-8.0.1/test-driver 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/test-driver 2023-11-11 14:09:19.000000000 +0000 @@ -3,7 +3,7 @@ scriptversion=2018-03-07.03; # UTC -# Copyright (C) 2011-2018 Free Software Foundation, Inc. +# Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -42,11 +42,13 @@ { cat <$log_file 2>&1 +# Test script is run here. We create the file first, then append to it, +# to ameliorate tests themselves also writing to the log file. Our tests +# don't, but others can (automake bug#35762). +: >"$log_file" +"$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then @@ -126,7 +131,7 @@ # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). -echo "$res $test_name (exit status: $estatus)" >>$log_file +echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" diff -Nru harfbuzz-8.0.1/util/Makefile.in harfbuzz-8.3.0/util/Makefile.in --- harfbuzz-8.0.1/util/Makefile.in 2023-07-12 05:29:04.000000000 +0000 +++ harfbuzz-8.3.0/util/Makefile.in 2023-11-11 14:09:19.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. +# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2018 Free Software Foundation, Inc. +# Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -271,8 +271,6 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` -ETAGS = etags -CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.sources \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -303,6 +301,8 @@ CORETEXT_LIBS = @CORETEXT_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ @@ -317,6 +317,7 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FREETYPE_CFLAGS = @FREETYPE_CFLAGS@ @@ -784,7 +785,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am diff -Nru harfbuzz-8.0.1/util/hb-subset.cc harfbuzz-8.3.0/util/hb-subset.cc --- harfbuzz-8.0.1/util/hb-subset.cc 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/util/hb-subset.cc 2023-11-11 14:08:46.000000000 +0000 @@ -707,34 +707,88 @@ return false; } - if (strcmp (s, "drop") == 0) +#ifdef HB_EXPERIMENTAL_API + char *pp = s; + pp = strpbrk (pp, ":"); + if (pp) // partial instancing { - if (!hb_subset_input_pin_axis_to_default (subset_main->input, subset_main->face, axis_tag)) + errno = 0; + char *pend; + float min_val = strtof (s, &pend); + if (errno || s == pend || pend != pp) { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Cannot pin axis: '%c%c%c%c', not present in fvar", HB_UNTAG (axis_tag)); + "Failed parsing axis value at: '%s'", s); return false; } - } - else - { - errno = 0; - char *p; - float axis_value = strtof (s, &p); - if (errno || s == p) + pp++; + float max_val = strtof (pp, &pend); + /* we need to specify 2 values or 3 values for partial instancing: + * at least new min and max values, new default is optional */ + if (errno || pp == pend || (*pend != ':' && *pend != '\0')) { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Failed parsing axis value at: '%s'", s); return false; } - - if (!hb_subset_input_pin_axis_location (subset_main->input, subset_main->face, axis_tag, axis_value)) + /* 3 values are specified */ + float *def_val_p = nullptr; + float def_val; + if (*pend == ':') { - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Cannot pin axis: '%c%c%c%c', not present in fvar", HB_UNTAG (axis_tag)); - return false; + def_val = max_val; + def_val_p = &def_val; + pp = pend + 1; + max_val = strtof (pp, &pend); + if (errno || pp == pend || *pend != '\0') + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing axis value at: '%s'", s); + return false; + } } + if (!hb_subset_input_set_axis_range (subset_main->input, subset_main->face, axis_tag, min_val, max_val, def_val_p)) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Error: axis: '%c%c%c%c', not present in fvar or invalid range with min:%.6f max:%.6f", + HB_UNTAG (axis_tag), (double) min_val, (double) max_val); + return false; + } } + else + { +#endif + if (strcmp (s, "drop") == 0) + { + if (!hb_subset_input_pin_axis_to_default (subset_main->input, subset_main->face, axis_tag)) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Cannot pin axis: '%c%c%c%c', not present in fvar", HB_UNTAG (axis_tag)); + return false; + } + } + else + { + errno = 0; + char *p; + float axis_value = strtof (s, &p); + if (errno || s == p) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing axis value at: '%s'", s); + return false; + } + + if (!hb_subset_input_pin_axis_location (subset_main->input, subset_main->face, axis_tag, axis_value)) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Cannot pin axis: '%c%c%c%c', not present in fvar", HB_UNTAG (axis_tag)); + return false; + } + } +#ifdef HB_EXPERIMENTAL_API + } +#endif s = strtok(nullptr, "="); } @@ -971,14 +1025,18 @@ {"drop-tables+", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags or *"}, {"drop-tables-", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags or *"}, #ifndef HB_NO_VAR - {"instance", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_instance, - "(Partially|Fully) Instantiate a variable font. A location consists of the tag of a variation axis, followed by '=', followed by a\n" - "number or the literal string 'drop'\n" - " " - "For example: --instance=\"wdth=100 wght=200\" or --instance=\"wdth=drop\"\n" - " " - "Note: currently only fully instancing is supported\n", - "list of comma separated axis-locations"}, + {"variations", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_instance, + "(Partially|Fully) Instantiate a variable font. A location consists of the tag " + "of a variation axis, followed by '=', followed by a number or the literal " + "string 'drop'. For example: --variations=\"wdth=100 wght=200\" or --instance=\"wdth=drop\"" +#ifndef HB_EXPERIMENTAL_API + "\n\nNote: currently only full instancing is supported unless this util has been compiled with experimental api enabled." +#endif + , + "list of comma separated axis-locations." + }, + {"instance", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, (gpointer) &parse_instance, + "Alias for --variations.", "list of comma separated axis-locations"}, #endif {nullptr} }; @@ -1006,6 +1064,9 @@ "Alternative name for --preprocess.", nullptr}, {"preprocess", 0, 0, G_OPTION_ARG_NONE, &this->preprocess, "If set preprocesses the face with the add accelerator option before actually subsetting.", nullptr}, +#ifdef HB_EXPERIMENTAL_API + {"iftb-requirements", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Enforce requirements needed to use the subset with incremental font transfer IFTB patches.", nullptr}, +#endif {nullptr} }; add_group (flag_entries, diff -Nru harfbuzz-8.0.1/util/view-cairo.hh harfbuzz-8.3.0/util/view-cairo.hh --- harfbuzz-8.0.1/util/view-cairo.hh 2023-07-12 05:28:29.000000000 +0000 +++ harfbuzz-8.3.0/util/view-cairo.hh 2023-11-11 14:08:46.000000000 +0000 @@ -202,6 +202,8 @@ cairo_restore (cr); } + // https://github.com/harfbuzz/harfbuzz/issues/4378 +#if CAIRO_VERSION >= 11705 if (l.num_clusters) cairo_show_text_glyphs (cr, l.utf8, l.utf8_len, @@ -209,6 +211,7 @@ l.clusters, l.num_clusters, l.cluster_flags); else +#endif cairo_show_glyphs (cr, l.glyphs, l.num_glyphs); } Binary files /tmp/tmpb62oru_y/isb2FkGDnX/harfbuzz-8.0.1/xkcd.png and /tmp/tmpb62oru_y/kvWLRpMm1o/harfbuzz-8.3.0/xkcd.png differ