summaryrefslogtreecommitdiff
path: root/Build/source/texk
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2012-07-11 07:58:18 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2012-07-11 07:58:18 +0000
commit6f0789bd6e4408b1876f05e1d4ad48451312b9b5 (patch)
treed46f123cb746257e847a58e3046f30d1dc77258b /Build/source/texk
parent114b4c2453b3e1e5a379a57ff5be9fc0808bf1d6 (diff)
ps2pkm: Cleanup. Added a test case
git-svn-id: svn://tug.org/texlive/trunk@26996 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
-rw-r--r--Build/source/texk/ps2pkm/ChangeLog11
-rw-r--r--Build/source/texk/ps2pkm/Makefile.am24
-rw-r--r--Build/source/texk/ps2pkm/Makefile.in192
-rw-r--r--Build/source/texk/ps2pkm/pk2bm.c27
-rw-r--r--Build/source/texk/ps2pkm/pkin.c43
-rw-r--r--Build/source/texk/ps2pkm/pkin.h2
-rw-r--r--Build/source/texk/ps2pkm/tests/Symbol.afm209
-rw-r--r--Build/source/texk/ps2pkm/tests/Symbol.alpha.hex29
-rw-r--r--Build/source/texk/ps2pkm/tests/Symbol.alpha.pix29
-rw-r--r--Build/source/texk/ps2pkm/tests/Symbol.pfa1099
-rw-r--r--Build/source/texk/ps2pkm/tests/Symbol.pfbbin0 -> 31586 bytes
-rw-r--r--Build/source/texk/ps2pkm/tests/Symbol10.300pkbin0 -> 9216 bytes
-rwxr-xr-xBuild/source/texk/ps2pkm/tests/ps2pk.test33
13 files changed, 1622 insertions, 76 deletions
diff --git a/Build/source/texk/ps2pkm/ChangeLog b/Build/source/texk/ps2pkm/ChangeLog
index ba910f4e3ec..030b8f0a923 100644
--- a/Build/source/texk/ps2pkm/ChangeLog
+++ b/Build/source/texk/ps2pkm/ChangeLog
@@ -1,9 +1,20 @@
+2012-07-11 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ * tests/ps2pk.test (new): Shell script for a test case.
+ * tests/Symbol.afm, tests/Symbol.pfb (new): Test input.
+ * tests/Symbol.pfa, tests/Symbol.alpha.{hex,pix},
+ tests/Symbol10.300pk (new): Expected output.
+ * Makefile.am: Adapted.
+
2012-07-10 Peter Breitenlohner <peb@mppmu.mpg.de>
* mag.c, pk2bm.c: Use binary mode for output files (from W32TeX).
* pfb2pfa.c: Drop unused ambiguous code.
+ * Makefile.am: Pk2bm does not use KPATHSEA.
+ * pk2bm.c, pkin.[ch]: ANSI C function prototypes and definitions.
+
2011-07-19 Peter Breitenlohner <peb@mppmu.mpg.de>
* type1.c [FABS, CEIL, FLOOR]: Use routines from libm, the
diff --git a/Build/source/texk/ps2pkm/Makefile.am b/Build/source/texk/ps2pkm/Makefile.am
index bc8d5da2cf6..61e45497f28 100644
--- a/Build/source/texk/ps2pkm/Makefile.am
+++ b/Build/source/texk/ps2pkm/Makefile.am
@@ -1,15 +1,20 @@
## Makefile.am for the TeX Live subdirectory texk/ps2pkm/
##
-## Copyright (C) 2009-2011 Peter Breitenlohner <tex-live@tug.org>
+## Copyright (C) 2009-2012 Peter Breitenlohner <tex-live@tug.org>
## You may freely use, modify and/or distribute this file.
##
ACLOCAL_AMFLAGS = -I ../../m4
+bin_PROGRAMS = mag pfb2pfa pk2bm ps2pk
+
INCLUDES = $(KPATHSEA_INCLUDES)
AM_CPPFLAGS = -DUNIX -DKPATHSEA
AM_CFLAGS = #$(WARNING_CFLAGS)
+LDADD = $(KPATHSEA_LIBS)
-bin_PROGRAMS = mag pfb2pfa pk2bm ps2pk
+pk2bm_CPPFLAGS =
+pk2bm_CFLAGS = $(WARNING_CFLAGS)
+pk2bm_LDADD =
mag_SOURCES = \
basics.c \
@@ -91,18 +96,25 @@ ps2pk_SOURCES = \
util.c \
util.h
-$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(pk2bm_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND)
-
-LDADD = $(KPATHSEA_LIBS)
+$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND)
## Rebuild libkpathsea
@KPATHSEA_RULE@
dist_man1_MANS = mag.1 pfb2pfa.1 pk2bm.1 ps2pk.1
+## Tests.
+##
+TESTS = tests/ps2pk.test
+EXTRA_DIST = $(TESTS)
+## tests/ps2pk.test
+EXTRA_DIST += tests/Symbol.afm tests/Symbol.alpha.hex tests/Symbol.alpha.pix \
+ tests/Symbol.pfa tests/Symbol.pfb tests/Symbol10.300pk
+DISTCLEANFILES = Symbol*
+
## Not used
##
-EXTRA_DIST = \
+EXTRA_DIST += \
CHANGES.type1 \
INSTALLATION \
README.14m \
diff --git a/Build/source/texk/ps2pkm/Makefile.in b/Build/source/texk/ps2pkm/Makefile.in
index 97bd3ae56f2..dfc6fe199d9 100644
--- a/Build/source/texk/ps2pkm/Makefile.in
+++ b/Build/source/texk/ps2pkm/Makefile.in
@@ -95,10 +95,12 @@ am_pfb2pfa_OBJECTS = basics.$(OBJEXT) filenames.$(OBJEXT) \
pfb2pfa_OBJECTS = $(am_pfb2pfa_OBJECTS)
pfb2pfa_LDADD = $(LDADD)
pfb2pfa_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_pk2bm_OBJECTS = pk2bm.$(OBJEXT) pkin.$(OBJEXT)
+am_pk2bm_OBJECTS = pk2bm-pk2bm.$(OBJEXT) pk2bm-pkin.$(OBJEXT)
pk2bm_OBJECTS = $(am_pk2bm_OBJECTS)
-pk2bm_LDADD = $(LDADD)
-pk2bm_DEPENDENCIES = $(am__DEPENDENCIES_1)
+pk2bm_DEPENDENCIES =
+pk2bm_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(pk2bm_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
am_ps2pk_OBJECTS = arith.$(OBJEXT) basics.$(OBJEXT) bstring.$(OBJEXT) \
curves.$(OBJEXT) encoding.$(OBJEXT) filenames.$(OBJEXT) \
fontfcn.$(OBJEXT) hints.$(OBJEXT) lines.$(OBJEXT) \
@@ -166,6 +168,10 @@ ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
AM_RECURSIVE_TARGETS = cscope
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = $(am__tty_colors_dummy)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -306,6 +312,10 @@ ACLOCAL_AMFLAGS = -I ../../m4
INCLUDES = $(KPATHSEA_INCLUDES)
AM_CPPFLAGS = -DUNIX -DKPATHSEA
AM_CFLAGS = #$(WARNING_CFLAGS)
+LDADD = $(KPATHSEA_LIBS)
+pk2bm_CPPFLAGS =
+pk2bm_CFLAGS = $(WARNING_CFLAGS)
+pk2bm_LDADD =
mag_SOURCES = \
basics.c \
basics.h \
@@ -386,26 +396,15 @@ ps2pk_SOURCES = \
util.c \
util.h
-LDADD = $(KPATHSEA_LIBS)
dist_man1_MANS = mag.1 pfb2pfa.1 pk2bm.1 ps2pk.1
-EXTRA_DIST = \
- CHANGES.type1 \
- INSTALLATION \
- README.14m \
- README.type1 \
- basename.c \
- flisearch.c \
- pktest.c \
- protos.h \
- psearch.c \
- sexpr.c \
- strexpr.c \
- strexpr.h \
- t1test.c \
- texfiles.c \
- texfiles.h \
- usenet
-
+TESTS = tests/ps2pk.test
+EXTRA_DIST = $(TESTS) tests/Symbol.afm tests/Symbol.alpha.hex \
+ tests/Symbol.alpha.pix tests/Symbol.pfa tests/Symbol.pfb \
+ tests/Symbol10.300pk CHANGES.type1 INSTALLATION README.14m \
+ README.type1 basename.c flisearch.c pktest.c protos.h \
+ psearch.c sexpr.c strexpr.c strexpr.h t1test.c texfiles.c \
+ texfiles.h usenet
+DISTCLEANFILES = Symbol*
all: c-auto.h
$(MAKE) $(AM_MAKEFLAGS) all-am
@@ -514,7 +513,7 @@ pfb2pfa$(EXEEXT): $(pfb2pfa_OBJECTS) $(pfb2pfa_DEPENDENCIES) $(EXTRA_pfb2pfa_DEP
$(LINK) $(pfb2pfa_OBJECTS) $(pfb2pfa_LDADD) $(LIBS)
pk2bm$(EXEEXT): $(pk2bm_OBJECTS) $(pk2bm_DEPENDENCIES) $(EXTRA_pk2bm_DEPENDENCIES)
@rm -f pk2bm$(EXEEXT)
- $(LINK) $(pk2bm_OBJECTS) $(pk2bm_LDADD) $(LIBS)
+ $(pk2bm_LINK) $(pk2bm_OBJECTS) $(pk2bm_LDADD) $(LIBS)
ps2pk$(EXEEXT): $(ps2pk_OBJECTS) $(ps2pk_DEPENDENCIES) $(EXTRA_ps2pk_DEPENDENCIES)
@rm -f ps2pk$(EXEEXT)
$(LINK) $(ps2pk_OBJECTS) $(ps2pk_LDADD) $(LIBS)
@@ -538,8 +537,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objects.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paths.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfb2pfa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pk2bm.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pk2bm-pk2bm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pk2bm-pkin.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkout.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps2pk.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regions.Po@am__quote@
@@ -575,6 +574,34 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+pk2bm-pk2bm.o: pk2bm.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pk2bm.o -MD -MP -MF $(DEPDIR)/pk2bm-pk2bm.Tpo -c -o pk2bm-pk2bm.o `test -f 'pk2bm.c' || echo '$(srcdir)/'`pk2bm.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pk2bm.Tpo $(DEPDIR)/pk2bm-pk2bm.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pk2bm.c' object='pk2bm-pk2bm.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pk2bm.o `test -f 'pk2bm.c' || echo '$(srcdir)/'`pk2bm.c
+
+pk2bm-pk2bm.obj: pk2bm.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pk2bm.obj -MD -MP -MF $(DEPDIR)/pk2bm-pk2bm.Tpo -c -o pk2bm-pk2bm.obj `if test -f 'pk2bm.c'; then $(CYGPATH_W) 'pk2bm.c'; else $(CYGPATH_W) '$(srcdir)/pk2bm.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pk2bm.Tpo $(DEPDIR)/pk2bm-pk2bm.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pk2bm.c' object='pk2bm-pk2bm.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pk2bm.obj `if test -f 'pk2bm.c'; then $(CYGPATH_W) 'pk2bm.c'; else $(CYGPATH_W) '$(srcdir)/pk2bm.c'; fi`
+
+pk2bm-pkin.o: pkin.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pkin.o -MD -MP -MF $(DEPDIR)/pk2bm-pkin.Tpo -c -o pk2bm-pkin.o `test -f 'pkin.c' || echo '$(srcdir)/'`pkin.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pkin.Tpo $(DEPDIR)/pk2bm-pkin.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pkin.c' object='pk2bm-pkin.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pkin.o `test -f 'pkin.c' || echo '$(srcdir)/'`pkin.c
+
+pk2bm-pkin.obj: pkin.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -MT pk2bm-pkin.obj -MD -MP -MF $(DEPDIR)/pk2bm-pkin.Tpo -c -o pk2bm-pkin.obj `if test -f 'pkin.c'; then $(CYGPATH_W) 'pkin.c'; else $(CYGPATH_W) '$(srcdir)/pkin.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/pk2bm-pkin.Tpo $(DEPDIR)/pk2bm-pkin.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pkin.c' object='pk2bm-pkin.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pk2bm_CPPFLAGS) $(CPPFLAGS) $(pk2bm_CFLAGS) $(CFLAGS) -c -o pk2bm-pkin.obj `if test -f 'pkin.c'; then $(CYGPATH_W) 'pkin.c'; else $(CYGPATH_W) '$(srcdir)/pkin.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
@@ -701,6 +728,99 @@ distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ fi; \
+ echo "$${col}$$dashes$${std}"; \
+ echo "$${col}$$banner$${std}"; \
+ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
+ test -z "$$report" || echo "$${col}$$report$${std}"; \
+ echo "$${col}$$dashes$${std}"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
@@ -871,6 +991,7 @@ distcleancheck: distclean
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(PROGRAMS) $(MANS) c-auto.h
installdirs:
@@ -903,6 +1024,7 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@@ -982,16 +1104,16 @@ uninstall-am: uninstall-binPROGRAMS uninstall-man
uninstall-man: uninstall-man1
-.MAKE: all install-am install-strip
+.MAKE: all check-am install-am install-strip
-.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
- clean-binPROGRAMS clean-cscope clean-generic clean-libtool \
- cscope cscopelist ctags dist dist-all dist-bzip2 dist-gzip \
- dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \
- distclean distclean-compile distclean-generic distclean-hdr \
- distclean-libtool distclean-tags distcleancheck distdir \
- distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-am install-binPROGRAMS install-data \
+.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
+ clean clean-binPROGRAMS clean-cscope clean-generic \
+ clean-libtool cscope cscopelist ctags dist dist-all dist-bzip2 \
+ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+ distcheck distclean distclean-compile distclean-generic \
+ distclean-hdr distclean-libtool distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am info \
+ info-am install install-am install-binPROGRAMS install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-man1 install-pdf \
@@ -1003,7 +1125,7 @@ uninstall-man: uninstall-man1
uninstall-man uninstall-man1
-$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(pk2bm_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND)
+$(mag_OBJECTS) $(pfb2pfa_OBJECTS) $(ps2pk_OBJECTS): $(KPATHSEA_DEPEND)
@KPATHSEA_RULE@
diff --git a/Build/source/texk/ps2pkm/pk2bm.c b/Build/source/texk/ps2pkm/pk2bm.c
index efc334616e1..63b36d520b6 100644
--- a/Build/source/texk/ps2pkm/pk2bm.c
+++ b/Build/source/texk/ps2pkm/pk2bm.c
@@ -37,16 +37,18 @@
#include <fcntl.h>
#endif
+static quarterword lsbf(quarterword u);
+static void dots(quarterword u, int n);
+static int atoo(char *oct);
+
int main(int argc, char *argv[])
{
int done, C = 0, c, h = 0, w = 0, row, col;
unsigned int bitmap = 0, hexmap = 0;
halfword *word;
- quarterword lsbf();
- void dots();
chardesc cd;
- char *myname = "pk2bm", *pkname;
- int atoo(char *);
+ const char *myname = "pk2bm";
+ char *pkname;
while (--argc > 0 && (*++argv)[0] == '-') {
done=0;
@@ -179,8 +181,8 @@ int main(int argc, char *argv[])
/*
* lsbf() transforms a byte (least significant bit first).
*/
-quarterword lsbf(u)
-quarterword u;
+static quarterword
+lsbf(quarterword u)
{
int i; quarterword bit, result = 0;
@@ -195,9 +197,10 @@ quarterword u;
/*
* dots() print byte: `*' for a black and `.' for a white pixel
*/
-void dots(u, n)
-quarterword u; int n;
-{ unsigned int bit;
+static void
+dots(quarterword u, int n)
+{
+ unsigned int bit;
bit=1<<7;
for ( ;n>0 ;n--) {
@@ -207,8 +210,10 @@ quarterword u; int n;
}
}
-int atoo(char *oct)
-{ int octal = 0;
+static int
+atoo(char *oct)
+{
+ int octal = 0;
while (*oct != '\0') octal = 8*octal + (*oct++) - '0';
return octal & 0xff;
}
diff --git a/Build/source/texk/ps2pkm/pkin.c b/Build/source/texk/ps2pkm/pkin.c
index a539b1de5b0..45083b3cf50 100644
--- a/Build/source/texk/ps2pkm/pkin.c
+++ b/Build/source/texk/ps2pkm/pkin.c
@@ -25,7 +25,7 @@
/*
* Forward declaration
*/
-static void error();
+static void error(const char *s);
/*
* Now we have some routines to get stuff from the pk file. pkbyte returns
@@ -35,7 +35,7 @@ static void error();
static FILE *pkfile ;
static shalfword
-pkbyte()
+pkbyte(void)
{
register shalfword i ;
@@ -45,7 +45,7 @@ pkbyte()
}
static integer
-pkquad()
+pkquad(void)
{
register integer i ;
@@ -59,7 +59,7 @@ pkquad()
}
static integer
-pktrio()
+pktrio(void)
{
register integer i ;
@@ -70,7 +70,7 @@ pktrio()
}
static integer
-pkpair()
+pkpair(void)
{
register integer i ;
@@ -80,7 +80,7 @@ pkpair()
}
static integer
-pkspair()
+pkspair(void)
{
register integer i ;
@@ -97,8 +97,7 @@ static char errbuf[80] ;
*/
static Boolean
-pkopen(name)
- char name[] ;
+pkopen(const char *name)
{
if ((pkfile=fopen(name, RB))==NULL) {
(void)sprintf(errbuf, "Could not open %s", name) ;
@@ -123,7 +122,7 @@ static halfword dynf ;
static halfword repeatcount ;
static shalfword
-getnyb ()
+getnyb (void)
{ halfword temp;
if ( bitweight == 0 )
{ bitweight = 16 ;
@@ -137,7 +136,7 @@ getnyb ()
}
static Boolean
-getbit ()
+getbit (void)
{
bitweight >>= 1 ;
if ( bitweight == 0 )
@@ -149,9 +148,11 @@ getbit ()
static halfword (*realfunc)() ;
long PKremainder ;
-static halfword handlehuge() ;
+static halfword handlehuge(halfword i, halfword k) ;
-static halfword pkpackednum () {
+static halfword
+pkpackednum (void)
+{
register halfword i, j ;
i = getnyb () ;
if ( i == 0 )
@@ -185,7 +186,7 @@ register halfword i, j ;
}
}
-static halfword rest ()
+static halfword rest (void)
{
halfword i ;
@@ -210,8 +211,8 @@ static halfword rest ()
return 0;
}
-static halfword handlehuge ( i , k )
-halfword i , k ;
+static halfword
+handlehuge (halfword i, halfword k)
{
register long j = k ;
@@ -232,8 +233,7 @@ static halfword gpower[17] = { 0 , 1 , 3 , 7 , 15 , 31 , 63 , 127 ,
255 , 511 , 1023 , 2047 , 4095 , 8191 , 16383 , 32767 , 65535 } ;
static void
-unpack(cd)
-chardesc *cd;
+unpack(chardesc *cd)
{
register integer i, j ;
register halfword word, wordweight ;
@@ -334,10 +334,7 @@ chardesc *cd;
* return FALSE (0) otherwise.
*/
int
-readchar(name, c, cd)
-char name[];
-shalfword c;
-chardesc *cd;
+readchar(char *name, shalfword c, chardesc *cd)
{
register shalfword i ;
register integer k ;
@@ -446,8 +443,8 @@ default:
return(0); /* character not found */
}
-static void error(s)
-char s[];
+static void
+error(const char *s)
{
fprintf(stderr, "%s\n", s);
exit(1);
diff --git a/Build/source/texk/ps2pkm/pkin.h b/Build/source/texk/ps2pkm/pkin.h
index 3bc9279a7cb..ce5db039554 100644
--- a/Build/source/texk/ps2pkm/pkin.h
+++ b/Build/source/texk/ps2pkm/pkin.h
@@ -58,4 +58,4 @@ typedef struct {
halfword *raster ;
} chardesc ;
-int readchar();
+int readchar(char *name, shalfword c, chardesc *cd);
diff --git a/Build/source/texk/ps2pkm/tests/Symbol.afm b/Build/source/texk/ps2pkm/tests/Symbol.afm
new file mode 100644
index 00000000000..1cdbdae695f
--- /dev/null
+++ b/Build/source/texk/ps2pkm/tests/Symbol.afm
@@ -0,0 +1,209 @@
+StartFontMetrics 2.0
+Comment Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.
+Comment Creation Date: Wed Jan 17 21:48:26 1990
+Comment UniqueID 27004
+Comment VMusage 28489 37622
+FontName Symbol
+FullName Symbol
+FamilyName Symbol
+Weight Medium
+ItalicAngle 0
+IsFixedPitch false
+FontBBox -180 -293 1090 1010
+UnderlinePosition -98
+UnderlineThickness 54
+Version 001.007
+Notice Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.
+EncodingScheme FontSpecific
+StartCharMetrics 189
+C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ;
+C 34 ; WX 713 ; N universal ; B 31 0 681 705 ;
+C 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ;
+C 36 ; WX 549 ; N existential ; B 25 0 478 707 ;
+C 37 ; WX 833 ; N percent ; B 63 -36 771 655 ;
+C 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ;
+C 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ;
+C 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ;
+C 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ;
+C 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ;
+C 43 ; WX 549 ; N plus ; B 10 0 539 533 ;
+C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ;
+C 45 ; WX 549 ; N minus ; B 11 233 535 288 ;
+C 46 ; WX 250 ; N period ; B 69 -17 181 95 ;
+C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ;
+C 48 ; WX 500 ; N zero ; B 23 -17 471 685 ;
+C 49 ; WX 500 ; N one ; B 117 0 390 673 ;
+C 50 ; WX 500 ; N two ; B 25 0 475 686 ;
+C 51 ; WX 500 ; N three ; B 39 -17 435 685 ;
+C 52 ; WX 500 ; N four ; B 16 0 469 685 ;
+C 53 ; WX 500 ; N five ; B 29 -17 443 685 ;
+C 54 ; WX 500 ; N six ; B 36 -17 467 685 ;
+C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ;
+C 56 ; WX 500 ; N eight ; B 54 -18 440 685 ;
+C 57 ; WX 500 ; N nine ; B 31 -18 460 685 ;
+C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ;
+C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ;
+C 60 ; WX 549 ; N less ; B 26 0 523 522 ;
+C 61 ; WX 549 ; N equal ; B 11 141 537 390 ;
+C 62 ; WX 549 ; N greater ; B 26 0 523 522 ;
+C 63 ; WX 444 ; N question ; B 70 -17 412 686 ;
+C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ;
+C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ;
+C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ;
+C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ;
+C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ;
+C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ;
+C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ;
+C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ;
+C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ;
+C 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ;
+C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ;
+C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ;
+C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ;
+C 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ;
+C 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ;
+C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ;
+C 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ;
+C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ;
+C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ;
+C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ;
+C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ;
+C 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ;
+C 87 ; WX 768 ; N Omega ; B 34 0 736 688 ;
+C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ;
+C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ;
+C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;
+C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ;
+C 92 ; WX 863 ; N therefore ; B 163 0 701 478 ;
+C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ;
+C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ;
+C 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ;
+C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ;
+C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ;
+C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ;
+C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ;
+C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ;
+C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ;
+C 102 ; WX 521 ; N phi ; B 27 -224 490 671 ;
+C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ;
+C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ;
+C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ;
+C 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ;
+C 107 ; WX 549 ; N kappa ; B 33 0 558 501 ;
+C 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ;
+C 109 ; WX 576 ; N mu ; B 33 -223 567 500 ;
+C 110 ; WX 521 ; N nu ; B -9 -16 475 507 ;
+C 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ;
+C 112 ; WX 549 ; N pi ; B 10 -19 530 487 ;
+C 113 ; WX 521 ; N theta ; B 43 -17 485 690 ;
+C 114 ; WX 549 ; N rho ; B 50 -230 490 499 ;
+C 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ;
+C 116 ; WX 439 ; N tau ; B 10 -19 418 500 ;
+C 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ;
+C 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ;
+C 119 ; WX 686 ; N omega ; B 42 -17 684 500 ;
+C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ;
+C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ;
+C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ;
+C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ;
+C 124 ; WX 200 ; N bar ; B 65 -177 135 673 ;
+C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ;
+C 126 ; WX 549 ; N similar ; B 17 203 529 307 ;
+C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ;
+C 162 ; WX 247 ; N minute ; B 27 459 228 735 ;
+C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ;
+C 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ;
+C 165 ; WX 713 ; N infinity ; B 26 124 688 404 ;
+C 166 ; WX 500 ; N florin ; B 2 -193 494 686 ;
+C 167 ; WX 753 ; N club ; B 86 -26 660 533 ;
+C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ;
+C 169 ; WX 753 ; N heart ; B 117 -33 631 532 ;
+C 170 ; WX 753 ; N spade ; B 113 -36 629 548 ;
+C 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ;
+C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ;
+C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ;
+C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ;
+C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ;
+C 176 ; WX 400 ; N degree ; B 50 385 350 685 ;
+C 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ;
+C 178 ; WX 411 ; N second ; B 20 459 413 737 ;
+C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;
+C 180 ; WX 549 ; N multiply ; B 17 8 533 524 ;
+C 181 ; WX 713 ; N proportional ; B 27 123 639 404 ;
+C 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ;
+C 183 ; WX 460 ; N bullet ; B 50 113 410 473 ;
+C 184 ; WX 549 ; N divide ; B 10 71 536 456 ;
+C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;
+C 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ;
+C 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ;
+C 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ;
+C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ;
+C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ;
+C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ;
+C 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ;
+C 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ;
+C 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ;
+C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ;
+C 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ;
+C 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ;
+C 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ;
+C 199 ; WX 768 ; N intersection ; B 40 0 732 509 ;
+C 200 ; WX 768 ; N union ; B 40 -17 732 492 ;
+C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ;
+C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ;
+C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ;
+C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ;
+C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ;
+C 206 ; WX 713 ; N element ; B 45 0 505 468 ;
+C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ;
+C 208 ; WX 768 ; N angle ; B 26 0 738 673 ;
+C 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ;
+C 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ;
+C 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ;
+C 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ;
+C 213 ; WX 823 ; N product ; B 25 -101 803 751 ;
+C 214 ; WX 549 ; N radical ; B 10 -38 515 917 ;
+C 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ;
+C 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ;
+C 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ;
+C 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ;
+C 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ;
+C 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ;
+C 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ;
+C 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ;
+C 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ;
+C 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ;
+C 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ;
+C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ;
+C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ;
+C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ;
+C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ;
+C 230 ; WX 384 ; N parenlefttp ; B 40 -293 436 926 ;
+C 231 ; WX 384 ; N parenleftex ; B 40 -85 92 925 ;
+C 232 ; WX 384 ; N parenleftbt ; B 40 -293 436 926 ;
+C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 341 926 ;
+C 234 ; WX 384 ; N bracketleftex ; B 0 -79 55 925 ;
+C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 340 926 ;
+C 236 ; WX 494 ; N bracelefttp ; B 201 -75 439 926 ;
+C 237 ; WX 494 ; N braceleftmid ; B 14 -85 255 935 ;
+C 238 ; WX 494 ; N braceleftbt ; B 201 -70 439 926 ;
+C 239 ; WX 494 ; N braceex ; B 201 -80 255 935 ;
+C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ;
+C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ;
+C 243 ; WX 686 ; N integraltp ; B 332 -83 715 921 ;
+C 244 ; WX 686 ; N integralex ; B 332 -88 415 975 ;
+C 245 ; WX 686 ; N integralbt ; B 39 -81 415 921 ;
+C 246 ; WX 384 ; N parenrighttp ; B 54 -293 450 926 ;
+C 247 ; WX 384 ; N parenrightex ; B 398 -85 450 925 ;
+C 248 ; WX 384 ; N parenrightbt ; B 54 -293 450 926 ;
+C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 360 926 ;
+C 250 ; WX 384 ; N bracketrightex ; B 305 -79 360 925 ;
+C 251 ; WX 384 ; N bracketrightbt ; B 20 -80 360 926 ;
+C 252 ; WX 494 ; N bracerighttp ; B 17 -75 255 926 ;
+C 253 ; WX 494 ; N bracerightmid ; B 201 -85 442 935 ;
+C 254 ; WX 494 ; N bracerightbt ; B 17 -70 255 926 ;
+C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/Build/source/texk/ps2pkm/tests/Symbol.alpha.hex b/Build/source/texk/ps2pkm/tests/Symbol.alpha.hex
new file mode 100644
index 00000000000..53999742d7c
--- /dev/null
+++ b/Build/source/texk/ps2pkm/tests/Symbol.alpha.hex
@@ -0,0 +1,29 @@
+
+character : 97 (a)
+ height : 22
+ width : 24
+ xoff : -2
+ yoff : 21
+
+ 03f000
+ 0ff81c
+ 1e1c3c
+ 3c0e3c
+ 780638
+ 780378
+ 780378
+ f003f0
+ f001f0
+ f001e0
+ f001e0
+ f001e0
+ f001c0
+ f003c0
+ f003c0
+ 7803c1
+ 7807e1
+ 780721
+ 3c0e3b
+ 1e1e3f
+ 0f381e
+ 07e00c
diff --git a/Build/source/texk/ps2pkm/tests/Symbol.alpha.pix b/Build/source/texk/ps2pkm/tests/Symbol.alpha.pix
new file mode 100644
index 00000000000..fe8cbb32c6d
--- /dev/null
+++ b/Build/source/texk/ps2pkm/tests/Symbol.alpha.pix
@@ -0,0 +1,29 @@
+
+character : 97 (a)
+ height : 22
+ width : 24
+ xoff : -2
+ yoff : 21
+
+ ......******............
+ ....*********......***..
+ ...****....***....****..
+ ..****......***...****..
+ .****........**...***...
+ .****.........**.****...
+ .****.........**.****...
+ ****..........******....
+ ****...........*****....
+ ****...........****.....
+ ****...........****.....
+ ****...........****.....
+ ****...........***......
+ ****..........****......
+ ****..........****......
+ .****.........****.....*
+ .****........******....*
+ .****........***..*....*
+ ..****......***...***.**
+ ...****....****...******
+ ....****..***......****.
+ .....******.........**..
diff --git a/Build/source/texk/ps2pkm/tests/Symbol.pfa b/Build/source/texk/ps2pkm/tests/Symbol.pfa
new file mode 100644
index 00000000000..f8671f45af1
--- /dev/null
+++ b/Build/source/texk/ps2pkm/tests/Symbol.pfa
@@ -0,0 +1,1099 @@
+%!PS-AdobeFont-1.0: Symbol 001.007
+%%CreationDate: Wed Jan 17 21:48:17 1990
+%%VMusage: 28489 37622
+11 dict begin
+/FontInfo 10 dict dup begin
+/version (001.007) readonly def
+/Notice (Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved.) readonly def
+/FullName (Symbol) readonly def
+/FamilyName (Symbol) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 def
+/isFixedPitch false def
+/UnderlinePosition -98 def
+/UnderlineThickness 54 def
+end readonly def
+/FontName /Symbol def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 32 /space put
+dup 33 /exclam put
+dup 34 /universal put
+dup 35 /numbersign put
+dup 36 /existential put
+dup 37 /percent put
+dup 38 /ampersand put
+dup 39 /suchthat put
+dup 40 /parenleft put
+dup 41 /parenright put
+dup 42 /asteriskmath put
+dup 43 /plus put
+dup 44 /comma put
+dup 45 /minus put
+dup 46 /period put
+dup 47 /slash put
+dup 48 /zero put
+dup 49 /one put
+dup 50 /two put
+dup 51 /three put
+dup 52 /four put
+dup 53 /five put
+dup 54 /six put
+dup 55 /seven put
+dup 56 /eight put
+dup 57 /nine put
+dup 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 61 /equal put
+dup 62 /greater put
+dup 63 /question put
+dup 64 /congruent put
+dup 65 /Alpha put
+dup 66 /Beta put
+dup 67 /Chi put
+dup 68 /Delta put
+dup 69 /Epsilon put
+dup 70 /Phi put
+dup 71 /Gamma put
+dup 72 /Eta put
+dup 73 /Iota put
+dup 74 /theta1 put
+dup 75 /Kappa put
+dup 76 /Lambda put
+dup 77 /Mu put
+dup 78 /Nu put
+dup 79 /Omicron put
+dup 80 /Pi put
+dup 81 /Theta put
+dup 82 /Rho put
+dup 83 /Sigma put
+dup 84 /Tau put
+dup 85 /Upsilon put
+dup 86 /sigma1 put
+dup 87 /Omega put
+dup 88 /Xi put
+dup 89 /Psi put
+dup 90 /Zeta put
+dup 91 /bracketleft put
+dup 92 /therefore put
+dup 93 /bracketright put
+dup 94 /perpendicular put
+dup 95 /underscore put
+dup 96 /radicalex put
+dup 97 /alpha put
+dup 98 /beta put
+dup 99 /chi put
+dup 100 /delta put
+dup 101 /epsilon put
+dup 102 /phi put
+dup 103 /gamma put
+dup 104 /eta put
+dup 105 /iota put
+dup 106 /phi1 put
+dup 107 /kappa put
+dup 108 /lambda put
+dup 109 /mu put
+dup 110 /nu put
+dup 111 /omicron put
+dup 112 /pi put
+dup 113 /theta put
+dup 114 /rho put
+dup 115 /sigma put
+dup 116 /tau put
+dup 117 /upsilon put
+dup 118 /omega1 put
+dup 119 /omega put
+dup 120 /xi put
+dup 121 /psi put
+dup 122 /zeta put
+dup 123 /braceleft put
+dup 124 /bar put
+dup 125 /braceright put
+dup 126 /similar put
+dup 161 /Upsilon1 put
+dup 162 /minute put
+dup 163 /lessequal put
+dup 164 /fraction put
+dup 165 /infinity put
+dup 166 /florin put
+dup 167 /club put
+dup 168 /diamond put
+dup 169 /heart put
+dup 170 /spade put
+dup 171 /arrowboth put
+dup 172 /arrowleft put
+dup 173 /arrowup put
+dup 174 /arrowright put
+dup 175 /arrowdown put
+dup 176 /degree put
+dup 177 /plusminus put
+dup 178 /second put
+dup 179 /greaterequal put
+dup 180 /multiply put
+dup 181 /proportional put
+dup 182 /partialdiff put
+dup 183 /bullet put
+dup 184 /divide put
+dup 185 /notequal put
+dup 186 /equivalence put
+dup 187 /approxequal put
+dup 188 /ellipsis put
+dup 189 /arrowvertex put
+dup 190 /arrowhorizex put
+dup 191 /carriagereturn put
+dup 192 /aleph put
+dup 193 /Ifraktur put
+dup 194 /Rfraktur put
+dup 195 /weierstrass put
+dup 196 /circlemultiply put
+dup 197 /circleplus put
+dup 198 /emptyset put
+dup 199 /intersection put
+dup 200 /union put
+dup 201 /propersuperset put
+dup 202 /reflexsuperset put
+dup 203 /notsubset put
+dup 204 /propersubset put
+dup 205 /reflexsubset put
+dup 206 /element put
+dup 207 /notelement put
+dup 208 /angle put
+dup 209 /gradient put
+dup 210 /registerserif put
+dup 211 /copyrightserif put
+dup 212 /trademarkserif put
+dup 213 /product put
+dup 214 /radical put
+dup 215 /dotmath put
+dup 216 /logicalnot put
+dup 217 /logicaland put
+dup 218 /logicalor put
+dup 219 /arrowdblboth put
+dup 220 /arrowdblleft put
+dup 221 /arrowdblup put
+dup 222 /arrowdblright put
+dup 223 /arrowdbldown put
+dup 224 /lozenge put
+dup 225 /angleleft put
+dup 226 /registersans put
+dup 227 /copyrightsans put
+dup 228 /trademarksans put
+dup 229 /summation put
+dup 230 /parenlefttp put
+dup 231 /parenleftex put
+dup 232 /parenleftbt put
+dup 233 /bracketlefttp put
+dup 234 /bracketleftex put
+dup 235 /bracketleftbt put
+dup 236 /bracelefttp put
+dup 237 /braceleftmid put
+dup 238 /braceleftbt put
+dup 239 /braceex put
+dup 241 /angleright put
+dup 242 /integral put
+dup 243 /integraltp put
+dup 244 /integralex put
+dup 245 /integralbt put
+dup 246 /parenrighttp put
+dup 247 /parenrightex put
+dup 248 /parenrightbt put
+dup 249 /bracketrighttp put
+dup 250 /bracketrightex put
+dup 251 /bracketrightbt put
+dup 252 /bracerighttp put
+dup 253 /bracerightmid put
+dup 254 /bracerightbt put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+/UniqueID 27004 def
+/FontBBox{-180 -293 1090 1010}readonly def
+currentdict end
+currentfile eexec
+a8686bfddf470dd119f86e1b8e5b290ae7d910e9317a36f6768d8de89e7e
+d5b845166db0e18e3fca77c6e789f2ac61e3ba2248c0c4ccdb4c50344889
+3c2a909c36546b763088822eb34d1051d0ac662d8098db11f0a527a679e4
+ac03347df4319a689d7d65239e8502b5db9aef94cd6cebd07cee5af22db4
+c8c628a982cdd10c4e3b04736d073f90eb0b840b42ace3798961326b5fea
+769b604e99b2d79dadb8b7ab2e769c4efa129084478f38eb206f8fec149b
+0b6e326fc4c76c32fe3ea5164f588b21cf83c0dcb1548e4dbc4192fa8187
+5d1968283f0a8974422b2af5ccb6cfe6097902c0355e57be4514166ff58f
+ff2b47cbda355099fb31aa17e4e857dc0df1b653b9cc8a9a45292d41e3c8
+8ffe4036018811bf2fc55980ce1a4fa5161e167769c4e289627a8d3083cd
+52b08be6b1531c322f863631069f3a3ada3e2076bab4d62374eab5672cbc
+8537bbd7ed92c12f05909c25dd36e05b289b91b1fec65dc210e67c167de0
+44de197b03df0817a5f3faddc8d16ceb8b1be53b6765b6e659bf54d91981
+57c966649a774ee195c10eb3659115d7ad8bb83114beea798c45dc84db92
+b20e757059ab45e275c23f1be30b619ac8486127cc0bad1eed3eea4b7e86
+4e58fdb2a98ecf8b0380d25e481a4304e232e4e346ba781e0e68b0cea3f1
+0ee7b2fce0b144ffae9bd297b2506c7da44474845893e06c490f0eb2ffeb
+034a75292e59cc038e75e1dd9ad080719647fea7dd00f7c8913d92b9282a
+1765a2d357557cb0de7c0da979954cbd77694f99ba39246adb7495766058
+fb8a8d4151a4a0d0f740d776fa13c0ae11be76ec06f9b367b3006ea681f6
+1f640c3640a78d0c7ff521d477981e23e5956baf42252463fdbec49bb560
+a9428d248b0c5250cfa2a49cd9dbcef73123c13ba382d3cf6a7b8a8ca319
+1d379a659f0e2c6e9cafe9da2ac074f622e397a2f7c73347364ae249b11a
+e2c34aa7f0d27b5f35d548d5ad1228597dd16a478c901d3a34d82c32da87
+78486072ad36d8b1903689123f99be020d41cfa9ff521d1eef52a83f4b6f
+daecaeb404e3cab31da47ebe2cc011e458d64a6e2c5c1348b91c0ae0d799
+9c35ed72eef0db90ff2ec2c242328ace7bbc5ccc5ee7998e27d365ec0937
+b6a1d0581d6a28cecd8cfde5aaa0ab1d43ee1629ae7a70cc0171ca2f3d2b
+becc6cd9ffd9858f4767cd3338250c3e467d21efd5d365d7b28d3106dea9
+c0b68a52ebabf4b463cae58656a0c6cd0d56cb1e9a2faab1dc4696600ffb
+c2039816785e3dfe868e181378031bb9e8c502cc2ff6a457c458ee19b123
+a175c89ef640111781540cd9df8903ee6fa23d54262274559148057e9adc
+e2cc011470c1c168128822ac4f22b2b37ce77a358c9a7730a948b9d9bad1
+3f78e1d2cd986d9807d720243dfd898657943cefbce545ee38325e803c5c
+d2b755fa168ad5390b54cb33b9e0762fd22b13aa21643c022d40e697c8d2
+1d8c44d89f32a2ecd1992acb064881c5ebaa138d05ee0b4d302dff6f5bf1
+271174f933bf4f7162e0f80833dce8059bdbd626ab7e6d7498554fe49190
+43bb14842d91c888c0a68354c5c5539a82079e393710d408ec09dea09f95
+cb8fc26260f2c49ecf4a2f64c34b6ee86521f313326f38d12578f96b85c2
+649725bd3457eb8b156f4c991022e9d3b1e3c07e9519dbdb3032e90445b6
+e7e377278a37c589fb9b4cbf72a100dc7ffab7cbac93f3f648007948aaf6
+ab06d371f10ba0f9240b1a24c9c3f89c29fdc5b57dd99799ff4f68274159
+9d406456eb64e2cd4e02d80cdf90f0a7df99214b1111ca43a98301ab543d
+25084c6e7a4442aaf6f599fd0e3a02996c15700eb2e8389f33a7479d991e
+c67abd43893d113472b19972ef0550084f40a3e49cbc85c29b1ba3834e81
+ed3c553ce6727ccc5d0a0b2e0fc9a61624d916cfbf803360b278a8a9c4e4
+5fe435fd830daeb63879cd7ebe6bd5e3c4f6e516b24ba18038b3a936f74e
+2430149a0ffdc466bc93b4b8e9d7df66d6d09c2301085aa2e37f75728e29
+1e3557000ffeb9a47657d6b01e3f24386e45d356fd6eb98599b611d73cbe
+88c899e8e60efa6f99fe7e12d3039aac12f385081e4e95c8d833867a8666
+d5bd2153cfcc12187d7aabd79203e914ea680b4c977cdc9c2286f9a47d8f
+0378a687d1d48c9bee2ca64806a93961d644b4d70da7c173d5bc3213f8eb
+d3cffce79f20deb618299724865c5d594b7086b5fbba9d68f365aea313fc
+2d7c0af3dfcc007cf7c2b7647287f4e8be8255f2532796b42e8ef17c74a5
+921763696c8236f7902969a664ddcf185c3bda785c108fc48bd6b7d4dd17
+bf4964caebcc06392fda130c67d2b5dfaadf7c727a947e61725fcb8452dd
+33819fa3debd761a1769d3b186911b7927c0d49d5e7a2b53e044c784060d
+9600c2801a8095bc9985586564b28fbd26870ee6c0dafbc40857a44a606d
+dd95ed837e5799730f9d5246e3eaf6be8a37dff0901b065753d3d4d3a68b
+7a87af6b0e137e1cc4f7125479fc7ce782cbf663c7b858dfaf98c3f53957
+15de7e2d6a620e29234da977490ceed8cb72b49e2b5bca3acbddf342e184
+bcc24b3da9a1c234919e35d9cf53621f383f85c28655044ce05191ab0cd8
+7ca61e2dcf787237a162a93816bf7c5139d16ee799efcbf3386bcb9dbbe2
+3b5c52cb34eb7207aa39403001c86122f5b32ab35b32d4bc391955a3c84e
+896e1fa498aa99cb980316851de4fd4c5884d8c55ea10b791c68bd908d4f
+aa1f641a982bee3ecc433f311e28b4ba46b10fb9450061d5074509640a2c
+6e3bd08c10f4dc99ee2679700fdb3074e493e8b9ca673cf12f336b85521f
+c81f904afce3e03446bd8d4ddb4cd33bf24cf9443709b94aa6ff54809baf
+42eb9966d68f64d1958d36e170189462c484decc1a9aee047aff84a75296
+de9f230992046462a9a3d821f31924f6e063b23edf20590c2271ea26f96f
+5c8234ff0f2656506710d15387dfe9402a35fac32ce9bd709736adb09802
+239e6dccf3bb89e677e7fa2347f693a47ddbb82f6ab50796227f74a1687c
+d405e590389a2fa3a12494e637d69798722a4629f29d5f8ec0c28cd6a9d6
+c3613b06a9b48170dfb844290618452fdaf4258fc231836fa07eb842f496
+3d7f4baec587f7f8e1aa1ef70d02fce05d72b987639f416fb6d18abca742
+976bb4ae3cfb9bd8ab03fd01a267d2ca968014e648d68bf195855ad77bc9
+97f33dc586892d270f7df2671868be008921d9bab6f6cb2d3e2909f1ceef
+7f62586c44ff027c28d1b285d1c409c0a6f68e33684bcb04ddd8e8d338cd
+ecfc68488e9bcd337047c2135d66b24644a4fcd8578fa7d21001773db210
+6e989597faae907aa2d58b28357e6e2478bed2d0660947227ca40e089050
+14401885bb6d04fb705bd7ef86e51437f0f01aecc60f1bd71d480504aa20
+2d31e1e3de1f1103c68ae43948d25a4c34bc8f274fc38b4b1785a8e5bb55
+c458b4399b817db03be9a37c4f93cb04cb3d96e2ff74cca331de6080da74
+57eb89b94a67334119f33abd1273a16a440bf2503c7f412706743e880531
+43048517dccc0f0659d9fcb65808f260c9cee906c80262ee2a9f9e6c2aad
+b36cec10145e641a0b1240584bd2e082b404778a8f335cdc4d2523e67fc2
+7b7a9f4e91eff110ff727d2af7cc179188fe799197ea65527e8a763e289a
+8752072d43b427f86bb7b4a6395f9d787d34ca8fde4fb9a9b140a343a9a6
+3f7af293ce1a6f54f5bdfca90b7a30714ccb880b6676b50c5e3547a383a5
+1528157a06c8dbecd116885e5d3690d454b0495d14ae65ddb7d0ea5778bd
+90311442970aaf33f262a13bf86ba493fe947d27603651ac8b1d04ca5fae
+8f28cdf53203b3e691675407254ef6275a6da6ce9dc274c3cd492ee4d846
+ffcab2d2d35c1401727b0dcb170c77546e0d79823a26d2c5e14d1f6d1319
+f4435b76fc3891d7c30ef28b0a16ddabac526f3b51f8b89708b27014a84f
+5920f23e6a13e8c06aa5692c01d38872aaced2a0410e865619348b96d153
+a51d41c62f1d1206f422ba739299333656d32791195c9b87eefb1abc2bff
+3ea3af85cce2c3df1d6d7b0e01ebdbb0bac3033a5252ca06aea1c21201b0
+7fd8e5f7fda300de7c7f689836aaaed413b5114e0e87ad0d8f236382f388
+dc7a6e0d05369713388a2fcabd1b98468be00618077a00a4a359374cb8ed
+22513b15304cac497830a9a4b6c5f16f6b3130043db3d7367166e455fc5f
+ffa2f27d832015fbc432db0776953fc30771dfaf50995a60e0cea496759f
+f4260f807e9fb4a9e8e0292d714eb61d820a1c9c67ef0b08d5a52d362c12
+4a75112bbf2b9189f3a605ec592012abd7a3c27f907f2d521cb9eb27768d
+eb8388f1e872591ad29b41053db67ca08713497dba053be52d997b5ed0f0
+bd1246b0fe4f13695138f3ab7646782174647a7f27d88b0368cd81dc0531
+93b1daf6036e4e6be7c846bf0f5350c414629b45aba11c62b5d5e9adae9b
+57474271636efd71446bb26a275bb208f698bdc2d9905e30e920326297eb
+f6ba9092ac2000b5c937edcf0c8c79835ab722a951325867c4f17115a821
+4241b658d4aeea5d4026747c789f84b60e532d30ef8d8712b8e20439e78e
+b40f6153076b572816da799a60f4ec00220d3c111c695e58d005e4a64279
+f33e5a28f4e0a366e5490469cb7632a6be0b5f087ef7c08bb801f66d29a1
+8e2b8b107d4c8aaf2d4875d97c085e771e2e864fb0055ee292eb53b07834
+eaa8b71e6c0b1c65df3b864e2014022e88816e38a5629559893fecfefd8b
+fac67bb993a30a42d9c124f66c296294f26ba316b5a7093c3439c0e1d096
+e45dae1a6c747daf9edee56a0bed1f95e0f7470080614245c1d59830f075
+4448718ce6810d8631f2e072802d66fab9f9d52ff1f1de8a695dcd371c90
+85fd5f465befe96c894e8ac0cb58836e9bc3e3f3f0d78404c84b91533f61
+bff9d0aedca8511d9bc30554e043f307d4360e371d2fde541f77b6b415f0
+54d257980975602b6df53bd99dc3923b96d3f9e4b3d1b29865931093a73d
+3b2fb7aa6cc6f5c3db794c6909faa3e83673e4d94b506f33ca6a9e5b797e
+c486f9bb84106a4a85b3e850def844550c7eb5c128117da5e8da50ddbc3f
+41dba4d7b8a2945850f164d71dfd95f65fa980c2887d9da47fd4fa0dbd00
+5b5e677e969dec3860ad63781645dd8dbfed960d59d56994665ebf62e152
+4e6c12a6958d92bb156243e204368e13f406084be068d594fdf21774a1f9
+c3d3fea9ad298ee7c9ff47e27064cbaf84d7fe2265e953cd353da669ef14
+482029840a776f9d0afa8bebd2a636717e7eba08688d93e44e161a696d70
+c9ae0f702268f3a13b58db17ece7a3dd600cb6493c7a1684c3ad66044d52
+912421c39f6136471afbbfbde4cdffb5f1ff72ce1ecb208a236392f5b62e
+f92bc2271c5fb8504b386cb60b9b1b9e3699b2c1b53a4b92b492818bd004
+f17db76dc85bd164a96a77ad5a1a263d6affa10264fd17334f1cc89c4f95
+9345c182765f60135a4589093b45d0ce523645ca4b9103e9679b264c0602
+e5bad2d6e03b1d520bae2f4b8f06e50352032445f790b021a44aef0e16d5
+06dce9251834ea125177b46a37cc3c856b94ebe362de717e8b8fc6ab3c88
+d4c618115e56d3e8e4e9f68f816807f1e06b2c9ac53e44c938d3026492b5
+3e5489f328ef410e46b817ce3649ad8046ffd2c163c4ee6491ddac639877
+3f82fe4b0c55a695bbd98414b42e03dfcb152a1590802e518b3bb31364b9
+7f95cc993c08c53ea8b3c0826a468a61ffc8134db155874c5166f5bae260
+e6d8cea4aa701d8c33ed4c9a04761b2e51a865a9ff88fdb67e9dac28029d
+4438c38ce12e0e697b68b75200147589599ce8a5706355e2a952b58c1a77
+5b1733323a14b591bf7f67ac5746ed1064c7a0a507eba49d161bdd06a3fa
+6c82e40188119661121732722d1926f836a7f54db2928ead28c9e10d3995
+9c98245c8002edf97735c4a8fdb6abbf8fa2a2374d46553f964d6a1fe112
+9929dcfbfcaec32a22e535a78376168436231cf19323e4fced6ba2e00c07
+e38120cca376d42ac150c47d00b62a3159a6164a5d0cb6aee490fd31f7bf
+0676d582e55e6f5a119c1a2b5aed0f79e941b98e45aeef9df57395994aa2
+2682603ad7f4f4b4e6dfa9f1b7dcbf8b516566115191112a9d03a835be9f
+cd7f6c165431e3583e9548d7ec93d5de800a12651e83780030421de60be8
+9f35edf14cc8f44b384d3b60cf1dc0c6bee7510de78a074099cbaf218cfe
+74780fdbad5dfd1e611fc553d85c4f95dfdc13021d8cdd1aa3c2862b1352
+81c25b9032240ffd6c346699b7aac0dce23c71032dba631948586c102b96
+10371a2cdfef7e4c29f266c013678c8a5803a3060c76e4ac7d39b633f13e
+4f53ba8eae2006fe1eae01ca235f5a62119871dd78560131218cabb47f53
+862cc5c0fd6962fc3eb0cc4bac7fdedb4aa80748dad4941e7663628397c3
+0329efc42c9818eafa8dd6b71d1236635cb73fa8e6a245643a2fc5436b20
+0993293b062d409497d2983a2e3e8ac1f02debdafc87a1f428e2c2029ef4
+53dec66f9d71e80e2105a3f0750375c54a35edec553934ccf6a21f6c0ec6
+42f89b66f7275facac47364cc288ecb4af118fc7d431836531e4162cfb02
+328d43cc6d5cee04d7966b5e3580ba5ce14e2d0f763c4c3eae5664351415
+ad48e4c36c2d94b935a57c96841857f920234a9b371c9649bdb29692964f
+c370ba384810420bb538ef4ff3cbe4f770898c9496229cc5cba246f38b07
+3f94904ed3f00a3e478668930b7f77819c73905310c9b8dcf76150055458
+8fe9e3a36acc59e433e52ed6d7e0fc9f850695c9c569fc00b3201e685887
+8be41d4de89375ff51d7b0c727178bf99a3ac56aa8ab328beb140755e4ed
+cf7457688c673d43d81d108ecd6472153d35286c9b015d4bf4ceb52fc945
+b0d0353c1bfc3138f22eebda1258d4a772c9f6047a241a38e2889cfc4336
+9d60450a021b7d1a57305f652b6860b43f72f89136ccc3cc817f5ef2cb65
+3e149481c75e4051d770358cc5c14c9e5449333129ea5ab70b73919b2eaa
+94851b83e17adf1b0937e1623383ac461dd61f853bb2a19148cf1741b8d2
+261815705f6ae9313e9a5a7aba0a893265c8732c4a80218113f5a7623685
+f0d475f4b7488a7cc54867c6f4269f21ae484f6ed719e917f1b412c69bc8
+b48120c7044c32b0c844309d2ae90f43c7940b3d5261eeb2ebaeca757b89
+640ee3effbbaff2877cf311a180de67f0a8df934aad92a7eace8c6efc4f0
+9cbc06ed609c96cf891473abe1362a4d9f95a5d37d789d76325eebcba638
+e6fb891f9d7413217fe184dc2218577fce1f22e5d40b55ada7cfd71b1eec
+39231456df20ec121d6f4fa4e8ab3b291fdfce7286c10b774cb1ce7db9b2
+3c9c8322881641e3c6019e31334f2cc1d665cc479ad36c8ca694302cb574
+10bd789166ed99df4ded2ca40612b2a68c49b6ffc4c2c4ed667023711748
+a5baeeeaa20a1ab463c09c87b6f7f3901ecb0984cc23c24b66e89424eebe
+4f07f811cae8b3136abcdc64f0319d4cce4f8f2cacfc44109d3ea2890d11
+802e6bc28bfb0adf428e92f8c8e302908e1d7791358fd3f5e02ae3a7f50e
+ec45fa0f28091572c528fbaabbcdfcad65d66d8a7be76ecc58d5cb263430
+31d61a0d94e11dda5aaf9c4f66e4af19a31d29326ca2189cb61edfd36e98
+cc7e67aebcbff6befa0691f3f4cece202224d4d824884b845f664114b915
+1044df7b8f23c9cfc17127aef763f528360dbae912b49f194ea48b337c85
+bed117fe164030e19ed3ed6650ec283bc9b90a6702e719aaf72e3c79edee
+6eb5cf68ccf74cac3747484809d3c8a1e8993cb543e7bf7b2dbec7e996c4
+5b6326095c2938cf3fa05453c7787095a236fcb854d39935ba4e1cd90db8
+1a871fa058165b045ed582109ad90c2092dfbf376d3f43523ac2cc336cca
+d3dae039e02ddaed85e1d1428c58ecff2f1e969eaa1658330eb155ab33a9
+524ed336d1ad1b4ad4f09f25af25e2da4cca590f14fd18f1bf2de6649318
+5b54fa7db4c1b425f8a91af562895795746e8cfaee57f247ecb949924c26
+966145b848874a5c2731b8905136e8599ade111001a33b455105f4681eff
+6186070ed30e43454ed39c80b2720b77572de8a977329d2dcdffce6ba302
+740cc1f4fa5b804644b0283a7e783238e1832d6de3e6d8a1b2834cfaceb5
+62ae004d98b7deb05436f547e189e3529cde322ae38b38be6be02cefb389
+c7b9432711c0b528b7516a8d9a416a112b1cc51a2adc8d96b0bd098e80b5
+d6ca55953591fbaf29ca90ff480fb9a8b11589cfe2a8f52f76e03cfd7f2c
+eb497d2d51a4ef853dc69eec6c73ddf8acb29aee0167e103e8e0f0a070fd
+ade75354b85b722d56fe6a8a4a827fa17e8f9b7e7282f85d03ed13dd9adb
+40a3572188be0d269ca5574915012a6596604f77a730bfc7a10243379e55
+e0f155a002f0280f0bf8507c5439e33872e61eb21b1b90fa91a263475509
+1deb6b50774f0b3000acf9e6597ab7394d55feffbe319feddad4d7c5fa8c
+2240ff827cbd391934e32c5c6933218eb33fe11dc5c27a5067cdcc434510
+8801f15e5b9339e654382eefe167926869f5b09e004c3d4478990f4df71f
+3e500ba8782387819df65b7241d4f8e91c016399ce427bf970c135373ff2
+3320761fac67862a5a3eaff5d149fca9632445017e82ee8435b1f5205ebc
+a0d86c5bd0fdafd794b5b4906684eedde0f75236a3cc78faf940723334d6
+d4807b4b84ec78149e3d70293b8b8a6e5b37cf09f9b955507003d4333a8b
+b2e445962a326007d7cc23d17ae70e4eb3ceffd18eed2b9c1097b80b75f7
+eac6f9d34a7eb4ef04cbd02c60f0bcd72794562333dff3f94484cb7bc1e1
+b6ca1af53a8432ea8b4ffb87fd2f0cadf71931a6ed19fc8bc6d914b1a8b2
+633bf49929446174e580f5186099635c605dc1d4030b4e4019df73e796e8
+e41cfc84e0916e2ec637b4a86166e6fab41ac8750e2396641d9bdf1ceec3
+f448dc3d0b89a8bd33c0134fbb2c2e0395bb65c5fb243bbe2b22ed8f55c8
+bb8aaac2543f3352343717d97b71cdb22b5bf6fd62076fc41e1146533d73
+093dd421025e5b2e4225a9e47235fb30328774f0fd76b1362c85e69baec8
+7af39d8dfa4b3ae82ebe1bdf21f9cd1c20edee7ae5a17a48f84d5c5d28ca
+a3a18a0408d8420071c9eca26b71dc618881bbce3d0968aae3762934261f
+4cb03f26efeca6188177d804acfd250234474181de94fd711dbff420123e
+db91df92997cba49f726b8a4ba43a3f2f6f040bed8e370afe031556999bc
+9ca5a553effd814f1bf4f640cdea3406e34f65cfd625d9729701dbf02a03
+f7787e8c95dd08719c58e3b8a92c573381dc1392a7c49c2a72e796364d3d
+117e927be69f9bb70b53e450797503b1f8fb400c580f3e4ed94863747099
+dc3a102c29b013655e06e8d0bfe5e12f5d8b8b909f886bc9910eb42e7b62
+d1218bd94d8a5b20e03950c0a5887d6729937bcea0679fb52ad29514685e
+3e64c9e82e9c82c04f810cb5e86dae4cd7eea14041f1d27adf00526fde35
+9379ed1d0b7e06244ff354f343453fcf21514d8ebc5dfc005dfb9ca4e698
+dcdba07d0f79b129f2b71a8bf488ebf90e6ae748bc438fa5492e239dd4ea
+fd79f8b52408a4f244efbba527e131e6ebf6da23fb43186dfd414ab02344
+76dcf1c1ddf06e58b5ce5d5677740b4e285d8b87cd04f6011b54c4d5c322
+3c17ca906e90dc6271c103b4a49cf2f89896987e96484b45fefc41b04c00
+d9a8de774d861fae63f8bc9cc2fba2317a5e951ecbccaba5aad95ea61329
+3f1da5e3042ac4ba95837fc844eccbb76cbca769ee049d9c3f90f5d687b0
+97379bb7679a9a12eabf3ef0036300b90f0722807f81a871118418db0dac
+ffe28aae0c1031fdffeee2d3b831103fbbea005058b243be116dcc9729cd
+6d088d0f9cb9364f89e942177ef74d0643db9c3301155db0a9ec75829673
+922b1560e69c151fa9325a00c84a202eb41b134203b092736ee61cf1bd5c
+95532ed88d5b9b71e14accbc3dae675b52e49e4cf4c7580d13ddfbde33aa
+91f1aa4ccd64af5a5475f24553e339389c8dfbc14a6dad602cb23feb06e8
+aa30dff60f3aa223bf5ab110688326a72e543f0d17a2bd5d33ba449e1b2c
+6c4eaa0bc276a160c2a07a385ce22caff5c3aa7a5551196c48aebba6a3f4
+afd1cf8566eb6542a1ef37794ff98737ceefc0bb772d7cd07ad5a4302072
+bb172a5e82065e61d2aabc5411cc35a79cc0a63f29d7f62c09fa98b1e703
+825b2a9fe735c296dcf5d16adf235cf9a252e9538a30e38f67836cdca7c2
+a75c1b2657017c16f5ed7d125a3354289eaf233d52f082bb5d8f80389e8e
+9d5e50e4ab869f8f29734aa2d3c06b11dcc569351d446e9e45408e41a969
+9fc3a7c0116b8a6603949de556a52ad218272f497251f281fcdd2a71ceaa
+c2e9bfdb4c891e2d4a1b3423e9a8c30e3379756ee7e196cbc76affc12021
+a58d78151394692dd830c6ee1bd29149a37d9a45303a2ea3339b3bad881f
+ad6aa15b9e7aed09c4fb27fdbb859d6ce02d1a1d3ea90f2939ed801beb0f
+28f367ff5616f5b033970d040a411747ab706733752bf0c11217126324ce
+ab6530e67324e516b56a0b80977a395211e1a7f32db114d1b621f7669b23
+a8a53fc327a8ca38592ed16715c6d782503d7c2973fb4d4cb11e2ea3cc8b
+5df0dc8fcdf0af4ad28f18ddea460de623bb4f79e3d7a9345f47d555746a
+c1d9eca2f8ebe594fe42164a8970c20aa4440d4e9a6cae89845edbc74583
+edcd312b4fd93911e8c9c5c4e0a127d1ca4a78f6f8ce93a4a6c571fb72ee
+c0a73a194e246e5f9b6b8019be7ef975b3956ad798c64a580654943d6192
+d4b4f05172b7064e2c4782e7215265c5ee0c4f3e0331765a94273708830c
+fa0aa2cb6a5bb230f433abd5aef8aab8f91603eb59c29b9ce5b54d8548ca
+e59ad6e3609668094077006883d52967bfc43213ee7504d366bd6ab0fb3c
+295c3adceae4803b8d723d78f6bb53d6391f68b5a76f17d15ef40987c3b8
+b1b3fef926a9690ce2147b648792f250d2db8ee80455cea46ada1ddda0fe
+bf1b6fb4022fefa0c519b1d9793c5ed7dc0b0aa59c61a4cf3336679deca9
+9c4f2bb39b348b6bdd98bba8dc2d015255fa2684385cbafc8e7c2d82db00
+10b220d38fedb4255bfd65138bbb1016b53b04051a4c2d757ce0af776c58
+5313fc9888b79fe7341c271df06400b6a95edb836c45cf59d3faf312e015
+2278835e430e4b42aebf48a293ed6b789bf67edc92010fcc0fc9f5dae346
+18903f7b1251fc3f2d5eb5fde66f0ec1630e640568b1109eab8ca9f84617
+f30d4b5897c959db430132540cd1379f5dcb17658aa1c59dc6f509aec5c6
+24d225ef96194a075d9ab67011f10fd21d07434e7f101534e57247994d9c
+16a7fec8416e59ec750027be6e2ac9258dd30147146c3048c9c93d16f8fb
+b062ecf10f9e54b418a1fcf4ab24521bb27453ca57b5cc9b72c4e175edbc
+8a876db42aebafacc33ba6ab66f028ce8d29198781870a7120de21eaeebb
+aed44b65b24b837059ead5c5205d68d51a1506de9b51440774b57de55915
+fe05ba2e740c37ff24a077659b9fbb4a394a069c1fb33c50836287a28226
+c31f75903b44b25d3bccba417f46a8433da7744dc56113ace4a12c87cffa
+60fee38cd9643cec30b1aee59d18e508e944c53dba216345f133513e9329
+9fa822780b39d049a3f3ab235314b4a361866a8957b3e4fc3991f2e76d80
+7e16d9dd47a6de200c036d3ab6567175251f6c8769dd0519d53434b98bb5
+e7051d83592febfcfec038d4265963be24aac1d495c4df853bbcca5ac937
+843ede788ca0e73249a06f7227c04796e86282572318f185226173d3a347
+b548368afaf2b80b1857848be4e7092e38a2b01360e3066dc9517840ec06
+89e93b4ac163d778556f67268034e5658aa79c2ad79d474118f29e146753
+bac0b74456787d73f19d2bd96b017c9a270d3bec637a666f8d08c63d1fc4
+1480bf974c50ef693cc995f92bfc61646ed34bb3bfa262dd8e6bb548584a
+f3a73a4835ba8dc1059dec2083660b63356e30fb63f2b88e38bdab96199b
+9730b28b51092cf9677247562cb407230ed9cf30f89d7556d0b8eb22979a
+c7835f90a982ce70aa7b45d52cfbe97b434a077aa24d4aaaf674fe71ffb9
+0dfc5f18eea5a533c3cab25b5dcf08565447a4e09485513fe2347434b0be
+57b79e8eae0e1a01dfc7222002c7a364223250b08a3f378447582edaa55f
+bbb26a096542ee42adcea469ac07b728f33de035e3f5f1850dd772d75486
+220d731af6d26c41f4afdebe24caec68bbcb6d3c45b2ba3b1d961d2eb7c1
+404388865dc57d7fdbfc2edf5bf2b3f1b07dcb47837878abc49846e359c5
+73cc53ebbcb66e48e625dafed81f6548f17709705f513a7d0f34623f81b3
+6c28ee3f66f2c211427a1f0261faa0c5717a2f48b538fc79a40fba8dc99a
+94e01d754d64ce6c03e299ddd366801e87446b9c263734e559aa8b84e82b
+8d352cbd31c43705af067fe793b2572014ef5ebb7d4bd550aba0c65849f7
+9d958f225d85d29f40804518230abc0aeda63a594c7fb53e132e3f34475a
+16b5a5903f210db4e88dcd27120cd8d7c4e1009bc75796ae2bff4de7ceef
+7a15888afcc60903524c01cb4a905a0d40878202d381dcfb1a5adeed0f5d
+ace0f724e120649f94a508c8af92417a88522f67176985626d5d80904c51
+60809063ff4283d029e8ae00a748f5a87b47558e2454185e1c6e6e8deb72
+d50793625f0012fe530b499532e6a099eb188378ff2031058d2c03ce54cb
+15aa73fb9b43ac365d0437d9d738e4246e0d3b49d8471d360b2cf6963e72
+7c29cd37317bd5e49f0339976f5e9dedd1ce3c6838a6bc632cb3f3b87946
+39ebe5f5c76a7fea93142907ee6e70c404f89b5948904e531b8d2d1ede3f
+3e495e110a850df56535bdeabaa476acbb05bea4d2ac4d1165f057bc40bf
+bbbf7a3ddefa700d63531613d6cedf2ec5a6c99c83f2da1fe8d158e9c441
+a38059f327d17fad51f5976c7b27fc48cc3a179c414cbae5bf819abe5ac4
+ea5da1febf135cabc6a49f8078db4a6c64ed0fda651990151260eeae1d0a
+a17bc1f1f95ab368572f1f742e6150028ed8d6232d2ee9650afb384de052
+6114497d10f994bf388cf16e8cebbb62334f9ffeaf0df3a89c50bc6a88d2
+7021d296e7920ebf10bdbeae0bf1fa6a0ef3b7c9ff1ace94d39bc2374789
+09788432a7c826e329dfd1fe2e05c7f36fcd9d41b16145e3c4aae1d08f12
+9643e8797e81ddc38e18ff6793bd44fd1f62fdf30e0902c99a8b4ac58bb1
+e2349dbe1866b5be28a47973645d7b3f3629175e324d50f3783e35bc0119
+bc11a38a8472a1c534daaf25f5b4072432252d5ded842be4b1ad5ea57db0
+964867457849162d5335e8c86562365fd833b7ae84535ba53c4db95b0ff7
+bc61122e0eccd8af40c3e17cffe0ea4fa12e1438feeb67e8d530cb0811b3
+54955e947a92be3d753428ff010a2a1c746461bc8ec2bf78a76cca0f75ac
+0d65625712915ef3d18967962b8993082256214c408ea41866558b636ce0
+b453df438ee2642ce35a0c1f736c2788d98aab85992f842c492b3c7c11dd
+646de00b0ae62a269f2a50854f2aba06a06e3e3ee42c1c65217bbe11db79
+3580fffe2f57968ac21b095bcd9fbb3d2756bf6231226fe63a2abf321dbf
+b74b65c86ef514df6292c885a461e0e9db19eb2d153c0fb7960780de473c
+0e672515f592a4836f62188c11508fa593d1f5f9e5682d258e723cb7f068
+1b83ccf0c14b4b789da54a747f892086d58eb2da4618d86898f5125fed03
+1c3e7fdc0856e12c65fcdb9f34f052b0f416be940c99853d77a89a136dfe
+fa4d315125d05150c6d7755c66e6a84d0737074aed40104177149e8a2862
+1117f07ee708e71cbeda23673447e7e2ecc84ded1c2fdf40945cae38522c
+4316c75706f52f2dba1a9d43e97babab6f9157b7d8cd08ff409024889216
+27b3e8a94cdff1de0aa7cd30029f7ef45a41902a8297256de2b91aded584
+d098019bae6e763078e9e7634fce21359e074006aacc89a1c8c6199da648
+dc880002ddae31f5a3d2594d41803bc86475884658bee7c7691726fc61b5
+5385fbd5ca9fab4142e3c765e568d42e8e358aeb6406d3e31c1659e89b0c
+87f71bb7cdadd56d1aae187168231e375e8737e17c05208d5ffc3737a893
+fefd4da6f095e8de9340cbfd21bea1b0027afd7313a6d188315ef4d3caa2
+18b7dcc6dd4de6d569a0652f6115ab7cec90679da2735501f982a3d98cd0
+ec6ea48b449863f1ffff347523d3766bb67305d20bf0492eb2334a2c7320
+9935f4f35de5fc172cbb9431ab371c7f69e11f9fc69c9f0ad5780ddebc20
+3bf4275be7bf05c8801de5b4e5d007250346b4e159263031666571f87ce7
+411cc1d94ec0a4c65b2ee9f67f2ee39f70b3abab8e9911a38a014c4e839f
+47d2bc47cf0a5c88a1da47c6f47cfa2000b0f5f36f9f7a182d6998c37308
+3df1c4beb464643b7bcd26056efdd43fd7d90f15992f3ae6fc00a080f1dc
+d11bbb610a9809869f3712880ae4574d7de52c25fb8d56627e03acb055a1
+7e50f5862d3309ddb88353a85bccf98e203167107d8a631f1fbe87631718
+41e891b1cdedf9438c18264f9d014c0a99fba6c12974fe029d016b200a56
+ba8e67b5b4121de96f2141abe0338d0a1121fb389f3b7c38794e64cd5458
+e8ac4ead27c1aaf01d6e4f90713328249c8a35050d0c57c92c68615047ed
+607bb0b2e01dafb143567159ee43013f7b51ad57bdf4c0e42e56029940f0
+d65d9a408a9d0d57d91e4fc6ae2b7061482ec4fdd62f842494e8b8a1c4a1
+4a65d4dfe80a8e12346e37a8ef583a034b1096dc0dce0498b464c0e3e6fa
+902f805e2f620ad1cdee95d566d37754036c669fba48bcbf5a1e178720ef
+3afc4499ab001afff896b3c2e5b4d691578ca26e1b7c9bc2caf84aab60e4
+1ee5c91559c7e1ea5f7f5e49f32a9eb00bfa1a5ba53b7ad7ff25a97ec81a
+c3d6157941b69ce2e8d3c057d355874e85e626df6e0be7f5bd1d6034e571
+274302767ebeb3f362dd5e50fd850e7542fa920b015f276c5063eae79597
+0445431aea0987239853e77530b83d1ba630f003d0960f40388ac23f5445
+31e221b8b982352f6015b3e027d691fb7eb68b360d6846029dc69e6d9c5a
+885781a9ff40968799b46493f675cf4455b1c4abf6ddef65a20adc5ebe0d
+631a6018560df33eabbfd3fee26b2c4a158502978bbb70885f36c7b5f226
+f3183e8f978c7cb27094a947f4063106b3807c916ff00a6b488edeaa8c51
+9d4951e81e3c04cad9dfc80e882021978231f02816771baedf04eb25724b
+901ff4d73d024f2c47684f09068e1c9137f0a2f5de2891ff1c02fd59f447
+f793536eb41bbba5fb1caf6185f6a7256b847f7c4c562b981e9d2fb06029
+8d16b7bc55ebde4ec18f48caa85a08eb0c24fc8f54922b774acd2dc50660
+9da8d87b76def4c69562c175bb77b5e2b21436692445fed298003382afb1
+1ee906908b3ea15f766ed5317360935c0cb9a83d5a25c5bdd7d4c9c89f1e
+26b129f10cd26160e8b208aaffa5aa24f8e95af40e66077a4079d347f136
+7b943541c2d89542a78dc8731c195b5086bfa5cc8741ceb0c786e28a2a79
+768be51b726626a337d07021e4e662e3d88c93763a66cbb90452b28fd046
+ce6c4ac6e125c37b20fcc9de34f9697974603387bf6c6b0b800f00bff5cd
+a260efcc62818f5866b0d917984c79e4f394e54117915eaad55b01dc6b3f
+aee7c97ca5b55ab277532fcf8caee6e09b05f400022d8e84be366c2d18f0
+045677c5ccc98eb674e92dc13f0ef7e86e64c7928a8aa20e937eecb4ca31
+04a7244220d3ba68ac70066ffbf6a63f639f6830e34aa78f73d0d6a1a88d
+aba0283f2382223c4527d447fa7997477194bbb673ab25071335384c849f
+654ab0345af53d7c96f5c2ad635a9f1704158c4a69cc9037f74f83c1588a
+321403a06e09956a4dd863a2a77399f4dd13abe0cdb7a4cace56d5526974
+291da8012c26558bfbad653f29efa176a2d9d75e067d3e62d62e46ee4eb4
+cd7596654ead0a57fe6b80294fc8f7414df81d09258ded8c4928818f7e31
+14bc99c93ee1b8a4b955d66f268556970964f462738dd33454e8ae8d397c
+28e2871c2745ddb891b2fb43c881a043902e9aa0c6e2e049b090a04d744d
+2bc3ac5673fea830691b036a3f7881a175cfb771076676081a50227f086a
+27dc149a84ceb522e16a54a3669f00a02e6ae52a0b037ee0ee4b3c9a6f8e
+4d9b1ca74efa2e29669fe3141b3d9d5e15e08d534e798241c8ceaa466796
+1261e7c7d7502f8fc6be415d18b5ff6334ca3817ba5478debb3b80cd89c3
+966b5416b8e52b062942746f0306d05d80b14de7955a0df79e88d65d02a1
+b6c36b238e44e86aad035bc8a0cd08acdf69831acb83b7d8a05db9ee80f2
+042ddcf1bf5eb388848061138bc6f08e100d1371eeee171542f649fc8f45
+a94bb8df4d0803cd51c0b2aeae6c203ee6acdaa2fd6696b46d99a564d397
+2d05a6262f16353fb549ac735537c616ffcc18141a456b4333b0d1f38aa5
+f48fdd2a10162010f35ca5af6d12d60bc67902bfe26f4bc5e7462ef42400
+df06fbadb6886cc29d45e431805cf86cda8d4a5f23c295f118790bc64ecf
+9740ea83dc22a5e257ddff33e47fb9ba559fb4c7eeff0dba8692c5ccfcb9
+4d91ecdc1ced2d4474f1c4dfb969eb75abbe27b36fa47c0797b5cced1fab
+d1589bd823737d2350d562d241bd266d3e488f2c1de700ec07eb5ffe52dc
+9a7284314e5600eb812fc948874b08118c3143efa79442196ec391591ea0
+d01ffd1fa3a51908feaad02b402830ac414c26da1a0e15190872eeb8f163
+8da716486f1914fe6353b2487548ea30fdd14fc9b7a6b25a2c949d8ab5e6
+de8d21ef0c795e5fa28a7c6fabea50aedc95b66b7074d97ec409916e4631
+726738dea0d4d66c9df0a79680caf3b351ef95d4888e104cccdb9ee97160
+ae14c96b71be94896b4d290419bc9b0301729b22237289ef54620ee5e445
+08867b50a3128b2e8a53d33a501f466ae75b3fe05d47b073f8b57afbb3f1
+4326ab29bbde4d9e8954c7f99113cf766104dbae067ba02b702da3393e9d
+7d236c92bbd5637d4863ec6545e8827cf8f094f23f5369974f1e296c14ef
+4a1742abaee9995e3dc7a8e8c469df3b392b716c3a4aaacd801d17fa0c72
+d089b9e275f8cd065bcd3bcfe6875a03ee56ac64e1fe10307dbb2522fec9
+2eb25c296cc942360b38399591519c67aad6fbe733639bda24841588b04f
+4cae97237055906a8e8b7962e1f1f89d68ebc30fcdc598a322be4e471751
+8a07efc28efc59119d5fec75fe2e7b6066627fc957c8c4265d0f497cc32b
+b5342621fd58887c5ef6ecae52b1f137bfbcf6ec422c4148113dedf2b685
+71494034cb2ae19466123c60f9d651320bf6b3556017e58d73572c0b1983
+c6a2905e4c1e97b7b7ca6bc703eeb216a0ed382f375ea69af2a34bdcb296
+d4944992d6cfc10315e33e64fb7bd76d9b2bc48b7ddd6e84071e501c9663
+f8745473f74149d05dc9a3ebe1beababd8f776066e3b50cd58bcb93ff901
+365a62a28b65c7db8f0717563ef743637206d16d8d08b3b41da45e30b4b2
+3c10287f13c03426a55cab4c20054890d74ff74e917458313910aba8fd75
+78823f6437435d324b3f22f1ba509143af39f07fc1278310df068c0c52fc
+d5d8be0b19718f0c975dbc2f3d217884d8e22b17d1fcfc8ce3305e25db8f
+3bf0da80a564d51d227fd895f6131397b93d34d88027c1b96102b22df106
+b96b82346fb0b6814b56fb00957dab25aef8cfc08f34cfedae6dab39ffbe
+1a34e35695f2b3c061f5f8ebbc2999e579867b2add78712a8c0f8d9ba80c
+d0a013bab8ce12352d66e694071d25f68a314d35d71e020f2df6e465dbf5
+c9b2ce35f68e06a3da16eeb6ed9c9f7d59e822dc87e066c18e41e2c976e3
+1cc14ad6833298fc00494c494da1335572a69806c7f302fb62b3212acd42
+32e5bd732be9733c1e8ffab05fe671cbe302599ad14972cfcad413f2ddf6
+adc786815f4b884c537619722ea3371304a902d2f0041f7159bc079a4636
+d70125b0f63429c901530dab3c99ad7f1b07132d4051ca543c578a9fc20b
+1b5fe1d5a2bde2b2665a4030d1d3deaca3b4b2484c73bfe3ff38edc1ec24
+cf7c9cbdb208da62eb0ab921d1833dec9005251181125d1b4ae35a8c7e42
+5cfc523f649c9699a916747bdf6f299ca914446943f5ff2087288ced2f0d
+e486b761f1f8cd0e05f0ec2b5011a60d0b1001a1281de32d9facb15b0064
+c1d9e29a8dd04e8d721c3c499ea8283161213e4ae2a2712ca2c1820caba7
+dafe076d94488b625c2caf76de56b7684342156758656236cba122eefce4
+009fffa5e4fb66345c1f3c574aff543ae6bd0990fe7f7b55b5d2fb9e01a5
+405b0e125ac24c5205afba4f5bf091cbd3b71a5716a55e72dfa5044decd2
+0f26e18f143f51727806c9f34a8fcb32020cd41400f7f068b332e993af72
+57ea6c49c04bdfc7ebeaa09958eac5fbcdd367eabdf5b23689d0fdba5230
+091824139d362e484baaf7cda2a50b849df3842eee52254ebe957f03d81d
+cc3ce52d999a162252cfc5a6e45fd7b72179229dec5144c304c059274048
+a0e03bfcbe449abdb7b96a8620ef9691bf75c6ad40bfd454a465713fb670
+05cae613fcfb8fc4ec29ff3c5f8b5612492329f7965e77f6295e209de448
+d2a117baf2b8b5414442c8c3d9d8c64710288aed628c0078466551888849
+7e0fb1d09b5200585f8e453af16c7ef0496be96cf5a3c0049ea7f5571c20
+d29590db168bdc2909c2c5890b876a142cba5ba3401bb9e43de8eadff7e9
+261b3acfa13a12562eea1554b112aae29c1eefbca3d500ce88622fcd7e8c
+9e1f6f18bee5c8953d53260329e5362365836ddeceef3270eb6120e2566a
+ac43935f3ac71810852e05a514b5818697363e3dfe272315899dc6fb9b75
+7623bb4f529726d0a5051be3953d1f4fd34a97e1533fbe50ef1242aa7c7a
+12c75f9ad9e25995a57ce60e683ac14327a8ede099dcbe6385c2e7f39fbf
+431dd03d20f0fe86b585fb1233cb0a05abb00d3cff450d5852bb4da032b8
+b393c04886b904ded16f80032944a55d1c3f5b74b93bc43989a31cd88cb2
+b1d41a3b97cf4bd67c366c85fdaf088fe0e7169c6027ed2c084966972b47
+bb229b1c1b97a80661dfd5ddf40495984c015fff111c286c93dce15b2ff6
+2b7b84943784d9c7eadd8acd16e6c5228a48e41c985e6a8741a59de42003
+0819e38c82795040022ff264125d5d7baeee6304ab5899e6fbb16991a3a1
+20beadd0cf5bdea470063c338012fd96e71d836621e073f47fe8cc8638b4
+8d38a55c5efb752bc53a104ae3053c12e8570e820bcada8e7fec871be81c
+aaeefa45065f1ac0a6cf00c42a50b038e67d5d7143d15ba7507d62637332
+d23c5813820115183241969cc05290d3af8b27a487a9c1f9364b69c958c1
+b1071905fee7ac1ccef5fba9d33ff266fc27cd59489b352f8634d2bb900c
+ad14f4716f26c3421d39292ea926be6000870ca5325620ad3b1d8593011f
+ebecadb881c187b73fd4b1e53d5edac00738d55e17cd40347a3bd648f799
+4a1d9f170a7887353a0ac7097ffbb8b215ffd63acb8b294d24b44cf84e92
+abee700b8334ff826c952f019f81f62d9982185d48b34dd1568909eaf031
+8c1cd0c1da64eed3993c0ae0251e1b165950d1e734564e062c35ad393fac
+58d488d6825c9e20551d211837f93b833876bc055ad0ff49405e5d960a49
+e98d3ebb097cd1b5c31253b573f0ef5287a01f91a4c34549971e37948c82
+02f2b7e5c98ada831e67ea8c0d5693da3588f72e6c961e083c98218eca46
+b37fba941deda7123bd1a0e92ca2a1dbc20d369d19350bdb4a44da25f947
+470a1a5e053c2fba22e99fa32e0e74bdd51e69882fd2a43350761951176c
+67412389d41279a1c7a4e9f995b09930dc28a1d75359e5acad9c5a703544
+ce4961c39755d94db1c74d845869b78be8bf6dc97cfd2ed0bd187290abb7
+7fa806c8aaa2fe46c17c05ebc6141adbe4efe456743ea5672cd946ac45f2
+fd74712b4f36f962db5fc54afdad2e71ec2b034b6dd69f39f0acfe5c2c18
+07e4c60856b79931975f87020151ad0c05f2c6cff5a5bb7489f8cb6e8118
+6c0ad85881a4c159943fb53990cab8914a0d096a14bff414e2e9a31648c3
+d7dac80142aadfc3295f9cdaeb84cc5ac885f475acf94e6cca268a9d23cd
+705cfb4c1a14e1069d449967f58051f3bf54d19a310afcefc1d9a3242c9f
+bcaf5d7793faefb08214fff4535f646aa7f1596378fd86136b4c08c3a863
+6a2a5ebaace6e99390201f9ded66507e76a6f031fe1c3f81b6d9f7a59ba8
+c70c964e1583ea48460ec7dee4b738b28b6f3a03614554d9ef7b9f6b7202
+36e5d449747799a242ef96fd9de4bdb7059ce3053e02c7aa9e24536bd3d2
+1aaaa5884f7064937fa48653ea39a3e6e1401fd96e97d6aa15eed15d77e5
+80679eb37f36f9bd5736a036a308cb06ee20cf32de82a3cc4dbfae50c296
+642963acd7adbe3eff9463f69f976aa47eeaba0e88258a4ffc4f0933af5c
+8b5b5ccf51a5cfd83f96defaa217f5b4450492b146a0e1bba99664b7f484
+cc1a13c5d31779ef3598ce57a7f2f98851711d3447dcf54bf98aa2851be0
+1bb5372601e5986e6c7af78ed12642418c3a126db1157355f3a9e757d9a9
+27109466de9f4cefa15be737e6fee85313e4ab2522b8590dfc9136c10353
+cef0f76faaed3bce8617438a6ebc81db83e948d85bb231cda96710ea8db3
+fd406900bcdc73a75a78cb281ce0af94e574d6135ef05bbedff72a333ef6
+7e1cd73f1655e4c445919d87baab3cc1805691e80c3a16546d9b78357a60
+d516a53c084fa1b044c7b98e5a749e609e565b38231e6082d82e0f503936
+1afa972be4edd7eb44fff1b2c2e62e43d4e9b867a753cf9437b540f81905
+c0700f33c390fb06cea8a5b5cf8ea3a059e70dc1ffcd5b984beb34522ffb
+6b8e139d3c65aeaf10ee4510687f6f444b2eeefa7a9230eda603b20d5ab0
+9bd4ed89c94cfd636a40e19fef5f9cffc021e328753a4d94657f26041266
+e57b2f616e3ba924edd21ab5e0c112d50094df4953740857ffb9a528d92e
+a2a82c128394a6ceeed3b0eefae0d56ba1257cf423cee9f5b6e44a31d92e
+d17cca0ae2f59680dcc6ffe5402d4224de2c46731e9b431246e8caa84678
+cb8f88154805eb8afa1d643688056535471ffbe69021f8c14640705ff8a3
+ace43c6b8e6cd7a392d4dd587ed63b0d7556a509b1a04b057e2b64388b7d
+b8883fd1fea4957bf1efae7eaf60b6cc51915d8469f4413900dd810adc6f
+5454e7b23aca799d17f86fc6a940d72203099344101275c016e64ffcbdcb
+0fc05207fee7dd3efcf8e229a91d1ebf848e35ea739756100730e52f1bc1
+08e4132ea49e67d72e5611c57fbef7016ea1e54778cbf78994355b8ce81a
+cd4c73e242b7d1a047929dfbe50a005de1941b4da749a3ae9240610e1a22
+10fe35231fee309ad0dfb0c3fb7f37fc7388b10b9e0f94ebef8c1b371a3b
+ae1ad137928431d7cfa80df52db47e3287e4490df35effe46b9953beea19
+e3f96058a7c9adb2f10b36ef37d68c77d8e8bf4381500acdab38c78b3bd2
+5cd1a24faa406c599970447c8286ae0ec57916948e609287aa930ae24453
+da1a159a797eefaa166ed9a7240b66247833a3518f3f95420a0b3d09116e
+4c3b98e4efd8605ac502e4f905e575237153264b84511ffbe4072869737c
+738fe243e487ef6e22f74116eebf09aa2aaf63ff491a3a31d72dd908599c
+e9752a45671f74821e5acbb29aa871c0ea78a0c52a19d7280276156586ed
+59b61b715b7bba3195df8d0fe404d35a27d4a024eac9a7dbdbe3e2f60492
+17f5eb6c513aa42badbeb632f61375b2f51bc2cdb6902973b33e41b1924b
+2ebc1bb21ad24989d572b72c4a8c094f66b26a2f3c515782a285cab173a5
+901cf8a7c520c352e66006cb9ddd4f513886ad9041f5eca06edc316c378d
+8cd37ebee64c4af3e0093361e4e1b490c14eab48282d06e443729399c0c3
+e82423cae476393d203448a3a66567068a6b9f7a59d950113a39684f7472
+d5633aaf0d1eae46cbbb4452e35d5bd9ff31671b7ad333834aa66201d008
+0397f60831c62a157b54db32f2bd616a9d06a64bec27449e46b5a0a7de1c
+5753a48b1d78f7f3a08afe638519c9f9e35143c19664d07f879e305b3add
+34a1784cce04ce12f1d207e8a6e6dc2e96e15bb4847b0c1fb126560912c4
+510c2bac1b97b453b63b2ef06c4013ab3a036c83367535699d38523fa142
+5fa884b9c4496d310381018ad155ae8a9776a60860a1a142aa6a08fcb298
+f41d9c09e80639f17322299de0afbb66008e3de68b870b14db13585c93af
+a7a7453f103d934f3d97f26d1219203084161d3b5f0cd476b94734f24775
+5c1c537b3dcd97377bdf36b011070c185566890a4d94a5c2dac0f7a8b303
+a63a20a9c69bae5be9ef175e32d71ab9ea3b84a70b5aca09164e8ad904d8
+56537b464d84e0fda12bc3d704bc175ce278d5864dcf6f70ee0dd7a01eea
+5fb5500c4c8e70cb536c3fd74303b9036804360f08d511382e9c24c607b7
+721f2d10b5b2da52d05c3e3197b20ca67335278312aff8a78a984d539cc1
+ad1283d79e1a26fd94272527acf786ddd470b839e725c8964f156a47bfa7
+8f39f09b8e66a27d68cf1813b87c4a53f68ede700f465fecbf1dcb4671e6
+8882d65917f6c5eb5d6872d20674a7afe1809ade875f1ca99e7e946b7ffa
+cf55ba919901be74bcb76701ddb805e79f74fd9ab948e1743ce4b1928534
+dea3085d5cd3b810370b1c10bdcd6422133bfa5970599f7d6f0d345057d1
+1dd969a1caf29b540c509a7235b241fd54d180a126a22260bce48c6bc13a
+5a2628643648c3de80db360c3cda13f242cb7d951cb125cf15e25a811b00
+fd462ce46256d79b0f76c3e17b136ff34c0396ebef6794c2cb8b5c8f77e9
+1ec0d38110d871d2d3016982c7569e979b65e272ff63c5fcecb615cc1e51
+8c4f1ad4bd3c5c111d78bfecde89e7cf39e3fd9e1e96da91ce67d84d0f21
+f07a4633229ef928fb3a1e0057672ec81488873471cba85db82622b66b7f
+552ca4d5a8eaca181dcaeb1688075614260da43275b5ff9d3b1b857ff112
+ac1e4e23ce7cd023de78fc86658b970337be6f76d8f9b8cc004cab5ef459
+e45dc097c6ac28ffd024416348dcaf2465dc78737cd96ae9320fdd66204b
+b3ef22a7c03b893deb1319fee64ccbca911274dc067d81765212d93c4a19
+b3556985bb8ca78ed6242a741c7b989b9b9758a14db667993d1bb771a96e
+fcd8e11212e42238294b953acf9afbd043425107fe3be48f9dbe42fa4f56
+181b57c0f5775d21587ba02802abb04983e3a9505c90292488b5b67b20c1
+2f929046209df6e1ebc7c75d9d1ec0099f24c087c6ddd9d75e492618c137
+53ac1e0cf7f891eebbd132757ea250bbf083654ed84ead7d61c0d39d3836
+f6c61a19af3d3defef09075dd33902db9d1373ae1ba9736bbd2fd0f03fbb
+cfd56979ec616dffbbc9dd3be31d1966739e4734fd9687b0dd8dfe28c460
+69c2c49407fb1a97b77784b859d5458cd73b999e886c22dec444a1bb6f25
+23ec42de9809b6b3bb667a7f152e0acfcde4dfed0618f62b3056980c7026
+2021a18e0370be209adc1b535ed034181962c3aae8f3b0594379f329862c
+0b7fcd8a084fd92b09cb5ca092fcd31f1c79de205da08f09a2025cb60cc5
+c1ab1626beada762cb617cea852ab8009ee428be58e465761c8fba889282
+4328c5e6b4437d9e0171a4e64934a711af10e6999a0dd4013beaa89ec00e
+2b93549b602b99e78bac467f23b6c360c2a912c19cd0b05ba37dee185f04
+f35aa98cd0cafce7f04df9c9fd8e7ed397f67bdd09a5a10ad1fe78b5817e
+981470fc8006f3a8a25fe3ed3034a833d31d56df7af22247d18c4c62fd12
+3e18c958fed1f4af293fab1ccc17f80888e7702807254de89a71e0d75c98
+4b58c7fc2e405f48f339bc1b552d5efcde68ffe3390c0defc17cea9e075f
+8eceb401f8e0025a2e6aefca5b2a16c1d84df8aa9e95ec0bb1e6ea672fd1
+84cfad89a779df6430d775a30b6c1877480b23d14bc3fe1153896a11104a
+aaac146e386482b05baa5e200c206941fc9911115e3e9bc274f585a35c0e
+97c6836c21d7cef4ddbbdafa455c25f4bba41e11c925f9d4fe94078cce89
+0a7585f58ecb1ae850a1b2da8644987286a3e7495d7b4978e57e5e2741f9
+77e0caf22030b67c2f8ad794e12511eb1915b9553bdc26a6cdf0e35b1968
+cb80e8db6d2a2e97db63f4795357020c2bc3ca1837ab1e1c2fb3380fe0b0
+537dfba3945358dae2905772691786c3e3f475b5072b0e6413c8ad2d4cea
+006b630568961212fe907830c6a91f7718ff86febc0adbe1d3d8242145d7
+092a7e204ae34cc528bcc7b67baa6d4c1917c5bd39eee47fcc073aabcb93
+27c63bbb4017fba149837278895d06fa12d0085c19fd2164015fb6e7822a
+8994309a6afd9156b7d8a6a2239a2084c0a05b05d8bdf91171b9c840018f
+b23d0d28f5360a0bcca1e94e3c3a9de7451b033114ae73fe06d73891ed40
+65aa13581a464ebc84bee4bd0d081b8ba8546ddbb709735f23205b31f106
+0a1307d0de1bf1f8ca9c2c1dc5cbc7232c7627b48c37b1f5204b1179a934
+373a588f48dd1b50f9732855ebf0cbe96810b284009fc82860523c54f105
+063f6a73defce9f17c2c9d3379d77389666db5cd9e691714ba7b2f24c539
+02016e49e99c7849e89591ebf2902ef5cad9350d3f18ac7fd5eac076916b
+cc731d5a71704565881c0b68200e5614b1054e248eb894027bdc3c57a3a2
+0337b7e895e3e8f2e974ea33a01880cfa9858b0d2820092865fab5caff15
+79b62236f13276a02f458c35aabcaade56f1b2c7ab5a348e5545034d5431
+ec4d2a7a5a661cba46673971db0c769f7fb5144c7ab0c9ef1ea66e4a1f40
+a0e7842ca6b2bec0a17c9bce50c5deed9dd7bb2cf5c508d4646672d17c83
+0a0a83d613e0987bd7fc4100182e846ab45f7b175d0d35c635dafeb268bb
+cff34b020768b49d350e7a3e05000a8c1908c8fd8c5aaec284e41854a0fc
+72dc0c7f4133e16366be75afdecb7cbc2f47c0b8fa622c6a06d1c958c083
+2591f9c50a750364bc045e0062382d6263628620a9ca5a3a39cb97ab9450
+d9e839e57d327c65d8995242db5da370aa38a718704d91376ecda02a88fd
+cd663856666d6210714bc6489070a161eea4c3fd56f912515ea04ff6fa86
+41f735643ac42023596595f4864270314fe25cf928f58db399bc8b1f8949
+05d44901083204efa84ca557cb069398bfd15387028cfa5c2265849b5091
+997ed75d92870c347308cc5fe6fc13502d805bf21c3529b9a788410d5799
+81fdbc3929ae808ec0aede49afcc34cdfcb2826e20ae8e5d55253a5112a2
+838aaad0342a28b2fe40958af964dcc6682279ce5f5a971244ac8d9965bb
+30f0b4d1af25afadc7a3be40c168eb738c35a0795d37c62009d7a2592724
+7adc065dfcb416d1dffad3b54071e5958e13df684c48a5cee90eb7e0f166
+f688a3214e6bda46f06ffb0cab609de2309850d4a0ce12c9733439ba1187
+9d0e051ed8fa8962180f4cd6b38626a6065a8425ca360180d368f9734b21
+c0ffc9e8155f92d75382d096e894260c749d460466c2f866c335e23bf442
+4ad9875ef61ab14275fbc7dedec3d06bb3ba03581c8c330cfc30dbbd1e9d
+c92401a291f0c5eb5b4028aad99e5617f726531a422559db24ddf0bccc99
+f081dce48bbb731d91e06d2237c495ebd5b477afc744a8f17ba775630a2e
+90176e4e5e1c3f60b87112187f12e13d7880671aca68a24bf979fd4c790f
+09e477592571a105260eb97f062eb60273372c1bab4c4c6791bf9a45e1df
+d1e728cc5ca3ebba3b4fb96f8af68710b099ac2b5b0474634ea258d1b11b
+4b13be12fec7c5c193cd90be653063222469f13e2a4c77743b9fb0083d76
+64007c18ac981a7d9950dd97a3ceee037cdcc01e231a913de0a3ecddb871
+f20b4962e5847f87e3b41b52000d20d0031affad94d2aca4df047f3ba245
+5baf141cb493df6cca147fa3932d06a68f60598584dd4437fa16c32e9821
+082eb7fb11c5fb8cc0db33dbce8910bb26a7fe3deb515b06dffa37b12c91
+526eec637375ce1cd945046fa8793d2b7fea09aa573076e0de6a4ae83c0f
+1b7cde73a7f357b6acc6e41747f977637c5422f37926a2e26d646c1a7084
+ca157e28a75511a91de9f12d9df50950a22d3136c64f1e76db3134862738
+7e490000b8d76e688d18ca2b69c11da8a24866070d8b37e95a3eab084e11
+73570a54e21bb68f5b511c520e8211328355b96eec2c5e46f3281b415b6b
+d47d72e1d675231e2710599df129b3a4b859d77ae0be5a6750a73bef64e7
+4d4e09475d4067b26f4f77a72c00a9382826e1b5cde6f494809df9806ff8
+52efe0e7671fe9148afeaa63e1aa416c5998fde86fbb076a699e6062f1b0
+a7bb8a40b9c7470ee9d346736ce2536e8409be8845754e06bcb834a4a992
+5376e228f1e6b2ac37917379331a0af60a28771480fdbb3919a08a21ba58
+71d0ddc3aabdb186a80100eec21b2f847bdd24e75fefd5cfffbba60128e3
+541a77fc2ae46e0679e7d9f9a01f24b60bbc360ceb7c7d40f2dee7b98671
+09777f4d10668b5ceb2765dadb659bdab3f650e5c54009e40b66ecc1d46b
+4832afd2c75a79e11bd0d99ed7f9b38ede3b15c4a0fe86230870a5a1c762
+38f774cafdca5a6f89c42030333d486f68e85048a8d47aed82cbc8d42ac8
+e00915d1d99276d0de9f14965be6b50f325366b20f83f68d202286a62b89
+f4d866fd95b65b3228222aca3a61dc208f6aad2dca550adc0f6006d40f5f
+d352dce5bc7d50614794a9fdf62314e67afb3091d52b65ae0b6c49bcf86f
+3df5ed5912ab1212e706bf1964c6d8f56c608cccaa3b615a1b442fc95a18
+0d612791e4731c379fa09b30d01d72f167019e064b54c6967aaa73f91a3d
+d6ca39c3c256867dd8510bec55ae1bf70100bc4da31013724b35d8eafd91
+0c36b4cce0a23ae88f00c18fffc5f0b42af04d7f1f3395adedbf2f1167a6
+4ee33d311f0e7ba0bdb299c9e84db08c3aaa943c4155644987a9caa931e6
+429cbdb7c2181633fd60abfb0a0162aa9a3cf7902dabe7a15c21c6d5c0a7
+98933af01ce1e8586dc495d31894777a521c4df671837863df800f3eda6d
+ff691fd84dac4b4455250e80236a158c7f12a2611fb6643dfd2874f45740
+0950e899bdf61efc6b92223b1767f4726c0d1fc48188ad41880f3564dece
+3a71d318d2b728783360165494041af38d7a08b956e5ccdb4e0ceab31f67
+5ecc37c6e80cc69ea564f683e6ca41421bbabbaced13f9c4edb0bc7a7bea
+de9cf086f052d0efc6b510cc29a079d3137dc085757b89beae29ca372eed
+d334ab9eadfe9adcf40209ea9b7106aaeccc4f7c5064e9b1ef03a161dec0
+49ab0494966f312ff65c11582d2b213310eeaa04493bf663aef625d0a346
+017e734bac4d75056405e5b56bba89c9847d5bc32fe80bbe21905d9b037c
+fe1b007bd40db660a353b9887aa94fb50741d0dcbf4737429a362561b149
+cb4c4656884289f08bcc11a95d99d8746682ce0830d6a7ef0a0fa5d4f33f
+3c3f1cc13e0d3ddd44867d87f1b43a9add96ef2cc5b566fcedfff9933bb7
+522e5465aa5b83fdfaa36dacd17365d90183bee8367657d215b08fa01cc4
+cd75c1a328d321646a553d8bcac20e143ef018a788235193c0adf7908d05
+13a2e71c3dde6399b554970b44c9d085ca14db424afab61f33b6d1db2f19
+dabec03a92bdcae9bcd67d218498c43bd7cc75145ca4f88c49f55c0c00ba
+3d6fe75838dca4883eff7fcd39dbdba3488eb97e25dd449c8b3312863d07
+1cb2d0d77895733edafe6e0fec1534cdd1a21a991cf59291a9eb10d887e8
+a30a69c993305cdd2a6e953e9ecc992ff88617e9d374314958c2918cba34
+868099c16946d2ea1ff14697622f2f100bb680576df96dde0c1f2e4e33ac
+02d7ee2ae5a05d77f11683d271f2bb33432559aeb4b2fa18a6152076ad1b
+f415727bffc8962b58bb3d21e5916c85aea872e287d89a54c9f22cb3d3d5
+3fe094d881e9d972a5930976504f97fc7f496b29d3c6c7e74b840bc8da01
+c87a354a7ec46157816098ebf348b1dc4dee64c45bac4869f7b0bd77e9bf
+2b299f8c272ae57f5f8bf458e576a9efbd2f46cbfaa98e643f01ef4f7526
+34d8cdd724fb8d390bc9b66848157629134488ebaece3a60181d54d430e9
+bd2a98c52bf5b71c6c6097fc33420ccd7ba08a1ab1961cf04773bc3b0027
+465c6fb99c4fdc742d886acf122df963f92fb0e58538d1eae7c001532533
+17a92fdc63ec6c942c82457048dcfdd96c5dd71e54c892817892adec3098
+512b7f8d1ad020993b61018d32de244079425962d2a3f9a20d540e160407
+bc9ca63f6dc15ad408f2f20b0ca3762e6c5940100c3b23bcbcdcb13ed331
+8c7d43d4bf1f38c647592a3bbc4d5c2934fedc7d7d7022fb16274a5aba94
+b1ffcea6b94d390e97093db09bf4e8e3e5f0090326e92c20b6393cee7e5b
+1f52e50e82c532aa06d84789d3e1a30d4fbd4c23f96c76fa905020f30d4e
+b3fb8775ff97018d63be0afd799a888d0639c8c16a9bd808db1944fb76db
+0f7a15a3893a88209d9a291aa0d3dbd62520430fca052f45cded9adb03ce
+8590c7ba82739c46d92055809781c113cdf71cb395c2b5eefb807e52c621
+8f7e0c5f1ca5557a16bb7242af53ef182cdf9c5bc3962a86097482078c31
+93a854581c6473ea738086490e14ed5fa358daea43386991cd38ebad878f
+ab7713f0e31835681c26995375f2bbffe6e3aed7051f53c47bb1ee0fa258
+e1c4366764c1e460eb1d2fecddc58be23067122483e35b89ab583559ad58
+6048d401eb979ac134a90675496f1153f7e116c0b468db98fffe0581f939
+773d8830d2a7ff8a5e0d1e2ce0195b941ac983461bed5dfc6c141e1f814d
+244d40b512fbef72af2d0d6a0d52cab9e5da42f6714fd600a39bb007006b
+8567a0db724a576f3775ed2b8528117113adbfb2a76417c1b5d1f2213383
+fb4ca75fe49fdb060ecd2a2628aa798a76556daa082b419d31a19a5e70fc
+c68c824e00caeced378ebee62d0af03811ded8632f5f2745efb1f9d24768
+c69ade96e055bcfcc5d96752d96c0748ef653f8be91004ca14fe3561bbe5
+7d2135c2410e9f6c83bd0eeae2f071f28853b5d9fbb5fdd91bf0505c7a59
+1965f555270fbb48e90524575fd2cf50e325239bf9c184f9843a1008621f
+6f6f20cc8960c500ae600d3e2ba36da9c91ae2fd1a9efb1e55749c5920c2
+d13ffa390cbf4fe1e8bbddbc329bf30b1766c50fe0f714f8e21e562dd92a
+ae644774e04418b9698bfa1e7d74b60573862b0076016884da86dab655fe
+55b27db183f01b8a946c451b1cfa848a423c7e5e63cc0d0816e2d26b92a5
+0638dbe0d9eb68d1eb6049972ca0eb816de5d908a85420679cd87a539d7f
+81d3c5d865ee619f7cab188e84b3e281e374297d20b48f9c05b67364fd23
+12bc769289734c49a245d635d3246e91ccd1bf050c31e71bdeafca463552
+bab58b33f716fb8c484db217ae9cc1b7c57f9138cfbaf39c62cb4723cd4a
+85222610c639d5700eff6d0e07166a4cf27a749166580e5926c2496876bf
+9b0cfac6a6069ad45b0ae75c47150492b49625f4a862c12d7de81deafce6
+f8f869fd7bbcadcd60afaf00730ddad0b40c01b6590055aedece7f72d329
+db9585459b94ed3429cf1daa3e7bd4db54f9c9d69d7e0685b8e96589c9ff
+7f259a5d1b08a36cf7a57988b0b22a80547fc2a7f5d7a2fecb873195914a
+c7781d14b39b38a7e5bd1eb3e36db08cddf9f3d0d7d52cbc134af253d4fd
+640f0faa0668815975d36bae8ae6dcde20505e48df3505b02bf4159f1264
+d47f2f073cc9c4e15541f06385ed4889376f8ca26b2836b8831efa962f47
+02ce6fc0d13b1641c3b2b2a09692ebec091e2b8da489f9eda0e9e83b670e
+a70a63916b5934cfac9221aeda0a17d1d6e5ad459d29beb8c04c45c00561
+6a8a1a1755de39425c7999d04ed7b37fc6b8380a5a010809c909d22a6646
+8901953068c7ef52432782ff285d1263c18b04adaa0b0dbfcd938a35cacc
+3fd5110e7c18c76caf0bcb3f1c49f3eeb024e55e754223ba9501c287b367
+d037b5469c0f5eeaa9ebef41df5f736d0d352d07e285abfa1efe9df11925
+6252e5274bf361130efd2b3258bc01fbbf8ef89bce0412fa41e7308e146a
+30e1b0abc45615548c2b2b3512c8f505e24d937ff07d3379a72993b570c4
+4e156f98a84394eb3ea15808cbc77fe69276fd7f6a8c7e9589f1e9dd0f7d
+80ca2c06b8a654bdccac7517dd5acef2cc0ff887b7b6236ca8e5eba068e7
+fde83d763653985795891fd898197225fc94ab77defec4876af0576f6040
+0928dbe79403ce4aee10fa051139699a0067f19901bf6ecc5a8d732c8e87
+f27457639bca63abc0f7319dbdd66f1340d459ff5855de0967c6ee42b3aa
+e4746f377edd74d7480d7c56f5a275609cad8a335a309814a071e9948d1d
+e3cc9fbafd0268560e7e12379c956d165f618db68cbf1db33b6ec3483050
+1bf6e537e00118fc84cf6302098c9fc1841bb076f471bf80770d72898924
+21df74c93f8b765bc0261a186cf9bc561109e7674c9d6b8cb0f6bb29e0ad
+da7cda78cbcb86a4a858560df143a533c420241272346330d366d7aac8a8
+678204bfdfd15e49b46a703f2bce4affeafb26b2f76e2b21d34a5d71948f
+71c5d78c776483bb09341f800bbe786065fff786afc450aed3a2abc1e3f2
+5d2577271a12f2c5f5bc852662a19655bbc2ebeb24c6dccf28978fc52913
+dce655cb21576373bf33c740b324d8dfa745ac044f094ae7a14ec1b3e6cd
+08e03841833852f0779dc37a8e1617c21bfb7a824728db74d5023f839e50
+cd44126da917e643050c2f60fac3b411b857329c601548b493e202b77c14
+f4cb6ab08ba2aa727ebfd5bb40b66eec12f43c2759606f5ef2eba9010942
+d3d2b532ee0ddaff8269adeb75a12b00830918d30e4ebfa1a6aebb0dcdf7
+edfd3679ecfc6b283f11c30c98acc79a2ae311f016964b045ccb4c66c6c4
+34849aea17b02735481756437fe92abd575887506c7e4522dc6f7a6961e8
+24000bb68e8c7871ac1b704dffad8e04df8e814e93d0eb7503c1315dfa00
+f8b9341f478ac907d475ef650ae80587780f71e7f65550755b8e0a2963dc
+c86eb72f22ee87c16bcfc2ccfd0da6d811f52ad064c4ddd7aa375a2cd474
+df5e8bffb02df24c3c16998bd8294dbef8ad0dce209a7464eb7acd40d0d9
+a4678d159b9b1937d82c5cfb9029009c56e429e1e3d23f1522e91cd1f276
+025d75195883c43537b3fef47a841b672d49f63140c14a7cc1318768b76c
+a9850f49aa7ac9da33679f43986bc69e2c9610a6fddd044ff00240bc09a6
+e25681eba705e55621d33d04d1a041a639a577d584e60110720cb96af250
+c076dcc38197adaceea7eb0e0175788f5b71347c79277f3cda414683ce26
+4b7b64dc3af7d710d8790ccf0a61a9fe4bcfad32eefea3372fd924ae3be5
+ba738eea455df3912db0c2f3cbd6f2cf2b39365cbd5dcea69e79a7953a22
+698bc3a20bf6627bfcd0bd53fe1233b1dc428874fe84cfbebfb2ac04b1c4
+546edf0cd51ee85197841ec4e55830d03db9fcdbd97f63b44a95407399ed
+f69e0c14634ffb3cab9630e22a7665fcec4e493b7ae4d7769e71df76602c
+8daab61ca2f03a8376be6103a81448c3fb266f7cfeb8a6b1f6f7632484ed
+8603b99562942d09644bd9eb3890b5c0d62cd7797501a702f6a12daa54e2
+0300519a40c248f6c12d6cccaf8173f5bd985673b6884d7a1a41486be38f
+9229b6f930d8b98f892f457bd008a5bc354d9e2c5acb748381bca0ed2a1e
+0891f492c489bbb365938c80ce8eb82de271d351efefd394a791d9ab22e2
+7bef611803b087e84e12849808579369b9f0ec1c08cd1ea72eebc288f0b3
+cccaa240e430387ecee0e567ba431074223226ca222d8324dc706aa51aa2
+79fecc280429cd243cf56822a720fbb88a92d5d6f37363ab2edc5bc053ab
+ceb752a2ca80b78a9518059de8b1624ab90ccabb63a89422ab4f78ee3b94
+1d49e1caea3fa59f4b2e925d5d92d331d96412e133306980878c3614cb9c
+d99d644b4772a0470d2e1cfd7975e37179035ca5bc64d2d2a148e2d8f5d2
+c4a894ffcae6725d88552470cd3393f79c8b31aaf46b1790152aeb1865a9
+25af135b30f0ab01ab72534d0137e831e65787367301cb478d62f623c763
+7882a729eda0241b553cf31e51623af66a841482485c3a1287342da71916
+060a46e37e37a30dc99f3f524ae3cbe3dd075c8c38d187695c5e559bfbb7
+b7d94fac98f7ab7d94d615a8a22d6842dd09f995454666724a15efea104d
+f85626e9e6db009ce1805be05a29bdf063cb4cbd9f27f05a6f3d03353147
+e86f05390629a04c88bef21d2892b4b68cde132e631be2076e5867430f87
+8c57d3eedab592ffbf1f8c12dd7a6022d9a286469e6b6a181a58822d9587
+c457941da28c466ad86bbd7e9fbf2c6539f1cc5bb4a16ef65bbb0db5237a
+0f28925532d5fd394ea9267babd451ce56ad4d983172060237898a504ba4
+7cc4f3c43c2f6bab090534505c9a6c4609c19657177f9720de4529883dca
+9fd8c8cc0b217f1a8fe6c11b4d9782974f1872a6131ad0efbf5be03977bb
+625ca5c83fb60284aa6f4c31e50417ee21e3dda2a69ff6984925654198be
+41fc4c9fd11d635e1e3fe367191877b593440078c200abc78cfe822a78f2
+c6127f70caed225150ed8a185a7d2b247a18dfd63967af0420f9df2e7905
+0681c00b95493b97b5353ff0db28169af7e2270fa28dc208314652d59207
+168de1aa523e9f50abb42e68fe7399ac4f1839b43e41429e337947851391
+7d43463e623fb2502bc3d477e525d0c6e8aa5dedaff575337c0e499b7d12
+3edcf05ed0f494ede88769f188f8a4134f53cfc850362d9017dfb0f2a611
+e22ce4f18ff6d78559ca0092e7756320ed34fa849a56163a4236ba8940da
+6f9fde0eb3e2e71eebfa8d37ec8dac8b0cf6ea21a97ab3b30934ba8ac209
+9ec89085e15f42b6196dcedb9b775a066062346da41692b9d7e69d794215
+6e0f55241ff6f4f653caa58d29acd106c0b2863a2ae8c71366b929475713
+6d45234b208fb30c1c453e05e68c9a35712986c0eb5161592667dcf85fac
+37be40e947238a08f48cd294f453cc94a9417c9f211680074aa91bdb32fd
+bc0ad75251944001c0e3779fb03fa474f69743de8d160747e1bab93fbb23
+e75fb3bf3cd85e48cbaa2090c5398a4dbe174b9d98bd6cc056b067eee625
+44ef416db590d244728c488581710e3cf9c8874502f581884bd1d839d111
+5f1f77028d98977d83971ff0d2f242f74c108c5c4e98dfd28bcf4262afb5
+739ff804d54cbd8a0bf7d65bcc312c28bd5af696b97eb4f5b39ace5c742f
+342681f98f8bab16c959d6a16ef5368bd711c201a895f0971b26baf6ff7a
+9c635134983a54d2b49f5bced91010996994909648564344479e11e7589a
+603206110b90a3e6eb8eb089f3ce49b911b316be83209d7b6aa903d931a1
+12d42421c99a8ab0192325723019e31250cb5f130959b26687cd3ab0751c
+9ad02e20cd96820fd36e8dd97f9b3fa2f21d9436b62074e2e3a09ed74ba6
+847868b768482b44ddc6eb79add9655be334197532f3d978b94e667e51ff
+c5b6521e0ef83706b20147f5edf54549e5a505cc22917a613cf7617ed104
+c26c225ffc39ef7e30cafe37aab34ccf71a1c610a288d5038e481bead3d7
+364c646e4158659ace5f448dae82c18cb13ef42762c8269a107bccbdc8da
+44d4e3265e8b62aae6d70a4c14e8564adfed450fb7ae9057d661724a5aaf
+0eb818791004eecae762d4281231a91b3733efd99f35c2b222d1417ab81d
+fd64568840022c6be13632bf8a3eabd754d0d7979d70488b44b32abcb6d9
+e9ec65e227ea3b8391b66346f4d428c4fabe9927485f8891f677acdd7d8a
+4f58763af0f9ca3343d608ec13ee639ddb18a1f09f3038f65afbbc2f5eb1
+7c26befd7e57118952857acfeea1a8d65880778aefa626e4acda8232ee9b
+b8085ceec2f845be9ea4b0c1715a04ec166ddeff6108b2f30d05a38120e5
+91a650a942ffa49fe8cf7cf6572652be94953556d3bc1344779efc1b9f9c
+66278d614747d16bdc069ecab758c341a13e10a63556edf13a562ab27af5
+bc57242af4e708af899a0ae345e8251557eda3f15558f7f4aad4626edeb5
+e1e7f16160bd8940f02448a462b1e0648613388a9d3b6c0f2965e2b34e2b
+0bfead1df63667ebae172d58487b3c2ae07403ecc022f3317570e85e0a96
+053b32957fb6bef1f91bb6bf283f626954e712cea564110ce9a4c88edb28
+d87a8c32ade55a79bbe68cf93501110f59a020c02b0359f50a4aed99df4a
+069daba42eec26b132a2fcb2964dc73a5f0f123041b38ca854112a03a3cb
+a297a6fa4b045d658d291264495b6d1eacd8c683b5a44193747831182518
+27305c1a74945d3dd8eaa5943a74b7825c2030e3a8233a40046dd9446633
+52d6af102f737878091714621795368327c2d35d8907695acca5206862a1
+7804e1cf7fbd1fae40071d43e6e2cf101eccdf81f25ec91cb057321b8204
+60706a4f990f5d0a5e40fa2c3a07bee8af0100bdcf4298e8cfdf68932838
+6c525f06c125a4998a015db3a4cb96825015f4569183bf2e9d2745951de6
+c53ef9f1fd193781bad0897f1a5ea004510e815a90c6c957ec7577fd2652
+df67ce4efb3f8c30304d356509cc01fead119448b5983413a3c398e1fa98
+beba5e97dd9c7bc4ca825d8771cd1b8b8206892aee39cf9fca7511e301e2
+fd61754e2c36b3b9801cb123623b16c00dc15510a2c16c7dfb39d271acf3
+7f9b4d3709169c4e460b5752a2663e3b24fd6d6e23097ad38917b36993cd
+d5f1543ddd39167f72ab544823e02c0282f34876f4498b12a07ccfd9cc15
+4c96c4fbee226906f45de971027be08f78ab0b93b530db1f374a85b3ab16
+b123add1ce4ff1f39bbb5b1b80668afba767f2aa947073af88be267a21e7
+2c6d8d62585fbb7cfca3238639a017c3eb9e8335061f9f53cf7af75442e7
+2f8df88fbe8c06465cf9469692a57711e1d8a6d4b2b8bdd56957175888cf
+f2b56c2c7b1f4ed085864e8031f8bc7bfe708af06d7920da144678731584
+9e315c01b363be9f4841d255cb9c978c5dbe53b63b9c133bd41d9fe9b5ce
+fe685662bbaafce39c13c26136b0d19b8579d8e2be61f1e158851476e431
+63c31ef71dbef1b7de4696346d4be168944b1148fcf3220eeeb1b3a1b845
+fc5f4c55ea17b6644c277637f834766fcaf68f1f173c8784ae648624744f
+a07837e686fbf9b9845fa0d66a082cf8afd89e7b2393f8e2c299b656b09e
+3b960c369557f0b7736000603f4f9aafef291f7100cc1378216f808b06f8
+4f1797ed54bafb693d82a8133ade22edd3e06f7aa5f624f7823aa46cee9a
+59d48e84c53062b6f54744063847fbd79dad395ca365c635a5c93cdc9a56
+02a1e8d07a2734a5bb83b47f9642e918d6f848556e0c176b22142b2930c1
+c4753fe6377ad3967d9cdd718fd80eafbd6d4e51d4a641752fbce144f802
+bf5a89096128b725f577da8937e439404119ace13f3622be5e8f019acf3e
+15fffd271b9ba0f510e92e04f2638cd8c01ce389077ffcce1f23647eac11
+5095e56d625fa670cc1ccd42b9d785536793ad84d2772eab0be639d0c1d8
+3e12eeceba5ba8d2927e1e35a3eeee5c196ba9ebf69b72b2fddaa907032e
+4a77e4dad4b44e357d733819597de78b2eb52ffdd8f520791c67469c1fb5
+32f11f6cfbcc5605a40ca49553160b720189c1840c0f647795881496a4fb
+ba5fb1399577af150d7a2381db41d11f3de795a2239494cb434a97430eca
+e9600d8b3e23d1990c5fd55f2aedef7ed633bb3d3745f40f06d059dc5fae
+57d7d99c4be5da150d995f86c7ed928088fbe8ae45807531e9fea6c812c3
+66bfe43cd3858f8d479491c3d3c1c0efe22a1d7f5b7178b085f33c1bddcf
+7359a253dbac7f208bdbe359adc47dda6456e9e9e6da4193eeedcea7e1bf
+72a371dae857540032d2f8e8f5a16f647c07636e2c7a618933e95c609248
+7f3ed15f78c6cc25162513f3731fd125becc806a92c133036ae711b9bf62
+6ac52263c94150c9ea75cb77145fef1b2e01cc4f4fca08573e8f5a31718c
+e8277c4d685daa390eec5ec461e32e401188c14d7ad2909a70823b314730
+45549ee65c1142331880fdcd0a8fd511889b05692de6f932a1f700213a08
+d6f1b06abb6410d3ba1305cfbe9fb86fc47d82c092a927f07e7a4b163519
+f7dd9c4fd0658a442b318ddd44a79f0ff4e19f96c9df9c98d8b350978554
+97a0363e5aef9bdab0712547bfa8654749603332a4f18015c9ac8067a4fa
+66ca1d81cefe7bacb899e70529b785b2d03e565f7475484827476c1eb1c8
+add1648c3e41fd21e4fae0546aaba41ad528bed418f684c320971ff24218
+a0acb587b1531ad505ee5922bb7823140d70f54ec065419e7661b520484f
+14f737675b9e90135d872671ad819d63c2e3c22902c1640880877e04340e
+15ecf930069dacd15558a3de1be8ab83ceee18ea8cbe4d00129ff7e3d829
+59c4d25232afdfc5c56ffa2e0a9edab1b83b4edaaabaab1806c3aa90a955
+fc9596ab5ec9dc8e48b20729f9821855abdb3f7c0d533b690ba211be869b
+0d714478f6ac0124258f3b654b84ebd4453afa8164d0b1b3ec21b2b462f9
+b501cb7f8443070cec740f05fbf784ba236d851c9cb24819a7ec19fde67e
+35df0625f2212cddef4fe01c2b9f195346cdef6b7e7eebf1385ab3988a15
+7e6476b97c93e08471d5dd2cad24d028d40e5875e688911213f5ece58537
+9f2939cea04f8cf727acb15c186cdecc5c10794a92c9bfcdf47e85db06fd
+acf631f8f5980bacddac0eca5cdcbd3efc773e62af1d970c0134ba7374a9
+ef32aa06ad7955ea4638
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
diff --git a/Build/source/texk/ps2pkm/tests/Symbol.pfb b/Build/source/texk/ps2pkm/tests/Symbol.pfb
new file mode 100644
index 00000000000..ff00dde4481
--- /dev/null
+++ b/Build/source/texk/ps2pkm/tests/Symbol.pfb
Binary files differ
diff --git a/Build/source/texk/ps2pkm/tests/Symbol10.300pk b/Build/source/texk/ps2pkm/tests/Symbol10.300pk
new file mode 100644
index 00000000000..f4c2aa9ccd1
--- /dev/null
+++ b/Build/source/texk/ps2pkm/tests/Symbol10.300pk
Binary files differ
diff --git a/Build/source/texk/ps2pkm/tests/ps2pk.test b/Build/source/texk/ps2pkm/tests/ps2pk.test
new file mode 100755
index 00000000000..103b717273c
--- /dev/null
+++ b/Build/source/texk/ps2pkm/tests/ps2pk.test
@@ -0,0 +1,33 @@
+#! /bin/sh
+
+# Copyright (C) 2012 Peter Breitenlohner <tex-live@tug.org>
+# You may freely use, modify and/or distribute this file.
+
+rm -f Symbol*
+
+cp $srcdir/tests/Symbol.afm $srcdir/tests/Symbol.pfb .
+
+./pfb2pfa -v Symbol.pfb || exit 1
+diff $srcdir/tests/Symbol.pfa Symbol.pfa || exit 1
+
+./ps2pk -v Symbol.pfa || exit 1
+diff $srcdir/tests/Symbol10.300pk Symbol10.300pk || exit 1
+
+rm -f Symbol10.300pk
+./ps2pk -v Symbol.pfb || exit 1
+diff $srcdir/tests/Symbol10.300pk Symbol10.300pk || exit 1
+
+./pk2bm -h -ca Symbol10.300pk >Symbol.alpha.hex || exit 1
+diff $srcdir/tests/Symbol.alpha.hex Symbol.alpha.hex || exit 1
+
+./pk2bm -b -o141 Symbol10.300pk >Symbol.alpha.pix || exit 1
+diff $srcdir/tests/Symbol.alpha.pix Symbol.alpha.pix || exit 1
+
+val1='167 240 263 288'
+val2=`./mag -r -R240 $val1` || exit 1
+val3=`./mag -R240 $val2` || exit 1
+
+echo "./mag -r -R240 $val1 => $val2"
+echo "./mag -R240 $val2 => $val3"
+test "x$val1" = "x$val3" || exit 1
+