summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-08-14 03:01:08 +0000
committerNorbert Preining <norbert@preining.info>2020-08-14 03:01:08 +0000
commit02ead80143e7082dee86522ac65a59443428bd7b (patch)
tree6fe247a83c87fefdd010c5820025b760ebdd3d94
parent1163ada9c470777f1cd48cfc16ffa9c26758827e (diff)
CTAN sync 202008140301
-rw-r--r--FILES.byname776
-rw-r--r--FILES.byname.gzbin2233964 -> 2234069 bytes
-rw-r--r--FILES.last07days2417
-rw-r--r--dviware/dvisvgm/ChangeLog156
-rw-r--r--dviware/dvisvgm/NEWS19
-rwxr-xr-xdviware/dvisvgm/configure22
-rw-r--r--dviware/dvisvgm/configure.ac4
-rw-r--r--dviware/dvisvgm/doc/dvisvgm.16
-rw-r--r--dviware/dvisvgm/doc/dvisvgm.txt.in7
-rw-r--r--dviware/dvisvgm/libs/xxHash/xxh3.h2085
-rw-r--r--dviware/dvisvgm/libs/xxHash/xxhash.c2
-rw-r--r--dviware/dvisvgm/libs/xxHash/xxhash.h3513
-rw-r--r--dviware/dvisvgm/src/DVIReader.cpp71
-rw-r--r--dviware/dvisvgm/src/DVIReader.hpp2
-rw-r--r--dviware/dvisvgm/src/DVIToSVGActions.cpp19
-rw-r--r--dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp121
-rw-r--r--dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp3
-rw-r--r--dviware/dvisvgm/src/FileSystem.cpp84
-rw-r--r--dviware/dvisvgm/src/FileSystem.hpp22
-rw-r--r--dviware/dvisvgm/src/Font.cpp9
-rw-r--r--dviware/dvisvgm/src/Font.hpp2
-rw-r--r--dviware/dvisvgm/src/FontCache.cpp8
-rw-r--r--dviware/dvisvgm/src/FontManager.cpp2
-rw-r--r--dviware/dvisvgm/src/GraphicsPath.hpp2
-rw-r--r--dviware/dvisvgm/src/HashFunction.cpp2
-rw-r--r--dviware/dvisvgm/src/HashFunction.hpp2
-rw-r--r--dviware/dvisvgm/src/MD5HashFunction.hpp2
-rw-r--r--dviware/dvisvgm/src/PathClipper.cpp47
-rw-r--r--dviware/dvisvgm/src/PathClipper.hpp4
-rw-r--r--dviware/dvisvgm/src/PsSpecialHandler.cpp6
-rw-r--r--dviware/dvisvgm/src/XMLNode.cpp65
-rw-r--r--dviware/dvisvgm/src/XMLNode.hpp2
-rw-r--r--dviware/dvisvgm/src/XXHashFunction.hpp10
-rw-r--r--dviware/dvisvgm/src/dvisvgm.cpp4
-rw-r--r--dviware/dvisvgm/src/optimizer/GroupCollapser.cpp53
-rw-r--r--dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp2
-rw-r--r--dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp2
-rw-r--r--dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp7
-rw-r--r--dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp2
-rw-r--r--dviware/dvisvgm/src/psdefs.cpp170
-rw-r--r--dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp4
-rw-r--r--dviware/dvisvgm/tests/HashFunctionTest.cpp8
-rw-r--r--info/biblio/tugboat.bib62
-rw-r--r--language/marathi/README.txt6
-rw-r--r--language/marathi/marathi.dtx141
-rw-r--r--language/marathi/marathi.ins4
-rw-r--r--language/marathi/marathi.pdfbin80005 -> 83427 bytes
-rw-r--r--language/marathi/table.tex16
-rw-r--r--macros/latex/contrib/chhaya/README.txt4
-rw-r--r--macros/latex/contrib/chhaya/chhaya.dtx16
-rw-r--r--macros/latex/contrib/chhaya/chhaya.ins4
-rw-r--r--macros/latex/contrib/chhaya/chhaya.pdfbin45752 -> 46743 bytes
-rw-r--r--macros/latex/contrib/chhaya/sankshep.tex8
-rw-r--r--macros/latex/contrib/hopatch/README.md17
-rw-r--r--macros/latex/contrib/hopatch/hopatch.dtx (renamed from macros/latex/contrib/oberdiek/hopatch.dtx)122
-rw-r--r--macros/latex/contrib/hopatch/hopatch.pdfbin0 -> 304161 bytes
-rw-r--r--macros/latex/contrib/oberdiek/README.md77
-rw-r--r--macros/latex/contrib/oberdiek/README.txt29
-rw-r--r--macros/latex/contrib/oberdiek/aliascnt.pdfbin293095 -> 298594 bytes
-rw-r--r--macros/latex/contrib/oberdiek/bmpsize.pdfbin498252 -> 503673 bytes
-rw-r--r--macros/latex/contrib/oberdiek/centernot.pdfbin275199 -> 280539 bytes
-rw-r--r--macros/latex/contrib/oberdiek/chemarr.pdfbin289226 -> 294587 bytes
-rw-r--r--macros/latex/contrib/oberdiek/classlist.pdfbin271947 -> 277313 bytes
-rw-r--r--macros/latex/contrib/oberdiek/colonequals.pdfbin284949 -> 290302 bytes
-rw-r--r--macros/latex/contrib/oberdiek/dvipscol.pdfbin269922 -> 275213 bytes
-rw-r--r--macros/latex/contrib/oberdiek/engord.pdfbin319151 -> 324486 bytes
-rw-r--r--macros/latex/contrib/oberdiek/enparen.pdfbin305218 -> 310601 bytes
-rw-r--r--macros/latex/contrib/oberdiek/eolgrab.pdfbin317170 -> 322360 bytes
-rw-r--r--macros/latex/contrib/oberdiek/fibnum.pdfbin354648 -> 359960 bytes
-rw-r--r--macros/latex/contrib/oberdiek/flags.pdfbin283961 -> 289459 bytes
-rw-r--r--macros/latex/contrib/oberdiek/holtxdoc.pdfbin306330 -> 311828 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hopatch.pdfbin293225 -> 293225 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypbmsec.pdfbin290353 -> 295718 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypcap.pdfbin284122 -> 289452 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypdestopt.pdfbin317814 -> 323105 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypdoc.pdfbin320178 -> 325461 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hypgotoe.pdfbin286179 -> 291535 bytes
-rw-r--r--macros/latex/contrib/oberdiek/hyphsubst.pdfbin300446 -> 305692 bytes
-rw-r--r--macros/latex/contrib/oberdiek/ifdraft.pdfbin265890 -> 271317 bytes
-rw-r--r--macros/latex/contrib/oberdiek/iflang.pdfbin314990 -> 320322 bytes
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek-bundle.bib14
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.ins6
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.pdfbin278714 -> 281421 bytes
-rw-r--r--macros/latex/contrib/oberdiek/oberdiek.tex26
-rw-r--r--macros/latex/contrib/oberdiek/pagegrid.pdfbin311938 -> 317241 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pagesel.pdfbin312194 -> 0 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcol.pdfbin303033 -> 308360 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolfoot.pdfbin294724 -> 300028 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparallel.pdfbin320764 -> 326040 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcolparcolumns.pdfbin308409 -> 313719 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfcrypt.pdfbin311898 -> 317206 bytes
-rw-r--r--macros/latex/contrib/oberdiek/pdfrender.pdfbin383499 -> 388493 bytes
-rw-r--r--macros/latex/contrib/oberdiek/protecteddef.pdfbin308115 -> 313619 bytes
-rw-r--r--macros/latex/contrib/oberdiek/resizegather.pdfbin517717 -> 517711 bytes
-rw-r--r--macros/latex/contrib/oberdiek/rotchiffre.pdfbin317497 -> 323082 bytes
-rw-r--r--macros/latex/contrib/oberdiek/scrindex.pdfbin283886 -> 289199 bytes
-rw-r--r--macros/latex/contrib/oberdiek/setouterhbox.pdfbin330126 -> 335268 bytes
-rw-r--r--macros/latex/contrib/oberdiek/settobox.pdfbin293875 -> 299200 bytes
-rw-r--r--macros/latex/contrib/oberdiek/stackrel.pdfbin282341 -> 287648 bytes
-rw-r--r--macros/latex/contrib/oberdiek/stampinclude.pdfbin278115 -> 283435 bytes
-rw-r--r--macros/latex/contrib/oberdiek/tabularht.pdfbin331499 -> 336823 bytes
-rw-r--r--macros/latex/contrib/oberdiek/tabularkv.pdfbin255279 -> 260615 bytes
-rw-r--r--macros/latex/contrib/oberdiek/telprint.pdfbin303826 -> 309114 bytes
-rw-r--r--macros/latex/contrib/oberdiek/thepdfnumber.pdfbin347451 -> 352882 bytes
-rw-r--r--macros/latex/contrib/oberdiek/twoopt.pdfbin275011 -> 280332 bytes
-rw-r--r--macros/latex/contrib/pagesel/README.md14
-rw-r--r--macros/latex/contrib/pagesel/pagesel.dtx (renamed from macros/latex/contrib/oberdiek/pagesel.dtx)164
-rw-r--r--macros/latex/contrib/pagesel/pagesel.pdfbin0 -> 332616 bytes
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl12
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb245
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2213108 -> 2215932 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--timestamp2
117 files changed, 5129 insertions, 5638 deletions
diff --git a/FILES.byname b/FILES.byname
index fdc14297fe..7cd8de19f3 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -3476,25 +3476,25 @@
1990/10/02 | 159 | dviware/dvisun/makefile
1990/10/02 | 280 | dviware/dvisun/README
2019/06/09 | 55720 | dviware/dvisun.zip
-2020/03/21 | 56818 | dviware/dvisvgm/aclocal.m4
+2020/08/12 | 56818 | dviware/dvisvgm/aclocal.m4
2019/03/09 | 5827 | dviware/dvisvgm/ar-lib
2018/09/08 | 576 | dviware/dvisvgm/AUTHORS
-2020/03/21 | 403941 | dviware/dvisvgm/ChangeLog
+2020/08/12 | 408460 | dviware/dvisvgm/ChangeLog
2019/03/09 | 7383 | dviware/dvisvgm/compile
2019/03/09 | 44166 | dviware/dvisvgm/config.guess
-2020/03/21 | 4369 | dviware/dvisvgm/config.h.in
+2020/08/12 | 4369 | dviware/dvisvgm/config.h.in
2019/03/09 | 36408 | dviware/dvisvgm/config.sub
-2020/03/21 | 682158 | dviware/dvisvgm/configure
-2020/03/21 | 8409 | dviware/dvisvgm/configure.ac
+2020/08/12 | 682149 | dviware/dvisvgm/configure
+2020/08/12 | 8409 | dviware/dvisvgm/configure.ac
2016/09/03 | 35147 | dviware/dvisvgm/COPYING
2019/03/09 | 23568 | dviware/dvisvgm/depcomp
2020/03/02 | 718 | dviware/dvisvgm/doc/conf-dblatex-man.xsl
2020/03/21 | 2618 | dviware/dvisvgm/doc/conf-dblatex-pdf.xsl
-2020/03/21 | 66573 | dviware/dvisvgm/doc/dvisvgm.1
-2020/03/21 | 60145 | dviware/dvisvgm/doc/dvisvgm.txt.in
+2020/08/12 | 66665 | dviware/dvisvgm/doc/dvisvgm.1
+2020/07/31 | 60234 | dviware/dvisvgm/doc/dvisvgm.txt.in
2020/03/21 | 840 | dviware/dvisvgm/doc/generate-dvisvgm-sty.xsl
2020/03/21 | 3678 | dviware/dvisvgm/doc/Makefile.am
-2020/03/21 | 21313 | dviware/dvisvgm/doc/Makefile.in
+2020/08/12 | 21313 | dviware/dvisvgm/doc/Makefile.in
2020/03/02 | 1041 | dviware/dvisvgm/doc/tweak-dblatex-pdf.xsl
2020/03/21 | 712 | dviware/dvisvgm/doc/tweak-dblatex-tex.py
2020/03/02 | 1698 | dviware/dvisvgm/doc/tweak-db-refentry.xsl
@@ -3574,12 +3574,12 @@
2018/07/31 | 2615 | dviware/dvisvgm/libs/brotli/include/brotli/types.h
2017/12/28 | 1084 | dviware/dvisvgm/libs/brotli/LICENSE
2019/03/09 | 1899 | dviware/dvisvgm/libs/brotli/Makefile.am
-2020/03/21 | 31488 | dviware/dvisvgm/libs/brotli/Makefile.in
+2020/08/12 | 31488 | dviware/dvisvgm/libs/brotli/Makefile.in
2018/09/08 | 132235 | dviware/dvisvgm/libs/clipper/clipper.cpp
2016/09/03 | 15879 | dviware/dvisvgm/libs/clipper/clipper.hpp
2017/04/14 | 1374 | dviware/dvisvgm/libs/clipper/License.txt
2017/04/14 | 202 | dviware/dvisvgm/libs/clipper/Makefile.am
-2020/03/21 | 20338 | dviware/dvisvgm/libs/clipper/Makefile.in
+2020/08/12 | 20338 | dviware/dvisvgm/libs/clipper/Makefile.in
2019/03/09 | 467 | dviware/dvisvgm/libs/defs.am
2017/04/14 | 188824 | dviware/dvisvgm/libs/ff-woff/fontforge/alphabet.c
2017/04/14 | 32761 | dviware/dvisvgm/libs/ff-woff/fontforge/asmfpst.c
@@ -3662,11 +3662,11 @@
2017/04/14 | 5185 | dviware/dvisvgm/libs/ff-woff/inc/utype.h
2017/04/14 | 9905 | dviware/dvisvgm/libs/ff-woff/LICENSE
2019/04/12 | 2027 | dviware/dvisvgm/libs/ff-woff/Makefile.am
-2020/03/21 | 40554 | dviware/dvisvgm/libs/ff-woff/Makefile.in
+2020/08/12 | 40554 | dviware/dvisvgm/libs/ff-woff/Makefile.in
2020/03/02 | 241 | dviware/dvisvgm/libs/Makefile.am
-2020/03/21 | 19936 | dviware/dvisvgm/libs/Makefile.in
+2020/08/12 | 19936 | dviware/dvisvgm/libs/Makefile.in
2018/09/08 | 171 | dviware/dvisvgm/libs/md5/Makefile.am
-2020/03/21 | 19545 | dviware/dvisvgm/libs/md5/Makefile.in
+2020/08/12 | 19545 | dviware/dvisvgm/libs/md5/Makefile.in
2018/09/08 | 8743 | dviware/dvisvgm/libs/md5/md5.c
2018/09/08 | 1426 | dviware/dvisvgm/libs/md5/md5.h
2019/10/25 | 2146 | dviware/dvisvgm/libs/potrace/auxiliary.h
@@ -3678,7 +3678,7 @@
2019/10/25 | 442 | dviware/dvisvgm/libs/potrace/decompose.h
2019/10/25 | 11118 | dviware/dvisvgm/libs/potrace/lists.h
2019/03/09 | 330 | dviware/dvisvgm/libs/potrace/Makefile.am
-2020/03/21 | 20804 | dviware/dvisvgm/libs/potrace/Makefile.in
+2020/08/12 | 20804 | dviware/dvisvgm/libs/potrace/Makefile.in
2019/10/25 | 3122 | dviware/dvisvgm/libs/potrace/potracelib.c
2019/10/25 | 4573 | dviware/dvisvgm/libs/potrace/potracelib.h
2019/10/25 | 2654 | dviware/dvisvgm/libs/potrace/progress.h
@@ -3687,14 +3687,14 @@
2019/03/09 | 102582 | dviware/dvisvgm/libs/variant/include/mpark/variant.hpp
2017/10/30 | 1338 | dviware/dvisvgm/libs/variant/LICENSE.md
2019/03/09 | 71 | dviware/dvisvgm/libs/variant/Makefile.am
-2020/03/21 | 15593 | dviware/dvisvgm/libs/variant/Makefile.in
+2020/08/12 | 15593 | dviware/dvisvgm/libs/variant/Makefile.in
2017/10/30 | 1171 | dviware/dvisvgm/libs/woff2/include/woff2/decode.h
2017/10/30 | 1434 | dviware/dvisvgm/libs/woff2/include/woff2/encode.h
2017/10/30 | 2304 | dviware/dvisvgm/libs/woff2/include/woff2/output.h
2018/07/31 | 131 | dviware/dvisvgm/libs/woff2/include/woff2/version.h
2016/09/03 | 11358 | dviware/dvisvgm/libs/woff2/LICENSE
2019/03/09 | 701 | dviware/dvisvgm/libs/woff2/Makefile.am
-2020/03/21 | 24681 | dviware/dvisvgm/libs/woff2/Makefile.in
+2020/08/12 | 24681 | dviware/dvisvgm/libs/woff2/Makefile.in
2017/10/30 | 4185 | dviware/dvisvgm/libs/woff2/src/buffer.h
2018/07/31 | 12155 | dviware/dvisvgm/libs/woff2/src/font.cc
2017/10/30 | 3509 | dviware/dvisvgm/libs/woff2/src/font.h
@@ -3716,10 +3716,10 @@
2018/07/31 | 15423 | dviware/dvisvgm/libs/woff2/src/woff2_enc.cc
2017/10/30 | 1564 | dviware/dvisvgm/libs/woff2/src/woff2_out.cc
2019/10/25 | 200 | dviware/dvisvgm/libs/xxHash/Makefile.am
-2020/03/21 | 19650 | dviware/dvisvgm/libs/xxHash/Makefile.in
-2020/03/13 | 86868 | dviware/dvisvgm/libs/xxHash/xxh3.h
-2020/03/13 | 1859 | dviware/dvisvgm/libs/xxHash/xxhash.c
-2020/03/13 | 68784 | dviware/dvisvgm/libs/xxHash/xxhash.h
+2020/08/12 | 19650 | dviware/dvisvgm/libs/xxHash/Makefile.in
+2020/07/31 | 2393 | dviware/dvisvgm/libs/xxHash/xxh3.h
+2020/07/04 | 1855 | dviware/dvisvgm/libs/xxHash/xxhash.c
+2020/07/31 | 184809 | dviware/dvisvgm/libs/xxHash/xxhash.h
2019/03/09 | 324151 | dviware/dvisvgm/ltmain.sh
2019/03/09 | 2105 | dviware/dvisvgm/m4/ax_check_compile_flag.m4
2017/10/30 | 11836 | dviware/dvisvgm/m4/ax_code_coverage.m4
@@ -3730,11 +3730,11 @@
2019/03/09 | 4384 | dviware/dvisvgm/m4/ltsugar.m4
2019/03/09 | 699 | dviware/dvisvgm/m4/ltversion.m4
2019/03/09 | 95 | dviware/dvisvgm/m4/Makefile.am
-2020/03/21 | 13474 | dviware/dvisvgm/m4/Makefile.in
+2020/08/12 | 13474 | dviware/dvisvgm/m4/Makefile.in
2020/03/02 | 744 | dviware/dvisvgm/Makefile.am
-2020/03/21 | 27672 | dviware/dvisvgm/Makefile.in
+2020/08/12 | 27672 | dviware/dvisvgm/Makefile.in
2019/03/09 | 6878 | dviware/dvisvgm/missing
-2020/03/21 | 35755 | dviware/dvisvgm/NEWS
+2020/08/12 | 36743 | dviware/dvisvgm/NEWS
2020/03/02 | 6173 | dviware/dvisvgm/README
2020/03/02 | 158418 | dviware/dvisvgm/src/AGLTable.hpp
2020/03/02 | 13439 | dviware/dvisvgm/src/BasicDVIReader.cpp
@@ -3771,12 +3771,12 @@
2020/03/02 | 2290 | dviware/dvisvgm/src/DLLoader.cpp
2020/03/02 | 2539 | dviware/dvisvgm/src/DLLoader.hpp
2020/03/02 | 2334 | dviware/dvisvgm/src/DVIActions.hpp
-2020/03/02 | 25282 | dviware/dvisvgm/src/DVIReader.cpp
-2020/03/02 | 8464 | dviware/dvisvgm/src/DVIReader.hpp
-2020/03/13 | 17749 | dviware/dvisvgm/src/dvisvgm.cpp
-2020/03/21 | 19337 | dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
-2020/03/02 | 4562 | dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp
-2020/03/02 | 12234 | dviware/dvisvgm/src/DVIToSVGActions.cpp
+2020/07/04 | 26773 | dviware/dvisvgm/src/DVIReader.cpp
+2020/04/11 | 8470 | dviware/dvisvgm/src/DVIReader.hpp
+2020/07/04 | 17801 | dviware/dvisvgm/src/dvisvgm.cpp
+2020/07/14 | 19595 | dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
+2020/07/14 | 4585 | dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp
+2020/07/14 | 12412 | dviware/dvisvgm/src/DVIToSVGActions.cpp
2020/03/02 | 4915 | dviware/dvisvgm/src/DVIToSVGActions.hpp
2020/03/02 | 21303 | dviware/dvisvgm/src/DVIToSVG.cpp
2020/03/02 | 5602 | dviware/dvisvgm/src/DVIToSVG.hpp
@@ -3795,18 +3795,18 @@
2020/03/02 | 2586 | dviware/dvisvgm/src/FileFinder.hpp
2020/03/02 | 10157 | dviware/dvisvgm/src/FilePath.cpp
2020/03/02 | 3434 | dviware/dvisvgm/src/FilePath.hpp
-2020/03/02 | 9676 | dviware/dvisvgm/src/FileSystem.cpp
-2020/03/02 | 2754 | dviware/dvisvgm/src/FileSystem.hpp
+2020/07/07 | 10368 | dviware/dvisvgm/src/FileSystem.cpp
+2020/07/07 | 3105 | dviware/dvisvgm/src/FileSystem.hpp
2020/03/02 | 1821 | dviware/dvisvgm/src/FixWord.hpp
-2020/03/02 | 12510 | dviware/dvisvgm/src/FontCache.cpp
+2020/07/07 | 12510 | dviware/dvisvgm/src/FontCache.cpp
2020/03/02 | 2857 | dviware/dvisvgm/src/FontCache.hpp
-2020/03/02 | 21067 | dviware/dvisvgm/src/Font.cpp
+2020/04/11 | 21174 | dviware/dvisvgm/src/Font.cpp
2020/03/02 | 3331 | dviware/dvisvgm/src/FontEncoding.cpp
2020/03/02 | 2702 | dviware/dvisvgm/src/FontEncoding.hpp
2020/03/02 | 13507 | dviware/dvisvgm/src/FontEngine.cpp
2020/03/02 | 3254 | dviware/dvisvgm/src/FontEngine.hpp
-2020/03/02 | 17330 | dviware/dvisvgm/src/Font.hpp
-2020/03/02 | 12221 | dviware/dvisvgm/src/FontManager.cpp
+2020/04/11 | 17311 | dviware/dvisvgm/src/Font.hpp
+2020/04/11 | 12085 | dviware/dvisvgm/src/FontManager.cpp
2020/03/02 | 3734 | dviware/dvisvgm/src/FontManager.hpp
2020/03/02 | 9298 | dviware/dvisvgm/src/FontMap.cpp
2020/03/02 | 2909 | dviware/dvisvgm/src/FontMap.hpp
@@ -3825,9 +3825,9 @@
2020/03/02 | 4032 | dviware/dvisvgm/src/Ghostscript.hpp
2020/03/02 | 1537 | dviware/dvisvgm/src/Glyph.hpp
2020/03/02 | 2941 | dviware/dvisvgm/src/GlyphTracerMessages.hpp
-2020/03/02 | 27914 | dviware/dvisvgm/src/GraphicsPath.hpp
-2020/03/02 | 3609 | dviware/dvisvgm/src/HashFunction.cpp
-2020/03/02 | 2550 | dviware/dvisvgm/src/HashFunction.hpp
+2020/07/04 | 27938 | dviware/dvisvgm/src/GraphicsPath.hpp
+2020/07/07 | 3609 | dviware/dvisvgm/src/HashFunction.cpp
+2020/07/07 | 2550 | dviware/dvisvgm/src/HashFunction.hpp
2020/03/02 | 3623 | dviware/dvisvgm/src/HtmlSpecialHandler.cpp
2020/03/02 | 2214 | dviware/dvisvgm/src/HtmlSpecialHandler.hpp
2020/03/02 | 9805 | dviware/dvisvgm/src/HyperlinkManager.cpp
@@ -3846,12 +3846,12 @@
2020/03/02 | 4138 | dviware/dvisvgm/src/Length.hpp
2020/03/02 | 2014 | dviware/dvisvgm/src/macros.hpp
2020/03/02 | 7116 | dviware/dvisvgm/src/Makefile.am
-2020/03/21 | 59734 | dviware/dvisvgm/src/Makefile.in
+2020/08/12 | 59734 | dviware/dvisvgm/src/Makefile.in
2020/03/02 | 8495 | dviware/dvisvgm/src/MapLine.cpp
2020/03/02 | 3089 | dviware/dvisvgm/src/MapLine.hpp
2020/03/21 | 16856 | dviware/dvisvgm/src/Matrix.cpp
2020/03/02 | 4123 | dviware/dvisvgm/src/Matrix.hpp
-2020/03/02 | 2704 | dviware/dvisvgm/src/MD5HashFunction.hpp
+2020/07/07 | 2704 | dviware/dvisvgm/src/MD5HashFunction.hpp
2020/03/02 | 7517 | dviware/dvisvgm/src/Message.cpp
2020/03/02 | 1779 | dviware/dvisvgm/src/MessageException.hpp
2020/03/02 | 3541 | dviware/dvisvgm/src/Message.hpp
@@ -3865,20 +3865,20 @@
2020/03/02 | 8119 | dviware/dvisvgm/src/optimizer/AttributeExtractor.cpp
2020/03/02 | 2709 | dviware/dvisvgm/src/optimizer/AttributeExtractor.hpp
2020/03/02 | 4213 | dviware/dvisvgm/src/optimizer/DependencyGraph.hpp
-2020/03/02 | 6136 | dviware/dvisvgm/src/optimizer/GroupCollapser.cpp
+2020/07/16 | 6395 | dviware/dvisvgm/src/optimizer/GroupCollapser.cpp
2020/03/02 | 1984 | dviware/dvisvgm/src/optimizer/GroupCollapser.hpp
2019/12/06 | 534 | dviware/dvisvgm/src/optimizer/Makefile.am
-2020/03/21 | 22166 | dviware/dvisvgm/src/optimizer/Makefile.in
+2020/08/12 | 22166 | dviware/dvisvgm/src/optimizer/Makefile.in
2020/03/02 | 1642 | dviware/dvisvgm/src/optimizer/OptimizerModule.hpp
-2020/03/02 | 3192 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp
+2020/07/15 | 3192 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp
2020/03/02 | 1644 | dviware/dvisvgm/src/optimizer/RedundantElementRemover.hpp
-2020/03/02 | 4394 | dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp
+2020/07/14 | 4394 | dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp
2020/03/02 | 2297 | dviware/dvisvgm/src/optimizer/SVGOptimizer.hpp
2020/03/02 | 4212 | dviware/dvisvgm/src/optimizer/TextSimplifier.cpp
2020/03/02 | 1699 | dviware/dvisvgm/src/optimizer/TextSimplifier.hpp
-2020/03/02 | 6704 | dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp
+2020/07/29 | 6846 | dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp
2020/03/02 | 1856 | dviware/dvisvgm/src/optimizer/TransformSimplifier.hpp
-2020/03/02 | 2013 | dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp
+2020/07/15 | 2013 | dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp
2020/03/02 | 1687 | dviware/dvisvgm/src/optimizer/WSNodeRemover.hpp
2020/03/02 | 2067 | dviware/dvisvgm/src/options.dtd
2020/03/13 | 8986 | dviware/dvisvgm/src/options.xml
@@ -3889,8 +3889,8 @@
2020/03/02 | 4043 | dviware/dvisvgm/src/Pair.hpp
2020/03/02 | 4052 | dviware/dvisvgm/src/PapersizeSpecialHandler.cpp
2020/03/02 | 2514 | dviware/dvisvgm/src/PapersizeSpecialHandler.hpp
-2020/03/02 | 12729 | dviware/dvisvgm/src/PathClipper.cpp
-2020/03/02 | 2289 | dviware/dvisvgm/src/PathClipper.hpp
+2020/07/04 | 13145 | dviware/dvisvgm/src/PathClipper.cpp
+2020/07/04 | 2432 | dviware/dvisvgm/src/PathClipper.hpp
2020/03/02 | 15422 | dviware/dvisvgm/src/PDFParser.cpp
2020/03/02 | 5841 | dviware/dvisvgm/src/PDFParser.hpp
2020/03/02 | 10406 | dviware/dvisvgm/src/PdfSpecialHandler.cpp
@@ -3900,7 +3900,7 @@
2020/03/02 | 1886 | dviware/dvisvgm/src/PreScanDVIReader.hpp
2020/03/02 | 10029 | dviware/dvisvgm/src/Process.cpp
2020/03/02 | 1815 | dviware/dvisvgm/src/Process.hpp
-2020/03/13 | 11910 | dviware/dvisvgm/src/psdefs.cpp
+2020/07/29 | 12070 | dviware/dvisvgm/src/psdefs.cpp
2020/03/02 | 1806 | dviware/dvisvgm/src/PSFilter.hpp
2020/03/13 | 16801 | dviware/dvisvgm/src/PSInterpreter.cpp
2020/03/13 | 6894 | dviware/dvisvgm/src/PSInterpreter.hpp
@@ -3908,7 +3908,7 @@
2020/03/02 | 3928 | dviware/dvisvgm/src/PSPattern.hpp
2020/03/02 | 4494 | dviware/dvisvgm/src/PSPreviewFilter.cpp
2020/03/02 | 2605 | dviware/dvisvgm/src/PSPreviewFilter.hpp
-2020/03/13 | 50325 | dviware/dvisvgm/src/PsSpecialHandler.cpp
+2020/07/04 | 50297 | dviware/dvisvgm/src/PsSpecialHandler.cpp
2020/03/13 | 9808 | dviware/dvisvgm/src/PsSpecialHandler.hpp
2020/03/02 | 7059 | dviware/dvisvgm/src/RangeMap.cpp
2020/03/02 | 5180 | dviware/dvisvgm/src/RangeMap.hpp
@@ -3973,11 +3973,11 @@
2020/03/02 | 1604 | dviware/dvisvgm/src/windows.hpp
2020/03/02 | 2240 | dviware/dvisvgm/src/XMLDocument.cpp
2020/03/02 | 2053 | dviware/dvisvgm/src/XMLDocument.hpp
-2020/03/13 | 15597 | dviware/dvisvgm/src/XMLNode.cpp
-2020/03/02 | 9955 | dviware/dvisvgm/src/XMLNode.hpp
+2020/07/15 | 15612 | dviware/dvisvgm/src/XMLNode.cpp
+2020/07/15 | 9954 | dviware/dvisvgm/src/XMLNode.hpp
2020/03/02 | 3036 | dviware/dvisvgm/src/XMLString.cpp
2020/03/02 | 1887 | dviware/dvisvgm/src/XMLString.hpp
-2020/03/02 | 4557 | dviware/dvisvgm/src/XXHashFunction.hpp
+2020/07/07 | 4735 | dviware/dvisvgm/src/XXHashFunction.hpp
2020/03/02 | 5940 | dviware/dvisvgm/src/ZLibOutputStream.hpp
2019/03/09 | 4642 | dviware/dvisvgm/test-driver
2020/03/02 | 6075 | dviware/dvisvgm/tests/BezierTest.cpp
@@ -4001,7 +4001,7 @@
2016/09/03 | 337419 | dviware/dvisvgm/tests/data/frktest-nf-cmp.svg
2016/09/03 | 163979 | dviware/dvisvgm/tests/data/frktest-wf-cmp.svg
2020/03/02 | 428 | dviware/dvisvgm/tests/data/Makefile.am
-2020/03/21 | 13688 | dviware/dvisvgm/tests/data/Makefile.in
+2020/08/12 | 13688 | dviware/dvisvgm/tests/data/Makefile.in
2016/09/03 | 1207 | dviware/dvisvgm/tests/data/ot1.cmap
2016/09/03 | 1320 | dviware/dvisvgm/tests/data/sample.dvi
2016/09/03 | 60654 | dviware/dvisvgm/tests/data/sample-nf-cmp.svg
@@ -4012,7 +4012,7 @@
2020/03/02 | 2512 | dviware/dvisvgm/tests/DependencyGraphTest.cpp
2020/03/02 | 2773 | dviware/dvisvgm/tests/DirectoryTest.cpp
2020/03/02 | 33210 | dviware/dvisvgm/tests/DVIReaderTest.cpp
-2020/03/21 | 13266 | dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
+2020/07/04 | 13283 | dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
2020/03/02 | 5850 | dviware/dvisvgm/tests/EllipticalArcTest.cpp
2020/03/02 | 7485 | dviware/dvisvgm/tests/EmSpecialTest.cpp
2020/03/02 | 3124 | dviware/dvisvgm/tests/FileFinderTest.cpp
@@ -4063,11 +4063,11 @@
2019/10/25 | 14711 | dviware/dvisvgm/tests/gtest/src/gtest-printers.cc
2019/10/25 | 4010 | dviware/dvisvgm/tests/gtest/src/gtest-test-part.cc
2019/10/25 | 3923 | dviware/dvisvgm/tests/gtest/src/gtest-typed-test.cc
-2020/03/13 | 5568 | dviware/dvisvgm/tests/HashFunctionTest.cpp
+2020/07/07 | 5568 | dviware/dvisvgm/tests/HashFunctionTest.cpp
2020/03/02 | 4034 | dviware/dvisvgm/tests/JFMReaderTest.cpp
2020/03/02 | 7803 | dviware/dvisvgm/tests/LengthTest.cpp
2020/03/02 | 15639 | dviware/dvisvgm/tests/Makefile.am
-2020/03/21 | 256010 | dviware/dvisvgm/tests/Makefile.in
+2020/08/12 | 256010 | dviware/dvisvgm/tests/Makefile.in
2020/03/02 | 5795 | dviware/dvisvgm/tests/MapLineTest.cpp
2020/03/02 | 8338 | dviware/dvisvgm/tests/MatrixTest.cpp
2020/03/02 | 2315 | dviware/dvisvgm/tests/MessageExceptionTest.cpp
@@ -4101,7 +4101,7 @@
2020/03/02 | 2276 | dviware/dvisvgm/tests/VectorStreamTest.cpp
2020/03/02 | 15061 | dviware/dvisvgm/tests/XMLNodeTest.cpp
2020/03/02 | 3034 | dviware/dvisvgm/tests/XMLStringTest.cpp
-2020/03/21 | 3479555 | dviware/dvisvgm.zip
+2020/08/13 | 3489091 | dviware/dvisvgm.zip
1991/04/12 | 1728 | dviware/dvitops/aftopl.1
1991/04/12 | 12075 | dviware/dvitops/aftopl.c
1991/01/25 | 837 | dviware/dvitops/cms.h
@@ -5003,7 +5003,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2020/08/12 | 231336 | FILES.last07days
+2020/08/13 | 228060 | FILES.last07days
2018/06/27 | 99883 | fonts/academicons/academicons.pdf
2018/06/27 | 10779 | fonts/academicons/academicons.sty
2018/06/27 | 5774 | fonts/academicons/academicons.tex
@@ -140490,9 +140490,9 @@
2019/12/12 | 3088 | info/biblio/texnique.ltx
1999/02/20 | 312 | info/biblio/tugbib2.ltx
1999/02/20 | 315 | info/biblio/tugbib.ltx
-2020/08/11 | 3237077 | info/biblio/tugboat.bib
+2020/08/12 | 3648358 | info/biblio/tugboat.bib
2020/08/07 | 136241 | info/biblio/tugboat.def
-2020/08/10 | 3579 | info/biblio/tugboat.ltx
+2020/08/11 | 3579 | info/biblio/tugboat.ltx
2014/08/12 | 20186 | info/biblio/type.bib
2019/12/12 | 2025 | info/biblio/type.ltx
2020/07/06 | 1150222 | info/biblio/typeset.bib
@@ -163777,7 +163777,7 @@
2016/03/22 | 162114 | install/macros/latex/contrib/normalcolor.tds.zip
2011/09/20 | 179685 | install/macros/latex/contrib/nowidow.tds.zip
2020/03/18 | 8001668 | install/macros/latex/contrib/nwejm.tds.zip
-2019/12/31 | 13921441 | install/macros/latex/contrib/oberdiek.tds.zip
+2020/08/12 | 13809186 | install/macros/latex/contrib/oberdiek.tds.zip
2020/06/11 | 22925 | install/macros/latex/contrib/ocgx2.tds.zip
2012/12/08 | 1025300 | install/macros/latex/contrib/ocgx.tds.zip
2017/05/29 | 424133 | install/macros/latex/contrib/pagecolor.tds.zip
@@ -173908,19 +173908,18 @@
2005/04/24 | 364 | language/maltese/README.txt
2005/04/27 | 98071 | language/maltese.zip
2001/11/28 | 721 | language/manju/README
-2020/07/30 | 1972 | language/marathi/glossaries.gls
-2020/07/30 | 35585 | language/marathi/marathi.dtx
-2020/07/30 | 2753 | language/marathi/marathi.ins
-2020/07/30 | 80005 | language/marathi/marathi.pdf
-2020/07/30 | 9375 | language/marathi/namuna-article.tex
-2020/07/30 | 2172 | language/marathi/namuna-beamer.tex
-2020/07/30 | 9442 | language/marathi/namuna-book.tex
-2020/07/30 | 1994 | language/marathi/namuna-letter.tex
-2020/07/30 | 1235 | language/marathi/namuna-para.tex
-2020/07/30 | 10660 | language/marathi/namuna-report.tex
-2020/07/30 | 2461 | language/marathi/README.txt
-2020/07/30 | 692 | language/marathi/table.tex
-2020/07/30 | 95186 | language/marathi.zip
+2020/08/02 | 1972 | language/marathi/glossaries.gls
+2020/08/13 | 38114 | language/marathi/marathi.dtx
+2020/08/13 | 2752 | language/marathi/marathi.ins
+2020/08/13 | 83427 | language/marathi/marathi.pdf
+2020/08/02 | 9375 | language/marathi/namuna-article.tex
+2020/08/02 | 2172 | language/marathi/namuna-beamer.tex
+2020/08/02 | 9442 | language/marathi/namuna-book.tex
+2020/08/02 | 1994 | language/marathi/namuna-letter.tex
+2020/08/02 | 1235 | language/marathi/namuna-para.tex
+2020/08/02 | 10660 | language/marathi/namuna-report.tex
+2020/08/13 | 2457 | language/marathi/README.txt
+2020/08/13 | 98322 | language/marathi.zip
2007/03/22 | 3923 | language/mongolian/babel/mn.def
2008/03/30 | 39157 | language/mongolian/babel/mongolian.dtx
2008/03/23 | 5112 | language/mongolian/babel/mongolian.ins
@@ -184880,13 +184879,13 @@
2012/07/20 | 130469 | macros/latex/contrib/chextras/chextras.pdf
2012/07/20 | 899 | macros/latex/contrib/chextras/README
2012/07/20 | 137505 | macros/latex/contrib/chextras.zip
-2020/07/23 | 14259 | macros/latex/contrib/chhaya/chhaya.dtx
-2020/07/23 | 2683 | macros/latex/contrib/chhaya/chhaya.ins
-2020/07/23 | 45752 | macros/latex/contrib/chhaya/chhaya.pdf
-2020/07/23 | 1195 | macros/latex/contrib/chhaya/README.txt
-2020/07/23 | 237 | macros/latex/contrib/chhaya/ref.bib
-2020/06/15 | 2493 | macros/latex/contrib/chhaya/sankshep.tex
-2020/07/24 | 51176 | macros/latex/contrib/chhaya.zip
+2020/08/13 | 14064 | macros/latex/contrib/chhaya/chhaya.dtx
+2020/08/13 | 2698 | macros/latex/contrib/chhaya/chhaya.ins
+2020/08/13 | 46743 | macros/latex/contrib/chhaya/chhaya.pdf
+2020/08/13 | 1210 | macros/latex/contrib/chhaya/README.txt
+2020/08/13 | 237 | macros/latex/contrib/chhaya/ref.bib
+2020/08/13 | 2502 | macros/latex/contrib/chhaya/sankshep.tex
+2020/08/13 | 52192 | macros/latex/contrib/chhaya.zip
2018/12/30 | 42966 | macros/latex/contrib/childdoc/childdoc.dtx
2018/12/29 | 1772 | macros/latex/contrib/childdoc/childdoc.ins
2018/12/30 | 269717 | macros/latex/contrib/childdoc/childdoc.pdf
@@ -191862,6 +191861,10 @@
2019/12/05 | 567626 | macros/latex/contrib/hologo/hologo.pdf
2019/12/05 | 115 | macros/latex/contrib/hologo/README.md
2019/12/06 | 570202 | macros/latex/contrib/hologo.zip
+2020/08/12 | 21566 | macros/latex/contrib/hopatch/hopatch.dtx
+2020/08/12 | 304161 | macros/latex/contrib/hopatch/hopatch.pdf
+2020/08/12 | 432 | macros/latex/contrib/hopatch/README.md
+2020/08/13 | 307210 | macros/latex/contrib/hopatch.zip
2020/07/31 | 317070 | macros/latex/contrib/horoscop/horoscop.dtx
2020/07/31 | 359 | macros/latex/contrib/horoscop/horoscop.ins
2020/07/31 | 701562 | macros/latex/contrib/horoscop/horoscop.pdf
@@ -196915,99 +196918,96 @@
2020/03/18 | 209522 | macros/latex/contrib/nwejm/source/nwejm.dtx
2020/03/18 | 24099 | macros/latex/contrib/nwejm/source/nwejm-examples-template.dtx
2020/03/18 | 1967612 | macros/latex/contrib/nwejm.zip
-2019/12/31 | 16535 | macros/latex/contrib/oberdiek/aliascnt.dtx
-2019/12/31 | 293095 | macros/latex/contrib/oberdiek/aliascnt.pdf
-2019/12/31 | 106085 | macros/latex/contrib/oberdiek/bmpsize.dtx
-2019/12/31 | 498252 | macros/latex/contrib/oberdiek/bmpsize.pdf
-2019/12/31 | 15084 | macros/latex/contrib/oberdiek/centernot.dtx
-2019/12/31 | 275199 | macros/latex/contrib/oberdiek/centernot.pdf
-2019/12/31 | 13772 | macros/latex/contrib/oberdiek/chemarr.dtx
-2019/12/31 | 289226 | macros/latex/contrib/oberdiek/chemarr.pdf
-2019/12/31 | 16633 | macros/latex/contrib/oberdiek/classlist.dtx
-2019/12/31 | 271947 | macros/latex/contrib/oberdiek/classlist.pdf
-2019/12/31 | 16564 | macros/latex/contrib/oberdiek/colonequals.dtx
-2019/12/31 | 284949 | macros/latex/contrib/oberdiek/colonequals.pdf
-2019/12/31 | 14185 | macros/latex/contrib/oberdiek/dvipscol.dtx
-2019/12/31 | 269922 | macros/latex/contrib/oberdiek/dvipscol.pdf
-2019/12/31 | 24106 | macros/latex/contrib/oberdiek/engord.dtx
-2019/12/31 | 319151 | macros/latex/contrib/oberdiek/engord.pdf
-2019/12/31 | 26109 | macros/latex/contrib/oberdiek/enparen.dtx
-2019/12/31 | 305218 | macros/latex/contrib/oberdiek/enparen.pdf
-2019/12/31 | 25097 | macros/latex/contrib/oberdiek/eolgrab.dtx
-2019/12/31 | 317170 | macros/latex/contrib/oberdiek/eolgrab.pdf
-2019/12/31 | 25810 | macros/latex/contrib/oberdiek/fibnum.dtx
-2019/12/31 | 354648 | macros/latex/contrib/oberdiek/fibnum.pdf
-2019/12/31 | 16789 | macros/latex/contrib/oberdiek/flags.dtx
-2019/12/31 | 283961 | macros/latex/contrib/oberdiek/flags.pdf
-2019/12/31 | 21668 | macros/latex/contrib/oberdiek/holtxdoc.dtx
-2019/12/31 | 306330 | macros/latex/contrib/oberdiek/holtxdoc.pdf
-2019/12/31 | 20806 | macros/latex/contrib/oberdiek/hopatch.dtx
-2019/12/31 | 293225 | macros/latex/contrib/oberdiek/hopatch.pdf
-2019/12/31 | 25146 | macros/latex/contrib/oberdiek/hypbmsec.dtx
-2019/12/31 | 290353 | macros/latex/contrib/oberdiek/hypbmsec.pdf
-2019/12/31 | 21476 | macros/latex/contrib/oberdiek/hypcap.dtx
-2019/12/31 | 284122 | macros/latex/contrib/oberdiek/hypcap.pdf
-2019/12/31 | 28881 | macros/latex/contrib/oberdiek/hypdestopt.dtx
-2019/12/31 | 317814 | macros/latex/contrib/oberdiek/hypdestopt.pdf
-2019/12/31 | 35799 | macros/latex/contrib/oberdiek/hypdoc.dtx
-2019/12/31 | 320178 | macros/latex/contrib/oberdiek/hypdoc.pdf
-2019/12/31 | 18053 | macros/latex/contrib/oberdiek/hypgotoe.dtx
-2019/12/31 | 286179 | macros/latex/contrib/oberdiek/hypgotoe.pdf
-2019/12/31 | 21343 | macros/latex/contrib/oberdiek/hyphsubst.dtx
-2019/12/31 | 300446 | macros/latex/contrib/oberdiek/hyphsubst.pdf
-2019/12/31 | 15169 | macros/latex/contrib/oberdiek/ifdraft.dtx
-2019/12/31 | 265890 | macros/latex/contrib/oberdiek/ifdraft.pdf
-2019/12/31 | 25308 | macros/latex/contrib/oberdiek/iflang.dtx
-2019/12/31 | 314990 | macros/latex/contrib/oberdiek/iflang.pdf
-2019/12/31 | 7506 | macros/latex/contrib/oberdiek/oberdiek-bundle.bib
-2019/12/31 | 2327 | macros/latex/contrib/oberdiek/oberdiek.ins
-2019/12/31 | 278714 | macros/latex/contrib/oberdiek/oberdiek.pdf
-2019/12/31 | 938 | macros/latex/contrib/oberdiek/oberdiek-source.bib
-2019/12/31 | 19317 | macros/latex/contrib/oberdiek/oberdiek.tex
-2019/12/31 | 28136 | macros/latex/contrib/oberdiek/pagegrid.dtx
-2019/12/31 | 311938 | macros/latex/contrib/oberdiek/pagegrid.pdf
-2019/12/31 | 24209 | macros/latex/contrib/oberdiek/pagesel.dtx
-2019/12/31 | 312194 | macros/latex/contrib/oberdiek/pagesel.pdf
-2019/12/31 | 26484 | macros/latex/contrib/oberdiek/pdfcol.dtx
-2019/12/31 | 19329 | macros/latex/contrib/oberdiek/pdfcolfoot.dtx
-2019/12/31 | 294724 | macros/latex/contrib/oberdiek/pdfcolfoot.pdf
-2019/12/31 | 26994 | macros/latex/contrib/oberdiek/pdfcolparallel.dtx
-2019/12/31 | 320764 | macros/latex/contrib/oberdiek/pdfcolparallel.pdf
-2019/12/31 | 20819 | macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx
-2019/12/31 | 308409 | macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
-2019/12/31 | 303033 | macros/latex/contrib/oberdiek/pdfcol.pdf
-2019/12/31 | 27847 | macros/latex/contrib/oberdiek/pdfcrypt.dtx
-2019/12/31 | 311898 | macros/latex/contrib/oberdiek/pdfcrypt.pdf
-2019/12/31 | 46934 | macros/latex/contrib/oberdiek/pdfrender.dtx
-2019/12/31 | 383499 | macros/latex/contrib/oberdiek/pdfrender.pdf
-2019/12/31 | 20812 | macros/latex/contrib/oberdiek/protecteddef.dtx
-2019/12/31 | 308115 | macros/latex/contrib/oberdiek/protecteddef.pdf
-2019/12/31 | 816 | macros/latex/contrib/oberdiek/README.txt
-2019/12/31 | 24780 | macros/latex/contrib/oberdiek/resizegather.dtx
-2019/12/31 | 517717 | macros/latex/contrib/oberdiek/resizegather.pdf
-2019/12/31 | 25691 | macros/latex/contrib/oberdiek/rotchiffre.dtx
-2019/12/31 | 317497 | macros/latex/contrib/oberdiek/rotchiffre.pdf
-2019/12/31 | 19267 | macros/latex/contrib/oberdiek/scrindex.dtx
-2019/12/31 | 283886 | macros/latex/contrib/oberdiek/scrindex.pdf
-2019/12/31 | 29459 | macros/latex/contrib/oberdiek/setouterhbox.dtx
-2019/12/31 | 330126 | macros/latex/contrib/oberdiek/setouterhbox.pdf
-2019/12/31 | 20045 | macros/latex/contrib/oberdiek/settobox.dtx
-2019/12/31 | 293875 | macros/latex/contrib/oberdiek/settobox.pdf
-2019/12/31 | 13782 | macros/latex/contrib/oberdiek/stackrel.dtx
-2019/12/31 | 282341 | macros/latex/contrib/oberdiek/stackrel.pdf
-2019/12/31 | 18499 | macros/latex/contrib/oberdiek/stampinclude.dtx
-2019/12/31 | 278115 | macros/latex/contrib/oberdiek/stampinclude.pdf
-2019/12/31 | 31131 | macros/latex/contrib/oberdiek/tabularht.dtx
-2019/12/31 | 331499 | macros/latex/contrib/oberdiek/tabularht.pdf
-2019/12/31 | 13344 | macros/latex/contrib/oberdiek/tabularkv.dtx
-2019/12/31 | 255279 | macros/latex/contrib/oberdiek/tabularkv.pdf
-2019/12/31 | 24890 | macros/latex/contrib/oberdiek/telprint.dtx
-2019/12/31 | 303826 | macros/latex/contrib/oberdiek/telprint.pdf
-2019/12/31 | 32949 | macros/latex/contrib/oberdiek/thepdfnumber.dtx
-2019/12/31 | 347451 | macros/latex/contrib/oberdiek/thepdfnumber.pdf
-2019/12/31 | 16829 | macros/latex/contrib/oberdiek/twoopt.dtx
-2019/12/31 | 275011 | macros/latex/contrib/oberdiek/twoopt.pdf
-2019/12/31 | 13805258 | macros/latex/contrib/oberdiek.zip
+2020/08/12 | 16535 | macros/latex/contrib/oberdiek/aliascnt.dtx
+2020/08/12 | 298594 | macros/latex/contrib/oberdiek/aliascnt.pdf
+2020/08/12 | 106085 | macros/latex/contrib/oberdiek/bmpsize.dtx
+2020/08/12 | 503673 | macros/latex/contrib/oberdiek/bmpsize.pdf
+2020/08/12 | 15084 | macros/latex/contrib/oberdiek/centernot.dtx
+2020/08/12 | 280539 | macros/latex/contrib/oberdiek/centernot.pdf
+2020/08/12 | 13772 | macros/latex/contrib/oberdiek/chemarr.dtx
+2020/08/12 | 294587 | macros/latex/contrib/oberdiek/chemarr.pdf
+2020/08/12 | 16633 | macros/latex/contrib/oberdiek/classlist.dtx
+2020/08/12 | 277313 | macros/latex/contrib/oberdiek/classlist.pdf
+2020/08/12 | 16564 | macros/latex/contrib/oberdiek/colonequals.dtx
+2020/08/12 | 290302 | macros/latex/contrib/oberdiek/colonequals.pdf
+2020/08/12 | 14185 | macros/latex/contrib/oberdiek/dvipscol.dtx
+2020/08/12 | 275213 | macros/latex/contrib/oberdiek/dvipscol.pdf
+2020/08/12 | 24106 | macros/latex/contrib/oberdiek/engord.dtx
+2020/08/12 | 324486 | macros/latex/contrib/oberdiek/engord.pdf
+2020/08/12 | 26109 | macros/latex/contrib/oberdiek/enparen.dtx
+2020/08/12 | 310601 | macros/latex/contrib/oberdiek/enparen.pdf
+2020/08/12 | 25097 | macros/latex/contrib/oberdiek/eolgrab.dtx
+2020/08/12 | 322360 | macros/latex/contrib/oberdiek/eolgrab.pdf
+2020/08/12 | 25810 | macros/latex/contrib/oberdiek/fibnum.dtx
+2020/08/12 | 359960 | macros/latex/contrib/oberdiek/fibnum.pdf
+2020/08/12 | 16789 | macros/latex/contrib/oberdiek/flags.dtx
+2020/08/12 | 289459 | macros/latex/contrib/oberdiek/flags.pdf
+2020/08/12 | 21668 | macros/latex/contrib/oberdiek/holtxdoc.dtx
+2020/08/12 | 311828 | macros/latex/contrib/oberdiek/holtxdoc.pdf
+2020/08/12 | 293225 | macros/latex/contrib/oberdiek/hopatch.pdf
+2020/08/12 | 25146 | macros/latex/contrib/oberdiek/hypbmsec.dtx
+2020/08/12 | 295718 | macros/latex/contrib/oberdiek/hypbmsec.pdf
+2020/08/12 | 21476 | macros/latex/contrib/oberdiek/hypcap.dtx
+2020/08/12 | 289452 | macros/latex/contrib/oberdiek/hypcap.pdf
+2020/08/12 | 28881 | macros/latex/contrib/oberdiek/hypdestopt.dtx
+2020/08/12 | 323105 | macros/latex/contrib/oberdiek/hypdestopt.pdf
+2020/08/12 | 35799 | macros/latex/contrib/oberdiek/hypdoc.dtx
+2020/08/12 | 325461 | macros/latex/contrib/oberdiek/hypdoc.pdf
+2020/08/12 | 18053 | macros/latex/contrib/oberdiek/hypgotoe.dtx
+2020/08/12 | 291535 | macros/latex/contrib/oberdiek/hypgotoe.pdf
+2020/08/12 | 21343 | macros/latex/contrib/oberdiek/hyphsubst.dtx
+2020/08/12 | 305692 | macros/latex/contrib/oberdiek/hyphsubst.pdf
+2020/08/12 | 15169 | macros/latex/contrib/oberdiek/ifdraft.dtx
+2020/08/12 | 271317 | macros/latex/contrib/oberdiek/ifdraft.pdf
+2020/08/12 | 25308 | macros/latex/contrib/oberdiek/iflang.dtx
+2020/08/12 | 320322 | macros/latex/contrib/oberdiek/iflang.pdf
+2020/08/12 | 7182 | macros/latex/contrib/oberdiek/oberdiek-bundle.bib
+2020/08/12 | 2277 | macros/latex/contrib/oberdiek/oberdiek.ins
+2020/08/12 | 281421 | macros/latex/contrib/oberdiek/oberdiek.pdf
+2020/08/12 | 938 | macros/latex/contrib/oberdiek/oberdiek-source.bib
+2020/08/12 | 18778 | macros/latex/contrib/oberdiek/oberdiek.tex
+2020/08/12 | 28136 | macros/latex/contrib/oberdiek/pagegrid.dtx
+2020/08/12 | 317241 | macros/latex/contrib/oberdiek/pagegrid.pdf
+2020/08/12 | 26484 | macros/latex/contrib/oberdiek/pdfcol.dtx
+2020/08/12 | 19329 | macros/latex/contrib/oberdiek/pdfcolfoot.dtx
+2020/08/12 | 300028 | macros/latex/contrib/oberdiek/pdfcolfoot.pdf
+2020/08/12 | 26994 | macros/latex/contrib/oberdiek/pdfcolparallel.dtx
+2020/08/12 | 326040 | macros/latex/contrib/oberdiek/pdfcolparallel.pdf
+2020/08/12 | 20819 | macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx
+2020/08/12 | 313719 | macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
+2020/08/12 | 308360 | macros/latex/contrib/oberdiek/pdfcol.pdf
+2020/08/12 | 27847 | macros/latex/contrib/oberdiek/pdfcrypt.dtx
+2020/08/12 | 317206 | macros/latex/contrib/oberdiek/pdfcrypt.pdf
+2020/08/12 | 46934 | macros/latex/contrib/oberdiek/pdfrender.dtx
+2020/08/12 | 388493 | macros/latex/contrib/oberdiek/pdfrender.pdf
+2020/08/12 | 20812 | macros/latex/contrib/oberdiek/protecteddef.dtx
+2020/08/12 | 313619 | macros/latex/contrib/oberdiek/protecteddef.pdf
+2020/08/12 | 3035 | macros/latex/contrib/oberdiek/README.md
+2020/08/12 | 24780 | macros/latex/contrib/oberdiek/resizegather.dtx
+2020/08/12 | 517711 | macros/latex/contrib/oberdiek/resizegather.pdf
+2020/08/12 | 25691 | macros/latex/contrib/oberdiek/rotchiffre.dtx
+2020/08/12 | 323082 | macros/latex/contrib/oberdiek/rotchiffre.pdf
+2020/08/12 | 19267 | macros/latex/contrib/oberdiek/scrindex.dtx
+2020/08/12 | 289199 | macros/latex/contrib/oberdiek/scrindex.pdf
+2020/08/12 | 29459 | macros/latex/contrib/oberdiek/setouterhbox.dtx
+2020/08/12 | 335268 | macros/latex/contrib/oberdiek/setouterhbox.pdf
+2020/08/12 | 20045 | macros/latex/contrib/oberdiek/settobox.dtx
+2020/08/12 | 299200 | macros/latex/contrib/oberdiek/settobox.pdf
+2020/08/12 | 13782 | macros/latex/contrib/oberdiek/stackrel.dtx
+2020/08/12 | 287648 | macros/latex/contrib/oberdiek/stackrel.pdf
+2020/08/12 | 18499 | macros/latex/contrib/oberdiek/stampinclude.dtx
+2020/08/12 | 283435 | macros/latex/contrib/oberdiek/stampinclude.pdf
+2020/08/12 | 31131 | macros/latex/contrib/oberdiek/tabularht.dtx
+2020/08/12 | 336823 | macros/latex/contrib/oberdiek/tabularht.pdf
+2020/08/12 | 13344 | macros/latex/contrib/oberdiek/tabularkv.dtx
+2020/08/12 | 260615 | macros/latex/contrib/oberdiek/tabularkv.pdf
+2020/08/12 | 24890 | macros/latex/contrib/oberdiek/telprint.dtx
+2020/08/12 | 309114 | macros/latex/contrib/oberdiek/telprint.pdf
+2020/08/12 | 32949 | macros/latex/contrib/oberdiek/thepdfnumber.dtx
+2020/08/12 | 352882 | macros/latex/contrib/oberdiek/thepdfnumber.pdf
+2020/08/12 | 16829 | macros/latex/contrib/oberdiek/twoopt.dtx
+2020/08/12 | 280332 | macros/latex/contrib/oberdiek/twoopt.pdf
+2020/08/13 | 13697377 | macros/latex/contrib/oberdiek.zip
1997/01/07 | 192 | macros/latex/contrib/objectz/catalog
1996/08/06 | 79 | macros/latex/contrib/objectz/makefile
1997/01/07 | 448 | macros/latex/contrib/objectz/manifest
@@ -197376,6 +197376,10 @@
2010/02/04 | 8075 | macros/latex/contrib/pagerange/pagerange.sty
2010/02/04 | 1524 | macros/latex/contrib/pagerange/README
2010/02/04 | 87585 | macros/latex/contrib/pagerange.zip
+2020/08/12 | 25303 | macros/latex/contrib/pagesel/pagesel.dtx
+2020/08/12 | 332616 | macros/latex/contrib/pagesel/pagesel.pdf
+2020/08/12 | 317 | macros/latex/contrib/pagesel/README.md
+2020/08/13 | 336114 | macros/latex/contrib/pagesel.zip
2015/12/21 | 214506 | macros/latex/contrib/pageslts/pageslts.dtx
2015/12/21 | 323567 | macros/latex/contrib/pageslts/pageslts-example.pdf
2015/12/21 | 619343 | macros/latex/contrib/pageslts/pageslts.pdf
@@ -255038,9 +255042,9 @@
2019/02/28 | 8492 | systems/texlive/tlnet/archive/apa6e.source.r23350.tar.xz
2020/01/15 | 13760 | systems/texlive/tlnet/archive/apa6.r53406.tar.xz
2020/01/15 | 37360 | systems/texlive/tlnet/archive/apa6.source.r53406.tar.xz
-2020/08/04 | 726844 | systems/texlive/tlnet/archive/apa7.doc.r56037.tar.xz
-2020/08/04 | 13992 | systems/texlive/tlnet/archive/apa7.r56037.tar.xz
-2020/08/04 | 32232 | systems/texlive/tlnet/archive/apa7.source.r56037.tar.xz
+2020/08/13 | 727480 | systems/texlive/tlnet/archive/apa7.doc.r56095.tar.xz
+2020/08/13 | 14104 | systems/texlive/tlnet/archive/apa7.r56095.tar.xz
+2020/08/13 | 32372 | systems/texlive/tlnet/archive/apa7.source.r56095.tar.xz
2020/03/04 | 641176 | systems/texlive/tlnet/archive/apacite.doc.r54080.tar.xz
2020/03/04 | 42736 | systems/texlive/tlnet/archive/apacite.r54080.tar.xz
2020/03/04 | 162688 | systems/texlive/tlnet/archive/apacite.source.r54080.tar.xz
@@ -255164,8 +255168,8 @@
2020/04/15 | 12216 | systems/texlive/tlnet/archive/askinclude.source.r54725.tar.xz
2019/02/28 | 313504 | systems/texlive/tlnet/archive/askmaps.doc.r32320.tar.xz
2019/02/28 | 2436 | systems/texlive/tlnet/archive/askmaps.r32320.tar.xz
-2020/04/16 | 401200 | systems/texlive/tlnet/archive/asmeconf.doc.r54758.tar.xz
-2020/04/16 | 17360 | systems/texlive/tlnet/archive/asmeconf.r54758.tar.xz
+2020/08/13 | 583924 | systems/texlive/tlnet/archive/asmeconf.doc.r56096.tar.xz
+2020/08/13 | 18020 | systems/texlive/tlnet/archive/asmeconf.r56096.tar.xz
2020/08/12 | 588352 | systems/texlive/tlnet/archive/asmejour.doc.r56092.tar.xz
2020/08/12 | 18208 | systems/texlive/tlnet/archive/asmejour.r56092.tar.xz
2019/02/28 | 337268 | systems/texlive/tlnet/archive/aspectratio.doc.r25243.tar.xz
@@ -255653,7 +255657,7 @@
2020/04/22 | 787504 | systems/texlive/tlnet/archive/bearwear.doc.r54826.tar.xz
2020/04/22 | 2376 | systems/texlive/tlnet/archive/bearwear.r54826.tar.xz
2020/04/22 | 5992 | systems/texlive/tlnet/archive/bearwear.source.r54826.tar.xz
-2020/08/12 | 829560 | systems/texlive/tlnet/archive/beebe.r56091.tar.xz
+2020/08/13 | 832552 | systems/texlive/tlnet/archive/beebe.r56094.tar.xz
2019/02/28 | 709916 | systems/texlive/tlnet/archive/begingreek.doc.r36294.tar.xz
2019/02/28 | 1664 | systems/texlive/tlnet/archive/begingreek.r36294.tar.xz
2019/02/28 | 7448 | systems/texlive/tlnet/archive/begingreek.source.r36294.tar.xz
@@ -267138,16 +267142,16 @@
2020/07/18 | 47816 | systems/texlive/tlnet/archive/zztex.doc.r55862.tar.xz
2020/07/18 | 101724 | systems/texlive/tlnet/archive/zztex.r55862.tar.xz
2020/06/13 | 105829 | systems/texlive/tlnet/install-tl
-2020/08/12 | 5500818 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/08/12 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/08/12 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/08/13 | 5500839 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/08/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/08/13 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/05/31 | 4770 | systems/texlive/tlnet/install-tl-windows.bat
-2020/08/12 | 19380237 | systems/texlive/tlnet/install-tl-windows.exe
-2020/08/12 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/08/12 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/08/12 | 24269337 | systems/texlive/tlnet/install-tl.zip
-2020/08/12 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/08/12 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/08/13 | 19380240 | systems/texlive/tlnet/install-tl-windows.exe
+2020/08/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/08/13 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/08/13 | 24269337 | systems/texlive/tlnet/install-tl.zip
+2020/08/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/08/13 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2020/03/05 | 1215 | systems/texlive/tlnet/README.md
2020/04/06 | 5961 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
@@ -267203,12 +267207,12 @@
2020/05/17 | 20322 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2020/05/03 | 4786 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2020/08/06 | 27567 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/08/12 | 16375099 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/08/12 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/08/13 | 16375191 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/08/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/05/13 | 86417 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2020/08/12 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/08/12 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/08/12 | 2213208 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/08/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/08/13 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/08/13 | 2213108 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/04/15 | 58761 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2020/03/20 | 41736 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/05/11 | 15010 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -271694,7 +271698,7 @@
2020/02/04 | 281488 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2020/08/12 | 541476 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/08/13 | 541476 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -272857,9 +272861,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/08/01 | 38929 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/08/01 | 43039 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/08/12 | 202229 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/08/12 | 1210388 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/08/12 | 1129363 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/08/13 | 202214 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/08/13 | 1210861 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/08/13 | 1130273 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/08/01 | 13102 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/08/01 | 14104 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -273013,187 +273017,187 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2019/09/11 | 231430 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2020/08/12 | 541462 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/08/12 | 59342 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/08/12 | 67257 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/08/12 | 956331 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/08/12 | 1061413 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/08/12 | 28605 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/08/12 | 30909 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/08/12 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/08/12 | 34773 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/08/12 | 49591 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/08/12 | 57160 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/08/12 | 84661 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/08/12 | 93639 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/08/12 | 65818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/08/12 | 73450 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/08/12 | 27008 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/08/12 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/08/12 | 329618 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/08/12 | 392367 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/08/12 | 32351 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/08/12 | 36361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/08/12 | 72254 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/08/12 | 79418 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/08/12 | 203963 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/08/12 | 224086 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/08/12 | 169654 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/08/12 | 184490 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/08/12 | 51936 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/08/12 | 58659 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/08/12 | 20816 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/08/12 | 22979 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/08/12 | 460432 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/08/12 | 45319 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/08/12 | 51135 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/08/12 | 273698 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/08/12 | 310934 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/08/12 | 40821 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/08/12 | 45031 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/08/12 | 115880 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/08/12 | 130358 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/08/12 | 1265430 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/08/12 | 1404301 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/08/12 | 95399 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/08/12 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/08/12 | 43313 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/08/12 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/08/12 | 46357 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/08/12 | 51236 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/08/12 | 57148 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/08/12 | 62977 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/08/12 | 133655 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/08/12 | 151864 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/08/12 | 72862 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/08/12 | 77366 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/08/12 | 68968 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/08/12 | 77315 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/08/12 | 246825 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/08/12 | 281780 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/08/12 | 25502 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/08/12 | 29058 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/08/12 | 100919 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/08/12 | 116786 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/08/12 | 63512 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/08/12 | 72613 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/08/12 | 94381 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/08/12 | 113582 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/08/12 | 59040 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/08/12 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/08/12 | 462707 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/08/12 | 549968 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/08/12 | 141852 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/08/12 | 154419 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/08/12 | 94512 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/08/12 | 108991 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/08/12 | 15948 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/08/12 | 17625 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/08/12 | 27801 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/08/12 | 29637 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/08/12 | 623926 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/08/12 | 677578 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/08/12 | 500568 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/08/12 | 561888 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/08/12 | 544358 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/08/12 | 583963 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/08/12 | 93621 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/08/12 | 102588 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/08/12 | 1746183 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/08/12 | 2031792 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/08/12 | 67277 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/08/12 | 73690 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/08/12 | 26996 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/08/12 | 31252 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/08/12 | 7548 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/08/12 | 8567 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/08/12 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/08/12 | 211538 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/08/12 | 269404 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/08/12 | 305085 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/08/12 | 96480 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/08/12 | 101782 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/08/12 | 79692 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/08/12 | 88873 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/08/12 | 170418 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/08/12 | 189152 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/08/12 | 159877 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/08/12 | 180901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/08/12 | 196318 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/08/12 | 177374 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/08/12 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/08/12 | 96846 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/08/12 | 31224 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/08/12 | 35032 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/08/12 | 57313 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/08/12 | 64237 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/08/12 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/08/12 | 69913 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/08/12 | 45774 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/08/12 | 52202 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/08/12 | 192588 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/08/12 | 210278 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/08/12 | 35214 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2020/08/12 | 39333 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2020/08/12 | 327551 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/08/12 | 360763 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/08/12 | 187718 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/08/12 | 193834 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/08/12 | 207671 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/08/12 | 243053 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/08/12 | 78100 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/08/12 | 87297 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/08/12 | 922273 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/08/12 | 1021968 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/08/12 | 20007 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/08/12 | 23600 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/08/12 | 31210 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/08/12 | 36864 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/08/12 | 63554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/08/12 | 71553 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/08/12 | 42621 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/08/12 | 50913 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/08/12 | 1192970 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/08/12 | 1325259 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/08/12 | 42062 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/08/12 | 51421 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/08/12 | 76796 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2020/08/12 | 82785 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
-2020/08/12 | 26852 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/08/12 | 29027 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/08/12 | 16021 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/08/12 | 17728 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/08/12 | 63426 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/08/12 | 69184 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/08/12 | 151837 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/08/12 | 165592 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/08/12 | 77488 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/08/12 | 87981 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/08/12 | 97375 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/08/12 | 104548 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/08/12 | 2534480 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/08/12 | 2657476 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/08/12 | 55562 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/08/12 | 62027 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/08/12 | 33089 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2020/08/12 | 36920 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/08/12 | 26613 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/08/12 | 32393 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/08/12 | 66014 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/08/12 | 70141 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/08/12 | 250290 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/08/12 | 279882 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/08/12 | 597779 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/08/12 | 638663 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/08/12 | 39268 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/08/12 | 43074 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/08/12 | 202267 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/08/12 | 1211043 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/08/12 | 1129913 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/08/12 | 13127 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/08/12 | 14132 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/08/13 | 541462 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/08/13 | 59342 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/08/13 | 67257 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/08/13 | 956333 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/08/13 | 1061413 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/08/13 | 28606 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/08/13 | 30910 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/08/13 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/08/13 | 34774 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/08/13 | 49592 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/08/13 | 57161 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/08/13 | 84662 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/08/13 | 93640 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/08/13 | 65818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/08/13 | 73450 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/08/13 | 27008 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/08/13 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/08/13 | 329618 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/08/13 | 392367 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/08/13 | 32350 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/08/13 | 36361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/08/13 | 72255 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/08/13 | 79419 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/08/13 | 203966 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/08/13 | 224087 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/08/13 | 169656 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/08/13 | 184490 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/08/13 | 51937 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/08/13 | 58660 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/08/13 | 20817 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/08/13 | 22982 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/08/13 | 460434 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/08/13 | 45320 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/08/13 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/08/13 | 273699 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/08/13 | 310935 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/08/13 | 40820 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/08/13 | 45032 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/08/13 | 115882 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/08/13 | 130357 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/08/13 | 1265431 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/08/13 | 1404303 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/08/13 | 95398 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/08/13 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/08/13 | 43314 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/08/13 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/08/13 | 46356 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/08/13 | 51235 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/08/13 | 57148 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/08/13 | 62976 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/08/13 | 133656 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/08/13 | 151863 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/08/13 | 72860 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/08/13 | 77366 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/08/13 | 68968 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/08/13 | 77315 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/08/13 | 246824 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/08/13 | 281780 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/08/13 | 25503 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/08/13 | 29058 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/08/13 | 100919 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/08/13 | 116786 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/08/13 | 63515 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/08/13 | 72612 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/08/13 | 94382 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/08/13 | 113581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/08/13 | 59041 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/08/13 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/08/13 | 462707 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/08/13 | 549964 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/08/13 | 141852 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/08/13 | 154418 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/08/13 | 94512 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/08/13 | 108989 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/08/13 | 15949 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/08/13 | 17625 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/08/13 | 27800 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/08/13 | 29637 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/08/13 | 623928 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/08/13 | 677578 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/08/13 | 500567 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/08/13 | 561892 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/08/13 | 544359 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/08/13 | 583964 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/08/13 | 93622 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/08/13 | 102587 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/08/13 | 1746185 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/08/13 | 2031792 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/08/13 | 67277 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/08/13 | 73690 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/08/13 | 26996 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/08/13 | 31253 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/08/13 | 7548 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/08/13 | 8567 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/08/13 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/08/13 | 211538 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/08/13 | 269403 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/08/13 | 305085 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/08/13 | 96480 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/08/13 | 101782 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/08/13 | 79689 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/08/13 | 88872 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/08/13 | 170419 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/08/13 | 189151 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/08/13 | 159878 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/08/13 | 180901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/08/13 | 196319 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/08/13 | 177376 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/08/13 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/08/13 | 96846 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/08/13 | 31224 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/08/13 | 35034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/08/13 | 57314 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/08/13 | 64238 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/08/13 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/08/13 | 69912 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/08/13 | 45776 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/08/13 | 52201 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/08/13 | 192588 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/08/13 | 210277 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/08/13 | 35215 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/08/13 | 39331 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/08/13 | 327553 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/08/13 | 360762 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/08/13 | 187720 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/08/13 | 193834 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/08/13 | 207671 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/08/13 | 243053 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/08/13 | 78101 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/08/13 | 87297 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/08/13 | 922274 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/08/13 | 1021969 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/08/13 | 20007 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/08/13 | 23600 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/08/13 | 31209 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/08/13 | 36864 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/08/13 | 63554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/08/13 | 71552 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/08/13 | 42621 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/08/13 | 50913 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/08/13 | 1192973 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/08/13 | 1325257 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/08/13 | 42062 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/08/13 | 51420 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/08/13 | 76796 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/08/13 | 82786 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/08/13 | 26852 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/08/13 | 29027 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/08/13 | 16023 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/08/13 | 17727 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/08/13 | 63429 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/08/13 | 69183 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/08/13 | 151836 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/08/13 | 165592 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/08/13 | 77487 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/08/13 | 87981 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/08/13 | 97375 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/08/13 | 104546 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/08/13 | 2534479 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/08/13 | 2657476 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/08/13 | 55562 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/08/13 | 62025 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/08/13 | 33089 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/08/13 | 36921 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/08/13 | 26612 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/08/13 | 32392 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/08/13 | 66014 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/08/13 | 70139 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/08/13 | 250289 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/08/13 | 279881 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/08/13 | 597779 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/08/13 | 638663 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/08/13 | 39268 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/08/13 | 43074 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/08/13 | 202238 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/08/13 | 1211397 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/08/13 | 1130090 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/08/13 | 13126 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/08/13 | 14130 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2020/08/12 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/08/13 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -273511,7 +273515,7 @@
2008/11/07 | 35981 | systems/win32/miktex/tm/packages/prettyref.tar.lzma
2017/07/26 | 201385 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
-2020/08/12 | 870 | systems/win32/miktex/tm/packages/pr.ini
+2020/08/13 | 870 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -274661,7 +274665,7 @@
2020/08/08 | 4912168 | systems/win32/w32tex/aleph-w32.tar.xz
2020/08/10 | 66009548 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/08/11 | 695869 | systems/win32/w32tex/ChangeLog
+2020/08/12 | 696116 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -274669,14 +274673,14 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2020/07/09 | 23424956 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2020/08/09 | 140561664 | systems/win32/w32tex/context.tar.xz
+2020/08/11 | 140567912 | systems/win32/w32tex/context.tar.xz
2020/06/13 | 910472 | systems/win32/w32tex/cweb-w32.tar.xz
2020/03/02 | 6281164 | systems/win32/w32tex/datetime2.tar.xz
2020/06/13 | 845760 | systems/win32/w32tex/dvi2ps-w32.tar.xz
2020/06/13 | 483880 | systems/win32/w32tex/dvi2tty-w32.tar.xz
2020/08/07 | 4661044 | systems/win32/w32tex/dvipdfm-w32.tar.xz
2020/06/13 | 4550104 | systems/win32/w32tex/dvipsk-w32.tar.xz
-2020/06/13 | 2644944 | systems/win32/w32tex/dvitools-w32.tar.xz
+2020/08/12 | 2644436 | systems/win32/w32tex/dvitools-w32.tar.xz
2020/08/02 | 1176872 | systems/win32/w32tex/extractpdfmark-w32.tar.xz
2020/06/13 | 17351036 | systems/win32/w32tex/gregorio-w32.tar.xz
2009/08/03 | 1072620 | systems/win32/w32tex/gtftex.zip
@@ -274741,13 +274745,13 @@
2020/07/30 | 45622296 | systems/win32/w32tex/web2c-w32.tar.xz
2020/07/07 | 810800 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2019/12/09 | 22317480 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
-2020/08/09 | 2151792 | systems/win32/w32tex/win64/context-w64.tar.xz
+2020/08/11 | 2151744 | systems/win32/w32tex/win64/context-w64.tar.xz
2020/06/13 | 82884 | systems/win32/w32tex/win64/cweb-w64.tar.xz
2020/06/13 | 758152 | systems/win32/w32tex/win64/dvi2ps-w64.tar.xz
2020/06/13 | 447760 | systems/win32/w32tex/win64/dvi2tty-w64.tar.xz
2020/08/07 | 803580 | systems/win32/w32tex/win64/dvipdfm-w64.tar.xz
2020/06/13 | 759644 | systems/win32/w32tex/win64/dvipsk-w64.tar.xz
-2020/06/13 | 2352096 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
+2020/08/12 | 2354796 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
2020/08/02 | 1087836 | systems/win32/w32tex/win64/extractpdfmark-w64.tar.xz
2020/06/13 | 304720 | systems/win32/w32tex/win64/gregorio-w64.tar.xz
2020/07/07 | 587744 | systems/win32/w32tex/win64/jtex-w64.tar.xz
@@ -274877,7 +274881,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/08/13 | 186 | timestamp
+2020/08/14 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 1ca017e743..44ca21db04 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 44d74c61c5..db9caf2fd4 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,243 +1,388 @@
+2020/08/13 | 98322 | language/marathi.zip
+2020/08/13 | 97375 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/08/13 | 96846 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/08/13 | 96480 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/08/13 | 956333 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/08/13 | 95398 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/08/13 | 94512 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/08/13 | 94382 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/08/13 | 93640 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/08/13 | 93622 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/08/13 | 922274 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/08/13 | 88872 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/08/13 | 87981 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/08/13 | 87297 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/08/13 | 870 | systems/win32/miktex/tm/packages/pr.ini
+2020/08/13 | 8567 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/08/13 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/08/13 | 84662 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/08/13 | 83427 | language/marathi/marathi.pdf
+2020/08/13 | 832552 | systems/texlive/tlnet/archive/beebe.r56094.tar.xz
+2020/08/13 | 82786 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/08/13 | 79689 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/08/13 | 79419 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/08/13 | 78101 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/08/13 | 77487 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/08/13 | 77366 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/08/13 | 77315 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/08/13 | 76796 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
+2020/08/13 | 7548 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/08/13 | 73690 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/08/13 | 73450 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/08/13 | 72860 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/08/13 | 727480 | systems/texlive/tlnet/archive/apa7.doc.r56095.tar.xz
+2020/08/13 | 72612 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/08/13 | 72255 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/08/13 | 71552 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/08/13 | 70139 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/08/13 | 69912 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/08/13 | 69183 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/08/13 | 68968 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/08/13 | 677578 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/08/13 | 67277 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/08/13 | 67257 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/08/13 | 66014 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/08/13 | 65818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/08/13 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/08/13 | 64238 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/08/13 | 638663 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/08/13 | 63554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/08/13 | 63515 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/08/13 | 63429 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/08/13 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/08/13 | 62976 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/08/13 | 623928 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/08/13 | 62025 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/08/13 | 597779 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/08/13 | 59342 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/08/13 | 59041 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/08/13 | 58660 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/08/13 | 583964 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/08/13 | 583924 | systems/texlive/tlnet/archive/asmeconf.doc.r56096.tar.xz
+2020/08/13 | 57314 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/08/13 | 57161 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/08/13 | 57148 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/08/13 | 561892 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/08/13 | 55562 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/08/13 | 5500839 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/08/13 | 549964 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/08/13 | 544359 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/08/13 | 541476 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/08/13 | 541462 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/08/13 | 52201 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/08/13 | 52192 | macros/latex/contrib/chhaya.zip
+2020/08/13 | 51937 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/08/13 | 51420 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/08/13 | 51235 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/08/13 | 51137 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/08/13 | 50913 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/08/13 | 500567 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/08/13 | 49592 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/08/13 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/08/13 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/08/13 | 46743 | macros/latex/contrib/chhaya/chhaya.pdf
+2020/08/13 | 46356 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/08/13 | 462707 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/08/13 | 460434 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
+2020/08/13 | 45776 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/08/13 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/08/13 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/08/13 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/08/13 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/08/13 | 45320 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/08/13 | 45032 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/08/13 | 43314 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/08/13 | 43074 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/08/13 | 42621 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/08/13 | 42062 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/08/13 | 40820 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/08/13 | 39331 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
+2020/08/13 | 39268 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/08/13 | 392367 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/08/13 | 38114 | language/marathi/marathi.dtx
+2020/08/13 | 36921 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
+2020/08/13 | 36864 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/08/13 | 36361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/08/13 | 360762 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/08/13 | 35215 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
+2020/08/13 | 35034 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/08/13 | 3489091 | dviware/dvisvgm.zip
+2020/08/13 | 34774 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/08/13 | 336114 | macros/latex/contrib/pagesel.zip
+2020/08/13 | 33089 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
+2020/08/13 | 329618 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/08/13 | 327553 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/08/13 | 32392 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/08/13 | 32372 | systems/texlive/tlnet/archive/apa7.source.r56095.tar.xz
+2020/08/13 | 32350 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/08/13 | 31253 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/08/13 | 31224 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/08/13 | 31209 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/08/13 | 310935 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/08/13 | 30910 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/08/13 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/08/13 | 307210 | macros/latex/contrib/hopatch.zip
+2020/08/13 | 305085 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/08/13 | 29637 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/08/13 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/08/13 | 29058 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/08/13 | 29027 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/08/13 | 28606 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/08/13 | 281780 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/08/13 | 279881 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/08/13 | 27800 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/08/13 | 2752 | language/marathi/marathi.ins
+2020/08/13 | 273699 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/08/13 | 27008 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/08/13 | 26996 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/08/13 | 2698 | macros/latex/contrib/chhaya/chhaya.ins
+2020/08/13 | 269403 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/08/13 | 26852 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/08/13 | 26612 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/08/13 | 2657476 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/08/13 | 25503 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/08/13 | 2534479 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/08/13 | 2502 | macros/latex/contrib/chhaya/sankshep.tex
+2020/08/13 | 250289 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/08/13 | 246824 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/08/13 | 2457 | language/marathi/README.txt
+2020/08/13 | 243053 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/08/13 | 24269337 | systems/texlive/tlnet/install-tl.zip
+2020/08/13 | 237 | macros/latex/contrib/chhaya/ref.bib
+2020/08/13 | 23600 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/08/13 | 22982 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/08/13 | 224087 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/08/13 | 2213108 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/08/13 | 211538 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/08/13 | 210277 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/08/13 | 20817 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/08/13 | 207671 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/08/13 | 203966 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/08/13 | 2031792 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/08/13 | 202238 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/08/13 | 202214 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/08/13 | 20007 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/08/13 | 196319 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/08/13 | 193834 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/08/13 | 19380240 | systems/texlive/tlnet/install-tl-windows.exe
+2020/08/13 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/08/13 | 192588 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/08/13 | 189151 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/08/13 | 187720 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/08/13 | 184490 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/08/13 | 180901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/08/13 | 18020 | systems/texlive/tlnet/archive/asmeconf.r56096.tar.xz
+2020/08/13 | 177376 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/08/13 | 17727 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/08/13 | 17625 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/08/13 | 1746185 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/08/13 | 170419 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/08/13 | 169656 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/08/13 | 165592 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/08/13 | 16375191 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/08/13 | 16023 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/08/13 | 159878 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/08/13 | 15949 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/08/13 | 154418 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/08/13 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/08/13 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/08/13 | 151863 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/08/13 | 151836 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/08/13 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/08/13 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/08/13 | 141852 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/08/13 | 14130 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/08/13 | 14104 | systems/texlive/tlnet/archive/apa7.r56095.tar.xz
+2020/08/13 | 14064 | macros/latex/contrib/chhaya/chhaya.dtx
+2020/08/13 | 1404303 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/08/13 | 13697377 | macros/latex/contrib/oberdiek.zip
+2020/08/13 | 133656 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/08/13 | 1325257 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/08/13 | 13126 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/08/13 | 130357 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/08/13 | 1265431 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/08/13 | 1211397 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/08/13 | 1210 | macros/latex/contrib/chhaya/README.txt
+2020/08/13 | 1210861 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/08/13 | 1192973 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/08/13 | 116786 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/08/13 | 115882 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/08/13 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/08/13 | 113581 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/08/13 | 1130273 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/08/13 | 1130090 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/08/13 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/08/13 | 108989 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/08/13 | 1061413 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/08/13 | 104546 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/08/13 | 102587 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/08/13 | 1021969 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/08/13 | 101782 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/08/13 | 100919 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
2020/08/12 | 979294 | macros/latex/contrib/asmeconf.zip
-2020/08/12 | 97375 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/08/12 | 96846 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/08/12 | 96480 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/08/12 | 956331 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/08/12 | 95399 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/08/12 | 94512 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/08/12 | 94381 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/08/12 | 93639 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/08/12 | 93621 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/08/12 | 922273 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/08/12 | 88873 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/08/12 | 87981 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/08/12 | 87297 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/08/12 | 870 | systems/win32/miktex/tm/packages/pr.ini
-2020/08/12 | 8567 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/08/12 | 85159 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/08/12 | 84661 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/08/12 | 829560 | systems/texlive/tlnet/archive/beebe.r56091.tar.xz
-2020/08/12 | 82785 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64.tar.lzma
+2020/08/12 | 938 | macros/latex/contrib/oberdiek/oberdiek-source.bib
+2020/08/12 | 8409 | dviware/dvisvgm/configure.ac
2020/08/12 | 826323 | macros/latex/contrib/apa7.zip
2020/08/12 | 824717 | macros/latex/contrib/asmejour.zip
-2020/08/12 | 79692 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/08/12 | 79418 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/08/12 | 78100 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/08/12 | 77488 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/08/12 | 77366 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/08/12 | 77315 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/08/12 | 76796 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin.tar.lzma
-2020/08/12 | 7548 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/08/12 | 73690 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/08/12 | 73450 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/08/12 | 72862 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/08/12 | 72613 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/08/12 | 72254 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/08/12 | 71553 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/08/12 | 70141 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/08/12 | 69913 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/08/12 | 69184 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/08/12 | 68968 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/08/12 | 677578 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/08/12 | 67277 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/08/12 | 67257 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/08/12 | 66014 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/08/12 | 65818 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/08/12 | 65546 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/08/12 | 7182 | macros/latex/contrib/oberdiek/oberdiek-bundle.bib
+2020/08/12 | 696116 | systems/win32/w32tex/ChangeLog
+2020/08/12 | 682149 | dviware/dvisvgm/configure
+2020/08/12 | 66665 | dviware/dvisvgm/doc/dvisvgm.1
2020/08/12 | 6535 | macros/latex/contrib/apa7/apa7.ins
-2020/08/12 | 64237 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
2020/08/12 | 64106 | macros/latex/contrib/apa7/samples/shortsample.pdf
-2020/08/12 | 638663 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/08/12 | 63554 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/08/12 | 63512 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/08/12 | 63426 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/08/12 | 63361 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/08/12 | 62977 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/08/12 | 623926 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/08/12 | 62027 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
2020/08/12 | 619315 | macros/latex/contrib/asmejour/asmejour-template.pdf
-2020/08/12 | 597779 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2020/08/12 | 5975 | macros/latex/contrib/asmejour/README.md
-2020/08/12 | 59342 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/08/12 | 59040 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/08/12 | 59734 | dviware/dvisvgm/src/Makefile.in
2020/08/12 | 588352 | systems/texlive/tlnet/archive/asmejour.doc.r56092.tar.xz
-2020/08/12 | 58659 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/08/12 | 583963 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/08/12 | 57313 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/08/12 | 57160 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/08/12 | 57148 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/08/12 | 561888 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/08/12 | 56818 | dviware/dvisvgm/aclocal.m4
2020/08/12 | 5579 | macros/latex/contrib/asmeconf/README.md
-2020/08/12 | 55562 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/08/12 | 5500818 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/08/12 | 549968 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/08/12 | 544358 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/08/12 | 541476 | systems/win32/miktex/tm/packages/files.csv.lzma
-2020/08/12 | 541462 | systems/win32/miktex/tm/packages/next/files.csv.lzma
2020/08/12 | 537343 | macros/latex/contrib/asmeconf/asmeconf-template.pdf
2020/08/12 | 527794 | macros/latex/contrib/apa7/apa7.pdf
-2020/08/12 | 52202 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/08/12 | 51936 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/08/12 | 51421 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/08/12 | 51236 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/08/12 | 51135 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/08/12 | 50913 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/08/12 | 517711 | macros/latex/contrib/oberdiek/resizegather.pdf
2020/08/12 | 504119 | support/xml2pmx.zip
-2020/08/12 | 500568 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/08/12 | 49591 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/08/12 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2020/08/12 | 48086 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/08/12 | 503673 | macros/latex/contrib/oberdiek/bmpsize.pdf
2020/08/12 | 477842 | macros/latex/contrib/aomart/aomsample1.pdf
2020/08/12 | 477825 | macros/latex/contrib/aomart/aomsample.pdf
-2020/08/12 | 46357 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/08/12 | 462707 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/08/12 | 460432 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma
-2020/08/12 | 45774 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/08/12 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/08/12 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2020/08/12 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/08/12 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
-2020/08/12 | 45319 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/08/12 | 45031 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/08/12 | 43313 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/08/12 | 43074 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/08/12 | 42621 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/08/12 | 42062 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/08/12 | 46934 | macros/latex/contrib/oberdiek/pdfrender.dtx
+2020/08/12 | 4369 | dviware/dvisvgm/config.h.in
+2020/08/12 | 432 | macros/latex/contrib/hopatch/README.md
2020/08/12 | 413744 | macros/latex/contrib/aomart/aomart.pdf
-2020/08/12 | 40821 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/08/12 | 39333 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2020/08/12 | 39268 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/08/12 | 392367 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/08/12 | 408460 | dviware/dvisvgm/ChangeLog
+2020/08/12 | 40554 | dviware/dvisvgm/libs/ff-woff/Makefile.in
2020/08/12 | 39126 | macros/latex/contrib/asmejour/asmejour-template.tex
+2020/08/12 | 388493 | macros/latex/contrib/oberdiek/pdfrender.pdf
2020/08/12 | 37400 | macros/latex/contrib/asmeconf/asmeconf-template.tex
-2020/08/12 | 36920 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma
-2020/08/12 | 36864 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/08/12 | 36361 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/08/12 | 360763 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/08/12 | 36743 | dviware/dvisvgm/NEWS
+2020/08/12 | 3648358 | info/biblio/tugboat.bib
+2020/08/12 | 359960 | macros/latex/contrib/oberdiek/fibnum.pdf
+2020/08/12 | 35799 | macros/latex/contrib/oberdiek/hypdoc.dtx
2020/08/12 | 35596 | macros/latex/contrib/asmeconf/asmeconf.cls
-2020/08/12 | 35214 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin.tar.lzma
-2020/08/12 | 35032 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/08/12 | 34773 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/08/12 | 352882 | macros/latex/contrib/oberdiek/thepdfnumber.pdf
+2020/08/12 | 336823 | macros/latex/contrib/oberdiek/tabularht.pdf
+2020/08/12 | 335268 | macros/latex/contrib/oberdiek/setouterhbox.pdf
+2020/08/12 | 332616 | macros/latex/contrib/pagesel/pagesel.pdf
2020/08/12 | 3318 | support/xml2pmx/README
-2020/08/12 | 33089 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin.tar.lzma
-2020/08/12 | 329618 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/08/12 | 327551 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/08/12 | 32393 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/08/12 | 32351 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/08/12 | 31252 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/08/12 | 31224 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/08/12 | 31210 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/08/12 | 310934 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/08/12 | 30909 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/08/12 | 30890 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/08/12 | 305085 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/08/12 | 32949 | macros/latex/contrib/oberdiek/thepdfnumber.dtx
+2020/08/12 | 326040 | macros/latex/contrib/oberdiek/pdfcolparallel.pdf
+2020/08/12 | 325461 | macros/latex/contrib/oberdiek/hypdoc.pdf
+2020/08/12 | 324486 | macros/latex/contrib/oberdiek/engord.pdf
+2020/08/12 | 323105 | macros/latex/contrib/oberdiek/hypdestopt.pdf
+2020/08/12 | 323082 | macros/latex/contrib/oberdiek/rotchiffre.pdf
+2020/08/12 | 322360 | macros/latex/contrib/oberdiek/eolgrab.pdf
+2020/08/12 | 320322 | macros/latex/contrib/oberdiek/iflang.pdf
+2020/08/12 | 317 | macros/latex/contrib/pagesel/README.md
+2020/08/12 | 317241 | macros/latex/contrib/oberdiek/pagegrid.pdf
+2020/08/12 | 317206 | macros/latex/contrib/oberdiek/pdfcrypt.pdf
+2020/08/12 | 31488 | dviware/dvisvgm/libs/brotli/Makefile.in
+2020/08/12 | 313719 | macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
+2020/08/12 | 313619 | macros/latex/contrib/oberdiek/protecteddef.pdf
+2020/08/12 | 311828 | macros/latex/contrib/oberdiek/holtxdoc.pdf
+2020/08/12 | 31131 | macros/latex/contrib/oberdiek/tabularht.dtx
+2020/08/12 | 310601 | macros/latex/contrib/oberdiek/enparen.pdf
+2020/08/12 | 309114 | macros/latex/contrib/oberdiek/telprint.pdf
+2020/08/12 | 308360 | macros/latex/contrib/oberdiek/pdfcol.pdf
+2020/08/12 | 305692 | macros/latex/contrib/oberdiek/hyphsubst.pdf
+2020/08/12 | 304161 | macros/latex/contrib/hopatch/hopatch.pdf
+2020/08/12 | 3035 | macros/latex/contrib/oberdiek/README.md
+2020/08/12 | 300028 | macros/latex/contrib/oberdiek/pdfcolfoot.pdf
+2020/08/12 | 299200 | macros/latex/contrib/oberdiek/settobox.pdf
+2020/08/12 | 298594 | macros/latex/contrib/oberdiek/aliascnt.pdf
2020/08/12 | 29726 | macros/latex/contrib/asmejour/asmejour.cls
-2020/08/12 | 29637 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/08/12 | 29399 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/08/12 | 29058 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/08/12 | 29027 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/08/12 | 295718 | macros/latex/contrib/oberdiek/hypbmsec.pdf
+2020/08/12 | 29459 | macros/latex/contrib/oberdiek/setouterhbox.dtx
+2020/08/12 | 294587 | macros/latex/contrib/oberdiek/chemarr.pdf
+2020/08/12 | 293225 | macros/latex/contrib/oberdiek/hopatch.pdf
+2020/08/12 | 291535 | macros/latex/contrib/oberdiek/hypgotoe.pdf
+2020/08/12 | 290302 | macros/latex/contrib/oberdiek/colonequals.pdf
+2020/08/12 | 289459 | macros/latex/contrib/oberdiek/flags.pdf
+2020/08/12 | 289452 | macros/latex/contrib/oberdiek/hypcap.pdf
+2020/08/12 | 289199 | macros/latex/contrib/oberdiek/scrindex.pdf
+2020/08/12 | 28881 | macros/latex/contrib/oberdiek/hypdestopt.dtx
+2020/08/12 | 287648 | macros/latex/contrib/oberdiek/stackrel.pdf
2020/08/12 | 287276 | support/xml2pmx/sources/xml2pmx-2020-08-12.tar.gz
-2020/08/12 | 28605 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/08/12 | 281780 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/08/12 | 279882 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/08/12 | 27801 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/08/12 | 273698 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/08/12 | 27008 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/08/12 | 26996 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/08/12 | 269404 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/08/12 | 26852 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/08/12 | 26613 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/08/12 | 2657476 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/08/12 | 283435 | macros/latex/contrib/oberdiek/stampinclude.pdf
+2020/08/12 | 281421 | macros/latex/contrib/oberdiek/oberdiek.pdf
+2020/08/12 | 28136 | macros/latex/contrib/oberdiek/pagegrid.dtx
+2020/08/12 | 280539 | macros/latex/contrib/oberdiek/centernot.pdf
+2020/08/12 | 280332 | macros/latex/contrib/oberdiek/twoopt.pdf
+2020/08/12 | 27847 | macros/latex/contrib/oberdiek/pdfcrypt.dtx
+2020/08/12 | 277313 | macros/latex/contrib/oberdiek/classlist.pdf
+2020/08/12 | 27672 | dviware/dvisvgm/Makefile.in
+2020/08/12 | 275213 | macros/latex/contrib/oberdiek/dvipscol.pdf
+2020/08/12 | 271317 | macros/latex/contrib/oberdiek/ifdraft.pdf
+2020/08/12 | 26994 | macros/latex/contrib/oberdiek/pdfcolparallel.dtx
+2020/08/12 | 26484 | macros/latex/contrib/oberdiek/pdfcol.dtx
+2020/08/12 | 2644436 | systems/win32/w32tex/dvitools-w32.tar.xz
2020/08/12 | 261995 | support/xml2pmx/Windows/xml2pmx.exe
-2020/08/12 | 25502 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/08/12 | 2534480 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/08/12 | 250290 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/08/12 | 246825 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/08/12 | 26109 | macros/latex/contrib/oberdiek/enparen.dtx
+2020/08/12 | 260615 | macros/latex/contrib/oberdiek/tabularkv.pdf
+2020/08/12 | 25810 | macros/latex/contrib/oberdiek/fibnum.dtx
+2020/08/12 | 25691 | macros/latex/contrib/oberdiek/rotchiffre.dtx
+2020/08/12 | 256010 | dviware/dvisvgm/tests/Makefile.in
+2020/08/12 | 25308 | macros/latex/contrib/oberdiek/iflang.dtx
+2020/08/12 | 25303 | macros/latex/contrib/pagesel/pagesel.dtx
+2020/08/12 | 25146 | macros/latex/contrib/oberdiek/hypbmsec.dtx
+2020/08/12 | 25097 | macros/latex/contrib/oberdiek/eolgrab.dtx
+2020/08/12 | 24890 | macros/latex/contrib/oberdiek/telprint.dtx
+2020/08/12 | 24780 | macros/latex/contrib/oberdiek/resizegather.dtx
+2020/08/12 | 24681 | dviware/dvisvgm/libs/woff2/Makefile.in
2020/08/12 | 246240 | macros/latex/contrib/asmeconf/author-grid-style.pdf
-2020/08/12 | 243053 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/08/12 | 24269337 | systems/texlive/tlnet/install-tl.zip
-2020/08/12 | 23600 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/08/12 | 22979 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/08/12 | 224086 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/08/12 | 2213208 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/08/12 | 24106 | macros/latex/contrib/oberdiek/engord.dtx
+2020/08/12 | 2354796 | systems/win32/w32tex/win64/dvitools-w64.tar.xz
+2020/08/12 | 2277 | macros/latex/contrib/oberdiek/oberdiek.ins
+2020/08/12 | 22166 | dviware/dvisvgm/src/optimizer/Makefile.in
2020/08/12 | 218656 | systems/texlive/tlnet/archive/texlive-scripts.doc.r56091.tar.xz
-2020/08/12 | 211538 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/08/12 | 210278 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/08/12 | 20816 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/08/12 | 207671 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/08/12 | 21668 | macros/latex/contrib/oberdiek/holtxdoc.dtx
+2020/08/12 | 21566 | macros/latex/contrib/hopatch/hopatch.dtx
+2020/08/12 | 21476 | macros/latex/contrib/oberdiek/hypcap.dtx
+2020/08/12 | 21343 | macros/latex/contrib/oberdiek/hyphsubst.dtx
+2020/08/12 | 21313 | dviware/dvisvgm/doc/Makefile.in
+2020/08/12 | 20819 | macros/latex/contrib/oberdiek/pdfcolparcolumns.dtx
+2020/08/12 | 20812 | macros/latex/contrib/oberdiek/protecteddef.dtx
+2020/08/12 | 20804 | dviware/dvisvgm/libs/potrace/Makefile.in
2020/08/12 | 204430 | macros/latex/contrib/aomart/aomfrench.pdf
-2020/08/12 | 203963 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/08/12 | 2031792 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/08/12 | 202267 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/08/12 | 202229 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/08/12 | 20007 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/08/12 | 20338 | dviware/dvisvgm/libs/clipper/Makefile.in
+2020/08/12 | 20045 | macros/latex/contrib/oberdiek/settobox.dtx
+2020/08/12 | 19936 | dviware/dvisvgm/libs/Makefile.in
2020/08/12 | 196742 | macros/latex/contrib/apa7/samples/longsample.pdf
-2020/08/12 | 196318 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/08/12 | 193834 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/08/12 | 19380237 | systems/texlive/tlnet/install-tl-windows.exe
-2020/08/12 | 192837 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/08/12 | 192588 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/08/12 | 189152 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/08/12 | 187718 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/08/12 | 184490 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/08/12 | 19650 | dviware/dvisvgm/libs/xxHash/Makefile.in
+2020/08/12 | 19545 | dviware/dvisvgm/libs/md5/Makefile.in
+2020/08/12 | 19329 | macros/latex/contrib/oberdiek/pdfcolfoot.dtx
+2020/08/12 | 19267 | macros/latex/contrib/oberdiek/scrindex.dtx
+2020/08/12 | 18778 | macros/latex/contrib/oberdiek/oberdiek.tex
+2020/08/12 | 18499 | macros/latex/contrib/oberdiek/stampinclude.dtx
2020/08/12 | 18208 | systems/texlive/tlnet/archive/asmejour.r56092.tar.xz
-2020/08/12 | 180901 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/08/12 | 177374 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/08/12 | 17728 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/08/12 | 17625 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/08/12 | 1746183 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/08/12 | 170418 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/08/12 | 169654 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/08/12 | 165592 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/08/12 | 18053 | macros/latex/contrib/oberdiek/hypgotoe.dtx
+2020/08/12 | 16829 | macros/latex/contrib/oberdiek/twoopt.dtx
+2020/08/12 | 16789 | macros/latex/contrib/oberdiek/flags.dtx
+2020/08/12 | 16633 | macros/latex/contrib/oberdiek/classlist.dtx
+2020/08/12 | 16564 | macros/latex/contrib/oberdiek/colonequals.dtx
+2020/08/12 | 16535 | macros/latex/contrib/oberdiek/aliascnt.dtx
2020/08/12 | 1642562 | macros/latex/contrib/aomart.zip
-2020/08/12 | 16375099 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/08/12 | 16021 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/08/12 | 159877 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/08/12 | 15948 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/08/12 | 154419 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/08/12 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/08/12 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/08/12 | 151864 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/08/12 | 151837 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/08/12 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/08/12 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/08/12 | 15593 | dviware/dvisvgm/libs/variant/Makefile.in
+2020/08/12 | 15169 | macros/latex/contrib/oberdiek/ifdraft.dtx
+2020/08/12 | 15084 | macros/latex/contrib/oberdiek/centernot.dtx
2020/08/12 | 144213 | macros/latex/contrib/apa7/apa7.dtx
-2020/08/12 | 141852 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/08/12 | 14132 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2020/08/12 | 1404301 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/08/12 | 14185 | macros/latex/contrib/oberdiek/dvipscol.dtx
+2020/08/12 | 13809186 | install/macros/latex/contrib/oberdiek.tds.zip
+2020/08/12 | 13782 | macros/latex/contrib/oberdiek/stackrel.dtx
+2020/08/12 | 13772 | macros/latex/contrib/oberdiek/chemarr.dtx
+2020/08/12 | 13688 | dviware/dvisvgm/tests/data/Makefile.in
2020/08/12 | 134924 | support/xml2pmx/MacOS/xml2pmx
-2020/08/12 | 133655 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/08/12 | 1325259 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/08/12 | 13474 | dviware/dvisvgm/m4/Makefile.in
+2020/08/12 | 13344 | macros/latex/contrib/oberdiek/tabularkv.dtx
2020/08/12 | 131976 | systems/texlive/tlnet/archive/texlive-scripts.r56091.tar.xz
-2020/08/12 | 13127 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/08/12 | 130358 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
2020/08/12 | 1278 | macros/latex/contrib/apa7/README.txt
-2020/08/12 | 1265430 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/08/12 | 1211043 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/08/12 | 1210388 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/08/12 | 1192970 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/08/12 | 116786 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/08/12 | 115880 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/08/12 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
-2020/08/12 | 113582 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/08/12 | 1129913 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/08/12 | 1129363 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2020/08/12 | 109731 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/08/12 | 108991 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/08/12 | 1061413 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/08/12 | 104548 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/08/12 | 102588 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/08/12 | 1021968 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/08/12 | 101782 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/08/12 | 100919 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/08/11 | 695869 | systems/win32/w32tex/ChangeLog
+2020/08/12 | 106085 | macros/latex/contrib/oberdiek/bmpsize.dtx
2020/08/11 | 68644 | systems/texlive/tlnet/archive/frpseudocode.doc.r56088.tar.xz
2020/08/11 | 6373 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2020/08/11 | 398710232 | systems/win32/w32tex/ltxpkgdocs.tar.xz
+2020/08/11 | 3579 | info/biblio/tugboat.ltx
2020/08/11 | 3312 | systems/texlive/tlnet/archive/beamerauxtheme.r56087.tar.xz
-2020/08/11 | 3237077 | info/biblio/tugboat.bib
+2020/08/11 | 2151744 | systems/win32/w32tex/win64/context-w64.tar.xz
2020/08/11 | 20912 | systems/texlive/tlnet/archive/mcf2graph.r56086.tar.xz
2020/08/11 | 187988 | systems/texlive/tlnet/archive/beamerauxtheme.doc.r56087.tar.xz
+2020/08/11 | 140567912 | systems/win32/w32tex/context.tar.xz
2020/08/11 | 1216 | systems/texlive/tlnet/archive/frpseudocode.r56088.tar.xz
2020/08/11 | 1060304 | systems/texlive/tlnet/archive/mcf2graph.doc.r56086.tar.xz
2020/08/10 | 91164 | systems/texlive/tlnet/archive/poemscol.source.r56082.tar.xz
@@ -259,7 +404,6 @@
2020/08/10 | 3960 | macros/latex/contrib/beamer-contrib/themes/beamerauxtheme/themes/beamerinnerthemesimplelines.sty
2020/08/10 | 39568 | systems/texlive/tlnet/archive/overlock.doc.r56079.tar.xz
2020/08/10 | 3728 | macros/latex/contrib/beamer-contrib/themes/beamerauxtheme/themes/beamerouterthemesplitwithminiframes.sty
-2020/08/10 | 3579 | info/biblio/tugboat.ltx
2020/08/10 | 33846108 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/08/10 | 3320 | graphics/mcf2graph/mcf_setup.sty
2020/08/10 | 306240 | graphics/mcf2graph/mcf_example.pdf
@@ -530,7 +674,6 @@
2020/08/09 | 2403217 | systems/win32/miktex/tm/packages/merriweather.tar.lzma
2020/08/09 | 2380 | fonts/overlock/tfm/Ovrlck-BoldItalic-lf-ot1.tfm
2020/08/09 | 22561 | systems/win32/miktex/tm/packages/miktex-misc.tar.lzma
-2020/08/09 | 2151792 | systems/win32/w32tex/win64/context-w64.tar.xz
2020/08/09 | 2151484 | systems/win32/miktex/tm/packages/pst-3dplot.tar.lzma
2020/08/09 | 2111 | fonts/overlock/README
2020/08/09 | 2100 | fonts/overlock/tfm/Ovrlck-BlackItalic-osf-ot1.tfm
@@ -665,7 +808,6 @@
2020/08/09 | 1412 | fonts/overlock/tfm/Ovrlck-BlackItalic-lf-ts1--base.tfm
2020/08/09 | 1408 | fonts/overlock/vf/Ovrlck-Bold-lf-t1.vf
2020/08/09 | 1408 | fonts/overlock/tfm/Ovrlck-BlackItalic-lf-ot1--base.tfm
-2020/08/09 | 140561664 | systems/win32/w32tex/context.tar.xz
2020/08/09 | 1404 | fonts/overlock/tfm/Ovrlck-Regular-osf-ts1.tfm
2020/08/09 | 1404 | fonts/overlock/tfm/Ovrlck-Regular-lf-ts1.tfm
2020/08/09 | 1404 | fonts/overlock/tfm/Ovrlck-Italic-osf-ts1.tfm
@@ -1142,7 +1284,6 @@
2020/08/07 | 1403 | macros/context/contrib/context-letter/tex/context/third/letter/style/letter-imp-swiss.mkii
2020/08/07 | 140348 | graphics/pgf/contrib/circuitikz/tex/pgfcircmultipoles.tex
2020/08/07 | 1389 | macros/context/contrib/context-letter/tex/context/third/letter/style/letter-imp-swiss.mkiv
-2020/08/07 | 136241 | info/biblio/tugboat.def
2020/08/07 | 1360 | macros/context/contrib/context-letter/tex/context/third/letter/style/memo-imp-table.mkiv
2020/08/07 | 1360 | macros/context/contrib/context-letter/tex/context/third/letter/style/memo-imp-table.mkii
2020/08/07 | 1356 | macros/latex/contrib/l3experimental/l3draw-code.tex
@@ -1183,1867 +1324,3 @@
2020/08/07 | 1016 | macros/context/contrib/context-letter/tex/context/third/letter/base/t-letter.mkii
2020/08/07 | 101437 | graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex
2020/08/07 | 1012 | macros/context/contrib/context-letter/tex/context/third/letter/base/t-memo.mkii
-2020/08/06 | 99 | graphics/asymptote/base/asy_filetype.vim
-2020/08/06 | 998 | graphics/asymptote/GUI/res/icons/chevron-with-circle-right.svg
-2020/08/06 | 996 | fonts/xcharter/vf/XCharter1-Italic-tosf-sc-ot1.vf
-2020/08/06 | 9945 | graphics/asymptote/GUI/pyUIClass/custMatTransform.py
-2020/08/06 | 992 | fonts/xcharter/vf/XCharter1-Roman-tosf-sc-ot1.vf
-2020/08/06 | 9923 | graphics/asymptote/profiler.h
-2020/08/06 | 990 | graphics/asymptote/examples/RiemannSphere.asy
-2020/08/06 | 98 | graphics/asymptote/GUI/res/icons/openpolygon.asy
-2020/08/06 | 98 | graphics/asymptote/GUI/res/icons/opencurve.asy
-2020/08/06 | 988 | fonts/xcharter/vf/XCharter1-Bold-tosf-sc-ot1.vf
-2020/08/06 | 986 | graphics/asymptote/predicates.h
-2020/08/06 | 984 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-ot1G.vf
-2020/08/06 | 9836 | graphics/asymptote/doc/asymptote.sty
-2020/08/06 | 980 | graphics/asymptote/examples/filesurface.asy
-2020/08/06 | 9804 | graphics/asymptote/runstring.in
-2020/08/06 | 978 | graphics/asymptote/examples/worksheet.asy
-2020/08/06 | 974 | graphics/asymptote/prc/Makefile
-2020/08/06 | 973 | graphics/asymptote/examples/fequlogo.asy
-2020/08/06 | 972 | graphics/asymptote/examples/triads.asy
-2020/08/06 | 9725 | graphics/asymptote/doc/FAQ/m-html.pl
-2020/08/06 | 969 | graphics/asymptote/runfile.h
-2020/08/06 | 966 | graphics/asymptote/tests/array/solve.asy
-2020/08/06 | 964 | graphics/asymptote/GUI/xasyTransform.py
-2020/08/06 | 964 | graphics/asymptote/GUI/res/icons/magnifying-glass.svg
-2020/08/06 | 964 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-ot1.vf
-2020/08/06 | 960 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-sc-ot1.vf
-2020/08/06 | 95 | graphics/asymptote/prc/test.asy
-2020/08/06 | 9574 | graphics/asymptote/triple.h
-2020/08/06 | 956 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-sc-ot1.vf
-2020/08/06 | 9569 | graphics/asymptote/base/bezulate.asy
-2020/08/06 | 954 | graphics/asymptote/examples/poster.asy
-2020/08/06 | 951 | graphics/asymptote/statistics.h
-2020/08/06 | 946 | graphics/asymptote/examples/animations/cube.asy
-2020/08/06 | 940 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-sc-ot1.vf
-2020/08/06 | 940504 | systems/texlive/tlnet/archive/newtx.doc.r56049.tar.xz
-2020/08/06 | 9399 | graphics/asymptote/base/rationalSimplex.asy
-2020/08/06 | 936 | graphics/asymptote/tests/array/array.asy
-2020/08/06 | 930 | graphics/asymptote/examples/polararea.asy
-2020/08/06 | 9309 | graphics/asymptote/base/plain_paths.asy
-2020/08/06 | 9251 | graphics/asymptote/errors
-2020/08/06 | 9243 | graphics/asymptote/glrender.h
-2020/08/06 | 9202 | graphics/asymptote/doc/FAQ/bfnnconv.pl
-2020/08/06 | 916 | graphics/asymptote/opcodes.h
-2020/08/06 | 912 | graphics/asymptote/doc/errorbars.asy
-2020/08/06 | 9096 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-t2a.tfm
-2020/08/06 | 9092 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-t2asrb.tfm
-2020/08/06 | 908 | graphics/asymptote/modifier.h
-2020/08/06 | 908 | graphics/asymptote/coenv.h
-2020/08/06 | 908 | graphics/asymptote/base/map.asy
-2020/08/06 | 9088 | graphics/asymptote/application.h
-2020/08/06 | 9068 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-t2a.tfm
-2020/08/06 | 9064 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-t2asrb.tfm
-2020/08/06 | 904 | fonts/xcharter/vf/XCharter-Roman-ts1.vf
-2020/08/06 | 9028 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-t2a.tfm
-2020/08/06 | 901 | graphics/asymptote/virtualfieldaccess.cc
-2020/08/06 | 9016 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-t2a.tfm
-2020/08/06 | 9012 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-t2asrb.tfm
-2020/08/06 | 9012 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-t2asrb.tfm
-2020/08/06 | 9004 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-t2a.tfm
-2020/08/06 | 8988 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-t2asrb.tfm
-2020/08/06 | 897 | graphics/asymptote/doc/flowchartdemo.asy
-2020/08/06 | 896 | graphics/asymptote/examples/markregular.asy
-2020/08/06 | 8964 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-t2a.tfm
-2020/08/06 | 8960 | graphics/asymptote/symbol.cc
-2020/08/06 | 8948 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-t2asrb.tfm
-2020/08/06 | 8937 | graphics/asymptote/psfile.h
-2020/08/06 | 892 | graphics/asymptote/GUI/res/icons/center.svg
-2020/08/06 | 8870 | graphics/asymptote/base/asy.vim
-2020/08/06 | 886 | graphics/asymptote/angle.h
-2020/08/06 | 8856 | graphics/asymptote/runmath.in
-2020/08/06 | 883 | graphics/asymptote/GUI/Widg_addPolyOpt.py
-2020/08/06 | 882 | graphics/asymptote/shaders.h
-2020/08/06 | 880 | graphics/asymptote/doc/xasy.1x
-2020/08/06 | 8792 | graphics/asymptote/prc/PRCTools/iPRCFile.cc
-2020/08/06 | 877 | graphics/asymptote/doc/markers2.asy
-2020/08/06 | 876 | graphics/asymptote/GUI/res/icons/edit.svg
-2020/08/06 | 8736 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-t2a.tfm
-2020/08/06 | 8728 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-t2asrb.tfm
-2020/08/06 | 8724 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-t2a.tfm
-2020/08/06 | 8712 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-t2a.tfm
-2020/08/06 | 8708 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-t2a.tfm
-2020/08/06 | 8704 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-t2asrb.tfm
-2020/08/06 | 8704 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-t2asrb.tfm
-2020/08/06 | 8700 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-t2asrb.tfm
-2020/08/06 | 8700 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-t2a.tfm
-2020/08/06 | 86 | graphics/asymptote/doc/cylinderskeleton.asy
-2020/08/06 | 868 | graphics/asymptote/examples/twistedtubes.asy
-2020/08/06 | 868 | graphics/asymptote/doc/imagecontour.asy
-2020/08/06 | 8684 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-t2a.tfm
-2020/08/06 | 8680 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-t2a.tfm
-2020/08/06 | 8676 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-t2asrb.tfm
-2020/08/06 | 8676 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-t2asrb.tfm
-2020/08/06 | 8672 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-t2asrb.tfm
-2020/08/06 | 866 | graphics/asymptote/examples/xxsq01x-1.asy
-2020/08/06 | 8664 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-t2a.tfm
-2020/08/06 | 8661 | graphics/asymptote/base/plain_pens.asy
-2020/08/06 | 8647680 | graphics/asymptote/binaries/i386-windows/texlive/asy.exe
-2020/08/06 | 8640 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-t2asrb.tfm
-2020/08/06 | 8628 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-t2a.tfm
-2020/08/06 | 8624 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-t2asrb.tfm
-2020/08/06 | 861 | graphics/asymptote/examples/orthocenter.asy
-2020/08/06 | 8617472 | graphics/asymptote/binaries/x86_64-windows/texlive/asy.exe
-2020/08/06 | 8572 | fonts/xcharter/tfm/XCharter1-Roman-tosf-t2a.tfm
-2020/08/06 | 856 | graphics/asymptote/examples/animations/sphere.asy
-2020/08/06 | 8564 | fonts/xcharter/tfm/XCharter-Roman-tosf-t2a.tfm
-2020/08/06 | 8564 | fonts/xcharter/tfm/XCharter1-Roman-tosf-t2asrb.tfm
-2020/08/06 | 8556 | fonts/xcharter/tfm/XCharter-Roman-tosf-t2asrb.tfm
-2020/08/06 | 8540 | fonts/xcharter/tfm/XCharter1-Bold-tosf-t2a.tfm
-2020/08/06 | 85383 | graphics/asymptote/base/three.asy
-2020/08/06 | 8532 | fonts/xcharter/tfm/XCharter-Roman-tlf-t2a.tfm
-2020/08/06 | 8532 | fonts/xcharter/tfm/XCharter1-Bold-tosf-t2asrb.tfm
-2020/08/06 | 8524 | fonts/xcharter/tfm/XCharter-Roman-tlf-t2asrb.tfm
-2020/08/06 | 850 | graphics/asymptote/GUI/res/icons/android-folder-open.svg
-2020/08/06 | 8492 | fonts/xcharter/tfm/XCharter-Bold-tosf-t2a.tfm
-2020/08/06 | 8484 | fonts/xcharter/tfm/XCharter-Bold-tosf-t2asrb.tfm
-2020/08/06 | 845 | graphics/asymptote/envcompleter.h
-2020/08/06 | 8456 | fonts/xcharter/tfm/XCharter-Bold-tlf-t2a.tfm
-2020/08/06 | 844 | graphics/asymptote/GUI/res/icons/android-radio-button-on.svg
-2020/08/06 | 8448 | fonts/xcharter/tfm/XCharter-Bold-tlf-t2asrb.tfm
-2020/08/06 | 8439 | graphics/asymptote/runpath.in
-2020/08/06 | 8429 | graphics/asymptote/examples/thermodynamics.asy
-2020/08/06 | 839 | graphics/asymptote/examples/venn3.asy
-2020/08/06 | 838 | graphics/asymptote/GUI/res/icons/close-round.svg
-2020/08/06 | 83897 | graphics/asymptote/webgl/gl.js
-2020/08/06 | 8371 | graphics/asymptote/prc/PRCbitStream.cc
-2020/08/06 | 836 | fonts/xcharter/vf/XCharter-Italic-tlf-ot1G.vf
-2020/08/06 | 83431 | graphics/asymptote/lex.yy.cc
-2020/08/06 | 8340 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-t2a.tfm
-2020/08/06 | 8332 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-t2asrb.tfm
-2020/08/06 | 832 | fonts/xcharter/vf/XCharter-Roman-tlf-ot1G.vf
-2020/08/06 | 832 | fonts/xcharter/vf/XCharter-Bold-tlf-ot1G.vf
-2020/08/06 | 8324 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-t2a.tfm
-2020/08/06 | 831 | graphics/asymptote/runbacktrace.in
-2020/08/06 | 8316 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-t2asrb.tfm
-2020/08/06 | 829 | graphics/asymptote/examples/shellsqrtx01.asy
-2020/08/06 | 8296 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-t2a.tfm
-2020/08/06 | 8290 | graphics/asymptote/base/simplex.asy
-2020/08/06 | 8288 | fonts/xcharter/tfm/XCharter-Slanted-tosf-t2a.tfm
-2020/08/06 | 8288 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-t2asrb.tfm
-2020/08/06 | 8284 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-t2a.tfm
-2020/08/06 | 8280 | fonts/xcharter/tfm/XCharter-Slanted-tosf-t2asrb.tfm
-2020/08/06 | 8276 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-t2asrb.tfm
-2020/08/06 | 8260 | fonts/xcharter/tfm/XCharter-Slanted-tlf-t2a.tfm
-2020/08/06 | 825 | graphics/asymptote/examples/xxsq01y.asy
-2020/08/06 | 8252 | fonts/xcharter/tfm/XCharter-Slanted-tlf-t2asrb.tfm
-2020/08/06 | 8243 | graphics/asymptote/base/asy-kate.sh
-2020/08/06 | 822 | graphics/asymptote/GUI/res/icons/android-expand.svg
-2020/08/06 | 82254 | macros/latex/contrib/mercatormap/mercatormap.sty
-2020/08/06 | 821 | graphics/asymptote/GUI/xasyArgs.py
-2020/08/06 | 821 | graphics/asymptote/examples/SierpinskiGasket.asy
-2020/08/06 | 820 | graphics/asymptote/webgl/license
-2020/08/06 | 8208 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-t2a.tfm
-2020/08/06 | 8200 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-t2asrb.tfm
-2020/08/06 | 81 | graphics/asymptote/doc/bezier.asy
-2020/08/06 | 8192 | fonts/xcharter/tfm/XCharter1-Italic-tosf-t2a.tfm
-2020/08/06 | 8184 | fonts/xcharter/tfm/XCharter-Italic-tosf-t2a.tfm
-2020/08/06 | 8172 | fonts/xcharter/tfm/XCharter1-Italic-tosf-t2asrb.tfm
-2020/08/06 | 8164 | fonts/xcharter/tfm/XCharter-Italic-tosf-t2asrb.tfm
-2020/08/06 | 8164 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-t2a.tfm
-2020/08/06 | 8156 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-t2asrb.tfm
-2020/08/06 | 8152 | fonts/xcharter/tfm/XCharter-Italic-tlf-t2a.tfm
-2020/08/06 | 814 | graphics/asymptote/camperror.h
-2020/08/06 | 8140 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-t2a.tfm
-2020/08/06 | 8136 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-t2a.tfm
-2020/08/06 | 8132 | fonts/xcharter/tfm/XCharter-Italic-tlf-t2asrb.tfm
-2020/08/06 | 8132 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-t2asrb.tfm
-2020/08/06 | 8128 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-t2asrb.tfm
-2020/08/06 | 8124 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-t2a.tfm
-2020/08/06 | 8116 | graphics/asymptote/doc/asy.1
-2020/08/06 | 8116 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-t2asrb.tfm
-2020/08/06 | 8100 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-t2a.tfm
-2020/08/06 | 8095 | graphics/asymptote/runhistory.cc
-2020/08/06 | 8092 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-t2asrb.tfm
-2020/08/06 | 806 | graphics/asymptote/GUI/res/icons/android-refresh.svg
-2020/08/06 | 802 | graphics/asymptote/GUI/res/icons/android-camera.svg
-2020/08/06 | 802 | graphics/asymptote/examples/vertexshading.asy
-2020/08/06 | 802 | graphics/asymptote/examples/controlsystem.asy
-2020/08/06 | 8008 | graphics/asymptote/runpath3d.in
-2020/08/06 | 798 | graphics/asymptote/examples/animations/torusanimation.asy
-2020/08/06 | 792 | graphics/asymptote/doc/secondaryaxis.asy
-2020/08/06 | 7919 | graphics/asymptote/fundec.cc
-2020/08/06 | 78 | graphics/asymptote/examples/randompath3.asy
-2020/08/06 | 780 | graphics/asymptote/GUI/res/icons/check.svg
-2020/08/06 | 77 | graphics/asymptote/tests/gc/string.asy
-2020/08/06 | 7790 | graphics/asymptote/coder.cc
-2020/08/06 | 77529 | support/pkfix-helper/pkfix-helper.pdf
-2020/08/06 | 77144 | graphics/asymptote/doc/TeXShopAndAsymptote.pdf
-2020/08/06 | 770 | graphics/asymptote/drawlayer.h
-2020/08/06 | 770 | graphics/asymptote/asy.rc
-2020/08/06 | 76 | graphics/asymptote/examples/grid.asy
-2020/08/06 | 76801 | graphics/asymptote/gl-matrix-2.4.0-pruned/dist/gl-matrix.js
-2020/08/06 | 766 | graphics/asymptote/vm.h
-2020/08/06 | 7668 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-ot1.tfm
-2020/08/06 | 7664 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-ot1.tfm
-2020/08/06 | 764 | graphics/asymptote/GUI/res/icons/android-radio-button-off.svg
-2020/08/06 | 7639 | graphics/asymptote/LICENSE.LESSER
-2020/08/06 | 7632 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-ot1.tfm
-2020/08/06 | 762 | graphics/asymptote/examples/clockarray.asy
-2020/08/06 | 759 | graphics/asymptote/GUI/res/icons/plus-round.svg
-2020/08/06 | 7572 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-ot1.tfm
-2020/08/06 | 7568 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-ot1.tfm
-2020/08/06 | 75576 | graphics/asymptote/GUI/windows/window1.ui
-2020/08/06 | 754 | graphics/asymptote/GUI/res/icons/circle.svg
-2020/08/06 | 754 | graphics/asymptote/doc/graphmarkers.asy
-2020/08/06 | 7536 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-ot1.tfm
-2020/08/06 | 752 | fonts/xcharter/vf/XCharter1-BoldSlanted-ts1.vf
-2020/08/06 | 752 | fonts/xcharter/vf/XCharter1-BoldItalic-ts1.vf
-2020/08/06 | 7488 | graphics/asymptote/base/plain.asy
-2020/08/06 | 747 | graphics/asymptote/examples/pseudosphere.asy
-2020/08/06 | 746 | graphics/asymptote/tests/array/sort.asy
-2020/08/06 | 744 | fonts/xcharter/vf/XCharter1-Italic-ts1.vf
-2020/08/06 | 743 | graphics/asymptote/examples/xxsq01.asy
-2020/08/06 | 7435 | graphics/asymptote/name.cc
-2020/08/06 | 7424 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-ot1.tfm
-2020/08/06 | 7420 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-ot1.tfm
-2020/08/06 | 740 | fonts/xcharter/vf/XCharter1-Slanted-ts1.vf
-2020/08/06 | 740 | fonts/xcharter/vf/XCharter1-Bold-ts1.vf
-2020/08/06 | 7407 | graphics/asymptote/base/graph_splinetype.asy
-2020/08/06 | 739 | graphics/asymptote/examples/condor.asy
-2020/08/06 | 7384 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-ot1.tfm
-2020/08/06 | 737 | graphics/asymptote/tests/array/determinant.asy
-2020/08/06 | 734 | graphics/asymptote/examples/quilt.asy
-2020/08/06 | 73435 | graphics/asymptote/GL/glxew.h
-2020/08/06 | 73211 | graphics/asymptote/runarray.cc
-2020/08/06 | 7307 | graphics/asymptote/base/stats.asy
-2020/08/06 | 7302 | graphics/asymptote/base/markers.asy
-2020/08/06 | 72 | graphics/asymptote/tests/gc/pen.asy
-2020/08/06 | 729 | graphics/asymptote/base/labelpath.asy
-2020/08/06 | 727 | graphics/asymptote/examples/fermi.asy
-2020/08/06 | 72687 | graphics/asymptote/GUI/Window1.py
-2020/08/06 | 72387 | graphics/asymptote/base/three_surface.asy
-2020/08/06 | 7230 | graphics/asymptote/runtime.pl
-2020/08/06 | 7212 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-ot1.tfm
-2020/08/06 | 7208 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-ot1.tfm
-2020/08/06 | 719666 | fonts/xcharter/doc/xcharter-doc.pdf
-2020/08/06 | 71863 | support/pkfix-helper/pkfix-helper
-2020/08/06 | 7176 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-ot1.tfm
-2020/08/06 | 714 | graphics/asymptote/mod.h
-2020/08/06 | 714 | graphics/asymptote/examples/unitoctantx.asy
-2020/08/06 | 7148 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-ot1.tfm
-2020/08/06 | 7144 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-ot1.tfm
-2020/08/06 | 713 | graphics/asymptote/GUI/res/icons/arrow-move.svg
-2020/08/06 | 713 | graphics/asymptote/examples/gamma3.asy
-2020/08/06 | 7129 | graphics/asymptote/GUI/pyUIClass/widg_addLabel.py
-2020/08/06 | 71223 | graphics/asymptote/base/asy-mode.el
-2020/08/06 | 711 | graphics/asymptote/examples/partialsurface.asy
-2020/08/06 | 7112 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-ot1.tfm
-2020/08/06 | 710 | graphics/asymptote/GUI/xasySvg.py
-2020/08/06 | 710 | graphics/asymptote/examples/fjortoft.asy
-2020/08/06 | 70 | graphics/asymptote/tests/gc/transform.asy
-2020/08/06 | 70751 | graphics/asymptote/prc/oPRCFile.cc
-2020/08/06 | 7072 | fonts/xcharter/tfm/XCharter1-Bold-tosf-ot1.tfm
-2020/08/06 | 7044 | fonts/xcharter/tfm/XCharter1-Roman-tosf-ot1.tfm
-2020/08/06 | 7020 | fonts/xcharter/tfm/XCharter-Roman-tosf-ot1.tfm
-2020/08/06 | 700 | graphics/asymptote/GUI/locale/th/LC_MESSAGES/base.po
-2020/08/06 | 6996 | fonts/xcharter/tfm/XCharter-Bold-tosf-ot1.tfm
-2020/08/06 | 6984 | fonts/xcharter/tfm/XCharter-Roman-tlf-ot1.tfm
-2020/08/06 | 695 | graphics/asymptote/GUI/res/icons/android-close.svg
-2020/08/06 | 6956 | fonts/xcharter/tfm/XCharter-Bold-tlf-ot1.tfm
-2020/08/06 | 6952 | fonts/xcharter/tfm/XCharter-Roman-tlf-ot1G.tfm
-2020/08/06 | 6951 | graphics/asymptote/config.h.in
-2020/08/06 | 693120 | systems/texlive/tlnet/archive/xepersian-hm.doc.r56053.tar.xz
-2020/08/06 | 6928 | fonts/xcharter/tfm/XCharter-Bold-tlf-ot1G.tfm
-2020/08/06 | 6924 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-ot1.tfm
-2020/08/06 | 6924 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-ot1.tfm
-2020/08/06 | 6911 | graphics/asymptote/errortest.asy
-2020/08/06 | 6896 | graphics/asymptote/GUI/windows/widg_addLabel.ui
-2020/08/06 | 6896 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-ot1.tfm
-2020/08/06 | 688 | graphics/asymptote/examples/layers.asy
-2020/08/06 | 688 | graphics/asymptote/examples/centroidfg.asy
-2020/08/06 | 6852 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-ot1G.tfm
-2020/08/06 | 683 | graphics/asymptote/examples/fractaltree.asy
-2020/08/06 | 6832 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-ot1.tfm
-2020/08/06 | 68266 | graphics/asymptote/base/graph3.asy
-2020/08/06 | 68126 | graphics/asymptote/prc/PRCTools/describePRC.cc
-2020/08/06 | 680 | graphics/asymptote/tests/array/delete.asy
-2020/08/06 | 6808 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-ot1.tfm
-2020/08/06 | 679 | graphics/asymptote/examples/genusthree.asy
-2020/08/06 | 6789 | graphics/asymptote/drawlabel.cc
-2020/08/06 | 677 | graphics/asymptote/doc/Bode.asy
-2020/08/06 | 6776 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-ot1.tfm
-2020/08/06 | 6772 | fonts/xcharter/tfm/XCharter1-Italic-tosf-ot1.tfm
-2020/08/06 | 6752 | fonts/xcharter/tfm/XCharter-Italic-tosf-ot1.tfm
-2020/08/06 | 674 | graphics/asymptote/GUI/res/icons/android-delete.svg
-2020/08/06 | 674 | graphics/asymptote/examples/sqrtx01.asy
-2020/08/06 | 6740 | fonts/xcharter/enc/xcharter-ot2.enc
-2020/08/06 | 673 | graphics/asymptote/GUI/res/icons/save.svg
-2020/08/06 | 6725 | graphics/asymptote/guide.h
-2020/08/06 | 6712 | fonts/xcharter/tfm/XCharter-Italic-tlf-ot1.tfm
-2020/08/06 | 66 | graphics/asymptote/examples/shade.asy
-2020/08/06 | 669 | graphics/asymptote/drawpath.h
-2020/08/06 | 6692 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-ot1.tfm
-2020/08/06 | 6680 | fonts/xcharter/tfm/XCharter-Italic-tlf-ot1G.tfm
-2020/08/06 | 667 | graphics/asymptote/examples/spring.asy
-2020/08/06 | 66751 | graphics/asymptote/prc/writePRC.cc
-2020/08/06 | 6668 | fonts/xcharter/tfm/XCharter-Slanted-tosf-ot1.tfm
-2020/08/06 | 6656 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-ot1.tfm
-2020/08/06 | 6650 | graphics/asymptote/getopt.h
-2020/08/06 | 6636 | systems/texlive/tlnet/archive/xepersian-hm.source.r56053.tar.xz
-2020/08/06 | 6636 | fonts/xcharter/tfm/XCharter-Slanted-tlf-ot1.tfm
-2020/08/06 | 6634 | graphics/asymptote/simpson.cc
-2020/08/06 | 65 | graphics/asymptote/tests/gc/guide.asy
-2020/08/06 | 658 | graphics/asymptote/examples/NURBScurve.asy
-2020/08/06 | 6585 | graphics/asymptote/xstream.h
-2020/08/06 | 6584 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-ot1.tfm
-2020/08/06 | 657 | graphics/asymptote/examples/lowupint.asy
-2020/08/06 | 657 | graphics/asymptote/examples/100d.views
-2020/08/06 | 657 | graphics/asymptote/base/reload.js
-2020/08/06 | 656 | fonts/xcharter/vf/XCharter-Italic-ts1.vf
-2020/08/06 | 6552 | graphics/asymptote/GUI/windows/labelTextEditor.ui
-2020/08/06 | 6552 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-ot1.tfm
-2020/08/06 | 654 | graphics/asymptote/fpu.h
-2020/08/06 | 654 | graphics/asymptote/examples/limit.asy
-2020/08/06 | 652 | fonts/xcharter/vf/XCharter-Bold-ts1.vf
-2020/08/06 | 652 | fonts/xcharter/vf/XCharter-BoldItalic-ts1.vf
-2020/08/06 | 6525 | graphics/asymptote/drawfill.h
-2020/08/06 | 650 | graphics/asymptote/prcfile.h
-2020/08/06 | 6503 | graphics/asymptote/tests/types/constructor.asy
-2020/08/06 | 644 | fonts/xcharter/vf/XCharter-BoldSlanted-ts1.vf
-2020/08/06 | 64329 | support/pkfix-helper/encoding-samples.tex
-2020/08/06 | 641 | graphics/asymptote/examples/pOrbital.asy
-2020/08/06 | 640 | fonts/xcharter/vf/XCharter-Slanted-ts1.vf
-2020/08/06 | 639 | graphics/asymptote/tests/arith/transform.asy
-2020/08/06 | 639 | graphics/asymptote/GUI/res/icons/arrow-resize.svg
-2020/08/06 | 6396 | graphics/asymptote/mathop.h
-2020/08/06 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-forward.svg
-2020/08/06 | 637 | graphics/asymptote/GUI/res/icons/android-arrow-back.svg
-2020/08/06 | 6367 | macros/latex/contrib/mercatormap/mercatormap.doc.orthodromes.tex
-2020/08/06 | 63520 | graphics/asymptote/base/graph.asy
-2020/08/06 | 633 | graphics/asymptote/GUI/res/icons/android-done.svg
-2020/08/06 | 63314 | graphics/asymptote/GL/wglew.h
-2020/08/06 | 632 | graphics/asymptote/examples/label3zoom.asy
-2020/08/06 | 6318 | graphics/asymptote/doc/leastsquares.dat
-2020/08/06 | 63137 | graphics/asymptote/doc/FAQ/asy-faq.info
-2020/08/06 | 630 | graphics/asymptote/base/shaders/vertex.glsl
-2020/08/06 | 6300 | graphics/asymptote/asymptote.nsi
-2020/08/06 | 62 | graphics/asymptote/tests/gc/array.asy
-2020/08/06 | 62 | graphics/asymptote/revision.cc
-2020/08/06 | 6292 | graphics/asymptote/base/plain_filldraw.asy
-2020/08/06 | 628 | graphics/asymptote/examples/wedge.asy
-2020/08/06 | 628 | graphics/asymptote/examples/polarcircle.asy
-2020/08/06 | 6285 | graphics/asymptote/base/plain_prethree.asy
-2020/08/06 | 626 | graphics/asymptote/examples/venn.asy
-2020/08/06 | 620 | graphics/asymptote/tests/arith/integer.asy
-2020/08/06 | 61 | graphics/asymptote/examples/axialshade.asy
-2020/08/06 | 617 | graphics/asymptote/doc/logo.asy
-2020/08/06 | 6178 | graphics/asymptote/transform.h
-2020/08/06 | 616 | graphics/asymptote/examples/Gouraudcontour.asy
-2020/08/06 | 6169 | graphics/asymptote/base/plain_strings.asy
-2020/08/06 | 6154 | graphics/asymptote/GUI/pyUIClass/labelTextEditor.py
-2020/08/06 | 610 | graphics/asymptote/examples/impact.asy
-2020/08/06 | 6104 | graphics/asymptote/doc/FAQ/m-lout.pl
-2020/08/06 | 609 | graphics/asymptote/keywords.cc
-2020/08/06 | 608 | graphics/asymptote/examples/spline.asy
-2020/08/06 | 608 | graphics/asymptote/base/size10.asy
-2020/08/06 | 604 | graphics/asymptote/doc/flow.asy
-2020/08/06 | 60454 | graphics/asymptote/runtime.cc
-2020/08/06 | 602 | graphics/asymptote/examples/treetest.asy
-2020/08/06 | 6021 | graphics/asymptote/prc/PRCTools/bitData.cc
-2020/08/06 | 60150 | graphics/asymptote/base/webgl/asygl.js
-2020/08/06 | 600 | graphics/asymptote/base/size11.asy
-2020/08/06 | 59 | graphics/asymptote/examples/stroke3.asy
-2020/08/06 | 599 | graphics/asymptote/GUI/xasyStrings.py
-2020/08/06 | 598 | graphics/asymptote/examples/integraltest.asy
-2020/08/06 | 5925 | graphics/asymptote/runfile.in
-2020/08/06 | 591 | graphics/asymptote/examples/sinc.asy
-2020/08/06 | 58 | graphics/asymptote/examples/progrid.asy
-2020/08/06 | 589 | graphics/asymptote/GUI/res/icons/bucket.asy
-2020/08/06 | 589 | graphics/asymptote/examples/trefoilknot.asy
-2020/08/06 | 5883 | graphics/asymptote/Delaunay.cc
-2020/08/06 | 5879 | graphics/asymptote/base/three_tube.asy
-2020/08/06 | 584 | systems/texlive/tlnet/archive/collection-langfrench.r56051.tar.xz
-2020/08/06 | 582 | graphics/asymptote/examples/cos3.asy
-2020/08/06 | 581 | graphics/asymptote/examples/BezierSaddle.asy
-2020/08/06 | 5811 | graphics/asymptote/drawpath3.h
-2020/08/06 | 580 | graphics/asymptote/examples/xsin1x.asy
-2020/08/06 | 57 | graphics/asymptote/GUI/requirements.txt
-2020/08/06 | 579 | graphics/asymptote/examples/sqrtx01y1.asy
-2020/08/06 | 579 | graphics/asymptote/examples/sin3.asy
-2020/08/06 | 579 | graphics/asymptote/examples/exp3.asy
-2020/08/06 | 5797 | graphics/asymptote/base/trembling.asy
-2020/08/06 | 578 | graphics/asymptote/base/annotate.asy
-2020/08/06 | 577 | graphics/asymptote/locate.h
-2020/08/06 | 576 | graphics/asymptote/examples/threeviews.asy
-2020/08/06 | 576 | graphics/asymptote/examples/circles.asy
-2020/08/06 | 5760 | graphics/asymptote/base/plain_scaling.asy
-2020/08/06 | 5733 | graphics/asymptote/item.h
-2020/08/06 | 572 | graphics/asymptote/examples/curvedlabel3.asy
-2020/08/06 | 57126 | graphics/asymptote/runpicture.cc
-2020/08/06 | 570 | graphics/asymptote/examples/fillcontour.asy
-2020/08/06 | 5692 | systems/texlive/tlnet/archive/xepersian-hm.r56053.tar.xz
-2020/08/06 | 5677 | macros/latex/contrib/mercatormap/mercatormap.doc.intro.tex
-2020/08/06 | 56646 | graphics/asymptote/GUI/pyUIClass/window1.py
-2020/08/06 | 5627 | graphics/asymptote/doc/FAQ/m-info.pl
-2020/08/06 | 56037 | graphics/asymptote/base/smoothcontour3.asy
-2020/08/06 | 5595 | graphics/asymptote/bezierpatch.h
-2020/08/06 | 558 | graphics/asymptote/examples/floatingdisk.asy
-2020/08/06 | 557 | graphics/asymptote/examples/Pythagoras.asy
-2020/08/06 | 5578 | graphics/asymptote/drawpath3.cc
-2020/08/06 | 5578296 | systems/texlive/tlnet/archive/newtx.r56049.tar.xz
-2020/08/06 | 5543 | graphics/asymptote/examples/filesurface.dat
-2020/08/06 | 5537 | graphics/asymptote/examples/cpkcolors.asy
-2020/08/06 | 5505 | graphics/asymptote/interact.cc
-2020/08/06 | 54 | graphics/asymptote/tests/gc/funcall.asy
-2020/08/06 | 548 | graphics/asymptote/examples/equilchord.asy
-2020/08/06 | 547 | graphics/asymptote/examples/tetra.asy
-2020/08/06 | 5443 | graphics/asymptote/main.cc
-2020/08/06 | 5441 | graphics/asymptote/env.cc
-2020/08/06 | 52 | graphics/asymptote/doc/square.asy
-2020/08/06 | 5279 | graphics/asymptote/base/bsp.asy
-2020/08/06 | 5277 | graphics/asymptote/base/shaders/fragment.glsl
-2020/08/06 | 5262 | graphics/asymptote/patches/bison.patch
-2020/08/06 | 525 | graphics/asymptote/examples/vectorfield3.asy
-2020/08/06 | 5250 | graphics/asymptote/pipestream.cc
-2020/08/06 | 524 | graphics/asymptote/doc/brokenaxis.asy
-2020/08/06 | 5238 | graphics/asymptote/base/animation.asy
-2020/08/06 | 5236 | graphics/asymptote/name.h
-2020/08/06 | 521 | graphics/asymptote/doc/Hobbycontrol.asy
-2020/08/06 | 5216 | graphics/asymptote/examples/mosaic.asy
-2020/08/06 | 520 | graphics/asymptote/examples/smoothelevation.asy
-2020/08/06 | 519 | graphics/asymptote/examples/extrudedcontour.asy
-2020/08/06 | 518 | graphics/asymptote/doc/CDlabel.asy
-2020/08/06 | 51869 | graphics/asymptote/settings.cc
-2020/08/06 | 5151 | graphics/asymptote/GUI/labelEditor.py
-2020/08/06 | 51432 | graphics/asymptote/prc/oPRCFile.h
-2020/08/06 | 513 | graphics/asymptote/examples/buildcycle.asy
-2020/08/06 | 5111 | graphics/asymptote/runsystem.in
-2020/08/06 | 5104 | graphics/asymptote/pair.h
-2020/08/06 | 50 | graphics/asymptote/base/babel.asy
-2020/08/06 | 509 | graphics/asymptote/examples/dimension.asy
-2020/08/06 | 506 | graphics/asymptote/examples/delu.asy
-2020/08/06 | 5063 | graphics/asymptote/runhistory.in
-2020/08/06 | 50600 | graphics/asymptote/GUI/xasy2asy.py
-2020/08/06 | 5052 | graphics/asymptote/errormsg.h
-2020/08/06 | 5048 | graphics/asymptote/GUI/xasyOptions.py
-2020/08/06 | 50437 | graphics/asymptote/gsl.cc
-2020/08/06 | 503 | graphics/asymptote/GUI/xasy.py
-2020/08/06 | 503 | graphics/asymptote/examples/animations/embeddedmovie.asy
-2020/08/06 | 503734 | graphics/asymptote/libatomic_ops-7.6.10.tar.gz
-2020/08/06 | 500 | graphics/asymptote/examples/floor.asy
-2020/08/06 | 500 | graphics/asymptote/doc/Hobbydir.asy
-2020/08/06 | 5003 | graphics/asymptote/base/rational.asy
-2020/08/06 | 49 | graphics/asymptote/doc/quartercircle.asy
-2020/08/06 | 49 | graphics/asymptote/doc/dots.asy
-2020/08/06 | 49 | graphics/asymptote/doc/colons.asy
-2020/08/06 | 499 | graphics/asymptote/examples/galleon.asy
-2020/08/06 | 4991 | graphics/asymptote/base/tube.asy
-2020/08/06 | 498 | graphics/asymptote/examples/fano.asy
-2020/08/06 | 498 | graphics/asymptote/doc/penfunctionimage.asy
-2020/08/06 | 4972 | graphics/asymptote/memory.h
-2020/08/06 | 496 | graphics/asymptote/examples/bars3.asy
-2020/08/06 | 495 | graphics/asymptote/examples/cones.asy
-2020/08/06 | 494 | graphics/asymptote/drawgrestore.h
-2020/08/06 | 489 | graphics/asymptote/patches/gc-7.0nomem.patch
-2020/08/06 | 48847 | graphics/asymptote/doc/secondaryaxis.csv
-2020/08/06 | 485 | graphics/asymptote/examples/cards.asy
-2020/08/06 | 4849 | graphics/asymptote/GUI/pyUIClass/widg_editBezier.py
-2020/08/06 | 48481 | graphics/asymptote/prc/writePRC.h
-2020/08/06 | 48441 | graphics/asymptote/config.guess
-2020/08/06 | 4842 | macros/latex/contrib/mercatormap/mercatormap.doc.routes.tex
-2020/08/06 | 4841 | graphics/asymptote/tests/array/slice.asy
-2020/08/06 | 48374 | graphics/asymptote/runarray.in
-2020/08/06 | 4812 | graphics/asymptote/base/x11colors.asy
-2020/08/06 | 480 | graphics/asymptote/doc/logimage.asy
-2020/08/06 | 4808 | graphics/asymptote/examples/interpolate1.asy
-2020/08/06 | 4800 | graphics/asymptote/fileio.cc
-2020/08/06 | 479 | graphics/asymptote/examples/magnetic.asy
-2020/08/06 | 4740981 | install/fonts/xcharter.tds.zip
-2020/08/06 | 4735 | graphics/asymptote/array.cc
-2020/08/06 | 472 | graphics/asymptote/examples/colorplanes.asy
-2020/08/06 | 472 | graphics/asymptote/absyn.cc
-2020/08/06 | 4727 | graphics/asymptote/doc/westnile.csv
-2020/08/06 | 4718 | graphics/asymptote/doc/FAQ/m-ascii.pl
-2020/08/06 | 4716 | graphics/asymptote/prc/PRCTools/makePRC.cc
-2020/08/06 | 4691 | graphics/asymptote/parser.cc
-2020/08/06 | 46727 | graphics/asymptote/base/plain_picture.asy
-2020/08/06 | 4668 | graphics/asymptote/GUI/pyUIClass/widgetPointEditor.py
-2020/08/06 | 4662243 | fonts/xcharter.zip
-2020/08/06 | 465530 | graphics/asymptote/doc/png/asymptote.info
-2020/08/06 | 464 | graphics/asymptote/drawgsave.h
-2020/08/06 | 464 | graphics/asymptote/doc/GaussianSurface.asy
-2020/08/06 | 4612 | graphics/asymptote/castop.h
-2020/08/06 | 460 | graphics/asymptote/examples/lever.asy
-2020/08/06 | 460 | graphics/asymptote/examples/cosaddition.asy
-2020/08/06 | 4602 | graphics/asymptote/util.h
-2020/08/06 | 459 | graphics/asymptote/examples/hierarchy.asy
-2020/08/06 | 4597 | graphics/asymptote/drawfill.cc
-2020/08/06 | 458 | graphics/asymptote/doc/multicontour.asy
-2020/08/06 | 45841 | graphics/asymptote/glrender.cc
-2020/08/06 | 4578 | graphics/asymptote/doc/FAQ/m-post.pl
-2020/08/06 | 4570 | graphics/asymptote/env.h
-2020/08/06 | 4520 | graphics/asymptote/getopt1.c
-2020/08/06 | 449 | graphics/asymptote/tests/arith/pair.asy
-2020/08/06 | 4474 | graphics/asymptote/GUI/windows/widg_editBezier.ui
-2020/08/06 | 4473 | graphics/asymptote/bbox.h
-2020/08/06 | 445 | graphics/asymptote/examples/sacone.asy
-2020/08/06 | 44472 | graphics/asymptote/fftw++.h
-2020/08/06 | 442 | graphics/asymptote/doc/join3.asy
-2020/08/06 | 441 | graphics/asymptote/examples/triangles.asy
-2020/08/06 | 441 | graphics/asymptote/doc/histogram.asy
-2020/08/06 | 43 | graphics/asymptote/examples/spring2.asy
-2020/08/06 | 439 | graphics/asymptote/examples/gamma.asy
-2020/08/06 | 4392 | graphics/asymptote/stm.h
-2020/08/06 | 436 | graphics/asymptote/examples/colorpatch.asy
-2020/08/06 | 4348 | graphics/asymptote/doc/colo-asy.tex
-2020/08/06 | 4341 | graphics/asymptote/fundec.h
-2020/08/06 | 4335 | graphics/asymptote/prc/PRCTools/describePRC.h
-2020/08/06 | 43335 | graphics/asymptote/examples/100d.pdb1
-2020/08/06 | 430 | graphics/asymptote/examples/unitoctant.asy
-2020/08/06 | 42 | graphics/asymptote/base/animate.asy
-2020/08/06 | 4286 | graphics/asymptote/asy.ico
-2020/08/06 | 427 | graphics/asymptote/examples/projectrevolution.asy
-2020/08/06 | 426 | graphics/asymptote/examples/pathintersectsurface.asy
-2020/08/06 | 426 | graphics/asymptote/doc/grid3xyz.asy
-2020/08/06 | 4265 | graphics/asymptote/newexp.cc
-2020/08/06 | 426285 | support/pkfix-helper.zip
-2020/08/06 | 424 | graphics/asymptote/examples/spiral3.asy
-2020/08/06 | 4244 | graphics/asymptote/examples/fin.asy
-2020/08/06 | 4242 | graphics/asymptote/tests/types/keyword.asy
-2020/08/06 | 423 | graphics/asymptote/doc/log2graph.asy
-2020/08/06 | 423 | graphics/asymptote/doc/helix.asy
-2020/08/06 | 42157 | macros/latex/contrib/hausarbeit-jura/hausarbeit-jura.dtx
-2020/08/06 | 420 | graphics/asymptote/examples/PythagoreanTree.asy
-2020/08/06 | 4209 | graphics/asymptote/flatguide.h
-2020/08/06 | 41 | graphics/asymptote/doc/bigdiagonal.asy
-2020/08/06 | 419 | graphics/asymptote/examples/torus.asy
-2020/08/06 | 418 | graphics/asymptote/examples/planeproject.asy
-2020/08/06 | 417 | graphics/asymptote/doc/knots.asy
-2020/08/06 | 416 | graphics/asymptote/doc/bezier2.asy
-2020/08/06 | 4166 | graphics/asymptote/GUI/windows/widgetPointEditor.ui
-2020/08/06 | 415 | graphics/asymptote/doc/linetype.asy
-2020/08/06 | 4158 | graphics/asymptote/examples/advection.asy
-2020/08/06 | 4156 | graphics/asymptote/runpair.in
-2020/08/06 | 414 | graphics/asymptote/examples/animations/glmovie.asy
-2020/08/06 | 4128 | graphics/asymptote/base/plain_boxes.asy
-2020/08/06 | 411 | graphics/asymptote/examples/animations/externalmovie.asy
-2020/08/06 | 410 | graphics/asymptote/examples/Sierpinski.asy
-2020/08/06 | 41079 | macros/latex/contrib/mercatormap/mercatormap.doc.maptiles.tex
-2020/08/06 | 4089 | graphics/asymptote/camp.tab.h
-2020/08/06 | 407 | graphics/asymptote/examples/parametricsurface.asy
-2020/08/06 | 407 | graphics/asymptote/examples/BezierPatch.asy
-2020/08/06 | 4078 | graphics/asymptote/base/plain_shipout.asy
-2020/08/06 | 40761 | graphics/asymptote/doc/FAQ/asy-faq.bfnn
-2020/08/06 | 4072 | graphics/asymptote/tests/types/order.asy
-2020/08/06 | 4067 | graphics/asymptote/doc/diatom.csv
-2020/08/06 | 40665 | graphics/asymptote/examples/tvgen.asy
-2020/08/06 | 4060 | fonts/xcharter/enc/xch1_gb4haz.enc
-2020/08/06 | 40578 | graphics/asymptote/picture.cc
-2020/08/06 | 4055 | fonts/xcharter/enc/xch1_l6an6k.enc
-2020/08/06 | 403056 | systems/texlive/tlnet/archive/notomath.doc.r56050.tar.xz
-2020/08/06 | 401 | graphics/asymptote/doc/image.asy
-2020/08/06 | 4016 | fonts/xcharter/enc/xch1_e3nxtd.enc
-2020/08/06 | 4011 | fonts/xcharter/enc/xch1_bcg6lk.enc
-2020/08/06 | 400 | graphics/asymptote/examples/sacylinder.asy
-2020/08/06 | 39 | graphics/asymptote/base/nopapersize.ps
-2020/08/06 | 398 | graphics/asymptote/examples/epix.asy
-2020/08/06 | 3989 | fonts/xcharter/enc/xch1_tis6bf.enc
-2020/08/06 | 397 | graphics/asymptote/doc/legend.asy
-2020/08/06 | 39719 | fonts/xcharter/map/XCharter.map
-2020/08/06 | 396 | graphics/asymptote/doc/triangulate.asy
-2020/08/06 | 395 | graphics/asymptote/GUI/configs/xasykeymap.cson
-2020/08/06 | 394 | graphics/asymptote/GUI/setup.py
-2020/08/06 | 3944 | fonts/xcharter/enc/xch_sbuybh.enc
-2020/08/06 | 3935 | graphics/asymptote/base/interpolate.asy
-2020/08/06 | 3932 | fonts/xcharter/enc/xch1_wi6ykn.enc
-2020/08/06 | 3923 | macros/latex/contrib/mercatormap/mercatormap.doc.sty
-2020/08/06 | 3919 | fonts/xcharter/enc/xch1_yz7cd7.enc
-2020/08/06 | 3918 | fonts/xcharter/enc/xch1_qdfne6.enc
-2020/08/06 | 3912 | info/biblio/texbook3.ltx
-2020/08/06 | 3912 | graphics/asymptote/tr.h
-2020/08/06 | 3910 | fonts/xcharter/enc/xch1_erwtw3.enc
-2020/08/06 | 390 | graphics/asymptote/doc/tile.asy
-2020/08/06 | 3907 | fonts/xcharter/enc/xch1_evj3rb.enc
-2020/08/06 | 3903 | fonts/xcharter/enc/xch_kivgfk.enc
-2020/08/06 | 38 | graphics/asymptote/examples/spring0.asy
-2020/08/06 | 3895 | fonts/xcharter/doc/altone.py
-2020/08/06 | 3889 | fonts/xcharter/enc/xch1_3nubio.enc
-2020/08/06 | 3888 | fonts/xcharter/enc/xch1_vv7waw.enc
-2020/08/06 | 388435 | graphics/asymptote/doc/asymptote.texi
-2020/08/06 | 3883 | fonts/xcharter/enc/xch1_l4c4ke.enc
-2020/08/06 | 3873 | fonts/xcharter/enc/xch1_ph46id.enc
-2020/08/06 | 3867 | fonts/xcharter/enc/xch1_xqcxen.enc
-2020/08/06 | 3859 | fonts/xcharter/enc/xch1_pqp4df.enc
-2020/08/06 | 3857 | graphics/asymptote/examples/pipes.asy
-2020/08/06 | 384 | graphics/asymptote/examples/RiemannSurfaceRoot.asy
-2020/08/06 | 384 | graphics/asymptote/Delaunay.h
-2020/08/06 | 383 | graphics/asymptote/tests/arith/real.asy
-2020/08/06 | 383 | graphics/asymptote/examples/Gouraud.asy
-2020/08/06 | 3839 | fonts/xcharter/enc/xch_ukw3hq.enc
-2020/08/06 | 382 | graphics/asymptote/doc/loggrid.asy
-2020/08/06 | 3810 | fonts/xcharter/enc/xch_6zxmh3.enc
-2020/08/06 | 3797 | fonts/xcharter/tex/T2ASRBXCharter-TOsF.fd
-2020/08/06 | 37917 | graphics/asymptote/path3.cc
-2020/08/06 | 378 | graphics/asymptote/examples/sinxlex.asy
-2020/08/06 | 378 | graphics/asymptote/doc/icon.asy
-2020/08/06 | 3779 | fonts/xcharter/enc/xch1_6l4ixg.enc
-2020/08/06 | 3777 | fonts/xcharter/enc/xch1_xmfb6b.enc
-2020/08/06 | 3775 | macros/latex/contrib/mercatormap/mercatormap.doc.abstract.tex
-2020/08/06 | 376 | graphics/asymptote/examples/sphericalharmonic.asy
-2020/08/06 | 376 | graphics/asymptote/doc/generalaxis3.asy
-2020/08/06 | 3766 | fonts/xcharter/enc/xch1_62ztbr.enc
-2020/08/06 | 3765 | graphics/asymptote/prc/PRCdouble.h
-2020/08/06 | 374 | graphics/asymptote/doc/monthaxis.asy
-2020/08/06 | 3740 | fonts/xcharter/enc/xch1_oj27u4.enc
-2020/08/06 | 373 | graphics/asymptote/examples/projectelevation.asy
-2020/08/06 | 373 | graphics/asymptote/doc/lineargraph.asy
-2020/08/06 | 3739 | graphics/asymptote/examples/xstitch.asy
-2020/08/06 | 3736 | fonts/xcharter/enc/xch1_bpv7ty.enc
-2020/08/06 | 3734 | fonts/xcharter/tex/T2ASRBXCharter-TLF.fd
-2020/08/06 | 3724 | graphics/asymptote/base/three_light.asy
-2020/08/06 | 3716 | graphics/asymptote/base/plain_constants.asy
-2020/08/06 | 3704 | fonts/xcharter/enc/xch_gb4haz.enc
-2020/08/06 | 369 | graphics/asymptote/tests/gs/ghostscript.asy
-2020/08/06 | 3699 | fonts/xcharter/enc/xch_l6an6k.enc
-2020/08/06 | 366 | graphics/asymptote/doc/lineargraph0.asy
-2020/08/06 | 3668 | graphics/asymptote/constructor.cc
-2020/08/06 | 3665 | fonts/xcharter/enc/xch1_5xfeuz.enc
-2020/08/06 | 3660 | fonts/xcharter/enc/xch_e3nxtd.enc
-2020/08/06 | 3655 | fonts/xcharter/enc/xch_bcg6lk.enc
-2020/08/06 | 364537 | support/pkfix-helper/encoding-samples.pdf
-2020/08/06 | 3640 | graphics/asymptote/bbox3.h
-2020/08/06 | 3639 | fonts/xcharter/enc/xch1_dbdfpx.enc
-2020/08/06 | 3634 | fonts/xcharter/enc/xch1_gvbfhh.enc
-2020/08/06 | 3633 | fonts/xcharter/enc/xch_tis6bf.enc
-2020/08/06 | 3632 | fonts/xcharter/enc/xch1_jg3oo5.enc
-2020/08/06 | 362 | graphics/asymptote/examples/pipeintersection.asy
-2020/08/06 | 36243 | graphics/asymptote/prc/test.cc
-2020/08/06 | 3622 | fonts/xcharter/enc/xch1_wqeam3.enc
-2020/08/06 | 3620 | fonts/xcharter/enc/xch1_64qgug.enc
-2020/08/06 | 361 | graphics/asymptote/GUI/res/icons/anchor.svg
-2020/08/06 | 361 | graphics/asymptote/examples/phase.asy
-2020/08/06 | 3616 | graphics/asymptote/GUI/UndoRedoStack.py
-2020/08/06 | 3613 | fonts/xcharter/enc/xch_imj3v4.enc
-2020/08/06 | 3613 | fonts/xcharter/enc/xch_5klbw4.enc
-2020/08/06 | 360 | graphics/asymptote/examples/washer.asy
-2020/08/06 | 3608 | fonts/xcharter/enc/xch_ykltyo.enc
-2020/08/06 | 3600 | fonts/xcharter/enc/xch1_wwsmtw.enc
-2020/08/06 | 35 | graphics/asymptote/base/fontsize.asy
-2020/08/06 | 358 | graphics/asymptote/base/pstoedit.asy
-2020/08/06 | 357 | graphics/asymptote/doc/irregularcontour.asy
-2020/08/06 | 3576 | fonts/xcharter/enc/xch_wi6ykn.enc
-2020/08/06 | 3569 | fonts/xcharter/enc/xch_ouuvex.enc
-2020/08/06 | 3564 | fonts/xcharter/enc/xch_4siibn.enc
-2020/08/06 | 3563 | fonts/xcharter/enc/xch_yz7cd7.enc
-2020/08/06 | 3562 | fonts/xcharter/enc/xch_qdfne6.enc
-2020/08/06 | 355 | graphics/asymptote/doc/scaledgraph.asy
-2020/08/06 | 3556 | fonts/xcharter/tfm/XCharter-Slanted-tlf-ot2.tfm
-2020/08/06 | 3554 | fonts/xcharter/enc/xch_erwtw3.enc
-2020/08/06 | 355211 | macros/latex/contrib/hausarbeit-jura.zip
-2020/08/06 | 3551 | fonts/xcharter/enc/xch_evj3rb.enc
-2020/08/06 | 354 | graphics/asymptote/doc/reloadpdf.tex
-2020/08/06 | 354 | graphics/asymptote/doc/planes.asy
-2020/08/06 | 3533 | fonts/xcharter/enc/xch_3nubio.enc
-2020/08/06 | 3532 | fonts/xcharter/enc/xch_vv7waw.enc
-2020/08/06 | 352 | graphics/asymptote/examples/cylinder.asy
-2020/08/06 | 3527 | fonts/xcharter/enc/xch_l4c4ke.enc
-2020/08/06 | 351 | graphics/asymptote/examples/vectorfieldsphere.asy
-2020/08/06 | 3517 | fonts/xcharter/enc/xch_ph46id.enc
-2020/08/06 | 35147 | graphics/asymptote/LICENSE
-2020/08/06 | 3511 | fonts/xcharter/enc/xch_xqcxen.enc
-2020/08/06 | 3507 | graphics/asymptote/build-scripts/build-asymptote.dos
-2020/08/06 | 3507 | fonts/xcharter/enc/xch1_7p4e2o.enc
-2020/08/06 | 3503 | graphics/asymptote/GUI/CustMatTransform.py
-2020/08/06 | 3503 | fonts/xcharter/enc/xch_pqp4df.enc
-2020/08/06 | 34 | graphics/asymptote/autogen.sh
-2020/08/06 | 349 | graphics/asymptote/examples/logdown.asy
-2020/08/06 | 3497 | graphics/asymptote/doc/ocg.sty
-2020/08/06 | 348 | graphics/asymptote/examples/RiemannSurface.asy
-2020/08/06 | 3485 | fonts/xcharter/enc/xch_ct4qni.enc
-2020/08/06 | 3480 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-ot2.tfm
-2020/08/06 | 3472 | fonts/xcharter/enc/xch_dcwqct.enc
-2020/08/06 | 3472 | fonts/xcharter/enc/xch1_ivnpe7.enc
-2020/08/06 | 3471 | fonts/xcharter/enc/xch_lotb2t.enc
-2020/08/06 | 3470 | fonts/xcharter/enc/xch1_q2nwaj.enc
-2020/08/06 | 3465 | graphics/asymptote/drawpath.cc
-2020/08/06 | 3463 | fonts/xcharter/enc/xch_opza6q.enc
-2020/08/06 | 3460 | fonts/xcharter/enc/xch_ch4v2b.enc
-2020/08/06 | 345 | graphics/asymptote/examples/rainbow.asy
-2020/08/06 | 3442 | fonts/xcharter/enc/xch_wiwj7n.enc
-2020/08/06 | 3441 | graphics/asymptote/rounding.h
-2020/08/06 | 3441 | fonts/xcharter/enc/xch_3reguq.enc
-2020/08/06 | 343 | graphics/asymptote/doc/externalprc.tex
-2020/08/06 | 3436 | fonts/xcharter/enc/xch_nxyw3t.enc
-2020/08/06 | 3431 | graphics/asymptote/picture.h
-2020/08/06 | 3430 | graphics/asymptote/base/roundedpath.asy
-2020/08/06 | 342 | graphics/asymptote/lexical.h
-2020/08/06 | 3428 | fonts/xcharter/tfm/XCharter-Roman-tlf-ot2.tfm
-2020/08/06 | 3423 | fonts/xcharter/enc/xch_6l4ixg.enc
-2020/08/06 | 3421 | fonts/xcharter/enc/xch_xmfb6b.enc
-2020/08/06 | 341 | graphics/asymptote/examples/slidedemo_.bbl
-2020/08/06 | 341 | graphics/asymptote/examples/sacylinder3D.asy
-2020/08/06 | 341 | graphics/asymptote/doc/subpictures.asy
-2020/08/06 | 3410 | fonts/xcharter/enc/xch_62ztbr.enc
-2020/08/06 | 340891 | macros/latex/contrib/hausarbeit-jura/hausarbeit-jura.pdf
-2020/08/06 | 3384 | fonts/xcharter/enc/xch_oj27u4.enc
-2020/08/06 | 33828 | graphics/asymptote/exp.cc
-2020/08/06 | 33813 | graphics/asymptote/path.cc
-2020/08/06 | 3380 | fonts/xcharter/enc/xch_bpv7ty.enc
-2020/08/06 | 3375 | graphics/asymptote/tests/types/guide.asy
-2020/08/06 | 3348 | fonts/xcharter/tfm/XCharter-Bold-tlf-ot2.tfm
-2020/08/06 | 3340 | graphics/asymptote/examples/slidedemo.asy
-2020/08/06 | 333 | graphics/asymptote/doc/asy.1.end
-2020/08/06 | 3335 | graphics/asymptote/examples/pdb.asy
-2020/08/06 | 3332 | fonts/xcharter/enc/xch_2jytnu.enc
-2020/08/06 | 3330 | fonts/xcharter/enc/xch_kkifs2.enc
-2020/08/06 | 3319 | fonts/xcharter/enc/xch_h2xo5a.enc
-2020/08/06 | 3309 | fonts/xcharter/enc/xch_5xfeuz.enc
-2020/08/06 | 3297 | graphics/asymptote/access.cc
-2020/08/06 | 3295 | graphics/asymptote/stack.h
-2020/08/06 | 3291 | fonts/xcharter/enc/xch_3j6jnh.enc
-2020/08/06 | 3289 | fonts/xcharter/enc/xch_yrgi2d.enc
-2020/08/06 | 3283 | fonts/xcharter/enc/xch_dbdfpx.enc
-2020/08/06 | 327 | graphics/asymptote/examples/sin1x.asy
-2020/08/06 | 3278 | graphics/asymptote/base/obj.asy
-2020/08/06 | 3278 | fonts/xcharter/enc/xch_gvbfhh.enc
-2020/08/06 | 3276 | fonts/xcharter/enc/xch_jg3oo5.enc
-2020/08/06 | 3276 | fonts/xcharter/enc/xch_dwd75d.enc
-2020/08/06 | 326 | graphics/asymptote/examples/polardatagraph.asy
-2020/08/06 | 326 | graphics/asymptote/examples/animations/pdfmovie.asy
-2020/08/06 | 3266 | fonts/xcharter/enc/xch_wqeam3.enc
-2020/08/06 | 3265 | graphics/asymptote/program.cc
-2020/08/06 | 3265 | fonts/xcharter/enc/xch_bk4eiy.enc
-2020/08/06 | 3264 | fonts/xcharter/enc/xch_64qgug.enc
-2020/08/06 | 325 | graphics/asymptote/examples/elevation.asy
-2020/08/06 | 324 | graphics/asymptote/doc/HermiteSpline.asy
-2020/08/06 | 3249 | graphics/asymptote/GUI/Widg_addLabel.py
-2020/08/06 | 3244 | fonts/xcharter/enc/xch_wwsmtw.enc
-2020/08/06 | 3237 | fonts/xcharter/enc/xch_hk5uz5.enc
-2020/08/06 | 322 | graphics/asymptote/examples/unitcircle.asy
-2020/08/06 | 322 | graphics/asymptote/examples/cheese.asy
-2020/08/06 | 3225 | fonts/xcharter/enc/xch_v6llfb.enc
-2020/08/06 | 3220 | fonts/xcharter/tfm/XCharter-Italic-tlf-ot2.tfm
-2020/08/06 | 3218 | fonts/xcharter/enc/xch_uv5z4v.enc
-2020/08/06 | 320 | graphics/asymptote/runtriple.h
-2020/08/06 | 32094 | graphics/asymptote/bezierpatch.cc
-2020/08/06 | 320398 | graphics/asymptote/base/geometry.asy
-2020/08/06 | 3199 | fonts/xcharter/enc/xch_62z5ot.enc
-2020/08/06 | 3192 | fonts/xcharter/enc/xch_uoo6px.enc
-2020/08/06 | 318 | graphics/asymptote/patches/gcc3.3.2curses.patch
-2020/08/06 | 3187 | fonts/xcharter/enc/xch_2acc4n.enc
-2020/08/06 | 3185 | fonts/xcharter/enc/xch_o6avng.enc
-2020/08/06 | 3178 | fonts/xcharter/enc/xch_ay4e7o.enc
-2020/08/06 | 3175 | fonts/xcharter/enc/xch_ckugtc.enc
-2020/08/06 | 3173 | fonts/xcharter/enc/xch_wizqmm.enc
-2020/08/06 | 31609 | graphics/asymptote/config.sub
-2020/08/06 | 315 | graphics/asymptote/examples/strokepath.asy
-2020/08/06 | 315 | graphics/asymptote/examples/hyperboloid.asy
-2020/08/06 | 3158 | fonts/xcharter/enc/xch_3oyzty.enc
-2020/08/06 | 3153 | graphics/asymptote/genv.cc
-2020/08/06 | 3153 | fonts/xcharter/enc/xch_uy5hgr.enc
-2020/08/06 | 3151 | fonts/xcharter/enc/xch_7p4e2o.enc
-2020/08/06 | 314 | graphics/asymptote/doc/logticks.asy
-2020/08/06 | 314 | graphics/asymptote/base/graph_settings.asy
-2020/08/06 | 3143 | fonts/xcharter/enc/xch_7cmdv6.enc
-2020/08/06 | 31342 | graphics/asymptote/builtin.cc
-2020/08/06 | 312 | graphics/asymptote/examples/textpath.asy
-2020/08/06 | 3116 | fonts/xcharter/enc/xch_ivnpe7.enc
-2020/08/06 | 3114 | fonts/xcharter/enc/xch_q2nwaj.enc
-2020/08/06 | 3109 | fonts/xcharter/enc/xch_26pbhy.enc
-2020/08/06 | 3106 | graphics/asymptote/doc/latexusage.tex
-2020/08/06 | 3106 | fonts/xcharter/enc/xch_57lqj7.enc
-2020/08/06 | 3101 | fonts/xcharter/enc/xch_h4dyum.enc
-2020/08/06 | 308 | graphics/asymptote/tests/types/shadow.asy
-2020/08/06 | 308 | graphics/asymptote/tests/Makefile
-2020/08/06 | 308 | graphics/asymptote/examples/oneoverx.asy
-2020/08/06 | 308 | graphics/asymptote/examples/1overx.asy
-2020/08/06 | 3089 | fonts/xcharter/enc/xch_ybxeq6.enc
-2020/08/06 | 3081 | fonts/xcharter/enc/xch_ao7ayk.enc
-2020/08/06 | 306 | graphics/asymptote/doc/binarytreetest.asy
-2020/08/06 | 3064 | fonts/xcharter/enc/xch_x25wg5.enc
-2020/08/06 | 3060 | fonts/xcharter/enc/xch_hnm3ex.enc
-2020/08/06 | 3049 | macros/latex/contrib/mercatormap/mercatormap-example.tex
-2020/08/06 | 3044 | fonts/xcharter/enc/xch_hrleas.enc
-2020/08/06 | 303 | graphics/asymptote/examples/tensor.asy
-2020/08/06 | 3028 | fonts/xcharter/enc/xch_vtvjjk.enc
-2020/08/06 | 3025 | fonts/xcharter/enc/xch_abgjzu.enc
-2020/08/06 | 3024 | graphics/asymptote/drawimage.h
-2020/08/06 | 3023 | graphics/asymptote/doc/Makefile.in
-2020/08/06 | 3023 | fonts/xcharter/enc/xch_bxmb3o.enc
-2020/08/06 | 30208 | graphics/asymptote/prc/PRC.h
-2020/08/06 | 30147 | graphics/asymptote/getopt.c
-2020/08/06 | 3011 | fonts/xcharter/enc/xch_l7jokp.enc
-2020/08/06 | 3001 | graphics/asymptote/asymptote.spec
-2020/08/06 | 299 | graphics/asymptote/runpair.h
-2020/08/06 | 2991 | fonts/xcharter/enc/xch_og2pus.enc
-2020/08/06 | 2983 | macros/latex/contrib/mercatormap/mercatormap.tex
-2020/08/06 | 2982 | graphics/asymptote/process.h
-2020/08/06 | 297 | graphics/asymptote/build-scripts/README-binaries
-2020/08/06 | 297 | graphics/asymptote/binaries/i386-windows/texlive/README
-2020/08/06 | 2979 | graphics/asymptote/doc/diatom.asy
-2020/08/06 | 2974 | fonts/xcharter/enc/xch_s3y5jv.enc
-2020/08/06 | 2964 | graphics/asymptote/access.h
-2020/08/06 | 294 | graphics/asymptote/guideflags.h
-2020/08/06 | 293 | graphics/asymptote/doc/makepen.asy
-2020/08/06 | 291 | graphics/asymptote/examples/trumpet.asy
-2020/08/06 | 289 | graphics/asymptote/examples/jump.asy
-2020/08/06 | 289 | graphics/asymptote/base/res/notes.txt
-2020/08/06 | 2894 | graphics/asymptote/shaders.cc
-2020/08/06 | 288 | graphics/asymptote/examples/sacone3D.asy
-2020/08/06 | 288 | graphics/asymptote/doc/mexicanhat.asy
-2020/08/06 | 2880 | graphics/asymptote/drawgroup.h
-2020/08/06 | 2880 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-ot2.tfm
-2020/08/06 | 28783 | graphics/asymptote/exp.h
-2020/08/06 | 287360 | graphics/asymptote/configure
-2020/08/06 | 284 | graphics/asymptote/GUI/res/icons/text.svg
-2020/08/06 | 2832 | graphics/asymptote/examples/alignedaxis.asy
-2020/08/06 | 2825 | graphics/asymptote/GUI/pyUIClass/setCustomAnchor.py
-2020/08/06 | 2800 | graphics/asymptote/doc/asycolors.sty
-2020/08/06 | 279 | graphics/asymptote/doc/hatch.asy
-2020/08/06 | 277 | graphics/asymptote/doc/generalaxis.asy
-2020/08/06 | 27767 | graphics/asymptote/pen.h
-2020/08/06 | 2771 | graphics/asymptote/doc/pixel.pdf
-2020/08/06 | 276 | graphics/asymptote/tests/bench/6000circles.asy
-2020/08/06 | 2766 | graphics/asymptote/lnkX64IconFix.nsh
-2020/08/06 | 2764 | graphics/asymptote/base/three_margins.asy
-2020/08/06 | 27567 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/08/06 | 27452 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-ly1.tfm
-2020/08/06 | 27436 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-ly1.tfm
-2020/08/06 | 27400 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-ly1.tfm
-2020/08/06 | 2732 | graphics/asymptote/record.h
-2020/08/06 | 2731 | graphics/asymptote/tests/types/resolve.asy
-2020/08/06 | 27252 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-ly1.tfm
-2020/08/06 | 27236 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-ly1.tfm
-2020/08/06 | 27204 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-ly1.tfm
-2020/08/06 | 271 | graphics/asymptote/patches/gc6.8_AIX.patch
-2020/08/06 | 2707 | graphics/asymptote/runtriple.in
-2020/08/06 | 26 | graphics/asymptote/doc/filegraph.dat
-2020/08/06 | 269 | graphics/asymptote/runmath.h
-2020/08/06 | 2697 | graphics/asymptote/table.h
-2020/08/06 | 268 | graphics/asymptote/base/asy-init.el
-2020/08/06 | 2684 | graphics/asymptote/settings.h
-2020/08/06 | 26844 | graphics/asymptote/runpath.cc
-2020/08/06 | 2680 | graphics/asymptote/examples/soccerball.asy
-2020/08/06 | 26804 | fonts/xcharter/tfm/XCharter-Roman-tosf-ly1.tfm
-2020/08/06 | 267 | graphics/asymptote/examples/hyperboloidsilhouette.asy
-2020/08/06 | 26768 | fonts/xcharter/tfm/XCharter-Roman-tlf-ly1.tfm
-2020/08/06 | 2674 | graphics/asymptote/doc/markers1.asy
-2020/08/06 | 2661 | graphics/asymptote/runbacktrace.cc
-2020/08/06 | 26603 | support/pkfix-helper/pkfix-helper.1
-2020/08/06 | 26572 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-t1.tfm
-2020/08/06 | 2654 | graphics/asymptote/symbol.h
-2020/08/06 | 26548 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-t1.tfm
-2020/08/06 | 2653 | graphics/asymptote/doc/TeXShopAndAsymptote.tex
-2020/08/06 | 26512 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-t1.tfm
-2020/08/06 | 264 | graphics/asymptote/examples/labelbox.asy
-2020/08/06 | 264 | graphics/asymptote/examples/coag.asy
-2020/08/06 | 26392 | fonts/xcharter/tfm/XCharter-Bold-tosf-ly1.tfm
-2020/08/06 | 26356 | fonts/xcharter/tfm/XCharter-Bold-tlf-ly1.tfm
-2020/08/06 | 26348 | fonts/xcharter/tfm/XCharter1-Roman-tosf-ly1.tfm
-2020/08/06 | 2632 | graphics/asymptote/material.h
-2020/08/06 | 26328 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-ly1.tfm
-2020/08/06 | 2631 | graphics/asymptote/GUI/windows/setCustomAnchor.ui
-2020/08/06 | 262 | graphics/asymptote/doc/loggraph.asy
-2020/08/06 | 26292 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-ly1.tfm
-2020/08/06 | 26276 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-ly1.tfm
-2020/08/06 | 2626 | graphics/asymptote/examples/worldmap.asy
-2020/08/06 | 26260 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-ly1.tfm
-2020/08/06 | 26256 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-ly1.tfm
-2020/08/06 | 26224 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-ly1.tfm
-2020/08/06 | 261 | graphics/asymptote/doc/join.asy
-2020/08/06 | 2614 | graphics/asymptote/pipestream.h
-2020/08/06 | 2613 | graphics/asymptote/base/patterns.asy
-2020/08/06 | 26096 | graphics/asymptote/examples/uhrturm.obj
-2020/08/06 | 26076 | fonts/xcharter/tfm/XCharter1-Bold-tosf-ly1.tfm
-2020/08/06 | 26044 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-t1.tfm
-2020/08/06 | 26020 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-t1.tfm
-2020/08/06 | 26016 | fonts/xcharter/tfm/XCharter-Italic-tosf-ly1.tfm
-2020/08/06 | 25996 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-ly1.tfm
-2020/08/06 | 25988 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-t1.tfm
-2020/08/06 | 25980 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-ly1.tfm
-2020/08/06 | 25980 | fonts/xcharter/tfm/XCharter-Italic-tlf-ly1.tfm
-2020/08/06 | 25944 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-ly1.tfm
-2020/08/06 | 25840 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-ly1.tfm
-2020/08/06 | 25812 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-ly1.tfm
-2020/08/06 | 25701 | graphics/asymptote/runpath3d.cc
-2020/08/06 | 256 | graphics/asymptote/doc/shadedtiling.asy
-2020/08/06 | 25696 | macros/latex/contrib/mercatormap/mercatormap.doc.marker.tex
-2020/08/06 | 25672 | fonts/xcharter/tfm/XCharter-Slanted-tosf-ly1.tfm
-2020/08/06 | 25640 | fonts/xcharter/tfm/XCharter-Slanted-tlf-ly1.tfm
-2020/08/06 | 2561 | graphics/asymptote/program.h
-2020/08/06 | 255 | graphics/asymptote/BUGS
-2020/08/06 | 25580 | systems/texlive/tlnet/archive/translator.r56052.tar.xz
-2020/08/06 | 25576 | fonts/xcharter/tfm/XCharter1-Italic-tosf-ly1.tfm
-2020/08/06 | 2554 | graphics/asymptote/GUI/xasyFile.py
-2020/08/06 | 2552 | graphics/asymptote/base/plain_margins.asy
-2020/08/06 | 254 | graphics/asymptote/examples/parametricelevation.asy
-2020/08/06 | 254 | graphics/asymptote/examples/contextfonts.asy
-2020/08/06 | 25484 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-ly1.tfm
-2020/08/06 | 25452 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-ly1.tfm
-2020/08/06 | 2542 | graphics/asymptote/policy.h
-2020/08/06 | 25424 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-ly1.tfm
-2020/08/06 | 2536 | macros/latex/contrib/hausarbeit-jura/README.md
-2020/08/06 | 25357 | graphics/asymptote/base/lmfit.asy
-2020/08/06 | 25332 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-ly1.tfm
-2020/08/06 | 25300 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-ly1.tfm
-2020/08/06 | 25268 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-ly1.tfm
-2020/08/06 | 25223 | graphics/asymptote/process.cc
-2020/08/06 | 25220 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-ly1.tfm
-2020/08/06 | 251 | graphics/asymptote/examples/triceratops.asy
-2020/08/06 | 251 | graphics/asymptote/base/metapost.asy
-2020/08/06 | 2518 | graphics/asymptote/prc/PRCbitStream.h
-2020/08/06 | 25160 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-ly1.tfm
-2020/08/06 | 25137 | graphics/asymptote/doc/extra/intro.asy
-2020/08/06 | 250 | graphics/asymptote/examples/transparentCubes.asy
-2020/08/06 | 25072 | fonts/xcharter/tfm/XCharter1-Roman-tosf-t1.tfm
-2020/08/06 | 2505 | graphics/asymptote/README
-2020/08/06 | 2505 | graphics/asymptote/binaries/x86_64-windows/README
-2020/08/06 | 2505 | graphics/asymptote/binaries/i386-windows/README
-2020/08/06 | 2504 | graphics/asymptote/examples/mosquito.asy
-2020/08/06 | 25036 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-t1.tfm
-2020/08/06 | 25024 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-t1.tfm
-2020/08/06 | 25020 | fonts/xcharter/tfm/XCharter-Roman-tosf-t1.tfm
-2020/08/06 | 25012 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-t1.tfm
-2020/08/06 | 24 | graphics/asymptote/doc/diagonal.asy
-2020/08/06 | 24992 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-t1.tfm
-2020/08/06 | 24984 | fonts/xcharter/tfm/XCharter-Roman-tlf-t1.tfm
-2020/08/06 | 24976 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-t1.tfm
-2020/08/06 | 24952 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-t1.tfm
-2020/08/06 | 24872307 | macros/latex/contrib/mercatormap/mercatormap.pdf
-2020/08/06 | 2482 | graphics/asymptote/build-scripts/build-asymptote
-2020/08/06 | 24764 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-t1.tfm
-2020/08/06 | 24740 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-t1.tfm
-2020/08/06 | 24704 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-t1.tfm
-2020/08/06 | 246 | graphics/asymptote/examples/transparency.asy
-2020/08/06 | 246 | graphics/asymptote/doc/axis3.asy
-2020/08/06 | 245 | graphics/asymptote/examples/alignbox.asy
-2020/08/06 | 2451 | graphics/asymptote/base/labelpath3.asy
-2020/08/06 | 244 | graphics/asymptote/tests/arith/triple.asy
-2020/08/06 | 24411354 | macros/latex/contrib/mercatormap.zip
-2020/08/06 | 24409080 | install/macros/latex/contrib/mercatormap.tds.zip
-2020/08/06 | 243 | graphics/asymptote/doc/cube.asy
-2020/08/06 | 24384 | fonts/xcharter/tfm/XCharter1-Bold-tosf-t1.tfm
-2020/08/06 | 242 | graphics/asymptote/examples/equilateral.asy
-2020/08/06 | 24212 | fonts/xcharter/tfm/XCharter-Bold-tosf-t1.tfm
-2020/08/06 | 24172 | fonts/xcharter/tfm/XCharter-Bold-tlf-t1.tfm
-2020/08/06 | 240 | graphics/asymptote/doc/parametricgraph.asy
-2020/08/06 | 24048 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-t1.tfm
-2020/08/06 | 24024 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-t1.tfm
-2020/08/06 | 23 | graphics/asymptote/GUI/__init__.py
-2020/08/06 | 2399 | graphics/asymptote/GUI/PrimitiveShape.py
-2020/08/06 | 23992 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-t1.tfm
-2020/08/06 | 2398 | graphics/asymptote/examples/SierpinskiSponge.asy
-2020/08/06 | 23944 | fonts/xcharter/tfm/XCharter1-Italic-tosf-t1.tfm
-2020/08/06 | 238 | graphics/asymptote/tests/TestLib.asy
-2020/08/06 | 238 | graphics/asymptote/GUI/xasyValidator.py
-2020/08/06 | 238 | graphics/asymptote/doc/filegraph.asy
-2020/08/06 | 23892 | fonts/xcharter/tfm/XCharter-Italic-tosf-t1.tfm
-2020/08/06 | 23860 | fonts/xcharter/tfm/XCharter-Italic-tlf-t1.tfm
-2020/08/06 | 23791 | graphics/asymptote/base/three_arrows.asy
-2020/08/06 | 2378 | graphics/asymptote/profile.py
-2020/08/06 | 23772 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-t1.tfm
-2020/08/06 | 23720 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-t1.tfm
-2020/08/06 | 236 | graphics/asymptote/tests/string/erase.asy
-2020/08/06 | 236 | graphics/asymptote/examples/annotation.asy
-2020/08/06 | 23696 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-t1.tfm
-2020/08/06 | 23631 | graphics/asymptote/drawsurface.cc
-2020/08/06 | 23620 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-t1.tfm
-2020/08/06 | 2360 | graphics/asymptote/examples/spectrum.asy
-2020/08/06 | 235 | graphics/asymptote/examples/cos2theta.asy
-2020/08/06 | 23568 | fonts/xcharter/tfm/XCharter-Slanted-tosf-t1.tfm
-2020/08/06 | 23536 | fonts/xcharter/tfm/XCharter-Slanted-tlf-t1.tfm
-2020/08/06 | 23520 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-t1.tfm
-2020/08/06 | 234 | graphics/asymptote/doc/beziercurve.asy
-2020/08/06 | 2341 | graphics/asymptote/prc/PRCTools/iPRCFile.h
-2020/08/06 | 233 | graphics/asymptote/examples/cardioid.asy
-2020/08/06 | 23364 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-t1.tfm
-2020/08/06 | 23332 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-t1.tfm
-2020/08/06 | 2328 | graphics/asymptote/virtualfieldaccess.h
-2020/08/06 | 22 | graphics/asymptote/tests/output/line.asy
-2020/08/06 | 22 | graphics/asymptote/GUI/configs/__init__.py
-2020/08/06 | 22971 | graphics/asymptote/base/syzygy.asy
-2020/08/06 | 228 | graphics/asymptote/examples/circumcircle.asy
-2020/08/06 | 2287 | graphics/asymptote/errormsg.cc
-2020/08/06 | 22873 | graphics/asymptote/examples/piicon.png
-2020/08/06 | 2277 | graphics/asymptote/base/texcolors.asy
-2020/08/06 | 2276 | graphics/asymptote/prc/PRCTools/inflation.cc
-2020/08/06 | 2266 | graphics/asymptote/align.h
-2020/08/06 | 22594 | graphics/asymptote/base/plain_arrows.asy
-2020/08/06 | 224 | graphics/asymptote/tests/types/init.asy
-2020/08/06 | 22345 | graphics/asymptote/knot.cc
-2020/08/06 | 222 | graphics/asymptote/wce
-2020/08/06 | 222 | graphics/asymptote/examples/yingyang.asy
-2020/08/06 | 2222 | graphics/asymptote/tests/frames/loop.asy
-2020/08/06 | 2207 | fonts/xcharter/tex/T2ASRBXCharter-Sup.fd
-2020/08/06 | 219 | graphics/asymptote/doc/penimage.asy
-2020/08/06 | 2193 | graphics/asymptote/GUI/pyUIClass/widg_addPolyOpt.py
-2020/08/06 | 21926 | graphics/asymptote/runmath.cc
-2020/08/06 | 2191 | graphics/asymptote/examples/splitpatch.asy
-2020/08/06 | 218 | graphics/asymptote/doc/datagraph.asy
-2020/08/06 | 2187 | graphics/asymptote/locate.cc
-2020/08/06 | 2187 | graphics/asymptote/base/plain_debugger.asy
-2020/08/06 | 2181 | graphics/asymptote/build-scripts/HOWTO-MSWindows
-2020/08/06 | 2164 | graphics/asymptote/frame.h
-2020/08/06 | 215600 | systems/texlive/tlnet/archive/translator.doc.r56052.tar.xz
-2020/08/06 | 2148 | graphics/asymptote/GUI/windows/widg_addPolyOpt.ui
-2020/08/06 | 2146 | graphics/asymptote/webgl/fragment.glsl
-2020/08/06 | 21448 | graphics/asymptote/base/feynman.asy
-2020/08/06 | 21399 | macros/latex/contrib/mercatormap/mercatorpy.def
-2020/08/06 | 2136 | graphics/asymptote/seconds.h
-2020/08/06 | 2136 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 2134 | graphics/asymptote/drawlabel.h
-2020/08/06 | 213400 | systems/texlive/tlnet/archive/notomath.r56050.tar.xz
-2020/08/06 | 2132 | fonts/xcharter/tfm/XCharter-Slanted-tosf-t2asrb--base.tfm
-2020/08/06 | 2132 | fonts/xcharter/tfm/XCharter-Slanted-tosf-t2a--base.tfm
-2020/08/06 | 2132 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-t2a--base.tfm
-2020/08/06 | 2128 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 2128 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-t2a--base.tfm
-2020/08/06 | 2128 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 21276 | macros/latex/contrib/mercatormap/mercatormap.doc.definition.tex
-2020/08/06 | 2124 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-t2asrb--base.tfm
-2020/08/06 | 2124 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-t2a--base.tfm
-2020/08/06 | 2124 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-t2a--base.tfm
-2020/08/06 | 2120 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-t2asrb--base.tfm
-2020/08/06 | 2120 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 2120 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-t2a--base.tfm
-2020/08/06 | 2116 | fonts/xcharter/tfm/XCharter-Slanted-sup-t2a.tfm
-2020/08/06 | 2116 | fonts/xcharter/tfm/XCharter-Slanted-sup-t2asrb.tfm
-2020/08/06 | 2116 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-t2a--base.tfm
-2020/08/06 | 2112 | fonts/xcharter/tfm/XCharter-Slanted-sup-t2asrb--base.tfm
-2020/08/06 | 2112 | fonts/xcharter/tfm/XCharter-Slanted-sup-t2a--base.tfm
-2020/08/06 | 2112 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-t2asrb--base.tfm
-2020/08/06 | 2112 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-t2a--base.tfm
-2020/08/06 | 210 | graphics/asymptote/examples/spiral.asy
-2020/08/06 | 210 | graphics/asymptote/build-scripts/asy-indent.el
-2020/08/06 | 2109 | graphics/asymptote/base/drawtree.asy
-2020/08/06 | 2107 | graphics/asymptote/jsfile.h
-2020/08/06 | 2104 | fonts/xcharter/tfm/XCharter-Slanted-tlf-t2asrb--base.tfm
-2020/08/06 | 2104 | fonts/xcharter/tfm/XCharter-Slanted-tlf-t2a--base.tfm
-2020/08/06 | 2104 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-t2asrb--base.tfm
-2020/08/06 | 2104 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-t2a--base.tfm
-2020/08/06 | 2101 | graphics/asymptote/examples/truncatedIcosahedron.asy
-2020/08/06 | 2100 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-t2asrb--base.tfm
-2020/08/06 | 2100 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-t2a--base.tfm
-2020/08/06 | 20989 | graphics/asymptote/base/plain_bounds.asy
-2020/08/06 | 20940 | fonts/xcharter/doc/xcharter-doc.tex
-2020/08/06 | 2092 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-t2a.tfm
-2020/08/06 | 2092 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-t2asrb.tfm
-2020/08/06 | 2088 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-t2asrb--base.tfm
-2020/08/06 | 2088 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-t2a--base.tfm
-2020/08/06 | 2084 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-t2asrb--base.tfm
-2020/08/06 | 2084 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-t2a--base.tfm
-2020/08/06 | 20840 | graphics/asymptote/dec.cc
-2020/08/06 | 207 | graphics/asymptote/examples/triangle.asy
-2020/08/06 | 206 | graphics/asymptote/examples/log.asy
-2020/08/06 | 206707 | graphics/asymptote/asy.list
-2020/08/06 | 205495 | graphics/asymptote/base/colormap.asy
-2020/08/06 | 20495 | graphics/asymptote/runtime.in
-2020/08/06 | 2046 | graphics/asymptote/base/slopefield.asy
-2020/08/06 | 2034 | graphics/asymptote/doc/elliptic.asy
-2020/08/06 | 202 | graphics/asymptote/tests/frames/stat2.asy
-2020/08/06 | 202 | graphics/asymptote/glew.c
-2020/08/06 | 202 | graphics/asymptote/doc/exp.asy
-2020/08/06 | 202 | graphics/asymptote/build-scripts/run-in-indent.el
-2020/08/06 | 2024 | fonts/xcharter/tfm/XCharter-Slanted-tosf-ly1--base.tfm
-2020/08/06 | 2023 | graphics/asymptote/examples/slope.asy
-2020/08/06 | 2020 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-ly1--base.tfm
-2020/08/06 | 2012 | graphics/asymptote/varinit.h
-2020/08/06 | 2012 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-ly1--base.tfm
-2020/08/06 | 2008 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-ly1--base.tfm
-2020/08/06 | 20051 | graphics/asymptote/doc/asyRefCard.tex
-2020/08/06 | 20029 | graphics/asymptote/camp.y
-2020/08/06 | 199 | graphics/asymptote/examples/upint.asy
-2020/08/06 | 199 | graphics/asymptote/examples/BezierTriangle.asy
-2020/08/06 | 19990 | graphics/asymptote/base/contour.asy
-2020/08/06 | 1996 | fonts/xcharter/tfm/XCharter-Roman-sup-t2a.tfm
-2020/08/06 | 1996 | fonts/xcharter/tfm/XCharter-Roman-sup-t2a--base.tfm
-2020/08/06 | 1992 | fonts/xcharter/tfm/XCharter-Slanted-tlf-ly1--base.tfm
-2020/08/06 | 1992 | fonts/xcharter/tfm/XCharter-Roman-sup-t2asrb.tfm
-2020/08/06 | 1992 | fonts/xcharter/tfm/XCharter-Roman-sup-t2asrb--base.tfm
-2020/08/06 | 1992 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-ly1--base.tfm
-2020/08/06 | 1992 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-ly1--base.tfm
-2020/08/06 | 19915 | graphics/asymptote/drawsurface.h
-2020/08/06 | 198 | graphics/asymptote/examples/tanh.asy
-2020/08/06 | 1988 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-ly1--base.tfm
-2020/08/06 | 1988 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-t2a--base.tfm
-2020/08/06 | 1984 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-t1--base.tfm
-2020/08/06 | 1982 | graphics/asymptote/inst.h
-2020/08/06 | 1980 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-ly1--base.tfm
-2020/08/06 | 1980 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-ly1--base.tfm
-2020/08/06 | 1980 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-t2a--base.tfm
-2020/08/06 | 1976 | graphics/asymptote/varinit.cc
-2020/08/06 | 1976 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-t2a--base.tfm
-2020/08/06 | 1976 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 1975 | graphics/asymptote/array.h
-2020/08/06 | 1972 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-t1--base.tfm
-2020/08/06 | 196 | graphics/asymptote/examples/lowint.asy
-2020/08/06 | 196 | graphics/asymptote/examples/label3ribbon.asy
-2020/08/06 | 196 | graphics/asymptote/examples/animations/embeddedu3d.asy
-2020/08/06 | 1968 | graphics/asymptote/examples/mergeExample.asy
-2020/08/06 | 1968 | fonts/xcharter/tfm/XCharter-Slanted-tosf-t1--base.tfm
-2020/08/06 | 1968 | fonts/xcharter/tfm/XCharter-Slanted-sup-ly1.tfm
-2020/08/06 | 1968 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 1968 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-t2a--base.tfm
-2020/08/06 | 1968 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 1967 | graphics/asymptote/GUI/res/icons/filledbucket.svg
-2020/08/06 | 1964 | fonts/xcharter/tfm/XCharter-Slanted-sup-ly1--base.tfm
-2020/08/06 | 1964 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-ly1.tfm
-2020/08/06 | 1964 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-t2a--base.tfm
-2020/08/06 | 19629 | graphics/asymptote/fileio.h
-2020/08/06 | 1960 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-ly1--base.tfm
-2020/08/06 | 1960 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-t1.tfm
-2020/08/06 | 1960 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-ly1--base.tfm
-2020/08/06 | 1960 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 19597 | graphics/asymptote/doc/external-proposal.html
-2020/08/06 | 1956 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-t1--base.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-Slanted-numr-ly1.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-Slanted-inf-ly1.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-Slanted-dnom-ly1.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-t2a--base.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-t1--base.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-t1--base.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-BoldSlanted-numr-ly1.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-BoldSlanted-inf-ly1.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-BoldSlanted-dnom-ly1.tfm
-2020/08/06 | 1952 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-t2asrb--base.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-Slanted-numr-ly1--base.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-Slanted-inf-ly1--base.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-Slanted-dnom-ly1--base.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-BoldSlanted-numr-t1.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-BoldSlanted-numr-ly1--base.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-BoldSlanted-inf-t1.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-BoldSlanted-inf-ly1--base.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-BoldSlanted-dnom-t1.tfm
-2020/08/06 | 1948 | fonts/xcharter/tfm/XCharter-BoldSlanted-dnom-ly1--base.tfm
-2020/08/06 | 19462 | graphics/asymptote/patches/gl-matrix-2.4.0-pruned.patch
-2020/08/06 | 194604 | graphics/asymptote/doc/asy-latex.pdf
-2020/08/06 | 19455 | graphics/asymptote/runpicture.in
-2020/08/06 | 1944 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-ly1--base.tfm
-2020/08/06 | 1944 | fonts/xcharter/tfm/XCharter-Slanted-sup-t1.tfm
-2020/08/06 | 1940 | fonts/xcharter/tfm/XCharter-Italic-tosf-t2a--base.tfm
-2020/08/06 | 1940 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-t2asrb--base.tfm
-2020/08/06 | 1940 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-t1--base.tfm
-2020/08/06 | 1940 | fonts/xcharter/tfm/XCharter-BoldSlanted-numr-t1--base.tfm
-2020/08/06 | 1940 | fonts/xcharter/tfm/XCharter-BoldSlanted-inf-t1--base.tfm
-2020/08/06 | 1940 | fonts/xcharter/tfm/XCharter-BoldSlanted-dnom-t1--base.tfm
-2020/08/06 | 1940 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-t1--base.tfm
-2020/08/06 | 193 | graphics/asymptote/tests/gc/shipout.asy
-2020/08/06 | 193 | graphics/asymptote/tests/arith/random.asy
-2020/08/06 | 1936 | graphics/asymptote/refaccess.h
-2020/08/06 | 1936 | fonts/xcharter/tfm/XCharter-Slanted-tlf-t1--base.tfm
-2020/08/06 | 1936 | fonts/xcharter/tfm/XCharter-Slanted-sup-t1--base.tfm
-2020/08/06 | 1936 | fonts/xcharter/tfm/XCharter-Italic-tosf-t2asrb--base.tfm
-2020/08/06 | 1932 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-t2a--base.tfm
-2020/08/06 | 1928 | fonts/xcharter/tfm/XCharter-Slanted-numr-t1.tfm
-2020/08/06 | 1928 | fonts/xcharter/tfm/XCharter-Slanted-inf-t1.tfm
-2020/08/06 | 1928 | fonts/xcharter/tfm/XCharter-Slanted-dnom-t1.tfm
-2020/08/06 | 1928 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-t2asrb--base.tfm
-2020/08/06 | 1928 | fonts/xcharter/tfm/XCharter1-Italic-tosf-t2a--base.tfm
-2020/08/06 | 1927 | graphics/asymptote/tests/array/fields.asy
-2020/08/06 | 1927 | graphics/asymptote/prc/PRCTools/bitSearchDouble.cc
-2020/08/06 | 1924 | fonts/xcharter/tfm/XCharter1-Italic-tosf-t2asrb--base.tfm
-2020/08/06 | 1924 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-t2a--base.tfm
-2020/08/06 | 1920 | graphics/asymptote/GUI/res/icons/social-python.svg
-2020/08/06 | 1920 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-t1--base.tfm
-2020/08/06 | 1920 | fonts/xcharter/tfm/XCharter-Slanted-numr-t1--base.tfm
-2020/08/06 | 1920 | fonts/xcharter/tfm/XCharter-Slanted-inf-t1--base.tfm
-2020/08/06 | 1920 | fonts/xcharter/tfm/XCharter-Slanted-dnom-t1--base.tfm
-2020/08/06 | 1920 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-t1--base.tfm
-2020/08/06 | 1920 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-t2asrb--base.tfm
-2020/08/06 | 191 | graphics/asymptote/runpicture.h
-2020/08/06 | 1919 | graphics/asymptote/examples/animations/earthmoon.asy
-2020/08/06 | 1916 | fonts/xcharter/tfm/XCharter-Italic-sup-t2a.tfm
-2020/08/06 | 1916 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-t2a.tfm
-2020/08/06 | 1912 | fonts/xcharter/tfm/XCharter-Italic-sup-t2asrb.tfm
-2020/08/06 | 1912 | fonts/xcharter/tfm/XCharter-Italic-sup-t2a--base.tfm
-2020/08/06 | 1912 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-t2asrb.tfm
-2020/08/06 | 1912 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-t2a--base.tfm
-2020/08/06 | 1910 | graphics/asymptote/examples/linearregression.asy
-2020/08/06 | 1908 | macros/latex/contrib/mercatormap/mercatormap.doc.versionhistory.tex
-2020/08/06 | 1908 | fonts/xcharter/tfm/XCharter-Italic-tlf-t2a--base.tfm
-2020/08/06 | 1908 | fonts/xcharter/tfm/XCharter-Italic-sup-t2asrb--base.tfm
-2020/08/06 | 1908 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-t1--base.tfm
-2020/08/06 | 1908 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-t2a--base.tfm
-2020/08/06 | 1908 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-t2asrb--base.tfm
-2020/08/06 | 1904 | fonts/xcharter/tfm/XCharter-Italic-tlf-t2asrb--base.tfm
-2020/08/06 | 1904 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-t2asrb--base.tfm
-2020/08/06 | 18 | graphics/asymptote/tests/output/circle.asy
-2020/08/06 | 18938 | graphics/asymptote/psfile.cc
-2020/08/06 | 1892 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-sc-t1.vf
-2020/08/06 | 1892 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-sc-t1.vf
-2020/08/06 | 1892 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-sc-t1.vf
-2020/08/06 | 188 | graphics/asymptote/runstring.h
-2020/08/06 | 1888 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-sc-t1.vf
-2020/08/06 | 1888 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 1888 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-t2a--base.tfm
-2020/08/06 | 1884 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-t1--base.tfm
-2020/08/06 | 1880 | fonts/xcharter/vf/XCharter-Slanted-tosf-sc-t1.vf
-2020/08/06 | 1880 | fonts/xcharter/vf/XCharter-Slanted-tlf-sc-t1.vf
-2020/08/06 | 1880 | fonts/xcharter/vf/XCharter-Italic-tosf-sc-t1.vf
-2020/08/06 | 1880 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-ly1.vf
-2020/08/06 | 1880 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-ly1.vf
-2020/08/06 | 1880 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 1880 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-t2a--base.tfm
-2020/08/06 | 187 | graphics/asymptote/tests/string/rfind.asy
-2020/08/06 | 187 | graphics/asymptote/examples/label3solid.asy
-2020/08/06 | 1879 | macros/latex/contrib/mercatormap/README
-2020/08/06 | 1876 | graphics/asymptote/cc-mode2.el
-2020/08/06 | 1876 | fonts/xcharter/vf/XCharter-Roman-tosf-sc-t1.vf
-2020/08/06 | 1876 | fonts/xcharter/vf/XCharter-Italic-tlf-sc-t1.vf
-2020/08/06 | 1876 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-t1.vf
-2020/08/06 | 1876 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-sc-t1.vf
-2020/08/06 | 1876 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-t1.vf
-2020/08/06 | 1872 | fonts/xcharter/vf/XCharter-Roman-tlf-sc-t1.vf
-2020/08/06 | 1872 | fonts/xcharter/vf/XCharter-Bold-tosf-sc-t1.vf
-2020/08/06 | 1872 | fonts/xcharter/vf/XCharter-Bold-tlf-sc-t1.vf
-2020/08/06 | 1872 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-sc-t1.vf
-2020/08/06 | 1872 | fonts/xcharter/tfm/XCharter-Roman-tosf-t2asrb--base.tfm
-2020/08/06 | 1872 | fonts/xcharter/tfm/XCharter-Roman-tosf-t2a--base.tfm
-2020/08/06 | 1872 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 1872 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-ly1--base.tfm
-2020/08/06 | 1872 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-ly1--base.tfm
-2020/08/06 | 186 | graphics/asymptote/runpath3d.h
-2020/08/06 | 186 | graphics/asymptote/doc/unitcircle3.asy
-2020/08/06 | 1868 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-sc-ly1.vf
-2020/08/06 | 1868 | fonts/xcharter/vf/XCharter1-Slanted-tosf-ly1.vf
-2020/08/06 | 1868 | fonts/xcharter/vf/XCharter1-Italic-tosf-ly1.vf
-2020/08/06 | 1868 | fonts/xcharter/tfm/XCharter-Bold-tosf-t2asrb--base.tfm
-2020/08/06 | 1868 | fonts/xcharter/tfm/XCharter-Bold-tosf-t2a--base.tfm
-2020/08/06 | 1868 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-t2a--base.tfm
-2020/08/06 | 18676 | graphics/asymptote/runstring.cc
-2020/08/06 | 1864 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-sc-ly1.vf
-2020/08/06 | 1864 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-sc-ly1.vf
-2020/08/06 | 1864 | fonts/xcharter/vf/XCharter1-Slanted-tosf-t1.vf
-2020/08/06 | 1864 | fonts/xcharter/vf/XCharter1-Slanted-tosf-sc-t1.vf
-2020/08/06 | 1864 | fonts/xcharter/vf/XCharter1-Roman-tosf-ly1.vf
-2020/08/06 | 1864 | fonts/xcharter/vf/XCharter1-Italic-tosf-t1.vf
-2020/08/06 | 1864 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-ly1--base.tfm
-2020/08/06 | 1864 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-ly1--base.tfm
-2020/08/06 | 1864 | fonts/xcharter/tfm/XCharter1-Roman-tosf-t2asrb--base.tfm
-2020/08/06 | 1864 | fonts/xcharter/tfm/XCharter1-Roman-tosf-t2a--base.tfm
-2020/08/06 | 1864 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-ly1--base.tfm
-2020/08/06 | 1864 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-t2asrb--base.tfm
-2020/08/06 | 1863 | graphics/asymptote/prc/PRCTools/bitSearchUI.cc
-2020/08/06 | 186116 | graphics/asymptote/doc/CAD.pdf
-2020/08/06 | 1860 | graphics/asymptote/prc/PRCTools/bitData.h
-2020/08/06 | 1860 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-sc-ly1.vf
-2020/08/06 | 1860 | fonts/xcharter/vf/XCharter1-Roman-tosf-t1.vf
-2020/08/06 | 1860 | fonts/xcharter/vf/XCharter1-Roman-tosf-sc-t1.vf
-2020/08/06 | 1860 | fonts/xcharter/vf/XCharter1-Italic-tosf-sc-t1.vf
-2020/08/06 | 1860 | fonts/xcharter/vf/XCharter1-Bold-tosf-ly1.vf
-2020/08/06 | 1860 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-t2asrb--base.tfm
-2020/08/06 | 1860 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-t2a--base.tfm
-2020/08/06 | 1860 | fonts/xcharter/tfm/XCharter1-Bold-tosf-t2asrb--base.tfm
-2020/08/06 | 1860 | fonts/xcharter/tfm/XCharter1-Bold-tosf-t2a--base.tfm
-2020/08/06 | 1860 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-t2a--base.tfm
-2020/08/06 | 18578 | graphics/asymptote/application.cc
-2020/08/06 | 1856 | fonts/xcharter/vf/XCharter-Slanted-tosf-sc-ly1.vf
-2020/08/06 | 1856 | fonts/xcharter/vf/XCharter1-Bold-tosf-t1.vf
-2020/08/06 | 1856 | fonts/xcharter/vf/XCharter1-Bold-tosf-sc-t1.vf
-2020/08/06 | 1852 | fonts/xcharter/vf/XCharter-Slanted-tlf-sc-ly1.vf
-2020/08/06 | 1852 | fonts/xcharter/vf/XCharter-Italic-tosf-sc-ly1.vf
-2020/08/06 | 1852 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-ly1--base.tfm
-2020/08/06 | 1851 | graphics/asymptote/drawclipbegin.h
-2020/08/06 | 184 | graphics/asymptote/examples/roll.asy
-2020/08/06 | 1848 | fonts/xcharter/vf/XCharter-Roman-tosf-sc-ly1.vf
-2020/08/06 | 1848 | fonts/xcharter/vf/XCharter-Roman-tlf-sc-ly1.vf
-2020/08/06 | 1848 | fonts/xcharter/vf/XCharter-Italic-tlf-sc-ly1.vf
-2020/08/06 | 1848 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-sc-ly1.vf
-2020/08/06 | 1848 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-sc-ly1.vf
-2020/08/06 | 1848 | fonts/xcharter/tfm/XCharter-Roman-sup-t1.tfm
-2020/08/06 | 1848 | fonts/xcharter/tfm/XCharter-Roman-sup-ly1.tfm
-2020/08/06 | 1848 | fonts/xcharter/tfm/XCharter-Italic-tosf-ly1--base.tfm
-2020/08/06 | 1848 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-t2asrb--base.tfm
-2020/08/06 | 1846 | graphics/asymptote/common.h
-2020/08/06 | 1844 | fonts/xcharter/vf/XCharter-Bold-tosf-sc-ly1.vf
-2020/08/06 | 1844 | fonts/xcharter/vf/XCharter-Bold-tlf-sc-ly1.vf
-2020/08/06 | 1844 | fonts/xcharter/tfm/XCharter-Roman-sup-ly1--base.tfm
-2020/08/06 | 1844 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-t2a--base.tfm
-2020/08/06 | 1840 | fonts/xcharter/tfm/XCharter-Roman-tlf-t2asrb--base.tfm
-2020/08/06 | 1840 | fonts/xcharter/tfm/XCharter-Roman-tlf-t2a--base.tfm
-2020/08/06 | 1840 | fonts/xcharter/tfm/XCharter-Roman-sup-t1--base.tfm
-2020/08/06 | 1840 | fonts/xcharter/tfm/XCharter-Bold-sup-t2a.tfm
-2020/08/06 | 1840 | fonts/xcharter/tfm/XCharter-Bold-sup-t2asrb.tfm
-2020/08/06 | 1840 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-ly1--base.tfm
-2020/08/06 | 183 | graphics/asymptote/build-scripts/cc-indent.el
-2020/08/06 | 18384 | graphics/asymptote/texfile.cc
-2020/08/06 | 1836 | fonts/xcharter/vf/XCharter1-Slanted-tosf-sc-ly1.vf
-2020/08/06 | 1836 | fonts/xcharter/vf/XCharter1-Italic-tosf-sc-ly1.vf
-2020/08/06 | 1836 | fonts/xcharter/tfm/XCharter-Bold-sup-t2asrb--base.tfm
-2020/08/06 | 1836 | fonts/xcharter/tfm/XCharter-Bold-sup-t2a--base.tfm
-2020/08/06 | 1836 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-ly1--base.tfm
-2020/08/06 | 1835 | graphics/asymptote/examples/cyclohexane.asy
-2020/08/06 | 1832 | fonts/xcharter/vf/XCharter1-Roman-tosf-sc-ly1.vf
-2020/08/06 | 1832 | fonts/xcharter/tfm/XCharter-Bold-tlf-t2asrb--base.tfm
-2020/08/06 | 1832 | fonts/xcharter/tfm/XCharter-Bold-tlf-t2a--base.tfm
-2020/08/06 | 1832 | fonts/xcharter/tfm/XCharter1-Italic-tosf-ly1--base.tfm
-2020/08/06 | 182 | graphics/asymptote/tests/string/find.asy
-2020/08/06 | 182 | graphics/asymptote/examples/label3.asy
-2020/08/06 | 1828 | graphics/asymptote/beziercurve.cc
-2020/08/06 | 1828 | fonts/xcharter/vf/XCharter1-Bold-tosf-sc-ly1.vf
-2020/08/06 | 1828 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-ly1--base.tfm
-2020/08/06 | 1828 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-t1--base.tfm
-2020/08/06 | 1824 | systems/texlive/tlnet/archive/collection-fontsextra.r56050.tar.xz
-2020/08/06 | 1824 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-t1--base.tfm
-2020/08/06 | 1824 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-t1--base.tfm
-2020/08/06 | 1824 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-t1--base.tfm
-2020/08/06 | 1824 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-t1--base.tfm
-2020/08/06 | 1816 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-t1--base.tfm
-2020/08/06 | 1812 | fonts/xcharter/tfm/XCharter-Italic-tosf-t1--base.tfm
-2020/08/06 | 1812 | fonts/xcharter/tfm/XCharter-Italic-tlf-ly1--base.tfm
-2020/08/06 | 18126 | graphics/asymptote/doc/asy-latex.dtx
-2020/08/06 | 1808 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-t1.tfm
-2020/08/06 | 1805 | graphics/asymptote/patches/cygwin_freeglut-3.0.0.patch
-2020/08/06 | 1804 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-t1--base.tfm
-2020/08/06 | 1804 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-ly1.tfm
-2020/08/06 | 1800 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-t1--base.tfm
-2020/08/06 | 1800 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-ly1--base.tfm
-2020/08/06 | 1800 | fonts/xcharter/tfm/XCharter-BoldItalic-inf-t1.tfm
-2020/08/06 | 1800 | fonts/xcharter/tfm/XCharter1-Italic-tosf-t1--base.tfm
-2020/08/06 | 17987 | graphics/asymptote/entry.cc
-2020/08/06 | 1796 | fonts/xcharter/tfm/XCharter-BoldItalic-numr-t1.tfm
-2020/08/06 | 1796 | fonts/xcharter/tfm/XCharter-BoldItalic-inf-ly1.tfm
-2020/08/06 | 1796 | fonts/xcharter/tfm/XCharter-BoldItalic-dnom-t1.tfm
-2020/08/06 | 1796 | fonts/xcharter/tfm/XCharter-BoldItalic-dnom-ly1.tfm
-2020/08/06 | 1792 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-t1--base.tfm
-2020/08/06 | 1792 | fonts/xcharter/tfm/XCharter-BoldItalic-numr-ly1.tfm
-2020/08/06 | 1792 | fonts/xcharter/tfm/XCharter-BoldItalic-inf-t1--base.tfm
-2020/08/06 | 1792 | fonts/xcharter/tfm/XCharter-BoldItalic-inf-ly1--base.tfm
-2020/08/06 | 1792 | fonts/xcharter/tfm/XCharter-BoldItalic-dnom-ly1--base.tfm
-2020/08/06 | 1788 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-t1--base.tfm
-2020/08/06 | 1788 | fonts/xcharter/tfm/XCharter-Italic-sup-t1.tfm
-2020/08/06 | 1788 | fonts/xcharter/tfm/XCharter-Italic-sup-ly1.tfm
-2020/08/06 | 1788 | fonts/xcharter/tfm/XCharter-BoldItalic-numr-t1--base.tfm
-2020/08/06 | 1788 | fonts/xcharter/tfm/XCharter-BoldItalic-numr-ly1--base.tfm
-2020/08/06 | 1788 | fonts/xcharter/tfm/XCharter-BoldItalic-dnom-t1--base.tfm
-2020/08/06 | 1784 | fonts/xcharter/tfm/XCharter-Italic-sup-ly1--base.tfm
-2020/08/06 | 1784 | fonts/xcharter/tfm/XCharter-Italic-inf-ly1.tfm
-2020/08/06 | 17816 | graphics/asymptote/asy-keywords.el
-2020/08/06 | 1780 | fonts/xcharter/tfm/XCharter-Italic-tlf-t1--base.tfm
-2020/08/06 | 1780 | fonts/xcharter/tfm/XCharter-Italic-sup-t1--base.tfm
-2020/08/06 | 1780 | fonts/xcharter/tfm/XCharter-Italic-inf-t1.tfm
-2020/08/06 | 1780 | fonts/xcharter/tfm/XCharter-Italic-inf-ly1--base.tfm
-2020/08/06 | 1780 | fonts/xcharter/tfm/XCharter-Bold-tosf-ly1--base.tfm
-2020/08/06 | 177 | graphics/asymptote/runpath.h
-2020/08/06 | 177 | graphics/asymptote/examples/curvedlabel.asy
-2020/08/06 | 1778 | graphics/asymptote/examples/conicurv.asy
-2020/08/06 | 1776 | fonts/xcharter/tfm/XCharter-Italic-numr-t1.tfm
-2020/08/06 | 1776 | fonts/xcharter/tfm/XCharter-Italic-numr-ly1.tfm
-2020/08/06 | 1776 | fonts/xcharter/tfm/XCharter-Italic-dnom-t1.tfm
-2020/08/06 | 1776 | fonts/xcharter/tfm/XCharter-Italic-dnom-ly1.tfm
-2020/08/06 | 17736 | graphics/asymptote/runfile.cc
-2020/08/06 | 1772 | fonts/xcharter/tfm/XCharter-Italic-numr-ly1--base.tfm
-2020/08/06 | 1772 | fonts/xcharter/tfm/XCharter-Italic-inf-t1--base.tfm
-2020/08/06 | 1772 | fonts/xcharter/tfm/XCharter-Italic-dnom-ly1--base.tfm
-2020/08/06 | 177246 | graphics/asymptote/prc/PRCdouble.cc
-2020/08/06 | 1768 | fonts/xcharter/tfm/XCharter-Italic-numr-t1--base.tfm
-2020/08/06 | 1768 | fonts/xcharter/tfm/XCharter-Italic-dnom-t1--base.tfm
-2020/08/06 | 1768 | fonts/xcharter/tfm/XCharter1-Bold-tosf-ly1--base.tfm
-2020/08/06 | 1764 | graphics/asymptote/GUI/res/icons/grid.svg
-2020/08/06 | 1764 | fonts/xcharter/tfm/XCharter-Roman-tosf-ly1--base.tfm
-2020/08/06 | 1760 | graphics/asymptote/examples/animations/heatequation.asy
-2020/08/06 | 175 | graphics/asymptote/examples/strokeshade.asy
-2020/08/06 | 1752 | fonts/xcharter/tfm/XCharter1-Roman-tosf-ly1--base.tfm
-2020/08/06 | 1746 | graphics/asymptote/doc/westnile.asy
-2020/08/06 | 1744 | fonts/xcharter/tfm/XCharter-Bold-tlf-ly1--base.tfm
-2020/08/06 | 1740 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-t1.vf
-2020/08/06 | 1736 | fonts/xcharter/vf/XCharter-Slanted-tosf-t1.vf
-2020/08/06 | 1736 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-t1.vf
-2020/08/06 | 1736 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-t1.vf
-2020/08/06 | 1736 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-Slanted-tlf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-Roman-tosf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-Roman-tlf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-Italic-tosf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-Italic-tlf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-Bold-tosf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-Bold-tlf-t1.vf
-2020/08/06 | 1732 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-ly1.vf
-2020/08/06 | 1732 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-ly1--base.tfm
-2020/08/06 | 1732 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-ly1--base.tfm
-2020/08/06 | 1728 | fonts/xcharter/vf/XCharter-Slanted-tosf-ly1.vf
-2020/08/06 | 1728 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-ly1.vf
-2020/08/06 | 1728 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-ly1.vf
-2020/08/06 | 1728 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-ly1.vf
-2020/08/06 | 1728 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-ly1--base.tfm
-2020/08/06 | 1728 | fonts/xcharter/tfm/XCharter-Roman-tlf-ly1--base.tfm
-2020/08/06 | 1728 | fonts/xcharter/tfm/XCharter-Bold-tosf-t1--base.tfm
-2020/08/06 | 1728 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-ly1--base.tfm
-2020/08/06 | 1724 | graphics/asymptote/GUI/GuidesManager.py
-2020/08/06 | 1724 | fonts/xcharter/vf/XCharter-Slanted-tlf-ly1.vf
-2020/08/06 | 1724 | fonts/xcharter/vf/XCharter-Roman-tosf-ly1.vf
-2020/08/06 | 1724 | fonts/xcharter/vf/XCharter-Roman-tlf-ly1.vf
-2020/08/06 | 1724 | fonts/xcharter/vf/XCharter-Italic-tosf-ly1.vf
-2020/08/06 | 1724 | fonts/xcharter/vf/XCharter-Italic-tlf-ly1.vf
-2020/08/06 | 1724 | fonts/xcharter/vf/XCharter-Bold-tosf-ly1.vf
-2020/08/06 | 1724 | fonts/xcharter/vf/XCharter-Bold-tlf-ly1.vf
-2020/08/06 | 1716 | fonts/xcharter/tfm/XCharter-Bold-sup-ly1.tfm
-2020/08/06 | 1716 | fonts/xcharter/tfm/XCharter1-Bold-tosf-t1--base.tfm
-2020/08/06 | 1712 | fonts/xcharter/tfm/XCharter-Bold-sup-ly1--base.tfm
-2020/08/06 | 1711 | graphics/asymptote/GUI/res/icons.qrc
-2020/08/06 | 1710 | graphics/asymptote/tests/arith/roots.asy
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldSlanted-sup-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldSlanted-numr-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldSlanted-inf-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldSlanted-dnom-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldItalic-sup-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldItalic-numr-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldItalic-inf-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/vf/XCharter-BoldItalic-dnom-t1.vf
-2020/08/06 | 1704 | fonts/xcharter/tfm/XCharter-Roman-tosf-t1--base.tfm
-2020/08/06 | 1704 | fonts/xcharter/tfm/XCharter-Bold-numr-ly1.tfm
-2020/08/06 | 1704 | fonts/xcharter/tfm/XCharter-Bold-inf-ly1.tfm
-2020/08/06 | 1704 | fonts/xcharter/tfm/XCharter-Bold-dnom-ly1.tfm
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Slanted-sup-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Slanted-numr-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Slanted-inf-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Slanted-dnom-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Roman-sup-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Roman-numr-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Roman-inf-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Roman-dnom-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Italic-sup-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Italic-numr-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Italic-inf-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Italic-dnom-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Bold-numr-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/vf/XCharter-Bold-dnom-t1.vf
-2020/08/06 | 1700 | fonts/xcharter/tfm/XCharter-Bold-numr-ly1--base.tfm
-2020/08/06 | 1700 | fonts/xcharter/tfm/XCharter-Bold-inf-ly1--base.tfm
-2020/08/06 | 1700 | fonts/xcharter/tfm/XCharter-Bold-dnom-ly1--base.tfm
-2020/08/06 | 169 | graphics/asymptote/runbacktrace.h
-2020/08/06 | 1698 | graphics/asymptote/record.cc
-2020/08/06 | 1696 | fonts/xcharter/vf/XCharter-Bold-sup-t1.vf
-2020/08/06 | 1696 | fonts/xcharter/vf/XCharter-Bold-inf-t1.vf
-2020/08/06 | 1696 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-ly1--base.tfm
-2020/08/06 | 1694 | graphics/asymptote/fftw++.cc
-2020/08/06 | 1692 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-ly1--base.tfm
-2020/08/06 | 1692 | fonts/xcharter/tfm/XCharter-Bold-sup-t1.tfm
-2020/08/06 | 1692 | fonts/xcharter/tfm/XCharter1-Roman-tosf-t1--base.tfm
-2020/08/06 | 168 | graphics/asymptote/examples/lines.asy
-2020/08/06 | 1688 | fonts/xcharter/tfm/XCharter-Roman-inf-ly1.tfm
-2020/08/06 | 1688 | fonts/xcharter/tfm/XCharter-Bold-tlf-t1--base.tfm
-2020/08/06 | 1684 | fonts/xcharter/tfm/XCharter-Roman-numr-ly1.tfm
-2020/08/06 | 1684 | fonts/xcharter/tfm/XCharter-Roman-inf-ly1--base.tfm
-2020/08/06 | 1684 | fonts/xcharter/tfm/XCharter-Roman-dnom-ly1.tfm
-2020/08/06 | 1684 | fonts/xcharter/tfm/XCharter-Bold-sup-t1--base.tfm
-2020/08/06 | 1680 | fonts/xcharter/tfm/XCharter-Roman-numr-ly1--base.tfm
-2020/08/06 | 1680 | fonts/xcharter/tfm/XCharter-Roman-dnom-ly1--base.tfm
-2020/08/06 | 1680 | fonts/xcharter/tfm/XCharter-Bold-numr-t1.tfm
-2020/08/06 | 1680 | fonts/xcharter/tfm/XCharter-Bold-inf-t1.tfm
-2020/08/06 | 1680 | fonts/xcharter/tfm/XCharter-Bold-dnom-t1.tfm
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldSlanted-sup-ly1.vf
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldSlanted-numr-ly1.vf
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldSlanted-inf-ly1.vf
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldSlanted-dnom-ly1.vf
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldItalic-sup-ly1.vf
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldItalic-numr-ly1.vf
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldItalic-inf-ly1.vf
-2020/08/06 | 1676 | fonts/xcharter/vf/XCharter-BoldItalic-dnom-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Slanted-sup-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Slanted-numr-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Slanted-inf-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Slanted-dnom-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Roman-numr-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Roman-dnom-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Italic-sup-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Italic-numr-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Italic-inf-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter-Italic-dnom-ly1.vf
-2020/08/06 | 1672 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-t2asrb.vf
-2020/08/06 | 1672 | fonts/xcharter/tfm/XCharter-Bold-numr-t1--base.tfm
-2020/08/06 | 1672 | fonts/xcharter/tfm/XCharter-Bold-inf-t1--base.tfm
-2020/08/06 | 1672 | fonts/xcharter/tfm/XCharter-Bold-dnom-t1--base.tfm
-2020/08/06 | 1671 | macros/latex/contrib/hausarbeit-jura/hausarbeit-jura.ins
-2020/08/06 | 1668 | fonts/xcharter/vf/XCharter-Roman-sup-ly1.vf
-2020/08/06 | 1668 | fonts/xcharter/vf/XCharter-Roman-inf-ly1.vf
-2020/08/06 | 1668 | fonts/xcharter/vf/XCharter-Bold-sup-ly1.vf
-2020/08/06 | 1668 | fonts/xcharter/vf/XCharter-Bold-numr-ly1.vf
-2020/08/06 | 1668 | fonts/xcharter/vf/XCharter-Bold-inf-ly1.vf
-2020/08/06 | 1668 | fonts/xcharter/vf/XCharter-Bold-dnom-ly1.vf
-2020/08/06 | 1668 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-t2asrb.vf
-2020/08/06 | 1668 | fonts/xcharter/tfm/XCharter-Roman-tlf-t1--base.tfm
-2020/08/06 | 1668 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-t1--base.tfm
-2020/08/06 | 1668 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-t1--base.tfm
-2020/08/06 | 1665 | graphics/asymptote/GUI/Widg_editBezier.py
-2020/08/06 | 1664 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-t2a.vf
-2020/08/06 | 1664 | fonts/xcharter/tfm/XCharter-Roman-inf-t1.tfm
-2020/08/06 | 1660 | fonts/xcharter/vf/XCharter1-Slanted-tosf-t2asrb.vf
-2020/08/06 | 1660 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-t2a.vf
-2020/08/06 | 1660 | fonts/xcharter/tfm/XCharter-Roman-numr-t1.tfm
-2020/08/06 | 1660 | fonts/xcharter/tfm/XCharter-Roman-dnom-t1.tfm
-2020/08/06 | 1658 | graphics/asymptote/prc/PRCTools/Makefile
-2020/08/06 | 1656 | fonts/xcharter/vf/XCharter1-Italic-tosf-t2asrb.vf
-2020/08/06 | 1656 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-t1--base.tfm
-2020/08/06 | 1656 | fonts/xcharter/tfm/XCharter-Roman-inf-t1--base.tfm
-2020/08/06 | 1656 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-t1--base.tfm
-2020/08/06 | 16552 | graphics/asymptote/runlabel.cc
-2020/08/06 | 1652 | fonts/xcharter/vf/XCharter1-Slanted-tosf-t2a.vf
-2020/08/06 | 1652 | fonts/xcharter/vf/XCharter1-Roman-tosf-t2asrb.vf
-2020/08/06 | 1652 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-sc-t2asrb.vf
-2020/08/06 | 1652 | fonts/xcharter/tfm/XCharter-Roman-numr-t1--base.tfm
-2020/08/06 | 1652 | fonts/xcharter/tfm/XCharter-Roman-dnom-t1--base.tfm
-2020/08/06 | 16492 | graphics/asymptote/base/plain_Label.asy
-2020/08/06 | 1648 | fonts/xcharter/vf/XCharter1-Roman-tosf-t2a.vf
-2020/08/06 | 1648 | fonts/xcharter/vf/XCharter1-Italic-tosf-t2a.vf
-2020/08/06 | 1648 | fonts/xcharter/vf/XCharter1-Bold-tosf-t2asrb.vf
-2020/08/06 | 1648 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-sc-t2a.vf
-2020/08/06 | 1648 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-sc-t2asrb.vf
-2020/08/06 | 16483 | graphics/asymptote/runpair.cc
-2020/08/06 | 164511 | graphics/asymptote/GUI/icons_rc.py
-2020/08/06 | 1644 | fonts/xcharter/vf/XCharter1-Bold-tosf-t2a.vf
-2020/08/06 | 1644 | fonts/xcharter/vf/XCharter1-BoldItalic-tosf-sc-t2a.vf
-2020/08/06 | 1640 | graphics/asymptote/callable.h
-2020/08/06 | 1640 | fonts/xcharter/vf/XCharter1-Slanted-tosf-sc-t2asrb.vf
-2020/08/06 | 1636 | fonts/xcharter/vf/XCharter1-Slanted-tosf-sc-t2a.vf
-2020/08/06 | 1636 | fonts/xcharter/vf/XCharter1-Roman-tosf-sc-t2asrb.vf
-2020/08/06 | 1636 | fonts/xcharter/vf/XCharter1-Italic-tosf-sc-t2asrb.vf
-2020/08/06 | 1632 | fonts/xcharter/vf/XCharter1-Italic-tosf-sc-t2a.vf
-2020/08/06 | 1632 | fonts/xcharter/vf/XCharter1-Bold-tosf-sc-t2asrb.vf
-2020/08/06 | 1630 | graphics/asymptote/builtin.h
-2020/08/06 | 162 | graphics/asymptote/examples/stereoscopic.asy
-2020/08/06 | 162 | graphics/asymptote/examples/sphereskeleton.asy
-2020/08/06 | 1628 | fonts/xcharter/vf/XCharter1-Roman-tosf-sc-t2a.vf
-2020/08/06 | 1628 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-t1--base.tfm
-2020/08/06 | 1626 | graphics/asymptote/genv.h
-2020/08/06 | 1624 | fonts/xcharter/vf/XCharter1-Bold-tosf-sc-t2a.vf
-2020/08/06 | 1620 | graphics/asymptote/doc/colors.asy
-2020/08/06 | 1620 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-t1--base.tfm
-2020/08/06 | 161 | graphics/asymptote/runhistory.h
-2020/08/06 | 16138 | graphics/asymptote/base/slide.asy
-2020/08/06 | 1612 | graphics/asymptote/asy-list.pl
-2020/08/06 | 160672 | graphics/asymptote/examples/animations/dice.u3d
-2020/08/06 | 159 | graphics/asymptote/tests/types/cast.asy
-2020/08/06 | 1594 | graphics/asymptote/pen.cc
-2020/08/06 | 158 | graphics/asymptote/tests/frames/stat.asy
-2020/08/06 | 1588 | graphics/asymptote/build-scripts/asy-format.el
-2020/08/06 | 15822 | graphics/asymptote/dec.h
-2020/08/06 | 157 | graphics/asymptote/runsystem.h
-2020/08/06 | 157 | graphics/asymptote/doc/saddle.asy
-2020/08/06 | 1578 | graphics/asymptote/build-scripts/cc-format.el
-2020/08/06 | 15771 | macros/latex/contrib/mercatormap/mercatormap.doc.scales.tex
-2020/08/06 | 1576 | fonts/xcharter/tfm/XCharter1-Slanted-ts1.tfm
-2020/08/06 | 1572 | fonts/xcharter/tfm/XCharter-BoldSlanted-tosf-sc-ot1--base.tfm
-2020/08/06 | 1572 | fonts/xcharter/tfm/XCharter1-BoldSlanted-tosf-sc-ot1--base.tfm
-2020/08/06 | 1568 | fonts/xcharter/tfm/XCharter1-BoldSlanted-ts1.tfm
-2020/08/06 | 1566 | graphics/asymptote/examples/near_earth.asy
-2020/08/06 | 1564 | fonts/xcharter/tfm/XCharter-Slanted-tosf-sc-ot1--base.tfm
-2020/08/06 | 1564 | fonts/xcharter/tfm/XCharter1-Slanted-tosf-sc-ot1--base.tfm
-2020/08/06 | 15647 | macros/latex/contrib/mercatormap/mercatormap.doc.examples.tex
-2020/08/06 | 15645 | graphics/asymptote/install-sh
-2020/08/06 | 15630652 | graphics/asymptote.zip
-2020/08/06 | 155 | graphics/asymptote/tests/types/ecast.asy
-2020/08/06 | 1552 | fonts/xcharter/tfm/XCharter-Slanted-sup-ot1.tfm
-2020/08/06 | 1552 | fonts/xcharter/tfm/XCharter-BoldSlanted-sup-ot1.tfm
-2020/08/06 | 1551 | graphics/asymptote/examples/NURBSsurface.asy
-2020/08/06 | 154 | graphics/asymptote/examples/billboard.asy
-2020/08/06 | 154 | graphics/asymptote/doc/slopefield1.asy
-2020/08/06 | 1548 | graphics/asymptote/examples/BezierSurface.asy
-2020/08/06 | 1548 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-t2asrb.vf
-2020/08/06 | 1548 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-t2asrb.vf
-2020/08/06 | 1548 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-t2asrb.vf
-2020/08/06 | 1548 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-t2asrb.vf
-2020/08/06 | 1548 | fonts/xcharter/tfm/XCharter-Slanted-ts1.tfm
-2020/08/06 | 1548 | fonts/xcharter/tfm/XCharter1-Slanted-ts1--base.tfm
-2020/08/06 | 15451 | graphics/asymptote/types.h
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-Slanted-tosf-t2asrb.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-Slanted-tlf-t2asrb.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-Roman-tosf-t2asrb.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-Italic-tosf-t2asrb.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-Italic-tlf-t2asrb.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-t2a.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-t2a.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-t2a.vf
-2020/08/06 | 1544 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-t2a.vf
-2020/08/06 | 1544 | fonts/xcharter/tfm/XCharter-Roman-ts1.tfm
-2020/08/06 | 1544 | fonts/xcharter/tfm/XCharter-BoldSlanted-ts1.tfm
-2020/08/06 | 1544 | fonts/xcharter/tfm/XCharter-BoldSlanted-tlf-sc-ot1--base.tfm
-2020/08/06 | 1544 | fonts/xcharter/tfm/XCharter-BoldSlanted-numr-ot1.tfm
-2020/08/06 | 1544 | fonts/xcharter/tfm/XCharter-BoldSlanted-dnom-ot1.tfm
-2020/08/06 | 1544 | fonts/xcharter/tfm/XCharter1-Roman-ts1.tfm
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Slanted-tosf-t2a.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Slanted-tlf-t2a.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Roman-tosf-t2a.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Roman-tlf-t2a.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Roman-tlf-t2asrb.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Italic-tosf-t2a.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Italic-tlf-t2a.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Bold-tosf-t2a.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Bold-tosf-t2asrb.vf
-2020/08/06 | 1540 | fonts/xcharter/vf/XCharter-Bold-tlf-t2asrb.vf
-2020/08/06 | 1540 | fonts/xcharter/tfm/XCharter-Slanted-ts1--base.tfm
-2020/08/06 | 1540 | fonts/xcharter/tfm/XCharter-BoldSlanted-ts1--base.tfm
-2020/08/06 | 1540 | fonts/xcharter/tfm/XCharter-BoldSlanted-inf-ot1.tfm
-2020/08/06 | 1540 | fonts/xcharter/tfm/XCharter1-BoldSlanted-ts1--base.tfm
-2020/08/06 | 153 | graphics/asymptote/runlabel.h
-2020/08/06 | 1537 | graphics/asymptote/examples/refs.bib
-2020/08/06 | 1536 | fonts/xcharter/vf/XCharter-Bold-tlf-t2a.vf
-2020/08/06 | 1536 | fonts/xcharter/tfm/XCharter-Slanted-numr-ot1.tfm
-2020/08/06 | 1536 | fonts/xcharter/tfm/XCharter-Slanted-inf-ot1.tfm
-2020/08/06 | 1536 | fonts/xcharter/tfm/XCharter-Slanted-dnom-ot1.tfm
-2020/08/06 | 1528 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-sc-t2asrb.vf
-2020/08/06 | 1528 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-sc-t2asrb.vf
-2020/08/06 | 1528 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-sc-t2asrb.vf
-2020/08/06 | 1528 | fonts/xcharter/tfm/XCharter-Slanted-tlf-sc-ot1--base.tfm
-2020/08/06 | 15277 | graphics/asymptote/base/flowchart.asy
-2020/08/06 | 15274 | graphics/asymptote/base/ode.asy
-2020/08/06 | 1524 | graphics/asymptote/patches/flex.patch
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-Slanted-tosf-sc-t2asrb.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-Slanted-tlf-sc-t2asrb.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-Italic-tosf-sc-t2asrb.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-sc-t2a.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-sc-t2a.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-BoldSlanted-sup-t2asrb.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-BoldItalic-tosf-sc-t2a.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-sc-t2a.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-BoldItalic-tlf-sc-t2asrb.vf
-2020/08/06 | 1524 | fonts/xcharter/vf/XCharter-BoldItalic-sup-t2asrb.vf
-2020/08/06 | 1524 | fonts/xcharter/tfm/XCharter-Roman-ts1--base.tfm
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Slanted-tosf-sc-t2a.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Slanted-tlf-sc-t2a.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Slanted-sup-t2asrb.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Roman-tosf-sc-t2a.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Roman-tosf-sc-t2asrb.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Roman-tlf-sc-t2asrb.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Italic-tosf-sc-t2a.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Italic-tlf-sc-t2a.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Italic-tlf-sc-t2asrb.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Italic-sup-t2asrb.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Bold-tosf-sc-t2asrb.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-Bold-tlf-sc-t2asrb.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-BoldSlanted-sup-t2a.vf
-2020/08/06 | 1520 | fonts/xcharter/vf/XCharter-BoldItalic-sup-t2a.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Slanted-sup-t2a.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Roman-tlf-sc-t2a.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Roman-sup-t2a.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Roman-sup-t2asrb.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Italic-sup-t2a.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Bold-tosf-sc-t2a.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Bold-tlf-sc-t2a.vf
-2020/08/06 | 1516 | fonts/xcharter/vf/XCharter-Bold-sup-t2asrb.vf
-2020/08/06 | 1516 | fonts/xcharter/tfm/XCharter1-Roman-ts1--base.tfm
-2020/08/06 | 1512 | fonts/xcharter/vf/XCharter-Bold-sup-t2a.vf
-2020/08/06 | 150 | graphics/asymptote/examples/spheresilhouette.asy
-2020/08/06 | 150 | graphics/asymptote/doc/latexmkrc_asydir
-2020/08/06 | 1504 | graphics/asymptote/GUI/xasyUtils.py
-2020/08/06 | 1498 | graphics/asymptote/examples/animations/wavepacket.asy
-2020/08/06 | 1492 | graphics/asymptote/runarray.h
-2020/08/06 | 1492 | graphics/asymptote/GUI/res/icons/bucket.svg
-2020/08/06 | 14897 | graphics/asymptote/configure.ac
-2020/08/06 | 1484 | fonts/xcharter/tfm/XCharter1-BoldItalic-ts1.tfm
-2020/08/06 | 1482 | graphics/asymptote/GUI/res/icons/android-hand.svg
-2020/08/06 | 147 | graphics/asymptote/doc/vectorfield.asy
-2020/08/06 | 1479 | graphics/asymptote/prc/PRCTools/inflationMain.cc
-2020/08/06 | 14749 | graphics/asymptote/base/contour3.asy
-2020/08/06 | 1472 | fonts/xcharter/tfm/XCharter-BoldItalic-ts1.tfm
-2020/08/06 | 1469 | graphics/asymptote/doc/png/Makefile.in
-2020/08/06 | 1468 | fonts/xcharter/tfm/XCharter1-Italic-ts1.tfm
-2020/08/06 | 14669 | graphics/asymptote/base/palette.asy
-2020/08/06 | 1461 | graphics/asymptote/examples/logo3.asy
-2020/08/06 | 1460 | fonts/xcharter/tfm/XCharter-Italic-ts1.tfm
-2020/08/06 | 1460 | fonts/xcharter/tfm/XCharter-BoldItalic-ts1--base.tfm
-2020/08/06 | 145 | graphics/asymptote/examples/star.asy
-2020/08/06 | 1452 | fonts/xcharter/tfm/XCharter1-BoldItalic-ts1--base.tfm
-2020/08/06 | 1451 | macros/latex/contrib/mercatormap/mercatormap.bib
-2020/08/06 | 144 | graphics/asymptote/doc/latexmkrc
-2020/08/06 | 1448 | fonts/xcharter/tfm/XCharter-Italic-ts1--base.tfm
-2020/08/06 | 1446 | graphics/asymptote/webgl/vertex.glsl
-2020/08/06 | 14469 | graphics/asymptote/stack.cc
-2020/08/06 | 1440 | fonts/xcharter/tfm/XCharter-Italic-tosf-sc-ot1--base.tfm
-2020/08/06 | 1440 | fonts/xcharter/tfm/XCharter1-Italic-tosf-sc-ot1--base.tfm
-2020/08/06 | 143 | graphics/asymptote/tests/gc/label.asy
-2020/08/06 | 1436 | fonts/xcharter/tfm/XCharter1-Italic-ts1--base.tfm
-2020/08/06 | 1432 | fonts/xcharter/tfm/XCharter1-Bold-ts1.tfm
-2020/08/06 | 1430994 | graphics/asymptote/ChangeLog
-2020/08/06 | 1425 | fonts/xcharter/tex/TS1XCharter-TOsF.fd
-2020/08/06 | 1420 | fonts/xcharter/tfm/XCharter-Bold-ts1.tfm
-2020/08/06 | 141 | graphics/asymptote/examples/sphere.asy
-2020/08/06 | 141 | graphics/asymptote/examples/ring.asy
-2020/08/06 | 1410 | fonts/xcharter/tex/TS1XCharter-TLF.fd
-2020/08/06 | 1408 | fonts/xcharter/tfm/XCharter-Bold-ts1--base.tfm
-2020/08/06 | 14072 | graphics/asymptote/types.cc
-2020/08/06 | 1404 | fonts/xcharter/tfm/XCharter-Italic-tlf-sc-ot1--base.tfm
-2020/08/06 | 1400 | fonts/xcharter/tfm/XCharter1-Bold-ts1--base.tfm
-2020/08/06 | 13980 | graphics/asymptote/arrayop.h
-2020/08/06 | 13944 | graphics/asymptote/runtriple.cc
-2020/08/06 | 1393 | graphics/asymptote/GUI/SetCustomAnchor.py
-2020/08/06 | 1392 | fonts/xcharter/tfm/XCharter-Italic-sup-ot1.tfm
-2020/08/06 | 1391 | graphics/asymptote/doc/CAD1.asy
-2020/08/06 | 13901 | graphics/asymptote/examples/teapot.asy
-2020/08/06 | 138 | graphics/asymptote/Pipfile
-2020/08/06 | 1384 | graphics/asymptote/tests/pic/trans.asy
-2020/08/06 | 1384 | fonts/xcharter/tfm/XCharter-Italic-inf-ot1.tfm
-2020/08/06 | 1380 | fonts/xcharter/tfm/XCharter-Italic-numr-ot1.tfm
-2020/08/06 | 1380 | fonts/xcharter/tfm/XCharter-Italic-dnom-ot1.tfm
-2020/08/06 | 1375 | graphics/asymptote/base/tree.asy
-2020/08/06 | 136 | graphics/asymptote/examples/latticeshading.asy
-2020/08/06 | 13663 | graphics/asymptote/doc/install-sh
-2020/08/06 | 13663 | graphics/asymptote/doc/FAQ/install-sh
-2020/08/06 | 1364 | fonts/xcharter/tfm/XCharter-BoldItalic-tosf-sc-ot1--base.tfm
-2020/08/06 | 1364 | fonts/xcharter/tfm/XCharter1-BoldItalic-tosf-sc-ot1--base.tfm
-2020/08/06 | 13615 | graphics/asymptote/entry.h
-2020/08/06 | 1360 | fonts/xcharter/tfm/XCharter-Roman-sup-ot1.tfm
-2020/08/06 | 13605 | graphics/asymptote/base/grid3.asy
-2020/08/06 | 13550 | graphics/asymptote/GUI/xasyBezierInterface.py
-2020/08/06 | 1352 | graphics/asymptote/examples/Klein.asy
-2020/08/06 | 1345 | graphics/asymptote/interact.h
-2020/08/06 | 1344 | fonts/xcharter/tfm/XCharter-Bold-tosf-sc-ot1--base.tfm
-2020/08/06 | 1344 | fonts/xcharter/tfm/XCharter1-Bold-tosf-sc-ot1--base.tfm
-2020/08/06 | 1341 | graphics/asymptote/runtimebase.in
-2020/08/06 | 1336 | fonts/xcharter/tfm/XCharter-Bold-sup-ot1.tfm
-2020/08/06 | 13339 | graphics/asymptote/camp.l
-2020/08/06 | 1332 | fonts/xcharter/tfm/XCharter-Roman-tosf-sc-ot1--base.tfm
-2020/08/06 | 1332 | fonts/xcharter/tfm/XCharter1-Roman-tosf-sc-ot1--base.tfm
-2020/08/06 | 1331 | graphics/asymptote/tests/types/spec.asy
-2020/08/06 | 132 | graphics/asymptote/tests/string/length.asy
-2020/08/06 | 1328 | fonts/xcharter/tfm/XCharter-Bold-numr-ot1.tfm
-2020/08/06 | 1328 | fonts/xcharter/tfm/XCharter-BoldItalic-tlf-sc-ot1--base.tfm
-2020/08/06 | 1328 | fonts/xcharter/tfm/XCharter-Bold-dnom-ot1.tfm
-2020/08/06 | 1324 | fonts/xcharter/tfm/XCharter-Bold-inf-ot1.tfm
-2020/08/06 | 131 | graphics/asymptote/GUI/DebugFlags.py
-2020/08/06 | 1319 | graphics/asymptote/GUI/res/icons/android-color-palette.svg
-2020/08/06 | 1311 | graphics/asymptote/patches/dvipdf
-2020/08/06 | 1310 | graphics/asymptote/prc/PRCTools/extractSections.cc
-2020/08/06 | 1309 | graphics/asymptote/examples/roundpath.asy
-2020/08/06 | 1308 | fonts/xcharter/tfm/XCharter-Bold-tlf-sc-ot1--base.tfm
-2020/08/06 | 1300 | fonts/xcharter/tfm/XCharter-Roman-numr-ot1.tfm
-2020/08/06 | 1300 | fonts/xcharter/tfm/XCharter-Roman-inf-ot1.tfm
-2020/08/06 | 1300 | fonts/xcharter/tfm/XCharter-Roman-dnom-ot1.tfm
-2020/08/06 | 129 | graphics/asymptote/tests/gc/struct.asy
-2020/08/06 | 1298 | graphics/asymptote/examples/electromagnetic.asy
-2020/08/06 | 1296 | fonts/xcharter/tfm/XCharter-Roman-tlf-sc-ot1--base.tfm
-2020/08/06 | 1293 | graphics/asymptote/TODO
-2020/08/06 | 1288 | fonts/xcharter/tfm/XCharter-BoldItalic-sup-ot1.tfm
-2020/08/06 | 12865 | macros/latex/contrib/mercatormap/mercatormap.doc.limitations.tex
-2020/08/06 | 1284 | graphics/asymptote/tests/output/Makefile
-2020/08/06 | 1284 | fonts/xcharter/tfm/XCharter-BoldItalic-numr-ot1.tfm
-2020/08/06 | 1284 | fonts/xcharter/tfm/XCharter-BoldItalic-dnom-ot1.tfm
-2020/08/06 | 1284725 | graphics/asymptote/doc/asymptote.pdf
-2020/08/06 | 12813 | graphics/asymptote/impdatum.cc
-2020/08/06 | 12812 | graphics/asymptote/runlabel.in
-2020/08/06 | 1280 | fonts/xcharter/tfm/XCharter-BoldItalic-inf-ot1.tfm
-2020/08/06 | 127885 | graphics/asymptote/camp.tab.cc
-2020/08/06 | 1276 | graphics/asymptote/base/asymptote.py
-2020/08/06 | 1274 | graphics/asymptote/newexp.h
-2020/08/06 | 1270 | graphics/asymptote/beziercurve.h
-2020/08/06 | 1266 | graphics/asymptote/drawverbatim.h
-2020/08/06 | 1261761 | graphics/asymptote/examples/worldmap.dat
-2020/08/06 | 12604 | graphics/asymptote/runsystem.cc
-2020/08/06 | 1253 | graphics/asymptote/keywords.pl
-2020/08/06 | 12534 | graphics/asymptote/ax_pthread.m4
-2020/08/06 | 1251 | graphics/asymptote/examples/odetest.asy
-2020/08/06 | 124 | graphics/asymptote/tests/gc/path.asy
-2020/08/06 | 124 | graphics/asymptote/GUI/res/icons/centerorigin.asy
-2020/08/06 | 1245 | graphics/asymptote/prc/PRCTools/describeMain.cc
-2020/08/06 | 1245 | graphics/asymptote/findsym.pl
-2020/08/06 | 1240 | graphics/asymptote/examples/arrows3.asy
-2020/08/06 | 123 | graphics/asymptote/examples/Coons.asy
-2020/08/06 | 123 | graphics/asymptote/doc/superpath.asy
-2020/08/06 | 1238 | graphics/asymptote/examples/animations/slidemovies.asy
-2020/08/06 | 1237 | graphics/asymptote/GUI/res/icons/closedcurve.svg
-2020/08/06 | 1236 | graphics/asymptote/primitives.h
-2020/08/06 | 1235 | graphics/asymptote/examples/animations/inlinemovie.tex
-2020/08/06 | 1235777 | graphics/asymptote/GL/glew.c
-2020/08/06 | 1227 | graphics/asymptote/build-scripts/build-asygl
-2020/08/06 | 1226 | graphics/asymptote/GUI/res/icons/triangle-stroked-15.svg
-2020/08/06 | 12259 | graphics/asymptote/knot.h
-2020/08/06 | 121 | graphics/asymptote/doc/labelsquare.asy
-2020/08/06 | 1216 | graphics/asymptote/examples/dragon.asy
-2020/08/06 | 1213 | graphics/asymptote/base/plain_arcs.asy
-2020/08/06 | 121144 | graphics/asymptote/doc/asyRefCard.pdf
-2020/08/06 | 1209 | graphics/asymptote/tests/imp/unravel.asy
-2020/08/06 | 12035 | graphics/asymptote/base/solids.asy
-2020/08/06 | 12024 | graphics/asymptote/stm.cc
-2020/08/06 | 119 | graphics/asymptote/fftw++asy.cc
-2020/08/06 | 1197 | graphics/asymptote/drawclipend.h
-2020/08/06 | 1194 | graphics/asymptote/GUI/res/icons/code.svg
-2020/08/06 | 11907 | graphics/asymptote/tests/gsl/random.asy
-2020/08/06 | 118 | graphics/asymptote/tests/string/substr.asy
-2020/08/06 | 1189 | graphics/asymptote/tests/types/var.asy
-2020/08/06 | 1186 | graphics/asymptote/GUI/res/icons/opencurve.svg
-2020/08/06 | 1186601 | graphics/asymptote/GL/glew.h
-2020/08/06 | 1185 | graphics/asymptote/examples/functionshading.asy
-2020/08/06 | 1183 | graphics/asymptote/camperror.cc
-2020/08/06 | 1178 | graphics/asymptote/base/embed.asy
-2020/08/06 | 1171 | graphics/asymptote/parser.h
-2020/08/06 | 11671 | graphics/asymptote/Makefile.in
-2020/08/06 | 11656 | graphics/asymptote/base/binarytree.asy
-2020/08/06 | 1164 | graphics/asymptote/examples/genustwo.asy
-2020/08/06 | 11642 | graphics/asymptote/coder.h
-2020/08/06 | 1163 | graphics/asymptote/runtime.h
-2020/08/06 | 11627 | graphics/asymptote/path.h
-2020/08/06 | 1160528 | graphics/asymptote/gc-8.0.4.tar.gz
-2020/08/06 | 116025 | graphics/asymptote/predicates.cc
-2020/08/06 | 115 | graphics/asymptote/doc/onecontour.asy
-2020/08/06 | 11541 | graphics/asymptote/aspy.py
-2020/08/06 | 11528 | graphics/asymptote/GUI/InplaceAddObj.py
-2020/08/06 | 11521 | graphics/asymptote/util.cc
-2020/08/06 | 1151 | graphics/asymptote/callable.cc
-2020/08/06 | 1149 | graphics/asymptote/guide.cc
-2020/08/06 | 1148 | graphics/asymptote/GUI/configs/xasyconfig.cson
-2020/08/06 | 1142 | graphics/asymptote/envcompleter.cc
-2020/08/06 | 113 | graphics/asymptote/patches/fixmem.reg
-2020/08/06 | 11354 | macros/latex/contrib/mercatormap/mercatorsupplier.def
-2020/08/06 | 11320 | graphics/asymptote/base/plain_markers.asy
-2020/08/06 | 1131 | graphics/asymptote/gl-matrix-2.4.0-pruned/LICENSE.js
-2020/08/06 | 11293 | fonts/xcharter/README
-2020/08/06 | 1126 | graphics/asymptote/coenv.cc
-2020/08/06 | 1124 | graphics/asymptote/GUI/res/icons/android-locate.svg
-2020/08/06 | 11212 | graphics/asymptote/drawelement.h
-2020/08/06 | 1120 | graphics/asymptote/examples/animations/wheel.asy
-2020/08/06 | 1120 | graphics/asymptote/base/external.asy
-2020/08/06 | 111 | graphics/asymptote/GUI/res/icons/center.asy
-2020/08/06 | 111 | graphics/asymptote/examples/shadestroke.asy
-2020/08/06 | 1114 | graphics/asymptote/examples/laserlattice.asy
-2020/08/06 | 1111 | graphics/asymptote/examples/imagehistogram.asy
-2020/08/06 | 1102 | graphics/asymptote/GUI/res/icons/closedpolygon.svg
-2020/08/06 | 11008 | graphics/asymptote/base/math.asy
-2020/08/06 | 109 | graphics/asymptote/tests/string/insert.asy
-2020/08/06 | 1096 | graphics/asymptote/tests/array/transpose.asy
-2020/08/06 | 1096 | graphics/asymptote/refaccess.cc
-2020/08/06 | 108 | graphics/asymptote/GUI/res/icons/subdirectory-left.svg
-2020/08/06 | 1085 | graphics/asymptote/GUI/res/icons/openpolygon.svg
-2020/08/06 | 10830 | graphics/asymptote/base/CAD.asy
-2020/08/06 | 1082 | graphics/asymptote/patches/README
-2020/08/06 | 10701 | graphics/asymptote/texfile.h
-2020/08/06 | 1065 | graphics/asymptote/examples/shellmethod.asy
-2020/08/06 | 10632 | graphics/asymptote/EnvVarUpdate.nsh
-2020/08/06 | 105 | graphics/asymptote/GUI/res/icons/closedpolygon.asy
-2020/08/06 | 105 | graphics/asymptote/GUI/res/icons/closedcurve.asy
-2020/08/06 | 10585 | graphics/asymptote/path3.h
-2020/08/06 | 1055 | graphics/asymptote/examples/partitionExample.asy
-2020/08/06 | 1052 | graphics/asymptote/GUI/res/icons/centerorigin.svg
-2020/08/06 | 1051 | graphics/asymptote/prc/PRCTools/inflation.h
-2020/08/06 | 1051 | graphics/asymptote/doc/eetomumu.asy
-2020/08/06 | 1050 | graphics/asymptote/opsymbols.pl
-2020/08/06 | 104 | graphics/asymptote/examples/tiling.asy
-2020/08/06 | 10445 | graphics/asymptote/INSTALL
-2020/08/06 | 1042 | graphics/asymptote/examples/NURBSsphere.asy
-2020/08/06 | 1040 | graphics/asymptote/examples/lmfit1.asy
-2020/08/06 | 1037 | graphics/asymptote/examples/animations/inlinemovie3.tex
-2020/08/06 | 1036 | graphics/asymptote/examples/workcone.asy
-2020/08/06 | 1033 | graphics/asymptote/examples/basealign.asy
-2020/08/06 | 1032 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-ot1.vf
-2020/08/06 | 10310 | macros/latex/contrib/mercatormap/mercatormap.doc.drawing.tex
-2020/08/06 | 1030 | graphics/asymptote/absyn.h
-2020/08/06 | 102 | graphics/asymptote/tests/gc/file.asy
-2020/08/06 | 1028 | fonts/xcharter/vf/XCharter-BoldSlanted-tosf-sc-ot1.vf
-2020/08/06 | 10271 | graphics/asymptote/GUI/windows/custMatTransform.ui
-2020/08/06 | 1024 | fonts/xcharter/vf/XCharter-BoldSlanted-tlf-sc-ot1.vf
-2020/08/06 | 10224 | graphics/asymptote/tr.cc
-2020/08/06 | 1020 | graphics/asymptote/flatguide.cc
-2020/08/06 | 1020 | fonts/xcharter/vf/XCharter1-Slanted-tosf-ot1.vf
-2020/08/06 | 10196 | graphics/asymptote/doc/CAD.tex
-2020/08/06 | 1016 | fonts/xcharter/vf/XCharter-Slanted-tosf-sc-ot1.vf
-2020/08/06 | 1016 | fonts/xcharter/vf/XCharter1-Roman-tosf-ot1.vf
-2020/08/06 | 1016 | fonts/xcharter/vf/XCharter1-Italic-tosf-ot1.vf
-2020/08/06 | 1013 | graphics/asymptote/GUI/res/icons/chevron-with-circle-left.svg
-2020/08/06 | 1012 | fonts/xcharter/vf/XCharter-Slanted-tlf-sc-ot1.vf
-2020/08/06 | 1012 | fonts/xcharter/vf/XCharter-Italic-tosf-sc-ot1.vf
-2020/08/06 | 1012 | fonts/xcharter/vf/XCharter-Italic-tlf-sc-ot1.vf
-2020/08/06 | 1012 | fonts/xcharter/vf/XCharter1-Bold-tosf-ot1.vf
-2020/08/06 | 1012 | fonts/xcharter/vf/XCharter1-BoldSlanted-tosf-sc-ot1.vf
-2020/08/06 | 1010 | graphics/asymptote/examples/washermethod.asy
-2020/08/06 | 1008 | graphics/asymptote/doc/leastsquares.asy
-2020/08/06 | 1008 | fonts/xcharter/vf/XCharter-Roman-tosf-sc-ot1.vf
-2020/08/06 | 1008 | fonts/xcharter/vf/XCharter-Roman-tlf-sc-ot1.vf
-2020/08/06 | 1008 | fonts/xcharter/vf/XCharter-Bold-tosf-sc-ot1.vf
-2020/08/06 | 10072 | graphics/asymptote/jsfile.cc
-2020/08/06 | 1005 | graphics/asymptote/doc/asy.1.begin
-2020/08/06 | 1004 | fonts/xcharter/vf/XCharter-Bold-tlf-sc-ot1.vf
-2020/08/06 | 1004 | fonts/xcharter/vf/XCharter1-Roman-ts1.vf
-2020/08/06 | 1003 | graphics/asymptote/GUI/res/icons/eye.svg
-2020/08/06 | 1000 | graphics/asymptote/doc/FAQ/Makefile
-2020/08/06 | 1000 | fonts/xcharter/vf/XCharter1-Slanted-tosf-sc-ot1.vf
diff --git a/dviware/dvisvgm/ChangeLog b/dviware/dvisvgm/ChangeLog
index 725017aba8..4652cdb75d 100644
--- a/dviware/dvisvgm/ChangeLog
+++ b/dviware/dvisvgm/ChangeLog
@@ -1,3 +1,159 @@
+2020-08-12 Martin Gieseking <martin.gieseking@uos.de>
+
+ * .appveyor.yml, .travis.yml, configure.ac, doc/dvisvgm.1, src/Doxyfile,
+ src/version.hpp:
+ set version to 2.10
+
+ * NEWS:
+ updated NEWS
+
+2020-07-27 Martin Gieseking <martin.gieseking@uos.de>
+
+ * doc/dvisvgm.1, doc/dvisvgm.txt.in, libs/xxHash/xxh3.h,
+ libs/xxHash/xxhash.h:
+ updated xxHash to version 0.8
+
+2020-07-24 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/psdefs.cpp:
+ redefine internal GS operators .fillstroke and .eofillstroke
+They are
+ used to implement PDF operators B and B*.
+(closes #139)
+
+2020-07-16 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/optimizer/TransformSimplifier.cpp:
+ don't unwind transform attributes of image elements
+
+ * src/optimizer/GroupCollapser.cpp:
+ collapse groups w/o attributes first
+in order to recurse into their
+ descendants.
+
+ * src/optimizer/TransformSimplifier.cpp:
+ optimizer: unwind transform attributes of image elements
+if it consists
+ only of scaling and translations. Merge the scaled translation
+into x and
+ y, and simplify the remaining matrix(...) expression to scale(...)
+
+2020-07-15 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/XMLNode.cpp, src/XMLNode.hpp, src/optimizer/GroupCollapser.cpp,
+ src/optimizer/RedundantElementRemover.cpp,
+ src/optimizer/WSNodeRemover.cpp:
+ renamed XMLNode::remove to XMLNode::detach
+
+2020-07-14 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/optimizer/GroupCollapser.cpp:
+ don't move inner transforms to outer clipping paths
+
+ * src/XMLNode.cpp:
+ fixed XMLElement::unwrap
+
+ * src/optimizer/GroupCollapser.cpp:
+ improved optimizer module GroupCollapser
+
+2020-07-13 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/optimizer/SVGOptimizer.cpp:
+ simplify transforms before optimizing groups
+
+ * src/DvisvgmSpecialHandler.cpp:
+ fixed error message about invalid closing tags
+
+ * src/DVIToSVGActions.cpp:
+ handle XML parser errors thrown in EOP
+
+ * src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp:
+ reduced number of successive XML error messages
+
+ * src/DvisvgmSpecialHandler.cpp, src/DvisvgmSpecialHandler.hpp:
+ renamed XMLParser::flush to XMLParser::finish
+
+2020-07-07 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/FontCache.cpp, src/HashFunction.cpp, src/HashFunction.hpp,
+ src/MD5HashFunction.hpp, src/XXHashFunction.hpp,
+ tests/HashFunctionTest.cpp:
+ renamed HashFunction::digestValue() to HashFunction::digestBytes()
+
+ * src/XXHashFunction.hpp:
+ added XXHashFunction::digestValue() to get the value as encoded by
+ xxhash
+
+ * src/FileSystem.cpp, src/FileSystem.hpp:
+ create dedicated temp folders with each call of dvisvgm
+
+2020-06-25 Martin Gieseking <martin.gieseking@uos.de>
+
+ * libs/xxHash/xxh3.h, libs/xxHash/xxhash.c, libs/xxHash/xxhash.h:
+ updated xxHash to version 0.7.4
+
+2020-06-23 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/DvisvgmSpecialHandler.cpp, tests/DvisvgmSpecialTest.cpp:
+ fixed computation of string boundaries after expanding {?(...)}
+(closes
+ #136)
+
+2020-05-09 Martin Gieseking <martin.gieseking@uos.de>
+
+ * .appveyor.yml:
+ updated FreeType to version 2.10.2
+
+2020-05-03 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/dvisvgm.cpp:
+ fixed indentation
+
+2020-04-24 John Bowman <bowman@ualberta.ca>
+
+ * src/dvisvgm.cpp:
+ Fix indentation.
+
+2020-04-23 John Bowman <bowman@ualberta.ca>
+
+ * src/dvisvgm.cpp:
+ Return error codes to shell.
+
+2020-04-13 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/PathClipper.cpp, src/PathClipper.hpp, src/PsSpecialHandler.cpp:
+ changed signature of PathClipper::intersect()
+
+ * src/PathClipper.cpp, src/PathClipper.hpp:
+ added unite operation to PathClipper
+
+ * src/GraphicsPath.hpp, src/PsSpecialHandler.cpp:
+ fixed handling of clippath/eoclip combinations
+
+2020-04-11 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/DVIToSVGActions.cpp:
+ fixed bbox debug rectangles
+
+ * src/Font.cpp, src/Font.hpp:
+ added italic correction for fake slant
+
+ * src/DVIReader.cpp, src/DVIReader.hpp, src/FontManager.cpp:
+ added evaluation of LuaTeX native font definitions
+
+ * src/DVIReader.cpp:
+ minor code improvements
+
+2020-04-10 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/psdefs.cpp:
+ fixed PS operator 'eoclip'
+
+2020-03-30 Martin Gieseking <martin.gieseking@uos.de>
+
+ * src/optimizer/TransformSimplifier.cpp:
+ optimizer: fixed omission of second scale() parameter
+
2020-03-21 Martin Gieseking <martin.gieseking@uos.de>
* src/Matrix.cpp:
diff --git a/dviware/dvisvgm/NEWS b/dviware/dvisvgm/NEWS
index e898c38bd3..35d867ae4e 100644
--- a/dviware/dvisvgm/NEWS
+++ b/dviware/dvisvgm/NEWS
@@ -1,3 +1,22 @@
+dvisvgm-2.10 (2020-08-12)
+- added evaluation of LuaTeX native font definitions
+- added computation of of italic correction for fake slanted glyphs
+- dvisvgm now creates dedicated temporary folders for each call of
+ the program to prevent file collisions between different processes
+- added evaluation of internal GS operators '.fillstroke' and '.eofillstroke'
+ introduced with GS 9.52 to implement PDF operators 'B' and 'B*'
+ (GH issue #139)
+- fixed and improved optimization of nested group elements
+- fixed optimization of 'scale' transformation
+- fixed optimization of 'transform' attributes applied to images clipping paths
+- fixed processing of PS operator 'eoclip'
+- fixed processing of clipping path intersections with different
+ fill rule properties
+- fixed processing of {?(...)} expressions (GH issue #136)
+- fixed error message about unmatched closing tags in XML parser
+- updated bundled FreeType library to version 2.10.2
+- updated bundled xxHash library to version 0.8
+
dvisvgm-2.9.1 (2020-03-21)
- added macro {?(expr)} to enable the evaluation of math expressions in
raw SVG fragments (GH #130)
diff --git a/dviware/dvisvgm/configure b/dviware/dvisvgm/configure
index 55663f51f2..a548bc57ea 100755
--- a/dviware/dvisvgm/configure
+++ b/dviware/dvisvgm/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for dvisvgm 2.9.1.
+# Generated by GNU Autoconf 2.69 for dvisvgm 2.10.
#
# Report bugs to <martin.gieseking@uos.de>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='dvisvgm'
PACKAGE_TARNAME='dvisvgm'
-PACKAGE_VERSION='2.9.1'
-PACKAGE_STRING='dvisvgm 2.9.1'
+PACKAGE_VERSION='2.10'
+PACKAGE_STRING='dvisvgm 2.10'
PACKAGE_BUGREPORT='martin.gieseking@uos.de'
PACKAGE_URL=''
@@ -1406,7 +1406,7 @@ if test "$ac_init_help" = "long"; then
# 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 dvisvgm 2.9.1 to adapt to many kinds of systems.
+\`configure' configures dvisvgm 2.10 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1477,7 +1477,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of dvisvgm 2.9.1:";;
+ short | recursive ) echo "Configuration of dvisvgm 2.10:";;
esac
cat <<\_ACEOF
@@ -1625,7 +1625,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-dvisvgm configure 2.9.1
+dvisvgm configure 2.10
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2169,7 +2169,7 @@ 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 dvisvgm $as_me 2.9.1, which was
+It was created by dvisvgm $as_me 2.10, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2527,7 +2527,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-DATE="March 2020"
+DATE="August 2020"
ac_config_headers="$ac_config_headers config.h"
@@ -3157,7 +3157,7 @@ fi
# Define the identity of the package.
PACKAGE='dvisvgm'
- VERSION='2.9.1'
+ VERSION='2.10'
cat >>confdefs.h <<_ACEOF
@@ -20138,7 +20138,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by dvisvgm $as_me 2.9.1, which was
+This file was extended by dvisvgm $as_me 2.10, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -20204,7 +20204,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-dvisvgm config.status 2.9.1
+dvisvgm config.status 2.10
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/dviware/dvisvgm/configure.ac b/dviware/dvisvgm/configure.ac
index 783d2709a8..6b07ef13d2 100644
--- a/dviware/dvisvgm/configure.ac
+++ b/dviware/dvisvgm/configure.ac
@@ -4,8 +4,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT([dvisvgm],[2.9.1],[martin.gieseking@uos.de])
-DATE="March 2020"
+AC_INIT([dvisvgm],[2.10],[martin.gieseking@uos.de])
+DATE="August 2020"
AC_CONFIG_SRCDIR(src)
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
diff --git a/dviware/dvisvgm/doc/dvisvgm.1 b/dviware/dvisvgm/doc/dvisvgm.1
index 67cc037d26..085e67c03d 100644
--- a/dviware/dvisvgm/doc/dvisvgm.1
+++ b/dviware/dvisvgm/doc/dvisvgm.1
@@ -4,10 +4,10 @@
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 2020-03-19
.\" Manual: dvisvgm Manual
-.\" Source: dvisvgm 2.9.1
+.\" Source: dvisvgm 2.10
.\" Language: English
.\"
-.TH "DVISVGM" "1" "2020\-03\-19" "dvisvgm 2\&.9\&.1" "dvisvgm Manual"
+.TH "DVISVGM" "1" "2020\-03\-19" "dvisvgm 2\&.10" "dvisvgm Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -775,7 +775,7 @@ of option
\fBMD5\fR,
\fBXXH32\fR, and
\fBXXH64\fR, where the names can be given in lower case too, like
-\fB\-\-page\-hashes=md5\fR\&. Since version 0\&.7\&.1, xxHash provides an experimental 128\-bit hash function, whose algorithm may still change with the next versions of the library\&. If the corresponding API is available, dvisvgm supports the new hash function and option
+\fB\-\-page\-hashes=md5\fR\&. Since version 0\&.7\&.1, xxHash provides an experimental 128\-bit hash function whose algorithm has been stabilized as of version 0\&.8\&. When using a version prior to 0\&.8, the 128\-bit hash values can vary depending on the used xxHash version\&. If the corresponding API is available, dvisvgm supports the new hash function, and option
\fB\-\-page\-hashes\fR
additionally accepts the algorithm specifier
\fBXXH128\fR\&.
diff --git a/dviware/dvisvgm/doc/dvisvgm.txt.in b/dviware/dvisvgm/doc/dvisvgm.txt.in
index 2b51b57c32..71fb3351b1 100644
--- a/dviware/dvisvgm/doc/dvisvgm.txt.in
+++ b/dviware/dvisvgm/doc/dvisvgm.txt.in
@@ -518,9 +518,10 @@ By default, dvisvgm uses the fast XXH64 hash algorithm to compute the values pro
XXH32 and MD5 can be used as well. The desired algorithm is specified by argument 'params' of option
*--page-hashes*. It takes one of the strings +MD5+, +XXH32+, and +XXH64+, where the names can be given
in lower case too, like +--page-hashes=md5+. Since version 0.7.1, xxHash provides an experimental 128-bit
-hash function, whose algorithm may still change with the next versions of the library. If the
-corresponding API is available, dvisvgm supports the new hash function and option *--page-hashes*
-additionally accepts the algorithm specifier +XXH128+.
+hash function whose algorithm has been stabilized as of version 0.8. When using a version prior to 0.8,
+the 128-bit hash values can vary depending on the used xxHash version. If the corresponding API is
+available, dvisvgm supports the new hash function, and option *--page-hashes* additionally accepts the
+algorithm specifier +XXH128+.
+
Finally, option *--page-hashes* can take a second argument that must be separated by a comma.
Currently, only the two parameters 'list' and 'replace' are evaluated, e.g. +--page-hashes=md5,list+
diff --git a/dviware/dvisvgm/libs/xxHash/xxh3.h b/dviware/dvisvgm/libs/xxHash/xxh3.h
index 9e3e88ad61..7e83e6418a 100644
--- a/dviware/dvisvgm/libs/xxHash/xxh3.h
+++ b/dviware/dvisvgm/libs/xxHash/xxh3.h
@@ -1,7 +1,7 @@
/*
* xxHash - Extremely Fast Hash algorithm
* Development source file for `xxh3`
- * Copyright (C) 2019-present, Yann Collet
+ * Copyright (C) 2019-2020 Yann Collet
*
* BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)
*
@@ -34,2079 +34,22 @@
*/
/*
- * Note: This file is separated for development purposes.
- * It will be integrated into `xxhash.h` when development stage is completed.
+ * Note: This file used to host the source code of XXH3_* variants.
+ * during the development period.
+ * The source code is now properly integrated within xxhash.h.
*
- * Credit: most of the work on vectorial and asm variants comes from @easyaspi314
- */
-
-#ifndef XXH3_H_1397135465
-#define XXH3_H_1397135465
-
-/* === Dependencies === */
-#ifndef XXHASH_H_5627135585666179
-/* special: when including `xxh3.h` directly, turn on XXH_INLINE_ALL */
-# undef XXH_INLINE_ALL /* avoid redefinition */
-# define XXH_INLINE_ALL
-#endif
-#include "xxhash.h"
-
-
-/* === Compiler specifics === */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* >= C99 */
-# define XXH_RESTRICT restrict
-#else
-/* Note: it might be useful to define __restrict or __restrict__ for some C++ compilers */
-# define XXH_RESTRICT /* disable */
-#endif
-
-#if (defined(__GNUC__) && (__GNUC__ >= 3)) \
- || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \
- || defined(__clang__)
-# define XXH_likely(x) __builtin_expect(x, 1)
-# define XXH_unlikely(x) __builtin_expect(x, 0)
-#else
-# define XXH_likely(x) (x)
-# define XXH_unlikely(x) (x)
-#endif
-
-#if defined(__GNUC__)
-# if defined(__AVX2__)
-# include <immintrin.h>
-# elif defined(__SSE2__)
-# include <emmintrin.h>
-# elif defined(__ARM_NEON__) || defined(__ARM_NEON)
-# define inline __inline__ /* clang bug */
-# include <arm_neon.h>
-# undef inline
-# endif
-#elif defined(_MSC_VER)
-# include <intrin.h>
-#endif
-
-/*
- * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while
- * remaining a true 64-bit/128-bit hash function.
- *
- * This is done by prioritizing a subset of 64-bit operations that can be
- * emulated without too many steps on the average 32-bit machine.
- *
- * For example, these two lines seem similar, and run equally fast on 64-bit:
- *
- * xxh_u64 x;
- * x ^= (x >> 47); // good
- * x ^= (x >> 13); // bad
- *
- * However, to a 32-bit machine, there is a major difference.
- *
- * x ^= (x >> 47) looks like this:
- *
- * x.lo ^= (x.hi >> (47 - 32));
- *
- * while x ^= (x >> 13) looks like this:
- *
- * // note: funnel shifts are not usually cheap.
- * x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13));
- * x.hi ^= (x.hi >> 13);
- *
- * The first one is significantly faster than the second, simply because the
- * shift is larger than 32. This means:
- * - All the bits we need are in the upper 32 bits, so we can ignore the lower
- * 32 bits in the shift.
- * - The shift result will always fit in the lower 32 bits, and therefore,
- * we can ignore the upper 32 bits in the xor.
- *
- * Thanks to this optimization, XXH3 only requires these features to be efficient:
- *
- * - Usable unaligned access
- * - A 32-bit or 64-bit ALU
- * - If 32-bit, a decent ADC instruction
- * - A 32 or 64-bit multiply with a 64-bit result
- * - For the 128-bit variant, a decent byteswap helps short inputs.
- *
- * The first two are already required by XXH32, and almost all 32-bit and 64-bit
- * platforms which can run XXH32 can run XXH3 efficiently.
- *
- * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one
- * notable exception.
- *
- * First of all, Thumb-1 lacks support for the UMULL instruction which
- * performs the important long multiply. This means numerous __aeabi_lmul
- * calls.
- *
- * Second of all, the 8 functional registers are just not enough.
- * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need
- * Lo registers, and this shuffling results in thousands more MOVs than A32.
- *
- * A32 and T32 don't have this limitation. They can access all 14 registers,
- * do a 32->64 multiply with UMULL, and the flexible operand allowing free
- * shifts is helpful, too.
- *
- * Therefore, we do a quick sanity check.
- *
- * If compiling Thumb-1 for a target which supports ARM instructions, we will
- * emit a warning, as it is not a "sane" platform to compile for.
- *
- * Usually, if this happens, it is because of an accident and you probably need
- * to specify -march, as you likely meant to compile for a newer architecture.
- */
-#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM)
-# warning "XXH3 is highly inefficient without ARM or Thumb-2."
-#endif
-
-/* ==========================================
- * Vectorization detection
- * ========================================== */
-#define XXH_SCALAR 0 /* Portable scalar version */
-#define XXH_SSE2 1 /* SSE2 for Pentium 4 and all x86_64 */
-#define XXH_AVX2 2 /* AVX2 for Haswell and Bulldozer */
-#define XXH_NEON 3 /* NEON for most ARMv7-A and all AArch64 */
-#define XXH_VSX 4 /* VSX and ZVector for POWER8/z13 */
-
-#ifndef XXH_VECTOR /* can be defined on command line */
-# if defined(__AVX2__)
-# define XXH_VECTOR XXH_AVX2
-# elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2))
-# define XXH_VECTOR XXH_SSE2
-# elif defined(__GNUC__) /* msvc support maybe later */ \
- && (defined(__ARM_NEON__) || defined(__ARM_NEON)) \
- && (defined(__LITTLE_ENDIAN__) /* We only support little endian NEON */ \
- || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
-# define XXH_VECTOR XXH_NEON
-# elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \
- || (defined(__s390x__) && defined(__VEC__)) \
- && defined(__GNUC__) /* TODO: IBM XL */
-# define XXH_VECTOR XXH_VSX
-# else
-# define XXH_VECTOR XXH_SCALAR
-# endif
-#endif
-
-/*
- * Controls the alignment of the accumulator.
- * This is for compatibility with aligned vector loads, which are usually faster.
- */
-#ifndef XXH_ACC_ALIGN
-# if XXH_VECTOR == XXH_SCALAR /* scalar */
-# define XXH_ACC_ALIGN 8
-# elif XXH_VECTOR == XXH_SSE2 /* sse2 */
-# define XXH_ACC_ALIGN 16
-# elif XXH_VECTOR == XXH_AVX2 /* avx2 */
-# define XXH_ACC_ALIGN 32
-# elif XXH_VECTOR == XXH_NEON /* neon */
-# define XXH_ACC_ALIGN 16
-# elif XXH_VECTOR == XXH_VSX /* vsx */
-# define XXH_ACC_ALIGN 16
-# endif
-#endif
-
-/*
- * UGLY HACK:
- * GCC usually generates the best code with -O3 for xxHash.
- *
- * However, when targeting AVX2, it is overzealous in its unrolling resulting
- * in code roughly 3/4 the speed of Clang.
- *
- * There are other issues, such as GCC splitting _mm256_loadu_si256 into
- * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which
- * only applies to Sandy and Ivy Bridge... which don't even support AVX2.
- *
- * That is why when compiling the AVX2 version, it is recommended to use either
- * -O2 -mavx2 -march=haswell
- * or
- * -O2 -mavx2 -mno-avx256-split-unaligned-load
- * for decent performance, or to use Clang instead.
- *
- * Fortunately, we can control the first one with a pragma that forces GCC into
- * -O2, but the other one we can't control without "failed to inline always
- * inline function due to target mismatch" warnings.
- */
-#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
- && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
- && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
-# pragma GCC push_options
-# pragma GCC optimize("-O2")
-#endif
-
-
-#if XXH_VECTOR == XXH_NEON
-/*
- * NEON's setup for vmlal_u32 is a little more complicated than it is on
- * SSE2, AVX2, and VSX.
- *
- * While PMULUDQ and VMULEUW both perform a mask, VMLAL.U32 performs an upcast.
- *
- * To do the same operation, the 128-bit 'Q' register needs to be split into
- * two 64-bit 'D' registers, performing this operation::
- *
- * [ a | b ]
- * | '---------. .--------' |
- * | x |
- * | .---------' '--------. |
- * [ a & 0xFFFFFFFF | b & 0xFFFFFFFF ],[ a >> 32 | b >> 32 ]
- *
- * Due to significant changes in aarch64, the fastest method for aarch64 is
- * completely different than the fastest method for ARMv7-A.
- *
- * ARMv7-A treats D registers as unions overlaying Q registers, so modifying
- * D11 will modify the high half of Q5. This is similar to how modifying AH
- * will only affect bits 8-15 of AX on x86.
- *
- * VZIP takes two registers, and puts even lanes in one register and odd lanes
- * in the other.
- *
- * On ARMv7-A, this strangely modifies both parameters in place instead of
- * taking the usual 3-operand form.
- *
- * Therefore, if we want to do this, we can simply use a D-form VZIP.32 on the
- * lower and upper halves of the Q register to end up with the high and low
- * halves where we want - all in one instruction.
- *
- * vzip.32 d10, d11 @ d10 = { d10[0], d11[0] }; d11 = { d10[1], d11[1] }
- *
- * Unfortunately we need inline assembly for this: Instructions modifying two
- * registers at once is not possible in GCC or Clang's IR, and they have to
- * create a copy.
- *
- * aarch64 requires a different approach.
- *
- * In order to make it easier to write a decent compiler for aarch64, many
- * quirks were removed, such as conditional execution.
- *
- * NEON was also affected by this.
- *
- * aarch64 cannot access the high bits of a Q-form register, and writes to a
- * D-form register zero the high bits, similar to how writes to W-form scalar
- * registers (or DWORD registers on x86_64) work.
- *
- * The formerly free vget_high intrinsics now require a vext (with a few
- * exceptions)
- *
- * Additionally, VZIP was replaced by ZIP1 and ZIP2, which are the equivalent
- * of PUNPCKL* and PUNPCKH* in SSE, respectively, in order to only modify one
- * operand.
- *
- * The equivalent of the VZIP.32 on the lower and upper halves would be this
- * mess:
- *
- * ext v2.4s, v0.4s, v0.4s, #2 // v2 = { v0[2], v0[3], v0[0], v0[1] }
- * zip1 v1.2s, v0.2s, v2.2s // v1 = { v0[0], v2[0] }
- * zip2 v0.2s, v0.2s, v1.2s // v0 = { v0[1], v2[1] }
- *
- * Instead, we use a literal downcast, vmovn_u64 (XTN), and vshrn_n_u64 (SHRN):
- *
- * shrn v1.2s, v0.2d, #32 // v1 = (uint32x2_t)(v0 >> 32);
- * xtn v0.2s, v0.2d // v0 = (uint32x2_t)(v0 & 0xFFFFFFFF);
- *
- * This is available on ARMv7-A, but is less efficient than a single VZIP.32.
- */
-
-/*
- * Function-like macro:
- * void XXH_SPLIT_IN_PLACE(uint64x2_t &in, uint32x2_t &outLo, uint32x2_t &outHi)
- * {
- * outLo = (uint32x2_t)(in & 0xFFFFFFFF);
- * outHi = (uint32x2_t)(in >> 32);
- * in = UNDEFINED;
- * }
- */
-# if !defined(XXH_NO_VZIP_HACK) /* define to disable */ \
- && defined(__GNUC__) \
- && !defined(__aarch64__) && !defined(__arm64__)
-# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \
- do { \
- /* Undocumented GCC/Clang operand modifier: %e0 = lower D half, %f0 = upper D half */ \
- /* https://github.com/gcc-mirror/gcc/blob/38cf91e5/gcc/config/arm/arm.c#L22486 */ \
- /* https://github.com/llvm-mirror/llvm/blob/2c4ca683/lib/Target/ARM/ARMAsmPrinter.cpp#L399 */ \
- __asm__("vzip.32 %e0, %f0" : "+w" (in)); \
- (outLo) = vget_low_u32 (vreinterpretq_u32_u64(in)); \
- (outHi) = vget_high_u32(vreinterpretq_u32_u64(in)); \
- } while (0)
-# else
-# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \
- do { \
- (outLo) = vmovn_u64 (in); \
- (outHi) = vshrn_n_u64 ((in), 32); \
- } while (0)
-# endif
-#endif /* XXH_VECTOR == XXH_NEON */
-
-/*
- * VSX and Z Vector helpers.
- *
- * This is very messy, and any pull requests to clean this up are welcome.
- *
- * There are a lot of problems with supporting VSX and s390x, due to
- * inconsistent intrinsics, spotty coverage, and multiple endiannesses.
- */
-#if XXH_VECTOR == XXH_VSX
-# if defined(__s390x__)
-# include <s390intrin.h>
-# else
-# include <altivec.h>
-# endif
-
-# undef vector /* Undo the pollution */
-
-typedef __vector unsigned long long xxh_u64x2;
-typedef __vector unsigned char xxh_u8x16;
-typedef __vector unsigned xxh_u32x4;
-
-# ifndef XXH_VSX_BE
-# if defined(__BIG_ENDIAN__) \
- || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
-# define XXH_VSX_BE 1
-# elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__
-# warning "-maltivec=be is not recommended. Please use native endianness."
-# define XXH_VSX_BE 1
-# else
-# define XXH_VSX_BE 0
-# endif
-# endif /* !defined(XXH_VSX_BE) */
-
-# if XXH_VSX_BE
-/* A wrapper for POWER9's vec_revb. */
-# if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__))
-# define XXH_vec_revb vec_revb
-# else
-XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val)
-{
- xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
- 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 };
- return vec_perm(val, val, vByteSwap);
-}
-# endif
-# endif /* XXH_VSX_BE */
-
-/*
- * Performs an unaligned load and byte swaps it on big endian.
- */
-XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr)
-{
- xxh_u64x2 ret;
- memcpy(&ret, ptr, sizeof(xxh_u64x2));
-# if XXH_VSX_BE
- ret = XXH_vec_revb(ret);
-# endif
- return ret;
-}
-
-/*
- * vec_mulo and vec_mule are very problematic intrinsics on PowerPC
- *
- * These intrinsics weren't added until GCC 8, despite existing for a while,
- * and they are endian dependent. Also, their meaning swap depending on version.
- * */
-# if defined(__s390x__)
- /* s390x is always big endian, no issue on this platform */
-# define XXH_vec_mulo vec_mulo
-# define XXH_vec_mule vec_mule
-# elif defined(__clang__) && __has_builtin(__builtin_altivec_vmuleuw)
-/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */
-# define XXH_vec_mulo __builtin_altivec_vmulouw
-# define XXH_vec_mule __builtin_altivec_vmuleuw
-# else
-/* gcc needs inline assembly */
-/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */
-XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b)
-{
- xxh_u64x2 result;
- __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
- return result;
-}
-XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b)
-{
- xxh_u64x2 result;
- __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
- return result;
-}
-# endif /* XXH_vec_mulo, XXH_vec_mule */
-#endif /* XXH_VECTOR == XXH_VSX */
-
-
-/* prefetch
- * can be disabled, by declaring XXH_NO_PREFETCH build macro */
-#if defined(XXH_NO_PREFETCH)
-# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */
-#else
-# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) /* _mm_prefetch() is not defined outside of x86/x64 */
-# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
-# define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
-# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
-# define XXH_PREFETCH(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)
-# else
-# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */
-# endif
-#endif /* XXH_NO_PREFETCH */
-
-
-/* ==========================================
- * XXH3 default settings
- * ========================================== */
-
-#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */
-
-#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN)
-# error "default keyset is not large enough"
-#endif
-
-/* Pseudorandom secret taken directly from FARSH */
-XXH_ALIGN(64) static const xxh_u8 kSecret[XXH_SECRET_DEFAULT_SIZE] = {
- 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c,
- 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f,
- 0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21,
- 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c,
- 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3,
- 0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8,
- 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d,
- 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64,
-
- 0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb,
- 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e,
- 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce,
- 0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e,
-};
-
-/*
- * Does a 32-bit to 64-bit long multiply.
- *
- * Wraps __emulu on MSVC x86 because it tends to call __allmul when it doesn't
- * need to (but it shouldn't need to anyways, it is about 7 instructions to do
- * a 64x64 multiply...). Since we know that this will _always_ emit MULL, we
- * use that instead of the normal method.
- *
- * If you are compiling for platforms like Thumb-1 and don't have a better option,
- * you may also want to write your own long multiply routine here.
- *
- * XXH_FORCE_INLINE xxh_u64 XXH_mult32to64(xxh_u64 x, xxh_u64 y)
- * {
- * return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF);
- * }
- */
-#if defined(_MSC_VER) && defined(_M_IX86)
-# include <intrin.h>
-# define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y))
-#else
-/*
- * Downcast + upcast is usually better than masking on older compilers like
- * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers.
- *
- * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands
- * and perform a full 64x64 multiply -- entirely redundant on 32-bit.
- */
-# define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y))
-#endif
-
-/*
- * Calculates a 64->128-bit long multiply.
- *
- * Uses __uint128_t and _umul128 if available, otherwise uses a scalar version.
- */
-static XXH128_hash_t
-XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs)
-{
- /*
- * GCC/Clang __uint128_t method.
- *
- * On most 64-bit targets, GCC and Clang define a __uint128_t type.
- * This is usually the best way as it usually uses a native long 64-bit
- * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64.
- *
- * Usually.
- *
- * Despite being a 32-bit platform, Clang (and emscripten) define this type
- * despite not having the arithmetic for it. This results in a laggy
- * compiler builtin call which calculates a full 128-bit multiply.
- * In that case it is best to use the portable one.
- * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677
- */
-#if defined(__GNUC__) && !defined(__wasm__) \
- && defined(__SIZEOF_INT128__) \
- || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128)
-
- __uint128_t product = (__uint128_t)lhs * (__uint128_t)rhs;
- XXH128_hash_t const r128 = { (xxh_u64)(product), (xxh_u64)(product >> 64) };
- return r128;
-
- /*
- * MSVC for x64's _umul128 method.
- *
- * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct);
- *
- * This compiles to single operand MUL on x64.
- */
-#elif defined(_M_X64) || defined(_M_IA64)
-
-#ifndef _MSC_VER
-# pragma intrinsic(_umul128)
-#endif
- xxh_u64 product_high;
- xxh_u64 const product_low = _umul128(lhs, rhs, &product_high);
- XXH128_hash_t const r128 = { product_low, product_high };
- return r128;
-
-#else
- /*
- * Portable scalar method. Optimized for 32-bit and 64-bit ALUs.
- *
- * This is a fast and simple grade school multiply, which is shown below
- * with base 10 arithmetic instead of base 0x100000000.
- *
- * 9 3 // D2 lhs = 93
- * x 7 5 // D2 rhs = 75
- * ----------
- * 1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15
- * 4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45
- * 2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21
- * + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63
- * ---------
- * 2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27
- * + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67
- * ---------
- * 6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975
- *
- * The reasons for adding the products like this are:
- * 1. It avoids manual carry tracking. Just like how
- * (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX.
- * This avoids a lot of complexity.
- *
- * 2. It hints for, and on Clang, compiles to, the powerful UMAAL
- * instruction available in ARM's Digital Signal Processing extension
- * in 32-bit ARMv6 and later, which is shown below:
- *
- * void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm)
- * {
- * xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm;
- * *RdLo = (xxh_u32)(product & 0xFFFFFFFF);
- * *RdHi = (xxh_u32)(product >> 32);
- * }
- *
- * This instruction was designed for efficient long multiplication, and
- * allows this to be calculated in only 4 instructions at speeds
- * comparable to some 64-bit ALUs.
- *
- * 3. It isn't terrible on other platforms. Usually this will be a couple
- * of 32-bit ADD/ADCs.
- */
-
- /* First calculate all of the cross products. */
- xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF);
- xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF);
- xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32);
- xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32);
-
- /* Now add the products together. These will never overflow. */
- xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi;
- xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi;
- xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF);
-
- XXH128_hash_t r128 = { lower, upper };
- return r128;
-#endif
-}
-
-/*
- * Does a 64-bit to 128-bit multiply, then XOR folds it.
- *
- * The reason for the separate function is to prevent passing too many structs
- * around by value. This will hopefully inline the multiply, but we don't force it.
- */
-static xxh_u64
-XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs)
-{
- XXH128_hash_t product = XXH_mult64to128(lhs, rhs);
- return product.low64 ^ product.high64;
-}
-
-/* Seems to produce slightly better code on GCC for some reason. */
-XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift)
-{
- XXH_ASSERT(0 <= shift && shift < 64);
- return v64 ^ (v64 >> shift);
-}
-
-/*
- * We don't need to (or want to) mix as much as XXH64.
- *
- * Short hashes are more evenly distributed, so it isn't necessary.
- */
-static XXH64_hash_t XXH3_avalanche(xxh_u64 h64)
-{
- h64 = XXH_xorshift64(h64, 37);
- h64 *= 0x165667919E3779F9ULL;
- h64 = XXH_xorshift64(h64, 32);
- return h64;
-}
-
-
-/* ==========================================
- * Short keys
- * ==========================================
- * One of the shortcomings of XXH32 and XXH64 was that their performance was
- * sub-optimal on short lengths. It used an iterative algorithm which strongly
- * favored lengths that were a multiple of 4 or 8.
- *
- * Instead of iterating over individual inputs, we use a set of single shot
- * functions which piece together a range of lengths and operate in constant time.
+ * xxh3.h is no longer useful,
+ * but it is still provided for compatibility with source code
+ * which used to include it directly.
*
- * Additionally, the number of multiplies has been significantly reduced. This
- * reduces latency, especially when emulating 64-bit multiplies on 32-bit.
+ * Programs are now highly discourage to include xxh3.h.
+ * Include `xxhash.h` instead, which is the officially supported interface.
*
- * Depending on the platform, this may or may not be faster than XXH32, but it
- * is almost guaranteed to be faster than XXH64.
+ * In the future, xxh3.h will start to generate warnings, then errors,
+ * then it will be removed from source package and from include directory.
*/
-/*
- * At very short lengths, there isn't enough input to fully hide secrets, or use
- * the entire secret.
- *
- * There is also only a limited amount of mixing we can do before significantly
- * impacting performance.
- *
- * Therefore, we use different sections of the secret and always mix two secret
- * samples with an XOR. This should have no effect on performance on the
- * seedless or withSeed variants because everything _should_ be constant folded
- * by modern compilers.
- *
- * The XOR mixing hides individual parts of the secret and increases entropy.
- *
- * This adds an extra layer of strength for custom secrets.
- */
-XXH_FORCE_INLINE XXH64_hash_t
-XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(input != NULL);
- XXH_ASSERT(1 <= len && len <= 3);
- XXH_ASSERT(secret != NULL);
- /*
- * len = 1: combined = { input[0], 0x01, input[0], input[0] }
- * len = 2: combined = { input[1], 0x02, input[0], input[1] }
- * len = 3: combined = { input[2], 0x03, input[0], input[1] }
- */
- { xxh_u8 const c1 = input[0];
- xxh_u8 const c2 = input[len >> 1];
- xxh_u8 const c3 = input[len - 1];
- xxh_u32 const combined = ((xxh_u32)c1<<16) | (((xxh_u32)c2) << 24) | (((xxh_u32)c3) << 0) | (((xxh_u32)len) << 8);
- xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
- xxh_u64 const keyed = (xxh_u64)combined ^ bitflip;
- xxh_u64 const mixed = keyed * PRIME64_1;
- return XXH3_avalanche(mixed);
- }
-}
-
-XXH_FORCE_INLINE XXH64_hash_t
-XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(input != NULL);
- XXH_ASSERT(secret != NULL);
- XXH_ASSERT(4 <= len && len < 8);
- seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
- { xxh_u32 const input1 = XXH_readLE32(input);
- xxh_u32 const input2 = XXH_readLE32(input + len - 4);
- xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed;
- xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32);
- xxh_u64 x = input64 ^ bitflip;
- /* this mix is inspired by Pelle Evensen's rrmxmx */
- x ^= XXH_rotl64(x, 49) ^ XXH_rotl64(x, 24);
- x *= 0x9FB21C651E98DF25ULL;
- x ^= (x >> 35) + len ;
- x *= 0x9FB21C651E98DF25ULL;
- return XXH_xorshift64(x, 28);
- }
-}
-
-XXH_FORCE_INLINE XXH64_hash_t
-XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(input != NULL);
- XXH_ASSERT(secret != NULL);
- XXH_ASSERT(8 <= len && len <= 16);
- { xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed;
- xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed;
- xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1;
- xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2;
- xxh_u64 const acc = len
- + XXH_swap64(input_lo) + input_hi
- + XXH3_mul128_fold64(input_lo, input_hi);
- return XXH3_avalanche(acc);
- }
-}
-
-XXH_FORCE_INLINE XXH64_hash_t
-XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(len <= 16);
- { if (XXH_likely(len > 8)) return XXH3_len_9to16_64b(input, len, secret, seed);
- if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed);
- if (len) return XXH3_len_1to3_64b(input, len, secret, seed);
- return XXH3_avalanche((PRIME64_1 + seed) ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64)));
- }
-}
-
-/*
- * DISCLAIMER: There are known *seed-dependent* multicollisions here due to
- * multiplication by zero, affecting hashes of lengths 17 to 240.
- *
- * However, they are very unlikely.
- *
- * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all
- * unseeded non-cryptographic hashes, it does not attempt to defend itself
- * against specially crafted inputs, only random inputs.
- *
- * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes
- * cancelling out the secret is taken an arbitrary number of times (addressed
- * in XXH3_accumulate_512), this collision is very unlikely with random inputs
- * and/or proper seeding:
- *
- * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a
- * function that is only called up to 16 times per hash with up to 240 bytes of
- * input.
- *
- * This is not too bad for a non-cryptographic hash function, especially with
- * only 64 bit outputs.
- *
- * The 128-bit variant (which trades some speed for strength) is NOT affected
- * by this, although it is always a good idea to use a proper seed if you care
- * about strength.
- */
-XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input,
- const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64)
-{
-#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
- && defined(__i386__) && defined(__SSE2__) /* x86 + SSE2 */ \
- && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable like XXH32 hack */
- /*
- * UGLY HACK:
- * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in
- * slower code.
- *
- * By forcing seed64 into a register, we disrupt the cost model and
- * cause it to scalarize. See `XXH32_round()`
- *
- * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600,
- * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on
- * GCC 9.2, despite both emitting scalar code.
- *
- * GCC generates much better scalar code than Clang for the rest of XXH3,
- * which is why finding a more optimal codepath is an interest.
- */
- __asm__ ("" : "+r" (seed64));
-#endif
- { xxh_u64 const input_lo = XXH_readLE64(input);
- xxh_u64 const input_hi = XXH_readLE64(input+8);
- return XXH3_mul128_fold64(
- input_lo ^ (XXH_readLE64(secret) + seed64),
- input_hi ^ (XXH_readLE64(secret+8) - seed64)
- );
- }
-}
+/* Simulate the same impact as including the old xxh3.h source file */
-/* For mid range keys, XXH3 uses a Mum-hash variant. */
-XXH_FORCE_INLINE XXH64_hash_t
-XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
- XXH64_hash_t seed)
-{
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
- XXH_ASSERT(16 < len && len <= 128);
-
- { xxh_u64 acc = len * PRIME64_1;
- if (len > 32) {
- if (len > 64) {
- if (len > 96) {
- acc += XXH3_mix16B(input+48, secret+96, seed);
- acc += XXH3_mix16B(input+len-64, secret+112, seed);
- }
- acc += XXH3_mix16B(input+32, secret+64, seed);
- acc += XXH3_mix16B(input+len-48, secret+80, seed);
- }
- acc += XXH3_mix16B(input+16, secret+32, seed);
- acc += XXH3_mix16B(input+len-32, secret+48, seed);
- }
- acc += XXH3_mix16B(input+0, secret+0, seed);
- acc += XXH3_mix16B(input+len-16, secret+16, seed);
-
- return XXH3_avalanche(acc);
- }
-}
-
-#define XXH3_MIDSIZE_MAX 240
-
-XXH_NO_INLINE XXH64_hash_t
-XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
- XXH64_hash_t seed)
-{
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
- XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);
-
- #define XXH3_MIDSIZE_STARTOFFSET 3
- #define XXH3_MIDSIZE_LASTOFFSET 17
-
- { xxh_u64 acc = len * PRIME64_1;
- int const nbRounds = (int)len / 16;
- int i;
- for (i=0; i<8; i++) {
- acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed);
- }
- acc = XXH3_avalanche(acc);
- XXH_ASSERT(nbRounds >= 8);
-#if defined(__clang__) /* Clang */ \
- && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \
- && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */
- /*
- * UGLY HACK:
- * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86.
- * In everywhere else, it uses scalar code.
- *
- * For 64->128-bit multiplies, even if the NEON was 100% optimal, it
- * would still be slower than UMAAL (see XXH_mult64to128).
- *
- * Unfortunately, Clang doesn't handle the long multiplies properly and
- * converts them to the nonexistent "vmulq_u64" intrinsic, which is then
- * scalarized into an ugly mess of VMOV.32 instructions.
- *
- * This mess is difficult to avoid without turning autovectorization
- * off completely, but they are usually relatively minor and/or not
- * worth it to fix.
- *
- * This loop is the easiest to fix, as unlike XXH32, this pragma
- * _actually works_ because it is a loop vectorization instead of an
- * SLP vectorization.
- */
- #pragma clang loop vectorize(disable)
-#endif
- for (i=8 ; i < nbRounds; i++) {
- acc += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed);
- }
- /* last bytes */
- acc += XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed);
- return XXH3_avalanche(acc);
- }
-}
-
-
-/* === Long Keys === */
-
-#define STRIPE_LEN 64
-#define XXH_SECRET_CONSUME_RATE 8 /* nb of secret bytes consumed at each accumulation */
-#define ACC_NB (STRIPE_LEN / sizeof(xxh_u64))
-
-typedef enum { XXH3_acc_64bits, XXH3_acc_128bits } XXH3_accWidth_e;
-
-/*
- * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized.
- *
- * It is a hardened version of UMAC, based off of FARSH's implementation.
- *
- * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD
- * implementations, and it is ridiculously fast.
- *
- * We harden it by mixing the original input to the accumulators as well as the product.
- *
- * This means that in the (relatively likely) case of a multiply by zero, the
- * original input is preserved.
- *
- * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve
- * cross-pollination, as otherwise the upper and lower halves would be
- * essentially independent.
- *
- * This doesn't matter on 64-bit hashes since they all get merged together in
- * the end, so we skip the extra step.
- *
- * Both XXH3_64bits and XXH3_128bits use this subroutine.
- */
-XXH_FORCE_INLINE void
-XXH3_accumulate_512( void* XXH_RESTRICT acc,
- const void* XXH_RESTRICT input,
- const void* XXH_RESTRICT secret,
- XXH3_accWidth_e accWidth)
-{
-#if (XXH_VECTOR == XXH_AVX2)
-
- XXH_ASSERT((((size_t)acc) & 31) == 0);
- { XXH_ALIGN(32) __m256i* const xacc = (__m256i *) acc;
- /* Unaligned. This is mainly for pointer arithmetic, and because
- * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
- const __m256i* const xinput = (const __m256i *) input;
- /* Unaligned. This is mainly for pointer arithmetic, and because
- * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
- const __m256i* const xsecret = (const __m256i *) secret;
-
- size_t i;
- for (i=0; i < STRIPE_LEN/sizeof(__m256i); i++) {
- /* data_vec = xinput[i]; */
- __m256i const data_vec = _mm256_loadu_si256 (xinput+i);
- /* key_vec = xsecret[i]; */
- __m256i const key_vec = _mm256_loadu_si256 (xsecret+i);
- /* data_key = data_vec ^ key_vec; */
- __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec);
- /* data_key_lo = data_key >> 32; */
- __m256i const data_key_lo = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
- /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
- __m256i const product = _mm256_mul_epu32 (data_key, data_key_lo);
- if (accWidth == XXH3_acc_128bits) {
- /* xacc[i] += swap(data_vec); */
- __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2));
- __m256i const sum = _mm256_add_epi64(xacc[i], data_swap);
- /* xacc[i] += product; */
- xacc[i] = _mm256_add_epi64(product, sum);
- } else { /* XXH3_acc_64bits */
- /* xacc[i] += data_vec; */
- __m256i const sum = _mm256_add_epi64(xacc[i], data_vec);
- /* xacc[i] += product; */
- xacc[i] = _mm256_add_epi64(product, sum);
- }
- } }
-
-#elif (XXH_VECTOR == XXH_SSE2)
-
- /* SSE2 is just a half-scale version of the AVX2 version. */
- XXH_ASSERT((((size_t)acc) & 15) == 0);
- { XXH_ALIGN(16) __m128i* const xacc = (__m128i *) acc;
- /* Unaligned. This is mainly for pointer arithmetic, and because
- * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
- const __m128i* const xinput = (const __m128i *) input;
- /* Unaligned. This is mainly for pointer arithmetic, and because
- * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
- const __m128i* const xsecret = (const __m128i *) secret;
-
- size_t i;
- for (i=0; i < STRIPE_LEN/sizeof(__m128i); i++) {
- /* data_vec = xinput[i]; */
- __m128i const data_vec = _mm_loadu_si128 (xinput+i);
- /* key_vec = xsecret[i]; */
- __m128i const key_vec = _mm_loadu_si128 (xsecret+i);
- /* data_key = data_vec ^ key_vec; */
- __m128i const data_key = _mm_xor_si128 (data_vec, key_vec);
- /* data_key_lo = data_key >> 32; */
- __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
- /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
- __m128i const product = _mm_mul_epu32 (data_key, data_key_lo);
- if (accWidth == XXH3_acc_128bits) {
- /* xacc[i] += swap(data_vec); */
- __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2));
- __m128i const sum = _mm_add_epi64(xacc[i], data_swap);
- /* xacc[i] += product; */
- xacc[i] = _mm_add_epi64(product, sum);
- } else { /* XXH3_acc_64bits */
- /* xacc[i] += data_vec; */
- __m128i const sum = _mm_add_epi64(xacc[i], data_vec);
- /* xacc[i] += product; */
- xacc[i] = _mm_add_epi64(product, sum);
- }
- } }
-
-#elif (XXH_VECTOR == XXH_NEON)
-
- XXH_ASSERT((((size_t)acc) & 15) == 0);
- {
- XXH_ALIGN(16) uint64x2_t* const xacc = (uint64x2_t *) acc;
- /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */
- uint8_t const* const xinput = (const uint8_t *) input;
- uint8_t const* const xsecret = (const uint8_t *) secret;
-
- size_t i;
- for (i=0; i < STRIPE_LEN / sizeof(uint64x2_t); i++) {
- /* data_vec = xinput[i]; */
- uint8x16_t data_vec = vld1q_u8(xinput + (i * 16));
- /* key_vec = xsecret[i]; */
- uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16));
- /* data_key = data_vec ^ key_vec; */
- uint64x2_t data_key = vreinterpretq_u64_u8(veorq_u8(data_vec, key_vec));
- uint32x2_t data_key_lo, data_key_hi;
- if (accWidth == XXH3_acc_64bits) {
- /* xacc[i] += data_vec; */
- xacc[i] = vaddq_u64 (xacc[i], vreinterpretq_u64_u8(data_vec));
- } else { /* XXH3_acc_128bits */
- /* xacc[i] += swap(data_vec); */
- uint64x2_t const data64 = vreinterpretq_u64_u8(data_vec);
- uint64x2_t const swapped = vextq_u64(data64, data64, 1);
- xacc[i] = vaddq_u64 (xacc[i], swapped);
- }
- /* data_key_lo = (uint32x2_t) (data_key & 0xFFFFFFFF);
- * data_key_hi = (uint32x2_t) (data_key >> 32);
- * data_key = UNDEFINED; */
- XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
- /* xacc[i] += (uint64x2_t) data_key_lo * (uint64x2_t) data_key_hi; */
- xacc[i] = vmlal_u32 (xacc[i], data_key_lo, data_key_hi);
-
- }
- }
-
-#elif (XXH_VECTOR == XXH_VSX)
- xxh_u64x2* const xacc = (xxh_u64x2*) acc; /* presumed aligned */
- xxh_u64x2 const* const xinput = (xxh_u64x2 const*) input; /* no alignment restriction */
- xxh_u64x2 const* const xsecret = (xxh_u64x2 const*) secret; /* no alignment restriction */
- xxh_u64x2 const v32 = { 32, 32 };
- size_t i;
- for (i = 0; i < STRIPE_LEN / sizeof(xxh_u64x2); i++) {
- /* data_vec = xinput[i]; */
- xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + i);
- /* key_vec = xsecret[i]; */
- xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i);
- xxh_u64x2 const data_key = data_vec ^ key_vec;
- /* shuffled = (data_key << 32) | (data_key >> 32); */
- xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32);
- /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */
- xxh_u64x2 const product = XXH_vec_mulo((xxh_u32x4)data_key, shuffled);
- xacc[i] += product;
-
- if (accWidth == XXH3_acc_64bits) {
- xacc[i] += data_vec;
- } else { /* XXH3_acc_128bits */
- /* swap high and low halves */
-#ifdef __s390x__
- xxh_u64x2 const data_swapped = vec_permi(data_vec, data_vec, 2);
-#else
- xxh_u64x2 const data_swapped = vec_xxpermdi(data_vec, data_vec, 2);
-#endif
- xacc[i] += data_swapped;
- }
- }
-
-#else /* scalar variant of Accumulator - universal */
-
- XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */
- const xxh_u8* const xinput = (const xxh_u8*) input; /* no alignment restriction */
- const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */
- size_t i;
- XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0);
- for (i=0; i < ACC_NB; i++) {
- xxh_u64 const data_val = XXH_readLE64(xinput + 8*i);
- xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + i*8);
-
- if (accWidth == XXH3_acc_64bits) {
- xacc[i] += data_val;
- } else {
- xacc[i ^ 1] += data_val; /* swap adjacent lanes */
- }
- xacc[i] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32);
- }
-#endif
-}
-
-/*
- * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing.
- *
- * Multiplication isn't perfect, as explained by Google in HighwayHash:
- *
- * // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to
- * // varying degrees. In descending order of goodness, bytes
- * // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32.
- * // As expected, the upper and lower bytes are much worse.
- *
- * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291
- *
- * Since our algorithm uses a pseudorandom secret to add some variance into the
- * mix, we don't need to (or want to) mix as often or as much as HighwayHash does.
- *
- * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid
- * extraction.
- *
- * Both XXH3_64bits and XXH3_128bits use this subroutine.
- */
-XXH_FORCE_INLINE void
-XXH3_scrambleAcc(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
-{
-#if (XXH_VECTOR == XXH_AVX2)
-
- XXH_ASSERT((((size_t)acc) & 31) == 0);
- { XXH_ALIGN(32) __m256i* const xacc = (__m256i*) acc;
- /* Unaligned. This is mainly for pointer arithmetic, and because
- * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
- const __m256i* const xsecret = (const __m256i *) secret;
- const __m256i prime32 = _mm256_set1_epi32((int)PRIME32_1);
-
- size_t i;
- for (i=0; i < STRIPE_LEN/sizeof(__m256i); i++) {
- /* xacc[i] ^= (xacc[i] >> 47) */
- __m256i const acc_vec = xacc[i];
- __m256i const shifted = _mm256_srli_epi64 (acc_vec, 47);
- __m256i const data_vec = _mm256_xor_si256 (acc_vec, shifted);
- /* xacc[i] ^= xsecret; */
- __m256i const key_vec = _mm256_loadu_si256 (xsecret+i);
- __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec);
-
- /* xacc[i] *= PRIME32_1; */
- __m256i const data_key_hi = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
- __m256i const prod_lo = _mm256_mul_epu32 (data_key, prime32);
- __m256i const prod_hi = _mm256_mul_epu32 (data_key_hi, prime32);
- xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32));
- }
- }
-
-#elif (XXH_VECTOR == XXH_SSE2)
-
- XXH_ASSERT((((size_t)acc) & 15) == 0);
- { XXH_ALIGN(16) __m128i* const xacc = (__m128i*) acc;
- /* Unaligned. This is mainly for pointer arithmetic, and because
- * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
- const __m128i* const xsecret = (const __m128i *) secret;
- const __m128i prime32 = _mm_set1_epi32((int)PRIME32_1);
-
- size_t i;
- for (i=0; i < STRIPE_LEN/sizeof(__m128i); i++) {
- /* xacc[i] ^= (xacc[i] >> 47) */
- __m128i const acc_vec = xacc[i];
- __m128i const shifted = _mm_srli_epi64 (acc_vec, 47);
- __m128i const data_vec = _mm_xor_si128 (acc_vec, shifted);
- /* xacc[i] ^= xsecret[i]; */
- __m128i const key_vec = _mm_loadu_si128 (xsecret+i);
- __m128i const data_key = _mm_xor_si128 (data_vec, key_vec);
-
- /* xacc[i] *= PRIME32_1; */
- __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
- __m128i const prod_lo = _mm_mul_epu32 (data_key, prime32);
- __m128i const prod_hi = _mm_mul_epu32 (data_key_hi, prime32);
- xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32));
- }
- }
-
-#elif (XXH_VECTOR == XXH_NEON)
-
- XXH_ASSERT((((size_t)acc) & 15) == 0);
-
- { uint64x2_t* xacc = (uint64x2_t*) acc;
- uint8_t const* xsecret = (uint8_t const*) secret;
- uint32x2_t prime = vdup_n_u32 (PRIME32_1);
-
- size_t i;
- for (i=0; i < STRIPE_LEN/sizeof(uint64x2_t); i++) {
- /* xacc[i] ^= (xacc[i] >> 47); */
- uint64x2_t acc_vec = xacc[i];
- uint64x2_t shifted = vshrq_n_u64 (acc_vec, 47);
- uint64x2_t data_vec = veorq_u64 (acc_vec, shifted);
-
- /* xacc[i] ^= xsecret[i]; */
- uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16));
- uint64x2_t data_key = veorq_u64(data_vec, vreinterpretq_u64_u8(key_vec));
-
- /* xacc[i] *= PRIME32_1 */
- uint32x2_t data_key_lo, data_key_hi;
- /* data_key_lo = (uint32x2_t) (xacc[i] & 0xFFFFFFFF);
- * data_key_hi = (uint32x2_t) (xacc[i] >> 32);
- * xacc[i] = UNDEFINED; */
- XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
- { /*
- * prod_hi = (data_key >> 32) * PRIME32_1;
- *
- * Avoid vmul_u32 + vshll_n_u32 since Clang 6 and 7 will
- * incorrectly "optimize" this:
- * tmp = vmul_u32(vmovn_u64(a), vmovn_u64(b));
- * shifted = vshll_n_u32(tmp, 32);
- * to this:
- * tmp = "vmulq_u64"(a, b); // no such thing!
- * shifted = vshlq_n_u64(tmp, 32);
- *
- * However, unlike SSE, Clang lacks a 64-bit multiply routine
- * for NEON, and it scalarizes two 64-bit multiplies instead.
- *
- * vmull_u32 has the same timing as vmul_u32, and it avoids
- * this bug completely.
- * See https://bugs.llvm.org/show_bug.cgi?id=39967
- */
- uint64x2_t prod_hi = vmull_u32 (data_key_hi, prime);
- /* xacc[i] = prod_hi << 32; */
- xacc[i] = vshlq_n_u64(prod_hi, 32);
- /* xacc[i] += (prod_hi & 0xFFFFFFFF) * PRIME32_1; */
- xacc[i] = vmlal_u32(xacc[i], data_key_lo, prime);
- }
- } }
-
-#elif (XXH_VECTOR == XXH_VSX)
-
- XXH_ASSERT((((size_t)acc) & 15) == 0);
-
- { xxh_u64x2* const xacc = (xxh_u64x2*) acc;
- const xxh_u64x2* const xsecret = (const xxh_u64x2*) secret;
- /* constants */
- xxh_u64x2 const v32 = { 32, 32 };
- xxh_u64x2 const v47 = { 47, 47 };
- xxh_u32x4 const prime = { PRIME32_1, PRIME32_1, PRIME32_1, PRIME32_1 };
- size_t i;
- for (i = 0; i < STRIPE_LEN / sizeof(xxh_u64x2); i++) {
- /* xacc[i] ^= (xacc[i] >> 47); */
- xxh_u64x2 const acc_vec = xacc[i];
- xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47);
-
- /* xacc[i] ^= xsecret[i]; */
- xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i);
- xxh_u64x2 const data_key = data_vec ^ key_vec;
-
- /* xacc[i] *= PRIME32_1 */
- /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF); */
- xxh_u64x2 const prod_even = XXH_vec_mule((xxh_u32x4)data_key, prime);
- /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32); */
- xxh_u64x2 const prod_odd = XXH_vec_mulo((xxh_u32x4)data_key, prime);
- xacc[i] = prod_odd + (prod_even << v32);
- } }
-
-#else /* scalar variant of Scrambler - universal */
-
- XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */
- const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */
- size_t i;
- XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0);
- for (i=0; i < ACC_NB; i++) {
- xxh_u64 const key64 = XXH_readLE64(xsecret + 8*i);
- xxh_u64 acc64 = xacc[i];
- acc64 = XXH_xorshift64(acc64, 47);
- acc64 ^= key64;
- acc64 *= PRIME32_1;
- xacc[i] = acc64;
- }
-
-#endif
-}
-
-#define XXH_PREFETCH_DIST 384
-
-/*
- * XXH3_accumulate()
- * Loops over XXH3_accumulate_512().
- * Assumption: nbStripes will not overflow the secret size
- */
-XXH_FORCE_INLINE void
-XXH3_accumulate( xxh_u64* XXH_RESTRICT acc,
- const xxh_u8* XXH_RESTRICT input,
- const xxh_u8* XXH_RESTRICT secret,
- size_t nbStripes,
- XXH3_accWidth_e accWidth)
-{
- size_t n;
- for (n = 0; n < nbStripes; n++ ) {
- const xxh_u8* const in = input + n*STRIPE_LEN;
- XXH_PREFETCH(in + XXH_PREFETCH_DIST);
- XXH3_accumulate_512(acc,
- in,
- secret + n*XXH_SECRET_CONSUME_RATE,
- accWidth);
- }
-}
-
-XXH_FORCE_INLINE void
-XXH3_hashLong_internal_loop( xxh_u64* XXH_RESTRICT acc,
- const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
- XXH3_accWidth_e accWidth)
-{
- size_t const nb_rounds = (secretSize - STRIPE_LEN) / XXH_SECRET_CONSUME_RATE;
- size_t const block_len = STRIPE_LEN * nb_rounds;
- size_t const nb_blocks = len / block_len;
-
- size_t n;
-
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
-
- for (n = 0; n < nb_blocks; n++) {
- XXH3_accumulate(acc, input + n*block_len, secret, nb_rounds, accWidth);
- XXH3_scrambleAcc(acc, secret + secretSize - STRIPE_LEN);
- }
-
- /* last partial block */
- XXH_ASSERT(len > STRIPE_LEN);
- { size_t const nbStripes = (len - (block_len * nb_blocks)) / STRIPE_LEN;
- XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE));
- XXH3_accumulate(acc, input + nb_blocks*block_len, secret, nbStripes, accWidth);
-
- /* last stripe */
- if (len & (STRIPE_LEN - 1)) {
- const xxh_u8* const p = input + len - STRIPE_LEN;
- /* Do not align on 8, so that the secret is different from the scrambler */
-#define XXH_SECRET_LASTACC_START 7
- XXH3_accumulate_512(acc, p, secret + secretSize - STRIPE_LEN - XXH_SECRET_LASTACC_START, accWidth);
- } }
-}
-
-XXH_FORCE_INLINE xxh_u64
-XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret)
-{
- return XXH3_mul128_fold64(
- acc[0] ^ XXH_readLE64(secret),
- acc[1] ^ XXH_readLE64(secret+8) );
-}
-
-static XXH64_hash_t
-XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start)
-{
- xxh_u64 result64 = start;
-
- result64 += XXH3_mix2Accs(acc+0, secret + 0);
- result64 += XXH3_mix2Accs(acc+2, secret + 16);
- result64 += XXH3_mix2Accs(acc+4, secret + 32);
- result64 += XXH3_mix2Accs(acc+6, secret + 48);
-
- return XXH3_avalanche(result64);
-}
-
-#define XXH3_INIT_ACC { PRIME32_3, PRIME64_1, PRIME64_2, PRIME64_3, \
- PRIME64_4, PRIME32_2, PRIME64_5, PRIME32_1 };
-
-XXH_FORCE_INLINE XXH64_hash_t
-XXH3_hashLong_internal(const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize)
-{
- XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[ACC_NB] = XXH3_INIT_ACC;
-
- XXH3_hashLong_internal_loop(acc, input, len, secret, secretSize, XXH3_acc_64bits);
-
- /* converge into final hash */
- XXH_STATIC_ASSERT(sizeof(acc) == 64);
- /* do not align on 8, so that the secret is different from the accumulator */
-#define XXH_SECRET_MERGEACCS_START 11
- XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
- return XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * PRIME64_1);
-}
-
-/*
- * It's important for performance that XXH3_hashLong is not inlined. Not sure
- * why (uop cache maybe?), but the difference is large and easily measurable.
- */
-XXH_NO_INLINE XXH64_hash_t
-XXH3_hashLong_64b_defaultSecret(const xxh_u8* XXH_RESTRICT input, size_t len)
-{
- return XXH3_hashLong_internal(input, len, kSecret, sizeof(kSecret));
-}
-
-/*
- * It's important for performance that XXH3_hashLong is not inlined. Not sure
- * why (uop cache maybe?), but the difference is large and easily measurable.
- */
-XXH_NO_INLINE XXH64_hash_t
-XXH3_hashLong_64b_withSecret(const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize)
-{
- return XXH3_hashLong_internal(input, len, secret, secretSize);
-}
-
-
-XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64)
-{
- if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64);
- memcpy(dst, &v64, sizeof(v64));
-}
-
-/* XXH3_initCustomSecret() :
- * destination `customSecret` is presumed allocated and same size as `kSecret`.
- */
-XXH_FORCE_INLINE void XXH3_initCustomSecret(xxh_u8* customSecret, xxh_u64 seed64)
-{
- int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16;
- int i;
-
- XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);
-
- for (i=0; i < nbRounds; i++) {
- XXH_writeLE64(customSecret + 16*i, XXH_readLE64(kSecret + 16*i) + seed64);
- XXH_writeLE64(customSecret + 16*i + 8, XXH_readLE64(kSecret + 16*i + 8) - seed64);
- }
-}
-
-
-/*
- * XXH3_hashLong_64b_withSeed():
- * Generate a custom key based on alteration of default kSecret with the seed,
- * and then use this key for long mode hashing.
- *
- * This operation is decently fast but nonetheless costs a little bit of time.
- * Try to avoid it whenever possible (typically when seed==0).
- *
- * It's important for performance that XXH3_hashLong is not inlined. Not sure
- * why (uop cache maybe?), but the difference is large and easily measurable.
- */
-XXH_NO_INLINE XXH64_hash_t
-XXH3_hashLong_64b_withSeed(const xxh_u8* input, size_t len, XXH64_hash_t seed)
-{
- XXH_ALIGN(8) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
- if (seed==0) return XXH3_hashLong_64b_defaultSecret(input, len);
- XXH3_initCustomSecret(secret, seed);
- return XXH3_hashLong_internal(input, len, secret, sizeof(secret));
-}
-
-/* === Public entry point === */
-
-XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* input, size_t len)
-{
- if (len <= 16) return XXH3_len_0to16_64b((const xxh_u8*)input, len, kSecret, 0);
- if (len <= 128) return XXH3_len_17to128_64b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), 0);
- if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_64b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), 0);
- return XXH3_hashLong_64b_defaultSecret((const xxh_u8*)input, len);
-}
-
-XXH_PUBLIC_API XXH64_hash_t
-XXH3_64bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
-{
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
- /*
- * If an action is to be taken if `secret` conditions are not respected,
- * it should be done here.
- * For now, it's a contract pre-condition.
- * Adding a check and a branch here would cost performance at every hash.
- */
- if (len <= 16) return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, 0);
- if (len <= 128) return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, 0);
- if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, 0);
- return XXH3_hashLong_64b_withSecret((const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize);
-}
-
-XXH_PUBLIC_API XXH64_hash_t
-XXH3_64bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
-{
- if (len <= 16) return XXH3_len_0to16_64b((const xxh_u8*)input, len, kSecret, seed);
- if (len <= 128) return XXH3_len_17to128_64b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), seed);
- if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_64b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), seed);
- return XXH3_hashLong_64b_withSeed((const xxh_u8*)input, len, seed);
-}
-
-/* === XXH3 streaming === */
-
-XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void)
-{
- return (XXH3_state_t*)XXH_malloc(sizeof(XXH3_state_t));
-}
-
-XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr)
-{
- XXH_free(statePtr);
- return XXH_OK;
-}
-
-XXH_PUBLIC_API void
-XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state)
-{
- memcpy(dst_state, src_state, sizeof(*dst_state));
-}
-
-static void
-XXH3_64bits_reset_internal(XXH3_state_t* statePtr,
- XXH64_hash_t seed,
- const xxh_u8* secret, size_t secretSize)
-{
- XXH_ASSERT(statePtr != NULL);
- memset(statePtr, 0, sizeof(*statePtr));
- statePtr->acc[0] = PRIME32_3;
- statePtr->acc[1] = PRIME64_1;
- statePtr->acc[2] = PRIME64_2;
- statePtr->acc[3] = PRIME64_3;
- statePtr->acc[4] = PRIME64_4;
- statePtr->acc[5] = PRIME32_2;
- statePtr->acc[6] = PRIME64_5;
- statePtr->acc[7] = PRIME32_1;
- statePtr->seed = seed;
- XXH_ASSERT(secret != NULL);
- statePtr->secret = secret;
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
- statePtr->secretLimit = (XXH32_hash_t)(secretSize - STRIPE_LEN);
- statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE;
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_64bits_reset(XXH3_state_t* statePtr)
-{
- if (statePtr == NULL) return XXH_ERROR;
- XXH3_64bits_reset_internal(statePtr, 0, kSecret, XXH_SECRET_DEFAULT_SIZE);
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
-{
- if (statePtr == NULL) return XXH_ERROR;
- XXH3_64bits_reset_internal(statePtr, 0, (const xxh_u8*)secret, secretSize);
- if (secret == NULL) return XXH_ERROR;
- if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
-{
- if (statePtr == NULL) return XXH_ERROR;
- XXH3_64bits_reset_internal(statePtr, seed, kSecret, XXH_SECRET_DEFAULT_SIZE);
- XXH3_initCustomSecret(statePtr->customSecret, seed);
- statePtr->secret = statePtr->customSecret;
- return XXH_OK;
-}
-
-XXH_FORCE_INLINE void
-XXH3_consumeStripes( xxh_u64* acc,
- XXH32_hash_t* nbStripesSoFarPtr, XXH32_hash_t nbStripesPerBlock,
- const xxh_u8* input, size_t totalStripes,
- const xxh_u8* secret, size_t secretLimit,
- XXH3_accWidth_e accWidth)
-{
- XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock);
- if (nbStripesPerBlock - *nbStripesSoFarPtr <= totalStripes) {
- /* need a scrambling operation */
- size_t const nbStripes = nbStripesPerBlock - *nbStripesSoFarPtr;
- XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripes, accWidth);
- XXH3_scrambleAcc(acc, secret + secretLimit);
- XXH3_accumulate(acc, input + nbStripes * STRIPE_LEN, secret, totalStripes - nbStripes, accWidth);
- *nbStripesSoFarPtr = (XXH32_hash_t)(totalStripes - nbStripes);
- } else {
- XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, totalStripes, accWidth);
- *nbStripesSoFarPtr += (XXH32_hash_t)totalStripes;
- }
-}
-
-/*
- * Both XXH3_64bits_update and XXH3_128bits_update use this routine.
- */
-XXH_FORCE_INLINE XXH_errorcode
-XXH3_update(XXH3_state_t* state, const xxh_u8* input, size_t len, XXH3_accWidth_e accWidth)
-{
- if (input==NULL)
-#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)
- return XXH_OK;
-#else
- return XXH_ERROR;
-#endif
-
- { const xxh_u8* const bEnd = input + len;
-
- state->totalLen += len;
-
- if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) { /* fill in tmp buffer */
- XXH_memcpy(state->buffer + state->bufferedSize, input, len);
- state->bufferedSize += (XXH32_hash_t)len;
- return XXH_OK;
- }
- /* input is now > XXH3_INTERNALBUFFER_SIZE */
-
- #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / STRIPE_LEN)
- XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % STRIPE_LEN == 0); /* clean multiple */
-
- /*
- * There is some input left inside the internal buffer.
- * Fill it, then consume it.
- */
- if (state->bufferedSize) {
- size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize;
- XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize);
- input += loadSize;
- XXH3_consumeStripes(state->acc,
- &state->nbStripesSoFar, state->nbStripesPerBlock,
- state->buffer, XXH3_INTERNALBUFFER_STRIPES,
- state->secret, state->secretLimit,
- accWidth);
- state->bufferedSize = 0;
- }
-
- /* Consume input by full buffer quantities */
- if (input+XXH3_INTERNALBUFFER_SIZE <= bEnd) {
- const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE;
- do {
- XXH3_consumeStripes(state->acc,
- &state->nbStripesSoFar, state->nbStripesPerBlock,
- input, XXH3_INTERNALBUFFER_STRIPES,
- state->secret, state->secretLimit,
- accWidth);
- input += XXH3_INTERNALBUFFER_SIZE;
- } while (input<=limit);
- }
-
- if (input < bEnd) { /* Some remaining input: buffer it */
- XXH_memcpy(state->buffer, input, (size_t)(bEnd-input));
- state->bufferedSize = (XXH32_hash_t)(bEnd-input);
- }
- }
-
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len)
-{
- return XXH3_update(state, (const xxh_u8*)input, len, XXH3_acc_64bits);
-}
-
-
-XXH_FORCE_INLINE void
-XXH3_digest_long (XXH64_hash_t* acc, const XXH3_state_t* state, XXH3_accWidth_e accWidth)
-{
- /*
- * Digest on a local copy. This way, the state remains unaltered, and it can
- * continue ingesting more input afterwards.
- */
- memcpy(acc, state->acc, sizeof(state->acc));
- if (state->bufferedSize >= STRIPE_LEN) {
- size_t const totalNbStripes = state->bufferedSize / STRIPE_LEN;
- XXH32_hash_t nbStripesSoFar = state->nbStripesSoFar;
- XXH3_consumeStripes(acc,
- &nbStripesSoFar, state->nbStripesPerBlock,
- state->buffer, totalNbStripes,
- state->secret, state->secretLimit,
- accWidth);
- if (state->bufferedSize % STRIPE_LEN) { /* one last partial stripe */
- XXH3_accumulate_512(acc,
- state->buffer + state->bufferedSize - STRIPE_LEN,
- state->secret + state->secretLimit - XXH_SECRET_LASTACC_START,
- accWidth);
- }
- } else { /* bufferedSize < STRIPE_LEN */
- if (state->bufferedSize) { /* one last stripe */
- xxh_u8 lastStripe[STRIPE_LEN];
- size_t const catchupSize = STRIPE_LEN - state->bufferedSize;
- memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize);
- memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize);
- XXH3_accumulate_512(acc,
- lastStripe,
- state->secret + state->secretLimit - XXH_SECRET_LASTACC_START,
- accWidth);
- } }
-}
-
-XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* state)
-{
- if (state->totalLen > XXH3_MIDSIZE_MAX) {
- XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[ACC_NB];
- XXH3_digest_long(acc, state, XXH3_acc_64bits);
- return XXH3_mergeAccs(acc, state->secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)state->totalLen * PRIME64_1);
- }
- /* len <= XXH3_MIDSIZE_MAX : short code */
- if (state->seed)
- return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
- return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen), state->secret, state->secretLimit + STRIPE_LEN);
-}
-
-/* ==========================================
- * XXH3 128 bits (=> XXH128)
- * ========================================== */
-
-XXH_FORCE_INLINE XXH128_hash_t
-XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(input != NULL);
- XXH_ASSERT(1 <= len && len <= 3);
- XXH_ASSERT(secret != NULL);
- /*
- * len = 1: combinedl = { input[0], 0x01, input[0], input[0] }
- * len = 2: combinedl = { input[1], 0x02, input[0], input[1] }
- * len = 3: combinedl = { input[2], 0x03, input[0], input[1] }
- */
- { xxh_u8 const c1 = input[0];
- xxh_u8 const c2 = input[len >> 1];
- xxh_u8 const c3 = input[len - 1];
- xxh_u32 const combinedl = ((xxh_u32)c1<<16) | (((xxh_u32)c2) << 24) | (((xxh_u32)c3) << 0) | (((xxh_u32)len) << 8);
- xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13);
- xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
- xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed;
- xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl;
- xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph;
- xxh_u64 const mixedl = keyed_lo * PRIME64_1;
- xxh_u64 const mixedh = keyed_hi * PRIME64_5;
- XXH128_hash_t const h128 = { XXH3_avalanche(mixedl) /*low64*/, XXH3_avalanche(mixedh) /*high64*/ };
- return h128;
- }
-}
-
-XXH_FORCE_INLINE XXH128_hash_t
-XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(input != NULL);
- XXH_ASSERT(secret != NULL);
- XXH_ASSERT(4 <= len && len <= 8);
- seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
- { xxh_u32 const input_lo = XXH_readLE32(input);
- xxh_u32 const input_hi = XXH_readLE32(input + len - 4);
- xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32);
- xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed;
- xxh_u64 const keyed = input_64 ^ bitflip;
-
- /* Shift len to the left to ensure it is even, this avoids even multiplies. */
- XXH128_hash_t m128 = XXH_mult64to128(keyed, PRIME64_1 + (len << 2));
-
- m128.high64 += (m128.low64 << 1);
- m128.low64 ^= (m128.high64 >> 3);
-
- m128.low64 = XXH_xorshift64(m128.low64, 35);
- m128.low64 *= 0x9FB21C651E98DF25ULL;
- m128.low64 = XXH_xorshift64(m128.low64, 28);
- m128.high64 = XXH3_avalanche(m128.high64);
- return m128;
- }
-}
-
-XXH_FORCE_INLINE XXH128_hash_t
-XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(input != NULL);
- XXH_ASSERT(secret != NULL);
- XXH_ASSERT(9 <= len && len <= 16);
- { xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed;
- xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed;
- xxh_u64 const input_lo = XXH_readLE64(input);
- xxh_u64 input_hi = XXH_readLE64(input + len - 8);
- XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, PRIME64_1);
- /*
- * Put len in the middle of m128 to ensure that the length gets mixed to
- * both the low and high bits in the 128x64 multiply below.
- */
- m128.low64 += (xxh_u64)(len - 1) << 54;
- input_hi ^= bitfliph;
- /*
- * Add the high 32 bits of input_hi to the high 32 bits of m128, then
- * add the long product of the low 32 bits of input_hi and PRIME32_2 to
- * the high 64 bits of m128.
- *
- * The best approach to this operation is different on 32-bit and 64-bit.
- */
- if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */
- /*
- * 32-bit optimized version, which is more readable.
- *
- * On 32-bit, it removes an ADC and delays a dependency between the two
- * halves of m128.high64, but it generates an extra mask on 64-bit.
- */
- m128.high64 += (input_hi & 0xFFFFFFFF00000000) + XXH_mult32to64((xxh_u32)input_hi, PRIME32_2);
- } else {
- /*
- * 64-bit optimized (albeit more confusing) version.
- *
- * Uses some properties of addition and multiplication to remove the mask:
- *
- * Let:
- * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF)
- * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000)
- * c = PRIME32_2
- *
- * a + (b * c)
- * Inverse Property: x + y - x == y
- * a + (b * (1 + c - 1))
- * Distributive Property: x * (y + z) == (x * y) + (x * z)
- * a + (b * 1) + (b * (c - 1))
- * Identity Property: x * 1 == x
- * a + b + (b * (c - 1))
- *
- * Substitute a, b, and c:
- * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (PRIME32_2 - 1))
- *
- * Since input_hi.hi + input_hi.lo == input_hi, we get this:
- * input_hi + ((xxh_u64)input_hi.lo * (PRIME32_2 - 1))
- */
- m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, PRIME32_2 - 1);
- }
- /* m128 ^= XXH_swap64(m128 >> 64); */
- m128.low64 ^= XXH_swap64(m128.high64);
-
- { /* 128x64 multiply: h128 = m128 * PRIME64_2; */
- XXH128_hash_t h128 = XXH_mult64to128(m128.low64, PRIME64_2);
- h128.high64 += m128.high64 * PRIME64_2;
-
- h128.low64 = XXH3_avalanche(h128.low64);
- h128.high64 = XXH3_avalanche(h128.high64);
- return h128;
- } }
-}
-
-/* Assumption : `secret` size is >= 16
- * Note : it should be >= XXH3_SECRET_SIZE_MIN anyway */
-XXH_FORCE_INLINE XXH128_hash_t
-XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
-{
- XXH_ASSERT(len <= 16);
- { if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed);
- if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed);
- if (len) return XXH3_len_1to3_128b(input, len, secret, seed);
- { XXH128_hash_t h128;
- xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72);
- xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88);
- h128.low64 = XXH3_avalanche((PRIME64_1 + seed) ^ bitflipl);
- h128.high64 = XXH3_avalanche((PRIME64_2 - seed) ^ bitfliph);
- return h128;
- } }
-}
-
-/*
- * A bit slower than XXH3_mix16B, but handles multiply by zero better.
- */
-XXH_FORCE_INLINE XXH128_hash_t
-XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2, const xxh_u8* secret, XXH64_hash_t seed)
-{
- acc.low64 += XXH3_mix16B (input_1, secret+0, seed);
- acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8);
- acc.high64 += XXH3_mix16B (input_2, secret+16, seed);
- acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8);
- return acc;
-}
-
-
-XXH_FORCE_INLINE XXH128_hash_t
-XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
- XXH64_hash_t seed)
-{
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
- XXH_ASSERT(16 < len && len <= 128);
-
- { XXH128_hash_t acc;
- acc.low64 = len * PRIME64_1;
- acc.high64 = 0;
- if (len > 32) {
- if (len > 64) {
- if (len > 96) {
- acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed);
- }
- acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed);
- }
- acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed);
- }
- acc = XXH128_mix32B(acc, input, input+len-16, secret, seed);
- { xxh_u64 const low64 = acc.low64 + acc.high64;
- xxh_u64 const high64 = (acc.low64 * PRIME64_1) + (acc.high64 * PRIME64_4) + ((len - seed) * PRIME64_2);
- XXH128_hash_t const h128 = { XXH3_avalanche(low64), (XXH64_hash_t)0 - XXH3_avalanche(high64) };
- return h128;
- }
- }
-}
-
-XXH_NO_INLINE XXH128_hash_t
-XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
- XXH64_hash_t seed)
-{
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
- XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);
-
- { XXH128_hash_t acc;
- int const nbRounds = (int)len / 32;
- int i;
- acc.low64 = len * PRIME64_1;
- acc.high64 = 0;
- for (i=0; i<4; i++) {
- acc = XXH128_mix32B(acc, input+(32*i), input+(32*i)+16, secret+(32*i), seed);
- }
- acc.low64 = XXH3_avalanche(acc.low64);
- acc.high64 = XXH3_avalanche(acc.high64);
- XXH_ASSERT(nbRounds >= 4);
- for (i=4 ; i < nbRounds; i++) {
- acc = XXH128_mix32B(acc, input+(32*i), input+(32*i)+16, secret+XXH3_MIDSIZE_STARTOFFSET+(32*(i-4)), seed);
- }
- /* last bytes */
- acc = XXH128_mix32B(acc, input + len - 16, input + len - 32, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16, 0ULL - seed);
-
- { xxh_u64 const low64 = acc.low64 + acc.high64;
- xxh_u64 const high64 = (acc.low64 * PRIME64_1) + (acc.high64 * PRIME64_4) + ((len - seed) * PRIME64_2);
- XXH128_hash_t const h128 = { XXH3_avalanche(low64), (XXH64_hash_t)0 - XXH3_avalanche(high64) };
- return h128;
- }
- }
-}
-
-XXH_FORCE_INLINE XXH128_hash_t
-XXH3_hashLong_128b_internal(const xxh_u8* XXH_RESTRICT input, size_t len,
- const xxh_u8* XXH_RESTRICT secret, size_t secretSize)
-{
- XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[ACC_NB] = XXH3_INIT_ACC;
-
- XXH3_hashLong_internal_loop(acc, input, len, secret, secretSize, XXH3_acc_128bits);
-
- /* converge into final hash */
- XXH_STATIC_ASSERT(sizeof(acc) == 64);
- XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
- { xxh_u64 const low64 = XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * PRIME64_1);
- xxh_u64 const high64 = XXH3_mergeAccs(acc, secret + secretSize - sizeof(acc) - XXH_SECRET_MERGEACCS_START, ~((xxh_u64)len * PRIME64_2));
- XXH128_hash_t const h128 = { low64, high64 };
- return h128;
- }
-}
-
-/*
- * It's important for performance that XXH3_hashLong is not inlined. Not sure
- * why (uop cache maybe?), but the difference is large and easily measurable.
- */
-XXH_NO_INLINE XXH128_hash_t
-XXH3_hashLong_128b_defaultSecret(const xxh_u8* input, size_t len)
-{
- return XXH3_hashLong_128b_internal(input, len, kSecret, sizeof(kSecret));
-}
-
-/*
- * It's important for performance that XXH3_hashLong is not inlined. Not sure
- * why (uop cache maybe?), but the difference is large and easily measurable.
- */
-XXH_NO_INLINE XXH128_hash_t
-XXH3_hashLong_128b_withSecret(const xxh_u8* input, size_t len,
- const xxh_u8* secret, size_t secretSize)
-{
- return XXH3_hashLong_128b_internal(input, len, secret, secretSize);
-}
-
-/*
- * It's important for performance that XXH3_hashLong is not inlined. Not sure
- * why (uop cache maybe?), but the difference is large and easily measurable.
- */
-XXH_NO_INLINE XXH128_hash_t
-XXH3_hashLong_128b_withSeed(const xxh_u8* input, size_t len, XXH64_hash_t seed)
-{
- XXH_ALIGN(8) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
- if (seed == 0) return XXH3_hashLong_128b_defaultSecret(input, len);
- XXH3_initCustomSecret(secret, seed);
- return XXH3_hashLong_128b_internal(input, len, secret, sizeof(secret));
-}
-
-
-XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* input, size_t len)
-{
- if (len <= 16) return XXH3_len_0to16_128b((const xxh_u8*)input, len, kSecret, 0);
- if (len <= 128) return XXH3_len_17to128_128b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), 0);
- if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_128b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), 0);
- return XXH3_hashLong_128b_defaultSecret((const xxh_u8*)input, len);
-}
-
-XXH_PUBLIC_API XXH128_hash_t
-XXH3_128bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
-{
- XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
- /*
- * If an action is to be taken if `secret` conditions are not respected,
- * it should be done here.
- * For now, it's a contract pre-condition.
- * Adding a check and a branch here would cost performance at every hash.
- */
- if (len <= 16) return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, 0);
- if (len <= 128) return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, 0);
- if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, 0);
- return XXH3_hashLong_128b_withSecret((const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize);
-}
-
-XXH_PUBLIC_API XXH128_hash_t
-XXH3_128bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
-{
- if (len <= 16) return XXH3_len_0to16_128b((const xxh_u8*)input, len, kSecret, seed);
- if (len <= 128) return XXH3_len_17to128_128b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), seed);
- if (len <= XXH3_MIDSIZE_MAX) return XXH3_len_129to240_128b((const xxh_u8*)input, len, kSecret, sizeof(kSecret), seed);
- return XXH3_hashLong_128b_withSeed((const xxh_u8*)input, len, seed);
-}
-
-XXH_PUBLIC_API XXH128_hash_t
-XXH128(const void* input, size_t len, XXH64_hash_t seed)
-{
- return XXH3_128bits_withSeed(input, len, seed);
-}
-
-
-/* === XXH3 128-bit streaming === */
-
-/* all the functions are actually the same as for 64-bit streaming variant,
- just the reset one is different (different initial acc values for 0,5,6,7),
- and near the end of the digest function */
-
-static void
-XXH3_128bits_reset_internal(XXH3_state_t* statePtr,
- XXH64_hash_t seed,
- const xxh_u8* secret, size_t secretSize)
-{
- XXH3_64bits_reset_internal(statePtr, seed, secret, secretSize);
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_128bits_reset(XXH3_state_t* statePtr)
-{
- if (statePtr == NULL) return XXH_ERROR;
- XXH3_128bits_reset_internal(statePtr, 0, kSecret, XXH_SECRET_DEFAULT_SIZE);
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
-{
- if (statePtr == NULL) return XXH_ERROR;
- XXH3_128bits_reset_internal(statePtr, 0, (const xxh_u8*)secret, secretSize);
- if (secret == NULL) return XXH_ERROR;
- if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
-{
- if (statePtr == NULL) return XXH_ERROR;
- XXH3_128bits_reset_internal(statePtr, seed, kSecret, XXH_SECRET_DEFAULT_SIZE);
- XXH3_initCustomSecret(statePtr->customSecret, seed);
- statePtr->secret = statePtr->customSecret;
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode
-XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len)
-{
- return XXH3_update(state, (const xxh_u8*)input, len, XXH3_acc_128bits);
-}
-
-XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* state)
-{
- if (state->totalLen > XXH3_MIDSIZE_MAX) {
- XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[ACC_NB];
- XXH3_digest_long(acc, state, XXH3_acc_128bits);
- XXH_ASSERT(state->secretLimit + STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
- { xxh_u64 const low64 = XXH3_mergeAccs(acc, state->secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)state->totalLen * PRIME64_1);
- xxh_u64 const high64 = XXH3_mergeAccs(acc, state->secret + state->secretLimit + STRIPE_LEN - sizeof(acc) - XXH_SECRET_MERGEACCS_START, ~((xxh_u64)state->totalLen * PRIME64_2));
- XXH128_hash_t const h128 = { low64, high64 };
- return h128;
- }
- }
- /* len <= XXH3_MIDSIZE_MAX : short code */
- if (state->seed)
- return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
- return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen), state->secret, state->secretLimit + STRIPE_LEN);
-}
-
-/* 128-bit utility functions */
-
-#include <string.h> /* memcmp, memcpy */
-
-/* return : 1 is equal, 0 if different */
-XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2)
-{
- /* note : XXH128_hash_t is compact, it has no padding byte */
- return !(memcmp(&h1, &h2, sizeof(h1)));
-}
-
-/* This prototype is compatible with stdlib's qsort().
- * return : >0 if *h128_1 > *h128_2
- * <0 if *h128_1 < *h128_2
- * =0 if *h128_1 == *h128_2 */
-XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2)
-{
- XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1;
- XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2;
- int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64);
- /* note : bets that, in most cases, hash values are different */
- if (hcmp) return hcmp;
- return (h1.low64 > h2.low64) - (h2.low64 > h1.low64);
-}
-
-
-/*====== Canonical representation ======*/
-XXH_PUBLIC_API void
-XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash)
-{
- XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t));
- if (XXH_CPU_LITTLE_ENDIAN) {
- hash.high64 = XXH_swap64(hash.high64);
- hash.low64 = XXH_swap64(hash.low64);
- }
- memcpy(dst, &hash.high64, sizeof(hash.high64));
- memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64));
-}
-
-XXH_PUBLIC_API XXH128_hash_t
-XXH128_hashFromCanonical(const XXH128_canonical_t* src)
-{
- XXH128_hash_t h;
- h.high64 = XXH_readBE64(src);
- h.low64 = XXH_readBE64(src->digest + 8);
- return h;
-}
-
-/* Pop our optimization override from above */
-#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
- && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
- && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
-# pragma GCC pop_options
-#endif
-
-#endif /* XXH3_H_1397135465 */
+#define XXH_INLINE_ALL
+#include "xxhash.h"
diff --git a/dviware/dvisvgm/libs/xxHash/xxhash.c b/dviware/dvisvgm/libs/xxHash/xxhash.c
index 3e0da98f3e..0fae88c5d6 100644
--- a/dviware/dvisvgm/libs/xxHash/xxhash.c
+++ b/dviware/dvisvgm/libs/xxHash/xxhash.c
@@ -1,6 +1,6 @@
/*
* xxHash - Extremely Fast Hash algorithm
- * Copyright (C) 2012-present, Yann Collet
+ * Copyright (C) 2012-2020 Yann Collet
*
* BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)
*
diff --git a/dviware/dvisvgm/libs/xxHash/xxhash.h b/dviware/dvisvgm/libs/xxHash/xxhash.h
index 3677f8287b..2d56d23c5d 100644
--- a/dviware/dvisvgm/libs/xxHash/xxhash.h
+++ b/dviware/dvisvgm/libs/xxHash/xxhash.h
@@ -1,7 +1,7 @@
/*
* xxHash - Extremely Fast Hash algorithm
* Header File
- * Copyright (C) 2012-present, Yann Collet.
+ * Copyright (C) 2012-2020 Yann Collet
*
* BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)
*
@@ -195,6 +195,7 @@ extern "C" {
# define XXH_CAT(A,B) A##B
# define XXH_NAME2(A,B) XXH_CAT(A,B)
# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)
+/* XXH32 */
# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)
# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)
# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)
@@ -204,6 +205,7 @@ extern "C" {
# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)
# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)
# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)
+/* XXH64 */
# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)
# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)
# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)
@@ -213,6 +215,33 @@ extern "C" {
# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)
# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)
# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)
+/* XXH3_64bits */
+# define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits)
+# define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret)
+# define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed)
+# define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState)
+# define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState)
+# define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState)
+# define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset)
+# define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed)
+# define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret)
+# define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update)
+# define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest)
+# define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret)
+/* XXH3_128bits */
+# define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128)
+# define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits)
+# define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed)
+# define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret)
+# define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset)
+# define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed)
+# define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret)
+# define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update)
+# define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest)
+# define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual)
+# define XXH128_cmp XXH_NAME2(XXH_NAMESPACE, XXH128_cmp)
+# define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash)
+# define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical)
#endif
@@ -220,8 +249,8 @@ extern "C" {
* Version
***************************************/
#define XXH_VERSION_MAJOR 0
-#define XXH_VERSION_MINOR 7
-#define XXH_VERSION_RELEASE 3
+#define XXH_VERSION_MINOR 8
+#define XXH_VERSION_RELEASE 0
#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE)
XXH_PUBLIC_API unsigned XXH_versionNumber (void);
@@ -260,6 +289,10 @@ typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
* The memory between input & input+length must be valid (allocated and read-accessible).
* "seed" can be used to alter the result predictably.
* Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark): 5.4 GB/s
+ *
+ * Note: XXH3 provides competitive speed for both 32-bit and 64-bit systems,
+ * and offers true 64/128 bit hash results. It provides a superior level of
+ * dispersion, and greatly reduces the risks of collisions.
*/
XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed);
@@ -342,8 +375,13 @@ XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src
* Returns the 64-bit hash of sequence of length @length stored at memory
* address @input.
* @seed can be used to alter the result predictably.
+ *
* This function usually runs faster on 64-bit systems, but slower on 32-bit
* systems (see benchmark).
+ *
+ * Note: XXH3 provides competitive speed for both 32-bit and 64-bit systems,
+ * and offers true 64/128 bit hash results. It provides a superior level of
+ * dispersion, and greatly reduces the risks of collisions.
*/
XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, XXH64_hash_t seed);
@@ -358,64 +396,13 @@ XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void*
XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr);
/******* Canonical representation *******/
-typedef struct { unsigned char digest[8]; } XXH64_canonical_t;
+typedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t;
XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash);
XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src);
-#endif /* XXH_NO_LONG_LONG */
-
-#endif /* XXHASH_H_5627135585666179 */
-
-#define XXH_STATIC_LINKING_ONLY
-
-#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742)
-#define XXHASH_H_STATIC_13879238742
-/* ****************************************************************************
- * This section contains declarations which are not guaranteed to remain stable.
- * They may change in future versions, becoming incompatible with a different
- * version of the library.
- * These declarations should only be used with static linking.
- * Never use them in association with dynamic linking!
- ***************************************************************************** */
-
-/*
- * These definitions are only present to allow static allocation of an XXH
- * state, for example, on the stack or in a struct.
- * Never **ever** access members directly.
- */
-
-struct XXH32_state_s {
- XXH32_hash_t total_len_32;
- XXH32_hash_t large_len;
- XXH32_hash_t v1;
- XXH32_hash_t v2;
- XXH32_hash_t v3;
- XXH32_hash_t v4;
- XXH32_hash_t mem32[4];
- XXH32_hash_t memsize;
- XXH32_hash_t reserved; /* never read nor write, might be removed in a future version */
-}; /* typedef'd to XXH32_state_t */
-
-
-#ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */
-
-struct XXH64_state_s {
- XXH64_hash_t total_len;
- XXH64_hash_t v1;
- XXH64_hash_t v2;
- XXH64_hash_t v3;
- XXH64_hash_t v4;
- XXH64_hash_t mem64[4];
- XXH32_hash_t memsize;
- XXH32_hash_t reserved32; /* required for padding anyway */
- XXH64_hash_t reserved64; /* never read nor write, might be removed in a future version */
-}; /* typedef'd to XXH64_state_t */
-
-
/*-**********************************************************************
-* XXH3
-* New experimental hash
+* XXH3 64-bit variant
************************************************************************/
/* ************************************************************************
@@ -439,11 +426,11 @@ struct XXH64_state_s {
* It benefits greatly from SIMD and 64-bit arithmetic, but does not require it.
*
* Almost all 32-bit and 64-bit targets that can run XXH32 smoothly can run
- * XXH3 at usable speeds, even if XXH64 runs slowly. Further details are
+ * XXH3 at competitive speeds, even if XXH64 runs slowly. Further details are
* explained in the implementation.
*
- * Optimized implementations are provided for AVX2, SSE2, NEON, POWER8, ZVector,
- * and scalar targets. This can be controlled with the XXH_VECTOR macro.
+ * Optimized implementations are provided for AVX512, AVX2, SSE2, NEON, POWER8,
+ * ZVector and scalar targets. This can be controlled with the XXH_VECTOR macro.
*
* XXH3 offers 2 variants, _64bits and _128bits.
* When only 64 bits are needed, prefer calling the _64bits variant, as it
@@ -461,116 +448,61 @@ struct XXH64_state_s {
* ephemeral data (local sessions).
*
* Avoid storing values in long-term storage until the algorithm is finalized.
+ * XXH3's return values will be officially finalized upon reaching v0.8.0.
+ *
+ * After which, return values of XXH3 and XXH128 will no longer change in
+ * future versions.
*
* The API supports one-shot hashing, streaming mode, and custom secrets.
*/
-#ifdef XXH_NAMESPACE
-# define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits)
-# define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret)
-# define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed)
-
-# define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState)
-# define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState)
-# define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState)
-
-# define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset)
-# define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed)
-# define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret)
-# define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update)
-# define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest)
-#endif
-
/* XXH3_64bits():
* default 64-bit variant, using default secret and default seed of 0.
* It's the fastest variant. */
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* data, size_t len);
/*
- * XXH3_64bits_withSecret():
- * It's possible to provide any blob of bytes as a "secret" to generate the hash.
- * This makes it more difficult for an external actor to prepare an intentional
- * collision.
- * The secret *must* be large enough (>= XXH3_SECRET_SIZE_MIN).
- * It should consist of random bytes.
- * Avoid trivial sequences, such as repeating sequences and especially '\0',
- * as this can cancel out itself.
- * Failure to respect these conditions will result in a poor quality hash.
- */
-#define XXH3_SECRET_SIZE_MIN 136
-XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);
-
-/*
* XXH3_64bits_withSeed():
- * This variant generates a custom secret on the fly based on the default
- * secret, altered using the `seed` value.
+ * This variant generates a custom secret on the fly
+ * based on default secret altered using the `seed` value.
* While this operation is decently fast, note that it's not completely free.
* Note: seed==0 produces the same results as XXH3_64bits().
*/
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* data, size_t len, XXH64_hash_t seed);
+/*
+ * XXH3_64bits_withSecret():
+ * It's possible to provide any blob of bytes as a "secret" to generate the hash.
+ * This makes it more difficult for an external actor to prepare an intentional collision.
+ * The main condition is that secretSize *must* be large enough (>= XXH3_SECRET_SIZE_MIN).
+ * However, the quality of produced hash values depends on secret's entropy.
+ * Technically, the secret must look like a bunch of random bytes.
+ * Avoid "trivial" or structured data such as repeated sequences or a text document.
+ * Whenever unsure about the "randomness" of the blob of bytes,
+ * consider relabelling it as a "custom seed" instead,
+ * and employ "XXH3_generateSecret()" (see below)
+ * to generate a high entropy secret derived from the custom seed.
+ */
+#define XXH3_SECRET_SIZE_MIN 136
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);
-/* streaming 64-bit */
-
-#if defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11+ */
-# include <stdalign.h>
-# define XXH_ALIGN(n) alignas(n)
-#elif defined(__GNUC__)
-# define XXH_ALIGN(n) __attribute__ ((aligned(n)))
-#elif defined(_MSC_VER)
-# define XXH_ALIGN(n) __declspec(align(n))
-#else
-# define XXH_ALIGN(n) /* disabled */
-#endif
-
-/* Old GCC versions only accept the attribute after the type in structures. */
-#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) /* C11+ */ \
- && defined(__GNUC__)
-# define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align)
-#else
-# define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type
-#endif
-
-typedef struct XXH3_state_s XXH3_state_t;
-
-#define XXH3_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */
-#define XXH3_INTERNALBUFFER_SIZE 256
-struct XXH3_state_s {
- XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]);
- /* used to store a custom secret generated from the seed. Makes state larger.
- * Design might change */
- XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]);
- XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]);
- XXH32_hash_t bufferedSize;
- XXH32_hash_t nbStripesPerBlock;
- XXH32_hash_t nbStripesSoFar;
- XXH32_hash_t secretLimit;
- XXH32_hash_t reserved32;
- XXH32_hash_t reserved32_2;
- XXH64_hash_t totalLen;
- XXH64_hash_t seed;
- XXH64_hash_t reserved64;
- /* note: there is some padding after due to alignment on 64 bytes */
- const unsigned char* secret;
-}; /* typedef'd to XXH3_state_t */
-
-#undef XXH_ALIGN_MEMBER
+/******* Streaming *******/
/*
* Streaming requires state maintenance.
* This operation costs memory and CPU.
* As a consequence, streaming is slower than one-shot hashing.
- * For better performance, prefer one-shot functions whenever possible.
+ * For better performance, prefer one-shot functions whenever applicable.
*/
+typedef struct XXH3_state_s XXH3_state_t;
XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void);
XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr);
XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state);
-
/*
* XXH3_64bits_reset():
- * Initialize with the default parameters.
- * The result will be equivalent to `XXH3_64bits()`.
+ * Initialize with default parameters.
+ * digest will be equivalent to `XXH3_64bits()`.
*/
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr);
/*
@@ -581,46 +513,48 @@ XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr);
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed);
/*
* XXH3_64bits_reset_withSecret():
- * `secret` is referenced, and must outlive the hash streaming session, so
- * be careful when using stack arrays.
- * `secretSize` must be >= `XXH3_SECRET_SIZE_MIN`.
+ * `secret` is referenced, it _must outlive_ the hash streaming session.
+ * Similar to one-shot API, `secretSize` must be >= `XXH3_SECRET_SIZE_MIN`,
+ * and the quality of produced hash values depends on secret's entropy
+ * (secret's content should look like a bunch of random bytes).
+ * When in doubt about the randomness of a candidate `secret`,
+ * consider employing `XXH3_generateSecret()` instead (see below).
*/
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize);
XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* statePtr);
+/* note : canonical representation of XXH3 is the same as XXH64
+ * since they both produce XXH64_hash_t values */
-/* 128-bit */
-
-#ifdef XXH_NAMESPACE
-# define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128)
-# define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits)
-# define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed)
-# define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret)
-# define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset)
-# define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed)
-# define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret)
-# define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update)
-# define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest)
-
-# define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual)
-# define XXH128_cmp XXH_NAME2(XXH_NAMESPACE, XXH128_cmp)
-# define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash)
-# define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical)
-#endif
+/*-**********************************************************************
+* XXH3 128-bit variant
+************************************************************************/
typedef struct {
- XXH64_hash_t low64;
- XXH64_hash_t high64;
+ XXH64_hash_t low64;
+ XXH64_hash_t high64;
} XXH128_hash_t;
-XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, XXH64_hash_t seed);
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* data, size_t len);
-XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, XXH64_hash_t seed); /* == XXH128() */
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, XXH64_hash_t seed);
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);
+/******* Streaming *******/
+/*
+ * Streaming requires state maintenance.
+ * This operation costs memory and CPU.
+ * As a consequence, streaming is slower than one-shot hashing.
+ * For better performance, prefer one-shot functions whenever applicable.
+ *
+ * XXH3_128bits uses the same XXH3_state_t as XXH3_64bits().
+ * Use already declared XXH3_createState() and XXH3_freeState().
+ *
+ * All reset and streaming functions have same meaning as their 64-bit counterpart.
+ */
+
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr);
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed);
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize);
@@ -628,8 +562,9 @@ XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePt
XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* statePtr);
-
-/* Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */
+/* Following helper functions make it possible to compare XXH128_hast_t values.
+ * Since XXH128_hash_t is a structure, this capability is not offered by the language.
+ * Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */
/*!
* XXH128_isEqual():
@@ -643,20 +578,161 @@ XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2);
* This comparator is compatible with stdlib's `qsort()`/`bsearch()`.
*
* return: >0 if *h128_1 > *h128_2
- * <0 if *h128_1 < *h128_2
* =0 if *h128_1 == *h128_2
+ * <0 if *h128_1 < *h128_2
*/
XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2);
/******* Canonical representation *******/
-typedef struct { unsigned char digest[16]; } XXH128_canonical_t;
+typedef struct { unsigned char digest[sizeof(XXH128_hash_t)]; } XXH128_canonical_t;
XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash);
XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src);
#endif /* XXH_NO_LONG_LONG */
+#endif /* XXHASH_H_5627135585666179 */
+
+
+
+#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742)
+#define XXHASH_H_STATIC_13879238742
+/* ****************************************************************************
+ * This section contains declarations which are not guaranteed to remain stable.
+ * They may change in future versions, becoming incompatible with a different
+ * version of the library.
+ * These declarations should only be used with static linking.
+ * Never use them in association with dynamic linking!
+ ***************************************************************************** */
+
+/*
+ * These definitions are only present to allow static allocation
+ * of XXH states, on stack or in a struct, for example.
+ * Never **ever** access their members directly.
+ */
+
+struct XXH32_state_s {
+ XXH32_hash_t total_len_32;
+ XXH32_hash_t large_len;
+ XXH32_hash_t v1;
+ XXH32_hash_t v2;
+ XXH32_hash_t v3;
+ XXH32_hash_t v4;
+ XXH32_hash_t mem32[4];
+ XXH32_hash_t memsize;
+ XXH32_hash_t reserved; /* never read nor write, might be removed in a future version */
+}; /* typedef'd to XXH32_state_t */
+
+
+#ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */
+
+struct XXH64_state_s {
+ XXH64_hash_t total_len;
+ XXH64_hash_t v1;
+ XXH64_hash_t v2;
+ XXH64_hash_t v3;
+ XXH64_hash_t v4;
+ XXH64_hash_t mem64[4];
+ XXH32_hash_t memsize;
+ XXH32_hash_t reserved32; /* required for padding anyway */
+ XXH64_hash_t reserved64; /* never read nor write, might be removed in a future version */
+}; /* typedef'd to XXH64_state_t */
+
+#if defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11+ */
+# include <stdalign.h>
+# define XXH_ALIGN(n) alignas(n)
+#elif defined(__GNUC__)
+# define XXH_ALIGN(n) __attribute__ ((aligned(n)))
+#elif defined(_MSC_VER)
+# define XXH_ALIGN(n) __declspec(align(n))
+#else
+# define XXH_ALIGN(n) /* disabled */
+#endif
+
+/* Old GCC versions only accept the attribute after the type in structures. */
+#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) /* C11+ */ \
+ && defined(__GNUC__)
+# define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align)
+#else
+# define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type
+#endif
+
+#define XXH3_INTERNALBUFFER_SIZE 256
+#define XXH3_SECRET_DEFAULT_SIZE 192
+struct XXH3_state_s {
+ XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]);
+ /* used to store a custom secret generated from a seed */
+ XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]);
+ XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]);
+ XXH32_hash_t bufferedSize;
+ XXH32_hash_t reserved32;
+ size_t nbStripesSoFar;
+ XXH64_hash_t totalLen;
+ size_t nbStripesPerBlock;
+ size_t secretLimit;
+ XXH64_hash_t seed;
+ XXH64_hash_t reserved64;
+ const unsigned char* extSecret; /* reference to external secret;
+ * if == NULL, use .customSecret instead */
+ /* note: there may be some padding at the end due to alignment on 64 bytes */
+}; /* typedef'd to XXH3_state_t */
+
+#undef XXH_ALIGN_MEMBER
+
+/* When the XXH3_state_t structure is merely emplaced on stack,
+ * it should be initialized with XXH3_INITSTATE() or a memset()
+ * in case its first reset uses XXH3_NNbits_reset_withSeed().
+ * This init can be omitted if the first reset uses default or _withSecret mode.
+ * This operation isn't necessary when the state is created with XXH3_createState().
+ * Note that this doesn't prepare the state for a streaming operation,
+ * it's still necessary to use XXH3_NNbits_reset*() afterwards.
+ */
+#define XXH3_INITSTATE(XXH3_state_ptr) { (XXH3_state_ptr)->seed = 0; }
+
+
+/* === Experimental API === */
+/* Symbols defined below must be considered tied to a specific library version. */
+
+/*
+ * XXH3_generateSecret():
+ *
+ * Derive a high-entropy secret from any user-defined content, named customSeed.
+ * The generated secret can be used in combination with `*_withSecret()` functions.
+ * The `_withSecret()` variants are useful to provide a higher level of protection than 64-bit seed,
+ * as it becomes much more difficult for an external actor to guess how to impact the calculation logic.
+ *
+ * The function accepts as input a custom seed of any length and any content,
+ * and derives from it a high-entropy secret of length XXH3_SECRET_DEFAULT_SIZE
+ * into an already allocated buffer secretBuffer.
+ * The generated secret is _always_ XXH_SECRET_DEFAULT_SIZE bytes long.
+ *
+ * The generated secret can then be used with any `*_withSecret()` variant.
+ * Functions `XXH3_128bits_withSecret()`, `XXH3_64bits_withSecret()`,
+ * `XXH3_128bits_reset_withSecret()` and `XXH3_64bits_reset_withSecret()`
+ * are part of this list. They all accept a `secret` parameter
+ * which must be very long for implementation reasons (>= XXH3_SECRET_SIZE_MIN)
+ * _and_ feature very high entropy (consist of random-looking bytes).
+ * These conditions can be a high bar to meet, so
+ * this function can be used to generate a secret of proper quality.
+ *
+ * customSeed can be anything. It can have any size, even small ones,
+ * and its content can be anything, even stupidly "low entropy" source such as a bunch of zeroes.
+ * The resulting `secret` will nonetheless provide all expected qualities.
+ *
+ * Supplying NULL as the customSeed copies the default secret into `secretBuffer`.
+ * When customSeedSize > 0, supplying NULL as customSeed is undefined behavior.
+ */
+XXH_PUBLIC_API void XXH3_generateSecret(void* secretBuffer, const void* customSeed, size_t customSeedSize);
+
+
+/* simple short-cut to pre-selected XXH3_128bits variant */
+XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, XXH64_hash_t seed);
+
+
+#endif /* XXH_NO_LONG_LONG */
+
+
#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)
# define XXH_IMPLEMENTATION
#endif
@@ -672,17 +748,23 @@ XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t*
/*-**********************************************************************
* xxHash implementation
*-**********************************************************************
- * xxHash's implementation used to be found in xxhash.c.
+ * xxHash's implementation used to be hosted inside xxhash.c.
*
- * However, code inlining requires the implementation to be visible to the
- * compiler, usually within the header.
+ * However, inlining requires implementation to be visible to the compiler,
+ * hence be included alongside the header.
+ * Previously, implementation was hosted inside xxhash.c,
+ * which was then #included when inlining was activated.
+ * This construction created issues with a few build and install systems,
+ * as it required xxhash.c to be stored in /include directory.
*
- * As a workaround, xxhash.c used to be included within xxhash.h. This caused
- * some issues with some build systems, especially ones which treat .c files
- * as source files.
+ * xxHash implementation is now directly integrated within xxhash.h.
+ * As a consequence, xxhash.c is no longer needed in /include.
*
- * Therefore, the implementation is now directly integrated within xxhash.h.
- * Another small advantage is that xxhash.c is no longer needed in /include.
+ * xxhash.c is still available and is still useful.
+ * In a "normal" setup, when xxhash is not inlined,
+ * xxhash.h only exposes the prototypes and public symbols,
+ * while xxhash.c can be built into an object file xxhash.o
+ * which can then be linked into the final binary.
************************************************************************/
#if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \
@@ -700,10 +782,10 @@ XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t*
* Unfortunately, on some target/compiler combinations, the generated assembly
* is sub-optimal.
*
- * The below switch allow to select a different access method for improved
- * performance.
+ * The below switch allow selection of a different access method
+ * in the search for improved performance.
* Method 0 (default):
- * Use `memcpy()`. Safe and portable.
+ * Use `memcpy()`. Safe and portable. Default.
* Method 1:
* `__attribute__((packed))` statement. It depends on compiler extensions
* and is therefore not portable.
@@ -715,7 +797,7 @@ XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t*
* It can generate buggy code on targets which do not support unaligned
* memory accesses.
* But in some circumstances, it's the only known way to get the most
- * performance (ie GCC + ARMv6)
+ * performance (example: GCC + ARMv6)
* Method 3:
* Byteshift. This can generate the best code on old compilers which don't
* inline small `memcpy()` calls, and it might also be faster on big-endian
@@ -733,7 +815,7 @@ XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t*
#endif
/*!
- *XXH_ACCEPT_NULL_INPUT_POINTER:
+ * XXH_ACCEPT_NULL_INPUT_POINTER:
* If the input pointer is NULL, xxHash's default behavior is to dereference it,
* triggering a segfault.
* When this macro is enabled, xxHash actively checks the input for a null pointer.
@@ -745,16 +827,26 @@ XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t*
/*!
* XXH_FORCE_ALIGN_CHECK:
- * This is a minor performance trick, only useful with lots of very small keys.
- * It means: check for aligned/unaligned input.
- * The check costs one initial branch per hash;
- * Set it to 0 when the input is guaranteed to be aligned or when alignment
- * doesn't matter for performance.
+ * This is an important performance trick
+ * for architectures without decent unaligned memory access performance.
+ * It checks for input alignment, and when conditions are met,
+ * uses a "fast path" employing direct 32-bit/64-bit read,
+ * resulting in _dramatically faster_ read speed.
*
- * This option does not affect XXH3.
+ * The check costs one initial branch per hash, which is generally negligible, but not zero.
+ * Moreover, it's not useful to generate binary for an additional code path
+ * if memory access uses same instruction for both aligned and unaligned adresses.
+ *
+ * In these cases, the alignment check can be removed by setting this macro to 0.
+ * Then the code will always use unaligned memory access.
+ * Align check is automatically disabled on x86, x64 & arm64,
+ * which are platforms known to offer good unaligned memory accesses performance.
+ *
+ * This option does not affect XXH3 (only XXH32 and XXH64).
*/
-#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */
-# if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
+#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */
+# if defined(__i386) || defined(__x86_64__) || defined(__aarch64__) \
+ || defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) /* visual */
# define XXH_FORCE_ALIGN_CHECK 0
# else
# define XXH_FORCE_ALIGN_CHECK 1
@@ -809,12 +901,14 @@ XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t*
* Includes & Memory related functions
***************************************/
/*!
- * Modify the local functions below should you wish to use some other memory
- * routines for malloc() and free()
+ * Modify the local functions below should you wish to use
+ * different memory routines for malloc() and free()
*/
#include <stdlib.h>
+
static void* XXH_malloc(size_t s) { return malloc(s); }
-static void XXH_free (void* p) { free(p); }
+static void XXH_free(void* p) { free(p); }
+
/*! and for memcpy() */
#include <string.h>
static void* XXH_memcpy(void* dest, const void* src, size_t size)
@@ -832,26 +926,27 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size)
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
#endif
-#if XXH_NO_INLINE_HINTS /* disable inlining hints */
-# define XXH_FORCE_INLINE static
+#if XXH_NO_INLINE_HINTS /* disable inlining hints */
+# if defined(__GNUC__)
+# define XXH_FORCE_INLINE static __attribute__((unused))
+# else
+# define XXH_FORCE_INLINE static
+# endif
# define XXH_NO_INLINE static
-#elif defined(_MSC_VER) /* Visual Studio */
+/* enable inlining hints */
+#elif defined(_MSC_VER) /* Visual Studio */
# define XXH_FORCE_INLINE static __forceinline
# define XXH_NO_INLINE static __declspec(noinline)
+#elif defined(__GNUC__)
+# define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused))
+# define XXH_NO_INLINE static __attribute__((noinline))
+#elif defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* C99 */
+# define XXH_FORCE_INLINE static inline
+# define XXH_NO_INLINE static
#else
-# if defined (__cplusplus) \
- || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
-# ifdef __GNUC__
-# define XXH_FORCE_INLINE static inline __attribute__((always_inline))
-# define XXH_NO_INLINE static __attribute__((noinline))
-# else
-# define XXH_FORCE_INLINE static inline
-# define XXH_NO_INLINE static
-# endif
-# else
-# define XXH_FORCE_INLINE static
-# define XXH_NO_INLINE static
-# endif /* __STDC_VERSION__ */
+# define XXH_FORCE_INLINE static
+# define XXH_NO_INLINE static
#endif
@@ -860,14 +955,18 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size)
* Debug
***************************************/
/*
- * DEBUGLEVEL is expected to be defined externally, typically via the compiler's
- * command line options. The value must be a number.
+ * XXH_DEBUGLEVEL is expected to be defined externally, typically via the
+ * compiler's command line options. The value must be a number.
*/
-#ifndef DEBUGLEVEL
-# define DEBUGLEVEL 0
+#ifndef XXH_DEBUGLEVEL
+# ifdef DEBUGLEVEL /* backwards compat */
+# define XXH_DEBUGLEVEL DEBUGLEVEL
+# else
+# define XXH_DEBUGLEVEL 0
+# endif
#endif
-#if (DEBUGLEVEL>=1)
+#if (XXH_DEBUGLEVEL>=1)
# include <assert.h> /* note: can still be disabled with NDEBUG */
# define XXH_ASSERT(c) assert(c)
#else
@@ -875,7 +974,7 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size)
#endif
/* note: use after variable declarations */
-#define XXH_STATIC_ASSERT(c) { enum { XXH_sa = 1/(int)(!!(c)) }; }
+#define XXH_STATIC_ASSERT(c) do { enum { XXH_sa = 1/(int)(!!(c)) }; } while (0)
/* *************************************
@@ -885,12 +984,17 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size)
&& (defined (__cplusplus) \
|| (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
# include <stdint.h>
- typedef uint8_t xxh_u8;
+ typedef uint8_t xxh_u8;
#else
- typedef unsigned char xxh_u8;
+ typedef unsigned char xxh_u8;
#endif
typedef XXH32_hash_t xxh_u32;
+#ifdef XXH_OLD_NAMES
+# define BYTE xxh_u8
+# define U8 xxh_u8
+# define U32 xxh_u32
+#endif
/* *** Memory access *** */
@@ -915,8 +1019,14 @@ static xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr;
*
* Currently only defined for GCC and ICC.
*/
+#ifdef XXH_OLD_NAMES
typedef union { xxh_u32 u32; } __attribute__((packed)) unalign;
-static xxh_u32 XXH_read32(const void* ptr) { return ((const unalign*)ptr)->u32; }
+#endif
+static xxh_u32 XXH_read32(const void* ptr)
+{
+ typedef union { xxh_u32 u32; } __attribute__((packed)) xxh_unalign;
+ return ((const xxh_unalign*)ptr)->u32;
+}
#else
@@ -958,10 +1068,13 @@ typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
|| (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
# define XXH_CPU_LITTLE_ENDIAN 0
# else
+/*
+ * runtime test, presumed to simplify to a constant by compiler
+ */
static int XXH_isLittleEndian(void)
{
/*
- * Nonstandard, but well-defined behavior in practice.
+ * Portable and well-defined behavior.
* Don't use static: it is detrimental to performance.
*/
const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 };
@@ -979,12 +1092,14 @@ static int XXH_isLittleEndian(void)
******************************************/
#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
-#ifndef __has_builtin
-# define __has_builtin(x) 0
+#ifdef __has_builtin
+# define XXH_HAS_BUILTIN(x) __has_builtin(x)
+#else
+# define XXH_HAS_BUILTIN(x) 0
#endif
-#if !defined(NO_CLANG_BUILTIN) && __has_builtin(__builtin_rotateleft32) \
- && __has_builtin(__builtin_rotateleft64)
+#if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) \
+ && XXH_HAS_BUILTIN(__builtin_rotateleft64)
# define XXH_rotl32 __builtin_rotateleft32
# define XXH_rotl64 __builtin_rotateleft64
/* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */
@@ -1073,17 +1188,25 @@ XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; }
/* *******************************************************************
* 32-bit hash functions
*********************************************************************/
-static const xxh_u32 PRIME32_1 = 0x9E3779B1U; /* 0b10011110001101110111100110110001 */
-static const xxh_u32 PRIME32_2 = 0x85EBCA77U; /* 0b10000101111010111100101001110111 */
-static const xxh_u32 PRIME32_3 = 0xC2B2AE3DU; /* 0b11000010101100101010111000111101 */
-static const xxh_u32 PRIME32_4 = 0x27D4EB2FU; /* 0b00100111110101001110101100101111 */
-static const xxh_u32 PRIME32_5 = 0x165667B1U; /* 0b00010110010101100110011110110001 */
+static const xxh_u32 XXH_PRIME32_1 = 0x9E3779B1U; /* 0b10011110001101110111100110110001 */
+static const xxh_u32 XXH_PRIME32_2 = 0x85EBCA77U; /* 0b10000101111010111100101001110111 */
+static const xxh_u32 XXH_PRIME32_3 = 0xC2B2AE3DU; /* 0b11000010101100101010111000111101 */
+static const xxh_u32 XXH_PRIME32_4 = 0x27D4EB2FU; /* 0b00100111110101001110101100101111 */
+static const xxh_u32 XXH_PRIME32_5 = 0x165667B1U; /* 0b00010110010101100110011110110001 */
+
+#ifdef XXH_OLD_NAMES
+# define PRIME32_1 XXH_PRIME32_1
+# define PRIME32_2 XXH_PRIME32_2
+# define PRIME32_3 XXH_PRIME32_3
+# define PRIME32_4 XXH_PRIME32_4
+# define PRIME32_5 XXH_PRIME32_5
+#endif
static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input)
{
- acc += input * PRIME32_2;
+ acc += input * XXH_PRIME32_2;
acc = XXH_rotl32(acc, 13);
- acc *= PRIME32_1;
+ acc *= XXH_PRIME32_1;
#if defined(__GNUC__) && defined(__SSE4_1__) && !defined(XXH_ENABLE_AUTOVECTORIZE)
/*
* UGLY HACK:
@@ -1139,9 +1262,9 @@ static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input)
static xxh_u32 XXH32_avalanche(xxh_u32 h32)
{
h32 ^= h32 >> 15;
- h32 *= PRIME32_2;
+ h32 *= XXH_PRIME32_2;
h32 ^= h32 >> 13;
- h32 *= PRIME32_3;
+ h32 *= XXH_PRIME32_3;
h32 ^= h32 >> 16;
return(h32);
}
@@ -1151,64 +1274,66 @@ static xxh_u32 XXH32_avalanche(xxh_u32 h32)
static xxh_u32
XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align)
{
-#define PROCESS1 \
- h32 += (*ptr++) * PRIME32_5; \
- h32 = XXH_rotl32(h32, 11) * PRIME32_1 ;
+#define XXH_PROCESS1 do { \
+ h32 += (*ptr++) * XXH_PRIME32_5; \
+ h32 = XXH_rotl32(h32, 11) * XXH_PRIME32_1; \
+} while (0)
-#define PROCESS4 \
- h32 += XXH_get32bits(ptr) * PRIME32_3; \
- ptr+=4; \
- h32 = XXH_rotl32(h32, 17) * PRIME32_4 ;
+#define XXH_PROCESS4 do { \
+ h32 += XXH_get32bits(ptr) * XXH_PRIME32_3; \
+ ptr += 4; \
+ h32 = XXH_rotl32(h32, 17) * XXH_PRIME32_4; \
+} while (0)
/* Compact rerolled version */
if (XXH_REROLL) {
len &= 15;
while (len >= 4) {
- PROCESS4;
+ XXH_PROCESS4;
len -= 4;
}
while (len > 0) {
- PROCESS1;
+ XXH_PROCESS1;
--len;
}
return XXH32_avalanche(h32);
} else {
switch(len&15) /* or switch(bEnd - p) */ {
- case 12: PROCESS4;
+ case 12: XXH_PROCESS4;
/* fallthrough */
- case 8: PROCESS4;
+ case 8: XXH_PROCESS4;
/* fallthrough */
- case 4: PROCESS4;
+ case 4: XXH_PROCESS4;
return XXH32_avalanche(h32);
- case 13: PROCESS4;
+ case 13: XXH_PROCESS4;
/* fallthrough */
- case 9: PROCESS4;
+ case 9: XXH_PROCESS4;
/* fallthrough */
- case 5: PROCESS4;
- PROCESS1;
+ case 5: XXH_PROCESS4;
+ XXH_PROCESS1;
return XXH32_avalanche(h32);
- case 14: PROCESS4;
+ case 14: XXH_PROCESS4;
/* fallthrough */
- case 10: PROCESS4;
+ case 10: XXH_PROCESS4;
/* fallthrough */
- case 6: PROCESS4;
- PROCESS1;
- PROCESS1;
+ case 6: XXH_PROCESS4;
+ XXH_PROCESS1;
+ XXH_PROCESS1;
return XXH32_avalanche(h32);
- case 15: PROCESS4;
+ case 15: XXH_PROCESS4;
/* fallthrough */
- case 11: PROCESS4;
+ case 11: XXH_PROCESS4;
/* fallthrough */
- case 7: PROCESS4;
+ case 7: XXH_PROCESS4;
/* fallthrough */
- case 3: PROCESS1;
+ case 3: XXH_PROCESS1;
/* fallthrough */
- case 2: PROCESS1;
+ case 2: XXH_PROCESS1;
/* fallthrough */
- case 1: PROCESS1;
+ case 1: XXH_PROCESS1;
/* fallthrough */
case 0: return XXH32_avalanche(h32);
}
@@ -1217,6 +1342,14 @@ XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align)
}
}
+#ifdef XXH_OLD_NAMES
+# define PROCESS1 XXH_PROCESS1
+# define PROCESS4 XXH_PROCESS4
+#else
+# undef XXH_PROCESS1
+# undef XXH_PROCESS4
+#endif
+
XXH_FORCE_INLINE xxh_u32
XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align)
{
@@ -1232,10 +1365,10 @@ XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment
if (len>=16) {
const xxh_u8* const limit = bEnd - 15;
- xxh_u32 v1 = seed + PRIME32_1 + PRIME32_2;
- xxh_u32 v2 = seed + PRIME32_2;
+ xxh_u32 v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2;
+ xxh_u32 v2 = seed + XXH_PRIME32_2;
xxh_u32 v3 = seed + 0;
- xxh_u32 v4 = seed - PRIME32_1;
+ xxh_u32 v4 = seed - XXH_PRIME32_1;
do {
v1 = XXH32_round(v1, XXH_get32bits(input)); input += 4;
@@ -1247,7 +1380,7 @@ XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment
h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7)
+ XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18);
} else {
- h32 = seed + PRIME32_5;
+ h32 = seed + XXH_PRIME32_5;
}
h32 += (xxh_u32)len;
@@ -1299,10 +1432,10 @@ XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t s
{
XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
memset(&state, 0, sizeof(state));
- state.v1 = seed + PRIME32_1 + PRIME32_2;
- state.v2 = seed + PRIME32_2;
+ state.v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2;
+ state.v2 = seed + XXH_PRIME32_2;
state.v3 = seed + 0;
- state.v4 = seed - PRIME32_1;
+ state.v4 = seed - XXH_PRIME32_1;
/* do not write into reserved, planned to be removed in a future version */
memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved));
return XXH_OK;
@@ -1383,7 +1516,7 @@ XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* state)
+ XXH_rotl32(state->v3, 12)
+ XXH_rotl32(state->v4, 18);
} else {
- h32 = state->v3 /* == seed */ + PRIME32_5;
+ h32 = state->v3 /* == seed */ + XXH_PRIME32_5;
}
h32 += state->total_len_32;
@@ -1430,6 +1563,9 @@ XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src
typedef XXH64_hash_t xxh_u64;
+#ifdef XXH_OLD_NAMES
+# define U64 xxh_u64
+#endif
/*!
* XXH_REROLL_XXH64:
@@ -1478,8 +1614,14 @@ static xxh_u64 XXH_read64(const void* memPtr) { return *(const xxh_u64*) memPtr;
*
* Currently only defined for GCC and ICC.
*/
+#ifdef XXH_OLD_NAMES
typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) unalign64;
-static xxh_u64 XXH_read64(const void* ptr) { return ((const unalign64*)ptr)->u64; }
+#endif
+static xxh_u64 XXH_read64(const void* ptr)
+{
+ typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) xxh_unalign64;
+ return ((const xxh_unalign64*)ptr)->u64;
+}
#else
@@ -1568,17 +1710,25 @@ XXH_readLE64_align(const void* ptr, XXH_alignment align)
/******* xxh64 *******/
-static const xxh_u64 PRIME64_1 = 0x9E3779B185EBCA87ULL; /* 0b1001111000110111011110011011000110000101111010111100101010000111 */
-static const xxh_u64 PRIME64_2 = 0xC2B2AE3D27D4EB4FULL; /* 0b1100001010110010101011100011110100100111110101001110101101001111 */
-static const xxh_u64 PRIME64_3 = 0x165667B19E3779F9ULL; /* 0b0001011001010110011001111011000110011110001101110111100111111001 */
-static const xxh_u64 PRIME64_4 = 0x85EBCA77C2B2AE63ULL; /* 0b1000010111101011110010100111011111000010101100101010111001100011 */
-static const xxh_u64 PRIME64_5 = 0x27D4EB2F165667C5ULL; /* 0b0010011111010100111010110010111100010110010101100110011111000101 */
+static const xxh_u64 XXH_PRIME64_1 = 0x9E3779B185EBCA87ULL; /* 0b1001111000110111011110011011000110000101111010111100101010000111 */
+static const xxh_u64 XXH_PRIME64_2 = 0xC2B2AE3D27D4EB4FULL; /* 0b1100001010110010101011100011110100100111110101001110101101001111 */
+static const xxh_u64 XXH_PRIME64_3 = 0x165667B19E3779F9ULL; /* 0b0001011001010110011001111011000110011110001101110111100111111001 */
+static const xxh_u64 XXH_PRIME64_4 = 0x85EBCA77C2B2AE63ULL; /* 0b1000010111101011110010100111011111000010101100101010111001100011 */
+static const xxh_u64 XXH_PRIME64_5 = 0x27D4EB2F165667C5ULL; /* 0b0010011111010100111010110010111100010110010101100110011111000101 */
+
+#ifdef XXH_OLD_NAMES
+# define PRIME64_1 XXH_PRIME64_1
+# define PRIME64_2 XXH_PRIME64_2
+# define PRIME64_3 XXH_PRIME64_3
+# define PRIME64_4 XXH_PRIME64_4
+# define PRIME64_5 XXH_PRIME64_5
+#endif
static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input)
{
- acc += input * PRIME64_2;
+ acc += input * XXH_PRIME64_2;
acc = XXH_rotl64(acc, 31);
- acc *= PRIME64_1;
+ acc *= XXH_PRIME64_1;
return acc;
}
@@ -1586,16 +1736,16 @@ static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val)
{
val = XXH64_round(0, val);
acc ^= val;
- acc = acc * PRIME64_1 + PRIME64_4;
+ acc = acc * XXH_PRIME64_1 + XXH_PRIME64_4;
return acc;
}
static xxh_u64 XXH64_avalanche(xxh_u64 h64)
{
h64 ^= h64 >> 33;
- h64 *= PRIME64_2;
+ h64 *= XXH_PRIME64_2;
h64 ^= h64 >> 29;
- h64 *= PRIME64_3;
+ h64 *= XXH_PRIME64_3;
h64 ^= h64 >> 32;
return h64;
}
@@ -1606,117 +1756,119 @@ static xxh_u64 XXH64_avalanche(xxh_u64 h64)
static xxh_u64
XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align)
{
-#define PROCESS1_64 \
- h64 ^= (*ptr++) * PRIME64_5; \
- h64 = XXH_rotl64(h64, 11) * PRIME64_1;
-
-#define PROCESS4_64 \
- h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * PRIME64_1; \
- ptr+=4; \
- h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
-
-#define PROCESS8_64 { \
+#define XXH_PROCESS1_64 do { \
+ h64 ^= (*ptr++) * XXH_PRIME64_5; \
+ h64 = XXH_rotl64(h64, 11) * XXH_PRIME64_1; \
+} while (0)
+
+#define XXH_PROCESS4_64 do { \
+ h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1; \
+ ptr += 4; \
+ h64 = XXH_rotl64(h64, 23) * XXH_PRIME64_2 + XXH_PRIME64_3; \
+} while (0)
+
+#define XXH_PROCESS8_64 do { \
xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr)); \
- ptr+=8; \
- h64 ^= k1; \
- h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4; \
-}
+ ptr += 8; \
+ h64 ^= k1; \
+ h64 = XXH_rotl64(h64,27) * XXH_PRIME64_1 + XXH_PRIME64_4; \
+} while (0)
/* Rerolled version for 32-bit targets is faster and much smaller. */
if (XXH_REROLL || XXH_REROLL_XXH64) {
len &= 31;
while (len >= 8) {
- PROCESS8_64;
+ XXH_PROCESS8_64;
len -= 8;
}
if (len >= 4) {
- PROCESS4_64;
+ XXH_PROCESS4_64;
len -= 4;
}
while (len > 0) {
- PROCESS1_64;
+ XXH_PROCESS1_64;
--len;
}
return XXH64_avalanche(h64);
} else {
switch(len & 31) {
- case 24: PROCESS8_64;
+ case 24: XXH_PROCESS8_64;
/* fallthrough */
- case 16: PROCESS8_64;
+ case 16: XXH_PROCESS8_64;
/* fallthrough */
- case 8: PROCESS8_64;
+ case 8: XXH_PROCESS8_64;
return XXH64_avalanche(h64);
- case 28: PROCESS8_64;
+ case 28: XXH_PROCESS8_64;
/* fallthrough */
- case 20: PROCESS8_64;
+ case 20: XXH_PROCESS8_64;
/* fallthrough */
- case 12: PROCESS8_64;
+ case 12: XXH_PROCESS8_64;
/* fallthrough */
- case 4: PROCESS4_64;
+ case 4: XXH_PROCESS4_64;
return XXH64_avalanche(h64);
- case 25: PROCESS8_64;
+ case 25: XXH_PROCESS8_64;
/* fallthrough */
- case 17: PROCESS8_64;
+ case 17: XXH_PROCESS8_64;
/* fallthrough */
- case 9: PROCESS8_64;
- PROCESS1_64;
+ case 9: XXH_PROCESS8_64;
+ XXH_PROCESS1_64;
return XXH64_avalanche(h64);
- case 29: PROCESS8_64;
+ case 29: XXH_PROCESS8_64;
/* fallthrough */
- case 21: PROCESS8_64;
+ case 21: XXH_PROCESS8_64;
/* fallthrough */
- case 13: PROCESS8_64;
+ case 13: XXH_PROCESS8_64;
/* fallthrough */
- case 5: PROCESS4_64;
- PROCESS1_64;
+ case 5: XXH_PROCESS4_64;
+ XXH_PROCESS1_64;
return XXH64_avalanche(h64);
- case 26: PROCESS8_64;
+ case 26: XXH_PROCESS8_64;
/* fallthrough */
- case 18: PROCESS8_64;
+ case 18: XXH_PROCESS8_64;
/* fallthrough */
- case 10: PROCESS8_64;
- PROCESS1_64;
- PROCESS1_64;
+ case 10: XXH_PROCESS8_64;
+ XXH_PROCESS1_64;
+ XXH_PROCESS1_64;
return XXH64_avalanche(h64);
- case 30: PROCESS8_64;
+ case 30: XXH_PROCESS8_64;
/* fallthrough */
- case 22: PROCESS8_64;
+ case 22: XXH_PROCESS8_64;
/* fallthrough */
- case 14: PROCESS8_64;
+ case 14: XXH_PROCESS8_64;
/* fallthrough */
- case 6: PROCESS4_64;
- PROCESS1_64;
- PROCESS1_64;
+ case 6: XXH_PROCESS4_64;
+ XXH_PROCESS1_64;
+ XXH_PROCESS1_64;
return XXH64_avalanche(h64);
- case 27: PROCESS8_64;
+ case 27: XXH_PROCESS8_64;
/* fallthrough */
- case 19: PROCESS8_64;
+ case 19: XXH_PROCESS8_64;
/* fallthrough */
- case 11: PROCESS8_64;
- PROCESS1_64;
- PROCESS1_64;
- PROCESS1_64;
+ case 11: XXH_PROCESS8_64;
+ XXH_PROCESS1_64;
+ XXH_PROCESS1_64;
+ XXH_PROCESS1_64;
return XXH64_avalanche(h64);
- case 31: PROCESS8_64;
+ case 31: XXH_PROCESS8_64;
/* fallthrough */
- case 23: PROCESS8_64;
+ case 23: XXH_PROCESS8_64;
/* fallthrough */
- case 15: PROCESS8_64;
+ case 15: XXH_PROCESS8_64;
/* fallthrough */
- case 7: PROCESS4_64;
+ case 7: XXH_PROCESS4_64;
/* fallthrough */
- case 3: PROCESS1_64;
+ case 3: XXH_PROCESS1_64;
/* fallthrough */
- case 2: PROCESS1_64;
+ case 2: XXH_PROCESS1_64;
/* fallthrough */
- case 1: PROCESS1_64;
+ case 1: XXH_PROCESS1_64;
/* fallthrough */
case 0: return XXH64_avalanche(h64);
}
@@ -1726,6 +1878,16 @@ XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align)
return 0; /* unreachable, but some compilers complain without it */
}
+#ifdef XXH_OLD_NAMES
+# define PROCESS1_64 XXH_PROCESS1_64
+# define PROCESS4_64 XXH_PROCESS4_64
+# define PROCESS8_64 XXH_PROCESS8_64
+#else
+# undef XXH_PROCESS1_64
+# undef XXH_PROCESS4_64
+# undef XXH_PROCESS8_64
+#endif
+
XXH_FORCE_INLINE xxh_u64
XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align)
{
@@ -1741,10 +1903,10 @@ XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment
if (len>=32) {
const xxh_u8* const limit = bEnd - 32;
- xxh_u64 v1 = seed + PRIME64_1 + PRIME64_2;
- xxh_u64 v2 = seed + PRIME64_2;
+ xxh_u64 v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2;
+ xxh_u64 v2 = seed + XXH_PRIME64_2;
xxh_u64 v3 = seed + 0;
- xxh_u64 v4 = seed - PRIME64_1;
+ xxh_u64 v4 = seed - XXH_PRIME64_1;
do {
v1 = XXH64_round(v1, XXH_get64bits(input)); input+=8;
@@ -1760,7 +1922,7 @@ XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment
h64 = XXH64_mergeRound(h64, v4);
} else {
- h64 = seed + PRIME64_5;
+ h64 = seed + XXH_PRIME64_5;
}
h64 += (xxh_u64) len;
@@ -1811,10 +1973,10 @@ XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, XXH64_hash_t s
{
XXH64_state_t state; /* use a local state to memcpy() in order to avoid strict-aliasing warnings */
memset(&state, 0, sizeof(state));
- state.v1 = seed + PRIME64_1 + PRIME64_2;
- state.v2 = seed + PRIME64_2;
+ state.v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2;
+ state.v2 = seed + XXH_PRIME64_2;
state.v3 = seed + 0;
- state.v4 = seed - PRIME64_1;
+ state.v4 = seed - XXH_PRIME64_1;
/* do not write into reserved64, might be removed in a future version */
memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved64));
return XXH_OK;
@@ -1897,7 +2059,7 @@ XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* state)
h64 = XXH64_mergeRound(h64, v3);
h64 = XXH64_mergeRound(h64, v4);
} else {
- h64 = state->v3 /*seed*/ + PRIME64_5;
+ h64 = state->v3 /*seed*/ + XXH_PRIME64_5;
}
h64 += (xxh_u64) state->total_len;
@@ -1927,8 +2089,2671 @@ XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src
* New generation hash designed for speed on small keys and vectorization
************************************************************************ */
-#include "xxh3.h"
+/* === Compiler specifics === */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* >= C99 */
+# define XXH_RESTRICT restrict
+#else
+/* Note: it might be useful to define __restrict or __restrict__ for some C++ compilers */
+# define XXH_RESTRICT /* disable */
+#endif
+
+#if (defined(__GNUC__) && (__GNUC__ >= 3)) \
+ || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \
+ || defined(__clang__)
+# define XXH_likely(x) __builtin_expect(x, 1)
+# define XXH_unlikely(x) __builtin_expect(x, 0)
+#else
+# define XXH_likely(x) (x)
+# define XXH_unlikely(x) (x)
+#endif
+
+#if defined(__GNUC__)
+# if defined(__AVX2__)
+# include <immintrin.h>
+# elif defined(__SSE2__)
+# include <emmintrin.h>
+# elif defined(__ARM_NEON__) || defined(__ARM_NEON)
+# define inline __inline__ /* circumvent a clang bug */
+# include <arm_neon.h>
+# undef inline
+# endif
+#elif defined(_MSC_VER)
+# include <intrin.h>
+#endif
+
+/*
+ * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while
+ * remaining a true 64-bit/128-bit hash function.
+ *
+ * This is done by prioritizing a subset of 64-bit operations that can be
+ * emulated without too many steps on the average 32-bit machine.
+ *
+ * For example, these two lines seem similar, and run equally fast on 64-bit:
+ *
+ * xxh_u64 x;
+ * x ^= (x >> 47); // good
+ * x ^= (x >> 13); // bad
+ *
+ * However, to a 32-bit machine, there is a major difference.
+ *
+ * x ^= (x >> 47) looks like this:
+ *
+ * x.lo ^= (x.hi >> (47 - 32));
+ *
+ * while x ^= (x >> 13) looks like this:
+ *
+ * // note: funnel shifts are not usually cheap.
+ * x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13));
+ * x.hi ^= (x.hi >> 13);
+ *
+ * The first one is significantly faster than the second, simply because the
+ * shift is larger than 32. This means:
+ * - All the bits we need are in the upper 32 bits, so we can ignore the lower
+ * 32 bits in the shift.
+ * - The shift result will always fit in the lower 32 bits, and therefore,
+ * we can ignore the upper 32 bits in the xor.
+ *
+ * Thanks to this optimization, XXH3 only requires these features to be efficient:
+ *
+ * - Usable unaligned access
+ * - A 32-bit or 64-bit ALU
+ * - If 32-bit, a decent ADC instruction
+ * - A 32 or 64-bit multiply with a 64-bit result
+ * - For the 128-bit variant, a decent byteswap helps short inputs.
+ *
+ * The first two are already required by XXH32, and almost all 32-bit and 64-bit
+ * platforms which can run XXH32 can run XXH3 efficiently.
+ *
+ * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one
+ * notable exception.
+ *
+ * First of all, Thumb-1 lacks support for the UMULL instruction which
+ * performs the important long multiply. This means numerous __aeabi_lmul
+ * calls.
+ *
+ * Second of all, the 8 functional registers are just not enough.
+ * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need
+ * Lo registers, and this shuffling results in thousands more MOVs than A32.
+ *
+ * A32 and T32 don't have this limitation. They can access all 14 registers,
+ * do a 32->64 multiply with UMULL, and the flexible operand allowing free
+ * shifts is helpful, too.
+ *
+ * Therefore, we do a quick sanity check.
+ *
+ * If compiling Thumb-1 for a target which supports ARM instructions, we will
+ * emit a warning, as it is not a "sane" platform to compile for.
+ *
+ * Usually, if this happens, it is because of an accident and you probably need
+ * to specify -march, as you likely meant to compile for a newer architecture.
+ *
+ * Credit: large sections of the vectorial and asm source code paths
+ * have been contributed by @easyaspi314
+ */
+#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM)
+# warning "XXH3 is highly inefficient without ARM or Thumb-2."
+#endif
+
+/* ==========================================
+ * Vectorization detection
+ * ========================================== */
+#define XXH_SCALAR 0 /* Portable scalar version */
+#define XXH_SSE2 1 /* SSE2 for Pentium 4 and all x86_64 */
+#define XXH_AVX2 2 /* AVX2 for Haswell and Bulldozer */
+#define XXH_AVX512 3 /* AVX512 for Skylake and Icelake */
+#define XXH_NEON 4 /* NEON for most ARMv7-A and all AArch64 */
+#define XXH_VSX 5 /* VSX and ZVector for POWER8/z13 */
+
+#ifndef XXH_VECTOR /* can be defined on command line */
+# if defined(__AVX512F__)
+# define XXH_VECTOR XXH_AVX512
+# elif defined(__AVX2__)
+# define XXH_VECTOR XXH_AVX2
+# elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2))
+# define XXH_VECTOR XXH_SSE2
+# elif defined(__GNUC__) /* msvc support maybe later */ \
+ && (defined(__ARM_NEON__) || defined(__ARM_NEON)) \
+ && (defined(__LITTLE_ENDIAN__) /* We only support little endian NEON */ \
+ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
+# define XXH_VECTOR XXH_NEON
+# elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \
+ || (defined(__s390x__) && defined(__VEC__)) \
+ && defined(__GNUC__) /* TODO: IBM XL */
+# define XXH_VECTOR XXH_VSX
+# else
+# define XXH_VECTOR XXH_SCALAR
+# endif
+#endif
+
+/*
+ * Controls the alignment of the accumulator,
+ * for compatibility with aligned vector loads, which are usually faster.
+ */
+#ifndef XXH_ACC_ALIGN
+# if defined(XXH_X86DISPATCH)
+# define XXH_ACC_ALIGN 64 /* for compatibility with avx512 */
+# elif XXH_VECTOR == XXH_SCALAR /* scalar */
+# define XXH_ACC_ALIGN 8
+# elif XXH_VECTOR == XXH_SSE2 /* sse2 */
+# define XXH_ACC_ALIGN 16
+# elif XXH_VECTOR == XXH_AVX2 /* avx2 */
+# define XXH_ACC_ALIGN 32
+# elif XXH_VECTOR == XXH_NEON /* neon */
+# define XXH_ACC_ALIGN 16
+# elif XXH_VECTOR == XXH_VSX /* vsx */
+# define XXH_ACC_ALIGN 16
+# elif XXH_VECTOR == XXH_AVX512 /* avx512 */
+# define XXH_ACC_ALIGN 64
+# endif
+#endif
+
+#if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 \
+ || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512
+# define XXH_SEC_ALIGN XXH_ACC_ALIGN
+#else
+# define XXH_SEC_ALIGN 8
+#endif
+
+/*
+ * UGLY HACK:
+ * GCC usually generates the best code with -O3 for xxHash.
+ *
+ * However, when targeting AVX2, it is overzealous in its unrolling resulting
+ * in code roughly 3/4 the speed of Clang.
+ *
+ * There are other issues, such as GCC splitting _mm256_loadu_si256 into
+ * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which
+ * only applies to Sandy and Ivy Bridge... which don't even support AVX2.
+ *
+ * That is why when compiling the AVX2 version, it is recommended to use either
+ * -O2 -mavx2 -march=haswell
+ * or
+ * -O2 -mavx2 -mno-avx256-split-unaligned-load
+ * for decent performance, or to use Clang instead.
+ *
+ * Fortunately, we can control the first one with a pragma that forces GCC into
+ * -O2, but the other one we can't control without "failed to inline always
+ * inline function due to target mismatch" warnings.
+ */
+#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
+ && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
+ && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
+# pragma GCC push_options
+# pragma GCC optimize("-O2")
+#endif
+
+
+#if XXH_VECTOR == XXH_NEON
+/*
+ * NEON's setup for vmlal_u32 is a little more complicated than it is on
+ * SSE2, AVX2, and VSX.
+ *
+ * While PMULUDQ and VMULEUW both perform a mask, VMLAL.U32 performs an upcast.
+ *
+ * To do the same operation, the 128-bit 'Q' register needs to be split into
+ * two 64-bit 'D' registers, performing this operation::
+ *
+ * [ a | b ]
+ * | '---------. .--------' |
+ * | x |
+ * | .---------' '--------. |
+ * [ a & 0xFFFFFFFF | b & 0xFFFFFFFF ],[ a >> 32 | b >> 32 ]
+ *
+ * Due to significant changes in aarch64, the fastest method for aarch64 is
+ * completely different than the fastest method for ARMv7-A.
+ *
+ * ARMv7-A treats D registers as unions overlaying Q registers, so modifying
+ * D11 will modify the high half of Q5. This is similar to how modifying AH
+ * will only affect bits 8-15 of AX on x86.
+ *
+ * VZIP takes two registers, and puts even lanes in one register and odd lanes
+ * in the other.
+ *
+ * On ARMv7-A, this strangely modifies both parameters in place instead of
+ * taking the usual 3-operand form.
+ *
+ * Therefore, if we want to do this, we can simply use a D-form VZIP.32 on the
+ * lower and upper halves of the Q register to end up with the high and low
+ * halves where we want - all in one instruction.
+ *
+ * vzip.32 d10, d11 @ d10 = { d10[0], d11[0] }; d11 = { d10[1], d11[1] }
+ *
+ * Unfortunately we need inline assembly for this: Instructions modifying two
+ * registers at once is not possible in GCC or Clang's IR, and they have to
+ * create a copy.
+ *
+ * aarch64 requires a different approach.
+ *
+ * In order to make it easier to write a decent compiler for aarch64, many
+ * quirks were removed, such as conditional execution.
+ *
+ * NEON was also affected by this.
+ *
+ * aarch64 cannot access the high bits of a Q-form register, and writes to a
+ * D-form register zero the high bits, similar to how writes to W-form scalar
+ * registers (or DWORD registers on x86_64) work.
+ *
+ * The formerly free vget_high intrinsics now require a vext (with a few
+ * exceptions)
+ *
+ * Additionally, VZIP was replaced by ZIP1 and ZIP2, which are the equivalent
+ * of PUNPCKL* and PUNPCKH* in SSE, respectively, in order to only modify one
+ * operand.
+ *
+ * The equivalent of the VZIP.32 on the lower and upper halves would be this
+ * mess:
+ *
+ * ext v2.4s, v0.4s, v0.4s, #2 // v2 = { v0[2], v0[3], v0[0], v0[1] }
+ * zip1 v1.2s, v0.2s, v2.2s // v1 = { v0[0], v2[0] }
+ * zip2 v0.2s, v0.2s, v1.2s // v0 = { v0[1], v2[1] }
+ *
+ * Instead, we use a literal downcast, vmovn_u64 (XTN), and vshrn_n_u64 (SHRN):
+ *
+ * shrn v1.2s, v0.2d, #32 // v1 = (uint32x2_t)(v0 >> 32);
+ * xtn v0.2s, v0.2d // v0 = (uint32x2_t)(v0 & 0xFFFFFFFF);
+ *
+ * This is available on ARMv7-A, but is less efficient than a single VZIP.32.
+ */
+
+/*
+ * Function-like macro:
+ * void XXH_SPLIT_IN_PLACE(uint64x2_t &in, uint32x2_t &outLo, uint32x2_t &outHi)
+ * {
+ * outLo = (uint32x2_t)(in & 0xFFFFFFFF);
+ * outHi = (uint32x2_t)(in >> 32);
+ * in = UNDEFINED;
+ * }
+ */
+# if !defined(XXH_NO_VZIP_HACK) /* define to disable */ \
+ && defined(__GNUC__) \
+ && !defined(__aarch64__) && !defined(__arm64__)
+# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \
+ do { \
+ /* Undocumented GCC/Clang operand modifier: %e0 = lower D half, %f0 = upper D half */ \
+ /* https://github.com/gcc-mirror/gcc/blob/38cf91e5/gcc/config/arm/arm.c#L22486 */ \
+ /* https://github.com/llvm-mirror/llvm/blob/2c4ca683/lib/Target/ARM/ARMAsmPrinter.cpp#L399 */ \
+ __asm__("vzip.32 %e0, %f0" : "+w" (in)); \
+ (outLo) = vget_low_u32 (vreinterpretq_u32_u64(in)); \
+ (outHi) = vget_high_u32(vreinterpretq_u32_u64(in)); \
+ } while (0)
+# else
+# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \
+ do { \
+ (outLo) = vmovn_u64 (in); \
+ (outHi) = vshrn_n_u64 ((in), 32); \
+ } while (0)
+# endif
+#endif /* XXH_VECTOR == XXH_NEON */
+
+/*
+ * VSX and Z Vector helpers.
+ *
+ * This is very messy, and any pull requests to clean this up are welcome.
+ *
+ * There are a lot of problems with supporting VSX and s390x, due to
+ * inconsistent intrinsics, spotty coverage, and multiple endiannesses.
+ */
+#if XXH_VECTOR == XXH_VSX
+# if defined(__s390x__)
+# include <s390intrin.h>
+# else
+/* gcc's altivec.h can have the unwanted consequence to unconditionally
+ * #define bool, vector, and pixel keywords,
+ * with bad consequences for programs already using these keywords for other purposes.
+ * The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined.
+ * __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler,
+ * but it seems that, in some cases, it isn't.
+ * Force the build macro to be defined, so that keywords are not altered.
+ */
+# if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__)
+# define __APPLE_ALTIVEC__
+# endif
+# include <altivec.h>
+# endif
+
+typedef __vector unsigned long long xxh_u64x2;
+typedef __vector unsigned char xxh_u8x16;
+typedef __vector unsigned xxh_u32x4;
+
+# ifndef XXH_VSX_BE
+# if defined(__BIG_ENDIAN__) \
+ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+# define XXH_VSX_BE 1
+# elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__
+# warning "-maltivec=be is not recommended. Please use native endianness."
+# define XXH_VSX_BE 1
+# else
+# define XXH_VSX_BE 0
+# endif
+# endif /* !defined(XXH_VSX_BE) */
+
+# if XXH_VSX_BE
+/* A wrapper for POWER9's vec_revb. */
+# if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__))
+# define XXH_vec_revb vec_revb
+# else
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val)
+{
+ xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 };
+ return vec_perm(val, val, vByteSwap);
+}
+# endif
+# endif /* XXH_VSX_BE */
+
+/*
+ * Performs an unaligned load and byte swaps it on big endian.
+ */
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr)
+{
+ xxh_u64x2 ret;
+ memcpy(&ret, ptr, sizeof(xxh_u64x2));
+# if XXH_VSX_BE
+ ret = XXH_vec_revb(ret);
+# endif
+ return ret;
+}
+
+/*
+ * vec_mulo and vec_mule are very problematic intrinsics on PowerPC
+ *
+ * These intrinsics weren't added until GCC 8, despite existing for a while,
+ * and they are endian dependent. Also, their meaning swap depending on version.
+ * */
+# if defined(__s390x__)
+ /* s390x is always big endian, no issue on this platform */
+# define XXH_vec_mulo vec_mulo
+# define XXH_vec_mule vec_mule
+# elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw)
+/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */
+# define XXH_vec_mulo __builtin_altivec_vmulouw
+# define XXH_vec_mule __builtin_altivec_vmuleuw
+# else
+/* gcc needs inline assembly */
+/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b)
+{
+ xxh_u64x2 result;
+ __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
+ return result;
+}
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b)
+{
+ xxh_u64x2 result;
+ __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
+ return result;
+}
+# endif /* XXH_vec_mulo, XXH_vec_mule */
+#endif /* XXH_VECTOR == XXH_VSX */
+
+
+/* prefetch
+ * can be disabled, by declaring XXH_NO_PREFETCH build macro */
+#if defined(XXH_NO_PREFETCH)
+# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */
+#else
+# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) /* _mm_prefetch() is not defined outside of x86/x64 */
+# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
+# define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
+# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
+# define XXH_PREFETCH(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)
+# else
+# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */
+# endif
+#endif /* XXH_NO_PREFETCH */
+
+
+/* ==========================================
+ * XXH3 default settings
+ * ========================================== */
+
+#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */
+
+#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN)
+# error "default keyset is not large enough"
+#endif
+
+/* Pseudorandom secret taken directly from FARSH */
+XXH_ALIGN(64) static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = {
+ 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c,
+ 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f,
+ 0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21,
+ 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c,
+ 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3,
+ 0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8,
+ 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d,
+ 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64,
+ 0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb,
+ 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e,
+ 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce,
+ 0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e,
+};
+
+
+#ifdef XXH_OLD_NAMES
+# define kSecret XXH3_kSecret
+#endif
+
+/*
+ * Calculates a 32-bit to 64-bit long multiply.
+ *
+ * Wraps __emulu on MSVC x86 because it tends to call __allmul when it doesn't
+ * need to (but it shouldn't need to anyways, it is about 7 instructions to do
+ * a 64x64 multiply...). Since we know that this will _always_ emit MULL, we
+ * use that instead of the normal method.
+ *
+ * If you are compiling for platforms like Thumb-1 and don't have a better option,
+ * you may also want to write your own long multiply routine here.
+ *
+ * XXH_FORCE_INLINE xxh_u64 XXH_mult32to64(xxh_u64 x, xxh_u64 y)
+ * {
+ * return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF);
+ * }
+ */
+#if defined(_MSC_VER) && defined(_M_IX86)
+# include <intrin.h>
+# define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y))
+#else
+/*
+ * Downcast + upcast is usually better than masking on older compilers like
+ * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers.
+ *
+ * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands
+ * and perform a full 64x64 multiply -- entirely redundant on 32-bit.
+ */
+# define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y))
+#endif
+
+/*
+ * Calculates a 64->128-bit long multiply.
+ *
+ * Uses __uint128_t and _umul128 if available, otherwise uses a scalar version.
+ */
+static XXH128_hash_t
+XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs)
+{
+ /*
+ * GCC/Clang __uint128_t method.
+ *
+ * On most 64-bit targets, GCC and Clang define a __uint128_t type.
+ * This is usually the best way as it usually uses a native long 64-bit
+ * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64.
+ *
+ * Usually.
+ *
+ * Despite being a 32-bit platform, Clang (and emscripten) define this type
+ * despite not having the arithmetic for it. This results in a laggy
+ * compiler builtin call which calculates a full 128-bit multiply.
+ * In that case it is best to use the portable one.
+ * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677
+ */
+#if defined(__GNUC__) && !defined(__wasm__) \
+ && defined(__SIZEOF_INT128__) \
+ || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128)
+
+ __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs;
+ XXH128_hash_t r128;
+ r128.low64 = (xxh_u64)(product);
+ r128.high64 = (xxh_u64)(product >> 64);
+ return r128;
+
+ /*
+ * MSVC for x64's _umul128 method.
+ *
+ * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct);
+ *
+ * This compiles to single operand MUL on x64.
+ */
+#elif defined(_M_X64) || defined(_M_IA64)
+
+#ifndef _MSC_VER
+# pragma intrinsic(_umul128)
+#endif
+ xxh_u64 product_high;
+ xxh_u64 const product_low = _umul128(lhs, rhs, &product_high);
+ XXH128_hash_t r128;
+ r128.low64 = product_low;
+ r128.high64 = product_high;
+ return r128;
+
+#else
+ /*
+ * Portable scalar method. Optimized for 32-bit and 64-bit ALUs.
+ *
+ * This is a fast and simple grade school multiply, which is shown below
+ * with base 10 arithmetic instead of base 0x100000000.
+ *
+ * 9 3 // D2 lhs = 93
+ * x 7 5 // D2 rhs = 75
+ * ----------
+ * 1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15
+ * 4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45
+ * 2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21
+ * + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63
+ * ---------
+ * 2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27
+ * + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67
+ * ---------
+ * 6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975
+ *
+ * The reasons for adding the products like this are:
+ * 1. It avoids manual carry tracking. Just like how
+ * (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX.
+ * This avoids a lot of complexity.
+ *
+ * 2. It hints for, and on Clang, compiles to, the powerful UMAAL
+ * instruction available in ARM's Digital Signal Processing extension
+ * in 32-bit ARMv6 and later, which is shown below:
+ *
+ * void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm)
+ * {
+ * xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm;
+ * *RdLo = (xxh_u32)(product & 0xFFFFFFFF);
+ * *RdHi = (xxh_u32)(product >> 32);
+ * }
+ *
+ * This instruction was designed for efficient long multiplication, and
+ * allows this to be calculated in only 4 instructions at speeds
+ * comparable to some 64-bit ALUs.
+ *
+ * 3. It isn't terrible on other platforms. Usually this will be a couple
+ * of 32-bit ADD/ADCs.
+ */
+
+ /* First calculate all of the cross products. */
+ xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF);
+ xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF);
+ xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32);
+ xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32);
+
+ /* Now add the products together. These will never overflow. */
+ xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi;
+ xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi;
+ xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF);
+
+ XXH128_hash_t r128;
+ r128.low64 = lower;
+ r128.high64 = upper;
+ return r128;
+#endif
+}
+
+/*
+ * Does a 64-bit to 128-bit multiply, then XOR folds it.
+ *
+ * The reason for the separate function is to prevent passing too many structs
+ * around by value. This will hopefully inline the multiply, but we don't force it.
+ */
+static xxh_u64
+XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs)
+{
+ XXH128_hash_t product = XXH_mult64to128(lhs, rhs);
+ return product.low64 ^ product.high64;
+}
+
+/* Seems to produce slightly better code on GCC for some reason. */
+XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift)
+{
+ XXH_ASSERT(0 <= shift && shift < 64);
+ return v64 ^ (v64 >> shift);
+}
+
+/*
+ * This is a fast avalanche stage,
+ * suitable when input bits are already partially mixed
+ */
+static XXH64_hash_t XXH3_avalanche(xxh_u64 h64)
+{
+ h64 = XXH_xorshift64(h64, 37);
+ h64 *= 0x165667919E3779F9ULL;
+ h64 = XXH_xorshift64(h64, 32);
+ return h64;
+}
+
+/*
+ * This is a stronger avalanche,
+ * inspired by Pelle Evensen's rrmxmx
+ * preferable when input has not been previously mixed
+ */
+static XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len)
+{
+ /* this mix is inspired by Pelle Evensen's rrmxmx */
+ h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24);
+ h64 *= 0x9FB21C651E98DF25ULL;
+ h64 ^= (h64 >> 35) + len ;
+ h64 *= 0x9FB21C651E98DF25ULL;
+ return XXH_xorshift64(h64, 28);
+}
+
+
+/* ==========================================
+ * Short keys
+ * ==========================================
+ * One of the shortcomings of XXH32 and XXH64 was that their performance was
+ * sub-optimal on short lengths. It used an iterative algorithm which strongly
+ * favored lengths that were a multiple of 4 or 8.
+ *
+ * Instead of iterating over individual inputs, we use a set of single shot
+ * functions which piece together a range of lengths and operate in constant time.
+ *
+ * Additionally, the number of multiplies has been significantly reduced. This
+ * reduces latency, especially when emulating 64-bit multiplies on 32-bit.
+ *
+ * Depending on the platform, this may or may not be faster than XXH32, but it
+ * is almost guaranteed to be faster than XXH64.
+ */
+
+/*
+ * At very short lengths, there isn't enough input to fully hide secrets, or use
+ * the entire secret.
+ *
+ * There is also only a limited amount of mixing we can do before significantly
+ * impacting performance.
+ *
+ * Therefore, we use different sections of the secret and always mix two secret
+ * samples with an XOR. This should have no effect on performance on the
+ * seedless or withSeed variants because everything _should_ be constant folded
+ * by modern compilers.
+ *
+ * The XOR mixing hides individual parts of the secret and increases entropy.
+ *
+ * This adds an extra layer of strength for custom secrets.
+ */
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(1 <= len && len <= 3);
+ XXH_ASSERT(secret != NULL);
+ /*
+ * len = 1: combined = { input[0], 0x01, input[0], input[0] }
+ * len = 2: combined = { input[1], 0x02, input[0], input[1] }
+ * len = 3: combined = { input[2], 0x03, input[0], input[1] }
+ */
+ { xxh_u8 const c1 = input[0];
+ xxh_u8 const c2 = input[len >> 1];
+ xxh_u8 const c3 = input[len - 1];
+ xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24)
+ | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8);
+ xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
+ xxh_u64 const keyed = (xxh_u64)combined ^ bitflip;
+ return XXH64_avalanche(keyed);
+ }
+}
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(4 <= len && len < 8);
+ seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
+ { xxh_u32 const input1 = XXH_readLE32(input);
+ xxh_u32 const input2 = XXH_readLE32(input + len - 4);
+ xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed;
+ xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32);
+ xxh_u64 const keyed = input64 ^ bitflip;
+ return XXH3_rrmxmx(keyed, len);
+ }
+}
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(8 <= len && len <= 16);
+ { xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed;
+ xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed;
+ xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1;
+ xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2;
+ xxh_u64 const acc = len
+ + XXH_swap64(input_lo) + input_hi
+ + XXH3_mul128_fold64(input_lo, input_hi);
+ return XXH3_avalanche(acc);
+ }
+}
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(len <= 16);
+ { if (XXH_likely(len > 8)) return XXH3_len_9to16_64b(input, len, secret, seed);
+ if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed);
+ if (len) return XXH3_len_1to3_64b(input, len, secret, seed);
+ return XXH64_avalanche(seed ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64)));
+ }
+}
+
+/*
+ * DISCLAIMER: There are known *seed-dependent* multicollisions here due to
+ * multiplication by zero, affecting hashes of lengths 17 to 240.
+ *
+ * However, they are very unlikely.
+ *
+ * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all
+ * unseeded non-cryptographic hashes, it does not attempt to defend itself
+ * against specially crafted inputs, only random inputs.
+ *
+ * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes
+ * cancelling out the secret is taken an arbitrary number of times (addressed
+ * in XXH3_accumulate_512), this collision is very unlikely with random inputs
+ * and/or proper seeding:
+ *
+ * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a
+ * function that is only called up to 16 times per hash with up to 240 bytes of
+ * input.
+ *
+ * This is not too bad for a non-cryptographic hash function, especially with
+ * only 64 bit outputs.
+ *
+ * The 128-bit variant (which trades some speed for strength) is NOT affected
+ * by this, although it is always a good idea to use a proper seed if you care
+ * about strength.
+ */
+XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input,
+ const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64)
+{
+#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
+ && defined(__i386__) && defined(__SSE2__) /* x86 + SSE2 */ \
+ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable like XXH32 hack */
+ /*
+ * UGLY HACK:
+ * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in
+ * slower code.
+ *
+ * By forcing seed64 into a register, we disrupt the cost model and
+ * cause it to scalarize. See `XXH32_round()`
+ *
+ * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600,
+ * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on
+ * GCC 9.2, despite both emitting scalar code.
+ *
+ * GCC generates much better scalar code than Clang for the rest of XXH3,
+ * which is why finding a more optimal codepath is an interest.
+ */
+ __asm__ ("" : "+r" (seed64));
+#endif
+ { xxh_u64 const input_lo = XXH_readLE64(input);
+ xxh_u64 const input_hi = XXH_readLE64(input+8);
+ return XXH3_mul128_fold64(
+ input_lo ^ (XXH_readLE64(secret) + seed64),
+ input_hi ^ (XXH_readLE64(secret+8) - seed64)
+ );
+ }
+}
+
+/* For mid range keys, XXH3 uses a Mum-hash variant. */
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(16 < len && len <= 128);
+
+ { xxh_u64 acc = len * XXH_PRIME64_1;
+ if (len > 32) {
+ if (len > 64) {
+ if (len > 96) {
+ acc += XXH3_mix16B(input+48, secret+96, seed);
+ acc += XXH3_mix16B(input+len-64, secret+112, seed);
+ }
+ acc += XXH3_mix16B(input+32, secret+64, seed);
+ acc += XXH3_mix16B(input+len-48, secret+80, seed);
+ }
+ acc += XXH3_mix16B(input+16, secret+32, seed);
+ acc += XXH3_mix16B(input+len-32, secret+48, seed);
+ }
+ acc += XXH3_mix16B(input+0, secret+0, seed);
+ acc += XXH3_mix16B(input+len-16, secret+16, seed);
+
+ return XXH3_avalanche(acc);
+ }
+}
+
+#define XXH3_MIDSIZE_MAX 240
+
+XXH_NO_INLINE XXH64_hash_t
+XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);
+
+ #define XXH3_MIDSIZE_STARTOFFSET 3
+ #define XXH3_MIDSIZE_LASTOFFSET 17
+
+ { xxh_u64 acc = len * XXH_PRIME64_1;
+ int const nbRounds = (int)len / 16;
+ int i;
+ for (i=0; i<8; i++) {
+ acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed);
+ }
+ acc = XXH3_avalanche(acc);
+ XXH_ASSERT(nbRounds >= 8);
+#if defined(__clang__) /* Clang */ \
+ && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \
+ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */
+ /*
+ * UGLY HACK:
+ * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86.
+ * In everywhere else, it uses scalar code.
+ *
+ * For 64->128-bit multiplies, even if the NEON was 100% optimal, it
+ * would still be slower than UMAAL (see XXH_mult64to128).
+ *
+ * Unfortunately, Clang doesn't handle the long multiplies properly and
+ * converts them to the nonexistent "vmulq_u64" intrinsic, which is then
+ * scalarized into an ugly mess of VMOV.32 instructions.
+ *
+ * This mess is difficult to avoid without turning autovectorization
+ * off completely, but they are usually relatively minor and/or not
+ * worth it to fix.
+ *
+ * This loop is the easiest to fix, as unlike XXH32, this pragma
+ * _actually works_ because it is a loop vectorization instead of an
+ * SLP vectorization.
+ */
+ #pragma clang loop vectorize(disable)
+#endif
+ for (i=8 ; i < nbRounds; i++) {
+ acc += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed);
+ }
+ /* last bytes */
+ acc += XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed);
+ return XXH3_avalanche(acc);
+ }
+}
+
+
+/* ======= Long Keys ======= */
+
+#define XXH_STRIPE_LEN 64
+#define XXH_SECRET_CONSUME_RATE 8 /* nb of secret bytes consumed at each accumulation */
+#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64))
+
+#ifdef XXH_OLD_NAMES
+# define STRIPE_LEN XXH_STRIPE_LEN
+# define ACC_NB XXH_ACC_NB
+#endif
+
+XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64)
+{
+ if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64);
+ memcpy(dst, &v64, sizeof(v64));
+}
+
+/* Several intrinsic functions below are supposed to accept __int64 as argument,
+ * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ .
+ * However, several environments do not define __int64 type,
+ * requiring a workaround.
+ */
+#if !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+ typedef int64_t xxh_i64;
+#else
+ /* the following type must have a width of 64-bit */
+ typedef long long xxh_i64;
+#endif
+
+/*
+ * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized.
+ *
+ * It is a hardened version of UMAC, based off of FARSH's implementation.
+ *
+ * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD
+ * implementations, and it is ridiculously fast.
+ *
+ * We harden it by mixing the original input to the accumulators as well as the product.
+ *
+ * This means that in the (relatively likely) case of a multiply by zero, the
+ * original input is preserved.
+ *
+ * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve
+ * cross-pollination, as otherwise the upper and lower halves would be
+ * essentially independent.
+ *
+ * This doesn't matter on 64-bit hashes since they all get merged together in
+ * the end, so we skip the extra step.
+ *
+ * Both XXH3_64bits and XXH3_128bits use this subroutine.
+ */
+
+#if (XXH_VECTOR == XXH_AVX512) || defined(XXH_X86DISPATCH)
+
+#ifndef XXH_TARGET_AVX512
+# define XXH_TARGET_AVX512 /* disable attribute target */
+#endif
+
+XXH_FORCE_INLINE XXH_TARGET_AVX512 void
+XXH3_accumulate_512_avx512(void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ XXH_ALIGN(64) __m512i* const xacc = (__m512i *) acc;
+ XXH_ASSERT((((size_t)acc) & 63) == 0);
+ XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));
+
+ {
+ /* data_vec = input[0]; */
+ __m512i const data_vec = _mm512_loadu_si512 (input);
+ /* key_vec = secret[0]; */
+ __m512i const key_vec = _mm512_loadu_si512 (secret);
+ /* data_key = data_vec ^ key_vec; */
+ __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec);
+ /* data_key_lo = data_key >> 32; */
+ __m512i const data_key_lo = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1));
+ /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
+ __m512i const product = _mm512_mul_epu32 (data_key, data_key_lo);
+ /* xacc[0] += swap(data_vec); */
+ __m512i const data_swap = _mm512_shuffle_epi32(data_vec, (_MM_PERM_ENUM)_MM_SHUFFLE(1, 0, 3, 2));
+ __m512i const sum = _mm512_add_epi64(*xacc, data_swap);
+ /* xacc[0] += product; */
+ *xacc = _mm512_add_epi64(product, sum);
+ }
+}
+
+/*
+ * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing.
+ *
+ * Multiplication isn't perfect, as explained by Google in HighwayHash:
+ *
+ * // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to
+ * // varying degrees. In descending order of goodness, bytes
+ * // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32.
+ * // As expected, the upper and lower bytes are much worse.
+ *
+ * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291
+ *
+ * Since our algorithm uses a pseudorandom secret to add some variance into the
+ * mix, we don't need to (or want to) mix as often or as much as HighwayHash does.
+ *
+ * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid
+ * extraction.
+ *
+ * Both XXH3_64bits and XXH3_128bits use this subroutine.
+ */
+
+XXH_FORCE_INLINE XXH_TARGET_AVX512 void
+XXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 63) == 0);
+ XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));
+ { XXH_ALIGN(64) __m512i* const xacc = (__m512i*) acc;
+ const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1);
+
+ /* xacc[0] ^= (xacc[0] >> 47) */
+ __m512i const acc_vec = *xacc;
+ __m512i const shifted = _mm512_srli_epi64 (acc_vec, 47);
+ __m512i const data_vec = _mm512_xor_si512 (acc_vec, shifted);
+ /* xacc[0] ^= secret; */
+ __m512i const key_vec = _mm512_loadu_si512 (secret);
+ __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec);
+
+ /* xacc[0] *= XXH_PRIME32_1; */
+ __m512i const data_key_hi = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1));
+ __m512i const prod_lo = _mm512_mul_epu32 (data_key, prime32);
+ __m512i const prod_hi = _mm512_mul_epu32 (data_key_hi, prime32);
+ *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32));
+ }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_AVX512 void
+XXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0);
+ XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64);
+ XXH_ASSERT(((size_t)customSecret & 63) == 0);
+ (void)(&XXH_writeLE64);
+ { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i);
+ __m512i const seed = _mm512_mask_set1_epi64(_mm512_set1_epi64((xxh_i64)seed64), 0xAA, -(xxh_i64)seed64);
+
+ XXH_ALIGN(64) const __m512i* const src = (const __m512i*) XXH3_kSecret;
+ XXH_ALIGN(64) __m512i* const dest = ( __m512i*) customSecret;
+ int i;
+ for (i=0; i < nbRounds; ++i) {
+ /* GCC has a bug, _mm512_stream_load_si512 accepts 'void*', not 'void const*',
+ * this will warn "discards ‘const’ qualifier". */
+ union {
+ XXH_ALIGN(64) const __m512i* cp;
+ XXH_ALIGN(64) void* p;
+ } remote_const_void;
+ remote_const_void.cp = src + i;
+ dest[i] = _mm512_add_epi64(_mm512_stream_load_si512(remote_const_void.p), seed);
+ } }
+}
+
+#endif
+
+#if (XXH_VECTOR == XXH_AVX2) || defined(XXH_X86DISPATCH)
+
+#ifndef XXH_TARGET_AVX2
+# define XXH_TARGET_AVX2 /* disable attribute target */
+#endif
+
+XXH_FORCE_INLINE XXH_TARGET_AVX2 void
+XXH3_accumulate_512_avx2( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 31) == 0);
+ { XXH_ALIGN(32) __m256i* const xacc = (__m256i *) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
+ const __m256i* const xinput = (const __m256i *) input;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
+ const __m256i* const xsecret = (const __m256i *) secret;
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {
+ /* data_vec = xinput[i]; */
+ __m256i const data_vec = _mm256_loadu_si256 (xinput+i);
+ /* key_vec = xsecret[i]; */
+ __m256i const key_vec = _mm256_loadu_si256 (xsecret+i);
+ /* data_key = data_vec ^ key_vec; */
+ __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec);
+ /* data_key_lo = data_key >> 32; */
+ __m256i const data_key_lo = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
+ __m256i const product = _mm256_mul_epu32 (data_key, data_key_lo);
+ /* xacc[i] += swap(data_vec); */
+ __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2));
+ __m256i const sum = _mm256_add_epi64(xacc[i], data_swap);
+ /* xacc[i] += product; */
+ xacc[i] = _mm256_add_epi64(product, sum);
+ } }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_AVX2 void
+XXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 31) == 0);
+ { XXH_ALIGN(32) __m256i* const xacc = (__m256i*) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
+ const __m256i* const xsecret = (const __m256i *) secret;
+ const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1);
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {
+ /* xacc[i] ^= (xacc[i] >> 47) */
+ __m256i const acc_vec = xacc[i];
+ __m256i const shifted = _mm256_srli_epi64 (acc_vec, 47);
+ __m256i const data_vec = _mm256_xor_si256 (acc_vec, shifted);
+ /* xacc[i] ^= xsecret; */
+ __m256i const key_vec = _mm256_loadu_si256 (xsecret+i);
+ __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec);
+
+ /* xacc[i] *= XXH_PRIME32_1; */
+ __m256i const data_key_hi = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ __m256i const prod_lo = _mm256_mul_epu32 (data_key, prime32);
+ __m256i const prod_hi = _mm256_mul_epu32 (data_key_hi, prime32);
+ xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32));
+ }
+ }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0);
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6);
+ XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64);
+ (void)(&XXH_writeLE64);
+ XXH_PREFETCH(customSecret);
+ { __m256i const seed = _mm256_set_epi64x(-(xxh_i64)seed64, (xxh_i64)seed64, -(xxh_i64)seed64, (xxh_i64)seed64);
+
+ XXH_ALIGN(64) const __m256i* const src = (const __m256i*) XXH3_kSecret;
+ XXH_ALIGN(64) __m256i* dest = ( __m256i*) customSecret;
+
+# if defined(__GNUC__) || defined(__clang__)
+ /*
+ * On GCC & Clang, marking 'dest' as modified will cause the compiler:
+ * - do not extract the secret from sse registers in the internal loop
+ * - use less common registers, and avoid pushing these reg into stack
+ * The asm hack causes Clang to assume that XXH3_kSecretPtr aliases with
+ * customSecret, and on aarch64, this prevented LDP from merging two
+ * loads together for free. Putting the loads together before the stores
+ * properly generates LDP.
+ */
+ __asm__("" : "+r" (dest));
+# endif
+
+ /* GCC -O2 need unroll loop manually */
+ dest[0] = _mm256_add_epi64(_mm256_stream_load_si256(src+0), seed);
+ dest[1] = _mm256_add_epi64(_mm256_stream_load_si256(src+1), seed);
+ dest[2] = _mm256_add_epi64(_mm256_stream_load_si256(src+2), seed);
+ dest[3] = _mm256_add_epi64(_mm256_stream_load_si256(src+3), seed);
+ dest[4] = _mm256_add_epi64(_mm256_stream_load_si256(src+4), seed);
+ dest[5] = _mm256_add_epi64(_mm256_stream_load_si256(src+5), seed);
+ }
+}
+
+#endif
+
+#if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH)
+
+#ifndef XXH_TARGET_SSE2
+# define XXH_TARGET_SSE2 /* disable attribute target */
+#endif
+
+XXH_FORCE_INLINE XXH_TARGET_SSE2 void
+XXH3_accumulate_512_sse2( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ /* SSE2 is just a half-scale version of the AVX2 version. */
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+ { XXH_ALIGN(16) __m128i* const xacc = (__m128i *) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
+ const __m128i* const xinput = (const __m128i *) input;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
+ const __m128i* const xsecret = (const __m128i *) secret;
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {
+ /* data_vec = xinput[i]; */
+ __m128i const data_vec = _mm_loadu_si128 (xinput+i);
+ /* key_vec = xsecret[i]; */
+ __m128i const key_vec = _mm_loadu_si128 (xsecret+i);
+ /* data_key = data_vec ^ key_vec; */
+ __m128i const data_key = _mm_xor_si128 (data_vec, key_vec);
+ /* data_key_lo = data_key >> 32; */
+ __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
+ __m128i const product = _mm_mul_epu32 (data_key, data_key_lo);
+ /* xacc[i] += swap(data_vec); */
+ __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2));
+ __m128i const sum = _mm_add_epi64(xacc[i], data_swap);
+ /* xacc[i] += product; */
+ xacc[i] = _mm_add_epi64(product, sum);
+ } }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_SSE2 void
+XXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+ { XXH_ALIGN(16) __m128i* const xacc = (__m128i*) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
+ const __m128i* const xsecret = (const __m128i *) secret;
+ const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1);
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {
+ /* xacc[i] ^= (xacc[i] >> 47) */
+ __m128i const acc_vec = xacc[i];
+ __m128i const shifted = _mm_srli_epi64 (acc_vec, 47);
+ __m128i const data_vec = _mm_xor_si128 (acc_vec, shifted);
+ /* xacc[i] ^= xsecret[i]; */
+ __m128i const key_vec = _mm_loadu_si128 (xsecret+i);
+ __m128i const data_key = _mm_xor_si128 (data_vec, key_vec);
+
+ /* xacc[i] *= XXH_PRIME32_1; */
+ __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ __m128i const prod_lo = _mm_mul_epu32 (data_key, prime32);
+ __m128i const prod_hi = _mm_mul_epu32 (data_key_hi, prime32);
+ xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32));
+ }
+ }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);
+ (void)(&XXH_writeLE64);
+ { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i);
+
+# if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900
+ // MSVC 32bit mode does not support _mm_set_epi64x before 2015
+ XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, -(xxh_i64)seed64 };
+ __m128i const seed = _mm_load_si128((__m128i const*)seed64x2);
+# else
+ __m128i const seed = _mm_set_epi64x(-(xxh_i64)seed64, (xxh_i64)seed64);
+# endif
+ int i;
+
+ XXH_ALIGN(64) const float* const src = (float const*) XXH3_kSecret;
+ XXH_ALIGN(XXH_SEC_ALIGN) __m128i* dest = (__m128i*) customSecret;
+# if defined(__GNUC__) || defined(__clang__)
+ /*
+ * On GCC & Clang, marking 'dest' as modified will cause the compiler:
+ * - do not extract the secret from sse registers in the internal loop
+ * - use less common registers, and avoid pushing these reg into stack
+ */
+ __asm__("" : "+r" (dest));
+# endif
+
+ for (i=0; i < nbRounds; ++i) {
+ dest[i] = _mm_add_epi64(_mm_castps_si128(_mm_load_ps(src+i*4)), seed);
+ } }
+}
+
+#endif
+
+#if (XXH_VECTOR == XXH_NEON)
+
+XXH_FORCE_INLINE void
+XXH3_accumulate_512_neon( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+ {
+ XXH_ALIGN(16) uint64x2_t* const xacc = (uint64x2_t *) acc;
+ /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */
+ uint8_t const* const xinput = (const uint8_t *) input;
+ uint8_t const* const xsecret = (const uint8_t *) secret;
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN / sizeof(uint64x2_t); i++) {
+ /* data_vec = xinput[i]; */
+ uint8x16_t data_vec = vld1q_u8(xinput + (i * 16));
+ /* key_vec = xsecret[i]; */
+ uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16));
+ uint64x2_t data_key;
+ uint32x2_t data_key_lo, data_key_hi;
+ /* xacc[i] += swap(data_vec); */
+ uint64x2_t const data64 = vreinterpretq_u64_u8(data_vec);
+ uint64x2_t const swapped = vextq_u64(data64, data64, 1);
+ xacc[i] = vaddq_u64 (xacc[i], swapped);
+ /* data_key = data_vec ^ key_vec; */
+ data_key = vreinterpretq_u64_u8(veorq_u8(data_vec, key_vec));
+ /* data_key_lo = (uint32x2_t) (data_key & 0xFFFFFFFF);
+ * data_key_hi = (uint32x2_t) (data_key >> 32);
+ * data_key = UNDEFINED; */
+ XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
+ /* xacc[i] += (uint64x2_t) data_key_lo * (uint64x2_t) data_key_hi; */
+ xacc[i] = vmlal_u32 (xacc[i], data_key_lo, data_key_hi);
+
+ }
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+
+ { uint64x2_t* xacc = (uint64x2_t*) acc;
+ uint8_t const* xsecret = (uint8_t const*) secret;
+ uint32x2_t prime = vdup_n_u32 (XXH_PRIME32_1);
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(uint64x2_t); i++) {
+ /* xacc[i] ^= (xacc[i] >> 47); */
+ uint64x2_t acc_vec = xacc[i];
+ uint64x2_t shifted = vshrq_n_u64 (acc_vec, 47);
+ uint64x2_t data_vec = veorq_u64 (acc_vec, shifted);
+
+ /* xacc[i] ^= xsecret[i]; */
+ uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16));
+ uint64x2_t data_key = veorq_u64(data_vec, vreinterpretq_u64_u8(key_vec));
+
+ /* xacc[i] *= XXH_PRIME32_1 */
+ uint32x2_t data_key_lo, data_key_hi;
+ /* data_key_lo = (uint32x2_t) (xacc[i] & 0xFFFFFFFF);
+ * data_key_hi = (uint32x2_t) (xacc[i] >> 32);
+ * xacc[i] = UNDEFINED; */
+ XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
+ { /*
+ * prod_hi = (data_key >> 32) * XXH_PRIME32_1;
+ *
+ * Avoid vmul_u32 + vshll_n_u32 since Clang 6 and 7 will
+ * incorrectly "optimize" this:
+ * tmp = vmul_u32(vmovn_u64(a), vmovn_u64(b));
+ * shifted = vshll_n_u32(tmp, 32);
+ * to this:
+ * tmp = "vmulq_u64"(a, b); // no such thing!
+ * shifted = vshlq_n_u64(tmp, 32);
+ *
+ * However, unlike SSE, Clang lacks a 64-bit multiply routine
+ * for NEON, and it scalarizes two 64-bit multiplies instead.
+ *
+ * vmull_u32 has the same timing as vmul_u32, and it avoids
+ * this bug completely.
+ * See https://bugs.llvm.org/show_bug.cgi?id=39967
+ */
+ uint64x2_t prod_hi = vmull_u32 (data_key_hi, prime);
+ /* xacc[i] = prod_hi << 32; */
+ xacc[i] = vshlq_n_u64(prod_hi, 32);
+ /* xacc[i] += (prod_hi & 0xFFFFFFFF) * XXH_PRIME32_1; */
+ xacc[i] = vmlal_u32(xacc[i], data_key_lo, prime);
+ }
+ } }
+}
+
+#endif
+
+#if (XXH_VECTOR == XXH_VSX)
+
+XXH_FORCE_INLINE void
+XXH3_accumulate_512_vsx( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ xxh_u64x2* const xacc = (xxh_u64x2*) acc; /* presumed aligned */
+ xxh_u64x2 const* const xinput = (xxh_u64x2 const*) input; /* no alignment restriction */
+ xxh_u64x2 const* const xsecret = (xxh_u64x2 const*) secret; /* no alignment restriction */
+ xxh_u64x2 const v32 = { 32, 32 };
+ size_t i;
+ for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {
+ /* data_vec = xinput[i]; */
+ xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + i);
+ /* key_vec = xsecret[i]; */
+ xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i);
+ xxh_u64x2 const data_key = data_vec ^ key_vec;
+ /* shuffled = (data_key << 32) | (data_key >> 32); */
+ xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32);
+ /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */
+ xxh_u64x2 const product = XXH_vec_mulo((xxh_u32x4)data_key, shuffled);
+ xacc[i] += product;
+
+ /* swap high and low halves */
+#ifdef __s390x__
+ xacc[i] += vec_permi(data_vec, data_vec, 2);
+#else
+ xacc[i] += vec_xxpermdi(data_vec, data_vec, 2);
+#endif
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+
+ { xxh_u64x2* const xacc = (xxh_u64x2*) acc;
+ const xxh_u64x2* const xsecret = (const xxh_u64x2*) secret;
+ /* constants */
+ xxh_u64x2 const v32 = { 32, 32 };
+ xxh_u64x2 const v47 = { 47, 47 };
+ xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 };
+ size_t i;
+ for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {
+ /* xacc[i] ^= (xacc[i] >> 47); */
+ xxh_u64x2 const acc_vec = xacc[i];
+ xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47);
+
+ /* xacc[i] ^= xsecret[i]; */
+ xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i);
+ xxh_u64x2 const data_key = data_vec ^ key_vec;
+
+ /* xacc[i] *= XXH_PRIME32_1 */
+ /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF); */
+ xxh_u64x2 const prod_even = XXH_vec_mule((xxh_u32x4)data_key, prime);
+ /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32); */
+ xxh_u64x2 const prod_odd = XXH_vec_mulo((xxh_u32x4)data_key, prime);
+ xacc[i] = prod_odd + (prod_even << v32);
+ } }
+}
+
+#endif
+
+/* scalar variants - universal */
+
+XXH_FORCE_INLINE void
+XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */
+ const xxh_u8* const xinput = (const xxh_u8*) input; /* no alignment restriction */
+ const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */
+ size_t i;
+ XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0);
+ for (i=0; i < XXH_ACC_NB; i++) {
+ xxh_u64 const data_val = XXH_readLE64(xinput + 8*i);
+ xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + i*8);
+ xacc[i ^ 1] += data_val; /* swap adjacent lanes */
+ xacc[i] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32);
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */
+ const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */
+ size_t i;
+ XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0);
+ for (i=0; i < XXH_ACC_NB; i++) {
+ xxh_u64 const key64 = XXH_readLE64(xsecret + 8*i);
+ xxh_u64 acc64 = xacc[i];
+ acc64 = XXH_xorshift64(acc64, 47);
+ acc64 ^= key64;
+ acc64 *= XXH_PRIME32_1;
+ xacc[i] = acc64;
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ /*
+ * We need a separate pointer for the hack below,
+ * which requires a non-const pointer.
+ * Any decent compiler will optimize this out otherwise.
+ */
+ const xxh_u8* kSecretPtr = XXH3_kSecret;
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);
+
+#if defined(__clang__) && defined(__aarch64__)
+ /*
+ * UGLY HACK:
+ * Clang generates a bunch of MOV/MOVK pairs for aarch64, and they are
+ * placed sequentially, in order, at the top of the unrolled loop.
+ *
+ * While MOVK is great for generating constants (2 cycles for a 64-bit
+ * constant compared to 4 cycles for LDR), long MOVK chains stall the
+ * integer pipelines:
+ * I L S
+ * MOVK
+ * MOVK
+ * MOVK
+ * MOVK
+ * ADD
+ * SUB STR
+ * STR
+ * By forcing loads from memory (as the asm line causes Clang to assume
+ * that XXH3_kSecretPtr has been changed), the pipelines are used more
+ * efficiently:
+ * I L S
+ * LDR
+ * ADD LDR
+ * SUB STR
+ * STR
+ * XXH3_64bits_withSeed, len == 256, Snapdragon 835
+ * without hack: 2654.4 MB/s
+ * with hack: 3202.9 MB/s
+ */
+ __asm__("" : "+r" (kSecretPtr));
+#endif
+ /*
+ * Note: in debug mode, this overrides the asm optimization
+ * and Clang will emit MOVK chains again.
+ */
+ XXH_ASSERT(kSecretPtr == XXH3_kSecret);
+
+ { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16;
+ int i;
+ for (i=0; i < nbRounds; i++) {
+ /*
+ * The asm hack causes Clang to assume that kSecretPtr aliases with
+ * customSecret, and on aarch64, this prevented LDP from merging two
+ * loads together for free. Putting the loads together before the stores
+ * properly generates LDP.
+ */
+ xxh_u64 lo = XXH_readLE64(kSecretPtr + 16*i) + seed64;
+ xxh_u64 hi = XXH_readLE64(kSecretPtr + 16*i + 8) - seed64;
+ XXH_writeLE64((xxh_u8*)customSecret + 16*i, lo);
+ XXH_writeLE64((xxh_u8*)customSecret + 16*i + 8, hi);
+ } }
+}
+
+
+typedef void (*XXH3_f_accumulate_512)(void* XXH_RESTRICT, const void*, const void*);
+typedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*);
+typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64);
+
+
+#if (XXH_VECTOR == XXH_AVX512)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_avx512
+#define XXH3_scrambleAcc XXH3_scrambleAcc_avx512
+#define XXH3_initCustomSecret XXH3_initCustomSecret_avx512
+
+#elif (XXH_VECTOR == XXH_AVX2)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_avx2
+#define XXH3_scrambleAcc XXH3_scrambleAcc_avx2
+#define XXH3_initCustomSecret XXH3_initCustomSecret_avx2
+
+#elif (XXH_VECTOR == XXH_SSE2)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_sse2
+#define XXH3_scrambleAcc XXH3_scrambleAcc_sse2
+#define XXH3_initCustomSecret XXH3_initCustomSecret_sse2
+
+#elif (XXH_VECTOR == XXH_NEON)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_neon
+#define XXH3_scrambleAcc XXH3_scrambleAcc_neon
+#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar
+
+#elif (XXH_VECTOR == XXH_VSX)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_vsx
+#define XXH3_scrambleAcc XXH3_scrambleAcc_vsx
+#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar
+
+#else /* scalar */
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_scalar
+#define XXH3_scrambleAcc XXH3_scrambleAcc_scalar
+#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar
+
+#endif
+
+
+
+#ifndef XXH_PREFETCH_DIST
+# ifdef __clang__
+# define XXH_PREFETCH_DIST 320
+# else
+# if (XXH_VECTOR == XXH_AVX512)
+# define XXH_PREFETCH_DIST 512
+# else
+# define XXH_PREFETCH_DIST 384
+# endif
+# endif /* __clang__ */
+#endif /* XXH_PREFETCH_DIST */
+
+/*
+ * XXH3_accumulate()
+ * Loops over XXH3_accumulate_512().
+ * Assumption: nbStripes will not overflow the secret size
+ */
+XXH_FORCE_INLINE void
+XXH3_accumulate( xxh_u64* XXH_RESTRICT acc,
+ const xxh_u8* XXH_RESTRICT input,
+ const xxh_u8* XXH_RESTRICT secret,
+ size_t nbStripes,
+ XXH3_f_accumulate_512 f_acc512)
+{
+ size_t n;
+ for (n = 0; n < nbStripes; n++ ) {
+ const xxh_u8* const in = input + n*XXH_STRIPE_LEN;
+ XXH_PREFETCH(in + XXH_PREFETCH_DIST);
+ f_acc512(acc,
+ in,
+ secret + n*XXH_SECRET_CONSUME_RATE);
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc,
+ const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE;
+ size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock;
+ size_t const nb_blocks = (len - 1) / block_len;
+
+ size_t n;
+
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
+
+ for (n = 0; n < nb_blocks; n++) {
+ XXH3_accumulate(acc, input + n*block_len, secret, nbStripesPerBlock, f_acc512);
+ f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN);
+ }
+
+ /* last partial block */
+ XXH_ASSERT(len > XXH_STRIPE_LEN);
+ { size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN;
+ XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE));
+ XXH3_accumulate(acc, input + nb_blocks*block_len, secret, nbStripes, f_acc512);
+
+ /* last stripe */
+ { const xxh_u8* const p = input + len - XXH_STRIPE_LEN;
+#define XXH_SECRET_LASTACC_START 7 /* not aligned on 8, last secret is different from acc & scrambler */
+ f_acc512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START);
+ } }
+}
+
+XXH_FORCE_INLINE xxh_u64
+XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret)
+{
+ return XXH3_mul128_fold64(
+ acc[0] ^ XXH_readLE64(secret),
+ acc[1] ^ XXH_readLE64(secret+8) );
+}
+
+static XXH64_hash_t
+XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start)
+{
+ xxh_u64 result64 = start;
+ size_t i = 0;
+
+ for (i = 0; i < 4; i++) {
+ result64 += XXH3_mix2Accs(acc+2*i, secret + 16*i);
+#if defined(__clang__) /* Clang */ \
+ && (defined(__arm__) || defined(__thumb__)) /* ARMv7 */ \
+ && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \
+ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */
+ /*
+ * UGLY HACK:
+ * Prevent autovectorization on Clang ARMv7-a. Exact same problem as
+ * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b.
+ * XXH3_64bits, len == 256, Snapdragon 835:
+ * without hack: 2063.7 MB/s
+ * with hack: 2560.7 MB/s
+ */
+ __asm__("" : "+r" (result64));
+#endif
+ }
+
+ return XXH3_avalanche(result64);
+}
+
+#define XXH3_INIT_ACC { XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, \
+ XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 }
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len,
+ const void* XXH_RESTRICT secret, size_t secretSize,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;
+
+ XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc512, f_scramble);
+
+ /* converge into final hash */
+ XXH_STATIC_ASSERT(sizeof(acc) == 64);
+ /* do not align on 8, so that the secret is different from the accumulator */
+#define XXH_SECRET_MERGEACCS_START 11
+ XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
+ return XXH3_mergeAccs(acc, (const xxh_u8*)secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1);
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH64_hash_t
+XXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64;
+ return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ * Since the function is not inlined, the compiler may not be able to understand that,
+ * in some scenarios, its `secret` argument is actually a compile time constant.
+ * This variant enforces that the compiler can detect that,
+ * and uses this opportunity to streamline the generated code for better performance.
+ */
+XXH_NO_INLINE XXH64_hash_t
+XXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64; (void)secret; (void)secretLen;
+ return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+/*
+ * XXH3_hashLong_64b_withSeed():
+ * Generate a custom key based on alteration of default XXH3_kSecret with the seed,
+ * and then use this key for long mode hashing.
+ *
+ * This operation is decently fast but nonetheless costs a little bit of time.
+ * Try to avoid it whenever possible (typically when seed==0).
+ *
+ * It's important for performance that XXH3_hashLong is not inlined. Not sure
+ * why (uop cache maybe?), but the difference is large and easily measurable.
+ */
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len,
+ XXH64_hash_t seed,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble,
+ XXH3_f_initCustomSecret f_initSec)
+{
+ if (seed == 0)
+ return XXH3_hashLong_64b_internal(input, len,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ f_acc512, f_scramble);
+ { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
+ f_initSec(secret, seed);
+ return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret),
+ f_acc512, f_scramble);
+ }
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH64_hash_t
+XXH3_hashLong_64b_withSeed(const void* input, size_t len,
+ XXH64_hash_t seed, const xxh_u8* secret, size_t secretLen)
+{
+ (void)secret; (void)secretLen;
+ return XXH3_hashLong_64b_withSeed_internal(input, len, seed,
+ XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret);
+}
+
+
+typedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t,
+ XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t);
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,
+ XXH3_hashLong64_f f_hashLong)
+{
+ XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);
+ /*
+ * If an action is to be taken if `secretLen` condition is not respected,
+ * it should be done here.
+ * For now, it's a contract pre-condition.
+ * Adding a check and a branch here would cost performance at every hash.
+ * Also, note that function signature doesn't offer room to return an error.
+ */
+ if (len <= 16)
+ return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);
+ if (len <= 128)
+ return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ if (len <= XXH3_MIDSIZE_MAX)
+ return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen);
+}
+
+
+/* === Public entry point === */
+
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* input, size_t len)
+{
+ return XXH3_64bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default);
+}
+
+XXH_PUBLIC_API XXH64_hash_t
+XXH3_64bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
+{
+ return XXH3_64bits_internal(input, len, 0, secret, secretSize, XXH3_hashLong_64b_withSecret);
+}
+
+XXH_PUBLIC_API XXH64_hash_t
+XXH3_64bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
+{
+ return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed);
+}
+
+
+/* === XXH3 streaming === */
+
+/*
+ * Malloc's a pointer that is always aligned to align.
+ *
+ * This must be freed with `XXH_alignedFree()`.
+ *
+ * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte
+ * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2
+ * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON.
+ *
+ * This underalignment previously caused a rather obvious crash which went
+ * completely unnoticed due to XXH3_createState() not actually being tested.
+ * Credit to RedSpah for noticing this bug.
+ *
+ * The alignment is done manually: Functions like posix_memalign or _mm_malloc
+ * are avoided: To maintain portability, we would have to write a fallback
+ * like this anyways, and besides, testing for the existence of library
+ * functions without relying on external build tools is impossible.
+ *
+ * The method is simple: Overallocate, manually align, and store the offset
+ * to the original behind the returned pointer.
+ *
+ * Align must be a power of 2 and 8 <= align <= 128.
+ */
+static void* XXH_alignedMalloc(size_t s, size_t align)
+{
+ XXH_ASSERT(align <= 128 && align >= 8); /* range check */
+ XXH_ASSERT((align & (align-1)) == 0); /* power of 2 */
+ XXH_ASSERT(s != 0 && s < (s + align)); /* empty/overflow */
+ { /* Overallocate to make room for manual realignment and an offset byte */
+ xxh_u8* base = (xxh_u8*)XXH_malloc(s + align);
+ if (base != NULL) {
+ /*
+ * Get the offset needed to align this pointer.
+ *
+ * Even if the returned pointer is aligned, there will always be
+ * at least one byte to store the offset to the original pointer.
+ */
+ size_t offset = align - ((size_t)base & (align - 1)); /* base % align */
+ /* Add the offset for the now-aligned pointer */
+ xxh_u8* ptr = base + offset;
+
+ XXH_ASSERT((size_t)ptr % align == 0);
+
+ /* Store the offset immediately before the returned pointer. */
+ ptr[-1] = (xxh_u8)offset;
+ return ptr;
+ }
+ return NULL;
+ }
+}
+/*
+ * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass
+ * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout.
+ */
+static void XXH_alignedFree(void* p)
+{
+ if (p != NULL) {
+ xxh_u8* ptr = (xxh_u8*)p;
+ /* Get the offset byte we added in XXH_malloc. */
+ xxh_u8 offset = ptr[-1];
+ /* Free the original malloc'd pointer */
+ xxh_u8* base = ptr - offset;
+ XXH_free(base);
+ }
+}
+XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void)
+{
+ XXH3_state_t* const state = (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64);
+ if (state==NULL) return NULL;
+ XXH3_INITSTATE(state);
+ return state;
+}
+
+XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr)
+{
+ XXH_alignedFree(statePtr);
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API void
+XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state)
+{
+ memcpy(dst_state, src_state, sizeof(*dst_state));
+}
+
+static void
+XXH3_64bits_reset_internal(XXH3_state_t* statePtr,
+ XXH64_hash_t seed,
+ const void* secret, size_t secretSize)
+{
+ size_t const initStart = offsetof(XXH3_state_t, bufferedSize);
+ size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart;
+ XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart);
+ XXH_ASSERT(statePtr != NULL);
+ /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */
+ memset((char*)statePtr + initStart, 0, initLength);
+ statePtr->acc[0] = XXH_PRIME32_3;
+ statePtr->acc[1] = XXH_PRIME64_1;
+ statePtr->acc[2] = XXH_PRIME64_2;
+ statePtr->acc[3] = XXH_PRIME64_3;
+ statePtr->acc[4] = XXH_PRIME64_4;
+ statePtr->acc[5] = XXH_PRIME32_2;
+ statePtr->acc[6] = XXH_PRIME64_5;
+ statePtr->acc[7] = XXH_PRIME32_1;
+ statePtr->seed = seed;
+ statePtr->extSecret = (const unsigned char*)secret;
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
+ statePtr->secretLimit = secretSize - XXH_STRIPE_LEN;
+ statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset(XXH3_state_t* statePtr)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ XXH3_64bits_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE);
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ XXH3_64bits_reset_internal(statePtr, 0, secret, secretSize);
+ if (secret == NULL) return XXH_ERROR;
+ if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ if (seed==0) return XXH3_64bits_reset(statePtr);
+ if (seed != statePtr->seed) XXH3_initCustomSecret(statePtr->customSecret, seed);
+ XXH3_64bits_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE);
+ return XXH_OK;
+}
+
+/* Note : when XXH3_consumeStripes() is invoked,
+ * there must be a guarantee that at least one more byte must be consumed from input
+ * so that the function can blindly consume all stripes using the "normal" secret segment */
+XXH_FORCE_INLINE void
+XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc,
+ size_t* XXH_RESTRICT nbStripesSoFarPtr, size_t nbStripesPerBlock,
+ const xxh_u8* XXH_RESTRICT input, size_t nbStripes,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretLimit,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ XXH_ASSERT(nbStripes <= nbStripesPerBlock); /* can handle max 1 scramble per invocation */
+ XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock);
+ if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) {
+ /* need a scrambling operation */
+ size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr;
+ size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock;
+ XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripesToEndofBlock, f_acc512);
+ f_scramble(acc, secret + secretLimit);
+ XXH3_accumulate(acc, input + nbStripesToEndofBlock * XXH_STRIPE_LEN, secret, nbStripesAfterBlock, f_acc512);
+ *nbStripesSoFarPtr = nbStripesAfterBlock;
+ } else {
+ XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripes, f_acc512);
+ *nbStripesSoFarPtr += nbStripes;
+ }
+}
+
+/*
+ * Both XXH3_64bits_update and XXH3_128bits_update use this routine.
+ */
+XXH_FORCE_INLINE XXH_errorcode
+XXH3_update(XXH3_state_t* state,
+ const xxh_u8* input, size_t len,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ if (input==NULL)
+#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)
+ return XXH_OK;
+#else
+ return XXH_ERROR;
+#endif
+
+ { const xxh_u8* const bEnd = input + len;
+ const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
+ state->totalLen += len;
+
+ if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) { /* fill in tmp buffer */
+ XXH_memcpy(state->buffer + state->bufferedSize, input, len);
+ state->bufferedSize += (XXH32_hash_t)len;
+ return XXH_OK;
+ }
+ /* total input is now > XXH3_INTERNALBUFFER_SIZE */
+
+ #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN)
+ XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0); /* clean multiple */
+
+ /*
+ * Internal buffer is partially filled (always, except at beginning)
+ * Complete it, then consume it.
+ */
+ if (state->bufferedSize) {
+ size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize;
+ XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize);
+ input += loadSize;
+ XXH3_consumeStripes(state->acc,
+ &state->nbStripesSoFar, state->nbStripesPerBlock,
+ state->buffer, XXH3_INTERNALBUFFER_STRIPES,
+ secret, state->secretLimit,
+ f_acc512, f_scramble);
+ state->bufferedSize = 0;
+ }
+ XXH_ASSERT(input < bEnd);
+
+ /* Consume input by a multiple of internal buffer size */
+ if (input+XXH3_INTERNALBUFFER_SIZE < bEnd) {
+ const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE;
+ do {
+ XXH3_consumeStripes(state->acc,
+ &state->nbStripesSoFar, state->nbStripesPerBlock,
+ input, XXH3_INTERNALBUFFER_STRIPES,
+ secret, state->secretLimit,
+ f_acc512, f_scramble);
+ input += XXH3_INTERNALBUFFER_SIZE;
+ } while (input<limit);
+ /* for last partial stripe */
+ memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN);
+ }
+ XXH_ASSERT(input < bEnd);
+
+ /* Some remaining input (always) : buffer it */
+ XXH_memcpy(state->buffer, input, (size_t)(bEnd-input));
+ state->bufferedSize = (XXH32_hash_t)(bEnd-input);
+ }
+
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len)
+{
+ return XXH3_update(state, (const xxh_u8*)input, len,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+
+XXH_FORCE_INLINE void
+XXH3_digest_long (XXH64_hash_t* acc,
+ const XXH3_state_t* state,
+ const unsigned char* secret)
+{
+ /*
+ * Digest on a local copy. This way, the state remains unaltered, and it can
+ * continue ingesting more input afterwards.
+ */
+ memcpy(acc, state->acc, sizeof(state->acc));
+ if (state->bufferedSize >= XXH_STRIPE_LEN) {
+ size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN;
+ size_t nbStripesSoFar = state->nbStripesSoFar;
+ XXH3_consumeStripes(acc,
+ &nbStripesSoFar, state->nbStripesPerBlock,
+ state->buffer, nbStripes,
+ secret, state->secretLimit,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+ /* last stripe */
+ XXH3_accumulate_512(acc,
+ state->buffer + state->bufferedSize - XXH_STRIPE_LEN,
+ secret + state->secretLimit - XXH_SECRET_LASTACC_START);
+ } else { /* bufferedSize < XXH_STRIPE_LEN */
+ xxh_u8 lastStripe[XXH_STRIPE_LEN];
+ size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize;
+ XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */
+ memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize);
+ memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize);
+ XXH3_accumulate_512(acc,
+ lastStripe,
+ secret + state->secretLimit - XXH_SECRET_LASTACC_START);
+ }
+}
+
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* state)
+{
+ const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
+ if (state->totalLen > XXH3_MIDSIZE_MAX) {
+ XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];
+ XXH3_digest_long(acc, state, secret);
+ return XXH3_mergeAccs(acc,
+ secret + XXH_SECRET_MERGEACCS_START,
+ (xxh_u64)state->totalLen * XXH_PRIME64_1);
+ }
+ /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */
+ if (state->seed)
+ return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
+ return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen),
+ secret, state->secretLimit + XXH_STRIPE_LEN);
+}
+
+
+#define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x))
+
+XXH_PUBLIC_API void
+XXH3_generateSecret(void* secretBuffer, const void* customSeed, size_t customSeedSize)
+{
+ XXH_ASSERT(secretBuffer != NULL);
+ if (customSeedSize == 0) {
+ memcpy(secretBuffer, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE);
+ return;
+ }
+ XXH_ASSERT(customSeed != NULL);
+
+ { size_t const segmentSize = sizeof(XXH128_hash_t);
+ size_t const nbSegments = XXH_SECRET_DEFAULT_SIZE / segmentSize;
+ XXH128_canonical_t scrambler;
+ XXH64_hash_t seeds[12];
+ size_t segnb;
+ XXH_ASSERT(nbSegments == 12);
+ XXH_ASSERT(segmentSize * nbSegments == XXH_SECRET_DEFAULT_SIZE); /* exact multiple */
+ XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0));
+
+ /*
+ * Copy customSeed to seeds[], truncating or repeating as necessary.
+ */
+ { size_t toFill = XXH_MIN(customSeedSize, sizeof(seeds));
+ size_t filled = toFill;
+ memcpy(seeds, customSeed, toFill);
+ while (filled < sizeof(seeds)) {
+ toFill = XXH_MIN(filled, sizeof(seeds) - filled);
+ memcpy((char*)seeds + filled, seeds, toFill);
+ filled += toFill;
+ } }
+
+ /* generate secret */
+ memcpy(secretBuffer, &scrambler, sizeof(scrambler));
+ for (segnb=1; segnb < nbSegments; segnb++) {
+ size_t const segmentStart = segnb * segmentSize;
+ XXH128_canonical_t segment;
+ XXH128_canonicalFromHash(&segment,
+ XXH128(&scrambler, sizeof(scrambler), XXH_readLE64(seeds + segnb) + segnb) );
+ memcpy((char*)secretBuffer + segmentStart, &segment, sizeof(segment));
+ } }
+}
+
+
+/* ==========================================
+ * XXH3 128 bits (a.k.a XXH128)
+ * ==========================================
+ * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant,
+ * even without counting the significantly larger output size.
+ *
+ * For example, extra steps are taken to avoid the seed-dependent collisions
+ * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B).
+ *
+ * This strength naturally comes at the cost of some speed, especially on short
+ * lengths. Note that longer hashes are about as fast as the 64-bit version
+ * due to it using only a slight modification of the 64-bit loop.
+ *
+ * XXH128 is also more oriented towards 64-bit machines. It is still extremely
+ * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64).
+ */
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ /* A doubled version of 1to3_64b with different constants. */
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(1 <= len && len <= 3);
+ XXH_ASSERT(secret != NULL);
+ /*
+ * len = 1: combinedl = { input[0], 0x01, input[0], input[0] }
+ * len = 2: combinedl = { input[1], 0x02, input[0], input[1] }
+ * len = 3: combinedl = { input[2], 0x03, input[0], input[1] }
+ */
+ { xxh_u8 const c1 = input[0];
+ xxh_u8 const c2 = input[len >> 1];
+ xxh_u8 const c3 = input[len - 1];
+ xxh_u32 const combinedl = ((xxh_u32)c1 <<16) | ((xxh_u32)c2 << 24)
+ | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8);
+ xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13);
+ xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
+ xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed;
+ xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl;
+ xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph;
+ XXH128_hash_t h128;
+ h128.low64 = XXH64_avalanche(keyed_lo);
+ h128.high64 = XXH64_avalanche(keyed_hi);
+ return h128;
+ }
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(4 <= len && len <= 8);
+ seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
+ { xxh_u32 const input_lo = XXH_readLE32(input);
+ xxh_u32 const input_hi = XXH_readLE32(input + len - 4);
+ xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32);
+ xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed;
+ xxh_u64 const keyed = input_64 ^ bitflip;
+
+ /* Shift len to the left to ensure it is even, this avoids even multiplies. */
+ XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2));
+
+ m128.high64 += (m128.low64 << 1);
+ m128.low64 ^= (m128.high64 >> 3);
+
+ m128.low64 = XXH_xorshift64(m128.low64, 35);
+ m128.low64 *= 0x9FB21C651E98DF25ULL;
+ m128.low64 = XXH_xorshift64(m128.low64, 28);
+ m128.high64 = XXH3_avalanche(m128.high64);
+ return m128;
+ }
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(9 <= len && len <= 16);
+ { xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed;
+ xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed;
+ xxh_u64 const input_lo = XXH_readLE64(input);
+ xxh_u64 input_hi = XXH_readLE64(input + len - 8);
+ XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1);
+ /*
+ * Put len in the middle of m128 to ensure that the length gets mixed to
+ * both the low and high bits in the 128x64 multiply below.
+ */
+ m128.low64 += (xxh_u64)(len - 1) << 54;
+ input_hi ^= bitfliph;
+ /*
+ * Add the high 32 bits of input_hi to the high 32 bits of m128, then
+ * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to
+ * the high 64 bits of m128.
+ *
+ * The best approach to this operation is different on 32-bit and 64-bit.
+ */
+ if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */
+ /*
+ * 32-bit optimized version, which is more readable.
+ *
+ * On 32-bit, it removes an ADC and delays a dependency between the two
+ * halves of m128.high64, but it generates an extra mask on 64-bit.
+ */
+ m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2);
+ } else {
+ /*
+ * 64-bit optimized (albeit more confusing) version.
+ *
+ * Uses some properties of addition and multiplication to remove the mask:
+ *
+ * Let:
+ * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF)
+ * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000)
+ * c = XXH_PRIME32_2
+ *
+ * a + (b * c)
+ * Inverse Property: x + y - x == y
+ * a + (b * (1 + c - 1))
+ * Distributive Property: x * (y + z) == (x * y) + (x * z)
+ * a + (b * 1) + (b * (c - 1))
+ * Identity Property: x * 1 == x
+ * a + b + (b * (c - 1))
+ *
+ * Substitute a, b, and c:
+ * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))
+ *
+ * Since input_hi.hi + input_hi.lo == input_hi, we get this:
+ * input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))
+ */
+ m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1);
+ }
+ /* m128 ^= XXH_swap64(m128 >> 64); */
+ m128.low64 ^= XXH_swap64(m128.high64);
+
+ { /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */
+ XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2);
+ h128.high64 += m128.high64 * XXH_PRIME64_2;
+
+ h128.low64 = XXH3_avalanche(h128.low64);
+ h128.high64 = XXH3_avalanche(h128.high64);
+ return h128;
+ } }
+}
+
+/*
+ * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN
+ */
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(len <= 16);
+ { if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed);
+ if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed);
+ if (len) return XXH3_len_1to3_128b(input, len, secret, seed);
+ { XXH128_hash_t h128;
+ xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72);
+ xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88);
+ h128.low64 = XXH64_avalanche(seed ^ bitflipl);
+ h128.high64 = XXH64_avalanche( seed ^ bitfliph);
+ return h128;
+ } }
+}
+
+/*
+ * A bit slower than XXH3_mix16B, but handles multiply by zero better.
+ */
+XXH_FORCE_INLINE XXH128_hash_t
+XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2,
+ const xxh_u8* secret, XXH64_hash_t seed)
+{
+ acc.low64 += XXH3_mix16B (input_1, secret+0, seed);
+ acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8);
+ acc.high64 += XXH3_mix16B (input_2, secret+16, seed);
+ acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8);
+ return acc;
+}
+
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(16 < len && len <= 128);
+
+ { XXH128_hash_t acc;
+ acc.low64 = len * XXH_PRIME64_1;
+ acc.high64 = 0;
+ if (len > 32) {
+ if (len > 64) {
+ if (len > 96) {
+ acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed);
+ }
+ acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed);
+ }
+ acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed);
+ }
+ acc = XXH128_mix32B(acc, input, input+len-16, secret, seed);
+ { XXH128_hash_t h128;
+ h128.low64 = acc.low64 + acc.high64;
+ h128.high64 = (acc.low64 * XXH_PRIME64_1)
+ + (acc.high64 * XXH_PRIME64_4)
+ + ((len - seed) * XXH_PRIME64_2);
+ h128.low64 = XXH3_avalanche(h128.low64);
+ h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);
+ return h128;
+ }
+ }
+}
+
+XXH_NO_INLINE XXH128_hash_t
+XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);
+
+ { XXH128_hash_t acc;
+ int const nbRounds = (int)len / 32;
+ int i;
+ acc.low64 = len * XXH_PRIME64_1;
+ acc.high64 = 0;
+ for (i=0; i<4; i++) {
+ acc = XXH128_mix32B(acc,
+ input + (32 * i),
+ input + (32 * i) + 16,
+ secret + (32 * i),
+ seed);
+ }
+ acc.low64 = XXH3_avalanche(acc.low64);
+ acc.high64 = XXH3_avalanche(acc.high64);
+ XXH_ASSERT(nbRounds >= 4);
+ for (i=4 ; i < nbRounds; i++) {
+ acc = XXH128_mix32B(acc,
+ input + (32 * i),
+ input + (32 * i) + 16,
+ secret + XXH3_MIDSIZE_STARTOFFSET + (32 * (i - 4)),
+ seed);
+ }
+ /* last bytes */
+ acc = XXH128_mix32B(acc,
+ input + len - 16,
+ input + len - 32,
+ secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16,
+ 0ULL - seed);
+
+ { XXH128_hash_t h128;
+ h128.low64 = acc.low64 + acc.high64;
+ h128.high64 = (acc.low64 * XXH_PRIME64_1)
+ + (acc.high64 * XXH_PRIME64_4)
+ + ((len - seed) * XXH_PRIME64_2);
+ h128.low64 = XXH3_avalanche(h128.low64);
+ h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);
+ return h128;
+ }
+ }
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;
+
+ XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc512, f_scramble);
+
+ /* converge into final hash */
+ XXH_STATIC_ASSERT(sizeof(acc) == 64);
+ XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
+ { XXH128_hash_t h128;
+ h128.low64 = XXH3_mergeAccs(acc,
+ secret + XXH_SECRET_MERGEACCS_START,
+ (xxh_u64)len * XXH_PRIME64_1);
+ h128.high64 = XXH3_mergeAccs(acc,
+ secret + secretSize
+ - sizeof(acc) - XXH_SECRET_MERGEACCS_START,
+ ~((xxh_u64)len * XXH_PRIME64_2));
+ return h128;
+ }
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH128_hash_t
+XXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64,
+ const void* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64; (void)secret; (void)secretLen;
+ return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret),
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH128_hash_t
+XXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64,
+ const void* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64;
+ return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble,
+ XXH3_f_initCustomSecret f_initSec)
+{
+ if (seed64 == 0)
+ return XXH3_hashLong_128b_internal(input, len,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ f_acc512, f_scramble);
+ { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
+ f_initSec(secret, seed64);
+ return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret),
+ f_acc512, f_scramble);
+ }
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH128_hash_t
+XXH3_hashLong_128b_withSeed(const void* input, size_t len,
+ XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)secret; (void)secretLen;
+ return XXH3_hashLong_128b_withSeed_internal(input, len, seed64,
+ XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret);
+}
+
+typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t,
+ XXH64_hash_t, const void* XXH_RESTRICT, size_t);
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_128bits_internal(const void* input, size_t len,
+ XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,
+ XXH3_hashLong128_f f_hl128)
+{
+ XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);
+ /*
+ * If an action is to be taken if `secret` conditions are not respected,
+ * it should be done here.
+ * For now, it's a contract pre-condition.
+ * Adding a check and a branch here would cost performance at every hash.
+ */
+ if (len <= 16)
+ return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);
+ if (len <= 128)
+ return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ if (len <= XXH3_MIDSIZE_MAX)
+ return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ return f_hl128(input, len, seed64, secret, secretLen);
+}
+
+
+/* === Public XXH128 API === */
+
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* input, size_t len)
+{
+ return XXH3_128bits_internal(input, len, 0,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ XXH3_hashLong_128b_default);
+}
+
+XXH_PUBLIC_API XXH128_hash_t
+XXH3_128bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
+{
+ return XXH3_128bits_internal(input, len, 0,
+ (const xxh_u8*)secret, secretSize,
+ XXH3_hashLong_128b_withSecret);
+}
+
+XXH_PUBLIC_API XXH128_hash_t
+XXH3_128bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
+{
+ return XXH3_128bits_internal(input, len, seed,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ XXH3_hashLong_128b_withSeed);
+}
+
+XXH_PUBLIC_API XXH128_hash_t
+XXH128(const void* input, size_t len, XXH64_hash_t seed)
+{
+ return XXH3_128bits_withSeed(input, len, seed);
+}
+
+
+/* === XXH3 128-bit streaming === */
+
+/*
+ * All the functions are actually the same as for 64-bit streaming variant.
+ * The only difference is the finalizatiom routine.
+ */
+
+static void
+XXH3_128bits_reset_internal(XXH3_state_t* statePtr,
+ XXH64_hash_t seed,
+ const void* secret, size_t secretSize)
+{
+ XXH3_64bits_reset_internal(statePtr, seed, secret, secretSize);
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset(XXH3_state_t* statePtr)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ XXH3_128bits_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE);
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ XXH3_128bits_reset_internal(statePtr, 0, secret, secretSize);
+ if (secret == NULL) return XXH_ERROR;
+ if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ if (seed==0) return XXH3_128bits_reset(statePtr);
+ if (seed != statePtr->seed) XXH3_initCustomSecret(statePtr->customSecret, seed);
+ XXH3_128bits_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE);
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len)
+{
+ return XXH3_update(state, (const xxh_u8*)input, len,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* state)
+{
+ const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
+ if (state->totalLen > XXH3_MIDSIZE_MAX) {
+ XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];
+ XXH3_digest_long(acc, state, secret);
+ XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
+ { XXH128_hash_t h128;
+ h128.low64 = XXH3_mergeAccs(acc,
+ secret + XXH_SECRET_MERGEACCS_START,
+ (xxh_u64)state->totalLen * XXH_PRIME64_1);
+ h128.high64 = XXH3_mergeAccs(acc,
+ secret + state->secretLimit + XXH_STRIPE_LEN
+ - sizeof(acc) - XXH_SECRET_MERGEACCS_START,
+ ~((xxh_u64)state->totalLen * XXH_PRIME64_2));
+ return h128;
+ }
+ }
+ /* len <= XXH3_MIDSIZE_MAX : short code */
+ if (state->seed)
+ return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
+ return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen),
+ secret, state->secretLimit + XXH_STRIPE_LEN);
+}
+
+/* 128-bit utility functions */
+
+#include <string.h> /* memcmp, memcpy */
+
+/* return : 1 is equal, 0 if different */
+XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2)
+{
+ /* note : XXH128_hash_t is compact, it has no padding byte */
+ return !(memcmp(&h1, &h2, sizeof(h1)));
+}
+
+/* This prototype is compatible with stdlib's qsort().
+ * return : >0 if *h128_1 > *h128_2
+ * <0 if *h128_1 < *h128_2
+ * =0 if *h128_1 == *h128_2 */
+XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2)
+{
+ XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1;
+ XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2;
+ int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64);
+ /* note : bets that, in most cases, hash values are different */
+ if (hcmp) return hcmp;
+ return (h1.low64 > h2.low64) - (h2.low64 > h1.low64);
+}
+
+
+/*====== Canonical representation ======*/
+XXH_PUBLIC_API void
+XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash)
+{
+ XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t));
+ if (XXH_CPU_LITTLE_ENDIAN) {
+ hash.high64 = XXH_swap64(hash.high64);
+ hash.low64 = XXH_swap64(hash.low64);
+ }
+ memcpy(dst, &hash.high64, sizeof(hash.high64));
+ memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64));
+}
+
+XXH_PUBLIC_API XXH128_hash_t
+XXH128_hashFromCanonical(const XXH128_canonical_t* src)
+{
+ XXH128_hash_t h;
+ h.high64 = XXH_readBE64(src);
+ h.low64 = XXH_readBE64(src->digest + 8);
+ return h;
+}
+
+/* Pop our optimization override from above */
+#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
+ && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
+ && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
+# pragma GCC pop_options
+#endif
#endif /* XXH_NO_LONG_LONG */
diff --git a/dviware/dvisvgm/src/DVIReader.cpp b/dviware/dvisvgm/src/DVIReader.cpp
index 417efe9304..0581ad25c3 100644
--- a/dviware/dvisvgm/src/DVIReader.cpp
+++ b/dviware/dvisvgm/src/DVIReader.cpp
@@ -19,8 +19,6 @@
*************************************************************************/
#include <algorithm>
-#include <cstdarg>
-#include <fstream>
#include <sstream>
#include "Color.hpp"
#include "DVIActions.hpp"
@@ -28,6 +26,7 @@
#include "Font.hpp"
#include "FontManager.hpp"
#include "HashFunction.hpp"
+#include "utility.hpp"
#include "VectorStream.hpp"
using namespace std;
@@ -504,26 +503,64 @@ void DVIReader::cmdFontNum (int len) {
}
+/** Parses a sequence of font attributes given as key1=val1;key2=val2;...;keyn=valn */
+static map<string,string> parse_font_attribs (const string &str) {
+ map<string,string> attribs;
+ if (!str.empty()) {
+ for (const string &attr : util::split(str, ";")) {
+ vector<string> keyval = util::split(attr, "=");
+ if (keyval.size() == 2)
+ attribs[keyval[0]] = keyval[1];
+ }
+ }
+ return attribs;
+}
+
+
/** Helper function to handle a font definition.
* @param[in] fontnum local font number
- * @param[in] name font name
+ * @param[in] name font name (or file path if enclosed in square brackets)
* @param[in] cs checksum to be compared with TFM checksum
- * @param[in] ds design size in PS point units
- * @param[in] ss scaled size in PS point units */
-const Font* DVIReader::defineFont (uint32_t fontnum, const string &name, uint32_t cs, double ds, double ss) {
+ * @param[in] dsize design size of font in PS point units
+ * @param[in] ssize scaled size of font in PS point units */
+const Font* DVIReader::defineFont (uint32_t fontnum, const string &name, uint32_t cs, double dsize, double ssize) {
FontManager &fm = FontManager::instance();
Font *font = fm.getFont(fontnum);
- if (!font) {
- int id = fm.registerFont(fontnum, name, cs, ds, ss);
- font = fm.getFontById(id);
- if (auto vf = dynamic_cast<VirtualFont*>(font)) {
- // read vf file, register its font and character definitions
- fm.enterVF(vf);
- ifstream ifs(vf->path(), ios::binary);
- VFReader vfReader(ifs);
- vfReader.replaceActions(this);
- vfReader.executeAll();
- fm.leaveVF();
+ if (!font && !name.empty()) { // font not registered yet?
+ if (name[0] == '[') { // LuaTeX native font reference?
+ size_t last = name.rfind(']');
+ if (last != string::npos) {
+ string path = name.substr(1, last-1);
+ FontStyle style;
+ int fontIndex=0;
+ if (name.size() > last && name[last+1] == ':') { // look for font attributes?
+ auto attribs = parse_font_attribs(name.substr(last+2));
+ auto it = attribs.begin();
+ if ((it = attribs.find("index")) != attribs.end())
+ fontIndex = stoi(it->second);
+ if ((it = attribs.find("embolden")) != attribs.end())
+ style.bold = stoi(it->second)/65536.0;
+ if ((it = attribs.find("extend")) != attribs.end())
+ style.extend = stoi(it->second)/65536.0;
+ if ((it = attribs.find("slant")) != attribs.end())
+ style.slant = stoi(it->second)/65536.0;
+ }
+ int id = fm.registerFont(fontnum, path, fontIndex, ssize, style, Color::BLACK);
+ font = fm.getFontById(id);
+ }
+ }
+ else { // TFM-based font specified by name
+ int id = fm.registerFont(fontnum, name, cs, dsize, ssize);
+ font = fm.getFontById(id);
+ if (auto vf = dynamic_cast<VirtualFont*>(font)) {
+ // read vf file, register its font and character definitions
+ fm.enterVF(vf);
+ ifstream ifs(vf->path(), ios::binary);
+ VFReader vfReader(ifs);
+ vfReader.replaceActions(this);
+ vfReader.executeAll();
+ fm.leaveVF();
+ }
}
}
return font;
diff --git a/dviware/dvisvgm/src/DVIReader.hpp b/dviware/dvisvgm/src/DVIReader.hpp
index fc1424aca3..61c4866714 100644
--- a/dviware/dvisvgm/src/DVIReader.hpp
+++ b/dviware/dvisvgm/src/DVIReader.hpp
@@ -74,7 +74,7 @@ class DVIReader : public BasicDVIReader, public VFActions {
virtual void moveDown (double dy, MoveMode mode);
void putVFChar (Font *font, uint32_t c);
double putGlyphArray (bool xonly, std::vector<double> &dx, std::vector<double> &dy, std::vector<uint16_t> &glyphs);
- const Font* defineFont (uint32_t fontnum, const std::string &name, uint32_t cs, double ds, double ss);
+ const Font* defineFont (uint32_t fontnum, const std::string &name, uint32_t cs, double dsize, double ssize);
void setFont (int num, SetFontMode mode);
const DVIState& dviState() const {return _dviState;}
double dvi2bp () const {return _dvi2bp;}
diff --git a/dviware/dvisvgm/src/DVIToSVGActions.cpp b/dviware/dvisvgm/src/DVIToSVGActions.cpp
index 6239be3b01..2464aec517 100644
--- a/dviware/dvisvgm/src/DVIToSVGActions.cpp
+++ b/dviware/dvisvgm/src/DVIToSVGActions.cpp
@@ -122,7 +122,7 @@ void DVIToSVGActions::setChar (double x, double y, unsigned c, bool vertical, co
bbox.transform(getMatrix());
embed(bbox);
#if 0
- XMLElement *rect = new XMLElement("rect");
+ auto rect = util::make_unique<XMLElement>("rect");
rect->addAttribute("x", x-metrics.wl);
rect->addAttribute("y", y-metrics.h);
rect->addAttribute("width", metrics.wl+metrics.wr);
@@ -130,26 +130,26 @@ void DVIToSVGActions::setChar (double x, double y, unsigned c, bool vertical, co
rect->addAttribute("fill", "none");
rect->addAttribute("stroke", "red");
rect->addAttribute("stroke-width", "0.5");
- _svg.appendToPage(rect);
+ _svg.appendToPage(std::move(rect));
if (metrics.d > 0) {
- XMLElement *line = new XMLElement("line");
+ auto line = util::make_unique<XMLElement>("line");
line->addAttribute("x1", x-metrics.wl);
line->addAttribute("y1", y);
line->addAttribute("x2", x+metrics.wr);
line->addAttribute("y2", y);
line->addAttribute("stroke", "blue");
line->addAttribute("stroke-width", "0.5");
- _svg.appendToPage(line);
+ _svg.appendToPage(std::move(line));
}
if (metrics.wl > 0) {
- XMLElement *line = new XMLElement("line");
+ auto line = util::make_unique<XMLElement>("line");
line->addAttribute("x1", x);
line->addAttribute("y1", y-metrics.h);
line->addAttribute("x2", x);
line->addAttribute("y2", y+metrics.d);
line->addAttribute("stroke", "blue");
line->addAttribute("stroke-width", "0.5");
- _svg.appendToPage(line);
+ _svg.appendToPage(std::move(line));
}
#endif
}
@@ -227,7 +227,12 @@ void DVIToSVGActions::beginPage (unsigned pageno, const vector<int32_t>&) {
/** This method is called when an "end of page (eop)" command was found in the DVI file. */
void DVIToSVGActions::endPage (unsigned pageno) {
- SpecialManager::instance().notifyEndPage(pageno, *this);
+ try {
+ SpecialManager::instance().notifyEndPage(pageno, *this);
+ }
+ catch (const SpecialException &e) {
+ Message::estream(true) << "error in special: " << e.what() << '\n';
+ }
Matrix matrix = _dvireader->getPageTransformation();
_svg.transformPage(matrix);
if (_bgcolor != Color::TRANSPARENT) {
diff --git a/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp b/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
index 1f331659f0..97285db1a9 100644
--- a/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
+++ b/dviware/dvisvgm/src/DvisvgmSpecialHandler.cpp
@@ -209,7 +209,9 @@ static void evaluate_expressions (string &str, SpecialActions &actions) {
else {
try {
double val = calc.eval(expr);
- str.replace(left, right-left+2, XMLString(val));
+ XMLString valstr(val);
+ str.replace(left, right-left+2, valstr);
+ right = left+valstr.length()-1;
}
catch (CalculatorException &e) {
throw SpecialException(string(e.what())+" in '{?("+expr+")}'");
@@ -413,8 +415,8 @@ void DvisvgmSpecialHandler::dviPreprocessingFinished () {
void DvisvgmSpecialHandler::dviEndPage (unsigned, SpecialActions &actions) {
- _defsParser.flush(actions);
- _pageParser.flush(actions);
+ _defsParser.finish(actions);
+ _pageParser.finish(actions);
actions.bbox().unlock();
for (auto &strvecpair : _macros) {
StringVector &vec = strvecpair.second;
@@ -437,8 +439,8 @@ vector<const char*> DvisvgmSpecialHandler::prefixes() const {
/** Parses a fragment of XML code, creates corresponding XML nodes and adds them
* to the SVG tree. The code may be split and processed by several calls of this
* function. Incomplete chunks that can't be processed yet are stored and picked
- * up again together with the next incoming XML fragment. If no further code should
- * be appended, parameter 'finish' must be set.
+ * up again together with the next incoming XML fragment. If a call of this function
+ * is supposed to finish the parsing of an XML subtree, parameter 'finish' must be set.
* @param[in] xml XML fragment to parse
* @param[in] actions object providing the SVG tree functions
* @param[in] finish if true, no more XML is expected and parsing is finished */
@@ -447,59 +449,65 @@ void DvisvgmSpecialHandler::XMLParser::parse (const string &xml, SpecialActions
// incomplete tags are held back
_xmlbuf += xml;
size_t left=0, right;
- while (left != string::npos) {
- right = _xmlbuf.find('<', left);
- if (left < right && left < _xmlbuf.length()) // plain text found?
- (actions.svgTree().*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left)));
- if (right != string::npos) {
- left = right;
- if (_xmlbuf.compare(left, 9, "<![CDATA[") == 0) {
- right = _xmlbuf.find("]]>", left+9);
- if (right == string::npos) {
- if (finish) throw SpecialException("expected ']]>' at end of CDATA block");
- break;
+ try {
+ while (left != string::npos) {
+ right = _xmlbuf.find('<', left);
+ if (left < right && left < _xmlbuf.length()) // plain text found?
+ (actions.svgTree().*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left)));
+ if (right != string::npos) {
+ left = right;
+ if (_xmlbuf.compare(left, 9, "<![CDATA[") == 0) {
+ right = _xmlbuf.find("]]>", left+9);
+ if (right == string::npos) {
+ if (finish) throw SpecialException("expected ']]>' at end of CDATA block");
+ break;
+ }
+ (actions.svgTree().*_append)(util::make_unique<XMLCData>(_xmlbuf.substr(left+9, right-left-9)));
+ right += 2;
}
- (actions.svgTree().*_append)(util::make_unique<XMLCData>(_xmlbuf.substr(left+9, right-left-9)));
- right += 2;
- }
- else if (_xmlbuf.compare(left, 4, "<!--") == 0) {
- right = _xmlbuf.find("-->", left+4);
- if (right == string::npos) {
- if (finish) throw SpecialException("expected '-->' at end of comment");
- break;
+ else if (_xmlbuf.compare(left, 4, "<!--") == 0) {
+ right = _xmlbuf.find("-->", left+4);
+ if (right == string::npos) {
+ if (finish) throw SpecialException("expected '-->' at end of comment");
+ break;
+ }
+ (actions.svgTree().*_append)(util::make_unique<XMLComment>(_xmlbuf.substr(left+4, right-left-4)));
+ right += 2;
}
- (actions.svgTree().*_append)(util::make_unique<XMLComment>(_xmlbuf.substr(left+4, right-left-4)));
- right += 2;
- }
- else if (_xmlbuf.compare(left, 2, "<?") == 0) {
- right = _xmlbuf.find("?>", left+2);
- if (right == string::npos) {
- if (finish) throw SpecialException("expected '?>' at end of processing instruction");
- break;
+ else if (_xmlbuf.compare(left, 2, "<?") == 0) {
+ right = _xmlbuf.find("?>", left+2);
+ if (right == string::npos) {
+ if (finish) throw SpecialException("expected '?>' at end of processing instruction");
+ break;
+ }
+ (actions.svgTree().*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left+2)));
+ right++;
}
- (actions.svgTree().*_append)(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left+2)));
- right++;
- }
- else if (_xmlbuf.compare(left, 2, "</") == 0) {
- right = _xmlbuf.find('>', left+2);
- if (right == string::npos) {
- if (finish) throw SpecialException("missing '>' at end of closing XML tag");
- break;
+ else if (_xmlbuf.compare(left, 2, "</") == 0) {
+ right = _xmlbuf.find('>', left+2);
+ if (right == string::npos) {
+ if (finish) throw SpecialException("missing '>' at end of closing XML tag");
+ break;
+ }
+ closeElement(_xmlbuf.substr(left+2, right-left-2), actions);
}
- closeElement(_xmlbuf.substr(left+2, right-left-2), actions);
- }
- else {
- right = _xmlbuf.find('>', left+1);
- if (right == string::npos) {
- if (finish) throw SpecialException("missing '>' or '/>' at end of opening XML tag");
- break;
+ else {
+ right = _xmlbuf.find('>', left+1);
+ if (right == string::npos) {
+ if (finish) throw SpecialException("missing '>' or '/>' at end of opening XML tag");
+ break;
+ }
+ openElement(_xmlbuf.substr(left+1, right-left-1), actions);
}
- openElement(_xmlbuf.substr(left+1, right-left-1), actions);
}
+ left = right;
+ if (right != string::npos)
+ left++;
}
- left = right;
- if (right != string::npos)
- left++;
+ }
+ catch (const SpecialException &e) {
+ _error = true;
+ throw;
}
if (left == string::npos)
_xmlbuf.clear();
@@ -545,7 +553,7 @@ void DvisvgmSpecialHandler::XMLParser::closeElement (const string &tag, SpecialA
if (_nameStack.empty())
throw SpecialException("spurious closing tag </" + name + ">");
if (_nameStack.back() != name)
- throw SpecialException("expected </" + name + "> but found </" + _nameStack.back() + ">");
+ throw SpecialException("expected </" + _nameStack.back() + "> but found </" + name + ">");
(actions.svgTree().*_popContext)();
_nameStack.pop_back();
}
@@ -553,9 +561,10 @@ void DvisvgmSpecialHandler::XMLParser::closeElement (const string &tag, SpecialA
/** Processes any remaining XML fragments, checks for missing closing tags,
* and resets the parser state. */
-void DvisvgmSpecialHandler::XMLParser::flush (SpecialActions &actions) {
+void DvisvgmSpecialHandler::XMLParser::finish (SpecialActions &actions) {
if (!_xmlbuf.empty()) {
- parse("", actions, true);
+ if (!_error)
+ parse("", actions, true);
_xmlbuf.clear();
}
string tags;
@@ -563,8 +572,8 @@ void DvisvgmSpecialHandler::XMLParser::flush (SpecialActions &actions) {
tags += "</"+_nameStack.back()+">, ";
_nameStack.pop_back();
}
- if (!tags.empty()) {
+ if (!tags.empty() && !_error) {
tags.resize(tags.length()-2);
- throw SpecialException("missing closing tags: "+tags);
+ throw SpecialException("missing closing tag(s): "+tags);
}
}
diff --git a/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp b/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp
index 0f73c73ecd..d6aa32c9ee 100644
--- a/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp
+++ b/dviware/dvisvgm/src/DvisvgmSpecialHandler.hpp
@@ -53,7 +53,7 @@ class DvisvgmSpecialHandler : public SpecialHandler {
: _append(append), _pushContext(push), _popContext(pop) {}
void parse (const std::string &xml, SpecialActions &actions, bool finish=false);
- void flush (SpecialActions &actions);
+ void finish (SpecialActions &actions);
protected:
void openElement (const std::string &tag, SpecialActions &actions);
@@ -65,6 +65,7 @@ class DvisvgmSpecialHandler : public SpecialHandler {
PopFunc _popContext;
std::string _xmlbuf;
NameStack _nameStack; ///< names of nested elements still missing a closing tag
+ bool _error=false;
};
using StringVector = std::vector<std::string>;
diff --git a/dviware/dvisvgm/src/FileSystem.cpp b/dviware/dvisvgm/src/FileSystem.cpp
index a1fafbdece..e1db59fa03 100644
--- a/dviware/dvisvgm/src/FileSystem.cpp
+++ b/dviware/dvisvgm/src/FileSystem.cpp
@@ -20,12 +20,14 @@
#include <config.h>
#include <algorithm>
+#include <chrono>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include "FileSystem.hpp"
#include "utility.hpp"
#include "version.hpp"
+#include "XXHashFunction.hpp"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
@@ -51,7 +53,7 @@ using namespace std;
string FileSystem::TMPDIR;
-const char *FileSystem::TMPSUBDIR = nullptr;
+FileSystem::TemporaryDirectory FileSystem::_tmpdir;
/** Private wrapper function for mkdir: creates a single folder.
@@ -79,13 +81,6 @@ static bool inline s_rmdir (const string &dirname) {
}
-FileSystem::~FileSystem () {
- // remove the subdirectory from the system's temp folder (if empty)
- if (TMPSUBDIR)
- s_rmdir(tmpdir());
-}
-
-
bool FileSystem::remove (const string &fname) {
return unlink(fname.c_str()) == 0;
}
@@ -192,36 +187,29 @@ const char* FileSystem::userdir () {
/** Returns the path of the temporary folder. */
string FileSystem::tmpdir () {
- string ret;
- if (!TMPDIR.empty())
- ret = TMPDIR;
- else {
+ if (_tmpdir.path().empty()) {
+ string basedir;
+ if (!TMPDIR.empty())
+ basedir = TMPDIR;
+ else {
#ifdef _WIN32
- char buf[MAX_PATH];
- if (GetTempPath(MAX_PATH, buf))
- ret = ensureForwardSlashes(buf);
- else
- ret = ".";
+ char buf[MAX_PATH];
+ if (GetTempPath(MAX_PATH, buf))
+ basedir = ensureForwardSlashes(buf);
+ else
+ basedir = ".";
#else
- if (const char *path = getenv("TMPDIR"))
- ret = path;
- else
- ret = "/tmp";
+ if (const char *path = getenv("TMPDIR"))
+ basedir = path;
+ else
+ basedir = "/tmp";
#endif
- if (ret.back() == '/')
- ret.pop_back();
- static bool initialized=false;
- if (!initialized && ret != ".") {
- TMPSUBDIR = PROGRAM_NAME;
- s_mkdir(ret + "/" + TMPSUBDIR);
- initialized = true;
+ if (basedir.back() == '/')
+ basedir.pop_back();
}
- if (TMPSUBDIR)
- ret += string("/") + TMPSUBDIR;
+ _tmpdir = TemporaryDirectory(basedir, PROGRAM_NAME);
}
- if (!ret.empty() && ret.back() != '/')
- ret += '/';
- return ret;
+ return _tmpdir.path();
}
@@ -368,3 +356,33 @@ int FileSystem::collect (const std::string &dirname, vector<string> &entries) {
#endif
return entries.size();
}
+
+
+/** Creates a temporary directory in a given folder.
+ * @param[in] folder folder path in which the directory is to be created
+ * @param[in] prefix initial string of the directory name */
+FileSystem::TemporaryDirectory::TemporaryDirectory (const std::string &folder, string prefix) {
+ using namespace std::chrono;
+ auto now = system_clock::now().time_since_epoch();
+ auto now_ms = duration_cast<milliseconds>(now).count();
+ auto hash = XXH64HashFunction(to_string(now_ms)).digestValue();
+ if (!prefix.empty() && prefix.back() != '-')
+ prefix += "-";
+ for (int i=0; i < 10 && _path.empty(); i++) {
+ hash++;
+ stringstream oss;
+ oss << folder << '/' << prefix << hex << hash;
+ if (exists(oss.str()))
+ continue;
+ if (s_mkdir(oss.str()))
+ _path = oss.str() + "/";
+ else
+ break;
+ }
+}
+
+
+FileSystem::TemporaryDirectory::~TemporaryDirectory () {
+ if (!_path.empty())
+ s_rmdir(_path);
+}
diff --git a/dviware/dvisvgm/src/FileSystem.hpp b/dviware/dvisvgm/src/FileSystem.hpp
index f82ff1e870..9a45c4ac19 100644
--- a/dviware/dvisvgm/src/FileSystem.hpp
+++ b/dviware/dvisvgm/src/FileSystem.hpp
@@ -25,8 +25,23 @@
#include <vector>
class FileSystem {
+ class TemporaryDirectory {
+ friend class FileSystem;
+ public:
+ TemporaryDirectory (const std::string &folder, std::string prefix);
+ TemporaryDirectory (TemporaryDirectory &&tmpdir) =default;
+ ~TemporaryDirectory ();
+ TemporaryDirectory& operator = (TemporaryDirectory &&tmpdir) =default;
+ const std::string& path () const {return _path;}
+
+ protected:
+ TemporaryDirectory () =default;
+
+ private:
+ std::string _path;
+ };
+
public:
- ~FileSystem ();
static bool remove (const std::string &fname);
static bool rename (const std::string &oldname, const std::string &newname);
static bool copy (const std::string &src, const std::string &dest, bool remove_src=false);
@@ -48,8 +63,9 @@ class FileSystem {
protected:
FileSystem () =default;
- bool system_tmpdir_available ();
- static const char* TMPSUBDIR; ///< subdirectory of the system's temporary folder
+
+ private:
+ static TemporaryDirectory _tmpdir;
};
#endif
diff --git a/dviware/dvisvgm/src/Font.cpp b/dviware/dvisvgm/src/Font.cpp
index e40ad8a392..8cbcb1db47 100644
--- a/dviware/dvisvgm/src/Font.cpp
+++ b/dviware/dvisvgm/src/Font.cpp
@@ -607,8 +607,13 @@ PhysicalFont::Type NativeFont::type () const {
double NativeFont::charWidth (int c) const {
FontEngine::instance().setFont(*this);
int upem = FontEngine::instance().getUnitsPerEM();
- double w = upem ? (scaledSize()*FontEngine::instance().getAdvance(c)/upem*_style.extend) : 0;
- w += abs(_style.slant*charHeight(c));
+ return upem ? (scaledSize()*FontEngine::instance().getAdvance(c)/upem*_style.extend) : 0;
+}
+
+
+double NativeFont::italicCorr(int c) const {
+ double w = abs(_style.slant*charHeight(c)); // slant := tan(phi) = dx/height
+ w *= _style.extend;
return w;
}
diff --git a/dviware/dvisvgm/src/Font.hpp b/dviware/dvisvgm/src/Font.hpp
index 59556e7a81..0a92cbeff5 100644
--- a/dviware/dvisvgm/src/Font.hpp
+++ b/dviware/dvisvgm/src/Font.hpp
@@ -266,7 +266,7 @@ class NativeFont : public PhysicalFont {
double charWidth (int c) const override;
double charDepth (int c) const override;
double charHeight (int c) const override;
- double italicCorr (int c) const override {return 0;}
+ double italicCorr (int c) const override;
const FontMetrics* getMetrics () const override {return nullptr;}
const FontStyle* style () const override {return &_style;}
Color color () const override {return _color;}
diff --git a/dviware/dvisvgm/src/FontCache.cpp b/dviware/dvisvgm/src/FontCache.cpp
index e024558913..1fd13c9c11 100644
--- a/dviware/dvisvgm/src/FontCache.cpp
+++ b/dviware/dvisvgm/src/FontCache.cpp
@@ -160,7 +160,7 @@ bool FontCache::write (const string &fontname, ostream &os) const {
XXH32HashFunction hashfunc;
sw.writeUnsigned(FORMAT_VERSION, 1, hashfunc);
- sw.writeBytes(hashfunc.digestValue()); // space for checksum
+ sw.writeBytes(hashfunc.digestBytes()); // space for checksum
sw.writeString(fontname, hashfunc, true);
sw.writeUnsigned(_glyphs.size(), 4, hashfunc);
WriteActions actions(sw, hashfunc);
@@ -171,7 +171,7 @@ bool FontCache::write (const string &fontname, ostream &os) const {
glyph.iterate(actions, false);
}
os.seekp(1);
- auto digest = hashfunc.digestValue();
+ auto digest = hashfunc.digestBytes();
sw.writeBytes(digest); // insert checksum
os.seekp(0, ios::end);
return true;
@@ -215,7 +215,7 @@ bool FontCache::read (const string &fontname, istream &is) {
auto hashcmp = sr.readBytes(hashfunc.digestSize());
hashfunc.update(is);
- if (hashfunc.digestValue() != hashcmp)
+ if (hashfunc.digestBytes() != hashcmp)
return false;
is.clear();
@@ -309,7 +309,7 @@ bool FontCache::fontinfo (std::istream &is, FontInfo &info) {
info.checksum = sr.readBytes(hashfunc.digestSize());
hashfunc.update(is);
- if (hashfunc.digestValue() != info.checksum)
+ if (hashfunc.digestBytes() != info.checksum)
return false;
is.clear();
diff --git a/dviware/dvisvgm/src/FontManager.cpp b/dviware/dvisvgm/src/FontManager.cpp
index 58d2dfc261..eabb4a3d30 100644
--- a/dviware/dvisvgm/src/FontManager.cpp
+++ b/dviware/dvisvgm/src/FontManager.cpp
@@ -255,8 +255,6 @@ int FontManager::registerFont (uint32_t fontnum, string filename, int fontIndex,
if (id >= 0)
return id;
- if (!filename.empty() && filename[0] == '[' && filename[filename.size()-1] == ']')
- filename = filename.substr(1, filename.size()-2);
string fontname = NativeFont::uniqueName(filename, style);
const char *path = filename.c_str();
unique_ptr<Font> newfont;
diff --git a/dviware/dvisvgm/src/GraphicsPath.hpp b/dviware/dvisvgm/src/GraphicsPath.hpp
index 565251c0d0..64c112ad0b 100644
--- a/dviware/dvisvgm/src/GraphicsPath.hpp
+++ b/dviware/dvisvgm/src/GraphicsPath.hpp
@@ -732,7 +732,7 @@ class GraphicsPath {
private:
std::deque<CommandVariant> _commands; ///< sequence of path commands
- WindingRule _windingRule;
+ WindingRule _windingRule = WindingRule::NON_ZERO;
Point _startPoint; ///< start point of final sub-path
Point _finalPoint; ///< final point reached by last command in path
};
diff --git a/dviware/dvisvgm/src/HashFunction.cpp b/dviware/dvisvgm/src/HashFunction.cpp
index 7f99dacaf0..16661fb3d6 100644
--- a/dviware/dvisvgm/src/HashFunction.cpp
+++ b/dviware/dvisvgm/src/HashFunction.cpp
@@ -96,7 +96,7 @@ void HashFunction::update (istream &is) {
string HashFunction::digestString () const {
ostringstream oss;
oss << hex << setfill('0');
- for (int byte : digestValue())
+ for (int byte : digestBytes())
oss << setw(2) << byte;
return oss.str();
}
diff --git a/dviware/dvisvgm/src/HashFunction.hpp b/dviware/dvisvgm/src/HashFunction.hpp
index b13ee39a50..e31040075e 100644
--- a/dviware/dvisvgm/src/HashFunction.hpp
+++ b/dviware/dvisvgm/src/HashFunction.hpp
@@ -35,7 +35,7 @@ class HashFunction {
virtual void update (const char *data, size_t length) =0;
virtual void update (const std::string &data) =0;
virtual void update (const std::vector<uint8_t> &data) =0;
- virtual std::vector<uint8_t> digestValue () const =0;
+ virtual std::vector<uint8_t> digestBytes () const =0;
void update (std::istream &is);
std::string digestString () const;
static std::vector<std::string> supportedAlgorithms ();
diff --git a/dviware/dvisvgm/src/MD5HashFunction.hpp b/dviware/dvisvgm/src/MD5HashFunction.hpp
index f0eda874f2..27539576ed 100644
--- a/dviware/dvisvgm/src/MD5HashFunction.hpp
+++ b/dviware/dvisvgm/src/MD5HashFunction.hpp
@@ -42,7 +42,7 @@ class MD5HashFunction : public HashFunction {
void update (const std::string &data) override {update(data.data(), data.length());}
void update (const std::vector<uint8_t> &data) override {update(reinterpret_cast<const char*>(data.data()), data.size());}
- std::vector<uint8_t> digestValue () const override {
+ std::vector<uint8_t> digestBytes () const override {
std::vector<uint8_t> hash(16);
MD5_CTX savedContext = _context;
MD5_Final(hash.data(), &_context); // also erases the context structure
diff --git a/dviware/dvisvgm/src/PathClipper.cpp b/dviware/dvisvgm/src/PathClipper.cpp
index 4aa4373f46..f1cca09fd6 100644
--- a/dviware/dvisvgm/src/PathClipper.cpp
+++ b/dviware/dvisvgm/src/PathClipper.cpp
@@ -310,22 +310,37 @@ inline PolyFillType polyFillType (CurvedPath::WindingRule wr) {
}
-/** Computes the intersection of to curved paths.
+/** Combines two curved paths by applying a boolean operation on them.
+ * @param[in] op operation to perform
* @param[in] p1 first curved path
* @param[in] p2 second curved path
- * @param[out] result intersection of p1 and p2 */
-void PathClipper::intersect (const CurvedPath &p1, const CurvedPath &p2, CurvedPath &result) {
- if (p1.size() < 2 || p2.size() < 2)
- return;
- Clipper clipper;
- Polygons polygons;
- flatten(p1, polygons);
- clipper.AddPaths(polygons, ptSubject, true);
- polygons.clear();
- flatten(p2, polygons);
- clipper.AddPaths(polygons, ptClip, true);
- clipper.ZFillFunction(callback);
- Polygons flattenedPath;
- clipper.Execute(ctIntersection, flattenedPath, polyFillType(p1.windingRule()), polyFillType(p2.windingRule()));
- reconstruct(flattenedPath, result);
+ * @return intersection of p1 and p2 */
+CurvedPath PathClipper::combine (ClipType op, const CurvedPath &p1, const CurvedPath &p2) {
+ CurvedPath result;
+ if (p1.size() > 1 && p2.size() > 1) {
+ Clipper clipper;
+ Polygons polygons;
+ flatten(p1, polygons);
+ clipper.AddPaths(polygons, ptSubject, true);
+ polygons.clear();
+ flatten(p2, polygons);
+ clipper.AddPaths(polygons, ptClip, true);
+ clipper.ZFillFunction(callback);
+ Polygons flattenedPath;
+ clipper.Execute(op, flattenedPath, polyFillType(p1.windingRule()), polyFillType(p2.windingRule()));
+ reconstruct(flattenedPath, result);
+ }
+ return result;
+}
+
+
+/** Returns the intersection of two curved paths. */
+CurvedPath PathClipper::intersect (const CurvedPath &p1, const CurvedPath &p2) {
+ return combine(ctIntersection, p1, p2);
+}
+
+
+/** Returns the union of two curved paths. */
+CurvedPath PathClipper::unite (const CurvedPath &p1, const CurvedPath &p2) {
+ return combine(ctUnion, p1, p2);
}
diff --git a/dviware/dvisvgm/src/PathClipper.hpp b/dviware/dvisvgm/src/PathClipper.hpp
index e3e6bd1681..7c42f5de6d 100644
--- a/dviware/dvisvgm/src/PathClipper.hpp
+++ b/dviware/dvisvgm/src/PathClipper.hpp
@@ -36,9 +36,11 @@ class PathClipper {
using CurvedPath = GraphicsPath<double>;
public:
- void intersect (const CurvedPath &p1, const CurvedPath &p2, CurvedPath &result);
+ CurvedPath intersect (const CurvedPath &p1, const CurvedPath &p2);
+ CurvedPath unite (const CurvedPath &p1, const CurvedPath &p2);
protected:
+ CurvedPath combine (ClipperLib::ClipType op, const CurvedPath &p1, const CurvedPath &p2);
void flatten (const CurvedPath &gp, ClipperLib::Paths &polygons);
void reconstruct (const ClipperLib::Path &polygon, CurvedPath &path);
void reconstruct (const ClipperLib::Paths &polygons, CurvedPath &path);
diff --git a/dviware/dvisvgm/src/PsSpecialHandler.cpp b/dviware/dvisvgm/src/PsSpecialHandler.cpp
index 2301eeb571..9641556dd5 100644
--- a/dviware/dvisvgm/src/PsSpecialHandler.cpp
+++ b/dviware/dvisvgm/src/PsSpecialHandler.cpp
@@ -941,7 +941,7 @@ void PsSpecialHandler::clip (Path path, bool evenodd) {
if (!_actions->getMatrix().isIdentity())
path.transform(_actions->getMatrix());
if (_clipStack.prependedPath())
- path.prepend(*_clipStack.prependedPath());
+ path = PathClipper().unite(*_clipStack.prependedPath(), path);
int oldID = _clipStack.topID();
@@ -954,9 +954,7 @@ void PsSpecialHandler::clip (Path path, bool evenodd) {
else {
// compute the intersection of the current clipping path with the current graphics path
const Path *oldPath = _clipStack.path();
- Path intersectedPath(windingRule);
- PathClipper clipper;
- clipper.intersect(*oldPath, path, intersectedPath);
+ Path intersectedPath = PathClipper().intersect(*oldPath, path);
pathReplaced = _clipStack.replace(intersectedPath);
intersectedPath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);
}
diff --git a/dviware/dvisvgm/src/XMLNode.cpp b/dviware/dvisvgm/src/XMLNode.cpp
index db07d95dd2..363115fbca 100644
--- a/dviware/dvisvgm/src/XMLNode.cpp
+++ b/dviware/dvisvgm/src/XMLNode.cpp
@@ -259,7 +259,7 @@ XMLElement* XMLElement::wrap (XMLNode *first, XMLNode *last, const string &name)
XMLNode *child = first;
while (child && child != last) {
XMLNode *next = child->next();
- wrapper->insertLast(remove(child));
+ wrapper->insertLast(detach(child));
child = next;
}
XMLElement *ret = wrapper.get();
@@ -277,44 +277,41 @@ XMLElement* XMLElement::wrap (XMLNode *first, XMLNode *last, const string &name)
* Example: unwrap a child element b of a:
* <a>text1<b><c/>text2<d/></b></a> => <a>text1<c/>text2<d/></a>
* @param[in] child child element to unwrap
- * @return raw pointer to the first node C1 of the unwrapped sequence */
-XMLNode* XMLElement::unwrap (XMLElement *child) {
- if (!child || !child->parent())
+ * @return raw pointer to the first node C1 of the unwrapped sequence or nullptr if element was empty */
+XMLNode* XMLElement::unwrap (XMLElement *element) {
+ if (!element || !element->parent())
return nullptr;
- XMLElement *parent = child->parent()->toElement();
- auto removedChild = remove(child);
- if (child->empty())
- return child->next();
- XMLNode *firstGrandchild = child->firstChild();
- XMLNode *prev = child->prev();
- unique_ptr<XMLNode> grandchild = std::move(child->_firstChild);
- while (grandchild) {
- prev = parent->insertAfter(std::move(grandchild), prev);
- grandchild = std::move(prev->_next);
- }
- return firstGrandchild;
-}
-
-
-/** Removes a child node from the element.
- * @param[in] child pointer to child to remove
- * @return pointer to removed child or nullptr if given child doesn't belong to this element */
-unique_ptr<XMLNode> XMLElement::remove (XMLNode *child) {
- unique_ptr<XMLNode> node;
- if (child && child->parent()) {
- XMLElement *parent = child->parent()->toElement();
- if (child == parent->_lastChild)
- parent->_lastChild = child->prev();
- if (child != parent->firstChild())
- node = child->prev()->removeNext();
+ XMLElement *parent = element->parent()->toElement();
+ XMLNode *prev = element->prev();
+ auto unlinkedElement = util::static_unique_ptr_cast<XMLElement>(detach(element));
+ if (unlinkedElement->empty())
+ return nullptr;
+ XMLNode *firstChild = unlinkedElement->firstChild();
+ while (auto child = detach(unlinkedElement->firstChild()))
+ prev = parent->insertAfter(std::move(child), prev);
+ return firstChild;
+}
+
+
+/** Isolates a node and its descendants from a subtree.
+ * @param[in] node raw pointer to node to be detached
+ * @return unique pointer to the detached node. */
+unique_ptr<XMLNode> XMLElement::detach (XMLNode *node) {
+ unique_ptr<XMLNode> uniqueNode;
+ if (node && node->parent()) {
+ XMLElement *parent = node->parent()->toElement();
+ if (node == parent->_lastChild)
+ parent->_lastChild = node->prev();
+ if (node != parent->firstChild())
+ uniqueNode = node->prev()->removeNext();
else {
- node = std::move(parent->_firstChild);
- if ((parent->_firstChild = std::move(node->_next)))
+ uniqueNode = std::move(parent->_firstChild);
+ if ((parent->_firstChild = std::move(uniqueNode->_next)))
parent->_firstChild->prev(nullptr);
}
- child->parent(nullptr);
+ node->parent(nullptr);
}
- return node;
+ return uniqueNode;
}
diff --git a/dviware/dvisvgm/src/XMLNode.hpp b/dviware/dvisvgm/src/XMLNode.hpp
index 534ae87bd7..65bd69fab8 100644
--- a/dviware/dvisvgm/src/XMLNode.hpp
+++ b/dviware/dvisvgm/src/XMLNode.hpp
@@ -157,7 +157,7 @@ class XMLElement : public XMLNode {
const XMLElement* toElement () const override {return this;}
const Attribute* getAttribute (const std::string &name) const;
- static std::unique_ptr<XMLNode> remove (XMLNode *child);
+ static std::unique_ptr<XMLNode> detach (XMLNode *node);
static XMLElement* wrap (XMLNode *first, XMLNode *last, const std::string &name);
static XMLNode* unwrap (XMLElement *child);
diff --git a/dviware/dvisvgm/src/XXHashFunction.hpp b/dviware/dvisvgm/src/XXHashFunction.hpp
index e44083f182..d26a4e4984 100644
--- a/dviware/dvisvgm/src/XXHashFunction.hpp
+++ b/dviware/dvisvgm/src/XXHashFunction.hpp
@@ -36,6 +36,7 @@ struct XXHInterface {
template<>
struct XXHInterface<4> {
using State = XXH32_state_t;
+ using Digest = XXH32_hash_t;
static constexpr auto createState = &XXH32_createState;
static constexpr auto freeState = &XXH32_freeState;
static constexpr auto reset = &XXH32_reset;
@@ -46,6 +47,7 @@ struct XXHInterface<4> {
template<>
struct XXHInterface<8> {
using State = XXH64_state_t;
+ using Digest = XXH64_hash_t;
static constexpr auto createState = &XXH64_createState;
static constexpr auto freeState = &XXH64_freeState;
static constexpr auto reset = &XXH64_reset;
@@ -57,6 +59,7 @@ struct XXHInterface<8> {
template<>
struct XXHInterface<16> {
using State = XXH3_state_t;
+ using Digest = XXH128_hash_t;
static constexpr auto createState = &XXH3_createState;
static constexpr auto freeState = &XXH3_freeState;
static constexpr auto reset = &XXH3_128bits_reset_withSeed;
@@ -71,7 +74,7 @@ class XXHashFunction : public HashFunction {
using Interface = XXHInterface<HASH_BYTES>;
public:
XXHashFunction () : _state(Interface::createState()) {Interface::reset(_state, 0);}
- XXHashFunction(const char *data, size_t length) : XXHashFunction() {update(data, length);}
+ XXHashFunction (const char *data, size_t length) : XXHashFunction() {update(data, length);}
explicit XXHashFunction(const std::string &data) : XXHashFunction() {update(data);}
explicit XXHashFunction(const std::vector<uint8_t> &data) : XXHashFunction() {update(data);}
~XXHashFunction () override {Interface::freeState(_state);}
@@ -83,10 +86,11 @@ class XXHashFunction : public HashFunction {
using HashFunction::update; // unhide update(istream &is) defined in base class
- std::vector<uint8_t> digestValue () const override {
+ std::vector<uint8_t> digestBytes () const override {
return util::bytes(Interface::digest(_state), HASH_BYTES);
}
+ typename Interface::Digest digestValue () const {return Interface::digest(_state);}
static unsigned version () {return XXH_versionNumber();}
private:
@@ -100,7 +104,7 @@ using XXH64HashFunction = XXHashFunction<8>;
using XXH128HashFunction = XXHashFunction<16>;
template<>
-inline std::vector<uint8_t> XXHashFunction<16>::digestValue () const {
+inline std::vector<uint8_t> XXHashFunction<16>::digestBytes () const {
std::vector<uint8_t> hash;
auto digest = Interface::digest(_state);
for (auto chunk : {digest.high64, digest.low64}) {
diff --git a/dviware/dvisvgm/src/dvisvgm.cpp b/dviware/dvisvgm/src/dvisvgm.cpp
index 74a8e83abc..803e34e717 100644
--- a/dviware/dvisvgm/src/dvisvgm.cpp
+++ b/dviware/dvisvgm/src/dvisvgm.cpp
@@ -480,16 +480,20 @@ int main (int argc, char *argv[]) {
}
catch (DVIException &e) {
Message::estream() << "\nDVI error: " << e.what() << '\n';
+ return -1;
}
catch (PSException &e) {
Message::estream() << "\nPostScript error: " << e.what() << '\n';
+ return -2;
}
catch (SignalException &e) {
Message::wstream().clearline();
Message::wstream(true) << "execution interrupted by user\n";
+ return -3;
}
catch (exception &e) {
Message::estream(true) << e.what() << '\n';
+ return -4;
}
return 0;
}
diff --git a/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp b/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp
index b8a32786c1..c3060be788 100644
--- a/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp
+++ b/dviware/dvisvgm/src/optimizer/GroupCollapser.cpp
@@ -61,7 +61,7 @@ static void remove_ws_nodes (XMLElement *elem) {
node = node->next();
else {
XMLNode *next = node->next();
- XMLElement::remove(node);
+ XMLElement::detach(node);
node = next;
}
}
@@ -69,29 +69,31 @@ static void remove_ws_nodes (XMLElement *elem) {
/** Recursively removes all redundant group elements from the given context element
- * and moves their attributes to the corresponding parent element.
+ * and moves their attributes to the corresponding parent elements.
* @param[in] context root of the subtree to process */
void GroupCollapser::execute (XMLElement *context) {
if (!context)
return;
- XMLNode *node=context->firstChild();
- while (node) {
- XMLNode *next = node->next(); // keep safe pointer to next node
- if (XMLElement *elem = node->toElement())
- execute(elem);
- node = next;
- }
- if (context->name() == "g" && context->attributes().empty()) {
- // unwrap group without attributes
- remove_ws_nodes(context);
- XMLElement::unwrap(context);
+
+ XMLNode *child=context->firstChild();
+ while (child) {
+ XMLNode *next=child->next();
+ if (XMLElement *childElement = child->toElement()) {
+ execute(childElement);
+ // check for groups without attributes and remove them
+ if (childElement->name() == "g" && childElement->attributes().empty()) {
+ remove_ws_nodes(childElement);
+ if (XMLNode *firstUnwrappedNode = XMLElement::unwrap(childElement))
+ next = firstUnwrappedNode;
+ }
+ }
+ child = next;
}
- else {
- XMLElement *child = only_child_element(context);
- if (child && collapsible(*context)) {
- if (child->name() == "g" && unwrappable(*child, *context) && moveAttributes(*child, *context)) {
+ if (XMLElement *childElement = only_child_element(context)) {
+ if (collapsible(*context)) {
+ if (childElement->name() == "g" && unwrappable(*childElement, *context) && moveAttributes(*childElement, *context)) {
remove_ws_nodes(context);
- XMLElement::unwrap(child);
+ XMLElement::unwrap(childElement);
}
}
}
@@ -147,12 +149,15 @@ bool GroupCollapser::collapsible (const XMLElement &element) {
* @param[in] source element whose children and attributes should be moved
* @param[in] dest element that should receive the children and attributes */
bool GroupCollapser::unwrappable (const XMLElement &source, const XMLElement &dest) {
- // check for colliding clip-path attributes
- if (const char *cp1 = source.getAttributeValue("clip-path")) {
- if (const char *cp2 = dest.getAttributeValue("clip-path")) {
- if (string(cp1) != cp2)
- return false;
- }
+ const char *cp1 = source.getAttributeValue("clip-path");
+ const char *cp2 = dest.getAttributeValue("clip-path");
+ if (cp2) {
+ // check for colliding clip-path attributes
+ if (cp1 && string(cp1) != string(cp2))
+ return false;
+ // don't apply inner transformations to outer clipping paths
+ if (source.hasAttribute("transform"))
+ return false;
}
// these attributes prevent a group from being unwrapped
static const char *attribs[] = {
diff --git a/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp b/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp
index 906ccc2d14..a8aca1a993 100644
--- a/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp
+++ b/dviware/dvisvgm/src/optimizer/RedundantElementRemover.cpp
@@ -64,6 +64,6 @@ void RedundantElementRemover::execute (XMLElement *defs, XMLElement *context) {
descendants.clear();
for (const string &str : idTree.getKeys()) {
XMLElement *node = defs->getFirstDescendant("clipPath", "id", str.c_str());
- XMLElement::remove(node);
+ XMLElement::detach(node);
}
}
diff --git a/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp b/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp
index b2d45176e7..ac4a78fe20 100644
--- a/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp
+++ b/dviware/dvisvgm/src/optimizer/SVGOptimizer.cpp
@@ -39,9 +39,9 @@ SVGOptimizer::SVGOptimizer (SVGTree *svg) : _svg(svg) {
// optimizer modules available to the user; must be listed in default order
// _moduleEntries.emplace_back(ModuleEntry("remove-ws", util::make_unique<WSNodeRemover>()));
_moduleEntries.emplace_back(ModuleEntry("simplify-text", util::make_unique<TextSimplifier>()));
+ _moduleEntries.emplace_back(ModuleEntry("simplify-transform", util::make_unique<TransformSimplifier>()));
_moduleEntries.emplace_back(ModuleEntry("group-attributes", util::make_unique<AttributeExtractor>()));
_moduleEntries.emplace_back(ModuleEntry("collapse-groups", util::make_unique<GroupCollapser>()));
- _moduleEntries.emplace_back(ModuleEntry("simplify-transform", util::make_unique<TransformSimplifier>()));
_moduleEntries.emplace_back(ModuleEntry("remove-clippath", util::make_unique<RedundantElementRemover>()));
}
diff --git a/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp b/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp
index 461698b62a..2541631b0e 100644
--- a/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp
+++ b/dviware/dvisvgm/src/optimizer/TransformSimplifier.cpp
@@ -79,8 +79,9 @@ bool TransformSimplifier::incorporateTransform (XMLElement *elem, const Matrix &
if (const char *ystr = elem->getAttributeValue("y"))
y = strtod(ystr, nullptr);
// width and height attributes must not become negative. Hence, only apply the scaling
- // values if they are non-negative. Otherwise, keep a scaling matrix
- if (sx < 0 || sy < 0) {
+ // values if they are non-negative. Otherwise, keep a scaling matrix. Also retain scaling
+ // transformations in image elements to avoid the need of attribute 'preseveAspectRatio'.
+ if (sx < 0 || sy < 0 || elem->name() == "image") {
x += (sx == 0 ? 0 : tx/sx);
y += (sy == 0 ? 0 : ty/sy);
elem->addAttribute("transform", "scale("+XMLString(sx)+","+XMLString(sy)+")");
@@ -120,7 +121,7 @@ static string scale_cmd (double sx, double sy) {
XMLString sxstr(sx), systr(sy);
if (sxstr != "1" || systr != "1") {
ret = "scale("+sxstr;
- if (systr != "1")
+ if (systr != sxstr)
ret += " "+systr;
ret += ')';
}
diff --git a/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp b/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp
index be58bf70fd..3f83011f5a 100644
--- a/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp
+++ b/dviware/dvisvgm/src/optimizer/WSNodeRemover.cpp
@@ -34,7 +34,7 @@ void WSNodeRemover::execute (XMLElement *context) {
while (child) {
if (removeWS && child->toWSNode()) {
XMLNode *next = child->next();
- XMLElement::remove(child);
+ XMLElement::detach(child);
child = next;
continue;
}
diff --git a/dviware/dvisvgm/src/psdefs.cpp b/dviware/dvisvgm/src/psdefs.cpp
index 9c5991217d..9c8380816d 100644
--- a/dviware/dvisvgm/src/psdefs.cpp
+++ b/dviware/dvisvgm/src/psdefs.cpp
@@ -66,88 +66,90 @@ const char *PSInterpreter::PSDEFS =
"felse}put @SD/fill{@dodraw @GD/@nulldev get not and{prcolor 0 1(newpath)prcmd "
"prpath 0(fill)prcmd :newpath}{:fill}ifelse}put @SD/eofill{@dodraw @GD/@nulldev"
" get not and{prcolor 0 1(newpath)prcmd prpath 0(eofill)prcmd :newpath}{:eofill"
-"}ifelse}put @SD/clip{:clip @GD/@nulldev get not{0 1(newpath)prcmd prpath 0(cli"
-"p)prcmd}if}put @SD/eoclip{:eoclip @GD/@nulldev get not{0 1(newpath)prcmd prpat"
-"h 0(eoclip)prcmd}}put @SD/shfill{begin currentdict/ShadingType known currentdi"
-"ct/ColorSpace known and currentdict/DataSource known and currentdict/Function "
-"known not and ShadingType 4 ge{DataSource type/arraytype eq{<</DeviceGray 1/De"
-"viceRGB 3/DeviceCMYK 4/bgknown currentdict/Background known/bbknown currentdic"
-"t/BBox known>>begin currentdict ColorSpace known{ShadingType ColorSpace load b"
-"gknown{1 Background aload pop}{0}ifelse bbknown{1 BBox aload pop}{0}ifelse Sha"
-"dingType 5 eq{VerticesPerRow}if DataSource aload length 4 add bgknown{ColorSpa"
-"ce load add}if bbknown{4 add}if ShadingType 5 eq{1 add}if(shfill)prcmd}if end}"
-"if}if end}put @SD/image{dup type/dicttype eq{dup}{<</Width 6 index/Height 7 in"
-"dex/colorimg false>>}ifelse @execimg}put @SD/colorimage{<<2 index{/Width 2 ind"
-"ex 8 add index/Height 4 index 9 add index}{/Width 8 index/Height 9 index}ifels"
-"e/colorimg true>>@execimg}put/@imgbase(./)def/@imgdevice(jpeg)def/@execimg{@GD"
-"/@imgcnt 2 copy .knownget{1 add}{1}ifelse put begin<</imgdev null/imgid @GD/@i"
-"mgcnt get/ispng @imgdevice 0 3 getinterval(png)eq dup/suffix exch{(.png)}{(.jp"
-"g)}ifelse/colorimg currentdict/colorimg .knownget dup{pop}if/colordev 1 index "
-"currentcolorspace dup length 1 ne exch 0 get/DeviceGray ne or or>>begin @imgde"
-"vice(png)ne @imgdevice(jpeg)ne and{@imgdevice cvn}{colordev{ispng{/png16m}{/jp"
-"eg}ifelse}{ispng{/pnggray}{/jpeggray}ifelse}ifelse}ifelse dup devicedict exch "
-"known{:gsave/imgdev exch finddevice def mark/OutputFile @imgbase imgid 20 stri"
-"ng cvs strconcat suffix strconcat/PageSize[Width Height]/UseFastColor true isp"
-"ng{@imgdevice(pngmonod)eq{/MinFeatureSize where{pop/MinFeatureSize MinFeatureS"
-"ize}if}if}{/JPEGQ where{pop/JPEGQ JPEGQ}if}ifelse imgdev putdeviceprops setdev"
-"ice[Width 0 0 Height neg 0 Height]/setmatrix sysexec colorimg{:colorimage}{:im"
-"age}ifelse/copypage sysexec mark/OutputFile()imgdev putdeviceprops pop :gresto"
-"re imgid Width Height 3(image)prcmd}{pop colorimg{:colorimage}{:image}ifelse}i"
-"felse end end}def/@rect{4 -2 roll moveto exch dup 0 rlineto exch 0 exch rlinet"
-"o neg 0 rlineto closepath}bind def/@rectcc{4 -2 roll moveto 2 copy 0 lt exch 0"
-" lt xor{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}{exch dup 0 rline"
-"to exch 0 exch rlineto neg 0 rlineto}ifelse closepath}bind def @SD/rectclip{:n"
-"ewpath dup type/arraytype eq{aload length 4 idiv{@rectcc}repeat}{@rectcc}ifels"
-"e clip :newpath}put @SD/rectfill{:gsave :newpath dup type/arraytype eq{aload l"
-"ength 4 idiv{@rectcc}repeat}{@rectcc}ifelse fill :grestore}put @SD/rectstroke{"
-"gsave :newpath dup type/arraytype eq{aload length 4 idiv{@rect}repeat}{@rect}i"
-"felse stroke grestore}put false setglobal @SD readonly pop/initclip 0 defpr/cl"
-"ippath 0 defpr/sysexec{@SD exch get exec}def/adddot{dup length 1 add string du"
-"p 0 46 put dup 3 -1 roll 1 exch putinterval}def/setlinewidth{dup/setlinewidth "
-"sysexec 1(setlinewidth)prcmd}def/setlinecap 1 defpr/setlinejoin 1 defpr/setmit"
-"erlimit 1 defpr/setdash{mark 3 1 roll 2 copy/setdash sysexec exch aload length"
-" 1 add -1 roll counttomark(setdash)prcmd pop}def/@setpagedevice{pop<<>>/setpag"
-"edevice sysexec matrix setmatrix newpath 0(setpagedevice)prcmd}def/@checknulld"
-"ev{@GD/@nulldev get{currentpagedevice maxlength 0 ne{@GD/@nulldev false put 0 "
-"1(setnulldevice)prcmd}if}if}def/prcolor{currentcolorspace @setcolorspace curre"
-"ntrgbcolor 3(setrgbcolor)prcmd}def/printgstate{@dodraw @GD/@nulldev get not an"
-"d{matrix currentmatrix aload pop 6(setmatrix)prcmd applyscalevals currentlinew"
-"idth 1(setlinewidth)prcmd currentlinecap 1(setlinecap)prcmd currentlinejoin 1("
-"setlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd prcolor currentdash "
-"mark 3 1 roll exch aload length 1 add -1 roll counttomark(setdash)prcmd pop}if"
-"}def/strconcat{exch dup length 2 index length add string dup dup 4 2 roll copy"
-" length 4 -1 roll putinterval}def/setgstate{/setgstate sysexec printgstate}def"
-"/save{@UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)prcmd}de"
-"f/restore{:restore @checknulldev printgstate @UD/@saveID known{@UD begin @save"
-"ID end}{0}ifelse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore @checknu"
-"lldev printgstate 0(grestore)prcmd}def/grestoreall{:grestoreall @checknulldev "
-"setstate 0(grestoreall)prcmd}def/rotate{dup type/arraytype ne @dodraw and{dup "
-"1(rotate)prcmd}if/rotate sysexec applyscalevals}def/scale{dup type/arraytype n"
-"e @dodraw and{2 copy 2(scale)prcmd}if/scale sysexec applyscalevals}def/transla"
-"te{dup type/arraytype ne @dodraw and{2 copy 2(translate)prcmd}if/translate sys"
-"exec}def/setmatrix{dup/setmatrix sysexec @dodraw{aload pop 6(setmatrix)prcmd a"
-"pplyscalevals}{pop}ifelse}def/initmatrix{matrix setmatrix}def/concat{matrix cu"
-"rrentmatrix matrix concatmatrix setmatrix}def/makepattern{gsave<</mx 3 -1 roll"
-">>begin<</XUID[1000000 @patcnt]>>copy mx/makepattern sysexec dup begin Pattern"
-"Type 2 lt{PatternType @patcnt BBox aload pop XStep YStep PaintType mx aload po"
-"p 15(makepattern)prcmd :newpath matrix setmatrix dup PaintProc 0 1(makepattern"
-")prcmd @GD/@patcnt @patcnt 1 add put}if end end grestore}def/setpattern{begin "
-"PatternType 1 eq{PaintType 1 eq{XUID aload pop exch pop 1}{:gsave[currentcolor"
-"space aload length -1 roll pop]/setcolorspace sysexec/setcolor sysexec XUID al"
-"oad pop exch pop currentrgbcolor :grestore 4}ifelse(setpattern)prcmd currentco"
-"lorspace 0 get/Pattern ne{[/Pattern currentcolorspace]/setcolorspace sysexec}i"
-"f currentcolorspace @setcolorspace}{/setpattern sysexec}ifelse end}def/setcolo"
-"r{dup type/dicttype eq{setpattern}{/setcolor sysexec/currentrgbcolor sysexec s"
-"etrgbcolor}ifelse}def/setcolorspace{dup/setcolorspace sysexec @setcolorspace}d"
-"ef/@setcolorspace{dup type/arraytype eq{0 get}if/Pattern eq{1}{0}ifelse 1(setc"
-"olorspace)prcmd}def/setgray 1 defpr/setcmykcolor 4 defpr/sethsbcolor 3 defpr/s"
-"etrgbcolor 3 defpr/.setopacityalpha{dup/.setopacityalpha sysexec 1(setopacitya"
-"lpha)prcmd}def/.setshapealpha{dup/.setshapealpha sysexec 1(setshapealpha)prcmd"
-"}def/.setblendmode{dup/.setblendmode sysexec<</Normal 0/Compatible 0/Multiply "
-"1/Screen 2/Overlay 3/SoftLight 4/HardLight 5/ColorDodge 6/ColorBurn 7/Darken 8"
-"/Lighten 9/Difference 10/Exclusion 11/Hue 12/Saturation 13/Color 14/Luminosity"
-" 15/CompatibleOverprint 16>>exch get 1(setblendmode)prcmd}def/@pdfpagecount{(r"
-")file runpdfbegin pdfpagecount runpdfend}def/@pdfpagebox{(r)file runpdfbegin d"
-"up dup 1 lt exch pdfpagecount gt or{pop}{pdfgetpage/MediaBox pget pop aload po"
-"p}ifelse runpdfend}def DELAYBIND{.bindnow}if ";
+"}ifelse}put/.fillstroke{:gsave fill :grestore .swapcolors stroke .swapcolors}b"
+"ind def/.eofillstroke{:gsave eofill :grestore .swapcolors stroke .swapcolors}b"
+"ind def @SD/clip{:clip @GD/@nulldev get not{0 1(newpath)prcmd prpath 0(clip)pr"
+"cmd}if}put @SD/eoclip{:eoclip @GD/@nulldev get not{0 1(newpath)prcmd prpath 0("
+"eoclip)prcmd}if}put @SD/shfill{begin currentdict/ShadingType known currentdict"
+"/ColorSpace known and currentdict/DataSource known and currentdict/Function kn"
+"own not and ShadingType 4 ge{DataSource type/arraytype eq{<</DeviceGray 1/Devi"
+"ceRGB 3/DeviceCMYK 4/bgknown currentdict/Background known/bbknown currentdict/"
+"BBox known>>begin currentdict ColorSpace known{ShadingType ColorSpace load bgk"
+"nown{1 Background aload pop}{0}ifelse bbknown{1 BBox aload pop}{0}ifelse Shadi"
+"ngType 5 eq{VerticesPerRow}if DataSource aload length 4 add bgknown{ColorSpace"
+" load add}if bbknown{4 add}if ShadingType 5 eq{1 add}if(shfill)prcmd}if end}if"
+"}if end}put @SD/image{dup type/dicttype eq{dup}{<</Width 6 index/Height 7 inde"
+"x/colorimg false>>}ifelse @execimg}put @SD/colorimage{<<2 index{/Width 2 index"
+" 8 add index/Height 4 index 9 add index}{/Width 8 index/Height 9 index}ifelse/"
+"colorimg true>>@execimg}put/@imgbase(./)def/@imgdevice(jpeg)def/@execimg{@GD/@"
+"imgcnt 2 copy .knownget{1 add}{1}ifelse put begin<</imgdev null/imgid @GD/@img"
+"cnt get/ispng @imgdevice 0 3 getinterval(png)eq dup/suffix exch{(.png)}{(.jpg)"
+"}ifelse/colorimg currentdict/colorimg .knownget dup{pop}if/colordev 1 index cu"
+"rrentcolorspace dup length 1 ne exch 0 get/DeviceGray ne or or>>begin @imgdevi"
+"ce(png)ne @imgdevice(jpeg)ne and{@imgdevice cvn}{colordev{ispng{/png16m}{/jpeg"
+"}ifelse}{ispng{/pnggray}{/jpeggray}ifelse}ifelse}ifelse dup devicedict exch kn"
+"own{:gsave/imgdev exch finddevice def mark/OutputFile @imgbase imgid 20 string"
+" cvs strconcat suffix strconcat/PageSize[Width Height]/UseFastColor true ispng"
+"{@imgdevice(pngmonod)eq{/MinFeatureSize where{pop/MinFeatureSize MinFeatureSiz"
+"e}if}if}{/JPEGQ where{pop/JPEGQ JPEGQ}if}ifelse imgdev putdeviceprops setdevic"
+"e[Width 0 0 Height neg 0 Height]/setmatrix sysexec colorimg{:colorimage}{:imag"
+"e}ifelse/copypage sysexec mark/OutputFile()imgdev putdeviceprops pop :grestore"
+" imgid Width Height 3(image)prcmd}{pop colorimg{:colorimage}{:image}ifelse}ife"
+"lse end end}def/@rect{4 -2 roll moveto exch dup 0 rlineto exch 0 exch rlineto "
+"neg 0 rlineto closepath}bind def/@rectcc{4 -2 roll moveto 2 copy 0 lt exch 0 l"
+"t xor{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}{exch dup 0 rlineto"
+" exch 0 exch rlineto neg 0 rlineto}ifelse closepath}bind def @SD/rectclip{:new"
+"path dup type/arraytype eq{aload length 4 idiv{@rectcc}repeat}{@rectcc}ifelse "
+"clip :newpath}put @SD/rectfill{:gsave :newpath dup type/arraytype eq{aload len"
+"gth 4 idiv{@rectcc}repeat}{@rectcc}ifelse fill :grestore}put @SD/rectstroke{gs"
+"ave :newpath dup type/arraytype eq{aload length 4 idiv{@rect}repeat}{@rect}ife"
+"lse stroke grestore}put false setglobal @SD readonly pop/initclip 0 defpr/clip"
+"path 0 defpr/sysexec{@SD exch get exec}def/adddot{dup length 1 add string dup "
+"0 46 put dup 3 -1 roll 1 exch putinterval}def/setlinewidth{dup/setlinewidth sy"
+"sexec 1(setlinewidth)prcmd}def/setlinecap 1 defpr/setlinejoin 1 defpr/setmiter"
+"limit 1 defpr/setdash{mark 3 1 roll 2 copy/setdash sysexec exch aload length 1"
+" add -1 roll counttomark(setdash)prcmd pop}def/@setpagedevice{pop<<>>/setpaged"
+"evice sysexec matrix setmatrix newpath 0(setpagedevice)prcmd}def/@checknulldev"
+"{@GD/@nulldev get{currentpagedevice maxlength 0 ne{@GD/@nulldev false put 0 1("
+"setnulldevice)prcmd}if}if}def/prcolor{currentcolorspace @setcolorspace current"
+"rgbcolor 3(setrgbcolor)prcmd}def/printgstate{@dodraw @GD/@nulldev get not and{"
+"matrix currentmatrix aload pop 6(setmatrix)prcmd applyscalevals currentlinewid"
+"th 1(setlinewidth)prcmd currentlinecap 1(setlinecap)prcmd currentlinejoin 1(se"
+"tlinejoin)prcmd currentmiterlimit 1(setmiterlimit)prcmd prcolor currentdash ma"
+"rk 3 1 roll exch aload length 1 add -1 roll counttomark(setdash)prcmd pop}if}d"
+"ef/strconcat{exch dup length 2 index length add string dup dup 4 2 roll copy l"
+"ength 4 -1 roll putinterval}def/setgstate{/setgstate sysexec printgstate}def/s"
+"ave{@UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)prcmd}def/"
+"restore{:restore @checknulldev printgstate @UD/@saveID known{@UD begin @saveID"
+" end}{0}ifelse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore @checknull"
+"dev printgstate 0(grestore)prcmd}def/grestoreall{:grestoreall @checknulldev se"
+"tstate 0(grestoreall)prcmd}def/rotate{dup type/arraytype ne @dodraw and{dup 1("
+"rotate)prcmd}if/rotate sysexec applyscalevals}def/scale{dup type/arraytype ne "
+"@dodraw and{2 copy 2(scale)prcmd}if/scale sysexec applyscalevals}def/translate"
+"{dup type/arraytype ne @dodraw and{2 copy 2(translate)prcmd}if/translate sysex"
+"ec}def/setmatrix{dup/setmatrix sysexec @dodraw{aload pop 6(setmatrix)prcmd app"
+"lyscalevals}{pop}ifelse}def/initmatrix{matrix setmatrix}def/concat{matrix curr"
+"entmatrix matrix concatmatrix setmatrix}def/makepattern{gsave<</mx 3 -1 roll>>"
+"begin<</XUID[1000000 @patcnt]>>copy mx/makepattern sysexec dup begin PatternTy"
+"pe 2 lt{PatternType @patcnt BBox aload pop XStep YStep PaintType mx aload pop "
+"15(makepattern)prcmd :newpath matrix setmatrix dup PaintProc 0 1(makepattern)p"
+"rcmd @GD/@patcnt @patcnt 1 add put}if end end grestore}def/setpattern{begin Pa"
+"tternType 1 eq{PaintType 1 eq{XUID aload pop exch pop 1}{:gsave[currentcolorsp"
+"ace aload length -1 roll pop]/setcolorspace sysexec/setcolor sysexec XUID aloa"
+"d pop exch pop currentrgbcolor :grestore 4}ifelse(setpattern)prcmd currentcolo"
+"rspace 0 get/Pattern ne{[/Pattern currentcolorspace]/setcolorspace sysexec}if "
+"currentcolorspace @setcolorspace}{/setpattern sysexec}ifelse end}def/setcolor{"
+"dup type/dicttype eq{setpattern}{/setcolor sysexec/currentrgbcolor sysexec set"
+"rgbcolor}ifelse}def/setcolorspace{dup/setcolorspace sysexec @setcolorspace}def"
+"/@setcolorspace{dup type/arraytype eq{0 get}if/Pattern eq{1}{0}ifelse 1(setcol"
+"orspace)prcmd}def/setgray 1 defpr/setcmykcolor 4 defpr/sethsbcolor 3 defpr/set"
+"rgbcolor 3 defpr/.setopacityalpha{dup/.setopacityalpha sysexec 1(setopacityalp"
+"ha)prcmd}def/.setshapealpha{dup/.setshapealpha sysexec 1(setshapealpha)prcmd}d"
+"ef/.setblendmode{dup/.setblendmode sysexec<</Normal 0/Compatible 0/Multiply 1/"
+"Screen 2/Overlay 3/SoftLight 4/HardLight 5/ColorDodge 6/ColorBurn 7/Darken 8/L"
+"ighten 9/Difference 10/Exclusion 11/Hue 12/Saturation 13/Color 14/Luminosity 1"
+"5/CompatibleOverprint 16>>exch get 1(setblendmode)prcmd}def/@pdfpagecount{(r)f"
+"ile runpdfbegin pdfpagecount runpdfend}def/@pdfpagebox{(r)file runpdfbegin dup"
+" dup 1 lt exch pdfpagecount gt or{pop}{pdfgetpage/MediaBox pget pop aload pop}"
+"ifelse runpdfend}def DELAYBIND{.bindnow}if ";
diff --git a/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp b/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
index b8e67403ae..89dba64201 100644
--- a/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
+++ b/dviware/dvisvgm/tests/DvisvgmSpecialTest.cpp
@@ -92,10 +92,10 @@ TEST_F(DvisvgmSpecialTest, rawText) {
EXPECT_TRUE(recorder.defsEquals(""));
EXPECT_TRUE(recorder.pageEquals("<g id='page1'>first\n-42,14</g>")) << recorder.pageString();
- iss.clear(); iss.str("raw \t ;{?(-x+2*y-5)}second {?bbox dummy} \t");
+ iss.clear(); iss.str("raw \t ;{?(-x+2*y-5)}{?(-y+2*x-5)}second {?bbox dummy} \t");
handler.process("", iss, recorder);
EXPECT_TRUE(recorder.defsEquals(""));
- EXPECT_TRUE(recorder.pageEquals("<g id='page1'>first\n-42,14;65second 0 0 0 0</g>")) << recorder.pageString();
+ EXPECT_TRUE(recorder.pageEquals("<g id='page1'>first\n-42,14;65-103second 0 0 0 0</g>")) << recorder.pageString();
}
diff --git a/dviware/dvisvgm/tests/HashFunctionTest.cpp b/dviware/dvisvgm/tests/HashFunctionTest.cpp
index 6b287014df..0d5b7bc1b4 100644
--- a/dviware/dvisvgm/tests/HashFunctionTest.cpp
+++ b/dviware/dvisvgm/tests/HashFunctionTest.cpp
@@ -36,7 +36,7 @@ TEST(HashFunctionTest, md5) {
md5.update("0123456789");
EXPECT_EQ(md5.digestString(), "781e5e245d69b566979b86e28d23f2c7");
vector<uint8_t> bytes = {0x78, 0x1e, 0x5e, 0x24, 0x5d, 0x69, 0xb5, 0x66, 0x97, 0x9b, 0x86, 0xe2, 0x8d, 0x23, 0xf2, 0xc7};
- EXPECT_EQ(md5.digestValue(), bytes);
+ EXPECT_EQ(md5.digestBytes(), bytes);
}
@@ -51,7 +51,7 @@ TEST(HashFunctionTest, xxh32) {
xxh32.update("0123456789");
EXPECT_EQ(xxh32.digestString(), "950c9c0a");
vector<uint8_t> bytes = {0x95, 0x0c, 0x9c, 0x0a};
- EXPECT_EQ(xxh32.digestValue(), bytes);
+ EXPECT_EQ(xxh32.digestBytes(), bytes);
}
@@ -66,7 +66,7 @@ TEST(HashFunctionTest, xxh64) {
xxh64.update("0123456789");
EXPECT_EQ(xxh64.digestString(), "3f5fc178a81867e7");
vector<uint8_t> bytes = {0x3f, 0x5f, 0xc1, 0x78, 0xa8, 0x18, 0x67, 0xe7};
- EXPECT_EQ(xxh64.digestValue(), bytes);
+ EXPECT_EQ(xxh64.digestBytes(), bytes);
}
@@ -82,7 +82,7 @@ TEST(HashFunctionTest, xxh128) {
xxh128.update("0123456789");
EXPECT_EQ(xxh128.digestString(), "e353667619ec664b49655fc9692165fb");
vector<uint8_t> bytes = {0xe3, 0x53, 0x66, 0x76, 0x19, 0xec, 0x66, 0x4b, 0x49, 0x65, 0x5F, 0xc9, 0x69, 0x21, 0x65, 0xfb};
- EXPECT_EQ(xxh128.digestValue(), bytes);
+ EXPECT_EQ(xxh128.digestBytes(), bytes);
}
#endif
diff --git a/info/biblio/tugboat.bib b/info/biblio/tugboat.bib
index d5104756fd..03cd0a4bb0 100644
--- a/info/biblio/tugboat.bib
+++ b/info/biblio/tugboat.bib
@@ -14,7 +14,7 @@
%%% telephone = "+1 801 581 5254",
%%% FAX = "+1 801 581 4148",
%%% URL = "http://www.math.utah.edu/~beebe",
-%%% checksum = "18972 101297 342796 3648358",
+%%% checksum = "55386 101297 342797 3648357",
%%% email = "beebe at math.utah.edu, beebe at acm.org,
%%% beebe at computer.org (Internet)",
%%% codetable = "ISO/ASCII",
@@ -46862,7 +46862,7 @@
}
@Article{LPT:TB19-2-137,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{Default docstrip headers}",
journal = j-TUGboat,
volume = "19",
@@ -46883,7 +46883,7 @@
}
@Article{LPT:TB19-2-139,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX} News, Issue 9, June 1998}",
journal = j-TUGboat,
volume = "19",
@@ -49072,7 +49072,7 @@
}
@Article{LPT:TB20-1-52,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX} News, Issue 10, December 1998}",
journal = j-TUGboat,
volume = "20",
@@ -51715,7 +51715,7 @@
}
@Article{LPT:TB20-4-375,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX} News, Issue 12, December 1999}",
journal = j-TUGboat,
volume = "20",
@@ -52888,7 +52888,7 @@
}
@Article{LPT:TB21-2-143,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX} News, Issue 13, June 2000}",
journal = j-TUGboat,
volume = "21",
@@ -59546,7 +59546,7 @@
}
@Article{LPT:TB24-2-221,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX} news, issues 14--16, 2001--2003}",
journal = j-TUGboat,
volume = "24",
@@ -68519,7 +68519,7 @@
}
@Article{Team:TB28-1-24,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 17",
journal = j-TUGboat,
volume = "28",
@@ -76593,7 +76593,7 @@
}
@Article{LPT:TB31-1-64,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 19",
journal = j-TUGboat,
volume = "31",
@@ -76682,7 +76682,7 @@
}
@Article{LPT:TB31-1-79,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX3}} news, issue 3",
journal = j-TUGboat,
volume = "31",
@@ -78272,7 +78272,7 @@
}
@Article{LPT:TB31-3-194,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX3}} news, issue 3",
journal = j-TUGboat,
volume = "31",
@@ -79235,7 +79235,7 @@
}
@Article{LPT:TB32-1-108,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX3}} news, issue 5",
journal = j-TUGboat,
volume = "32",
@@ -80828,7 +80828,7 @@
}
@Article{LPT:TB32-3-331,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 20",
journal = j-TUGboat,
volume = "32",
@@ -81619,7 +81619,7 @@
}
@Article{LPT:TB33-1-46,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{{\LaTeX3}} news, issues 6--7",
journal = j-TUGboat,
volume = "33",
@@ -82146,7 +82146,7 @@
}
@Article{LPT:TB33-2-165,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX3} news, issue 8",
journal = j-TUGboat,
volume = "33",
@@ -86147,7 +86147,7 @@
}
@Article{LPT:TB35-1-22,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX3} news, issue 9",
journal = j-TUGboat,
volume = "35",
@@ -87861,7 +87861,7 @@
@Article{Haralambous:TB35-3-277,
author = "Yannis Haralambous",
title = "A simple {Arabic} typesetting system for mixed
- {Latin\slash Arabic} documents: \emph{\d{d}{\=a}d}",
+ {Latin\slash Arabic} documents: {\em \d{d}{\=a}d}",
journal = j-TUGboat,
volume = "35",
number = "3",
@@ -88581,7 +88581,7 @@
}
@Article{LPT:TB36-1-17,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 21, {May 2014}",
journal = j-TUGboat,
volume = "36",
@@ -90216,7 +90216,7 @@
}
@Article{Team:TB36-3-210,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 22, {January 2015}",
journal = j-TUGboat,
volume = "36",
@@ -90238,7 +90238,7 @@
}
@Article{Team:TB36-3-212,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 23, {October 2015}",
journal = j-TUGboat,
volume = "36",
@@ -90899,7 +90899,7 @@
}
@Article{Team:TB37-1-13,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 24, {January 2016}",
journal = j-TUGboat,
volume = "37",
@@ -90923,7 +90923,7 @@
}
@Article{Team:TB37-1-15,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 25, {March 2016}",
journal = j-TUGboat,
volume = "37",
@@ -93699,7 +93699,7 @@
}
@Article{Team:2017:LNIa,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 26, {January 2017}",
journal = j-TUGboat,
volume = "38",
@@ -93723,7 +93723,7 @@
}
@Article{Team:2017:LNIb,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX3} news, issue 10, {November 2016}",
journal = j-TUGboat,
volume = "38",
@@ -94741,7 +94741,7 @@
}
@Article{Team:2017:LNIc,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 27, {April 2017}",
journal = j-TUGboat,
volume = "38",
@@ -96507,7 +96507,7 @@
}
@Article{Team:2018:LNI,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 28, {April 2018}",
journal = j-TUGboat,
volume = "39",
@@ -98601,7 +98601,7 @@
}
@Article{Team:2019:LNIa,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 29, {December 2018}",
journal = j-TUGboat,
volume = "40",
@@ -100170,7 +100170,7 @@
}
@Article{Team:2019:LNIb,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 30, {October 2019}",
journal = j-TUGboat,
volume = "40",
@@ -100792,7 +100792,7 @@
}
@Article{Team:2020:LNIa,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX3} news, issue 11, {February 2018}",
journal = j-TUGboat,
volume = "41",
@@ -100815,7 +100815,7 @@
}
@Article{Team:2020:LNIb,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX3} news, issue 12, {January 2020}",
journal = j-TUGboat,
volume = "41",
@@ -100839,7 +100839,7 @@
}
@Article{Team:2020:LNIc,
- author = "{{\LaTeX} Project Team}",
+ author = "{\LaTeX} {Project Team}",
title = "{\LaTeX} news, issue 31, {February 2020}",
journal = j-TUGboat,
volume = "41",
diff --git a/language/marathi/README.txt b/language/marathi/README.txt
index c729102ced..659d75da4c 100644
--- a/language/marathi/README.txt
+++ b/language/marathi/README.txt
@@ -1,7 +1,7 @@
आज्ञासंच: marathi
लेखक: निरंजन
-आवृत्ती: १.३.१ (३० जुलै, २०२०)
-माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा
+आवृत्ती: १.४ (१३ ऑगस्ट, २०२०)
+माहिती: लुआलाटेक् व झीलाटेक् ह्यांच्यासह मराठीचा
सुलभ वापर करण्यासाठी. इथून पुढे लाटेक्-वरील मराठीच्या
स्थानिकीकरणाचे काम ह्या आज्ञासंचामार्फत केले जाईल.
तूर्त expex व blindtext ह्या आज्ञासंचांचे स्थानिकीकरण
@@ -22,7 +22,7 @@
--------------------------------------------------------------------------
Package: marathi
Author: Niranjan
-Version: 1.3.1 (30 July, 2020)
+Version: 1.4 (13 August, 2020)
Description: For conveniently typesetting Marathi
language with LuaLaTeX and XeLaTeX. This package
will now onwards host localizations needed for Marathi
diff --git a/language/marathi/marathi.dtx b/language/marathi/marathi.dtx
index 1566092a8a..6355610af7 100644
--- a/language/marathi/marathi.dtx
+++ b/language/marathi/marathi.dtx
@@ -4,7 +4,7 @@
% ---------------------------------------------------------------------------
% आज्ञासंच: marathi
% लेखक: निरंजन
-% माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.
+% माहिती: लुआलाटेक् व झीलाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.
% दुवा: https://gitlab.com/niranjanvikastambe/marathi
% अडचणी: https://gitlab.com/niranjanvikastambe/marathi/-/issues
% परवाना: लाटेक् प्रकल्प परवाना. आवृत्ती १.३सी किंवा त्यापुढील.
@@ -32,8 +32,8 @@
%<*readme>
आज्ञासंच: marathi
लेखक: निरंजन
-आवृत्ती: १.३.१ (३० जुलै, २०२०)
-माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा
+आवृत्ती: १.४ (१३ ऑगस्ट, २०२०)
+माहिती: लुआलाटेक् व झीलाटेक् ह्यांच्यासह मराठीचा
सुलभ वापर करण्यासाठी. इथून पुढे लाटेक्-वरील मराठीच्या
स्थानिकीकरणाचे काम ह्या आज्ञासंचामार्फत केले जाईल.
तूर्त expex व blindtext ह्या आज्ञासंचांचे स्थानिकीकरण
@@ -54,7 +54,7 @@
--------------------------------------------------------------------------
Package: marathi
Author: Niranjan
-Version: 1.3.1 (30 July, 2020)
+Version: 1.4 (13 August, 2020)
Description: For conveniently typesetting Marathi
language with LuaLaTeX and XeLaTeX. This package
will now onwards host localizations needed for Marathi
@@ -76,12 +76,6 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
%<*internal>
\fi
%</internal>
-%<*driver|package>
-\def\marathiPackageName{marathi}
-\def\marathiPackageVersion{१.३.१}
-\def\marathiPackageDate{३० जुलै, २०२०}
-\def\marathiPackageDescription{लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी. इथून पुढे लाटेक्-वरील मराठीच्या स्थानिकीकरणाचे काम ह्या आज्ञासंचामार्फत केले जाईल. तूर्त expex व blindtext ह्या आज्ञासंचांचे स्थानिकीकरण ह्या आज्ञासंचामार्फत पुरवले आहे.}
-%</driver|package>
%<*driver>
\documentclass[10pt]{l3doc}
\usepackage{xltxtra}
@@ -118,9 +112,8 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
\usepackage[sort=use]{glossaries}
\makenoidxglossaries
\input{glossaries.gls}
-\RecordChanges
\begin{document}
-\DocInput{\marathiPackageName.dtx}
+\DocInput{marathi.dtx}
\end{document}
%</driver>
% \fi
@@ -131,7 +124,7 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
% \author{निरंजन}
% \date^^A
% {^^A
-% आवृत्ती \marathiPackageVersion\ \textemdash\ \marathiPackageDate\\[1ex]^^A
+% आवृत्ती १.४ \textemdash\ १३ ऑगस्ट, २०२०\\[1ex]^^A
% {\small\faIcon{gitlab}\quad\url{https://gitlab.com/niranjanvikastambe/marathi}}^^A
% }
%
@@ -146,7 +139,7 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
%
% \begin{documentation}
% \section{प्रस्तावना}
-% लाटेक्-मध्ये मराठीचा वापर करताना सर्वात महत्त्वाची गरज म्हणजे देवनागरी लिपी नीट दिसणे. लाटेक् विकसित झाले तेव्हा युनिकोड ही प्रणाली अस्तित्वात नसल्याने टेक्, लाटेक् ह्यांसारख्या चालकांसह युनिकोड अक्षरे वापरता येत नाहीत, परंतु लवकरच युनिकोड अक्षरांचा वापर लाटेक्-मध्ये करता यावा ह्याकरिता \XeLaTeX\ (झी-लाटेक्) तसेच \LuaLaTeX\ (लुआ-लाटेक्) ह्या नव्या चालकांचा विकास झाला. {\mukta fontspec} सदृश आज्ञासंचासह एखादा युनिकोड-आधारित \gls{टंक} वापरणे व युनिकोड-मजकूर थेट झी-लाटेक् अथवा लुआ-लाटेक्-सोबत चालवणे हे ह्या नव्या चालकांचे प्रमुख उद्दिष्ट होते, परंतु हे काम अतिशय गुंतागुंतीचे होते. २०२० चे \gls{टेक्-वितरण} येईपर्यंत व त्यात हर्फ़बझ नावाची नवी \gls{आज्ञावली} येेईपर्यंत लुआ-लाटेक् देवनागरी हाताळू शकलेच नाही. झी-लाटेक्-सह मात्र देवनागरी व्यवस्थित दिसणे शक्य होत होते.
+% लाटेक्-मध्ये मराठीचा वापर करताना सर्वात महत्त्वाची गरज म्हणजे देवनागरी लिपी नीट दिसणे. लाटेक् विकसित झाले तेव्हा युनिकोड ही प्रणाली अस्तित्वात नसल्याने टेक्, लाटेक् ह्यांसारख्या चालकांसह युनिकोड अक्षरे वापरता येत नाहीत, परंतु लवकरच युनिकोड अक्षरांचा वापर लाटेक्-मध्ये करता यावा ह्याकरिता \XeLaTeX\ (झीलाटेक्) तसेच \LuaLaTeX\ (लुआलाटेक्) ह्या नव्या चालकांचा विकास झाला. {\mukta fontspec} सदृश आज्ञासंचासह एखादा युनिकोड-आधारित \gls{टंक} वापरणे व युनिकोड-मजकूर थेट झीलाटेक् अथवा लुआलाटेक्-सोबत चालवणे हे ह्या नव्या चालकांचे प्रमुख उद्दिष्ट होते, परंतु हे काम अतिशय गुंतागुंतीचे होते. २०२० चे \gls{टेक्-वितरण} येईपर्यंत व त्यात हर्फ़बझ नावाची नवी \gls{आज्ञावली} येेईपर्यंत लुआलाटेक् देवनागरी हाताळू शकलेच नाही. झीलाटेक्-सह मात्र देवनागरी व्यवस्थित दिसणे शक्य होत होते.
% \subsection*{देवनागरी दिसण्यासाठी टाकावयाच्या आज्ञा}
% देवनागरी योग्य तऱ्हेने दिसण्यासाठी काही आज्ञांचा वापर करणे अनिवार्य होते. देवनागरी लिपी दस्तऐवजात दाखवण्यासाठी लागणाऱ्या किमान आज्ञा पुढीलप्रमाणे.
% \begin{minted}[linenos]{latex}
@@ -160,7 +153,7 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
% \end{document}
% \end{minted}
%
-% ह्या उदाहरणाने देवनागरी दिसत असले तरी फलित मात्र हवे तसे दिसत नाही. जोडाक्षरे तुटक दिसतात (उदा. {\sho नमस्कार}). त्यासाठी \mintinline{latex}{\setmainfont} ह्या आज्ञेस \verb|Script=Devanagari| असे \gls{प्राचल} द्यावे लागते. पुढील अडचण म्हणजे लाटेक् आपोआप पुरवणारे आकडे (उदा. पृष्ठक्रमांक, तळटिपांचे क्रमांक) देवनागरीत न येणे. त्याकरिता ह्याच आज्ञेस {\mukta Mapping=devanagarinumerals} असे आणखी एक प्राचल द्यावे लागते. इतके करूनही भाषेचा प्रश्न उरतोच! उदा. लाटेक्-ला इंग्रजीव्यतिरिक्त इतर कोणतीही भाषा कळत नसल्यामुळे मूलभूत इंग्रजी शब्दांची भाषांतरे पुरवणारे बेबल अथवा पॉलिग्लॉसिया ह्यांसारखे आज्ञासंच वापरून भाषा निवडावी लागते. रोहित होळकरांच्या \href{https://ctan.org/pkg/latex-mr?lang=en}{\mukta latex-mr} ह्या पुस्तिकेत ह्या सर्व अडचणींची तपशीलवार चर्चा झाली आहे.
+% ह्या उदाहरणाने देवनागरी दिसत असले तरी फलित मात्र हवे तसे दिसत नाही. जोडाक्षरे तुटक दिसतात (उदा. {\sho नमस्कार}). त्यासाठी \mintinline{latex}{\setmainfont} ह्या आज्ञेस \verb|Script=Devanagari| असे \gls{प्राचल} द्यावे लागते. पुढील अडचण म्हणजे लाटेक् आपोआप पुरवणारे आकडे (उदा. पृष्ठक्रमांक, तळटिपांचे क्रमांक) देवनागरीत न येणे. त्याकरिता ह्याच आज्ञेस {\mukta Mapping=devanagarinumerals} असे आणखी एक प्राचल द्यावे लागते. हे प्राचल केवळ झीलाटेक्-सह काम करते. शिवाय लाटेक्-ला इंग्रजीव्यतिरिक्त इतर कोणतीही भाषा कळत नसल्यामुळे मूलभूत इंग्रजी शब्दांची भाषांतरे पुरवणारे बेबल अथवा पॉलिग्लॉसिया ह्यांसारखे आज्ञासंच वापरून भाषा निवडावी लागते. रोहित होळकरांच्या \href{https://ctan.org/pkg/latex-mr?lang=en}{\mukta latex-mr} ह्या पुस्तिकेत ह्या सर्व अडचणींची तपशीलवार चर्चा झाली आहे.
% सद्यपरिस्थितीत लाटेक्-चे किमान ज्ञान असलेल्या नव्या वापरकर्त्याला मराठी लिहिण्यासाठी एवढा सगळा प्रपंच करायला लावणे म्हणजे ज्या फांदीवर आपण बसलो आहोत तीच तोडण्यासारखे आहे. त्यामुळे कोणत्याही वापरकर्त्याला केवळ लाटेक्-च्या किमान ज्ञानासह \mintinline{latex}{\usepackage{marathi}} एवढी एक आज्ञा लिहून उत्तम देवनागरी अक्षरजुळणी करता यावी हा ह्या आज्ञासंचाचा उद्देश आहे. ह्या आज्ञासंचात पुढील आज्ञांचा समावेश आहे.
% \begin{function}{\परिच्छेद}
@@ -173,7 +166,7 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
% \begin{syntax}
% \cs{टंक} \marg{टंकाचे नाव}
% \end{syntax}
-% ह्या आज्ञासंचात शोभिका हा \gls{मूलटंक} म्हणून निवडून ठेवला आहे. तो बदलायचा असेल तर \mintinline{latex}{\टंक} ह्या आज्ञेची सोय करण्यात आली आहे. ह्या आज्ञेसह आपोआप देवनागरी टंकांसाठी आवश्यक असणारी \verb|Renderer=Harfbuzz, Script=Devanagari| (लुआ-लाटेक्), \verb|Script=Devanagari, Mapping=devanagarinumerals| (झी-लाटेक्) ही प्राचले लिहून ठेवली आहेत. शिवाय \linebreak\mintinline{latex}{\setmainfont{टंकाचे नाव}} ही आज्ञा नेहमीप्रमाणे चालतेच. टंकाचे नाव हा \mintinline{latex}{\टंक} ह्या आज्ञेचा \gls{कार्यघटक} आहे.
+% ह्या आज्ञासंचात शोभिका हा \gls{मूलटंक} म्हणून निवडून ठेवला आहे. तो बदलायचा असेल तर \mintinline{latex}{\टंक} ह्या आज्ञेची सोय करण्यात आली आहे. ह्या आज्ञेसह आपोआप देवनागरी टंकांसाठी आवश्यक असणारी \verb|Renderer=Harfbuzz, Script=Devanagari| (लुआलाटेक्), \verb|Script=Devanagari, Mapping=devanagarinumerals| (झीलाटेक्) ही प्राचले लिहून ठेवली आहेत. शिवाय \linebreak\mintinline{latex}{\setmainfont{टंकाचे नाव}} ही आज्ञा नेहमीप्रमाणे चालतेच. टंकाचे नाव हा \mintinline{latex}{\टंक} ह्या आज्ञेचा \gls{कार्यघटक} आहे.
% \end{function}
%\begin{function}{\दुसराटंक}
% \begin{syntax}
@@ -192,10 +185,17 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
%\end{function}
% \begin{function}{अंतर}
% हे प्राचल वापरल्यास आज्ञासंचातर्फे दोन ओळींमधील अंतरात कोणताही हस्तक्षेप केला जात नाही. अधिक माहितीसाठी \ref{अंतर} वाचा. ह्या प्राचलाला किंमतदेखील देता येते. उदा. \verb|\usepackage[अंतर=2]{marathi}| अशा प्रकारे आज्ञासंच वापरल्यास ओळींमधले अंतर दुप्पट होते. कोणत्याही प्राचलाशिवाय वापरल्यास आज्ञासंचातर्फे मूलभूत अंतराच्या दीडपट अंतर पुरवले जाते. पुढील कोष्टकाने अंतर ह्या प्राचलाचा वापर अधिक स्पष्ट होईल.\label{प्राचल}
-%\begin{center}
-% \includestandalone{table}
+% \begin{center}
+% \begin{tabular}{ll}
+% \hline
+% आज्ञासंचा वापर & ओळींमधले अंतर\\
+% \hline
+% \mintinline{latex}{\usepackage{marathi}} & मूळ अंतराच्या दीडपट\\
+% \mintinline{latex}{\usepackage[अंतर]{marathi}} & मूळ अंतरात कोणताही फरक नाही.\\
+% \mintinline{latex}{\usepackage[अंतर=2]{marathi}} & मूळ अंतराच्या दुप्पट\\
+% \end{tabular}
% \captionof{table}{अंतर}
-%\end{center}
+% \end{center}
% \end{function}
%\begin{function}{\अंतरबदल}
%\begin{syntax}
@@ -214,9 +214,6 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
% \end{minted}
% \end{function}
% \end{documentation}
-%
-% \StopEventually{\PrintIndex}
-%
% \begin{implementation}
% \section{आज्ञासंचाची घडण}
% आता आपण आज्ञासंचाची घडण व त्यातील आज्ञांचा उपयोग लक्षात घेऊयात.
@@ -224,7 +221,7 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
%<*package>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesPackage{marathi}[2020-07-30 v1.3.1 LuaLaTeX Support]
+\ProvidesPackage{marathi}[2020-08-02 v1.4 झीलाटेक् व लुआलाटेक्-सह मराठीचा सुलभ वापर]
\NeedsTeXFormat{LaTeX2e}
% \end{macrocode}
% ह्या आज्ञांसह आज्ञासंचाची पायाभूत माहिती पुरवली.
@@ -235,26 +232,53 @@ Copy the following files in the following path texmf-dist/tex/latex/marathi
% \begin{macrocode}
\RequirePackage{setspace}
\RequirePackage{pgfkeys}
-
-\def\बदल#1{\pgfkeys{marathi/.cd,#1}}
-\pgfkeys{
- marathi/.is family,marathi/.cd,
- अंतर/.code={\@ifclassloaded{memoir}{\linespread{#1}}{\setstretch{#1}}\selectfont},
- अंतर=1.5,
+\def\बदल#1{\pgfqkeys{/marathi}{#1}}
+\newcommand*\marathi@baselineskip{1.5}
+\pgfkeys
+{
+ marathi/.is family, marathi/.cd,
+ अंतर/.store in=\marathi@baselineskip,
अंतर/.default=1
}
-
+\AtBeginDocument
+{
+ \@ifclassloaded{memoir}
+ {
+ \setSingleSpace{\marathi@baselineskip}\selectfont
+ \pgfkeys{marathi/अंतर/.code=\setSingleSpace{#1}\selectfont\SingleSpacing}
+ }
+ {
+ \setstretch{\marathi@baselineskip}
+ \pgfkeys{marathi/अंतर/.code=\setstretch{#1}}
+ }
+}
\DeclareOption*{\expandafter\बदल\expandafter{\CurrentOption}}
-\ProcessOptions
\providecommand{\अंतरबदल}[1]{\बदल{अंतर=#1}}
+\ProcessOptions\relax
\def\arraystretch{1.2}
% \end{macrocode}
% \subsection{भाषा व टंक}
-% लाटेक्-ला भाषा पुरवणारे \verb|babel| व \verb|polyglossia| हे दोन आज्ञासंच आहेत. ते विशिष्ट चालकांसह अधिक चांगले फलित देतात. लुआ-लाटेक् हा अत्याधुनिक चालक आता देवनागरीसाठी उपलब्ध झाला आहे. हर्फ़बझ ह्या लुआविशिष्ट आज्ञावलीच्या मदतीने देवनागरी व्यवस्थित दाखवली जाते. लुआ-लाटेक् \verb|polyglossia| पेक्षा \verb|babel| सह चांगले फलित देते व झी-लाटेक् \verb|polyglossia| आज्ञासंचासह चांगले फलित देते. त्यामुळे लुआ-लाटेक् वापरले जात असल्यास \verb|babel| व झी-लाटेक् वापरले जात असल्यास \verb|polyglossia| अशी निवड करून ठेवली आहे. शोभिका हा टंक टेक्-वितरणासह येत असल्याने त्याची निवड मूलटंक म्हणून करण्यात आली आहे. \verb|\टंक| ह्या आज्ञेसह मूलटंक बदलता येतो. \verb|\दुसराटंक| ह्या आज्ञेसह अधिकचे टंक निवडता येतात.
+% लाटेक्-ला भाषा पुरवणारे \verb|babel| व \verb|polyglossia| हे दोन आज्ञासंच आहेत. \verb|babel| आज्ञासंच लुआलाटेक् व झीलाटेक्-सह चांगले फलित देतो, त्यामुळे ह्या आज्ञासंचाला मूलभूत भाषांतरे पुरवणारा आज्ञासंच मानून \verb|polyglossia| हा आज्ञासंच वैकल्पिक ठेवला आहे. मराठी आज्ञासंचातर्फे \verb|babel| वापरण्याची शिफारस मी करेन. बहुभाषिक दस्तऐवजांचे चांगले फलित चालकनिरपेक्षरित्या देणारा हा आज्ञासंच आहे. \verb|polyglossia| आज्ञासंच केवळ झीलाटेक्-सह योग्य फलित देतो. शोभिका हा टंक टेक्-वितरणासह येत असल्याने त्याची निवड मूलटंक म्हणून करण्यात आली आहे. \verb|\टंक| ह्या आज्ञेसह मूलटंक बदलता येतो. \verb|\दुसराटंक| ह्या आज्ञेसह अधिकचे टंक निवडता येतात.
% \begin{macrocode}
-\RequirePackage{fontspec}
\RequirePackage{iftex}
+\RequirePackage{fontspec}
+\ifluatex
+\setmainfont[Script=Devanagari,Renderer=Harfbuzz]{Shobhika}
+\providecommand{\टंक}[1]{\setmainfont[Script=Devanagari,Renderer=Harfbuzz]{#1}}
+\providecommand{\दुसराटंक}[2]{\newfontfamily{#1}[Renderer=Harfbuzz,Script=Devanagari]{#2}}
+\else
+\setmainfont[Script=Devanagari,Mapping=devanagarinumerals]{Shobhika}
+\providecommand{\टंक}[1]{\setmainfont[Script=Devanagari,Mapping=devanagarinumerals]{#1}}
+\providecommand{\दुसराटंक}[2]{\newfontfamily{#1}[Script=Devanagari,Mapping=devanagarinumerals]{#2}}
+\fi
+\@ifpackageloaded{polyglossia}{
+\setdefaultlanguage{marathi}
\ifluatex
+\setmainfont[Script=Devanagari,Renderer=Harfbuzz]{Shobhika}
+\else
+\setmainfont[Script=Devanagari,Mapping=devanagarinumerals]{Shobhika}
+\fi
+}{
\usepackage{babel}
\babelprovide[import, main, maparabic, mapdigits,
counters/swar = अ आ इ ई उ ऊ ए ऐ ओ औ अं अः ॲ ऋ ऌ ऑ ,
@@ -280,34 +304,30 @@ counters/vyanjan = क ख ग घ ङ
]{marathi}
\renewcommand\thepart{\localecounter{anka}{part}}
\renewcommand\theenumiii{\localecounter{vyanjan}{enumiii}}
-\defaultfontfeatures[\rmfamily,\sffamily,\ttfamily]{Script=Devanagari,Renderer=HarfBuzz}
-\else
-\RequirePackage{polyglossia}
-\setdefaultlanguage{marathi}
-\defaultfontfeatures[\rmfamily,\sffamily,\ttfamily]{Script=Devanagari,Mapping=devanagarinumerals}
-\fi
-\setmainfont{Shobhika}
-\providecommand{\टंक}[1]{\setmainfont{#1}}
-\providecommand{\दुसराटंक}[2]{
- \ifluatex
- \newfontfamily{#1}[Renderer=Harfbuzz,Script=Devanagari]{#2}
- \else
- \ifxetex
- \newfontfamily{#1}[Script=Devanagari,Mapping=devanagarinumerals]{#2}
- \fi\fi
}
% \end{macrocode}
-% ह्या आज्ञांमुळे धारिका लुआ-लाटेक् अथवा झी-लाटेक् ह्यांपैकी कोणत्याही चालकासह चालवता येते.
+% ह्या आज्ञांमुळे धारिका लुआलाटेक् अथवा झीलाटेक् ह्यांपैकी कोणत्याही चालकासह चालवता येते. \verb|polyglossia| हा आज्ञासंच वापरू नये व वापरल्यास केवळ झीलाटेक् हाच चालक वापरावा असा सल्ला मी देईन. कारण सध्या चालक व आज्ञासंचांची क्षमता पाहता पुढील गोष्टी मराठी आज्ञासंचासह पुरवल्या जातात.
+% \begin{center}
+% \begin{tabular}{|c|ccc|}
+% \hline
+% चालक & अचूक अक्षरे & अचूक भाषांतरे & देवनागरी अंक \\
+% \hline
+% \verb|babel| + झीलाटेक् & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{green!70!black}{\faIcon{thumbs-up}} \\
+% \verb|babel| + लुआलाटेक् & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{green!70!black}{\faIcon{thumbs-up}} \\
+% \verb|polyglossia| + झीलाटेक् & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{green!70!black}{\faIcon{thumbs-up}} \\
+% \verb|polyglossia| + लुआलाटेक् & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{green!70!black}{\faIcon{thumbs-up}} & \textcolor{red!70!black}{\faIcon{thumbs-down}} \\
+% \hline
+% \end{tabular}
+% \captionof{table}{चालक व आज्ञासंचांची तुलना}
+% \end{center}
% \subsection{नमुना मजकूर}
% \subsubsection{परिच्छेद}
% परिच्छेद ही आज्ञा दस्तऐवजात कुठेही वापरली तरी एक लहानसा परिच्छेद आपोआप छापला जातो. त्याकरिता एक मजकूर धारिका आज्ञासंचासोबत येते. ती आज्ञासंचात पुढील आज्ञांनी समाविष्ट करून घेतली आहे.
% \begin{macrocode}
-
\providecommand{\परिच्छेद}{\input{namuna-para}}
% \end{macrocode}
% \subsubsection{दस्तऐवज}
% मागे म्हटल्याप्रमाणे नमुना मजकूर तयार करण्यासाठी ह्या आज्ञासंचाचा वापर करता येतो, परंतु त्याकरिता लाटेक्-ला थोडी माहिती पुरवावी लागते. उदा. दस्तऐवजाचा/ची लेखक/लेखिका, दस्तऐवजाचं शीर्षक इत्यादी. ही माहिती पुरवण्याचे विशिष्ट स्थान आहे. लाटेक्-मध्ये मूळ दस्तऐवज सुरू होण्यापूर्वी ही माहिती पुरविण्याकरिता \gls{आज्ञापीठ} असते, तिथे ही माहिती पुरवली जाते, परंतु ह्यामुळे फलित-धारिकेच्या \gls{पायाभूत माहिती}त ती नावे दिसू लागतात. ह्यासाठी आज्ञासंचात ही माहिती पुरवली गेली नाही आहे, ह्याउलट सोबत जोडलेल्या वेगवेगळ्या दस्तऐवजांमध्ये ती माहिती पुरवली गेली आहे. त्या धारिका केवळ नमुना मजकूर पुरवण्यासाठी आहेत. निरनिराळ्या लाटेक्-वर्गांसाठी संबंधित धारिका निवडणे व दस्तऐवजात लिहिलेला लाटेक्-वर्ग कोणता आहे हे पाहून त्यानुसार नमुना मजकूर छापणे ह्यासाठीच्या आज्ञा पुढीलप्रमाणे.
-
% \begin{macrocode}
\newcounter{क्र}
\@ifclassloaded{article}{\setcounter{क्र}{1}}{}
@@ -323,14 +343,18 @@ counters/vyanjan = क ख ग घ ङ
\input{namuna-letter}\relax\fi\fi\fi\fi
}
% \end{macrocode}
-% \verb|beamer| लाटेक्-वर्ग वापरताना \verb|serif| ही टंकछटा निवडावी लागते, त्याशिवाय देवनागरी लिपी दिसत नाही. त्या आज्ञा पुढीलप्रमाणे भरल्या आहेत. \verb|expex| आज्ञासंचाचे स्थानिकीकरणदेखील पुढील आज्ञांमध्ये समाविष्ट आहे.
+% \verb|beamer| लाटेक्-वर्ग वापरताना \verb|serif| ही टंकछटा निवडावी लागते, त्याशिवाय देवनागरी लिपी दिसत नाही. त्यासाठीची आज्ञा पुढीलप्रमाणे.
% \begin{macrocode}
-
-\@ifclassloaded{beamer}{%
- \usefonttheme{serif}}
+\@ifclassloaded{beamer}{\usefonttheme{serif}}{}
% \end{macrocode}
+% ओळ संपते तिथे शब्द अर्धवट राहिल्यास संयोगचिन्हाचा वापर करून उर्वरित शब्द खाली लिहिण्याची पद्धत आपण जाणतो, परंतु शब्द कुठेही तुटता कामा नयेत ह्यासाठी काही आज्ञावली आवश्यक आहे. मराठीकरिता अशी आज्ञावली अजून तयार झालेली नाही, परंतु तोवर कुठेही शब्द तोडणे उचित नसल्यामुळे पुढील आज्ञांद्वारे ते थांबवले आहे.
+% \begin{macrocode}
+\sloppy
+\hyphenpenalty=10000
+\exhyphenpenalty=1000
+% \end{macrocode}
+% \verb|expex| आज्ञासंचाचे स्थानिकीकरणदेखील पुढील आज्ञांमध्ये समाविष्ट आहे.
% \begin{macrocode}
-
\@ifpackageloaded{expex}{
\definelabeltype{devanagari}
{labelgen=list,labellist={अ,आ,इ,ई,उ,ऊ,ए,ऐ,ओ,औ,अं,अः},
@@ -338,7 +362,6 @@ labelformat=A.,
fullrefformat=XA,
labelalign=left,
labelwidth=1.5em}
-
\lingset{labeltype=devanagari}
}{}
\endinput
@@ -348,6 +371,4 @@ labelwidth=1.5em}
% \end{macrocode}
% \end{implementation}
% \pagebreak
-% \printnoidxglossaries
-%
-% \Finale \ No newline at end of file
+% \printnoidxglossaries \ No newline at end of file
diff --git a/language/marathi/marathi.ins b/language/marathi/marathi.ins
index c90690a99f..9596971538 100644
--- a/language/marathi/marathi.ins
+++ b/language/marathi/marathi.ins
@@ -9,7 +9,7 @@
-------------------------------------------------------------------------
आज्ञासंच: marathi
लेखक: निरंजन
-आवृत्ती: १.३.१ (३० जुलै, २०२०)
+आवृत्ती: १.४ (१३ ऑगस्ट, २०२०)
माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.
दुवा: https://gitlab.com/niranjanvikastambe/marathi
अडचणी: https://gitlab.com/niranjanvikastambe/marathi/-/issues
@@ -32,7 +32,7 @@ marathi.sty ही धारिका समाविष्ट आहे.
--------------------------------------------------------------------------
Package: marathi
Author: Niranjan
-Version: 1.3.1 (30 July, 2020)
+Version: 1.4 (13 August, 2020)
Description: For conveniently typesetting Marathi language with LuaLaTeX and XeLaTeX.
Repository: https://gitlab.com/niranjanvikastambe/marathi
Bug tracker: https://gitlab.com/niranjanvikastambe/marathi/-/issues
diff --git a/language/marathi/marathi.pdf b/language/marathi/marathi.pdf
index 6ff5bcf51c..6efc24639d 100644
--- a/language/marathi/marathi.pdf
+++ b/language/marathi/marathi.pdf
Binary files differ
diff --git a/language/marathi/table.tex b/language/marathi/table.tex
deleted file mode 100644
index 0c8e6dc8b3..0000000000
--- a/language/marathi/table.tex
+++ /dev/null
@@ -1,16 +0,0 @@
-\documentclass{standalone}
-\usepackage{fontspec}
-\usepackage{minted}
-\setmainfont[Script=Devanagari]{Shobhika}
-\setmonofont[Script=Devanagari]{Mukta}
-
-\begin{document}
- \begin{tabular}{ll}
- \hline
- आज्ञासंचा वापर & ओळींमधले अंतर\\
- \hline
- \mintinline{latex}{\usepackage{marathi}} & मूळ अंतराच्या दीडपट\\
- \mintinline{latex}{\usepackage[अंतर]{marathi}} & मूळ अंतरात कोणताही फरक नाही.\\
- \mintinline{latex}{\usepackage[अंतर=2]{marathi}} & मूळ अंतराच्या दुप्पट\\
- \end{tabular}
-\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/chhaya/README.txt b/macros/latex/contrib/chhaya/README.txt
index 3d6f4c4a4d..d4e3ee3267 100644
--- a/macros/latex/contrib/chhaya/README.txt
+++ b/macros/latex/contrib/chhaya/README.txt
@@ -1,6 +1,6 @@
आज्ञासंच: chhaya
लेखक: निरंजन
-आवृत्ती: ०.१ (जुलै, २०२०)
+आवृत्ती: ०.२ (१३ ऑगस्ट, २०२०)
माहिती: भाषावैज्ञानिक छायांगांचे संक्षेप पुरवणारा आज्ञासंच
दुवा: https://gitlab.com/niranjanvikastambe/chhaya
अडचणी: https://gitlab.com/niranjanvikastambe/chhaya/-/issues
@@ -10,7 +10,7 @@
--------------------------------------------------------------------------
Package: chhaya
Author: Niranjan
-Version: 0.1 (July, 2020)
+Version: 0.1 (13 August, 2020)
Description: For linguistic glossing in Marathi language.
Repository: https://gitlab.com/niranjanvikastambe/chhaya
Bug tracker: https://gitlab.com/niranjanvikastambe/chhaya/-/issues
diff --git a/macros/latex/contrib/chhaya/chhaya.dtx b/macros/latex/contrib/chhaya/chhaya.dtx
index ed86532f48..43940f990e 100644
--- a/macros/latex/contrib/chhaya/chhaya.dtx
+++ b/macros/latex/contrib/chhaya/chhaya.dtx
@@ -32,7 +32,7 @@
%<*readme>
आज्ञासंच: chhaya
लेखक: निरंजन
-आवृत्ती: ०.१ (जुलै, २०२०)
+आवृत्ती: ०.२ (१३ ऑगस्ट, २०२०)
माहिती: भाषावैज्ञानिक छायांगांचे संक्षेप पुरवणारा आज्ञासंच
दुवा: https://gitlab.com/niranjanvikastambe/chhaya
अडचणी: https://gitlab.com/niranjanvikastambe/chhaya/-/issues
@@ -42,7 +42,7 @@
--------------------------------------------------------------------------
Package: chhaya
Author: Niranjan
-Version: 0.1 (July, 2020)
+Version: 0.1 (13 August, 2020)
Description: For linguistic glossing in Marathi language.
Repository: https://gitlab.com/niranjanvikastambe/chhaya
Bug tracker: https://gitlab.com/niranjanvikastambe/chhaya/-/issues
@@ -52,12 +52,6 @@ License: The LaTeX Project Public License v1.3c or later.
%<*internal>
\fi
%</internal>
-%<*driver|package>
-\def\chhayaPackageName{chhaya}
-\def\chhayaPackageVersion{०.१}
-\def\chhayaPackageDate{जुलै, २०२०}
-\def\chhayaPackageDescription{भाषावैज्ञानिक छायांगांचे संक्षेप पुरवणारा आज्ञासंच}
-%</driver|package>
%<*driver>
\documentclass[10pt]{l3doc}
\usepackage{xltxtra}
@@ -100,7 +94,7 @@ License: The LaTeX Project Public License v1.3c or later.
\RecordChanges
\begin{document}
\setstretch{1.5}
-\DocInput{\chhayaPackageName.dtx}
+\DocInput{chhaya.dtx}
\end{document}
%</driver>
% \fi
@@ -111,7 +105,7 @@ License: The LaTeX Project Public License v1.3c or later.
% \author{निरंजन}
% \date^^A
% {^^A
-% आवृत्ती \chhayaPackageVersion\ \textemdash\ \chhayaPackageDate\\[1ex]^^A
+% आवृत्ती ०.२ \textemdash\ १३ ऑगस्ट, २०२०\\[1ex]^^A
% {\small\faIcon{gitlab}\quad\url{https://gitlab.com/niranjanvikastambe/chhaya}}^^A
% }
%
@@ -184,7 +178,7 @@ License: The LaTeX Project Public License v1.3c or later.
% आज्ञासंचाकरिता आवश्यक सामग्री पुढील आज्ञांद्वारे पुरवली आहे.
% \begin{macrocode}
%<*package>
-\ProvidesPackage{chhaya}
+\ProvidesPackage{chhaya}[2020-08-13 v0.2 भाषावैज्ञानिक छायांगे पुरवणारा आज्ञासंच]
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{fontspec}
\RequirePackage[acronym]{glossaries}
diff --git a/macros/latex/contrib/chhaya/chhaya.ins b/macros/latex/contrib/chhaya/chhaya.ins
index a067ae9924..527101783e 100644
--- a/macros/latex/contrib/chhaya/chhaya.ins
+++ b/macros/latex/contrib/chhaya/chhaya.ins
@@ -9,7 +9,7 @@
-------------------------------------------------------------------------
आज्ञासंच: chhaya
लेखक: निरंजन
-आवृत्ती: ०.१ (जुलै, २०२०)
+आवृत्ती: ०.२ (१३ ऑगस्ट, २०२०)
माहिती: भाषावैज्ञानिक छायांगांचे संक्षेप पुरवणारा आज्ञासंच
दुवा: https://gitlab.com/niranjanvikastambe/chhaya
अडचणी: https://gitlab.com/niranjanvikastambe/chhaya/-/issues
@@ -33,7 +33,7 @@ chhaya.sty ही धारिका समाविष्ट आहे.
--------------------------------------------------------------------------
Package: chhaya
Author: Niranjan
-Version: 0.1 (July, 2020)
+Version: 0.2 (13 August, 2020)
Description: For linguistic glossing in Marathi language.
Repository: https://gitlab.com/niranjanvikastambe/chhaya
Bug tracker: https://gitlab.com/niranjanvikastambe/chhaya/-/issues
diff --git a/macros/latex/contrib/chhaya/chhaya.pdf b/macros/latex/contrib/chhaya/chhaya.pdf
index a3a7a1dceb..5d20a70ab4 100644
--- a/macros/latex/contrib/chhaya/chhaya.pdf
+++ b/macros/latex/contrib/chhaya/chhaya.pdf
Binary files differ
diff --git a/macros/latex/contrib/chhaya/sankshep.tex b/macros/latex/contrib/chhaya/sankshep.tex
index ca75616e5f..28b2b099ec 100644
--- a/macros/latex/contrib/chhaya/sankshep.tex
+++ b/macros/latex/contrib/chhaya/sankshep.tex
@@ -9,11 +9,11 @@
\छायांग{त्रिव}{त्रिव} % Trial
\छायांग{अव}{अल्पवचन} % Paucal
\छायांग{बव}{बहुवचन} % Plural
-\छायांग{उवि}{उद्देश्य विभक्ती} % Nominative
-\छायांग{निवि}{निर्देशक विभक्ती} % Accusative
-\छायांग{सा}{साधक विभक्ती} % Instrumental
+\छायांग{अवि}{अभिधानपर विभक्ती} % Nominative
+\छायांग{कर्मवि}{कर्मपर विभक्ती} % Accusative
+\छायांग{सा}{साधनपर विभक्ती} % Instrumental
\छायांग{दावि}{दानपर विभक्ती} % Dative
-\छायांग{वियो}{वियोजक विभक्ती} % Ablative
+\छायांग{वियो}{वियोगपर विभक्ती} % Ablative
\छायांग{संयो}{संबंधयोजक विभक्ती} % Genitive
\छायांग{अधि}{अधिकरण विभक्ती} % Locative
\छायांग{संबो}{संबोधन विभक्ती} % Vocative
diff --git a/macros/latex/contrib/hopatch/README.md b/macros/latex/contrib/hopatch/README.md
new file mode 100644
index 0000000000..6d8cea38fc
--- /dev/null
+++ b/macros/latex/contrib/hopatch/README.md
@@ -0,0 +1,17 @@
+# hopatch package for LaTeX
+
+Version: 2020-08-01 v1.4
+
+This packages provides a wrapper to various package hooks
+provided by other packages or classes, but does not define
+own hooks. Starting with LaTeX 2020/10/01 it uses the package
+hook provided by the kernel.
+
+
+
+## Copyright (C)
+* 2007, 2009-2011 Heiko Oberdiek
+* 2016-2020 Oberdiek Package Support Group
+
+## License
+LATEX Project Public License, version 1.3c or later.
diff --git a/macros/latex/contrib/oberdiek/hopatch.dtx b/macros/latex/contrib/hopatch/hopatch.dtx
index 17712fc2cc..8071f7456e 100644
--- a/macros/latex/contrib/oberdiek/hopatch.dtx
+++ b/macros/latex/contrib/hopatch/hopatch.dtx
@@ -1,13 +1,13 @@
% \iffalse meta-comment
%
% File: hopatch.dtx
-% Version: 2016/05/16 v1.3
+% Version: 2020-08-01 v1.4
% Info: Wrapper for package hooks
%
% Copyright (C)
% 2011, 2012 Heiko Oberdiek
-% 2016-2019 Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% 2016-2020 Oberdiek Package Support Group
+% https://github.com/ho-tex/hopatch/issues
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -23,7 +23,7 @@
%
% The Current Maintainers of this work are
% Heiko Oberdiek and the Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% https://github.com/ho-tex/hopatch/issues
%
% This work consists of the main source file hopatch.dtx
% and the derived files
@@ -31,8 +31,8 @@
% hopatch-test1.tex, hopatch-test2.tex.
%
% Distribution:
-% CTAN:macros/latex/contrib/oberdiek/hopatch.dtx
-% CTAN:macros/latex/contrib/oberdiek/hopatch.pdf
+% CTAN:macros/latex/contrib/hopatch/hopatch.dtx
+% CTAN:macros/latex/contrib/hopatch/hopatch.pdf
%
% Unpacking:
% (a) If hopatch.ins is present:
@@ -61,9 +61,9 @@
% pdflatex hopatch.dtx
%
% Installation:
-% TDS:tex/latex/oberdiek/hopatch.sty
-% TDS:doc/latex/oberdiek/hopatch.pdf
-% TDS:source/latex/oberdiek/hopatch.dtx
+% TDS:tex/latex/hopatch/hopatch.sty
+% TDS:doc/latex/hopatch/hopatch.pdf
+% TDS:source/latex/hopatch/hopatch.dtx
%
%<*ignore>
\begingroup
@@ -80,7 +80,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: hopatch 2016/05/16 v1.3 Wrapper for package hooks (HO)}
+\Msg{* Package: hopatch 2020-08-01 v1.4 Wrapper for package hooks (HO)}
\Msg{************************************************************************}
\keepsilent
@@ -92,11 +92,11 @@
This is a generated file.
Project: hopatch
-Version: 2016/05/16 v1.3
+Version: 2020-08-01 v1.4
Copyright (C)
2011, 2012 Heiko Oberdiek
- 2016-2019 Oberdiek Package Support Group
+ 2016-2020 Oberdiek Package Support Group
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
@@ -112,12 +112,12 @@ This work has the LPPL maintenance status "maintained".
The Current Maintainers of this work are
Heiko Oberdiek and the Oberdiek Package Support Group
-https://github.com/ho-tex/oberdiek/issues
+https://github.com/ho-tex/hopatch/issues
This work consists of the main source file hopatch.dtx
and the derived files
- hopatch.sty, hopatch.pdf, hopatch.ins, hopatch.drv,
+ hopatch.sty, hopatch-2016-05-16.sty, hopatch.pdf, hopatch.ins, hopatch.drv,
hopatch-test1.tex, hopatch-test2.tex.
\endpreamble
@@ -126,9 +126,10 @@ and the derived files
\generate{%
\file{hopatch.ins}{\from{hopatch.dtx}{install}}%
\file{hopatch.drv}{\from{hopatch.dtx}{driver}}%
- \usedir{tex/latex/oberdiek}%
+ \usedir{tex/latex/hopatch}%
+ \file{hopatch-2016-05-16.sty}{\from{hopatch.dtx}{packagefrozen}}%
\file{hopatch.sty}{\from{hopatch.dtx}{package}}%
-% \usedir{doc/latex/oberdiek/test}%
+% \usedir{doc/latex/hopatch/test}%
% \file{hopatch-test1.tex}{\from{hopatch.dtx}{test1}}%
% \file{hopatch-test2.tex}{\from{hopatch.dtx}{test2}}%
}
@@ -157,7 +158,7 @@ and the derived files
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{hopatch.drv}%
- [2016/05/16 v1.3 Wrapper for package hooks (HO)]%
+ [2020-08-01 v1.4 Wrapper for package hooks (HO)]%
\documentclass{ltxdoc}
\usepackage{holtxdoc}[2011/11/22]
\usepackage{caption}
@@ -175,9 +176,9 @@ and the derived files
% \GetFileInfo{hopatch.drv}
%
% \title{The \xpackage{hopatch} package}
-% \date{2016/05/16 v1.3}
+% \date{2020-08-01 v1.4}
% \author{Heiko Oberdiek\thanks
-% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}}
+% {Please report any issues at \url{https://github.com/ho-tex/hopatch/issues}}}
%
% \maketitle
%
@@ -188,8 +189,22 @@ and the derived files
% \end{abstract}
%
% \tableofcontents
+% \newpage
+% \section{Documentation for version 1.4}
+% Starting with this version
%
-% \section{Documentation}
+% \begin{declcs}{hopatch@AfterPackage} \M{package} \M{patch code}
+% \end{declcs}
+%
+% will use the kernel \texttt{package/after/\meta{package}} hook if a
+% LaTeX format later then 2020/20/01 is detected. This can mean that the
+% hook code is executed earlier than with version 1.3 (but always after the
+% \meta{package}.
+% If \meta{package} is already loaded, the \meta{patch code} is executed
+% immediately. If an older format is detected if will fall back to the code of
+% version 1.3.
+%
+% \section{Documentation for version 1.3}
%
% Sometimes I want to add code right after a package
% has been loaded. Examples are bug fixes, adaptations,
@@ -205,7 +220,7 @@ and the derived files
% that provide hooks that are executed after the package
% is loaded, see table~\ref{tab:hooks}.
%
-% \begin{table}
+% \begin{table}[b]
% \caption{After package hooking}
% \label{tab:hooks}
% \begin{tabular}{ll}
@@ -290,10 +305,34 @@ and the derived files
% }
%
% \section{Implementation}
-%
% \begin{macrocode}
%<*package>
% \end{macrocode}
+% \subsection{v.1.4: New implementation using the LaTeX kernel hooks}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hopatch}%
+ [2020-08-01 v1.4 Wrapper for package hooks (HO)]
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\IfFormatAtLeastTF{2020/10/01}{}{\input{hopatch-2016-05-16.sty}}
+\IfFormatAtLeastTF{2020/10/01}{}{\endinput}
+
+\newcommand\hopatch@AfterPackage[1]{%
+ \@ifpackageloaded{#1}{%
+ \@firstofone
+ }{%
+ \AddToHook{package/after/#1}%
+ }}
+
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \begin{macrocode}
+%<*packagefrozen>
+% \end{macrocode}
%
% \subsection{Catcodes and package identification}
%
@@ -344,7 +383,7 @@ and the derived files
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hopatch}%
- [2016/05/16 v1.3 Wrapper for package hooks (HO)]
+ [2020-08-01 v1.4 Wrapper for package hooks / legacy code (v1.3) (HO)]
% \end{macrocode}
%
% \subsection{Resources}
@@ -494,39 +533,20 @@ and the derived files
\HOpatch@AtEnd%
% \end{macrocode}
% \begin{macrocode}
-%</package>
+%</packagefrozen>
% \end{macrocode}
-%% \section{Installation}
+% \section{Installation}
%
% \subsection{Download}
%
% \paragraph{Package.} This package is available on
% CTAN\footnote{\CTANpkg{hopatch}}:
% \begin{description}
-% \item[\CTAN{macros/latex/contrib/oberdiek/hopatch.dtx}] The source file.
-% \item[\CTAN{macros/latex/contrib/oberdiek/hopatch.pdf}] Documentation.
+% \item[\CTAN{macros/latex/contrib/hopatch/hopatch.dtx}] The source file.
+% \item[\CTAN{macros/latex/contrib/hopatch/hopatch.pdf}] Documentation.
% \end{description}
%
%
-% \paragraph{Bundle.} All the packages of the bundle `oberdiek'
-% are also available in a TDS compliant ZIP archive. There
-% the packages are already unpacked and the documentation files
-% are generated. The files and directories obey the TDS standard.
-% \begin{description}
-% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}]
-% \end{description}
-% \emph{TDS} refers to the standard ``A Directory Structure
-% for \TeX\ Files'' (\CTANpkg{tds}). Directories
-% with \xfile{texmf} in their name are usually organized this way.
-%
-% \subsection{Bundle installation}
-%
-% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the
-% TDS tree (also known as \xfile{texmf} tree) of your choice.
-% Example (linux):
-% \begin{quote}
-% |unzip oberdiek.tds.zip -d ~/texmf|
-% \end{quote}
%
% \subsection{Package installation}
%
@@ -543,9 +563,9 @@ and the derived files
% \begin{quote}
% \def\t{^^A
% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}}
-% hopatch.sty & tex/latex/oberdiek/hopatch.sty\\
-% hopatch.pdf & doc/latex/oberdiek/hopatch.pdf\\
-% hopatch.dtx & source/latex/oberdiek/hopatch.dtx\\
+% hopatch.sty & tex/latex/hopatch/hopatch.sty\\
+% hopatch.pdf & doc/latex/hopatch/hopatch.pdf\\
+% hopatch.dtx & source/latex/hopatch/hopatch.dtx\\
% \end{tabular}^^A
% }^^A
% \sbox0{\t}^^A
@@ -710,6 +730,10 @@ and the derived files
% \item
% Documentation updates.
% \end{Version}
+% \begin{Version}{2020-08-01 v1.4}
+% \item Starting with this version the package will use the hooks provided
+% by the LaTeX kernel if the format is newer than 2020/10/01.
+% \end{Version}
% \end{History}
%
% \PrintIndex
diff --git a/macros/latex/contrib/hopatch/hopatch.pdf b/macros/latex/contrib/hopatch/hopatch.pdf
new file mode 100644
index 0000000000..9e53875a7e
--- /dev/null
+++ b/macros/latex/contrib/hopatch/hopatch.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/README.md b/macros/latex/contrib/oberdiek/README.md
new file mode 100644
index 0000000000..cbdfd8b6c8
--- /dev/null
+++ b/macros/latex/contrib/oberdiek/README.md
@@ -0,0 +1,77 @@
+# Oberdiek bundle
+
+Version: 2020-08-01
+
+This file describes the directory
+ CTAN:macros/latex/contrib/oberdiek/
+
+It contains several packages:
+ <package>.dtx: source code
+ <package>.pdf: documentation
+
+## Copyright (C)
+* 2007, 2009-2011 Heiko Oberdiek
+* 2016-2020 Oberdiek Package Support Group
+
+## License
+LATEX Project Public License, version 1.3c or later.
+
+
+
+## Installation
+
+If you want to install all packages j ust download
+
+ CTAN:install/macros/latex/contrib/oberdiek.tds.zip
+
+and unzip it in your preferred TDS (texmf) tree.
+
+
+Other files in the CTAN directory:
+* README.md: This file.
+* oberdiek.tex, oberdiek.pdf:
+ Table of contents of all packages in the directory.
+ It contains the table of contents and the abstract of the packages.
+ The name is a convenience to users of the program `texdoc'.
+
+## Content
+
+* aliascnt: ‘alias counters’;
+* bmpsize: get bitmap size and resolution data;
+* centernot: a horizontally-centred \not symbol;
+* chemarr: extensible chemists’ reaction arrows;
+* classlist: record information about document class(es) used;
+* colonequals: poor man’s mathematical relation symbols;
+* dvipscol: dvips colour stack management;
+* engord: define counter-printing operations producing English ordinals;
+* eolgrab: collect arguments delimited by end of line;
+* flags: setting and clearing flags in bit fields and converting the bit field into a decimal number;
+* holtxdoc: extra documentation macros;
+* hypbmsec: bookmarks in sectioning commands;
+* hypcap: anjusting anchors of captions;
+* hypdestopt: optimising hyperref’s pdfTeX driver destinations;
+* hypdoc: hyper-references in the LaTeX standard doc package;
+* hypgotoe: experimental package for links to embedded files;
+* hyphsubst: substitute hyphenation patterns;
+* ifdraft: switch for option draft;
+* iflang: provides expandable checks for the current language;
+* pagegrid: prints a page grid in the background;
+* pdfcolfoot: using pdfTeX’s color stack for footnotes;
+* pdfcol: macros for setting and maintaining new color stacks;
+* pdfcolparallel: fixes colour problems in package parallel;
+* pdfcolparcolumns: fixes colour problems in package parcolumns;
+* pdfcrypt: setting PDF encryption;
+* pdfrender: control PDF rendering modes;
+* protecteddef: define a command that protected against expansion;
+* resizegather: automatically resize overly large equations;
+* rotchiffre: performs simple rotation cyphers;
+* scrindex: redefines environment ‘theindex’ of package ‘index’, if a class from KOMA-Script is loaded;
+* setouterhbox: set \hbox in outer horizontal mode;
+* settobox: getting box sizes;
+* stackrel: extensions of the \stackrel command;
+* stampinclude: selects the files for \include by inspecting the timestamp of the .aux file(s);
+* tabularht: tabulars with height specification;
+* tabularkv: key value interface for tabular parameters;
+* telprint: print German telephone numbers;
+* thepdfnumber: canonical numbers for use in PDF files and elsewhere;
+* twoopt: commands with two optional arguments;
diff --git a/macros/latex/contrib/oberdiek/README.txt b/macros/latex/contrib/oberdiek/README.txt
deleted file mode 100644
index 0bf3fd182b..0000000000
--- a/macros/latex/contrib/oberdiek/README.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-README 2019/12/29
-
-This file describes the directory
- CTAN:macros/latex/contrib/oberdiek/
-
-It contains several packages:
- <package>.dtx: source code
- <package>.pdf: documentation
-
-Installation is easier, if you want to install all packages:
-Just download
- CTAN:install/macros/latex/contrib/oberdiek.tds.zip
-and unzip it in your preferred TDS (texmf) tree.
-
-
-Other files in the CTAN directory:
-* README: This file.
-* oberdiek.tex, oberdiek.pdf:
- Table of contents of all packages in the directory.
- It contains the table of contents and the abstract of the packages.
- The name is a convenience to users of the program `texdoc'.
-
-Happy TeXing
- Heiko Oberdiek
- and
- Oberdiek Package Support Group
- ho-tex@tug.org
- Preferred bug reporting address is now
- https://github.com/ho-tex/oberdiek/issues
diff --git a/macros/latex/contrib/oberdiek/aliascnt.pdf b/macros/latex/contrib/oberdiek/aliascnt.pdf
index f65172b7a6..88dd37cf7b 100644
--- a/macros/latex/contrib/oberdiek/aliascnt.pdf
+++ b/macros/latex/contrib/oberdiek/aliascnt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/bmpsize.pdf b/macros/latex/contrib/oberdiek/bmpsize.pdf
index 1238cbab33..ca2159f163 100644
--- a/macros/latex/contrib/oberdiek/bmpsize.pdf
+++ b/macros/latex/contrib/oberdiek/bmpsize.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/centernot.pdf b/macros/latex/contrib/oberdiek/centernot.pdf
index 86d74306bf..f07187e50c 100644
--- a/macros/latex/contrib/oberdiek/centernot.pdf
+++ b/macros/latex/contrib/oberdiek/centernot.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/chemarr.pdf b/macros/latex/contrib/oberdiek/chemarr.pdf
index 8bab924131..92c0fd36ea 100644
--- a/macros/latex/contrib/oberdiek/chemarr.pdf
+++ b/macros/latex/contrib/oberdiek/chemarr.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/classlist.pdf b/macros/latex/contrib/oberdiek/classlist.pdf
index b8d8f45daa..d6be30706d 100644
--- a/macros/latex/contrib/oberdiek/classlist.pdf
+++ b/macros/latex/contrib/oberdiek/classlist.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/colonequals.pdf b/macros/latex/contrib/oberdiek/colonequals.pdf
index 6fc6cb0352..e6bd4ecf28 100644
--- a/macros/latex/contrib/oberdiek/colonequals.pdf
+++ b/macros/latex/contrib/oberdiek/colonequals.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/dvipscol.pdf b/macros/latex/contrib/oberdiek/dvipscol.pdf
index f7bb9d9663..7794d5f6fb 100644
--- a/macros/latex/contrib/oberdiek/dvipscol.pdf
+++ b/macros/latex/contrib/oberdiek/dvipscol.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/engord.pdf b/macros/latex/contrib/oberdiek/engord.pdf
index 9715e2f85e..6058293fe1 100644
--- a/macros/latex/contrib/oberdiek/engord.pdf
+++ b/macros/latex/contrib/oberdiek/engord.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/enparen.pdf b/macros/latex/contrib/oberdiek/enparen.pdf
index 57072a31c0..89a517bb42 100644
--- a/macros/latex/contrib/oberdiek/enparen.pdf
+++ b/macros/latex/contrib/oberdiek/enparen.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/eolgrab.pdf b/macros/latex/contrib/oberdiek/eolgrab.pdf
index 1869e3385d..0305785a2e 100644
--- a/macros/latex/contrib/oberdiek/eolgrab.pdf
+++ b/macros/latex/contrib/oberdiek/eolgrab.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/fibnum.pdf b/macros/latex/contrib/oberdiek/fibnum.pdf
index 2e6b0fa57a..94743cee5c 100644
--- a/macros/latex/contrib/oberdiek/fibnum.pdf
+++ b/macros/latex/contrib/oberdiek/fibnum.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/flags.pdf b/macros/latex/contrib/oberdiek/flags.pdf
index ef974c0562..c39b6a802d 100644
--- a/macros/latex/contrib/oberdiek/flags.pdf
+++ b/macros/latex/contrib/oberdiek/flags.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/holtxdoc.pdf b/macros/latex/contrib/oberdiek/holtxdoc.pdf
index 70c1626f96..3f438af499 100644
--- a/macros/latex/contrib/oberdiek/holtxdoc.pdf
+++ b/macros/latex/contrib/oberdiek/holtxdoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hopatch.pdf b/macros/latex/contrib/oberdiek/hopatch.pdf
index 9363bfd879..2b36643cc1 100644
--- a/macros/latex/contrib/oberdiek/hopatch.pdf
+++ b/macros/latex/contrib/oberdiek/hopatch.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypbmsec.pdf b/macros/latex/contrib/oberdiek/hypbmsec.pdf
index 9ae31b36cc..4ad84d6cbf 100644
--- a/macros/latex/contrib/oberdiek/hypbmsec.pdf
+++ b/macros/latex/contrib/oberdiek/hypbmsec.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypcap.pdf b/macros/latex/contrib/oberdiek/hypcap.pdf
index 9d2c432045..4c33bde26c 100644
--- a/macros/latex/contrib/oberdiek/hypcap.pdf
+++ b/macros/latex/contrib/oberdiek/hypcap.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypdestopt.pdf b/macros/latex/contrib/oberdiek/hypdestopt.pdf
index 671b4f26be..d41e1e6a31 100644
--- a/macros/latex/contrib/oberdiek/hypdestopt.pdf
+++ b/macros/latex/contrib/oberdiek/hypdestopt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypdoc.pdf b/macros/latex/contrib/oberdiek/hypdoc.pdf
index c4ad159d2b..849dc53cc5 100644
--- a/macros/latex/contrib/oberdiek/hypdoc.pdf
+++ b/macros/latex/contrib/oberdiek/hypdoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hypgotoe.pdf b/macros/latex/contrib/oberdiek/hypgotoe.pdf
index d296230489..dba3357190 100644
--- a/macros/latex/contrib/oberdiek/hypgotoe.pdf
+++ b/macros/latex/contrib/oberdiek/hypgotoe.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/hyphsubst.pdf b/macros/latex/contrib/oberdiek/hyphsubst.pdf
index c29e88ce97..4d508389c0 100644
--- a/macros/latex/contrib/oberdiek/hyphsubst.pdf
+++ b/macros/latex/contrib/oberdiek/hyphsubst.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/ifdraft.pdf b/macros/latex/contrib/oberdiek/ifdraft.pdf
index fde537a0c3..06933d8e2b 100644
--- a/macros/latex/contrib/oberdiek/ifdraft.pdf
+++ b/macros/latex/contrib/oberdiek/ifdraft.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/iflang.pdf b/macros/latex/contrib/oberdiek/iflang.pdf
index 28ba93352d..aa906e45b4 100644
--- a/macros/latex/contrib/oberdiek/iflang.pdf
+++ b/macros/latex/contrib/oberdiek/iflang.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib
index 1062c31745..f3d00291d6 100644
--- a/macros/latex/contrib/oberdiek/oberdiek-bundle.bib
+++ b/macros/latex/contrib/oberdiek/oberdiek-bundle.bib
@@ -89,13 +89,6 @@
version={0.29},
url={https://ctan.org/pkg/holtxdoc},
}
-@manual{oberdiek:hopatch,
- title={The hopatch package},
- author={Heiko Oberdiek},
- date={2016-05-16},
- version={1.3},
- url={https://ctan.org/pkg/hopatch},
-}
@manual{oberdiek:hypbmsec,
title={The hypbmsec package},
author={Heiko Oberdiek},
@@ -159,13 +152,6 @@
version={1.5},
url={https://ctan.org/pkg/pagegrid},
}
-@manual{oberdiek:pagesel,
- title={The pagesel package},
- author={Heiko Oberdiek},
- date={2016-05-16},
- version={1.9},
- url={https://ctan.org/pkg/pagesel},
-}
@manual{oberdiek:pdfcol,
title={The pdfcol package},
author={Heiko Oberdiek},
diff --git a/macros/latex/contrib/oberdiek/oberdiek.ins b/macros/latex/contrib/oberdiek/oberdiek.ins
index 66a26e2564..2225a1b33c 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.ins
+++ b/macros/latex/contrib/oberdiek/oberdiek.ins
@@ -1,9 +1,9 @@
% oberdiek.ins
-% 2019/12/29
+% 2020/08/01
%
% Copyright (C)
% 1999, 2001, 2006 Heiko Oberdiek
-% 2016-2019 Oberdiek Package Support Group
+% 2016-2020 Oberdiek Package Support Group
% https://github.com/ho-tex/oberdiek/issues
%
% This work may be distributed and/or modified under the
@@ -39,7 +39,6 @@
\batchinput{fibnum.dtx}
\batchinput{flags.dtx}
\batchinput{holtxdoc.dtx}
-\batchinput{hopatch.dtx}
\batchinput{hypbmsec.dtx}
\batchinput{hypcap.dtx}
\batchinput{hypdestopt.dtx}
@@ -49,7 +48,6 @@
\batchinput{ifdraft.dtx}
\batchinput{iflang.dtx}
\batchinput{pagegrid.dtx}
-\batchinput{pagesel.dtx}
\batchinput{pdfcol.dtx}
\batchinput{pdfcolfoot.dtx}
\batchinput{pdfcolparallel.dtx}
diff --git a/macros/latex/contrib/oberdiek/oberdiek.pdf b/macros/latex/contrib/oberdiek/oberdiek.pdf
index 185bd790b6..9c39006a6f 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.pdf
+++ b/macros/latex/contrib/oberdiek/oberdiek.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/oberdiek.tex b/macros/latex/contrib/oberdiek/oberdiek.tex
index 929efdb784..6b52d9bca3 100644
--- a/macros/latex/contrib/oberdiek/oberdiek.tex
+++ b/macros/latex/contrib/oberdiek/oberdiek.tex
@@ -10,11 +10,11 @@
\newcommand*{\Author}{Heiko Oberdiek}
\newcommand*{\Email}{ho-tex at tug.org}
-\newcommand*{\Date}{2019/12/29}
+\newcommand*{\Date}{2020/08/01}
% Copyright (C) 2006-2016 by
% Heiko Oberdiek
-% Copyright (C) 2016-2019 by
+% Copyright (C) 2016-2020 by
% Oberdiek Package Support Group
%
% This work may be distributed and/or modified under the
@@ -200,8 +200,6 @@
[\entrysep]
\entry{holtxdoc}{Private additional ltxdoc support}%
[\entrysep]
-\entry{hopatch}{Wrapper for package hooks}%
-[\entrysep]
\entry{hypbmsec}{Bookmarks in sectioning commands}%
[\entrysep]
\entry{hypcap}{Adjusting the anchors of captions}%
@@ -220,8 +218,6 @@
[\entrysep]
\entry{pagegrid}{Print page grid in background}%
[\entrysep]
-\entry{pagesel}{Select pages of a document for output}%
-[\entrysep]
\entry{pdfcol}{Handle new color stacks for \hologo{pdfTeX}}%
[\entrysep]
\entry{pdfcolfoot}{Color stack for footnotes with \hologo{pdfTeX}}%
@@ -396,16 +392,6 @@ that may be useful for others in package \xpackage{hypdoc}.
\tocinclude{holtxdoc}
\newpage
-\subsection{\pkgsectformat{hopatch}}
-\label{hopatch}
-\begin{abstract}
-This packages provides a wrapper to various package hooks
-provided by other packages or classes, but does not define
-own hooks.
-\end{abstract}
-\tocinclude{hopatch}
-
-\newpage
\subsection{\pkgsectformat{hypbmsec}}
\label{hypbmsec}
\begin{abstract}
@@ -498,14 +484,6 @@ The \LaTeX\ package prints a page grid in the background.
\tocinclude{pagegrid}
\newpage
-\subsection{\pkgsectformat{pagesel}}
-\label{pagesel}
-\begin{abstract}
-Single pages or page areas can be selected for output.
-\end{abstract}
-\tocinclude{pagesel}
-
-\newpage
\subsection{\pkgsectformat{pdfcol}}
\label{pdfcol}
\begin{abstract}
diff --git a/macros/latex/contrib/oberdiek/pagegrid.pdf b/macros/latex/contrib/oberdiek/pagegrid.pdf
index 2feba030d0..dfd0294a43 100644
--- a/macros/latex/contrib/oberdiek/pagegrid.pdf
+++ b/macros/latex/contrib/oberdiek/pagegrid.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pagesel.pdf b/macros/latex/contrib/oberdiek/pagesel.pdf
deleted file mode 100644
index caefe1853e..0000000000
--- a/macros/latex/contrib/oberdiek/pagesel.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcol.pdf b/macros/latex/contrib/oberdiek/pdfcol.pdf
index e2d14d92c6..389652ec38 100644
--- a/macros/latex/contrib/oberdiek/pdfcol.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcol.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf
index 7cfaba36b8..64ce4915e4 100644
--- a/macros/latex/contrib/oberdiek/pdfcolfoot.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolfoot.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
index a8a268bb3f..0c69e89412 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolparallel.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
index 8e2d87f2e4..920203f40e 100644
--- a/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcolparcolumns.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfcrypt.pdf b/macros/latex/contrib/oberdiek/pdfcrypt.pdf
index 3f67cdbf4e..468ab9b255 100644
--- a/macros/latex/contrib/oberdiek/pdfcrypt.pdf
+++ b/macros/latex/contrib/oberdiek/pdfcrypt.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/pdfrender.pdf b/macros/latex/contrib/oberdiek/pdfrender.pdf
index 37bdc0e3ab..d1335436d5 100644
--- a/macros/latex/contrib/oberdiek/pdfrender.pdf
+++ b/macros/latex/contrib/oberdiek/pdfrender.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/protecteddef.pdf b/macros/latex/contrib/oberdiek/protecteddef.pdf
index 5a2e76b27b..4c37798f2c 100644
--- a/macros/latex/contrib/oberdiek/protecteddef.pdf
+++ b/macros/latex/contrib/oberdiek/protecteddef.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/resizegather.pdf b/macros/latex/contrib/oberdiek/resizegather.pdf
index ad1e194b4b..2fecaefee9 100644
--- a/macros/latex/contrib/oberdiek/resizegather.pdf
+++ b/macros/latex/contrib/oberdiek/resizegather.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/rotchiffre.pdf b/macros/latex/contrib/oberdiek/rotchiffre.pdf
index 1e5db0a1a9..88097719ca 100644
--- a/macros/latex/contrib/oberdiek/rotchiffre.pdf
+++ b/macros/latex/contrib/oberdiek/rotchiffre.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/scrindex.pdf b/macros/latex/contrib/oberdiek/scrindex.pdf
index 2b09bc784c..e9f69e95da 100644
--- a/macros/latex/contrib/oberdiek/scrindex.pdf
+++ b/macros/latex/contrib/oberdiek/scrindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/setouterhbox.pdf b/macros/latex/contrib/oberdiek/setouterhbox.pdf
index f257218fe1..f3009b2f03 100644
--- a/macros/latex/contrib/oberdiek/setouterhbox.pdf
+++ b/macros/latex/contrib/oberdiek/setouterhbox.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/settobox.pdf b/macros/latex/contrib/oberdiek/settobox.pdf
index 9f8e1f7f88..c79bd6368d 100644
--- a/macros/latex/contrib/oberdiek/settobox.pdf
+++ b/macros/latex/contrib/oberdiek/settobox.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/stackrel.pdf b/macros/latex/contrib/oberdiek/stackrel.pdf
index 96c39d8624..311cdf1963 100644
--- a/macros/latex/contrib/oberdiek/stackrel.pdf
+++ b/macros/latex/contrib/oberdiek/stackrel.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/stampinclude.pdf b/macros/latex/contrib/oberdiek/stampinclude.pdf
index 34ee7ab997..09de65a2a4 100644
--- a/macros/latex/contrib/oberdiek/stampinclude.pdf
+++ b/macros/latex/contrib/oberdiek/stampinclude.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/tabularht.pdf b/macros/latex/contrib/oberdiek/tabularht.pdf
index 5d624c8010..ae21206d8b 100644
--- a/macros/latex/contrib/oberdiek/tabularht.pdf
+++ b/macros/latex/contrib/oberdiek/tabularht.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/tabularkv.pdf b/macros/latex/contrib/oberdiek/tabularkv.pdf
index 2269827a20..128e427f7a 100644
--- a/macros/latex/contrib/oberdiek/tabularkv.pdf
+++ b/macros/latex/contrib/oberdiek/tabularkv.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/telprint.pdf b/macros/latex/contrib/oberdiek/telprint.pdf
index a5cb234076..fe655b9c09 100644
--- a/macros/latex/contrib/oberdiek/telprint.pdf
+++ b/macros/latex/contrib/oberdiek/telprint.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/thepdfnumber.pdf b/macros/latex/contrib/oberdiek/thepdfnumber.pdf
index 0e525ea004..3f365b77db 100644
--- a/macros/latex/contrib/oberdiek/thepdfnumber.pdf
+++ b/macros/latex/contrib/oberdiek/thepdfnumber.pdf
Binary files differ
diff --git a/macros/latex/contrib/oberdiek/twoopt.pdf b/macros/latex/contrib/oberdiek/twoopt.pdf
index 7d3ba20daf..d061ba72d8 100644
--- a/macros/latex/contrib/oberdiek/twoopt.pdf
+++ b/macros/latex/contrib/oberdiek/twoopt.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagesel/README.md b/macros/latex/contrib/pagesel/README.md
new file mode 100644
index 0000000000..70d509d2ea
--- /dev/null
+++ b/macros/latex/contrib/pagesel/README.md
@@ -0,0 +1,14 @@
+# pagesel
+
+Version: 2020-08-03 v1.10
+
+pagesel package for latex
+
+The package allows to select pages for the output. All other pages are thrown away.
+
+## Copyright (C)
+* 2007, 2009-2011 Heiko Oberdiek
+* 2016-2020 Oberdiek Package Support Group
+
+## License
+LATEX Project Public License, version 1.3c or later.
diff --git a/macros/latex/contrib/oberdiek/pagesel.dtx b/macros/latex/contrib/pagesel/pagesel.dtx
index b674f803d4..68d030a934 100644
--- a/macros/latex/contrib/oberdiek/pagesel.dtx
+++ b/macros/latex/contrib/pagesel/pagesel.dtx
@@ -1,13 +1,13 @@
% \iffalse meta-comment
%
% File: pagesel.dtx
-% Version: 2016/05/16 v1.9
+% Version: 2020-08-03 v1.10
% Info: Select pages of a document for output
%
% Copyright (C)
% 1999, 2003, 2006-2008 Heiko Oberdiek
-% 2016-2019 Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% 2016-2020 Oberdiek Package Support Group
+% https://github.com/ho-tex/pagesel/issues
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -23,15 +23,16 @@
%
% The Current Maintainers of this work are
% Heiko Oberdiek and the Oberdiek Package Support Group
-% https://github.com/ho-tex/oberdiek/issues
+% https://github.com/ho-tex/pagesel/issues
%
% This work consists of the main source file pagesel.dtx
% and the derived files
-% pagesel.sty, pagesel.pdf, pagesel.ins, pagesel.drv.
+% pagesel.sty, pagesel-2016-05-16.sty,
+% pagesel.pdf, pagesel.ins, pagesel.drv.
%
% Distribution:
-% CTAN:macros/latex/contrib/oberdiek/pagesel.dtx
-% CTAN:macros/latex/contrib/oberdiek/pagesel.pdf
+% CTAN:macros/latex/contrib/pagesel/pagesel.dtx
+% CTAN:macros/latex/contrib/pagesel/pagesel.pdf
%
% Unpacking:
% (a) If pagesel.ins is present:
@@ -60,9 +61,9 @@
% pdflatex pagesel.dtx
%
% Installation:
-% TDS:tex/latex/oberdiek/pagesel.sty
-% TDS:doc/latex/oberdiek/pagesel.pdf
-% TDS:source/latex/oberdiek/pagesel.dtx
+% TDS:tex/latex/pagesel/pagesel.sty
+% TDS:doc/latex/pagesel/pagesel.pdf
+% TDS:source/latex/pagesel/pagesel.dtx
%
%<*ignore>
\begingroup
@@ -79,7 +80,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: pagesel 2016/05/16 v1.9 Select pages of a document for output (HO)}
+\Msg{* Package: pagesel 2020-08-03 v1.10 Select pages of a document for output (HO)}
\Msg{************************************************************************}
\keepsilent
@@ -91,11 +92,11 @@
This is a generated file.
Project: pagesel
-Version: 2016/05/16 v1.9
+Version: 2020-08-03 v1.10
Copyright (C)
1999, 2003, 2006-2008 Heiko Oberdiek
- 2016-2019 Oberdiek Package Support Group
+ 2016-2020 Oberdiek Package Support Group
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
@@ -111,12 +112,13 @@ This work has the LPPL maintenance status "maintained".
The Current Maintainers of this work are
Heiko Oberdiek and the Oberdiek Package Support Group
-https://github.com/ho-tex/oberdiek/issues
+https://github.com/ho-tex/pagesel/issues
This work consists of the main source file pagesel.dtx
and the derived files
- pagesel.sty, pagesel.pdf, pagesel.ins, pagesel.drv.
+ pagesel.sty, pagesel-2016-05-16.sty, pagesel.pdf,
+ pagesel.ins, pagesel.drv.
\endpreamble
\let\MetaPrefix\DoubleperCent
@@ -124,8 +126,9 @@ and the derived files
\generate{%
\file{pagesel.ins}{\from{pagesel.dtx}{install}}%
\file{pagesel.drv}{\from{pagesel.dtx}{driver}}%
- \usedir{tex/latex/oberdiek}%
+ \usedir{tex/latex/pagesel}%
\file{pagesel.sty}{\from{pagesel.dtx}{package}}%
+ \file{pagesel-2016-05-16.sty}{\from{pagesel.dtx}{packagefrozen}}
}
\catcode32=13\relax% active space
@@ -152,7 +155,7 @@ and the derived files
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{pagesel.drv}%
- [2016/05/16 v1.9 Select pages of a document for output (HO)]%
+ [2020-08-03 v1.10 Select pages of a document for output (HO)]%
\documentclass{ltxdoc}
\usepackage{holtxdoc}[2011/11/22]
\begin{document}
@@ -166,9 +169,9 @@ and the derived files
% \GetFileInfo{pagesel.drv}
%
% \title{The \xpackage{pagesel} package}
-% \date{2016/05/16 v1.9}
+% \date{2020-08-03 v1.10}
% \author{Heiko Oberdiek\thanks
-% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}}
+% {Please report any issues at \url{https://github.com/ho-tex/pagesel/issues}}}
%
% \maketitle
%
@@ -284,12 +287,38 @@ and the derived files
% }
%
% \section{Implementation}
-% \subsection{Package}
% \begin{macrocode}
%<*package>
+% \end{macrocode}
+% \subsection{New implementation using the LaTeX kernel hooks}
+% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{pagesel}
- [2016/05/16 v1.9 Select pages of a document for output (HO)]%
+ [2020-08-03 v1.10 Select pages of a document for output (HO)]%
+% \end{macrocode}
+% \begin{macrocode}
+\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\IfFormatAtLeastTF{2020/10/01}{}{\input{pagesel-2016-05-16.sty}}
+\IfFormatAtLeastTF{2020/10/01}{}{\endinput}
+
+% \end{macrocode}
+% If the package is loaded twice, the package code does not
+% work. So stop loading the package, if it is already loaded.
+% \begin{macrocode}
+\@ifundefined{ps@oddpages}{}{%
+ \PackageWarningNoLine{pagesel}{Package already loaded.}%
+ \endinput
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \subsection{Package}
+% \begin{macrocode}
+%<*packagefrozen>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pagesel}
+ [2020-08-03 v1.10 Select pages of a document for output (legacy code) (HO)]%
% \end{macrocode}
%
% If the package is loaded twice, the package code does not
@@ -315,11 +344,13 @@ and the derived files
\deadcycles=\count@
\endgroup
}
+%</packagefrozen>
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ps@oddpages}
% \begin{macrocode}
+%<*package|packagefrozen>
\newcommand*\ps@oddpages{0}
\DeclareOption{odd}{\renewcommand*\ps@oddpages{1}}
\DeclareOption{even}{\renewcommand*\ps@oddpages{2}}
@@ -415,10 +446,14 @@ and the derived files
% \end{macrocode}
%
% \begin{macrocode}
+%</package|packagefrozen>
+%<*packagefrozen>
\RequirePackage{everyshi}
+%</packagefrozen>
% \end{macrocode}
%
% \begin{macrocode}
+%<*package|packagefrozen>
\ps@nofiles
% \end{macrocode}
%
@@ -482,7 +517,10 @@ and the derived files
% \end{macro}
%
% \begin{macrocode}
-\EveryShipout{%
+%</package|packagefrozen>
+%<packagefrozen>\EveryShipout{%
+%<package>\AddToHook{shipout/before}{%
+%<*package|packagefrozen>
\stepcounter{ps@count}%
\ifnum\value{ps@count}>\ps@lastpage\relax
\global\output{%
@@ -504,52 +542,57 @@ and the derived files
\let\ps@next\@empty
\ifx\ps@testlist\@empty
\else
- \let\ps@next\ps@makevoid
+%<packagefrozen> \let\ps@next\ps@makevoid
+%<package> \let\ps@next\DiscardShipoutBox
\ps@testlist
\fi
\ifnum\ps@oddpages=1 %
\ifodd\value{ps@count}%
\else
- \let\ps@next\ps@makevoid
+%<packagefrozen> \let\ps@next\ps@makevoid
+%<package> \let\ps@next\DiscardShipoutBox
\fi
\fi
\ifnum\ps@oddpages=2 %
\ifodd\value{ps@count}%
- \let\ps@next\ps@makevoid
+%<packagefrozen> \let\ps@next\ps@makevoid
+%<package> \let\ps@next\DiscardShipoutBox
\else
\fi
\fi
- \ps@begindvi
+%<packagefrozen> \ps@begindvi
\ps@next
}
+%</package|packagefrozen>
% \end{macrocode}
%
% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname currentiflevel\endcsname\relax
- \let\ps@cleanup@if\@empty
-\else
+%<*package|packagefrozen>
+%<packagefrozen>\begingroup\expandafter\expandafter\expandafter\endgroup
+%<packagefrozen>\expandafter\ifx\csname currentiflevel\endcsname\relax
+%<packagefrozen> \let\ps@cleanup@if\@empty
+%<packagefrozen>\else
\def\ps@cleanup@if{%
\ifnum\currentiflevel>\@ne
\csname fi\endcsname
\expandafter\ps@cleanup@if
\fi
}%
-\fi
+%<packagefrozen>\fi
% \end{macrocode}
% Because of \cs{aftergroup} it is too dangerous to perform
% a similar cleanup for groups.
% \begin{macrocode}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname currentgrouplevel\endcsname\relax
- \let\ps@group@message\@empty
- \def\ps@message@ignore{%
- \typeout{%
- (pagesel) \space\space\@spaces\@spaces\@spaces
- Messages (\string\end\space occurred ...) can be ignored.%
- }%
- }%
-\else
+%<packagefrozen> \begingroup\expandafter\expandafter\expandafter\endgroup
+%<packagefrozen> \expandafter\ifx\csname currentgrouplevel\endcsname\relax
+%<packagefrozen> \let\ps@group@message\@empty
+%<packagefrozen> \def\ps@message@ignore{%
+%<packagefrozen> \typeout{%
+%<packagefrozen> (pagesel) \space\space\@spaces\@spaces\@spaces
+%<packagefrozen> Messages (\string\end\space occurred ...) can be ignored.%
+%<packagefrozen> }%
+%<packagefrozen> }%
+%<packagefrozen>\else
\def\ps@group@message{%
\ifnum\currentgrouplevel>\@ne
\def\ps@message@ignore{%
@@ -563,7 +606,8 @@ and the derived files
\let\ps@message@ignore\@empty
\fi
}%
-\fi
+%<packagefrozen>\fi
+%</package|packagefrozen>
% \end{macrocode}
%
% \subsection{AtBeginDvi hook support}
@@ -571,6 +615,7 @@ and the derived files
% The material of box \cs{@begindvibox} is recorded in parallel
% in box \cs{ps@begindvibox}.
% \begin{macrocode}
+%<*packagefrozen>
\newbox\ps@begindvibox
\ifvoid\@begindvibox
\else
@@ -614,7 +659,7 @@ and the derived files
% \end{macro}
%
% \begin{macrocode}
-%</package>
+%</packagefrozen>
% \end{macrocode}
%
% \section{Installation}
@@ -624,30 +669,11 @@ and the derived files
% \paragraph{Package.} This package is available on
% CTAN\footnote{\CTANpkg{pagesel}}:
% \begin{description}
-% \item[\CTAN{macros/latex/contrib/oberdiek/pagesel.dtx}] The source file.
-% \item[\CTAN{macros/latex/contrib/oberdiek/pagesel.pdf}] Documentation.
-% \end{description}
-%
-%
-% \paragraph{Bundle.} All the packages of the bundle `oberdiek'
-% are also available in a TDS compliant ZIP archive. There
-% the packages are already unpacked and the documentation files
-% are generated. The files and directories obey the TDS standard.
-% \begin{description}
-% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}]
+% \item[\CTAN{macros/latex/contrib/pagesel/pagesel.dtx}] The source file.
+% \item[\CTAN{macros/latex/contrib/pagesel/pagesel.pdf}] Documentation.
% \end{description}
-% \emph{TDS} refers to the standard ``A Directory Structure
-% for \TeX\ Files'' (\CTANpkg{tds}). Directories
-% with \xfile{texmf} in their name are usually organized this way.
%
-% \subsection{Bundle installation}
%
-% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the
-% TDS tree (also known as \xfile{texmf} tree) of your choice.
-% Example (linux):
-% \begin{quote}
-% |unzip oberdiek.tds.zip -d ~/texmf|
-% \end{quote}
%
% \subsection{Package installation}
%
@@ -664,9 +690,9 @@ and the derived files
% \begin{quote}
% \def\t{^^A
% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}}
-% pagesel.sty & tex/latex/oberdiek/pagesel.sty\\
-% pagesel.pdf & doc/latex/oberdiek/pagesel.pdf\\
-% pagesel.dtx & source/latex/oberdiek/pagesel.dtx\\
+% pagesel.sty & tex/latex/pagesel/pagesel.sty\\
+% pagesel.pdf & doc/latex/pagesel/pagesel.pdf\\
+% pagesel.dtx & source/latex/pagesel/pagesel.dtx\\
% \end{tabular}^^A
% }^^A
% \sbox0{\t}^^A
@@ -846,6 +872,10 @@ and the derived files
% \item
% Documentation updates.
% \end{Version}
+% \begin{Version}{2020-08-03 v1.10}
+% \item Updated to follow the changes in the hook management
+% of LaTeX 2020/10/01
+% \end{Version}
% \end{History}
%
% \PrintIndex
diff --git a/macros/latex/contrib/pagesel/pagesel.pdf b/macros/latex/contrib/pagesel/pagesel.pdf
new file mode 100644
index 0000000000..bfc552e9a3
--- /dev/null
+++ b/macros/latex/contrib/pagesel/pagesel.pdf
Binary files differ
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index 9209c02ed5..622b80ed14 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -1,5 +1,8 @@
$mirrors = {
'Africa' => {
+ 'Algeria' => {
+ 'http://ctan.epst-tlemcen.dz/tex-archive/' => 1,
+ },
'Morocco' => {
'https://mirror.marwan.ma/ctan/' => 1,
},
@@ -16,6 +19,7 @@ $mirrors = {
'https://mirrors.aliyun.com/CTAN/' => 1,
'https://mirrors.bfsu.edu.cn/CTAN/' => 1,
'https://mirrors.cqu.edu.cn/CTAN/' => 1,
+ 'https://mirrors.hit.edu.cn/CTAN/' => 1,
'https://mirrors.nju.edu.cn/CTAN/' => 1,
'https://mirrors.sjtug.sjtu.edu.cn/ctan/' => 1,
'https://mirrors.tuna.tsinghua.edu.cn/CTAN/' => 1,
@@ -46,7 +50,6 @@ $mirrors = {
'http://ftp.kaist.ac.kr/pub/tex-archive/' => 1,
'http://ftp.ktug.org/tex-archive/' => 1,
'http://mirror.kakao.com/CTAN/' => 1,
- 'https://cran.asia/tex/' => 1,
'https://ftp.harukasan.org/CTAN/' => 1,
'https://mirror.navercorp.com/CTAN/' => 1,
'https://mirror.yongbok.net/ctan/' => 1,
@@ -63,6 +66,9 @@ $mirrors = {
'https://mirror.easyname.at/ctan/' => 1,
'https://mirror.kumi.systems/ctan/' => 1,
},
+ 'Belarus' => {
+ 'https://mirror.datacenter.by/pub/mirrors/CTAN/' => 1,
+ },
'Czech Republic' => {
'http://ftp.cvut.cz/tex-archive/' => 1,
'https://mirrors.nic.cz/tex-archive/' => 1,
@@ -105,7 +111,6 @@ $mirrors = {
'https://packages.oth-regensburg.de/ctan/' => 1,
},
'Greece' => {
- 'http://ftp.ntua.gr/mirror/ctan/' => 1,
'https://ftp.cc.uoc.gr/mirrors/CTAN/' => 1,
},
'Hungary' => {
@@ -179,9 +184,6 @@ $mirrors = {
},
},
'Oceania' => {
- 'Australia' => {
- 'https://mirror.aarnet.edu.au/pub/CTAN/' => 1,
- },
'New Zealand' => {
'http://mirror.aut.ac.nz/CTAN/' => 1,
},
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index 4a73f28fb7..fd48716ada 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2020
-depend revision/56096
+depend revision/56107
name 00texlive.image
category TLCore
-revision 56076
+revision 56106
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -1993,6 +1993,7 @@ runfiles size=5026
tlpkg/tlpsrc/hobsub.tlpsrc
tlpkg/tlpsrc/hologo.tlpsrc
tlpkg/tlpsrc/hook-pre-commit-pkg.tlpsrc
+ tlpkg/tlpsrc/hopatch.tlpsrc
tlpkg/tlpsrc/horoscop.tlpsrc
tlpkg/tlpsrc/hpsdiss.tlpsrc
tlpkg/tlpsrc/hrefhide.tlpsrc
@@ -2887,6 +2888,7 @@ runfiles size=5026
tlpkg/tlpsrc/pagecont.tlpsrc
tlpkg/tlpsrc/pagenote.tlpsrc
tlpkg/tlpsrc/pagerange.tlpsrc
+ tlpkg/tlpsrc/pagesel.tlpsrc
tlpkg/tlpsrc/pageslts.tlpsrc
tlpkg/tlpsrc/palatino.tlpsrc
tlpkg/tlpsrc/paper.tlpsrc
@@ -4239,7 +4241,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 56091
+revision 56098
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -18854,17 +18856,16 @@ catalogue-version 1.0
name aomart
category Package
-revision 46091
+revision 56102
shortdesc Typeset articles for the Annals of Mathematics
relocated 1
longdesc The package provides a class for typesetting articles for The
longdesc Annals of Mathematics.
-containersize 13276
-containerchecksum 699f0d1fc5e8fa4bccd31609044e2330dd33083acb56832a64ede0d23d4f21e7a8d37ad5734e282d11238c334399f5b5b6449671ab82b737f9c51612b49f727f
-doccontainersize 1150464
-doccontainerchecksum ca87c32d703e136735fb6e121c4bcf9fcad367121b071bbb792d96da1669001e4221116275aa6b37df1af7788df4ddaa6948aca3405facc0f05af7ae6924215e
-docfiles size=424
- RELOC/doc/latex/aomart/Makefile
+containersize 13396
+containerchecksum 5b29c240180a4bd2c19ce3ac7d59bddc3e394b8eb92d0723ab044058e06b9ad8ce415f230e3d929c0425b70e544a2b9ce98168c594093113e6bc7574b2e1ba95
+doccontainersize 1156148
+doccontainerchecksum b32c3bcade372d00f78c8e97e0061a882c3773ccd1730180fcb09a397c635075445b0d5e0584c42531e1352df721d2db77870e965ecd25b55b252b380c1d7ef2
+docfiles size=425
RELOC/doc/latex/aomart/README details="Readme"
RELOC/doc/latex/aomart/aomart.bib
RELOC/doc/latex/aomart/aomart.pdf details="Package documentation"
@@ -18876,9 +18877,10 @@ docfiles size=424
RELOC/doc/latex/aomart/aomsample1.pdf
RELOC/doc/latex/aomart/aomsample1.tex
RELOC/doc/latex/aomart/fullref.pl
-srccontainersize 20092
-srccontainerchecksum ba9496f1adee23fff0bf5b3d1d5d54f05c6808ce2b40e7fad8450f01d4c02a2e5e6104304131eb52c91df47a1091f46623d4d4e1849d015f1e6b37d86f210c05
-srcfiles size=20
+srccontainersize 21084
+srccontainerchecksum 67636895d4fb4bf64130fb021953117ed29dd69a82b991ba05d6f40a2cfb3653d11c78d0ef60023cf00a7c44de87cb247d384231ef44265dfdf85083e0a49643
+srcfiles size=21
+ RELOC/source/latex/aomart/Makefile
RELOC/source/latex/aomart/aomart.dtx
RELOC/source/latex/aomart/aomart.ins
runfiles size=21
@@ -18888,7 +18890,7 @@ runfiles size=21
catalogue-ctan /macros/latex/contrib/aomart
catalogue-license lppl1.3
catalogue-topics journalpub
-catalogue-version 1.21
+catalogue-version 1.24
name apa
category Package
@@ -23139,7 +23141,7 @@ catalogue-version 1.19
name asmejour
category Package
-revision 56092
+revision 56101
shortdesc A template for ASME journal papers
relocated 1
longdesc This package provides a LaTeX class, a BibTeX style, and a
@@ -23148,11 +23150,11 @@ longdesc American Society of Mechanical Engineers (ASME). The .tex and
longdesc .cls files are commented and should be self-explanatory. The
longdesc package depends on newtx. This work is not a publication of
longdesc ASME itself.
-containersize 18208
-containerchecksum 1873ca83834d485964aad3e11a684cbe51292567bb7135afc322e9dd48164a1a9879ffe21286c8fd6bdf4a0a186ff45aeb229501036122ca245f7de92632f1a6
-doccontainersize 588352
-doccontainerchecksum 10064f6b0d30d45aba5aef75b2a93ca603353ecbea31216a4103dfa8268eb6ad5c6c1af55fd436c6ccc3c054e171317913e3307bfad20f55373454126ca96065
-docfiles size=220
+containersize 18240
+containerchecksum ef68488fd747687d5f182af5c85b2ed849d038977c3958a3206ade73827f3519aba2b5488fb6e370f7842e9e5956035ac2f6472dd0ad82e72040be797b3664f8
+doccontainersize 591596
+doccontainerchecksum 1e829dba81d3fb390a11a3a8c4caadb0edcfcb5fbd3f4fb4cb7b1852eacd6074e238650bfedfba24b6e47a2b100ddcb06fc8feef13abea247009ee3872929e62
+docfiles size=221
RELOC/doc/latex/asmejour/README.md details="Readme"
RELOC/doc/latex/asmejour/asmejour-sample.bib
RELOC/doc/latex/asmejour/asmejour-template.pdf details="Example of use"
@@ -23166,7 +23168,7 @@ runfiles size=19
catalogue-ctan /macros/latex/contrib/asmejour
catalogue-license mit
catalogue-topics class journalpub scientific-docs bibtex-sty engineering
-catalogue-version 1.13
+catalogue-version 1.14
name aspectratio
category Package
@@ -32180,16 +32182,16 @@ catalogue-version 0.2
name beebe
category Package
-revision 56094
+revision 56098
catalogue biblio
shortdesc A collection of bibliographies
relocated 1
longdesc A collection of BibTeX bibliographies on TeX-related topics
longdesc (including, for example, spell-checking and SGML). Each
longdesc includes a LaTeX wrapper file to typeset the bibliography.
-containersize 832552
-containerchecksum 7a185d983c1609d044f47df1e8867741ad7c2b4a85e3ca481aca1bf1c25b020fa3fce5576fae6e294ebd5e3f38700ab44ffebce6867586d68752408632427a03
-runfiles size=2056
+containersize 867948
+containerchecksum 1890a146c134494ba2feb7433f37438858149abdb990aa78e88dc7914b4dd13e563d0c63f7821b13647cb875d405e97577ff459d5f88396016cff35844e57d72
+runfiles size=2156
RELOC/bibtex/bib/beebe/epodd.bib
RELOC/bibtex/bib/beebe/font.bib
RELOC/bibtex/bib/beebe/printing-history.bib
@@ -51448,23 +51450,23 @@ catalogue-version 1.01
name chhaya
category Package
-revision 56070
+revision 56103
shortdesc Linguistic glossing in Marathi language
relocated 1
longdesc muNbii vidyaapiitthaacyaa chaayaalekhn niymaavliis anusruun
longdesc bhaassaavaijnyaanik chaayaaNgaaNce sNkssep purvnnaaraa
longdesc aajnyaasNc. This package provides macros for linguistic
longdesc glossing as per the rules given by Mumbai University.
-containersize 2344
-containerchecksum acca96ff4274341eb558ad9a66c2e6937826e3a25fe402b9f1ac4196e76104b424a3db9c81092df21a4f6ff46dd5f3c099206b690de66114b06d37ba0d37aa91
-doccontainersize 45564
-doccontainerchecksum bb7f45a5acb33c647a1b52e48d06366794ebf4aa7d8f98a762df30da479c54bc222c4e768065781729babe962b48f32fa48552b965d10bf19b0614186b5adc74
+containersize 2340
+containerchecksum f0fd1e6778a275c9255487e00d37f786c0a52c8425683efe3a18b2518db6c1b233935e8fc0999260b8698bd7a0d8e8332f78528f644c8d8edd03f85f045211cd
+doccontainersize 46596
+doccontainerchecksum 2b74886fd2078d8a216301b2b826a167c6e84e8abecb02da946e9d5f4000580cf755f89cf86cd04d9eea27fc760324273fbbc8e0fc47024b2597ba7abd656682
docfiles size=14
RELOC/doc/latex/chhaya/README.txt details="Readme"
RELOC/doc/latex/chhaya/chhaya.pdf details="Package documentation" language="mr"
RELOC/doc/latex/chhaya/ref.bib
-srccontainersize 4152
-srccontainerchecksum c22b1ea4397065c61770f553de1963ce65f1bfe68db9d8200d5a831fa51a381abe25459ca3ff3ce16451a7f8c56894981c0067a3d357da4fdd84a021df6f0ff4
+srccontainersize 4136
+srccontainerchecksum 757665001e98ae28ca87fd3b1a0d2d67ab697958ff36dad0f37bed9f233e1a2467c0137add2be17f5a2cadda49f86f07ece2d341ac0d1310cffb0d8d25121869
srcfiles size=5
RELOC/source/latex/chhaya/chhaya.dtx
RELOC/source/latex/chhaya/chhaya.ins
@@ -51476,7 +51478,7 @@ catalogue-contact-home https://gitlab.com/niranjanvikastambe/chhaya
catalogue-ctan /macros/latex/contrib/chhaya
catalogue-license lppl1.3c
catalogue-topics linguistic marathi
-catalogue-version 0.1
+catalogue-version 0.2
name chicago
category Package
@@ -64476,7 +64478,7 @@ containerchecksum 88bdc5cefd5519bc80e50e2d808abf32aae8f7c730023afab3babb82ab817d
name collection-latex
category Collection
-revision 54074
+revision 56105
shortdesc LaTeX fundamental packages
relocated 1
longdesc These packages are either mandated by the core LaTeX team, or
@@ -64505,6 +64507,7 @@ depend gettitlestring
depend graphics
depend graphics-cfg
depend grfext
+depend hopatch
depend hycolor
depend hyperref
depend intcalc
@@ -64524,6 +64527,7 @@ depend mfnfss
depend mptopdf
depend natbib
depend oberdiek
+depend pagesel
depend pdfescape
depend pslatex
depend psnfss
@@ -64534,8 +64538,8 @@ depend stringenc
depend tools
depend uniquecounter
depend url
-containersize 676
-containerchecksum 1823db2c2889e30e1bb219e93aa2433813df21efe7afb453da159b5586a597c92c6f53dd08ef936f773baebd8d9f063b1666385de88a1d4a7bc1cfe9e1dc284c
+containersize 688
+containerchecksum 697ec7c80c0eaaf3d0aef232cc5077bc6305745f238c9d3325a1a0a4bddb31b6439539aea17b0a96c568e6798c7c922733d91153db32e03bd92e1e591c89dbb4
name collection-latexextra
category Collection
@@ -132480,6 +132484,36 @@ catalogue-license gpl3
catalogue-topics package-devel
catalogue-version 1.1.2
+name hopatch
+category Package
+revision 56106
+shortdesc Load patches for packages
+relocated 1
+longdesc Hopatch provides a command with which the user may register of
+longdesc patch code for a particular package. Hopatch will apply the
+longdesc patch immediately, if the relevant package has already been
+longdesc loaded; otherwise it will store the patch until the package
+longdesc appears.
+containersize 2184
+containerchecksum 1658c78cf7671e821ed38825f8b0a0dd96b268c80afb0e64b27129c08e6c9375a7c8e3e5019361e100cb11691a0d27fe533aa2d000306a38b752114a0eac4d12
+doccontainersize 303776
+doccontainerchecksum 57441e01ba72ed0fe8439da5b41dd7600ae43eab90e06150e58704c9fac5a0047c6ab3f7d581310972b973006d9a98ee52bf782f0f2fca151c59050e5bc402f3
+docfiles size=76
+ RELOC/doc/latex/hopatch/README.md
+ RELOC/doc/latex/hopatch/hopatch.pdf details="Package documentation"
+srccontainersize 6008
+srccontainerchecksum 30537bb32dc82ccba9df85129db856884e2a948cee2cbe500a6208a5c3481b8f55253d86ed744d939e149c784e5aa6d8f843434629dc39a291762df863ad959d
+srcfiles size=6
+ RELOC/source/latex/hopatch/hopatch.dtx
+runfiles size=3
+ RELOC/tex/latex/hopatch/hopatch-2016-05-16.sty
+ RELOC/tex/latex/hopatch/hopatch.sty
+catalogue-contact-bugs https://github.com/ho-tex/hopatch/issues
+catalogue-ctan /macros/latex/contrib/hopatch
+catalogue-license lppl1.3
+catalogue-topics macro-supp
+catalogue-version 1.4
+
name horoscop
category Package
revision 56021
@@ -181434,7 +181468,7 @@ catalogue-topics index-multi
name marathi
category Package
-revision 55998
+revision 56099
shortdesc Typeset Marathi language using XeLaTeX or LuaLaTeX
relocated 1
longdesc luaa-laattek v jhii-laattek hyaaNcyaash mraatthiicaa sulbh
@@ -181446,20 +181480,19 @@ longdesc conveniently typesetting Marathi language with LuaLaTeX and
longdesc XeLaTeX. This package will from now onwards host localizations
longdesc needed for the Marathi language. Currently the package
longdesc localizes package blindtext and package expex.
-containersize 4420
-containerchecksum 6002da2e60a6ba914088dc7cb2d35abd3c56327ee07345ab6278412ba4207bb03c0041817dc24553186fae35450b28622b48697a95abb01e2c5890630c82c13f
-doccontainersize 80456
-doccontainerchecksum 2029e307763f65b88223438ca6d17fdc3cbc129a80cb865c227c9ceb26975a8d9ba24637428f6b536f9320ffd3d939d31cfc5213ff607cd91df1ed5cbd602898
+containersize 4388
+containerchecksum 4ceb6ad6392742da2bf2b6a2ea5d909c5d12793586da4626b901132c7e2cf2174e159990318ef96ef82c687a7ee101a17293484503ed51353ce6afb1b1124d66
+doccontainersize 83304
+doccontainerchecksum 43d3a5d4b9abe7b35ed2dd0a3ce9352bbd492e7e52b4fa5dbbac53f111f20c310f5c6703d78980faf0c997a00a4cc9337a0e5a0ef3b69533a1aeecb4575d751f
docfiles size=22
RELOC/doc/latex/marathi/README.txt details="Readme"
RELOC/doc/latex/marathi/marathi.pdf details="Package documentation" language="mr"
- RELOC/doc/latex/marathi/table.tex
-srccontainersize 8184
-srccontainerchecksum a36b05593f1fbdf6cc664f6129f71941e8ce8a38b18128ba2eb563d45db515bd89f78d6dfa9843ac863525792d0755550c05bf14841b6fe705d5b6f9f4f40493
-srcfiles size=10
+srccontainersize 8548
+srccontainerchecksum 5a1e86466d03541305827c1dd31bc178099adc47ec23082b82a5708493a16c3a2c02291db22b8bcebf94c1db6d107dc4073ad6b8d8854201c6def2faefaea03c
+srcfiles size=11
RELOC/source/latex/marathi/marathi.dtx
RELOC/source/latex/marathi/marathi.ins
-runfiles size=15
+runfiles size=14
RELOC/tex/latex/marathi/marathi.sty
RELOC/tex/latex/marathi/namuna-article.tex
RELOC/tex/latex/marathi/namuna-beamer.tex
@@ -181472,7 +181505,7 @@ catalogue-contact-repository https://gitlab.com/niranjanvikastambe/marathi/
catalogue-ctan /language/marathi
catalogue-license lppl1.3c
catalogue-topics indic marathi
-catalogue-version 1.3.1
+catalogue-version 1.4
name marcellus
category Package
@@ -218728,7 +218761,7 @@ catalogue-version 1.0.1
name oberdiek
category Package
-revision 53283
+revision 56100
shortdesc A bundle of packages submitted by Heiko Oberdiek
relocated 1
longdesc The bundle comprises packages to provide: aliascnt: 'alias
@@ -218741,18 +218774,17 @@ longdesc stack management; engord: define counter-printing operations
longdesc producing English ordinals; eolgrab: collect arguments
longdesc delimited by end of line; flags: setting and clearing flags in
longdesc bit fields and converting the bit field into a decimal number;
-longdesc holtxdoc: extra documentation macros; hopatch: safely apply
-longdesc package patches; hypbmsec: bookmarks in sectioning commands;
-longdesc hypcap: anjusting anchors of captions; hypdestopt: optimising
-longdesc hyperref's pdfTeX driver destinations; hypdoc: hyper-references
-longdesc in the LaTeX standard doc package; hypgotoe: experimental
-longdesc package for links to embedded files; hyphsubst: substitute
-longdesc hyphenation patterns; ifdraft: switch for option draft; iflang:
-longdesc provides expandable checks for the current language; pagegrid:
-longdesc prints a page grid in the background; pagesel: select pages of
-longdesc a document for output; pdfcolfoot: using pdfTeX's color stack
-longdesc for footnotes; pdfcol: macros for setting and maintaining new
-longdesc color stacks; pdfcolparallel: fixes colour problems in package
+longdesc holtxdoc: extra documentation macros; hypbmsec: bookmarks in
+longdesc sectioning commands; hypcap: anjusting anchors of captions;
+longdesc hypdestopt: optimising hyperref's pdfTeX driver destinations;
+longdesc hypdoc: hyper-references in the LaTeX standard doc package;
+longdesc hypgotoe: experimental package for links to embedded files;
+longdesc hyphsubst: substitute hyphenation patterns; ifdraft: switch for
+longdesc option draft; iflang: provides expandable checks for the
+longdesc current language; pagegrid: prints a page grid in the
+longdesc background; pdfcolfoot: using pdfTeX's color stack for
+longdesc footnotes; pdfcol: macros for setting and maintaining new color
+longdesc stacks; pdfcolparallel: fixes colour problems in package
longdesc parallel; pdfcolparcolumns: fixes colour problems in package
longdesc parcolumns; pdfcrypt: setting PDF encryption; pdfrender:
longdesc control PDF rendering modes; protecteddef: define a command
@@ -218761,18 +218793,17 @@ longdesc resize overly large equations; rotchiffre: performs simple
longdesc rotation cyphers; scrindex: redefines environment 'theindex' of
longdesc package 'index', if a class from KOMA-Script is loaded;
longdesc setouterhbox: set \hbox in outer horizontal mode; settobox:
-longdesc getting box sizes; soul and adds some support for UTF-8;
-longdesc stackrel: extensions of the \stackrel command; stampinclude:
-longdesc selects the files for \include by inspecting the timestamp of
-longdesc the .aux file(s); tabularht: tabulars with height
-longdesc specification; tabularkv: key value interface for tabular
-longdesc parameters; telprint: print German telephone numbers;
-longdesc thepdfnumber: canonical numbers for use in PDF files and
-longdesc elsewhere; twoopt: commands with two optional arguments; Each
-longdesc of the packages is represented by two files, a .dtx (documented
-longdesc source) and a PDF file; the .ins file necessary for
-longdesc installation is extracted by running the .dtx file with Plain
-longdesc TeX.
+longdesc getting box sizes; stackrel: extensions of the \stackrel
+longdesc command; stampinclude: selects the files for \include by
+longdesc inspecting the timestamp of the .aux file(s); tabularht:
+longdesc tabulars with height specification; tabularkv: key value
+longdesc interface for tabular parameters; telprint: print German
+longdesc telephone numbers; thepdfnumber: canonical numbers for use in
+longdesc PDF files and elsewhere; twoopt: commands with two optional
+longdesc arguments; Each of the packages is represented by two files, a
+longdesc .dtx (documented source) and a PDF file; the .ins file
+longdesc necessary for installation is extracted by running the .dtx
+longdesc file with Plain TeX.
depend auxhook
depend grfext
depend grffile
@@ -218780,12 +218811,12 @@ depend iftex
depend infwarerr
depend kvoptions
depend pdftexcmds
-containersize 48116
-containerchecksum 6e3aeb760239bd3f8ee92655703b6155f9f096f4baf0cd8efa3b6cdfb67f96ca16149ea3e11dd851960d98304eb88c78373241d0b00948b3d717ed92e32d858c
-doccontainersize 9330492
-doccontainerchecksum 76baac4bb06b595e05bf235a6436e8d59b06ea6917ffa66d6e82ccba994975b6992caf422b40d864ecf7ba7152446859299cb158eadef3c37a6d96354649f6e0
-docfiles size=3376
- RELOC/doc/latex/oberdiek/README.txt details="Bundle README"
+containersize 46464
+containerchecksum beffabdda303fee65a07df4458d5bd58ef4e721794ea63415952c93e15af94508c94d7d084a2ddaf9cfa2891a5547698ea3a0f692a03705867aa86684fe99072
+doccontainersize 9154772
+doccontainerchecksum e10f524fce8ba280ec206865089f9495e816d56c9cd3f1f47241cb28e95a6171c68f1689eee1737d6e6024d85bb42951139816e07301b50ea06833a54ef9b3ea
+docfiles size=3353
+ RELOC/doc/latex/oberdiek/README.md details="Bundle README"
RELOC/doc/latex/oberdiek/aliascnt.pdf
RELOC/doc/latex/oberdiek/bmpsize.pdf
RELOC/doc/latex/oberdiek/centernot.pdf
@@ -218815,7 +218846,6 @@ docfiles size=3376
RELOC/doc/latex/oberdiek/iflang.pdf
RELOC/doc/latex/oberdiek/oberdiek.pdf details="Table of contents of the bundle"
RELOC/doc/latex/oberdiek/pagegrid.pdf
- RELOC/doc/latex/oberdiek/pagesel.pdf
RELOC/doc/latex/oberdiek/pdfcol.pdf
RELOC/doc/latex/oberdiek/pdfcolfoot.pdf
RELOC/doc/latex/oberdiek/pdfcolparallel.pdf
@@ -218842,10 +218872,9 @@ docfiles size=3376
RELOC/doc/latex/oberdiek/telprint.pdf
RELOC/doc/latex/oberdiek/thepdfnumber.pdf
RELOC/doc/latex/oberdiek/twoopt.pdf
-srccontainersize 127840
-srccontainerchecksum 79b9c0a1e6c01cd20f8d9d7fbba82b0f4779d1724cc8b777e537e289833cb6a712de8ad4b2fa44083e3b3fdfee375ffa68c518779ceb7944091cb3e3a1e1d207
-srcfiles size=293
- RELOC/source/latex/oberdiek/README.txt
+srccontainersize 122428
+srccontainerchecksum d07929196852fbe70ad8661027a3aba8b2900e199408fe85f4061100021eeb36865232d2a5f11687320aaefe24b5fa1164b81ddcfdefe565028a3a598097c5ff
+srcfiles size=280
RELOC/source/latex/oberdiek/aliascnt.dtx
RELOC/source/latex/oberdiek/bmpsize.dtx
RELOC/source/latex/oberdiek/centernot.dtx
@@ -218859,7 +218888,6 @@ srcfiles size=293
RELOC/source/latex/oberdiek/fibnum.dtx
RELOC/source/latex/oberdiek/flags.dtx
RELOC/source/latex/oberdiek/holtxdoc.dtx
- RELOC/source/latex/oberdiek/hopatch.dtx
RELOC/source/latex/oberdiek/hypbmsec.dtx
RELOC/source/latex/oberdiek/hypcap.dtx
RELOC/source/latex/oberdiek/hypdestopt.dtx
@@ -218871,7 +218899,6 @@ srcfiles size=293
RELOC/source/latex/oberdiek/oberdiek.ins
RELOC/source/latex/oberdiek/oberdiek.tex
RELOC/source/latex/oberdiek/pagegrid.dtx
- RELOC/source/latex/oberdiek/pagesel.dtx
RELOC/source/latex/oberdiek/pdfcol.dtx
RELOC/source/latex/oberdiek/pdfcolfoot.dtx
RELOC/source/latex/oberdiek/pdfcolparallel.dtx
@@ -218891,7 +218918,7 @@ srcfiles size=293
RELOC/source/latex/oberdiek/telprint.dtx
RELOC/source/latex/oberdiek/thepdfnumber.dtx
RELOC/source/latex/oberdiek/twoopt.dtx
-runfiles size=115
+runfiles size=111
RELOC/bibtex/bib/oberdiek/oberdiek-bundle.bib
RELOC/bibtex/bib/oberdiek/oberdiek-source.bib
RELOC/tex/generic/oberdiek/engord.sty
@@ -218922,7 +218949,6 @@ runfiles size=115
RELOC/tex/latex/oberdiek/enparen.sty
RELOC/tex/latex/oberdiek/flags.sty
RELOC/tex/latex/oberdiek/holtxdoc.sty
- RELOC/tex/latex/oberdiek/hopatch.sty
RELOC/tex/latex/oberdiek/hypbmsec.sty
RELOC/tex/latex/oberdiek/hypcap.sty
RELOC/tex/latex/oberdiek/hypdestopt.sty
@@ -218930,7 +218956,6 @@ runfiles size=115
RELOC/tex/latex/oberdiek/hypgotoe.sty
RELOC/tex/latex/oberdiek/ifdraft.sty
RELOC/tex/latex/oberdiek/pagegrid.sty
- RELOC/tex/latex/oberdiek/pagesel.sty
RELOC/tex/latex/oberdiek/pdfcolfoot.sty
RELOC/tex/latex/oberdiek/pdfcolparallel.sty
RELOC/tex/latex/oberdiek/pdfcolparcolumns.sty
@@ -223707,6 +223732,34 @@ catalogue-license lppl
catalogue-topics label-ref macro-supp
catalogue-version 0.5
+name pagesel
+category Package
+revision 56105
+shortdesc Select pages of a document for output
+relocated 1
+longdesc Selects single pages, ranges of pages, odd pages or even pages
+longdesc for output. The package is part of the oberdiek bundle.
+containersize 2488
+containerchecksum c07cd3b48fd5cd59ca685b1ae39da7e7d8774348241c26d29a74b41ee6c29fdae0c01a47a79aa669cf6651b0b83a5b79f8424c139c17db5bca20d30186e5b655
+doccontainersize 331604
+doccontainerchecksum eeb70877276b393cccb1c0e301c191480e5aa52715738ac6d01b58be864b065b3b72afdbd90d3a398284671682370300537d4953aa2adf4355fc6d2278d2819e
+docfiles size=83
+ RELOC/doc/latex/pagesel/README.md details="Readme"
+ RELOC/doc/latex/pagesel/pagesel.pdf details="Package documentation" language="en"
+srccontainersize 7128
+srccontainerchecksum 457c52df8dca820c8ee39494630a077d0a14f58f7308805dd0b5f5dc374fdaee83581cab3543d7a9ded91ef94f7555f2d2b2420a6ff2c9ddf7c790b5407f468a
+srcfiles size=7
+ RELOC/source/latex/pagesel/pagesel.dtx
+runfiles size=4
+ RELOC/tex/latex/pagesel/pagesel-2016-05-16.sty
+ RELOC/tex/latex/pagesel/pagesel.sty
+catalogue-also selectp
+catalogue-contact-bugs https://github.com/ho-tex/pagesel/issues
+catalogue-ctan /macros/latex/contrib/pagesel
+catalogue-license lppl1.3c
+catalogue-topics page-control
+catalogue-version 1.10
+
name pageslts
category Package
revision 39164
@@ -287007,15 +287060,15 @@ docfiles size=592
name texlive-docindex
category TLCore
-revision 56055
+revision 56098
shortdesc top-level TeX Live doc.html, etc.
longdesc These files are regenerated as needed, which is often, so we
longdesc make them a separate package. See the tl-update-auto script for
longdesc the process.
containersize 388
-containerchecksum 36f7c09662daa77028710fc19f4fb48bb4ab2fb59fe1f9227fc3a0cf027340bd46f659cb00c2959db7341fd1165324f2ccf1bf2611cc9f7a48aaddac5ef8dc37
-doccontainersize 168056
-doccontainerchecksum 3ff3048e8643c55b89bac92296027c030a15b16f07daea7896556672a97dddab43d3579063a0d2b2055d7ffcb75106ada25f26a5c333a9d0e8ad8525c3d29607
+containerchecksum cdddf4dafc8de36a99de4ffbff59fbaa345c0db3f05ffcac6116014b6ac2f2d3ac9fbced8040d08c1bd8de6a3d8a75671b483ad4337c75cd5d5168152a026296
+doccontainersize 168160
+doccontainerchecksum e854cd253e9bc1d6683edb28e7396125ba38421f5d48120f69e4ca443813623981f201690862c9ec1a862fb0fee3f7b6b69fb7df5c30e82511fe88f53d059468
docfiles size=333
doc.html
@@ -287237,7 +287290,7 @@ docfiles size=368
name texlive-scripts
category TLCore
-revision 56091
+revision 56098
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -287245,10 +287298,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 131976
-containerchecksum d421145329e4e6bafba21c2987b589c293eaf7cf96b22c7e9dd34115027f4900292687e9681db3fef3c6680ebb72f772287a410ee9e99d3704ad9996c462c211
+containersize 131992
+containerchecksum ee3c294aee09b4687424bff63829068fac59797582df158e8d1dfc6d382e48b5d6f6fc21e961aa737f7904cf2e366ae25f2cf2343dd0224b2ef12d45e4de093a
doccontainersize 218656
-doccontainerchecksum 89c1c9dd4d8da7ac26cfbb581810e36cae599f8699ceaa238873ee3af0eedf37e3b16450670a66126fc5c4b824653d1d68b15e783eabbfa30c34fc1663ddc4ec
+doccontainerchecksum 7bff0db5835c9e71d9d70da311231035df56274d5c7fcb44721f4733b7ba28108e5c59dd47afb993a26d1d3f27abc223b314011a1f8a3b0119a7933c9be32e55
docfiles size=141
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 9160c6dd50..22763d529c 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-fcf2c5c5ba60ade923e9e3cec83dee6b texlive.tlpdb
+1ab151349d4a46d8e439890ededbc939 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index a48e3c3d2b..9643898a94 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-c04e2e243b5b1d0e39187c344ae8b41faec06b32830bb5e81cae52b1d1bd8f90994c487c203f3a553d843ce4963c686e9564fb684b2634a8c0c18bec7767a9ba texlive.tlpdb
+3d945650ed3fecd88bea7c5a44724e632be287532ee936a34857c46d75e4ad5e879c3fb6e2946983c61697e87158d3a28fdec9588a320f833942a272b6fb5850 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 7d08191ed0..cc0aaffe3a 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJfNIHMAAoJEEzhh34ZQ4xw71kIAJHuKaevOzBieMwYosr8N09m
-PqGYkL4mpz4BVV1cUDy5CjTccrqGroAHYEmePvN9rBhCV6rbkmAdSacitg00Eoyf
-G0EXf3fVrEaNxwAYO3vF3ee+V7Is08YTtzaBS8wUzfeHmrPh/6rNCjSXvgcAAPcH
-0DLWvervANnDXC+Y0l8Ly/lrs1i/z1C9KaJPgeb7dKlatDh1X6D7VTYF0iazbqel
-rnIuykWot6Hh4sz5ZQ6cXKKHSE3ewUaHEJbPBTWWDVbvJ0XM0rGxJCv3rl4iE2Ze
-qgBnhetBM0oKvmOHx4xgdhnZB2iKsIMslwjYWrVDPX6UVdxsQHcWypj1tY4qUWQ=
-=h4jb
+iQEcBAEBCgAGBQJfNdNjAAoJEEzhh34ZQ4xwRbsIAJvksv+e0zPnck6NesfZYYCN
+IHwOjlxM+WF4H+vupuTANg+1GEWvjQjCzZjDXU/iSauCJRaAQpvie4jUuZCDKPr4
+X0atsOJcVFW40HIuxhrX5Qvr3hSQIxboP/bN3PHR/Upk548nIiXPTqpGDbZFLgz1
+Nj5lKxlDSpQcls/CNxFpqFz2ZX7Jkt/FP4SyPAVHW13xnM4gUuhfliYx6qdPWTc9
+/X/7PJ+i5geGhP1hfCh5yBfz2BQQTmCjhtjJS92k+KgKdElJbJnn52dtChKlLfwl
+sXbMLl7UmIbkekdeEyV97eg8A90l+1O+xj1+TS8nVM4XM+VTPqA5yk8JP96chbw=
+=8R+Z
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index a7e74d7e73..ca0d7fdc42 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index e07380c2d9..9b07ab52be 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1597263317
+date=1597349728
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=35d1552df25a73b81688a0d0dfd9af3e
+lstdigest=ac235fa196d4ff513ff34ff55122ea12
numpkg=3958
relstate=next
-version=7529
+version=7530
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: KfuhWcfHGg0qnI+6+tVUBYshnQtoAqlyUT8nftXKujpldUSNUEsMrnCzb6UGgt56bHJmmnViQDw1l+T5WHVi8s7ayr3KYxZbSf4pPMaTNPHFs0EF2u3+Z2JD0dmBHXpIRN0SWIrf9omAcEPcB1P2+9BD5JphQzacfuZgfmYQohqA0cCtWAqaFR7C0BSRGEzAAd1CilViwJqSHLBn4GZH3E4UCGlsT0hBN+F8gbsPmCZ7iniXxUVSXR8zJF7Jf20Tu/VvyiJR24Oy7Cp0pJLYWdXZlyllGXE0l0/uVXJJJm2C+qbEPV5M0qmUTB53PKjKx9M/768n2d6I25rjGGuiYQ==
+;;;; signature/miktex: aCqA4e+5LwSYGtUctKWb8Lmyz2+Gjv2ObqPt3mzZ6EkDfcUhqJfz5aROGBKkyoGvULzjNJBQE4P8Un5i2dWwmgDyXmNeu+RpX/R64eJ004d6ScWZNzMoUqlnhKyNrvtHPSgeIMbnr4YjL+1nuZzpX7zl65sHwPzrUYbpqyVxAESR5x6Gm7P4k3VEHV5TeU5qM8GDfr7MezudFyQTCn1HHhhce5Eec+hNPcUduudHuCdnmMlsPE6p8mIjruxhsVsH5pBILIaemDX4AZxjyIlfpZwWZcptioutxlEhfIRKge9bK5ksp7oV1bLJwxACxMJVvHO7FPN/ETp3rL4A6hmrVQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 74ccd6a385..7a3f3648ef 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1597263100
+date=1597349496
lastupd=almendra animate annee-scolaire apa7 archaeologie babel-german beamer-rl biblatex-publist bitter circuitikz clefval ejpecp expkv-cs fontools forum frpseudocode genealogytree hausarbeit-jura horoscop l3backend
-lstdigest=657084996eeeb5efccba63632403da6e
+lstdigest=e5bae39693fb8ab59613b989bbd30151
numpkg=3958
relstate=stable
-version=7529
+version=7530
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: kIyuWLiXju8LmDqpOkuL/6H5t00xFlgkW8G2zQfObJsVhJ1DgImWnkbFeaOpLDW2P/uZHVt/BzWndQmdx3Km87P6QvtqFA3sNgvuVRaYnX3oAYV6POhFgfHeyv81N9moeW5s4bIMr3YBg/K6HTL8tori5w26QSV5uEPgSZz3IqKdQt8Rm/elnjhKGewH2xWs13jNYAZeORn2QRGEJycnAv4RS+Ny1lwEnMjJWVSceUrhEVpLf6H8TKYqdfUpMkDrg2QhQ+56viuDS7y4DOnLkJ6F7bNwC0R9XZPuyUclV5Cy/bYAk3TQANDs4OvSKXn/fKed71EdQfPGLZBWmgUGzw==
+;;;; signature/miktex: PjGZQghdCerifRCQ6Cz0P94YNh2g5eSBQHFt6Fkn0S6gzrjSCT+lck/4b6iF84739z/MfgkZrGM+rnd8OW2grXTldCqjQEcgRO4hi+UUP9Jo9v5K4kCL+Yc5Tg/7sp1wpoL0qXzAGIH2Q9srenS2B6SkKykU+NQs2JL+YIHkqbVUCnTX7qIV1+XsvamctbnkemAVNJRGwMypPeFR9qH3z/fH4AYzcuz59G6XiN8WYQuAlwqiqyj1zjQWswDA15dFHgTmQia4TmIWvH2PNEAaSeP7VdIH6HbefXOAE4qjST83i1jcEpo7blW+A8aSrNXT/xZu4yz06/pGUeXkgFTtlA==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/timestamp b/timestamp
index 9f88f04e02..dd6fc914c2 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2020-08-13-02-02
+2020-08-14-02-02