summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlgs/lib
diff options
context:
space:
mode:
authorReinhard Kotucha <reinhard.kotucha@web.de>2008-02-21 22:07:42 +0000
committerReinhard Kotucha <reinhard.kotucha@web.de>2008-02-21 22:07:42 +0000
commitf90099230db6de68f2285dca3d08174bda872f7a (patch)
tree48fbfd44b5c240a4430dd4a54b286de5f1102583 /Master/tlpkg/tlgs/lib
parent2deea5f17b0505ffeb480154ace47e0a72863c97 (diff)
tlpkg/tlgs: Subset of Ghostscript added.
git-svn-id: svn://tug.org/texlive/trunk@6709 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlgs/lib')
-rw-r--r--Master/tlpkg/tlgs/lib/EndOfTask.ps1
-rw-r--r--Master/tlpkg/tlgs/lib/Fontmap6
-rw-r--r--Master/tlpkg/tlgs/lib/Fontmap.GS414
-rw-r--r--Master/tlpkg/tlgs/lib/Fontmap.TeXLive106
-rw-r--r--Master/tlpkg/tlgs/lib/PDFA_def.ps43
-rw-r--r--Master/tlpkg/tlgs/lib/PDFX_def.ps51
-rw-r--r--Master/tlpkg/tlgs/lib/acctest.ps100
-rw-r--r--Master/tlpkg/tlgs/lib/addxchar.ps357
-rw-r--r--Master/tlpkg/tlgs/lib/align.ps73
-rw-r--r--Master/tlpkg/tlgs/lib/bdftops.ps795
-rw-r--r--Master/tlpkg/tlgs/lib/caption.ps56
-rw-r--r--Master/tlpkg/tlgs/lib/cid2code.ps160
-rw-r--r--Master/tlpkg/tlgs/lib/cidfmap28
-rw-r--r--Master/tlpkg/tlgs/lib/decrypt.ps15
-rw-r--r--Master/tlpkg/tlgs/lib/docie.ps218
-rw-r--r--Master/tlpkg/tlgs/lib/dumphint30
-rw-r--r--Master/tlpkg/tlgs/lib/dumphint.ps756
-rw-r--r--Master/tlpkg/tlgs/lib/fixmswrd.pl206
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/COPYING340
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/LICENSE-utopia.txt84
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/README-utopia.txt41
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/README.base3589
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchb8a.afm628
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchb8a.pfbbin0 -> 33799 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchbi8a.afm645
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchbi8a.pfbbin0 -> 35229 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchr8a.afm538
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchr8a.pfbbin0 -> 34869 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchri8a.afm547
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/bchri8a.pfbbin0 -> 35118 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putb8a.afm1007
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putb8a.pfbbin0 -> 36737 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putbi8a.afm1019
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putbi8a.pfbbin0 -> 37993 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putr8a.afm1031
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putr8a.pfbbin0 -> 36507 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putri8a.afm1010
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/putri8a.pfbbin0 -> 37756 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/readme.charter19
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagd8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagd8a.pfbbin0 -> 36354 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagdo8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagdo8a.pfbbin0 -> 36128 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagk8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagk8a.pfbbin0 -> 34871 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagko8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uagko8a.pfbbin0 -> 35156 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkd8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkd8a.pfbbin0 -> 44768 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkdi8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkdi8a.pfbbin0 -> 44950 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkl8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkl8a.pfbbin0 -> 44934 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkli8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ubkli8a.pfbbin0 -> 44162 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrb8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrb8a.pfbbin0 -> 50493 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrbo8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrbo8a.pfbbin0 -> 51527 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrr8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrr8a.pfbbin0 -> 45758 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrro8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/ucrro8a.pfbbin0 -> 44404 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvb8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvb8a.pfbbin0 -> 35941 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvb8ac.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvb8ac.pfbbin0 -> 37240 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvbo8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvbo8a.pfbbin0 -> 39013 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.pfbbin0 -> 38310 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvr8a-105.pfbbin0 -> 36026 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvr8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvr8a.pfbbin0 -> 44648 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvr8ac.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvr8ac.pfbbin0 -> 36615 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvro8a-105.pfbbin0 -> 38314 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvro8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvro8a.pfbbin0 -> 48169 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvro8ac.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uhvro8ac.pfbbin0 -> 37247 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncb8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncb8a.pfbbin0 -> 48864 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncbi8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncbi8a.pfbbin0 -> 47083 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncr8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncr8a.pfbbin0 -> 46830 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncri8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uncri8a.pfbbin0 -> 45832 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplb8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplb8a.pfbbin0 -> 52406 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplbi8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplbi8a.pfbbin0 -> 51285 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplr8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplr8a.pfbbin0 -> 52665 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplri8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uplri8a.pfbbin0 -> 50022 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/usyr.afm213
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/usyr.pfbbin0 -> 33709 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmb8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmb8a.pfbbin0 -> 44729 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmbi8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmbi8a.pfbbin0 -> 44656 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmr8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmr8a.pfbbin0 -> 46026 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmri8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/utmri8a.pfbbin0 -> 45458 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uzcmi8a.afm1341
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uzcmi8a.pfbbin0 -> 49289 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uzdr.afm226
-rw-r--r--Master/tlpkg/tlgs/lib/fonts/uzdr.pfbbin0 -> 45955 bytes
-rw-r--r--Master/tlpkg/tlgs/lib/gs_agl.ps1069
-rw-r--r--Master/tlpkg/tlgs/lib/gs_btokn.ps331
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ccfnt.ps75
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ce_e.ps47
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cet.ps61
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cff.ps779
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cidcm.ps443
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ciddc.ps214
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cidfm.ps129
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cidfn.ps404
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cidtt.ps141
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ciecs2.ps147
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ciecs3.ps137
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cmap.ps549
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cmdl.ps180
-rw-r--r--Master/tlpkg/tlgs/lib/gs_cspace.ps1022
-rw-r--r--Master/tlpkg/tlgs/lib/gs_css_e.ps114
-rw-r--r--Master/tlpkg/tlgs/lib/gs_dbt_e.ps59
-rw-r--r--Master/tlpkg/tlgs/lib/gs_devcs.ps250
-rw-r--r--Master/tlpkg/tlgs/lib/gs_devn.ps218
-rw-r--r--Master/tlpkg/tlgs/lib/gs_devpxl.ps78
-rw-r--r--Master/tlpkg/tlgs/lib/gs_diskf.ps224
-rw-r--r--Master/tlpkg/tlgs/lib/gs_diskn.ps214
-rw-r--r--Master/tlpkg/tlgs/lib/gs_dpnxt.ps134
-rw-r--r--Master/tlpkg/tlgs/lib/gs_dps.ps224
-rw-r--r--Master/tlpkg/tlgs/lib/gs_dps1.ps139
-rw-r--r--Master/tlpkg/tlgs/lib/gs_dps2.ps247
-rw-r--r--Master/tlpkg/tlgs/lib/gs_dscp.ps118
-rw-r--r--Master/tlpkg/tlgs/lib/gs_epsf.ps243
-rw-r--r--Master/tlpkg/tlgs/lib/gs_fapi.ps344
-rw-r--r--Master/tlpkg/tlgs/lib/gs_fform.ps92
-rw-r--r--Master/tlpkg/tlgs/lib/gs_fntem.ps430
-rw-r--r--Master/tlpkg/tlgs/lib/gs_fonts.ps1223
-rw-r--r--Master/tlpkg/tlgs/lib/gs_frsd.ps87
-rw-r--r--Master/tlpkg/tlgs/lib/gs_icc.ps335
-rw-r--r--Master/tlpkg/tlgs/lib/gs_il1_e.ps66
-rw-r--r--Master/tlpkg/tlgs/lib/gs_il2_e.ps63
-rw-r--r--Master/tlpkg/tlgs/lib/gs_img.ps842
-rw-r--r--Master/tlpkg/tlgs/lib/gs_indxd.ps205
-rw-r--r--Master/tlpkg/tlgs/lib/gs_init.ps2179
-rw-r--r--Master/tlpkg/tlgs/lib/gs_kanji.ps158
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ksb_e.ps64
-rw-r--r--Master/tlpkg/tlgs/lib/gs_l2img.ps184
-rw-r--r--Master/tlpkg/tlgs/lib/gs_lev2.ps1009
-rw-r--r--Master/tlpkg/tlgs/lib/gs_lgo_e.ps91
-rw-r--r--Master/tlpkg/tlgs/lib/gs_lgx_e.ps60
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ll3.ps379
-rw-r--r--Master/tlpkg/tlgs/lib/gs_mex_e.ps66
-rw-r--r--Master/tlpkg/tlgs/lib/gs_mgl_e.ps64
-rw-r--r--Master/tlpkg/tlgs/lib/gs_mro_e.ps61
-rw-r--r--Master/tlpkg/tlgs/lib/gs_patrn.ps309
-rw-r--r--Master/tlpkg/tlgs/lib/gs_pdf_e.ps44
-rw-r--r--Master/tlpkg/tlgs/lib/gs_pdfwr.ps834
-rw-r--r--Master/tlpkg/tlgs/lib/gs_pfile.ps127
-rw-r--r--Master/tlpkg/tlgs/lib/gs_rdlin.ps20
-rw-r--r--Master/tlpkg/tlgs/lib/gs_res.ps1119
-rw-r--r--Master/tlpkg/tlgs/lib/gs_resmp.ps531
-rw-r--r--Master/tlpkg/tlgs/lib/gs_resst.ps156
-rw-r--r--Master/tlpkg/tlgs/lib/gs_sepr.ps268
-rw-r--r--Master/tlpkg/tlgs/lib/gs_setpd.ps924
-rw-r--r--Master/tlpkg/tlgs/lib/gs_statd.ps374
-rw-r--r--Master/tlpkg/tlgs/lib/gs_std_e.ps73
-rw-r--r--Master/tlpkg/tlgs/lib/gs_sym_e.ps83
-rw-r--r--Master/tlpkg/tlgs/lib/gs_t_m.xbm8
-rw-r--r--Master/tlpkg/tlgs/lib/gs_trap.ps103
-rw-r--r--Master/tlpkg/tlgs/lib/gs_ttf.ps1802
-rw-r--r--Master/tlpkg/tlgs/lib/gs_typ32.ps133
-rw-r--r--Master/tlpkg/tlgs/lib/gs_typ42.ps62
-rw-r--r--Master/tlpkg/tlgs/lib/gs_type1.ps209
-rw-r--r--Master/tlpkg/tlgs/lib/gs_wan_e.ps46
-rw-r--r--Master/tlpkg/tlgs/lib/gs_wl1_e.ps66
-rw-r--r--Master/tlpkg/tlgs/lib/gs_wl2_e.ps66
-rw-r--r--Master/tlpkg/tlgs/lib/gs_wl5_e.ps66
-rw-r--r--Master/tlpkg/tlgs/lib/gsnup.ps93
-rw-r--r--Master/tlpkg/tlgs/lib/ht_ccsto.ps3171
-rw-r--r--Master/tlpkg/tlgs/lib/image-qa.ps1826
-rw-r--r--Master/tlpkg/tlgs/lib/impath.ps179
-rw-r--r--Master/tlpkg/tlgs/lib/jispaper.ps27
-rw-r--r--Master/tlpkg/tlgs/lib/jobseparator.ps4
-rw-r--r--Master/tlpkg/tlgs/lib/landscap.ps31
-rw-r--r--Master/tlpkg/tlgs/lib/level1.ps3
-rw-r--r--Master/tlpkg/tlgs/lib/lines.ps165
-rw-r--r--Master/tlpkg/tlgs/lib/markhint.ps130
-rw-r--r--Master/tlpkg/tlgs/lib/markpath.ps59
-rw-r--r--Master/tlpkg/tlgs/lib/mkcidfm.ps359
-rw-r--r--Master/tlpkg/tlgs/lib/opdfread.ps3676
-rw-r--r--Master/tlpkg/tlgs/lib/packfile.ps333
-rw-r--r--Master/tlpkg/tlgs/lib/pcharstr.ps126
-rw-r--r--Master/tlpkg/tlgs/lib/pdf2dsc.ps251
-rw-r--r--Master/tlpkg/tlgs/lib/pdf_base.ps1006
-rw-r--r--Master/tlpkg/tlgs/lib/pdf_draw.ps1604
-rw-r--r--Master/tlpkg/tlgs/lib/pdf_font.ps1557
-rw-r--r--Master/tlpkg/tlgs/lib/pdf_main.ps1770
-rw-r--r--Master/tlpkg/tlgs/lib/pdf_ops.ps727
-rw-r--r--Master/tlpkg/tlgs/lib/pdf_rbld.ps324
-rw-r--r--Master/tlpkg/tlgs/lib/pdf_sec.ps456
-rw-r--r--Master/tlpkg/tlgs/lib/pdfopt.ps1271
-rw-r--r--Master/tlpkg/tlgs/lib/pdfwrite.ps384
-rw-r--r--Master/tlpkg/tlgs/lib/pf2afm.ps515
-rw-r--r--Master/tlpkg/tlgs/lib/pfbtopfa.ps34
-rw-r--r--Master/tlpkg/tlgs/lib/ppath.ps54
-rw-r--r--Master/tlpkg/tlgs/lib/pphs.ps221
-rw-r--r--Master/tlpkg/tlgs/lib/prfont.ps248
-rw-r--r--Master/tlpkg/tlgs/lib/printafm.ps165
-rw-r--r--Master/tlpkg/tlgs/lib/ps2ai.ps551
-rw-r--r--Master/tlpkg/tlgs/lib/ps2ascii.ps1524
-rw-r--r--Master/tlpkg/tlgs/lib/ps2epsi.ps249
-rw-r--r--Master/tlpkg/tlgs/lib/quit.ps1
-rw-r--r--Master/tlpkg/tlgs/lib/rollconv.ps372
-rw-r--r--Master/tlpkg/tlgs/lib/showchar.ps93
-rw-r--r--Master/tlpkg/tlgs/lib/showpage.ps1
-rw-r--r--Master/tlpkg/tlgs/lib/stocht.ps62
-rw-r--r--Master/tlpkg/tlgs/lib/traceimg.ps42
-rw-r--r--Master/tlpkg/tlgs/lib/traceop.ps83
-rw-r--r--Master/tlpkg/tlgs/lib/type1enc.ps65
-rw-r--r--Master/tlpkg/tlgs/lib/type1ops.ps237
-rw-r--r--Master/tlpkg/tlgs/lib/uninfo.ps220
-rw-r--r--Master/tlpkg/tlgs/lib/unprot.ps67
-rw-r--r--Master/tlpkg/tlgs/lib/viewcmyk.ps63
-rw-r--r--Master/tlpkg/tlgs/lib/viewgif.ps160
-rw-r--r--Master/tlpkg/tlgs/lib/viewjpeg.ps159
-rw-r--r--Master/tlpkg/tlgs/lib/viewmiff.ps124
-rw-r--r--Master/tlpkg/tlgs/lib/viewpbm.ps184
-rw-r--r--Master/tlpkg/tlgs/lib/viewpcx.ps150
-rw-r--r--Master/tlpkg/tlgs/lib/viewps2a.ps32
-rw-r--r--Master/tlpkg/tlgs/lib/wftopfa.ps303
-rw-r--r--Master/tlpkg/tlgs/lib/winmaps.ps106
-rw-r--r--Master/tlpkg/tlgs/lib/wrfont.ps665
-rw-r--r--Master/tlpkg/tlgs/lib/xlatmap49
-rw-r--r--Master/tlpkg/tlgs/lib/zeroline.ps100
241 files changed, 104951 insertions, 0 deletions
diff --git a/Master/tlpkg/tlgs/lib/EndOfTask.ps b/Master/tlpkg/tlgs/lib/EndOfTask.ps
new file mode 100644
index 00000000000..45a8ca02bfc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/EndOfTask.ps
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/Master/tlpkg/tlgs/lib/Fontmap b/Master/tlpkg/tlgs/lib/Fontmap
new file mode 100644
index 00000000000..8d32f46e6cf
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/Fontmap
@@ -0,0 +1,6 @@
+%!
+% See Fontmap.GS for the syntax of real Fontmap files.
+%% Replace 1 (Fontmap.GS)
+
+%(Fontmap.GS) .runlibfile
+(Fontmap.TeXLive) .runlibfile
diff --git a/Master/tlpkg/tlgs/lib/Fontmap.GS b/Master/tlpkg/tlgs/lib/Fontmap.GS
new file mode 100644
index 00000000000..617b10cc78c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/Fontmap.GS
@@ -0,0 +1,414 @@
+% Copyright (C) 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: Fontmap.GS 7932 2007-05-09 06:37:44Z marcos $
+% Fontmap - standard font catalog for Ghostscript.
+
+% ----------------------------------------------------------------
+
+% This file is a catalog of fonts known to Ghostscript. Any font
+% that is to be loaded automatically when named must be in this catalog,
+% except for fonts that Ghostscript finds automatically in directories
+% named in the GS_FONTPATH environment variable.
+
+% Each font has an entry consisting of three items:
+%
+% - The name by which the font is known inside Ghostscript
+% (a Ghostscript name preceded by a `/', or a string enclosed
+% in parentheses). This is used to find the file from which
+% a font of a given name should be loaded.
+%
+% - Information depending on whether this is a real font or a
+% font alias:
+%
+% - For real fonts, the name of the Ghostscript font
+% file (a Ghostscript string, enclosed in parentheses).
+% The filename should include the extension, which (by
+% convention) is `.gsf'. `.pfa' and `.pfb' files are
+% also usable as fonts for Ghostscript.
+%
+% - For font aliases, the name of the font which should
+% be used when this one is requested, preceded by a
+% `/'. See the entry for Charter below for an example.
+% Note that an alias name cannot be enclosed in parentheses.
+%
+% - At least one space or tab, and a terminating semicolon.
+
+% Because of limitations in the MS-DOS environment, Ghostscript font
+% file names must be no more than 8 characters long, must consist only
+% of LOWER CASE letters, digits, and underscores, and must start with a
+% letter. Font names, on the other hand, need only obey the syntax of
+% names in the Ghostscript language, which is much more liberal.
+
+% The following table is actually a Ghostscript data structure.
+% If you add new entries, be sure to copy the punctuation accurately;
+% in particular, you must leave at least one space or tab between each
+% field in the entry. Also, please read fonts.doc for important information
+% about font names.
+
+% Note that .pfa and .pfb fonts are compatible with Adobe Type Manager
+% and other programs that don't include full PostScript interpreters,
+% as well as with PostScript interpreters; .gsf fonts are compatible with
+% PostScript interpreters, but not with ATM or similar programs.
+
+%
+%
+% Fonts contributed by:
+% URW++ Design and Development Incorporated
+% Poppenbuetteler Bogen 29A
+% D-22399 Hamburg
+% Germany
+% tel. +49 (40) 60 60 50
+% fax +49 (40) 60 60 51 11
+% http://www.urwpp.de
+% for distribution under the GNU License and Aladdin Free Public License.
+% See the notice at the head of this Fontmap file for licensing terms.
+% Each of these fonts is individually covered by the license:
+% for licensing purposes, they are not "part of" any larger entity.
+% The following notice applies to these fonts:
+%
+% Copyright URW Software, Copyright 1994 by URW.
+%
+
+% Actual fonts
+
+/URWBookmanL-DemiBold (b018015l.pfb) ;
+/URWBookmanL-DemiBoldItal (b018035l.pfb) ;
+/URWBookmanL-Ligh (b018012l.pfb) ;
+/URWBookmanL-LighItal (b018032l.pfb) ;
+
+/NimbusMonL-Regu (n022003l.pfb) ;
+/NimbusMonL-ReguObli (n022023l.pfb) ;
+/NimbusMonL-Bold (n022004l.pfb) ;
+/NimbusMonL-BoldObli (n022024l.pfb) ;
+
+/URWGothicL-Book (a010013l.pfb) ;
+/URWGothicL-BookObli (a010033l.pfb) ;
+/URWGothicL-Demi (a010015l.pfb) ;
+/URWGothicL-DemiObli (a010035l.pfb) ;
+
+/NimbusSanL-Regu (n019003l.pfb) ;
+/NimbusSanL-ReguItal (n019023l.pfb) ;
+/NimbusSanL-Bold (n019004l.pfb) ;
+/NimbusSanL-BoldItal (n019024l.pfb) ;
+
+/NimbusSanL-ReguCond (n019043l.pfb) ;
+/NimbusSanL-ReguCondItal (n019063l.pfb) ;
+/NimbusSanL-BoldCond (n019044l.pfb) ;
+/NimbusSanL-BoldCondItal (n019064l.pfb) ;
+
+/URWPalladioL-Roma (p052003l.pfb) ;
+/URWPalladioL-Ital (p052023l.pfb) ;
+/URWPalladioL-Bold (p052004l.pfb) ;
+/URWPalladioL-BoldItal (p052024l.pfb) ;
+
+/CenturySchL-Roma (c059013l.pfb) ;
+/CenturySchL-Ital (c059033l.pfb) ;
+/CenturySchL-Bold (c059016l.pfb) ;
+/CenturySchL-BoldItal (c059036l.pfb) ;
+
+/NimbusRomNo9L-Regu (n021003l.pfb) ;
+/NimbusRomNo9L-ReguItal (n021023l.pfb) ;
+/NimbusRomNo9L-Medi (n021004l.pfb) ;
+/NimbusRomNo9L-MediItal (n021024l.pfb) ;
+
+/StandardSymL (s050000l.pfb) ;
+
+/URWChanceryL-MediItal (z003034l.pfb) ;
+
+/Dingbats (d050000l.pfb) ;
+
+% Aliases
+
+/Bookman-Demi /URWBookmanL-DemiBold ;
+/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+/Bookman-Light /URWBookmanL-Ligh ;
+/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+/Courier /NimbusMonL-Regu ;
+/Courier-Oblique /NimbusMonL-ReguObli ;
+/Courier-Bold /NimbusMonL-Bold ;
+/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+/AvantGarde-Book /URWGothicL-Book ;
+/AvantGarde-BookOblique /URWGothicL-BookObli ;
+/AvantGarde-Demi /URWGothicL-Demi ;
+/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+/Helvetica /NimbusSanL-Regu ;
+/Helvetica-Oblique /NimbusSanL-ReguItal ;
+/Helvetica-Bold /NimbusSanL-Bold ;
+/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+/Helvetica-Narrow /NimbusSanL-ReguCond ;
+/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+/Palatino-Roman /URWPalladioL-Roma ;
+/Palatino-Italic /URWPalladioL-Ital ;
+/Palatino-Bold /URWPalladioL-Bold ;
+/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+/Times-Roman /NimbusRomNo9L-Regu ;
+/Times-Italic /NimbusRomNo9L-ReguItal ;
+/Times-Bold /NimbusRomNo9L-Medi ;
+/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+/Symbol /StandardSymL ;
+
+/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+/ZapfDingbats /Dingbats ;
+
+%
+%
+% Type 1 fonts contributed to the X11R5 distribution.
+%
+
+% The following notice accompanied the Charter fonts.
+%
+% (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+%
+% You are hereby granted permission under all Bitstream propriety rights
+% to use, copy, modify, sublicense, sell, and redistribute the 4 Bitstream
+% Charter (r) Type 1 outline fonts and the 4 Courier Type 1 outline fonts
+% for any purpose and without restriction; provided, that this notice is
+% left intact on all copies of such fonts and that Bitstream's trademark
+% is acknowledged as shown below on all unmodified copies of the 4 Charter
+% Type 1 fonts.
+%
+% BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+/CharterBT-Roman (bchr.pfa) ;
+/CharterBT-Italic (bchri.pfa) ;
+/CharterBT-Bold (bchb.pfa) ;
+/CharterBT-BoldItalic (bchbi.pfa) ;
+
+% Aliases
+
+/Charter-Roman /CharterBT-Roman ;
+/Charter-Italic /CharterBT-Italic ;
+/Charter-Bold /CharterBT-Bold ;
+/Charter-BoldItalic /CharterBT-BoldItalic ;
+
+% The following notice accompanied the Utopia font:
+%
+% Permission to use, reproduce, display and distribute the listed
+% typefaces is hereby granted, provided that the Adobe Copyright notice
+% appears in all whole and partial copies of the software and that the
+% following trademark symbol and attribution appear in all unmodified
+% copies of the software:
+%
+% Copyright (c) 1989 Adobe Systems Incorporated
+% Utopia (R)
+% Utopia is a registered trademark of Adobe Systems Incorporated
+%
+% The Adobe typefaces (Type 1 font program, bitmaps and Adobe Font
+% Metric files) donated are:
+%
+% Utopia Regular
+% Utopia Italic
+% Utopia Bold
+% Utopia Bold Italic
+
+/Utopia-Regular (putr.pfa) ;
+/Utopia-Italic (putri.pfa) ;
+/Utopia-Bold (putb.pfa) ;
+/Utopia-BoldItalic (putbi.pfa) ;
+
+%
+%
+% Fonts contributed by URW GmbH for distribution under the GNU License.
+% The following notice accompanied these fonts:
+%
+% U004006T URW Grotesk 2031 Bold PostScript Type 1 Font Program
+% U003043T URW Antiqua 2051 Regular Condensed PostScript Type 1 Font Program
+%
+% Copyright (c) 1992 URW GmbH, Hamburg, Germany
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; wihtout even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% See the GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 U.S.A.
+%
+% Address:
+% URW GmbH
+% PC Support
+% Harksheider Strasse 102
+% 2000 Hamburg 65
+% Germany
+% Phone: +49 40 60 60 50 (Reception)
+% Phone: +49 40 60 60 52 30 (PC Support)
+% Fax : +49 40 60 60 52 52
+%
+
+/URWAntiquaT-RegularCondensed (u003043t.gsf) ;
+/URWGroteskT-Bold (u004006t.gsf) ;
+
+%
+%
+% Shareware Kana fonts. These are subject to the following notice:
+%
+% These copyrighted fonts were developed by Kevin Hartig. Permission is
+% granted to freely distribute them in entirety along with this statement.
+% This is shareware. If you decide to use these fonts please contribute
+% $10 US to help support further freeware and shareware software development.
+% Questions and comments may be sent to:
+%
+% hartig@fsl.noaa.gov
+% khartig@nyx.cs.du.edu
+%
+% Kevin Hartig
+% 1126 Collyer Street
+% Longmont, CO 80501 USA
+%
+% copyright 1993.
+
+% Hiragana and Katakana fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Calligraphic-Hiragana (fhirw.gsf) ;
+/Calligraphic-Katakana (fkarw.gsf) ;
+
+%
+%
+% Public-domain fonts. These have no copyright, and are of unknown quality.
+
+% Cyrillic fonts. The character names are inappropriate,
+% and the encoding is probably not related to any known standard.
+
+/Shareware-Cyrillic-Regular (fcyr.gsf) ;
+/Shareware-Cyrillic-Italic (fcyri.gsf) ;
+
+% Aliases
+/Cyrillic /Cyrillic-Regular ;
+/Cyrillic-Regular /Shareware-Cyrillic-Regular ;
+/Cyrillic-Italic /Shareware-Cyrillic-Italic ;
+
+%
+%
+% Fonts converted from Hershey outlines. These are constructed and
+% maintained manually. These are also in the public domain.
+%
+% The suggested UniqueID's and filenames are constructed differently for
+% these than for the ones above, because of the strange way that the Hershey
+% fonts were constructed. The scheme for these looks like:
+%
+% 42TTXY0
+%
+% TT = typeface, X = ``class'', Y = variation
+%
+% The typeface names and numbers are listed in fonts.mak.
+%
+% class:
+% 0 = normal = r
+% 1 = simplex = s
+% 2 = complex = c
+% 3 = triplex = t
+% 4 = duplex = d
+%
+% variation:
+% 0 = normal (omitted)
+% 1 = oblique = o
+% 2 = italic = i
+% 3 = bold = b
+% 4 = bold oblique = bo
+% 5 = bold italic = bi
+%
+
+% Fonts created by Thomas Wolff <wolff@inf.fu-berlin.de>, by adding
+% accents, accented characters, and various other non-alphabetics
+% to the original Hershey fonts. These are "freeware", not to be sold.
+
+/Hershey-Gothic-English (hrger.pfa) ; % 5066533
+/Hershey-Gothic-German (hrgrr.pfa) ;
+/Hershey-Gothic-Italian (hritr.pfa) ;
+
+/Hershey-Plain-Duplex (hrpld.pfa) ;
+/Hershey-Plain-Duplex-Italic (hrpldi.pfa) ;
+/Hershey-Plain-Triplex (hrplt.pfa) ;
+/Hershey-Plain-Triplex-Italic (hrplti.pfa) ;
+
+/Hershey-Script-Complex (hrscc.pfa) ;
+/Hershey-Script-Simplex (hrscs.pfa) ; % 5066541
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Gothic-English-Bold (hrgerb.gsf) ; % 5066542
+/Hershey-Gothic-English-Oblique (hrgero.gsf) ;
+/Hershey-Gothic-English-SemiBold (hrgerd.gsf) ;
+/Hershey-Gothic-German-Bold (hrgrrb.gsf) ;
+/Hershey-Gothic-German-Oblique (hrgrro.gsf) ;
+/Hershey-Gothic-Italian-Bold (hritrb.gsf) ;
+/Hershey-Gothic-Italian-Oblique (hritro.gsf) ;
+
+/Hershey-Plain-Duplex-Bold (hrpldb.gsf) ;
+/Hershey-Plain-Duplex-Bold-Italic (hrpldbi.gsf) ;
+/Hershey-Plain-Triplex-Bold (hrpltb.gsf) ;
+/Hershey-Plain-Triplex-Bold-Italic (hrpltbi.gsf) ;
+
+/Hershey-Script-Complex-Bold (hrsccb.gsf) ;
+/Hershey-Script-Complex-Oblique (hrscco.gsf) ;
+/Hershey-Script-Simplex-Bold (hrscsb.gsf) ;
+/Hershey-Script-Simplex-Oblique (hrscso.gsf) ; % 5066556
+
+% Fonts consisting only of characters from the original Hershey
+% distribution. These are Type 3 fonts.
+
+/Hershey-Greek-Complex (hrgkc.gsf) ; % 5066557
+/Hershey-Greek-Simplex (hrgks.gsf) ;
+
+/Hershey-Plain (hrplr.gsf) ;
+/Hershey-Plain-Simplex (hrpls.gsf) ; % 5066560
+
+% Fonts created algorithmically from the above.
+
+/Hershey-Plain-Bold (hrplrb.gsf) ; % 5066561
+/Hershey-Plain-Bold-Oblique (hrplrbo.gsf) ;
+/Hershey-Plain-Oblique (hrplro.gsf) ;
+/Hershey-Plain-Simplex-Bold (hrplsb.gsf) ;
+/Hershey-Plain-Simplex-Bold-Oblique (hrplsbo.gsf) ;
+/Hershey-Plain-Simplex-Oblique (hrplso.gsf) ; % 5066566
+
+% This font, and only this font among the Hershey fonts, uses
+% the SymbolEncoding.
+
+/Hershey-Symbol (hrsyr.gsf) ; % 5066567
+
+/Arial /ArialMT ;
+/Arial,Bold /Arial-BoldMT ;
+/Arial,Italic /Arial-ItalicMT ;
+/Arial,BoldItalic /Arial-BoldItalicMT ;
+
+/TimesNewRoman /TimesNewRomanPSMT ;
+/TimesNewRoman,Bold /TimesNewRomanPS-BoldMT ;
+/TimesNewRoman,Italic /TimesNewRomanPS-ItalicMT ;
+/TimesNewRoman,BoldItalic /TimesNewRomanPS-BoldItalicMT ;
+
diff --git a/Master/tlpkg/tlgs/lib/Fontmap.TeXLive b/Master/tlpkg/tlgs/lib/Fontmap.TeXLive
new file mode 100644
index 00000000000..6ee309780bc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/Fontmap.TeXLive
@@ -0,0 +1,106 @@
+%% Fontmap.TeXLive
+
+This file is part of TeXLive. Public domain.
+
+%% Bitstream Charter
+
+/CharterBT-Bold (fonts/bchb8a.pfb) ;
+/CharterBT-BoldItalic (fonts/bchbi8a.pfb) ;
+/CharterBT-Roman (fonts/bchr8a.pfb) ;
+/CharterBT-Italic (fonts/bchri8a.pfb) ;
+
+%% Adobe Utopia
+
+/Utopia-Bold (fonts/putb8a.pfb) ;
+/Utopia-BoldItalic (fonts/putbi8a.pfb) ;
+/Utopia-Regular (fonts/putr8a.pfb) ;
+/Utopia-Italic (fonts/putri8a.pfb) ;
+
+%% URW LW35 Fonts
+
+/URWGothicL-Demi (fonts/uagd8a.pfb) ;
+/URWGothicL-DemiObli (fonts/uagdo8a.pfb) ;
+/URWGothicL-Book (fonts/uagk8a.pfb) ;
+/URWGothicL-BookObli (fonts/uagko8a.pfb) ;
+/URWBookmanL-DemiBold (fonts/ubkd8a.pfb) ;
+/URWBookmanL-DemiBoldItal (fonts/ubkdi8a.pfb) ;
+/URWBookmanL-Ligh (fonts/ubkl8a.pfb) ;
+/URWBookmanL-LighItal (fonts/ubkli8a.pfb) ;
+/NimbusMonL-Bold (fonts/ucrb8a.pfb) ;
+/NimbusMonL-BoldObli (fonts/ucrbo8a.pfb) ;
+/NimbusMonL-Regu (fonts/ucrr8a.pfb) ;
+/NimbusMonL-ReguObli (fonts/ucrro8a.pfb) ;
+/NimbusSanL-Bold (fonts/uhvb8a.pfb) ;
+/NimbusSanL-BoldCond (fonts/uhvb8ac.pfb) ;
+/NimbusSanL-BoldItal (fonts/uhvbo8a.pfb) ;
+/NimbusSanL-BoldCondItal (fonts/uhvbo8ac.pfb) ;
+%%%/NimbusSanL-Regu (fonts/uhvr8a-105.pfb) ;
+/NimbusSanL-Regu (fonts/uhvr8a.pfb) ;
+/NimbusSanL-ReguCond (fonts/uhvr8ac.pfb) ;
+%%%/NimbusSanL-ReguItal (fonts/uhvro8a-105.pfb) ;
+/NimbusSanL-ReguItal (fonts/uhvro8a.pfb) ;
+/NimbusSanL-ReguCondItal (fonts/uhvro8ac.pfb) ;
+/CenturySchL-Bold (fonts/uncb8a.pfb) ;
+/CenturySchL-BoldItal (fonts/uncbi8a.pfb) ;
+/CenturySchL-Roma (fonts/uncr8a.pfb) ;
+/CenturySchL-Ital (fonts/uncri8a.pfb) ;
+/URWPalladioL-Bold (fonts/uplb8a.pfb) ;
+/URWPalladioL-BoldItal (fonts/uplbi8a.pfb) ;
+/URWPalladioL-Roma (fonts/uplr8a.pfb) ;
+/URWPalladioL-Ital (fonts/uplri8a.pfb) ;
+/StandardSymL (fonts/usyr.pfb) ;
+/NimbusRomNo9L-Medi (fonts/utmb8a.pfb) ;
+/NimbusRomNo9L-MediItal (fonts/utmbi8a.pfb) ;
+/NimbusRomNo9L-Regu (fonts/utmr8a.pfb) ;
+/NimbusRomNo9L-ReguItal (fonts/utmri8a.pfb) ;
+/URWChanceryL-MediItal (fonts/uzcmi8a.pfb) ;
+/Dingbats (fonts/uzdr.pfb) ;
+
+
+% Aliases
+
+/Bookman-Demi /URWBookmanL-DemiBold ;
+/Bookman-DemiItalic /URWBookmanL-DemiBoldItal ;
+/Bookman-Light /URWBookmanL-Ligh ;
+/Bookman-LightItalic /URWBookmanL-LighItal ;
+
+/Courier /NimbusMonL-Regu ;
+/Courier-Oblique /NimbusMonL-ReguObli ;
+/Courier-Bold /NimbusMonL-Bold ;
+/Courier-BoldOblique /NimbusMonL-BoldObli ;
+
+/AvantGarde-Book /URWGothicL-Book ;
+/AvantGarde-BookOblique /URWGothicL-BookObli ;
+/AvantGarde-Demi /URWGothicL-Demi ;
+/AvantGarde-DemiOblique /URWGothicL-DemiObli ;
+
+/Helvetica /NimbusSanL-Regu ;
+/Helvetica-Oblique /NimbusSanL-ReguItal ;
+/Helvetica-Bold /NimbusSanL-Bold ;
+/Helvetica-BoldOblique /NimbusSanL-BoldItal ;
+
+/Helvetica-Narrow /NimbusSanL-ReguCond ;
+/Helvetica-Narrow-Oblique /NimbusSanL-ReguCondItal ;
+/Helvetica-Narrow-Bold /NimbusSanL-BoldCond ;
+/Helvetica-Narrow-BoldOblique /NimbusSanL-BoldCondItal ;
+
+/Palatino-Roman /URWPalladioL-Roma ;
+/Palatino-Italic /URWPalladioL-Ital ;
+/Palatino-Bold /URWPalladioL-Bold ;
+/Palatino-BoldItalic /URWPalladioL-BoldItal ;
+
+/NewCenturySchlbk-Roman /CenturySchL-Roma ;
+/NewCenturySchlbk-Italic /CenturySchL-Ital ;
+/NewCenturySchlbk-Bold /CenturySchL-Bold ;
+/NewCenturySchlbk-BoldItalic /CenturySchL-BoldItal ;
+
+/Times-Roman /NimbusRomNo9L-Regu ;
+/Times-Italic /NimbusRomNo9L-ReguItal ;
+/Times-Bold /NimbusRomNo9L-Medi ;
+/Times-BoldItalic /NimbusRomNo9L-MediItal ;
+
+/Symbol /StandardSymL ;
+
+/ZapfChancery-MediumItalic /URWChanceryL-MediItal ;
+
+/ZapfDingbats /Dingbats ;
diff --git a/Master/tlpkg/tlgs/lib/PDFA_def.ps b/Master/tlpkg/tlgs/lib/PDFA_def.ps
new file mode 100644
index 00000000000..b3c405f3bec
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/PDFA_def.ps
@@ -0,0 +1,43 @@
+%!
+% $Id: PDFA_def.ps 6892 2006-07-05 14:03:49Z leonardo $
+% This is a sample prefix file for creating a PDF/A document.
+% Feel free to modify entries marked with "Customize".
+
+% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
+% unless the user modifies the corresponding line below.
+
+
+systemdict /ProcessColorModel known {
+ systemdict /ProcessColorModel get dup /DeviceGray ne exch /DeviceCMYK ne and
+} {
+ true
+} ifelse
+{ (ERROR: ProcessColorModel must be /DeviceGray or DeviceCMYK.)=
+ /ProcessColorModel cvx /rangecheck signalerror
+} if
+
+
+% Define entries to the document Info dictionary :
+
+/ICCProfile (ISO Coated sb.icc) % Customize.
+def
+
+[ /Title (Title) % Customize.
+ /DOCINFO pdfmark
+
+% Define an ICC profile :
+
+[/_objdef {icc_PDFA} /type /stream /OBJ pdfmark
+[{icc_PDFA} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {4} ifelse >> /PUT pdfmark
+[{icc_PDFA} ICCProfile (r) file /PUT pdfmark
+
+% Define the output intent dictionary :
+
+[/_objdef {OutputIntent_PDFA} /type /dict /OBJ pdfmark
+[{OutputIntent_PDFA} <<
+ /Type /OutputIntent % Must be so (the standard requires).
+ /S /GTS_PDFA1 % Must be so (the standard requires).
+ /DestOutputProfile {icc_PDFA} % Must be so (see above).
+ /OutputConditionIdentifier (CGATS TR001) % Customize
+>> /PUT pdfmark
+[{Catalog} <</OutputIntents [ {OutputIntent_PDFA} ]>> /PUT pdfmark
diff --git a/Master/tlpkg/tlgs/lib/PDFX_def.ps b/Master/tlpkg/tlgs/lib/PDFX_def.ps
new file mode 100644
index 00000000000..0d9602b3374
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/PDFX_def.ps
@@ -0,0 +1,51 @@
+%!
+% $Id: PDFX_def.ps 6460 2006-01-16 14:06:57Z leonardo $
+% This is a sample prefix file for creating a PDF/X-3 document.
+% Feel free to modify entries marked with "Customize".
+
+% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
+% unless the user modifies the corresponding line below.
+
+
+systemdict /ProcessColorModel known {
+ systemdict /ProcessColorModel get dup /DeviceGray ne exch /DeviceCMYK ne and
+} {
+ true
+} ifelse
+{ (ERROR: ProcessColorModel must be /DeviceGray or DeviceCMYK.)=
+ /ProcessColorModel cvx /rangecheck signalerror
+} if
+
+
+% Define entries to the document Info dictionary :
+
+/ICCProfile (ISO Coated sb.icc) def % Customize or remove.
+
+[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
+ /Title (Title) % Customize.
+ /Trapped /False % Must be so (Ghostscript doesn't provide other).
+ /DOCINFO pdfmark
+
+% Define an ICC profile :
+
+currentdict /ICCProfile known {
+ [/_objdef {icc_PDFX} /type /stream /OBJ pdfmark
+ [{icc_PDFX} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {4} ifelse >> /PUT pdfmark
+ [{icc_PDFX} ICCProfile (r) file /PUT pdfmark
+} if
+
+% Define the output intent dictionary :
+
+[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
+[{OutputIntent_PDFX} <<
+ /Type /OutputIntent % Must be so (the standard requires).
+ /S /GTS_PDFX % Must be so (the standard requires).
+ /OutputCondition (Commercial and specialty printing) % Customize
+ /Info (none) % Customize
+ /OutputConditionIdentifier (CGATS TR001) % Customize
+ /RegistryName (http://www.color.org) % Must be so (the standard requires).
+ currentdict /ICCProfile known {
+ /DestOutputProfile {icc_PDFX} % Must be so (see above).
+ } if
+>> /PUT pdfmark
+[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark
diff --git a/Master/tlpkg/tlgs/lib/acctest.ps b/Master/tlpkg/tlgs/lib/acctest.ps
new file mode 100644
index 00000000000..de4c10af316
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/acctest.ps
@@ -0,0 +1,100 @@
+%!
+% Check that operators do their access tests correctly.
+% $Id: acctest.ps 6300 2005-12-28 19:56:24Z giles $
+
+% proc dotest => .
+/dotest
+ {
+ dup
+ mark
+ exch
+ stopped not % False if error, true if no error.
+ { (Allowed access: ) print cleartomark == }
+ if
+ clear
+ }
+def
+
+0 0 moveto % So the show commands don't bomb because of nocurrentpoint.
+
+{ [1 2] executeonly aload } dotest
+{ (string) executeonly (seek) anchorsearch } dotest
+{ (string) (seek) executeonly anchorsearch } dotest
+{ 100 101 (string) noaccess ashow} dotest
+{ 100 1 array readonly astore } dotest
+{ 100 101 102 103 104 (string) noaccess awidthshow } dotest
+{ 1 dict noacess begin } dotest
+{ 1 array executeonly 1 array copy } dotest
+{ 1 array 1 array readonly copy } dotest
+{ 1 dict noaccess 1 dict copy } dotest
+{ 1 dict 1 dict readonly copy } dotest
+{ 1 string executeonly 1 string copy } dotest
+{ 1 string 1 string readonly copy } dotest
+{ (100) executeonly cvi } dotest
+{ (string) executeonly cvn } dotest
+{ (100.001) executeonly cvr } dotest
+{ 1 10 1 string readonly cvrs } dotest
+{ true 5 string readonly cvs } dotest
+{ 1 dict readonly begin /foo true def } dotest
+{ 10 array readonly dictstack } dotest
+{ 1 string executeonly 1 string eq } dotest
+{ 1 string 1 string executeonly eq } dotest
+{ 10 array readonly execstack } dotest
+{ 1 string noaccess executeonly } dotest
+{ 1 array noaccess executeonly } dotest
+{ 1 array executeonly { pop } forall } dotest
+{ 1 dict noaccess { pop pop } forall } dotest
+{ 1 string executeonly { pop } forall } dotest
+{ (string1) executeonly (string2) ge } dotest
+{ (string1) (string2) executeonly ge } dotest
+{ 1 array executeonly 0 get } dotest
+{ 1 dict noaccess /key get } dotest
+{ 1 string executeonly 0 get } dotest
+{ 1 array executeonly 0 1 getinterval } dotest
+{ 1 string executeonly 0 1 getinterval } dotest
+{ (string1) executeonly (string2) gt } dotest
+{ (string1) (string2) executeonly gt } dotest
+{ 1 dict noaccess /key known } dotest
+{ {} (string) executeonly kshow } dotest
+{ (string1) executeonly (string2) le } dotest
+{ (string1) (string2) executeonly le } dotest
+{ 1 array executeonly length } dotest
+{ 1 dict noaccess length } dotest
+{ 1 string executeonly length } dotest
+%%{ /foo 1 dict def foo begin /bar foo def bar noaccess pop /key load } dotest
+{ (string1) executeonly (string2) lt } dotest
+{ (string1) (string2) executeonly lt } dotest
+{ 1 dict noaccess maxlength } dotest
+{ 1 string executeonly 1 string ne } dotest
+{ 1 string 1 string executeonly ne } dotest
+%{ newpath 0 0 moveto (a) false charpath
+% {} {} {} {} pathforall closepath } dotest
+{ 1 array executeonly 0 put } dotest
+{ 1 dict noaccess /key put } dotest
+{ 1 string executeonly 0 put } dotest
+{ 1 array executeonly 0 1 putinterval } dotest
+{ 1 string executeonly 0 1 putinterval } dotest
+{ (access.ps) (r) file executeonly read } dotest
+{ (access.ps) (r) file executeonly 10 string readhexstring } dotest
+{ (access.ps) (r) file 10 string readonly readhexstring } dotest
+{ (access.ps) (r) file executeonly 100 string readline } dotest
+{ (access.ps) (r) file 100 string readonly readline } dotest
+{ (access.ps) (r) file executeonly 10 string readstring } dotest
+{ (access.ps) (r) file 10 string readonly readstring } dotest
+% run does not check for no read access?
+{ (string) executeonly (seek) search } dotest
+{ (string) (seek) executeonly search } dotest
+{ (string) executeonly show }
+%% some test for store.
+{ (string) executeonly stringwidth } dotest
+{ (access.ps) (r) file executeonly token } dotest
+{ (10) executeonly token } dotest
+{ /foo 1 dict def foo begin /bar foo def bar noaccess pop /key where } dotest
+{ 100 101 102 (string) noaccess widthshow } dotest
+{ (/tmp/_.ps) noaccess (w) file closefile } dotest
+{ (/tmp/_.ps) (w) noaccess file closefile } dotest
+{ (/tmp/_.ps) (w) file executeonly 100 write } dotest
+{ (/tmp/_.ps) (w) file executeonly 10 string writehexstring } dotest
+{ (/tmp/_.ps) (w) file 10 string executeonly writehexstring } dotest
+{ (/tmp/_.ps) (w) file executeonly 10 string writestring } dotest
+{ (/tmp/_.ps) (w) file 10 string executeonly writestring } dotest
diff --git a/Master/tlpkg/tlgs/lib/addxchar.ps b/Master/tlpkg/tlgs/lib/addxchar.ps
new file mode 100644
index 00000000000..ddfc7e334a5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/addxchar.ps
@@ -0,0 +1,357 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: addxchar.ps 6300 2005-12-28 19:56:24Z giles $
+% Add the Central European and other Adobe extended Latin characters to a
+% Type 1 font.
+% Requires -dWRITESYSTEMDICT to disable access protection.
+
+(type1ops.ps) runlibfile
+
+% ---------------- Utilities ---------------- %
+
+/addce_dict 50 dict def
+addce_dict begin
+
+% Define the added copyright notice.
+/addednotice (. Portions Copyright (C) 1999 Aladdin Enterprises.) def
+
+% Open a font for modification by removing the FID and changing the
+% FontName. Removing UniqueID and XUID is not necessary, since we
+% will only be adding characters.
+/openfont { % <name> <font> openfont <name> <font'>
+ dup length dict copy
+ dup /FID undef
+ dup /FontName 3 index put
+} def
+
+% Do the equivalent of false charpath for a glyph.
+% This should really be an operator!
+/glyphpath { % <glyph> glyphpath -
+ currentfont /Encoding get 0 3 -1 roll put
+ <00> false charpath
+} def
+
+% Do the equivalent of charpath + pathbbox for a glyph.
+/glyphbbox { % <glyph> glyphbbox <llx> <lly> <urx> <ury>
+ % We cache this value, because it's expensive to compute.
+ BBoxes 1 index .knownget {
+ exch pop
+ } {
+ gsave newpath 0 0 moveto dup glyphpath [pathbbox] grestore
+ BBoxes 3 -1 roll 2 index put
+ } ifelse aload pop
+} def
+
+% Get the side bearing and width for a glyph.
+/glyphsbw { % <glyph> glyphsbw <lsbx> <wx>
+ % We cache this value, because it's expensive to compute.
+ SBW 1 index .knownget {
+ exch pop
+ } {
+ dup glyphcs { dup /hsbw eq { pop exit } if } forall
+ 2 array astore
+ SBW 3 -1 roll 2 index put
+ } ifelse aload pop
+} def
+
+% Get the CharString for a glyph, as an array.
+/glyphcs { % <glyph> glyphcs <array>
+ CharStrings exch get
+ 4330 exch dup length string .type1decrypt exch pop
+ dup length lenIV sub lenIV exch getinterval
+ 0 () /SubFileDecode filter [ exch charstack_read ]
+} def
+
+% Find an occurrence of a value in an array.
+/asearch { % <array> <value> asearch <index> true
+ % <array> <value> asearch false
+ false 0 4 2 roll exch {
+ % Stack: false index value element
+ 2 copy eq { pop pop exch not exch dup exit } if
+ exch 1 add exch
+ } forall pop pop
+} def
+
+% Convert an array back to a CharString.
+/csdef { % <glyph> <array> csdef -
+ charproc_string
+ 4330 exch dup .type1encrypt exch pop readonly
+ CharStrings 3 1 roll put
+} def
+
+% Split an accented character name.
+/splitaccented { % <Baccent> splitaccented <Baccent> <B> <accent>
+ dup =string cvs
+ dup 0 1 getinterval cvn
+ exch dup length 1 sub 1 exch getinterval cvn
+} def
+
+% Begin the definition of a 'seac' character.
+% Defines accent, base, abox, bbox.
+% The initial dx lines up the origins of the base and the accent.
+/beginseac { % <bchar> <achar> beginseac
+ % -mark- <lsbx> <wx> /hsbw <asb> <dx>
+ /accent exch def /base exch def
+ /abox [accent glyphbbox] def
+ /bbox [base glyphbbox] def
+ [ base glyphsbw /hsbw accent glyphsbw pop
+ dup 4 index sub
+} def
+
+% Center the accent over the base of a 'seac' character.
+/centeraccent { % <dx> centeraccent <adx>
+ bbox 2 get bbox 0 get add 2 div
+ abox 2 get abox 0 get add 2 div
+ sub add
+} def
+
+% Finish the definition of a 'seac' character.
+/finishseac { % <charname> -mark- ... <adx> <ady> finishseac -
+ exch cvi exch cvi
+ charindex base get charindex accent get /seac ] csdef
+} def
+
+% ---------------- Main program ---------------- %
+
+% Define accented characters that can be made with seac,
+% with the accent centered over the character.
+/seacchars [
+ /Abreve /Amacron
+ /Cacute /Ccaron /Dcaron
+ /Ecaron /Edotaccent /Emacron
+ /Gbreve
+ /Idotaccent /Imacron
+ /Lacute
+ /Nacute /Ncaron
+ /Ohungarumlaut /Omacron
+ /Racute /Rcaron
+ /Sacute /Scedilla
+ /Tcaron
+ /Uhungarumlaut /Umacron /Uogonek /Uring
+ /Zacute /Zdotaccent
+ /abreve /amacron
+ /cacute /ccaron
+ /ecaron /edotaccent /emacron
+ /gbreve
+ /lacute
+ /nacute /ncaron
+ /ohungarumlaut /omacron
+ /racute /rcaron
+ /sacute /scedilla
+ /uhungarumlaut /umacron /uring
+ /zacute /zdotaccent
+] def
+
+% Define seac characters where the accent lines up with the right
+% edge of the character.
+/seacrightchars [
+ /Aogonek /Eogonek /Iogonek /aogonek /eogonek /iogonek /uogonek
+] def
+
+% Define seac characters where the caron becomes an appended quoteright.
+/seaccaronchars [
+ /dcaron /lcaron /tcaron
+] def
+
+% Define seac characters using commaaccent.
+/seaccommachars [
+ /Gcommaaccent /Kcommaaccent /Lcommaaccent /Ncommaaccent /Rcommaaccent
+ /Scommaaccent /Tcommaaccent
+ /gcommaaccent /kcommaaccent /lcommaaccent /ncommaaccent /rcommaaccent
+ /scommaaccent /tcommaaccent
+] def
+
+% Define the characters copied from the Symbol font.
+/symbolchars [
+ /Delta /greaterequal /lessequal /lozenge /notequal /partialdiff
+ /summation
+] def
+
+% Define the procedures for editing the commaaccent character.
+% Delete all the hints, since it's too hard to adjust them.
+/caedit mark
+ /rmoveto { exch commatop sub cvi exch }
+ /hstem { pop pop pop }
+ /vstem 1 index
+ /callothersubr {
+ dup 3 eq { 4 { pop } repeat /skip true def } if
+ }
+ /pop { skip { pop /skip false def } if }
+.dicttomark def
+
+/addce { % <name> <font> addce <font'>
+ 20 dict begin
+ /origfont 1 index def
+ openfont
+ dup /CharStrings 2 copy get dup length dict copy put
+ dup /Encoding 2 copy get dup length array copy put
+ dup /FontInfo 2 copy get dup length dict copy put
+ definefont /font exch def
+ currentdict font end begin begin
+ font 1000 scalefont setfont
+ /symbolfont /Symbol findfont def
+ /BBoxes CharStrings length dict def
+ /SBW CharStrings length dict def
+
+ /italfactor FontInfo /ItalicAngle .knownget {
+ neg dup sin exch cos div
+ } {
+ 0
+ } ifelse def
+
+ % Invert the Encoding (needed for seac).
+
+ /charindex 256 dict def
+ 0 1 255 {
+ charindex exch Encoding 1 index get exch put
+ } for
+
+ % Add the commaaccent character, by moving the comma downward.
+
+ /comma glyphbbox /commatop exch def pop pop pop
+ /comma glyphcs
+ /skip false def
+ [ exch { caedit 1 index .knownget { exec } if } forall ]
+ /commaaccent exch csdef
+
+ % Add the accented characters that can be made with seac.
+
+ seacchars {
+ splitaccented beginseac
+ centeraccent
+ % If the accent would collide with the base character,
+ % raise it a little.
+ abox 1 get bbox 3 get sub dup 0 le {
+ % ... but not if the accent is in the low position.
+ abox 1 get 0 gt {
+ neg 60 add
+ % Adjust the X position if italic.
+ dup italfactor mul 3 -1 roll add exch
+ } {
+ pop 0
+ } ifelse
+ } {
+ pop 0
+ } ifelse
+ finishseac
+ } forall
+
+ seacrightchars {
+ splitaccented beginseac
+ bbox 2 get abox 2 get sub add % line up right edges
+ 0 finishseac
+ } forall
+
+ /dcroat /d /hyphen beginseac
+ bbox 2 get abox 2 get sub add % line up right edges
+ 0 finishseac
+
+ /imacron /dotlessi /macron beginseac
+ centeraccent
+ 0 finishseac
+
+ /Lcaron /L /quoteright beginseac
+ bbox 2 get abox 2 get sub add % line up right edges
+ 0 finishseac
+
+ seaccaronchars {
+ dup =string cvs 0 1 getinterval cvn /quoteright beginseac
+ % Move the quote to the right of the character.
+ bbox 2 get abox 0 get sub 50 add add
+ % Adjust the character width as well.
+ 4 -1 roll abox 2 get abox 0 get sub 50 add add cvi 4 1 roll
+ 0 finishseac
+ } forall
+
+ seaccommachars {
+ dup =string cvs 0 1 getinterval cvn /comma beginseac
+ centeraccent
+ commatop neg
+ % Lower the accent if the character extends below
+ % the baseline
+ bbox 1 get 0 .min add
+ finishseac
+ } forall
+
+ % Add the characters from the Symbol font.
+ % We should scale them to match the FontBBox, but we don't.
+
+ symbolchars {
+ symbolfont /CharStrings get 1 index get
+ CharStrings 3 1 roll put
+ } forall
+
+ % Add the one remaining character.
+
+ CharStrings /Dcroat CharStrings /Eth get put
+
+ % Recompute the FontBBox, since some of the accented characters
+ % may have enlarged it.
+
+ /llx 1000 def /lly 1000 def /urx 0 def /ury 0 def
+ CharStrings {
+ pop glyphbbox
+ ury .max /ury exch def urx .max /urx exch def
+ lly .min /lly exch def llx .min /llx exch def
+ } forall
+ /FontBBox llx cvi lly cvi urx ceiling cvi ury ceiling cvi 4 packedarray def
+
+ % Restore the Encoding and wrap up.
+
+ [/Copyright /Notice] {
+ FontInfo 1 index .knownget {
+ addednotice concatstrings FontInfo 3 1 roll put
+ } {
+ pop
+ } ifelse
+ } forall
+ FontName font openfont
+ dup /Encoding origfont /Encoding get put
+ definefont
+
+ end end
+} def
+
+currentdict end readonly pop % addce_dict
+
+/addce { addce_dict begin addce end } def
+
+% ---------------- Integration ---------------- %
+
+% We would like to patch the font loader so that it adds the extended
+% Latin characters automatically. We haven't done this yet.
+
+% ---------------- Test program ---------------- %
+
+/TEST where { pop TEST } { false } ifelse {
+ /FONT where { pop } { /FONT /Palatino-Italic def } ifelse
+ (unprot.ps) runlibfile
+ unprot
+ (wrfont.ps) runlibfile
+ wrfont_dict begin
+ /eexec_encrypt true def
+ /binary_CharStrings true def
+ end
+ save
+ FONT findfont
+ /Latin-CE exch addce setfont
+ (t.ce.pfb) (w) file dup writefont closefile
+ restore
+ (prfont.ps) runlibfile
+ (t.ce.pfb) (r) file .loadfont
+ /Latin-CE DoFont
+ quit
+} if
diff --git a/Master/tlpkg/tlgs/lib/align.ps b/Master/tlpkg/tlgs/lib/align.ps
new file mode 100644
index 00000000000..58d9e600495
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/align.ps
@@ -0,0 +1,73 @@
+% Copyright (C) 1989, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: align.ps 6300 2005-12-28 19:56:24Z giles $
+% Print a page that indicates the proper settings of Margins and HWMargins
+% for a given device. Requires a Level 2 system.
+
+% Reset the offset and margins.
+
+<<
+ /PageOffset [0 0]
+ /Margins [0 0]
+ /.HWMargins [0 0 0 0]
+>>
+setpagedevice
+<<
+ /ImagingBBox null
+>>
+setpagedevice
+
+% Determine the actual page size.
+
+clippath pathbbox newpath
+/y1 exch def /x1 exch def pop pop
+
+% Draw lines that should be exactly 1" in from each edge,
+% and should extend precisely to the edge of the paper.
+
+1 setlinewidth
+0 setgray
+72 0 moveto 0 y1 rlineto stroke
+0 72 moveto x1 0 rlineto stroke
+
+% Print the text in the middle of the page.
+
+/S 80 string def
+108 480 moveto
+/Helvetica 12 selectfont
+ { currentfile S readline pop dup (%END) eq { pop exit } if
+ gsave show grestore 0 -15 rmoveto
+ } loop
+Let the distance in inches from the left edge of the page to
+the vertical line be H, and from the bottom edge to the
+horizontal line be V; let the lengths of the gaps at the top
+and bottom of the vertical line be T and B respectively, and
+the gaps at the left and right of the horizontal line be L
+and R. For correct alignment of pages, put the following line
+in a file named (for example) margins.ps, and then mention
+margins.ps on the gs command line when printing any of your
+own files:
+
+ << /.HWMargins [ml mb mr mt] /Margins [x y] >> setpagedevice
+
+where
+ ml = L * 72, mb = B * 72, mr = R * 72, mt = T * 72,
+%END
+/res currentpagedevice /.MarginsHWResolution get def
+( x = (1 - H) * ) show res 0 get =string cvs show
+(, y = (V - 1) * ) show res 1 get =string cvs show
+
+showpage
diff --git a/Master/tlpkg/tlgs/lib/bdftops.ps b/Master/tlpkg/tlgs/lib/bdftops.ps
new file mode 100644
index 00000000000..3b620d0eb59
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/bdftops.ps
@@ -0,0 +1,795 @@
+% Copyright (C) 1990, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: bdftops.ps 6300 2005-12-28 19:56:24Z giles $
+% bdftops.ps
+% Convert a BDF file (possibly with (an) associated AFM file(s))
+% to a PostScript Type 1 font (without eexec encryption).
+% The resulting font will work with any PostScript language interpreter,
+% but not with ATM or other font rasterizers lacking a complete interpreter.
+
+/envBDF 120 dict def
+envBDF begin
+
+% "Import" the image-to-path package.
+% This also brings in the Type 1 opcodes (type1ops.ps).
+ (impath.ps) runlibfile
+
+% "Import" the font-writing package.
+ (wrfont.ps) runlibfile
+ wrfont_dict begin
+ /binary_CharStrings false def
+ /binary_tokens false def
+ /encrypt_CharStrings true def
+ /standard_only true def
+ end
+ /lenIV 0 def
+
+% Invert the StandardEncoding vector.
+ 256 dict dup begin
+ 0 1 255 { dup StandardEncoding exch get exch def } for
+ end /StandardDecoding exch def
+
+% Define the properties copied to FontInfo.
+ mark
+ (COPYRIGHT) /Notice
+ (FAMILY_NAME) /FamilyName
+ (FULL_NAME) /FullName
+ (WEIGHT_NAME) /Weight
+ .dicttomark /properties exch def
+
+% Define the character sequences for synthesizing missing composite
+% characters in the standard encoding.
+ mark
+ /AE [/A /E]
+ /OE [/O /E]
+ /ae [/a /e]
+ /ellipsis [/period /period /period]
+ /emdash [/hyphen /hyphen /hyphen]
+ /endash [/hyphen /hyphen]
+ /fi [/f /i]
+ /fl [/f /l]
+ /germandbls [/s /s]
+ /guillemotleft [/less /less]
+ /guillemotright [/greater /greater]
+ /oe [/o /e]
+ /quotedblbase [/comma /comma]
+ .dicttomark /composites exch def
+
+% Define the procedure for synthesizing composites.
+% This must not be bound.
+ /compose
+ { exch pop
+ FontMatrix Private /composematrix get invertmatrix concat
+ 0 0 moveto
+ dup gsave false charpath pathbbox currentpoint grestore
+ 6 2 roll setcachedevice show
+ } def
+% Define the CharString procedure that calls compose, with the string
+% on the stack. This too must remain unbound.
+ /compose_proc
+ { Private /compose get exec
+ } def
+
+% Define aliases for missing characters similarly.
+ mark
+ /acute /quoteright
+ /bullet /asterisk
+ /cedilla /comma
+ /circumflex /asciicircum
+ /dieresis /quotedbl
+ /dotlessi /i
+ /exclamdown /exclam
+ /florin /f
+ /fraction /slash
+ /grave /quoteleft
+ /guilsinglleft /less
+ /guilsinglright /greater
+ /hungarumlaut /quotedbl
+ /periodcentered /asterisk
+ /questiondown /question
+ /quotedblleft /quotedbl
+ /quotedblright /quotedbl
+ /quotesinglbase /comma
+ /quotesingle /quoteright
+ /tilde /asciitilde
+ .dicttomark /aliases exch def
+
+% Define overstruck characters that can be synthesized with seac.
+ mark
+ [ /Aacute /Acircumflex /Adieresis /Agrave /Aring /Atilde
+ /Ccedilla
+ /Eacute /Ecircumflex /Edieresis /Egrave
+ /Iacute /Icircumflex /Idieresis /Igrave
+ /Lslash
+ /Ntilde
+ /Oacute /Ocircumflex /Odieresis /Ograve /Otilde
+ /Scaron
+ /Uacute /Ucircumflex /Udieresis /Ugrave
+ /Yacute /Ydieresis
+ /Zcaron
+ /aacute /acircumflex /adieresis /agrave /aring /atilde
+ /ccedilla
+ /eacute /ecircumflex /edieresis /egrave
+ /iacute /icircumflex /idieresis /igrave
+ /lslash
+ /ntilde
+ /oacute /ocircumflex /odieresis /ograve /otilde
+ /scaron
+ /uacute /ucircumflex /udieresis /ugrave
+ /yacute /ydieresis
+ /zcaron
+ ]
+ { dup =string cvs
+ [ exch dup 0 1 getinterval cvn
+ exch dup length 1 sub 1 exch getinterval cvn
+ ]
+ } forall
+ /cent [/c /slash]
+ /daggerdbl [/bar /equal]
+ /divide [/colon /hyphen]
+ /sterling [/L /hyphen]
+ /yen [/Y /equal]
+ .dicttomark /accentedchars exch def
+
+% ------ Output utilities ------ %
+
+ /ws {psfile exch writestring} bind def
+ /wl {ws (\n) ws} bind def
+ /wt {=string cvs ws ( ) ws} bind def
+
+% ------ BDF file parsing utilities ------ %
+
+% Define a buffer for reading the BDF file.
+ /buffer 400 string def
+
+% Read a line from the BDF file into the buffer.
+% Ignore empty (zero-length) lines.
+% Define /keyword as the first word on the line.
+% Define /args as the remainder of the line.
+% If the keyword is equal to commentword, skip the line.
+% (If commentword is equal to a space, never skip.)
+ /nextline
+ { { bdfile buffer readline not
+ { (Premature EOF\n) print stop } if
+ dup length 0 ne { exit } if pop
+ }
+ loop
+ ( ) search
+ { /keyword exch def pop }
+ { /keyword exch def () }
+ ifelse
+ /args exch def
+ keyword commentword eq { nextline } if
+ } bind def
+
+% Get a word argument from args. We do *not* copy the string.
+ /warg % warg -> string
+ { args ( ) search
+ { exch pop exch }
+ { () }
+ ifelse /args exch def
+ } bind def
+
+% Get an integer argument from args.
+ /iarg % iarg -> int
+ { warg cvi
+ } bind def
+
+% Get a numeric argument from args.
+ /narg % narg -> int|real
+ { warg cvr
+ dup dup cvi eq { cvi } if
+ } bind def
+
+% Convert the remainder of args into a string.
+ /remarg % remarg -> string
+ { args copystring
+ } bind def
+
+% Get a string argument that occupies the remainder of args.
+ /sarg % sarg -> string
+ { args (") anchorsearch
+ { pop /args exch def } { pop } ifelse
+ args args length 1 sub get (") 0 get eq
+ { args 0 args length 1 sub getinterval /args exch def } if
+ args copystring
+ } bind def
+
+% Check that the keyword is the expected one.
+ /checkline % (EXPECTED-KEYWORD) checkline ->
+ { dup keyword ne
+ { (Expected ) print =
+ (Line=) print keyword print ( ) print args print (\n) print stop
+ } if
+ pop
+ } bind def
+
+% Read a line and check its keyword.
+ /getline % (EXPECTED-KEYWORD) getline ->
+ { nextline checkline
+ } bind def
+
+% Find the first/last non-zero bit of a non-zero byte.
+ /fnzb
+ { 0 { exch dup 128 ge { pop exit } { dup add exch 1 add } ifelse }
+ loop
+ } bind def
+ /lnzb
+ { 7 { exch dup 1 and 0 ne { pop exit } { -1 bitshift exch 1 sub } ifelse }
+ loop
+ } bind def
+
+% ------ Type 1 encoding utilities ------ %
+
+% Parse the side bearing and width information that begins a CharString.
+% Arguments: charstring. Result: sbx sby wx wy substring.
+ /parsesbw
+ { mark exch lenIV
+ { % stack: mark ... string dropcount
+ dup 2 index length exch sub getinterval
+ dup 0 get dup 32 lt { pop exit } if
+ dup 246 le
+ { 139 sub exch 1 }
+ { dup 250 le
+ { 247 sub 8 bitshift 108 add 1 index 1 get add exch 2 }
+ { dup 254 le
+ { 251 sub 8 bitshift 108 add 1 index 1 get add neg exch 2 }
+ { pop dup 1 get 128 xor 128 sub
+ 8 bitshift 1 index 2 get add
+ 8 bitshift 1 index 3 get add
+ 8 bitshift 1 index 4 get add exch 5
+ } ifelse
+ } ifelse
+ } ifelse
+ } loop
+ counttomark 3 eq { 0 3 1 roll 0 exch } if
+ 6 -1 roll pop
+ } bind def
+
+% Find the side bearing and width information that begins a CharString.
+% Arguments: charstring. Result: charstring sizethroughsbw.
+ /findsbw
+ { dup parsesbw 4 { exch pop } repeat skipsbw
+ } bind def
+ /skipsbw % charstring sbwprefix -> sizethroughsbw
+ { length 1 index length exch sub
+ 2 copy get 12 eq { 2 } { 1 } ifelse add
+ } bind def
+
+% Encode a number, and append it to a string.
+% Arguments: str num. Result: newstr.
+ /concatnum
+ { dup dup -107 ge exch 107 le and
+ { 139 add 1 string dup 0 3 index put }
+ { dup dup -1131 ge exch 1131 le and
+ { dup 0 ge { 16#f694 } { neg 16#fa94 } ifelse add
+ 2 string dup 0 3 index -8 bitshift put
+ dup 1 3 index 255 and put
+ }
+ { 5 string dup 0 255 put exch
+ 2 copy 1 exch -24 bitshift 255 and put
+ 2 copy 2 exch -16 bitshift 255 and put
+ 2 copy 3 exch -8 bitshift 255 and put
+ 2 copy 4 exch 255 and put
+ exch
+ }
+ ifelse
+ }
+ ifelse exch pop concatstrings
+ } bind def
+
+% ------ Point arithmetic utilities ------ %
+
+ /ptadd { exch 4 -1 roll add 3 1 roll add } bind def
+ /ptexch { 4 2 roll } bind def
+ /ptneg { neg exch neg exch } bind def
+ /ptpop { pop pop } bind def
+ /ptsub { ptneg ptadd } bind def
+
+% ------ The main program ------ %
+
+ /readBDF % <infilename> <outfilename> <fontname>
+ % <encodingname> <uniqueID> <xuid> readBDF -> <font>
+ { /xuid exch def % may be null
+ /uniqueID exch def % may be -1
+ /encodingname exch def
+ /encoding encodingname cvx exec def
+ /fontname exch def
+ /psname exch def
+ /bdfname exch def
+ gsave % so we can set the CTM to the font matrix
+
+% Open the input files. We don't open the output file until
+% we've done a minimal validity check on the input.
+ bdfname (r) file /bdfile exch def
+ /commentword ( ) def
+
+% Check for the STARTFONT.
+ (STARTFONT) getline
+ args (2.1) ne { (Not version 2.1\n) print stop } if
+
+% Initialize the font.
+ /Font 20 dict def
+ Font begin
+ /FontName fontname def
+ /PaintType 0 def
+ /FontType 1 def
+ uniqueID 0 gt { /UniqueID uniqueID def } if
+ xuid null ne { /XUID xuid def } if
+ /Encoding encoding def
+ /FontInfo 20 dict def
+ /Private 20 dict def
+ currentdict end currentdict end
+ exch begin begin % insert font above environment
+
+% Initialize the Private dictionary in the font.
+ Private begin
+ /-! {string currentfile exch readhexstring pop} readonly def
+ /-| {string currentfile exch readstring pop} readonly def
+ /|- {readonly def} readonly def
+ /| {readonly put} readonly def
+ /BlueValues [] def
+ /lenIV lenIV def
+ /MinFeature {16 16} def
+ /password 5839 def
+ /UniqueID uniqueID def
+ end % Private
+
+% Invert the Encoding, for synthesizing composite characters.
+ /decoding encoding length dict def
+ 0 1 encoding length 1 sub
+ { dup encoding exch get exch decoding 3 1 roll put }
+ for
+
+% Now open the output file.
+ psname (w) file /psfile exch def
+
+% Put out a header compatible with the Adobe "standard".
+ (%!FontType1-1.0: ) ws fontname wt (000.000) wl
+ (% This is a font description converted from ) ws
+ bdfname wl
+ (% by bdftops running on ) ws
+ statusdict /product get ws ( revision ) ws
+ revision =string cvs ws (.) wl
+
+% Copy the initial comments, up to FONT.
+ true
+ { nextline
+ keyword (COMMENT) ne {exit} if
+ { (% Here are the initial comments from the BDF file:\n%) wl
+ } if false
+ (%) ws remarg wl
+ } loop pop
+ () wl
+ /commentword (COMMENT) def % do skip comments from now on
+
+% Read and process the FONT, SIZE, and FONTBOUNDINGBOX.
+ % If we cared about FONT, we'd use it here. If the BDF files
+ % from MIT had PostScript names rather than X names, we would
+ % care; but what's there is unusable, so we discard FONT.
+ % The FONTBOUNDINGBOX may not be reliable, so we discard it too.
+ (FONT) checkline
+ (SIZE) getline
+ /pointsize iarg def /xres iarg def /yres iarg def
+ (FONTBOUNDINGBOX) getline
+ nextline
+
+% Initialize the font bounding box bookeeping.
+ /fbbxo 1000 def
+ /fbbyo 1000 def
+ /fbbxe -1000 def
+ /fbbye -1000 def
+
+% Read and process the properties. We only care about a few of them.
+ keyword (STARTPROPERTIES) eq
+ { iarg
+ { nextline
+ properties keyword known
+ { FontInfo properties keyword get sarg readonly put
+ } if
+ } repeat
+ (ENDPROPERTIES) getline
+ nextline
+ } if
+
+% Compute and set the FontMatrix.
+ Font /FontMatrix
+ [ 0.001 0 0 0.001 xres mul yres div 0 0 ] readonly
+ dup setmatrix put
+
+% Read and process the header for the bitmaps.
+ (CHARS) checkline
+ /ccount iarg def
+
+% Initialize the CharStrings dictionary.
+ /charstrings ccount
+ composites length add
+ aliases length add
+ accentedchars length add
+ 1 add dict def % 1 add for .notdef
+ /isfixedwidth true def
+ /fixedwidth null def
+ /subrcount 0 def
+ /subrs [] def
+
+% Read the bitmap data. This reads the remainder of the file.
+% We do this before processing the bitmaps so that we can compute
+% the correct FontBBox first.
+ /chardata ccount dict def
+ ccount -1 1
+ { (STARTCHAR) getline
+ /charname remarg def
+ (ENCODING) getline
+ /eindex iarg def
+ eindex dup 0 ge exch 255 le and
+ { charname /charname StandardEncoding eindex get def
+ charname /.notdef eq eindex 0 gt and
+ { /charname (A) eindex =string cvs concatstrings cvn def
+ }
+ if
+ (/) print charname =string cvs print (,) print print
+ }
+ { (/) print charname print
+ }
+ ifelse
+ 10 mod 1 eq { (\n) print flush } if
+ (SWIDTH) getline
+ /swx iarg pointsize mul 1000 div xres mul 72 div def
+ /swy iarg pointsize mul 1000 div xres mul 72 div def
+ (DWIDTH) getline % Ignore, use SWIDTH instead
+ (BBX) getline
+ /bbw iarg def /bbh iarg def /bbox iarg def /bboy iarg def
+ nextline
+ keyword (ATTRIBUTES) eq
+ { nextline
+ } if
+ (BITMAP) checkline
+
+% Update the font bounding box.
+ /fbbxo fbbxo bbox .min def
+ /fbbyo fbbyo bboy .min def
+ /fbbxe fbbxe bbox bbw add .max def
+ /fbbye fbbye bboy bbh add .max def
+
+% Read the bits for this character.
+ /raster bbw 7 add 8 idiv def
+ /cbits raster bbh mul string def
+ cbits length 0 gt
+ { 0 raster cbits length raster sub
+ { cbits exch raster getinterval
+ bdfile buffer readline not
+ { (EOF in bitmap\n) print stop } if
+ % stack has <cbits.interval> <buffer.interval>
+ 0 () /SubFileDecode filter
+ exch 2 copy readhexstring pop pop pop closefile
+ } for
+ } if
+
+ (ENDCHAR) getline
+
+% Save the character data.
+ chardata charname [swx swy bbw bbh bbox bboy cbits] put
+ } for
+
+ (ENDFONT) getline
+
+% Allocate the buffers for the bitmap and the outline,
+% according to the font bounding box.
+ /fbbw fbbxe fbbxo sub def
+ /fbbh fbbye fbbyo sub def
+ /fraster fbbw 7 add 8 idiv def
+ /bits fraster fbbh mul 200 .max 65535 .min string def
+ /outline bits length 16 mul 65535 .min string def
+
+% Process the characters.
+ chardata
+ { exch /charname exch def aload pop
+ /cbits exch def
+ /bboy exch def /bbox exch def
+ /bbh exch def /bbw exch def
+ /swy exch def /swx exch def
+
+% The bitmap handed to type1imagepath must have the correct height,
+% because type1imagepath uses this to compute the scale factor,
+% so we have to clear the unused parts of it.
+ /raster bbw 7 add 8 idiv def
+ bits dup 0 1 raster fbbh mul 1 sub
+ { 0 put dup } for
+ pop pop
+ bits raster fbbh bbh sub mul cbits putinterval
+
+% Compute the font entry, converting the bitmap to an outline.
+ bits 0 raster fbbh mul getinterval % the bitmap image
+ bbw fbbh % bitmap width & height
+ swx swy % width x & y
+ bbox neg bboy neg % origin x & y
+ % Account for lenIV when converting the outline.
+ outline lenIV outline length lenIV sub getinterval
+ type1imagepath
+ length lenIV add
+ outline exch 0 exch getinterval
+
+% Check for a fixed width font.
+ isfixedwidth
+ { fixedwidth null eq
+ { /fixedwidth swx def }
+ { fixedwidth swx ne { /isfixedwidth false def } if }
+ ifelse
+ } if
+
+% Finish up the character.
+ copystring
+ charname exch charstrings 3 1 roll put
+ } forall
+
+% Add CharStrings entries for aliases.
+ aliases
+ { charstrings 2 index known not charstrings 2 index known and
+ { charstrings exch get charstrings 3 1 roll put
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ forall
+
+% If this is not a fixed-width font, synthesize missing characters
+% out of available ones.
+ isfixedwidth not
+ { false composites
+ { 1 index charstrings exch known not
+ 1 index { decoding exch known and } forall
+ { ( /) print 1 index bits cvs print
+ /combine exch def
+ 0 1 combine length 1 sub
+ { dup combine exch get decoding exch get
+ bits 3 1 roll put
+ } for
+ bits 0 combine length getinterval copystring
+ [ exch /compose_proc load aload pop ] cvx
+ charstrings 3 1 roll put
+ pop true
+ }
+ { pop pop }
+ ifelse
+ }
+ forall flush
+ { Private /composematrix matrix put
+ Private /compose /compose load put
+ }
+ if
+ }
+ if
+
+% Synthesize accented characters with seac if needed and possible.
+ accentedchars
+ { aload pop /accent exch def /base exch def
+ buffer cvs /accented exch def
+ charstrings accented known not
+ charstrings base known and
+ charstrings accent known and
+ StandardDecoding base known and
+ StandardDecoding accent known and
+ encoding StandardDecoding base get get base eq and
+ encoding StandardDecoding accent get get accent eq and
+ { ( /) print accented print
+ charstrings base get findsbw 0 exch getinterval
+ /acstring exch def % start with sbw of base
+ charstrings accent get parsesbw
+ 4 { pop } repeat % just leave sbx
+ acstring exch concatnum
+ 0 concatnum 0 concatnum % adx ady
+ decoding base get concatnum % bchar
+ decoding accent get concatnum % achar
+ s_seac concatstrings
+ charstrings exch accented copystring exch put
+ } if
+ } forall
+
+% Make a CharStrings entry for .notdef.
+ outline lenIV <8b8b0d0e> putinterval % 0 0 hsbw endchar
+ charstrings /.notdef outline 0 lenIV 4 add getinterval copystring put
+
+% Encrypt the CharStrings and Subrs (in place).
+ charstrings
+ { % Be careful not to encrypt aliased characters twice,
+ % since they share their CharString.
+ aliases 2 index known
+ { charstrings aliases 3 index get .knownget
+ { 1 index ne }
+ { true }
+ ifelse
+ }
+ { true
+ }
+ ifelse
+ 1 index type /stringtype eq and
+ { 4330 exch dup .type1encrypt exch pop
+ readonly charstrings 3 1 roll put
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ forall
+ 0 1 subrcount 1 sub
+ { dup subrs exch get
+ 4330 exch dup .type1encrypt exch pop
+ subrs 3 1 roll put
+ }
+ for
+
+% Make most of the remaining entries in the font dictionaries.
+
+% The Type 1 font machinery really only works with a 1000 unit
+% character coordinate system. Set this up here, by computing the factor
+% to make the X entry in the FontMatrix come out at exactly 0.001.
+ /fontscale 1000 fbbh div yres mul xres div def
+ Font /FontBBox
+ [ fbbxo fontscale mul
+ fbbyo fontscale mul
+ fbbxe fontscale mul
+ fbbye fontscale mul
+ ] cvx readonly put
+ Font /CharStrings charstrings readonly put
+ FontInfo /FullName known not
+ { % Some programs insist on FullName being present.
+ FontInfo /FullName FontName dup length string cvs put
+ }
+ if
+ FontInfo /isFixedPitch isfixedwidth put
+ subrcount 0 gt
+ { Private /Subrs subrs 0 subrcount getinterval readonly put
+ } if
+
+% Determine the italic angle and underline position
+% by actually installing the font.
+ save
+ /_temp_ Font definefont setfont
+ [1000 0 0 1000 0 0] setmatrix % mitigate rounding problems
+% The italic angle is the multiple of -5 degrees
+% that minimizes the width of the 'I'.
+ 0 9999 0 5 85
+ { dup rotate
+ newpath 0 0 moveto (I) false charpath
+ dup neg rotate
+ pathbbox pop exch pop exch sub
+ dup 3 index lt { 4 -2 roll } if
+ pop pop
+ }
+ for pop
+% The underline position is halfway between the bottom of the 'A'
+% and the bottom of the FontBBox.
+ newpath 0 0 moveto (A) false charpath
+ FontMatrix concat
+ pathbbox pop pop exch pop
+% Put the values in FontInfo.
+ 3 -1 roll
+ restore
+ Font /FontBBox get 1 get add 2 div cvi
+ dup FontInfo /UnderlinePosition 3 -1 roll put
+ 2 div abs FontInfo /UnderlineThickness 3 -1 roll put
+ FontInfo /ItalicAngle 3 -1 roll put
+
+% Clean up and finish.
+ grestore
+ bdfile closefile
+ Font currentdict end end begin % remove font from dict stack
+ (\n) print flush
+
+ } bind def
+
+% ------ Reader for AFM files ------ %
+
+% Dictionary for looking up character keywords
+ /cmdict 6 dict dup begin
+ /C { /c iarg def } def
+ /N { /n warg copystring def } def
+ /WX { /w narg def } def
+ /W0X /WX load def
+ /W /WX load def
+ /W0 /WX load def
+ end def
+
+ /readAFM % fontdict afmfilename readAFM -> fontdict
+ { (r) file /bdfile exch def
+ /Font exch def
+ /commentword (Comment) def
+
+% Check for the StartFontMetrics.
+ (StartFontMetrics) getline
+ args cvr 2.0 lt { (Not version 2.0 or greater\n) print stop } if
+
+% Look for StartCharMetrics, then parse the character metrics.
+% The only information we care about is the X width.
+ /metrics 0 dict def
+ { nextline
+ keyword (EndFontMetrics) eq { exit } if
+ keyword (StartCharMetrics) eq
+ { iarg dup dict /metrics exch def
+ { /c -1 def /n null def /w null def
+ nextline buffer
+ { token not { exit } if
+ dup cmdict exch known
+ { exch /args exch def cmdict exch get exec args }
+ { pop }
+ ifelse
+ } loop
+ c 0 ge n null ne or w null ne and
+ { n null eq { /n Font /Encoding get c get def } if
+ metrics n w put
+ }
+ if
+ }
+ repeat
+ (EndCharMetrics) getline
+ } if
+ } loop
+
+% Insert the metrics in the font.
+ metrics length 0 ne
+ { Font /Metrics metrics readonly put
+ } if
+ Font
+ } bind def
+
+end % envBDF
+
+% Enter the main program in the current dictionary.
+/bdfafmtops % infilename afmfilename* outfilename fontname
+ % encodingname uniqueID xuid
+ { envBDF begin
+ 7 -2 roll exch 7 2 roll % afm* in out fontname encodingname uniqueID xuid
+ readBDF % afm* font
+ exch { readAFM } forall
+ save exch
+ dup /FontName get exch definefont
+ setfont
+ psfile writefont
+ restore
+ psfile closefile
+ end
+ } bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 4 ge
+ { dup 0 get
+ dup 48 ge exch 57 le and % last arg starts with a digit?
+ { /StandardEncoding } % no encodingname
+ { cvn } % have encodingname
+ ifelse
+ exch (.) search % next-to-last arg has . in it?
+ { mark 4 1 roll % have xuid
+ { cvi exch pop exch (.) search not { exit } if }
+ loop cvi ]
+ 3 -1 roll cvi exch
+ }
+ { cvi null % no xuid
+ }
+ ifelse
+ counttomark 5 roll
+ counttomark 6 sub array astore
+ 7 -2 roll cvn 7 -3 roll % make sure fontname is a name
+ bdfafmtops
+ }
+ { cleartomark
+ (Usage:\n bdftops xx.bdf [yy1.afm ...] zz.gsf fontname uniqueID [xuid] [encodingname]\n) print flush
+ mark
+ }
+ ifelse
+ }
+if pop
diff --git a/Master/tlpkg/tlgs/lib/caption.ps b/Master/tlpkg/tlgs/lib/caption.ps
new file mode 100644
index 00000000000..a41d99c5481
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/caption.ps
@@ -0,0 +1,56 @@
+%!
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: caption.ps 6300 2005-12-28 19:56:24Z giles $
+% Add a "caption" to the bottom of each page.
+/captionsize 20 def
+/caption
+ { /Helvetica //captionsize selectfont
+ (Printed by Aladdin's XXYYZZ) show
+ /Symbol //captionsize selectfont
+ (\324) show % trademarkserif
+ /Helvetica //captionsize selectfont
+ ( product) show
+ } bind def
+
+10 dict begin
+gsave
+ initgraphics
+ clippath pathbbox
+ pop exch 36 add /by exch def
+ % We can't use stringwidth, so we have to show and measure.
+ gsave
+ 0 0 0 0 rectclip
+ 0 0 moveto caption currentpoint pop /bw exch def
+ grestore
+ add bw sub 2 div /bx exch def
+ % We don't have the font bbox available, so we guess.
+ /bh captionsize 1.05 mul def
+grestore
+/showcaption
+ { gsave
+ initgraphics
+ //bx 9 sub //by 9 sub //bw 18 add //bh 18 add
+ 1 setgray 4 copy rectfill 0 setgray 1.5 setlinewidth rectstroke
+ //bx //by moveto //caption exec
+ grestore
+ } bind def
+<< /EndPage [
+ /showcaption load /exec load
+ currentpagedevice /EndPage get /exec load
+ ] cvx
+>> setpagedevice
+end
diff --git a/Master/tlpkg/tlgs/lib/cid2code.ps b/Master/tlpkg/tlgs/lib/cid2code.ps
new file mode 100644
index 00000000000..475cf189baf
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/cid2code.ps
@@ -0,0 +1,160 @@
+% Copyright (C) 1998, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: cid2code.ps 6300 2005-12-28 19:56:24Z giles $
+% Construct an inverse map from CIDs to codes.
+
+% Create an inverse map from CIDs to code values.
+% We only use this for 16-bit Unicode, so it has some limitations.
+% After invoking .cmap2code, loading a CMap file prints out the map
+% instead of doing what it usually does. For example:
+%
+% gs -dNODISPLAY -dBATCH lib/cid2code.ps -c .cmap2code\
+% -f Resource/CMap/UniJIS-UCS2-H > mapfile
+
+/.cmap2codedict 10 dict begin
+
+/begincmap {
+ mark
+} def
+/endcmap {
+ % Stack: mark code_lo1 code_hi1 cid1 ...
+ 20 dict begin
+ /depth counttomark 3 sub def
+ % Do a first pass to determine the maximum CID.
+ 0 0 3 depth {
+ 1 add /d exch def
+ d index d 2 add index 1 get add d 3 add index 1 get sub .max
+ } for
+ 1 add /ncid exch def
+ /map ncid 2 mul string def
+ % Now fill in the map.
+ 0 3 depth {
+ /d exch def
+ d index 2 mul /cid2 exch def
+ d 1 add index /hi exch def
+ d 2 add index 2 string copy /lo exch def
+ lo 1 get 1 hi 1 get {
+ map cid2 lo 0 get put
+ map cid2 1 add 3 -1 roll put
+ /cid2 cid2 2 add def
+ } for
+ } for
+ % Print the map.
+ (%stdout) (w) file
+ dup (<) print
+ dup /ASCIIHexEncode filter
+ dup map writestring
+ closefile
+ () = flush
+ closefile
+ end
+} def
+%/begincodespacerange
+/endcodespacerange {cleartomark} def
+%/usecmap
+
+%/beginbfchar
+/endbfchar {cleartomark} def
+%/beginbfrange
+/endbfrange {cleartomark} def
+
+%/begincidchar
+/endcidchar {
+ counttomark 2 idiv { dup counttomark 1 add 3 roll } repeat pop
+} def
+%/begincidrange
+/endcidrange {
+ counttomark 1 add -1 roll pop
+} def
+
+%/beginnotdefchar
+/endnotdefchar {cleartomark} def
+%/beginnotdefrange
+/endnotdefrange {cleartomark} def
+
+currentdict end readonly def
+
+/.cmap2code { % - .cmap2code -
+ /CIDInit /ProcSet findresource dup length dict copy
+ .cmap2codedict { 3 copy put pop pop } forall
+ /CIDInit exch /ProcSet defineresource pop
+} def
+
+% Extract and print reverse mapping information from a cid2code.txt file.
+/.printhex2 { % <int16> .printhex2 -
+ (<) print
+ 16#10000 add 16 =string cvrs 1 4 getinterval print
+ (>) print
+} def
+/.cid2code { % <cmaptemplate> <file> <column> .cid2code -
+ 30 dict begin
+ /column exch def
+ (r) file /f exch def
+ (%!) =
+ (/CIDInit /ProcSet findresource begin 12 dict begin begincmap) =
+ % Print the information from the template.
+ {
+ exch ==only ( ) print
+ dup type /dicttype eq {
+ dup length =only ( dict dup begin) = {
+ ( ) print exch ===only ( ) print ===only ( def) =
+ } forall (end def) =
+ } {
+ ===only
+ } ifelse ( def) =
+ } forall
+ % Read the data from the cid2code.txt file.
+ {
+ f =string readline pop (CID\t) anchorsearch { pop pop exit } if pop
+ } loop
+ /map [ {
+ f =string readline not { pop exit } if
+ column { (\t) search pop pop pop } repeat
+ (\t) search { exch pop exch pop } if
+ (,) search { exch pop exch pop } if
+ dup length 4 ne { pop (*) } if
+ dup (*) eq { pop (0000) } if
+ (16#) exch concatstrings cvi
+ } loop ] def
+ % Print the code space range(s).
+ /maxcid map length 1 sub def
+ mark maxcid
+ dup 255 and 255 eq {
+ 0 exch
+ } {
+ dup 16#ff00 and exch 0 2 index 1 sub
+ } ifelse
+ counttomark 2 idiv dup =only ( begincodespacerange) = {
+ exch .printhex2 .printhex2 () =
+ } repeat (endcodespacerange) =
+ % Print the map data.
+ 0 1 100 maxcid {
+ /lo exch def
+ /hi lo 99 add maxcid .min def
+ 0 lo 1 hi { map exch get 0 ne { 1 add } if } for
+ dup 0 eq {
+ pop
+ } {
+ =only ( begincidchar) = lo 1 hi {
+ map 1 index get dup 0 eq { pop pop } { exch .printhex2 = } ifelse
+ } for (endcidchar) =
+ } ifelse
+ } for
+ % Wrap up.
+ (endcmap CMapName currentdict /CMap defineresource pop end end) =
+ f closefile
+ end
+} bind def
diff --git a/Master/tlpkg/tlgs/lib/cidfmap b/Master/tlpkg/tlgs/lib/cidfmap
new file mode 100644
index 00000000000..36c11d462b6
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/cidfmap
@@ -0,0 +1,28 @@
+%!
+% $Id: cidfmap 6300 2005-12-28 19:56:24Z giles $
+% This is a sample map file for CIDFont category.
+
+%
+% The map is a set of records, which must use one of the two formats :
+%
+% 1. A substutution of a CIF font with another CID font :
+%
+% /substituted /original ;
+%
+% Where 'substituted' is a name being used in a document,
+% 'original' is a name of an available resource.
+%
+% 2. A substutution of a CIF font with a True Type font :
+%
+% /substituted << /FileType /TrueType /Path (path) /SunfontID 1 /CSI [(ordering) supplement] >> ;
+%
+% Where 'substituted' is a name being used in a document,
+% 'path' is a path to a True Type font file,
+% 'ordering' is a value of Ordering required for CIDSystemInfo dictionary,
+% 'supplement' is a value of Supplement required for CIDSystemInfo dictionary.
+%
+% Examples :
+%
+% /ShinGo-Bold /HeiseiKakuGo-W5 ;
+% /Ryumin-Medium << /FileType /TrueType /Path (H:/AuxFiles/Fonts/BATANG.TTC) /SubfontID 3 /CSI [(Japan1) 2] >> ;
+%
diff --git a/Master/tlpkg/tlgs/lib/decrypt.ps b/Master/tlpkg/tlgs/lib/decrypt.ps
new file mode 100644
index 00000000000..b172f6d83b4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/decrypt.ps
@@ -0,0 +1,15 @@
+%!
+% Decrypt an eexec-encoded file.
+% $Id: decrypt.ps 6300 2005-12-28 19:56:24Z giles $
+
+(t.in) (r) file /in exch def
+(t.out) (w) file /out exch def
+256 string /buf exch def
+55665 % eexec encryption seed
+ { in buf readhexstring /more exch def
+ dup .type1decrypt out exch writestring
+ more not { exit } if
+ } loop
+in closefile
+out closefile
+quit
diff --git a/Master/tlpkg/tlgs/lib/docie.ps b/Master/tlpkg/tlgs/lib/docie.ps
new file mode 100644
index 00000000000..20dd6a17776
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/docie.ps
@@ -0,0 +1,218 @@
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: docie.ps 6300 2005-12-28 19:56:24Z giles $
+% docie.ps
+% Emulate CIE algorithms in PostScript.
+
+% ---------------- Auxiliary procedures ---------------- %
+
+/r1default [0 1] def
+/r3default [0 1 0 1 0 1] def
+
+/apply3 % <u> <v> <w> [<pu> <pv> <pw>] apply3 <u'> <v'> <w'>
+ { { 4 -1 roll exch exec } forall
+ } bind def
+
+/restrict % <u> <min> <max> restrict <u'>
+ { 3 1 roll .max .min
+ } bind def
+
+/restrict3 % <u> <v> <w> [<minu> ... <maxw>] restrict3 <u'> <v'> <w'>
+ { aload pop
+ 7 -1 roll 3 1 roll restrict 7 1 roll
+ 5 -1 roll 3 1 roll restrict 5 1 roll
+ restrict 3 1 roll
+ } bind def
+
+/rescale % <u> <min> <max> rescale <u'>
+ { 1 index sub 3 1 roll sub exch div 0 .max 1 .min
+ } bind def
+
+/rescale3 % <u> <v> <w> [<minu> ... <maxw>] rescale3 <u'> <v'> <w'>
+ { aload pop
+ 7 -1 roll 3 1 roll rescale 7 1 roll
+ 5 -1 roll 3 1 roll rescale 5 1 roll
+ rescale 3 1 roll
+ } bind def
+
+/mmult3 % <u> <v> <w> [<uu> <uv> ... <wv> <ww>] mmult3
+ % <u'> <v'> <w'>
+ { 4 -1 roll dup dup 6 -1 roll dup dup 8 -1 roll dup dup
+ 10 -1 roll { 10 -1 roll mul } forall
+ % Stack: u1 v1 w1 u2 v2 w2 u3 v3 w3
+ 4 -1 roll add 6 -1 roll add
+ % Stack: u1 v1 u2 v2 u3 v3 w'
+ 7 1 roll 3 -1 roll add 4 -1 roll add
+ % Stack: w' u1 u2 u3 v'
+ 5 1 roll add add 3 1 roll
+ } bind def
+
+/minvert3 % [<uu> <uv> ... <wv> <ww>] minvert3
+ % [<uu'> <uv'> ... <wv'> <ww'>]
+ { 16 dict begin
+ aload pop { I H G F E D C B A } { exch def } forall
+ /coa E I mul F H mul sub def
+ /cob F G mul D I mul sub def
+ /coc D H mul E G mul sub def
+ /det A coa mul B cob mul add C coc mul add def
+ [ coa det div
+ C H mul B I mul sub det div
+ B F mul C E mul sub det div
+ cob det div
+ A I mul C G mul sub det div
+ C D mul A F mul sub det div
+ coc det div
+ B G mul A H mul sub det div
+ A E mul B D mul sub det div
+ ]
+ end
+ } bind def
+
+/print1
+ { print dup ==
+ } bind def
+
+/print3
+ { print 3 array astore dup == aload pop
+ } bind def
+
+% ---------------- Mapping to XYZ ---------------- %
+
+/csmap % <csdict> <l> <m> <n> csmap <csdict> <x> <y> <z>
+ { 3 index /RangeLMN .knownget not { r3default } if restrict3
+DOCIEDEBUG { (After RangeLMN Decode: ) print3 } if
+ 3 index /DecodeLMN .knownget { apply3 } if
+DOCIEDEBUG { (After DecodeLMN Decode: ) print3 } if
+ 3 index /MatrixLMN .knownget { mmult3 } if
+DOCIEDEBUG { (After MatrixLMN Decode: ) print3 } if
+ } bind def
+
+/csciea % <csdict> <a> csciea <csdict> <x> <y> <z>
+ { 1 index /RangeA .knownget not { r1default } if restrict
+DOCIEDEBUG { (After RangeA Decode: ) print1 } if
+ 1 index /DecodeA .knownget { exec } if
+DOCIEDEBUG { (After DecodeA Decode: ) print1 } if
+ 1 index /MatrixA .knownget
+ { { 1 index mul exch } forall pop }
+ { dup dup }
+ ifelse
+DOCIEDEBUG { (After MatrixA Decode: ) print3 } if
+ csmap
+ } bind def
+
+/cscieabc % <csdict> <a> <b> <c> cscieabc <csdict> <x> <y> <z>
+ { 3 index /RangeABC .knownget not { r3default } if restrict3
+DOCIEDEBUG { (After RangeABC Decode: ) print3 } if
+ 3 index /DecodeABC .knownget { apply3 } if
+DOCIEDEBUG { (After DecodeABC Decode: ) print3 } if
+ 3 index /MatrixABC .knownget { mmult3 } if
+DOCIEDEBUG { (After MatrixABC Decode: ) print3 } if
+ csmap
+ } bind def
+
+% ---------------- Rendering from XYZ ---------------- %
+
+/lookup3 % <rtable> <a[0..1]> <b[0..1]> <c[0..1]> lookup3
+ % <rtable> <bytes>
+ { 3 -1 roll 3 index 0 get 1 sub mul
+ 3 -1 roll 3 index 1 get 1 sub mul
+ 3 -1 roll 3 index 2 get 1 sub mul
+ % Stack: rtable ia ib ic
+DOCIEDEBUG { (RenderTable indices: ) print3 mark 5 1 roll } if
+ 3 -1 roll round cvi 3 index 3 get exch get
+ % Stack: rtable ib ic string
+ 3 -1 roll round cvi 3 index 2 get mul
+ % Stack: rtable ic string ib*nc
+ 3 -1 roll round cvi add 2 index 4 get mul
+ % Stack: rtable string index
+ 2 index 4 get getinterval
+ % Stack: rtable bytes
+DOCIEDEBUG { (RenderTable values: ) print (<) print (%stdout) (w) file 1 index writehexstring (>) = } if
+ } bind def
+
+/bpdefault [0 0 0] def
+
+/crmap % <csdict> <crdict> <x> <y> <z> crmap <v1> ...
+ {
+DOCIEDEBUG { (CIE XYZ = ) print3 } if
+ 3 index /MatrixPQR .knownget { mmult3 } if
+DOCIEDEBUG { (After MatrixPQR: ) print3 } if
+ 4 index /WhitePoint get
+ 5 index /BlackPoint .knownget not { bpdefault } if
+ 5 index /WhitePoint get
+ 6 index /BlackPoint .knownget not { bpdefault } if
+ 4
+ { 4 -1 roll aload pop
+ % Stack: csdict crdict x y z pt pt pt px py pz
+ 3 copy 12 index /MatrixPQR .knownget { mmult3 } if 6 array astore
+ }
+ repeat
+ % Stack: csdict crdict x y z wps+ bps+ wpd+ bpd+
+ 9 -1 roll pop % get rid of csdict
+ 7 4 roll
+ 7 index /TransformPQR get
+ { % Stack: crdict wps+ bps+ wpd+ bpd+ u v w proc
+ 8 copy exch pop exch pop
+ exec exch pop 4 -1 roll pop
+ }
+ forall
+ 7 3 roll pop pop pop pop % get rid of White/BlackPoints
+DOCIEDEBUG { (After TransformPQR: ) print3 } if
+ 3 index /MatrixPQR .knownget { minvert3 mmult3 } if
+DOCIEDEBUG { (After MatrixPQR': ) print3 } if
+ 3 index /MatrixLMN .knownget { mmult3 } if
+DOCIEDEBUG { (After MatrixLMN Encode: ) print3 } if
+ 3 index /EncodeLMN .knownget { apply3 } if
+DOCIEDEBUG { (After EncodeLMN Encode: ) print3 } if
+ 3 index /RangeLMN .knownget not { r3default } if restrict3
+DOCIEDEBUG { (After RangeLMN Encode: ) print3 } if
+ 3 index /MatrixABC .knownget { mmult3 } if
+DOCIEDEBUG { (After MatrixABC Encode: ) print3 } if
+ 3 index /EncodeABC .knownget { apply3 } if
+DOCIEDEBUG { (After EncodeABC Encode: ) print3 } if
+ 3 index /RangeABC .knownget not { r3default } if
+ 5 -1 roll /RenderTable .knownget
+ { % Stack: u v w ranges rtable
+ 5 1 roll rescale3
+DOCIEDEBUG { (Rescaled ABC: ) print3 } if
+ % Stack: rtable a b c
+ lookup3
+ % Stack: rtable bytes
+ 0 1 3 index 4 get 1 sub
+ { % Stack: values rtable bytes c
+ 2 copy get 255 div
+ % Stack: values rtable bytes c v
+ 3 index 3 -1 roll 5 add get exec 3 1 roll
+ }
+ for pop pop
+DOCIEDEBUG { (After RenderTableT: ) print ] dup == aload pop } if
+ }
+ { restrict3
+DOCIEDEBUG { (After RangeABC Encode: ) print3 } if
+ }
+ ifelse
+ } bind def
+
+% ---------------- Top level control ---------------- %
+
+/mapdict mark
+ /CIEBasedA { 1 get exch csciea currentcolorrendering 4 1 roll crmap } bind
+ /CIEBasedABC { 1 get 4 1 roll cscieabc currentcolorrendering 4 1 roll crmap } bind
+.dicttomark def
+/mapcie % <a> mapcie <v1> ...
+ % <a> <b> <c> mapcie <v1> ...
+ { currentcolorspace dup 0 get //mapdict exch get exec
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/dumphint b/Master/tlpkg/tlgs/lib/dumphint
new file mode 100644
index 00000000000..88e437643d8
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/dumphint
@@ -0,0 +1,30 @@
+#!/bin/sh
+# $Id: dumphint 8107 2007-07-05 19:04:29Z till $
+# Linearized PDF hint formatting utility.
+
+# This definition is changed on install to match the
+# executable name set in the makefile
+GS_EXECUTABLE=gs
+gs="`dirname $0`/$GS_EXECUTABLE"
+if test ! -x "$gs"; then
+ gs="$GS_EXECUTABLE"
+fi
+GS_EXECUTABLE="$gs"
+
+
+OPTIONS="-dSAFER -dDELAYSAFER"
+while true
+do
+ case "$1" in
+ -*) OPTIONS="$OPTIONS $1" ;;
+ *) break ;;
+ esac
+ shift
+done
+
+if [ $# -ne 1 ]; then
+ echo "Usage: `basename $0` input.pdf" 1>&2
+ exit 1
+fi
+
+exec "$GS_EXECUTABLE" -q -dNODISPLAY $OPTIONS -- dumphint.ps "$1"
diff --git a/Master/tlpkg/tlgs/lib/dumphint.ps b/Master/tlpkg/tlgs/lib/dumphint.ps
new file mode 100644
index 00000000000..34d6be8b4d1
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/dumphint.ps
@@ -0,0 +1,756 @@
+% Copyright (C) 2000, 2001 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: dumphint.ps 6300 2005-12-28 19:56:24Z giles $
+% Linearized PDF hint formatting utility.
+
+%
+% Linearized PDF hints generated by Acrobat suite seem to deviate from
+% the published specification.
+%
+% /P (page offset hint table) key in hint stream is not generated by
+% Adobe products. The key is no longer required in PDF 1.5.
+%
+% Per-page items 4 and 5 of the page offset hint table start from 1st
+% page rather than 2nd page as the spec claims.
+%
+% All array entries start from the new byte boundary.
+%
+
+/table_width 79 def
+/col1_width 66 def
+
+% Skip bits to the next byte boundary
+/bytealign { % <stream> bytealign -
+ begin /N 0 def /B 0 def end
+} bind def
+
+% Set bit stream position and align it to byte boundary
+/set_align { % <<>> pos set_align -
+ exch begin
+ S exch setfileposition
+ /N 0 def /B 0 def
+ end
+} bind def
+
+% Read requested number of bits from the bit stream.
+/bitread { % <bstream> <width> bitwrite <value>
+ exch begin
+ 0 % bit val
+ {
+ 1 index N .min % bit val m
+ dup 3 1 roll % bit m val m
+ bitshift % bit m val<<m
+ B 2 index N sub % bit m val<<m B m-N
+ bitshift add % bit m val<<m+B>>(N-m)
+ 3 -1 roll % m val' bit
+ 2 index sub % m val' bit'
+ 3 -1 roll % val' bit' m
+ N exch sub dup % val' bit' N' N'
+ 1 exch bitshift % val' bit' N' 1<<N'
+ 1 sub B and % val' bit' N' B&(1<<N')
+ /B exch def % val' bit' N'
+ /N exch def % val' bit'
+ dup 0 le {
+ pop exit % val'
+ } if
+ /N N 8 add def
+ /B B 8 bitshift S read not { 0 ( *** EOF! *** ) = } if add def
+ exch
+ } loop % bit' val'
+ end
+} bind def
+
+% Print a string several times
+/multiprint { % cnt (s) multiprint -
+ exch { dup print } repeat pop
+} bind def
+
+% Split the line into 2 substrings.
+/split_line { % (s) split_line () ()
+ dup length col1_width gt {
+ col1_width 1 sub
+ dup -1 0 {
+ dup % (s) w i i
+ 3 index % (s) w i i ()
+ exch get % (s) w i c
+ 32 eq {
+ exch pop exit
+ } if
+ pop
+ } for
+ 1 add % (s) w'
+ 1 index exch % (s) (s) w'
+ 0 exch % (s) (s) 0 w'
+ getinterval % (s) (v)
+ } {
+ dup % (s) (s)
+ } ifelse
+ (\n) search {
+ 4 1 roll % (pre) (s) (post) (match)
+ pop pop % (pre) (s)
+ 1 index length % (pre) (s) len
+ 1 add % (pre) (s) len+1
+ } {
+ exch % (pre) (s)
+ 1 index length % (pre) (s) len
+ } ifelse
+ 1 index length % (pre) (s) len Len
+ 1 index sub % (pre) (s) len Len-len
+ getinterval % (pre) (post)
+} bind def
+
+% Print a 2 column table. The string is printed in 1st column
+% left-aligned. The number is printed in 2nd column right-aligned.
+/two_column { % n () two_column -
+ split_line % n (a) ()
+ 3 1 roll % () n (a)
+ dup length % () n (a) len
+ exch print % () n len
+ exch =string cvs % () len (n)
+ dup length % () len (n) len2
+ 3 -1 roll add % () (n) len+len2
+ //table_width % () (n) len+len2 78
+ exch sub % () (n) 78-len+len2
+ ( ) multiprint % () (n)
+ = % ()
+ { dup length 0 eq { exit } if
+ split_line exch =
+ } loop
+ pop
+ () =
+} bind def
+
+% Print the header of a hint table
+/table_header { % () table_header -
+ dup length dup
+ table_width exch sub 2 idiv % () len sp
+ dup ( ) multiprint % () len sp
+ 3 -1 roll = % len sp
+ ( ) multiprint % len
+ (=) multiprint
+ ()= ()=
+} bind def
+
+% Pretty-print an array on top level
+/dump_array { % [ ] dump_array -
+ ([) = ( ) print
+ 1 exch {
+ =string cvs % pos ()
+ dup length dup % pos () len len
+ 3 index add 1 add % pos () len len+pos+1
+ table_width gt {
+ () =
+ ( ) print % pos () len
+ 2 add % pos () pos'
+ 3 1 roll print pop % pos'
+ } {
+ ( ) print % pos () len
+ exch print % pos len
+ add 1 add % pos'
+ } ifelse
+ } forall
+ pop
+ () = (]) =
+} bind def
+
+% Pretty-print an array on 2nd level
+/dump_array2 { % [ ] dump_array2 -
+ ( [) print
+ 3 exch {
+ =string cvs % pos ()
+ dup length dup % pos () len len
+ 3 index add 1 add % pos () len len+pos+1
+ table_width 2 sub gt {
+ () =
+ ( ) print % pos () len
+ 4 add % pos () pos'
+ 3 1 roll print pop % pos'
+ } {
+ ( ) print % pos () len
+ exch print % pos len
+ add 1 add % pos'
+ } ifelse
+ } forall
+ pop
+ ( ]) =
+} bind def
+
+% Print an array header
+/array_header {
+ () = =
+} bind def
+
+% Analyze the page offset hint table.
+/dump_page_offset_table { % - dump_page_offset_table -
+ hint_stream
+
+ dup 32 bitread
+ dup /hint_minnop exch def
+ (1. The least number of objects in a page.) two_column
+
+ dup 32 bitread
+ dup /hint_1st_obj exch def
+ (2. Location of the first page's page object.) two_column
+
+ dup 16 bitread
+ dup /hint_maxnopbits exch def
+ (3. Bits for difference between max and min number of page objects.) two_column
+
+ dup 32 bitread
+ dup /hint_minpl exch def
+ (4. Least length of a page.) two_column
+
+ dup 16 bitread
+ dup /hint_maxplbits exch def
+ (5. Bits for difference between max and min length of a page.) two_column
+
+ dup 32 bitread
+ dup /hint_minsco exch def
+ (6. Least start of Contents offset. )
+ 1 index 0 ne { (\n*** Acrobat expects 0 ***) concatstrings } if
+ two_column
+
+ dup 16 bitread
+ dup /hint_maxscobits exch def
+ (7. Bits for difference between max and min offset to the start of the content stream.) two_column
+
+ dup 32 bitread
+ dup /hint_mincl exch def
+ (8. Least contents length.) two_column
+
+ dup 16 bitread
+ dup /hint_maxclbits exch def
+ (9. Bits needed to represent the greatest Contents length.) two_column
+
+ dup 16 bitread
+ dup /hint_maxsorbits exch def
+ (10. Bits needed to represent the greatest number of Shared Object references.) two_column
+
+ dup 16 bitread
+ dup /hint_sobits exch def
+ (11. Bits needed to identify a Shared Object.) two_column
+
+ dup 16 bitread
+ dup /hint_numfbits exch def
+ (12. Bits needed to represent numerator of fraction.) two_column
+
+ dup 16 bitread
+ dup /hint_denf exch def
+ (13. Denominator of fraction.) two_column
+
+ pop
+
+ LinearizationParams /N get
+
+ % 1. Number of objects in the page.
+ hint_stream bytealign
+ /hint_page_obj [
+ 2 index {
+ hint_stream hint_maxnopbits bitread
+ hint_minnop add
+ } repeat
+ ] readonly def
+
+ (1. Number of objects on the page) array_header
+ hint_page_obj dump_array
+
+ % 2, Page length in bytes.
+ hint_stream bytealign
+ /hint_page_len [
+ 2 index {
+ hint_stream hint_maxplbits bitread
+ hint_minpl add
+ } repeat
+ ] readonly def
+
+ (2. Page length in bytes.) array_header
+ hint_page_len dump_array
+
+ % 3, Number of shared objects referenced from the page
+ hint_stream bytealign
+ /hint_page_sobj [
+ 2 index {
+ hint_stream hint_maxsorbits bitread
+ } repeat
+ ] readonly def
+
+ (3. Number of shared objects referenced from the page.) array_header
+ hint_page_sobj dump_array
+
+ % 4. Index into the shared objects hint table
+ hint_stream bytealign
+ /hint_page_sobj_id [
+ 0 1 4 index 1 sub {
+ hint_page_sobj exch get [
+ exch {
+ hint_stream hint_sobits bitread
+ } repeat
+ ] readonly
+ } for
+ ] readonly def
+
+ (4. Index into the shared objects hint table.) array_header
+ ([) =
+ hint_page_sobj_id { dump_array2 } forall
+ (])=
+
+ % 5. Fractional position for each shared object reference
+ hint_stream bytealign
+ /hint_page_sobj_pos [
+ 0 1 4 index 1 sub {
+ hint_page_sobj exch get [
+ exch {
+ hint_stream hint_numfbits bitread
+ hint_denf div
+ } repeat
+ ] readonly
+ } for
+ ] readonly def
+
+ (5. Fractional position for each shared object reference. ) array_header
+ ([)=
+ hint_page_sobj_pos { dump_array2 } forall
+ (])=
+
+ % 6. Offset of the page's content stream from the beginning of the page.
+ hint_stream bytealign
+ /hint_page_content_offset [
+ 2 index {
+ hint_stream hint_maxscobits bitread
+ hint_minsco add
+ } repeat
+ ] readonly def
+
+ (6. Offset of the page's content stream from the beginning of the page.) array_header
+ hint_page_content_offset dump_array
+
+ % 7. Length of the page's content stream in bytes.
+ hint_stream bytealign
+ /hint_page_content_len [
+ 2 index {
+ hint_stream hint_maxclbits bitread
+ hint_mincl add
+ } repeat
+ ] readonly def
+
+ (7. Length of the page's content stream in bytes.) array_header
+ hint_page_content_len dump_array
+
+ pop
+} bind def
+
+% Analyze tha shared object hint table
+/dump_shared_object_table {
+ hint_stream
+
+ dup 32 bitread
+ dup /shint_1st_obj_id exch def
+ (1. Object number of the first object in the shared objects section) two_column
+
+ dup 32 bitread
+ dup /shint_1st_obj_pos exch def
+ (2. Location of the first object in the shared objects section.) two_column
+
+ dup 32 bitread
+ dup /shint_1st_shared exch def
+ (3. The number of shared object entries for the first page.) two_column
+
+ dup 32 bitread
+ dup /shint_all_shared exch def
+ (4. Number of shared object entries for the shared objects section including 1st page.) two_column
+
+ dup 16 bitread
+ dup /shint_group_bits exch def
+ (5. Number of bits needed to represent the greatest number of objects in a shared object group.) two_column
+
+ dup 32 bitread
+ dup /shint_group_least_sz exch def
+ (6. Least length of a shared object group in bytes.) two_column
+
+ dup 16 bitread
+ dup /shint_group_diff_bits exch def
+ (7. Bits for the difference between the greatest and least length of a shared object group size.) two_column
+ pop
+
+ (1. length of the object group in bytes.) array_header
+ hint_stream bytealign
+ /shint_group_sz [
+ shint_all_shared {
+ hint_stream shint_group_diff_bits bitread
+ shint_group_least_sz add
+ } repeat
+ ] readonly def
+
+ shint_group_sz dump_array
+
+ (2. MD5 signature flag) array_header
+ hint_stream bytealign
+ /shint_md5_flags
+ [ shint_all_shared
+ { hint_stream 1 bitread
+ } repeat
+ ] readonly def
+
+ shint_md5_flags dump_array
+
+ (3. MD5 signature string) array_header
+ false shint_md5_flags { 0 ne or } forall {
+ shint_md5_flags {
+ 0 eq {
+ (<>)=
+ } {
+ hint_stream /S get 128 string
+ readstring pop
+ dup length 128 eq {
+ ==
+ } { pop (Error reading nd5 string.) ==
+ } ifelse
+ } ifelse
+ } forall
+ } {
+ () = (none) =
+ } ifelse
+
+ (4. The number of objects in the group.) array_header
+ hint_stream bytealign
+ /shint_group_cnt [
+ shint_all_shared {
+ hint_stream shint_group_bits bitread
+ } repeat
+ ] readonly def
+
+ shint_group_cnt dump_array
+
+ } bind def
+
+% Analyze the thumbnail hint table.
+/dump_thumbnail_table {
+ hint_stream
+
+ dup 32 bitread
+ dup /thint_1st_obj_id exch def
+ (1. Object number of the first thumbnail image.) two_column
+
+ dup 32 bitread
+ dup /thint_1st_obj_pos exch def
+ (2. Location of the first thumbnail image.) two_column
+
+ dup 32 bitread
+ dup /thint_page_cnt exch def
+ (3. Number of pages that have thumbnail images.) two_column
+
+ dup 16 bitread
+ dup /thint_no_thumbnail_bits exch def
+ (4. Bits for the max number of consecutive pages without a thumbnail image.) two_column
+
+ dup 32 bitread
+ dup /thint_min_sz exch def
+ (5. The least length of a thumbnail image in bytes.) two_column
+
+ dup 15 bitread
+ dup /thint_obj_sz_bits exch def
+ (6. Bits for the difference between max and min length of a thumbnail image.) two_column
+
+ dup 32 bitread
+ dup /thint_min_obj_cnt exch def
+ (7. The least number of objects in a thumbnail image.) two_column
+
+ dup 16 bitread
+ dup /thint_obj_cnt_bits exch def
+ (8. Bits for the difference between max and min number of objects in a thumbnail image.) two_column
+
+ dup 32 bitread
+ dup /thint_1st_shared_obj exch def
+ (9. First object in the thumbnail shared objects section.) two_column
+
+ dup 32 bitread
+ dup /thint_1st_shared_pos exch def
+ (10. Location of the first object in the thumbnail shared objects section.) two_column
+
+ dup 32 bitread
+ dup /thint_shared_cnt exch def
+ (11. Number of thumbnail shared objects.) two_column
+
+ dup 32 bitread
+ dup /thint_shared_section_sz exch def
+ (12. Length of the thumbnail shared objects section in bytes.) two_column
+
+ pop
+ LinearizationParams /N get
+
+ (1. The number of preceding pages lacking a thumbnail image.) array_header
+ hint_stream bytealign
+ /thint_no_thumbnail_pages [
+ 2 index {
+ hint_stream thint_no_thumbnail_bits bitread
+ } repeat
+ ] readonly def
+
+ thint_no_thumbnail_pages dump_array
+
+ (2. Number of objects in this page's thumbnail image.) array_header
+ hint_stream bytealign
+ /thint_page_obj_cnt [
+ 2 index {
+ hint_stream thint_obj_cnt_bits bitread
+ thint_min_obj_cnt add
+ } repeat
+ ] readonly def
+
+ thint_page_obj_cnt dump_array
+
+ (3. Length of this page's thumbnail image in bytes.) array_header
+ hint_stream bytealign
+ /thint_page_obj_sz [
+ 2 index {
+ hint_stream thint_obj_sz_bits bitread
+ thint_min_sz add
+ } repeat
+ ] readonly def
+
+ thint_page_obj_sz dump_array
+ pop
+} bind def
+
+% Analyze the generic hint table.
+% The hint field names are re-used.
+/dump_generic_table {
+ hint_stream
+
+ dup 32 bitread
+ dup /ghint_1st_obj exch def
+ (1. Object number of the first object in the group.) two_column
+
+ dup 32 bitread
+ dup /ghint_1st_obj_pos exch def
+ (2. Location of the first object in the group.) two_column
+
+ dup 32 bitread
+ dup /ghint_obj_cnt exch def
+ (3. Number of objects in the group.) two_column
+
+ dup 32 bitread
+ dup /ghint_group_sz exch def
+ (4. Length of the object group in bytes.) two_column
+
+ pop
+} bind def
+
+% Analyze the interactive hint table.
+% The hint field names are re-used.
+/dump_interactive_table {
+ hint_stream
+
+ dup 32 bitread
+ dup /ihint_1st_obj exch def
+ (1. Object number of the first object in the group.) two_column
+
+ dup 32 bitread
+ dup /ihint_1st_obj_pos exch def
+ (2. Location of the first object in the group.) two_column
+
+ dup 32 bitread
+ dup /ihint_obj_cnt exch def
+ (3. Number of objects in the group.) two_column
+
+ dup 32 bitread
+ dup /ihint_group_sz exch def
+ (4. Length of the object group in bytes.) two_column
+
+ dup 32 bitread
+ dup /ihint_shared_cnt exch def
+ (5. Number of shared object references.) two_column
+
+ dup 16 bitread
+ dup /ihint_shared_obj_bits exch def
+ (6. Bits for the max shared object id used by the interactive form or the logical structure hierarchy.)
+ 1 index hint_sobits ne {
+ (\n*** This fiels is not equal to max shared object ID bits ***) concatstrings
+ } if
+
+ pop
+
+ (7. Shared object identifier.) array_header
+ hint_stream bytealign
+ /ihint_shared_obj_id [
+ ihint_shared_cnt {
+ hint_stream hint_sobits bitread
+ } repeat
+ ] readonly def
+
+ ihint_shared_obj_id dump_array
+} bind def
+
+% Enumerate all documented hint tables.
+/dump_all_tables { % <<stream>> dump_all_tables -
+ (Page offset hint table) table_header
+ hint_stream 0 set_align
+ dump_page_offset_table
+
+ (S, Shared object hint table) table_header
+ dup /S .knownget {
+ hint_stream exch set_align
+ dump_shared_object_table
+ } {
+ (Required table is not found.) error_msg
+ } ifelse
+
+ dup /T .knownget {
+ (T, Thumbnail hint table) table_header
+ hint_stream exch set_align
+ dump_thumbnail_table
+ } if
+
+ dup /O .knownget {
+ (O, Outline hint table) table_header
+ hint_stream exch set_align
+ dump_generic_table
+ } if
+
+ dup /A .knownget {
+ (A, Thread information hint table) table_header
+ hint_stream exch set_align
+ dump_generic_table
+ } if
+
+ dup /E .knownget {
+ (E, Named destination hint table) table_header
+ hint_stream exch set_align
+ dump_generic_table
+ } if
+
+ dup /V .knownget {
+ (V, Interactive form hint table) table_header
+ hint_stream exch set_align
+ dump_interactive_table
+ } if
+
+ dup /I .knownget {
+ (I, Information dictionary hint table) table_header
+ hint_stream exch set_align
+ dump_generic_table
+ } if
+
+ dup /C .knownget {
+ (C, Logical structure hint table) table_header
+ hint_stream exch set_align
+ dump_interactive_table
+ } if
+
+ dup /L .knownget {
+ (L, Page label hint table) table_header
+ hint_stream exch set_align
+ dump_generic_table
+ } if
+
+ pop
+} bind def
+
+
+% Load PDF file and extract the hint stream.
+/pdf_dump_hints { % <infile> pdf_dump_hints -
+ dup (r) file % fname
+ false exch % fname F file
+ {
+ dup 7 string readstring pop % fname F file ()
+ (%PDF-1.) ne { pop exit } if % fname F file
+ dup 0 setfileposition
+ dup token not { pop exit } if % fname F file obj
+ dup type /integertype ne { pop exit } if % fname F file obj
+ 1 index token not { pop pop exit } if % fname F file obj gen
+ dup type /integertype ne {pop pop exit}if % fname F file obj gen
+ 4 2 roll % fname obj gen F file
+ dup 0 setfileposition
+ exch true or % fname obj gen file T
+ exit
+ } loop
+ {
+ pdfdict begin
+ pdfopenfile dup begin
+ 40 dict begin
+ /IDict exch def
+ .setsafe
+
+ % Read all objects into memory.
+ Trailer touch
+ resolveR % fname <<>>
+ dup /Linearized known {
+ dup /L get % fname <<>> Len
+ 3 -1 roll status not { 0 0 0 0 } if % <<>> Len
+ pop pop exch pop % <<>> Len len
+ eq {
+ /LinearizationParams exch def
+ LinearizationParams /H get
+ dup length 2 eq {
+ 0 get PDFoffset add PDFfile exch setfileposition
+ PDFfile token pop
+ PDFfile token pop
+ resolveR dup true resolvestream
+ /ReusableStreamDecode filter
+ bitstream dup bytealign
+ /hint_stream exch def
+
+ dump_all_tables
+ } {
+ pop
+ (Overflow hint stream is not supported.) =
+ } ifelse
+ } {
+ pop
+ (Wrong file length in linearization dictionary.) =
+ } ifelse
+ } {
+ pop (The file is not linearized.) =
+ } ifelse
+ end % temporary dict
+ end % IDict
+ end
+ } {
+ pop
+ (Input file is not a valid PDF file.) =
+ } ifelse
+} bind def
+
+% Initial setup
+/dump_hints {
+ counttomark 1 eq {
+ exch pop
+ save exch
+ 3000000 setvmthreshold
+ pdfoptdict begin
+ pdf_dump_hints
+ end
+ restore
+ true
+ } {
+ cleartomark false
+ } ifelse
+} bind def
+
+/shellarguments {false} def
+(pdfopt.ps) runlibfile
+currentdict /shellarguments undef
+
+% Check for command line arguments.
+mark shellarguments {
+ dump_hints not {
+ (Usage: gs -dNODISPLAY -- dumphint.ps input.pdf) = flush
+ } if
+} {
+ pop
+} ifelse
+
+% EOF
diff --git a/Master/tlpkg/tlgs/lib/fixmswrd.pl b/Master/tlpkg/tlgs/lib/fixmswrd.pl
new file mode 100644
index 00000000000..521aaeabd4b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fixmswrd.pl
@@ -0,0 +1,206 @@
+#!/usr/bin/perl
+# $Id: fixmswrd.pl 6300 2005-12-28 19:56:24Z giles $
+
+# (C) 1997 Anthony Shipman
+#
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the authors be held liable for any damages
+# arising from the use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not
+# claim that you wrote the original software. If you use this software
+# in a product, an acknowledgment in the product documentation would be
+# appreciated but is not required.
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+# 3. This notice may not be removed or altered from any source distribution.
+#
+# Anthony Shipman shipmana@acm.org
+
+# This program patches the postscript generated by MS Word printer drivers
+# so that they work with ghostview 1.5. The problem is that the document
+# structuring conventions are not followed by Word. The pages are supposed
+# to be independent but they depend on a dictionary being opened outside
+# of the pages. The erroneous structure is
+#
+# %%EndSetup
+# NTPSOct95 begin
+# %%Page: 1 1
+# <text>
+# showpage
+# %%Page: 2 2
+# <text>
+# showpage
+# ......
+# %%Trailer
+# ...
+# end
+# %%EOF
+#
+# This only works if the all of the structure around the pages is preserved.
+# The opening of NTPSOct95 happens outside of any structured section so
+# it is never seen by ghostview. We change the structure to
+#
+# %%EndSetup
+# %%Page: 1 1
+# NTPSOct95 begin
+# <text>
+# showpage
+# end
+# %%Page: 2 2
+# NTPSOct95 begin
+# <text>
+# showpage
+# end
+# ......
+# %%Trailer
+# ...
+# %%EOF
+#
+# That is the dictionary opening is repeated inside each page.
+#
+# We add a comment to the document to mark that it has been converted.
+# This has the form
+# %LOCALGhostviewPatched
+#
+# Usage:
+# fixmswrd [-v] [file [output-file]]
+
+require 'getopts.pl';
+
+#=================================================================
+
+$program = "fixmswrd";
+
+sub usage {
+ die "Usage: $program [-v] [file [output-file]]\n";
+}
+
+#=================================================================
+
+&Getopts("v") || &usage;
+
+$verbose = $opt_v;
+
+
+$infile = shift(@ARGV);
+if ($infile)
+{
+ open(INFILE, $infile) || die "$program: Cannot read from $infile\n";
+ $handle = "INFILE";
+}
+else
+{
+ $handle = "STDIN";
+}
+
+
+$outfile = shift(@ARGV);
+if ($outfile)
+{
+ open(OUTFILE, ">$outfile") || die "$program: Cannot write to $outfile\n";
+ select(OUTFILE);
+}
+
+# This reads the header comments and detects the presence of the marker.
+$have_marker = 0;
+
+undef $dict_name;
+undef $dict_line;
+
+&read_comments;
+&put_comments;
+
+if ($have_marker)
+{
+ $verbose && print STDERR "$program: Warning - already converted\n";
+
+ while(<$handle>) # pass the file through unchanged.
+ {
+ print;
+ }
+}
+else
+{
+ $seen_trailer = 0;
+
+ while(<$handle>) # massage the file
+ {
+ if ($dict_line)
+ {
+ next if (/$dict_line/o); # drop the old begin line
+ $seen_trailer = 1 if (/^%%Trailer/);
+ next if ($seen_trailer and /^end/); # drop the old end line
+ }
+
+ print;
+
+ if (/^%%Page:/)
+ {
+ print "$dict_name begin\n"; # add at the start of the page
+ }
+ elsif (/^showpage/)
+ {
+ print "end\n"; # add at the end of the page
+ }
+ elsif (/^%%BeginResource: procset (\S+)/)
+ {
+ $dict_name = $1;
+ $dict_line = "^$dict_name begin";
+ }
+ elsif (/^%%BeginProcSet: (\S+)/) # for older document versions
+ {
+ $dict_name = $1;
+ $dict_line = "^$dict_name begin";
+ }
+ elsif (/^%%EndProlog:/)
+ {
+ unless ($dict_line)
+ {
+ $verbose &&
+ print STDERR "$program: Warning - unrecognised document structure\n";
+ }
+ }
+ }
+}
+
+exit 0;
+
+#=================================================================
+
+
+# This reads all of the header comments into an array which we can write
+# out again later. In addition we detect the presence of the marker comment.
+
+sub read_comments
+{
+ @headers = ();
+
+ while (<$handle>)
+ { # without chopping
+ push(@headers, $_);
+ if (/^%LOCALGhostviewPatched/)
+ {
+ $have_marker = 1;
+ }
+ last if /^%%EndComments/;
+ }
+}
+
+
+
+sub put_comments
+{
+ foreach $h (@headers)
+ {
+ if (!$have_marker and ($h =~ /^%%EndComments/))
+ {
+ print "%LOCALGhostviewPatched\n";
+ }
+ print $h; # contains the newline
+ }
+}
diff --git a/Master/tlpkg/tlgs/lib/fonts/COPYING b/Master/tlpkg/tlgs/lib/fonts/COPYING
new file mode 100644
index 00000000000..d60c31a97a5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Master/tlpkg/tlgs/lib/fonts/LICENSE-utopia.txt b/Master/tlpkg/tlgs/lib/fonts/LICENSE-utopia.txt
new file mode 100644
index 00000000000..9755d3cec66
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/LICENSE-utopia.txt
@@ -0,0 +1,84 @@
+The agreement below gives the TeX Users Group (TUG) the right to
+sublicense, and grant such sublicensees the right to further sublicense,
+any or all of the rights enumerated below. TUG hereby does so
+sublicense all such rights, irrevocably and in perpetuity, to any and
+all interested parties.
+
+--Karl Berry, TUG President,
+on behalf of the TeX Users Group board and members
+17 November 2006
+http://tug.org/fonts/utopia
+
+------------------------------------------------------------
+October 11, 2006
+
+RE: License to TeX Users Group for the Utopia Typeface
+
+Adobe Systems Incorporated ("Adobe") hereby grants to the TeX Users
+Group and its members a nonexclusive, royalty-free, perpetual license to
+the typeface software for the Utopia Regular, Utopia Italic, Utopia Bold
+and Utopia bold Italic typefaces, including Adobe Type 1 font programs
+for each style (collectively, the "Software") as set forth below.
+
+Adobe grants the TeX Users Group a license under its copyrights, to use,
+reproduce, display and distribute the Software for any purpose and
+without fee provided that the following copyright notice appears in all
+whole and partial copies of the Software and provided that the following
+trademark symbol and attribution appear in all unmodified copies of the
+Software:
+
+Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved.
+(alternatively, @1989, 1991 Adobe Systems Incorporated. All rights reserved.)
+Utopia(R)
+Utopia is either a registered trademark or trademark of Adobe Systems
+Incorporated in the United States and/or other countries. Used under
+license.
+
+Adobe also grants to the TeX Users Group a license to modify the
+Software for any purpose and redistribute such modifications, for any
+purpose and royalty-free, provided that the modified Software shall not
+use the font name(s) or trademark(s), in whole or in part, unless
+explicit written permission is granted by Adobe. This restriction
+applies to all references stored in the Software for identification
+purposes, such as the font menu name and other font description
+fields. The TeX Users Group is also permitted to sublicense, and grant
+such sublicensees the right to further sublicense, any or all the
+foregoing rights through multiple tiers of distribution. The licenses
+granted herein are granted in perpetuity and may not be terminated by
+either party unless such termination is based on a breach of the terms
+and conditions herein stated.
+
+Adobe retains ownership of the copyright in the Software. The TeX Users
+Group agrees that Adobe and its suppliers are the sole and exclusive
+owners of all rights, title and interest, including all copyrights,
+patents, trademarks, trade names, trade secrets and other intellectual
+property rights in the Software. No title or ownership of the Software,
+any copies of the Software, or the patent, copyright, trade secret,
+trademark, trade name or other proprietary rights contained in the
+Software is transferred to the TeX Users Group.
+
+The Adobe trademarks shall not be used in advertising pertaining to the
+distribution of the Software without express prior permission from
+Adobe. Any such use shall be in accordance with the Adobe trademark
+guidelines, available on the Adobe website at
+http://www.adobe.com/misc/pdfs/TM GuideforThirdPartiesFinal.pdf.
+If any portion of the Software is changed, it cannot be marketed under
+Adobe's trademarks unless Adobe, in its sole discretion, approves by a
+prior writing the quality of the resulting implementation.
+
+The TeX Users Group shall have the right to evaluate the Software
+provided by Adobe.
+
+ADOBE MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR
+ANY PURPOSE. IT IS PROVIDED "AS-IS" WITHOUT EXPRESS OR IMPLIED
+WARRANTY. ADOBE DISCLAIMS ALL WARRANTIES WITH REGARD TO THE SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF THIRD PARTY RIGHTS. IN NO
+EVENT SHALL ADOBE BE LIABLE TO YOU OR ANY OTHER PARTY FOR ANY SPECIAL,
+INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER WHETHER IN
+AN ACTION OF CONTRACT NEGLIGENCE, STRICT LIABILITY OR ANY OTHER ACTION
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE. ADOBE WILL NOT PROVIDE ANY TRAINING OR OTHER SUPPORT FOR THE
+SOFTWARE.
+
+Adobe Document Id: 4400078611
diff --git a/Master/tlpkg/tlgs/lib/fonts/README-utopia.txt b/Master/tlpkg/tlgs/lib/fonts/README-utopia.txt
new file mode 100644
index 00000000000..9fbd5f90cf0
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/README-utopia.txt
@@ -0,0 +1,41 @@
+Copyright 2006 TeX Users Group.
+You may freely use, modify and/or distribute this README file.
+
+This is a copy of the Utopia Type1 fonts and accompanying AFM files
+which Adobe originally contributed to the X consortium many years ago.
+
+In 2006, Adobe relicensed them to the TeX Users Group, under similar
+terms as the previous contribution, but now explicitly clarifying that
+the modifications to the fonts, and redistribution of the modified
+versions, was allowed. (This was always the intent; unfortunately, the
+original wording was ambiguous.) For the actual license, please see
+LICENSE-utopia.txt in this directory. (Original url:
+http://tug.org/fonts/utopia/LICENSE-utopia.txt)
+
+The contents of the fonts themselves are completely unchanged from the
+original X donation. Additional TeX support files, and derived fonts,
+are available in other TeX packages, notably fourier and mathdesign
+(they are available through http://www.ctan.org). This small directory
+simply provides Adobe's original files.
+
+The filenames here have been changed for use with TeX:
+ putr8a = Utopia-Regular
+ putri8a = Utopia-Italic
+ putb8a = Utopia-Bold
+ putbi8a = Utopia-BoldItalic
+
+These fonts are:
+Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved.
+Utopia(R)
+Utopia is either a registered trademark or trademark of Adobe Systems
+Incorporated in the United States and/or other countries. Used under
+license.
+
+We thank Adobe for taking the time to make this clarification for the
+benefit of the free software community. Terry O'Donnell deserves
+particular thanks for pushing the changes through, but many people were
+involved by the end. We are grateful to them all.
+
+--Karl Berry, TUG President
+on behalf of the TeX Users Group board and members
+17 November 2006
diff --git a/Master/tlpkg/tlgs/lib/fonts/README.base35 b/Master/tlpkg/tlgs/lib/fonts/README.base35
new file mode 100644
index 00000000000..e3d3d8e7d72
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/README.base35
@@ -0,0 +1,89 @@
+These are the PostScript Base fonts, provided by
+
+ URW++ Design and Development Incorporated
+ Poppenbuetteler Bogen 29A
+ D-22399 Hamburg
+ Germany
+ tel. +49 (40) 60 60 50
+ fax +49 (40) 60 60 51 11
+ http://www.urwpp.de
+
+for distribution under the GNU General Public License.
+Each of these fonts is individually covered by the license:
+for licensing purposes, they are not "part of" any larger
+entity.
+
+These are the same fonts as supplied with, e.g., GNU
+Ghostscript 7.06. However, all font files were renamed for
+use with TeX according to the "Karl-Berry" scheme", and the
+font files uhvr8a.pfb and uhvro8a.pfb were patched by
+
+ Primoz Peterlin
+ Ljubljana, Slovenija.
+ mailto:primoz.peterlin@biofiz.mf.uni-lj.si
+ http://biofiz.mf.uni-lj.si/~peterlin/
+
+to fix the glyph "germandbls". (The original files are
+provided with the names uhvr8a-105.pfb and uhvro8a-105.pfb.)
+
+All fonts carry the version number 1.05, except for uzdr
+(1.005) and the patched uhvr8a.pfb and uhvro8a.pfb (1.05a).
+
+TeX systems can use these fonts as drop-in replacements for
+Adobe's PostScript Base fonts, which are not free. No
+particular TeX metrics, virtual fonts or macro files are
+provided for URW's base fonts. They are to be used with the
+same support files as Adobe's originals, i.e., with the
+files of the PSNFSS collection.
+
+AFM and PFM files are supplied here for the sake of
+completeness only. They are normally not required for use
+with TeX.
+
+This collection was put together by
+
+ Walter Schmidt
+ mailto:was@vr-web.de
+
+
+KB name FontName (URW) corresponding Adobe font:
+--------------------------------------------------------------------------
+
+uagd8a URWGothicL-Demi pagd8a AvantGarde-Demi
+uagdo8a URWGothicL-DemiObli pagdo8a AvantGarde-DemiOblique
+uagk8a URWGothicL-Book pagk8a AvantGarde-Book
+uagko8a URWGothicL-BookObli pagko8a AvantGarde-BookOblique
+ubkd8a URWBookmanL-DemiBold pbkd8a Bookman-Demi
+ubkdi8a URWBookmanL-DemiBoldItal pbkdi8a Bookman-DemiItalic
+ubkl8a URWBookmanL-Ligh pbkl8a Bookman-Light
+ubkli8a URWBookmanL-LighItal pbkli8a Bookman-LightItalic
+ucrb8a NimbusMonL-Bold pcrb8a Courier-Bold
+ucrbo8a NimbusMonL-BoldObli pcrbo8a Courier-BoldOblique
+ucrr8a NimbusMonL-Regu pcrr8a Courier
+ucrro8a NimbusMonL-ReguObli pcrro8a Courier-Oblique
+uhvb8a NimbusSanL-Bold phvb8a Helvetica-Bold
+uhvb8ac NimbusSanL-BoldCond phvb8an Helvetica-Narrow-Bold
+uhvbo8a NimbusSanL-BoldItal phvbo8a Helvetica-BoldOblique
+uhvbo8ac NimbusSanL-BoldCondItal phvbo8an Helvetica-Narrow-BoldOblique
+uhvr8a NimbusSanL-Regu phvr8a Helvetica
+uhvr8ac NimbusSanL-ReguCond phvr8an Helvetica-Narrow
+uhvro8a NimbusSanL-ReguItal phvro8a Helvetica-Oblique
+uhvro8ac NimbusSanL-ReguCondItal phvro8an Helvetica-Narrow-Oblique
+uncb8a CenturySchL-Bold pncb8a NewCenturySchlbk-Bold
+uncbi8a CenturySchL-BoldItal pncbi8a NewCenturySchlbk-BoldItalic
+uncr8a CenturySchL-Roma pncr8a NewCenturySchlbk-Roman
+uncri8a CenturySchL-Ital pncri8a NewCenturySchlbk-Italic
+uplb8a URWPalladioL-Bold pplb8a Palatino-Bold
+uplbi8a URWPalladioL-BoldItal pplbi8a Palatino-BoldItalic
+uplr8a URWPalladioL-Roma pplr8a Palatino-Roman
+uplri8a URWPalladioL-Ital pplri8a Palatino-Italic
+usyr StandardSymL psyr Symbol
+utmb8a NimbusRomNo9L-Medi ptmb8a Times-Bold
+utmbi8a NimbusRomNo9L-MediItal ptmbi8a Times-BoldItalic
+utmr8a NimbusRomNo9L-Regu ptmr8a Times-Roman
+utmri8a NimbusRomNo9L-ReguItal ptmri8a Times-Italic
+uzcmi8a URWChanceryL-MediItal pzcmi8a ZapfChancery-MediumItalic
+uzdr Dingbats pzdr ZapfDingbats
+
+
+-- finis
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchb8a.afm b/Master/tlpkg/tlgs/lib/fonts/bchb8a.afm
new file mode 100644
index 00000000000..31721010cfd
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchb8a.afm
@@ -0,0 +1,628 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0632
+Comment bitsManufacturingDate Tue Nov 6 02:14:13 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530632
+FontName CharterBT-Bold
+FullName Bitstream Charter Bold
+FamilyName Bitstream Charter
+Weight Bold
+ItalicAngle 0.00
+IsFixedPitch false
+FontBBox -166 -237 1263 963
+UnderlinePosition -109
+UnderlineThickness 91
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 488
+Ascender 740
+Descender -219
+StartCharMetrics 228
+C 32 ; WX 291 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 340 ; N exclam ; B 94 -8 247 685 ;
+C 34 ; WX 339 ; N quotedbl ; B 40 418 299 715 ;
+C 35 ; WX 736 ; N numbersign ; B 56 -24 675 710 ;
+C 36 ; WX 581 ; N dollar ; B 61 -102 533 742 ;
+C 37 ; WX 888 ; N percent ; B 36 -12 863 683 ;
+C 38 ; WX 741 ; N ampersand ; B 52 -12 725 684 ;
+C 39 ; WX 255 ; N quoteright ; B 47 395 220 698 ;
+C 40 ; WX 428 ; N parenleft ; B 90 -142 387 718 ;
+C 41 ; WX 428 ; N parenright ; B 37 -142 330 718 ;
+C 42 ; WX 500 ; N asterisk ; B 53 338 447 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 289 ; N comma ; B 30 -176 221 129 ;
+C 45 ; WX 326 ; N hyphen ; B 36 191 291 291 ;
+C 46 ; WX 289 ; N period ; B 65 -8 224 151 ;
+C 47 ; WX 491 ; N slash ; B -28 -93 472 672 ;
+C 48 ; WX 581 ; N zero ; B 39 -12 549 683 ;
+C 49 ; WX 581 ; N one ; B 108 0 495 681 ;
+C 50 ; WX 581 ; N two ; B 48 0 533 684 ;
+C 51 ; WX 581 ; N three ; B 42 -11 523 682 ;
+C 52 ; WX 581 ; N four ; B 25 -32 566 677 ;
+C 53 ; WX 581 ; N five ; B 54 -10 525 672 ;
+C 54 ; WX 581 ; N six ; B 46 -13 554 714 ;
+C 55 ; WX 581 ; N seven ; B 75 -34 556 672 ;
+C 56 ; WX 581 ; N eight ; B 41 -16 540 685 ;
+C 57 ; WX 581 ; N nine ; B 42 -54 546 683 ;
+C 58 ; WX 340 ; N colon ; B 94 -8 252 489 ;
+C 59 ; WX 340 ; N semicolon ; B 67 -176 255 489 ;
+C 60 ; WX 833 ; N less ; B 128 22 704 574 ;
+C 61 ; WX 833 ; N equal ; B 124 156 710 440 ;
+C 62 ; WX 833 ; N greater ; B 129 22 704 574 ;
+C 63 ; WX 487 ; N question ; B 35 -8 437 684 ;
+C 64 ; WX 917 ; N at ; B 74 -154 854 693 ;
+C 65 ; WX 651 ; N A ; B -12 0 670 678 ;
+C 66 ; WX 628 ; N B ; B 28 0 590 672 ;
+C 67 ; WX 638 ; N C ; B 40 -13 602 683 ;
+C 68 ; WX 716 ; N D ; B 28 0 682 672 ;
+C 69 ; WX 596 ; N E ; B 28 0 566 672 ;
+C 70 ; WX 552 ; N F ; B 25 0 529 672 ;
+C 71 ; WX 710 ; N G ; B 40 -12 691 683 ;
+C 72 ; WX 760 ; N H ; B 30 0 734 672 ;
+C 73 ; WX 354 ; N I ; B 29 0 329 672 ;
+C 74 ; WX 465 ; N J ; B 11 -13 465 672 ;
+C 75 ; WX 650 ; N K ; B 29 0 672 672 ;
+C 76 ; WX 543 ; N L ; B 27 0 533 672 ;
+C 77 ; WX 883 ; N M ; B 24 0 863 672 ;
+C 78 ; WX 727 ; N N ; B 24 0 711 672 ;
+C 79 ; WX 752 ; N O ; B 40 -17 718 687 ;
+C 80 ; WX 587 ; N P ; B 24 0 569 672 ;
+C 81 ; WX 752 ; N Q ; B 39 -179 720 687 ;
+C 82 ; WX 671 ; N R ; B 30 -7 692 672 ;
+C 83 ; WX 568 ; N S ; B 58 -12 517 683 ;
+C 84 ; WX 603 ; N T ; B 15 0 594 672 ;
+C 85 ; WX 705 ; N U ; B 20 -13 695 672 ;
+C 86 ; WX 635 ; N V ; B -21 -3 661 672 ;
+C 87 ; WX 946 ; N W ; B 1 0 945 672 ;
+C 88 ; WX 637 ; N X ; B -1 0 644 672 ;
+C 89 ; WX 610 ; N Y ; B -11 0 627 672 ;
+C 90 ; WX 592 ; N Z ; B 44 0 550 672 ;
+C 91 ; WX 443 ; N bracketleft ; B 135 -133 406 709 ;
+C 92 ; WX 491 ; N backslash ; B -8 -93 486 672 ;
+C 93 ; WX 443 ; N bracketright ; B 42 -133 312 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -152 ;
+C 96 ; WX 255 ; N quoteleft ; B 49 395 222 699 ;
+C 97 ; WX 544 ; N a ; B 40 -10 535 500 ;
+C 98 ; WX 577 ; N b ; B 9 -2 547 740 ;
+C 99 ; WX 476 ; N c ; B 34 -8 464 498 ;
+C 100 ; WX 596 ; N d ; B 36 -10 577 740 ;
+C 101 ; WX 524 ; N e ; B 37 -9 493 501 ;
+C 102 ; WX 341 ; N f ; B 30 0 412 744 ;
+C 103 ; WX 551 ; N g ; B 33 -218 555 498 ;
+C 104 ; WX 597 ; N h ; B 16 0 586 740 ;
+C 105 ; WX 305 ; N i ; B 29 0 293 724 ;
+C 106 ; WX 297 ; N j ; B -80 -215 242 724 ;
+C 107 ; WX 553 ; N k ; B 17 0 572 740 ;
+C 108 ; WX 304 ; N l ; B 22 0 292 740 ;
+C 109 ; WX 892 ; N m ; B 30 0 883 500 ;
+C 110 ; WX 605 ; N n ; B 27 0 594 499 ;
+C 111 ; WX 577 ; N o ; B 36 -9 547 499 ;
+C 112 ; WX 591 ; N p ; B 21 -219 560 500 ;
+C 113 ; WX 575 ; N q ; B 37 -218 572 499 ;
+C 114 ; WX 421 ; N r ; B 24 0 421 498 ;
+C 115 ; WX 447 ; N s ; B 40 -11 411 500 ;
+C 116 ; WX 358 ; N t ; B 18 -5 357 599 ;
+C 117 ; WX 600 ; N u ; B 22 -10 583 499 ;
+C 118 ; WX 513 ; N v ; B -7 0 535 488 ;
+C 119 ; WX 799 ; N w ; B -1 0 811 488 ;
+C 120 ; WX 531 ; N x ; B 11 0 532 488 ;
+C 121 ; WX 515 ; N y ; B -5 -219 537 486 ;
+C 122 ; WX 495 ; N z ; B 45 0 466 486 ;
+C 123 ; WX 493 ; N braceleft ; B 46 -134 421 705 ;
+C 124 ; WX 500 ; N bar ; B 207 -237 294 764 ;
+C 125 ; WX 493 ; N braceright ; B 62 -134 438 705 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 212 747 384 ;
+C 161 ; WX 340 ; N exclamdown ; B 93 -8 246 685 ;
+C 162 ; WX 581 ; N cent ; B 58 -103 504 612 ;
+C 163 ; WX 581 ; N sterling ; B 42 0 540 680 ;
+C 164 ; WX 167 ; N fraction ; B -166 -1 333 672 ;
+C 165 ; WX 595 ; N yen ; B -7 0 604 672 ;
+C 166 ; WX 581 ; N florin ; B 12 -149 535 683 ;
+C 167 ; WX 500 ; N section ; B 45 -142 455 720 ;
+C 168 ; WX 606 ; N currency ; B 36 166 571 699 ;
+C 169 ; WX 175 ; N quotesingle ; B 40 418 135 715 ;
+C 170 ; WX 475 ; N quotedblleft ; B 49 395 443 699 ;
+C 171 ; WX 449 ; N guillemotleft ; B 34 53 404 427 ;
+C 172 ; WX 255 ; N guilsinglleft ; B 34 53 207 427 ;
+C 173 ; WX 255 ; N guilsinglright ; B 37 53 211 427 ;
+C 174 ; WX 622 ; N fi ; B 30 0 605 745 ;
+C 175 ; WX 627 ; N fl ; B 30 0 616 746 ;
+C 177 ; WX 500 ; N endash ; B 0 195 500 286 ;
+C 178 ; WX 500 ; N dagger ; B 17 -130 484 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B 17 -132 484 718 ;
+C 180 ; WX 289 ; N periodcentered ; B 65 256 224 415 ;
+C 182 ; WX 491 ; N paragraph ; B 18 -79 458 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 255 ; N quotesinglbase ; B 32 -174 205 130 ;
+C 185 ; WX 475 ; N quotedblbase ; B 35 -174 429 130 ;
+C 186 ; WX 475 ; N quotedblright ; B 47 395 441 698 ;
+C 187 ; WX 449 ; N guillemotright ; B 42 53 412 427 ;
+C 188 ; WX 1000 ; N ellipsis ; B 87 -8 914 151 ;
+C 189 ; WX 1287 ; N perthousand ; B 36 -12 1263 683 ;
+C 191 ; WX 487 ; N questiondown ; B 37 -8 440 684 ;
+C 193 ; WX 500 ; N grave ; B 85 551 307 742 ;
+C 194 ; WX 500 ; N acute ; B 205 551 428 742 ;
+C 195 ; WX 500 ; N circumflex ; B 96 551 404 742 ;
+C 196 ; WX 500 ; N tilde ; B 87 570 411 723 ;
+C 197 ; WX 500 ; N macron ; B 85 603 417 676 ;
+C 198 ; WX 500 ; N breve ; B 98 567 403 719 ;
+C 199 ; WX 500 ; N dotaccent ; B 185 578 316 713 ;
+C 200 ; WX 500 ; N dieresis ; B 83 578 417 710 ;
+C 202 ; WX 500 ; N ring ; B 131 546 369 784 ;
+C 203 ; WX 500 ; N cedilla ; B 171 -230 374 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 107 551 490 742 ;
+C 206 ; WX 500 ; N ogonek ; B 176 -225 336 0 ;
+C 207 ; WX 500 ; N caron ; B 96 551 404 742 ;
+C 208 ; WX 1000 ; N emdash ; B 0 195 1000 286 ;
+C 225 ; WX 890 ; N AE ; B -59 0 863 672 ;
+C 227 ; WX 408 ; N ordfeminine ; B 30 323 402 681 ;
+C 232 ; WX 543 ; N Lslash ; B 9 0 533 672 ;
+C 233 ; WX 752 ; N Oslash ; B 40 -83 718 754 ;
+C 234 ; WX 1010 ; N OE ; B 39 -11 980 682 ;
+C 235 ; WX 433 ; N ordmasculine ; B 27 324 411 680 ;
+C 241 ; WX 768 ; N ae ; B 40 -10 735 500 ;
+C 245 ; WX 305 ; N dotlessi ; B 29 0 293 497 ;
+C 248 ; WX 304 ; N lslash ; B -3 0 328 740 ;
+C 249 ; WX 577 ; N oslash ; B 37 -83 548 571 ;
+C 250 ; WX 861 ; N oe ; B 37 -9 827 500 ;
+C 251 ; WX 642 ; N germandbls ; B 18 -9 622 743 ;
+C -1 ; WX 651 ; N Aacute ; B -12 0 670 930 ;
+C -1 ; WX 651 ; N Acircumflex ; B -12 0 670 930 ;
+C -1 ; WX 651 ; N Adieresis ; B -12 0 670 898 ;
+C -1 ; WX 651 ; N Agrave ; B -12 0 670 930 ;
+C -1 ; WX 651 ; N Aring ; B -12 0 670 963 ;
+C -1 ; WX 651 ; N Atilde ; B -12 0 670 911 ;
+C -1 ; WX 638 ; N Ccedilla ; B 40 -230 602 683 ;
+C -1 ; WX 596 ; N Eacute ; B 28 0 566 930 ;
+C -1 ; WX 596 ; N Ecircumflex ; B 28 0 566 930 ;
+C -1 ; WX 596 ; N Edieresis ; B 28 0 566 898 ;
+C -1 ; WX 596 ; N Egrave ; B 28 0 566 930 ;
+C -1 ; WX 354 ; N Iacute ; B 29 0 355 930 ;
+C -1 ; WX 354 ; N Icircumflex ; B 23 0 331 930 ;
+C -1 ; WX 354 ; N Idieresis ; B 10 0 344 898 ;
+C -1 ; WX 354 ; N Igrave ; B 12 0 329 930 ;
+C -1 ; WX 727 ; N Ntilde ; B 24 0 711 911 ;
+C -1 ; WX 752 ; N Oacute ; B 40 -17 718 930 ;
+C -1 ; WX 752 ; N Ocircumflex ; B 40 -17 718 930 ;
+C -1 ; WX 752 ; N Odieresis ; B 40 -17 718 898 ;
+C -1 ; WX 752 ; N Ograve ; B 40 -17 718 930 ;
+C -1 ; WX 752 ; N Otilde ; B 40 -17 718 911 ;
+C -1 ; WX 568 ; N Scaron ; B 58 -12 517 930 ;
+C -1 ; WX 705 ; N Uacute ; B 20 -13 695 930 ;
+C -1 ; WX 705 ; N Ucircumflex ; B 20 -13 695 930 ;
+C -1 ; WX 705 ; N Udieresis ; B 20 -13 695 898 ;
+C -1 ; WX 705 ; N Ugrave ; B 20 -13 695 930 ;
+C -1 ; WX 610 ; N Ydieresis ; B -11 0 627 898 ;
+C -1 ; WX 592 ; N Zcaron ; B 44 0 550 930 ;
+C -1 ; WX 544 ; N aacute ; B 40 -10 535 742 ;
+C -1 ; WX 544 ; N acircumflex ; B 40 -10 535 742 ;
+C -1 ; WX 544 ; N adieresis ; B 40 -10 535 710 ;
+C -1 ; WX 544 ; N agrave ; B 40 -10 535 742 ;
+C -1 ; WX 544 ; N aring ; B 40 -10 535 784 ;
+C -1 ; WX 544 ; N atilde ; B 40 -10 535 723 ;
+C -1 ; WX 476 ; N ccedilla ; B 34 -230 464 498 ;
+C -1 ; WX 524 ; N eacute ; B 37 -9 493 742 ;
+C -1 ; WX 524 ; N ecircumflex ; B 37 -9 493 742 ;
+C -1 ; WX 524 ; N edieresis ; B 37 -9 493 710 ;
+C -1 ; WX 524 ; N egrave ; B 37 -9 493 742 ;
+C -1 ; WX 305 ; N iacute ; B 29 0 331 742 ;
+C -1 ; WX 305 ; N icircumflex ; B -2 0 307 742 ;
+C -1 ; WX 305 ; N idieresis ; B -15 0 320 710 ;
+C -1 ; WX 305 ; N igrave ; B -13 0 293 742 ;
+C -1 ; WX 605 ; N ntilde ; B 27 0 594 723 ;
+C -1 ; WX 577 ; N oacute ; B 36 -9 547 742 ;
+C -1 ; WX 577 ; N ocircumflex ; B 36 -9 547 742 ;
+C -1 ; WX 577 ; N odieresis ; B 36 -9 547 710 ;
+C -1 ; WX 577 ; N ograve ; B 36 -9 547 742 ;
+C -1 ; WX 577 ; N otilde ; B 36 -9 547 723 ;
+C -1 ; WX 447 ; N scaron ; B 40 -11 411 742 ;
+C -1 ; WX 600 ; N uacute ; B 22 -10 583 742 ;
+C -1 ; WX 600 ; N ucircumflex ; B 22 -10 583 742 ;
+C -1 ; WX 600 ; N udieresis ; B 22 -10 583 710 ;
+C -1 ; WX 600 ; N ugrave ; B 22 -10 583 742 ;
+C -1 ; WX 515 ; N ydieresis ; B -5 -219 537 710 ;
+C -1 ; WX 495 ; N zcaron ; B 45 0 466 742 ;
+C -1 ; WX 800 ; N trademark ; B 111 398 710 662 ;
+C -1 ; WX 876 ; N copyright ; B 61 -50 825 730 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 175 710 421 ;
+C -1 ; WX 876 ; N registered ; B 61 -50 825 730 ;
+C -1 ; WX 833 ; N minus ; B 124 256 710 340 ;
+C -1 ; WX 716 ; N Eth ; B 15 0 682 672 ;
+C -1 ; WX 587 ; N Thorn ; B 32 0 572 672 ;
+C -1 ; WX 610 ; N Yacute ; B -11 0 627 930 ;
+C -1 ; WX 500 ; N brokenbar ; B 207 -172 294 699 ;
+C -1 ; WX 329 ; N degree ; B 20 424 309 713 ;
+C -1 ; WX 833 ; N divide ; B 124 45 710 551 ;
+C -1 ; WX 569 ; N eth ; B 34 -10 540 744 ;
+C -1 ; WX 578 ; N mu ; B -53 -206 546 433 ;
+C -1 ; WX 833 ; N multiply ; B 139 16 704 581 ;
+C -1 ; WX 899 ; N onehalf ; B 68 -1 869 677 ;
+C -1 ; WX 899 ; N onequarter ; B 68 -18 890 677 ;
+C -1 ; WX 383 ; N onesuperior ; B 71 268 327 677 ;
+C -1 ; WX 833 ; N plusminus ; B 124 7 710 590 ;
+C -1 ; WX 591 ; N thorn ; B 20 -219 562 740 ;
+C -1 ; WX 899 ; N threequarters ; B 26 -18 890 678 ;
+C -1 ; WX 383 ; N threesuperior ; B 27 261 346 678 ;
+C -1 ; WX 383 ; N twosuperior ; B 31 268 352 679 ;
+C -1 ; WX 515 ; N yacute ; B -5 -219 537 742 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 361
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A T -111
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A f -19
+KPX A t -19
+KPX A v -32
+KPX A w -46
+KPX A y -23
+KPX A fi -19
+KPX A fl -19
+KPX A quotedblright -130
+KPX B hyphen 37
+KPX B C 19
+KPX B G 19
+KPX B O 19
+KPX B S 19
+KPX B V -37
+KPX B W -19
+KPX B Y -19
+KPX B Oslash 19
+KPX B OE 19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C A -19
+KPX C S 19
+KPX C quotedblright 37
+KPX C Aring -19
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D Y -19
+KPX D Aring -19
+KPX F comma -190
+KPX F hyphen -74
+KPX F period -190
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -97
+KPX F a -79
+KPX F e -65
+KPX F i -19
+KPX F o -46
+KPX F r -37
+KPX F u -37
+KPX F y -37
+KPX F quotesinglbase -56
+KPX F quotedblbase -56
+KPX F ae -79
+KPX F oslash -46
+KPX F oe -46
+KPX F Aring -97
+KPX G hyphen 19
+KPX G T -19
+KPX G W -19
+KPX G Y -23
+KPX J A -37
+KPX J Aring -37
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -37
+KPX K Y -28
+KPX K a 19
+KPX K e -37
+KPX K o -37
+KPX K u -19
+KPX K y -102
+KPX K quotesinglbase 37
+KPX K quotedblbase 37
+KPX K Oslash -28
+KPX K OE -28
+KPX K ae 19
+KPX K oslash -37
+KPX K oe -37
+KPX K Aring -23
+KPX L quoteright -167
+KPX L T -83
+KPX L U -19
+KPX L V -120
+KPX L W -88
+KPX L Y -102
+KPX L quoteleft -74
+KPX L a 19
+KPX L e 19
+KPX L o 19
+KPX L y -56
+KPX L quotedblleft -74
+KPX L quotesinglbase 19
+KPX L quotedblbase 19
+KPX L quotedblright -167
+KPX L ae 19
+KPX L oslash 19
+KPX L oe 19
+KPX O comma -60
+KPX O hyphen 37
+KPX O period -60
+KPX O V -19
+KPX O X -19
+KPX P comma -259
+KPX P hyphen -93
+KPX P period -259
+KPX P colon -37
+KPX P semicolon -37
+KPX P A -93
+KPX P U -19
+KPX P a -37
+KPX P e -37
+KPX P o -32
+KPX P quotesinglbase -93
+KPX P quotedblbase -93
+KPX P ae -37
+KPX P oslash -32
+KPX P oe -32
+KPX P Aring -93
+KPX Q quoteright 19
+KPX Q hyphen 37
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R colon -19
+KPX R semicolon -19
+KPX R T -37
+KPX R V -56
+KPX R W -42
+KPX R Y -51
+KPX R quoteleft -37
+KPX R e -37
+KPX R o -37
+KPX R u -37
+KPX R y -46
+KPX R quotedblleft -37
+KPX R quotesinglbase 37
+KPX R quotedblbase 37
+KPX R quotedblright -37
+KPX R oslash -37
+KPX R oe -37
+KPX T quoteright 19
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -111
+KPX T T 19
+KPX T quoteleft 37
+KPX T a -97
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -97
+KPX T r -74
+KPX T s -74
+KPX T u -111
+KPX T w -74
+KPX T y -93
+KPX T quotedblleft 37
+KPX T guillemotleft -37
+KPX T guilsinglleft -37
+KPX T quotedblright 19
+KPX T ae -97
+KPX T oslash -97
+KPX T oe -97
+KPX T Aring -111
+KPX U A -32
+KPX U J -28
+KPX U Aring -32
+KPX V quoteright 37
+KPX V comma -222
+KPX V hyphen -93
+KPX V period -222
+KPX V colon -102
+KPX V semicolon -102
+KPX V A -79
+KPX V O -19
+KPX V a -111
+KPX V e -106
+KPX V i -28
+KPX V o -93
+KPX V u -65
+KPX V y -65
+KPX V quotesinglbase -74
+KPX V quotedblbase -74
+KPX V quotedblright 37
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -111
+KPX V oslash -93
+KPX V oe -93
+KPX V Aring -79
+KPX W quoteright 19
+KPX W comma -176
+KPX W hyphen -74
+KPX W period -176
+KPX W colon -88
+KPX W semicolon -88
+KPX W A -60
+KPX W a -88
+KPX W e -83
+KPX W i -37
+KPX W o -88
+KPX W r -65
+KPX W u -60
+KPX W y -42
+KPX W quotesinglbase -37
+KPX W quotedblbase -37
+KPX W quotedblright 19
+KPX W ae -88
+KPX W oslash -88
+KPX W oe -88
+KPX W Aring -60
+KPX X hyphen -37
+KPX X A -19
+KPX X C -19
+KPX X O -19
+KPX X e -37
+KPX X quotesinglbase 19
+KPX X quotedblbase 19
+KPX X Oslash -19
+KPX X OE -19
+KPX X Aring -19
+KPX Y quoteright 28
+KPX Y comma -130
+KPX Y hyphen -130
+KPX Y period -130
+KPX Y colon -125
+KPX Y semicolon -125
+KPX Y A -60
+KPX Y C -19
+KPX Y a -116
+KPX Y e -125
+KPX Y i -37
+KPX Y o -116
+KPX Y u -88
+KPX Y guillemotleft -56
+KPX Y guilsinglleft -56
+KPX Y quotesinglbase -37
+KPX Y quotedblbase -37
+KPX Y quotedblright 28
+KPX Y ae -116
+KPX Y oslash -116
+KPX Y oe -116
+KPX Y Aring -60
+KPX quoteleft A -130
+KPX quoteleft J -148
+KPX quoteleft V 56
+KPX quoteleft W 37
+KPX quoteleft X 37
+KPX quoteleft Y 37
+KPX quoteleft v 28
+KPX quoteleft w 19
+KPX quoteleft y 19
+KPX quoteleft AE -111
+KPX quoteleft Aring -130
+KPX f quoteright 74
+KPX f comma -37
+KPX f hyphen -19
+KPX f period -37
+KPX f quoteleft 37
+KPX f quotedblleft 37
+KPX f quotedblright 74
+KPX r comma -111
+KPX r period -111
+KPX r quotesinglbase -37
+KPX r quotedblbase -37
+KPX v quoteright 28
+KPX v comma -120
+KPX v period -120
+KPX v quotedblright 28
+KPX w quoteright 19
+KPX w comma -120
+KPX w period -120
+KPX w quoteleft 19
+KPX w quotedblleft 19
+KPX w quotesinglbase -37
+KPX w quotedblbase -37
+KPX w quotedblright 19
+KPX x e -19
+KPX x o -19
+KPX x oslash -19
+KPX x oe -19
+KPX y comma -134
+KPX y period -134
+KPX y quoteleft 19
+KPX y quotedblleft 19
+KPX quotedblleft A -130
+KPX quotedblleft J -148
+KPX quotedblleft V 56
+KPX quotedblleft W 37
+KPX quotedblleft X 37
+KPX quotedblleft Y 37
+KPX quotedblleft v 28
+KPX quotedblleft w 19
+KPX quotedblleft y 19
+KPX quotedblleft AE -111
+KPX quotedblleft Aring -130
+KPX guilsinglright Y -56
+KPX quotesinglbase A 19
+KPX quotesinglbase V -37
+KPX quotesinglbase X 19
+KPX quotesinglbase Y -19
+KPX quotesinglbase AE 74
+KPX quotesinglbase Aring 19
+KPX quotedblbase A 19
+KPX quotedblbase V -37
+KPX quotedblbase X 19
+KPX quotedblbase Y -19
+KPX quotedblbase AE 74
+KPX quotedblbase Aring 19
+KPX guillemotright Y -56
+KPX AE hyphen 19
+KPX Lslash quoteright -167
+KPX Lslash T -83
+KPX Lslash U -19
+KPX Lslash V -120
+KPX Lslash W -88
+KPX Lslash Y -102
+KPX Lslash quoteleft -74
+KPX Lslash a 19
+KPX Lslash e 19
+KPX Lslash o 19
+KPX Lslash y -56
+KPX Lslash quotedblleft -74
+KPX Lslash quotesinglbase 19
+KPX Lslash quotedblbase 19
+KPX Lslash quotedblright -167
+KPX Lslash ae 19
+KPX Lslash oslash 19
+KPX Lslash oe 19
+KPX Oslash comma -60
+KPX Oslash hyphen 37
+KPX Oslash period -60
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Aring quoteright -130
+KPX Aring T -111
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring f -19
+KPX Aring t -19
+KPX Aring v -32
+KPX Aring w -46
+KPX Aring y -23
+KPX Aring fi -19
+KPX Aring fl -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth Y -19
+KPX Eth Aring -19
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchb8a.pfb b/Master/tlpkg/tlgs/lib/fonts/bchb8a.pfb
new file mode 100644
index 00000000000..07011728968
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchb8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchbi8a.afm b/Master/tlpkg/tlgs/lib/fonts/bchbi8a.afm
new file mode 100644
index 00000000000..d16eb097077
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchbi8a.afm
@@ -0,0 +1,645 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0633
+Comment bitsManufacturingDate Tue Nov 6 02:16:48 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530633
+FontName CharterBT-BoldItalic
+FullName Bitstream Charter Bold Italic
+FamilyName Bitstream Charter
+Weight Bold
+ItalicAngle 11.0000
+IsFixedPitch false
+FontBBox -190 -237 1243 972
+UnderlinePosition -109
+UnderlineThickness 91
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 495
+Ascender 736
+Descender -218
+StartCharMetrics 228
+C 32 ; WX 293 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 340 ; N exclam ; B 43 -8 295 685 ;
+C 34 ; WX 339 ; N quotedbl ; B 40 418 299 715 ;
+C 35 ; WX 751 ; N numbersign ; B 56 -24 689 710 ;
+C 36 ; WX 586 ; N dollar ; B 24 -105 544 745 ;
+C 37 ; WX 898 ; N percent ; B 54 -12 846 683 ;
+C 38 ; WX 730 ; N ampersand ; B 19 -13 698 685 ;
+C 39 ; WX 261 ; N quoteright ; B 63 395 269 699 ;
+C 40 ; WX 420 ; N parenleft ; B 66 -142 459 718 ;
+C 41 ; WX 420 ; N parenright ; B -62 -142 331 718 ;
+C 42 ; WX 500 ; N asterisk ; B 96 338 490 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 292 ; N comma ; B -57 -176 168 130 ;
+C 45 ; WX 320 ; N hyphen ; B 9 191 282 291 ;
+C 46 ; WX 294 ; N period ; B 22 -6 175 149 ;
+C 47 ; WX 481 ; N slash ; B -119 -93 525 672 ;
+C 48 ; WX 586 ; N zero ; B 29 -13 556 684 ;
+C 49 ; WX 586 ; N one ; B 79 0 438 681 ;
+C 50 ; WX 586 ; N two ; B -4 0 531 683 ;
+C 51 ; WX 586 ; N three ; B 11 -11 540 683 ;
+C 52 ; WX 586 ; N four ; B -2 -33 551 677 ;
+C 53 ; WX 586 ; N five ; B 19 -10 552 672 ;
+C 54 ; WX 586 ; N six ; B 31 -12 532 719 ;
+C 55 ; WX 586 ; N seven ; B 74 -34 612 672 ;
+C 56 ; WX 586 ; N eight ; B 24 -18 549 686 ;
+C 57 ; WX 586 ; N nine ; B 47 -58 558 684 ;
+C 58 ; WX 346 ; N colon ; B 49 -6 263 487 ;
+C 59 ; WX 346 ; N semicolon ; B -25 -176 263 487 ;
+C 60 ; WX 833 ; N less ; B 128 22 704 574 ;
+C 61 ; WX 833 ; N equal ; B 124 156 710 440 ;
+C 62 ; WX 833 ; N greater ; B 129 22 704 574 ;
+C 63 ; WX 492 ; N question ; B 74 -8 471 684 ;
+C 64 ; WX 936 ; N at ; B 76 -154 871 693 ;
+C 65 ; WX 634 ; N A ; B -68 0 613 678 ;
+C 66 ; WX 628 ; N B ; B -24 0 580 672 ;
+C 67 ; WX 625 ; N C ; B 36 -13 637 684 ;
+C 68 ; WX 702 ; N D ; B -26 0 661 672 ;
+C 69 ; WX 581 ; N E ; B -22 0 580 672 ;
+C 70 ; WX 539 ; N F ; B -23 0 570 671 ;
+C 71 ; WX 693 ; N G ; B 38 -12 671 685 ;
+C 72 ; WX 747 ; N H ; B -25 0 768 672 ;
+C 73 ; WX 353 ; N I ; B -21 0 370 672 ;
+C 74 ; WX 474 ; N J ; B -46 -14 497 672 ;
+C 75 ; WX 653 ; N K ; B -26 -7 695 672 ;
+C 76 ; WX 529 ; N L ; B -26 0 489 672 ;
+C 77 ; WX 894 ; N M ; B -25 0 913 672 ;
+C 78 ; WX 712 ; N N ; B -27 0 744 672 ;
+C 79 ; WX 729 ; N O ; B 37 -14 690 684 ;
+C 80 ; WX 581 ; N P ; B -24 0 583 672 ;
+C 81 ; WX 729 ; N Q ; B 36 -165 705 684 ;
+C 82 ; WX 645 ; N R ; B -22 -7 632 671 ;
+C 83 ; WX 553 ; N S ; B 23 -8 509 684 ;
+C 84 ; WX 584 ; N T ; B 37 0 628 672 ;
+C 85 ; WX 701 ; N U ; B 71 -13 735 672 ;
+C 86 ; WX 617 ; N V ; B 26 -3 677 672 ;
+C 87 ; WX 921 ; N W ; B 43 0 963 672 ;
+C 88 ; WX 608 ; N X ; B -66 0 658 672 ;
+C 89 ; WX 586 ; N Y ; B 26 0 656 672 ;
+C 90 ; WX 572 ; N Z ; B -18 0 581 672 ;
+C 91 ; WX 449 ; N bracketleft ; B 51 -133 472 709 ;
+C 92 ; WX 481 ; N backslash ; B 21 -93 505 672 ;
+C 93 ; WX 449 ; N bracketright ; B -43 -133 379 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -152 ;
+C 96 ; WX 261 ; N quoteleft ; B 76 395 282 699 ;
+C 97 ; WX 572 ; N a ; B 18 -9 548 494 ;
+C 98 ; WX 556 ; N b ; B 26 -9 508 736 ;
+C 99 ; WX 437 ; N c ; B 15 -11 410 493 ;
+C 100 ; WX 579 ; N d ; B 21 -9 558 736 ;
+C 101 ; WX 464 ; N e ; B 18 -10 431 491 ;
+C 102 ; WX 325 ; N f ; B -155 -214 447 733 ;
+C 103 ; WX 517 ; N g ; B -31 -218 528 492 ;
+C 104 ; WX 595 ; N h ; B 20 -7 561 736 ;
+C 105 ; WX 318 ; N i ; B 28 -7 294 725 ;
+C 106 ; WX 297 ; N j ; B -146 -215 285 724 ;
+C 107 ; WX 559 ; N k ; B 22 -8 544 736 ;
+C 108 ; WX 307 ; N l ; B 34 -9 280 736 ;
+C 109 ; WX 883 ; N m ; B 32 -7 852 494 ;
+C 110 ; WX 600 ; N n ; B 26 -7 569 494 ;
+C 111 ; WX 550 ; N o ; B 18 -11 501 493 ;
+C 112 ; WX 565 ; N p ; B -64 -218 519 494 ;
+C 113 ; WX 562 ; N q ; B 23 -218 516 496 ;
+C 114 ; WX 449 ; N r ; B 26 0 451 494 ;
+C 115 ; WX 403 ; N s ; B -12 -10 363 494 ;
+C 116 ; WX 366 ; N t ; B 39 -8 370 601 ;
+C 117 ; WX 599 ; N u ; B 28 -10 572 489 ;
+C 118 ; WX 492 ; N v ; B -8 -1 472 495 ;
+C 119 ; WX 768 ; N w ; B -2 0 741 495 ;
+C 120 ; WX 510 ; N x ; B -38 -7 512 495 ;
+C 121 ; WX 494 ; N y ; B -79 -216 514 494 ;
+C 122 ; WX 465 ; N z ; B -20 -14 461 503 ;
+C 123 ; WX 487 ; N braceleft ; B 47 -134 430 705 ;
+C 124 ; WX 500 ; N bar ; B 207 -237 294 764 ;
+C 125 ; WX 487 ; N braceright ; B 58 -134 441 705 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 212 747 384 ;
+C 161 ; WX 340 ; N exclamdown ; B 42 -8 294 685 ;
+C 162 ; WX 586 ; N cent ; B 45 -104 535 610 ;
+C 163 ; WX 586 ; N sterling ; B -12 0 562 677 ;
+C 164 ; WX 167 ; N fraction ; B -190 0 353 672 ;
+C 165 ; WX 601 ; N yen ; B 9 0 652 668 ;
+C 166 ; WX 586 ; N florin ; B -63 -149 586 683 ;
+C 167 ; WX 500 ; N section ; B -11 -142 490 720 ;
+C 168 ; WX 606 ; N currency ; B 36 166 571 699 ;
+C 169 ; WX 175 ; N quotesingle ; B 40 418 135 715 ;
+C 170 ; WX 481 ; N quotedblleft ; B 77 395 504 699 ;
+C 171 ; WX 450 ; N guillemotleft ; B 10 54 429 425 ;
+C 172 ; WX 266 ; N guilsinglleft ; B 10 54 228 425 ;
+C 173 ; WX 266 ; N guilsinglright ; B -13 54 205 425 ;
+C 174 ; WX 621 ; N fi ; B -154 -214 600 735 ;
+C 175 ; WX 629 ; N fl ; B -154 -214 603 736 ;
+C 177 ; WX 500 ; N endash ; B -26 195 498 286 ;
+C 178 ; WX 500 ; N dagger ; B 44 -130 511 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B -25 -132 511 718 ;
+C 180 ; WX 292 ; N periodcentered ; B 70 258 223 413 ;
+C 182 ; WX 492 ; N paragraph ; B 18 -79 467 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 261 ; N quotesinglbase ; B -54 -174 151 130 ;
+C 185 ; WX 481 ; N quotedblbase ; B -51 -174 375 130 ;
+C 186 ; WX 481 ; N quotedblright ; B 64 395 490 699 ;
+C 187 ; WX 450 ; N guillemotright ; B -13 54 406 425 ;
+C 188 ; WX 1000 ; N ellipsis ; B 41 -6 862 149 ;
+C 189 ; WX 1291 ; N perthousand ; B 54 -12 1243 683 ;
+C 191 ; WX 492 ; N questiondown ; B 6 -8 400 684 ;
+C 193 ; WX 500 ; N grave ; B 164 551 349 742 ;
+C 194 ; WX 500 ; N acute ; B 247 551 506 742 ;
+C 195 ; WX 500 ; N circumflex ; B 137 551 446 742 ;
+C 196 ; WX 500 ; N tilde ; B 132 570 486 723 ;
+C 197 ; WX 500 ; N macron ; B 137 607 482 675 ;
+C 198 ; WX 500 ; N breve ; B 167 567 477 719 ;
+C 199 ; WX 500 ; N dotaccent ; B 237 576 370 713 ;
+C 200 ; WX 500 ; N dieresis ; B 137 578 472 711 ;
+C 202 ; WX 500 ; N ring ; B 199 551 428 780 ;
+C 203 ; WX 500 ; N cedilla ; B 58 -230 279 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 150 551 578 742 ;
+C 206 ; WX 500 ; N ogonek ; B 83 -225 243 0 ;
+C 207 ; WX 500 ; N caron ; B 174 551 483 742 ;
+C 208 ; WX 1000 ; N emdash ; B -22 195 1000 286 ;
+C 225 ; WX 894 ; N AE ; B -103 0 896 672 ;
+C 227 ; WX 429 ; N ordfeminine ; B 13 318 411 671 ;
+C 232 ; WX 529 ; N Lslash ; B -26 0 489 672 ;
+C 233 ; WX 729 ; N Oslash ; B 37 -82 691 751 ;
+C 234 ; WX 1003 ; N OE ; B 37 -13 999 684 ;
+C 235 ; WX 413 ; N ordmasculine ; B 13 317 376 671 ;
+C 241 ; WX 719 ; N ae ; B 4 -9 684 494 ;
+C 245 ; WX 318 ; N dotlessi ; B 28 -7 294 494 ;
+C 248 ; WX 307 ; N lslash ; B -17 -9 331 736 ;
+C 249 ; WX 550 ; N oslash ; B 19 -87 501 568 ;
+C 250 ; WX 795 ; N oe ; B 20 -10 759 494 ;
+C 251 ; WX 622 ; N germandbls ; B -161 -214 572 738 ;
+C -1 ; WX 634 ; N Aacute ; B -68 0 613 928 ;
+C -1 ; WX 634 ; N Acircumflex ; B -68 0 613 928 ;
+C -1 ; WX 634 ; N Adieresis ; B -68 0 613 897 ;
+C -1 ; WX 634 ; N Agrave ; B -68 0 613 928 ;
+C -1 ; WX 634 ; N Aring ; B -68 0 613 972 ;
+C -1 ; WX 634 ; N Atilde ; B -68 0 613 909 ;
+C -1 ; WX 625 ; N Ccedilla ; B 36 -230 637 684 ;
+C -1 ; WX 581 ; N Eacute ; B -22 0 580 928 ;
+C -1 ; WX 581 ; N Ecircumflex ; B -22 0 580 928 ;
+C -1 ; WX 581 ; N Edieresis ; B -22 0 580 897 ;
+C -1 ; WX 581 ; N Egrave ; B -22 0 580 928 ;
+C -1 ; WX 353 ; N Iacute ; B -21 0 448 928 ;
+C -1 ; WX 353 ; N Icircumflex ; B -21 0 388 928 ;
+C -1 ; WX 353 ; N Idieresis ; B -21 0 414 897 ;
+C -1 ; WX 353 ; N Igrave ; B -21 0 370 928 ;
+C -1 ; WX 712 ; N Ntilde ; B -27 0 744 909 ;
+C -1 ; WX 729 ; N Oacute ; B 37 -14 690 928 ;
+C -1 ; WX 729 ; N Ocircumflex ; B 37 -14 690 928 ;
+C -1 ; WX 729 ; N Odieresis ; B 37 -14 690 897 ;
+C -1 ; WX 729 ; N Ograve ; B 37 -14 690 928 ;
+C -1 ; WX 729 ; N Otilde ; B 37 -14 690 909 ;
+C -1 ; WX 553 ; N Scaron ; B 23 -8 525 928 ;
+C -1 ; WX 701 ; N Uacute ; B 71 -13 735 928 ;
+C -1 ; WX 701 ; N Ucircumflex ; B 71 -13 735 928 ;
+C -1 ; WX 701 ; N Udieresis ; B 71 -13 735 897 ;
+C -1 ; WX 701 ; N Ugrave ; B 71 -13 735 928 ;
+C -1 ; WX 586 ; N Ydieresis ; B 26 0 656 897 ;
+C -1 ; WX 572 ; N Zcaron ; B -18 0 581 928 ;
+C -1 ; WX 572 ; N aacute ; B 18 -9 548 742 ;
+C -1 ; WX 572 ; N acircumflex ; B 18 -9 548 742 ;
+C -1 ; WX 572 ; N adieresis ; B 18 -9 548 711 ;
+C -1 ; WX 572 ; N agrave ; B 18 -9 548 742 ;
+C -1 ; WX 572 ; N aring ; B 18 -9 548 774 ;
+C -1 ; WX 572 ; N atilde ; B 18 -9 548 723 ;
+C -1 ; WX 437 ; N ccedilla ; B 15 -230 410 493 ;
+C -1 ; WX 464 ; N eacute ; B 18 -10 488 742 ;
+C -1 ; WX 464 ; N ecircumflex ; B 18 -10 431 742 ;
+C -1 ; WX 464 ; N edieresis ; B 18 -10 454 711 ;
+C -1 ; WX 464 ; N egrave ; B 18 -10 431 742 ;
+C -1 ; WX 318 ; N iacute ; B 28 -7 398 742 ;
+C -1 ; WX 318 ; N icircumflex ; B 28 -7 338 742 ;
+C -1 ; WX 318 ; N idieresis ; B 28 -7 364 711 ;
+C -1 ; WX 318 ; N igrave ; B 28 -7 294 742 ;
+C -1 ; WX 600 ; N ntilde ; B 26 -7 569 723 ;
+C -1 ; WX 550 ; N oacute ; B 18 -11 531 742 ;
+C -1 ; WX 550 ; N ocircumflex ; B 18 -11 501 742 ;
+C -1 ; WX 550 ; N odieresis ; B 18 -11 501 711 ;
+C -1 ; WX 550 ; N ograve ; B 18 -11 501 742 ;
+C -1 ; WX 550 ; N otilde ; B 18 -11 511 723 ;
+C -1 ; WX 403 ; N scaron ; B -12 -10 435 742 ;
+C -1 ; WX 599 ; N uacute ; B 28 -10 572 742 ;
+C -1 ; WX 599 ; N ucircumflex ; B 28 -10 572 742 ;
+C -1 ; WX 599 ; N udieresis ; B 28 -10 572 711 ;
+C -1 ; WX 599 ; N ugrave ; B 28 -10 572 742 ;
+C -1 ; WX 494 ; N ydieresis ; B -79 -216 514 711 ;
+C -1 ; WX 465 ; N zcaron ; B -20 -14 466 742 ;
+C -1 ; WX 817 ; N trademark ; B 113 398 724 663 ;
+C -1 ; WX 894 ; N copyright ; B 62 -50 842 730 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 175 710 421 ;
+C -1 ; WX 894 ; N registered ; B 62 -50 842 730 ;
+C -1 ; WX 833 ; N minus ; B 124 256 710 340 ;
+C -1 ; WX 702 ; N Eth ; B -25 0 661 672 ;
+C -1 ; WX 576 ; N Thorn ; B -26 0 553 666 ;
+C -1 ; WX 586 ; N Yacute ; B 26 0 656 928 ;
+C -1 ; WX 500 ; N brokenbar ; B 207 -172 294 699 ;
+C -1 ; WX 329 ; N degree ; B 20 424 309 713 ;
+C -1 ; WX 833 ; N divide ; B 124 45 710 551 ;
+C -1 ; WX 561 ; N eth ; B 25 -12 524 740 ;
+C -1 ; WX 578 ; N mu ; B -53 -206 546 433 ;
+C -1 ; WX 833 ; N multiply ; B 139 16 704 581 ;
+C -1 ; WX 905 ; N onehalf ; B 49 0 871 677 ;
+C -1 ; WX 905 ; N onequarter ; B 49 -19 884 677 ;
+C -1 ; WX 387 ; N onesuperior ; B 52 268 289 677 ;
+C -1 ; WX 833 ; N plusminus ; B 124 7 710 590 ;
+C -1 ; WX 565 ; N thorn ; B -64 -218 519 736 ;
+C -1 ; WX 905 ; N threequarters ; B 6 -19 884 678 ;
+C -1 ; WX 387 ; N threesuperior ; B 7 261 357 679 ;
+C -1 ; WX 387 ; N twosuperior ; B -3 268 351 679 ;
+C -1 ; WX 494 ; N yacute ; B -79 -216 514 742 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 378
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A colon 19
+KPX A semicolon 19
+KPX A S 19
+KPX A T -37
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A y -19
+KPX A quotedblright -130
+KPX B hyphen 56
+KPX B S 19
+KPX B V -19
+KPX B W -19
+KPX B Y -19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C S 19
+KPX C quotedblright 37
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D W -19
+KPX D Y -28
+KPX D Aring -19
+KPX F comma -167
+KPX F hyphen -56
+KPX F period -167
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -32
+KPX F a -60
+KPX F e -65
+KPX F i -19
+KPX F o -46
+KPX F r -19
+KPX F u -19
+KPX F quotesinglbase -37
+KPX F quotedblbase -37
+KPX F ae -60
+KPX F oslash -46
+KPX F oe -46
+KPX F Aring -32
+KPX G hyphen 19
+KPX J A -23
+KPX J Aring -23
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -42
+KPX K Y -32
+KPX K a -19
+KPX K e -19
+KPX K o -37
+KPX K u -19
+KPX K y -83
+KPX K quotesinglbase 56
+KPX K quotedblbase 56
+KPX K Oslash -28
+KPX K OE -28
+KPX K ae -19
+KPX K oslash -37
+KPX K oe -37
+KPX K Aring -23
+KPX L quoteright -185
+KPX L hyphen 56
+KPX L A 19
+KPX L O -19
+KPX L T -74
+KPX L U -37
+KPX L V -102
+KPX L W -88
+KPX L Y -88
+KPX L quoteleft -56
+KPX L u -19
+KPX L y -74
+KPX L quotedblleft -56
+KPX L quotesinglbase 19
+KPX L quotedblbase 19
+KPX L quotedblright -185
+KPX L Oslash -19
+KPX L OE -19
+KPX L Aring 19
+KPX O comma -37
+KPX O hyphen 19
+KPX O period -37
+KPX O V -19
+KPX O X -19
+KPX O Y -19
+KPX P comma -250
+KPX P hyphen -56
+KPX P period -250
+KPX P colon -19
+KPX P semicolon -19
+KPX P A -74
+KPX P U -19
+KPX P W -19
+KPX P Y -19
+KPX P a -37
+KPX P e -37
+KPX P i 19
+KPX P n 19
+KPX P o -32
+KPX P r 19
+KPX P u 19
+KPX P y 19
+KPX P quotesinglbase -93
+KPX P quotedblbase -93
+KPX P ae -37
+KPX P oslash -32
+KPX P oe -32
+KPX P Aring -74
+KPX Q quoteright 19
+KPX Q hyphen 19
+KPX Q quotesinglbase 56
+KPX Q quotedblbase 56
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R comma 19
+KPX R hyphen -19
+KPX R period 19
+KPX R C -19
+KPX R T -19
+KPX R V -19
+KPX R W -23
+KPX R Y -37
+KPX R quoteleft -19
+KPX R e -19
+KPX R o -19
+KPX R quotedblleft -19
+KPX R quotesinglbase 56
+KPX R quotedblbase 56
+KPX R quotedblright -37
+KPX R oslash -19
+KPX R oe -19
+KPX S A 19
+KPX S G 19
+KPX S O 19
+KPX S Q 19
+KPX S S -19
+KPX S Oslash 19
+KPX S OE 19
+KPX S Aring 19
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -56
+KPX T T 19
+KPX T a -116
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -97
+KPX T r -56
+KPX T s -93
+KPX T u -93
+KPX T w -93
+KPX T y -74
+KPX T guillemotleft -37
+KPX T guilsinglleft -37
+KPX T quotesinglbase -19
+KPX T quotedblbase -19
+KPX T ae -116
+KPX T oslash -97
+KPX T oe -97
+KPX T Aring -56
+KPX U A -28
+KPX U J -19
+KPX U Z -19
+KPX U Aring -28
+KPX V comma -185
+KPX V hyphen -56
+KPX V period -185
+KPX V colon -93
+KPX V semicolon -93
+KPX V A -97
+KPX V O -19
+KPX V a -93
+KPX V e -93
+KPX V i -28
+KPX V o -60
+KPX V u -32
+KPX V y -28
+KPX V quotesinglbase -37
+KPX V quotedblbase -37
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -93
+KPX V oslash -60
+KPX V oe -60
+KPX V Aring -97
+KPX W comma -134
+KPX W hyphen -37
+KPX W period -134
+KPX W colon -28
+KPX W semicolon -28
+KPX W A -28
+KPX W a -69
+KPX W e -93
+KPX W i -19
+KPX W o -69
+KPX W r -28
+KPX W u -28
+KPX W y -23
+KPX W quotesinglbase -37
+KPX W quotedblbase -37
+KPX W ae -69
+KPX W oslash -69
+KPX W oe -69
+KPX W Aring -28
+KPX X hyphen -19
+KPX X A -19
+KPX X e -37
+KPX X guilsinglright 19
+KPX X quotesinglbase 37
+KPX X quotedblbase 37
+KPX X guillemotright 19
+KPX X Aring -19
+KPX Y quoteright 19
+KPX Y comma -130
+KPX Y hyphen -111
+KPX Y period -130
+KPX Y colon -106
+KPX Y semicolon -106
+KPX Y A -46
+KPX Y a -116
+KPX Y e -116
+KPX Y i -19
+KPX Y o -97
+KPX Y u -56
+KPX Y guillemotleft -37
+KPX Y guilsinglleft -37
+KPX Y quotesinglbase -19
+KPX Y quotedblbase -19
+KPX Y quotedblright 19
+KPX Y ae -116
+KPX Y oslash -97
+KPX Y oe -97
+KPX Y Aring -46
+KPX Z hyphen 37
+KPX quoteleft A -130
+KPX quoteleft J -130
+KPX quoteleft T 19
+KPX quoteleft V 56
+KPX quoteleft W 37
+KPX quoteleft X 37
+KPX quoteleft Y 56
+KPX quoteleft AE -148
+KPX quoteleft Aring -130
+KPX f quoteright 93
+KPX f comma -83
+KPX f hyphen -19
+KPX f period -83
+KPX f quoteleft 37
+KPX f quotedblleft 37
+KPX f quotedblright 93
+KPX r comma -130
+KPX r hyphen -19
+KPX r period -130
+KPX r g -19
+KPX r h -19
+KPX v comma -46
+KPX v hyphen 37
+KPX v period -46
+KPX w comma -56
+KPX w hyphen 19
+KPX w period -56
+KPX y comma -60
+KPX y hyphen 19
+KPX y period -60
+KPX quotedblleft A -130
+KPX quotedblleft J -130
+KPX quotedblleft T 19
+KPX quotedblleft V 56
+KPX quotedblleft W 37
+KPX quotedblleft X 37
+KPX quotedblleft Y 56
+KPX quotedblleft AE -148
+KPX quotedblleft Aring -130
+KPX quotesinglbase A 37
+KPX quotesinglbase C -37
+KPX quotesinglbase D 19
+KPX quotesinglbase F 19
+KPX quotesinglbase G -19
+KPX quotesinglbase H 19
+KPX quotesinglbase J 19
+KPX quotesinglbase T -37
+KPX quotesinglbase V -56
+KPX quotesinglbase W -37
+KPX quotesinglbase X 37
+KPX quotesinglbase Y -37
+KPX quotesinglbase f 37
+KPX quotesinglbase v -37
+KPX quotesinglbase w -37
+KPX quotesinglbase fi 37
+KPX quotesinglbase fl 37
+KPX quotesinglbase AE 74
+KPX quotesinglbase germandbls 37
+KPX quotesinglbase Aring 37
+KPX quotesinglbase Eth 19
+KPX quotedblbase A 37
+KPX quotedblbase C -37
+KPX quotedblbase D 19
+KPX quotedblbase F 19
+KPX quotedblbase G -19
+KPX quotedblbase H 19
+KPX quotedblbase J 19
+KPX quotedblbase T -37
+KPX quotedblbase V -56
+KPX quotedblbase W -37
+KPX quotedblbase X 37
+KPX quotedblbase Y -37
+KPX quotedblbase f 37
+KPX quotedblbase v -37
+KPX quotedblbase w -37
+KPX quotedblbase fi 37
+KPX quotedblbase fl 37
+KPX quotedblbase AE 74
+KPX quotedblbase germandbls 37
+KPX quotedblbase Aring 37
+KPX quotedblbase Eth 19
+KPX AE hyphen 19
+KPX Lslash quoteright -185
+KPX Lslash hyphen 56
+KPX Lslash A 19
+KPX Lslash O -19
+KPX Lslash T -74
+KPX Lslash U -37
+KPX Lslash V -102
+KPX Lslash W -88
+KPX Lslash Y -88
+KPX Lslash quoteleft -56
+KPX Lslash u -19
+KPX Lslash y -74
+KPX Lslash quotedblleft -56
+KPX Lslash quotesinglbase 19
+KPX Lslash quotedblbase 19
+KPX Lslash quotedblright -185
+KPX Lslash Oslash -19
+KPX Lslash OE -19
+KPX Lslash Aring 19
+KPX Oslash comma -37
+KPX Oslash hyphen 19
+KPX Oslash period -37
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Oslash Y -19
+KPX Aring quoteright -130
+KPX Aring colon 19
+KPX Aring semicolon 19
+KPX Aring S 19
+KPX Aring T -37
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring y -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth W -19
+KPX Eth Y -28
+KPX Eth Aring -19
+KPX Thorn quoteright -37
+KPX Thorn comma -148
+KPX Thorn period -148
+KPX Thorn quotedblright -37
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchbi8a.pfb b/Master/tlpkg/tlgs/lib/fonts/bchbi8a.pfb
new file mode 100644
index 00000000000..d68f639bb01
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchbi8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchr8a.afm b/Master/tlpkg/tlgs/lib/fonts/bchr8a.afm
new file mode 100644
index 00000000000..6d58e7c65a7
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchr8a.afm
@@ -0,0 +1,538 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0648
+Comment bitsManufacturingDate Tue Nov 6 02:52:05 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530648
+FontName CharterBT-Roman
+FullName Bitstream Charter
+FamilyName Bitstream Charter
+Weight Normal
+ItalicAngle 0.00
+IsFixedPitch false
+FontBBox -162 -237 1194 963
+UnderlinePosition -109
+UnderlineThickness 61
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 482
+Ascender 737
+Descender -218
+StartCharMetrics 228
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 338 ; N exclam ; B 112 -9 226 683 ;
+C 34 ; WX 331 ; N quotedbl ; B 43 421 288 715 ;
+C 35 ; WX 745 ; N numbersign ; B 63 -24 681 710 ;
+C 36 ; WX 556 ; N dollar ; B 57 -102 498 744 ;
+C 37 ; WX 852 ; N percent ; B 30 -12 822 683 ;
+C 38 ; WX 704 ; N ampersand ; B 53 -12 683 683 ;
+C 39 ; WX 201 ; N quoteright ; B 30 442 170 714 ;
+C 40 ; WX 417 ; N parenleft ; B 105 -142 386 718 ;
+C 41 ; WX 417 ; N parenright ; B 31 -142 311 718 ;
+C 42 ; WX 500 ; N asterisk ; B 53 337 447 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 278 ; N comma ; B 39 -169 208 107 ;
+C 45 ; WX 319 ; N hyphen ; B 47 207 272 275 ;
+C 46 ; WX 278 ; N period ; B 75 -10 203 118 ;
+C 47 ; WX 481 ; N slash ; B -29 -93 461 672 ;
+C 48 ; WX 556 ; N zero ; B 40 -12 516 683 ;
+C 49 ; WX 556 ; N one ; B 94 0 460 683 ;
+C 50 ; WX 556 ; N two ; B 42 0 506 684 ;
+C 51 ; WX 556 ; N three ; B 40 -11 492 684 ;
+C 52 ; WX 556 ; N four ; B 26 -38 539 678 ;
+C 53 ; WX 556 ; N five ; B 49 -10 489 672 ;
+C 54 ; WX 556 ; N six ; B 50 -13 526 714 ;
+C 55 ; WX 556 ; N seven ; B 70 -38 532 672 ;
+C 56 ; WX 556 ; N eight ; B 43 -16 507 685 ;
+C 57 ; WX 556 ; N nine ; B 43 -53 512 681 ;
+C 58 ; WX 319 ; N colon ; B 96 -10 224 482 ;
+C 59 ; WX 319 ; N semicolon ; B 64 -169 234 482 ;
+C 60 ; WX 833 ; N less ; B 128 37 704 560 ;
+C 61 ; WX 833 ; N equal ; B 124 175 710 421 ;
+C 62 ; WX 833 ; N greater ; B 129 37 704 560 ;
+C 63 ; WX 486 ; N question ; B 54 -9 410 683 ;
+C 64 ; WX 942 ; N at ; B 76 -154 871 693 ;
+C 65 ; WX 639 ; N A ; B -8 0 651 680 ;
+C 66 ; WX 604 ; N B ; B 32 0 559 672 ;
+C 67 ; WX 632 ; N C ; B 42 -13 588 683 ;
+C 68 ; WX 693 ; N D ; B 32 0 649 672 ;
+C 69 ; WX 576 ; N E ; B 32 0 549 672 ;
+C 70 ; WX 537 ; N F ; B 24 0 506 672 ;
+C 71 ; WX 694 ; N G ; B 42 -13 667 684 ;
+C 72 ; WX 738 ; N H ; B 32 0 706 672 ;
+C 73 ; WX 324 ; N I ; B 35 0 289 672 ;
+C 74 ; WX 444 ; N J ; B 12 -13 440 672 ;
+C 75 ; WX 611 ; N K ; B 32 0 628 672 ;
+C 76 ; WX 520 ; N L ; B 26 0 507 672 ;
+C 77 ; WX 866 ; N M ; B 30 0 835 672 ;
+C 78 ; WX 713 ; N N ; B 26 0 688 672 ;
+C 79 ; WX 731 ; N O ; B 42 -17 689 688 ;
+C 80 ; WX 558 ; N P ; B 24 0 532 672 ;
+C 81 ; WX 731 ; N Q ; B 39 -177 694 689 ;
+C 82 ; WX 646 ; N R ; B 32 -9 657 672 ;
+C 83 ; WX 556 ; N S ; B 60 -12 499 684 ;
+C 84 ; WX 597 ; N T ; B 15 0 582 672 ;
+C 85 ; WX 694 ; N U ; B 24 -12 680 672 ;
+C 86 ; WX 618 ; N V ; B -23 -5 638 672 ;
+C 87 ; WX 928 ; N W ; B 0 0 928 672 ;
+C 88 ; WX 600 ; N X ; B -9 0 610 672 ;
+C 89 ; WX 586 ; N Y ; B -14 0 607 672 ;
+C 90 ; WX 586 ; N Z ; B 45 0 540 672 ;
+C 91 ; WX 421 ; N bracketleft ; B 138 -133 376 709 ;
+C 92 ; WX 481 ; N backslash ; B 12 -93 502 672 ;
+C 93 ; WX 421 ; N bracketright ; B 45 -133 283 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -178 ;
+C 96 ; WX 201 ; N quoteleft ; B 34 441 174 713 ;
+C 97 ; WX 507 ; N a ; B 41 -7 489 492 ;
+C 98 ; WX 539 ; N b ; B 8 0 504 737 ;
+C 99 ; WX 446 ; N c ; B 37 -7 426 491 ;
+C 100 ; WX 565 ; N d ; B 36 -10 531 737 ;
+C 101 ; WX 491 ; N e ; B 37 -10 449 491 ;
+C 102 ; WX 321 ; N f ; B 28 0 381 744 ;
+C 103 ; WX 523 ; N g ; B 39 -219 513 492 ;
+C 104 ; WX 564 ; N h ; B 18 0 547 737 ;
+C 105 ; WX 280 ; N i ; B 34 0 261 709 ;
+C 106 ; WX 266 ; N j ; B -79 -218 204 709 ;
+C 107 ; WX 517 ; N k ; B 18 0 528 737 ;
+C 108 ; WX 282 ; N l ; B 26 0 262 737 ;
+C 109 ; WX 843 ; N m ; B 30 0 826 491 ;
+C 110 ; WX 568 ; N n ; B 30 0 551 491 ;
+C 111 ; WX 539 ; N o ; B 37 -10 503 491 ;
+C 112 ; WX 551 ; N p ; B 23 -218 517 491 ;
+C 113 ; WX 531 ; N q ; B 36 -218 527 492 ;
+C 114 ; WX 382 ; N r ; B 29 0 377 492 ;
+C 115 ; WX 400 ; N s ; B 41 -10 359 492 ;
+C 116 ; WX 334 ; N t ; B 24 -4 323 575 ;
+C 117 ; WX 569 ; N u ; B 26 -10 542 491 ;
+C 118 ; WX 494 ; N v ; B -6 0 508 482 ;
+C 119 ; WX 771 ; N w ; B -3 0 772 482 ;
+C 120 ; WX 503 ; N x ; B 12 0 501 482 ;
+C 121 ; WX 495 ; N y ; B -2 -218 512 482 ;
+C 122 ; WX 468 ; N z ; B 45 0 431 482 ;
+C 123 ; WX 486 ; N braceleft ; B 64 -135 418 703 ;
+C 124 ; WX 500 ; N bar ; B 219 -237 282 764 ;
+C 125 ; WX 486 ; N braceright ; B 64 -135 418 703 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 225 747 371 ;
+C 161 ; WX 338 ; N exclamdown ; B 112 -9 226 683 ;
+C 162 ; WX 556 ; N cent ; B 64 -98 464 602 ;
+C 163 ; WX 556 ; N sterling ; B 37 0 509 683 ;
+C 164 ; WX 167 ; N fraction ; B -162 0 328 672 ;
+C 165 ; WX 556 ; N yen ; B -6 0 560 672 ;
+C 166 ; WX 556 ; N florin ; B 6 -169 507 683 ;
+C 167 ; WX 500 ; N section ; B 62 -141 437 718 ;
+C 168 ; WX 606 ; N currency ; B 41 171 566 694 ;
+C 169 ; WX 170 ; N quotesingle ; B 43 421 127 715 ;
+C 170 ; WX 403 ; N quotedblleft ; B 34 441 376 713 ;
+C 171 ; WX 442 ; N guillemotleft ; B 39 67 401 413 ;
+C 172 ; WX 245 ; N guilsinglleft ; B 39 67 204 413 ;
+C 173 ; WX 245 ; N guilsinglright ; B 45 67 210 413 ;
+C 174 ; WX 574 ; N fi ; B 28 0 544 744 ;
+C 175 ; WX 579 ; N fl ; B 28 0 561 744 ;
+C 177 ; WX 500 ; N endash ; B 0 210 500 271 ;
+C 178 ; WX 500 ; N dagger ; B 17 -130 484 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B 17 -132 484 718 ;
+C 180 ; WX 278 ; N periodcentered ; B 75 271 203 400 ;
+C 182 ; WX 484 ; N paragraph ; B 25 -79 459 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 201 ; N quotesinglbase ; B 31 -165 171 107 ;
+C 185 ; WX 403 ; N quotedblbase ; B 31 -165 372 107 ;
+C 186 ; WX 403 ; N quotedblright ; B 30 442 371 714 ;
+C 187 ; WX 442 ; N guillemotright ; B 45 67 407 413 ;
+C 188 ; WX 1000 ; N ellipsis ; B 102 -10 898 118 ;
+C 189 ; WX 1225 ; N perthousand ; B 30 -12 1194 683 ;
+C 191 ; WX 486 ; N questiondown ; B 60 -9 415 683 ;
+C 193 ; WX 500 ; N grave ; B 104 546 300 737 ;
+C 194 ; WX 500 ; N acute ; B 212 546 409 737 ;
+C 195 ; WX 500 ; N circumflex ; B 107 546 393 737 ;
+C 196 ; WX 500 ; N tilde ; B 97 572 403 709 ;
+C 197 ; WX 500 ; N macron ; B 101 607 403 668 ;
+C 198 ; WX 500 ; N breve ; B 108 567 392 709 ;
+C 199 ; WX 500 ; N dotaccent ; B 196 589 304 697 ;
+C 200 ; WX 500 ; N dieresis ; B 106 589 394 691 ;
+C 202 ; WX 500 ; N ring ; B 132 546 368 782 ;
+C 203 ; WX 500 ; N cedilla ; B 179 -224 368 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 133 546 473 737 ;
+C 206 ; WX 500 ; N ogonek ; B 182 -217 330 0 ;
+C 207 ; WX 500 ; N caron ; B 107 545 393 736 ;
+C 208 ; WX 1000 ; N emdash ; B 0 210 1000 271 ;
+C 225 ; WX 866 ; N AE ; B -57 0 838 672 ;
+C 227 ; WX 380 ; N ordfeminine ; B 30 329 367 679 ;
+C 232 ; WX 520 ; N Lslash ; B 10 0 507 672 ;
+C 233 ; WX 731 ; N Oslash ; B 42 -78 689 748 ;
+C 234 ; WX 993 ; N OE ; B 42 -8 965 680 ;
+C 235 ; WX 404 ; N ordmasculine ; B 27 327 378 678 ;
+C 241 ; WX 725 ; N ae ; B 43 -10 683 492 ;
+C 245 ; WX 280 ; N dotlessi ; B 34 0 261 487 ;
+C 248 ; WX 282 ; N lslash ; B 4 0 300 737 ;
+C 249 ; WX 539 ; N oslash ; B 37 -81 503 560 ;
+C 250 ; WX 817 ; N oe ; B 36 -10 776 491 ;
+C 251 ; WX 609 ; N germandbls ; B 18 -7 581 741 ;
+C -1 ; WX 639 ; N Aacute ; B -8 0 651 934 ;
+C -1 ; WX 639 ; N Acircumflex ; B -8 0 651 934 ;
+C -1 ; WX 639 ; N Adieresis ; B -8 0 651 888 ;
+C -1 ; WX 639 ; N Agrave ; B -8 0 651 934 ;
+C -1 ; WX 639 ; N Aring ; B -8 0 651 963 ;
+C -1 ; WX 639 ; N Atilde ; B -8 0 651 906 ;
+C -1 ; WX 632 ; N Ccedilla ; B 42 -224 588 683 ;
+C -1 ; WX 576 ; N Eacute ; B 32 0 549 934 ;
+C -1 ; WX 576 ; N Ecircumflex ; B 32 0 549 934 ;
+C -1 ; WX 576 ; N Edieresis ; B 32 0 549 888 ;
+C -1 ; WX 576 ; N Egrave ; B 32 0 549 934 ;
+C -1 ; WX 324 ; N Iacute ; B 35 0 321 934 ;
+C -1 ; WX 324 ; N Icircumflex ; B 19 0 305 934 ;
+C -1 ; WX 324 ; N Idieresis ; B 18 0 306 888 ;
+C -1 ; WX 324 ; N Igrave ; B 16 0 289 934 ;
+C -1 ; WX 713 ; N Ntilde ; B 26 0 688 906 ;
+C -1 ; WX 731 ; N Oacute ; B 42 -17 689 934 ;
+C -1 ; WX 731 ; N Ocircumflex ; B 42 -17 689 934 ;
+C -1 ; WX 731 ; N Odieresis ; B 42 -17 689 888 ;
+C -1 ; WX 731 ; N Ograve ; B 42 -17 689 934 ;
+C -1 ; WX 731 ; N Otilde ; B 42 -17 689 906 ;
+C -1 ; WX 556 ; N Scaron ; B 60 -12 499 933 ;
+C -1 ; WX 694 ; N Uacute ; B 24 -12 680 934 ;
+C -1 ; WX 694 ; N Ucircumflex ; B 24 -12 680 934 ;
+C -1 ; WX 694 ; N Udieresis ; B 24 -12 680 888 ;
+C -1 ; WX 694 ; N Ugrave ; B 24 -12 680 934 ;
+C -1 ; WX 586 ; N Ydieresis ; B -14 0 607 888 ;
+C -1 ; WX 586 ; N Zcaron ; B 45 0 540 933 ;
+C -1 ; WX 507 ; N aacute ; B 41 -7 489 737 ;
+C -1 ; WX 507 ; N acircumflex ; B 41 -7 489 737 ;
+C -1 ; WX 507 ; N adieresis ; B 41 -7 489 691 ;
+C -1 ; WX 507 ; N agrave ; B 41 -7 489 737 ;
+C -1 ; WX 507 ; N aring ; B 41 -7 489 782 ;
+C -1 ; WX 507 ; N atilde ; B 41 -7 489 709 ;
+C -1 ; WX 446 ; N ccedilla ; B 37 -224 426 491 ;
+C -1 ; WX 491 ; N eacute ; B 37 -10 449 737 ;
+C -1 ; WX 491 ; N ecircumflex ; B 37 -10 449 737 ;
+C -1 ; WX 491 ; N edieresis ; B 37 -10 449 691 ;
+C -1 ; WX 491 ; N egrave ; B 37 -10 449 737 ;
+C -1 ; WX 280 ; N iacute ; B 34 0 299 737 ;
+C -1 ; WX 280 ; N icircumflex ; B -3 0 283 737 ;
+C -1 ; WX 280 ; N idieresis ; B -4 0 284 691 ;
+C -1 ; WX 280 ; N igrave ; B -6 0 261 737 ;
+C -1 ; WX 568 ; N ntilde ; B 30 0 551 709 ;
+C -1 ; WX 539 ; N oacute ; B 37 -10 503 737 ;
+C -1 ; WX 539 ; N ocircumflex ; B 37 -10 503 737 ;
+C -1 ; WX 539 ; N odieresis ; B 37 -10 503 691 ;
+C -1 ; WX 539 ; N ograve ; B 37 -10 503 737 ;
+C -1 ; WX 539 ; N otilde ; B 37 -10 503 709 ;
+C -1 ; WX 400 ; N scaron ; B 41 -10 359 736 ;
+C -1 ; WX 569 ; N uacute ; B 26 -10 542 737 ;
+C -1 ; WX 569 ; N ucircumflex ; B 26 -10 542 737 ;
+C -1 ; WX 569 ; N udieresis ; B 26 -10 542 691 ;
+C -1 ; WX 569 ; N ugrave ; B 26 -10 542 737 ;
+C -1 ; WX 495 ; N ydieresis ; B -2 -218 512 691 ;
+C -1 ; WX 468 ; N zcaron ; B 45 0 431 736 ;
+C -1 ; WX 822 ; N trademark ; B 118 398 716 663 ;
+C -1 ; WX 900 ; N copyright ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 174 710 419 ;
+C -1 ; WX 900 ; N registered ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N minus ; B 124 269 710 328 ;
+C -1 ; WX 693 ; N Eth ; B 14 0 649 672 ;
+C -1 ; WX 558 ; N Thorn ; B 35 0 534 672 ;
+C -1 ; WX 586 ; N Yacute ; B -14 0 607 934 ;
+C -1 ; WX 500 ; N brokenbar ; B 219 -172 282 699 ;
+C -1 ; WX 329 ; N degree ; B 26 434 303 710 ;
+C -1 ; WX 833 ; N divide ; B 124 66 710 531 ;
+C -1 ; WX 528 ; N eth ; B 33 -11 493 734 ;
+C -1 ; WX 547 ; N mu ; B -39 -204 532 433 ;
+C -1 ; WX 833 ; N multiply ; B 146 26 691 571 ;
+C -1 ; WX 867 ; N onehalf ; B 59 0 836 678 ;
+C -1 ; WX 867 ; N onequarter ; B 59 -22 857 678 ;
+C -1 ; WX 367 ; N onesuperior ; B 62 268 304 679 ;
+C -1 ; WX 833 ; N plusminus ; B 124 20 710 577 ;
+C -1 ; WX 551 ; N thorn ; B 20 -218 521 737 ;
+C -1 ; WX 868 ; N threequarters ; B 25 -22 857 679 ;
+C -1 ; WX 367 ; N threesuperior ; B 26 261 325 679 ;
+C -1 ; WX 367 ; N twosuperior ; B 27 268 334 679 ;
+C -1 ; WX 495 ; N yacute ; B -2 -218 512 737 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 271
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A T -111
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A f -19
+KPX A t -19
+KPX A v -32
+KPX A w -46
+KPX A y -23
+KPX A fi -19
+KPX A fl -19
+KPX A quotedblright -130
+KPX B hyphen 37
+KPX B C 19
+KPX B G 19
+KPX B O 19
+KPX B S 19
+KPX B V -37
+KPX B W -19
+KPX B Y -19
+KPX B Oslash 19
+KPX B OE 19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C A -19
+KPX C S 19
+KPX C quotedblright 37
+KPX C Aring -19
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D Y -19
+KPX D Aring -19
+KPX F comma -190
+KPX F hyphen -93
+KPX F period -190
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -97
+KPX F a -79
+KPX F e -65
+KPX F o -65
+KPX F ae -79
+KPX F oslash -65
+KPX F oe -65
+KPX F Aring -97
+KPX G hyphen 19
+KPX G T -19
+KPX G W -19
+KPX G Y -23
+KPX J A -37
+KPX J Aring -37
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -37
+KPX K Y -28
+KPX K e -19
+KPX K o -19
+KPX K u -19
+KPX K y -28
+KPX K Oslash -28
+KPX K OE -28
+KPX K oslash -19
+KPX K oe -19
+KPX K Aring -23
+KPX L quoteright -241
+KPX L T -83
+KPX L U -19
+KPX L V -120
+KPX L W -88
+KPX L Y -102
+KPX L y -19
+KPX L quotedblright -241
+KPX O comma -60
+KPX O hyphen 37
+KPX O period -60
+KPX O V -19
+KPX O X -19
+KPX P comma -259
+KPX P hyphen -93
+KPX P period -259
+KPX P colon -37
+KPX P semicolon -37
+KPX P A -93
+KPX P U -19
+KPX P a -56
+KPX P e -56
+KPX P o -51
+KPX P s -32
+KPX P ae -56
+KPX P oslash -51
+KPX P oe -51
+KPX P Aring -93
+KPX Q quoteright 19
+KPX Q hyphen 37
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R colon -19
+KPX R semicolon -19
+KPX R T -37
+KPX R V -56
+KPX R W -42
+KPX R Y -51
+KPX R quoteleft -37
+KPX R e -37
+KPX R o -37
+KPX R u -37
+KPX R y -46
+KPX R quotedblleft -37
+KPX R quotesinglbase 37
+KPX R quotedblbase 37
+KPX R quotedblright -37
+KPX R oslash -37
+KPX R oe -37
+KPX T quoteright 19
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -111
+KPX T T 19
+KPX T quoteleft 37
+KPX T a -97
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -97
+KPX T r -74
+KPX T s -74
+KPX T u -111
+KPX T w -74
+KPX T y -93
+KPX T quotedblleft 37
+KPX T guillemotleft -37
+KPX T guilsinglleft -37
+KPX T quotedblright 19
+KPX T ae -97
+KPX T oslash -97
+KPX T oe -97
+KPX T Aring -111
+KPX U A -32
+KPX U J -28
+KPX U Aring -32
+KPX V quoteright 37
+KPX V comma -222
+KPX V hyphen -93
+KPX V period -222
+KPX V colon -102
+KPX V semicolon -102
+KPX V A -79
+KPX V O -19
+KPX V a -111
+KPX V e -106
+KPX V i -28
+KPX V o -93
+KPX V u -65
+KPX V y -65
+KPX V quotedblright 37
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -111
+KPX V oslash -93
+KPX V oe -93
+KPX V Aring -79
+KPX W quoteright 19
+KPX W comma -176
+KPX W hyphen -74
+KPX W period -176
+KPX W colon -88
+KPX W semicolon -88
+KPX W A -60
+KPX W a -69
+KPX W e -83
+KPX W i -19
+KPX W o -69
+KPX W r -46
+KPX W u -42
+KPX W y -23
+KPX W quotedblright 19
+KPX W ae -69
+KPX W oslash -69
+KPX W oe -69
+KPX W Aring -60
+KPX X hyphen -37
+KPX X A -19
+KPX X C -19
+KPX X O -19
+KPX X Oslash -19
+KPX X OE -19
+KPX X Aring -19
+KPX Y comma -130
+KPX Y hyphen -130
+KPX Y period -130
+KPX Y colon -125
+KPX Y semicolon -125
+KPX Y A -60
+KPX Y C -19
+KPX Y a -97
+KPX Y e -106
+KPX Y i -37
+KPX Y o -97
+KPX Y u -69
+KPX Y ae -97
+KPX Y oslash -97
+KPX Y oe -97
+KPX Y Aring -60
+KPX quoteleft A -130
+KPX quoteleft J -167
+KPX quoteleft AE -111
+KPX quoteleft Aring -130
+KPX f quoteright 74
+KPX f comma -37
+KPX f hyphen -19
+KPX f period -37
+KPX f quotedblright 74
+KPX r comma -111
+KPX r period -111
+KPX v comma -120
+KPX v period -120
+KPX w comma -120
+KPX w period -120
+KPX y comma -134
+KPX y period -134
+KPX quotedblleft A -130
+KPX quotedblleft J -167
+KPX quotedblleft AE -111
+KPX quotedblleft Aring -130
+KPX AE hyphen 19
+KPX Lslash quoteright -241
+KPX Lslash T -83
+KPX Lslash U -19
+KPX Lslash V -120
+KPX Lslash W -88
+KPX Lslash Y -102
+KPX Lslash y -19
+KPX Lslash quotedblright -241
+KPX Oslash comma -60
+KPX Oslash hyphen 37
+KPX Oslash period -60
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Aring quoteright -130
+KPX Aring T -111
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring f -19
+KPX Aring t -19
+KPX Aring v -32
+KPX Aring w -46
+KPX Aring y -23
+KPX Aring fi -19
+KPX Aring fl -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth Y -19
+KPX Eth Aring -19
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchr8a.pfb b/Master/tlpkg/tlgs/lib/fonts/bchr8a.pfb
new file mode 100644
index 00000000000..72a1606b4b4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchr8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchri8a.afm b/Master/tlpkg/tlgs/lib/fonts/bchri8a.afm
new file mode 100644
index 00000000000..0f721845f66
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchri8a.afm
@@ -0,0 +1,547 @@
+StartFontMetrics 2.0
+Comment Bitstream AFM Data
+Comment Copyright 1987-1990 as an unpublished work by Bitstream Inc., Cambridge, MA.
+Comment All rights reserved
+Comment Confidential and proprietary to Bitstream Inc.
+Comment Bitstream is a registered trademark of Bitstream Inc.
+Comment bitsClassification Transitional 801
+Comment bitsFontID 0649
+Comment bitsManufacturingDate Tue Nov 6 02:55:16 1990
+Comment bitsLayoutName clayout.adobe.text228.new
+Comment UniqueID 15530649
+FontName CharterBT-Italic
+FullName Bitstream Charter Italic
+FamilyName Bitstream Charter
+Weight Normal
+ItalicAngle 11.0000
+IsFixedPitch false
+FontBBox -226 -237 1175 980
+UnderlinePosition -109
+UnderlineThickness 61
+Version 1.0 [UFO]
+Notice Copyright 1987-1990 as an unpublished work by Bitstream Inc. All rights reserved. Confidential.
+EncodingScheme AdobeStandardEncoding
+CapHeight 672
+XHeight 486
+Ascender 737
+Descender -218
+StartCharMetrics 228
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 338 ; N exclam ; B 63 -9 281 683 ;
+C 34 ; WX 331 ; N quotedbl ; B 43 421 288 715 ;
+C 35 ; WX 745 ; N numbersign ; B 63 -24 681 710 ;
+C 36 ; WX 556 ; N dollar ; B 21 -102 514 744 ;
+C 37 ; WX 852 ; N percent ; B 49 -12 802 683 ;
+C 38 ; WX 704 ; N ampersand ; B 19 -12 665 684 ;
+C 39 ; WX 201 ; N quoteright ; B 51 442 227 714 ;
+C 40 ; WX 419 ; N parenleft ; B 79 -142 460 718 ;
+C 41 ; WX 419 ; N parenright ; B -67 -142 313 718 ;
+C 42 ; WX 500 ; N asterisk ; B 98 337 492 718 ;
+C 43 ; WX 833 ; N plus ; B 124 0 710 597 ;
+C 44 ; WX 278 ; N comma ; B -58 -169 149 107 ;
+C 45 ; WX 319 ; N hyphen ; B 22 207 260 275 ;
+C 46 ; WX 278 ; N period ; B 25 -6 145 114 ;
+C 47 ; WX 481 ; N slash ; B -111 -93 525 672 ;
+C 48 ; WX 556 ; N zero ; B 27 -12 528 683 ;
+C 49 ; WX 556 ; N one ; B 82 0 405 683 ;
+C 50 ; WX 556 ; N two ; B -22 0 518 684 ;
+C 51 ; WX 556 ; N three ; B 0 -12 512 684 ;
+C 52 ; WX 556 ; N four ; B -1 -38 524 678 ;
+C 53 ; WX 556 ; N five ; B 3 -13 519 672 ;
+C 54 ; WX 556 ; N six ; B 31 -13 501 716 ;
+C 55 ; WX 556 ; N seven ; B 44 -38 596 672 ;
+C 56 ; WX 556 ; N eight ; B 18 -18 518 685 ;
+C 57 ; WX 556 ; N nine ; B 28 -56 523 684 ;
+C 58 ; WX 319 ; N colon ; B 46 -6 235 478 ;
+C 59 ; WX 319 ; N semicolon ; B -33 -169 235 478 ;
+C 60 ; WX 833 ; N less ; B 128 37 704 560 ;
+C 61 ; WX 833 ; N equal ; B 124 175 710 421 ;
+C 62 ; WX 833 ; N greater ; B 129 37 704 560 ;
+C 63 ; WX 486 ; N question ; B 94 -9 446 683 ;
+C 64 ; WX 942 ; N at ; B 76 -154 871 693 ;
+C 65 ; WX 606 ; N A ; B -79 0 585 677 ;
+C 66 ; WX 588 ; N B ; B -29 0 543 672 ;
+C 67 ; WX 604 ; N C ; B 41 -12 622 683 ;
+C 68 ; WX 671 ; N D ; B -28 0 623 672 ;
+C 69 ; WX 546 ; N E ; B -25 0 554 672 ;
+C 70 ; WX 509 ; N F ; B -27 0 540 671 ;
+C 71 ; WX 664 ; N G ; B 39 -12 650 684 ;
+C 72 ; WX 712 ; N H ; B -29 0 741 672 ;
+C 73 ; WX 312 ; N I ; B -23 0 333 672 ;
+C 74 ; WX 447 ; N J ; B -43 -12 472 672 ;
+C 75 ; WX 625 ; N K ; B -30 -5 660 672 ;
+C 76 ; WX 498 ; N L ; B -29 0 453 672 ;
+C 77 ; WX 839 ; N M ; B -28 0 868 672 ;
+C 78 ; WX 683 ; N N ; B -31 0 720 672 ;
+C 79 ; WX 708 ; N O ; B 40 -13 669 683 ;
+C 80 ; WX 542 ; N P ; B -29 0 543 672 ;
+C 81 ; WX 708 ; N Q ; B 40 -160 700 682 ;
+C 82 ; WX 602 ; N R ; B -30 -6 591 671 ;
+C 83 ; WX 537 ; N S ; B 9 -13 511 683 ;
+C 84 ; WX 565 ; N T ; B 43 0 610 672 ;
+C 85 ; WX 664 ; N U ; B 64 -12 705 672 ;
+C 86 ; WX 590 ; N V ; B 30 -6 649 672 ;
+C 87 ; WX 898 ; N W ; B 51 0 952 672 ;
+C 88 ; WX 569 ; N X ; B -83 0 633 672 ;
+C 89 ; WX 562 ; N Y ; B 31 0 642 672 ;
+C 90 ; WX 556 ; N Z ; B -26 0 572 672 ;
+C 91 ; WX 421 ; N bracketleft ; B 49 -133 448 709 ;
+C 92 ; WX 481 ; N backslash ; B 34 -93 489 672 ;
+C 93 ; WX 421 ; N bracketright ; B -45 -133 354 709 ;
+C 94 ; WX 1000 ; N asciicircum ; B 201 437 798 714 ;
+C 95 ; WX 500 ; N underscore ; B 0 -237 500 -178 ;
+C 96 ; WX 201 ; N quoteleft ; B 70 441 247 713 ;
+C 97 ; WX 525 ; N a ; B 17 -9 488 483 ;
+C 98 ; WX 507 ; N b ; B 24 -10 453 737 ;
+C 99 ; WX 394 ; N c ; B 14 -10 370 486 ;
+C 100 ; WX 523 ; N d ; B 20 -9 501 737 ;
+C 101 ; WX 424 ; N e ; B 20 -10 378 483 ;
+C 102 ; WX 292 ; N f ; B -151 -216 404 733 ;
+C 103 ; WX 481 ; N g ; B -31 -218 480 483 ;
+C 104 ; WX 551 ; N h ; B 23 -6 505 737 ;
+C 105 ; WX 287 ; N i ; B 32 -7 255 705 ;
+C 106 ; WX 269 ; N j ; B -128 -216 249 701 ;
+C 107 ; WX 514 ; N k ; B 25 -6 494 737 ;
+C 108 ; WX 275 ; N l ; B 35 -10 241 737 ;
+C 109 ; WX 815 ; N m ; B 31 -6 773 483 ;
+C 110 ; WX 556 ; N n ; B 32 -7 515 483 ;
+C 111 ; WX 502 ; N o ; B 21 -9 450 483 ;
+C 112 ; WX 516 ; N p ; B -70 -218 461 483 ;
+C 113 ; WX 512 ; N q ; B 24 -218 463 488 ;
+C 114 ; WX 398 ; N r ; B 27 0 400 482 ;
+C 115 ; WX 370 ; N s ; B -17 -9 324 483 ;
+C 116 ; WX 333 ; N t ; B 43 -7 337 580 ;
+C 117 ; WX 553 ; N u ; B 30 -9 513 483 ;
+C 118 ; WX 454 ; N v ; B -9 -2 435 484 ;
+C 119 ; WX 713 ; N w ; B -1 0 689 485 ;
+C 120 ; WX 477 ; N x ; B -47 -9 495 486 ;
+C 121 ; WX 475 ; N y ; B -113 -218 485 485 ;
+C 122 ; WX 440 ; N z ; B -15 -12 434 490 ;
+C 123 ; WX 486 ; N braceleft ; B 64 -135 418 703 ;
+C 124 ; WX 500 ; N bar ; B 219 -237 282 764 ;
+C 125 ; WX 486 ; N braceright ; B 64 -135 418 703 ;
+C 126 ; WX 833 ; N asciitilde ; B 86 225 747 371 ;
+C 161 ; WX 338 ; N exclamdown ; B 60 -9 278 683 ;
+C 162 ; WX 556 ; N cent ; B 41 -98 492 602 ;
+C 163 ; WX 556 ; N sterling ; B -22 0 547 683 ;
+C 164 ; WX 167 ; N fraction ; B -226 0 392 672 ;
+C 165 ; WX 556 ; N yen ; B 2 0 616 665 ;
+C 166 ; WX 556 ; N florin ; B -81 -169 563 683 ;
+C 167 ; WX 500 ; N section ; B 3 -141 475 718 ;
+C 168 ; WX 606 ; N currency ; B 41 171 566 694 ;
+C 169 ; WX 170 ; N quotesingle ; B 43 421 127 715 ;
+C 170 ; WX 403 ; N quotedblleft ; B 70 441 448 713 ;
+C 171 ; WX 442 ; N guillemotleft ; B 13 67 416 413 ;
+C 172 ; WX 245 ; N guilsinglleft ; B 13 67 218 413 ;
+C 173 ; WX 245 ; N guilsinglright ; B -7 67 199 413 ;
+C 174 ; WX 574 ; N fi ; B -151 -216 547 733 ;
+C 175 ; WX 579 ; N fl ; B -151 -216 544 737 ;
+C 177 ; WX 500 ; N endash ; B -25 210 488 271 ;
+C 178 ; WX 500 ; N dagger ; B 45 -130 512 718 ;
+C 179 ; WX 500 ; N daggerdbl ; B -27 -132 512 718 ;
+C 180 ; WX 278 ; N periodcentered ; B 79 276 199 396 ;
+C 182 ; WX 484 ; N paragraph ; B 25 -79 459 672 ;
+C 183 ; WX 590 ; N bullet ; B 150 227 439 516 ;
+C 184 ; WX 201 ; N quotesinglbase ; B -65 -165 111 107 ;
+C 185 ; WX 403 ; N quotedblbase ; B -65 -165 313 107 ;
+C 186 ; WX 403 ; N quotedblright ; B 51 442 429 714 ;
+C 187 ; WX 442 ; N guillemotright ; B -7 67 397 413 ;
+C 188 ; WX 1000 ; N ellipsis ; B 52 -6 840 114 ;
+C 189 ; WX 1225 ; N perthousand ; B 49 -12 1175 683 ;
+C 191 ; WX 486 ; N questiondown ; B 27 -9 379 683 ;
+C 193 ; WX 500 ; N grave ; B 181 546 341 737 ;
+C 194 ; WX 500 ; N acute ; B 252 546 485 737 ;
+C 195 ; WX 500 ; N circumflex ; B 148 546 433 737 ;
+C 196 ; WX 500 ; N tilde ; B 143 572 474 709 ;
+C 197 ; WX 500 ; N macron ; B 154 614 465 667 ;
+C 198 ; WX 500 ; N breve ; B 177 567 464 709 ;
+C 199 ; WX 500 ; N dotaccent ; B 248 584 361 697 ;
+C 200 ; WX 500 ; N dieresis ; B 163 589 452 692 ;
+C 202 ; WX 500 ; N ring ; B 209 557 426 774 ;
+C 203 ; WX 500 ; N cedilla ; B 61 -224 267 0 ;
+C 205 ; WX 500 ; N hungarumlaut ; B 175 546 569 737 ;
+C 206 ; WX 500 ; N ogonek ; B 90 -217 235 0 ;
+C 207 ; WX 500 ; N caron ; B 184 545 470 736 ;
+C 208 ; WX 1000 ; N emdash ; B -19 210 991 271 ;
+C 225 ; WX 873 ; N AE ; B -115 0 879 672 ;
+C 227 ; WX 394 ; N ordfeminine ; B 12 325 366 671 ;
+C 232 ; WX 498 ; N Lslash ; B -29 0 453 672 ;
+C 233 ; WX 708 ; N Oslash ; B 41 -74 669 744 ;
+C 234 ; WX 1007 ; N OE ; B 40 -13 1004 682 ;
+C 235 ; WX 377 ; N ordmasculine ; B 15 325 338 671 ;
+C 241 ; WX 671 ; N ae ; B 1 -10 628 483 ;
+C 245 ; WX 287 ; N dotlessi ; B 32 -7 255 483 ;
+C 248 ; WX 275 ; N lslash ; B -14 -10 293 737 ;
+C 249 ; WX 502 ; N oslash ; B 22 -80 450 548 ;
+C 250 ; WX 750 ; N oe ; B 21 -9 704 483 ;
+C 251 ; WX 574 ; N germandbls ; B -151 -216 522 739 ;
+C -1 ; WX 606 ; N Aacute ; B -79 0 585 930 ;
+C -1 ; WX 606 ; N Acircumflex ; B -79 0 585 930 ;
+C -1 ; WX 606 ; N Adieresis ; B -79 0 585 885 ;
+C -1 ; WX 606 ; N Agrave ; B -79 0 585 930 ;
+C -1 ; WX 606 ; N Aring ; B -79 0 585 980 ;
+C -1 ; WX 606 ; N Atilde ; B -79 0 585 902 ;
+C -1 ; WX 604 ; N Ccedilla ; B 41 -224 622 683 ;
+C -1 ; WX 546 ; N Eacute ; B -25 0 554 930 ;
+C -1 ; WX 546 ; N Ecircumflex ; B -25 0 554 930 ;
+C -1 ; WX 546 ; N Edieresis ; B -25 0 554 885 ;
+C -1 ; WX 546 ; N Egrave ; B -25 0 554 930 ;
+C -1 ; WX 312 ; N Iacute ; B -23 0 418 930 ;
+C -1 ; WX 312 ; N Icircumflex ; B -23 0 366 930 ;
+C -1 ; WX 312 ; N Idieresis ; B -23 0 385 885 ;
+C -1 ; WX 312 ; N Igrave ; B -23 0 333 930 ;
+C -1 ; WX 683 ; N Ntilde ; B -31 0 720 902 ;
+C -1 ; WX 708 ; N Oacute ; B 40 -13 669 930 ;
+C -1 ; WX 708 ; N Ocircumflex ; B 40 -13 669 930 ;
+C -1 ; WX 708 ; N Odieresis ; B 40 -13 669 885 ;
+C -1 ; WX 708 ; N Ograve ; B 40 -13 669 930 ;
+C -1 ; WX 708 ; N Otilde ; B 40 -13 669 902 ;
+C -1 ; WX 537 ; N Scaron ; B 9 -13 516 929 ;
+C -1 ; WX 664 ; N Uacute ; B 64 -12 705 930 ;
+C -1 ; WX 664 ; N Ucircumflex ; B 64 -12 705 930 ;
+C -1 ; WX 664 ; N Udieresis ; B 64 -12 705 885 ;
+C -1 ; WX 664 ; N Ugrave ; B 64 -12 705 930 ;
+C -1 ; WX 562 ; N Ydieresis ; B 31 0 642 885 ;
+C -1 ; WX 556 ; N Zcaron ; B -26 0 572 929 ;
+C -1 ; WX 525 ; N aacute ; B 17 -9 498 737 ;
+C -1 ; WX 525 ; N acircumflex ; B 17 -9 488 737 ;
+C -1 ; WX 525 ; N adieresis ; B 17 -9 488 692 ;
+C -1 ; WX 525 ; N agrave ; B 17 -9 488 737 ;
+C -1 ; WX 525 ; N aring ; B 17 -9 488 762 ;
+C -1 ; WX 525 ; N atilde ; B 17 -9 488 709 ;
+C -1 ; WX 394 ; N ccedilla ; B 8 -224 370 486 ;
+C -1 ; WX 424 ; N eacute ; B 20 -10 460 737 ;
+C -1 ; WX 424 ; N ecircumflex ; B 20 -10 408 737 ;
+C -1 ; WX 424 ; N edieresis ; B 20 -10 427 692 ;
+C -1 ; WX 424 ; N egrave ; B 20 -10 378 737 ;
+C -1 ; WX 287 ; N iacute ; B 32 -7 379 737 ;
+C -1 ; WX 287 ; N icircumflex ; B 32 -7 327 737 ;
+C -1 ; WX 287 ; N idieresis ; B 32 -7 346 692 ;
+C -1 ; WX 287 ; N igrave ; B 32 -7 255 737 ;
+C -1 ; WX 556 ; N ntilde ; B 32 -7 515 709 ;
+C -1 ; WX 502 ; N oacute ; B 21 -9 486 737 ;
+C -1 ; WX 502 ; N ocircumflex ; B 21 -9 450 737 ;
+C -1 ; WX 502 ; N odieresis ; B 21 -9 453 692 ;
+C -1 ; WX 502 ; N ograve ; B 21 -9 450 737 ;
+C -1 ; WX 502 ; N otilde ; B 21 -9 475 709 ;
+C -1 ; WX 370 ; N scaron ; B -17 -9 405 736 ;
+C -1 ; WX 553 ; N uacute ; B 30 -9 513 737 ;
+C -1 ; WX 553 ; N ucircumflex ; B 30 -9 513 737 ;
+C -1 ; WX 553 ; N udieresis ; B 30 -9 513 692 ;
+C -1 ; WX 553 ; N ugrave ; B 30 -9 513 737 ;
+C -1 ; WX 475 ; N ydieresis ; B -113 -218 485 692 ;
+C -1 ; WX 440 ; N zcaron ; B -15 -12 440 736 ;
+C -1 ; WX 822 ; N trademark ; B 118 398 716 663 ;
+C -1 ; WX 900 ; N copyright ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N logicalnot ; B 124 174 710 419 ;
+C -1 ; WX 900 ; N registered ; B 66 -46 838 726 ;
+C -1 ; WX 833 ; N minus ; B 124 269 710 328 ;
+C -1 ; WX 671 ; N Eth ; B -28 0 624 672 ;
+C -1 ; WX 532 ; N Thorn ; B -30 0 518 672 ;
+C -1 ; WX 562 ; N Yacute ; B 31 0 642 930 ;
+C -1 ; WX 500 ; N brokenbar ; B 219 -172 282 699 ;
+C -1 ; WX 329 ; N degree ; B 26 434 303 710 ;
+C -1 ; WX 833 ; N divide ; B 124 66 710 531 ;
+C -1 ; WX 500 ; N eth ; B 21 -9 464 726 ;
+C -1 ; WX 547 ; N mu ; B -39 -204 532 433 ;
+C -1 ; WX 833 ; N multiply ; B 146 26 691 571 ;
+C -1 ; WX 867 ; N onehalf ; B 51 0 844 678 ;
+C -1 ; WX 867 ; N onequarter ; B 51 -22 848 678 ;
+C -1 ; WX 367 ; N onesuperior ; B 54 268 267 679 ;
+C -1 ; WX 833 ; N plusminus ; B 124 20 710 577 ;
+C -1 ; WX 516 ; N thorn ; B -70 -218 461 737 ;
+C -1 ; WX 868 ; N threequarters ; B 0 -22 848 679 ;
+C -1 ; WX 367 ; N threesuperior ; B 0 261 338 679 ;
+C -1 ; WX 367 ; N twosuperior ; B -15 268 342 679 ;
+C -1 ; WX 475 ; N yacute ; B -113 -218 485 737 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 280
+KPX hyphen T -37
+KPX hyphen V -56
+KPX hyphen W -56
+KPX hyphen X -37
+KPX hyphen Y -74
+KPX A quoteright -130
+KPX A colon 19
+KPX A semicolon 19
+KPX A S 19
+KPX A T -37
+KPX A U -23
+KPX A V -56
+KPX A W -42
+KPX A Y -42
+KPX A y -19
+KPX A quotedblright -130
+KPX B hyphen 56
+KPX B S 19
+KPX B V -19
+KPX B W -19
+KPX B Y -19
+KPX C quoteright 37
+KPX C hyphen 23
+KPX C S 19
+KPX C quotedblright 37
+KPX D hyphen 37
+KPX D A -19
+KPX D V -19
+KPX D W -19
+KPX D Y -28
+KPX D Aring -19
+KPX F comma -167
+KPX F hyphen -56
+KPX F period -167
+KPX F colon -37
+KPX F semicolon -37
+KPX F A -32
+KPX F a -42
+KPX F e -46
+KPX F o -46
+KPX F ae -42
+KPX F oslash -46
+KPX F oe -46
+KPX F Aring -32
+KPX G hyphen 19
+KPX J A -23
+KPX J Aring -23
+KPX K hyphen -37
+KPX K A -23
+KPX K C -28
+KPX K O -28
+KPX K U -37
+KPX K W -42
+KPX K Y -32
+KPX K a -19
+KPX K e -56
+KPX K o -56
+KPX K u -56
+KPX K y -83
+KPX K Oslash -28
+KPX K OE -28
+KPX K ae -19
+KPX K oslash -56
+KPX K oe -56
+KPX K Aring -23
+KPX L quoteright -185
+KPX L hyphen 56
+KPX L A 19
+KPX L T -74
+KPX L U -19
+KPX L V -102
+KPX L W -88
+KPX L Y -88
+KPX L u -19
+KPX L y -37
+KPX L quotesinglbase 19
+KPX L quotedblbase 19
+KPX L quotedblright -185
+KPX L Aring 19
+KPX O comma -37
+KPX O hyphen 19
+KPX O period -37
+KPX O V -19
+KPX O X -19
+KPX O Y -19
+KPX P comma -250
+KPX P hyphen -74
+KPX P period -250
+KPX P colon -19
+KPX P semicolon -19
+KPX P A -56
+KPX P U -19
+KPX P W -19
+KPX P Y -19
+KPX P a -37
+KPX P e -56
+KPX P o -51
+KPX P s -32
+KPX P ae -37
+KPX P oslash -51
+KPX P oe -51
+KPX P Aring -56
+KPX Q quoteright 19
+KPX Q hyphen 19
+KPX Q quotedblright 19
+KPX R quoteright -37
+KPX R comma 19
+KPX R hyphen -19
+KPX R period 19
+KPX R T -19
+KPX R V -19
+KPX R W -23
+KPX R Y -37
+KPX R quoteleft -19
+KPX R a -19
+KPX R e -19
+KPX R o -19
+KPX R y -19
+KPX R quotedblleft -19
+KPX R quotedblright -37
+KPX R ae -19
+KPX R oslash -19
+KPX R oe -19
+KPX S A 37
+KPX S G 19
+KPX S O 19
+KPX S Q 19
+KPX S S 19
+KPX S Oslash 19
+KPX S OE 19
+KPX S Aring 37
+KPX T comma -148
+KPX T hyphen -130
+KPX T period -148
+KPX T colon -37
+KPX T semicolon -37
+KPX T A -56
+KPX T T 19
+KPX T a -116
+KPX T c -97
+KPX T e -97
+KPX T i -19
+KPX T o -116
+KPX T r -74
+KPX T s -93
+KPX T u -93
+KPX T w -93
+KPX T y -74
+KPX T ae -116
+KPX T oslash -116
+KPX T oe -116
+KPX T Aring -56
+KPX U A -28
+KPX U J -19
+KPX U Z -19
+KPX U Aring -28
+KPX V comma -185
+KPX V hyphen -56
+KPX V period -185
+KPX V colon -93
+KPX V semicolon -93
+KPX V A -79
+KPX V O -19
+KPX V a -93
+KPX V e -93
+KPX V i -28
+KPX V o -60
+KPX V u -32
+KPX V y -46
+KPX V Oslash -19
+KPX V OE -19
+KPX V ae -93
+KPX V oslash -60
+KPX V oe -60
+KPX V Aring -79
+KPX W comma -134
+KPX W hyphen -37
+KPX W period -134
+KPX W colon -28
+KPX W semicolon -28
+KPX W A -28
+KPX W a -51
+KPX W e -74
+KPX W i -19
+KPX W o -51
+KPX W r -28
+KPX W u -28
+KPX W y -23
+KPX W ae -51
+KPX W oslash -51
+KPX W oe -51
+KPX W Aring -28
+KPX X hyphen -19
+KPX X A -19
+KPX X Aring -19
+KPX Y comma -130
+KPX Y hyphen -111
+KPX Y period -130
+KPX Y colon -106
+KPX Y semicolon -106
+KPX Y A -46
+KPX Y a -116
+KPX Y e -116
+KPX Y i -19
+KPX Y o -97
+KPX Y u -56
+KPX Y ae -116
+KPX Y oslash -97
+KPX Y oe -97
+KPX Y Aring -46
+KPX Z hyphen 37
+KPX quoteleft A -130
+KPX quoteleft J -130
+KPX quoteleft V 19
+KPX quoteleft AE -111
+KPX quoteleft Aring -130
+KPX f quoteright 93
+KPX f comma -83
+KPX f hyphen -19
+KPX f period -83
+KPX f quotedblright 93
+KPX r comma -130
+KPX r hyphen -19
+KPX r period -130
+KPX v comma -46
+KPX v hyphen 37
+KPX v period -46
+KPX w comma -56
+KPX w hyphen 19
+KPX w period -56
+KPX y comma -60
+KPX y hyphen 19
+KPX y period -60
+KPX quotedblleft A -130
+KPX quotedblleft J -130
+KPX quotedblleft V 19
+KPX quotedblleft AE -111
+KPX quotedblleft Aring -130
+KPX AE hyphen 19
+KPX Lslash quoteright -185
+KPX Lslash hyphen 56
+KPX Lslash A 19
+KPX Lslash T -74
+KPX Lslash U -19
+KPX Lslash V -102
+KPX Lslash W -88
+KPX Lslash Y -88
+KPX Lslash u -19
+KPX Lslash y -37
+KPX Lslash quotesinglbase 19
+KPX Lslash quotedblbase 19
+KPX Lslash quotedblright -185
+KPX Lslash Aring 19
+KPX Oslash comma -37
+KPX Oslash hyphen 19
+KPX Oslash period -37
+KPX Oslash V -19
+KPX Oslash X -19
+KPX Oslash Y -19
+KPX Aring quoteright -130
+KPX Aring colon 19
+KPX Aring semicolon 19
+KPX Aring S 19
+KPX Aring T -37
+KPX Aring U -23
+KPX Aring V -56
+KPX Aring W -42
+KPX Aring Y -42
+KPX Aring y -19
+KPX Aring quotedblright -130
+KPX Eth hyphen 37
+KPX Eth A -19
+KPX Eth V -19
+KPX Eth W -19
+KPX Eth Y -28
+KPX Eth Aring -19
+KPX Thorn quoteright -37
+KPX Thorn comma -148
+KPX Thorn period -148
+KPX Thorn quotedblright -37
+EndKernPairs
+StartTrackKern 3
+TrackKern -1 6 0.10 144 -2.09
+TrackKern -2 6 0.05 144 -4.02
+TrackKern -3 6 0.00 144 -5.96
+EndTrackKern
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/bchri8a.pfb b/Master/tlpkg/tlgs/lib/fonts/bchri8a.pfb
new file mode 100644
index 00000000000..b5d4ded6b26
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/bchri8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/putb8a.afm b/Master/tlpkg/tlgs/lib/fonts/putb8a.afm
new file mode 100644
index 00000000000..a3fcbc59365
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putb8a.afm
@@ -0,0 +1,1007 @@
+StartFontMetrics 2.0
+Comment Copyright (c) 1989, 1991 Adobe Systems Incorporated.
+Comment The Utopia fonts are freely available; see http://tug.org/fonts/utopia.
+Comment Creation Date: Wed Oct 2 18:25:02 1991
+Comment License clarified 17 November 2006.
+Comment UniqueID 36543
+Comment VMusage 33079 39971
+FontName Utopia-Bold
+FullName Utopia Bold
+FamilyName Utopia
+Weight Bold
+ItalicAngle 0
+IsFixedPitch false
+FontBBox -155 -250 1249 916
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+Notice Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved. Utopia is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries. Used under license.
+EncodingScheme AdobeStandardEncoding
+CapHeight 692
+XHeight 490
+Ascender 742
+Descender -230
+StartCharMetrics 228
+C 32 ; WX 210 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 278 ; N exclam ; B 47 -12 231 707 ;
+C 34 ; WX 473 ; N quotedbl ; B 71 407 402 707 ;
+C 35 ; WX 560 ; N numbersign ; B 14 0 547 668 ;
+C 36 ; WX 560 ; N dollar ; B 38 -104 524 748 ;
+C 37 ; WX 887 ; N percent ; B 40 -31 847 701 ;
+C 38 ; WX 748 ; N ampersand ; B 45 -12 734 680 ;
+C 39 ; WX 252 ; N quoteright ; B 40 387 212 707 ;
+C 40 ; WX 365 ; N parenleft ; B 99 -135 344 699 ;
+C 41 ; WX 365 ; N parenright ; B 21 -135 266 699 ;
+C 42 ; WX 442 ; N asterisk ; B 40 315 402 707 ;
+C 43 ; WX 600 ; N plus ; B 58 0 542 490 ;
+C 44 ; WX 280 ; N comma ; B 40 -167 226 180 ;
+C 45 ; WX 392 ; N hyphen ; B 65 203 328 298 ;
+C 46 ; WX 280 ; N period ; B 48 -12 232 174 ;
+C 47 ; WX 378 ; N slash ; B 34 -15 344 707 ;
+C 48 ; WX 560 ; N zero ; B 31 -12 530 680 ;
+C 49 ; WX 560 ; N one ; B 102 0 459 680 ;
+C 50 ; WX 560 ; N two ; B 30 0 539 680 ;
+C 51 ; WX 560 ; N three ; B 27 -12 519 680 ;
+C 52 ; WX 560 ; N four ; B 19 0 533 668 ;
+C 53 ; WX 560 ; N five ; B 43 -12 519 668 ;
+C 54 ; WX 560 ; N six ; B 30 -12 537 680 ;
+C 55 ; WX 560 ; N seven ; B 34 -12 530 668 ;
+C 56 ; WX 560 ; N eight ; B 27 -12 533 680 ;
+C 57 ; WX 560 ; N nine ; B 34 -12 523 680 ;
+C 58 ; WX 280 ; N colon ; B 48 -12 232 490 ;
+C 59 ; WX 280 ; N semicolon ; B 40 -167 232 490 ;
+C 60 ; WX 600 ; N less ; B 61 5 539 493 ;
+C 61 ; WX 600 ; N equal ; B 58 103 542 397 ;
+C 62 ; WX 600 ; N greater ; B 61 5 539 493 ;
+C 63 ; WX 456 ; N question ; B 20 -12 433 707 ;
+C 64 ; WX 833 ; N at ; B 45 -15 797 707 ;
+C 65 ; WX 644 ; N A ; B -28 0 663 692 ;
+C 66 ; WX 683 ; N B ; B 33 0 645 692 ;
+C 67 ; WX 689 ; N C ; B 42 -15 654 707 ;
+C 68 ; WX 777 ; N D ; B 33 0 735 692 ;
+C 69 ; WX 629 ; N E ; B 33 0 604 692 ;
+C 70 ; WX 593 ; N F ; B 37 0 568 692 ;
+C 71 ; WX 726 ; N G ; B 42 -15 709 707 ;
+C 72 ; WX 807 ; N H ; B 33 0 774 692 ;
+C 73 ; WX 384 ; N I ; B 33 0 351 692 ;
+C 74 ; WX 386 ; N J ; B 6 -114 361 692 ;
+C 75 ; WX 707 ; N K ; B 33 -6 719 692 ;
+C 76 ; WX 585 ; N L ; B 33 0 584 692 ;
+C 77 ; WX 918 ; N M ; B 23 0 885 692 ;
+C 78 ; WX 739 ; N N ; B 25 0 719 692 ;
+C 79 ; WX 768 ; N O ; B 42 -15 726 707 ;
+C 80 ; WX 650 ; N P ; B 33 0 623 692 ;
+C 81 ; WX 768 ; N Q ; B 42 -193 726 707 ;
+C 82 ; WX 684 ; N R ; B 33 0 686 692 ;
+C 83 ; WX 561 ; N S ; B 42 -15 533 707 ;
+C 84 ; WX 624 ; N T ; B 15 0 609 692 ;
+C 85 ; WX 786 ; N U ; B 29 -15 757 692 ;
+C 86 ; WX 645 ; N V ; B -16 0 679 692 ;
+C 87 ; WX 933 ; N W ; B -10 0 960 692 ;
+C 88 ; WX 634 ; N X ; B -19 0 671 692 ;
+C 89 ; WX 617 ; N Y ; B -12 0 655 692 ;
+C 90 ; WX 614 ; N Z ; B 0 0 606 692 ;
+C 91 ; WX 335 ; N bracketleft ; B 123 -128 308 692 ;
+C 92 ; WX 379 ; N backslash ; B 34 -15 345 707 ;
+C 93 ; WX 335 ; N bracketright ; B 27 -128 212 692 ;
+C 94 ; WX 600 ; N asciicircum ; B 56 215 544 668 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 252 ; N quoteleft ; B 40 399 212 719 ;
+C 97 ; WX 544 ; N a ; B 41 -12 561 502 ;
+C 98 ; WX 605 ; N b ; B 15 -12 571 742 ;
+C 99 ; WX 494 ; N c ; B 34 -12 484 502 ;
+C 100 ; WX 605 ; N d ; B 34 -12 596 742 ;
+C 101 ; WX 519 ; N e ; B 34 -12 505 502 ;
+C 102 ; WX 342 ; N f ; B 27 0 421 742 ; L i fi ; L l fl ;
+C 103 ; WX 533 ; N g ; B 25 -242 546 512 ;
+C 104 ; WX 631 ; N h ; B 19 0 622 742 ;
+C 105 ; WX 316 ; N i ; B 26 0 307 720 ;
+C 106 ; WX 316 ; N j ; B -12 -232 260 720 ;
+C 107 ; WX 582 ; N k ; B 19 0 595 742 ;
+C 108 ; WX 309 ; N l ; B 19 0 300 742 ;
+C 109 ; WX 948 ; N m ; B 26 0 939 502 ;
+C 110 ; WX 638 ; N n ; B 26 0 629 502 ;
+C 111 ; WX 585 ; N o ; B 34 -12 551 502 ;
+C 112 ; WX 615 ; N p ; B 19 -230 581 502 ;
+C 113 ; WX 597 ; N q ; B 34 -230 596 502 ;
+C 114 ; WX 440 ; N r ; B 26 0 442 502 ;
+C 115 ; WX 446 ; N s ; B 38 -12 425 502 ;
+C 116 ; WX 370 ; N t ; B 32 -12 373 616 ;
+C 117 ; WX 629 ; N u ; B 23 -12 620 502 ;
+C 118 ; WX 520 ; N v ; B -8 0 546 490 ;
+C 119 ; WX 774 ; N w ; B -10 0 802 490 ;
+C 120 ; WX 522 ; N x ; B -15 0 550 490 ;
+C 121 ; WX 524 ; N y ; B -12 -242 557 490 ;
+C 122 ; WX 483 ; N z ; B -1 0 480 490 ;
+C 123 ; WX 365 ; N braceleft ; B 74 -128 325 692 ;
+C 124 ; WX 284 ; N bar ; B 94 -250 190 750 ;
+C 125 ; WX 365 ; N braceright ; B 40 -128 291 692 ;
+C 126 ; WX 600 ; N asciitilde ; B 50 158 551 339 ;
+C 161 ; WX 278 ; N exclamdown ; B 47 -217 231 502 ;
+C 162 ; WX 560 ; N cent ; B 39 -15 546 678 ;
+C 163 ; WX 560 ; N sterling ; B 21 0 555 679 ;
+C 164 ; WX 100 ; N fraction ; B -155 -27 255 695 ;
+C 165 ; WX 560 ; N yen ; B 3 0 562 668 ;
+C 166 ; WX 560 ; N florin ; B -40 -135 562 691 ;
+C 167 ; WX 566 ; N section ; B 35 -115 531 707 ;
+C 168 ; WX 560 ; N currency ; B 21 73 539 596 ;
+C 169 ; WX 252 ; N quotesingle ; B 57 407 196 707 ;
+C 170 ; WX 473 ; N quotedblleft ; B 40 399 433 719 ;
+C 171 ; WX 487 ; N guillemotleft ; B 40 37 452 464 ;
+C 172 ; WX 287 ; N guilsinglleft ; B 40 37 252 464 ;
+C 173 ; WX 287 ; N guilsinglright ; B 35 37 247 464 ;
+C 174 ; WX 639 ; N fi ; B 27 0 630 742 ;
+C 175 ; WX 639 ; N fl ; B 27 0 630 742 ;
+C 177 ; WX 500 ; N endash ; B 0 209 500 292 ;
+C 178 ; WX 510 ; N dagger ; B 35 -125 475 707 ;
+C 179 ; WX 486 ; N daggerdbl ; B 35 -119 451 707 ;
+C 180 ; WX 280 ; N periodcentered ; B 48 156 232 342 ;
+C 182 ; WX 552 ; N paragraph ; B 35 -101 527 692 ;
+C 183 ; WX 455 ; N bullet ; B 50 174 405 529 ;
+C 184 ; WX 252 ; N quotesinglbase ; B 40 -153 212 167 ;
+C 185 ; WX 473 ; N quotedblbase ; B 40 -153 433 167 ;
+C 186 ; WX 473 ; N quotedblright ; B 40 387 433 707 ;
+C 187 ; WX 487 ; N guillemotright ; B 35 37 447 464 ;
+C 188 ; WX 1000 ; N ellipsis ; B 75 -12 925 174 ;
+C 189 ; WX 1289 ; N perthousand ; B 40 -31 1249 701 ;
+C 191 ; WX 456 ; N questiondown ; B 23 -217 436 502 ;
+C 193 ; WX 430 ; N grave ; B 40 511 312 740 ;
+C 194 ; WX 430 ; N acute ; B 119 511 391 740 ;
+C 195 ; WX 430 ; N circumflex ; B 28 520 402 747 ;
+C 196 ; WX 430 ; N tilde ; B 2 553 427 706 ;
+C 197 ; WX 430 ; N macron ; B 60 587 371 674 ;
+C 198 ; WX 430 ; N breve ; B 56 556 375 716 ;
+C 199 ; WX 430 ; N dotaccent ; B 136 561 294 710 ;
+C 200 ; WX 430 ; N dieresis ; B 16 561 414 710 ;
+C 202 ; WX 430 ; N ring ; B 96 540 334 762 ;
+C 203 ; WX 430 ; N cedilla ; B 136 -246 335 0 ;
+C 205 ; WX 430 ; N hungarumlaut ; B 64 521 446 751 ;
+C 206 ; WX 430 ; N ogonek ; B 105 -246 325 0 ;
+C 207 ; WX 430 ; N caron ; B 28 520 402 747 ;
+C 208 ; WX 1000 ; N emdash ; B 0 209 1000 292 ;
+C 225 ; WX 879 ; N AE ; B -77 0 854 692 ;
+C 227 ; WX 405 ; N ordfeminine ; B 28 265 395 590 ;
+C 232 ; WX 591 ; N Lslash ; B 30 0 590 692 ;
+C 233 ; WX 768 ; N Oslash ; B 42 -61 726 747 ;
+C 234 ; WX 1049 ; N OE ; B 42 0 1024 692 ;
+C 235 ; WX 427 ; N ordmasculine ; B 28 265 399 590 ;
+C 241 ; WX 806 ; N ae ; B 41 -12 792 502 ;
+C 245 ; WX 316 ; N dotlessi ; B 26 0 307 502 ;
+C 248 ; WX 321 ; N lslash ; B 16 0 332 742 ;
+C 249 ; WX 585 ; N oslash ; B 34 -51 551 535 ;
+C 250 ; WX 866 ; N oe ; B 34 -12 852 502 ;
+C 251 ; WX 662 ; N germandbls ; B 29 -12 647 742 ;
+C -1 ; WX 402 ; N onesuperior ; B 71 272 324 680 ;
+C -1 ; WX 600 ; N minus ; B 58 210 542 290 ;
+C -1 ; WX 396 ; N degree ; B 35 360 361 680 ;
+C -1 ; WX 585 ; N oacute ; B 34 -12 551 740 ;
+C -1 ; WX 768 ; N Odieresis ; B 42 -15 726 881 ;
+C -1 ; WX 585 ; N odieresis ; B 34 -12 551 710 ;
+C -1 ; WX 629 ; N Eacute ; B 33 0 604 904 ;
+C -1 ; WX 629 ; N ucircumflex ; B 23 -12 620 747 ;
+C -1 ; WX 900 ; N onequarter ; B 73 -27 814 695 ;
+C -1 ; WX 600 ; N logicalnot ; B 58 95 542 397 ;
+C -1 ; WX 629 ; N Ecircumflex ; B 33 0 604 905 ;
+C -1 ; WX 900 ; N onehalf ; B 53 -27 849 695 ;
+C -1 ; WX 768 ; N Otilde ; B 42 -15 726 876 ;
+C -1 ; WX 629 ; N uacute ; B 23 -12 620 740 ;
+C -1 ; WX 519 ; N eacute ; B 34 -12 505 740 ;
+C -1 ; WX 316 ; N iacute ; B 26 0 329 740 ;
+C -1 ; WX 629 ; N Egrave ; B 33 0 604 904 ;
+C -1 ; WX 316 ; N icircumflex ; B -28 0 346 747 ;
+C -1 ; WX 629 ; N mu ; B 23 -242 620 502 ;
+C -1 ; WX 284 ; N brokenbar ; B 94 -175 190 675 ;
+C -1 ; WX 609 ; N thorn ; B 13 -230 575 722 ;
+C -1 ; WX 644 ; N Aring ; B -28 0 663 872 ;
+C -1 ; WX 524 ; N yacute ; B -12 -242 557 740 ;
+C -1 ; WX 617 ; N Ydieresis ; B -12 0 655 881 ;
+C -1 ; WX 1090 ; N trademark ; B 38 277 1028 692 ;
+C -1 ; WX 800 ; N registered ; B 36 -15 764 707 ;
+C -1 ; WX 585 ; N ocircumflex ; B 34 -12 551 747 ;
+C -1 ; WX 644 ; N Agrave ; B -28 0 663 904 ;
+C -1 ; WX 561 ; N Scaron ; B 42 -15 533 916 ;
+C -1 ; WX 786 ; N Ugrave ; B 29 -15 757 904 ;
+C -1 ; WX 629 ; N Edieresis ; B 33 0 604 881 ;
+C -1 ; WX 786 ; N Uacute ; B 29 -15 757 904 ;
+C -1 ; WX 585 ; N otilde ; B 34 -12 551 706 ;
+C -1 ; WX 638 ; N ntilde ; B 26 0 629 706 ;
+C -1 ; WX 524 ; N ydieresis ; B -12 -242 557 710 ;
+C -1 ; WX 644 ; N Aacute ; B -28 0 663 904 ;
+C -1 ; WX 585 ; N eth ; B 34 -12 551 742 ;
+C -1 ; WX 544 ; N acircumflex ; B 41 -12 561 747 ;
+C -1 ; WX 544 ; N aring ; B 41 -12 561 762 ;
+C -1 ; WX 768 ; N Ograve ; B 42 -15 726 904 ;
+C -1 ; WX 494 ; N ccedilla ; B 34 -246 484 502 ;
+C -1 ; WX 600 ; N multiply ; B 75 20 525 476 ;
+C -1 ; WX 600 ; N divide ; B 58 6 542 494 ;
+C -1 ; WX 402 ; N twosuperior ; B 29 272 382 680 ;
+C -1 ; WX 739 ; N Ntilde ; B 25 0 719 876 ;
+C -1 ; WX 629 ; N ugrave ; B 23 -12 620 740 ;
+C -1 ; WX 786 ; N Ucircumflex ; B 29 -15 757 905 ;
+C -1 ; WX 644 ; N Atilde ; B -28 0 663 876 ;
+C -1 ; WX 483 ; N zcaron ; B -1 0 480 747 ;
+C -1 ; WX 316 ; N idieresis ; B -37 0 361 710 ;
+C -1 ; WX 644 ; N Acircumflex ; B -28 0 663 905 ;
+C -1 ; WX 384 ; N Icircumflex ; B 4 0 380 905 ;
+C -1 ; WX 617 ; N Yacute ; B -12 0 655 904 ;
+C -1 ; WX 768 ; N Oacute ; B 42 -15 726 904 ;
+C -1 ; WX 644 ; N Adieresis ; B -28 0 663 881 ;
+C -1 ; WX 614 ; N Zcaron ; B 0 0 606 916 ;
+C -1 ; WX 544 ; N agrave ; B 41 -12 561 740 ;
+C -1 ; WX 402 ; N threesuperior ; B 30 265 368 680 ;
+C -1 ; WX 585 ; N ograve ; B 34 -12 551 740 ;
+C -1 ; WX 900 ; N threequarters ; B 40 -27 842 695 ;
+C -1 ; WX 783 ; N Eth ; B 35 0 741 692 ;
+C -1 ; WX 600 ; N plusminus ; B 58 0 542 549 ;
+C -1 ; WX 629 ; N udieresis ; B 23 -12 620 710 ;
+C -1 ; WX 519 ; N edieresis ; B 34 -12 505 710 ;
+C -1 ; WX 544 ; N aacute ; B 41 -12 561 740 ;
+C -1 ; WX 316 ; N igrave ; B -17 0 307 740 ;
+C -1 ; WX 384 ; N Idieresis ; B -13 0 397 881 ;
+C -1 ; WX 544 ; N adieresis ; B 41 -12 561 710 ;
+C -1 ; WX 384 ; N Iacute ; B 33 0 373 904 ;
+C -1 ; WX 800 ; N copyright ; B 36 -15 764 707 ;
+C -1 ; WX 384 ; N Igrave ; B 9 0 351 904 ;
+C -1 ; WX 689 ; N Ccedilla ; B 42 -246 654 707 ;
+C -1 ; WX 446 ; N scaron ; B 38 -12 425 747 ;
+C -1 ; WX 519 ; N egrave ; B 34 -12 505 740 ;
+C -1 ; WX 768 ; N Ocircumflex ; B 42 -15 726 905 ;
+C -1 ; WX 640 ; N Thorn ; B 33 0 622 692 ;
+C -1 ; WX 544 ; N atilde ; B 41 -12 561 706 ;
+C -1 ; WX 786 ; N Udieresis ; B 29 -15 757 881 ;
+C -1 ; WX 519 ; N ecircumflex ; B 34 -12 505 747 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 685
+
+KPX A z 25
+KPX A y -40
+KPX A w -42
+KPX A v -48
+KPX A u -18
+KPX A t -12
+KPX A s 6
+KPX A quoteright -110
+KPX A quotedblright -80
+KPX A q -6
+KPX A p -18
+KPX A o -12
+KPX A e -6
+KPX A d -12
+KPX A c -12
+KPX A b -12
+KPX A a -6
+KPX A Y -64
+KPX A X -18
+KPX A W -54
+KPX A V -70
+KPX A U -40
+KPX A T -58
+KPX A Q -18
+KPX A O -18
+KPX A G -18
+KPX A C -18
+
+KPX B y -18
+KPX B u -12
+KPX B r -12
+KPX B o -6
+KPX B l -15
+KPX B k -15
+KPX B i -12
+KPX B h -15
+KPX B e -6
+KPX B b -10
+KPX B a -12
+KPX B W -20
+KPX B V -20
+KPX B U -25
+KPX B T -20
+
+KPX C z -5
+KPX C y -24
+KPX C u -18
+KPX C r -6
+KPX C o -12
+KPX C e -12
+KPX C a -16
+KPX C Q -6
+KPX C O -6
+KPX C G -6
+KPX C C -6
+
+KPX D u -12
+KPX D r -12
+KPX D period -40
+KPX D o -5
+KPX D i -12
+KPX D h -18
+KPX D e -5
+KPX D comma -40
+KPX D a -15
+KPX D Y -60
+KPX D W -40
+KPX D V -40
+
+KPX E y -30
+KPX E w -24
+KPX E v -24
+KPX E u -12
+KPX E t -18
+KPX E s -12
+KPX E r -4
+KPX E q -6
+KPX E period 10
+KPX E p -18
+KPX E o -6
+KPX E n -4
+KPX E m -4
+KPX E j -6
+KPX E i -6
+KPX E g -6
+KPX E e -6
+KPX E d -6
+KPX E comma 10
+KPX E c -6
+KPX E b -5
+KPX E a -4
+KPX E Y -6
+KPX E W -6
+KPX E V -6
+
+KPX F y -18
+KPX F u -12
+KPX F r -36
+KPX F quoteright 20
+KPX F quotedblright 20
+KPX F period -150
+KPX F o -36
+KPX F l -12
+KPX F i -22
+KPX F e -36
+KPX F comma -150
+KPX F a -48
+KPX F A -60
+
+KPX G y -12
+KPX G u -12
+KPX G r -18
+KPX G quotedblright -20
+KPX G n -18
+KPX G l -6
+KPX G i -12
+KPX G h -12
+KPX G a -12
+
+KPX H y -24
+KPX H u -26
+KPX H o -30
+KPX H i -18
+KPX H e -30
+KPX H a -25
+
+KPX I z -6
+KPX I y -6
+KPX I x -6
+KPX I w -18
+KPX I v -24
+KPX I u -26
+KPX I t -24
+KPX I s -18
+KPX I r -12
+KPX I p -26
+KPX I o -30
+KPX I n -18
+KPX I m -18
+KPX I l -6
+KPX I k -6
+KPX I h -6
+KPX I g -6
+KPX I f -6
+KPX I e -30
+KPX I d -30
+KPX I c -30
+KPX I b -6
+KPX I a -24
+
+KPX J y -20
+KPX J u -36
+KPX J o -35
+KPX J i -20
+KPX J e -35
+KPX J bracketright 15
+KPX J braceright 15
+KPX J a -36
+
+KPX K y -70
+KPX K w -60
+KPX K v -80
+KPX K u -42
+KPX K o -30
+KPX K l 10
+KPX K i 6
+KPX K h 10
+KPX K e -18
+KPX K a -6
+KPX K Q -36
+KPX K O -36
+KPX K G -36
+KPX K C -36
+KPX K A 20
+
+KPX L y -52
+KPX L w -58
+KPX L u -12
+KPX L quoteright -130
+KPX L quotedblright -130
+KPX L l 6
+KPX L j -6
+KPX L Y -70
+KPX L W -78
+KPX L V -95
+KPX L U -32
+KPX L T -80
+KPX L Q -12
+KPX L O -12
+KPX L G -12
+KPX L C -12
+KPX L A 30
+
+KPX M y -24
+KPX M u -36
+KPX M o -30
+KPX M n -6
+KPX M j -12
+KPX M i -12
+KPX M e -30
+KPX M d -30
+KPX M c -30
+KPX M a -25
+
+KPX N y -24
+KPX N u -30
+KPX N o -30
+KPX N i -24
+KPX N e -30
+KPX N a -30
+
+KPX O z -6
+KPX O u -6
+KPX O t -6
+KPX O s -6
+KPX O r -10
+KPX O q -6
+KPX O period -40
+KPX O p -10
+KPX O o -6
+KPX O n -10
+KPX O m -10
+KPX O l -15
+KPX O k -15
+KPX O i -6
+KPX O h -15
+KPX O g -6
+KPX O e -6
+KPX O d -6
+KPX O comma -40
+KPX O c -6
+KPX O b -15
+KPX O a -12
+KPX O Y -50
+KPX O X -40
+KPX O W -35
+KPX O V -35
+KPX O T -40
+KPX O A -30
+
+KPX P y 10
+KPX P u -18
+KPX P t -6
+KPX P s -30
+KPX P r -12
+KPX P quoteright 20
+KPX P quotedblright 20
+KPX P period -200
+KPX P o -36
+KPX P n -12
+KPX P l -15
+KPX P i -6
+KPX P hyphen -30
+KPX P h -15
+KPX P e -36
+KPX P comma -200
+KPX P a -36
+KPX P I -20
+KPX P H -20
+KPX P E -20
+KPX P A -85
+
+KPX Q u -6
+KPX Q a -18
+KPX Q Y -50
+KPX Q X -40
+KPX Q W -35
+KPX Q V -35
+KPX Q U -25
+KPX Q T -40
+KPX Q A -30
+
+KPX R y -20
+KPX R u -12
+KPX R t -25
+KPX R quoteright -10
+KPX R quotedblright -10
+KPX R o -12
+KPX R e -18
+KPX R a -6
+KPX R Y -32
+KPX R X 20
+KPX R W -18
+KPX R V -26
+KPX R U -30
+KPX R T -20
+KPX R Q -10
+KPX R O -10
+KPX R G -10
+KPX R C -10
+
+KPX S y -35
+KPX S w -30
+KPX S v -40
+KPX S u -24
+KPX S t -24
+KPX S r -10
+KPX S quoteright -15
+KPX S quotedblright -15
+KPX S p -24
+KPX S n -24
+KPX S m -24
+KPX S l -18
+KPX S k -24
+KPX S j -30
+KPX S i -12
+KPX S h -12
+KPX S a -18
+
+KPX T z -64
+KPX T y -74
+KPX T w -72
+KPX T u -74
+KPX T semicolon -50
+KPX T s -82
+KPX T r -74
+KPX T quoteright 24
+KPX T quotedblright 24
+KPX T period -95
+KPX T parenright 40
+KPX T o -90
+KPX T m -72
+KPX T i -28
+KPX T hyphen -110
+KPX T endash -40
+KPX T emdash -60
+KPX T e -80
+KPX T comma -95
+KPX T bracketright 40
+KPX T braceright 30
+KPX T a -90
+KPX T Y 12
+KPX T X 10
+KPX T W 15
+KPX T V 6
+KPX T T 30
+KPX T S -12
+KPX T Q -25
+KPX T O -25
+KPX T G -25
+KPX T C -25
+KPX T A -52
+
+KPX U z -35
+KPX U y -30
+KPX U x -30
+KPX U v -30
+KPX U t -36
+KPX U s -45
+KPX U r -50
+KPX U p -50
+KPX U n -50
+KPX U m -50
+KPX U l -12
+KPX U k -12
+KPX U i -22
+KPX U h -6
+KPX U g -40
+KPX U f -20
+KPX U d -40
+KPX U c -40
+KPX U b -12
+KPX U a -50
+KPX U A -50
+
+KPX V y -36
+KPX V u -50
+KPX V semicolon -45
+KPX V r -75
+KPX V quoteright 50
+KPX V quotedblright 36
+KPX V period -135
+KPX V parenright 80
+KPX V o -70
+KPX V i 20
+KPX V hyphen -90
+KPX V emdash -20
+KPX V e -70
+KPX V comma -135
+KPX V colon -45
+KPX V bracketright 80
+KPX V braceright 80
+KPX V a -70
+KPX V Q -20
+KPX V O -20
+KPX V G -20
+KPX V C -20
+KPX V A -60
+
+KPX W y -50
+KPX W u -46
+KPX W t -30
+KPX W semicolon -40
+KPX W r -50
+KPX W quoteright 40
+KPX W quotedblright 24
+KPX W period -100
+KPX W parenright 80
+KPX W o -60
+KPX W m -50
+KPX W i 5
+KPX W hyphen -70
+KPX W h 20
+KPX W e -60
+KPX W d -60
+KPX W comma -100
+KPX W colon -40
+KPX W bracketright 80
+KPX W braceright 70
+KPX W a -75
+KPX W T 30
+KPX W Q -20
+KPX W O -20
+KPX W G -20
+KPX W C -20
+KPX W A -58
+
+KPX X y -40
+KPX X u -24
+KPX X quoteright 15
+KPX X e -6
+KPX X a -6
+KPX X Q -24
+KPX X O -30
+KPX X G -30
+KPX X C -30
+KPX X A 20
+
+KPX Y v -50
+KPX Y u -65
+KPX Y t -46
+KPX Y semicolon -37
+KPX Y quoteright 50
+KPX Y quotedblright 36
+KPX Y q -100
+KPX Y period -90
+KPX Y parenright 60
+KPX Y o -90
+KPX Y l 25
+KPX Y i 15
+KPX Y hyphen -100
+KPX Y endash -30
+KPX Y emdash -50
+KPX Y e -90
+KPX Y d -90
+KPX Y comma -90
+KPX Y colon -60
+KPX Y bracketright 80
+KPX Y braceright 64
+KPX Y a -80
+KPX Y Y 12
+KPX Y X 12
+KPX Y W 12
+KPX Y V 12
+KPX Y T 30
+KPX Y Q -40
+KPX Y O -40
+KPX Y G -40
+KPX Y C -40
+KPX Y A -55
+
+KPX Z y -36
+KPX Z w -36
+KPX Z u -6
+KPX Z o -12
+KPX Z i -12
+KPX Z e -6
+KPX Z a -6
+KPX Z Q -18
+KPX Z O -18
+KPX Z G -18
+KPX Z C -18
+KPX Z A 25
+
+KPX a quoteright -45
+KPX a quotedblright -40
+
+KPX b y -15
+KPX b w -20
+KPX b v -20
+KPX b quoteright -45
+KPX b quotedblright -40
+KPX b period -10
+KPX b comma -10
+
+KPX braceleft Y 64
+KPX braceleft W 64
+KPX braceleft V 64
+KPX braceleft T 25
+KPX braceleft J 50
+
+KPX bracketleft Y 64
+KPX bracketleft W 64
+KPX bracketleft V 64
+KPX bracketleft T 35
+KPX bracketleft J 60
+
+KPX c quoteright -5
+
+KPX colon space -20
+
+KPX comma space -40
+KPX comma quoteright -100
+KPX comma quotedblright -100
+
+KPX d quoteright -24
+KPX d quotedblright -24
+
+KPX e z -4
+KPX e quoteright -25
+KPX e quotedblright -20
+
+KPX f quotesingle 70
+KPX f quoteright 68
+KPX f quotedblright 68
+KPX f period -10
+KPX f parenright 110
+KPX f comma -20
+KPX f bracketright 100
+KPX f braceright 80
+
+KPX g y 20
+KPX g p 20
+KPX g f 20
+KPX g comma 10
+
+KPX h quoteright -60
+KPX h quotedblright -60
+
+KPX i quoteright -20
+KPX i quotedblright -20
+
+KPX j quoteright -20
+KPX j quotedblright -20
+KPX j period -10
+KPX j comma -10
+
+KPX k quoteright -30
+KPX k quotedblright -30
+
+KPX l quoteright -24
+KPX l quotedblright -24
+
+KPX m quoteright -60
+KPX m quotedblright -60
+
+KPX n quoteright -60
+KPX n quotedblright -60
+
+KPX o z -12
+KPX o y -25
+KPX o x -18
+KPX o w -30
+KPX o v -30
+KPX o quoteright -45
+KPX o quotedblright -40
+KPX o period -10
+KPX o comma -10
+
+KPX p z -10
+KPX p y -15
+KPX p w -15
+KPX p quoteright -45
+KPX p quotedblright -60
+KPX p period -10
+KPX p comma -10
+
+KPX parenleft Y 64
+KPX parenleft W 64
+KPX parenleft V 64
+KPX parenleft T 50
+KPX parenleft J 50
+
+KPX period space -40
+KPX period quoteright -100
+KPX period quotedblright -100
+
+KPX q quoteright -50
+KPX q quotedblright -50
+KPX q period -10
+KPX q comma -10
+
+KPX quotedblleft z -26
+KPX quotedblleft w 10
+KPX quotedblleft u -40
+KPX quotedblleft t -40
+KPX quotedblleft s -32
+KPX quotedblleft r -40
+KPX quotedblleft q -70
+KPX quotedblleft p -40
+KPX quotedblleft o -70
+KPX quotedblleft n -40
+KPX quotedblleft m -40
+KPX quotedblleft g -50
+KPX quotedblleft f -30
+KPX quotedblleft e -70
+KPX quotedblleft d -70
+KPX quotedblleft c -70
+KPX quotedblleft a -60
+KPX quotedblleft Y 30
+KPX quotedblleft X 20
+KPX quotedblleft W 40
+KPX quotedblleft V 40
+KPX quotedblleft T 18
+KPX quotedblleft J -24
+KPX quotedblleft A -122
+
+KPX quotedblright space -40
+KPX quotedblright period -100
+KPX quotedblright comma -100
+
+KPX quoteleft z -26
+KPX quoteleft y -5
+KPX quoteleft x -5
+KPX quoteleft w 5
+KPX quoteleft v -5
+KPX quoteleft u -25
+KPX quoteleft t -25
+KPX quoteleft s -40
+KPX quoteleft r -40
+KPX quoteleft quoteleft -30
+KPX quoteleft q -70
+KPX quoteleft p -40
+KPX quoteleft o -70
+KPX quoteleft n -40
+KPX quoteleft m -40
+KPX quoteleft g -50
+KPX quoteleft f -10
+KPX quoteleft e -70
+KPX quoteleft d -70
+KPX quoteleft c -70
+KPX quoteleft a -60
+KPX quoteleft Y 35
+KPX quoteleft X 30
+KPX quoteleft W 35
+KPX quoteleft V 35
+KPX quoteleft T 35
+KPX quoteleft J -24
+KPX quoteleft A -122
+
+KPX quoteright v -20
+KPX quoteright t -50
+KPX quoteright space -40
+KPX quoteright s -70
+KPX quoteright r -42
+KPX quoteright quoteright -30
+KPX quoteright period -100
+KPX quoteright m -42
+KPX quoteright l -6
+KPX quoteright d -100
+KPX quoteright comma -100
+
+KPX r z 20
+KPX r y 18
+KPX r x 12
+KPX r w 30
+KPX r v 30
+KPX r u 8
+KPX r t 8
+KPX r semicolon 20
+KPX r quoteright -20
+KPX r quotedblright -10
+KPX r q -6
+KPX r period -60
+KPX r o -6
+KPX r n 8
+KPX r m 8
+KPX r l -10
+KPX r k -10
+KPX r i 8
+KPX r hyphen -60
+KPX r h -10
+KPX r g 5
+KPX r f 8
+KPX r emdash -20
+KPX r e -20
+KPX r d -20
+KPX r comma -80
+KPX r colon 20
+KPX r c -20
+
+KPX s quoteright -40
+KPX s quotedblright -40
+
+KPX semicolon space -20
+
+KPX space quotesinglbase -100
+KPX space quoteleft -40
+KPX space quotedblleft -40
+KPX space quotedblbase -100
+KPX space Y -60
+KPX space W -60
+KPX space V -60
+KPX space T -40
+
+KPX t period 15
+KPX t comma 10
+
+KPX u quoteright -60
+KPX u quotedblright -60
+
+KPX v semicolon 20
+KPX v quoteright 5
+KPX v quotedblright 10
+KPX v q -15
+KPX v period -75
+KPX v o -15
+KPX v e -15
+KPX v d -15
+KPX v comma -90
+KPX v colon 20
+KPX v c -15
+KPX v a -15
+
+KPX w semicolon 20
+KPX w quoteright 15
+KPX w quotedblright 20
+KPX w q -10
+KPX w period -60
+KPX w o -10
+KPX w e -10
+KPX w d -10
+KPX w comma -68
+KPX w colon 20
+KPX w c -10
+
+KPX x quoteright -25
+KPX x quotedblright -20
+KPX x q -6
+KPX x o -6
+KPX x e -12
+KPX x d -12
+KPX x c -12
+
+KPX y semicolon 20
+KPX y quoteright 5
+KPX y quotedblright 10
+KPX y period -72
+KPX y hyphen -20
+KPX y comma -72
+KPX y colon 20
+
+KPX z quoteright -20
+KPX z quotedblright -20
+KPX z o -6
+KPX z e -6
+KPX z d -6
+KPX z c -6
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/putb8a.pfb b/Master/tlpkg/tlgs/lib/fonts/putb8a.pfb
new file mode 100644
index 00000000000..f4ddef7473a
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putb8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/putbi8a.afm b/Master/tlpkg/tlgs/lib/fonts/putbi8a.afm
new file mode 100644
index 00000000000..3c00da960a8
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putbi8a.afm
@@ -0,0 +1,1019 @@
+StartFontMetrics 2.0
+Comment Copyright (c) 1989, 1991 Adobe Systems Incorporated.
+Comment The Utopia fonts are freely available; see http://tug.org/fonts/utopia.
+Comment Creation Date: Wed Oct 2 18:46:03 1991
+Comment License clarified 17 November 2006.
+Comment UniqueID 36546
+Comment VMusage 34429 41321
+FontName Utopia-BoldItalic
+FullName Utopia Bold Italic
+FamilyName Utopia
+Weight Bold
+ItalicAngle -13
+IsFixedPitch false
+FontBBox -141 -250 1297 916
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+Notice Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved. Utopia is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries. Used under license.
+EncodingScheme AdobeStandardEncoding
+CapHeight 692
+XHeight 502
+Ascender 742
+Descender -242
+StartCharMetrics 228
+C 32 ; WX 210 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 285 ; N exclam ; B 70 -12 371 707 ;
+C 34 ; WX 455 ; N quotedbl ; B 177 407 531 707 ;
+C 35 ; WX 560 ; N numbersign ; B 72 0 641 668 ;
+C 36 ; WX 560 ; N dollar ; B 67 -104 623 748 ;
+C 37 ; WX 896 ; N percent ; B 141 -31 896 702 ;
+C 38 ; WX 752 ; N ampersand ; B 97 -12 771 680 ;
+C 39 ; WX 246 ; N quoteright ; B 130 387 329 707 ;
+C 40 ; WX 350 ; N parenleft ; B 122 -135 473 699 ;
+C 41 ; WX 350 ; N parenright ; B 3 -135 354 699 ;
+C 42 ; WX 500 ; N asterisk ; B 156 315 563 707 ;
+C 43 ; WX 600 ; N plus ; B 118 0 602 490 ;
+C 44 ; WX 280 ; N comma ; B 26 -167 242 180 ;
+C 45 ; WX 392 ; N hyphen ; B 106 203 389 298 ;
+C 46 ; WX 280 ; N period ; B 67 -12 247 166 ;
+C 47 ; WX 260 ; N slash ; B 19 -15 405 707 ;
+C 48 ; WX 560 ; N zero ; B 92 -12 618 680 ;
+C 49 ; WX 560 ; N one ; B 107 0 505 680 ;
+C 50 ; WX 560 ; N two ; B 39 0 613 680 ;
+C 51 ; WX 560 ; N three ; B 56 -12 602 680 ;
+C 52 ; WX 560 ; N four ; B 63 0 592 668 ;
+C 53 ; WX 560 ; N five ; B 58 -12 628 668 ;
+C 54 ; WX 560 ; N six ; B 91 -12 621 680 ;
+C 55 ; WX 560 ; N seven ; B 147 -12 667 668 ;
+C 56 ; WX 560 ; N eight ; B 72 -12 619 680 ;
+C 57 ; WX 560 ; N nine ; B 83 -12 605 680 ;
+C 58 ; WX 280 ; N colon ; B 67 -12 315 490 ;
+C 59 ; WX 280 ; N semicolon ; B 26 -167 315 490 ;
+C 60 ; WX 600 ; N less ; B 101 5 579 495 ;
+C 61 ; WX 600 ; N equal ; B 118 103 602 397 ;
+C 62 ; WX 600 ; N greater ; B 121 5 599 495 ;
+C 63 ; WX 454 ; N question ; B 150 -12 550 707 ;
+C 64 ; WX 828 ; N at ; B 125 -15 877 707 ;
+C 65 ; WX 634 ; N A ; B -24 0 674 692 ;
+C 66 ; WX 680 ; N B ; B 40 0 724 692 ;
+C 67 ; WX 672 ; N C ; B 111 -15 777 707 ;
+C 68 ; WX 774 ; N D ; B 40 0 819 692 ;
+C 69 ; WX 622 ; N E ; B 40 0 722 692 ;
+C 70 ; WX 585 ; N F ; B 40 0 718 692 ;
+C 71 ; WX 726 ; N G ; B 111 -15 791 707 ;
+C 72 ; WX 800 ; N H ; B 40 0 915 692 ;
+C 73 ; WX 386 ; N I ; B 40 0 501 692 ;
+C 74 ; WX 388 ; N J ; B -15 -114 512 692 ;
+C 75 ; WX 688 ; N K ; B 40 -6 858 692 ;
+C 76 ; WX 586 ; N L ; B 40 0 626 692 ;
+C 77 ; WX 921 ; N M ; B 35 0 1033 692 ;
+C 78 ; WX 741 ; N N ; B 30 0 873 692 ;
+C 79 ; WX 761 ; N O ; B 113 -15 803 707 ;
+C 80 ; WX 660 ; N P ; B 40 0 729 692 ;
+C 81 ; WX 761 ; N Q ; B 113 -193 803 707 ;
+C 82 ; WX 681 ; N R ; B 40 0 731 692 ;
+C 83 ; WX 551 ; N S ; B 66 -15 605 707 ;
+C 84 ; WX 616 ; N T ; B 126 0 757 692 ;
+C 85 ; WX 776 ; N U ; B 150 -15 902 692 ;
+C 86 ; WX 630 ; N V ; B 127 0 818 692 ;
+C 87 ; WX 920 ; N W ; B 115 0 1097 692 ;
+C 88 ; WX 630 ; N X ; B -21 0 779 692 ;
+C 89 ; WX 622 ; N Y ; B 127 0 800 692 ;
+C 90 ; WX 618 ; N Z ; B 5 0 749 692 ;
+C 91 ; WX 350 ; N bracketleft ; B 91 -128 463 692 ;
+C 92 ; WX 460 ; N backslash ; B 149 -15 460 707 ;
+C 93 ; WX 350 ; N bracketright ; B 13 -128 385 692 ;
+C 94 ; WX 600 ; N asciicircum ; B 114 215 602 668 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 246 ; N quoteleft ; B 149 399 348 719 ;
+C 97 ; WX 596 ; N a ; B 61 -12 647 502 ;
+C 98 ; WX 586 ; N b ; B 69 -12 627 742 ;
+C 99 ; WX 456 ; N c ; B 73 -12 533 502 ;
+C 100 ; WX 609 ; N d ; B 64 -12 686 742 ;
+C 101 ; WX 476 ; N e ; B 73 -12 532 502 ;
+C 102 ; WX 348 ; N f ; B -94 -242 588 742 ; L i fi ; L l fl ;
+C 103 ; WX 522 ; N g ; B 21 -242 644 512 ;
+C 104 ; WX 629 ; N h ; B 79 -12 666 742 ;
+C 105 ; WX 339 ; N i ; B 101 -12 392 720 ;
+C 106 ; WX 333 ; N j ; B -85 -242 399 720 ;
+C 107 ; WX 570 ; N k ; B 74 -12 639 742 ;
+C 108 ; WX 327 ; N l ; B 97 -12 395 742 ;
+C 109 ; WX 914 ; N m ; B 81 -12 952 502 ;
+C 110 ; WX 635 ; N n ; B 80 -12 674 502 ;
+C 111 ; WX 562 ; N o ; B 77 -12 591 502 ;
+C 112 ; WX 606 ; N p ; B 35 -242 648 502 ;
+C 113 ; WX 584 ; N q ; B 64 -242 639 513 ;
+C 114 ; WX 440 ; N r ; B 86 -12 532 502 ;
+C 115 ; WX 417 ; N s ; B 45 -12 467 502 ;
+C 116 ; WX 359 ; N t ; B 103 -12 463 641 ;
+C 117 ; WX 634 ; N u ; B 106 -12 678 502 ;
+C 118 ; WX 518 ; N v ; B 103 -12 582 502 ;
+C 119 ; WX 795 ; N w ; B 105 -12 861 502 ;
+C 120 ; WX 516 ; N x ; B 9 -12 581 502 ;
+C 121 ; WX 489 ; N y ; B -14 -242 567 502 ;
+C 122 ; WX 466 ; N z ; B 18 -12 541 490 ;
+C 123 ; WX 340 ; N braceleft ; B 125 -128 474 692 ;
+C 124 ; WX 265 ; N bar ; B 152 -250 256 750 ;
+C 125 ; WX 340 ; N braceright ; B -7 -128 342 692 ;
+C 126 ; WX 600 ; N asciitilde ; B 105 157 606 338 ;
+C 161 ; WX 285 ; N exclamdown ; B 22 -217 323 502 ;
+C 162 ; WX 560 ; N cent ; B 115 -21 646 668 ;
+C 163 ; WX 560 ; N sterling ; B 31 0 618 679 ;
+C 164 ; WX 100 ; N fraction ; B -141 -27 405 695 ;
+C 165 ; WX 560 ; N yen ; B 100 0 711 668 ;
+C 166 ; WX 560 ; N florin ; B 19 -135 670 691 ;
+C 167 ; WX 568 ; N section ; B 99 -115 594 707 ;
+C 168 ; WX 560 ; N currency ; B 95 73 613 596 ;
+C 169 ; WX 246 ; N quotesingle ; B 169 376 320 707 ;
+C 170 ; WX 455 ; N quotedblleft ; B 149 399 557 719 ;
+C 171 ; WX 560 ; N guillemotleft ; B 125 37 568 464 ;
+C 172 ; WX 360 ; N guilsinglleft ; B 125 37 368 464 ;
+C 173 ; WX 360 ; N guilsinglright ; B 93 37 336 464 ;
+C 174 ; WX 651 ; N fi ; B -94 -242 690 742 ;
+C 175 ; WX 652 ; N fl ; B -94 -242 720 742 ;
+C 177 ; WX 500 ; N endash ; B 47 209 566 292 ;
+C 178 ; WX 514 ; N dagger ; B 136 -125 580 707 ;
+C 179 ; WX 490 ; N daggerdbl ; B 67 -119 563 707 ;
+C 180 ; WX 280 ; N periodcentered ; B 102 161 282 339 ;
+C 182 ; WX 580 ; N paragraph ; B 145 -101 688 692 ;
+C 183 ; WX 465 ; N bullet ; B 134 174 489 529 ;
+C 184 ; WX 246 ; N quotesinglbase ; B 18 -153 217 167 ;
+C 185 ; WX 455 ; N quotedblbase ; B 18 -153 426 167 ;
+C 186 ; WX 455 ; N quotedblright ; B 130 387 538 707 ;
+C 187 ; WX 560 ; N guillemotright ; B 93 37 537 464 ;
+C 188 ; WX 1000 ; N ellipsis ; B 120 -12 966 166 ;
+C 189 ; WX 1297 ; N perthousand ; B 141 -31 1297 702 ;
+C 191 ; WX 454 ; N questiondown ; B 25 -217 426 502 ;
+C 193 ; WX 400 ; N grave ; B 144 511 416 740 ;
+C 194 ; WX 400 ; N acute ; B 221 511 493 740 ;
+C 195 ; WX 400 ; N circumflex ; B 128 520 506 747 ;
+C 196 ; WX 400 ; N tilde ; B 129 549 537 697 ;
+C 197 ; WX 400 ; N macron ; B 168 592 494 664 ;
+C 198 ; WX 400 ; N breve ; B 181 556 504 714 ;
+C 199 ; WX 402 ; N dotaccent ; B 255 561 413 710 ;
+C 200 ; WX 400 ; N dieresis ; B 141 561 539 710 ;
+C 202 ; WX 400 ; N ring ; B 201 529 458 762 ;
+C 203 ; WX 400 ; N cedilla ; B 120 -246 327 0 ;
+C 205 ; WX 400 ; N hungarumlaut ; B 193 546 517 750 ;
+C 206 ; WX 350 ; N ogonek ; B 73 -246 288 0 ;
+C 207 ; WX 400 ; N caron ; B 165 520 543 747 ;
+C 208 ; WX 1000 ; N emdash ; B 47 209 1066 292 ;
+C 225 ; WX 890 ; N AE ; B -72 0 993 692 ;
+C 227 ; WX 444 ; N ordfeminine ; B 97 265 517 590 ;
+C 232 ; WX 592 ; N Lslash ; B 46 0 632 692 ;
+C 233 ; WX 761 ; N Oslash ; B 112 -51 804 734 ;
+C 234 ; WX 1016 ; N OE ; B 111 0 1119 692 ;
+C 235 ; WX 412 ; N ordmasculine ; B 121 265 481 590 ;
+C 241 ; WX 789 ; N ae ; B 61 -12 845 509 ;
+C 245 ; WX 339 ; N dotlessi ; B 101 -12 378 502 ;
+C 248 ; WX 339 ; N lslash ; B 53 -12 455 742 ;
+C 249 ; WX 562 ; N oslash ; B 77 -69 591 549 ;
+C 250 ; WX 811 ; N oe ; B 77 -12 867 502 ;
+C 251 ; WX 628 ; N germandbls ; B -94 -242 727 742 ;
+C -1 ; WX 402 ; N onesuperior ; B 119 272 396 680 ;
+C -1 ; WX 600 ; N minus ; B 118 210 602 290 ;
+C -1 ; WX 375 ; N degree ; B 128 360 460 680 ;
+C -1 ; WX 562 ; N oacute ; B 77 -12 591 740 ;
+C -1 ; WX 761 ; N Odieresis ; B 113 -15 803 881 ;
+C -1 ; WX 562 ; N odieresis ; B 77 -12 620 710 ;
+C -1 ; WX 622 ; N Eacute ; B 40 0 722 904 ;
+C -1 ; WX 634 ; N ucircumflex ; B 106 -12 678 747 ;
+C -1 ; WX 940 ; N onequarter ; B 139 -27 884 695 ;
+C -1 ; WX 600 ; N logicalnot ; B 118 95 602 397 ;
+C -1 ; WX 622 ; N Ecircumflex ; B 40 0 722 905 ;
+C -1 ; WX 940 ; N onehalf ; B 125 -27 933 695 ;
+C -1 ; WX 761 ; N Otilde ; B 113 -15 803 876 ;
+C -1 ; WX 634 ; N uacute ; B 106 -12 678 740 ;
+C -1 ; WX 476 ; N eacute ; B 73 -12 566 740 ;
+C -1 ; WX 339 ; N iacute ; B 101 -12 443 740 ;
+C -1 ; WX 622 ; N Egrave ; B 40 0 722 904 ;
+C -1 ; WX 339 ; N icircumflex ; B 73 -12 451 747 ;
+C -1 ; WX 634 ; N mu ; B 32 -230 678 502 ;
+C -1 ; WX 265 ; N brokenbar ; B 152 -175 256 675 ;
+C -1 ; WX 600 ; N thorn ; B 29 -242 642 700 ;
+C -1 ; WX 634 ; N Aring ; B -24 0 674 879 ;
+C -1 ; WX 489 ; N yacute ; B -14 -242 567 740 ;
+C -1 ; WX 622 ; N Ydieresis ; B 127 0 800 881 ;
+C -1 ; WX 1100 ; N trademark ; B 138 277 1128 692 ;
+C -1 ; WX 824 ; N registered ; B 126 -15 854 707 ;
+C -1 ; WX 562 ; N ocircumflex ; B 77 -12 591 747 ;
+C -1 ; WX 634 ; N Agrave ; B -24 0 674 904 ;
+C -1 ; WX 551 ; N Scaron ; B 66 -15 647 916 ;
+C -1 ; WX 776 ; N Ugrave ; B 150 -15 902 904 ;
+C -1 ; WX 622 ; N Edieresis ; B 40 0 722 881 ;
+C -1 ; WX 776 ; N Uacute ; B 150 -15 902 904 ;
+C -1 ; WX 562 ; N otilde ; B 77 -12 618 697 ;
+C -1 ; WX 635 ; N ntilde ; B 80 -12 674 697 ;
+C -1 ; WX 489 ; N ydieresis ; B -14 -242 567 710 ;
+C -1 ; WX 634 ; N Aacute ; B -24 0 674 904 ;
+C -1 ; WX 562 ; N eth ; B 77 -12 593 742 ;
+C -1 ; WX 596 ; N acircumflex ; B 61 -12 647 747 ;
+C -1 ; WX 596 ; N aring ; B 61 -12 647 762 ;
+C -1 ; WX 761 ; N Ograve ; B 113 -15 803 904 ;
+C -1 ; WX 456 ; N ccedilla ; B 73 -246 533 502 ;
+C -1 ; WX 600 ; N multiply ; B 145 22 595 478 ;
+C -1 ; WX 600 ; N divide ; B 98 7 582 493 ;
+C -1 ; WX 402 ; N twosuperior ; B 64 272 458 680 ;
+C -1 ; WX 741 ; N Ntilde ; B 30 0 873 876 ;
+C -1 ; WX 634 ; N ugrave ; B 106 -12 678 740 ;
+C -1 ; WX 776 ; N Ucircumflex ; B 150 -15 902 905 ;
+C -1 ; WX 634 ; N Atilde ; B -24 0 697 876 ;
+C -1 ; WX 466 ; N zcaron ; B 18 -12 561 747 ;
+C -1 ; WX 339 ; N idieresis ; B 81 -12 479 710 ;
+C -1 ; WX 634 ; N Acircumflex ; B -24 0 674 905 ;
+C -1 ; WX 386 ; N Icircumflex ; B 40 0 541 905 ;
+C -1 ; WX 622 ; N Yacute ; B 127 0 800 904 ;
+C -1 ; WX 761 ; N Oacute ; B 113 -15 803 904 ;
+C -1 ; WX 634 ; N Adieresis ; B -24 0 687 881 ;
+C -1 ; WX 618 ; N Zcaron ; B 5 0 749 916 ;
+C -1 ; WX 596 ; N agrave ; B 61 -12 647 740 ;
+C -1 ; WX 402 ; N threesuperior ; B 94 265 456 680 ;
+C -1 ; WX 562 ; N ograve ; B 77 -12 591 740 ;
+C -1 ; WX 940 ; N threequarters ; B 130 -27 911 695 ;
+C -1 ; WX 780 ; N Eth ; B 46 0 825 692 ;
+C -1 ; WX 600 ; N plusminus ; B 118 0 602 549 ;
+C -1 ; WX 634 ; N udieresis ; B 106 -12 678 710 ;
+C -1 ; WX 476 ; N edieresis ; B 73 -12 577 710 ;
+C -1 ; WX 596 ; N aacute ; B 61 -12 647 740 ;
+C -1 ; WX 339 ; N igrave ; B 101 -12 378 740 ;
+C -1 ; WX 386 ; N Idieresis ; B 40 0 568 881 ;
+C -1 ; WX 596 ; N adieresis ; B 61 -12 647 710 ;
+C -1 ; WX 386 ; N Iacute ; B 40 0 534 904 ;
+C -1 ; WX 824 ; N copyright ; B 126 -15 854 707 ;
+C -1 ; WX 386 ; N Igrave ; B 40 0 501 904 ;
+C -1 ; WX 672 ; N Ccedilla ; B 111 -246 777 707 ;
+C -1 ; WX 417 ; N scaron ; B 45 -12 557 747 ;
+C -1 ; WX 476 ; N egrave ; B 73 -12 532 740 ;
+C -1 ; WX 761 ; N Ocircumflex ; B 113 -15 803 905 ;
+C -1 ; WX 629 ; N Thorn ; B 40 0 695 692 ;
+C -1 ; WX 596 ; N atilde ; B 61 -12 647 697 ;
+C -1 ; WX 776 ; N Udieresis ; B 150 -15 902 881 ;
+C -1 ; WX 476 ; N ecircumflex ; B 73 -12 559 747 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 697
+
+KPX A z 18
+KPX A y -40
+KPX A x 16
+KPX A w -30
+KPX A v -30
+KPX A u -18
+KPX A t -6
+KPX A s 6
+KPX A r -6
+KPX A quoteright -92
+KPX A quotedblright -92
+KPX A p -6
+KPX A o -18
+KPX A n -12
+KPX A m -12
+KPX A l -18
+KPX A h -6
+KPX A d 4
+KPX A c -6
+KPX A b -6
+KPX A a 10
+KPX A Y -56
+KPX A X -8
+KPX A W -46
+KPX A V -75
+KPX A U -50
+KPX A T -60
+KPX A Q -30
+KPX A O -30
+KPX A G -30
+KPX A C -30
+
+KPX B y -6
+KPX B u -12
+KPX B r -6
+KPX B quoteright -20
+KPX B quotedblright -32
+KPX B o 6
+KPX B l -20
+KPX B k -10
+KPX B i -12
+KPX B h -15
+KPX B e 4
+KPX B a 10
+KPX B W -30
+KPX B V -45
+KPX B U -30
+KPX B T -20
+
+KPX C z -6
+KPX C y -18
+KPX C u -12
+KPX C r -12
+KPX C quoteright 12
+KPX C quotedblright 20
+KPX C i -6
+KPX C e -6
+KPX C a -6
+KPX C Q -12
+KPX C O -12
+KPX C G -12
+KPX C C -12
+
+KPX D y 18
+KPX D quoteright -20
+KPX D quotedblright -20
+KPX D period -20
+KPX D o 6
+KPX D h -15
+KPX D e 6
+KPX D comma -20
+KPX D a 6
+KPX D Y -80
+KPX D W -40
+KPX D V -65
+
+KPX E z -6
+KPX E y -24
+KPX E x 15
+KPX E w -30
+KPX E v -18
+KPX E u -24
+KPX E t -18
+KPX E s -6
+KPX E r -6
+KPX E quoteright 10
+KPX E q 10
+KPX E period 15
+KPX E p -12
+KPX E n -12
+KPX E m -12
+KPX E l -6
+KPX E j -6
+KPX E i -12
+KPX E g -12
+KPX E d 10
+KPX E comma 15
+KPX E a 10
+
+KPX F y -12
+KPX F u -24
+KPX F r -12
+KPX F quoteright 40
+KPX F quotedblright 35
+KPX F period -120
+KPX F o -24
+KPX F i -6
+KPX F e -24
+KPX F comma -110
+KPX F a -30
+KPX F A -45
+
+KPX G y -25
+KPX G u -22
+KPX G r -22
+KPX G quoteright -30
+KPX G quotedblright -30
+KPX G n -22
+KPX G l -24
+KPX G i -12
+KPX G h -18
+KPX G e 5
+
+KPX H y -18
+KPX H u -30
+KPX H o -25
+KPX H i -25
+KPX H e -25
+KPX H a -25
+
+KPX I z -20
+KPX I y -6
+KPX I x -6
+KPX I w -30
+KPX I v -30
+KPX I u -30
+KPX I t -18
+KPX I s -18
+KPX I r -12
+KPX I p -18
+KPX I o -25
+KPX I n -18
+KPX I m -18
+KPX I l -6
+KPX I k -6
+KPX I j -20
+KPX I i -10
+KPX I g -24
+KPX I f -6
+KPX I e -25
+KPX I d -15
+KPX I c -25
+KPX I b -6
+KPX I a -15
+
+KPX J y -12
+KPX J u -32
+KPX J quoteright 6
+KPX J quotedblright 6
+KPX J o -36
+KPX J i -30
+KPX J e -30
+KPX J braceright 15
+KPX J a -36
+
+KPX K y -70
+KPX K w -36
+KPX K v -30
+KPX K u -30
+KPX K r -24
+KPX K quoteright 36
+KPX K quotedblright 36
+KPX K o -30
+KPX K n -24
+KPX K l 10
+KPX K i -12
+KPX K h 15
+KPX K e -30
+KPX K a -12
+KPX K Q -50
+KPX K O -50
+KPX K G -50
+KPX K C -50
+KPX K A 15
+
+KPX L y -70
+KPX L w -30
+KPX L u -18
+KPX L quoteright -110
+KPX L quotedblright -110
+KPX L l -16
+KPX L j -18
+KPX L i -18
+KPX L Y -80
+KPX L W -78
+KPX L V -110
+KPX L U -42
+KPX L T -100
+KPX L Q -48
+KPX L O -48
+KPX L G -48
+KPX L C -48
+KPX L A 40
+
+KPX M y -18
+KPX M u -24
+KPX M quoteright 6
+KPX M quotedblright 6
+KPX M o -25
+KPX M n -20
+KPX M j -35
+KPX M i -20
+KPX M e -25
+KPX M d -20
+KPX M c -25
+KPX M a -20
+
+KPX N y -18
+KPX N u -24
+KPX N o -18
+KPX N i -12
+KPX N e -16
+KPX N a -22
+
+KPX O z -6
+KPX O y 12
+KPX O u -6
+KPX O t -6
+KPX O s -6
+KPX O r -6
+KPX O quoteright -20
+KPX O quotedblright -20
+KPX O q 6
+KPX O period -10
+KPX O p -6
+KPX O n -6
+KPX O m -6
+KPX O l -15
+KPX O k -10
+KPX O j -6
+KPX O h -10
+KPX O g -6
+KPX O e 6
+KPX O d 6
+KPX O comma -10
+KPX O a 6
+KPX O Y -70
+KPX O X -30
+KPX O W -35
+KPX O V -50
+KPX O T -42
+KPX O A -8
+
+KPX P y 6
+KPX P u -18
+KPX P t -6
+KPX P s -24
+KPX P r -6
+KPX P quoteright -12
+KPX P period -170
+KPX P o -24
+KPX P n -12
+KPX P l -20
+KPX P h -20
+KPX P e -24
+KPX P comma -170
+KPX P a -40
+KPX P I -45
+KPX P H -45
+KPX P E -45
+KPX P A -70
+
+KPX Q u -6
+KPX Q quoteright -20
+KPX Q quotedblright -38
+KPX Q a -6
+KPX Q Y -70
+KPX Q X -12
+KPX Q W -35
+KPX Q V -50
+KPX Q U -30
+KPX Q T -36
+KPX Q A -18
+
+KPX R y -6
+KPX R u -12
+KPX R quoteright -22
+KPX R quotedblright -22
+KPX R o -20
+KPX R e -12
+KPX R Y -45
+KPX R X 15
+KPX R W -25
+KPX R V -35
+KPX R U -40
+KPX R T -18
+KPX R Q -8
+KPX R O -8
+KPX R G -8
+KPX R C -8
+KPX R A 15
+
+KPX S y -30
+KPX S w -30
+KPX S v -20
+KPX S u -18
+KPX S t -18
+KPX S r -20
+KPX S quoteright -38
+KPX S quotedblright -50
+KPX S p -18
+KPX S n -24
+KPX S m -24
+KPX S l -20
+KPX S k -18
+KPX S j -25
+KPX S i -20
+KPX S h -12
+KPX S e -6
+
+KPX T z -48
+KPX T y -52
+KPX T w -54
+KPX T u -54
+KPX T semicolon -6
+KPX T s -60
+KPX T r -54
+KPX T quoteright 36
+KPX T quotedblright 36
+KPX T period -70
+KPX T parenright 25
+KPX T o -78
+KPX T m -54
+KPX T i -22
+KPX T hyphen -100
+KPX T h 6
+KPX T endash -40
+KPX T emdash -40
+KPX T e -78
+KPX T comma -90
+KPX T bracketright 20
+KPX T braceright 30
+KPX T a -78
+KPX T Y 12
+KPX T X 18
+KPX T W 30
+KPX T V 20
+KPX T T 40
+KPX T Q -6
+KPX T O -6
+KPX T G -6
+KPX T C -6
+KPX T A -40
+
+KPX U z -18
+KPX U x -30
+KPX U v -20
+KPX U t -24
+KPX U s -40
+KPX U r -30
+KPX U p -30
+KPX U n -30
+KPX U m -30
+KPX U l -12
+KPX U k -12
+KPX U i -24
+KPX U h -6
+KPX U g -30
+KPX U f -10
+KPX U d -30
+KPX U c -30
+KPX U b -6
+KPX U a -30
+KPX U A -40
+
+KPX V y -34
+KPX V u -42
+KPX V semicolon -45
+KPX V r -55
+KPX V quoteright 46
+KPX V quotedblright 60
+KPX V period -110
+KPX V parenright 64
+KPX V o -55
+KPX V i 15
+KPX V hyphen -60
+KPX V endash -20
+KPX V emdash -20
+KPX V e -55
+KPX V comma -110
+KPX V colon -18
+KPX V bracketright 64
+KPX V braceright 64
+KPX V a -80
+KPX V T 12
+KPX V A -70
+
+KPX W y -36
+KPX W u -30
+KPX W t -10
+KPX W semicolon -12
+KPX W r -30
+KPX W quoteright 42
+KPX W quotedblright 55
+KPX W period -80
+KPX W parenright 55
+KPX W o -55
+KPX W m -30
+KPX W i 5
+KPX W hyphen -40
+KPX W h 16
+KPX W e -55
+KPX W d -60
+KPX W comma -80
+KPX W colon -12
+KPX W bracketright 64
+KPX W braceright 64
+KPX W a -60
+KPX W T 30
+KPX W Q -5
+KPX W O -5
+KPX W G -5
+KPX W C -5
+KPX W A -45
+
+KPX X y -40
+KPX X u -30
+KPX X r -6
+KPX X quoteright 24
+KPX X quotedblright 40
+KPX X i -6
+KPX X e -18
+KPX X a -6
+KPX X Y -6
+KPX X W -6
+KPX X Q -45
+KPX X O -45
+KPX X G -45
+KPX X C -45
+
+KPX Y v -60
+KPX Y u -70
+KPX Y t -32
+KPX Y semicolon -20
+KPX Y quoteright 56
+KPX Y quotedblright 70
+KPX Y q -100
+KPX Y period -80
+KPX Y parenright 5
+KPX Y o -95
+KPX Y l 15
+KPX Y i 15
+KPX Y hyphen -110
+KPX Y endash -40
+KPX Y emdash -40
+KPX Y e -95
+KPX Y d -85
+KPX Y comma -80
+KPX Y colon -20
+KPX Y bracketright 64
+KPX Y braceright 64
+KPX Y a -85
+KPX Y Y 12
+KPX Y X 12
+KPX Y W 12
+KPX Y V 6
+KPX Y T 30
+KPX Y Q -25
+KPX Y O -25
+KPX Y G -25
+KPX Y C -25
+KPX Y A -40
+
+KPX Z y -36
+KPX Z w -36
+KPX Z u -12
+KPX Z quoteright 18
+KPX Z quotedblright 18
+KPX Z o -6
+KPX Z i -12
+KPX Z e -6
+KPX Z a -6
+KPX Z Q -20
+KPX Z O -20
+KPX Z G -20
+KPX Z C -20
+KPX Z A 30
+
+KPX a quoteright -54
+KPX a quotedblright -54
+
+KPX b y -6
+KPX b w -5
+KPX b v -5
+KPX b quoteright -30
+KPX b quotedblright -30
+KPX b period -15
+KPX b comma -15
+
+KPX braceleft Y 64
+KPX braceleft W 64
+KPX braceleft V 64
+KPX braceleft T 40
+KPX braceleft J 60
+
+KPX bracketleft Y 60
+KPX bracketleft W 64
+KPX bracketleft V 64
+KPX bracketleft T 35
+KPX bracketleft J 30
+
+KPX c quoteright 5
+KPX c quotedblright 5
+
+KPX colon space -30
+
+KPX comma space -40
+KPX comma quoteright -100
+KPX comma quotedblright -100
+
+KPX d quoteright -12
+KPX d quotedblright -12
+KPX d period 15
+KPX d comma 15
+
+KPX e y 6
+KPX e x -10
+KPX e w -10
+KPX e v -10
+KPX e quoteright -25
+KPX e quotedblright -25
+
+KPX f quoteright 120
+KPX f quotedblright 120
+KPX f period -30
+KPX f parenright 100
+KPX f comma -30
+KPX f bracketright 110
+KPX f braceright 110
+
+KPX g y 50
+KPX g quotedblright -20
+KPX g p 30
+KPX g f 42
+KPX g comma 20
+
+KPX h quoteright -78
+KPX h quotedblright -78
+
+KPX i quoteright -20
+KPX i quotedblright -20
+
+KPX j quoteright -20
+KPX j quotedblright -20
+KPX j period -20
+KPX j comma -20
+
+KPX k quoteright -38
+KPX k quotedblright -38
+
+KPX l quoteright -12
+KPX l quotedblright -12
+
+KPX m quoteright -78
+KPX m quotedblright -78
+
+KPX n quoteright -88
+KPX n quotedblright -88
+
+KPX o y -12
+KPX o x -20
+KPX o w -25
+KPX o v -25
+KPX o quoteright -50
+KPX o quotedblright -50
+KPX o period -10
+KPX o comma -10
+
+KPX p w -6
+KPX p quoteright -30
+KPX p quotedblright -52
+KPX p period -15
+KPX p comma -15
+
+KPX parenleft Y 64
+KPX parenleft W 64
+KPX parenleft V 64
+KPX parenleft T 30
+KPX parenleft J 50
+
+KPX period space -40
+KPX period quoteright -100
+KPX period quotedblright -100
+
+KPX q quoteright -40
+KPX q quotedblright -40
+KPX q period -10
+KPX q comma -5
+
+KPX quotedblleft z -30
+KPX quotedblleft x -60
+KPX quotedblleft w -12
+KPX quotedblleft v -12
+KPX quotedblleft u -12
+KPX quotedblleft t 5
+KPX quotedblleft s -30
+KPX quotedblleft r -12
+KPX quotedblleft q -50
+KPX quotedblleft p -12
+KPX quotedblleft o -30
+KPX quotedblleft n -12
+KPX quotedblleft m -12
+KPX quotedblleft l 10
+KPX quotedblleft k 10
+KPX quotedblleft h 10
+KPX quotedblleft g -30
+KPX quotedblleft e -30
+KPX quotedblleft d -50
+KPX quotedblleft c -30
+KPX quotedblleft b 24
+KPX quotedblleft a -50
+KPX quotedblleft Y 30
+KPX quotedblleft X 45
+KPX quotedblleft W 55
+KPX quotedblleft V 40
+KPX quotedblleft T 36
+KPX quotedblleft A -100
+
+KPX quotedblright space -50
+KPX quotedblright period -200
+KPX quotedblright comma -200
+
+KPX quoteleft z -30
+KPX quoteleft y 30
+KPX quoteleft x -10
+KPX quoteleft w -12
+KPX quoteleft u -12
+KPX quoteleft t -30
+KPX quoteleft s -30
+KPX quoteleft r -12
+KPX quoteleft q -30
+KPX quoteleft p -12
+KPX quoteleft o -30
+KPX quoteleft n -12
+KPX quoteleft m -12
+KPX quoteleft l 10
+KPX quoteleft k 10
+KPX quoteleft h 10
+KPX quoteleft g -30
+KPX quoteleft e -30
+KPX quoteleft d -30
+KPX quoteleft c -30
+KPX quoteleft b 24
+KPX quoteleft a -30
+KPX quoteleft Y 12
+KPX quoteleft X 46
+KPX quoteleft W 46
+KPX quoteleft V 28
+KPX quoteleft T 36
+KPX quoteleft A -100
+
+KPX quoteright v -20
+KPX quoteright space -50
+KPX quoteright s -45
+KPX quoteright r -12
+KPX quoteright period -140
+KPX quoteright m -12
+KPX quoteright l -12
+KPX quoteright d -65
+KPX quoteright comma -140
+
+KPX r z 20
+KPX r y 18
+KPX r x 12
+KPX r w 6
+KPX r v 6
+KPX r t 8
+KPX r semicolon 20
+KPX r quoteright -6
+KPX r quotedblright -6
+KPX r q -24
+KPX r period -100
+KPX r o -6
+KPX r l -12
+KPX r k -12
+KPX r hyphen -40
+KPX r h -10
+KPX r f 8
+KPX r endash -20
+KPX r e -26
+KPX r d -25
+KPX r comma -100
+KPX r colon 20
+KPX r c -12
+KPX r a -25
+
+KPX s quoteright -25
+KPX s quotedblright -30
+
+KPX semicolon space -30
+
+KPX space quotesinglbase -60
+KPX space quoteleft -60
+KPX space quotedblleft -60
+KPX space quotedblbase -60
+KPX space Y -70
+KPX space W -50
+KPX space V -70
+KPX space T -50
+KPX space A -50
+
+KPX t quoteright 15
+KPX t quotedblright 15
+KPX t period 15
+KPX t comma 15
+
+KPX u quoteright -65
+KPX u quotedblright -78
+KPX u period 20
+KPX u comma 20
+
+KPX v quoteright -10
+KPX v quotedblright -10
+KPX v q -6
+KPX v period -62
+KPX v o -6
+KPX v e -6
+KPX v d -6
+KPX v comma -62
+KPX v c -6
+KPX v a -6
+
+KPX w quoteright -10
+KPX w quotedblright -10
+KPX w period -40
+KPX w comma -50
+
+KPX x y 12
+KPX x w -6
+KPX x quoteright -30
+KPX x quotedblright -30
+KPX x q -6
+KPX x o -6
+KPX x e -6
+KPX x d -6
+KPX x c -6
+
+KPX y quoteright -10
+KPX y quotedblright -10
+KPX y q -10
+KPX y period -56
+KPX y d -10
+KPX y comma -56
+
+KPX z quoteright -40
+KPX z quotedblright -40
+KPX z o -6
+KPX z e -6
+KPX z d -6
+KPX z c -6
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/putbi8a.pfb b/Master/tlpkg/tlgs/lib/fonts/putbi8a.pfb
new file mode 100644
index 00000000000..1caf6daeb79
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putbi8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/putr8a.afm b/Master/tlpkg/tlgs/lib/fonts/putr8a.afm
new file mode 100644
index 00000000000..30c1e7fb129
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putr8a.afm
@@ -0,0 +1,1031 @@
+StartFontMetrics 2.0
+Comment Copyright (c) 1989, 1991 Adobe Systems Incorporated.
+Comment The Utopia fonts are freely available; see http://tug.org/fonts/utopia.
+Comment Creation Date: Wed Oct 2 19:10:44 1991
+Comment License clarified 17 November 2006.
+Comment UniqueID 36552
+Comment VMusage 32987 39879
+FontName Utopia-Regular
+FullName Utopia Regular
+FamilyName Utopia
+Weight Regular
+ItalicAngle 0
+IsFixedPitch false
+FontBBox -158 -250 1158 890
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+Notice Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved. Utopia is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries. Used under license.
+EncodingScheme AdobeStandardEncoding
+CapHeight 692
+XHeight 490
+Ascender 742
+Descender -230
+StartCharMetrics 228
+C 32 ; WX 225 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 242 ; N exclam ; B 58 -12 184 707 ;
+C 34 ; WX 458 ; N quotedbl ; B 101 464 358 742 ;
+C 35 ; WX 530 ; N numbersign ; B 11 0 519 668 ;
+C 36 ; WX 530 ; N dollar ; B 44 -102 487 743 ;
+C 37 ; WX 838 ; N percent ; B 50 -25 788 700 ;
+C 38 ; WX 706 ; N ampersand ; B 46 -12 692 680 ;
+C 39 ; WX 278 ; N quoteright ; B 72 472 207 742 ;
+C 40 ; WX 350 ; N parenleft ; B 105 -128 325 692 ;
+C 41 ; WX 350 ; N parenright ; B 25 -128 245 692 ;
+C 42 ; WX 412 ; N asterisk ; B 50 356 363 707 ;
+C 43 ; WX 570 ; N plus ; B 43 0 527 490 ;
+C 44 ; WX 265 ; N comma ; B 51 -141 193 141 ;
+C 45 ; WX 392 ; N hyphen ; B 74 216 319 286 ;
+C 46 ; WX 265 ; N period ; B 70 -12 196 116 ;
+C 47 ; WX 460 ; N slash ; B 92 -15 369 707 ;
+C 48 ; WX 530 ; N zero ; B 41 -12 489 680 ;
+C 49 ; WX 530 ; N one ; B 109 0 437 680 ;
+C 50 ; WX 530 ; N two ; B 27 0 485 680 ;
+C 51 ; WX 530 ; N three ; B 27 -12 473 680 ;
+C 52 ; WX 530 ; N four ; B 19 0 493 668 ;
+C 53 ; WX 530 ; N five ; B 40 -12 480 668 ;
+C 54 ; WX 530 ; N six ; B 44 -12 499 680 ;
+C 55 ; WX 530 ; N seven ; B 41 -12 497 668 ;
+C 56 ; WX 530 ; N eight ; B 42 -12 488 680 ;
+C 57 ; WX 530 ; N nine ; B 36 -12 477 680 ;
+C 58 ; WX 265 ; N colon ; B 70 -12 196 490 ;
+C 59 ; WX 265 ; N semicolon ; B 51 -141 196 490 ;
+C 60 ; WX 570 ; N less ; B 46 1 524 499 ;
+C 61 ; WX 570 ; N equal ; B 43 111 527 389 ;
+C 62 ; WX 570 ; N greater ; B 46 1 524 499 ;
+C 63 ; WX 389 ; N question ; B 29 -12 359 707 ;
+C 64 ; WX 793 ; N at ; B 46 -15 755 707 ;
+C 65 ; WX 635 ; N A ; B -29 0 650 692 ;
+C 66 ; WX 646 ; N B ; B 35 0 595 692 ;
+C 67 ; WX 684 ; N C ; B 48 -15 649 707 ;
+C 68 ; WX 779 ; N D ; B 35 0 731 692 ;
+C 69 ; WX 606 ; N E ; B 35 0 577 692 ;
+C 70 ; WX 580 ; N F ; B 35 0 543 692 ;
+C 71 ; WX 734 ; N G ; B 48 -15 725 707 ;
+C 72 ; WX 798 ; N H ; B 35 0 763 692 ;
+C 73 ; WX 349 ; N I ; B 35 0 314 692 ;
+C 74 ; WX 350 ; N J ; B 0 -114 323 692 ;
+C 75 ; WX 658 ; N K ; B 35 -5 671 692 ;
+C 76 ; WX 568 ; N L ; B 35 0 566 692 ;
+C 77 ; WX 944 ; N M ; B 33 0 909 692 ;
+C 78 ; WX 780 ; N N ; B 34 0 753 692 ;
+C 79 ; WX 762 ; N O ; B 48 -15 714 707 ;
+C 80 ; WX 600 ; N P ; B 35 0 574 692 ;
+C 81 ; WX 762 ; N Q ; B 48 -193 714 707 ;
+C 82 ; WX 644 ; N R ; B 35 0 638 692 ;
+C 83 ; WX 541 ; N S ; B 50 -15 504 707 ;
+C 84 ; WX 621 ; N T ; B 22 0 599 692 ;
+C 85 ; WX 791 ; N U ; B 29 -15 762 692 ;
+C 86 ; WX 634 ; N V ; B -18 0 678 692 ;
+C 87 ; WX 940 ; N W ; B -13 0 977 692 ;
+C 88 ; WX 624 ; N X ; B -19 0 657 692 ;
+C 89 ; WX 588 ; N Y ; B -12 0 632 692 ;
+C 90 ; WX 610 ; N Z ; B 9 0 594 692 ;
+C 91 ; WX 330 ; N bracketleft ; B 133 -128 292 692 ;
+C 92 ; WX 460 ; N backslash ; B 91 -15 369 707 ;
+C 93 ; WX 330 ; N bracketright ; B 38 -128 197 692 ;
+C 94 ; WX 570 ; N asciicircum ; B 56 228 514 668 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 72 478 207 748 ;
+C 97 ; WX 523 ; N a ; B 49 -12 525 502 ;
+C 98 ; WX 598 ; N b ; B 20 -12 549 742 ;
+C 99 ; WX 496 ; N c ; B 49 -12 473 502 ;
+C 100 ; WX 598 ; N d ; B 49 -12 583 742 ;
+C 101 ; WX 514 ; N e ; B 49 -12 481 502 ;
+C 102 ; WX 319 ; N f ; B 30 0 389 742 ; L i fi ; L l fl ;
+C 103 ; WX 520 ; N g ; B 42 -242 525 512 ;
+C 104 ; WX 607 ; N h ; B 21 0 592 742 ;
+C 105 ; WX 291 ; N i ; B 32 0 276 715 ;
+C 106 ; WX 280 ; N j ; B -33 -242 214 715 ;
+C 107 ; WX 524 ; N k ; B 20 -5 538 742 ;
+C 108 ; WX 279 ; N l ; B 20 0 264 742 ;
+C 109 ; WX 923 ; N m ; B 32 0 908 502 ;
+C 110 ; WX 619 ; N n ; B 32 0 604 502 ;
+C 111 ; WX 577 ; N o ; B 49 -12 528 502 ;
+C 112 ; WX 608 ; N p ; B 25 -230 559 502 ;
+C 113 ; WX 591 ; N q ; B 49 -230 583 502 ;
+C 114 ; WX 389 ; N r ; B 32 0 386 502 ;
+C 115 ; WX 436 ; N s ; B 47 -12 400 502 ;
+C 116 ; WX 344 ; N t ; B 31 -12 342 616 ;
+C 117 ; WX 606 ; N u ; B 26 -12 591 502 ;
+C 118 ; WX 504 ; N v ; B 1 0 529 490 ;
+C 119 ; WX 768 ; N w ; B -2 0 792 490 ;
+C 120 ; WX 486 ; N x ; B 1 0 509 490 ;
+C 121 ; WX 506 ; N y ; B -5 -242 528 490 ;
+C 122 ; WX 480 ; N z ; B 19 0 462 490 ;
+C 123 ; WX 340 ; N braceleft ; B 79 -128 298 692 ;
+C 124 ; WX 228 ; N bar ; B 80 -250 148 750 ;
+C 125 ; WX 340 ; N braceright ; B 42 -128 261 692 ;
+C 126 ; WX 570 ; N asciitilde ; B 73 175 497 317 ;
+C 161 ; WX 242 ; N exclamdown ; B 58 -217 184 502 ;
+C 162 ; WX 530 ; N cent ; B 37 -10 487 675 ;
+C 163 ; WX 530 ; N sterling ; B 27 0 510 680 ;
+C 164 ; WX 150 ; N fraction ; B -158 -27 308 695 ;
+C 165 ; WX 530 ; N yen ; B -2 0 525 668 ;
+C 166 ; WX 530 ; N florin ; B -2 -135 522 691 ;
+C 167 ; WX 554 ; N section ; B 46 -115 507 707 ;
+C 168 ; WX 530 ; N currency ; B 25 90 505 578 ;
+C 169 ; WX 278 ; N quotesingle ; B 93 464 185 742 ;
+C 170 ; WX 458 ; N quotedblleft ; B 72 478 387 748 ;
+C 171 ; WX 442 ; N guillemotleft ; B 41 41 401 435 ;
+C 172 ; WX 257 ; N guilsinglleft ; B 41 41 216 435 ;
+C 173 ; WX 257 ; N guilsinglright ; B 41 41 216 435 ;
+C 174 ; WX 610 ; N fi ; B 30 0 595 742 ;
+C 175 ; WX 610 ; N fl ; B 30 0 595 742 ;
+C 177 ; WX 500 ; N endash ; B 0 221 500 279 ;
+C 178 ; WX 504 ; N dagger ; B 45 -125 459 717 ;
+C 179 ; WX 488 ; N daggerdbl ; B 45 -119 443 717 ;
+C 180 ; WX 265 ; N periodcentered ; B 70 188 196 316 ;
+C 182 ; WX 555 ; N paragraph ; B 64 -101 529 692 ;
+C 183 ; WX 409 ; N bullet ; B 45 192 364 512 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 72 -125 207 145 ;
+C 185 ; WX 458 ; N quotedblbase ; B 72 -125 387 145 ;
+C 186 ; WX 458 ; N quotedblright ; B 72 472 387 742 ;
+C 187 ; WX 442 ; N guillemotright ; B 41 41 401 435 ;
+C 188 ; WX 1000 ; N ellipsis ; B 104 -12 896 116 ;
+C 189 ; WX 1208 ; N perthousand ; B 50 -25 1158 700 ;
+C 191 ; WX 389 ; N questiondown ; B 30 -217 360 502 ;
+C 193 ; WX 400 ; N grave ; B 49 542 271 723 ;
+C 194 ; WX 400 ; N acute ; B 129 542 351 723 ;
+C 195 ; WX 400 ; N circumflex ; B 47 541 353 720 ;
+C 196 ; WX 400 ; N tilde ; B 22 563 377 682 ;
+C 197 ; WX 400 ; N macron ; B 56 597 344 656 ;
+C 198 ; WX 400 ; N breve ; B 63 568 337 704 ;
+C 199 ; WX 400 ; N dotaccent ; B 140 570 260 683 ;
+C 200 ; WX 400 ; N dieresis ; B 36 570 364 683 ;
+C 202 ; WX 400 ; N ring ; B 92 550 308 752 ;
+C 203 ; WX 400 ; N cedilla ; B 163 -230 329 0 ;
+C 205 ; WX 400 ; N hungarumlaut ; B 101 546 380 750 ;
+C 206 ; WX 400 ; N ogonek ; B 103 -230 295 0 ;
+C 207 ; WX 400 ; N caron ; B 47 541 353 720 ;
+C 208 ; WX 1000 ; N emdash ; B 0 221 1000 279 ;
+C 225 ; WX 876 ; N AE ; B -63 0 847 692 ;
+C 227 ; WX 390 ; N ordfeminine ; B 40 265 364 590 ;
+C 232 ; WX 574 ; N Lslash ; B 36 0 572 692 ;
+C 233 ; WX 762 ; N Oslash ; B 48 -53 714 739 ;
+C 234 ; WX 1025 ; N OE ; B 48 0 996 692 ;
+C 235 ; WX 398 ; N ordmasculine ; B 35 265 363 590 ;
+C 241 ; WX 797 ; N ae ; B 49 -12 764 502 ;
+C 245 ; WX 291 ; N dotlessi ; B 32 0 276 502 ;
+C 248 ; WX 294 ; N lslash ; B 14 0 293 742 ;
+C 249 ; WX 577 ; N oslash ; B 49 -41 528 532 ;
+C 250 ; WX 882 ; N oe ; B 49 -12 849 502 ;
+C 251 ; WX 601 ; N germandbls ; B 22 -12 573 742 ;
+C -1 ; WX 380 ; N onesuperior ; B 81 272 307 680 ;
+C -1 ; WX 570 ; N minus ; B 43 221 527 279 ;
+C -1 ; WX 350 ; N degree ; B 37 404 313 680 ;
+C -1 ; WX 577 ; N oacute ; B 49 -12 528 723 ;
+C -1 ; WX 762 ; N Odieresis ; B 48 -15 714 841 ;
+C -1 ; WX 577 ; N odieresis ; B 49 -12 528 683 ;
+C -1 ; WX 606 ; N Eacute ; B 35 0 577 890 ;
+C -1 ; WX 606 ; N ucircumflex ; B 26 -12 591 720 ;
+C -1 ; WX 860 ; N onequarter ; B 65 -27 795 695 ;
+C -1 ; WX 570 ; N logicalnot ; B 43 102 527 389 ;
+C -1 ; WX 606 ; N Ecircumflex ; B 35 0 577 876 ;
+C -1 ; WX 860 ; N onehalf ; B 58 -27 807 695 ;
+C -1 ; WX 762 ; N Otilde ; B 48 -15 714 842 ;
+C -1 ; WX 606 ; N uacute ; B 26 -12 591 723 ;
+C -1 ; WX 514 ; N eacute ; B 49 -12 481 723 ;
+C -1 ; WX 291 ; N iacute ; B 32 0 277 723 ;
+C -1 ; WX 606 ; N Egrave ; B 35 0 577 890 ;
+C -1 ; WX 291 ; N icircumflex ; B -3 0 304 720 ;
+C -1 ; WX 606 ; N mu ; B 26 -246 591 502 ;
+C -1 ; WX 228 ; N brokenbar ; B 80 -175 148 675 ;
+C -1 ; WX 606 ; N thorn ; B 23 -230 557 722 ;
+C -1 ; WX 627 ; N Aring ; B -32 0 647 861 ;
+C -1 ; WX 506 ; N yacute ; B -5 -242 528 723 ;
+C -1 ; WX 588 ; N Ydieresis ; B -12 0 632 841 ;
+C -1 ; WX 1100 ; N trademark ; B 45 277 1048 692 ;
+C -1 ; WX 818 ; N registered ; B 45 -15 773 707 ;
+C -1 ; WX 577 ; N ocircumflex ; B 49 -12 528 720 ;
+C -1 ; WX 635 ; N Agrave ; B -29 0 650 890 ;
+C -1 ; WX 541 ; N Scaron ; B 50 -15 504 882 ;
+C -1 ; WX 791 ; N Ugrave ; B 29 -15 762 890 ;
+C -1 ; WX 606 ; N Edieresis ; B 35 0 577 841 ;
+C -1 ; WX 791 ; N Uacute ; B 29 -15 762 890 ;
+C -1 ; WX 577 ; N otilde ; B 49 -12 528 682 ;
+C -1 ; WX 619 ; N ntilde ; B 32 0 604 682 ;
+C -1 ; WX 506 ; N ydieresis ; B -5 -242 528 683 ;
+C -1 ; WX 635 ; N Aacute ; B -29 0 650 890 ;
+C -1 ; WX 577 ; N eth ; B 49 -12 528 742 ;
+C -1 ; WX 523 ; N acircumflex ; B 49 -12 525 720 ;
+C -1 ; WX 523 ; N aring ; B 49 -12 525 752 ;
+C -1 ; WX 762 ; N Ograve ; B 48 -15 714 890 ;
+C -1 ; WX 496 ; N ccedilla ; B 49 -230 473 502 ;
+C -1 ; WX 570 ; N multiply ; B 63 22 507 478 ;
+C -1 ; WX 570 ; N divide ; B 43 26 527 474 ;
+C -1 ; WX 380 ; N twosuperior ; B 32 272 348 680 ;
+C -1 ; WX 780 ; N Ntilde ; B 34 0 753 842 ;
+C -1 ; WX 606 ; N ugrave ; B 26 -12 591 723 ;
+C -1 ; WX 791 ; N Ucircumflex ; B 29 -15 762 876 ;
+C -1 ; WX 635 ; N Atilde ; B -29 0 650 842 ;
+C -1 ; WX 480 ; N zcaron ; B 19 0 462 720 ;
+C -1 ; WX 291 ; N idieresis ; B -19 0 310 683 ;
+C -1 ; WX 635 ; N Acircumflex ; B -29 0 650 876 ;
+C -1 ; WX 349 ; N Icircumflex ; B 22 0 328 876 ;
+C -1 ; WX 588 ; N Yacute ; B -12 0 632 890 ;
+C -1 ; WX 762 ; N Oacute ; B 48 -15 714 890 ;
+C -1 ; WX 635 ; N Adieresis ; B -29 0 650 841 ;
+C -1 ; WX 610 ; N Zcaron ; B 9 0 594 882 ;
+C -1 ; WX 523 ; N agrave ; B 49 -12 525 723 ;
+C -1 ; WX 380 ; N threesuperior ; B 36 265 339 680 ;
+C -1 ; WX 577 ; N ograve ; B 49 -12 528 723 ;
+C -1 ; WX 860 ; N threequarters ; B 50 -27 808 695 ;
+C -1 ; WX 785 ; N Eth ; B 20 0 737 692 ;
+C -1 ; WX 570 ; N plusminus ; B 43 0 527 556 ;
+C -1 ; WX 606 ; N udieresis ; B 26 -12 591 683 ;
+C -1 ; WX 514 ; N edieresis ; B 49 -12 481 683 ;
+C -1 ; WX 523 ; N aacute ; B 49 -12 525 723 ;
+C -1 ; WX 291 ; N igrave ; B 5 0 276 723 ;
+C -1 ; WX 349 ; N Idieresis ; B 13 0 337 841 ;
+C -1 ; WX 523 ; N adieresis ; B 49 -12 525 683 ;
+C -1 ; WX 349 ; N Iacute ; B 35 0 331 890 ;
+C -1 ; WX 818 ; N copyright ; B 45 -15 773 707 ;
+C -1 ; WX 349 ; N Igrave ; B 18 0 314 890 ;
+C -1 ; WX 680 ; N Ccedilla ; B 48 -230 649 707 ;
+C -1 ; WX 436 ; N scaron ; B 47 -12 400 720 ;
+C -1 ; WX 514 ; N egrave ; B 49 -12 481 723 ;
+C -1 ; WX 762 ; N Ocircumflex ; B 48 -15 714 876 ;
+C -1 ; WX 593 ; N Thorn ; B 35 0 556 692 ;
+C -1 ; WX 523 ; N atilde ; B 49 -12 525 682 ;
+C -1 ; WX 791 ; N Udieresis ; B 29 -15 762 841 ;
+C -1 ; WX 514 ; N ecircumflex ; B 49 -12 481 720 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 712
+
+KPX A z 6
+KPX A y -50
+KPX A w -45
+KPX A v -60
+KPX A u -25
+KPX A t -12
+KPX A quoteright -120
+KPX A quotedblright -120
+KPX A q -6
+KPX A p -18
+KPX A o -12
+KPX A e -6
+KPX A d -12
+KPX A c -12
+KPX A b -12
+KPX A Y -70
+KPX A X -6
+KPX A W -58
+KPX A V -72
+KPX A U -50
+KPX A T -70
+KPX A Q -24
+KPX A O -24
+KPX A G -24
+KPX A C -24
+
+KPX B y -18
+KPX B u -12
+KPX B r -12
+KPX B period -30
+KPX B o -6
+KPX B l -12
+KPX B i -12
+KPX B h -12
+KPX B e -6
+KPX B comma -20
+KPX B a -12
+KPX B W -25
+KPX B V -20
+KPX B U -20
+KPX B T -20
+
+KPX C z -18
+KPX C y -24
+KPX C u -18
+KPX C r -6
+KPX C o -12
+KPX C e -12
+KPX C a -12
+KPX C Q -6
+KPX C O -6
+KPX C G -6
+KPX C C -6
+
+KPX D y 6
+KPX D u -12
+KPX D r -12
+KPX D quoteright -20
+KPX D quotedblright -20
+KPX D period -60
+KPX D i -6
+KPX D h -12
+KPX D e -6
+KPX D comma -50
+KPX D a -6
+KPX D Y -45
+KPX D W -35
+KPX D V -35
+
+KPX E z -6
+KPX E y -30
+KPX E x -6
+KPX E w -24
+KPX E v -24
+KPX E u -12
+KPX E t -18
+KPX E r -4
+KPX E q -6
+KPX E p -18
+KPX E o -6
+KPX E n -4
+KPX E m -4
+KPX E l 5
+KPX E k 5
+KPX E j -6
+KPX E i -6
+KPX E g -6
+KPX E f -12
+KPX E e -6
+KPX E d -6
+KPX E c -6
+KPX E b -12
+KPX E Y -6
+KPX E W -6
+KPX E V -6
+
+KPX F y -18
+KPX F u -12
+KPX F r -20
+KPX F period -180
+KPX F o -36
+KPX F l -12
+KPX F i -10
+KPX F endash 20
+KPX F e -36
+KPX F comma -180
+KPX F a -48
+KPX F A -60
+
+KPX G y -18
+KPX G u -12
+KPX G r -5
+KPX G o 5
+KPX G n -5
+KPX G l -6
+KPX G i -12
+KPX G h -12
+KPX G e 5
+KPX G a -12
+
+KPX H y -24
+KPX H u -26
+KPX H o -30
+KPX H i -18
+KPX H e -30
+KPX H a -24
+
+KPX I z -6
+KPX I y -6
+KPX I x -6
+KPX I w -18
+KPX I v -24
+KPX I u -26
+KPX I t -24
+KPX I s -18
+KPX I r -12
+KPX I p -26
+KPX I o -30
+KPX I n -18
+KPX I m -18
+KPX I l -6
+KPX I k -6
+KPX I h -6
+KPX I g -10
+KPX I f -6
+KPX I e -30
+KPX I d -30
+KPX I c -30
+KPX I b -6
+KPX I a -24
+
+KPX J y -12
+KPX J u -36
+KPX J o -30
+KPX J i -20
+KPX J e -30
+KPX J bracketright 20
+KPX J braceright 20
+KPX J a -36
+
+KPX K y -60
+KPX K w -70
+KPX K v -70
+KPX K u -42
+KPX K o -30
+KPX K i 6
+KPX K e -24
+KPX K a -12
+KPX K Q -42
+KPX K O -42
+KPX K G -42
+KPX K C -42
+
+KPX L y -52
+KPX L w -58
+KPX L u -12
+KPX L quoteright -130
+KPX L quotedblright -50
+KPX L l 6
+KPX L j -6
+KPX L Y -70
+KPX L W -90
+KPX L V -100
+KPX L U -24
+KPX L T -100
+KPX L Q -18
+KPX L O -10
+KPX L G -18
+KPX L C -18
+KPX L A 12
+
+KPX M y -24
+KPX M u -36
+KPX M o -30
+KPX M n -6
+KPX M j -12
+KPX M i -12
+KPX M e -30
+KPX M d -30
+KPX M c -30
+KPX M a -12
+
+KPX N y -24
+KPX N u -30
+KPX N o -30
+KPX N i -24
+KPX N e -30
+KPX N a -30
+
+KPX O z -6
+KPX O u -6
+KPX O t -6
+KPX O s -6
+KPX O q -6
+KPX O period -60
+KPX O p -6
+KPX O o -6
+KPX O n -5
+KPX O m -5
+KPX O l -6
+KPX O k -6
+KPX O i -5
+KPX O h -12
+KPX O g -6
+KPX O e -6
+KPX O d -6
+KPX O comma -50
+KPX O c -6
+KPX O a -12
+KPX O Y -55
+KPX O X -24
+KPX O W -30
+KPX O V -18
+KPX O T -30
+KPX O A -18
+
+KPX P u -12
+KPX P t -6
+KPX P s -24
+KPX P r -12
+KPX P period -200
+KPX P o -30
+KPX P n -12
+KPX P l -6
+KPX P hyphen -40
+KPX P h -6
+KPX P e -30
+KPX P comma -200
+KPX P a -36
+KPX P I -6
+KPX P H -12
+KPX P E -6
+KPX P A -55
+
+KPX Q u -6
+KPX Q a -18
+KPX Q Y -30
+KPX Q X -24
+KPX Q W -24
+KPX Q V -18
+KPX Q U -30
+KPX Q T -24
+KPX Q A -18
+
+KPX R y -20
+KPX R u -12
+KPX R quoteright -20
+KPX R quotedblright -20
+KPX R o -20
+KPX R hyphen -30
+KPX R e -20
+KPX R d -20
+KPX R a -12
+KPX R Y -45
+KPX R W -24
+KPX R V -32
+KPX R U -30
+KPX R T -32
+KPX R Q -24
+KPX R O -24
+KPX R G -24
+KPX R C -24
+
+KPX S y -25
+KPX S w -30
+KPX S v -30
+KPX S u -24
+KPX S t -24
+KPX S r -20
+KPX S quoteright -10
+KPX S quotedblright -10
+KPX S q -5
+KPX S p -24
+KPX S o -12
+KPX S n -20
+KPX S m -20
+KPX S l -18
+KPX S k -24
+KPX S j -12
+KPX S i -20
+KPX S h -12
+KPX S e -12
+KPX S a -18
+
+KPX T z -64
+KPX T y -84
+KPX T w -100
+KPX T u -82
+KPX T semicolon -56
+KPX T s -82
+KPX T r -82
+KPX T quoteright 24
+KPX T period -110
+KPX T parenright 54
+KPX T o -100
+KPX T m -82
+KPX T i -34
+KPX T hyphen -100
+KPX T endash -50
+KPX T emdash -50
+KPX T e -100
+KPX T comma -110
+KPX T colon -50
+KPX T bracketright 54
+KPX T braceright 54
+KPX T a -100
+KPX T Y 12
+KPX T X 18
+KPX T W 6
+KPX T V 6
+KPX T T 12
+KPX T S -12
+KPX T Q -18
+KPX T O -18
+KPX T G -18
+KPX T C -18
+KPX T A -65
+
+KPX U z -30
+KPX U y -20
+KPX U x -30
+KPX U v -20
+KPX U t -36
+KPX U s -40
+KPX U r -40
+KPX U p -42
+KPX U n -40
+KPX U m -40
+KPX U l -12
+KPX U k -12
+KPX U i -28
+KPX U h -6
+KPX U g -50
+KPX U f -12
+KPX U d -45
+KPX U c -45
+KPX U b -12
+KPX U a -40
+KPX U A -40
+
+KPX V y -36
+KPX V u -40
+KPX V semicolon -45
+KPX V r -70
+KPX V quoteright 36
+KPX V quotedblright 20
+KPX V period -140
+KPX V parenright 85
+KPX V o -70
+KPX V i 6
+KPX V hyphen -60
+KPX V endash -20
+KPX V emdash -20
+KPX V e -70
+KPX V comma -140
+KPX V colon -45
+KPX V bracketright 64
+KPX V braceright 64
+KPX V a -60
+KPX V T 6
+KPX V Q -12
+KPX V O -12
+KPX V G -12
+KPX V C -12
+KPX V A -60
+
+KPX W y -50
+KPX W u -46
+KPX W semicolon -40
+KPX W r -45
+KPX W quoteright 36
+KPX W quotedblright 20
+KPX W period -110
+KPX W parenright 85
+KPX W o -65
+KPX W m -45
+KPX W i -10
+KPX W hyphen -40
+KPX W e -65
+KPX W d -65
+KPX W comma -100
+KPX W colon -40
+KPX W bracketright 64
+KPX W braceright 64
+KPX W a -60
+KPX W T 18
+KPX W Q -6
+KPX W O -6
+KPX W G -6
+KPX W C -6
+KPX W A -48
+
+KPX X y -18
+KPX X u -24
+KPX X quoteright 15
+KPX X e -6
+KPX X a -6
+KPX X Q -24
+KPX X O -30
+KPX X G -30
+KPX X C -30
+KPX X A 6
+
+KPX Y v -50
+KPX Y u -54
+KPX Y t -46
+KPX Y semicolon -37
+KPX Y quoteright 36
+KPX Y quotedblright 20
+KPX Y q -100
+KPX Y period -90
+KPX Y parenright 60
+KPX Y o -90
+KPX Y l 10
+KPX Y hyphen -50
+KPX Y emdash -20
+KPX Y e -90
+KPX Y d -90
+KPX Y comma -90
+KPX Y colon -50
+KPX Y bracketright 64
+KPX Y braceright 64
+KPX Y a -68
+KPX Y Y 12
+KPX Y X 12
+KPX Y W 12
+KPX Y V 12
+KPX Y T 12
+KPX Y Q -18
+KPX Y O -18
+KPX Y G -18
+KPX Y C -18
+KPX Y A -32
+
+KPX Z y -36
+KPX Z w -36
+KPX Z u -6
+KPX Z o -12
+KPX Z i -12
+KPX Z e -6
+KPX Z a -6
+KPX Z Q -20
+KPX Z O -20
+KPX Z G -30
+KPX Z C -20
+KPX Z A 20
+
+KPX a quoteright -70
+KPX a quotedblright -80
+
+KPX b y -25
+KPX b w -30
+KPX b v -35
+KPX b quoteright -70
+KPX b quotedblright -70
+KPX b period -40
+KPX b comma -40
+
+KPX braceleft Y 64
+KPX braceleft W 64
+KPX braceleft V 64
+KPX braceleft T 54
+KPX braceleft J 80
+
+KPX bracketleft Y 64
+KPX bracketleft W 64
+KPX bracketleft V 64
+KPX bracketleft T 54
+KPX bracketleft J 80
+
+KPX c quoteright -28
+KPX c quotedblright -28
+KPX c period -10
+
+KPX comma quoteright -50
+KPX comma quotedblright -50
+
+KPX d quoteright -24
+KPX d quotedblright -24
+
+KPX e z -4
+KPX e quoteright -60
+KPX e quotedblright -60
+KPX e period -20
+KPX e comma -20
+
+KPX f quotesingle 30
+KPX f quoteright 65
+KPX f quotedblright 56
+KPX f quotedbl 30
+KPX f parenright 100
+KPX f bracketright 100
+KPX f braceright 100
+
+KPX g quoteright -18
+KPX g quotedblright -10
+
+KPX h quoteright -80
+KPX h quotedblright -80
+
+KPX j quoteright -20
+KPX j quotedblright -20
+KPX j period -30
+KPX j comma -30
+
+KPX k quoteright -40
+KPX k quotedblright -40
+
+KPX l quoteright -10
+KPX l quotedblright -10
+
+KPX m quoteright -80
+KPX m quotedblright -80
+
+KPX n quoteright -80
+KPX n quotedblright -80
+
+KPX o z -12
+KPX o y -30
+KPX o x -18
+KPX o w -30
+KPX o v -30
+KPX o quoteright -70
+KPX o quotedblright -70
+KPX o period -40
+KPX o comma -40
+
+KPX p z -20
+KPX p y -25
+KPX p w -30
+KPX p quoteright -70
+KPX p quotedblright -70
+KPX p period -40
+KPX p comma -40
+
+KPX parenleft Y 64
+KPX parenleft W 64
+KPX parenleft V 64
+KPX parenleft T 64
+KPX parenleft J 80
+
+KPX period quoteright -50
+KPX period quotedblright -50
+
+KPX q quoteright -50
+KPX q quotedblright -50
+KPX q period -20
+KPX q comma -10
+
+KPX quotedblleft z -60
+KPX quotedblleft y -30
+KPX quotedblleft x -40
+KPX quotedblleft w -20
+KPX quotedblleft v -20
+KPX quotedblleft u -40
+KPX quotedblleft t -40
+KPX quotedblleft s -50
+KPX quotedblleft r -50
+KPX quotedblleft q -80
+KPX quotedblleft p -50
+KPX quotedblleft o -80
+KPX quotedblleft n -50
+KPX quotedblleft m -50
+KPX quotedblleft g -70
+KPX quotedblleft f -50
+KPX quotedblleft e -80
+KPX quotedblleft d -80
+KPX quotedblleft c -80
+KPX quotedblleft a -70
+KPX quotedblleft Z -20
+KPX quotedblleft Y 12
+KPX quotedblleft W 18
+KPX quotedblleft V 18
+KPX quotedblleft U -20
+KPX quotedblleft T 10
+KPX quotedblleft S -20
+KPX quotedblleft R -20
+KPX quotedblleft Q -20
+KPX quotedblleft P -20
+KPX quotedblleft O -30
+KPX quotedblleft N -20
+KPX quotedblleft M -20
+KPX quotedblleft L -20
+KPX quotedblleft K -20
+KPX quotedblleft J -40
+KPX quotedblleft I -20
+KPX quotedblleft H -20
+KPX quotedblleft G -30
+KPX quotedblleft F -20
+KPX quotedblleft E -20
+KPX quotedblleft D -20
+KPX quotedblleft C -30
+KPX quotedblleft B -20
+KPX quotedblleft A -130
+
+KPX quotedblright period -130
+KPX quotedblright comma -130
+
+KPX quoteleft z -40
+KPX quoteleft y -35
+KPX quoteleft x -30
+KPX quoteleft w -20
+KPX quoteleft v -20
+KPX quoteleft u -50
+KPX quoteleft t -40
+KPX quoteleft s -45
+KPX quoteleft r -50
+KPX quoteleft quoteleft -72
+KPX quoteleft q -70
+KPX quoteleft p -50
+KPX quoteleft o -70
+KPX quoteleft n -50
+KPX quoteleft m -50
+KPX quoteleft g -65
+KPX quoteleft f -40
+KPX quoteleft e -70
+KPX quoteleft d -70
+KPX quoteleft c -70
+KPX quoteleft a -60
+KPX quoteleft Z -20
+KPX quoteleft Y 18
+KPX quoteleft X 12
+KPX quoteleft W 18
+KPX quoteleft V 18
+KPX quoteleft U -20
+KPX quoteleft T 10
+KPX quoteleft R -20
+KPX quoteleft Q -20
+KPX quoteleft P -20
+KPX quoteleft O -30
+KPX quoteleft N -20
+KPX quoteleft M -20
+KPX quoteleft L -20
+KPX quoteleft K -20
+KPX quoteleft J -40
+KPX quoteleft I -20
+KPX quoteleft H -20
+KPX quoteleft G -40
+KPX quoteleft F -20
+KPX quoteleft E -20
+KPX quoteleft D -20
+KPX quoteleft C -30
+KPX quoteleft B -20
+KPX quoteleft A -130
+
+KPX quoteright v -40
+KPX quoteright t -75
+KPX quoteright s -110
+KPX quoteright r -70
+KPX quoteright quoteright -72
+KPX quoteright period -130
+KPX quoteright m -70
+KPX quoteright l -6
+KPX quoteright d -120
+KPX quoteright comma -130
+
+KPX r z 10
+KPX r y 18
+KPX r x 12
+KPX r w 18
+KPX r v 18
+KPX r u 8
+KPX r t 8
+KPX r semicolon 10
+KPX r quoteright -20
+KPX r quotedblright -20
+KPX r q -6
+KPX r period -60
+KPX r o -6
+KPX r n 8
+KPX r m 8
+KPX r k -6
+KPX r i 8
+KPX r hyphen -20
+KPX r h 6
+KPX r g -6
+KPX r f 8
+KPX r e -20
+KPX r d -20
+KPX r comma -60
+KPX r colon 10
+KPX r c -20
+KPX r a -10
+
+KPX s quoteright -40
+KPX s quotedblright -40
+KPX s period -20
+KPX s comma -10
+
+KPX space quotesinglbase -60
+KPX space quoteleft -40
+KPX space quotedblleft -40
+KPX space quotedblbase -60
+KPX space Y -60
+KPX space W -60
+KPX space V -60
+KPX space T -36
+
+KPX t quoteright -18
+KPX t quotedblright -18
+
+KPX u quoteright -30
+KPX u quotedblright -30
+
+KPX v semicolon 10
+KPX v quoteright 20
+KPX v quotedblright 20
+KPX v q -10
+KPX v period -90
+KPX v o -5
+KPX v e -5
+KPX v d -10
+KPX v comma -90
+KPX v colon 10
+KPX v c -6
+KPX v a -6
+
+KPX w semicolon 10
+KPX w quoteright 20
+KPX w quotedblright 20
+KPX w q -6
+KPX w period -80
+KPX w e -6
+KPX w d -6
+KPX w comma -75
+KPX w colon 10
+KPX w c -6
+
+KPX x quoteright -10
+KPX x quotedblright -20
+KPX x q -6
+KPX x o -6
+KPX x d -12
+KPX x c -12
+
+KPX y semicolon 10
+KPX y q -6
+KPX y period -95
+KPX y o -6
+KPX y hyphen -30
+KPX y e -6
+KPX y d -6
+KPX y comma -85
+KPX y colon 10
+KPX y c -6
+
+KPX z quoteright -20
+KPX z quotedblright -30
+KPX z o -6
+KPX z e -6
+KPX z d -6
+KPX z c -6
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/putr8a.pfb b/Master/tlpkg/tlgs/lib/fonts/putr8a.pfb
new file mode 100644
index 00000000000..12843819ada
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putr8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/putri8a.afm b/Master/tlpkg/tlgs/lib/fonts/putri8a.afm
new file mode 100644
index 00000000000..4b460805ad4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putri8a.afm
@@ -0,0 +1,1010 @@
+StartFontMetrics 2.0
+Comment Copyright (c) 1989, 1991 Adobe Systems Incorporated.
+Comment The Utopia fonts are freely available; see http://tug.org/fonts/utopia.
+Comment Creation Date: Wed Oct 2 18:58:24 1991
+Comment License clarified 17 November 2006.
+Comment UniqueID 36549
+Comment VMusage 34122 41014
+FontName Utopia-Italic
+FullName Utopia Italic
+FamilyName Utopia
+Weight Regular
+ItalicAngle -13
+IsFixedPitch false
+FontBBox -166 -250 1205 890
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+Notice Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved. Utopia is either a registered trademark or trademark of Adobe Systems Incorporated in the United States and/or other countries. Used under license.
+EncodingScheme AdobeStandardEncoding
+CapHeight 692
+XHeight 502
+Ascender 742
+Descender -242
+StartCharMetrics 228
+C 32 ; WX 225 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 240 ; N exclam ; B 69 -12 325 707 ;
+C 34 ; WX 402 ; N quotedbl ; B 206 469 489 742 ;
+C 35 ; WX 530 ; N numbersign ; B 89 0 620 668 ;
+C 36 ; WX 530 ; N dollar ; B 66 -109 586 743 ;
+C 37 ; WX 826 ; N percent ; B 133 -25 830 702 ;
+C 38 ; WX 725 ; N ampersand ; B 95 -12 738 680 ;
+C 39 ; WX 216 ; N quoteright ; B 147 482 300 742 ;
+C 40 ; WX 350 ; N parenleft ; B 141 -128 493 692 ;
+C 41 ; WX 350 ; N parenright ; B -11 -128 341 692 ;
+C 42 ; WX 412 ; N asterisk ; B 141 356 493 707 ;
+C 43 ; WX 570 ; N plus ; B 93 0 577 490 ;
+C 44 ; WX 265 ; N comma ; B 46 -134 208 142 ;
+C 45 ; WX 392 ; N hyphen ; B 117 216 376 286 ;
+C 46 ; WX 265 ; N period ; B 82 -12 204 113 ;
+C 47 ; WX 270 ; N slash ; B 35 -15 376 707 ;
+C 48 ; WX 530 ; N zero ; B 95 -12 576 680 ;
+C 49 ; WX 530 ; N one ; B 109 0 464 680 ;
+C 50 ; WX 530 ; N two ; B 33 0 573 680 ;
+C 51 ; WX 530 ; N three ; B 54 -12 559 680 ;
+C 52 ; WX 530 ; N four ; B 67 0 544 668 ;
+C 53 ; WX 530 ; N five ; B 59 -12 585 668 ;
+C 54 ; WX 530 ; N six ; B 91 -12 586 680 ;
+C 55 ; WX 530 ; N seven ; B 165 -12 635 668 ;
+C 56 ; WX 530 ; N eight ; B 81 -12 570 680 ;
+C 57 ; WX 530 ; N nine ; B 86 -12 571 680 ;
+C 58 ; WX 265 ; N colon ; B 82 -12 283 490 ;
+C 59 ; WX 265 ; N semicolon ; B 46 -134 283 490 ;
+C 60 ; WX 570 ; N less ; B 86 1 564 497 ;
+C 61 ; WX 570 ; N equal ; B 93 111 577 389 ;
+C 62 ; WX 570 ; N greater ; B 86 1 564 497 ;
+C 63 ; WX 425 ; N question ; B 150 -12 491 707 ;
+C 64 ; WX 794 ; N at ; B 123 -15 832 707 ;
+C 65 ; WX 624 ; N A ; B -23 0 658 692 ;
+C 66 ; WX 632 ; N B ; B 38 0 671 692 ;
+C 67 ; WX 661 ; N C ; B 114 -15 758 707 ;
+C 68 ; WX 763 ; N D ; B 40 0 802 692 ;
+C 69 ; WX 596 ; N E ; B 38 0 692 692 ;
+C 70 ; WX 571 ; N F ; B 38 0 695 692 ;
+C 71 ; WX 709 ; N G ; B 114 -15 772 707 ;
+C 72 ; WX 775 ; N H ; B 40 0 892 692 ;
+C 73 ; WX 345 ; N I ; B 40 0 463 692 ;
+C 74 ; WX 352 ; N J ; B -43 -119 471 692 ;
+C 75 ; WX 650 ; N K ; B 40 -5 821 692 ;
+C 76 ; WX 565 ; N L ; B 40 0 603 692 ;
+C 77 ; WX 920 ; N M ; B 31 0 1037 692 ;
+C 78 ; WX 763 ; N N ; B 31 0 890 692 ;
+C 79 ; WX 753 ; N O ; B 114 -15 789 707 ;
+C 80 ; WX 614 ; N P ; B 40 0 681 692 ;
+C 81 ; WX 753 ; N Q ; B 114 -203 789 707 ;
+C 82 ; WX 640 ; N R ; B 40 0 677 692 ;
+C 83 ; WX 533 ; N S ; B 69 -15 577 707 ;
+C 84 ; WX 606 ; N T ; B 137 0 743 692 ;
+C 85 ; WX 794 ; N U ; B 166 -15 915 692 ;
+C 86 ; WX 637 ; N V ; B 131 0 821 692 ;
+C 87 ; WX 946 ; N W ; B 121 0 1110 692 ;
+C 88 ; WX 632 ; N X ; B -1 0 770 692 ;
+C 89 ; WX 591 ; N Y ; B 131 0 779 692 ;
+C 90 ; WX 622 ; N Z ; B 15 0 738 692 ;
+C 91 ; WX 330 ; N bracketleft ; B 104 -128 449 692 ;
+C 92 ; WX 390 ; N backslash ; B 124 -15 406 707 ;
+C 93 ; WX 330 ; N bracketright ; B 14 -128 359 692 ;
+C 94 ; WX 570 ; N asciicircum ; B 118 228 582 668 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 216 ; N quoteleft ; B 165 488 318 748 ;
+C 97 ; WX 561 ; N a ; B 66 -12 598 502 ;
+C 98 ; WX 559 ; N b ; B 82 -12 592 742 ;
+C 99 ; WX 441 ; N c ; B 81 -12 500 502 ;
+C 100 ; WX 587 ; N d ; B 72 -12 647 742 ;
+C 101 ; WX 453 ; N e ; B 80 -12 506 502 ;
+C 102 ; WX 315 ; N f ; B -72 -242 539 742 ; L i fi ; L l fl ;
+C 103 ; WX 499 ; N g ; B 30 -242 608 512 ;
+C 104 ; WX 607 ; N h ; B 92 -12 623 742 ;
+C 105 ; WX 317 ; N i ; B 114 -12 363 715 ;
+C 106 ; WX 309 ; N j ; B -60 -242 365 715 ;
+C 107 ; WX 545 ; N k ; B 92 -12 602 742 ;
+C 108 ; WX 306 ; N l ; B 111 -12 366 742 ;
+C 109 ; WX 912 ; N m ; B 98 -12 929 502 ;
+C 110 ; WX 618 ; N n ; B 98 -12 635 502 ;
+C 111 ; WX 537 ; N o ; B 84 -12 557 502 ;
+C 112 ; WX 590 ; N p ; B 57 -242 621 502 ;
+C 113 ; WX 559 ; N q ; B 73 -242 602 525 ;
+C 114 ; WX 402 ; N r ; B 104 -12 483 502 ;
+C 115 ; WX 389 ; N s ; B 54 -12 432 502 ;
+C 116 ; WX 341 ; N t ; B 119 -12 439 616 ;
+C 117 ; WX 618 ; N u ; B 124 -12 644 502 ;
+C 118 ; WX 510 ; N v ; B 119 -12 563 502 ;
+C 119 ; WX 785 ; N w ; B 122 -12 843 502 ;
+C 120 ; WX 516 ; N x ; B 31 -12 566 502 ;
+C 121 ; WX 468 ; N y ; B -5 -242 540 502 ;
+C 122 ; WX 468 ; N z ; B 39 -12 518 490 ;
+C 123 ; WX 340 ; N braceleft ; B 135 -128 458 692 ;
+C 124 ; WX 270 ; N bar ; B 165 -250 233 750 ;
+C 125 ; WX 340 ; N braceright ; B 15 -128 337 692 ;
+C 126 ; WX 570 ; N asciitilde ; B 133 176 557 318 ;
+C 161 ; WX 240 ; N exclamdown ; B 17 -217 273 502 ;
+C 162 ; WX 530 ; N cent ; B 129 -21 598 669 ;
+C 163 ; WX 530 ; N sterling ; B 44 0 584 680 ;
+C 164 ; WX 100 ; N fraction ; B -166 -24 404 698 ;
+C 165 ; WX 530 ; N yen ; B 107 0 680 668 ;
+C 166 ; WX 530 ; N florin ; B 39 -135 623 691 ;
+C 167 ; WX 530 ; N section ; B 90 -115 568 707 ;
+C 168 ; WX 530 ; N currency ; B 91 90 571 578 ;
+C 169 ; WX 216 ; N quotesingle ; B 196 469 309 742 ;
+C 170 ; WX 402 ; N quotedblleft ; B 169 488 508 748 ;
+C 171 ; WX 462 ; N guillemotleft ; B 114 41 505 435 ;
+C 172 ; WX 277 ; N guilsinglleft ; B 106 41 302 435 ;
+C 173 ; WX 277 ; N guilsinglright ; B 79 41 275 435 ;
+C 174 ; WX 607 ; N fi ; B -72 -242 624 742 ;
+C 175 ; WX 603 ; N fl ; B -72 -242 663 742 ;
+C 177 ; WX 500 ; N endash ; B 47 221 559 279 ;
+C 178 ; WX 500 ; N dagger ; B 136 -125 554 717 ;
+C 179 ; WX 490 ; N daggerdbl ; B 74 -119 544 717 ;
+C 180 ; WX 265 ; N periodcentered ; B 124 187 246 312 ;
+C 182 ; WX 560 ; N paragraph ; B 144 -101 672 692 ;
+C 183 ; WX 500 ; N bullet ; B 145 192 464 512 ;
+C 184 ; WX 216 ; N quotesinglbase ; B 28 -109 181 151 ;
+C 185 ; WX 402 ; N quotedblbase ; B 28 -109 367 151 ;
+C 186 ; WX 402 ; N quotedblright ; B 142 484 481 744 ;
+C 187 ; WX 462 ; N guillemotright ; B 64 41 455 435 ;
+C 188 ; WX 1000 ; N ellipsis ; B 120 -12 908 113 ;
+C 189 ; WX 1200 ; N perthousand ; B 133 -25 1205 702 ;
+C 191 ; WX 425 ; N questiondown ; B 38 -217 379 502 ;
+C 193 ; WX 400 ; N grave ; B 181 542 403 723 ;
+C 194 ; WX 400 ; N acute ; B 249 542 471 723 ;
+C 195 ; WX 400 ; N circumflex ; B 222 546 519 720 ;
+C 196 ; WX 400 ; N tilde ; B 172 563 527 682 ;
+C 197 ; WX 400 ; N macron ; B 228 597 524 656 ;
+C 198 ; WX 400 ; N breve ; B 262 568 536 698 ;
+C 199 ; WX 402 ; N dotaccent ; B 287 570 394 680 ;
+C 200 ; WX 400 ; N dieresis ; B 207 572 522 682 ;
+C 202 ; WX 400 ; N ring ; B 221 550 437 752 ;
+C 203 ; WX 400 ; N cedilla ; B 97 -230 276 0 ;
+C 205 ; WX 400 ; N hungarumlaut ; B 211 546 490 750 ;
+C 206 ; WX 350 ; N ogonek ; B 103 -219 283 0 ;
+C 207 ; WX 400 ; N caron ; B 248 557 545 731 ;
+C 208 ; WX 1000 ; N emdash ; B 47 221 1059 279 ;
+C 225 ; WX 880 ; N AE ; B -53 0 976 692 ;
+C 227 ; WX 425 ; N ordfeminine ; B 112 265 495 590 ;
+C 232 ; WX 571 ; N Lslash ; B 46 0 609 692 ;
+C 233 ; WX 753 ; N Oslash ; B 114 -45 789 736 ;
+C 234 ; WX 1020 ; N OE ; B 114 0 1116 692 ;
+C 235 ; WX 389 ; N ordmasculine ; B 121 265 455 590 ;
+C 241 ; WX 779 ; N ae ; B 69 -12 832 514 ;
+C 245 ; WX 317 ; N dotlessi ; B 114 -12 334 502 ;
+C 248 ; WX 318 ; N lslash ; B 80 -12 411 742 ;
+C 249 ; WX 537 ; N oslash ; B 84 -39 557 529 ;
+C 250 ; WX 806 ; N oe ; B 84 -12 859 502 ;
+C 251 ; WX 577 ; N germandbls ; B -72 -242 665 742 ;
+C -1 ; WX 370 ; N onesuperior ; B 125 272 361 680 ;
+C -1 ; WX 570 ; N minus ; B 93 221 577 279 ;
+C -1 ; WX 400 ; N degree ; B 187 404 463 680 ;
+C -1 ; WX 537 ; N oacute ; B 84 -12 557 723 ;
+C -1 ; WX 753 ; N Odieresis ; B 114 -15 789 848 ;
+C -1 ; WX 537 ; N odieresis ; B 84 -12 567 682 ;
+C -1 ; WX 596 ; N Eacute ; B 38 0 692 890 ;
+C -1 ; WX 618 ; N ucircumflex ; B 124 -12 644 720 ;
+C -1 ; WX 890 ; N onequarter ; B 132 -24 840 698 ;
+C -1 ; WX 570 ; N logicalnot ; B 93 102 577 389 ;
+C -1 ; WX 596 ; N Ecircumflex ; B 38 0 692 876 ;
+C -1 ; WX 890 ; N onehalf ; B 106 -24 847 698 ;
+C -1 ; WX 753 ; N Otilde ; B 114 -15 789 842 ;
+C -1 ; WX 618 ; N uacute ; B 124 -12 644 723 ;
+C -1 ; WX 453 ; N eacute ; B 80 -12 518 723 ;
+C -1 ; WX 317 ; N iacute ; B 114 -12 415 723 ;
+C -1 ; WX 596 ; N Egrave ; B 38 0 692 890 ;
+C -1 ; WX 317 ; N icircumflex ; B 114 -12 418 720 ;
+C -1 ; WX 618 ; N mu ; B 46 -232 644 502 ;
+C -1 ; WX 270 ; N brokenbar ; B 165 -175 233 675 ;
+C -1 ; WX 584 ; N thorn ; B 51 -242 615 700 ;
+C -1 ; WX 624 ; N Aring ; B -23 0 658 861 ;
+C -1 ; WX 468 ; N yacute ; B -5 -242 540 723 ;
+C -1 ; WX 591 ; N Ydieresis ; B 131 0 779 848 ;
+C -1 ; WX 1100 ; N trademark ; B 126 277 1129 692 ;
+C -1 ; WX 836 ; N registered ; B 126 -15 854 707 ;
+C -1 ; WX 537 ; N ocircumflex ; B 84 -12 557 720 ;
+C -1 ; WX 624 ; N Agrave ; B -23 0 658 890 ;
+C -1 ; WX 533 ; N Scaron ; B 69 -15 596 888 ;
+C -1 ; WX 794 ; N Ugrave ; B 166 -15 915 890 ;
+C -1 ; WX 596 ; N Edieresis ; B 38 0 692 848 ;
+C -1 ; WX 794 ; N Uacute ; B 166 -15 915 890 ;
+C -1 ; WX 537 ; N otilde ; B 84 -12 560 682 ;
+C -1 ; WX 618 ; N ntilde ; B 98 -12 635 682 ;
+C -1 ; WX 468 ; N ydieresis ; B -5 -242 556 682 ;
+C -1 ; WX 624 ; N Aacute ; B -23 0 658 890 ;
+C -1 ; WX 537 ; N eth ; B 82 -12 556 742 ;
+C -1 ; WX 561 ; N acircumflex ; B 66 -12 598 720 ;
+C -1 ; WX 561 ; N aring ; B 66 -12 598 752 ;
+C -1 ; WX 753 ; N Ograve ; B 114 -15 789 890 ;
+C -1 ; WX 441 ; N ccedilla ; B 81 -230 500 502 ;
+C -1 ; WX 570 ; N multiply ; B 123 22 567 478 ;
+C -1 ; WX 570 ; N divide ; B 93 25 577 475 ;
+C -1 ; WX 370 ; N twosuperior ; B 70 272 434 680 ;
+C -1 ; WX 763 ; N Ntilde ; B 31 0 890 842 ;
+C -1 ; WX 618 ; N ugrave ; B 124 -12 644 723 ;
+C -1 ; WX 794 ; N Ucircumflex ; B 166 -15 915 876 ;
+C -1 ; WX 624 ; N Atilde ; B -23 0 658 842 ;
+C -1 ; WX 468 ; N zcaron ; B 39 -12 519 731 ;
+C -1 ; WX 317 ; N idieresis ; B 114 -12 433 682 ;
+C -1 ; WX 624 ; N Acircumflex ; B -23 0 658 876 ;
+C -1 ; WX 345 ; N Icircumflex ; B 40 0 488 876 ;
+C -1 ; WX 591 ; N Yacute ; B 131 0 779 890 ;
+C -1 ; WX 753 ; N Oacute ; B 114 -15 789 890 ;
+C -1 ; WX 624 ; N Adieresis ; B -23 0 658 848 ;
+C -1 ; WX 622 ; N Zcaron ; B 15 0 738 888 ;
+C -1 ; WX 561 ; N agrave ; B 66 -12 598 723 ;
+C -1 ; WX 370 ; N threesuperior ; B 94 265 424 680 ;
+C -1 ; WX 537 ; N ograve ; B 84 -12 557 723 ;
+C -1 ; WX 890 ; N threequarters ; B 140 -24 851 698 ;
+C -1 ; WX 770 ; N Eth ; B 47 0 809 692 ;
+C -1 ; WX 570 ; N plusminus ; B 93 0 577 556 ;
+C -1 ; WX 618 ; N udieresis ; B 124 -12 644 682 ;
+C -1 ; WX 453 ; N edieresis ; B 80 -12 525 682 ;
+C -1 ; WX 561 ; N aacute ; B 66 -12 598 723 ;
+C -1 ; WX 317 ; N igrave ; B 114 -12 352 723 ;
+C -1 ; WX 345 ; N Idieresis ; B 40 0 496 848 ;
+C -1 ; WX 561 ; N adieresis ; B 66 -12 598 682 ;
+C -1 ; WX 345 ; N Iacute ; B 40 0 486 890 ;
+C -1 ; WX 836 ; N copyright ; B 126 -15 854 707 ;
+C -1 ; WX 345 ; N Igrave ; B 40 0 463 890 ;
+C -1 ; WX 661 ; N Ccedilla ; B 114 -230 758 707 ;
+C -1 ; WX 389 ; N scaron ; B 54 -12 492 731 ;
+C -1 ; WX 453 ; N egrave ; B 80 -12 506 723 ;
+C -1 ; WX 753 ; N Ocircumflex ; B 114 -15 789 876 ;
+C -1 ; WX 604 ; N Thorn ; B 40 0 651 692 ;
+C -1 ; WX 561 ; N atilde ; B 66 -12 598 682 ;
+C -1 ; WX 794 ; N Udieresis ; B 166 -15 915 848 ;
+C -1 ; WX 453 ; N ecircumflex ; B 80 -12 510 720 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 690
+
+KPX A y -20
+KPX A x 10
+KPX A w -30
+KPX A v -30
+KPX A u -10
+KPX A t -6
+KPX A s 15
+KPX A r -12
+KPX A quoteright -110
+KPX A quotedblright -110
+KPX A q 10
+KPX A p -12
+KPX A o -10
+KPX A n -18
+KPX A m -18
+KPX A l -18
+KPX A j 6
+KPX A h -6
+KPX A d 10
+KPX A c -6
+KPX A b -6
+KPX A a 12
+KPX A Y -76
+KPX A X -8
+KPX A W -80
+KPX A V -90
+KPX A U -60
+KPX A T -72
+KPX A Q -30
+KPX A O -30
+KPX A G -30
+KPX A C -30
+
+KPX B y -6
+KPX B u -20
+KPX B r -15
+KPX B quoteright -40
+KPX B quotedblright -30
+KPX B o 6
+KPX B l -20
+KPX B k -15
+KPX B i -12
+KPX B h -15
+KPX B e 6
+KPX B a 12
+KPX B W -20
+KPX B V -50
+KPX B U -50
+KPX B T -20
+
+KPX C z -6
+KPX C y -18
+KPX C u -18
+KPX C quotedblright 20
+KPX C i -5
+KPX C e -6
+KPX C a -6
+
+KPX D y 18
+KPX D u -10
+KPX D quoteright -40
+KPX D quotedblright -50
+KPX D period -30
+KPX D o 6
+KPX D i 6
+KPX D h -25
+KPX D e 6
+KPX D comma -20
+KPX D a 6
+KPX D Y -70
+KPX D W -50
+KPX D V -60
+
+KPX E z -6
+KPX E y -18
+KPX E x 5
+KPX E w -20
+KPX E v -18
+KPX E u -24
+KPX E t -18
+KPX E s 5
+KPX E r -6
+KPX E quoteright 10
+KPX E quotedblright 10
+KPX E q 10
+KPX E period 10
+KPX E p -12
+KPX E o -6
+KPX E n -12
+KPX E m -12
+KPX E l -12
+KPX E k -10
+KPX E j -6
+KPX E i -12
+KPX E g -12
+KPX E e 5
+KPX E d 10
+KPX E comma 10
+KPX E b -6
+
+KPX F y -12
+KPX F u -30
+KPX F r -18
+KPX F quoteright 15
+KPX F quotedblright 35
+KPX F period -180
+KPX F o -30
+KPX F l -6
+KPX F i -12
+KPX F e -30
+KPX F comma -170
+KPX F a -30
+KPX F A -45
+
+KPX G y -16
+KPX G u -22
+KPX G r -22
+KPX G quoteright -20
+KPX G quotedblright -20
+KPX G o 10
+KPX G n -22
+KPX G l -24
+KPX G i -12
+KPX G h -18
+KPX G e 10
+KPX G a 5
+
+KPX H y -18
+KPX H u -30
+KPX H quoteright 10
+KPX H quotedblright 10
+KPX H o -12
+KPX H i -12
+KPX H e -12
+KPX H a -12
+
+KPX I z -20
+KPX I y -6
+KPX I x -6
+KPX I w -30
+KPX I v -30
+KPX I u -30
+KPX I t -18
+KPX I s -18
+KPX I r -12
+KPX I quoteright 10
+KPX I quotedblright 10
+KPX I p -18
+KPX I o -12
+KPX I n -18
+KPX I m -18
+KPX I l -6
+KPX I k -6
+KPX I g -12
+KPX I f -6
+KPX I d -6
+KPX I c -12
+KPX I b -6
+KPX I a -6
+
+KPX J y -12
+KPX J u -36
+KPX J quoteright 6
+KPX J quotedblright 15
+KPX J o -36
+KPX J i -30
+KPX J e -36
+KPX J braceright 10
+KPX J a -36
+
+KPX K y -40
+KPX K w -30
+KPX K v -20
+KPX K u -24
+KPX K r -12
+KPX K quoteright 25
+KPX K quotedblright 40
+KPX K o -24
+KPX K n -18
+KPX K i -6
+KPX K h 6
+KPX K e -12
+KPX K a -6
+KPX K Q -24
+KPX K O -24
+KPX K G -24
+KPX K C -24
+
+KPX L y -55
+KPX L w -30
+KPX L u -18
+KPX L quoteright -110
+KPX L quotedblright -110
+KPX L l -16
+KPX L j -18
+KPX L i -18
+KPX L a 10
+KPX L Y -80
+KPX L W -90
+KPX L V -110
+KPX L U -42
+KPX L T -80
+KPX L Q -48
+KPX L O -48
+KPX L G -48
+KPX L C -48
+KPX L A 30
+
+KPX M y -18
+KPX M u -24
+KPX M quoteright 6
+KPX M quotedblright 15
+KPX M o -25
+KPX M n -12
+KPX M j -18
+KPX M i -12
+KPX M e -20
+KPX M d -10
+KPX M c -20
+KPX M a -6
+
+KPX N y -18
+KPX N u -24
+KPX N quoteright 10
+KPX N quotedblright 10
+KPX N o -25
+KPX N i -12
+KPX N e -20
+KPX N a -22
+
+KPX O z -6
+KPX O y 12
+KPX O w -10
+KPX O v -10
+KPX O u -6
+KPX O t -6
+KPX O s -6
+KPX O r -6
+KPX O quoteright -40
+KPX O quotedblright -40
+KPX O q 5
+KPX O period -20
+KPX O p -6
+KPX O n -6
+KPX O m -6
+KPX O l -20
+KPX O k -10
+KPX O j -6
+KPX O h -10
+KPX O g -6
+KPX O e 5
+KPX O d 6
+KPX O comma -10
+KPX O c 5
+KPX O b -6
+KPX O a 5
+KPX O Y -75
+KPX O X -30
+KPX O W -40
+KPX O V -60
+KPX O T -48
+KPX O A -18
+
+KPX P y 6
+KPX P u -18
+KPX P t -6
+KPX P s -24
+KPX P r -6
+KPX P period -220
+KPX P o -24
+KPX P n -12
+KPX P l -25
+KPX P h -15
+KPX P e -24
+KPX P comma -220
+KPX P a -24
+KPX P I -30
+KPX P H -30
+KPX P E -30
+KPX P A -75
+
+KPX Q u -6
+KPX Q quoteright -40
+KPX Q quotedblright -50
+KPX Q a -6
+KPX Q Y -70
+KPX Q X -12
+KPX Q W -35
+KPX Q V -60
+KPX Q U -35
+KPX Q T -36
+KPX Q A -18
+
+KPX R y -14
+KPX R u -12
+KPX R quoteright -30
+KPX R quotedblright -20
+KPX R o -12
+KPX R hyphen -20
+KPX R e -12
+KPX R Y -50
+KPX R W -30
+KPX R V -40
+KPX R U -40
+KPX R T -30
+KPX R Q -10
+KPX R O -10
+KPX R G -10
+KPX R C -10
+KPX R A -6
+
+KPX S y -30
+KPX S w -30
+KPX S v -30
+KPX S u -18
+KPX S t -30
+KPX S r -20
+KPX S quoteright -38
+KPX S quotedblright -30
+KPX S p -18
+KPX S n -24
+KPX S m -24
+KPX S l -30
+KPX S k -24
+KPX S j -25
+KPX S i -30
+KPX S h -30
+KPX S e -6
+
+KPX T z -70
+KPX T y -60
+KPX T w -64
+KPX T u -74
+KPX T semicolon -36
+KPX T s -72
+KPX T r -64
+KPX T quoteright 45
+KPX T quotedblright 50
+KPX T period -100
+KPX T parenright 54
+KPX T o -90
+KPX T m -64
+KPX T i -34
+KPX T hyphen -100
+KPX T endash -60
+KPX T emdash -60
+KPX T e -90
+KPX T comma -110
+KPX T colon -10
+KPX T bracketright 45
+KPX T braceright 54
+KPX T a -90
+KPX T Y 12
+KPX T X 18
+KPX T W 6
+KPX T T 18
+KPX T Q -12
+KPX T O -12
+KPX T G -12
+KPX T C -12
+KPX T A -56
+
+KPX U z -30
+KPX U x -40
+KPX U t -24
+KPX U s -30
+KPX U r -30
+KPX U quoteright 10
+KPX U quotedblright 10
+KPX U p -40
+KPX U n -45
+KPX U m -45
+KPX U l -12
+KPX U k -12
+KPX U i -24
+KPX U h -6
+KPX U g -30
+KPX U d -40
+KPX U c -35
+KPX U b -6
+KPX U a -40
+KPX U A -45
+
+KPX V y -46
+KPX V u -42
+KPX V semicolon -35
+KPX V r -50
+KPX V quoteright 75
+KPX V quotedblright 70
+KPX V period -130
+KPX V parenright 64
+KPX V o -62
+KPX V i -10
+KPX V hyphen -60
+KPX V endash -20
+KPX V emdash -20
+KPX V e -52
+KPX V comma -120
+KPX V colon -18
+KPX V bracketright 64
+KPX V braceright 64
+KPX V a -60
+KPX V T 6
+KPX V A -70
+
+KPX W y -42
+KPX W u -56
+KPX W t -20
+KPX W semicolon -28
+KPX W r -40
+KPX W quoteright 55
+KPX W quotedblright 60
+KPX W period -108
+KPX W parenright 64
+KPX W o -60
+KPX W m -35
+KPX W i -10
+KPX W hyphen -40
+KPX W endash -2
+KPX W emdash -10
+KPX W e -54
+KPX W d -50
+KPX W comma -108
+KPX W colon -28
+KPX W bracketright 55
+KPX W braceright 64
+KPX W a -60
+KPX W T 12
+KPX W Q -10
+KPX W O -10
+KPX W G -10
+KPX W C -10
+KPX W A -58
+
+KPX X y -35
+KPX X u -30
+KPX X r -6
+KPX X quoteright 35
+KPX X quotedblright 15
+KPX X i -6
+KPX X e -10
+KPX X a 5
+KPX X Y -6
+KPX X W -6
+KPX X Q -30
+KPX X O -30
+KPX X G -30
+KPX X C -30
+KPX X A -18
+
+KPX Y v -50
+KPX Y u -58
+KPX Y t -32
+KPX Y semicolon -36
+KPX Y quoteright 65
+KPX Y quotedblright 70
+KPX Y q -100
+KPX Y period -90
+KPX Y parenright 60
+KPX Y o -72
+KPX Y l 10
+KPX Y hyphen -95
+KPX Y endash -20
+KPX Y emdash -20
+KPX Y e -72
+KPX Y d -80
+KPX Y comma -80
+KPX Y colon -36
+KPX Y bracketright 64
+KPX Y braceright 75
+KPX Y a -82
+KPX Y Y 12
+KPX Y X 12
+KPX Y W 12
+KPX Y V 6
+KPX Y T 25
+KPX Y Q -5
+KPX Y O -5
+KPX Y G -5
+KPX Y C -5
+KPX Y A -36
+
+KPX Z y -36
+KPX Z w -36
+KPX Z u -12
+KPX Z quoteright 10
+KPX Z quotedblright 10
+KPX Z o -6
+KPX Z i -12
+KPX Z e -6
+KPX Z a -6
+KPX Z Q -30
+KPX Z O -30
+KPX Z G -30
+KPX Z C -30
+KPX Z A 12
+
+KPX a quoteright -40
+KPX a quotedblright -40
+
+KPX b y -6
+KPX b w -15
+KPX b v -15
+KPX b quoteright -50
+KPX b quotedblright -50
+KPX b period -40
+KPX b comma -30
+
+KPX braceleft Y 64
+KPX braceleft W 64
+KPX braceleft V 64
+KPX braceleft T 54
+KPX braceleft J 80
+
+KPX bracketleft Y 64
+KPX bracketleft W 64
+KPX bracketleft V 64
+KPX bracketleft T 54
+KPX bracketleft J 80
+
+KPX c quoteright -20
+KPX c quotedblright -20
+
+KPX colon space -30
+
+KPX comma space -40
+KPX comma quoteright -80
+KPX comma quotedblright -80
+
+KPX d quoteright -12
+KPX d quotedblright -12
+
+KPX e x -10
+KPX e w -10
+KPX e quoteright -30
+KPX e quotedblright -30
+
+KPX f quoteright 110
+KPX f quotedblright 110
+KPX f period -20
+KPX f parenright 100
+KPX f comma -20
+KPX f bracketright 90
+KPX f braceright 90
+
+KPX g y 30
+KPX g p 12
+KPX g f 42
+
+KPX h quoteright -80
+KPX h quotedblright -80
+
+KPX j quoteright -20
+KPX j quotedblright -20
+KPX j period -35
+KPX j comma -20
+
+KPX k quoteright -30
+KPX k quotedblright -50
+
+KPX m quoteright -80
+KPX m quotedblright -80
+
+KPX n quoteright -80
+KPX n quotedblright -80
+
+KPX o z -10
+KPX o y -20
+KPX o x -20
+KPX o w -30
+KPX o v -35
+KPX o quoteright -60
+KPX o quotedblright -50
+KPX o period -30
+KPX o comma -20
+
+KPX p z -10
+KPX p w -15
+KPX p quoteright -50
+KPX p quotedblright -70
+KPX p period -30
+KPX p comma -20
+
+KPX parenleft Y 75
+KPX parenleft W 75
+KPX parenleft V 75
+KPX parenleft T 64
+KPX parenleft J 80
+
+KPX period space -40
+KPX period quoteright -80
+KPX period quotedblright -80
+
+KPX q quoteright -20
+KPX q quotedblright -30
+KPX q period -20
+KPX q comma -10
+
+KPX quotedblleft z -30
+KPX quotedblleft x -40
+KPX quotedblleft w -12
+KPX quotedblleft v -12
+KPX quotedblleft u -12
+KPX quotedblleft t -12
+KPX quotedblleft s -30
+KPX quotedblleft r -12
+KPX quotedblleft q -40
+KPX quotedblleft p -12
+KPX quotedblleft o -30
+KPX quotedblleft n -12
+KPX quotedblleft m -12
+KPX quotedblleft l 10
+KPX quotedblleft k 10
+KPX quotedblleft h 10
+KPX quotedblleft g -30
+KPX quotedblleft e -40
+KPX quotedblleft d -40
+KPX quotedblleft c -40
+KPX quotedblleft b 24
+KPX quotedblleft a -60
+KPX quotedblleft Y 12
+KPX quotedblleft X 28
+KPX quotedblleft W 28
+KPX quotedblleft V 28
+KPX quotedblleft T 36
+KPX quotedblleft A -90
+
+KPX quotedblright space -40
+KPX quotedblright period -100
+KPX quotedblright comma -100
+
+KPX quoteleft z -30
+KPX quoteleft y -10
+KPX quoteleft x -40
+KPX quoteleft w -12
+KPX quoteleft v -12
+KPX quoteleft u -12
+KPX quoteleft t -12
+KPX quoteleft s -30
+KPX quoteleft r -12
+KPX quoteleft quoteleft -18
+KPX quoteleft q -30
+KPX quoteleft p -12
+KPX quoteleft o -30
+KPX quoteleft n -12
+KPX quoteleft m -12
+KPX quoteleft l 10
+KPX quoteleft k 10
+KPX quoteleft h 10
+KPX quoteleft g -30
+KPX quoteleft e -30
+KPX quoteleft d -30
+KPX quoteleft c -30
+KPX quoteleft b 24
+KPX quoteleft a -45
+KPX quoteleft Y 12
+KPX quoteleft X 28
+KPX quoteleft W 28
+KPX quoteleft V 28
+KPX quoteleft T 36
+KPX quoteleft A -90
+
+KPX quoteright v -35
+KPX quoteright t -35
+KPX quoteright space -40
+KPX quoteright s -55
+KPX quoteright r -25
+KPX quoteright quoteright -18
+KPX quoteright period -100
+KPX quoteright m -25
+KPX quoteright l -12
+KPX quoteright d -70
+KPX quoteright comma -100
+
+KPX r y 18
+KPX r w 6
+KPX r v 6
+KPX r t 8
+KPX r quotedblright -15
+KPX r q -24
+KPX r period -120
+KPX r o -6
+KPX r l -20
+KPX r k -20
+KPX r hyphen -30
+KPX r h -20
+KPX r f 8
+KPX r emdash -20
+KPX r e -26
+KPX r d -26
+KPX r comma -110
+KPX r c -12
+KPX r a -20
+
+KPX s quoteright -40
+KPX s quotedblright -45
+
+KPX semicolon space -30
+
+KPX space quotesinglbase -30
+KPX space quoteleft -40
+KPX space quotedblleft -40
+KPX space quotedblbase -30
+KPX space Y -70
+KPX space W -70
+KPX space V -70
+
+KPX t quoteright 10
+KPX t quotedblright -10
+
+KPX u quoteright -55
+KPX u quotedblright -50
+
+KPX v quoteright -20
+KPX v quotedblright -30
+KPX v q -6
+KPX v period -70
+KPX v o -6
+KPX v e -6
+KPX v d -6
+KPX v comma -70
+KPX v c -6
+KPX v a -6
+
+KPX w quoteright -20
+KPX w quotedblright -30
+KPX w period -62
+KPX w comma -62
+
+KPX x y 12
+KPX x w -6
+KPX x quoteright -40
+KPX x quotedblright -50
+KPX x q -6
+KPX x o -6
+KPX x e -6
+KPX x d -6
+KPX x c -6
+
+KPX y quoteright -10
+KPX y quotedblright -20
+KPX y period -70
+KPX y emdash 40
+KPX y comma -60
+
+KPX z quoteright -40
+KPX z quotedblright -50
+KPX z o -6
+KPX z e -6
+KPX z d -6
+KPX z c -6
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/putri8a.pfb b/Master/tlpkg/tlgs/lib/fonts/putri8a.pfb
new file mode 100644
index 00000000000..5e969b17852
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/putri8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/readme.charter b/Master/tlpkg/tlgs/lib/fonts/readme.charter
new file mode 100644
index 00000000000..789bb43e809
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/readme.charter
@@ -0,0 +1,19 @@
+This is a copy of the Charter Type-1 fonts which Bitstream contributed
+to the X consortium, renamed for use with TeX.
+
+ (c) Copyright 1989-1992, Bitstream Inc., Cambridge, MA.
+
+ You are hereby granted permission under all Bitstream propriety rights
+ to use, copy, modify, sublicense, sell, and redistribute the 4
+ Bitstream Charter (r) Type 1 outline fonts for any purpose and without
+ restriction; provided, that this notice is left intact on all copies
+ of such fonts and that Bitstream's trademark is acknowledged as shown
+ below on all unmodified copies of the 4 Charter Type 1 fonts.
+
+ BITSTREAM CHARTER is a registered trademark of Bitstream Inc.
+
+TeX metrics, virtual fonts and LaTeX font definition files can be found
+in the archive CTAN:fonts/metrics/freenfss.zip.
+
+-- finis
+
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagd8a.afm b/Master/tlpkg/tlgs/lib/fonts/uagd8a.afm
new file mode 100644
index 00000000000..392b98ec68b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagd8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWGothicL-Demi
+FullName URW Gothic L Demi
+FamilyName URW Gothic L
+Weight Demi
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -93
+UnderlineThickness 90
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -121 -251 1248 1000
+CapHeight 739
+XHeight 554
+Descender -185
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 280 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 280 ; N exclam ; B 72 0 205 739 ;
+C 34 ; WX 360 ; N quotedbl ; B 74 513 283 739 ;
+C 35 ; WX 560 ; N numbersign ; B 34 0 526 739 ;
+C 36 ; WX 560 ; N dollar ; B 59 -86 494 856 ;
+C 37 ; WX 860 ; N percent ; B 21 -13 835 752 ;
+C 38 ; WX 680 ; N ampersand ; B 35 -13 664 752 ;
+C 39 ; WX 280 ; N quoteright ; B 72 466 205 739 ;
+C 40 ; WX 380 ; N parenleft ; B 74 -137 349 739 ;
+C 41 ; WX 380 ; N parenright ; B 37 -137 312 739 ;
+C 42 ; WX 440 ; N asterisk ; B 70 441 371 739 ;
+C 43 ; WX 600 ; N plus ; B 51 117 555 625 ;
+C 44 ; WX 280 ; N comma ; B 72 -140 205 128 ;
+C 45 ; WX 420 ; N hyphen ; B 74 229 351 347 ;
+C 46 ; WX 280 ; N period ; B 72 0 205 128 ;
+C 47 ; WX 460 ; N slash ; B 26 -128 443 739 ;
+C 48 ; WX 560 ; N zero ; B 30 -13 525 752 ;
+C 49 ; WX 560 ; N one ; B 153 0 379 739 ;
+C 50 ; WX 560 ; N two ; B 34 0 520 752 ;
+C 51 ; WX 560 ; N three ; B 15 -13 518 752 ;
+C 52 ; WX 560 ; N four ; B 0 0 530 739 ;
+C 53 ; WX 560 ; N five ; B 12 -13 520 739 ;
+C 54 ; WX 560 ; N six ; B 21 -13 533 739 ;
+C 55 ; WX 560 ; N seven ; B 65 0 500 739 ;
+C 56 ; WX 560 ; N eight ; B 31 -13 523 752 ;
+C 57 ; WX 560 ; N nine ; B 22 0 532 752 ;
+C 58 ; WX 280 ; N colon ; B 72 0 205 502 ;
+C 59 ; WX 280 ; N semicolon ; B 72 -140 205 502 ;
+C 60 ; WX 600 ; N less ; B 49 33 558 582 ;
+C 61 ; WX 600 ; N equal ; B 51 210 555 523 ;
+C 62 ; WX 600 ; N greater ; B 48 33 557 582 ;
+C 63 ; WX 560 ; N question ; B 32 0 485 752 ;
+C 64 ; WX 740 ; N at ; B 3 -13 745 766 ;
+C 65 ; WX 740 ; N A ; B 7 0 733 739 ;
+C 66 ; WX 580 ; N B ; B 68 0 548 739 ;
+C 67 ; WX 780 ; N C ; B 30 -13 760 752 ;
+C 68 ; WX 700 ; N D ; B 68 0 660 739 ;
+C 69 ; WX 520 ; N E ; B 68 0 465 739 ;
+C 70 ; WX 480 ; N F ; B 68 0 444 739 ;
+C 71 ; WX 840 ; N G ; B 30 -13 818 752 ;
+C 72 ; WX 680 ; N H ; B 68 0 606 739 ;
+C 73 ; WX 280 ; N I ; B 68 0 205 739 ;
+C 74 ; WX 480 ; N J ; B 9 -13 414 739 ;
+C 75 ; WX 620 ; N K ; B 68 0 599 739 ;
+C 76 ; WX 440 ; N L ; B 68 0 431 739 ;
+C 77 ; WX 900 ; N M ; B 68 0 840 739 ;
+C 78 ; WX 740 ; N N ; B 68 0 667 739 ;
+C 79 ; WX 840 ; N O ; B 30 -13 800 752 ;
+C 80 ; WX 560 ; N P ; B 68 0 540 739 ;
+C 81 ; WX 840 ; N Q ; B 30 -15 828 752 ;
+C 82 ; WX 580 ; N R ; B 68 0 568 739 ;
+C 83 ; WX 520 ; N S ; B 14 -13 493 752 ;
+C 84 ; WX 420 ; N T ; B 7 0 418 739 ;
+C 85 ; WX 640 ; N U ; B 68 -13 567 739 ;
+C 86 ; WX 700 ; N V ; B 8 0 694 739 ;
+C 87 ; WX 900 ; N W ; B 7 0 898 739 ;
+C 88 ; WX 680 ; N X ; B 5 0 676 739 ;
+C 89 ; WX 620 ; N Y ; B 3 0 626 739 ;
+C 90 ; WX 500 ; N Z ; B 18 0 480 739 ;
+C 91 ; WX 320 ; N bracketleft ; B 74 -137 292 739 ;
+C 92 ; WX 640 ; N backslash ; B 84 0 503 739 ;
+C 93 ; WX 320 ; N bracketright ; B 37 -137 255 739 ;
+C 94 ; WX 600 ; N asciicircum ; B 63 313 543 739 ;
+C 95 ; WX 500 ; N underscore ; B 0 -138 500 -48 ;
+C 96 ; WX 280 ; N quoteleft ; B 72 466 205 739 ;
+C 97 ; WX 660 ; N a ; B 30 -13 615 567 ;
+C 98 ; WX 660 ; N b ; B 54 -13 638 739 ;
+C 99 ; WX 640 ; N c ; B 30 -13 601 567 ;
+C 100 ; WX 660 ; N d ; B 30 -13 613 739 ;
+C 101 ; WX 640 ; N e ; B 30 -13 608 567 ;
+C 102 ; WX 280 ; N f ; B 10 0 274 739 ;
+C 103 ; WX 660 ; N g ; B 30 -221 611 567 ;
+C 104 ; WX 600 ; N h ; B 54 0 545 739 ;
+C 105 ; WX 240 ; N i ; B 54 0 187 739 ;
+C 106 ; WX 260 ; N j ; B 17 -185 205 739 ;
+C 107 ; WX 580 ; N k ; B 54 0 555 739 ;
+C 108 ; WX 240 ; N l ; B 54 0 187 739 ;
+C 109 ; WX 940 ; N m ; B 54 0 885 567 ;
+C 110 ; WX 600 ; N n ; B 54 0 546 567 ;
+C 111 ; WX 640 ; N o ; B 30 -13 619 567 ;
+C 112 ; WX 660 ; N p ; B 54 -185 634 567 ;
+C 113 ; WX 660 ; N q ; B 30 -185 611 567 ;
+C 114 ; WX 320 ; N r ; B 54 0 306 567 ;
+C 115 ; WX 440 ; N s ; B 19 -13 420 567 ;
+C 116 ; WX 300 ; N t ; B 9 0 287 739 ;
+C 117 ; WX 600 ; N u ; B 54 -13 547 554 ;
+C 118 ; WX 560 ; N v ; B 1 0 553 554 ;
+C 119 ; WX 800 ; N w ; B 10 0 785 554 ;
+C 120 ; WX 560 ; N x ; B 1 0 553 554 ;
+C 121 ; WX 580 ; N y ; B 6 -185 568 554 ;
+C 122 ; WX 460 ; N z ; B 20 0 442 554 ;
+C 123 ; WX 340 ; N braceleft ; B 37 -129 302 740 ;
+C 124 ; WX 600 ; N bar ; B 243 0 362 739 ;
+C 125 ; WX 340 ; N braceright ; B 38 -129 303 740 ;
+C 126 ; WX 600 ; N asciitilde ; B 51 214 555 421 ;
+C 161 ; WX 280 ; N exclamdown ; B 72 -185 205 554 ;
+C 162 ; WX 560 ; N cent ; B 39 39 511 715 ;
+C 163 ; WX 560 ; N sterling ; B 0 0 563 752 ;
+C 164 ; WX 160 ; N fraction ; B -121 0 280 739 ;
+C 165 ; WX 560 ; N yen ; B -35 0 589 739 ;
+C 166 ; WX 560 ; N florin ; B -17 -149 494 823 ;
+C 167 ; WX 560 ; N section ; B 40 -157 529 752 ;
+C 168 ; WX 560 ; N currency ; B 27 148 534 654 ;
+C 169 ; WX 220 ; N quotesingle ; B 74 513 150 739 ;
+C 170 ; WX 480 ; N quotedblleft ; B 70 466 410 739 ;
+C 171 ; WX 460 ; N guillemotleft ; B 36 108 388 469 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 36 108 175 469 ;
+C 173 ; WX 240 ; N guilsinglright ; B 73 108 212 469 ;
+C 174 ; WX 520 ; N fi ; B 8 0 461 739 ;
+C 175 ; WX 520 ; N fl ; B 8 0 461 739 ;
+C 177 ; WX 500 ; N endash ; B 0 229 500 347 ;
+C 178 ; WX 560 ; N dagger ; B 48 -128 505 739 ;
+C 179 ; WX 560 ; N daggerdbl ; B 48 -128 505 739 ;
+C 180 ; WX 280 ; N periodcentered ; B 72 300 205 433 ;
+C 182 ; WX 600 ; N paragraph ; B 37 -128 527 739 ;
+C 183 ; WX 600 ; N bullet ; B 134 147 471 484 ;
+C 184 ; WX 280 ; N quotesinglbase ; B 70 -140 203 128 ;
+C 185 ; WX 480 ; N quotedblbase ; B 70 -140 410 128 ;
+C 186 ; WX 480 ; N quotedblright ; B 70 466 410 739 ;
+C 187 ; WX 460 ; N guillemotright ; B 73 108 425 469 ;
+C 188 ; WX 1000 ; N ellipsis ; B 100 0 899 128 ;
+C 189 ; WX 1280 ; N perthousand ; B 21 -13 1248 752 ;
+C 191 ; WX 560 ; N questiondown ; B 69 -198 522 554 ;
+C 193 ; WX 420 ; N grave ; B 74 613 353 825 ;
+C 194 ; WX 420 ; N acute ; B 74 613 352 825 ;
+C 195 ; WX 540 ; N circumflex ; B 74 630 473 768 ;
+C 196 ; WX 480 ; N tilde ; B 74 636 405 772 ;
+C 197 ; WX 420 ; N macron ; B 74 648 351 748 ;
+C 198 ; WX 480 ; N breve ; B 74 630 404 769 ;
+C 199 ; WX 280 ; N dotaccent ; B 74 630 207 763 ;
+C 200 ; WX 500 ; N dieresis ; B 74 630 417 763 ;
+C 202 ; WX 360 ; N ring ; B 74 610 280 816 ;
+C 203 ; WX 340 ; N cedilla ; B 74 -251 270 0 ;
+C 205 ; WX 700 ; N hungarumlaut ; B 74 613 629 825 ;
+C 206 ; WX 340 ; N ogonek ; B 74 -204 256 0 ;
+C 207 ; WX 540 ; N caron ; B 74 630 473 768 ;
+C 208 ; WX 1000 ; N emdash ; B 0 229 1000 347 ;
+C 225 ; WX 900 ; N AE ; B 17 0 843 739 ;
+C 227 ; WX 360 ; N ordfeminine ; B 28 310 342 750 ;
+C 232 ; WX 480 ; N Lslash ; B 14 0 473 739 ;
+C 233 ; WX 840 ; N Oslash ; B 30 -65 803 809 ;
+C 234 ; WX 1060 ; N OE ; B 38 -13 1004 752 ;
+C 235 ; WX 360 ; N ordmasculine ; B 31 311 338 750 ;
+C 241 ; WX 1080 ; N ae ; B 30 -13 1051 567 ;
+C 245 ; WX 240 ; N dotlessi ; B 54 0 187 554 ;
+C 248 ; WX 320 ; N lslash ; B 17 0 312 739 ;
+C 249 ; WX 660 ; N oslash ; B 30 -67 620 623 ;
+C 250 ; WX 1080 ; N oe ; B 30 -13 1048 567 ;
+C 251 ; WX 600 ; N germandbls ; B 51 -13 584 752 ;
+C -1 ; WX 640 ; N Udieresis ; B 68 -13 567 938 ;
+C -1 ; WX 640 ; N Uacute ; B 68 -13 567 1000 ;
+C -1 ; WX 520 ; N Scedilla ; B 14 -251 493 752 ;
+C -1 ; WX 420 ; N Tcaron ; B 7 0 418 943 ;
+C -1 ; WX 520 ; N Scaron ; B 14 -13 493 943 ;
+C -1 ; WX 580 ; N Rcaron ; B 68 0 568 943 ;
+C -1 ; WX 580 ; N Racute ; B 68 0 568 1000 ;
+C -1 ; WX 520 ; N Sacute ; B 14 -13 493 1000 ;
+C -1 ; WX 840 ; N Otilde ; B 30 -13 800 947 ;
+C -1 ; WX 600 ; N ucircumflex ; B 54 -13 547 768 ;
+C -1 ; WX 840 ; N Ohungarumlaut ; B 30 -13 800 1000 ;
+C -1 ; WX 640 ; N Uhungarumlaut ; B 44 -13 599 1000 ;
+C -1 ; WX 620 ; N Yacute ; B 3 0 626 1000 ;
+C -1 ; WX 742 ; N Eth ; B 14 0 702 739 ;
+C -1 ; WX 742 ; N Dcroat ; B 14 0 702 739 ;
+C -1 ; WX 500 ; N Zacute ; B 18 0 480 1000 ;
+C -1 ; WX 640 ; N Uring ; B 68 -13 567 991 ;
+C -1 ; WX 660 ; N gbreve ; B 30 -221 611 769 ;
+C -1 ; WX 640 ; N eogonek ; B 30 -204 608 567 ;
+C -1 ; WX 640 ; N edotaccent ; B 30 -13 608 763 ;
+C -1 ; WX 640 ; N ecaron ; B 30 -13 608 768 ;
+C -1 ; WX 640 ; N Ugrave ; B 68 -13 567 1000 ;
+C -1 ; WX 560 ; N Thorn ; B 68 0 540 739 ;
+C -1 ; WX 640 ; N eacute ; B 30 -13 608 825 ;
+C -1 ; WX 640 ; N edieresis ; B 30 -13 608 763 ;
+C -1 ; WX 754 ; N dcaron ; B 30 -13 794 739 ;
+C -1 ; WX 640 ; N ccedilla ; B 30 -251 601 567 ;
+C -1 ; WX 640 ; N ccaron ; B 30 -13 601 768 ;
+C -1 ; WX 640 ; N cacute ; B 30 -13 601 825 ;
+C -1 ; WX 660 ; N aogonek ; B 30 -204 641 567 ;
+C -1 ; WX 660 ; N aring ; B 30 -13 615 816 ;
+C -1 ; WX 660 ; N atilde ; B 30 -13 615 772 ;
+C -1 ; WX 660 ; N abreve ; B 30 -13 615 769 ;
+C -1 ; WX 640 ; N egrave ; B 30 -13 608 825 ;
+C -1 ; WX 660 ; N agrave ; B 30 -13 615 825 ;
+C -1 ; WX 660 ; N aacute ; B 30 -13 615 825 ;
+C -1 ; WX 660 ; N adieresis ; B 30 -13 615 763 ;
+C -1 ; WX 640 ; N Uogonek ; B 68 -204 567 739 ;
+C -1 ; WX 600 ; N ugrave ; B 54 -13 547 825 ;
+C -1 ; WX 600 ; N uacute ; B 54 -13 547 825 ;
+C -1 ; WX 600 ; N udieresis ; B 54 -13 547 763 ;
+C -1 ; WX 369 ; N tcaron ; B 9 0 409 739 ;
+C -1 ; WX 440 ; N scommaaccent ; B 19 -245 420 567 ;
+C -1 ; WX 500 ; N Zcaron ; B 18 0 480 943 ;
+C -1 ; WX 640 ; N ecircumflex ; B 30 -13 608 768 ;
+C -1 ; WX 640 ; N Ucircumflex ; B 68 -13 567 943 ;
+C -1 ; WX 660 ; N acircumflex ; B 30 -13 615 768 ;
+C -1 ; WX 500 ; N Zdotaccent ; B 18 0 480 938 ;
+C -1 ; WX 440 ; N scaron ; B 19 -13 423 768 ;
+C -1 ; WX 740 ; N Amacron ; B 7 0 733 923 ;
+C -1 ; WX 440 ; N sacute ; B 19 -13 420 825 ;
+C -1 ; WX 420 ; N Tcommaaccent ; B 7 -245 418 739 ;
+C -1 ; WX 620 ; N Ydieresis ; B 3 0 626 938 ;
+C -1 ; WX 660 ; N thorn ; B 54 -185 634 739 ;
+C -1 ; WX 520 ; N Emacron ; B 68 0 465 923 ;
+C -1 ; WX 840 ; N Ograve ; B 30 -13 800 1000 ;
+C -1 ; WX 840 ; N Oacute ; B 30 -13 800 1000 ;
+C -1 ; WX 840 ; N Odieresis ; B 30 -13 800 938 ;
+C -1 ; WX 740 ; N Ntilde ; B 68 0 667 947 ;
+C -1 ; WX 740 ; N Ncaron ; B 68 0 667 943 ;
+C -1 ; WX 740 ; N Nacute ; B 68 0 667 1000 ;
+C -1 ; WX 440 ; N Lcaron ; B 68 0 440 739 ;
+C -1 ; WX 440 ; N Lacute ; B 68 0 431 1000 ;
+C -1 ; WX 280 ; N Idotaccent ; B 68 0 207 938 ;
+C -1 ; WX 320 ; N racute ; B 24 0 306 825 ;
+C -1 ; WX 280 ; N Icircumflex ; B -56 0 343 943 ;
+C -1 ; WX 640 ; N ohungarumlaut ; B 30 -13 619 825 ;
+C -1 ; WX 640 ; N otilde ; B 30 -13 619 772 ;
+C -1 ; WX 560 ; N Euro ; B -33 -11 595 750 ;
+C -1 ; WX 640 ; N ocircumflex ; B 30 -13 619 768 ;
+C -1 ; WX 336 ; N onesuperior ; B 94 296 241 739 ;
+C -1 ; WX 336 ; N twosuperior ; B 10 296 326 747 ;
+C -1 ; WX 336 ; N threesuperior ; B 4 288 331 746 ;
+C -1 ; WX 280 ; N Igrave ; B 4 0 283 1000 ;
+C -1 ; WX 280 ; N Iacute ; B 4 0 282 1000 ;
+C -1 ; WX 280 ; N Imacron ; B 4 0 281 923 ;
+C -1 ; WX 280 ; N Iogonek ; B 49 -204 231 739 ;
+C -1 ; WX 280 ; N Idieresis ; B -36 0 307 938 ;
+C -1 ; WX 840 ; N Gbreve ; B 30 -13 818 944 ;
+C -1 ; WX 640 ; N Umacron ; B 68 -13 567 923 ;
+C -1 ; WX 620 ; N Kcommaaccent ; B 68 -245 599 739 ;
+C -1 ; WX 640 ; N ograve ; B 30 -13 619 825 ;
+C -1 ; WX 520 ; N Scommaaccent ; B 14 -245 493 752 ;
+C -1 ; WX 520 ; N Eogonek ; B 68 -204 491 739 ;
+C -1 ; WX 640 ; N oacute ; B 30 -13 619 825 ;
+C -1 ; WX 520 ; N Edotaccent ; B 68 0 465 938 ;
+C -1 ; WX 240 ; N iogonek ; B 31 -204 213 739 ;
+C -1 ; WX 660 ; N gcommaaccent ; B 30 -221 611 799 ;
+C -1 ; WX 640 ; N odieresis ; B 30 -13 619 763 ;
+C -1 ; WX 600 ; N ntilde ; B 54 0 546 772 ;
+C -1 ; WX 600 ; N ncaron ; B 54 0 546 768 ;
+C -1 ; WX 520 ; N Ecaron ; B 64 0 465 943 ;
+C -1 ; WX 520 ; N Ecircumflex ; B 64 0 465 943 ;
+C -1 ; WX 440 ; N scedilla ; B 19 -251 420 567 ;
+C -1 ; WX 320 ; N rcaron ; B -36 0 363 768 ;
+C -1 ; WX 520 ; N Egrave ; B 68 0 465 1000 ;
+C -1 ; WX 520 ; N Eacute ; B 68 0 465 1000 ;
+C -1 ; WX 840 ; N Gcommaaccent ; B 30 -245 818 752 ;
+C -1 ; WX 580 ; N Rcommaaccent ; B 68 -245 568 739 ;
+C -1 ; WX 520 ; N Edieresis ; B 68 0 465 938 ;
+C -1 ; WX 600 ; N nacute ; B 54 0 546 825 ;
+C -1 ; WX 600 ; N uogonek ; B 54 -204 573 554 ;
+C -1 ; WX 600 ; N umacron ; B 54 -13 547 748 ;
+C -1 ; WX 700 ; N Dcaron ; B 68 0 660 943 ;
+C -1 ; WX 330 ; N lcaron ; B 54 0 370 739 ;
+C -1 ; WX 780 ; N Ccaron ; B 30 -13 760 943 ;
+C -1 ; WX 780 ; N Cacute ; B 30 -13 760 1000 ;
+C -1 ; WX 780 ; N Ccedilla ; B 30 -251 760 752 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 740 ; N Aogonek ; B 7 -204 759 739 ;
+C -1 ; WX 600 ; N minus ; B 51 312 555 430 ;
+C -1 ; WX 600 ; N multiply ; B 51 114 555 618 ;
+C -1 ; WX 600 ; N divide ; B 51 73 555 669 ;
+C -1 ; WX 740 ; N Aring ; B 7 0 733 991 ;
+C -1 ; WX 1000 ; N trademark ; B 71 345 929 739 ;
+C -1 ; WX 320 ; N rcommaaccent ; B 54 -245 306 567 ;
+C -1 ; WX 240 ; N lacute ; B -16 0 262 1000 ;
+C -1 ; WX 640 ; N omacron ; B 30 -13 619 748 ;
+C -1 ; WX 740 ; N Atilde ; B 7 0 733 947 ;
+C -1 ; WX 240 ; N icircumflex ; B -76 0 323 768 ;
+C -1 ; WX 240 ; N igrave ; B -16 0 263 825 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 54 -245 546 567 ;
+C -1 ; WX 240 ; N lcommaaccent ; B 16 -245 187 739 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 555 653 ;
+C -1 ; WX 840 ; N onehalf ; B 94 0 830 739 ;
+C -1 ; WX 840 ; N onequarter ; B 94 0 836 739 ;
+C -1 ; WX 840 ; N threequarters ; B 4 0 836 746 ;
+C -1 ; WX 240 ; N iacute ; B -16 0 262 825 ;
+C -1 ; WX 740 ; N Abreve ; B 7 0 733 944 ;
+C -1 ; WX 580 ; N kcommaaccent ; B 54 -245 555 739 ;
+C -1 ; WX 840 ; N Omacron ; B 30 -13 800 923 ;
+C -1 ; WX 240 ; N imacron ; B -16 0 261 748 ;
+C -1 ; WX 640 ; N emacron ; B 30 -13 608 748 ;
+C -1 ; WX 660 ; N amacron ; B 30 -13 615 748 ;
+C -1 ; WX 300 ; N tcommaaccent ; B 9 -245 287 739 ;
+C -1 ; WX 580 ; N ydieresis ; B 6 -185 568 763 ;
+C -1 ; WX 460 ; N zdotaccent ; B 20 0 442 763 ;
+C -1 ; WX 460 ; N zcaron ; B 20 0 442 768 ;
+C -1 ; WX 460 ; N zacute ; B 20 0 442 825 ;
+C -1 ; WX 580 ; N yacute ; B 6 -185 568 825 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 24 -13 579 825 ;
+C -1 ; WX 640 ; N eth ; B 30 -13 619 756 ;
+C -1 ; WX 600 ; N uring ; B 54 -13 547 816 ;
+C -1 ; WX 840 ; N Ocircumflex ; B 30 -13 800 943 ;
+C -1 ; WX 351 ; N commaaccent ; B 71 -245 233 -53 ;
+C -1 ; WX 740 ; N copyright ; B -12 -13 759 752 ;
+C -1 ; WX 740 ; N registered ; B -12 -13 759 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 7 0 733 943 ;
+C -1 ; WX 240 ; N idieresis ; B -56 0 287 763 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 51 101 555 632 ;
+C -1 ; WX 549 ; N radical ; B -25 -35 542 917 ;
+C -1 ; WX 740 ; N Agrave ; B 7 0 733 1000 ;
+C -1 ; WX 740 ; N Aacute ; B 7 0 733 1000 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 549 711 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 555 711 ;
+C -1 ; WX 600 ; N logicalnot ; B 51 182 555 473 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 68 -245 667 739 ;
+C -1 ; WX 660 ; N dcroat ; B 30 -13 660 739 ;
+C -1 ; WX 600 ; N brokenbar ; B 243 0 362 739 ;
+C -1 ; WX 440 ; N Lcommaaccent ; B 68 -245 431 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 7 0 733 938 ;
+C -1 ; WX 576 ; N mu ; B 54 -185 547 554 ;
+C -1 ; WX 280 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -37
+KPX A G -36
+KPX A O -36
+KPX A Odieresis -36
+KPX A Q -37
+KPX A T -41
+KPX A U -31
+KPX A Uacute -31
+KPX A Ucircumflex -31
+KPX A Udieresis -31
+KPX A Ugrave -31
+KPX A V -74
+KPX A W -55
+KPX A Y -83
+KPX A a -20
+KPX A b 0
+KPX A c -23
+KPX A ccedilla -23
+KPX A comma 20
+KPX A d -20
+KPX A e -23
+KPX A g -20
+KPX A guillemotleft -16
+KPX A guilsinglleft -16
+KPX A hyphen -17
+KPX A o -23
+KPX A period 20
+KPX A q -22
+KPX A quotedblright -73
+KPX A quoteright -74
+KPX A t -10
+KPX A u -14
+KPX A v -42
+KPX A w -40
+KPX A y -43
+KPX Aacute C -36
+KPX Aacute G -36
+KPX Aacute O -36
+KPX Aacute Q -37
+KPX Aacute T -41
+KPX Aacute U -31
+KPX Aacute V -74
+KPX Aacute W -55
+KPX Aacute Y -83
+KPX Aacute a -20
+KPX Aacute b 0
+KPX Aacute c -23
+KPX Aacute comma 20
+KPX Aacute d -20
+KPX Aacute e -23
+KPX Aacute g -20
+KPX Aacute guillemotleft -16
+KPX Aacute guilsinglleft -16
+KPX Aacute hyphen -17
+KPX Aacute o -23
+KPX Aacute period 20
+KPX Aacute q -22
+KPX Aacute quoteright -74
+KPX Aacute t -10
+KPX Aacute u -14
+KPX Aacute v -42
+KPX Aacute w -40
+KPX Aacute y -43
+KPX Acircumflex C -36
+KPX Acircumflex G -36
+KPX Acircumflex O -36
+KPX Acircumflex Q -37
+KPX Acircumflex T -41
+KPX Acircumflex U -31
+KPX Acircumflex V -74
+KPX Acircumflex W -55
+KPX Acircumflex Y -83
+KPX Acircumflex comma 20
+KPX Acircumflex period 20
+KPX Adieresis C -36
+KPX Adieresis G -36
+KPX Adieresis O -36
+KPX Adieresis Q -37
+KPX Adieresis T -41
+KPX Adieresis U -31
+KPX Adieresis V -74
+KPX Adieresis W -55
+KPX Adieresis Y -83
+KPX Adieresis a -20
+KPX Adieresis b 0
+KPX Adieresis c -23
+KPX Adieresis comma 20
+KPX Adieresis d -20
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -16
+KPX Adieresis guilsinglleft -16
+KPX Adieresis hyphen -17
+KPX Adieresis o -23
+KPX Adieresis period 20
+KPX Adieresis q -22
+KPX Adieresis quotedblright -73
+KPX Adieresis quoteright -74
+KPX Adieresis t -10
+KPX Adieresis u -14
+KPX Adieresis v -42
+KPX Adieresis w -40
+KPX Adieresis y -43
+KPX Agrave C -36
+KPX Agrave G -36
+KPX Agrave O -36
+KPX Agrave Q -37
+KPX Agrave T -41
+KPX Agrave U -31
+KPX Agrave V -74
+KPX Agrave W -55
+KPX Agrave Y -83
+KPX Agrave comma 20
+KPX Agrave period 20
+KPX Aring C -36
+KPX Aring G -36
+KPX Aring O -36
+KPX Aring Q -37
+KPX Aring T -41
+KPX Aring U -31
+KPX Aring V -74
+KPX Aring W -55
+KPX Aring Y -83
+KPX Aring a -20
+KPX Aring b 0
+KPX Aring c -23
+KPX Aring comma 20
+KPX Aring d -20
+KPX Aring e -23
+KPX Aring g -20
+KPX Aring guillemotleft -16
+KPX Aring guilsinglleft -16
+KPX Aring hyphen -17
+KPX Aring o -23
+KPX Aring period 20
+KPX Aring q -22
+KPX Aring quotedblright -73
+KPX Aring quoteright -74
+KPX Aring t -10
+KPX Aring u -14
+KPX Aring v -42
+KPX Aring w -40
+KPX Aring y -43
+KPX Atilde C -36
+KPX Atilde G -36
+KPX Atilde O -36
+KPX Atilde Q -37
+KPX Atilde T -41
+KPX Atilde U -31
+KPX Atilde V -74
+KPX Atilde W -55
+KPX Atilde Y -83
+KPX Atilde comma 20
+KPX Atilde period 20
+KPX B A -18
+KPX B AE -36
+KPX B Aacute -18
+KPX B Acircumflex -18
+KPX B Adieresis -18
+KPX B Aring -18
+KPX B Atilde -18
+KPX B O 2
+KPX B OE 0
+KPX B Oacute 2
+KPX B Ocircumflex 2
+KPX B Odieresis 2
+KPX B Ograve 2
+KPX B Oslash 4
+KPX B V -33
+KPX B W -16
+KPX B Y -39
+KPX C A -17
+KPX C AE -41
+KPX C Aacute -17
+KPX C Adieresis -17
+KPX C Aring -17
+KPX C H 6
+KPX C K 6
+KPX C O -6
+KPX C Oacute -6
+KPX C Odieresis -6
+KPX Ccedilla A -17
+KPX D A -38
+KPX D Aacute -38
+KPX D Acircumflex -38
+KPX D Adieresis -38
+KPX D Agrave -38
+KPX D Aring -38
+KPX D Atilde -38
+KPX D J -14
+KPX D T -24
+KPX D V -39
+KPX D W -21
+KPX D X -33
+KPX D Y -50
+KPX F A -53
+KPX F Aacute -53
+KPX F Acircumflex -53
+KPX F Adieresis -53
+KPX F Agrave -53
+KPX F Aring -53
+KPX F Atilde -53
+KPX F J -55
+KPX F O -3
+KPX F Odieresis -3
+KPX F a -9
+KPX F aacute -9
+KPX F adieresis -9
+KPX F ae -8
+KPX F aring -9
+KPX F comma -60
+KPX F e -9
+KPX F eacute -9
+KPX F hyphen 5
+KPX F i -9
+KPX F j -22
+KPX F o -9
+KPX F oacute -9
+KPX F odieresis -9
+KPX F oe -9
+KPX F oslash -9
+KPX F period -60
+KPX F r -9
+KPX F u -12
+KPX G A -35
+KPX G AE -60
+KPX G Aacute -35
+KPX G Acircumflex -35
+KPX G Adieresis -35
+KPX G Agrave -35
+KPX G Aring -35
+KPX G Atilde -35
+KPX G T -24
+KPX G V -38
+KPX G W -20
+KPX G Y -49
+KPX J A -27
+KPX J AE -41
+KPX J Adieresis -27
+KPX J Aring -27
+KPX K C -46
+KPX K G -46
+KPX K O -46
+KPX K OE -48
+KPX K Oacute -46
+KPX K Odieresis -46
+KPX K S -27
+KPX K T 21
+KPX K a -51
+KPX K adieresis -51
+KPX K ae -52
+KPX K aring -51
+KPX K e -54
+KPX K hyphen -68
+KPX K o -55
+KPX K oacute -55
+KPX K odieresis -55
+KPX K u -46
+KPX K udieresis -44
+KPX K y -59
+KPX L A 26
+KPX L AE 20
+KPX L Aacute 26
+KPX L Adieresis 26
+KPX L Aring 26
+KPX L C -22
+KPX L Ccedilla -25
+KPX L G -22
+KPX L O -21
+KPX L Oacute -21
+KPX L Ocircumflex -21
+KPX L Odieresis -21
+KPX L Ograve -21
+KPX L Otilde -21
+KPX L S 17
+KPX L T -41
+KPX L U -12
+KPX L Udieresis -12
+KPX L V -73
+KPX L W -54
+KPX L Y -82
+KPX L hyphen -26
+KPX L quotedblright -71
+KPX L quoteright -72
+KPX L u -5
+KPX L udieresis -5
+KPX L y -48
+KPX N A -6
+KPX N AE -11
+KPX N Aacute -6
+KPX N Adieresis -6
+KPX N Aring -6
+KPX N C 7
+KPX N Ccedilla 7
+KPX N G 7
+KPX N O 7
+KPX N Oacute 7
+KPX N Odieresis 7
+KPX N a 5
+KPX N aacute 5
+KPX N adieresis 5
+KPX N ae 4
+KPX N aring 5
+KPX N comma 8
+KPX N e 3
+KPX N eacute 3
+KPX N o 3
+KPX N oacute 3
+KPX N odieresis 3
+KPX N oslash 5
+KPX N period 8
+KPX N u 9
+KPX N udieresis 9
+KPX O A -40
+KPX O AE -70
+KPX O Aacute -40
+KPX O Adieresis -40
+KPX O Aring -40
+KPX O T -29
+KPX O V -42
+KPX O W -24
+KPX O X -36
+KPX O Y -53
+KPX Oacute A -40
+KPX Oacute T -29
+KPX Oacute V -42
+KPX Oacute W -24
+KPX Oacute Y -53
+KPX Ocircumflex T -29
+KPX Ocircumflex V -42
+KPX Ocircumflex Y -53
+KPX Odieresis A -40
+KPX Odieresis T -29
+KPX Odieresis V -42
+KPX Odieresis W -24
+KPX Odieresis X -36
+KPX Odieresis Y -53
+KPX Ograve T -29
+KPX Ograve V -42
+KPX Ograve Y -53
+KPX Oslash A -37
+KPX Otilde T -29
+KPX Otilde V -42
+KPX Otilde Y -53
+KPX P A -60
+KPX P AE -108
+KPX P Aacute -60
+KPX P Adieresis -60
+KPX P Aring -60
+KPX P J -68
+KPX P a -18
+KPX P aacute -18
+KPX P adieresis -18
+KPX P ae -19
+KPX P aring -18
+KPX P comma -95
+KPX P e -20
+KPX P eacute -20
+KPX P hyphen -20
+KPX P o -20
+KPX P oacute -20
+KPX P odieresis -20
+KPX P oe -20
+KPX P oslash -20
+KPX P period -95
+KPX R C 5
+KPX R Ccedilla 5
+KPX R G 5
+KPX R O 5
+KPX R OE 2
+KPX R Oacute 5
+KPX R Odieresis 5
+KPX R T 12
+KPX R U 10
+KPX R Udieresis 10
+KPX R V -12
+KPX R W -5
+KPX R Y -17
+KPX R a -3
+KPX R aacute -3
+KPX R adieresis -3
+KPX R ae -4
+KPX R aring -3
+KPX R e -5
+KPX R eacute -5
+KPX R hyphen -15
+KPX R o -6
+KPX R oacute -6
+KPX R odieresis -6
+KPX R oe -5
+KPX R u 8
+KPX R uacute 8
+KPX R udieresis 8
+KPX R y 15
+KPX S A -14
+KPX S AE -30
+KPX S Aacute -14
+KPX S Adieresis -14
+KPX S Aring -14
+KPX S T 2
+KPX S V -22
+KPX S W -10
+KPX S Y -27
+KPX S t 12
+KPX T A -39
+KPX T AE -44
+KPX T Aacute -39
+KPX T Acircumflex -39
+KPX T Adieresis -39
+KPX T Agrave -39
+KPX T Aring -39
+KPX T Atilde -39
+KPX T C -22
+KPX T G -22
+KPX T J -39
+KPX T O -22
+KPX T OE -24
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -19
+KPX T Otilde -22
+KPX T S 7
+KPX T V 29
+KPX T W 30
+KPX T Y 31
+KPX T a -33
+KPX T ae -34
+KPX T c -35
+KPX T colon -33
+KPX T comma -25
+KPX T e -35
+KPX T g -32
+KPX T guillemotleft -25
+KPX T guilsinglleft -25
+KPX T hyphen -26
+KPX T i 2
+KPX T j -6
+KPX T o -36
+KPX T oslash -32
+KPX T period -25
+KPX T r -21
+KPX T s -25
+KPX T semicolon -33
+KPX T u -26
+KPX T v -40
+KPX T w -45
+KPX T y -43
+KPX U A -34
+KPX U AE -55
+KPX U Aacute -34
+KPX U Acircumflex -34
+KPX U Adieresis -34
+KPX U Aring -34
+KPX U Atilde -34
+KPX U comma -11
+KPX U m 8
+KPX U n 8
+KPX U p 8
+KPX U period -8
+KPX U r 8
+KPX Uacute A -34
+KPX Uacute comma -11
+KPX Uacute m 8
+KPX Uacute n 8
+KPX Uacute p 8
+KPX Uacute period -8
+KPX Uacute r 8
+KPX Ucircumflex A -34
+KPX Udieresis A -34
+KPX Udieresis b 8
+KPX Udieresis comma -11
+KPX Udieresis m 8
+KPX Udieresis n 8
+KPX Udieresis p 8
+KPX Udieresis period -8
+KPX Udieresis r 8
+KPX Ugrave A -34
+KPX V A -72
+KPX V AE -119
+KPX V Aacute -72
+KPX V Acircumflex -72
+KPX V Adieresis -72
+KPX V Agrave -72
+KPX V Aring -72
+KPX V Atilde -72
+KPX V C -36
+KPX V G -36
+KPX V O -36
+KPX V Oacute -36
+KPX V Ocircumflex -36
+KPX V Odieresis -36
+KPX V Ograve -36
+KPX V Oslash -34
+KPX V Otilde -36
+KPX V S -19
+KPX V T 28
+KPX V a -55
+KPX V ae -56
+KPX V colon -51
+KPX V comma -80
+KPX V e -58
+KPX V g -54
+KPX V guillemotleft -47
+KPX V guilsinglleft -47
+KPX V hyphen -48
+KPX V i 0
+KPX V o -58
+KPX V oslash -55
+KPX V period -80
+KPX V r -35
+KPX V semicolon -51
+KPX V u -39
+KPX V y -14
+KPX W A -52
+KPX W AE -83
+KPX W Aacute -52
+KPX W Acircumflex -52
+KPX W Adieresis -52
+KPX W Agrave -52
+KPX W Aring -52
+KPX W Atilde -52
+KPX W C -16
+KPX W G -17
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -14
+KPX W Otilde -16
+KPX W S -5
+KPX W T 30
+KPX W a -31
+KPX W ae -32
+KPX W colon -34
+KPX W comma -48
+KPX W e -34
+KPX W g -30
+KPX W guillemotleft -23
+KPX W guilsinglleft -23
+KPX W hyphen -24
+KPX W i 2
+KPX W o -34
+KPX W oslash -31
+KPX W period -48
+KPX W r -18
+KPX W semicolon -34
+KPX W u -24
+KPX W y -3
+KPX X C -32
+KPX X O -32
+KPX X Odieresis -32
+KPX X Q -32
+KPX X a -39
+KPX X e -41
+KPX X hyphen -53
+KPX X o -42
+KPX X u -32
+KPX X y -42
+KPX Y A -78
+KPX Y AE -93
+KPX Y Aacute -78
+KPX Y Acircumflex -78
+KPX Y Adieresis -78
+KPX Y Agrave -78
+KPX Y Aring -78
+KPX Y Atilde -78
+KPX Y C -44
+KPX Y G -44
+KPX Y O -44
+KPX Y Oacute -44
+KPX Y Ocircumflex -44
+KPX Y Odieresis -44
+KPX Y Ograve -44
+KPX Y Oslash -41
+KPX Y Otilde -44
+KPX Y S -20
+KPX Y T 34
+KPX Y a -64
+KPX Y ae -66
+KPX Y colon -61
+KPX Y comma -75
+KPX Y e -67
+KPX Y g -63
+KPX Y guillemotleft -62
+KPX Y guilsinglleft -62
+KPX Y hyphen -66
+KPX Y i 6
+KPX Y o -67
+KPX Y oslash -64
+KPX Y p -41
+KPX Y period -75
+KPX Y semicolon -61
+KPX Y u -46
+KPX Y v -18
+KPX Z v -11
+KPX Z y -13
+KPX a j 9
+KPX a quoteright 11
+KPX a v 0
+KPX a w -4
+KPX a y -3
+KPX aacute v 0
+KPX aacute w -4
+KPX aacute y -3
+KPX adieresis v 0
+KPX adieresis w -4
+KPX adieresis y -3
+KPX ae v -25
+KPX ae w -24
+KPX ae y -29
+KPX agrave v 0
+KPX agrave w -4
+KPX agrave y -3
+KPX aring v 0
+KPX aring w -4
+KPX aring y -3
+KPX b v -19
+KPX b w -17
+KPX b y -22
+KPX c h -7
+KPX c k -7
+KPX comma one -80
+KPX comma quotedblright -27
+KPX comma quoteright -28
+KPX e quoteright -20
+KPX e t -2
+KPX e v -27
+KPX e w -25
+KPX e x -26
+KPX e y -31
+KPX eacute v -27
+KPX eacute w -25
+KPX eacute y -31
+KPX ecircumflex v -27
+KPX ecircumflex w -25
+KPX ecircumflex y -31
+KPX eight four 16
+KPX eight one -75
+KPX eight seven -43
+KPX f a -6
+KPX f aacute -6
+KPX f adieresis -6
+KPX f ae -8
+KPX f aring -6
+KPX f e -9
+KPX f eacute -9
+KPX f f 13
+KPX f i 7
+KPX f j -3
+KPX f l 7
+KPX f o -9
+KPX f oacute -9
+KPX f odieresis -9
+KPX f oe -8
+KPX f oslash -6
+KPX f quoteright 16
+KPX f s 1
+KPX f t 14
+KPX five four 14
+KPX five one -84
+KPX five seven -53
+KPX four four 19
+KPX four one -76
+KPX four seven -44
+KPX g a 9
+KPX g adieresis 9
+KPX g ae 8
+KPX g aring 9
+KPX g e 7
+KPX g eacute 7
+KPX g l 16
+KPX g oacute 7
+KPX g odieresis 7
+KPX g r 16
+KPX guillemotright A -16
+KPX guillemotright AE -54
+KPX guillemotright Aacute -16
+KPX guillemotright Adieresis -16
+KPX guillemotright Aring -16
+KPX guillemotright T -27
+KPX guillemotright V -48
+KPX guillemotright W -26
+KPX guillemotright Y -66
+KPX guilsinglright A -12
+KPX guilsinglright AE -50
+KPX guilsinglright Aacute -12
+KPX guilsinglright Adieresis -12
+KPX guilsinglright Aring -12
+KPX guilsinglright T -24
+KPX guilsinglright V -45
+KPX guilsinglright W -22
+KPX guilsinglright Y -62
+KPX h quoteright -9
+KPX h y -21
+KPX hyphen A -15
+KPX hyphen AE -53
+KPX hyphen Aacute -15
+KPX hyphen Adieresis -15
+KPX hyphen Aring -15
+KPX hyphen T -26
+KPX hyphen V -47
+KPX hyphen W -24
+KPX hyphen Y -68
+KPX i T 0
+KPX i j 5
+KPX k a -45
+KPX k aacute -45
+KPX k adieresis -45
+KPX k ae -47
+KPX k aring -45
+KPX k comma -7
+KPX k e -48
+KPX k eacute -48
+KPX k g -45
+KPX k hyphen -71
+KPX k o -48
+KPX k oacute -48
+KPX k odieresis -48
+KPX k period -7
+KPX k s -32
+KPX k u -37
+KPX k udieresis -30
+KPX l v -2
+KPX l y -5
+KPX m p 11
+KPX m v -19
+KPX m w -18
+KPX m y -21
+KPX n T -29
+KPX n p 12
+KPX n quoteright -8
+KPX n v -18
+KPX n w -17
+KPX n y -20
+KPX nine four -30
+KPX nine one -69
+KPX nine seven -25
+KPX o T -33
+KPX o quoteright -16
+KPX o t 1
+KPX o v -22
+KPX o w -21
+KPX o x -22
+KPX o y -26
+KPX oacute v -22
+KPX oacute w -21
+KPX oacute y -26
+KPX ocircumflex t 1
+KPX odieresis t 1
+KPX odieresis v -22
+KPX odieresis w -21
+KPX odieresis x -22
+KPX odieresis y -26
+KPX ograve v -22
+KPX ograve w -21
+KPX ograve y -26
+KPX one comma -45
+KPX one eight -43
+KPX one five -39
+KPX one four -52
+KPX one nine -47
+KPX one one -120
+KPX one period -45
+KPX one seven -88
+KPX one six -49
+KPX one three -51
+KPX one two -45
+KPX one zero -28
+KPX p t 2
+KPX p y -25
+KPX period one -80
+KPX period quotedblright -27
+KPX period quoteright -28
+KPX q c 7
+KPX q u 14
+KPX quotedblbase A 20
+KPX quotedblbase AE 3
+KPX quotedblbase T -27
+KPX quotedblbase V -80
+KPX quotedblbase W -50
+KPX quotedblbase Y -78
+KPX quotedblleft A -73
+KPX quotedblleft AE -145
+KPX quotedblleft Aacute -73
+KPX quotedblleft Adieresis -73
+KPX quotedblleft Aring -73
+KPX quotedblleft T 9
+KPX quotedblleft V 9
+KPX quotedblleft W 17
+KPX quotedblleft Y 0
+KPX quotedblright A -76
+KPX quotedblright AE -149
+KPX quotedblright Aacute -76
+KPX quotedblright Adieresis -76
+KPX quotedblright Aring -76
+KPX quotedblright T 10
+KPX quotedblright V 7
+KPX quotedblright W 15
+KPX quotedblright Y -1
+KPX quoteleft A -76
+KPX quoteleft AE -148
+KPX quoteleft Aacute -76
+KPX quoteleft Adieresis -76
+KPX quoteleft Aring -76
+KPX quoteleft T 7
+KPX quoteleft V 6
+KPX quoteleft W 15
+KPX quoteleft Y -1
+KPX quoteright A -79
+KPX quoteright AE -151
+KPX quoteright Aacute -79
+KPX quoteright Adieresis -79
+KPX quoteright Aring -79
+KPX quoteright comma -38
+KPX quoteright d -24
+KPX quoteright o -31
+KPX quoteright period -38
+KPX quoteright r -1
+KPX quoteright s -9
+KPX quoteright t 12
+KPX quoteright v 6
+KPX quoteright w 4
+KPX quoteright y 4
+KPX r a -18
+KPX r aacute -18
+KPX r acircumflex -18
+KPX r adieresis -18
+KPX r ae -20
+KPX r agrave -18
+KPX r aring -18
+KPX r c -20
+KPX r ccedilla -17
+KPX r colon -12
+KPX r comma -30
+KPX r d -17
+KPX r e -21
+KPX r eacute -21
+KPX r ecircumflex -21
+KPX r egrave -21
+KPX r f 13
+KPX r g -14
+KPX r h 0
+KPX r hyphen -30
+KPX r i 0
+KPX r j -16
+KPX r k 0
+KPX r l 0
+KPX r m 0
+KPX r n 0
+KPX r o -22
+KPX r oacute -22
+KPX r ocircumflex -22
+KPX r odieresis -22
+KPX r oe -20
+KPX r ograve -22
+KPX r oslash -21
+KPX r p 0
+KPX r period -30
+KPX r q -16
+KPX r quoteright 19
+KPX r r 0
+KPX r s -3
+KPX r semicolon -12
+KPX r t 14
+KPX r u -5
+KPX r v 17
+KPX r w 12
+KPX r x 3
+KPX r y 14
+KPX r z -5
+KPX s quoteright -4
+KPX s t 8
+KPX seven colon -58
+KPX seven comma -96
+KPX seven eight -39
+KPX seven five -36
+KPX seven four -65
+KPX seven one -71
+KPX seven period -96
+KPX seven seven -27
+KPX seven six -56
+KPX seven three -35
+KPX seven two -22
+KPX six four 20
+KPX six one -83
+KPX six seven -54
+KPX t S 8
+KPX t a -8
+KPX t aacute -8
+KPX t adieresis -8
+KPX t ae -9
+KPX t aring -8
+KPX t colon -6
+KPX t e -10
+KPX t eacute -10
+KPX t h 10
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright 20
+KPX t semicolon -6
+KPX three four 13
+KPX three one -79
+KPX three seven -51
+KPX two four 13
+KPX two one -71
+KPX two seven -28
+KPX u quoteright 8
+KPX v a -27
+KPX v aacute -27
+KPX v acircumflex -27
+KPX v adieresis -27
+KPX v ae -28
+KPX v agrave -27
+KPX v aring -27
+KPX v atilde -27
+KPX v c -30
+KPX v colon -20
+KPX v comma -60
+KPX v e -30
+KPX v eacute -30
+KPX v ecircumflex -30
+KPX v egrave -30
+KPX v g -26
+KPX v hyphen -22
+KPX v l -5
+KPX v o -30
+KPX v oacute -30
+KPX v odieresis -30
+KPX v ograve -30
+KPX v oslash -27
+KPX v period -60
+KPX v s -19
+KPX v semicolon -20
+KPX w a -25
+KPX w aacute -25
+KPX w acircumflex -25
+KPX w adieresis -25
+KPX w ae -27
+KPX w agrave -25
+KPX w aring -25
+KPX w atilde -25
+KPX w c -28
+KPX w colon -23
+KPX w comma -54
+KPX w e -28
+KPX w eacute -28
+KPX w ecircumflex -28
+KPX w egrave -28
+KPX w g -24
+KPX w hyphen -21
+KPX w l -9
+KPX w o -28
+KPX w oacute -28
+KPX w odieresis -28
+KPX w ograve -28
+KPX w oslash -26
+KPX w period -54
+KPX w s -18
+KPX w semicolon -23
+KPX x a -27
+KPX x c -30
+KPX x e -30
+KPX x eacute -30
+KPX x o -30
+KPX x q -28
+KPX y a -35
+KPX y aacute -35
+KPX y acircumflex -35
+KPX y adieresis -35
+KPX y ae -36
+KPX y agrave -35
+KPX y aring -35
+KPX y atilde -35
+KPX y c -37
+KPX y colon -23
+KPX y comma -70
+KPX y e -38
+KPX y eacute -38
+KPX y ecircumflex -38
+KPX y egrave -38
+KPX y g -34
+KPX y hyphen -29
+KPX y l -7
+KPX y o -38
+KPX y oacute -38
+KPX y odieresis -38
+KPX y ograve -38
+KPX y oslash -34
+KPX y period -69
+KPX y s -26
+KPX y semicolon -23
+KPX zero four 17
+KPX zero one -61
+KPX zero seven -27
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagd8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uagd8a.pfb
new file mode 100644
index 00000000000..67046dbe684
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagd8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagdo8a.afm b/Master/tlpkg/tlgs/lib/fonts/uagdo8a.afm
new file mode 100644
index 00000000000..a0dfd3829b0
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagdo8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWGothicL-DemiObli
+FullName URW Gothic L Demi Oblique
+FamilyName URW Gothic L
+Weight Demi
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -93
+UnderlineThickness 90
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -121 -251 1281 1013
+CapHeight 739
+XHeight 554
+Descender -185
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 280 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 280 ; N exclam ; B 72 0 342 739 ;
+C 34 ; WX 360 ; N quotedbl ; B 169 513 420 739 ;
+C 35 ; WX 560 ; N numbersign ; B 77 0 623 739 ;
+C 36 ; WX 560 ; N dollar ; B 100 -86 575 856 ;
+C 37 ; WX 860 ; N percent ; B 124 -13 868 752 ;
+C 38 ; WX 680 ; N ampersand ; B 71 -13 741 752 ;
+C 39 ; WX 280 ; N quoteright ; B 159 464 342 739 ;
+C 40 ; WX 380 ; N parenleft ; B 122 -137 486 739 ;
+C 41 ; WX 380 ; N parenright ; B 13 -137 377 739 ;
+C 42 ; WX 440 ; N asterisk ; B 176 425 490 739 ;
+C 43 ; WX 600 ; N plus ; B 100 129 625 609 ;
+C 44 ; WX 280 ; N comma ; B 47 -140 230 128 ;
+C 45 ; WX 420 ; N hyphen ; B 122 229 421 347 ;
+C 46 ; WX 280 ; N period ; B 72 0 230 128 ;
+C 47 ; WX 460 ; N slash ; B 2 -128 580 739 ;
+C 48 ; WX 560 ; N zero ; B 68 -13 623 752 ;
+C 49 ; WX 560 ; N one ; B 246 0 516 739 ;
+C 50 ; WX 560 ; N two ; B 42 0 619 752 ;
+C 51 ; WX 560 ; N three ; B 53 -13 571 752 ;
+C 52 ; WX 560 ; N four ; B 20 0 589 739 ;
+C 53 ; WX 560 ; N five ; B 50 -13 586 739 ;
+C 54 ; WX 560 ; N six ; B 62 -13 584 739 ;
+C 55 ; WX 560 ; N seven ; B 85 0 637 739 ;
+C 56 ; WX 560 ; N eight ; B 69 -13 582 752 ;
+C 57 ; WX 560 ; N nine ; B 108 0 628 752 ;
+C 58 ; WX 280 ; N colon ; B 72 0 298 502 ;
+C 59 ; WX 280 ; N semicolon ; B 47 -140 298 502 ;
+C 60 ; WX 600 ; N less ; B 98 33 668 582 ;
+C 61 ; WX 600 ; N equal ; B 81 210 643 524 ;
+C 62 ; WX 600 ; N greater ; B 56 33 625 582 ;
+C 63 ; WX 560 ; N question ; B 129 0 586 752 ;
+C 64 ; WX 740 ; N at ; B 64 -13 831 766 ;
+C 65 ; WX 740 ; N A ; B 7 0 733 739 ;
+C 66 ; WX 580 ; N B ; B 68 0 607 739 ;
+C 67 ; WX 780 ; N C ; B 92 -13 858 752 ;
+C 68 ; WX 700 ; N D ; B 68 0 734 739 ;
+C 69 ; WX 520 ; N E ; B 68 0 602 739 ;
+C 70 ; WX 480 ; N F ; B 68 0 581 739 ;
+C 71 ; WX 840 ; N G ; B 91 -13 888 752 ;
+C 72 ; WX 680 ; N H ; B 68 0 743 739 ;
+C 73 ; WX 280 ; N I ; B 68 0 342 739 ;
+C 74 ; WX 480 ; N J ; B 38 -13 551 739 ;
+C 75 ; WX 620 ; N K ; B 68 0 736 739 ;
+C 76 ; WX 440 ; N L ; B 68 0 456 739 ;
+C 77 ; WX 900 ; N M ; B 68 0 977 739 ;
+C 78 ; WX 740 ; N N ; B 68 0 804 739 ;
+C 79 ; WX 840 ; N O ; B 91 -13 875 752 ;
+C 80 ; WX 560 ; N P ; B 68 0 639 739 ;
+C 81 ; WX 840 ; N Q ; B 91 -15 889 752 ;
+C 82 ; WX 580 ; N R ; B 68 0 657 739 ;
+C 83 ; WX 520 ; N S ; B 49 -13 579 752 ;
+C 84 ; WX 420 ; N T ; B 119 0 555 739 ;
+C 85 ; WX 640 ; N U ; B 109 -13 704 739 ;
+C 86 ; WX 700 ; N V ; B 145 0 831 739 ;
+C 87 ; WX 900 ; N W ; B 144 0 1035 739 ;
+C 88 ; WX 680 ; N X ; B 5 0 813 739 ;
+C 89 ; WX 620 ; N Y ; B 140 0 763 739 ;
+C 90 ; WX 500 ; N Z ; B 18 0 598 739 ;
+C 91 ; WX 320 ; N bracketleft ; B 100 -137 429 739 ;
+C 92 ; WX 640 ; N backslash ; B 221 0 503 739 ;
+C 93 ; WX 320 ; N bracketright ; B 13 -137 346 739 ;
+C 94 ; WX 600 ; N asciicircum ; B 130 324 610 750 ;
+C 95 ; WX 500 ; N underscore ; B -26 -138 491 -48 ;
+C 96 ; WX 280 ; N quoteleft ; B 161 466 343 739 ;
+C 97 ; WX 660 ; N a ; B 75 -13 718 567 ;
+C 98 ; WX 660 ; N b ; B 54 -13 695 739 ;
+C 99 ; WX 640 ; N c ; B 77 -13 670 567 ;
+C 100 ; WX 660 ; N d ; B 76 -13 750 739 ;
+C 101 ; WX 640 ; N e ; B 76 -13 665 567 ;
+C 102 ; WX 280 ; N f ; B 57 0 413 739 ;
+C 103 ; WX 660 ; N g ; B 30 -221 714 567 ;
+C 104 ; WX 600 ; N h ; B 54 0 613 739 ;
+C 105 ; WX 240 ; N i ; B 54 0 324 739 ;
+C 106 ; WX 260 ; N j ; B -17 -185 342 739 ;
+C 107 ; WX 580 ; N k ; B 54 0 625 739 ;
+C 108 ; WX 240 ; N l ; B 54 0 324 739 ;
+C 109 ; WX 940 ; N m ; B 54 0 952 567 ;
+C 110 ; WX 600 ; N n ; B 54 0 613 567 ;
+C 111 ; WX 640 ; N o ; B 76 -13 675 567 ;
+C 112 ; WX 660 ; N p ; B 20 -185 691 567 ;
+C 113 ; WX 660 ; N q ; B 77 -185 714 567 ;
+C 114 ; WX 320 ; N r ; B 54 0 412 569 ;
+C 115 ; WX 440 ; N s ; B 49 -13 482 567 ;
+C 116 ; WX 300 ; N t ; B 74 0 390 739 ;
+C 117 ; WX 600 ; N u ; B 88 -13 650 554 ;
+C 118 ; WX 560 ; N v ; B 104 0 656 554 ;
+C 119 ; WX 800 ; N w ; B 113 0 888 554 ;
+C 120 ; WX 560 ; N x ; B 1 0 629 554 ;
+C 121 ; WX 580 ; N y ; B 73 -185 671 554 ;
+C 122 ; WX 460 ; N z ; B 20 0 528 554 ;
+C 123 ; WX 340 ; N braceleft ; B 94 -129 439 740 ;
+C 124 ; WX 600 ; N bar ; B 243 0 499 739 ;
+C 125 ; WX 340 ; N braceright ; B 14 -129 360 740 ;
+C 126 ; WX 600 ; N asciitilde ; B 105 214 619 421 ;
+C 161 ; WX 280 ; N exclamdown ; B 38 -185 308 554 ;
+C 162 ; WX 560 ; N cent ; B 106 39 593 715 ;
+C 163 ; WX 560 ; N sterling ; B 40 0 616 752 ;
+C 164 ; WX 160 ; N fraction ; B -121 0 417 739 ;
+C 165 ; WX 560 ; N yen ; B 51 0 726 739 ;
+C 166 ; WX 560 ; N florin ; B -44 -149 646 820 ;
+C 167 ; WX 560 ; N section ; B 68 -157 608 752 ;
+C 168 ; WX 560 ; N currency ; B 69 148 640 654 ;
+C 169 ; WX 220 ; N quotesingle ; B 169 513 287 739 ;
+C 170 ; WX 480 ; N quotedblleft ; B 159 466 548 739 ;
+C 171 ; WX 460 ; N guillemotleft ; B 85 108 480 469 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 85 108 267 469 ;
+C 173 ; WX 240 ; N guilsinglright ; B 98 108 280 469 ;
+C 174 ; WX 520 ; N fi ; B 55 0 598 739 ;
+C 175 ; WX 520 ; N fl ; B 55 0 598 739 ;
+C 177 ; WX 500 ; N endash ; B 48 229 570 347 ;
+C 178 ; WX 560 ; N dagger ; B 129 -128 607 739 ;
+C 179 ; WX 560 ; N daggerdbl ; B 96 -128 615 739 ;
+C 180 ; WX 280 ; N periodcentered ; B 119 300 276 432 ;
+C 182 ; WX 600 ; N paragraph ; B 133 -128 664 739 ;
+C 183 ; WX 600 ; N bullet ; B 190 144 533 487 ;
+C 184 ; WX 280 ; N quotesinglbase ; B 46 -140 228 128 ;
+C 185 ; WX 480 ; N quotedblbase ; B 45 -147 435 128 ;
+C 186 ; WX 480 ; N quotedblright ; B 157 464 547 739 ;
+C 187 ; WX 460 ; N guillemotright ; B 98 108 493 469 ;
+C 188 ; WX 1000 ; N ellipsis ; B 100 0 924 128 ;
+C 189 ; WX 1280 ; N perthousand ; B 124 -13 1281 752 ;
+C 191 ; WX 560 ; N questiondown ; B 71 -198 528 554 ;
+C 193 ; WX 420 ; N grave ; B 211 617 484 832 ;
+C 194 ; WX 420 ; N acute ; B 205 617 488 832 ;
+C 195 ; WX 540 ; N circumflex ; B 189 630 588 768 ;
+C 196 ; WX 480 ; N tilde ; B 206 631 528 769 ;
+C 197 ; WX 420 ; N macron ; B 189 650 486 749 ;
+C 198 ; WX 480 ; N breve ; B 214 630 544 766 ;
+C 199 ; WX 280 ; N dotaccent ; B 189 630 347 762 ;
+C 200 ; WX 500 ; N dieresis ; B 189 630 557 762 ;
+C 202 ; WX 360 ; N ring ; B 206 617 416 823 ;
+C 203 ; WX 340 ; N cedilla ; B 42 -251 244 0 ;
+C 205 ; WX 700 ; N hungarumlaut ; B 204 617 768 838 ;
+C 206 ; WX 340 ; N ogonek ; B 52 -204 235 0 ;
+C 207 ; WX 540 ; N caron ; B 214 630 613 768 ;
+C 208 ; WX 1000 ; N emdash ; B 48 229 1070 347 ;
+C 225 ; WX 900 ; N AE ; B 17 0 980 739 ;
+C 227 ; WX 360 ; N ordfeminine ; B 90 312 480 752 ;
+C 232 ; WX 480 ; N Lslash ; B 49 0 498 739 ;
+C 233 ; WX 840 ; N Oslash ; B 91 -80 887 826 ;
+C 234 ; WX 1060 ; N OE ; B 100 -13 1141 752 ;
+C 235 ; WX 360 ; N ordmasculine ; B 90 313 451 752 ;
+C 241 ; WX 1080 ; N ae ; B 76 -13 1108 567 ;
+C 245 ; WX 240 ; N dotlessi ; B 54 0 290 554 ;
+C 248 ; WX 320 ; N lslash ; B 59 0 420 739 ;
+C 249 ; WX 660 ; N oslash ; B 76 -64 680 620 ;
+C 250 ; WX 1080 ; N oe ; B 76 -13 1105 567 ;
+C 251 ; WX 600 ; N germandbls ; B 51 -13 628 752 ;
+C -1 ; WX 640 ; N Udieresis ; B 109 -13 704 937 ;
+C -1 ; WX 640 ; N Uacute ; B 109 -13 704 1007 ;
+C -1 ; WX 520 ; N Scedilla ; B 49 -251 579 752 ;
+C -1 ; WX 420 ; N Tcaron ; B 119 0 573 943 ;
+C -1 ; WX 520 ; N Scaron ; B 49 -13 638 943 ;
+C -1 ; WX 580 ; N Rcaron ; B 68 0 657 943 ;
+C -1 ; WX 580 ; N Racute ; B 68 0 657 1007 ;
+C -1 ; WX 520 ; N Sacute ; B 49 -13 579 1007 ;
+C -1 ; WX 840 ; N Otilde ; B 91 -13 875 943 ;
+C -1 ; WX 600 ; N ucircumflex ; B 88 -13 650 768 ;
+C -1 ; WX 840 ; N Ohungarumlaut ; B 91 -13 875 1013 ;
+C -1 ; WX 640 ; N Uhungarumlaut ; B 109 -13 818 1013 ;
+C -1 ; WX 620 ; N Yacute ; B 140 0 763 1007 ;
+C -1 ; WX 742 ; N Eth ; B 73 0 776 739 ;
+C -1 ; WX 742 ; N Dcroat ; B 73 0 776 739 ;
+C -1 ; WX 500 ; N Zacute ; B 18 0 598 1007 ;
+C -1 ; WX 640 ; N Uring ; B 109 -13 704 998 ;
+C -1 ; WX 660 ; N gbreve ; B 30 -221 714 766 ;
+C -1 ; WX 640 ; N eogonek ; B 76 -204 665 567 ;
+C -1 ; WX 640 ; N edotaccent ; B 76 -13 665 762 ;
+C -1 ; WX 640 ; N ecaron ; B 76 -13 665 768 ;
+C -1 ; WX 640 ; N Ugrave ; B 109 -13 704 1007 ;
+C -1 ; WX 560 ; N Thorn ; B 68 0 613 739 ;
+C -1 ; WX 640 ; N eacute ; B 76 -13 665 832 ;
+C -1 ; WX 640 ; N edieresis ; B 76 -13 665 762 ;
+C -1 ; WX 752 ; N dcaron ; B 76 -13 932 739 ;
+C -1 ; WX 640 ; N ccedilla ; B 77 -251 670 567 ;
+C -1 ; WX 640 ; N ccaron ; B 77 -13 670 768 ;
+C -1 ; WX 640 ; N cacute ; B 77 -13 670 832 ;
+C -1 ; WX 660 ; N aogonek ; B 75 -204 718 567 ;
+C -1 ; WX 660 ; N aring ; B 75 -13 718 823 ;
+C -1 ; WX 660 ; N atilde ; B 75 -13 718 769 ;
+C -1 ; WX 660 ; N abreve ; B 75 -13 718 766 ;
+C -1 ; WX 640 ; N egrave ; B 76 -13 665 832 ;
+C -1 ; WX 660 ; N agrave ; B 75 -13 718 832 ;
+C -1 ; WX 660 ; N aacute ; B 75 -13 718 832 ;
+C -1 ; WX 660 ; N adieresis ; B 75 -13 718 762 ;
+C -1 ; WX 640 ; N Uogonek ; B 109 -204 704 739 ;
+C -1 ; WX 600 ; N ugrave ; B 88 -13 650 832 ;
+C -1 ; WX 600 ; N uacute ; B 88 -13 650 832 ;
+C -1 ; WX 600 ; N udieresis ; B 88 -13 650 762 ;
+C -1 ; WX 364 ; N tcaron ; B 74 0 544 739 ;
+C -1 ; WX 440 ; N scommaaccent ; B 49 -245 482 567 ;
+C -1 ; WX 500 ; N Zcaron ; B 18 0 618 943 ;
+C -1 ; WX 640 ; N ecircumflex ; B 76 -13 665 768 ;
+C -1 ; WX 640 ; N Ucircumflex ; B 109 -13 704 943 ;
+C -1 ; WX 660 ; N acircumflex ; B 75 -13 718 768 ;
+C -1 ; WX 500 ; N Zdotaccent ; B 18 0 598 937 ;
+C -1 ; WX 440 ; N scaron ; B 49 -13 563 768 ;
+C -1 ; WX 740 ; N Amacron ; B 7 0 733 924 ;
+C -1 ; WX 440 ; N sacute ; B 49 -13 498 832 ;
+C -1 ; WX 420 ; N Tcommaaccent ; B 83 -245 555 739 ;
+C -1 ; WX 620 ; N Ydieresis ; B 140 0 763 937 ;
+C -1 ; WX 660 ; N thorn ; B 20 -185 691 739 ;
+C -1 ; WX 520 ; N Emacron ; B 68 0 602 924 ;
+C -1 ; WX 840 ; N Ograve ; B 91 -13 875 1007 ;
+C -1 ; WX 840 ; N Oacute ; B 91 -13 875 1007 ;
+C -1 ; WX 840 ; N Odieresis ; B 91 -13 875 937 ;
+C -1 ; WX 740 ; N Ntilde ; B 68 0 804 943 ;
+C -1 ; WX 740 ; N Ncaron ; B 68 0 804 943 ;
+C -1 ; WX 740 ; N Nacute ; B 68 0 804 1007 ;
+C -1 ; WX 440 ; N Lcaron ; B 68 0 531 739 ;
+C -1 ; WX 440 ; N Lacute ; B 68 0 498 1007 ;
+C -1 ; WX 280 ; N Idotaccent ; B 68 0 377 937 ;
+C -1 ; WX 320 ; N racute ; B 54 0 438 832 ;
+C -1 ; WX 280 ; N Icircumflex ; B 68 0 492 943 ;
+C -1 ; WX 640 ; N ohungarumlaut ; B 76 -13 738 838 ;
+C -1 ; WX 640 ; N otilde ; B 76 -13 675 769 ;
+C -1 ; WX 560 ; N Euro ; B -33 -11 673 751 ;
+C -1 ; WX 640 ; N ocircumflex ; B 76 -13 675 768 ;
+C -1 ; WX 336 ; N onesuperior ; B 209 296 378 739 ;
+C -1 ; WX 336 ; N twosuperior ; B 70 296 440 746 ;
+C -1 ; WX 336 ; N threesuperior ; B 82 288 415 746 ;
+C -1 ; WX 280 ; N Igrave ; B 68 0 448 1007 ;
+C -1 ; WX 280 ; N Iacute ; B 68 0 418 1007 ;
+C -1 ; WX 280 ; N Imacron ; B 68 0 436 924 ;
+C -1 ; WX 280 ; N Iogonek ; B 27 -204 342 739 ;
+C -1 ; WX 280 ; N Idieresis ; B 68 0 481 937 ;
+C -1 ; WX 840 ; N Gbreve ; B 91 -13 888 941 ;
+C -1 ; WX 640 ; N Umacron ; B 109 -13 704 924 ;
+C -1 ; WX 620 ; N Kcommaaccent ; B 68 -245 736 739 ;
+C -1 ; WX 640 ; N ograve ; B 76 -13 675 832 ;
+C -1 ; WX 520 ; N Scommaaccent ; B 49 -245 579 752 ;
+C -1 ; WX 520 ; N Eogonek ; B 68 -204 602 739 ;
+C -1 ; WX 640 ; N oacute ; B 76 -13 675 832 ;
+C -1 ; WX 520 ; N Edotaccent ; B 68 0 602 937 ;
+C -1 ; WX 240 ; N iogonek ; B 9 -204 324 739 ;
+C -1 ; WX 660 ; N gcommaaccent ; B 30 -221 714 799 ;
+C -1 ; WX 640 ; N odieresis ; B 76 -13 675 762 ;
+C -1 ; WX 600 ; N ntilde ; B 54 0 613 769 ;
+C -1 ; WX 600 ; N ncaron ; B 54 0 643 768 ;
+C -1 ; WX 520 ; N Ecaron ; B 68 0 633 943 ;
+C -1 ; WX 520 ; N Ecircumflex ; B 68 0 612 943 ;
+C -1 ; WX 440 ; N scedilla ; B 49 -251 482 567 ;
+C -1 ; WX 320 ; N rcaron ; B 54 0 503 768 ;
+C -1 ; WX 520 ; N Egrave ; B 68 0 602 1007 ;
+C -1 ; WX 520 ; N Eacute ; B 68 0 602 1007 ;
+C -1 ; WX 840 ; N Gcommaaccent ; B 91 -245 888 752 ;
+C -1 ; WX 580 ; N Rcommaaccent ; B 68 -245 657 739 ;
+C -1 ; WX 520 ; N Edieresis ; B 68 0 602 937 ;
+C -1 ; WX 600 ; N nacute ; B 54 0 613 832 ;
+C -1 ; WX 600 ; N uogonek ; B 88 -204 650 554 ;
+C -1 ; WX 600 ; N umacron ; B 88 -13 650 749 ;
+C -1 ; WX 700 ; N Dcaron ; B 68 0 734 943 ;
+C -1 ; WX 326 ; N lcaron ; B 54 0 506 739 ;
+C -1 ; WX 780 ; N Ccaron ; B 92 -13 858 943 ;
+C -1 ; WX 780 ; N Cacute ; B 92 -13 858 1007 ;
+C -1 ; WX 780 ; N Ccedilla ; B 92 -251 858 752 ;
+C -1 ; WX 400 ; N degree ; B 157 386 462 686 ;
+C -1 ; WX 740 ; N Aogonek ; B 7 -204 738 739 ;
+C -1 ; WX 600 ; N minus ; B 99 312 625 430 ;
+C -1 ; WX 600 ; N multiply ; B 78 112 645 622 ;
+C -1 ; WX 600 ; N divide ; B 100 73 625 669 ;
+C -1 ; WX 740 ; N Aring ; B 7 0 733 998 ;
+C -1 ; WX 1000 ; N trademark ; B 194 345 1066 739 ;
+C -1 ; WX 320 ; N rcommaaccent ; B 33 -245 412 569 ;
+C -1 ; WX 240 ; N lacute ; B 54 0 398 1007 ;
+C -1 ; WX 640 ; N omacron ; B 76 -13 675 749 ;
+C -1 ; WX 740 ; N Atilde ; B 7 0 733 943 ;
+C -1 ; WX 240 ; N icircumflex ; B 39 0 438 768 ;
+C -1 ; WX 240 ; N igrave ; B 54 0 394 832 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 54 -245 613 567 ;
+C -1 ; WX 240 ; N lcommaaccent ; B -7 -245 324 739 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 635 627 ;
+C -1 ; WX 840 ; N onehalf ; B 205 0 889 739 ;
+C -1 ; WX 840 ; N onequarter ; B 209 0 867 739 ;
+C -1 ; WX 840 ; N threequarters ; B 82 0 867 746 ;
+C -1 ; WX 240 ; N iacute ; B 54 0 398 832 ;
+C -1 ; WX 740 ; N Abreve ; B 7 0 733 941 ;
+C -1 ; WX 580 ; N kcommaaccent ; B 54 -245 625 739 ;
+C -1 ; WX 840 ; N Omacron ; B 91 -13 875 924 ;
+C -1 ; WX 240 ; N imacron ; B 54 0 396 749 ;
+C -1 ; WX 640 ; N emacron ; B 76 -13 665 749 ;
+C -1 ; WX 660 ; N amacron ; B 75 -13 718 749 ;
+C -1 ; WX 300 ; N tcommaaccent ; B 23 -245 390 739 ;
+C -1 ; WX 580 ; N ydieresis ; B 73 -185 671 762 ;
+C -1 ; WX 460 ; N zdotaccent ; B 20 0 528 762 ;
+C -1 ; WX 460 ; N zcaron ; B 20 0 573 768 ;
+C -1 ; WX 460 ; N zacute ; B 20 0 528 832 ;
+C -1 ; WX 580 ; N yacute ; B 73 -185 671 832 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 88 -13 718 838 ;
+C -1 ; WX 640 ; N eth ; B 76 -13 680 757 ;
+C -1 ; WX 600 ; N uring ; B 88 -13 650 823 ;
+C -1 ; WX 840 ; N Ocircumflex ; B 91 -13 875 943 ;
+C -1 ; WX 280 ; N commaaccent ; B 13 -245 211 -53 ;
+C -1 ; WX 740 ; N copyright ; B 50 -13 834 752 ;
+C -1 ; WX 740 ; N registered ; B 50 -13 834 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 7 0 733 943 ;
+C -1 ; WX 240 ; N idieresis ; B 54 0 427 762 ;
+C -1 ; WX 494 ; N lozenge ; B 88 0 535 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 90 101 652 632 ;
+C -1 ; WX 549 ; N radical ; B 60 -35 709 917 ;
+C -1 ; WX 740 ; N Agrave ; B 7 0 733 1007 ;
+C -1 ; WX 740 ; N Aacute ; B 7 0 733 1007 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 681 711 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 643 711 ;
+C -1 ; WX 600 ; N logicalnot ; B 117 182 643 471 ;
+C -1 ; WX 713 ; N summation ; B -9 -123 761 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 56 -10 545 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 68 -245 804 739 ;
+C -1 ; WX 660 ; N dcroat ; B 77 -13 801 739 ;
+C -1 ; WX 600 ; N brokenbar ; B 243 0 499 739 ;
+C -1 ; WX 440 ; N Lcommaaccent ; B 68 -245 456 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 7 0 733 937 ;
+C -1 ; WX 576 ; N mu ; B 20 -185 650 554 ;
+C -1 ; WX 280 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -39
+KPX A Ccedilla -38
+KPX A G -38
+KPX A O -38
+KPX A Odieresis -38
+KPX A Q -38
+KPX A T -47
+KPX A U -34
+KPX A Uacute -34
+KPX A Ucircumflex -34
+KPX A Udieresis -34
+KPX A Ugrave -34
+KPX A V -78
+KPX A W -58
+KPX A Y -86
+KPX A a -22
+KPX A b -8
+KPX A c -25
+KPX A ccedilla -25
+KPX A comma 14
+KPX A d -22
+KPX A e -25
+KPX A g -23
+KPX A guillemotleft -22
+KPX A guilsinglleft -22
+KPX A hyphen -24
+KPX A o -25
+KPX A period 16
+KPX A q -23
+KPX A quotedblright -78
+KPX A quoteright -79
+KPX A t -13
+KPX A u -16
+KPX A v -45
+KPX A w -43
+KPX A y -47
+KPX Aacute C -39
+KPX Aacute G -38
+KPX Aacute O -38
+KPX Aacute Q -38
+KPX Aacute T -47
+KPX Aacute U -34
+KPX Aacute V -78
+KPX Aacute W -58
+KPX Aacute Y -86
+KPX Aacute a -22
+KPX Aacute b -8
+KPX Aacute c -25
+KPX Aacute comma 14
+KPX Aacute d -22
+KPX Aacute e -25
+KPX Aacute g -23
+KPX Aacute guillemotleft -22
+KPX Aacute guilsinglleft -22
+KPX Aacute hyphen -24
+KPX Aacute o -25
+KPX Aacute period 16
+KPX Aacute q -23
+KPX Aacute quoteright -79
+KPX Aacute t -13
+KPX Aacute u -16
+KPX Aacute v -45
+KPX Aacute w -43
+KPX Aacute y -47
+KPX Acircumflex C -39
+KPX Acircumflex G -38
+KPX Acircumflex O -38
+KPX Acircumflex Q -38
+KPX Acircumflex T -47
+KPX Acircumflex U -34
+KPX Acircumflex V -78
+KPX Acircumflex W -58
+KPX Acircumflex Y -86
+KPX Acircumflex comma 14
+KPX Acircumflex period 16
+KPX Adieresis C -39
+KPX Adieresis G -38
+KPX Adieresis O -38
+KPX Adieresis Q -38
+KPX Adieresis T -47
+KPX Adieresis U -34
+KPX Adieresis V -78
+KPX Adieresis W -58
+KPX Adieresis Y -86
+KPX Adieresis a -22
+KPX Adieresis b -8
+KPX Adieresis c -25
+KPX Adieresis comma 14
+KPX Adieresis d -22
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -22
+KPX Adieresis guilsinglleft -22
+KPX Adieresis hyphen -24
+KPX Adieresis o -25
+KPX Adieresis period 16
+KPX Adieresis q -23
+KPX Adieresis quotedblright -78
+KPX Adieresis quoteright -79
+KPX Adieresis t -13
+KPX Adieresis u -16
+KPX Adieresis v -45
+KPX Adieresis w -43
+KPX Adieresis y -47
+KPX Agrave C -39
+KPX Agrave G -38
+KPX Agrave O -38
+KPX Agrave Q -38
+KPX Agrave T -47
+KPX Agrave U -34
+KPX Agrave V -78
+KPX Agrave W -58
+KPX Agrave Y -86
+KPX Agrave comma 14
+KPX Agrave period 16
+KPX Aring C -39
+KPX Aring G -38
+KPX Aring O -38
+KPX Aring Q -38
+KPX Aring T -47
+KPX Aring U -34
+KPX Aring V -78
+KPX Aring W -58
+KPX Aring Y -86
+KPX Aring a -22
+KPX Aring b -8
+KPX Aring c -25
+KPX Aring comma 14
+KPX Aring d -22
+KPX Aring e -25
+KPX Aring g -23
+KPX Aring guillemotleft -22
+KPX Aring guilsinglleft -22
+KPX Aring hyphen -24
+KPX Aring o -25
+KPX Aring period 16
+KPX Aring q -23
+KPX Aring quotedblright -78
+KPX Aring quoteright -79
+KPX Aring t -13
+KPX Aring u -16
+KPX Aring v -45
+KPX Aring w -43
+KPX Aring y -47
+KPX Atilde C -39
+KPX Atilde G -38
+KPX Atilde O -38
+KPX Atilde Q -38
+KPX Atilde T -47
+KPX Atilde U -34
+KPX Atilde V -78
+KPX Atilde W -58
+KPX Atilde Y -86
+KPX Atilde comma 14
+KPX Atilde period 16
+KPX B A -24
+KPX B AE -42
+KPX B Aacute -24
+KPX B Acircumflex -24
+KPX B Adieresis -24
+KPX B Aring -24
+KPX B Atilde -24
+KPX B O 0
+KPX B OE -3
+KPX B Oacute 0
+KPX B Ocircumflex 0
+KPX B Odieresis 0
+KPX B Ograve 0
+KPX B Oslash 0
+KPX B V -34
+KPX B W -16
+KPX B Y -45
+KPX C A -21
+KPX C AE -45
+KPX C Aacute -21
+KPX C Adieresis -21
+KPX C Aring -21
+KPX C H 2
+KPX C K 2
+KPX C O -9
+KPX C Oacute -9
+KPX C Odieresis -9
+KPX Ccedilla A -24
+KPX D A -44
+KPX D Aacute -44
+KPX D Acircumflex -44
+KPX D Adieresis -44
+KPX D Agrave -44
+KPX D Aring -44
+KPX D Atilde -44
+KPX D J -22
+KPX D T -29
+KPX D V -41
+KPX D W -22
+KPX D X -38
+KPX D Y -53
+KPX F A -57
+KPX F Aacute -57
+KPX F Acircumflex -57
+KPX F Adieresis -57
+KPX F Agrave -57
+KPX F Aring -57
+KPX F Atilde -57
+KPX F J -61
+KPX F O -10
+KPX F Odieresis -10
+KPX F a -14
+KPX F aacute -14
+KPX F adieresis -14
+KPX F ae -14
+KPX F aring -14
+KPX F comma -64
+KPX F e -14
+KPX F eacute -14
+KPX F hyphen -3
+KPX F i -17
+KPX F j -27
+KPX F o -14
+KPX F oacute -14
+KPX F odieresis -14
+KPX F oe -14
+KPX F oslash -16
+KPX F period -63
+KPX F r -17
+KPX F u -21
+KPX G A -38
+KPX G AE -65
+KPX G Aacute -38
+KPX G Acircumflex -38
+KPX G Adieresis -38
+KPX G Agrave -38
+KPX G Aring -38
+KPX G Atilde -38
+KPX G T -25
+KPX G V -38
+KPX G W -20
+KPX G Y -50
+KPX J A -31
+KPX J AE -45
+KPX J Adieresis -31
+KPX J Aring -31
+KPX K C -50
+KPX K G -50
+KPX K O -49
+KPX K OE -52
+KPX K Oacute -49
+KPX K Odieresis -49
+KPX K S -34
+KPX K T 16
+KPX K a -57
+KPX K adieresis -57
+KPX K ae -59
+KPX K aring -57
+KPX K e -60
+KPX K hyphen -75
+KPX K o -60
+KPX K oacute -60
+KPX K odieresis -60
+KPX K u -50
+KPX K udieresis -48
+KPX K y -65
+KPX L A 19
+KPX L AE 14
+KPX L Aacute 19
+KPX L Adieresis 19
+KPX L Aring 19
+KPX L C -29
+KPX L Ccedilla -32
+KPX L G -29
+KPX L O -29
+KPX L Oacute -29
+KPX L Ocircumflex -29
+KPX L Odieresis -29
+KPX L Ograve -29
+KPX L Otilde -29
+KPX L S 10
+KPX L T -46
+KPX L U -20
+KPX L Udieresis -20
+KPX L V -76
+KPX L W -56
+KPX L Y -84
+KPX L hyphen -32
+KPX L quotedblright -76
+KPX L quoteright -77
+KPX L u -11
+KPX L udieresis -11
+KPX L y -50
+KPX N A -13
+KPX N AE -18
+KPX N Aacute -13
+KPX N Adieresis -13
+KPX N Aring -13
+KPX N C -2
+KPX N Ccedilla -1
+KPX N G -1
+KPX N O -1
+KPX N Oacute -1
+KPX N Odieresis -1
+KPX N a -3
+KPX N aacute -3
+KPX N adieresis -3
+KPX N ae -4
+KPX N aring -3
+KPX N comma 3
+KPX N e -5
+KPX N eacute -5
+KPX N o -5
+KPX N oacute -5
+KPX N odieresis -5
+KPX N oslash -4
+KPX N period 4
+KPX N u 3
+KPX N udieresis 3
+KPX O A -44
+KPX O AE -75
+KPX O Aacute -44
+KPX O Adieresis -44
+KPX O Aring -44
+KPX O T -30
+KPX O V -42
+KPX O W -23
+KPX O X -39
+KPX O Y -54
+KPX Oacute A -44
+KPX Oacute T -30
+KPX Oacute V -42
+KPX Oacute W -23
+KPX Oacute Y -54
+KPX Ocircumflex T -30
+KPX Ocircumflex V -42
+KPX Ocircumflex Y -54
+KPX Odieresis A -44
+KPX Odieresis T -30
+KPX Odieresis V -42
+KPX Odieresis W -23
+KPX Odieresis X -39
+KPX Odieresis Y -54
+KPX Ograve T -30
+KPX Ograve V -42
+KPX Ograve Y -54
+KPX Oslash A -41
+KPX Otilde T -30
+KPX Otilde V -42
+KPX Otilde Y -54
+KPX P A -64
+KPX P AE -112
+KPX P Aacute -64
+KPX P Adieresis -64
+KPX P Aring -64
+KPX P J -71
+KPX P a -24
+KPX P aacute -24
+KPX P adieresis -24
+KPX P ae -25
+KPX P aring -24
+KPX P comma -98
+KPX P e -25
+KPX P eacute -25
+KPX P hyphen -28
+KPX P o -26
+KPX P oacute -26
+KPX P odieresis -26
+KPX P oe -24
+KPX P oslash -27
+KPX P period -98
+KPX R C -1
+KPX R Ccedilla 0
+KPX R G -1
+KPX R O 0
+KPX R OE -4
+KPX R Oacute 0
+KPX R Odieresis 0
+KPX R T 4
+KPX R U 2
+KPX R Udieresis 2
+KPX R V -21
+KPX R W -9
+KPX R Y -26
+KPX R a -7
+KPX R aacute -7
+KPX R adieresis -7
+KPX R ae -8
+KPX R aring -7
+KPX R e -9
+KPX R eacute -9
+KPX R hyphen -22
+KPX R o -10
+KPX R oacute -10
+KPX R odieresis -10
+KPX R oe -9
+KPX R u 1
+KPX R uacute 1
+KPX R udieresis 1
+KPX R y 7
+KPX S A -19
+KPX S AE -35
+KPX S Aacute -19
+KPX S Adieresis -19
+KPX S Aring -19
+KPX S T -3
+KPX S V -28
+KPX S W -10
+KPX S Y -33
+KPX S t 10
+KPX T A -47
+KPX T AE -52
+KPX T Aacute -47
+KPX T Acircumflex -47
+KPX T Adieresis -47
+KPX T Agrave -47
+KPX T Aring -47
+KPX T Atilde -47
+KPX T C -27
+KPX T G -27
+KPX T J -46
+KPX T O -27
+KPX T OE -30
+KPX T Oacute -27
+KPX T Ocircumflex -27
+KPX T Odieresis -27
+KPX T Ograve -27
+KPX T Oslash -25
+KPX T Otilde -27
+KPX T S 1
+KPX T V 22
+KPX T W 23
+KPX T Y 24
+KPX T a -38
+KPX T ae -39
+KPX T c -41
+KPX T colon -37
+KPX T comma -30
+KPX T e -40
+KPX T g -36
+KPX T guillemotleft -33
+KPX T guilsinglleft -33
+KPX T hyphen -33
+KPX T i -2
+KPX T j -11
+KPX T o -40
+KPX T oslash -39
+KPX T period -29
+KPX T r -25
+KPX T s -30
+KPX T semicolon -37
+KPX T u -30
+KPX T v -48
+KPX T w -51
+KPX T y -50
+KPX U A -37
+KPX U AE -59
+KPX U Aacute -37
+KPX U Acircumflex -37
+KPX U Adieresis -37
+KPX U Aring -37
+KPX U Atilde -37
+KPX U comma -15
+KPX U m 2
+KPX U n 2
+KPX U p 1
+KPX U period -12
+KPX U r 2
+KPX Uacute A -37
+KPX Uacute comma -15
+KPX Uacute m 2
+KPX Uacute n 2
+KPX Uacute p 1
+KPX Uacute period -12
+KPX Uacute r 2
+KPX Ucircumflex A -37
+KPX Udieresis A -37
+KPX Udieresis b 1
+KPX Udieresis comma -15
+KPX Udieresis m 2
+KPX Udieresis n 2
+KPX Udieresis p 1
+KPX Udieresis period -12
+KPX Udieresis r 2
+KPX Ugrave A -37
+KPX V A -76
+KPX V AE -123
+KPX V Aacute -76
+KPX V Acircumflex -76
+KPX V Adieresis -76
+KPX V Agrave -76
+KPX V Aring -76
+KPX V Atilde -76
+KPX V C -41
+KPX V G -41
+KPX V O -41
+KPX V Oacute -41
+KPX V Ocircumflex -41
+KPX V Odieresis -41
+KPX V Ograve -41
+KPX V Oslash -39
+KPX V Otilde -41
+KPX V S -25
+KPX V T 23
+KPX V a -59
+KPX V ae -61
+KPX V colon -57
+KPX V comma -83
+KPX V e -62
+KPX V g -58
+KPX V guillemotleft -54
+KPX V guilsinglleft -54
+KPX V hyphen -54
+KPX V i -4
+KPX V o -62
+KPX V oslash -61
+KPX V period -83
+KPX V r -41
+KPX V semicolon -57
+KPX V u -44
+KPX V y -20
+KPX W A -55
+KPX W AE -90
+KPX W Aacute -55
+KPX W Acircumflex -55
+KPX W Adieresis -55
+KPX W Agrave -55
+KPX W Aring -55
+KPX W Atilde -55
+KPX W C -22
+KPX W G -22
+KPX W O -21
+KPX W Oacute -21
+KPX W Ocircumflex -21
+KPX W Odieresis -21
+KPX W Ograve -21
+KPX W Oslash -19
+KPX W Otilde -21
+KPX W S -10
+KPX W T 25
+KPX W a -36
+KPX W ae -37
+KPX W colon -38
+KPX W comma -52
+KPX W e -38
+KPX W g -34
+KPX W guillemotleft -31
+KPX W guilsinglleft -31
+KPX W hyphen -31
+KPX W i -2
+KPX W o -38
+KPX W oslash -37
+KPX W period -51
+KPX W r -22
+KPX W semicolon -39
+KPX W u -28
+KPX W y -9
+KPX X C -36
+KPX X O -35
+KPX X Odieresis -35
+KPX X Q -35
+KPX X a -43
+KPX X e -46
+KPX X hyphen -61
+KPX X o -46
+KPX X u -36
+KPX X y -49
+KPX Y A -81
+KPX Y AE -100
+KPX Y Aacute -81
+KPX Y Acircumflex -81
+KPX Y Adieresis -81
+KPX Y Agrave -81
+KPX Y Aring -81
+KPX Y Atilde -81
+KPX Y C -49
+KPX Y G -48
+KPX Y O -48
+KPX Y Oacute -48
+KPX Y Ocircumflex -48
+KPX Y Odieresis -48
+KPX Y Ograve -48
+KPX Y Oslash -46
+KPX Y Otilde -48
+KPX Y S -27
+KPX Y T 29
+KPX Y a -68
+KPX Y ae -69
+KPX Y colon -67
+KPX Y comma -78
+KPX Y e -70
+KPX Y g -66
+KPX Y guillemotleft -69
+KPX Y guilsinglleft -69
+KPX Y hyphen -73
+KPX Y i 1
+KPX Y o -71
+KPX Y oslash -69
+KPX Y p -47
+KPX Y period -77
+KPX Y semicolon -67
+KPX Y u -52
+KPX Y v -25
+KPX Z v -17
+KPX Z y -20
+KPX a j 8
+KPX a quoteright 7
+KPX a v -4
+KPX a w -5
+KPX a y -7
+KPX aacute v -4
+KPX aacute w -5
+KPX aacute y -7
+KPX adieresis v -4
+KPX adieresis w -5
+KPX adieresis y -7
+KPX ae v -25
+KPX ae w -24
+KPX ae y -30
+KPX agrave v -4
+KPX agrave w -5
+KPX agrave y -7
+KPX aring v -4
+KPX aring w -5
+KPX aring y -7
+KPX b v -18
+KPX b w -17
+KPX b y -23
+KPX c h -11
+KPX c k -11
+KPX comma one -83
+KPX comma quotedblright -32
+KPX comma quoteright -33
+KPX e quoteright -17
+KPX e t -2
+KPX e v -25
+KPX e w -24
+KPX e x -27
+KPX e y -30
+KPX eacute v -25
+KPX eacute w -24
+KPX eacute y -30
+KPX ecircumflex v -25
+KPX ecircumflex w -24
+KPX ecircumflex y -30
+KPX eight four 10
+KPX eight one -78
+KPX eight seven -52
+KPX f a -10
+KPX f aacute -10
+KPX f adieresis -10
+KPX f ae -11
+KPX f aring -10
+KPX f e -12
+KPX f eacute -12
+KPX f f 11
+KPX f i 3
+KPX f j -6
+KPX f l 3
+KPX f o -13
+KPX f oacute -13
+KPX f odieresis -13
+KPX f oe -12
+KPX f oslash -11
+KPX f quoteright 10
+KPX f s -2
+KPX f t 11
+KPX five four 10
+KPX five one -86
+KPX five seven -58
+KPX four four 15
+KPX four one -78
+KPX four seven -51
+KPX g a 2
+KPX g adieresis 2
+KPX g ae 1
+KPX g aring 2
+KPX g e 0
+KPX g eacute 0
+KPX g l 14
+KPX g oacute 0
+KPX g odieresis 0
+KPX g r 14
+KPX guillemotright A -16
+KPX guillemotright AE -54
+KPX guillemotright Aacute -16
+KPX guillemotright Adieresis -16
+KPX guillemotright Aring -16
+KPX guillemotright T -26
+KPX guillemotright V -47
+KPX guillemotright W -24
+KPX guillemotright Y -66
+KPX guilsinglright A -13
+KPX guilsinglright AE -51
+KPX guilsinglright Aacute -13
+KPX guilsinglright Adieresis -13
+KPX guilsinglright Aring -13
+KPX guilsinglright T -22
+KPX guilsinglright V -44
+KPX guilsinglright W -21
+KPX guilsinglright Y -62
+KPX h quoteright -11
+KPX h y -23
+KPX hyphen A -14
+KPX hyphen AE -53
+KPX hyphen Aacute -14
+KPX hyphen Adieresis -14
+KPX hyphen Aring -14
+KPX hyphen T -24
+KPX hyphen V -46
+KPX hyphen W -23
+KPX hyphen Y -68
+KPX i T -3
+KPX i j 3
+KPX k a -48
+KPX k aacute -48
+KPX k adieresis -48
+KPX k ae -50
+KPX k aring -48
+KPX k comma -15
+KPX k e -51
+KPX k eacute -51
+KPX k g -47
+KPX k hyphen -78
+KPX k o -51
+KPX k oacute -51
+KPX k odieresis -51
+KPX k period -14
+KPX k s -38
+KPX k u -40
+KPX k udieresis -34
+KPX l v -8
+KPX l y -10
+KPX m p 5
+KPX m v -20
+KPX m w -19
+KPX m y -24
+KPX n T -31
+KPX n p 5
+KPX n quoteright -10
+KPX n v -20
+KPX n w -18
+KPX n y -23
+KPX nine four -33
+KPX nine one -76
+KPX nine seven -32
+KPX o T -33
+KPX o quoteright -16
+KPX o t 1
+KPX o v -22
+KPX o w -20
+KPX o x -24
+KPX o y -27
+KPX oacute v -22
+KPX oacute w -20
+KPX oacute y -27
+KPX ocircumflex t 1
+KPX odieresis t 1
+KPX odieresis v -22
+KPX odieresis w -20
+KPX odieresis x -24
+KPX odieresis y -27
+KPX ograve v -22
+KPX ograve w -20
+KPX ograve y -27
+KPX one comma -50
+KPX one eight -50
+KPX one five -45
+KPX one four -60
+KPX one nine -55
+KPX one one -126
+KPX one period -49
+KPX one seven -93
+KPX one six -60
+KPX one three -58
+KPX one two -54
+KPX one zero -36
+KPX p t 1
+KPX p y -26
+KPX period one -83
+KPX period quotedblright -32
+KPX period quoteright -33
+KPX q c 0
+KPX q u 9
+KPX quotedblbase A 17
+KPX quotedblbase AE 0
+KPX quotedblbase T -28
+KPX quotedblbase V -82
+KPX quotedblbase W -52
+KPX quotedblbase Y -80
+KPX quotedblleft A -76
+KPX quotedblleft AE -148
+KPX quotedblleft Aacute -76
+KPX quotedblleft Adieresis -76
+KPX quotedblleft Aring -76
+KPX quotedblleft T 1
+KPX quotedblleft V 7
+KPX quotedblleft W 15
+KPX quotedblleft Y -1
+KPX quotedblright A -78
+KPX quotedblright AE -150
+KPX quotedblright Aacute -78
+KPX quotedblright Adieresis -78
+KPX quotedblright Aring -78
+KPX quotedblright T 0
+KPX quotedblright V 5
+KPX quotedblright W 14
+KPX quotedblright Y -3
+KPX quoteleft A -78
+KPX quoteleft AE -150
+KPX quoteleft Aacute -78
+KPX quoteleft Adieresis -78
+KPX quoteleft Aring -78
+KPX quoteleft T 0
+KPX quoteleft V 4
+KPX quoteleft W 13
+KPX quoteleft Y -4
+KPX quoteright A -81
+KPX quoteright AE -153
+KPX quoteright Aacute -81
+KPX quoteright Adieresis -81
+KPX quoteright Aring -81
+KPX quoteright comma -39
+KPX quoteright d -27
+KPX quoteright o -34
+KPX quoteright period -39
+KPX quoteright r -4
+KPX quoteright s -12
+KPX quoteright t 7
+KPX quoteright v 3
+KPX quoteright w 1
+KPX quoteright y 0
+KPX r a -23
+KPX r aacute -23
+KPX r acircumflex -23
+KPX r adieresis -23
+KPX r ae -24
+KPX r agrave -23
+KPX r aring -23
+KPX r c -25
+KPX r ccedilla -21
+KPX r colon -16
+KPX r comma -33
+KPX r d -21
+KPX r e -25
+KPX r eacute -25
+KPX r ecircumflex -25
+KPX r egrave -25
+KPX r f 11
+KPX r g -18
+KPX r h -10
+KPX r hyphen -37
+KPX r i -9
+KPX r j -19
+KPX r k -10
+KPX r l -10
+KPX r m -10
+KPX r n -10
+KPX r o -25
+KPX r oacute -25
+KPX r ocircumflex -25
+KPX r odieresis -25
+KPX r oe -24
+KPX r ograve -25
+KPX r oslash -26
+KPX r p -11
+KPX r period -33
+KPX r q -20
+KPX r quoteright 10
+KPX r r -10
+KPX r s -8
+KPX r semicolon -16
+KPX r t 11
+KPX r u -12
+KPX r v 12
+KPX r w 8
+KPX r x -1
+KPX r y 10
+KPX r z -9
+KPX s quoteright -3
+KPX s t 6
+KPX seven colon -63
+KPX seven comma -98
+KPX seven eight -46
+KPX seven five -41
+KPX seven four -67
+KPX seven one -77
+KPX seven period -97
+KPX seven seven -33
+KPX seven six -60
+KPX seven three -42
+KPX seven two -28
+KPX six four 16
+KPX six one -85
+KPX six seven -60
+KPX t S 3
+KPX t a -11
+KPX t aacute -11
+KPX t adieresis -11
+KPX t ae -12
+KPX t aring -11
+KPX t colon -14
+KPX t e -13
+KPX t eacute -13
+KPX t h 2
+KPX t o -13
+KPX t oacute -13
+KPX t odieresis -13
+KPX t quoteright 12
+KPX t semicolon -15
+KPX three four 9
+KPX three one -81
+KPX three seven -57
+KPX two four 8
+KPX two one -74
+KPX two seven -36
+KPX u quoteright 4
+KPX v a -31
+KPX v aacute -31
+KPX v acircumflex -31
+KPX v adieresis -31
+KPX v ae -32
+KPX v agrave -31
+KPX v aring -31
+KPX v atilde -31
+KPX v c -34
+KPX v colon -24
+KPX v comma -63
+KPX v e -33
+KPX v eacute -33
+KPX v ecircumflex -33
+KPX v egrave -33
+KPX v g -29
+KPX v hyphen -29
+KPX v l -8
+KPX v o -33
+KPX v oacute -33
+KPX v odieresis -33
+KPX v ograve -33
+KPX v oslash -33
+KPX v period -63
+KPX v s -23
+KPX v semicolon -24
+KPX w a -29
+KPX w aacute -29
+KPX w acircumflex -29
+KPX w adieresis -29
+KPX w ae -30
+KPX w agrave -29
+KPX w aring -29
+KPX w atilde -29
+KPX w c -32
+KPX w colon -27
+KPX w comma -58
+KPX w e -31
+KPX w eacute -31
+KPX w ecircumflex -31
+KPX w egrave -31
+KPX w g -28
+KPX w hyphen -27
+KPX w l -12
+KPX w o -32
+KPX w oacute -32
+KPX w odieresis -32
+KPX w ograve -32
+KPX w oslash -31
+KPX w period -57
+KPX w s -21
+KPX w semicolon -27
+KPX x a -30
+KPX x c -33
+KPX x e -32
+KPX x eacute -32
+KPX x o -32
+KPX x q -30
+KPX y a -38
+KPX y aacute -38
+KPX y acircumflex -38
+KPX y adieresis -38
+KPX y ae -39
+KPX y agrave -38
+KPX y aring -38
+KPX y atilde -38
+KPX y c -41
+KPX y colon -27
+KPX y comma -72
+KPX y e -40
+KPX y eacute -40
+KPX y ecircumflex -40
+KPX y egrave -40
+KPX y g -37
+KPX y hyphen -34
+KPX y l -10
+KPX y o -41
+KPX y oacute -41
+KPX y odieresis -41
+KPX y ograve -41
+KPX y oslash -39
+KPX y period -70
+KPX y s -30
+KPX y semicolon -27
+KPX zero four 12
+KPX zero one -63
+KPX zero seven -34
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagdo8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uagdo8a.pfb
new file mode 100644
index 00000000000..e0f6559e932
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagdo8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagk8a.afm b/Master/tlpkg/tlgs/lib/fonts/uagk8a.afm
new file mode 100644
index 00000000000..bc4cca1ade5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagk8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWGothicL-Book
+FullName URW Gothic L Book
+FamilyName URW Gothic L
+Weight Book
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -96
+UnderlineThickness 58
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -115 -240 1151 976
+CapHeight 739
+XHeight 547
+Descender -192
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 277 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 295 ; N exclam ; B 111 0 185 739 ;
+C 34 ; WX 309 ; N quotedbl ; B 74 513 237 739 ;
+C 35 ; WX 554 ; N numbersign ; B 5 0 549 739 ;
+C 36 ; WX 554 ; N dollar ; B 71 -56 479 810 ;
+C 37 ; WX 775 ; N percent ; B 13 -13 752 749 ;
+C 38 ; WX 757 ; N ampersand ; B 57 -13 735 752 ;
+C 39 ; WX 351 ; N quoteright ; B 91 547 253 739 ;
+C 40 ; WX 369 ; N parenleft ; B 57 -125 335 739 ;
+C 41 ; WX 369 ; N parenright ; B 34 -125 312 739 ;
+C 42 ; WX 425 ; N asterisk ; B 64 468 360 752 ;
+C 43 ; WX 606 ; N plus ; B 51 49 555 557 ;
+C 44 ; WX 277 ; N comma ; B 91 -67 253 126 ;
+C 45 ; WX 332 ; N hyphen ; B 31 233 302 296 ;
+C 46 ; WX 277 ; N period ; B 101 0 175 126 ;
+C 47 ; WX 437 ; N slash ; B 40 -128 397 739 ;
+C 48 ; WX 554 ; N zero ; B 30 -13 525 752 ;
+C 49 ; WX 554 ; N one ; B 155 0 354 739 ;
+C 50 ; WX 554 ; N two ; B 33 0 506 752 ;
+C 51 ; WX 554 ; N three ; B 33 -13 504 752 ;
+C 52 ; WX 554 ; N four ; B 12 0 527 739 ;
+C 53 ; WX 554 ; N five ; B 26 -13 528 739 ;
+C 54 ; WX 554 ; N six ; B 25 -13 529 739 ;
+C 55 ; WX 554 ; N seven ; B 64 0 490 739 ;
+C 56 ; WX 554 ; N eight ; B 42 -13 512 752 ;
+C 57 ; WX 554 ; N nine ; B 25 0 529 752 ;
+C 58 ; WX 277 ; N colon ; B 101 0 175 507 ;
+C 59 ; WX 277 ; N semicolon ; B 41 -67 203 507 ;
+C 60 ; WX 606 ; N less ; B 49 37 558 565 ;
+C 61 ; WX 606 ; N equal ; B 51 164 555 436 ;
+C 62 ; WX 606 ; N greater ; B 48 37 557 565 ;
+C 63 ; WX 591 ; N question ; B 65 0 525 752 ;
+C 64 ; WX 867 ; N at ; B 71 -13 797 752 ;
+C 65 ; WX 740 ; N A ; B 11 0 729 739 ;
+C 66 ; WX 574 ; N B ; B 76 0 544 739 ;
+C 67 ; WX 813 ; N C ; B 44 -13 770 752 ;
+C 68 ; WX 744 ; N D ; B 76 0 700 739 ;
+C 69 ; WX 536 ; N E ; B 76 0 480 739 ;
+C 70 ; WX 485 ; N F ; B 76 0 451 739 ;
+C 71 ; WX 872 ; N G ; B 44 -13 831 752 ;
+C 72 ; WX 683 ; N H ; B 76 0 607 739 ;
+C 73 ; WX 226 ; N I ; B 76 0 150 739 ;
+C 74 ; WX 482 ; N J ; B 11 -14 406 739 ;
+C 75 ; WX 591 ; N K ; B 76 0 585 739 ;
+C 76 ; WX 462 ; N L ; B 76 0 456 739 ;
+C 77 ; WX 919 ; N M ; B 76 0 843 739 ;
+C 78 ; WX 740 ; N N ; B 76 0 664 739 ;
+C 79 ; WX 869 ; N O ; B 44 -13 825 752 ;
+C 80 ; WX 592 ; N P ; B 76 0 565 739 ;
+C 81 ; WX 871 ; N Q ; B 44 -13 839 752 ;
+C 82 ; WX 607 ; N R ; B 76 0 577 739 ;
+C 83 ; WX 498 ; N S ; B 22 -13 476 752 ;
+C 84 ; WX 426 ; N T ; B 7 0 419 739 ;
+C 85 ; WX 655 ; N U ; B 76 -13 579 739 ;
+C 86 ; WX 702 ; N V ; B 10 0 692 739 ;
+C 87 ; WX 960 ; N W ; B 10 0 950 739 ;
+C 88 ; WX 609 ; N X ; B 8 0 601 739 ;
+C 89 ; WX 592 ; N Y ; B 2 0 590 739 ;
+C 90 ; WX 480 ; N Z ; B 17 0 474 739 ;
+C 91 ; WX 351 ; N bracketleft ; B 112 -125 313 739 ;
+C 92 ; WX 605 ; N backslash ; B 84 0 464 739 ;
+C 93 ; WX 351 ; N bracketright ; B 38 -125 239 739 ;
+C 94 ; WX 606 ; N asciicircum ; B 18 180 588 739 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -67 ;
+C 96 ; WX 351 ; N quoteleft ; B 98 547 260 739 ;
+C 97 ; WX 683 ; N a ; B 42 -13 620 560 ;
+C 98 ; WX 682 ; N b ; B 63 -13 640 739 ;
+C 99 ; WX 647 ; N c ; B 42 -13 608 560 ;
+C 100 ; WX 685 ; N d ; B 42 -13 622 739 ;
+C 101 ; WX 650 ; N e ; B 42 -13 611 560 ;
+C 102 ; WX 314 ; N f ; B 16 0 311 739 ;
+C 103 ; WX 673 ; N g ; B 42 -215 610 560 ;
+C 104 ; WX 610 ; N h ; B 63 0 547 739 ;
+C 105 ; WX 200 ; N i ; B 63 0 137 739 ;
+C 106 ; WX 203 ; N j ; B -45 -192 140 739 ;
+C 107 ; WX 502 ; N k ; B 63 0 497 739 ;
+C 108 ; WX 200 ; N l ; B 63 0 137 739 ;
+C 109 ; WX 938 ; N m ; B 63 0 875 561 ;
+C 110 ; WX 610 ; N n ; B 63 0 547 560 ;
+C 111 ; WX 655 ; N o ; B 42 -13 613 560 ;
+C 112 ; WX 682 ; N p ; B 63 -192 640 560 ;
+C 113 ; WX 682 ; N q ; B 42 -192 619 560 ;
+C 114 ; WX 301 ; N r ; B 63 0 292 560 ;
+C 115 ; WX 388 ; N s ; B 18 -13 361 560 ;
+C 116 ; WX 339 ; N t ; B 12 0 327 739 ;
+C 117 ; WX 608 ; N u ; B 63 -13 545 547 ;
+C 118 ; WX 554 ; N v ; B 8 0 546 547 ;
+C 119 ; WX 831 ; N w ; B 7 0 824 547 ;
+C 120 ; WX 480 ; N x ; B 8 0 472 547 ;
+C 121 ; WX 536 ; N y ; B 9 -192 527 547 ;
+C 122 ; WX 425 ; N z ; B 10 0 415 547 ;
+C 123 ; WX 351 ; N braceleft ; B 37 -126 271 739 ;
+C 124 ; WX 672 ; N bar ; B 304 0 368 739 ;
+C 125 ; WX 351 ; N braceright ; B 38 -126 269 739 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 210 555 390 ;
+C 161 ; WX 295 ; N exclamdown ; B 111 -192 185 547 ;
+C 162 ; WX 554 ; N cent ; B 45 62 509 707 ;
+C 163 ; WX 554 ; N sterling ; B 18 0 592 752 ;
+C 164 ; WX 166 ; N fraction ; B -115 0 281 739 ;
+C 165 ; WX 554 ; N yen ; B 0 0 589 739 ;
+C 166 ; WX 554 ; N florin ; B 18 -153 546 818 ;
+C 167 ; WX 615 ; N section ; B 87 -141 529 752 ;
+C 168 ; WX 554 ; N currency ; B 26 50 528 553 ;
+C 169 ; WX 198 ; N quotesingle ; B 74 513 124 739 ;
+C 170 ; WX 502 ; N quotedblleft ; B 96 547 406 739 ;
+C 171 ; WX 425 ; N guillemotleft ; B 40 99 385 499 ;
+C 172 ; WX 251 ; N guilsinglleft ; B 40 99 211 499 ;
+C 173 ; WX 251 ; N guilsinglright ; B 40 99 211 499 ;
+C 174 ; WX 487 ; N fi ; B 13 0 424 739 ;
+C 175 ; WX 485 ; N fl ; B 13 0 422 739 ;
+C 177 ; WX 500 ; N endash ; B 0 233 500 296 ;
+C 178 ; WX 553 ; N dagger ; B 59 -133 494 739 ;
+C 179 ; WX 553 ; N daggerdbl ; B 59 -133 494 739 ;
+C 180 ; WX 277 ; N periodcentered ; B 101 229 175 355 ;
+C 182 ; WX 564 ; N paragraph ; B 37 -133 491 739 ;
+C 183 ; WX 606 ; N bullet ; B 118 118 488 488 ;
+C 184 ; WX 354 ; N quotesinglbase ; B 89 -67 251 126 ;
+C 185 ; WX 502 ; N quotedblbase ; B 89 -67 398 126 ;
+C 186 ; WX 484 ; N quotedblright ; B 87 547 393 739 ;
+C 187 ; WX 425 ; N guillemotright ; B 40 99 385 499 ;
+C 188 ; WX 1000 ; N ellipsis ; B 130 0 870 126 ;
+C 189 ; WX 1174 ; N perthousand ; B 13 -13 1151 749 ;
+C 191 ; WX 591 ; N questiondown ; B 66 -205 526 547 ;
+C 193 ; WX 378 ; N grave ; B 74 610 304 776 ;
+C 194 ; WX 375 ; N acute ; B 74 610 301 782 ;
+C 195 ; WX 502 ; N circumflex ; B 74 623 428 749 ;
+C 196 ; WX 439 ; N tilde ; B 75 633 365 728 ;
+C 197 ; WX 485 ; N macron ; B 74 643 411 707 ;
+C 198 ; WX 453 ; N breve ; B 74 623 378 743 ;
+C 199 ; WX 222 ; N dotaccent ; B 74 623 148 749 ;
+C 200 ; WX 369 ; N dieresis ; B 74 623 295 749 ;
+C 202 ; WX 332 ; N ring ; B 74 610 258 794 ;
+C 203 ; WX 324 ; N cedilla ; B 74 -213 250 0 ;
+C 205 ; WX 552 ; N hungarumlaut ; B 74 610 479 780 ;
+C 206 ; WX 302 ; N ogonek ; B 74 -191 228 0 ;
+C 207 ; WX 502 ; N caron ; B 74 623 428 749 ;
+C 208 ; WX 1000 ; N emdash ; B 0 233 1000 296 ;
+C 225 ; WX 992 ; N AE ; B 11 0 936 739 ;
+C 227 ; WX 369 ; N ordfeminine ; B 31 319 339 745 ;
+C 232 ; WX 517 ; N Lslash ; B 26 0 502 739 ;
+C 233 ; WX 868 ; N Oslash ; B 44 -83 824 821 ;
+C 234 ; WX 1194 ; N OE ; B 44 -13 1138 752 ;
+C 235 ; WX 369 ; N ordmasculine ; B 32 319 337 745 ;
+C 241 ; WX 1157 ; N ae ; B 42 -13 1118 560 ;
+C 245 ; WX 200 ; N dotlessi ; B 63 0 137 547 ;
+C 248 ; WX 300 ; N lslash ; B 36 0 270 739 ;
+C 249 ; WX 653 ; N oslash ; B 42 -39 611 594 ;
+C 250 ; WX 1137 ; N oe ; B 42 -13 1098 560 ;
+C 251 ; WX 554 ; N germandbls ; B 59 -13 524 752 ;
+C -1 ; WX 655 ; N Udieresis ; B 76 -13 579 931 ;
+C -1 ; WX 655 ; N Uacute ; B 76 -13 579 964 ;
+C -1 ; WX 498 ; N Scedilla ; B 22 -213 476 752 ;
+C -1 ; WX 426 ; N Tcaron ; B 7 0 419 931 ;
+C -1 ; WX 498 ; N Scaron ; B 22 -13 476 931 ;
+C -1 ; WX 607 ; N Rcaron ; B 76 0 577 931 ;
+C -1 ; WX 607 ; N Racute ; B 76 0 577 964 ;
+C -1 ; WX 498 ; N Sacute ; B 22 -13 476 964 ;
+C -1 ; WX 869 ; N Otilde ; B 44 -13 825 910 ;
+C -1 ; WX 608 ; N ucircumflex ; B 63 -13 545 749 ;
+C -1 ; WX 869 ; N Ohungarumlaut ; B 44 -13 825 962 ;
+C -1 ; WX 655 ; N Uhungarumlaut ; B 76 -13 579 962 ;
+C -1 ; WX 592 ; N Yacute ; B 2 0 590 964 ;
+C -1 ; WX 790 ; N Eth ; B 26 0 746 739 ;
+C -1 ; WX 790 ; N Dcroat ; B 26 0 746 739 ;
+C -1 ; WX 480 ; N Zacute ; B 17 0 474 964 ;
+C -1 ; WX 655 ; N Uring ; B 76 -13 579 976 ;
+C -1 ; WX 673 ; N gbreve ; B 42 -215 610 743 ;
+C -1 ; WX 650 ; N eogonek ; B 42 -191 611 560 ;
+C -1 ; WX 650 ; N edotaccent ; B 42 -13 611 749 ;
+C -1 ; WX 650 ; N ecaron ; B 42 -13 611 749 ;
+C -1 ; WX 655 ; N Ugrave ; B 76 -13 579 958 ;
+C -1 ; WX 592 ; N Thorn ; B 76 0 565 739 ;
+C -1 ; WX 650 ; N eacute ; B 42 -13 611 782 ;
+C -1 ; WX 650 ; N edieresis ; B 42 -13 611 749 ;
+C -1 ; WX 725 ; N dcaron ; B 42 -13 765 739 ;
+C -1 ; WX 647 ; N ccedilla ; B 42 -224 608 560 ;
+C -1 ; WX 647 ; N ccaron ; B 42 -13 608 749 ;
+C -1 ; WX 647 ; N cacute ; B 42 -13 608 782 ;
+C -1 ; WX 683 ; N aogonek ; B 42 -191 651 560 ;
+C -1 ; WX 683 ; N aring ; B 42 -13 620 794 ;
+C -1 ; WX 683 ; N atilde ; B 42 -13 620 728 ;
+C -1 ; WX 683 ; N abreve ; B 42 -13 620 743 ;
+C -1 ; WX 650 ; N egrave ; B 42 -13 611 776 ;
+C -1 ; WX 683 ; N agrave ; B 42 -13 620 776 ;
+C -1 ; WX 683 ; N aacute ; B 42 -13 620 782 ;
+C -1 ; WX 683 ; N adieresis ; B 42 -13 620 749 ;
+C -1 ; WX 655 ; N Uogonek ; B 76 -191 579 739 ;
+C -1 ; WX 608 ; N ugrave ; B 63 -13 545 776 ;
+C -1 ; WX 608 ; N uacute ; B 63 -13 545 782 ;
+C -1 ; WX 608 ; N udieresis ; B 63 -13 545 749 ;
+C -1 ; WX 339 ; N tcaron ; B 12 0 379 739 ;
+C -1 ; WX 388 ; N scommaaccent ; B 18 -225 361 560 ;
+C -1 ; WX 480 ; N Zcaron ; B 17 0 474 931 ;
+C -1 ; WX 650 ; N ecircumflex ; B 42 -13 611 749 ;
+C -1 ; WX 655 ; N Ucircumflex ; B 76 -13 579 931 ;
+C -1 ; WX 683 ; N acircumflex ; B 42 -13 620 749 ;
+C -1 ; WX 480 ; N Zdotaccent ; B 17 0 474 931 ;
+C -1 ; WX 388 ; N scaron ; B 17 -13 371 749 ;
+C -1 ; WX 740 ; N Amacron ; B 11 0 729 889 ;
+C -1 ; WX 388 ; N sacute ; B 18 -13 361 782 ;
+C -1 ; WX 426 ; N Tcommaaccent ; B 7 -225 419 739 ;
+C -1 ; WX 592 ; N Ydieresis ; B 2 0 590 931 ;
+C -1 ; WX 682 ; N thorn ; B 63 -192 640 739 ;
+C -1 ; WX 536 ; N Emacron ; B 76 0 480 889 ;
+C -1 ; WX 869 ; N Ograve ; B 44 -13 825 958 ;
+C -1 ; WX 869 ; N Oacute ; B 44 -13 825 964 ;
+C -1 ; WX 869 ; N Odieresis ; B 44 -13 825 931 ;
+C -1 ; WX 740 ; N Ntilde ; B 76 0 664 910 ;
+C -1 ; WX 740 ; N Ncaron ; B 76 0 664 931 ;
+C -1 ; WX 740 ; N Nacute ; B 76 0 664 964 ;
+C -1 ; WX 462 ; N Lcaron ; B 76 0 456 739 ;
+C -1 ; WX 462 ; N Lacute ; B 76 0 456 964 ;
+C -1 ; WX 226 ; N Idotaccent ; B 76 0 150 931 ;
+C -1 ; WX 301 ; N racute ; B 63 0 324 782 ;
+C -1 ; WX 226 ; N Icircumflex ; B -64 0 290 931 ;
+C -1 ; WX 655 ; N ohungarumlaut ; B 42 -13 613 780 ;
+C -1 ; WX 655 ; N otilde ; B 42 -13 613 728 ;
+C -1 ; WX 554 ; N Euro ; B -32 -13 573 752 ;
+C -1 ; WX 655 ; N ocircumflex ; B 42 -13 613 749 ;
+C -1 ; WX 332 ; N onesuperior ; B 98 288 233 739 ;
+C -1 ; WX 332 ; N twosuperior ; B 12 288 320 747 ;
+C -1 ; WX 332 ; N threesuperior ; B 13 280 319 747 ;
+C -1 ; WX 226 ; N Igrave ; B -2 0 228 958 ;
+C -1 ; WX 226 ; N Iacute ; B -1 0 226 964 ;
+C -1 ; WX 226 ; N Imacron ; B -56 0 281 889 ;
+C -1 ; WX 226 ; N Iogonek ; B 27 -191 181 739 ;
+C -1 ; WX 226 ; N Idieresis ; B 3 0 224 931 ;
+C -1 ; WX 872 ; N Gbreve ; B 44 -13 831 925 ;
+C -1 ; WX 655 ; N Umacron ; B 76 -13 579 889 ;
+C -1 ; WX 591 ; N Kcommaaccent ; B 76 -225 585 739 ;
+C -1 ; WX 655 ; N ograve ; B 42 -13 613 776 ;
+C -1 ; WX 498 ; N Scommaaccent ; B 22 -225 476 752 ;
+C -1 ; WX 536 ; N Eogonek ; B 76 -191 511 739 ;
+C -1 ; WX 655 ; N oacute ; B 42 -13 613 782 ;
+C -1 ; WX 536 ; N Edotaccent ; B 76 0 480 931 ;
+C -1 ; WX 200 ; N iogonek ; B 14 -191 168 739 ;
+C -1 ; WX 673 ; N gcommaaccent ; B 42 -215 610 790 ;
+C -1 ; WX 655 ; N odieresis ; B 42 -13 613 749 ;
+C -1 ; WX 610 ; N ntilde ; B 63 0 547 728 ;
+C -1 ; WX 610 ; N ncaron ; B 63 0 547 749 ;
+C -1 ; WX 536 ; N Ecaron ; B 76 0 480 931 ;
+C -1 ; WX 536 ; N Ecircumflex ; B 76 0 480 931 ;
+C -1 ; WX 388 ; N scedilla ; B 17 -213 361 560 ;
+C -1 ; WX 301 ; N rcaron ; B 10 0 364 749 ;
+C -1 ; WX 536 ; N Egrave ; B 76 0 480 958 ;
+C -1 ; WX 536 ; N Eacute ; B 76 0 480 964 ;
+C -1 ; WX 872 ; N Gcommaaccent ; B 44 -225 831 752 ;
+C -1 ; WX 607 ; N Rcommaaccent ; B 76 -225 577 739 ;
+C -1 ; WX 536 ; N Edieresis ; B 76 0 480 931 ;
+C -1 ; WX 610 ; N nacute ; B 63 0 547 782 ;
+C -1 ; WX 608 ; N uogonek ; B 63 -191 576 547 ;
+C -1 ; WX 608 ; N umacron ; B 63 -13 545 707 ;
+C -1 ; WX 744 ; N Dcaron ; B 76 0 700 931 ;
+C -1 ; WX 245 ; N lcaron ; B 63 0 285 739 ;
+C -1 ; WX 813 ; N Ccaron ; B 44 -13 770 931 ;
+C -1 ; WX 813 ; N Cacute ; B 44 -13 770 964 ;
+C -1 ; WX 813 ; N Ccedilla ; B 44 -240 770 752 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 740 ; N Aogonek ; B 11 -191 760 739 ;
+C -1 ; WX 606 ; N minus ; B 51 267 555 341 ;
+C -1 ; WX 606 ; N multiply ; B 51 48 555 551 ;
+C -1 ; WX 606 ; N divide ; B 51 112 555 496 ;
+C -1 ; WX 740 ; N Aring ; B 11 0 729 976 ;
+C -1 ; WX 1000 ; N trademark ; B 63 340 938 739 ;
+C -1 ; WX 301 ; N rcommaaccent ; B 63 -225 292 560 ;
+C -1 ; WX 200 ; N lacute ; B -14 0 213 964 ;
+C -1 ; WX 655 ; N omacron ; B 42 -13 613 707 ;
+C -1 ; WX 740 ; N Atilde ; B 11 0 729 910 ;
+C -1 ; WX 200 ; N icircumflex ; B -77 0 277 749 ;
+C -1 ; WX 200 ; N igrave ; B -15 0 215 776 ;
+C -1 ; WX 610 ; N ncommaaccent ; B 63 -225 547 560 ;
+C -1 ; WX 200 ; N lcommaaccent ; B 26 -225 148 739 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 585 ;
+C -1 ; WX 831 ; N onehalf ; B 96 0 814 739 ;
+C -1 ; WX 831 ; N onequarter ; B 101 0 803 739 ;
+C -1 ; WX 831 ; N threequarters ; B 13 0 803 747 ;
+C -1 ; WX 200 ; N iacute ; B -13 0 214 782 ;
+C -1 ; WX 740 ; N Abreve ; B 11 0 729 925 ;
+C -1 ; WX 502 ; N kcommaaccent ; B 63 -225 497 739 ;
+C -1 ; WX 869 ; N Omacron ; B 44 -13 825 889 ;
+C -1 ; WX 200 ; N imacron ; B -69 0 268 707 ;
+C -1 ; WX 650 ; N emacron ; B 42 -13 611 707 ;
+C -1 ; WX 683 ; N amacron ; B 42 -13 620 707 ;
+C -1 ; WX 339 ; N tcommaaccent ; B 12 -225 327 739 ;
+C -1 ; WX 536 ; N ydieresis ; B 9 -192 527 749 ;
+C -1 ; WX 425 ; N zdotaccent ; B 10 0 415 749 ;
+C -1 ; WX 425 ; N zcaron ; B 10 0 415 749 ;
+C -1 ; WX 425 ; N zacute ; B 10 0 415 782 ;
+C -1 ; WX 536 ; N yacute ; B 9 -192 527 782 ;
+C -1 ; WX 608 ; N uhungarumlaut ; B 63 -13 547 780 ;
+C -1 ; WX 655 ; N eth ; B 42 -13 613 756 ;
+C -1 ; WX 608 ; N uring ; B 63 -13 545 794 ;
+C -1 ; WX 869 ; N Ocircumflex ; B 44 -13 825 931 ;
+C -1 ; WX 351 ; N commaaccent ; B 101 -225 223 -53 ;
+C -1 ; WX 747 ; N copyright ; B -9 -13 755 752 ;
+C -1 ; WX 747 ; N registered ; B -9 -13 755 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 11 0 729 931 ;
+C -1 ; WX 200 ; N idieresis ; B -10 0 211 749 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 549 ; N notequal ; B 25 42 529 558 ;
+C -1 ; WX 549 ; N radical ; B 10 -35 515 913 ;
+C -1 ; WX 740 ; N Agrave ; B 11 0 729 958 ;
+C -1 ; WX 740 ; N Aacute ; B 11 0 729 964 ;
+C -1 ; WX 549 ; N lessequal ; B 26 0 530 646 ;
+C -1 ; WX 549 ; N greaterequal ; B 26 0 530 646 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 148 555 436 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 76 -225 664 739 ;
+C -1 ; WX 685 ; N dcroat ; B 42 -13 685 739 ;
+C -1 ; WX 672 ; N brokenbar ; B 304 0 368 739 ;
+C -1 ; WX 462 ; N Lcommaaccent ; B 76 -225 456 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 11 0 729 931 ;
+C -1 ; WX 608 ; N mu ; B 63 -192 545 547 ;
+C -1 ; WX 277 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -37
+KPX A G -38
+KPX A O -38
+KPX A Odieresis -38
+KPX A Q -38
+KPX A T -50
+KPX A U -29
+KPX A Uacute -29
+KPX A Ucircumflex -29
+KPX A Udieresis -29
+KPX A Ugrave -29
+KPX A V -72
+KPX A W -47
+KPX A Y -77
+KPX A a -20
+KPX A b 5
+KPX A c -22
+KPX A ccedilla -22
+KPX A comma -5
+KPX A d -21
+KPX A e -21
+KPX A g -23
+KPX A guillemotleft -22
+KPX A guilsinglleft -22
+KPX A hyphen 13
+KPX A o -20
+KPX A period 13
+KPX A q -21
+KPX A quotedblright -90
+KPX A quoteright -92
+KPX A t -28
+KPX A u -15
+KPX A v -39
+KPX A w -33
+KPX A y -37
+KPX Aacute C -36
+KPX Aacute G -38
+KPX Aacute O -38
+KPX Aacute Q -38
+KPX Aacute T -50
+KPX Aacute U -29
+KPX Aacute V -72
+KPX Aacute W -47
+KPX Aacute Y -77
+KPX Aacute a -20
+KPX Aacute b 5
+KPX Aacute c -22
+KPX Aacute comma -5
+KPX Aacute d -21
+KPX Aacute e -21
+KPX Aacute g -23
+KPX Aacute guillemotleft -22
+KPX Aacute guilsinglleft -22
+KPX Aacute hyphen 13
+KPX Aacute o -20
+KPX Aacute period 13
+KPX Aacute q -21
+KPX Aacute quoteright -92
+KPX Aacute t -28
+KPX Aacute u -15
+KPX Aacute v -39
+KPX Aacute w -33
+KPX Aacute y -37
+KPX Acircumflex C -36
+KPX Acircumflex G -38
+KPX Acircumflex O -38
+KPX Acircumflex Q -38
+KPX Acircumflex T -50
+KPX Acircumflex U -29
+KPX Acircumflex V -72
+KPX Acircumflex W -47
+KPX Acircumflex Y -77
+KPX Acircumflex comma -5
+KPX Acircumflex period 13
+KPX Adieresis C -36
+KPX Adieresis G -38
+KPX Adieresis O -38
+KPX Adieresis Q -38
+KPX Adieresis T -50
+KPX Adieresis U -29
+KPX Adieresis V -72
+KPX Adieresis W -47
+KPX Adieresis Y -77
+KPX Adieresis a -20
+KPX Adieresis b 5
+KPX Adieresis c -22
+KPX Adieresis comma -5
+KPX Adieresis d -21
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -22
+KPX Adieresis guilsinglleft -22
+KPX Adieresis hyphen 13
+KPX Adieresis o -20
+KPX Adieresis period 13
+KPX Adieresis q -21
+KPX Adieresis quotedblright -90
+KPX Adieresis quoteright -92
+KPX Adieresis t -28
+KPX Adieresis u -15
+KPX Adieresis v -39
+KPX Adieresis w -33
+KPX Adieresis y -37
+KPX Agrave C -36
+KPX Agrave G -38
+KPX Agrave O -38
+KPX Agrave Q -38
+KPX Agrave T -50
+KPX Agrave U -29
+KPX Agrave V -72
+KPX Agrave W -47
+KPX Agrave Y -77
+KPX Agrave comma -5
+KPX Agrave period 13
+KPX Aring C -36
+KPX Aring G -38
+KPX Aring O -38
+KPX Aring Q -38
+KPX Aring T -50
+KPX Aring U -29
+KPX Aring V -72
+KPX Aring W -47
+KPX Aring Y -77
+KPX Aring a -20
+KPX Aring b 5
+KPX Aring c -22
+KPX Aring comma -5
+KPX Aring d -21
+KPX Aring e -21
+KPX Aring g -23
+KPX Aring guillemotleft -22
+KPX Aring guilsinglleft -22
+KPX Aring hyphen 13
+KPX Aring o -20
+KPX Aring period 13
+KPX Aring q -21
+KPX Aring quotedblright -90
+KPX Aring quoteright -92
+KPX Aring t -28
+KPX Aring u -15
+KPX Aring v -39
+KPX Aring w -33
+KPX Aring y -37
+KPX Atilde C -36
+KPX Atilde G -38
+KPX Atilde O -38
+KPX Atilde Q -38
+KPX Atilde T -50
+KPX Atilde U -29
+KPX Atilde V -72
+KPX Atilde W -47
+KPX Atilde Y -77
+KPX Atilde comma -5
+KPX Atilde period 13
+KPX B A -8
+KPX B AE -21
+KPX B Aacute -8
+KPX B Acircumflex -8
+KPX B Adieresis -8
+KPX B Aring -8
+KPX B Atilde -8
+KPX B O 6
+KPX B OE 7
+KPX B Oacute 6
+KPX B Ocircumflex 6
+KPX B Odieresis 6
+KPX B Ograve 6
+KPX B Oslash 9
+KPX B V -24
+KPX B W -2
+KPX B Y -26
+KPX C A -22
+KPX C AE -45
+KPX C Aacute -22
+KPX C Adieresis -22
+KPX C Aring -22
+KPX C H 0
+KPX C K 0
+KPX C O -18
+KPX C Oacute -18
+KPX C Odieresis -18
+KPX Ccedilla A -22
+KPX D A -37
+KPX D Aacute -37
+KPX D Acircumflex -37
+KPX D Adieresis -37
+KPX D Agrave -37
+KPX D Aring -37
+KPX D Atilde -37
+KPX D J -5
+KPX D T -40
+KPX D V -36
+KPX D W -14
+KPX D X -29
+KPX D Y -44
+KPX F A -56
+KPX F Aacute -56
+KPX F Acircumflex -56
+KPX F Adieresis -56
+KPX F Agrave -56
+KPX F Aring -56
+KPX F Atilde -56
+KPX F J -55
+KPX F O 0
+KPX F Odieresis 0
+KPX F a -3
+KPX F aacute -3
+KPX F adieresis -3
+KPX F ae -3
+KPX F aring -3
+KPX F comma -98
+KPX F e -3
+KPX F eacute -3
+KPX F hyphen 23
+KPX F i -5
+KPX F j -7
+KPX F o -3
+KPX F oacute -3
+KPX F odieresis -3
+KPX F oe -3
+KPX F oslash -5
+KPX F period -80
+KPX F r -11
+KPX F u -11
+KPX G A -40
+KPX G AE -64
+KPX G Aacute -40
+KPX G Acircumflex -40
+KPX G Adieresis -40
+KPX G Agrave -40
+KPX G Aring -40
+KPX G Atilde -40
+KPX G T -45
+KPX G V -43
+KPX G W -22
+KPX G Y -48
+KPX J A -27
+KPX J AE -39
+KPX J Adieresis -27
+KPX J Aring -27
+KPX K C -36
+KPX K G -38
+KPX K O -38
+KPX K OE -37
+KPX K Oacute -38
+KPX K Odieresis -38
+KPX K S -16
+KPX K T 37
+KPX K a -44
+KPX K adieresis -44
+KPX K ae -44
+KPX K aring -44
+KPX K e -45
+KPX K hyphen -29
+KPX K o -44
+KPX K oacute -44
+KPX K odieresis -44
+KPX K u -38
+KPX K udieresis -38
+KPX K y -44
+KPX L A 34
+KPX L AE 34
+KPX L Aacute 34
+KPX L Adieresis 34
+KPX L Aring 34
+KPX L C -46
+KPX L Ccedilla -49
+KPX L G -48
+KPX L O -49
+KPX L Oacute -49
+KPX L Ocircumflex -49
+KPX L Odieresis -49
+KPX L Ograve -49
+KPX L Otilde -49
+KPX L S 7
+KPX L T -47
+KPX L U -25
+KPX L Udieresis -25
+KPX L V -100
+KPX L W -59
+KPX L Y -88
+KPX L hyphen -79
+KPX L quotedblright -114
+KPX L quoteright -116
+KPX L u -14
+KPX L udieresis -14
+KPX L y -59
+KPX N A 0
+KPX N AE -1
+KPX N Aacute 0
+KPX N Adieresis 0
+KPX N Aring 0
+KPX N C 10
+KPX N Ccedilla 11
+KPX N G 9
+KPX N O 9
+KPX N Oacute 9
+KPX N Odieresis 9
+KPX N a 8
+KPX N aacute 8
+KPX N adieresis 8
+KPX N ae 7
+KPX N aring 8
+KPX N comma -15
+KPX N e 7
+KPX N eacute 7
+KPX N o 8
+KPX N oacute 8
+KPX N odieresis 8
+KPX N oslash 9
+KPX N period 3
+KPX N u 13
+KPX N udieresis 13
+KPX O A -39
+KPX O AE -68
+KPX O Aacute -39
+KPX O Adieresis -39
+KPX O Aring -39
+KPX O T -42
+KPX O V -38
+KPX O W -16
+KPX O X -31
+KPX O Y -46
+KPX Oacute A -39
+KPX Oacute T -42
+KPX Oacute V -38
+KPX Oacute W -16
+KPX Oacute Y -46
+KPX Ocircumflex T -42
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -46
+KPX Odieresis A -39
+KPX Odieresis T -42
+KPX Odieresis V -38
+KPX Odieresis W -16
+KPX Odieresis X -31
+KPX Odieresis Y -46
+KPX Ograve T -42
+KPX Ograve V -38
+KPX Ograve Y -46
+KPX Oslash A -36
+KPX Otilde T -42
+KPX Otilde V -38
+KPX Otilde Y -46
+KPX P A -61
+KPX P AE -108
+KPX P Aacute -61
+KPX P Adieresis -61
+KPX P Aring -61
+KPX P J -68
+KPX P a -16
+KPX P aacute -16
+KPX P adieresis -16
+KPX P ae -16
+KPX P aring -16
+KPX P comma -125
+KPX P e -15
+KPX P eacute -15
+KPX P hyphen -4
+KPX P o -15
+KPX P oacute -15
+KPX P odieresis -15
+KPX P oe -15
+KPX P oslash -19
+KPX P period -106
+KPX R C 2
+KPX R Ccedilla 3
+KPX R G 1
+KPX R O 2
+KPX R OE 2
+KPX R Oacute 2
+KPX R Odieresis 2
+KPX R T -4
+KPX R U 11
+KPX R Udieresis 11
+KPX R V -11
+KPX R W -3
+KPX R Y -14
+KPX R a -7
+KPX R aacute -7
+KPX R adieresis -7
+KPX R ae -7
+KPX R aring -7
+KPX R e -7
+KPX R eacute -7
+KPX R hyphen 3
+KPX R o -7
+KPX R oacute -7
+KPX R odieresis -7
+KPX R oe -7
+KPX R u 7
+KPX R uacute 7
+KPX R udieresis 7
+KPX R y 20
+KPX S A -5
+KPX S AE -16
+KPX S Aacute -5
+KPX S Adieresis -5
+KPX S Aring -5
+KPX S T 3
+KPX S V -9
+KPX S W 3
+KPX S Y -10
+KPX S t 17
+KPX T A -50
+KPX T AE -51
+KPX T Aacute -50
+KPX T Acircumflex -50
+KPX T Adieresis -50
+KPX T Agrave -50
+KPX T Aring -50
+KPX T Atilde -50
+KPX T C -40
+KPX T G -41
+KPX T J -49
+KPX T O -42
+KPX T OE -40
+KPX T Oacute -42
+KPX T Ocircumflex -42
+KPX T Odieresis -42
+KPX T Ograve -42
+KPX T Oslash -38
+KPX T Otilde -42
+KPX T S 0
+KPX T V 34
+KPX T W 35
+KPX T Y 38
+KPX T a -48
+KPX T ae -48
+KPX T c -49
+KPX T colon -53
+KPX T comma -65
+KPX T e -48
+KPX T g -48
+KPX T guillemotleft -42
+KPX T guilsinglleft -42
+KPX T hyphen -11
+KPX T i 8
+KPX T j 6
+KPX T o -48
+KPX T oslash -45
+KPX T period -47
+KPX T r -33
+KPX T s -32
+KPX T semicolon -62
+KPX T u -40
+KPX T v -50
+KPX T w -49
+KPX T y -50
+KPX U A -30
+KPX U AE -50
+KPX U Aacute -30
+KPX U Acircumflex -30
+KPX U Adieresis -30
+KPX U Aring -30
+KPX U Atilde -30
+KPX U comma -36
+KPX U m 13
+KPX U n 13
+KPX U p 13
+KPX U period -15
+KPX U r 13
+KPX Uacute A -30
+KPX Uacute comma -36
+KPX Uacute m 13
+KPX Uacute n 13
+KPX Uacute p 13
+KPX Uacute period -15
+KPX Uacute r 13
+KPX Ucircumflex A -30
+KPX Udieresis A -30
+KPX Udieresis b 13
+KPX Udieresis comma -36
+KPX Udieresis m 13
+KPX Udieresis n 13
+KPX Udieresis p 13
+KPX Udieresis period -15
+KPX Udieresis r 13
+KPX Ugrave A -30
+KPX V A -72
+KPX V AE -118
+KPX V Aacute -72
+KPX V Acircumflex -72
+KPX V Adieresis -72
+KPX V Agrave -72
+KPX V Aring -72
+KPX V Atilde -72
+KPX V C -37
+KPX V G -38
+KPX V O -39
+KPX V Oacute -39
+KPX V Ocircumflex -39
+KPX V Odieresis -39
+KPX V Ograve -39
+KPX V Oslash -35
+KPX V Otilde -39
+KPX V S -12
+KPX V T 35
+KPX V a -59
+KPX V ae -59
+KPX V colon -60
+KPX V comma -110
+KPX V e -59
+KPX V g -59
+KPX V guillemotleft -49
+KPX V guilsinglleft -49
+KPX V hyphen -25
+KPX V i 6
+KPX V o -59
+KPX V oslash -58
+KPX V period -92
+KPX V r -32
+KPX V semicolon -70
+KPX V u -34
+KPX V y -8
+KPX W A -48
+KPX W AE -73
+KPX W Aacute -48
+KPX W Acircumflex -48
+KPX W Adieresis -48
+KPX W Agrave -48
+KPX W Aring -48
+KPX W Atilde -48
+KPX W C -14
+KPX W G -15
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -12
+KPX W Otilde -16
+KPX W S 0
+KPX W T 35
+KPX W a -30
+KPX W ae -30
+KPX W colon -38
+KPX W comma -71
+KPX W e -30
+KPX W g -30
+KPX W guillemotleft -21
+KPX W guilsinglleft -21
+KPX W hyphen 3
+KPX W i 6
+KPX W o -30
+KPX W oslash -28
+KPX W period -53
+KPX W r -15
+KPX W semicolon -47
+KPX W u -21
+KPX W y 4
+KPX X C -29
+KPX X O -31
+KPX X Odieresis -31
+KPX X Q -30
+KPX X a -36
+KPX X e -37
+KPX X hyphen -17
+KPX X o -36
+KPX X u -29
+KPX X y -37
+KPX Y A -78
+KPX Y AE -93
+KPX Y Aacute -78
+KPX Y Acircumflex -78
+KPX Y Adieresis -78
+KPX Y Agrave -78
+KPX Y Aring -78
+KPX Y Atilde -78
+KPX Y C -44
+KPX Y G -46
+KPX Y O -46
+KPX Y Oacute -46
+KPX Y Ocircumflex -46
+KPX Y Odieresis -46
+KPX Y Ograve -46
+KPX Y Oslash -42
+KPX Y Otilde -46
+KPX Y S -13
+KPX Y T 39
+KPX Y a -68
+KPX Y ae -68
+KPX Y colon -69
+KPX Y comma -107
+KPX Y e -68
+KPX Y g -68
+KPX Y guillemotleft -63
+KPX Y guilsinglleft -62
+KPX Y hyphen -45
+KPX Y i 10
+KPX Y o -68
+KPX Y oslash -66
+KPX Y p -38
+KPX Y period -89
+KPX Y semicolon -78
+KPX Y u -40
+KPX Y v -14
+KPX Z v -8
+KPX Z y -8
+KPX a j 14
+KPX a quoteright -7
+KPX a v 5
+KPX a w 6
+KPX a y 5
+KPX aacute v 5
+KPX aacute w 6
+KPX aacute y 5
+KPX adieresis v 5
+KPX adieresis w 6
+KPX adieresis y 5
+KPX ae v -23
+KPX ae w -20
+KPX ae y -22
+KPX agrave v 5
+KPX agrave w 6
+KPX agrave y 5
+KPX aring v 5
+KPX aring w 6
+KPX aring y 5
+KPX b v -25
+KPX b w -19
+KPX b y -23
+KPX c h -4
+KPX c k -4
+KPX comma one -64
+KPX comma quotedblright -17
+KPX comma quoteright -19
+KPX e quoteright -31
+KPX e t -23
+KPX e v -24
+KPX e w -20
+KPX e x -20
+KPX e y -23
+KPX eacute v -24
+KPX eacute w -20
+KPX eacute y -23
+KPX ecircumflex v -24
+KPX ecircumflex w -20
+KPX ecircumflex y -23
+KPX eight four 17
+KPX eight one -84
+KPX eight seven -43
+KPX f a -20
+KPX f aacute -20
+KPX f adieresis -20
+KPX f ae -21
+KPX f aring -20
+KPX f e -19
+KPX f eacute -19
+KPX f f 32
+KPX f i 9
+KPX f j 7
+KPX f l 9
+KPX f o -19
+KPX f oacute -19
+KPX f odieresis -19
+KPX f oe -19
+KPX f oslash -24
+KPX f quoteright -5
+KPX f s 13
+KPX f t 34
+KPX five four 24
+KPX five one -77
+KPX five seven -32
+KPX four four 24
+KPX four one -81
+KPX four seven -35
+KPX g a 7
+KPX g adieresis 7
+KPX g ae 7
+KPX g aring 7
+KPX g e 7
+KPX g eacute 7
+KPX g l 16
+KPX g oacute 7
+KPX g odieresis 7
+KPX g r 16
+KPX guillemotright A -22
+KPX guillemotright AE -60
+KPX guillemotright Aacute -22
+KPX guillemotright Adieresis -22
+KPX guillemotright Aring -22
+KPX guillemotright T -42
+KPX guillemotright V -48
+KPX guillemotright W -21
+KPX guillemotright Y -62
+KPX guilsinglright A -22
+KPX guilsinglright AE -60
+KPX guilsinglright Aacute -22
+KPX guilsinglright Adieresis -22
+KPX guilsinglright Aring -22
+KPX guilsinglright T -41
+KPX guilsinglright V -48
+KPX guilsinglright W -21
+KPX guilsinglright Y -61
+KPX h quoteright -30
+KPX h y -17
+KPX hyphen A 13
+KPX hyphen AE -21
+KPX hyphen Aacute 13
+KPX hyphen Adieresis 13
+KPX hyphen Aring 13
+KPX hyphen T -11
+KPX hyphen V -24
+KPX hyphen W 4
+KPX hyphen Y -43
+KPX i T 8
+KPX i j 13
+KPX k a -28
+KPX k aacute -28
+KPX k adieresis -28
+KPX k ae -28
+KPX k aring -28
+KPX k comma -21
+KPX k e -28
+KPX k eacute -28
+KPX k g -29
+KPX k hyphen -36
+KPX k o -28
+KPX k oacute -28
+KPX k odieresis -28
+KPX k period -7
+KPX k s -5
+KPX k u 1
+KPX k udieresis 1
+KPX l v 5
+KPX l y 5
+KPX m p 14
+KPX m v -17
+KPX m w -12
+KPX m y -15
+KPX n T -41
+KPX n p 13
+KPX n quoteright -30
+KPX n v -19
+KPX n w -14
+KPX n y -17
+KPX nine four -33
+KPX nine one -77
+KPX nine seven -31
+KPX o T -47
+KPX o quoteright -31
+KPX o t -22
+KPX o v -24
+KPX o w -18
+KPX o x -18
+KPX o y -21
+KPX oacute v -24
+KPX oacute w -18
+KPX oacute y -21
+KPX ocircumflex t -22
+KPX odieresis t -22
+KPX odieresis v -24
+KPX odieresis w -18
+KPX odieresis x -18
+KPX odieresis y -21
+KPX ograve v -24
+KPX ograve w -18
+KPX ograve y -21
+KPX one comma -77
+KPX one eight -46
+KPX one five -46
+KPX one four -62
+KPX one nine -52
+KPX one one -133
+KPX one period -58
+KPX one seven -88
+KPX one six -49
+KPX one three -55
+KPX one two -51
+KPX one zero -27
+KPX p t -23
+KPX p y -23
+KPX period one -100
+KPX period quotedblright -56
+KPX period quoteright -58
+KPX q c 7
+KPX q u 13
+KPX quotedblbase A 6
+KPX quotedblbase AE -8
+KPX quotedblbase T -52
+KPX quotedblbase V -96
+KPX quotedblbase W -57
+KPX quotedblbase Y -93
+KPX quotedblleft A -95
+KPX quotedblleft AE -172
+KPX quotedblleft Aacute -95
+KPX quotedblleft Adieresis -95
+KPX quotedblleft Aring -95
+KPX quotedblleft T -19
+KPX quotedblleft V 3
+KPX quotedblleft W 12
+KPX quotedblleft Y 0
+KPX quotedblright A -101
+KPX quotedblright AE -179
+KPX quotedblright Aacute -101
+KPX quotedblright Adieresis -101
+KPX quotedblright Aring -101
+KPX quotedblright T -5
+KPX quotedblright V 0
+KPX quotedblright W 7
+KPX quotedblright Y -4
+KPX quoteleft A -92
+KPX quoteleft AE -170
+KPX quoteleft Aacute -92
+KPX quoteleft Adieresis -92
+KPX quoteleft Aring -92
+KPX quoteleft T -17
+KPX quoteleft V 6
+KPX quoteleft W 14
+KPX quoteleft Y 2
+KPX quoteright A -105
+KPX quoteright AE -183
+KPX quoteright Aacute -105
+KPX quoteright Adieresis -105
+KPX quoteright Aring -105
+KPX quoteright comma -100
+KPX quoteright d -56
+KPX quoteright o -55
+KPX quoteright period -80
+KPX quoteright r -30
+KPX quoteright s -27
+KPX quoteright t -32
+KPX quoteright v -21
+KPX quoteright w -19
+KPX quoteright y -21
+KPX r a -28
+KPX r aacute -28
+KPX r acircumflex -28
+KPX r adieresis -28
+KPX r ae -28
+KPX r agrave -28
+KPX r aring -28
+KPX r c -30
+KPX r ccedilla -25
+KPX r colon -12
+KPX r comma -70
+KPX r d -29
+KPX r e -28
+KPX r eacute -28
+KPX r ecircumflex -28
+KPX r egrave -28
+KPX r f 29
+KPX r g -18
+KPX r h 6
+KPX r hyphen -19
+KPX r i 6
+KPX r j 4
+KPX r k 6
+KPX r l 6
+KPX r m 6
+KPX r n 6
+KPX r o -28
+KPX r oacute -28
+KPX r ocircumflex -28
+KPX r odieresis -28
+KPX r oe -27
+KPX r ograve -28
+KPX r oslash -33
+KPX r p 6
+KPX r period -53
+KPX r q -29
+KPX r quoteright -8
+KPX r r 6
+KPX r s 8
+KPX r semicolon -24
+KPX r t 31
+KPX r u 6
+KPX r v 32
+KPX r w 33
+KPX r x 31
+KPX r y 32
+KPX r z 27
+KPX s quoteright -16
+KPX s t 8
+KPX seven colon -75
+KPX seven comma -133
+KPX seven eight -41
+KPX seven five -47
+KPX seven four -81
+KPX seven one -65
+KPX seven period -115
+KPX seven seven -20
+KPX seven six -60
+KPX seven three -42
+KPX seven two -27
+KPX six four 24
+KPX six one -94
+KPX six seven -64
+KPX t S 14
+KPX t a -25
+KPX t aacute -25
+KPX t adieresis -25
+KPX t ae -25
+KPX t aring -25
+KPX t colon -13
+KPX t e -24
+KPX t eacute -24
+KPX t h 4
+KPX t o -24
+KPX t oacute -24
+KPX t odieresis -24
+KPX t quoteright -9
+KPX t semicolon -25
+KPX three four 12
+KPX three one -91
+KPX three seven -51
+KPX two four -19
+KPX two one -81
+KPX two seven -35
+KPX u quoteright -7
+KPX v a -25
+KPX v aacute -25
+KPX v acircumflex -25
+KPX v adieresis -25
+KPX v ae -25
+KPX v agrave -25
+KPX v aring -25
+KPX v atilde -25
+KPX v c -26
+KPX v colon -21
+KPX v comma -87
+KPX v e -25
+KPX v eacute -25
+KPX v ecircumflex -25
+KPX v egrave -25
+KPX v g -21
+KPX v hyphen 0
+KPX v l 6
+KPX v o -25
+KPX v oacute -25
+KPX v odieresis -25
+KPX v ograve -25
+KPX v oslash -24
+KPX v period -70
+KPX v s -2
+KPX v semicolon -31
+KPX w a -20
+KPX w aacute -20
+KPX w acircumflex -20
+KPX w adieresis -20
+KPX w ae -20
+KPX w agrave -20
+KPX w aring -20
+KPX w atilde -20
+KPX w c -21
+KPX w colon -19
+KPX w comma -79
+KPX w e -20
+KPX w eacute -20
+KPX w ecircumflex -20
+KPX w egrave -20
+KPX w g -18
+KPX w hyphen 6
+KPX w l 7
+KPX w o -20
+KPX w oacute -20
+KPX w odieresis -20
+KPX w ograve -20
+KPX w oslash -19
+KPX w period -62
+KPX w s 0
+KPX w semicolon -29
+KPX x a -19
+KPX x c -20
+KPX x e -19
+KPX x eacute -19
+KPX x o -19
+KPX x q -19
+KPX y a -26
+KPX y aacute -26
+KPX y acircumflex -26
+KPX y adieresis -26
+KPX y ae -26
+KPX y agrave -26
+KPX y aring -26
+KPX y atilde -26
+KPX y c -27
+KPX y colon -21
+KPX y comma -89
+KPX y e -26
+KPX y eacute -26
+KPX y ecircumflex -26
+KPX y egrave -26
+KPX y g -22
+KPX y hyphen 0
+KPX y l 6
+KPX y o -26
+KPX y oacute -26
+KPX y odieresis -26
+KPX y ograve -26
+KPX y oslash -25
+KPX y period -72
+KPX y s -3
+KPX y semicolon -31
+KPX zero four 22
+KPX zero one -66
+KPX zero seven -30
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagk8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uagk8a.pfb
new file mode 100644
index 00000000000..4d3a8b2ba78
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagk8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagko8a.afm b/Master/tlpkg/tlgs/lib/fonts/uagko8a.afm
new file mode 100644
index 00000000000..01ce91b852b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagko8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWGothicL-BookObli
+FullName URW Gothic L Book Oblique
+FamilyName URW Gothic L
+Weight Book
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -96
+UnderlineThickness 58
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -115 -232 1275 972
+CapHeight 739
+XHeight 547
+Descender -192
+Ascender 739
+StartCharMetrics 316
+C 32 ; WX 277 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 295 ; N exclam ; B 111 0 322 739 ;
+C 34 ; WX 309 ; N quotedbl ; B 169 513 374 739 ;
+C 35 ; WX 554 ; N numbersign ; B 51 0 640 739 ;
+C 36 ; WX 554 ; N dollar ; B 112 -56 575 810 ;
+C 37 ; WX 775 ; N percent ; B 117 -13 785 749 ;
+C 38 ; WX 757 ; N ampersand ; B 93 -13 774 752 ;
+C 39 ; WX 351 ; N quoteright ; B 192 547 390 739 ;
+C 40 ; WX 369 ; N parenleft ; B 106 -125 472 739 ;
+C 41 ; WX 369 ; N parenright ; B 10 -125 377 739 ;
+C 42 ; WX 425 ; N asterisk ; B 172 449 477 752 ;
+C 43 ; WX 606 ; N plus ; B 100 55 618 550 ;
+C 44 ; WX 277 ; N comma ; B 79 -67 276 126 ;
+C 45 ; WX 332 ; N hyphen ; B 80 233 364 296 ;
+C 46 ; WX 277 ; N period ; B 101 0 198 126 ;
+C 47 ; WX 437 ; N slash ; B 16 -128 534 739 ;
+C 48 ; WX 554 ; N zero ; B 71 -13 621 752 ;
+C 49 ; WX 554 ; N one ; B 280 0 491 739 ;
+C 50 ; WX 554 ; N two ; B 33 0 607 752 ;
+C 51 ; WX 554 ; N three ; B 71 -13 564 752 ;
+C 52 ; WX 554 ; N four ; B 37 0 597 739 ;
+C 53 ; WX 554 ; N five ; B 64 -13 604 739 ;
+C 54 ; WX 554 ; N six ; B 66 -13 579 739 ;
+C 55 ; WX 554 ; N seven ; B 108 0 627 739 ;
+C 56 ; WX 554 ; N eight ; B 78 -13 580 752 ;
+C 57 ; WX 554 ; N nine ; B 112 0 625 752 ;
+C 58 ; WX 277 ; N colon ; B 101 0 270 507 ;
+C 59 ; WX 277 ; N semicolon ; B 29 -67 298 507 ;
+C 60 ; WX 606 ; N less ; B 99 37 663 565 ;
+C 61 ; WX 606 ; N equal ; B 82 164 636 436 ;
+C 62 ; WX 606 ; N greater ; B 55 37 619 565 ;
+C 63 ; WX 591 ; N question ; B 159 0 627 752 ;
+C 64 ; WX 867 ; N at ; B 133 -13 883 752 ;
+C 65 ; WX 740 ; N A ; B 11 0 729 739 ;
+C 66 ; WX 574 ; N B ; B 76 0 607 739 ;
+C 67 ; WX 813 ; N C ; B 106 -13 869 752 ;
+C 68 ; WX 744 ; N D ; B 76 0 774 739 ;
+C 69 ; WX 536 ; N E ; B 76 0 617 739 ;
+C 70 ; WX 485 ; N F ; B 76 0 588 739 ;
+C 71 ; WX 872 ; N G ; B 107 -13 894 752 ;
+C 72 ; WX 683 ; N H ; B 76 0 744 739 ;
+C 73 ; WX 226 ; N I ; B 76 0 287 739 ;
+C 74 ; WX 482 ; N J ; B 41 -14 543 739 ;
+C 75 ; WX 591 ; N K ; B 76 0 722 739 ;
+C 76 ; WX 462 ; N L ; B 76 0 468 739 ;
+C 77 ; WX 919 ; N M ; B 76 0 980 739 ;
+C 78 ; WX 740 ; N N ; B 76 0 801 739 ;
+C 79 ; WX 869 ; N O ; B 106 -13 900 752 ;
+C 80 ; WX 592 ; N P ; B 76 0 665 739 ;
+C 81 ; WX 871 ; N Q ; B 105 -13 913 752 ;
+C 82 ; WX 607 ; N R ; B 76 0 673 739 ;
+C 83 ; WX 498 ; N S ; B 56 -13 564 752 ;
+C 84 ; WX 426 ; N T ; B 132 0 556 739 ;
+C 85 ; WX 655 ; N U ; B 119 -13 716 739 ;
+C 86 ; WX 702 ; N V ; B 147 0 829 739 ;
+C 87 ; WX 960 ; N W ; B 147 0 1087 739 ;
+C 88 ; WX 609 ; N X ; B 8 0 723 739 ;
+C 89 ; WX 592 ; N Y ; B 139 0 727 739 ;
+C 90 ; WX 480 ; N Z ; B 17 0 600 739 ;
+C 91 ; WX 351 ; N bracketleft ; B 132 -125 450 739 ;
+C 92 ; WX 605 ; N backslash ; B 221 0 464 739 ;
+C 93 ; WX 351 ; N bracketright ; B 14 -125 332 739 ;
+C 94 ; WX 606 ; N asciicircum ; B 51 180 621 739 ;
+C 95 ; WX 500 ; N underscore ; B -23 -125 488 -67 ;
+C 96 ; WX 351 ; N quoteleft ; B 235 547 361 739 ;
+C 97 ; WX 683 ; N a ; B 88 -13 721 560 ;
+C 98 ; WX 682 ; N b ; B 63 -13 696 739 ;
+C 99 ; WX 647 ; N c ; B 88 -13 679 560 ;
+C 100 ; WX 685 ; N d ; B 88 -13 759 739 ;
+C 101 ; WX 650 ; N e ; B 88 -13 665 560 ;
+C 102 ; WX 314 ; N f ; B 101 0 447 739 ;
+C 103 ; WX 673 ; N g ; B 60 -215 711 560 ;
+C 104 ; WX 610 ; N h ; B 63 0 609 739 ;
+C 105 ; WX 200 ; N i ; B 63 0 274 739 ;
+C 106 ; WX 203 ; N j ; B -81 -192 277 739 ;
+C 107 ; WX 502 ; N k ; B 63 0 584 739 ;
+C 108 ; WX 200 ; N l ; B 63 0 274 739 ;
+C 109 ; WX 938 ; N m ; B 63 0 941 560 ;
+C 110 ; WX 610 ; N n ; B 63 0 609 560 ;
+C 111 ; WX 655 ; N o ; B 87 -13 669 560 ;
+C 112 ; WX 682 ; N p ; B 27 -192 695 560 ;
+C 113 ; WX 682 ; N q ; B 87 -192 720 560 ;
+C 114 ; WX 301 ; N r ; B 63 0 396 560 ;
+C 115 ; WX 388 ; N s ; B 43 -13 425 560 ;
+C 116 ; WX 339 ; N t ; B 101 0 428 739 ;
+C 117 ; WX 608 ; N u ; B 99 -13 646 547 ;
+C 118 ; WX 554 ; N v ; B 109 0 647 547 ;
+C 119 ; WX 831 ; N w ; B 108 0 925 547 ;
+C 120 ; WX 480 ; N x ; B 8 0 573 547 ;
+C 121 ; WX 536 ; N y ; B 97 -192 628 547 ;
+C 122 ; WX 425 ; N z ; B 10 0 497 547 ;
+C 123 ; WX 351 ; N braceleft ; B 94 -126 408 739 ;
+C 124 ; WX 672 ; N bar ; B 304 0 505 739 ;
+C 125 ; WX 351 ; N braceright ; B 14 -127 326 739 ;
+C 126 ; WX 606 ; N asciitilde ; B 99 210 619 390 ;
+C 161 ; WX 295 ; N exclamdown ; B 75 -192 286 547 ;
+C 162 ; WX 554 ; N cent ; B 113 62 595 707 ;
+C 163 ; WX 554 ; N sterling ; B 58 0 655 752 ;
+C 164 ; WX 166 ; N fraction ; B -115 0 418 739 ;
+C 165 ; WX 554 ; N yen ; B 97 0 726 739 ;
+C 166 ; WX 554 ; N florin ; B -21 -153 685 818 ;
+C 167 ; WX 615 ; N section ; B 114 -141 596 752 ;
+C 168 ; WX 554 ; N currency ; B 51 50 615 554 ;
+C 169 ; WX 198 ; N quotesingle ; B 169 513 261 739 ;
+C 170 ; WX 502 ; N quotedblleft ; B 233 547 507 739 ;
+C 171 ; WX 425 ; N guillemotleft ; B 96 99 472 499 ;
+C 172 ; WX 251 ; N guilsinglleft ; B 96 99 298 499 ;
+C 173 ; WX 251 ; N guilsinglright ; B 65 99 267 499 ;
+C 174 ; WX 487 ; N fi ; B 98 0 561 739 ;
+C 175 ; WX 485 ; N fl ; B 98 0 559 739 ;
+C 177 ; WX 500 ; N endash ; B 49 233 562 296 ;
+C 178 ; WX 553 ; N dagger ; B 146 -133 594 739 ;
+C 179 ; WX 553 ; N daggerdbl ; B 121 -133 598 739 ;
+C 180 ; WX 277 ; N periodcentered ; B 145 229 242 355 ;
+C 182 ; WX 564 ; N paragraph ; B 135 -133 628 739 ;
+C 183 ; WX 606 ; N bullet ; B 171 113 547 489 ;
+C 184 ; WX 354 ; N quotesinglbase ; B 77 -67 274 126 ;
+C 185 ; WX 502 ; N quotedblbase ; B 77 -66 421 126 ;
+C 186 ; WX 484 ; N quotedblright ; B 188 547 530 739 ;
+C 187 ; WX 425 ; N guillemotright ; B 65 99 441 499 ;
+C 188 ; WX 1000 ; N ellipsis ; B 130 0 893 126 ;
+C 189 ; WX 1174 ; N perthousand ; B 117 -13 1184 749 ;
+C 191 ; WX 591 ; N questiondown ; B 64 -205 532 547 ;
+C 193 ; WX 378 ; N grave ; B 207 610 428 778 ;
+C 194 ; WX 375 ; N acute ; B 198 610 436 782 ;
+C 195 ; WX 502 ; N circumflex ; B 188 623 542 749 ;
+C 196 ; WX 439 ; N tilde ; B 200 633 486 734 ;
+C 197 ; WX 485 ; N macron ; B 188 651 537 713 ;
+C 198 ; WX 453 ; N breve ; B 207 626 511 743 ;
+C 199 ; WX 222 ; N dotaccent ; B 188 623 285 749 ;
+C 200 ; WX 369 ; N dieresis ; B 188 623 432 749 ;
+C 202 ; WX 332 ; N ring ; B 203 606 390 790 ;
+C 203 ; WX 324 ; N cedilla ; B 46 -227 228 0 ;
+C 205 ; WX 552 ; N hungarumlaut ; B 197 608 615 780 ;
+C 206 ; WX 302 ; N ogonek ; B 53 -195 203 0 ;
+C 207 ; WX 502 ; N caron ; B 211 623 565 749 ;
+C 208 ; WX 1000 ; N emdash ; B 49 233 1062 296 ;
+C 225 ; WX 992 ; N AE ; B 11 0 1073 739 ;
+C 227 ; WX 369 ; N ordfeminine ; B 91 319 477 745 ;
+C 232 ; WX 517 ; N Lslash ; B 70 0 514 739 ;
+C 233 ; WX 868 ; N Oslash ; B 72 -83 925 821 ;
+C 234 ; WX 1194 ; N OE ; B 106 -13 1275 752 ;
+C 235 ; WX 369 ; N ordmasculine ; B 92 319 450 745 ;
+C 241 ; WX 1157 ; N ae ; B 88 -13 1172 560 ;
+C 245 ; WX 200 ; N dotlessi ; B 63 0 238 547 ;
+C 248 ; WX 300 ; N lslash ; B 94 0 370 739 ;
+C 249 ; WX 653 ; N oslash ; B 76 -38 687 593 ;
+C 250 ; WX 1137 ; N oe ; B 88 -13 1153 560 ;
+C 251 ; WX 554 ; N germandbls ; B 59 -13 576 752 ;
+C -1 ; WX 655 ; N Udieresis ; B 119 -13 716 931 ;
+C -1 ; WX 655 ; N Uacute ; B 119 -13 716 964 ;
+C -1 ; WX 498 ; N Scedilla ; B 56 -227 564 752 ;
+C -1 ; WX 426 ; N Tcaron ; B 132 0 560 931 ;
+C -1 ; WX 498 ; N Scaron ; B 56 -13 599 931 ;
+C -1 ; WX 607 ; N Rcaron ; B 76 0 673 931 ;
+C -1 ; WX 607 ; N Racute ; B 76 0 673 964 ;
+C -1 ; WX 498 ; N Sacute ; B 56 -13 564 964 ;
+C -1 ; WX 869 ; N Otilde ; B 106 -13 900 916 ;
+C -1 ; WX 608 ; N ucircumflex ; B 99 -13 646 749 ;
+C -1 ; WX 869 ; N Ohungarumlaut ; B 106 -13 900 962 ;
+C -1 ; WX 655 ; N Uhungarumlaut ; B 119 -13 716 962 ;
+C -1 ; WX 592 ; N Yacute ; B 139 0 727 964 ;
+C -1 ; WX 790 ; N Eth ; B 93 0 820 739 ;
+C -1 ; WX 790 ; N Dcroat ; B 93 0 820 739 ;
+C -1 ; WX 480 ; N Zacute ; B 17 0 600 964 ;
+C -1 ; WX 655 ; N Uring ; B 119 -13 716 972 ;
+C -1 ; WX 673 ; N gbreve ; B 60 -215 711 743 ;
+C -1 ; WX 650 ; N eogonek ; B 88 -195 665 560 ;
+C -1 ; WX 650 ; N edotaccent ; B 88 -13 665 749 ;
+C -1 ; WX 650 ; N ecaron ; B 88 -13 665 749 ;
+C -1 ; WX 655 ; N Ugrave ; B 119 -13 716 960 ;
+C -1 ; WX 592 ; N Thorn ; B 76 0 637 739 ;
+C -1 ; WX 650 ; N eacute ; B 88 -13 665 782 ;
+C -1 ; WX 650 ; N edieresis ; B 88 -13 665 749 ;
+C -1 ; WX 714 ; N dcaron ; B 88 -13 894 739 ;
+C -1 ; WX 647 ; N ccedilla ; B 88 -227 679 560 ;
+C -1 ; WX 647 ; N ccaron ; B 88 -13 679 749 ;
+C -1 ; WX 647 ; N cacute ; B 88 -13 679 782 ;
+C -1 ; WX 683 ; N aogonek ; B 88 -195 721 560 ;
+C -1 ; WX 683 ; N aring ; B 88 -13 721 790 ;
+C -1 ; WX 683 ; N atilde ; B 88 -13 721 734 ;
+C -1 ; WX 683 ; N abreve ; B 88 -13 721 743 ;
+C -1 ; WX 650 ; N egrave ; B 88 -13 665 778 ;
+C -1 ; WX 683 ; N agrave ; B 88 -13 721 778 ;
+C -1 ; WX 683 ; N aacute ; B 88 -13 721 782 ;
+C -1 ; WX 683 ; N adieresis ; B 88 -13 721 749 ;
+C -1 ; WX 655 ; N Uogonek ; B 119 -195 716 739 ;
+C -1 ; WX 608 ; N ugrave ; B 99 -13 646 778 ;
+C -1 ; WX 608 ; N uacute ; B 99 -13 646 782 ;
+C -1 ; WX 608 ; N udieresis ; B 99 -13 646 749 ;
+C -1 ; WX 339 ; N tcaron ; B 101 0 501 739 ;
+C -1 ; WX 388 ; N scommaaccent ; B 43 -232 425 560 ;
+C -1 ; WX 480 ; N Zcaron ; B 17 0 600 931 ;
+C -1 ; WX 650 ; N ecircumflex ; B 88 -13 665 749 ;
+C -1 ; WX 655 ; N Ucircumflex ; B 119 -13 716 931 ;
+C -1 ; WX 683 ; N acircumflex ; B 88 -13 721 749 ;
+C -1 ; WX 480 ; N Zdotaccent ; B 17 0 600 931 ;
+C -1 ; WX 388 ; N scaron ; B 43 -13 508 749 ;
+C -1 ; WX 740 ; N Amacron ; B 11 0 729 895 ;
+C -1 ; WX 388 ; N sacute ; B 43 -13 443 782 ;
+C -1 ; WX 426 ; N Tcommaaccent ; B 104 -232 556 739 ;
+C -1 ; WX 592 ; N Ydieresis ; B 139 0 727 931 ;
+C -1 ; WX 682 ; N thorn ; B 27 -192 695 739 ;
+C -1 ; WX 536 ; N Emacron ; B 76 0 617 895 ;
+C -1 ; WX 869 ; N Ograve ; B 106 -13 900 960 ;
+C -1 ; WX 869 ; N Oacute ; B 106 -13 900 964 ;
+C -1 ; WX 869 ; N Odieresis ; B 106 -13 900 931 ;
+C -1 ; WX 740 ; N Ntilde ; B 76 0 801 916 ;
+C -1 ; WX 740 ; N Ncaron ; B 76 0 801 931 ;
+C -1 ; WX 740 ; N Nacute ; B 76 0 801 964 ;
+C -1 ; WX 462 ; N Lcaron ; B 76 0 522 739 ;
+C -1 ; WX 462 ; N Lacute ; B 76 0 480 964 ;
+C -1 ; WX 226 ; N Idotaccent ; B 76 0 323 931 ;
+C -1 ; WX 301 ; N racute ; B 63 0 399 782 ;
+C -1 ; WX 226 ; N Icircumflex ; B 76 0 439 931 ;
+C -1 ; WX 655 ; N ohungarumlaut ; B 87 -13 669 780 ;
+C -1 ; WX 655 ; N otilde ; B 87 -13 669 734 ;
+C -1 ; WX 554 ; N Euro ; B -32 -13 638 752 ;
+C -1 ; WX 655 ; N ocircumflex ; B 87 -13 669 749 ;
+C -1 ; WX 332 ; N onesuperior ; B 227 297 370 739 ;
+C -1 ; WX 332 ; N twosuperior ; B 67 297 435 747 ;
+C -1 ; WX 332 ; N threesuperior ; B 91 289 411 747 ;
+C -1 ; WX 226 ; N Igrave ; B 76 0 388 960 ;
+C -1 ; WX 226 ; N Iacute ; B 76 0 362 964 ;
+C -1 ; WX 226 ; N Imacron ; B 76 0 437 895 ;
+C -1 ; WX 226 ; N Iogonek ; B 4 -195 287 739 ;
+C -1 ; WX 226 ; N Idieresis ; B 76 0 396 931 ;
+C -1 ; WX 872 ; N Gbreve ; B 107 -13 894 925 ;
+C -1 ; WX 655 ; N Umacron ; B 119 -13 716 895 ;
+C -1 ; WX 591 ; N Kcommaaccent ; B 76 -232 722 739 ;
+C -1 ; WX 655 ; N ograve ; B 87 -13 669 778 ;
+C -1 ; WX 498 ; N Scommaaccent ; B 56 -232 564 752 ;
+C -1 ; WX 536 ; N Eogonek ; B 76 -195 617 739 ;
+C -1 ; WX 655 ; N oacute ; B 87 -13 669 782 ;
+C -1 ; WX 536 ; N Edotaccent ; B 76 0 617 931 ;
+C -1 ; WX 200 ; N iogonek ; B -9 -195 274 739 ;
+C -1 ; WX 673 ; N gcommaaccent ; B 60 -215 711 792 ;
+C -1 ; WX 655 ; N odieresis ; B 87 -13 669 749 ;
+C -1 ; WX 610 ; N ntilde ; B 63 0 609 734 ;
+C -1 ; WX 610 ; N ncaron ; B 63 0 619 749 ;
+C -1 ; WX 536 ; N Ecaron ; B 76 0 622 931 ;
+C -1 ; WX 536 ; N Ecircumflex ; B 76 0 617 931 ;
+C -1 ; WX 388 ; N scedilla ; B 43 -227 425 560 ;
+C -1 ; WX 301 ; N rcaron ; B 63 0 465 749 ;
+C -1 ; WX 536 ; N Egrave ; B 76 0 617 960 ;
+C -1 ; WX 536 ; N Eacute ; B 76 0 617 964 ;
+C -1 ; WX 872 ; N Gcommaaccent ; B 107 -232 894 752 ;
+C -1 ; WX 607 ; N Rcommaaccent ; B 76 -232 673 739 ;
+C -1 ; WX 536 ; N Edieresis ; B 76 0 617 931 ;
+C -1 ; WX 610 ; N nacute ; B 63 0 609 782 ;
+C -1 ; WX 608 ; N uogonek ; B 99 -195 646 547 ;
+C -1 ; WX 608 ; N umacron ; B 99 -13 646 713 ;
+C -1 ; WX 744 ; N Dcaron ; B 76 0 774 931 ;
+C -1 ; WX 231 ; N lcaron ; B 63 0 412 739 ;
+C -1 ; WX 813 ; N Ccaron ; B 106 -13 869 931 ;
+C -1 ; WX 813 ; N Cacute ; B 106 -13 869 964 ;
+C -1 ; WX 813 ; N Ccedilla ; B 106 -227 869 752 ;
+C -1 ; WX 400 ; N degree ; B 157 381 462 681 ;
+C -1 ; WX 740 ; N Aogonek ; B 11 -195 733 739 ;
+C -1 ; WX 606 ; N minus ; B 100 267 618 341 ;
+C -1 ; WX 606 ; N multiply ; B 70 29 648 570 ;
+C -1 ; WX 606 ; N divide ; B 100 112 618 496 ;
+C -1 ; WX 740 ; N Aring ; B 11 0 729 972 ;
+C -1 ; WX 1000 ; N trademark ; B 189 338 1075 739 ;
+C -1 ; WX 301 ; N rcommaaccent ; B 0 -232 396 560 ;
+C -1 ; WX 200 ; N lacute ; B 63 0 349 964 ;
+C -1 ; WX 655 ; N omacron ; B 87 -13 669 713 ;
+C -1 ; WX 740 ; N Atilde ; B 11 0 729 916 ;
+C -1 ; WX 200 ; N icircumflex ; B 37 0 391 749 ;
+C -1 ; WX 200 ; N igrave ; B 63 0 339 778 ;
+C -1 ; WX 610 ; N ncommaaccent ; B 63 -232 609 560 ;
+C -1 ; WX 200 ; N lcommaaccent ; B -9 -232 274 739 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 628 610 ;
+C -1 ; WX 831 ; N onehalf ; B 207 0 874 739 ;
+C -1 ; WX 831 ; N onequarter ; B 217 0 841 739 ;
+C -1 ; WX 831 ; N threequarters ; B 91 0 841 747 ;
+C -1 ; WX 200 ; N iacute ; B 63 0 349 782 ;
+C -1 ; WX 740 ; N Abreve ; B 11 0 729 925 ;
+C -1 ; WX 502 ; N kcommaaccent ; B 63 -232 584 739 ;
+C -1 ; WX 869 ; N Omacron ; B 106 -13 900 895 ;
+C -1 ; WX 200 ; N imacron ; B 46 0 395 713 ;
+C -1 ; WX 650 ; N emacron ; B 88 -13 665 713 ;
+C -1 ; WX 683 ; N amacron ; B 88 -13 721 713 ;
+C -1 ; WX 339 ; N tcommaaccent ; B 40 -232 428 739 ;
+C -1 ; WX 536 ; N ydieresis ; B 97 -192 628 749 ;
+C -1 ; WX 425 ; N zdotaccent ; B 10 0 497 749 ;
+C -1 ; WX 425 ; N zcaron ; B 10 0 527 749 ;
+C -1 ; WX 425 ; N zacute ; B 10 0 497 782 ;
+C -1 ; WX 536 ; N yacute ; B 97 -192 628 782 ;
+C -1 ; WX 608 ; N uhungarumlaut ; B 99 -13 646 780 ;
+C -1 ; WX 655 ; N eth ; B 87 -13 673 756 ;
+C -1 ; WX 608 ; N uring ; B 99 -13 646 790 ;
+C -1 ; WX 869 ; N Ocircumflex ; B 106 -13 900 931 ;
+C -1 ; WX 351 ; N commaaccent ; B 66 -232 224 -53 ;
+C -1 ; WX 747 ; N copyright ; B 53 -13 830 752 ;
+C -1 ; WX 747 ; N registered ; B 53 -13 830 752 ;
+C -1 ; WX 740 ; N Acircumflex ; B 11 0 729 931 ;
+C -1 ; WX 200 ; N idieresis ; B 63 0 348 749 ;
+C -1 ; WX 494 ; N lozenge ; B 88 0 535 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 82 42 636 558 ;
+C -1 ; WX 549 ; N radical ; B 93 -35 683 913 ;
+C -1 ; WX 740 ; N Agrave ; B 11 0 729 960 ;
+C -1 ; WX 740 ; N Aacute ; B 11 0 729 964 ;
+C -1 ; WX 549 ; N lessequal ; B 26 0 650 646 ;
+C -1 ; WX 549 ; N greaterequal ; B 26 0 606 646 ;
+C -1 ; WX 606 ; N logicalnot ; B 118 148 636 436 ;
+C -1 ; WX 713 ; N summation ; B -9 -123 761 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 56 -10 545 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 76 -232 801 739 ;
+C -1 ; WX 685 ; N dcroat ; B 88 -13 808 739 ;
+C -1 ; WX 672 ; N brokenbar ; B 304 0 505 739 ;
+C -1 ; WX 462 ; N Lcommaaccent ; B 76 -232 468 739 ;
+C -1 ; WX 740 ; N Adieresis ; B 11 0 729 931 ;
+C -1 ; WX 608 ; N mu ; B 27 -192 646 547 ;
+C -1 ; WX 277 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -38
+KPX A Ccedilla -38
+KPX A G -39
+KPX A O -39
+KPX A Odieresis -39
+KPX A Q -39
+KPX A T -56
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -75
+KPX A W -50
+KPX A Y -80
+KPX A a -22
+KPX A b 0
+KPX A c -22
+KPX A ccedilla -23
+KPX A comma -8
+KPX A d -22
+KPX A e -22
+KPX A g -23
+KPX A guillemotleft -24
+KPX A guilsinglleft -24
+KPX A hyphen 8
+KPX A o -21
+KPX A period 10
+KPX A q -21
+KPX A quotedblright -93
+KPX A quoteright -95
+KPX A t -31
+KPX A u -15
+KPX A v -42
+KPX A w -36
+KPX A y -39
+KPX Aacute C -38
+KPX Aacute G -39
+KPX Aacute O -39
+KPX Aacute Q -39
+KPX Aacute T -56
+KPX Aacute U -32
+KPX Aacute V -75
+KPX Aacute W -50
+KPX Aacute Y -80
+KPX Aacute a -22
+KPX Aacute b 0
+KPX Aacute c -22
+KPX Aacute comma -8
+KPX Aacute d -22
+KPX Aacute e -22
+KPX Aacute g -23
+KPX Aacute guillemotleft -24
+KPX Aacute guilsinglleft -24
+KPX Aacute hyphen 8
+KPX Aacute o -21
+KPX Aacute period 10
+KPX Aacute q -21
+KPX Aacute quoteright -95
+KPX Aacute t -31
+KPX Aacute u -15
+KPX Aacute v -42
+KPX Aacute w -36
+KPX Aacute y -39
+KPX Acircumflex C -38
+KPX Acircumflex G -39
+KPX Acircumflex O -39
+KPX Acircumflex Q -39
+KPX Acircumflex T -56
+KPX Acircumflex U -32
+KPX Acircumflex V -75
+KPX Acircumflex W -50
+KPX Acircumflex Y -80
+KPX Acircumflex comma -8
+KPX Acircumflex period 10
+KPX Adieresis C -38
+KPX Adieresis G -39
+KPX Adieresis O -39
+KPX Adieresis Q -39
+KPX Adieresis T -56
+KPX Adieresis U -32
+KPX Adieresis V -75
+KPX Adieresis W -50
+KPX Adieresis Y -80
+KPX Adieresis a -22
+KPX Adieresis b 0
+KPX Adieresis c -22
+KPX Adieresis comma -8
+KPX Adieresis d -22
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -24
+KPX Adieresis guilsinglleft -24
+KPX Adieresis hyphen 8
+KPX Adieresis o -21
+KPX Adieresis period 10
+KPX Adieresis q -21
+KPX Adieresis quotedblright -93
+KPX Adieresis quoteright -95
+KPX Adieresis t -31
+KPX Adieresis u -15
+KPX Adieresis v -42
+KPX Adieresis w -36
+KPX Adieresis y -39
+KPX Agrave C -38
+KPX Agrave G -39
+KPX Agrave O -39
+KPX Agrave Q -39
+KPX Agrave T -56
+KPX Agrave U -32
+KPX Agrave V -75
+KPX Agrave W -50
+KPX Agrave Y -80
+KPX Agrave comma -8
+KPX Agrave period 10
+KPX Aring C -38
+KPX Aring G -39
+KPX Aring O -39
+KPX Aring Q -39
+KPX Aring T -56
+KPX Aring U -32
+KPX Aring V -75
+KPX Aring W -50
+KPX Aring Y -80
+KPX Aring a -22
+KPX Aring b 0
+KPX Aring c -22
+KPX Aring comma -8
+KPX Aring d -22
+KPX Aring e -22
+KPX Aring g -23
+KPX Aring guillemotleft -24
+KPX Aring guilsinglleft -24
+KPX Aring hyphen 8
+KPX Aring o -21
+KPX Aring period 10
+KPX Aring q -21
+KPX Aring quotedblright -93
+KPX Aring quoteright -95
+KPX Aring t -31
+KPX Aring u -15
+KPX Aring v -42
+KPX Aring w -36
+KPX Aring y -39
+KPX Atilde C -38
+KPX Atilde G -39
+KPX Atilde O -39
+KPX Atilde Q -39
+KPX Atilde T -56
+KPX Atilde U -32
+KPX Atilde V -75
+KPX Atilde W -50
+KPX Atilde Y -80
+KPX Atilde comma -8
+KPX Atilde period 10
+KPX B A -14
+KPX B AE -26
+KPX B Aacute -14
+KPX B Acircumflex -14
+KPX B Adieresis -14
+KPX B Aring -14
+KPX B Atilde -14
+KPX B O 3
+KPX B OE 5
+KPX B Oacute 3
+KPX B Ocircumflex 3
+KPX B Odieresis 3
+KPX B Ograve 3
+KPX B Oslash 7
+KPX B V -24
+KPX B W -2
+KPX B Y -31
+KPX C A -27
+KPX C AE -49
+KPX C Aacute -27
+KPX C Adieresis -27
+KPX C Aring -27
+KPX C H -4
+KPX C K -4
+KPX C O -20
+KPX C Oacute -20
+KPX C Odieresis -20
+KPX Ccedilla A -30
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -11
+KPX D T -44
+KPX D V -38
+KPX D W -15
+KPX D X -33
+KPX D Y -46
+KPX F A -61
+KPX F Aacute -61
+KPX F Acircumflex -61
+KPX F Adieresis -61
+KPX F Agrave -61
+KPX F Aring -61
+KPX F Atilde -61
+KPX F J -60
+KPX F O -6
+KPX F Odieresis -6
+KPX F a -8
+KPX F aacute -8
+KPX F adieresis -8
+KPX F ae -8
+KPX F aring -8
+KPX F comma -101
+KPX F e -8
+KPX F eacute -8
+KPX F hyphen 16
+KPX F i -10
+KPX F j -11
+KPX F o -8
+KPX F oacute -8
+KPX F odieresis -8
+KPX F oe -8
+KPX F oslash -11
+KPX F period -83
+KPX F r -15
+KPX F u -15
+KPX G A -46
+KPX G AE -69
+KPX G Aacute -46
+KPX G Acircumflex -46
+KPX G Adieresis -46
+KPX G Agrave -46
+KPX G Aring -46
+KPX G Atilde -46
+KPX G T -49
+KPX G V -45
+KPX G W -22
+KPX G Y -53
+KPX J A -32
+KPX J AE -44
+KPX J Adieresis -32
+KPX J Aring -32
+KPX K C -40
+KPX K G -41
+KPX K O -41
+KPX K OE -40
+KPX K Oacute -41
+KPX K Odieresis -41
+KPX K S -21
+KPX K T 32
+KPX K a -49
+KPX K adieresis -49
+KPX K ae -49
+KPX K aring -49
+KPX K e -50
+KPX K hyphen -35
+KPX K o -49
+KPX K oacute -49
+KPX K odieresis -49
+KPX K u -41
+KPX K udieresis -41
+KPX K y -50
+KPX L A 28
+KPX L AE 27
+KPX L Aacute 28
+KPX L Adieresis 28
+KPX L Aring 28
+KPX L C -53
+KPX L Ccedilla -56
+KPX L G -56
+KPX L O -56
+KPX L Oacute -56
+KPX L Ocircumflex -56
+KPX L Odieresis -56
+KPX L Ograve -56
+KPX L Otilde -56
+KPX L S 0
+KPX L T -52
+KPX L U -33
+KPX L Udieresis -33
+KPX L V -108
+KPX L W -66
+KPX L Y -93
+KPX L hyphen -85
+KPX L quotedblright -117
+KPX L quoteright -119
+KPX L u -20
+KPX L udieresis -20
+KPX L y -66
+KPX N A -7
+KPX N AE -7
+KPX N Aacute -7
+KPX N Adieresis -7
+KPX N Aring -7
+KPX N C 2
+KPX N Ccedilla 3
+KPX N G 1
+KPX N O 0
+KPX N Oacute 0
+KPX N Odieresis 0
+KPX N a 0
+KPX N aacute 0
+KPX N adieresis 0
+KPX N ae 0
+KPX N aring 0
+KPX N comma -17
+KPX N e 0
+KPX N eacute 0
+KPX N o 0
+KPX N oacute 0
+KPX N odieresis 0
+KPX N oslash 1
+KPX N period 0
+KPX N u 8
+KPX N udieresis 8
+KPX O A -43
+KPX O AE -73
+KPX O Aacute -43
+KPX O Adieresis -43
+KPX O Aring -43
+KPX O T -44
+KPX O V -39
+KPX O W -16
+KPX O X -34
+KPX O Y -47
+KPX Oacute A -43
+KPX Oacute T -44
+KPX Oacute V -39
+KPX Oacute W -16
+KPX Oacute Y -47
+KPX Ocircumflex T -44
+KPX Ocircumflex V -39
+KPX Ocircumflex Y -47
+KPX Odieresis A -43
+KPX Odieresis T -44
+KPX Odieresis V -39
+KPX Odieresis W -16
+KPX Odieresis X -34
+KPX Odieresis Y -47
+KPX Ograve T -44
+KPX Ograve V -39
+KPX Ograve Y -47
+KPX Oslash A -42
+KPX Otilde T -44
+KPX Otilde V -39
+KPX Otilde Y -47
+KPX P A -65
+KPX P AE -112
+KPX P Aacute -65
+KPX P Adieresis -65
+KPX P Aring -65
+KPX P J -73
+KPX P a -22
+KPX P aacute -22
+KPX P adieresis -22
+KPX P ae -22
+KPX P aring -22
+KPX P comma -129
+KPX P e -21
+KPX P eacute -21
+KPX P hyphen -11
+KPX P o -22
+KPX P oacute -22
+KPX P odieresis -22
+KPX P oe -21
+KPX P oslash -27
+KPX P period -112
+KPX R C -3
+KPX R Ccedilla -2
+KPX R G -4
+KPX R O -4
+KPX R OE -3
+KPX R Oacute -4
+KPX R Odieresis -4
+KPX R T -13
+KPX R U 1
+KPX R Udieresis 1
+KPX R V -20
+KPX R W -5
+KPX R Y -23
+KPX R a -11
+KPX R aacute -11
+KPX R adieresis -11
+KPX R ae -11
+KPX R aring -11
+KPX R e -11
+KPX R eacute -11
+KPX R hyphen -3
+KPX R o -11
+KPX R oacute -11
+KPX R odieresis -11
+KPX R oe -11
+KPX R u 0
+KPX R uacute 0
+KPX R udieresis 0
+KPX R y 14
+KPX S A -11
+KPX S AE -23
+KPX S Aacute -11
+KPX S Adieresis -11
+KPX S Aring -11
+KPX S T -4
+KPX S V -16
+KPX S W 2
+KPX S Y -18
+KPX S t 13
+KPX T A -57
+KPX T AE -57
+KPX T Aacute -57
+KPX T Acircumflex -57
+KPX T Adieresis -57
+KPX T Agrave -57
+KPX T Aring -57
+KPX T Atilde -57
+KPX T C -43
+KPX T G -44
+KPX T J -54
+KPX T O -44
+KPX T OE -43
+KPX T Oacute -44
+KPX T Ocircumflex -44
+KPX T Odieresis -44
+KPX T Ograve -44
+KPX T Oslash -39
+KPX T Otilde -44
+KPX T S -5
+KPX T V 28
+KPX T W 28
+KPX T Y 32
+KPX T a -50
+KPX T ae -50
+KPX T c -51
+KPX T colon -58
+KPX T comma -67
+KPX T e -50
+KPX T g -49
+KPX T guillemotleft -44
+KPX T guilsinglleft -44
+KPX T hyphen -16
+KPX T i 3
+KPX T j 1
+KPX T o -50
+KPX T oslash -49
+KPX T period -50
+KPX T r -35
+KPX T s -33
+KPX T semicolon -68
+KPX T u -42
+KPX T v -55
+KPX T w -54
+KPX T y -55
+KPX U A -34
+KPX U AE -55
+KPX U Aacute -34
+KPX U Acircumflex -34
+KPX U Adieresis -34
+KPX U Aring -34
+KPX U Atilde -34
+KPX U comma -39
+KPX U m 6
+KPX U n 6
+KPX U p 6
+KPX U period -20
+KPX U r 5
+KPX Uacute A -34
+KPX Uacute comma -39
+KPX Uacute m 6
+KPX Uacute n 6
+KPX Uacute p 6
+KPX Uacute period -20
+KPX Uacute r 5
+KPX Ucircumflex A -34
+KPX Udieresis A -34
+KPX Udieresis b 5
+KPX Udieresis comma -39
+KPX Udieresis m 6
+KPX Udieresis n 6
+KPX Udieresis p 6
+KPX Udieresis period -20
+KPX Udieresis r 5
+KPX Ugrave A -34
+KPX V A -75
+KPX V AE -121
+KPX V Aacute -75
+KPX V Acircumflex -75
+KPX V Adieresis -75
+KPX V Agrave -75
+KPX V Aring -75
+KPX V Atilde -75
+KPX V C -41
+KPX V G -43
+KPX V O -43
+KPX V Oacute -43
+KPX V Ocircumflex -43
+KPX V Odieresis -43
+KPX V Ograve -43
+KPX V Oslash -38
+KPX V Otilde -43
+KPX V S -18
+KPX V T 30
+KPX V a -62
+KPX V ae -62
+KPX V colon -66
+KPX V comma -112
+KPX V e -62
+KPX V g -60
+KPX V guillemotleft -52
+KPX V guilsinglleft -52
+KPX V hyphen -30
+KPX V i 1
+KPX V o -62
+KPX V oslash -62
+KPX V period -95
+KPX V r -36
+KPX V semicolon -77
+KPX V u -38
+KPX V y -13
+KPX W A -51
+KPX W AE -79
+KPX W Aacute -51
+KPX W Acircumflex -51
+KPX W Adieresis -51
+KPX W Agrave -51
+KPX W Aring -51
+KPX W Atilde -51
+KPX W C -18
+KPX W G -20
+KPX W O -20
+KPX W Oacute -20
+KPX W Ocircumflex -20
+KPX W Odieresis -20
+KPX W Ograve -20
+KPX W Oslash -15
+KPX W Otilde -20
+KPX W S -4
+KPX W T 30
+KPX W a -33
+KPX W ae -33
+KPX W colon -44
+KPX W comma -73
+KPX W e -33
+KPX W g -31
+KPX W guillemotleft -24
+KPX W guilsinglleft -24
+KPX W hyphen -1
+KPX W i 1
+KPX W o -33
+KPX W oslash -33
+KPX W period -55
+KPX W r -18
+KPX W semicolon -54
+KPX W u -23
+KPX W y -1
+KPX X C -32
+KPX X O -34
+KPX X Odieresis -34
+KPX X Q -33
+KPX X a -39
+KPX X e -40
+KPX X hyphen -22
+KPX X o -39
+KPX X u -31
+KPX X y -43
+KPX Y A -81
+KPX Y AE -99
+KPX Y Aacute -81
+KPX Y Acircumflex -81
+KPX Y Adieresis -81
+KPX Y Agrave -81
+KPX Y Aring -81
+KPX Y Atilde -81
+KPX Y C -48
+KPX Y G -50
+KPX Y O -50
+KPX Y Oacute -50
+KPX Y Ocircumflex -50
+KPX Y Odieresis -50
+KPX Y Ograve -50
+KPX Y Oslash -45
+KPX Y Otilde -50
+KPX Y S -19
+KPX Y T 34
+KPX Y a -70
+KPX Y ae -70
+KPX Y colon -75
+KPX Y comma -109
+KPX Y e -70
+KPX Y g -69
+KPX Y guillemotleft -65
+KPX Y guilsinglleft -65
+KPX Y hyphen -50
+KPX Y i 5
+KPX Y o -70
+KPX Y oslash -70
+KPX Y p -42
+KPX Y period -92
+KPX Y semicolon -85
+KPX Y u -44
+KPX Y v -19
+KPX Z v -13
+KPX Z y -14
+KPX a j 11
+KPX a quoteright -9
+KPX a v 0
+KPX a w 0
+KPX a y 0
+KPX aacute v 0
+KPX aacute w 0
+KPX aacute y 0
+KPX adieresis v 0
+KPX adieresis w 0
+KPX adieresis y 0
+KPX ae v -26
+KPX ae w -20
+KPX ae y -24
+KPX agrave v 0
+KPX agrave w 0
+KPX agrave y 0
+KPX aring v 0
+KPX aring w 0
+KPX aring y 0
+KPX b v -25
+KPX b w -19
+KPX b y -23
+KPX c h -8
+KPX c k -8
+KPX comma one -67
+KPX comma quotedblright -19
+KPX comma quoteright -21
+KPX e quoteright -31
+KPX e t -24
+KPX e v -26
+KPX e w -21
+KPX e x -22
+KPX e y -25
+KPX eacute v -26
+KPX eacute w -21
+KPX eacute y -25
+KPX ecircumflex v -26
+KPX ecircumflex w -21
+KPX ecircumflex y -25
+KPX eight four 11
+KPX eight one -87
+KPX eight seven -50
+KPX f a -25
+KPX f aacute -25
+KPX f adieresis -25
+KPX f ae -24
+KPX f aring -25
+KPX f e -24
+KPX f eacute -24
+KPX f f 28
+KPX f i 4
+KPX f j 2
+KPX f l 4
+KPX f o -25
+KPX f oacute -25
+KPX f odieresis -25
+KPX f oe -25
+KPX f oslash -28
+KPX f quoteright -13
+KPX f s 9
+KPX f t 30
+KPX five four 19
+KPX five one -82
+KPX five seven -36
+KPX four four 20
+KPX four one -83
+KPX four seven -40
+KPX g a -1
+KPX g adieresis -1
+KPX g ae -1
+KPX g aring -1
+KPX g e -1
+KPX g eacute -1
+KPX g l 11
+KPX g oacute -1
+KPX g odieresis -1
+KPX g r 11
+KPX guillemotright A -24
+KPX guillemotright AE -62
+KPX guillemotright Aacute -24
+KPX guillemotright Adieresis -24
+KPX guillemotright Aring -24
+KPX guillemotright T -44
+KPX guillemotright V -49
+KPX guillemotright W -22
+KPX guillemotright Y -63
+KPX guilsinglright A -24
+KPX guilsinglright AE -62
+KPX guilsinglright Aacute -24
+KPX guilsinglright Adieresis -24
+KPX guilsinglright Aring -24
+KPX guilsinglright T -44
+KPX guilsinglright V -49
+KPX guilsinglright W -22
+KPX guilsinglright Y -63
+KPX h quoteright -31
+KPX h y -19
+KPX hyphen A 14
+KPX hyphen AE -21
+KPX hyphen Aacute 14
+KPX hyphen Adieresis 14
+KPX hyphen Aring 14
+KPX hyphen T -11
+KPX hyphen V -24
+KPX hyphen W 5
+KPX hyphen Y -43
+KPX i T 3
+KPX i j 11
+KPX k a -30
+KPX k aacute -30
+KPX k adieresis -30
+KPX k ae -30
+KPX k aring -30
+KPX k comma -26
+KPX k e -30
+KPX k eacute -30
+KPX k g -29
+KPX k hyphen -41
+KPX k o -30
+KPX k oacute -30
+KPX k odieresis -30
+KPX k period -13
+KPX k s -10
+KPX k u -2
+KPX k udieresis -2
+KPX l v 0
+KPX l y 0
+KPX m p 7
+KPX m v -19
+KPX m w -13
+KPX m y -17
+KPX n T -44
+KPX n p 6
+KPX n quoteright -31
+KPX n v -21
+KPX n w -15
+KPX n y -19
+KPX nine four -37
+KPX nine one -84
+KPX nine seven -38
+KPX o T -49
+KPX o quoteright -31
+KPX o t -21
+KPX o v -24
+KPX o w -18
+KPX o x -20
+KPX o y -22
+KPX oacute v -24
+KPX oacute w -18
+KPX oacute y -22
+KPX ocircumflex t -21
+KPX odieresis t -21
+KPX odieresis v -24
+KPX odieresis w -18
+KPX odieresis x -20
+KPX odieresis y -22
+KPX ograve v -24
+KPX ograve w -18
+KPX ograve y -22
+KPX one comma -79
+KPX one eight -52
+KPX one five -50
+KPX one four -66
+KPX one nine -60
+KPX one one -138
+KPX one period -62
+KPX one seven -93
+KPX one six -59
+KPX one three -60
+KPX one two -59
+KPX one zero -35
+KPX p t -23
+KPX p y -24
+KPX period one -103
+KPX period quotedblright -58
+KPX period quoteright -60
+KPX q c 0
+KPX q u 8
+KPX quotedblbase A 4
+KPX quotedblbase AE -10
+KPX quotedblbase T -54
+KPX quotedblbase V -97
+KPX quotedblbase W -59
+KPX quotedblbase Y -95
+KPX quotedblleft A -97
+KPX quotedblleft AE -175
+KPX quotedblleft Aacute -97
+KPX quotedblleft Adieresis -97
+KPX quotedblleft Aring -97
+KPX quotedblleft T -26
+KPX quotedblleft V 2
+KPX quotedblleft W 10
+KPX quotedblleft Y -1
+KPX quotedblright A -105
+KPX quotedblright AE -182
+KPX quotedblright Aacute -105
+KPX quotedblright Adieresis -105
+KPX quotedblright Aring -105
+KPX quotedblright T -10
+KPX quotedblright V -4
+KPX quotedblright W 4
+KPX quotedblright Y -7
+KPX quoteleft A -95
+KPX quoteleft AE -172
+KPX quoteleft Aacute -95
+KPX quoteleft Adieresis -95
+KPX quoteleft Aring -95
+KPX quoteleft T -24
+KPX quoteleft V 4
+KPX quoteleft W 12
+KPX quoteleft Y 1
+KPX quoteright A -108
+KPX quoteright AE -186
+KPX quoteright Aacute -108
+KPX quoteright Adieresis -108
+KPX quoteright Aring -108
+KPX quoteright comma -104
+KPX quoteright d -60
+KPX quoteright o -59
+KPX quoteright period -83
+KPX quoteright r -33
+KPX quoteright s -30
+KPX quoteright t -37
+KPX quoteright v -24
+KPX quoteright w -22
+KPX quoteright y -24
+KPX r a -32
+KPX r aacute -32
+KPX r acircumflex -32
+KPX r adieresis -32
+KPX r ae -31
+KPX r agrave -32
+KPX r aring -32
+KPX r c -33
+KPX r ccedilla -27
+KPX r colon -17
+KPX r comma -71
+KPX r d -33
+KPX r e -31
+KPX r eacute -31
+KPX r ecircumflex -31
+KPX r egrave -31
+KPX r f 26
+KPX r g -20
+KPX r h 2
+KPX r hyphen -23
+KPX r i 1
+KPX r j 0
+KPX r k 2
+KPX r l 2
+KPX r m 2
+KPX r n 2
+KPX r o -32
+KPX r oacute -32
+KPX r ocircumflex -32
+KPX r odieresis -32
+KPX r oe -32
+KPX r ograve -32
+KPX r oslash -36
+KPX r p 2
+KPX r period -55
+KPX r q -32
+KPX r quoteright -11
+KPX r r 2
+KPX r s 4
+KPX r semicolon -30
+KPX r t 28
+KPX r u 2
+KPX r v 27
+KPX r w 28
+KPX r x 26
+KPX r y 27
+KPX r z 23
+KPX s quoteright -16
+KPX s t 2
+KPX seven colon -81
+KPX seven comma -136
+KPX seven eight -47
+KPX seven five -51
+KPX seven four -84
+KPX seven one -70
+KPX seven period -118
+KPX seven seven -25
+KPX seven six -64
+KPX seven three -46
+KPX seven two -32
+KPX six four 19
+KPX six one -96
+KPX six seven -69
+KPX t S 8
+KPX t a -29
+KPX t aacute -29
+KPX t adieresis -29
+KPX t ae -28
+KPX t aring -29
+KPX t colon -19
+KPX t e -28
+KPX t eacute -28
+KPX t h 0
+KPX t o -29
+KPX t oacute -29
+KPX t odieresis -29
+KPX t quoteright -12
+KPX t semicolon -32
+KPX three four 7
+KPX three one -93
+KPX three seven -58
+KPX two four -25
+KPX two one -88
+KPX two seven -43
+KPX u quoteright -9
+KPX v a -28
+KPX v aacute -28
+KPX v acircumflex -28
+KPX v adieresis -28
+KPX v ae -27
+KPX v agrave -28
+KPX v aring -28
+KPX v atilde -28
+KPX v c -28
+KPX v colon -27
+KPX v comma -89
+KPX v e -28
+KPX v eacute -28
+KPX v ecircumflex -28
+KPX v egrave -28
+KPX v g -24
+KPX v hyphen -3
+KPX v l 2
+KPX v o -27
+KPX v oacute -27
+KPX v odieresis -27
+KPX v ograve -27
+KPX v oslash -28
+KPX v period -72
+KPX v s -7
+KPX v semicolon -38
+KPX w a -23
+KPX w aacute -23
+KPX w acircumflex -23
+KPX w adieresis -23
+KPX w ae -23
+KPX w agrave -23
+KPX w aring -23
+KPX w atilde -23
+KPX w c -24
+KPX w colon -25
+KPX w comma -81
+KPX w e -23
+KPX w eacute -23
+KPX w ecircumflex -23
+KPX w egrave -23
+KPX w g -21
+KPX w hyphen 1
+KPX w l 2
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -23
+KPX w period -64
+KPX w s -5
+KPX w semicolon -37
+KPX x a -21
+KPX x c -22
+KPX x e -21
+KPX x eacute -21
+KPX x o -21
+KPX x q -21
+KPX y a -30
+KPX y aacute -30
+KPX y acircumflex -30
+KPX y adieresis -30
+KPX y ae -29
+KPX y agrave -30
+KPX y aring -30
+KPX y atilde -30
+KPX y c -30
+KPX y colon -27
+KPX y comma -91
+KPX y e -30
+KPX y eacute -30
+KPX y ecircumflex -30
+KPX y egrave -30
+KPX y g -25
+KPX y hyphen -6
+KPX y l 1
+KPX y o -29
+KPX y oacute -29
+KPX y odieresis -29
+KPX y ograve -29
+KPX y oslash -30
+KPX y period -75
+KPX y s -7
+KPX y semicolon -38
+KPX zero four 16
+KPX zero one -70
+KPX zero seven -37
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uagko8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uagko8a.pfb
new file mode 100644
index 00000000000..c25c6ee4ccf
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uagko8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkd8a.afm b/Master/tlpkg/tlgs/lib/fonts/ubkd8a.afm
new file mode 100644
index 00000000000..470e52694c1
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkd8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWBookmanL-DemiBold
+FullName URW Bookman L Demi Bold
+FamilyName URW Bookman L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -194 -306 1346 927
+CapHeight 681
+XHeight 502
+Descender -213
+Ascender 724
+StartCharMetrics 316
+C 32 ; WX 340 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 360 ; N exclam ; B 82 -13 282 694 ;
+C 34 ; WX 420 ; N quotedbl ; B 11 383 369 694 ;
+C 35 ; WX 660 ; N numbersign ; B 84 0 576 681 ;
+C 36 ; WX 660 ; N dollar ; B 48 -120 620 805 ;
+C 37 ; WX 940 ; N percent ; B 12 -8 924 689 ;
+C 38 ; WX 800 ; N ampersand ; B 21 -13 772 694 ;
+C 39 ; WX 320 ; N quoteright ; B 82 438 242 694 ;
+C 40 ; WX 320 ; N parenleft ; B 48 -155 289 737 ;
+C 41 ; WX 320 ; N parenright ; B 20 -155 262 737 ;
+C 42 ; WX 460 ; N asterisk ; B 62 317 405 694 ;
+C 43 ; WX 600 ; N plus ; B 51 108 555 597 ;
+C 44 ; WX 340 ; N comma ; B 78 -120 257 167 ;
+C 45 ; WX 360 ; N hyphen ; B 20 210 340 318 ;
+C 46 ; WX 340 ; N period ; B 76 -13 257 168 ;
+C 47 ; WX 600 ; N slash ; B 50 -138 555 720 ;
+C 48 ; WX 660 ; N zero ; B 30 -13 639 694 ;
+C 49 ; WX 660 ; N one ; B 137 0 568 681 ;
+C 50 ; WX 660 ; N two ; B 41 0 628 694 ;
+C 51 ; WX 660 ; N three ; B 37 -13 631 694 ;
+C 52 ; WX 660 ; N four ; B 19 0 649 681 ;
+C 53 ; WX 660 ; N five ; B 44 -13 623 724 ;
+C 54 ; WX 660 ; N six ; B 34 -13 634 694 ;
+C 55 ; WX 660 ; N seven ; B 36 0 632 681 ;
+C 56 ; WX 660 ; N eight ; B 36 -13 633 694 ;
+C 57 ; WX 660 ; N nine ; B 33 -13 636 694 ;
+C 58 ; WX 340 ; N colon ; B 76 -13 257 516 ;
+C 59 ; WX 340 ; N semicolon ; B 75 -120 259 516 ;
+C 60 ; WX 600 ; N less ; B 49 56 558 643 ;
+C 61 ; WX 600 ; N equal ; B 51 199 555 506 ;
+C 62 ; WX 600 ; N greater ; B 48 56 557 643 ;
+C 63 ; WX 660 ; N question ; B 61 -13 608 694 ;
+C 64 ; WX 820 ; N at ; B 60 -13 758 700 ;
+C 65 ; WX 720 ; N A ; B -34 0 763 681 ;
+C 66 ; WX 720 ; N B ; B 20 0 693 681 ;
+C 67 ; WX 740 ; N C ; B 35 -13 724 694 ;
+C 68 ; WX 780 ; N D ; B 20 0 748 681 ;
+C 69 ; WX 720 ; N E ; B 20 0 724 681 ;
+C 70 ; WX 680 ; N F ; B 20 0 686 681 ;
+C 71 ; WX 780 ; N G ; B 35 -13 773 694 ;
+C 72 ; WX 820 ; N H ; B 20 0 800 681 ;
+C 73 ; WX 400 ; N I ; B 20 0 379 681 ;
+C 74 ; WX 640 ; N J ; B -12 -13 622 681 ;
+C 75 ; WX 800 ; N K ; B 20 0 796 681 ;
+C 76 ; WX 640 ; N L ; B 20 0 668 681 ;
+C 77 ; WX 940 ; N M ; B 20 0 924 681 ;
+C 78 ; WX 740 ; N N ; B 20 0 724 681 ;
+C 79 ; WX 800 ; N O ; B 35 -13 769 694 ;
+C 80 ; WX 660 ; N P ; B 20 0 658 681 ;
+C 81 ; WX 800 ; N Q ; B 35 -226 775 694 ;
+C 82 ; WX 780 ; N R ; B 20 0 783 681 ;
+C 83 ; WX 660 ; N S ; B 21 -13 639 694 ;
+C 84 ; WX 700 ; N T ; B -4 0 703 681 ;
+C 85 ; WX 740 ; N U ; B 15 -13 724 681 ;
+C 86 ; WX 720 ; N V ; B -20 0 730 681 ;
+C 87 ; WX 940 ; N W ; B -20 0 963 681 ;
+C 88 ; WX 780 ; N X ; B 1 0 770 681 ;
+C 89 ; WX 700 ; N Y ; B -20 0 718 681 ;
+C 90 ; WX 640 ; N Z ; B 6 0 635 681 ;
+C 91 ; WX 300 ; N bracketleft ; B 75 -138 285 720 ;
+C 92 ; WX 600 ; N backslash ; B 50 0 555 725 ;
+C 93 ; WX 300 ; N bracketright ; B 21 -138 231 720 ;
+C 94 ; WX 600 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 320 ; N quoteleft ; B 82 438 242 694 ;
+C 97 ; WX 580 ; N a ; B 28 -9 588 511 ;
+C 98 ; WX 600 ; N b ; B -20 -9 568 724 ;
+C 99 ; WX 580 ; N c ; B 31 -9 550 511 ;
+C 100 ; WX 640 ; N d ; B 31 -9 622 724 ;
+C 101 ; WX 580 ; N e ; B 31 -9 548 511 ;
+C 102 ; WX 380 ; N f ; B 22 0 461 736 ;
+C 103 ; WX 580 ; N g ; B 9 -248 583 593 ;
+C 104 ; WX 680 ; N h ; B 22 0 654 724 ;
+C 105 ; WX 360 ; N i ; B 22 0 335 730 ;
+C 106 ; WX 340 ; N j ; B -94 -226 278 731 ;
+C 107 ; WX 660 ; N k ; B 22 0 643 724 ;
+C 108 ; WX 340 ; N l ; B 9 0 322 724 ;
+C 109 ; WX 1000 ; N m ; B 22 0 980 511 ;
+C 110 ; WX 680 ; N n ; B 22 0 652 511 ;
+C 111 ; WX 620 ; N o ; B 31 -9 585 511 ;
+C 112 ; WX 640 ; N p ; B 22 -213 611 511 ;
+C 113 ; WX 620 ; N q ; B 31 -213 633 511 ;
+C 114 ; WX 460 ; N r ; B 22 0 462 511 ;
+C 115 ; WX 520 ; N s ; B 22 -9 492 511 ;
+C 116 ; WX 460 ; N t ; B 22 -9 445 661 ;
+C 117 ; WX 660 ; N u ; B 22 -13 653 502 ;
+C 118 ; WX 600 ; N v ; B -6 0 593 502 ;
+C 119 ; WX 800 ; N w ; B -6 0 810 502 ;
+C 120 ; WX 600 ; N x ; B 8 0 591 502 ;
+C 121 ; WX 620 ; N y ; B 6 -221 613 502 ;
+C 122 ; WX 560 ; N z ; B 22 0 547 502 ;
+C 123 ; WX 320 ; N braceleft ; B 34 -140 280 720 ;
+C 124 ; WX 600 ; N bar ; B 243 0 362 722 ;
+C 125 ; WX 320 ; N braceright ; B 35 -140 280 720 ;
+C 126 ; WX 600 ; N asciitilde ; B 51 251 555 443 ;
+C 161 ; WX 360 ; N exclamdown ; B 84 -196 284 512 ;
+C 162 ; WX 660 ; N cent ; B 133 16 535 674 ;
+C 163 ; WX 660 ; N sterling ; B 10 -13 659 694 ;
+C 164 ; WX 120 ; N fraction ; B -194 0 312 681 ;
+C 165 ; WX 660 ; N yen ; B -28 0 696 681 ;
+C 166 ; WX 660 ; N florin ; B -46 -203 674 749 ;
+C 167 ; WX 600 ; N section ; B 36 -158 560 694 ;
+C 168 ; WX 660 ; N currency ; B 77 88 584 593 ;
+C 169 ; WX 240 ; N quotesingle ; B 42 383 178 694 ;
+C 170 ; WX 540 ; N quotedblleft ; B 82 438 449 694 ;
+C 171 ; WX 400 ; N guillemotleft ; B 34 71 360 430 ;
+C 172 ; WX 220 ; N guilsinglleft ; B 34 74 188 430 ;
+C 173 ; WX 220 ; N guilsinglright ; B 34 74 188 430 ;
+C 174 ; WX 740 ; N fi ; B 22 0 710 736 ;
+C 175 ; WX 740 ; N fl ; B 22 0 710 736 ;
+C 177 ; WX 500 ; N endash ; B -25 212 525 320 ;
+C 178 ; WX 440 ; N dagger ; B 33 -160 398 694 ;
+C 179 ; WX 380 ; N daggerdbl ; B 8 -161 380 694 ;
+C 180 ; WX 340 ; N periodcentered ; B 76 175 257 356 ;
+C 182 ; WX 800 ; N paragraph ; B 14 -98 757 681 ;
+C 183 ; WX 460 ; N bullet ; B 60 213 404 557 ;
+C 184 ; WX 320 ; N quotesinglbase ; B 82 -108 242 148 ;
+C 185 ; WX 540 ; N quotedblbase ; B 82 -108 450 148 ;
+C 186 ; WX 540 ; N quotedblright ; B 82 438 449 694 ;
+C 187 ; WX 400 ; N guillemotright ; B 34 71 360 430 ;
+C 188 ; WX 1000 ; N ellipsis ; B 76 -13 923 169 ;
+C 189 ; WX 1360 ; N perthousand ; B 12 -8 1346 689 ;
+C 191 ; WX 660 ; N questiondown ; B 62 -196 609 513 ;
+C 193 ; WX 400 ; N grave ; B 68 554 327 738 ;
+C 194 ; WX 400 ; N acute ; B 68 554 327 738 ;
+C 195 ; WX 500 ; N circumflex ; B 68 555 430 731 ;
+C 196 ; WX 480 ; N tilde ; B 69 564 421 699 ;
+C 197 ; WX 460 ; N macron ; B 68 582 383 667 ;
+C 198 ; WX 500 ; N breve ; B 68 556 429 725 ;
+C 199 ; WX 320 ; N dotaccent ; B 68 551 259 742 ;
+C 200 ; WX 500 ; N dieresis ; B 68 559 441 698 ;
+C 202 ; WX 340 ; N ring ; B 68 551 275 755 ;
+C 203 ; WX 360 ; N cedilla ; B 68 -213 284 0 ;
+C 205 ; WX 440 ; N hungarumlaut ; B 68 553 365 741 ;
+C 206 ; WX 320 ; N ogonek ; B 68 -170 246 0 ;
+C 207 ; WX 500 ; N caron ; B 68 555 430 731 ;
+C 208 ; WX 1000 ; N emdash ; B -25 212 1025 320 ;
+C 225 ; WX 1140 ; N AE ; B -34 0 1149 681 ;
+C 227 ; WX 400 ; N ordfeminine ; B 27 286 396 694 ;
+C 232 ; WX 640 ; N Lslash ; B 20 0 668 681 ;
+C 233 ; WX 800 ; N Oslash ; B 35 -110 771 779 ;
+C 234 ; WX 1220 ; N OE ; B 35 -13 1219 694 ;
+C 235 ; WX 400 ; N ordmasculine ; B 17 286 383 694 ;
+C 241 ; WX 880 ; N ae ; B 28 -9 852 511 ;
+C 245 ; WX 360 ; N dotlessi ; B 22 0 335 502 ;
+C 248 ; WX 340 ; N lslash ; B 9 0 322 724 ;
+C 249 ; WX 620 ; N oslash ; B 31 -40 586 546 ;
+C 250 ; WX 940 ; N oe ; B 31 -9 908 511 ;
+C 251 ; WX 660 ; N germandbls ; B -61 -92 644 688 ;
+C -1 ; WX 740 ; N Udieresis ; B 15 -13 724 877 ;
+C -1 ; WX 740 ; N Uacute ; B 15 -13 724 910 ;
+C -1 ; WX 660 ; N Scedilla ; B 21 -213 639 694 ;
+C -1 ; WX 700 ; N Tcaron ; B -4 0 703 904 ;
+C -1 ; WX 660 ; N Scaron ; B 21 -13 639 904 ;
+C -1 ; WX 780 ; N Rcaron ; B 20 0 783 904 ;
+C -1 ; WX 780 ; N Racute ; B 20 0 783 910 ;
+C -1 ; WX 660 ; N Sacute ; B 21 -13 639 910 ;
+C -1 ; WX 800 ; N Otilde ; B 35 -13 769 884 ;
+C -1 ; WX 660 ; N ucircumflex ; B 22 -13 653 731 ;
+C -1 ; WX 800 ; N Ohungarumlaut ; B 35 -13 769 913 ;
+C -1 ; WX 740 ; N Uhungarumlaut ; B 15 -13 724 913 ;
+C -1 ; WX 700 ; N Yacute ; B -20 0 718 910 ;
+C -1 ; WX 780 ; N Eth ; B 20 0 748 681 ;
+C -1 ; WX 780 ; N Dcroat ; B 20 0 748 681 ;
+C -1 ; WX 640 ; N Zacute ; B 6 0 635 910 ;
+C -1 ; WX 740 ; N Uring ; B 15 -13 724 927 ;
+C -1 ; WX 580 ; N gbreve ; B 9 -248 583 725 ;
+C -1 ; WX 580 ; N eogonek ; B 31 -170 548 511 ;
+C -1 ; WX 580 ; N edotaccent ; B 31 -9 548 742 ;
+C -1 ; WX 580 ; N ecaron ; B 31 -9 548 731 ;
+C -1 ; WX 740 ; N Ugrave ; B 15 -13 724 910 ;
+C -1 ; WX 660 ; N Thorn ; B 20 0 658 681 ;
+C -1 ; WX 580 ; N eacute ; B 31 -9 548 738 ;
+C -1 ; WX 580 ; N edieresis ; B 31 -9 548 698 ;
+C -1 ; WX 720 ; N dcaron ; B 31 -9 720 724 ;
+C -1 ; WX 580 ; N ccedilla ; B 31 -213 550 511 ;
+C -1 ; WX 580 ; N ccaron ; B 31 -9 550 731 ;
+C -1 ; WX 580 ; N cacute ; B 31 -9 550 738 ;
+C -1 ; WX 580 ; N aogonek ; B 28 -170 600 511 ;
+C -1 ; WX 580 ; N aring ; B 28 -9 588 755 ;
+C -1 ; WX 580 ; N atilde ; B 28 -9 588 699 ;
+C -1 ; WX 580 ; N abreve ; B 28 -9 588 725 ;
+C -1 ; WX 580 ; N egrave ; B 31 -9 548 738 ;
+C -1 ; WX 580 ; N agrave ; B 28 -9 588 738 ;
+C -1 ; WX 580 ; N aacute ; B 28 -9 588 738 ;
+C -1 ; WX 580 ; N adieresis ; B 28 -9 588 698 ;
+C -1 ; WX 740 ; N Uogonek ; B 15 -170 724 681 ;
+C -1 ; WX 660 ; N ugrave ; B 22 -13 653 738 ;
+C -1 ; WX 660 ; N uacute ; B 22 -13 653 738 ;
+C -1 ; WX 660 ; N udieresis ; B 22 -13 653 698 ;
+C -1 ; WX 470 ; N tcaron ; B 22 -9 470 724 ;
+C -1 ; WX 520 ; N scommaaccent ; B 22 -306 492 511 ;
+C -1 ; WX 640 ; N Zcaron ; B 6 0 635 904 ;
+C -1 ; WX 580 ; N ecircumflex ; B 31 -9 548 731 ;
+C -1 ; WX 740 ; N Ucircumflex ; B 15 -13 724 904 ;
+C -1 ; WX 580 ; N acircumflex ; B 28 -9 588 731 ;
+C -1 ; WX 640 ; N Zdotaccent ; B 6 0 635 914 ;
+C -1 ; WX 520 ; N scaron ; B 22 -9 492 731 ;
+C -1 ; WX 720 ; N Amacron ; B -34 0 763 839 ;
+C -1 ; WX 520 ; N sacute ; B 22 -9 492 738 ;
+C -1 ; WX 700 ; N Tcommaaccent ; B -4 -306 703 681 ;
+C -1 ; WX 700 ; N Ydieresis ; B -20 0 718 877 ;
+C -1 ; WX 640 ; N thorn ; B 22 -213 611 724 ;
+C -1 ; WX 720 ; N Emacron ; B 20 0 724 839 ;
+C -1 ; WX 800 ; N Ograve ; B 35 -13 769 910 ;
+C -1 ; WX 800 ; N Oacute ; B 35 -13 769 910 ;
+C -1 ; WX 800 ; N Odieresis ; B 35 -13 769 877 ;
+C -1 ; WX 740 ; N Ntilde ; B 20 0 724 884 ;
+C -1 ; WX 740 ; N Ncaron ; B 20 0 724 904 ;
+C -1 ; WX 740 ; N Nacute ; B 20 0 724 910 ;
+C -1 ; WX 640 ; N Lcaron ; B 20 0 668 694 ;
+C -1 ; WX 640 ; N Lacute ; B 20 0 668 910 ;
+C -1 ; WX 400 ; N Idotaccent ; B 20 0 379 914 ;
+C -1 ; WX 460 ; N racute ; B 22 0 462 738 ;
+C -1 ; WX 400 ; N Icircumflex ; B 18 0 380 904 ;
+C -1 ; WX 620 ; N ohungarumlaut ; B 31 -9 585 741 ;
+C -1 ; WX 620 ; N otilde ; B 31 -9 585 699 ;
+C -1 ; WX 660 ; N Euro ; B 9 -13 636 694 ;
+C -1 ; WX 620 ; N ocircumflex ; B 31 -9 585 731 ;
+C -1 ; WX 396 ; N onesuperior ; B 65 273 345 681 ;
+C -1 ; WX 396 ; N twosuperior ; B 14 273 396 689 ;
+C -1 ; WX 396 ; N threesuperior ; B 5 265 391 689 ;
+C -1 ; WX 400 ; N Igrave ; B 20 0 379 910 ;
+C -1 ; WX 400 ; N Iacute ; B 20 0 379 910 ;
+C -1 ; WX 400 ; N Imacron ; B 20 0 379 839 ;
+C -1 ; WX 400 ; N Iogonek ; B 20 -170 445 681 ;
+C -1 ; WX 400 ; N Idieresis ; B 18 0 391 877 ;
+C -1 ; WX 780 ; N Gbreve ; B 35 -13 773 898 ;
+C -1 ; WX 740 ; N Umacron ; B 15 -13 724 839 ;
+C -1 ; WX 800 ; N Kcommaaccent ; B 20 -306 796 681 ;
+C -1 ; WX 620 ; N ograve ; B 31 -9 585 738 ;
+C -1 ; WX 660 ; N Scommaaccent ; B 21 -306 639 694 ;
+C -1 ; WX 720 ; N Eogonek ; B 20 -170 724 681 ;
+C -1 ; WX 620 ; N oacute ; B 31 -9 585 738 ;
+C -1 ; WX 720 ; N Edotaccent ; B 20 0 724 914 ;
+C -1 ; WX 360 ; N iogonek ; B 22 -170 401 730 ;
+C -1 ; WX 580 ; N gcommaaccent ; B 9 -248 583 824 ;
+C -1 ; WX 620 ; N odieresis ; B 31 -9 585 698 ;
+C -1 ; WX 680 ; N ntilde ; B 22 0 652 699 ;
+C -1 ; WX 680 ; N ncaron ; B 22 0 652 731 ;
+C -1 ; WX 720 ; N Ecaron ; B 20 0 724 904 ;
+C -1 ; WX 720 ; N Ecircumflex ; B 20 0 724 904 ;
+C -1 ; WX 520 ; N scedilla ; B 22 -213 492 511 ;
+C -1 ; WX 460 ; N rcaron ; B 22 0 462 731 ;
+C -1 ; WX 720 ; N Egrave ; B 20 0 724 910 ;
+C -1 ; WX 720 ; N Eacute ; B 20 0 724 910 ;
+C -1 ; WX 780 ; N Gcommaaccent ; B 35 -306 773 694 ;
+C -1 ; WX 780 ; N Rcommaaccent ; B 20 -306 783 681 ;
+C -1 ; WX 720 ; N Edieresis ; B 20 0 724 877 ;
+C -1 ; WX 680 ; N nacute ; B 22 0 652 738 ;
+C -1 ; WX 660 ; N uogonek ; B 22 -170 719 502 ;
+C -1 ; WX 660 ; N umacron ; B 22 -13 653 667 ;
+C -1 ; WX 780 ; N Dcaron ; B 20 0 748 904 ;
+C -1 ; WX 430 ; N lcaron ; B 9 0 430 724 ;
+C -1 ; WX 740 ; N Ccaron ; B 35 -13 724 904 ;
+C -1 ; WX 740 ; N Cacute ; B 35 -13 724 910 ;
+C -1 ; WX 740 ; N Ccedilla ; B 35 -213 724 694 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 720 ; N Aogonek ; B -34 -170 829 681 ;
+C -1 ; WX 600 ; N minus ; B 51 294 555 411 ;
+C -1 ; WX 600 ; N multiply ; B 48 100 552 604 ;
+C -1 ; WX 600 ; N divide ; B 51 72 555 633 ;
+C -1 ; WX 720 ; N Aring ; B -34 0 763 924 ;
+C -1 ; WX 980 ; N trademark ; B 42 273 982 681 ;
+C -1 ; WX 460 ; N rcommaaccent ; B 22 -306 462 511 ;
+C -1 ; WX 340 ; N lacute ; B 9 0 322 910 ;
+C -1 ; WX 620 ; N omacron ; B 31 -9 585 667 ;
+C -1 ; WX 720 ; N Atilde ; B -34 0 763 884 ;
+C -1 ; WX 360 ; N icircumflex ; B -2 0 360 731 ;
+C -1 ; WX 360 ; N igrave ; B 22 0 335 738 ;
+C -1 ; WX 680 ; N ncommaaccent ; B 22 -306 652 511 ;
+C -1 ; WX 340 ; N lcommaaccent ; B 9 -306 322 724 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 555 629 ;
+C -1 ; WX 990 ; N onehalf ; B 65 0 980 681 ;
+C -1 ; WX 990 ; N onequarter ; B 65 0 967 681 ;
+C -1 ; WX 990 ; N threequarters ; B 15 0 967 689 ;
+C -1 ; WX 360 ; N iacute ; B 22 0 335 738 ;
+C -1 ; WX 720 ; N Abreve ; B -34 0 763 898 ;
+C -1 ; WX 660 ; N kcommaaccent ; B 22 -306 643 724 ;
+C -1 ; WX 800 ; N Omacron ; B 35 -13 769 839 ;
+C -1 ; WX 360 ; N imacron ; B 18 0 335 667 ;
+C -1 ; WX 580 ; N emacron ; B 31 -9 548 667 ;
+C -1 ; WX 580 ; N amacron ; B 28 -9 588 667 ;
+C -1 ; WX 460 ; N tcommaaccent ; B 22 -306 445 661 ;
+C -1 ; WX 620 ; N ydieresis ; B 6 -221 613 698 ;
+C -1 ; WX 560 ; N zdotaccent ; B 22 0 547 742 ;
+C -1 ; WX 560 ; N zcaron ; B 22 0 547 731 ;
+C -1 ; WX 560 ; N zacute ; B 22 0 547 738 ;
+C -1 ; WX 620 ; N yacute ; B 6 -221 613 738 ;
+C -1 ; WX 660 ; N uhungarumlaut ; B 22 -13 653 741 ;
+C -1 ; WX 620 ; N eth ; B 31 -9 585 779 ;
+C -1 ; WX 660 ; N uring ; B 22 -13 653 755 ;
+C -1 ; WX 800 ; N Ocircumflex ; B 35 -13 769 904 ;
+C -1 ; WX 296 ; N commaaccent ; B 68 -306 228 -50 ;
+C -1 ; WX 740 ; N copyright ; B 23 0 723 700 ;
+C -1 ; WX 740 ; N registered ; B 23 0 723 700 ;
+C -1 ; WX 720 ; N Acircumflex ; B -34 0 763 904 ;
+C -1 ; WX 360 ; N idieresis ; B -2 0 371 698 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 51 63 555 646 ;
+C -1 ; WX 549 ; N radical ; B -34 -35 548 918 ;
+C -1 ; WX 720 ; N Agrave ; B -34 0 763 910 ;
+C -1 ; WX 720 ; N Aacute ; B -34 0 763 910 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 549 722 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 555 722 ;
+C -1 ; WX 600 ; N logicalnot ; B 51 80 555 369 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 9 -10 478 755 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 20 -306 724 681 ;
+C -1 ; WX 640 ; N dcroat ; B 31 -9 622 724 ;
+C -1 ; WX 600 ; N brokenbar ; B 243 0 362 722 ;
+C -1 ; WX 640 ; N Lcommaaccent ; B 20 -306 668 681 ;
+C -1 ; WX 720 ; N Adieresis ; B -34 0 763 877 ;
+C -1 ; WX 660 ; N mu ; B 22 -219 653 502 ;
+C -1 ; WX 340 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -14
+KPX A Ccedilla -13
+KPX A G -9
+KPX A O -12
+KPX A Odieresis -12
+KPX A Q 9
+KPX A T -26
+KPX A U -10
+KPX A Uacute -10
+KPX A Ucircumflex -10
+KPX A Udieresis -10
+KPX A Ugrave -10
+KPX A V -59
+KPX A W -40
+KPX A Y -25
+KPX A a 37
+KPX A b 27
+KPX A c 11
+KPX A ccedilla 13
+KPX A comma 33
+KPX A d 16
+KPX A e 9
+KPX A g 40
+KPX A guillemotleft -9
+KPX A guilsinglleft -9
+KPX A hyphen 12
+KPX A o 11
+KPX A period 34
+KPX A q 13
+KPX A quotedblright -74
+KPX A quoteright -74
+KPX A t 2
+KPX A u 2
+KPX A v -26
+KPX A w -19
+KPX A y -36
+KPX Aacute C -14
+KPX Aacute G -9
+KPX Aacute O -12
+KPX Aacute Q 9
+KPX Aacute T -26
+KPX Aacute U -10
+KPX Aacute V -59
+KPX Aacute W -40
+KPX Aacute Y -25
+KPX Aacute a 37
+KPX Aacute b 27
+KPX Aacute c 11
+KPX Aacute comma 33
+KPX Aacute d 16
+KPX Aacute e 9
+KPX Aacute g 40
+KPX Aacute guillemotleft -9
+KPX Aacute guilsinglleft -9
+KPX Aacute hyphen 12
+KPX Aacute o 11
+KPX Aacute period 34
+KPX Aacute q 13
+KPX Aacute quoteright -75
+KPX Aacute t 2
+KPX Aacute u 2
+KPX Aacute v -26
+KPX Aacute w -19
+KPX Aacute y -36
+KPX Acircumflex C -14
+KPX Acircumflex G -9
+KPX Acircumflex O -12
+KPX Acircumflex Q 9
+KPX Acircumflex T -26
+KPX Acircumflex U -10
+KPX Acircumflex V -59
+KPX Acircumflex W -40
+KPX Acircumflex Y -25
+KPX Acircumflex comma 33
+KPX Acircumflex period 34
+KPX Adieresis C -14
+KPX Adieresis G -9
+KPX Adieresis O -12
+KPX Adieresis Q 9
+KPX Adieresis T -26
+KPX Adieresis U -10
+KPX Adieresis V -59
+KPX Adieresis W -40
+KPX Adieresis Y -25
+KPX Adieresis a 37
+KPX Adieresis b 27
+KPX Adieresis c 11
+KPX Adieresis comma 33
+KPX Adieresis d 16
+KPX Adieresis g 40
+KPX Adieresis guillemotleft -9
+KPX Adieresis guilsinglleft -9
+KPX Adieresis hyphen 12
+KPX Adieresis o 11
+KPX Adieresis period 34
+KPX Adieresis q 13
+KPX Adieresis quotedblright -75
+KPX Adieresis quoteright -75
+KPX Adieresis t 2
+KPX Adieresis u 2
+KPX Adieresis v -26
+KPX Adieresis w -19
+KPX Adieresis y -36
+KPX Agrave C -14
+KPX Agrave G -9
+KPX Agrave O -12
+KPX Agrave Q 9
+KPX Agrave T -26
+KPX Agrave U -10
+KPX Agrave V -59
+KPX Agrave W -40
+KPX Agrave Y -25
+KPX Agrave comma 33
+KPX Agrave period 34
+KPX Aring C -14
+KPX Aring G -9
+KPX Aring O -12
+KPX Aring Q 9
+KPX Aring T -26
+KPX Aring U -10
+KPX Aring V -59
+KPX Aring W -40
+KPX Aring Y -25
+KPX Aring a 37
+KPX Aring b 27
+KPX Aring c 11
+KPX Aring comma 33
+KPX Aring d 16
+KPX Aring e 9
+KPX Aring g 40
+KPX Aring guillemotleft -9
+KPX Aring guilsinglleft -9
+KPX Aring hyphen 12
+KPX Aring o 11
+KPX Aring period 34
+KPX Aring q 13
+KPX Aring quotedblright -75
+KPX Aring quoteright -75
+KPX Aring t 2
+KPX Aring u 2
+KPX Aring v -26
+KPX Aring w -19
+KPX Aring y -36
+KPX Atilde C -14
+KPX Atilde G -9
+KPX Atilde O -12
+KPX Atilde Q 9
+KPX Atilde T -26
+KPX Atilde U -10
+KPX Atilde V -59
+KPX Atilde W -40
+KPX Atilde Y -25
+KPX Atilde comma 33
+KPX Atilde period 34
+KPX B A 17
+KPX B AE 17
+KPX B Aacute 17
+KPX B Acircumflex 17
+KPX B Adieresis 17
+KPX B Aring 17
+KPX B Atilde 17
+KPX B O 2
+KPX B OE 1
+KPX B Oacute 2
+KPX B Ocircumflex 2
+KPX B Odieresis 2
+KPX B Ograve 2
+KPX B Oslash 2
+KPX B V 3
+KPX B W 3
+KPX B Y 3
+KPX C A 5
+KPX C AE 5
+KPX C Aacute 5
+KPX C Adieresis 5
+KPX C Aring 5
+KPX C H -2
+KPX C K -2
+KPX C O -4
+KPX C Oacute -4
+KPX C Odieresis -4
+KPX Ccedilla A 6
+KPX D A -15
+KPX D Aacute -15
+KPX D Acircumflex -15
+KPX D Adieresis -15
+KPX D Agrave -15
+KPX D Aring -15
+KPX D Atilde -15
+KPX D J 14
+KPX D T 8
+KPX D V -23
+KPX D W -18
+KPX D X -30
+KPX D Y -23
+KPX F A -62
+KPX F Aacute -62
+KPX F Acircumflex -62
+KPX F Adieresis -62
+KPX F Agrave -62
+KPX F Aring -62
+KPX F Atilde -62
+KPX F J -46
+KPX F O 4
+KPX F Odieresis 4
+KPX F a -15
+KPX F aacute -15
+KPX F adieresis -15
+KPX F ae -20
+KPX F aring -15
+KPX F comma -92
+KPX F e -31
+KPX F eacute -31
+KPX F hyphen -22
+KPX F i 20
+KPX F j 15
+KPX F o -30
+KPX F oacute -30
+KPX F odieresis -30
+KPX F oe -33
+KPX F oslash -31
+KPX F period -91
+KPX F r 20
+KPX F u 20
+KPX G A 6
+KPX G AE 6
+KPX G Aacute 6
+KPX G Acircumflex 6
+KPX G Adieresis 6
+KPX G Agrave 6
+KPX G Aring 6
+KPX G Atilde 6
+KPX G T -14
+KPX G V -23
+KPX G W -16
+KPX G Y -23
+KPX J A -18
+KPX J AE -18
+KPX J Adieresis -18
+KPX J Aring -18
+KPX K C -37
+KPX K G -32
+KPX K O -36
+KPX K OE -40
+KPX K Oacute -36
+KPX K Odieresis -36
+KPX K S -6
+KPX K T -9
+KPX K a 14
+KPX K adieresis 14
+KPX K ae 12
+KPX K aring 14
+KPX K e -13
+KPX K hyphen -34
+KPX K o -11
+KPX K oacute -11
+KPX K odieresis -11
+KPX K u -20
+KPX K udieresis -20
+KPX K y -69
+KPX L A 30
+KPX L AE 30
+KPX L Aacute 30
+KPX L Adieresis 30
+KPX L Aring 30
+KPX L C 23
+KPX L Ccedilla 23
+KPX L G 23
+KPX L O 23
+KPX L Oacute 23
+KPX L Ocircumflex 23
+KPX L Odieresis 23
+KPX L Ograve 23
+KPX L Otilde 23
+KPX L S 35
+KPX L T -54
+KPX L U -5
+KPX L Udieresis -5
+KPX L V -52
+KPX L W -28
+KPX L Y -56
+KPX L hyphen 58
+KPX L quotedblright -80
+KPX L quoteright -80
+KPX L u 0
+KPX L udieresis -1
+KPX L y -22
+KPX N A -2
+KPX N AE -2
+KPX N Aacute -2
+KPX N Adieresis -2
+KPX N Aring -2
+KPX N C -11
+KPX N Ccedilla -11
+KPX N G -11
+KPX N O -13
+KPX N Oacute -13
+KPX N Odieresis -13
+KPX N a -12
+KPX N aacute -12
+KPX N adieresis -12
+KPX N ae -14
+KPX N aring -12
+KPX N comma -17
+KPX N e -17
+KPX N eacute -17
+KPX N o -17
+KPX N oacute -17
+KPX N odieresis -17
+KPX N oslash -15
+KPX N period -16
+KPX N u -22
+KPX N udieresis -23
+KPX O A -20
+KPX O AE -20
+KPX O Aacute -20
+KPX O Adieresis -20
+KPX O Aring -20
+KPX O T 10
+KPX O V -22
+KPX O W -19
+KPX O X -32
+KPX O Y -22
+KPX Oacute A -20
+KPX Oacute T 10
+KPX Oacute V -22
+KPX Oacute W -19
+KPX Oacute Y -22
+KPX Ocircumflex T 10
+KPX Ocircumflex V -22
+KPX Ocircumflex Y -22
+KPX Odieresis A -20
+KPX Odieresis T 10
+KPX Odieresis V -22
+KPX Odieresis W -19
+KPX Odieresis X -32
+KPX Odieresis Y -22
+KPX Ograve T 10
+KPX Ograve V -22
+KPX Ograve Y -22
+KPX Oslash A -18
+KPX Otilde T 10
+KPX Otilde V -22
+KPX Otilde Y -22
+KPX P A -51
+KPX P AE -92
+KPX P Aacute -51
+KPX P Adieresis -51
+KPX P Aring -51
+KPX P J -29
+KPX P a 1
+KPX P aacute 1
+KPX P adieresis 1
+KPX P ae -4
+KPX P aring 1
+KPX P comma -87
+KPX P e -8
+KPX P eacute -8
+KPX P hyphen 1
+KPX P o -7
+KPX P oacute -7
+KPX P odieresis -7
+KPX P oe -9
+KPX P oslash -7
+KPX P period -87
+KPX R C -19
+KPX R Ccedilla -19
+KPX R G -18
+KPX R O -20
+KPX R OE -21
+KPX R Oacute -20
+KPX R Odieresis -20
+KPX R T -2
+KPX R U -24
+KPX R Udieresis -24
+KPX R V -8
+KPX R W -8
+KPX R Y -8
+KPX R a 17
+KPX R aacute 17
+KPX R adieresis 17
+KPX R ae 15
+KPX R aring 17
+KPX R e -10
+KPX R eacute -10
+KPX R hyphen -21
+KPX R o -8
+KPX R oacute -8
+KPX R odieresis -8
+KPX R oe -5
+KPX R u -16
+KPX R uacute -16
+KPX R udieresis -16
+KPX R y -7
+KPX S A 12
+KPX S AE 12
+KPX S Aacute 12
+KPX S Adieresis 12
+KPX S Aring 12
+KPX S T 2
+KPX S V -8
+KPX S W -8
+KPX S Y -8
+KPX S t -2
+KPX T A -33
+KPX T AE -33
+KPX T Aacute -33
+KPX T Acircumflex -33
+KPX T Adieresis -33
+KPX T Agrave -33
+KPX T Aring -33
+KPX T Atilde -33
+KPX T C 7
+KPX T G 7
+KPX T J -58
+KPX T O 5
+KPX T OE 6
+KPX T Oacute 5
+KPX T Ocircumflex 5
+KPX T Odieresis 5
+KPX T Ograve 5
+KPX T Oslash 5
+KPX T Otilde 5
+KPX T S 14
+KPX T V 20
+KPX T W 20
+KPX T Y 20
+KPX T a -14
+KPX T ae -20
+KPX T c -33
+KPX T colon -9
+KPX T comma -77
+KPX T e -34
+KPX T g -23
+KPX T guillemotleft -95
+KPX T guilsinglleft -94
+KPX T hyphen -70
+KPX T i 23
+KPX T j 14
+KPX T o -33
+KPX T oslash -32
+KPX T period -77
+KPX T r 23
+KPX T s -11
+KPX T semicolon -8
+KPX T u 23
+KPX T v 37
+KPX T w 37
+KPX T y 31
+KPX U A -16
+KPX U AE -16
+KPX U Aacute -16
+KPX U Acircumflex -16
+KPX U Adieresis -16
+KPX U Aring -16
+KPX U Atilde -16
+KPX U comma -33
+KPX U m -21
+KPX U n -20
+KPX U p -26
+KPX U period -32
+KPX U r -20
+KPX Uacute A -16
+KPX Uacute comma -33
+KPX Uacute m -21
+KPX Uacute n -20
+KPX Uacute p -26
+KPX Uacute period -32
+KPX Uacute r -20
+KPX Ucircumflex A -16
+KPX Udieresis A -16
+KPX Udieresis b 34
+KPX Udieresis comma -33
+KPX Udieresis m -21
+KPX Udieresis n -20
+KPX Udieresis p -26
+KPX Udieresis period -32
+KPX Udieresis r -20
+KPX Ugrave A -16
+KPX V A -71
+KPX V AE -80
+KPX V Aacute -71
+KPX V Acircumflex -71
+KPX V Adieresis -71
+KPX V Agrave -71
+KPX V Aring -71
+KPX V Atilde -71
+KPX V C -26
+KPX V G -28
+KPX V O -33
+KPX V Oacute -33
+KPX V Ocircumflex -33
+KPX V Odieresis -33
+KPX V Ograve -33
+KPX V Oslash -32
+KPX V Otilde -33
+KPX V S -2
+KPX V T 17
+KPX V a -57
+KPX V ae -60
+KPX V colon -65
+KPX V comma -90
+KPX V e -63
+KPX V g -58
+KPX V guillemotleft -63
+KPX V guilsinglleft -60
+KPX V hyphen -33
+KPX V i 0
+KPX V o -62
+KPX V oslash -60
+KPX V period -89
+KPX V r -34
+KPX V semicolon -65
+KPX V u -34
+KPX V y -20
+KPX W A -63
+KPX W AE -66
+KPX W Aacute -63
+KPX W Acircumflex -63
+KPX W Adieresis -63
+KPX W Agrave -63
+KPX W Aring -63
+KPX W Atilde -63
+KPX W C -19
+KPX W G -21
+KPX W O -27
+KPX W Oacute -27
+KPX W Ocircumflex -27
+KPX W Odieresis -27
+KPX W Ograve -27
+KPX W Oslash -26
+KPX W Otilde -27
+KPX W S 3
+KPX W T 24
+KPX W a -48
+KPX W ae -51
+KPX W colon -60
+KPX W comma -77
+KPX W e -54
+KPX W g -49
+KPX W guillemotleft -54
+KPX W guilsinglleft -51
+KPX W hyphen -24
+KPX W i 7
+KPX W o -53
+KPX W oslash -51
+KPX W period -76
+KPX W r -31
+KPX W semicolon -61
+KPX W u -31
+KPX W y -17
+KPX X C -40
+KPX X O -39
+KPX X Odieresis -39
+KPX X Q -17
+KPX X a 11
+KPX X e -16
+KPX X hyphen -50
+KPX X o -14
+KPX X u -23
+KPX X y -54
+KPX Y A -37
+KPX Y AE -37
+KPX Y Aacute -37
+KPX Y Acircumflex -37
+KPX Y Adieresis -37
+KPX Y Agrave -37
+KPX Y Aring -37
+KPX Y Atilde -37
+KPX Y C -22
+KPX Y G -24
+KPX Y O -29
+KPX Y Oacute -29
+KPX Y Ocircumflex -29
+KPX Y Odieresis -29
+KPX Y Ograve -29
+KPX Y Oslash -28
+KPX Y Otilde -29
+KPX Y S 1
+KPX Y T 21
+KPX Y a -71
+KPX Y ae -72
+KPX Y colon -82
+KPX Y comma -80
+KPX Y e -78
+KPX Y g -67
+KPX Y guillemotleft -88
+KPX Y guilsinglleft -87
+KPX Y hyphen -67
+KPX Y i 4
+KPX Y o -77
+KPX Y oslash -75
+KPX Y p -52
+KPX Y period -79
+KPX Y semicolon -83
+KPX Y u -52
+KPX Y v -30
+KPX Z v -23
+KPX Z y -27
+KPX a j -21
+KPX a quoteright -51
+KPX a v -16
+KPX a w -16
+KPX a y -23
+KPX aacute v -16
+KPX aacute w -16
+KPX aacute y -23
+KPX adieresis v -16
+KPX adieresis w -16
+KPX adieresis y -23
+KPX ae v 0
+KPX ae w 0
+KPX ae y -10
+KPX agrave v -16
+KPX agrave w -16
+KPX agrave y -23
+KPX aring v -16
+KPX aring w -16
+KPX aring y -23
+KPX b v -4
+KPX b w -4
+KPX b y -13
+KPX c h -11
+KPX c k -11
+KPX comma one -63
+KPX comma quotedblright -63
+KPX comma quoteright -63
+KPX e quoteright -37
+KPX e t -17
+KPX e v -3
+KPX e w -3
+KPX e x -7
+KPX e y -13
+KPX eacute v -3
+KPX eacute w -3
+KPX eacute y -13
+KPX ecircumflex v -3
+KPX ecircumflex w -3
+KPX ecircumflex y -13
+KPX eight four 9
+KPX eight one -66
+KPX eight seven -20
+KPX f a -3
+KPX f aacute -3
+KPX f adieresis 30
+KPX f ae -4
+KPX f aring -3
+KPX f e -17
+KPX f eacute -17
+KPX f f 14
+KPX f i 36
+KPX f j 28
+KPX f l 68
+KPX f o -16
+KPX f oacute -16
+KPX f odieresis 12
+KPX f oe -16
+KPX f oslash -14
+KPX f quoteright 30
+KPX f s -3
+KPX f t 8
+KPX five four 5
+KPX five one -74
+KPX five seven -33
+KPX four four 15
+KPX four one -70
+KPX four seven -39
+KPX g a -16
+KPX g adieresis -16
+KPX g ae -19
+KPX g aring -16
+KPX g e -18
+KPX g eacute -18
+KPX g l 15
+KPX g oacute -17
+KPX g odieresis -17
+KPX g r 9
+KPX guillemotright A -22
+KPX guillemotright AE -24
+KPX guillemotright Aacute -22
+KPX guillemotright Adieresis -22
+KPX guillemotright Aring -22
+KPX guillemotright T -95
+KPX guillemotright V -65
+KPX guillemotright W -41
+KPX guillemotright Y -82
+KPX guilsinglright A -18
+KPX guilsinglright AE -25
+KPX guilsinglright Aacute -18
+KPX guilsinglright Adieresis -18
+KPX guilsinglright Aring -18
+KPX guilsinglright T -91
+KPX guilsinglright V -58
+KPX guilsinglright W -35
+KPX guilsinglright Y -77
+KPX h quoteright -54
+KPX h y -29
+KPX hyphen A 0
+KPX hyphen AE -34
+KPX hyphen Aacute 0
+KPX hyphen Adieresis 0
+KPX hyphen Aring 0
+KPX hyphen T -68
+KPX hyphen V -32
+KPX hyphen W -9
+KPX hyphen Y -58
+KPX i T -15
+KPX i j -25
+KPX k a 7
+KPX k aacute 7
+KPX k adieresis 7
+KPX k ae 6
+KPX k aring 7
+KPX k comma -8
+KPX k e -20
+KPX k eacute -20
+KPX k g 11
+KPX k hyphen -46
+KPX k o -18
+KPX k oacute -18
+KPX k odieresis -18
+KPX k period -8
+KPX k s 4
+KPX k u -11
+KPX k udieresis -11
+KPX l v -10
+KPX l y -16
+KPX m p -18
+KPX m v -16
+KPX m w -16
+KPX m y -23
+KPX n T -35
+KPX n p -21
+KPX n quoteright -51
+KPX n v -19
+KPX n w -19
+KPX n y -26
+KPX nine four 8
+KPX nine one -63
+KPX nine seven -2
+KPX o T -36
+KPX o quoteright -41
+KPX o t -17
+KPX o v -7
+KPX o w -7
+KPX o x -15
+KPX o y -18
+KPX oacute v -7
+KPX oacute w -7
+KPX oacute y -18
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -7
+KPX odieresis w -7
+KPX odieresis x -15
+KPX odieresis y -18
+KPX ograve v -7
+KPX ograve w -7
+KPX ograve y -18
+KPX one comma -40
+KPX one eight -46
+KPX one five -42
+KPX one four -79
+KPX one nine -49
+KPX one one -81
+KPX one period -39
+KPX one seven -86
+KPX one six -61
+KPX one three -42
+KPX one two -35
+KPX one zero -60
+KPX p t -12
+KPX p y -13
+KPX period one -64
+KPX period quotedblright -62
+KPX period quoteright -62
+KPX q c -3
+KPX q u -9
+KPX quotedblbase A 22
+KPX quotedblbase AE 17
+KPX quotedblbase T -81
+KPX quotedblbase V -95
+KPX quotedblbase W -68
+KPX quotedblbase Y -79
+KPX quotedblleft A -90
+KPX quotedblleft AE -174
+KPX quotedblleft Aacute -91
+KPX quotedblleft Adieresis -91
+KPX quotedblleft Aring -91
+KPX quotedblleft T -2
+KPX quotedblleft V 0
+KPX quotedblleft W 9
+KPX quotedblleft Y -1
+KPX quotedblright A -92
+KPX quotedblright AE -178
+KPX quotedblright Aacute -93
+KPX quotedblright Adieresis -93
+KPX quotedblright Aring -93
+KPX quotedblright T -3
+KPX quotedblright V 4
+KPX quotedblright W 12
+KPX quotedblright Y 2
+KPX quoteleft A -84
+KPX quoteleft AE -168
+KPX quoteleft Aacute -85
+KPX quoteleft Adieresis -85
+KPX quoteleft Aring -85
+KPX quoteleft T 4
+KPX quoteleft V 7
+KPX quoteleft W 15
+KPX quoteleft Y 4
+KPX quoteright A -85
+KPX quoteright AE -172
+KPX quoteright Aacute -86
+KPX quoteright Adieresis -86
+KPX quoteright Aring -86
+KPX quoteright comma -57
+KPX quoteright d -36
+KPX quoteright o -35
+KPX quoteright period -56
+KPX quoteright r -15
+KPX quoteright s -19
+KPX quoteright t -14
+KPX quoteright v 3
+KPX quoteright w 4
+KPX quoteright y -4
+KPX r a 8
+KPX r aacute 8
+KPX r acircumflex 8
+KPX r adieresis 8
+KPX r ae 3
+KPX r agrave 8
+KPX r aring 8
+KPX r c 2
+KPX r ccedilla 1
+KPX r colon -4
+KPX r comma -61
+KPX r d 0
+KPX r e 1
+KPX r eacute 1
+KPX r ecircumflex 1
+KPX r egrave 1
+KPX r f 22
+KPX r g 1
+KPX r h -16
+KPX r hyphen 1
+KPX r i 22
+KPX r j 13
+KPX r k -13
+KPX r l -8
+KPX r m 22
+KPX r n 22
+KPX r o 2
+KPX r oacute 2
+KPX r ocircumflex 2
+KPX r odieresis 2
+KPX r oe 0
+KPX r ograve 2
+KPX r oslash 2
+KPX r p 22
+KPX r period -60
+KPX r q 2
+KPX r quoteright 2
+KPX r r 22
+KPX r s 13
+KPX r semicolon -3
+KPX r t 22
+KPX r u 22
+KPX r v 36
+KPX r w 36
+KPX r x 19
+KPX r y 30
+KPX r z 3
+KPX s quoteright -29
+KPX s t -10
+KPX seven colon -70
+KPX seven comma -106
+KPX seven eight -25
+KPX seven five -20
+KPX seven four -89
+KPX seven one -50
+KPX seven period -105
+KPX seven seven -7
+KPX seven six -32
+KPX seven three -18
+KPX seven two -11
+KPX six four 10
+KPX six one -63
+KPX six seven -19
+KPX t S -7
+KPX t a 10
+KPX t aacute 10
+KPX t adieresis 10
+KPX t ae 9
+KPX t aring 10
+KPX t colon -13
+KPX t e -12
+KPX t eacute -12
+KPX t h 12
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright -48
+KPX t semicolon -14
+KPX three four 8
+KPX three one -66
+KPX three seven -16
+KPX two four 3
+KPX two one -68
+KPX two seven -18
+KPX u quoteright -30
+KPX v a 1
+KPX v aacute 1
+KPX v acircumflex 1
+KPX v adieresis 1
+KPX v ae -3
+KPX v agrave 1
+KPX v aring 1
+KPX v atilde 1
+KPX v c -11
+KPX v colon -8
+KPX v comma -81
+KPX v e -12
+KPX v eacute -12
+KPX v ecircumflex -12
+KPX v egrave -12
+KPX v g -8
+KPX v hyphen -16
+KPX v l -13
+KPX v o -11
+KPX v oacute -11
+KPX v odieresis -11
+KPX v ograve -11
+KPX v oslash -11
+KPX v period -80
+KPX v s 4
+KPX v semicolon -8
+KPX w a 9
+KPX w aacute 9
+KPX w acircumflex 9
+KPX w adieresis 9
+KPX w ae 4
+KPX w agrave 9
+KPX w aring 9
+KPX w atilde 9
+KPX w c -2
+KPX w colon 0
+KPX w comma -58
+KPX w e -3
+KPX w eacute -3
+KPX w ecircumflex -3
+KPX w egrave -3
+KPX w g 0
+KPX w hyphen -1
+KPX w l -4
+KPX w o -3
+KPX w oacute -3
+KPX w odieresis -3
+KPX w ograve -3
+KPX w oslash -3
+KPX w period -57
+KPX w s 12
+KPX w semicolon 0
+KPX x a 11
+KPX x c -14
+KPX x e -16
+KPX x eacute -16
+KPX x o -14
+KPX x q -12
+KPX y a 0
+KPX y aacute 0
+KPX y acircumflex 0
+KPX y adieresis 0
+KPX y ae -6
+KPX y agrave 0
+KPX y aring 0
+KPX y atilde 0
+KPX y c -15
+KPX y colon -8
+KPX y comma -86
+KPX y e -16
+KPX y eacute -16
+KPX y ecircumflex -16
+KPX y egrave -16
+KPX y g -10
+KPX y hyphen -23
+KPX y l -13
+KPX y o -15
+KPX y oacute -15
+KPX y odieresis -15
+KPX y ograve -15
+KPX y oslash -15
+KPX y period -86
+KPX y s 2
+KPX y semicolon -8
+KPX zero four 9
+KPX zero one -62
+KPX zero seven -3
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkd8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ubkd8a.pfb
new file mode 100644
index 00000000000..4e26c1cf52e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkd8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkdi8a.afm b/Master/tlpkg/tlgs/lib/fonts/ubkdi8a.afm
new file mode 100644
index 00000000000..15c87a1597a
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkdi8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWBookmanL-DemiBoldItal
+FullName URW Bookman L Demi Bold Italic
+FamilyName URW Bookman L
+Weight Bold
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -231 -332 1333 927
+CapHeight 681
+XHeight 511
+Descender -213
+Ascender 732
+StartCharMetrics 316
+C 32 ; WX 340 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 320 ; N exclam ; B 86 -13 366 694 ;
+C 34 ; WX 380 ; N quotedbl ; B 140 352 507 681 ;
+C 35 ; WX 680 ; N numbersign ; B 157 0 649 681 ;
+C 36 ; WX 680 ; N dollar ; B 45 -164 697 791 ;
+C 37 ; WX 880 ; N percent ; B 106 -8 899 689 ;
+C 38 ; WX 980 ; N ampersand ; B 48 -13 1016 694 ;
+C 39 ; WX 320 ; N quoteright ; B 171 416 349 694 ;
+C 40 ; WX 260 ; N parenleft ; B 31 -145 388 710 ;
+C 41 ; WX 260 ; N parenright ; B -35 -148 322 710 ;
+C 42 ; WX 460 ; N asterisk ; B 126 345 508 699 ;
+C 43 ; WX 600 ; N plus ; B 91 107 595 593 ;
+C 44 ; WX 340 ; N comma ; B 100 -130 298 179 ;
+C 45 ; WX 280 ; N hyphen ; B 59 224 319 314 ;
+C 46 ; WX 340 ; N period ; B 106 -13 296 172 ;
+C 47 ; WX 360 ; N slash ; B 9 -145 502 710 ;
+C 48 ; WX 680 ; N zero ; B 87 -13 703 694 ;
+C 49 ; WX 680 ; N one ; B 123 0 565 681 ;
+C 50 ; WX 680 ; N two ; B 67 0 674 694 ;
+C 51 ; WX 680 ; N three ; B 72 -13 683 694 ;
+C 52 ; WX 680 ; N four ; B 63 0 708 681 ;
+C 53 ; WX 680 ; N five ; B 78 -13 669 681 ;
+C 54 ; WX 680 ; N six ; B 88 -13 704 694 ;
+C 55 ; WX 680 ; N seven ; B 123 0 739 681 ;
+C 56 ; WX 680 ; N eight ; B 68 -13 686 694 ;
+C 57 ; WX 680 ; N nine ; B 71 -13 712 694 ;
+C 58 ; WX 340 ; N colon ; B 106 -13 356 520 ;
+C 59 ; WX 340 ; N semicolon ; B 100 -130 352 520 ;
+C 60 ; WX 620 ; N less ; B 79 56 588 643 ;
+C 61 ; WX 600 ; N equal ; B 91 198 595 502 ;
+C 62 ; WX 620 ; N greater ; B 89 56 598 643 ;
+C 63 ; WX 620 ; N question ; B 145 -13 668 694 ;
+C 64 ; WX 780 ; N at ; B 80 -13 790 700 ;
+C 65 ; WX 720 ; N A ; B -27 0 769 681 ;
+C 66 ; WX 720 ; N B ; B 14 0 762 681 ;
+C 67 ; WX 700 ; N C ; B 78 -13 754 694 ;
+C 68 ; WX 760 ; N D ; B 14 0 805 681 ;
+C 69 ; WX 720 ; N E ; B 14 0 777 681 ;
+C 70 ; WX 660 ; N F ; B 14 0 763 681 ;
+C 71 ; WX 760 ; N G ; B 77 -13 828 694 ;
+C 72 ; WX 800 ; N H ; B 14 0 910 681 ;
+C 73 ; WX 380 ; N I ; B 14 0 485 681 ;
+C 74 ; WX 620 ; N J ; B 8 -13 721 681 ;
+C 75 ; WX 780 ; N K ; B 14 0 879 681 ;
+C 76 ; WX 640 ; N L ; B 14 0 725 681 ;
+C 77 ; WX 860 ; N M ; B 14 0 970 681 ;
+C 78 ; WX 740 ; N N ; B 14 0 845 681 ;
+C 79 ; WX 760 ; N O ; B 78 -13 806 694 ;
+C 80 ; WX 640 ; N P ; B -6 0 724 681 ;
+C 81 ; WX 760 ; N Q ; B 37 -218 805 694 ;
+C 82 ; WX 740 ; N R ; B 14 0 765 681 ;
+C 83 ; WX 700 ; N S ; B 59 -13 731 694 ;
+C 84 ; WX 700 ; N T ; B 70 0 802 681 ;
+C 85 ; WX 740 ; N U ; B 112 -13 855 681 ;
+C 86 ; WX 660 ; N V ; B 72 0 819 681 ;
+C 87 ; WX 1000 ; N W ; B 72 0 1090 681 ;
+C 88 ; WX 740 ; N X ; B -7 0 835 681 ;
+C 89 ; WX 660 ; N Y ; B 72 0 817 681 ;
+C 90 ; WX 680 ; N Z ; B 23 0 740 681 ;
+C 91 ; WX 260 ; N bracketleft ; B 9 -145 374 710 ;
+C 92 ; WX 580 ; N backslash ; B 73 0 575 741 ;
+C 93 ; WX 260 ; N bracketright ; B -18 -145 347 710 ;
+C 94 ; WX 620 ; N asciicircum ; B 92 318 594 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 320 ; N quoteleft ; B 155 416 333 694 ;
+C 97 ; WX 680 ; N a ; B 84 -9 735 520 ;
+C 98 ; WX 600 ; N b ; B 57 -9 633 732 ;
+C 99 ; WX 560 ; N c ; B 58 -9 597 520 ;
+C 100 ; WX 680 ; N d ; B 60 -9 714 732 ;
+C 101 ; WX 560 ; N e ; B 59 -9 596 520 ;
+C 102 ; WX 420 ; N f ; B -192 -208 641 745 ;
+C 103 ; WX 620 ; N g ; B 21 -208 669 520 ;
+C 104 ; WX 700 ; N h ; B 93 -9 736 732 ;
+C 105 ; WX 380 ; N i ; B 83 -9 420 762 ;
+C 106 ; WX 320 ; N j ; B -160 -208 392 762 ;
+C 107 ; WX 700 ; N k ; B 97 -9 732 732 ;
+C 108 ; WX 380 ; N l ; B 109 -9 410 732 ;
+C 109 ; WX 960 ; N m ; B 83 -9 996 520 ;
+C 110 ; WX 680 ; N n ; B 83 -9 715 520 ;
+C 111 ; WX 600 ; N o ; B 59 -9 627 520 ;
+C 112 ; WX 660 ; N p ; B -24 -213 682 520 ;
+C 113 ; WX 620 ; N q ; B 60 -213 640 520 ;
+C 114 ; WX 500 ; N r ; B 84 0 582 520 ;
+C 115 ; WX 540 ; N s ; B 32 -9 573 520 ;
+C 116 ; WX 440 ; N t ; B 106 -9 488 659 ;
+C 117 ; WX 680 ; N u ; B 83 -9 720 511 ;
+C 118 ; WX 540 ; N v ; B 56 -9 572 520 ;
+C 119 ; WX 860 ; N w ; B 56 -9 891 520 ;
+C 120 ; WX 620 ; N x ; B 10 -9 654 520 ;
+C 121 ; WX 600 ; N y ; B 25 -204 642 511 ;
+C 122 ; WX 560 ; N z ; B 36 -9 586 520 ;
+C 123 ; WX 300 ; N braceleft ; B 53 -145 409 710 ;
+C 124 ; WX 620 ; N bar ; B 303 0 422 722 ;
+C 125 ; WX 300 ; N braceright ; B -4 -145 352 710 ;
+C 126 ; WX 620 ; N asciitilde ; B 101 251 605 443 ;
+C 161 ; WX 320 ; N exclamdown ; B 64 -187 344 520 ;
+C 162 ; WX 680 ; N cent ; B 161 25 616 718 ;
+C 163 ; WX 680 ; N sterling ; B 0 -13 787 694 ;
+C 164 ; WX 120 ; N fraction ; B -144 0 382 681 ;
+C 165 ; WX 680 ; N yen ; B 92 0 782 681 ;
+C 166 ; WX 680 ; N florin ; B -28 -208 743 745 ;
+C 167 ; WX 620 ; N section ; B 46 -147 638 694 ;
+C 168 ; WX 680 ; N currency ; B 148 109 637 595 ;
+C 169 ; WX 180 ; N quotesingle ; B 126 352 295 681 ;
+C 170 ; WX 520 ; N quotedblleft ; B 156 416 545 694 ;
+C 171 ; WX 380 ; N guillemotleft ; B 62 57 406 477 ;
+C 172 ; WX 220 ; N guilsinglleft ; B 62 57 249 477 ;
+C 173 ; WX 220 ; N guilsinglright ; B 62 57 249 477 ;
+C 174 ; WX 820 ; N fi ; B -191 -208 850 745 ;
+C 175 ; WX 820 ; N fl ; B -191 -208 850 745 ;
+C 177 ; WX 500 ; N endash ; B 40 224 573 314 ;
+C 178 ; WX 420 ; N dagger ; B 89 -134 466 694 ;
+C 179 ; WX 420 ; N daggerdbl ; B 79 -147 486 694 ;
+C 180 ; WX 340 ; N periodcentered ; B 126 173 316 358 ;
+C 182 ; WX 680 ; N paragraph ; B 70 -201 726 681 ;
+C 183 ; WX 360 ; N bullet ; B 60 213 404 557 ;
+C 184 ; WX 300 ; N quotesinglbase ; B 106 -117 284 161 ;
+C 185 ; WX 520 ; N quotedblbase ; B 106 -117 495 161 ;
+C 186 ; WX 520 ; N quotedblright ; B 171 416 560 694 ;
+C 187 ; WX 380 ; N guillemotright ; B 62 57 406 477 ;
+C 188 ; WX 1000 ; N ellipsis ; B 86 -13 942 172 ;
+C 189 ; WX 1360 ; N perthousand ; B 106 -8 1333 689 ;
+C 191 ; WX 620 ; N questiondown ; B 83 -183 606 524 ;
+C 193 ; WX 380 ; N grave ; B 193 561 424 748 ;
+C 194 ; WX 340 ; N acute ; B 176 561 407 748 ;
+C 195 ; WX 480 ; N circumflex ; B 183 564 523 734 ;
+C 196 ; WX 480 ; N tilde ; B 178 580 533 703 ;
+C 197 ; WX 480 ; N macron ; B 177 603 531 691 ;
+C 198 ; WX 460 ; N breve ; B 177 570 516 710 ;
+C 199 ; WX 380 ; N dotaccent ; B 180 566 345 732 ;
+C 200 ; WX 520 ; N dieresis ; B 180 569 569 729 ;
+C 202 ; WX 360 ; N ring ; B 185 553 406 769 ;
+C 203 ; WX 360 ; N cedilla ; B 68 -215 289 0 ;
+C 205 ; WX 560 ; N hungarumlaut ; B 181 560 616 751 ;
+C 206 ; WX 320 ; N ogonek ; B 68 -179 253 0 ;
+C 207 ; WX 480 ; N caron ; B 183 564 523 734 ;
+C 208 ; WX 1000 ; N emdash ; B 40 224 1073 314 ;
+C 225 ; WX 1140 ; N AE ; B -27 0 1207 681 ;
+C 227 ; WX 440 ; N ordfeminine ; B 55 300 495 698 ;
+C 232 ; WX 640 ; N Lslash ; B 14 0 724 681 ;
+C 233 ; WX 760 ; N Oslash ; B 21 -29 847 725 ;
+C 234 ; WX 1180 ; N OE ; B 94 -13 1245 694 ;
+C 235 ; WX 440 ; N ordmasculine ; B 47 300 467 698 ;
+C 241 ; WX 880 ; N ae ; B 39 -9 913 520 ;
+C 245 ; WX 380 ; N dotlessi ; B 83 -9 420 511 ;
+C 248 ; WX 380 ; N lslash ; B 63 -9 412 732 ;
+C 249 ; WX 600 ; N oslash ; B 17 -54 661 576 ;
+C 250 ; WX 920 ; N oe ; B 48 -9 961 520 ;
+C 251 ; WX 660 ; N germandbls ; B -231 -208 702 741 ;
+C -1 ; WX 740 ; N Udieresis ; B 112 -13 855 895 ;
+C -1 ; WX 740 ; N Uacute ; B 112 -13 855 914 ;
+C -1 ; WX 700 ; N Scedilla ; B 59 -215 731 694 ;
+C -1 ; WX 700 ; N Tcaron ; B 70 0 802 900 ;
+C -1 ; WX 700 ; N Scaron ; B 59 -13 731 900 ;
+C -1 ; WX 740 ; N Rcaron ; B 14 0 765 900 ;
+C -1 ; WX 740 ; N Racute ; B 14 0 765 914 ;
+C -1 ; WX 700 ; N Sacute ; B 59 -13 731 914 ;
+C -1 ; WX 760 ; N Otilde ; B 78 -13 806 863 ;
+C -1 ; WX 680 ; N ucircumflex ; B 83 -9 720 734 ;
+C -1 ; WX 760 ; N Ohungarumlaut ; B 78 -13 806 917 ;
+C -1 ; WX 740 ; N Uhungarumlaut ; B 112 -13 855 917 ;
+C -1 ; WX 660 ; N Yacute ; B 72 0 817 914 ;
+C -1 ; WX 760 ; N Eth ; B 14 0 805 681 ;
+C -1 ; WX 760 ; N Dcroat ; B 14 0 805 681 ;
+C -1 ; WX 680 ; N Zacute ; B 23 0 740 914 ;
+C -1 ; WX 740 ; N Uring ; B 112 -13 855 927 ;
+C -1 ; WX 620 ; N gbreve ; B 21 -208 669 710 ;
+C -1 ; WX 560 ; N eogonek ; B 59 -179 596 520 ;
+C -1 ; WX 560 ; N edotaccent ; B 59 -9 596 732 ;
+C -1 ; WX 560 ; N ecaron ; B 59 -9 596 734 ;
+C -1 ; WX 740 ; N Ugrave ; B 112 -13 855 914 ;
+C -1 ; WX 640 ; N Thorn ; B -6 0 701 681 ;
+C -1 ; WX 560 ; N eacute ; B 59 -9 596 748 ;
+C -1 ; WX 560 ; N edieresis ; B 59 -9 596 729 ;
+C -1 ; WX 810 ; N dcaron ; B 60 -9 870 740 ;
+C -1 ; WX 560 ; N ccedilla ; B 58 -215 597 520 ;
+C -1 ; WX 560 ; N ccaron ; B 58 -9 597 734 ;
+C -1 ; WX 560 ; N cacute ; B 58 -9 597 748 ;
+C -1 ; WX 680 ; N aogonek ; B 84 -179 735 520 ;
+C -1 ; WX 680 ; N aring ; B 84 -9 735 769 ;
+C -1 ; WX 680 ; N atilde ; B 84 -9 735 703 ;
+C -1 ; WX 680 ; N abreve ; B 84 -9 735 710 ;
+C -1 ; WX 560 ; N egrave ; B 59 -9 596 748 ;
+C -1 ; WX 680 ; N agrave ; B 84 -9 735 748 ;
+C -1 ; WX 680 ; N aacute ; B 84 -9 735 748 ;
+C -1 ; WX 680 ; N adieresis ; B 84 -9 735 729 ;
+C -1 ; WX 740 ; N Uogonek ; B 112 -179 855 681 ;
+C -1 ; WX 680 ; N ugrave ; B 83 -9 720 748 ;
+C -1 ; WX 680 ; N uacute ; B 83 -9 720 748 ;
+C -1 ; WX 680 ; N udieresis ; B 83 -9 720 729 ;
+C -1 ; WX 520 ; N tcaron ; B 106 -9 580 740 ;
+C -1 ; WX 540 ; N scommaaccent ; B 32 -328 573 520 ;
+C -1 ; WX 680 ; N Zcaron ; B 23 0 740 900 ;
+C -1 ; WX 560 ; N ecircumflex ; B 59 -9 596 734 ;
+C -1 ; WX 740 ; N Ucircumflex ; B 112 -13 855 900 ;
+C -1 ; WX 680 ; N acircumflex ; B 84 -9 735 734 ;
+C -1 ; WX 680 ; N Zdotaccent ; B 23 0 740 898 ;
+C -1 ; WX 540 ; N scaron ; B 32 -9 573 734 ;
+C -1 ; WX 720 ; N Amacron ; B -27 0 769 844 ;
+C -1 ; WX 540 ; N sacute ; B 32 -9 573 748 ;
+C -1 ; WX 700 ; N Tcommaaccent ; B 70 -332 802 681 ;
+C -1 ; WX 660 ; N Ydieresis ; B 72 0 817 895 ;
+C -1 ; WX 660 ; N thorn ; B -24 -213 682 732 ;
+C -1 ; WX 720 ; N Emacron ; B 14 0 777 844 ;
+C -1 ; WX 760 ; N Ograve ; B 78 -13 806 914 ;
+C -1 ; WX 760 ; N Oacute ; B 78 -13 806 914 ;
+C -1 ; WX 760 ; N Odieresis ; B 78 -13 806 895 ;
+C -1 ; WX 740 ; N Ntilde ; B 14 0 845 863 ;
+C -1 ; WX 740 ; N Ncaron ; B 14 0 845 900 ;
+C -1 ; WX 740 ; N Nacute ; B 14 0 845 914 ;
+C -1 ; WX 640 ; N Lcaron ; B 14 0 780 694 ;
+C -1 ; WX 640 ; N Lacute ; B 14 0 725 914 ;
+C -1 ; WX 380 ; N Idotaccent ; B 14 0 485 898 ;
+C -1 ; WX 500 ; N racute ; B 84 0 582 748 ;
+C -1 ; WX 380 ; N Icircumflex ; B 14 0 493 900 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 59 -9 636 751 ;
+C -1 ; WX 600 ; N otilde ; B 59 -9 627 703 ;
+C -1 ; WX 680 ; N Euro ; B 57 -13 736 694 ;
+C -1 ; WX 600 ; N ocircumflex ; B 59 -9 627 734 ;
+C -1 ; WX 408 ; N onesuperior ; B 118 273 406 681 ;
+C -1 ; WX 408 ; N twosuperior ; B 91 273 485 689 ;
+C -1 ; WX 408 ; N threesuperior ; B 86 265 483 689 ;
+C -1 ; WX 380 ; N Igrave ; B 14 0 485 914 ;
+C -1 ; WX 380 ; N Iacute ; B 14 0 485 914 ;
+C -1 ; WX 380 ; N Imacron ; B 14 0 511 844 ;
+C -1 ; WX 380 ; N Iogonek ; B 14 -179 485 681 ;
+C -1 ; WX 380 ; N Idieresis ; B 14 0 499 895 ;
+C -1 ; WX 760 ; N Gbreve ; B 77 -13 828 878 ;
+C -1 ; WX 740 ; N Umacron ; B 112 -13 855 844 ;
+C -1 ; WX 780 ; N Kcommaaccent ; B 14 -332 879 681 ;
+C -1 ; WX 600 ; N ograve ; B 59 -9 627 748 ;
+C -1 ; WX 700 ; N Scommaaccent ; B 59 -332 731 694 ;
+C -1 ; WX 720 ; N Eogonek ; B 14 -179 777 681 ;
+C -1 ; WX 600 ; N oacute ; B 59 -9 627 748 ;
+C -1 ; WX 720 ; N Edotaccent ; B 14 0 777 898 ;
+C -1 ; WX 380 ; N iogonek ; B 83 -179 420 762 ;
+C -1 ; WX 620 ; N gcommaaccent ; B 21 -208 669 843 ;
+C -1 ; WX 600 ; N odieresis ; B 59 -9 627 729 ;
+C -1 ; WX 680 ; N ntilde ; B 83 -9 715 703 ;
+C -1 ; WX 680 ; N ncaron ; B 83 -9 715 734 ;
+C -1 ; WX 720 ; N Ecaron ; B 14 0 777 900 ;
+C -1 ; WX 720 ; N Ecircumflex ; B 14 0 777 900 ;
+C -1 ; WX 540 ; N scedilla ; B 32 -215 573 520 ;
+C -1 ; WX 500 ; N rcaron ; B 84 0 582 734 ;
+C -1 ; WX 720 ; N Egrave ; B 14 0 777 914 ;
+C -1 ; WX 720 ; N Eacute ; B 14 0 777 914 ;
+C -1 ; WX 760 ; N Gcommaaccent ; B 77 -332 828 694 ;
+C -1 ; WX 740 ; N Rcommaaccent ; B 14 -332 765 681 ;
+C -1 ; WX 720 ; N Edieresis ; B 14 0 777 895 ;
+C -1 ; WX 680 ; N nacute ; B 83 -9 715 748 ;
+C -1 ; WX 680 ; N uogonek ; B 83 -179 720 511 ;
+C -1 ; WX 680 ; N umacron ; B 83 -9 720 691 ;
+C -1 ; WX 760 ; N Dcaron ; B 14 0 805 900 ;
+C -1 ; WX 509 ; N lcaron ; B 109 -9 569 740 ;
+C -1 ; WX 700 ; N Ccaron ; B 78 -13 754 900 ;
+C -1 ; WX 700 ; N Cacute ; B 78 -13 754 914 ;
+C -1 ; WX 700 ; N Ccedilla ; B 78 -215 754 694 ;
+C -1 ; WX 400 ; N degree ; B 130 380 430 686 ;
+C -1 ; WX 720 ; N Aogonek ; B -27 -179 797 681 ;
+C -1 ; WX 600 ; N minus ; B 91 293 595 407 ;
+C -1 ; WX 600 ; N multiply ; B 91 100 595 604 ;
+C -1 ; WX 600 ; N divide ; B 91 69 595 631 ;
+C -1 ; WX 720 ; N Aring ; B -27 0 769 927 ;
+C -1 ; WX 940 ; N trademark ; B 42 273 982 681 ;
+C -1 ; WX 500 ; N rcommaaccent ; B 66 -328 582 520 ;
+C -1 ; WX 380 ; N lacute ; B 109 -9 427 914 ;
+C -1 ; WX 600 ; N omacron ; B 59 -9 627 691 ;
+C -1 ; WX 720 ; N Atilde ; B -27 0 769 863 ;
+C -1 ; WX 380 ; N icircumflex ; B 83 -9 433 734 ;
+C -1 ; WX 380 ; N igrave ; B 83 -9 424 748 ;
+C -1 ; WX 680 ; N ncommaaccent ; B 83 -328 715 520 ;
+C -1 ; WX 380 ; N lcommaaccent ; B 86 -328 410 732 ;
+C -1 ; WX 600 ; N plusminus ; B 91 0 595 628 ;
+C -1 ; WX 1020 ; N onehalf ; B 118 0 1036 681 ;
+C -1 ; WX 1020 ; N onequarter ; B 118 0 1054 681 ;
+C -1 ; WX 1020 ; N threequarters ; B 86 0 1054 689 ;
+C -1 ; WX 380 ; N iacute ; B 83 -9 420 748 ;
+C -1 ; WX 720 ; N Abreve ; B -27 0 769 878 ;
+C -1 ; WX 700 ; N kcommaaccent ; B 97 -328 732 732 ;
+C -1 ; WX 760 ; N Omacron ; B 78 -13 806 844 ;
+C -1 ; WX 380 ; N imacron ; B 83 -9 481 691 ;
+C -1 ; WX 560 ; N emacron ; B 59 -9 596 691 ;
+C -1 ; WX 680 ; N amacron ; B 84 -9 735 691 ;
+C -1 ; WX 440 ; N tcommaaccent ; B 106 -328 488 659 ;
+C -1 ; WX 600 ; N ydieresis ; B 25 -204 642 729 ;
+C -1 ; WX 560 ; N zdotaccent ; B 36 -9 586 732 ;
+C -1 ; WX 560 ; N zcaron ; B 36 -9 586 734 ;
+C -1 ; WX 560 ; N zacute ; B 36 -9 586 748 ;
+C -1 ; WX 600 ; N yacute ; B 25 -204 642 748 ;
+C -1 ; WX 680 ; N uhungarumlaut ; B 83 -9 720 751 ;
+C -1 ; WX 600 ; N eth ; B 59 -9 662 735 ;
+C -1 ; WX 680 ; N uring ; B 83 -9 720 769 ;
+C -1 ; WX 760 ; N Ocircumflex ; B 78 -13 806 900 ;
+C -1 ; WX 360 ; N commaaccent ; B 76 -328 254 -50 ;
+C -1 ; WX 780 ; N copyright ; B 83 0 783 700 ;
+C -1 ; WX 780 ; N registered ; B 83 0 783 700 ;
+C -1 ; WX 720 ; N Acircumflex ; B -27 0 769 900 ;
+C -1 ; WX 380 ; N idieresis ; B 83 -9 479 729 ;
+C -1 ; WX 494 ; N lozenge ; B 83 0 531 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 91 63 595 646 ;
+C -1 ; WX 549 ; N radical ; B -4 -35 578 918 ;
+C -1 ; WX 720 ; N Agrave ; B -27 0 769 914 ;
+C -1 ; WX 720 ; N Aacute ; B -27 0 769 914 ;
+C -1 ; WX 600 ; N lessequal ; B 85 0 589 722 ;
+C -1 ; WX 600 ; N greaterequal ; B 91 0 595 722 ;
+C -1 ; WX 620 ; N logicalnot ; B 81 80 585 367 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 9 -10 478 755 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 14 -332 845 681 ;
+C -1 ; WX 680 ; N dcroat ; B 60 -9 742 732 ;
+C -1 ; WX 620 ; N brokenbar ; B 303 0 422 722 ;
+C -1 ; WX 640 ; N Lcommaaccent ; B 14 -332 725 681 ;
+C -1 ; WX 720 ; N Adieresis ; B -27 0 769 895 ;
+C -1 ; WX 680 ; N mu ; B 54 -195 720 511 ;
+C -1 ; WX 340 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -34
+KPX A Ccedilla -35
+KPX A G -30
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q 6
+KPX A T -39
+KPX A U -28
+KPX A Uacute -28
+KPX A Ucircumflex -28
+KPX A Udieresis -28
+KPX A Ugrave -28
+KPX A V -67
+KPX A W -52
+KPX A Y -36
+KPX A a -16
+KPX A b 6
+KPX A c -6
+KPX A ccedilla -8
+KPX A comma 11
+KPX A d -4
+KPX A e -6
+KPX A g -17
+KPX A guillemotleft -21
+KPX A guilsinglleft -21
+KPX A hyphen -4
+KPX A o -4
+KPX A period 8
+KPX A q -5
+KPX A quotedblright -82
+KPX A quoteright -82
+KPX A t -18
+KPX A u -16
+KPX A v -3
+KPX A w -3
+KPX A y -8
+KPX Aacute C -34
+KPX Aacute G -30
+KPX Aacute O -36
+KPX Aacute Q 6
+KPX Aacute T -39
+KPX Aacute U -28
+KPX Aacute V -67
+KPX Aacute W -52
+KPX Aacute Y -36
+KPX Aacute a -16
+KPX Aacute b 6
+KPX Aacute c -6
+KPX Aacute comma 11
+KPX Aacute d -4
+KPX Aacute e -6
+KPX Aacute g -17
+KPX Aacute guillemotleft -21
+KPX Aacute guilsinglleft -21
+KPX Aacute hyphen -4
+KPX Aacute o -4
+KPX Aacute period 8
+KPX Aacute q -5
+KPX Aacute quoteright -83
+KPX Aacute t -18
+KPX Aacute u -16
+KPX Aacute v -3
+KPX Aacute w -3
+KPX Aacute y -8
+KPX Acircumflex C -34
+KPX Acircumflex G -30
+KPX Acircumflex O -36
+KPX Acircumflex Q 6
+KPX Acircumflex T -39
+KPX Acircumflex U -28
+KPX Acircumflex V -67
+KPX Acircumflex W -52
+KPX Acircumflex Y -36
+KPX Acircumflex comma 11
+KPX Acircumflex period 8
+KPX Adieresis C -34
+KPX Adieresis G -30
+KPX Adieresis O -36
+KPX Adieresis Q 6
+KPX Adieresis T -39
+KPX Adieresis U -28
+KPX Adieresis V -67
+KPX Adieresis W -52
+KPX Adieresis Y -36
+KPX Adieresis a -16
+KPX Adieresis b 6
+KPX Adieresis c -6
+KPX Adieresis comma 11
+KPX Adieresis d -4
+KPX Adieresis g -17
+KPX Adieresis guillemotleft -21
+KPX Adieresis guilsinglleft -21
+KPX Adieresis hyphen -4
+KPX Adieresis o -4
+KPX Adieresis period 8
+KPX Adieresis q -5
+KPX Adieresis quotedblright -83
+KPX Adieresis quoteright -83
+KPX Adieresis t -18
+KPX Adieresis u -16
+KPX Adieresis v -3
+KPX Adieresis w -3
+KPX Adieresis y -8
+KPX Agrave C -34
+KPX Agrave G -30
+KPX Agrave O -36
+KPX Agrave Q 6
+KPX Agrave T -39
+KPX Agrave U -28
+KPX Agrave V -67
+KPX Agrave W -52
+KPX Agrave Y -36
+KPX Agrave comma 11
+KPX Agrave period 8
+KPX Aring C -34
+KPX Aring G -30
+KPX Aring O -36
+KPX Aring Q 6
+KPX Aring T -39
+KPX Aring U -28
+KPX Aring V -67
+KPX Aring W -52
+KPX Aring Y -36
+KPX Aring a -16
+KPX Aring b 6
+KPX Aring c -6
+KPX Aring comma 11
+KPX Aring d -4
+KPX Aring e -6
+KPX Aring g -17
+KPX Aring guillemotleft -21
+KPX Aring guilsinglleft -21
+KPX Aring hyphen -4
+KPX Aring o -4
+KPX Aring period 8
+KPX Aring q -5
+KPX Aring quotedblright -83
+KPX Aring quoteright -83
+KPX Aring t -18
+KPX Aring u -16
+KPX Aring v -3
+KPX Aring w -3
+KPX Aring y -8
+KPX Atilde C -34
+KPX Atilde G -30
+KPX Atilde O -36
+KPX Atilde Q 6
+KPX Atilde T -39
+KPX Atilde U -28
+KPX Atilde V -67
+KPX Atilde W -52
+KPX Atilde Y -36
+KPX Atilde comma 11
+KPX Atilde period 8
+KPX B A 2
+KPX B AE 2
+KPX B Aacute 2
+KPX B Acircumflex 2
+KPX B Adieresis 2
+KPX B Aring 2
+KPX B Atilde 2
+KPX B O -2
+KPX B OE -10
+KPX B Oacute -2
+KPX B Ocircumflex -2
+KPX B Odieresis -2
+KPX B Ograve -2
+KPX B Oslash -2
+KPX B V -5
+KPX B W -5
+KPX B Y -5
+KPX C A 2
+KPX C AE 1
+KPX C Aacute 2
+KPX C Adieresis 2
+KPX C Aring 2
+KPX C H -6
+KPX C K -6
+KPX C O -3
+KPX C Oacute -3
+KPX C Odieresis -3
+KPX Ccedilla A -2
+KPX D A -25
+KPX D Aacute -25
+KPX D Acircumflex -25
+KPX D Adieresis -25
+KPX D Agrave -25
+KPX D Aring -25
+KPX D Atilde -25
+KPX D J 11
+KPX D T -1
+KPX D V -28
+KPX D W -21
+KPX D X -34
+KPX D Y -28
+KPX F A -65
+KPX F Aacute -65
+KPX F Acircumflex -65
+KPX F Adieresis -65
+KPX F Agrave -65
+KPX F Aring -65
+KPX F Atilde -65
+KPX F J -43
+KPX F O 15
+KPX F Odieresis 15
+KPX F a -23
+KPX F aacute -23
+KPX F adieresis -23
+KPX F ae 10
+KPX F aring -23
+KPX F comma -110
+KPX F e -18
+KPX F eacute -18
+KPX F hyphen -12
+KPX F i 22
+KPX F j 15
+KPX F o -11
+KPX F oacute -11
+KPX F odieresis -11
+KPX F oe -6
+KPX F oslash -10
+KPX F period -113
+KPX F r 21
+KPX F u 22
+KPX G A -5
+KPX G AE -5
+KPX G Aacute -5
+KPX G Acircumflex -5
+KPX G Adieresis -5
+KPX G Agrave -5
+KPX G Aring -5
+KPX G Atilde -5
+KPX G T -20
+KPX G V -30
+KPX G W -19
+KPX G Y -30
+KPX J A -40
+KPX J AE -40
+KPX J Adieresis -40
+KPX J Aring -40
+KPX K C -35
+KPX K G -34
+KPX K O -35
+KPX K OE -43
+KPX K Oacute -35
+KPX K Odieresis -35
+KPX K S -11
+KPX K T -6
+KPX K a -24
+KPX K adieresis -24
+KPX K ae 12
+KPX K aring -24
+KPX K e -14
+KPX K hyphen -39
+KPX K o -12
+KPX K oacute -12
+KPX K odieresis -12
+KPX K u -24
+KPX K udieresis -24
+KPX K y -16
+KPX L A 27
+KPX L AE 26
+KPX L Aacute 27
+KPX L Adieresis 27
+KPX L Aring 27
+KPX L C 18
+KPX L Ccedilla 17
+KPX L G 19
+KPX L O 17
+KPX L Oacute 17
+KPX L Ocircumflex 17
+KPX L Odieresis 17
+KPX L Ograve 17
+KPX L Otilde 17
+KPX L S 28
+KPX L T -59
+KPX L U -6
+KPX L Udieresis -6
+KPX L V -47
+KPX L W -32
+KPX L Y -51
+KPX L hyphen 55
+KPX L quotedblright -73
+KPX L quoteright -73
+KPX L u 1
+KPX L udieresis -2
+KPX L y 8
+KPX N A -22
+KPX N AE -22
+KPX N Aacute -22
+KPX N Adieresis -22
+KPX N Aring -22
+KPX N C -20
+KPX N Ccedilla -19
+KPX N G -19
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -35
+KPX N aacute -37
+KPX N adieresis -37
+KPX N ae -21
+KPX N aring -37
+KPX N comma -37
+KPX N e -27
+KPX N eacute -29
+KPX N o -24
+KPX N oacute -26
+KPX N odieresis -26
+KPX N oslash -21
+KPX N period -40
+KPX N u -33
+KPX N udieresis -35
+KPX O A -27
+KPX O AE -27
+KPX O Aacute -27
+KPX O Adieresis -27
+KPX O Aring -27
+KPX O T -2
+KPX O V -33
+KPX O W -22
+KPX O X -35
+KPX O Y -33
+KPX Oacute A -27
+KPX Oacute T -2
+KPX Oacute V -33
+KPX Oacute W -22
+KPX Oacute Y -33
+KPX Ocircumflex T -2
+KPX Ocircumflex V -33
+KPX Ocircumflex Y -33
+KPX Odieresis A -27
+KPX Odieresis T -2
+KPX Odieresis V -33
+KPX Odieresis W -22
+KPX Odieresis X -35
+KPX Odieresis Y -33
+KPX Ograve T -2
+KPX Ograve V -33
+KPX Ograve Y -33
+KPX Oslash A -20
+KPX Otilde T -2
+KPX Otilde V -33
+KPX Otilde Y -33
+KPX P A -66
+KPX P AE -112
+KPX P Aacute -66
+KPX P Adieresis -66
+KPX P Aring -66
+KPX P J -43
+KPX P a -30
+KPX P aacute -30
+KPX P adieresis -30
+KPX P ae -3
+KPX P aring -30
+KPX P comma -108
+KPX P e -22
+KPX P eacute -22
+KPX P hyphen -8
+KPX P o -19
+KPX P oacute -19
+KPX P odieresis -19
+KPX P oe -13
+KPX P oslash -16
+KPX P period -111
+KPX R C -21
+KPX R Ccedilla -20
+KPX R G -20
+KPX R O -21
+KPX R OE -28
+KPX R Oacute -21
+KPX R Odieresis -21
+KPX R T -11
+KPX R U -26
+KPX R Udieresis -26
+KPX R V -17
+KPX R W -17
+KPX R Y -17
+KPX R a -28
+KPX R aacute -28
+KPX R adieresis -28
+KPX R ae 8
+KPX R aring -28
+KPX R e -18
+KPX R eacute -18
+KPX R hyphen -27
+KPX R o -16
+KPX R oacute -16
+KPX R odieresis -16
+KPX R oe -10
+KPX R u -23
+KPX R uacute -24
+KPX R udieresis -24
+KPX R y -16
+KPX S A 5
+KPX S AE 5
+KPX S Aacute 5
+KPX S Adieresis 5
+KPX S Aring 5
+KPX S T -10
+KPX S V -11
+KPX S W -11
+KPX S Y -11
+KPX S t -9
+KPX T A -51
+KPX T AE -52
+KPX T Aacute -51
+KPX T Acircumflex -51
+KPX T Adieresis -51
+KPX T Agrave -51
+KPX T Aring -51
+KPX T Atilde -51
+KPX T C 8
+KPX T G 8
+KPX T J -59
+KPX T O 10
+KPX T OE 2
+KPX T Oacute 10
+KPX T Ocircumflex 10
+KPX T Odieresis 10
+KPX T Ograve 10
+KPX T Oslash 7
+KPX T Otilde 10
+KPX T S 5
+KPX T V 16
+KPX T W 16
+KPX T Y 16
+KPX T a -35
+KPX T ae 1
+KPX T c -33
+KPX T colon -22
+KPX T comma -97
+KPX T e -34
+KPX T g -27
+KPX T guillemotleft -29
+KPX T guilsinglleft -29
+KPX T hyphen -84
+KPX T i 19
+KPX T j 12
+KPX T o -24
+KPX T oslash -22
+KPX T period -100
+KPX T r 18
+KPX T s -9
+KPX T semicolon -20
+KPX T u 19
+KPX T v 33
+KPX T w 33
+KPX T y 27
+KPX U A -35
+KPX U AE -35
+KPX U Aacute -35
+KPX U Acircumflex -35
+KPX U Adieresis -35
+KPX U Aring -35
+KPX U Atilde -35
+KPX U comma -49
+KPX U m -32
+KPX U n -32
+KPX U p -37
+KPX U period -52
+KPX U r -33
+KPX Uacute A -35
+KPX Uacute comma -49
+KPX Uacute m -32
+KPX Uacute n -32
+KPX Uacute p -37
+KPX Uacute period -52
+KPX Uacute r -33
+KPX Ucircumflex A -35
+KPX Udieresis A -35
+KPX Udieresis b 23
+KPX Udieresis comma -49
+KPX Udieresis m -32
+KPX Udieresis n -32
+KPX Udieresis p -37
+KPX Udieresis period -52
+KPX Udieresis r -33
+KPX Ugrave A -35
+KPX V A -70
+KPX V AE -86
+KPX V Aacute -70
+KPX V Acircumflex -70
+KPX V Adieresis -70
+KPX V Agrave -70
+KPX V Aring -70
+KPX V Atilde -70
+KPX V C -18
+KPX V G -20
+KPX V O -19
+KPX V Oacute -19
+KPX V Ocircumflex -19
+KPX V Odieresis -19
+KPX V Ograve -19
+KPX V Oslash -25
+KPX V Otilde -19
+KPX V S 4
+KPX V T 24
+KPX V a -66
+KPX V ae -49
+KPX V colon -76
+KPX V comma -94
+KPX V e -58
+KPX V g -63
+KPX V guillemotleft -52
+KPX V guilsinglleft -52
+KPX V hyphen -29
+KPX V i 3
+KPX V o -54
+KPX V oslash -51
+KPX V period -97
+KPX V r -31
+KPX V semicolon -74
+KPX V u -31
+KPX V y -23
+KPX W A -95
+KPX W AE -103
+KPX W Aacute -95
+KPX W Acircumflex -95
+KPX W Adieresis -95
+KPX W Agrave -95
+KPX W Aring -95
+KPX W Atilde -95
+KPX W C -52
+KPX W G -55
+KPX W O -53
+KPX W Oacute -53
+KPX W Ocircumflex -53
+KPX W Odieresis -53
+KPX W Ograve -53
+KPX W Oslash -58
+KPX W Otilde -53
+KPX W S -30
+KPX W T -10
+KPX W a -88
+KPX W ae -73
+KPX W colon -100
+KPX W comma -112
+KPX W e -80
+KPX W g -85
+KPX W guillemotleft -74
+KPX W guilsinglleft -74
+KPX W hyphen -52
+KPX W i -31
+KPX W o -77
+KPX W oslash -74
+KPX W period -115
+KPX W r -60
+KPX W semicolon -97
+KPX W u -60
+KPX W y -52
+KPX X C -42
+KPX X O -41
+KPX X Odieresis -41
+KPX X Q -5
+KPX X a -27
+KPX X e -18
+KPX X hyphen -55
+KPX X o -15
+KPX X u -28
+KPX X y -20
+KPX Y A -48
+KPX Y AE -48
+KPX Y Aacute -48
+KPX Y Acircumflex -48
+KPX Y Adieresis -48
+KPX Y Agrave -48
+KPX Y Aring -48
+KPX Y Atilde -48
+KPX Y C -19
+KPX Y G -21
+KPX Y O -20
+KPX Y Oacute -20
+KPX Y Ocircumflex -20
+KPX Y Odieresis -20
+KPX Y Ograve -20
+KPX Y Oslash -26
+KPX Y Otilde -20
+KPX Y S 3
+KPX Y T 23
+KPX Y a -84
+KPX Y ae -67
+KPX Y colon -90
+KPX Y comma -90
+KPX Y e -76
+KPX Y g -81
+KPX Y guillemotleft -78
+KPX Y guilsinglleft -78
+KPX Y hyphen -69
+KPX Y i 2
+KPX Y o -72
+KPX Y oslash -68
+KPX Y p -49
+KPX Y period -93
+KPX Y semicolon -88
+KPX Y u -46
+KPX Y v -32
+KPX Z v -6
+KPX Z y -10
+KPX a j -16
+KPX a quoteright -43
+KPX a v -2
+KPX a w -2
+KPX a y -7
+KPX aacute v -2
+KPX aacute w -2
+KPX aacute y -7
+KPX adieresis v -2
+KPX adieresis w -2
+KPX adieresis y -7
+KPX ae v 4
+KPX ae w 4
+KPX ae y -1
+KPX agrave v -2
+KPX agrave w -2
+KPX agrave y -7
+KPX aring v -2
+KPX aring w -2
+KPX aring y -7
+KPX b v -1
+KPX b w -1
+KPX b y -6
+KPX c h -26
+KPX c k -28
+KPX comma one -61
+KPX comma quotedblright -49
+KPX comma quoteright -49
+KPX e quoteright -18
+KPX e t -20
+KPX e v 6
+KPX e w 6
+KPX e x 5
+KPX e y 0
+KPX eacute v 6
+KPX eacute w 6
+KPX eacute y 0
+KPX ecircumflex v 6
+KPX ecircumflex w 6
+KPX ecircumflex y 0
+KPX eight four -19
+KPX eight one -84
+KPX eight seven -47
+KPX f a -48
+KPX f aacute -49
+KPX f adieresis -12
+KPX f ae -19
+KPX f aring -47
+KPX f e -40
+KPX f eacute -42
+KPX f f 6
+KPX f i 34
+KPX f j 26
+KPX f l 59
+KPX f o -36
+KPX f oacute -38
+KPX f odieresis 12
+KPX f oe -31
+KPX f oslash -33
+KPX f quoteright 31
+KPX f s -28
+KPX f t -17
+KPX five four -21
+KPX five one -94
+KPX five seven -69
+KPX four four -4
+KPX four one -82
+KPX four seven -66
+KPX g a -8
+KPX g adieresis -9
+KPX g ae 5
+KPX g aring -9
+KPX g e 0
+KPX g eacute -1
+KPX g l -14
+KPX g oacute 1
+KPX g odieresis 1
+KPX g r -4
+KPX guillemotright A -27
+KPX guillemotright AE -28
+KPX guillemotright Aacute -27
+KPX guillemotright Adieresis -27
+KPX guillemotright Aring -27
+KPX guillemotright T -52
+KPX guillemotright V -58
+KPX guillemotright W -41
+KPX guillemotright Y -75
+KPX guilsinglright A -26
+KPX guilsinglright AE -26
+KPX guilsinglright Aacute -26
+KPX guilsinglright Adieresis -26
+KPX guilsinglright Aring -26
+KPX guilsinglright T -50
+KPX guilsinglright V -57
+KPX guilsinglright W -40
+KPX guilsinglright Y -73
+KPX h quoteright -65
+KPX h y -16
+KPX hyphen A -12
+KPX hyphen AE -55
+KPX hyphen Aacute -12
+KPX hyphen Adieresis -12
+KPX hyphen Aring -12
+KPX hyphen T -77
+KPX hyphen V -33
+KPX hyphen W -15
+KPX hyphen Y -61
+KPX i T -41
+KPX i j -21
+KPX k a -28
+KPX k aacute -28
+KPX k adieresis -28
+KPX k ae 8
+KPX k aring -28
+KPX k comma -9
+KPX k e -18
+KPX k eacute -18
+KPX k g -29
+KPX k hyphen -35
+KPX k o -16
+KPX k oacute -16
+KPX k odieresis -16
+KPX k period -12
+KPX k s 11
+KPX k u -13
+KPX k udieresis -13
+KPX l v -15
+KPX l y -20
+KPX m p -19
+KPX m v -12
+KPX m w -12
+KPX m y -17
+KPX n T -47
+KPX n p -22
+KPX n quoteright -55
+KPX n v -13
+KPX n w -13
+KPX n y -18
+KPX nine four -16
+KPX nine one -80
+KPX nine seven -31
+KPX o T -39
+KPX o quoteright -34
+KPX o t -23
+KPX o v -4
+KPX o w -4
+KPX o x -16
+KPX o y -9
+KPX oacute v -4
+KPX oacute w -4
+KPX oacute y -9
+KPX ocircumflex t -24
+KPX odieresis t -24
+KPX odieresis v -4
+KPX odieresis w -4
+KPX odieresis x -16
+KPX odieresis y -9
+KPX ograve v -4
+KPX ograve w -4
+KPX ograve y -9
+KPX one comma -77
+KPX one eight -87
+KPX one five -87
+KPX one four -117
+KPX one nine -78
+KPX one one -108
+KPX one period -80
+KPX one seven -127
+KPX one six -93
+KPX one three -85
+KPX one two -75
+KPX one zero -93
+KPX p t -24
+KPX p y -10
+KPX period one -64
+KPX period quotedblright -50
+KPX period quoteright -50
+KPX q c -12
+KPX q u -18
+KPX quotedblbase A 29
+KPX quotedblbase AE 18
+KPX quotedblbase T -64
+KPX quotedblbase V -74
+KPX quotedblbase W -52
+KPX quotedblbase Y -57
+KPX quotedblleft A -89
+KPX quotedblleft AE -176
+KPX quotedblleft Aacute -90
+KPX quotedblleft Adieresis -90
+KPX quotedblleft Aring -90
+KPX quotedblleft T -3
+KPX quotedblleft V 6
+KPX quotedblleft W 12
+KPX quotedblleft Y 1
+KPX quotedblright A -91
+KPX quotedblright AE -183
+KPX quotedblright Aacute -92
+KPX quotedblright Adieresis -92
+KPX quotedblright Aring -92
+KPX quotedblright T -7
+KPX quotedblright V 5
+KPX quotedblright W 12
+KPX quotedblright Y 1
+KPX quoteleft A -95
+KPX quoteleft AE -182
+KPX quoteleft Aacute -96
+KPX quoteleft Adieresis -96
+KPX quoteleft Aring -96
+KPX quoteleft T -9
+KPX quoteleft V 0
+KPX quoteleft W 6
+KPX quoteleft Y -4
+KPX quoteright A -97
+KPX quoteright AE -189
+KPX quoteright Aacute -98
+KPX quoteright Adieresis -98
+KPX quoteright Aring -98
+KPX quoteright comma -76
+KPX quoteright d -46
+KPX quoteright o -43
+KPX quoteright period -79
+KPX quoteright r -26
+KPX quoteright s -33
+KPX quoteright t -31
+KPX quoteright v -12
+KPX quoteright w -12
+KPX quoteright y -15
+KPX r a -20
+KPX r aacute -20
+KPX r acircumflex -20
+KPX r adieresis -20
+KPX r ae 5
+KPX r agrave -20
+KPX r aring -20
+KPX r c -12
+KPX r ccedilla -9
+KPX r colon -27
+KPX r comma -115
+KPX r d -9
+KPX r e -13
+KPX r eacute -13
+KPX r ecircumflex -13
+KPX r egrave -13
+KPX r f -2
+KPX r g -15
+KPX r h -28
+KPX r hyphen -22
+KPX r i 13
+KPX r j 5
+KPX r k -30
+KPX r l -27
+KPX r m 12
+KPX r n 12
+KPX r o -9
+KPX r oacute -9
+KPX r ocircumflex -9
+KPX r odieresis -9
+KPX r oe -3
+KPX r ograve -9
+KPX r oslash -7
+KPX r p 8
+KPX r period -118
+KPX r q -10
+KPX r quoteright 2
+KPX r r 12
+KPX r s -1
+KPX r semicolon -25
+KPX r t 4
+KPX r u 12
+KPX r v 26
+KPX r w 27
+KPX r x 1
+KPX r y 20
+KPX r z 10
+KPX s quoteright -25
+KPX s t -19
+KPX seven colon -92
+KPX seven comma -102
+KPX seven eight -49
+KPX seven five -56
+KPX seven four -94
+KPX seven one -72
+KPX seven period -105
+KPX seven seven -36
+KPX seven six -55
+KPX seven three -45
+KPX seven two -39
+KPX six four -15
+KPX six one -80
+KPX six seven -46
+KPX t S -9
+KPX t a -28
+KPX t aacute -28
+KPX t adieresis -28
+KPX t ae 6
+KPX t aring -28
+KPX t colon -27
+KPX t e -18
+KPX t eacute -18
+KPX t h -26
+KPX t o -15
+KPX t oacute -15
+KPX t odieresis -15
+KPX t quoteright -30
+KPX t semicolon -24
+KPX three four -24
+KPX three one -87
+KPX three seven -47
+KPX two four -29
+KPX two one -87
+KPX two seven -50
+KPX u quoteright -43
+KPX v a -15
+KPX v aacute -15
+KPX v acircumflex -15
+KPX v adieresis -15
+KPX v ae -5
+KPX v agrave -15
+KPX v aring -15
+KPX v atilde -15
+KPX v c -6
+KPX v colon -36
+KPX v comma -40
+KPX v e -7
+KPX v eacute -7
+KPX v ecircumflex -7
+KPX v egrave -7
+KPX v g -14
+KPX v hyphen 24
+KPX v l -23
+KPX v o -4
+KPX v oacute -4
+KPX v odieresis -4
+KPX v ograve -4
+KPX v oslash -2
+KPX v period -43
+KPX v s -5
+KPX v semicolon -34
+KPX w a -14
+KPX w aacute -14
+KPX w acircumflex -14
+KPX w adieresis -14
+KPX w ae -4
+KPX w agrave -14
+KPX w aring -14
+KPX w atilde -14
+KPX w c -4
+KPX w colon -36
+KPX w comma -37
+KPX w e -5
+KPX w eacute -5
+KPX w ecircumflex -5
+KPX w egrave -5
+KPX w g -13
+KPX w hyphen 25
+KPX w l -22
+KPX w o -3
+KPX w oacute -3
+KPX w odieresis -3
+KPX w ograve -3
+KPX w oslash -1
+KPX w period -40
+KPX w s -4
+KPX w semicolon -33
+KPX x a -32
+KPX x c -22
+KPX x e -22
+KPX x eacute -22
+KPX x o -20
+KPX x q -21
+KPX y a -9
+KPX y aacute -9
+KPX y acircumflex -9
+KPX y adieresis -9
+KPX y ae 4
+KPX y agrave -9
+KPX y aring -9
+KPX y atilde -9
+KPX y c 0
+KPX y colon -27
+KPX y comma -16
+KPX y e 0
+KPX y eacute 0
+KPX y ecircumflex 0
+KPX y egrave 0
+KPX y g -7
+KPX y hyphen 18
+KPX y l -16
+KPX y o 2
+KPX y oacute 2
+KPX y odieresis 2
+KPX y ograve 2
+KPX y oslash 5
+KPX y period -19
+KPX y s 3
+KPX y semicolon -24
+KPX zero four -17
+KPX zero one -82
+KPX zero seven -36
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkdi8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ubkdi8a.pfb
new file mode 100644
index 00000000000..6520e718dce
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkdi8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkl8a.afm b/Master/tlpkg/tlgs/lib/fonts/ubkl8a.afm
new file mode 100644
index 00000000000..8117c789e92
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkl8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWBookmanL-Ligh
+FullName URW Bookman L Light
+FamilyName URW Bookman L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -188 -268 1266 930
+CapHeight 681
+XHeight 485
+Descender -228
+Ascender 717
+StartCharMetrics 316
+C 32 ; WX 320 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 300 ; N exclam ; B 75 -13 219 694 ;
+C 34 ; WX 380 ; N quotedbl ; B 56 445 323 694 ;
+C 35 ; WX 620 ; N numbersign ; B 65 0 556 666 ;
+C 36 ; WX 620 ; N dollar ; B 34 -110 593 791 ;
+C 37 ; WX 900 ; N percent ; B 22 -8 873 689 ;
+C 38 ; WX 800 ; N ampersand ; B 45 -13 787 694 ;
+C 39 ; WX 220 ; N quoteright ; B 46 476 178 694 ;
+C 40 ; WX 300 ; N parenleft ; B 76 -151 278 717 ;
+C 41 ; WX 300 ; N parenright ; B 17 -151 219 717 ;
+C 42 ; WX 440 ; N asterisk ; B 54 323 391 694 ;
+C 43 ; WX 600 ; N plus ; B 51 111 555 595 ;
+C 44 ; WX 320 ; N comma ; B 90 -112 223 117 ;
+C 45 ; WX 400 ; N hyphen ; B 50 232 350 289 ;
+C 46 ; WX 320 ; N period ; B 92 -13 220 115 ;
+C 47 ; WX 600 ; N slash ; B 74 -141 532 717 ;
+C 48 ; WX 620 ; N zero ; B 40 -13 586 694 ;
+C 49 ; WX 620 ; N one ; B 160 0 501 681 ;
+C 50 ; WX 620 ; N two ; B 42 0 576 694 ;
+C 51 ; WX 620 ; N three ; B 40 -13 576 694 ;
+C 52 ; WX 620 ; N four ; B 25 0 600 681 ;
+C 53 ; WX 620 ; N five ; B 60 -13 584 717 ;
+C 54 ; WX 620 ; N six ; B 45 -13 590 694 ;
+C 55 ; WX 620 ; N seven ; B 60 0 586 681 ;
+C 56 ; WX 620 ; N eight ; B 44 -13 583 694 ;
+C 57 ; WX 620 ; N nine ; B 37 -13 576 694 ;
+C 58 ; WX 320 ; N colon ; B 92 -13 220 494 ;
+C 59 ; WX 320 ; N semicolon ; B 90 -112 223 494 ;
+C 60 ; WX 600 ; N less ; B 49 49 558 599 ;
+C 61 ; WX 600 ; N equal ; B 51 217 555 489 ;
+C 62 ; WX 600 ; N greater ; B 48 49 557 599 ;
+C 63 ; WX 540 ; N question ; B 27 -13 514 694 ;
+C 64 ; WX 820 ; N at ; B 55 -13 755 700 ;
+C 65 ; WX 680 ; N A ; B -37 0 714 681 ;
+C 66 ; WX 740 ; N B ; B 31 0 702 681 ;
+C 67 ; WX 740 ; N C ; B 44 -13 702 694 ;
+C 68 ; WX 800 ; N D ; B 31 0 752 681 ;
+C 69 ; WX 720 ; N E ; B 31 0 705 681 ;
+C 70 ; WX 640 ; N F ; B 31 0 654 681 ;
+C 71 ; WX 800 ; N G ; B 44 -13 778 694 ;
+C 72 ; WX 800 ; N H ; B 31 0 769 681 ;
+C 73 ; WX 340 ; N I ; B 31 0 301 681 ;
+C 74 ; WX 600 ; N J ; B -23 -13 567 681 ;
+C 75 ; WX 720 ; N K ; B 31 0 750 681 ;
+C 76 ; WX 600 ; N L ; B 31 0 629 681 ;
+C 77 ; WX 920 ; N M ; B 26 0 894 681 ;
+C 78 ; WX 740 ; N N ; B 26 0 722 681 ;
+C 79 ; WX 800 ; N O ; B 44 -13 758 694 ;
+C 80 ; WX 620 ; N P ; B 31 0 613 681 ;
+C 81 ; WX 820 ; N Q ; B 44 -190 769 694 ;
+C 82 ; WX 720 ; N R ; B 31 0 757 681 ;
+C 83 ; WX 660 ; N S ; B 28 -13 634 694 ;
+C 84 ; WX 620 ; N T ; B -37 0 656 681 ;
+C 85 ; WX 780 ; N U ; B 25 -13 754 681 ;
+C 86 ; WX 700 ; N V ; B -30 0 725 681 ;
+C 87 ; WX 960 ; N W ; B -30 0 984 681 ;
+C 88 ; WX 720 ; N X ; B -30 0 755 681 ;
+C 89 ; WX 640 ; N Y ; B -30 0 666 681 ;
+C 90 ; WX 640 ; N Z ; B 10 0 656 681 ;
+C 91 ; WX 300 ; N bracketleft ; B 92 -141 258 717 ;
+C 92 ; WX 600 ; N backslash ; B 74 0 532 717 ;
+C 93 ; WX 300 ; N bracketright ; B 41 -141 207 717 ;
+C 94 ; WX 600 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 220 ; N quoteleft ; B 46 475 178 694 ;
+C 97 ; WX 580 ; N a ; B 35 -9 587 494 ;
+C 98 ; WX 620 ; N b ; B -2 -9 582 717 ;
+C 99 ; WX 520 ; N c ; B 37 -9 498 494 ;
+C 100 ; WX 620 ; N d ; B 37 -9 591 717 ;
+C 101 ; WX 520 ; N e ; B 37 -9 491 494 ;
+C 102 ; WX 320 ; N f ; B 20 0 414 734 ;
+C 103 ; WX 540 ; N g ; B 17 -241 542 563 ;
+C 104 ; WX 660 ; N h ; B 20 0 643 717 ;
+C 105 ; WX 300 ; N i ; B 20 0 288 654 ;
+C 106 ; WX 300 ; N j ; B -109 -241 214 654 ;
+C 107 ; WX 620 ; N k ; B 20 0 628 717 ;
+C 108 ; WX 300 ; N l ; B 20 0 286 717 ;
+C 109 ; WX 940 ; N m ; B 17 0 928 494 ;
+C 110 ; WX 660 ; N n ; B 20 0 649 494 ;
+C 111 ; WX 560 ; N o ; B 37 -9 526 494 ;
+C 112 ; WX 620 ; N p ; B 20 -228 583 494 ;
+C 113 ; WX 580 ; N q ; B 37 -228 589 494 ;
+C 114 ; WX 440 ; N r ; B 20 0 447 494 ;
+C 115 ; WX 520 ; N s ; B 40 -9 487 494 ;
+C 116 ; WX 380 ; N t ; B 20 -9 388 667 ;
+C 117 ; WX 680 ; N u ; B 20 -9 653 485 ;
+C 118 ; WX 520 ; N v ; B -23 0 534 485 ;
+C 119 ; WX 780 ; N w ; B -19 0 804 485 ;
+C 120 ; WX 560 ; N x ; B -16 0 576 485 ;
+C 121 ; WX 540 ; N y ; B -23 -241 549 485 ;
+C 122 ; WX 480 ; N z ; B 7 0 476 485 ;
+C 123 ; WX 280 ; N braceleft ; B 35 -122 248 738 ;
+C 124 ; WX 600 ; N bar ; B 264 0 342 722 ;
+C 125 ; WX 280 ; N braceright ; B 35 -122 248 738 ;
+C 126 ; WX 600 ; N asciitilde ; B 52 152 556 332 ;
+C 161 ; WX 300 ; N exclamdown ; B 75 -213 219 494 ;
+C 162 ; WX 620 ; N cent ; B 116 21 511 652 ;
+C 163 ; WX 620 ; N sterling ; B 8 -13 631 694 ;
+C 164 ; WX 140 ; N fraction ; B -188 0 335 681 ;
+C 165 ; WX 620 ; N yen ; B -22 0 647 681 ;
+C 166 ; WX 620 ; N florin ; B -29 -155 633 749 ;
+C 167 ; WX 520 ; N section ; B 33 -183 486 694 ;
+C 168 ; WX 620 ; N currency ; B 58 105 563 606 ;
+C 169 ; WX 220 ; N quotesingle ; B 67 445 153 694 ;
+C 170 ; WX 400 ; N quotedblleft ; B 46 475 348 694 ;
+C 171 ; WX 360 ; N guillemotleft ; B 51 89 312 437 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 51 89 189 437 ;
+C 173 ; WX 240 ; N guilsinglright ; B 51 89 189 437 ;
+C 174 ; WX 620 ; N fi ; B 20 0 608 734 ;
+C 175 ; WX 620 ; N fl ; B 20 0 606 734 ;
+C 177 ; WX 500 ; N endash ; B -15 232 515 289 ;
+C 178 ; WX 540 ; N dagger ; B 79 -161 455 694 ;
+C 179 ; WX 540 ; N daggerdbl ; B 79 -161 455 694 ;
+C 180 ; WX 320 ; N periodcentered ; B 92 196 222 326 ;
+C 182 ; WX 600 ; N paragraph ; B 14 0 577 681 ;
+C 183 ; WX 460 ; N bullet ; B 60 213 404 557 ;
+C 184 ; WX 220 ; N quotesinglbase ; B 46 -106 178 112 ;
+C 185 ; WX 400 ; N quotedblbase ; B 46 -107 348 112 ;
+C 186 ; WX 400 ; N quotedblright ; B 46 475 348 694 ;
+C 187 ; WX 360 ; N guillemotright ; B 51 89 312 437 ;
+C 188 ; WX 1000 ; N ellipsis ; B 101 -13 898 115 ;
+C 189 ; WX 1280 ; N perthousand ; B 22 -8 1266 689 ;
+C 191 ; WX 540 ; N questiondown ; B 23 -213 510 494 ;
+C 193 ; WX 340 ; N grave ; B 68 564 274 680 ;
+C 194 ; WX 340 ; N acute ; B 68 564 274 680 ;
+C 195 ; WX 420 ; N circumflex ; B 68 563 352 681 ;
+C 196 ; WX 440 ; N tilde ; B 68 573 375 659 ;
+C 197 ; WX 440 ; N macron ; B 68 587 364 637 ;
+C 198 ; WX 460 ; N breve ; B 68 563 396 682 ;
+C 199 ; WX 260 ; N dotaccent ; B 68 563 186 681 ;
+C 200 ; WX 420 ; N dieresis ; B 68 563 349 681 ;
+C 202 ; WX 320 ; N ring ; B 68 547 252 732 ;
+C 203 ; WX 320 ; N cedilla ; B 68 -200 257 0 ;
+C 205 ; WX 380 ; N hungarumlaut ; B 68 539 311 700 ;
+C 206 ; WX 320 ; N ogonek ; B 68 -152 245 0 ;
+C 207 ; WX 420 ; N caron ; B 68 562 352 680 ;
+C 208 ; WX 1000 ; N emdash ; B -15 232 1015 289 ;
+C 225 ; WX 1260 ; N AE ; B -36 0 1250 681 ;
+C 227 ; WX 420 ; N ordfeminine ; B 49 288 393 685 ;
+C 232 ; WX 600 ; N Lslash ; B 31 0 629 681 ;
+C 233 ; WX 800 ; N Oslash ; B 44 -53 758 734 ;
+C 234 ; WX 1240 ; N OE ; B 44 -13 1214 694 ;
+C 235 ; WX 420 ; N ordmasculine ; B 56 288 361 685 ;
+C 241 ; WX 860 ; N ae ; B 35 -9 832 494 ;
+C 245 ; WX 300 ; N dotlessi ; B 20 0 288 485 ;
+C 248 ; WX 320 ; N lslash ; B 20 0 291 717 ;
+C 249 ; WX 560 ; N oslash ; B 37 -42 526 543 ;
+C 250 ; WX 900 ; N oe ; B 37 -9 876 494 ;
+C 251 ; WX 660 ; N germandbls ; B -109 -110 614 694 ;
+C -1 ; WX 780 ; N Udieresis ; B 25 -13 754 871 ;
+C -1 ; WX 780 ; N Uacute ; B 25 -13 754 869 ;
+C -1 ; WX 660 ; N Scedilla ; B 28 -200 634 694 ;
+C -1 ; WX 620 ; N Tcaron ; B -37 0 656 869 ;
+C -1 ; WX 660 ; N Scaron ; B 28 -13 634 869 ;
+C -1 ; WX 720 ; N Rcaron ; B 31 0 757 869 ;
+C -1 ; WX 720 ; N Racute ; B 31 0 757 869 ;
+C -1 ; WX 660 ; N Sacute ; B 28 -13 634 869 ;
+C -1 ; WX 800 ; N Otilde ; B 44 -13 758 852 ;
+C -1 ; WX 680 ; N ucircumflex ; B 20 -9 653 681 ;
+C -1 ; WX 800 ; N Ohungarumlaut ; B 44 -13 758 889 ;
+C -1 ; WX 780 ; N Uhungarumlaut ; B 25 -13 754 889 ;
+C -1 ; WX 640 ; N Yacute ; B -30 0 666 869 ;
+C -1 ; WX 800 ; N Eth ; B 31 0 752 681 ;
+C -1 ; WX 800 ; N Dcroat ; B 31 0 752 681 ;
+C -1 ; WX 640 ; N Zacute ; B 10 0 656 869 ;
+C -1 ; WX 780 ; N Uring ; B 25 -13 754 921 ;
+C -1 ; WX 540 ; N gbreve ; B 17 -241 542 682 ;
+C -1 ; WX 520 ; N eogonek ; B 37 -152 491 494 ;
+C -1 ; WX 520 ; N edotaccent ; B 37 -9 491 681 ;
+C -1 ; WX 520 ; N ecaron ; B 37 -9 491 680 ;
+C -1 ; WX 780 ; N Ugrave ; B 25 -13 754 869 ;
+C -1 ; WX 620 ; N Thorn ; B 31 0 613 681 ;
+C -1 ; WX 520 ; N eacute ; B 37 -9 491 680 ;
+C -1 ; WX 520 ; N edieresis ; B 37 -9 491 681 ;
+C -1 ; WX 620 ; N dcaron ; B 37 -9 667 718 ;
+C -1 ; WX 520 ; N ccedilla ; B 37 -200 498 494 ;
+C -1 ; WX 520 ; N ccaron ; B 37 -9 498 680 ;
+C -1 ; WX 520 ; N cacute ; B 37 -9 498 680 ;
+C -1 ; WX 580 ; N aogonek ; B 35 -152 640 494 ;
+C -1 ; WX 580 ; N aring ; B 35 -9 587 732 ;
+C -1 ; WX 580 ; N atilde ; B 35 -9 587 659 ;
+C -1 ; WX 580 ; N abreve ; B 35 -9 587 682 ;
+C -1 ; WX 520 ; N egrave ; B 37 -9 491 680 ;
+C -1 ; WX 580 ; N agrave ; B 35 -9 587 680 ;
+C -1 ; WX 580 ; N aacute ; B 35 -9 587 680 ;
+C -1 ; WX 580 ; N adieresis ; B 35 -9 587 681 ;
+C -1 ; WX 780 ; N Uogonek ; B 25 -152 754 681 ;
+C -1 ; WX 680 ; N ugrave ; B 20 -9 653 680 ;
+C -1 ; WX 680 ; N uacute ; B 20 -9 653 680 ;
+C -1 ; WX 680 ; N udieresis ; B 20 -9 653 681 ;
+C -1 ; WX 380 ; N tcaron ; B 20 -9 388 718 ;
+C -1 ; WX 520 ; N scommaaccent ; B 40 -268 487 494 ;
+C -1 ; WX 640 ; N Zcaron ; B 10 0 656 869 ;
+C -1 ; WX 520 ; N ecircumflex ; B 37 -9 491 681 ;
+C -1 ; WX 780 ; N Ucircumflex ; B 25 -13 754 871 ;
+C -1 ; WX 580 ; N acircumflex ; B 35 -9 587 681 ;
+C -1 ; WX 640 ; N Zdotaccent ; B 10 0 656 870 ;
+C -1 ; WX 520 ; N scaron ; B 40 -9 487 680 ;
+C -1 ; WX 680 ; N Amacron ; B -37 0 714 826 ;
+C -1 ; WX 520 ; N sacute ; B 40 -9 487 680 ;
+C -1 ; WX 620 ; N Tcommaaccent ; B -37 -268 656 681 ;
+C -1 ; WX 640 ; N Ydieresis ; B -30 0 666 871 ;
+C -1 ; WX 620 ; N thorn ; B 20 -228 583 717 ;
+C -1 ; WX 720 ; N Emacron ; B 31 0 705 826 ;
+C -1 ; WX 800 ; N Ograve ; B 44 -13 758 869 ;
+C -1 ; WX 800 ; N Oacute ; B 44 -13 758 869 ;
+C -1 ; WX 800 ; N Odieresis ; B 44 -13 758 871 ;
+C -1 ; WX 740 ; N Ntilde ; B 26 0 722 852 ;
+C -1 ; WX 740 ; N Ncaron ; B 26 0 722 869 ;
+C -1 ; WX 740 ; N Nacute ; B 26 0 722 869 ;
+C -1 ; WX 600 ; N Lcaron ; B 31 0 629 694 ;
+C -1 ; WX 600 ; N Lacute ; B 31 0 629 869 ;
+C -1 ; WX 340 ; N Idotaccent ; B 31 0 301 870 ;
+C -1 ; WX 440 ; N racute ; B 20 0 447 680 ;
+C -1 ; WX 340 ; N Icircumflex ; B 28 0 312 871 ;
+C -1 ; WX 560 ; N ohungarumlaut ; B 37 -9 526 700 ;
+C -1 ; WX 560 ; N otilde ; B 37 -9 526 659 ;
+C -1 ; WX 620 ; N Euro ; B 17 -13 582 694 ;
+C -1 ; WX 560 ; N ocircumflex ; B 37 -9 526 681 ;
+C -1 ; WX 372 ; N onesuperior ; B 80 273 302 681 ;
+C -1 ; WX 372 ; N twosuperior ; B 20 273 367 689 ;
+C -1 ; WX 372 ; N threesuperior ; B 12 265 360 689 ;
+C -1 ; WX 340 ; N Igrave ; B 31 0 301 869 ;
+C -1 ; WX 340 ; N Iacute ; B 31 0 301 869 ;
+C -1 ; WX 340 ; N Imacron ; B 18 0 314 826 ;
+C -1 ; WX 340 ; N Iogonek ; B 31 -152 391 681 ;
+C -1 ; WX 340 ; N Idieresis ; B 28 0 309 871 ;
+C -1 ; WX 800 ; N Gbreve ; B 44 -13 778 871 ;
+C -1 ; WX 780 ; N Umacron ; B 25 -13 754 826 ;
+C -1 ; WX 720 ; N Kcommaaccent ; B 31 -268 750 681 ;
+C -1 ; WX 560 ; N ograve ; B 37 -9 526 680 ;
+C -1 ; WX 660 ; N Scommaaccent ; B 28 -268 634 694 ;
+C -1 ; WX 720 ; N Eogonek ; B 31 -152 705 681 ;
+C -1 ; WX 560 ; N oacute ; B 37 -9 526 680 ;
+C -1 ; WX 720 ; N Edotaccent ; B 31 0 705 870 ;
+C -1 ; WX 300 ; N iogonek ; B 20 -152 378 654 ;
+C -1 ; WX 540 ; N gcommaaccent ; B 17 -241 542 754 ;
+C -1 ; WX 560 ; N odieresis ; B 37 -9 526 681 ;
+C -1 ; WX 660 ; N ntilde ; B 20 0 649 659 ;
+C -1 ; WX 660 ; N ncaron ; B 20 0 649 680 ;
+C -1 ; WX 720 ; N Ecaron ; B 31 0 705 869 ;
+C -1 ; WX 720 ; N Ecircumflex ; B 31 0 705 871 ;
+C -1 ; WX 520 ; N scedilla ; B 40 -200 487 494 ;
+C -1 ; WX 440 ; N rcaron ; B 20 0 447 680 ;
+C -1 ; WX 720 ; N Egrave ; B 31 0 705 869 ;
+C -1 ; WX 720 ; N Eacute ; B 31 0 705 869 ;
+C -1 ; WX 800 ; N Gcommaaccent ; B 44 -268 778 694 ;
+C -1 ; WX 720 ; N Rcommaaccent ; B 31 -268 757 681 ;
+C -1 ; WX 720 ; N Edieresis ; B 31 0 705 871 ;
+C -1 ; WX 660 ; N nacute ; B 20 0 649 680 ;
+C -1 ; WX 680 ; N uogonek ; B 20 -152 743 485 ;
+C -1 ; WX 680 ; N umacron ; B 20 -9 653 637 ;
+C -1 ; WX 800 ; N Dcaron ; B 31 0 752 869 ;
+C -1 ; WX 336 ; N lcaron ; B 20 0 356 718 ;
+C -1 ; WX 740 ; N Ccaron ; B 44 -13 702 869 ;
+C -1 ; WX 740 ; N Cacute ; B 44 -13 702 869 ;
+C -1 ; WX 740 ; N Ccedilla ; B 44 -200 702 694 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 680 ; N Aogonek ; B -37 -152 804 681 ;
+C -1 ; WX 600 ; N minus ; B 51 314 555 392 ;
+C -1 ; WX 600 ; N multiply ; B 51 100 555 604 ;
+C -1 ; WX 600 ; N divide ; B 51 91 555 615 ;
+C -1 ; WX 680 ; N Aring ; B -37 0 714 922 ;
+C -1 ; WX 980 ; N trademark ; B 34 273 930 681 ;
+C -1 ; WX 440 ; N rcommaaccent ; B 20 -268 447 494 ;
+C -1 ; WX 300 ; N lacute ; B 20 0 286 869 ;
+C -1 ; WX 560 ; N omacron ; B 37 -9 526 637 ;
+C -1 ; WX 680 ; N Atilde ; B -37 0 714 852 ;
+C -1 ; WX 300 ; N icircumflex ; B 8 0 292 681 ;
+C -1 ; WX 300 ; N igrave ; B 20 0 288 680 ;
+C -1 ; WX 660 ; N ncommaaccent ; B 20 -268 649 494 ;
+C -1 ; WX 300 ; N lcommaaccent ; B 20 -268 286 717 ;
+C -1 ; WX 600 ; N plusminus ; B 51 0 555 595 ;
+C -1 ; WX 930 ; N onehalf ; B 80 0 885 681 ;
+C -1 ; WX 930 ; N onequarter ; B 80 0 869 681 ;
+C -1 ; WX 930 ; N threequarters ; B 52 0 889 689 ;
+C -1 ; WX 300 ; N iacute ; B 20 0 288 680 ;
+C -1 ; WX 680 ; N Abreve ; B -37 0 714 871 ;
+C -1 ; WX 620 ; N kcommaaccent ; B 20 -268 628 717 ;
+C -1 ; WX 800 ; N Omacron ; B 44 -13 758 826 ;
+C -1 ; WX 300 ; N imacron ; B -2 0 294 637 ;
+C -1 ; WX 520 ; N emacron ; B 37 -9 491 637 ;
+C -1 ; WX 580 ; N amacron ; B 35 -9 587 637 ;
+C -1 ; WX 380 ; N tcommaaccent ; B 20 -268 388 667 ;
+C -1 ; WX 540 ; N ydieresis ; B -23 -241 549 681 ;
+C -1 ; WX 480 ; N zdotaccent ; B 7 0 476 681 ;
+C -1 ; WX 480 ; N zcaron ; B 7 0 476 680 ;
+C -1 ; WX 480 ; N zacute ; B 7 0 476 680 ;
+C -1 ; WX 540 ; N yacute ; B -23 -241 549 680 ;
+C -1 ; WX 680 ; N uhungarumlaut ; B 20 -9 653 700 ;
+C -1 ; WX 560 ; N eth ; B 37 -9 526 759 ;
+C -1 ; WX 680 ; N uring ; B 20 -9 653 732 ;
+C -1 ; WX 800 ; N Ocircumflex ; B 44 -13 758 871 ;
+C -1 ; WX 268 ; N commaaccent ; B 68 -268 200 -50 ;
+C -1 ; WX 740 ; N copyright ; B 24 0 724 700 ;
+C -1 ; WX 740 ; N registered ; B 23 0 723 700 ;
+C -1 ; WX 680 ; N Acircumflex ; B -37 0 714 871 ;
+C -1 ; WX 300 ; N idieresis ; B 8 0 289 681 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 51 101 555 610 ;
+C -1 ; WX 549 ; N radical ; B -9 -83 532 930 ;
+C -1 ; WX 680 ; N Agrave ; B -37 0 714 869 ;
+C -1 ; WX 680 ; N Aacute ; B -37 0 714 869 ;
+C -1 ; WX 600 ; N lessequal ; B 45 0 549 649 ;
+C -1 ; WX 600 ; N greaterequal ; B 51 0 555 649 ;
+C -1 ; WX 600 ; N logicalnot ; B 51 80 555 370 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 740 ; N Ncommaaccent ; B 26 -268 722 681 ;
+C -1 ; WX 620 ; N dcroat ; B 37 -9 591 717 ;
+C -1 ; WX 600 ; N brokenbar ; B 264 0 342 722 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 31 -268 629 681 ;
+C -1 ; WX 680 ; N Adieresis ; B -37 0 714 871 ;
+C -1 ; WX 680 ; N mu ; B 20 -219 653 485 ;
+C -1 ; WX 320 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -34
+KPX A Ccedilla -33
+KPX A G -34
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -36
+KPX A T -18
+KPX A U -34
+KPX A Uacute -34
+KPX A Ucircumflex -34
+KPX A Udieresis -34
+KPX A Ugrave -34
+KPX A V -71
+KPX A W -58
+KPX A Y -14
+KPX A a 21
+KPX A b 13
+KPX A c -9
+KPX A ccedilla -9
+KPX A comma 17
+KPX A d -5
+KPX A e -13
+KPX A g 24
+KPX A guillemotleft -24
+KPX A guilsinglleft -24
+KPX A hyphen -2
+KPX A o -8
+KPX A period 15
+KPX A q -9
+KPX A quotedblright -61
+KPX A quoteright -61
+KPX A t -7
+KPX A u -15
+KPX A v -36
+KPX A w -34
+KPX A y -40
+KPX Aacute C -34
+KPX Aacute G -34
+KPX Aacute O -35
+KPX Aacute Q -36
+KPX Aacute T -18
+KPX Aacute U -34
+KPX Aacute V -71
+KPX Aacute W -58
+KPX Aacute Y -14
+KPX Aacute a 21
+KPX Aacute b 13
+KPX Aacute c -9
+KPX Aacute comma 17
+KPX Aacute d -5
+KPX Aacute e -13
+KPX Aacute g 24
+KPX Aacute guillemotleft -24
+KPX Aacute guilsinglleft -24
+KPX Aacute hyphen -2
+KPX Aacute o -8
+KPX Aacute period 15
+KPX Aacute q -9
+KPX Aacute quoteright -61
+KPX Aacute t -7
+KPX Aacute u -15
+KPX Aacute v -36
+KPX Aacute w -34
+KPX Aacute y -40
+KPX Acircumflex C -34
+KPX Acircumflex G -34
+KPX Acircumflex O -35
+KPX Acircumflex Q -36
+KPX Acircumflex T -18
+KPX Acircumflex U -34
+KPX Acircumflex V -71
+KPX Acircumflex W -58
+KPX Acircumflex Y -14
+KPX Acircumflex comma 17
+KPX Acircumflex period 15
+KPX Adieresis C -34
+KPX Adieresis G -34
+KPX Adieresis O -35
+KPX Adieresis Q -36
+KPX Adieresis T -18
+KPX Adieresis U -34
+KPX Adieresis V -71
+KPX Adieresis W -58
+KPX Adieresis Y -14
+KPX Adieresis a 21
+KPX Adieresis b 13
+KPX Adieresis c -9
+KPX Adieresis comma 17
+KPX Adieresis d -5
+KPX Adieresis g 24
+KPX Adieresis guillemotleft -24
+KPX Adieresis guilsinglleft -24
+KPX Adieresis hyphen -2
+KPX Adieresis o -8
+KPX Adieresis period 15
+KPX Adieresis q -9
+KPX Adieresis quotedblright -61
+KPX Adieresis quoteright -61
+KPX Adieresis t -7
+KPX Adieresis u -15
+KPX Adieresis v -36
+KPX Adieresis w -34
+KPX Adieresis y -40
+KPX Agrave C -34
+KPX Agrave G -34
+KPX Agrave O -35
+KPX Agrave Q -36
+KPX Agrave T -18
+KPX Agrave U -34
+KPX Agrave V -71
+KPX Agrave W -58
+KPX Agrave Y -14
+KPX Agrave comma 17
+KPX Agrave period 15
+KPX Aring C -34
+KPX Aring G -34
+KPX Aring O -35
+KPX Aring Q -36
+KPX Aring T -18
+KPX Aring U -34
+KPX Aring V -71
+KPX Aring W -58
+KPX Aring Y -14
+KPX Aring a 21
+KPX Aring b 13
+KPX Aring c -9
+KPX Aring comma 17
+KPX Aring d -5
+KPX Aring e -13
+KPX Aring g 24
+KPX Aring guillemotleft -24
+KPX Aring guilsinglleft -24
+KPX Aring hyphen -2
+KPX Aring o -8
+KPX Aring period 15
+KPX Aring q -9
+KPX Aring quotedblright -61
+KPX Aring quoteright -61
+KPX Aring t -7
+KPX Aring u -15
+KPX Aring v -36
+KPX Aring w -34
+KPX Aring y -40
+KPX Atilde C -34
+KPX Atilde G -34
+KPX Atilde O -35
+KPX Atilde Q -36
+KPX Atilde T -18
+KPX Atilde U -34
+KPX Atilde V -71
+KPX Atilde W -58
+KPX Atilde Y -14
+KPX Atilde comma 17
+KPX Atilde period 15
+KPX B A 0
+KPX B AE 0
+KPX B Aacute 0
+KPX B Acircumflex 0
+KPX B Adieresis 0
+KPX B Aring 0
+KPX B Atilde 0
+KPX B O -1
+KPX B OE -1
+KPX B Oacute -1
+KPX B Ocircumflex -1
+KPX B Odieresis -1
+KPX B Ograve -1
+KPX B Oslash 0
+KPX B V -12
+KPX B W -12
+KPX B Y -12
+KPX C A -10
+KPX C AE -10
+KPX C Aacute -10
+KPX C Adieresis -10
+KPX C Aring -10
+KPX C H -14
+KPX C K -14
+KPX C O -10
+KPX C Oacute -10
+KPX C Odieresis -10
+KPX Ccedilla A -7
+KPX D A -35
+KPX D Aacute -35
+KPX D Acircumflex -35
+KPX D Adieresis -35
+KPX D Agrave -35
+KPX D Aring -35
+KPX D Atilde -35
+KPX D J 20
+KPX D T 16
+KPX D V -40
+KPX D W -32
+KPX D X -38
+KPX D Y -40
+KPX F A -61
+KPX F Aacute -61
+KPX F Acircumflex -61
+KPX F Adieresis -61
+KPX F Agrave -61
+KPX F Aring -61
+KPX F Atilde -61
+KPX F J -39
+KPX F O 7
+KPX F Odieresis 7
+KPX F a -28
+KPX F aacute -28
+KPX F adieresis -28
+KPX F ae -30
+KPX F aring -28
+KPX F comma -101
+KPX F e -38
+KPX F eacute -38
+KPX F hyphen -33
+KPX F i 17
+KPX F j 23
+KPX F o -38
+KPX F oacute -38
+KPX F odieresis -38
+KPX F oe -40
+KPX F oslash -39
+KPX F period -102
+KPX F r 18
+KPX F u 18
+KPX G A 8
+KPX G AE 8
+KPX G Aacute 8
+KPX G Acircumflex 8
+KPX G Adieresis 8
+KPX G Agrave 8
+KPX G Aring 8
+KPX G Atilde 8
+KPX G T -2
+KPX G V -24
+KPX G W -24
+KPX G Y -24
+KPX J A -36
+KPX J AE -37
+KPX J Adieresis -36
+KPX J Aring -36
+KPX K C -37
+KPX K G -37
+KPX K O -39
+KPX K OE -38
+KPX K Oacute -39
+KPX K Odieresis -39
+KPX K S 16
+KPX K T 30
+KPX K a 19
+KPX K adieresis 19
+KPX K ae 20
+KPX K aring 19
+KPX K e -15
+KPX K hyphen -32
+KPX K o -10
+KPX K oacute -10
+KPX K odieresis -10
+KPX K u -17
+KPX K udieresis -17
+KPX K y -53
+KPX L A 42
+KPX L AE 41
+KPX L Aacute 42
+KPX L Adieresis 42
+KPX L Aring 42
+KPX L C 26
+KPX L Ccedilla 27
+KPX L G 26
+KPX L O 25
+KPX L Oacute 25
+KPX L Ocircumflex 25
+KPX L Odieresis 25
+KPX L Ograve 25
+KPX L Otilde 25
+KPX L S 42
+KPX L T -54
+KPX L U 0
+KPX L Udieresis 0
+KPX L V -52
+KPX L W -36
+KPX L Y -50
+KPX L hyphen 56
+KPX L quotedblright -69
+KPX L quoteright -69
+KPX L u -1
+KPX L udieresis -1
+KPX L y -11
+KPX N A 7
+KPX N AE 6
+KPX N Aacute 7
+KPX N Adieresis 7
+KPX N Aring 7
+KPX N C -12
+KPX N Ccedilla -11
+KPX N G -11
+KPX N O -12
+KPX N Oacute -12
+KPX N Odieresis -12
+KPX N a -17
+KPX N aacute -17
+KPX N adieresis -17
+KPX N ae -16
+KPX N aring -17
+KPX N comma -16
+KPX N e -15
+KPX N eacute -15
+KPX N o -14
+KPX N oacute -14
+KPX N odieresis -14
+KPX N oslash -13
+KPX N period -17
+KPX N u -24
+KPX N udieresis -24
+KPX O A -35
+KPX O AE -35
+KPX O Aacute -35
+KPX O Adieresis -35
+KPX O Aring -35
+KPX O T 19
+KPX O V -36
+KPX O W -29
+KPX O X -38
+KPX O Y -36
+KPX Oacute A -35
+KPX Oacute T 19
+KPX Oacute V -36
+KPX Oacute W -29
+KPX Oacute Y -36
+KPX Ocircumflex T 19
+KPX Ocircumflex V -36
+KPX Ocircumflex Y -36
+KPX Odieresis A -35
+KPX Odieresis T 19
+KPX Odieresis V -36
+KPX Odieresis W -29
+KPX Odieresis X -38
+KPX Odieresis Y -36
+KPX Ograve T 19
+KPX Ograve V -36
+KPX Ograve Y -36
+KPX Oslash A -34
+KPX Otilde T 19
+KPX Otilde V -36
+KPX Otilde Y -36
+KPX P A -51
+KPX P AE -87
+KPX P Aacute -51
+KPX P Adieresis -51
+KPX P Aring -51
+KPX P J -24
+KPX P a -3
+KPX P aacute -3
+KPX P adieresis -3
+KPX P ae -5
+KPX P aring -3
+KPX P comma -94
+KPX P e -10
+KPX P eacute -10
+KPX P hyphen -9
+KPX P o -10
+KPX P oacute -10
+KPX P odieresis -10
+KPX P oe -12
+KPX P oslash -10
+KPX P period -95
+KPX R C -8
+KPX R Ccedilla -7
+KPX R G -7
+KPX R O -9
+KPX R OE -8
+KPX R Oacute -9
+KPX R Odieresis -9
+KPX R T 34
+KPX R U -16
+KPX R Udieresis -16
+KPX R V 0
+KPX R W 0
+KPX R Y 0
+KPX R a 23
+KPX R aacute 23
+KPX R adieresis 23
+KPX R ae 24
+KPX R aring 23
+KPX R e -12
+KPX R eacute -12
+KPX R hyphen -23
+KPX R o -7
+KPX R oacute -7
+KPX R odieresis -7
+KPX R oe -7
+KPX R u 2
+KPX R uacute 2
+KPX R udieresis 2
+KPX R y 24
+KPX S A 3
+KPX S AE 2
+KPX S Aacute 3
+KPX S Adieresis 3
+KPX S Aring 3
+KPX S T 22
+KPX S V -3
+KPX S W -3
+KPX S Y -3
+KPX S t -11
+KPX T A -16
+KPX T AE -16
+KPX T Aacute -16
+KPX T Acircumflex -16
+KPX T Adieresis -16
+KPX T Agrave -16
+KPX T Aring -16
+KPX T Atilde -16
+KPX T C 18
+KPX T G 19
+KPX T J -50
+KPX T O 17
+KPX T OE 18
+KPX T Oacute 17
+KPX T Ocircumflex 17
+KPX T Odieresis 17
+KPX T Ograve 17
+KPX T Oslash 17
+KPX T Otilde 17
+KPX T S 30
+KPX T V 54
+KPX T W 54
+KPX T Y 54
+KPX T a -72
+KPX T ae -71
+KPX T c -86
+KPX T colon -82
+KPX T comma -80
+KPX T e -87
+KPX T g -43
+KPX T guillemotleft -91
+KPX T guilsinglleft -91
+KPX T hyphen -69
+KPX T i 0
+KPX T j 0
+KPX T o -86
+KPX T oslash -58
+KPX T period -81
+KPX T r -49
+KPX T s -72
+KPX T semicolon -80
+KPX T u -100
+KPX T v -78
+KPX T w -80
+KPX T y -78
+KPX U A -31
+KPX U AE -32
+KPX U Aacute -31
+KPX U Acircumflex -31
+KPX U Adieresis -31
+KPX U Aring -31
+KPX U Atilde -31
+KPX U comma -35
+KPX U m -27
+KPX U n -28
+KPX U p -28
+KPX U period -36
+KPX U r -28
+KPX Uacute A -31
+KPX Uacute comma -35
+KPX Uacute m -27
+KPX Uacute n -28
+KPX Uacute p -28
+KPX Uacute period -36
+KPX Uacute r -28
+KPX Ucircumflex A -31
+KPX Udieresis A -31
+KPX Udieresis b 27
+KPX Udieresis comma -35
+KPX Udieresis m -27
+KPX Udieresis n -28
+KPX Udieresis p -28
+KPX Udieresis period -36
+KPX Udieresis r -28
+KPX Ugrave A -31
+KPX V A -80
+KPX V AE -95
+KPX V Aacute -80
+KPX V Acircumflex -80
+KPX V Adieresis -80
+KPX V Agrave -80
+KPX V Aring -80
+KPX V Atilde -80
+KPX V C -42
+KPX V G -39
+KPX V O -43
+KPX V Oacute -43
+KPX V Ocircumflex -43
+KPX V Odieresis -43
+KPX V Ograve -43
+KPX V Oslash -42
+KPX V Otilde -43
+KPX V S -7
+KPX V T 51
+KPX V a -70
+KPX V ae -73
+KPX V colon -72
+KPX V comma -102
+KPX V e -73
+KPX V g -76
+KPX V guillemotleft -70
+KPX V guilsinglleft -70
+KPX V hyphen -49
+KPX V i -18
+KPX V o -72
+KPX V oslash -71
+KPX V period -103
+KPX V r -36
+KPX V semicolon -72
+KPX V u -36
+KPX V y -12
+KPX W A -68
+KPX W AE -74
+KPX W Aacute -68
+KPX W Acircumflex -68
+KPX W Adieresis -68
+KPX W Agrave -68
+KPX W Aring -68
+KPX W Atilde -68
+KPX W C -37
+KPX W G -37
+KPX W O -38
+KPX W Oacute -38
+KPX W Ocircumflex -38
+KPX W Odieresis -38
+KPX W Ograve -38
+KPX W Oslash -35
+KPX W Otilde -38
+KPX W S -7
+KPX W T 50
+KPX W a -60
+KPX W ae -61
+KPX W colon -63
+KPX W comma -84
+KPX W e -59
+KPX W g -61
+KPX W guillemotleft -56
+KPX W guilsinglleft -55
+KPX W hyphen -35
+KPX W i -22
+KPX W o -57
+KPX W oslash -56
+KPX W period -85
+KPX W r -27
+KPX W semicolon -63
+KPX W u -27
+KPX W y -4
+KPX X C -35
+KPX X O -37
+KPX X Odieresis -37
+KPX X Q -38
+KPX X a 22
+KPX X e -13
+KPX X hyphen -47
+KPX X o -8
+KPX X u -15
+KPX X y -50
+KPX Y A -28
+KPX Y AE -28
+KPX Y Aacute -28
+KPX Y Acircumflex -28
+KPX Y Adieresis -28
+KPX Y Agrave -28
+KPX Y Aring -28
+KPX Y Atilde -28
+KPX Y C -41
+KPX Y G -38
+KPX Y O -42
+KPX Y Oacute -42
+KPX Y Ocircumflex -42
+KPX Y Odieresis -42
+KPX Y Ograve -42
+KPX Y Oslash -42
+KPX Y Otilde -42
+KPX Y S -6
+KPX Y T 51
+KPX Y a -84
+KPX Y ae -83
+KPX Y colon -86
+KPX Y comma -92
+KPX Y e -86
+KPX Y g -82
+KPX Y guillemotleft -93
+KPX Y guilsinglleft -93
+KPX Y hyphen -79
+KPX Y i -11
+KPX Y o -85
+KPX Y oslash -84
+KPX Y p -51
+KPX Y period -94
+KPX Y semicolon -86
+KPX Y u -51
+KPX Y v -26
+KPX Z v -12
+KPX Z y -16
+KPX a j -15
+KPX a quoteright -38
+KPX a v -29
+KPX a w -31
+KPX a y -37
+KPX aacute v -29
+KPX aacute w -31
+KPX aacute y -37
+KPX adieresis v -29
+KPX adieresis w -31
+KPX adieresis y -37
+KPX ae v -6
+KPX ae w -8
+KPX ae y -13
+KPX agrave v -29
+KPX agrave w -31
+KPX agrave y -37
+KPX aring v -29
+KPX aring w -31
+KPX aring y -37
+KPX b v -18
+KPX b w -20
+KPX b y -24
+KPX c h -17
+KPX c k -17
+KPX comma one -85
+KPX comma quotedblright -52
+KPX comma quoteright -52
+KPX e quoteright -6
+KPX e t -25
+KPX e v -6
+KPX e w -8
+KPX e x -6
+KPX e y -12
+KPX eacute v -6
+KPX eacute w -8
+KPX eacute y -12
+KPX ecircumflex v -6
+KPX ecircumflex w -8
+KPX ecircumflex y -12
+KPX eight four 10
+KPX eight one -84
+KPX eight seven -20
+KPX f a -14
+KPX f aacute -14
+KPX f adieresis 11
+KPX f ae -13
+KPX f aring -6
+KPX f e -24
+KPX f eacute -24
+KPX f f 14
+KPX f i 17
+KPX f j 22
+KPX f l 72
+KPX f o -23
+KPX f oacute -23
+KPX f odieresis 5
+KPX f oe -24
+KPX f oslash -22
+KPX f quoteright 60
+KPX f s -14
+KPX f t 15
+KPX five four 11
+KPX five one -92
+KPX five seven -47
+KPX four four 19
+KPX four one -74
+KPX four seven -54
+KPX g a -22
+KPX g adieresis -22
+KPX g ae -21
+KPX g aring -22
+KPX g e -15
+KPX g eacute -15
+KPX g l 11
+KPX g oacute -16
+KPX g odieresis -16
+KPX g r 9
+KPX guillemotright A -26
+KPX guillemotright AE -93
+KPX guillemotright Aacute -26
+KPX guillemotright Adieresis -26
+KPX guillemotright Aring -26
+KPX guillemotright T -90
+KPX guillemotright V -61
+KPX guillemotright W -46
+KPX guillemotright Y -76
+KPX guilsinglright A -27
+KPX guilsinglright AE -94
+KPX guilsinglright Aacute -27
+KPX guilsinglright Adieresis -27
+KPX guilsinglright Aring -27
+KPX guilsinglright T -91
+KPX guilsinglright V -63
+KPX guilsinglright W -47
+KPX guilsinglright Y -78
+KPX h quoteright -31
+KPX h y -23
+KPX hyphen A -6
+KPX hyphen AE -75
+KPX hyphen Aacute -6
+KPX hyphen Adieresis -6
+KPX hyphen Aring -6
+KPX hyphen T -70
+KPX hyphen V -43
+KPX hyphen W -27
+KPX hyphen Y -64
+KPX i T 5
+KPX i j -22
+KPX k a 5
+KPX k aacute 5
+KPX k adieresis 5
+KPX k ae 6
+KPX k aring 5
+KPX k comma -2
+KPX k e -28
+KPX k eacute -28
+KPX k g 7
+KPX k hyphen -64
+KPX k o -24
+KPX k oacute -24
+KPX k odieresis -24
+KPX k period -4
+KPX k s 5
+KPX k u 12
+KPX k udieresis 12
+KPX l v -2
+KPX l y -2
+KPX m p -24
+KPX m v -15
+KPX m w -17
+KPX m y -19
+KPX n T -44
+KPX n p -23
+KPX n quoteright -29
+KPX n v -16
+KPX n w -18
+KPX n y -22
+KPX nine four 2
+KPX nine one -86
+KPX nine seven -18
+KPX o T -85
+KPX o quoteright -16
+KPX o t -22
+KPX o v -16
+KPX o w -18
+KPX o x -20
+KPX o y -23
+KPX oacute v -16
+KPX oacute w -18
+KPX oacute y -23
+KPX ocircumflex t -22
+KPX odieresis t -22
+KPX odieresis v -16
+KPX odieresis w -18
+KPX odieresis x -20
+KPX odieresis y -23
+KPX ograve v -16
+KPX ograve w -18
+KPX ograve y -23
+KPX one comma -62
+KPX one eight -74
+KPX one five -75
+KPX one four -91
+KPX one nine -70
+KPX one one -96
+KPX one period -64
+KPX one seven -105
+KPX one six -71
+KPX one three -69
+KPX one two -37
+KPX one zero -70
+KPX p t -23
+KPX p y -21
+KPX period one -88
+KPX period quotedblright -51
+KPX period quoteright -51
+KPX q c -11
+KPX q u -13
+KPX quotedblbase A 36
+KPX quotedblbase AE 34
+KPX quotedblbase T -61
+KPX quotedblbase V -78
+KPX quotedblbase W -58
+KPX quotedblbase Y -57
+KPX quotedblleft A -65
+KPX quotedblleft AE -201
+KPX quotedblleft Aacute -65
+KPX quotedblleft Adieresis -65
+KPX quotedblleft Aring -65
+KPX quotedblleft T 36
+KPX quotedblleft V 23
+KPX quotedblleft W 29
+KPX quotedblleft Y 22
+KPX quotedblright A -66
+KPX quotedblright AE -206
+KPX quotedblright Aacute -66
+KPX quotedblright Adieresis -66
+KPX quotedblright Aring -66
+KPX quotedblright T 36
+KPX quotedblright V 29
+KPX quotedblright W 30
+KPX quotedblright Y 29
+KPX quoteleft A -60
+KPX quoteleft AE -196
+KPX quoteleft Aacute -60
+KPX quoteleft Adieresis -60
+KPX quoteleft Aring -60
+KPX quoteleft T 41
+KPX quoteleft V 28
+KPX quoteleft W 34
+KPX quoteleft Y 27
+KPX quoteright A -61
+KPX quoteright AE -201
+KPX quoteright Aacute -61
+KPX quoteright Adieresis -61
+KPX quoteright Aring -61
+KPX quoteright comma -43
+KPX quoteright d -14
+KPX quoteright o -13
+KPX quoteright period -43
+KPX quoteright r -3
+KPX quoteright s -8
+KPX quoteright t -1
+KPX quoteright v 19
+KPX quoteright w 17
+KPX quoteright y 19
+KPX r a 2
+KPX r aacute 2
+KPX r acircumflex 2
+KPX r adieresis 2
+KPX r ae 0
+KPX r agrave 2
+KPX r aring 2
+KPX r c -6
+KPX r ccedilla -6
+KPX r colon -3
+KPX r comma -80
+KPX r d -6
+KPX r e -6
+KPX r eacute -6
+KPX r ecircumflex -6
+KPX r egrave -6
+KPX r f 26
+KPX r g -6
+KPX r h -14
+KPX r hyphen -76
+KPX r i 28
+KPX r j 29
+KPX r k -14
+KPX r l -14
+KPX r m 30
+KPX r n 28
+KPX r o -6
+KPX r oacute -6
+KPX r ocircumflex -6
+KPX r odieresis -6
+KPX r oe -7
+KPX r ograve -6
+KPX r oslash -6
+KPX r p 28
+KPX r period -82
+KPX r q -8
+KPX r quoteright 4
+KPX r r 28
+KPX r s 2
+KPX r semicolon -3
+KPX r t 28
+KPX r u 28
+KPX r v 49
+KPX r w 47
+KPX r x 32
+KPX r y 48
+KPX r z 11
+KPX s quoteright -19
+KPX s t -22
+KPX seven colon -77
+KPX seven comma -110
+KPX seven eight -31
+KPX seven five -24
+KPX seven four -90
+KPX seven one -55
+KPX seven period -111
+KPX seven seven -14
+KPX seven six -45
+KPX seven three -28
+KPX seven two -18
+KPX six four 14
+KPX six one -77
+KPX six seven -20
+KPX t S 4
+KPX t a 15
+KPX t aacute 15
+KPX t adieresis 15
+KPX t ae 15
+KPX t aring 15
+KPX t colon -4
+KPX t e -12
+KPX t eacute -12
+KPX t h 18
+KPX t o -8
+KPX t oacute -8
+KPX t odieresis -8
+KPX t quoteright -14
+KPX t semicolon -3
+KPX three four 6
+KPX three one -90
+KPX three seven -26
+KPX two four 2
+KPX two one -78
+KPX two seven -30
+KPX u quoteright -30
+KPX v a -10
+KPX v aacute -10
+KPX v acircumflex -10
+KPX v adieresis -10
+KPX v ae -12
+KPX v agrave -10
+KPX v aring -10
+KPX v atilde -10
+KPX v c -21
+KPX v colon -1
+KPX v comma -82
+KPX v e -22
+KPX v eacute -22
+KPX v ecircumflex -22
+KPX v egrave -22
+KPX v g -18
+KPX v hyphen -24
+KPX v l -10
+KPX v o -21
+KPX v oacute -21
+KPX v odieresis -21
+KPX v ograve -21
+KPX v oslash -22
+KPX v period -82
+KPX v s -9
+KPX v semicolon -1
+KPX w a -5
+KPX w aacute -5
+KPX w acircumflex -5
+KPX w adieresis -5
+KPX w ae -8
+KPX w agrave -5
+KPX w aring -5
+KPX w atilde -5
+KPX w c -17
+KPX w colon 3
+KPX w comma -72
+KPX w e -17
+KPX w eacute -17
+KPX w ecircumflex -17
+KPX w egrave -17
+KPX w g -14
+KPX w hyphen -17
+KPX w l -5
+KPX w o -16
+KPX w oacute -16
+KPX w odieresis -16
+KPX w ograve -16
+KPX w oslash -17
+KPX w period -72
+KPX w s -4
+KPX w semicolon 3
+KPX x a 8
+KPX x c -22
+KPX x e -26
+KPX x eacute -26
+KPX x o -21
+KPX x q -22
+KPX y a -20
+KPX y aacute -20
+KPX y acircumflex -20
+KPX y adieresis -20
+KPX y ae -22
+KPX y agrave -20
+KPX y aring -20
+KPX y atilde -20
+KPX y c -30
+KPX y colon -5
+KPX y comma -88
+KPX y e -31
+KPX y eacute -31
+KPX y ecircumflex -31
+KPX y egrave -31
+KPX y g -27
+KPX y hyphen -29
+KPX y l -13
+KPX y o -29
+KPX y oacute -29
+KPX y odieresis -29
+KPX y ograve -29
+KPX y oslash -31
+KPX y period -88
+KPX y s -17
+KPX y semicolon -5
+KPX zero four 8
+KPX zero one -82
+KPX zero seven -18
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkl8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ubkl8a.pfb
new file mode 100644
index 00000000000..7cbac2c456c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkl8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkli8a.afm b/Master/tlpkg/tlgs/lib/fonts/ubkli8a.afm
new file mode 100644
index 00000000000..b32d77bd12d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkli8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWBookmanL-LighItal
+FullName URW Bookman L Light Italic
+FamilyName URW Bookman L
+Weight Regular
+ItalicAngle -10.0
+IsFixedPitch false
+UnderlinePosition -125
+UnderlineThickness 60
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -228 -281 1269 930
+CapHeight 681
+XHeight 486
+Descender -212
+Ascender 715
+StartCharMetrics 316
+C 32 ; WX 300 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 320 ; N exclam ; B 103 -13 342 694 ;
+C 34 ; WX 360 ; N quotedbl ; B 107 462 402 694 ;
+C 35 ; WX 620 ; N numbersign ; B 107 0 598 666 ;
+C 36 ; WX 620 ; N dollar ; B 78 -85 619 762 ;
+C 37 ; WX 800 ; N percent ; B 56 -8 811 689 ;
+C 38 ; WX 820 ; N ampersand ; B 65 -13 848 694 ;
+C 39 ; WX 280 ; N quoteright ; B 148 466 288 694 ;
+C 40 ; WX 280 ; N parenleft ; B 96 -120 383 715 ;
+C 41 ; WX 280 ; N parenright ; B -8 -120 279 715 ;
+C 42 ; WX 440 ; N asterisk ; B 139 324 505 698 ;
+C 43 ; WX 600 ; N plus ; B 91 106 595 594 ;
+C 44 ; WX 300 ; N comma ; B 88 -115 227 112 ;
+C 45 ; WX 320 ; N hyphen ; B 78 232 336 285 ;
+C 46 ; WX 300 ; N period ; B 96 -13 231 122 ;
+C 47 ; WX 600 ; N slash ; B 104 -121 562 715 ;
+C 48 ; WX 620 ; N zero ; B 86 -13 646 695 ;
+C 49 ; WX 620 ; N one ; B 154 0 500 681 ;
+C 50 ; WX 620 ; N two ; B 66 0 636 694 ;
+C 51 ; WX 620 ; N three ; B 55 -13 622 694 ;
+C 52 ; WX 620 ; N four ; B 69 0 634 681 ;
+C 53 ; WX 620 ; N five ; B 70 -13 614 681 ;
+C 54 ; WX 620 ; N six ; B 89 -13 657 694 ;
+C 55 ; WX 620 ; N seven ; B 143 0 672 681 ;
+C 56 ; WX 620 ; N eight ; B 61 -13 655 694 ;
+C 57 ; WX 620 ; N nine ; B 77 -13 649 694 ;
+C 58 ; WX 300 ; N colon ; B 96 -13 292 499 ;
+C 59 ; WX 300 ; N semicolon ; B 88 -115 292 499 ;
+C 60 ; WX 600 ; N less ; B 79 49 588 599 ;
+C 61 ; WX 600 ; N equal ; B 91 212 595 488 ;
+C 62 ; WX 600 ; N greater ; B 93 49 602 599 ;
+C 63 ; WX 540 ; N question ; B 114 -13 604 694 ;
+C 64 ; WX 780 ; N at ; B 102 -13 802 700 ;
+C 65 ; WX 700 ; N A ; B -25 0 720 681 ;
+C 66 ; WX 720 ; N B ; B 21 0 746 681 ;
+C 67 ; WX 720 ; N C ; B 88 -13 746 694 ;
+C 68 ; WX 740 ; N D ; B 21 0 782 681 ;
+C 69 ; WX 680 ; N E ; B 21 0 736 681 ;
+C 70 ; WX 620 ; N F ; B 21 0 743 681 ;
+C 71 ; WX 760 ; N G ; B 88 -13 813 694 ;
+C 72 ; WX 800 ; N H ; B 21 0 888 681 ;
+C 73 ; WX 320 ; N I ; B 21 0 412 681 ;
+C 74 ; WX 560 ; N J ; B -2 -13 666 681 ;
+C 75 ; WX 720 ; N K ; B 21 0 804 681 ;
+C 76 ; WX 580 ; N L ; B 21 0 656 681 ;
+C 77 ; WX 860 ; N M ; B 18 0 956 681 ;
+C 78 ; WX 720 ; N N ; B 18 0 823 681 ;
+C 79 ; WX 760 ; N O ; B 88 -13 799 694 ;
+C 80 ; WX 600 ; N P ; B 21 0 681 681 ;
+C 81 ; WX 780 ; N Q ; B 61 -191 812 694 ;
+C 82 ; WX 700 ; N R ; B 21 0 736 681 ;
+C 83 ; WX 640 ; N S ; B 61 -13 668 694 ;
+C 84 ; WX 600 ; N T ; B 50 0 725 681 ;
+C 85 ; WX 720 ; N U ; B 118 -13 842 681 ;
+C 86 ; WX 680 ; N V ; B 87 0 815 681 ;
+C 87 ; WX 960 ; N W ; B 87 0 1095 681 ;
+C 88 ; WX 700 ; N X ; B -25 0 815 681 ;
+C 89 ; WX 660 ; N Y ; B 87 0 809 681 ;
+C 90 ; WX 580 ; N Z ; B 8 0 695 681 ;
+C 91 ; WX 260 ; N bracketleft ; B 56 -121 351 715 ;
+C 92 ; WX 600 ; N backslash ; B 84 0 542 717 ;
+C 93 ; WX 260 ; N bracketright ; B 15 -120 309 715 ;
+C 94 ; WX 600 ; N asciicircum ; B 97 318 599 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -155 500 -95 ;
+C 96 ; WX 280 ; N quoteleft ; B 191 466 330 694 ;
+C 97 ; WX 620 ; N a ; B 71 -9 686 495 ;
+C 98 ; WX 600 ; N b ; B 88 -9 621 715 ;
+C 99 ; WX 480 ; N c ; B 65 -9 522 495 ;
+C 100 ; WX 640 ; N d ; B 65 -9 695 715 ;
+C 101 ; WX 540 ; N e ; B 65 -9 575 495 ;
+C 102 ; WX 340 ; N f ; B -160 -206 557 728 ;
+C 103 ; WX 560 ; N g ; B 4 -221 581 495 ;
+C 104 ; WX 620 ; N h ; B 88 -9 689 715 ;
+C 105 ; WX 280 ; N i ; B 88 -9 351 666 ;
+C 106 ; WX 280 ; N j ; B -200 -221 308 665 ;
+C 107 ; WX 600 ; N k ; B 88 -9 657 715 ;
+C 108 ; WX 280 ; N l ; B 100 -9 342 715 ;
+C 109 ; WX 880 ; N m ; B 88 -9 952 495 ;
+C 110 ; WX 620 ; N n ; B 88 -9 673 495 ;
+C 111 ; WX 540 ; N o ; B 65 -9 572 495 ;
+C 112 ; WX 600 ; N p ; B -24 -212 620 495 ;
+C 113 ; WX 560 ; N q ; B 65 -212 584 495 ;
+C 114 ; WX 400 ; N r ; B 88 0 481 495 ;
+C 115 ; WX 540 ; N s ; B 65 -9 547 495 ;
+C 116 ; WX 340 ; N t ; B 88 -9 411 665 ;
+C 117 ; WX 620 ; N u ; B 88 -9 686 486 ;
+C 118 ; WX 540 ; N v ; B 88 -9 562 499 ;
+C 119 ; WX 880 ; N w ; B 88 -9 893 499 ;
+C 120 ; WX 540 ; N x ; B 9 -13 626 499 ;
+C 121 ; WX 600 ; N y ; B 60 -221 609 486 ;
+C 122 ; WX 520 ; N z ; B 38 -9 561 495 ;
+C 123 ; WX 360 ; N braceleft ; B 125 -155 439 750 ;
+C 124 ; WX 600 ; N bar ; B 294 0 372 722 ;
+C 125 ; WX 380 ; N braceright ; B 15 -155 330 750 ;
+C 126 ; WX 600 ; N asciitilde ; B 91 152 595 332 ;
+C 161 ; WX 320 ; N exclamdown ; B 73 -212 301 494 ;
+C 162 ; WX 620 ; N cent ; B 148 -29 596 715 ;
+C 163 ; WX 620 ; N sterling ; B 4 -13 702 694 ;
+C 164 ; WX 20 ; N fraction ; B -228 0 323 681 ;
+C 165 ; WX 620 ; N yen ; B 71 0 735 681 ;
+C 166 ; WX 620 ; N florin ; B -26 -206 692 728 ;
+C 167 ; WX 620 ; N section ; B 38 -181 638 694 ;
+C 168 ; WX 620 ; N currency ; B 100 101 605 602 ;
+C 169 ; WX 200 ; N quotesingle ; B 99 462 247 694 ;
+C 170 ; WX 440 ; N quotedblleft ; B 191 466 493 694 ;
+C 171 ; WX 300 ; N guillemotleft ; B 70 99 313 406 ;
+C 172 ; WX 180 ; N guilsinglleft ; B 75 99 208 400 ;
+C 173 ; WX 180 ; N guilsinglright ; B 70 97 203 403 ;
+C 174 ; WX 640 ; N fi ; B -159 -205 709 728 ;
+C 175 ; WX 660 ; N fl ; B -159 -205 713 728 ;
+C 177 ; WX 500 ; N endash ; B 33 232 561 285 ;
+C 178 ; WX 620 ; N dagger ; B 192 -166 570 694 ;
+C 179 ; WX 620 ; N daggerdbl ; B 144 -135 566 694 ;
+C 180 ; WX 300 ; N periodcentered ; B 137 229 272 364 ;
+C 182 ; WX 620 ; N paragraph ; B 112 0 718 675 ;
+C 183 ; WX 460 ; N bullet ; B 100 213 444 557 ;
+C 184 ; WX 320 ; N quotesinglbase ; B 87 -115 226 112 ;
+C 185 ; WX 480 ; N quotedblbase ; B 87 -116 390 112 ;
+C 186 ; WX 440 ; N quotedblright ; B 148 466 451 694 ;
+C 187 ; WX 300 ; N guillemotright ; B 60 97 303 403 ;
+C 188 ; WX 1000 ; N ellipsis ; B 99 -13 900 122 ;
+C 189 ; WX 1180 ; N perthousand ; B 56 -8 1199 689 ;
+C 191 ; WX 540 ; N questiondown ; B 18 -212 508 496 ;
+C 193 ; WX 340 ; N grave ; B 182 538 377 689 ;
+C 194 ; WX 320 ; N acute ; B 178 538 373 689 ;
+C 195 ; WX 440 ; N circumflex ; B 176 541 479 666 ;
+C 196 ; WX 440 ; N tilde ; B 180 569 488 652 ;
+C 197 ; WX 440 ; N macron ; B 178 581 484 638 ;
+C 198 ; WX 440 ; N breve ; B 191 553 500 661 ;
+C 199 ; WX 260 ; N dotaccent ; B 169 552 290 673 ;
+C 200 ; WX 420 ; N dieresis ; B 185 552 467 672 ;
+C 202 ; WX 300 ; N ring ; B 178 534 334 691 ;
+C 203 ; WX 320 ; N cedilla ; B 45 -182 240 0 ;
+C 205 ; WX 340 ; N hungarumlaut ; B 167 537 402 718 ;
+C 206 ; WX 260 ; N ogonek ; B 51 -169 184 0 ;
+C 207 ; WX 440 ; N caron ; B 178 541 481 666 ;
+C 208 ; WX 1000 ; N emdash ; B 33 232 1061 285 ;
+C 225 ; WX 1220 ; N AE ; B -45 0 1269 681 ;
+C 227 ; WX 440 ; N ordfeminine ; B 94 304 513 694 ;
+C 232 ; WX 580 ; N Lslash ; B 21 0 656 681 ;
+C 233 ; WX 760 ; N Oslash ; B 88 -95 799 778 ;
+C 234 ; WX 1180 ; N OE ; B 88 -13 1237 694 ;
+C 235 ; WX 400 ; N ordmasculine ; B 94 304 455 694 ;
+C 241 ; WX 880 ; N ae ; B 71 -9 918 495 ;
+C 245 ; WX 280 ; N dotlessi ; B 88 -9 351 486 ;
+C 248 ; WX 340 ; N lslash ; B 50 -9 398 715 ;
+C 249 ; WX 540 ; N oslash ; B 65 -49 571 533 ;
+C 250 ; WX 900 ; N oe ; B 65 -9 948 495 ;
+C 251 ; WX 620 ; N germandbls ; B -121 -110 653 700 ;
+C -1 ; WX 720 ; N Udieresis ; B 118 -13 842 859 ;
+C -1 ; WX 720 ; N Uacute ; B 118 -13 842 876 ;
+C -1 ; WX 640 ; N Scedilla ; B 61 -182 668 694 ;
+C -1 ; WX 600 ; N Tcaron ; B 50 0 725 853 ;
+C -1 ; WX 640 ; N Scaron ; B 61 -13 668 853 ;
+C -1 ; WX 700 ; N Rcaron ; B 21 0 736 853 ;
+C -1 ; WX 700 ; N Racute ; B 21 0 736 876 ;
+C -1 ; WX 640 ; N Sacute ; B 61 -13 668 876 ;
+C -1 ; WX 760 ; N Otilde ; B 88 -13 799 839 ;
+C -1 ; WX 620 ; N ucircumflex ; B 88 -9 686 666 ;
+C -1 ; WX 760 ; N Ohungarumlaut ; B 88 -13 799 905 ;
+C -1 ; WX 720 ; N Uhungarumlaut ; B 118 -13 842 905 ;
+C -1 ; WX 660 ; N Yacute ; B 87 0 809 876 ;
+C -1 ; WX 740 ; N Eth ; B 21 0 782 681 ;
+C -1 ; WX 740 ; N Dcroat ; B 21 0 782 681 ;
+C -1 ; WX 580 ; N Zacute ; B 8 0 695 876 ;
+C -1 ; WX 720 ; N Uring ; B 118 -13 842 878 ;
+C -1 ; WX 560 ; N gbreve ; B 4 -221 581 661 ;
+C -1 ; WX 540 ; N eogonek ; B 65 -169 575 495 ;
+C -1 ; WX 540 ; N edotaccent ; B 65 -9 575 673 ;
+C -1 ; WX 540 ; N ecaron ; B 65 -9 575 666 ;
+C -1 ; WX 720 ; N Ugrave ; B 118 -13 842 876 ;
+C -1 ; WX 600 ; N Thorn ; B 21 0 656 681 ;
+C -1 ; WX 540 ; N eacute ; B 65 -9 575 689 ;
+C -1 ; WX 540 ; N edieresis ; B 65 -9 575 672 ;
+C -1 ; WX 730 ; N dcaron ; B 65 -9 790 723 ;
+C -1 ; WX 480 ; N ccedilla ; B 65 -182 522 495 ;
+C -1 ; WX 480 ; N ccaron ; B 65 -9 541 666 ;
+C -1 ; WX 480 ; N cacute ; B 65 -9 533 689 ;
+C -1 ; WX 620 ; N aogonek ; B 71 -169 686 495 ;
+C -1 ; WX 620 ; N aring ; B 71 -9 686 691 ;
+C -1 ; WX 620 ; N atilde ; B 71 -9 686 652 ;
+C -1 ; WX 620 ; N abreve ; B 71 -9 686 661 ;
+C -1 ; WX 540 ; N egrave ; B 65 -9 575 689 ;
+C -1 ; WX 620 ; N agrave ; B 71 -9 686 689 ;
+C -1 ; WX 620 ; N aacute ; B 71 -9 686 689 ;
+C -1 ; WX 620 ; N adieresis ; B 71 -9 686 672 ;
+C -1 ; WX 720 ; N Uogonek ; B 118 -169 842 681 ;
+C -1 ; WX 620 ; N ugrave ; B 88 -9 686 689 ;
+C -1 ; WX 620 ; N uacute ; B 88 -9 686 689 ;
+C -1 ; WX 620 ; N udieresis ; B 88 -9 686 672 ;
+C -1 ; WX 340 ; N tcaron ; B 88 -9 460 723 ;
+C -1 ; WX 540 ; N scommaaccent ; B 65 -279 547 495 ;
+C -1 ; WX 580 ; N Zcaron ; B 8 0 695 853 ;
+C -1 ; WX 540 ; N ecircumflex ; B 65 -9 575 666 ;
+C -1 ; WX 720 ; N Ucircumflex ; B 118 -13 842 853 ;
+C -1 ; WX 620 ; N acircumflex ; B 71 -9 686 666 ;
+C -1 ; WX 580 ; N Zdotaccent ; B 8 0 695 859 ;
+C -1 ; WX 540 ; N scaron ; B 65 -9 547 666 ;
+C -1 ; WX 700 ; N Amacron ; B -25 0 720 825 ;
+C -1 ; WX 540 ; N sacute ; B 65 -9 547 689 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 50 -281 725 681 ;
+C -1 ; WX 660 ; N Ydieresis ; B 87 0 809 859 ;
+C -1 ; WX 600 ; N thorn ; B -24 -212 620 715 ;
+C -1 ; WX 680 ; N Emacron ; B 21 0 736 825 ;
+C -1 ; WX 760 ; N Ograve ; B 88 -13 799 876 ;
+C -1 ; WX 760 ; N Oacute ; B 88 -13 799 876 ;
+C -1 ; WX 760 ; N Odieresis ; B 88 -13 799 859 ;
+C -1 ; WX 720 ; N Ntilde ; B 18 0 823 839 ;
+C -1 ; WX 720 ; N Ncaron ; B 18 0 823 853 ;
+C -1 ; WX 720 ; N Nacute ; B 18 0 823 876 ;
+C -1 ; WX 580 ; N Lcaron ; B 21 0 680 694 ;
+C -1 ; WX 580 ; N Lacute ; B 21 0 656 876 ;
+C -1 ; WX 320 ; N Idotaccent ; B 21 0 412 859 ;
+C -1 ; WX 400 ; N racute ; B 88 0 481 689 ;
+C -1 ; WX 320 ; N Icircumflex ; B 21 0 419 853 ;
+C -1 ; WX 540 ; N ohungarumlaut ; B 65 -9 572 718 ;
+C -1 ; WX 540 ; N otilde ; B 65 -9 572 652 ;
+C -1 ; WX 620 ; N Euro ; B 61 -13 685 694 ;
+C -1 ; WX 540 ; N ocircumflex ; B 65 -9 572 666 ;
+C -1 ; WX 372 ; N onesuperior ; B 114 273 339 681 ;
+C -1 ; WX 372 ; N twosuperior ; B 68 273 439 689 ;
+C -1 ; WX 372 ; N threesuperior ; B 70 265 439 689 ;
+C -1 ; WX 320 ; N Igrave ; B 21 0 412 876 ;
+C -1 ; WX 320 ; N Iacute ; B 21 0 412 876 ;
+C -1 ; WX 320 ; N Imacron ; B 21 0 454 825 ;
+C -1 ; WX 320 ; N Iogonek ; B 21 -169 412 681 ;
+C -1 ; WX 320 ; N Idieresis ; B 21 0 417 859 ;
+C -1 ; WX 760 ; N Gbreve ; B 88 -13 813 848 ;
+C -1 ; WX 720 ; N Umacron ; B 118 -13 842 825 ;
+C -1 ; WX 720 ; N Kcommaaccent ; B 21 -281 804 681 ;
+C -1 ; WX 540 ; N ograve ; B 65 -9 572 689 ;
+C -1 ; WX 640 ; N Scommaaccent ; B 61 -281 668 694 ;
+C -1 ; WX 680 ; N Eogonek ; B 21 -169 736 681 ;
+C -1 ; WX 540 ; N oacute ; B 65 -9 572 689 ;
+C -1 ; WX 680 ; N Edotaccent ; B 21 0 736 859 ;
+C -1 ; WX 280 ; N iogonek ; B 88 -169 351 666 ;
+C -1 ; WX 560 ; N gcommaaccent ; B 4 -221 581 768 ;
+C -1 ; WX 540 ; N odieresis ; B 65 -9 572 672 ;
+C -1 ; WX 620 ; N ntilde ; B 88 -9 673 652 ;
+C -1 ; WX 620 ; N ncaron ; B 88 -9 673 666 ;
+C -1 ; WX 680 ; N Ecaron ; B 21 0 736 853 ;
+C -1 ; WX 680 ; N Ecircumflex ; B 21 0 736 853 ;
+C -1 ; WX 540 ; N scedilla ; B 65 -182 547 495 ;
+C -1 ; WX 400 ; N rcaron ; B 88 0 481 666 ;
+C -1 ; WX 680 ; N Egrave ; B 21 0 736 876 ;
+C -1 ; WX 680 ; N Eacute ; B 21 0 736 876 ;
+C -1 ; WX 760 ; N Gcommaaccent ; B 88 -281 813 694 ;
+C -1 ; WX 700 ; N Rcommaaccent ; B 21 -281 736 681 ;
+C -1 ; WX 680 ; N Edieresis ; B 21 0 736 859 ;
+C -1 ; WX 620 ; N nacute ; B 88 -9 673 689 ;
+C -1 ; WX 620 ; N uogonek ; B 88 -169 686 486 ;
+C -1 ; WX 620 ; N umacron ; B 88 -9 686 638 ;
+C -1 ; WX 740 ; N Dcaron ; B 21 0 782 853 ;
+C -1 ; WX 380 ; N lcaron ; B 100 -9 440 723 ;
+C -1 ; WX 720 ; N Ccaron ; B 88 -13 746 853 ;
+C -1 ; WX 720 ; N Cacute ; B 88 -13 746 876 ;
+C -1 ; WX 720 ; N Ccedilla ; B 88 -182 746 694 ;
+C -1 ; WX 400 ; N degree ; B 120 380 420 686 ;
+C -1 ; WX 700 ; N Aogonek ; B -25 -169 720 681 ;
+C -1 ; WX 600 ; N minus ; B 91 310 595 390 ;
+C -1 ; WX 600 ; N multiply ; B 91 100 595 604 ;
+C -1 ; WX 600 ; N divide ; B 91 88 595 612 ;
+C -1 ; WX 700 ; N Aring ; B -25 0 720 878 ;
+C -1 ; WX 980 ; N trademark ; B 69 273 965 681 ;
+C -1 ; WX 400 ; N rcommaaccent ; B 50 -279 481 495 ;
+C -1 ; WX 280 ; N lacute ; B 100 -9 353 876 ;
+C -1 ; WX 540 ; N omacron ; B 65 -9 572 638 ;
+C -1 ; WX 700 ; N Atilde ; B -25 0 720 839 ;
+C -1 ; WX 280 ; N icircumflex ; B 76 -9 379 666 ;
+C -1 ; WX 280 ; N igrave ; B 88 -9 351 689 ;
+C -1 ; WX 620 ; N ncommaaccent ; B 88 -279 673 495 ;
+C -1 ; WX 280 ; N lcommaaccent ; B 40 -279 342 715 ;
+C -1 ; WX 600 ; N plusminus ; B 91 0 595 594 ;
+C -1 ; WX 930 ; N onehalf ; B 91 0 925 681 ;
+C -1 ; WX 930 ; N onequarter ; B 91 0 913 681 ;
+C -1 ; WX 930 ; N threequarters ; B 99 0 913 689 ;
+C -1 ; WX 280 ; N iacute ; B 88 -9 351 689 ;
+C -1 ; WX 700 ; N Abreve ; B -25 0 720 848 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 88 -279 657 715 ;
+C -1 ; WX 760 ; N Omacron ; B 88 -13 799 825 ;
+C -1 ; WX 280 ; N imacron ; B 88 -9 404 638 ;
+C -1 ; WX 540 ; N emacron ; B 65 -9 575 638 ;
+C -1 ; WX 620 ; N amacron ; B 71 -9 686 638 ;
+C -1 ; WX 340 ; N tcommaaccent ; B 70 -279 411 665 ;
+C -1 ; WX 600 ; N ydieresis ; B 60 -221 609 672 ;
+C -1 ; WX 520 ; N zdotaccent ; B 38 -9 561 673 ;
+C -1 ; WX 520 ; N zcaron ; B 38 -9 561 666 ;
+C -1 ; WX 520 ; N zacute ; B 38 -9 561 689 ;
+C -1 ; WX 600 ; N yacute ; B 60 -221 609 689 ;
+C -1 ; WX 620 ; N uhungarumlaut ; B 88 -9 686 718 ;
+C -1 ; WX 540 ; N eth ; B 65 -9 642 717 ;
+C -1 ; WX 620 ; N uring ; B 88 -9 686 691 ;
+C -1 ; WX 760 ; N Ocircumflex ; B 88 -13 799 853 ;
+C -1 ; WX 260 ; N commaaccent ; B 30 -279 170 -51 ;
+C -1 ; WX 740 ; N copyright ; B 84 0 784 700 ;
+C -1 ; WX 740 ; N registered ; B 84 0 784 700 ;
+C -1 ; WX 700 ; N Acircumflex ; B -25 0 720 853 ;
+C -1 ; WX 280 ; N idieresis ; B 88 -9 377 672 ;
+C -1 ; WX 494 ; N lozenge ; B 92 0 540 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 600 ; N notequal ; B 91 101 595 610 ;
+C -1 ; WX 549 ; N radical ; B 50 -83 591 930 ;
+C -1 ; WX 700 ; N Agrave ; B -25 0 720 876 ;
+C -1 ; WX 700 ; N Aacute ; B -25 0 720 876 ;
+C -1 ; WX 600 ; N lessequal ; B 85 0 589 649 ;
+C -1 ; WX 600 ; N greaterequal ; B 91 0 595 649 ;
+C -1 ; WX 600 ; N logicalnot ; B 91 80 595 369 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 720 ; N Ncommaaccent ; B 18 -281 823 681 ;
+C -1 ; WX 640 ; N dcroat ; B 65 -9 724 715 ;
+C -1 ; WX 600 ; N brokenbar ; B 294 0 372 722 ;
+C -1 ; WX 580 ; N Lcommaaccent ; B 21 -281 656 681 ;
+C -1 ; WX 700 ; N Adieresis ; B -25 0 720 859 ;
+C -1 ; WX 620 ; N mu ; B 53 -219 686 486 ;
+C -1 ; WX 300 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -52
+KPX A Ccedilla -51
+KPX A G -50
+KPX A O -52
+KPX A Odieresis -52
+KPX A Q -49
+KPX A T -37
+KPX A U -50
+KPX A Uacute -50
+KPX A Ucircumflex -50
+KPX A Udieresis -50
+KPX A Ugrave -50
+KPX A V -90
+KPX A W -82
+KPX A Y -47
+KPX A a -32
+KPX A b -15
+KPX A c -36
+KPX A ccedilla -36
+KPX A comma -11
+KPX A d -28
+KPX A e -37
+KPX A g -30
+KPX A guillemotleft -29
+KPX A guilsinglleft -31
+KPX A hyphen -19
+KPX A o -35
+KPX A period -7
+KPX A q -28
+KPX A quotedblright -83
+KPX A quoteright -83
+KPX A t -26
+KPX A u -31
+KPX A v -32
+KPX A w -32
+KPX A y -35
+KPX Aacute C -53
+KPX Aacute G -52
+KPX Aacute O -54
+KPX Aacute Q -51
+KPX Aacute T -37
+KPX Aacute U -50
+KPX Aacute V -90
+KPX Aacute W -82
+KPX Aacute Y -47
+KPX Aacute a -32
+KPX Aacute b -15
+KPX Aacute c -36
+KPX Aacute comma -11
+KPX Aacute d -28
+KPX Aacute e -37
+KPX Aacute g -30
+KPX Aacute guillemotleft -29
+KPX Aacute guilsinglleft -31
+KPX Aacute hyphen -19
+KPX Aacute o -35
+KPX Aacute period -7
+KPX Aacute q -28
+KPX Aacute quoteright -84
+KPX Aacute t -26
+KPX Aacute u -31
+KPX Aacute v -32
+KPX Aacute w -32
+KPX Aacute y -35
+KPX Acircumflex C -53
+KPX Acircumflex G -52
+KPX Acircumflex O -54
+KPX Acircumflex Q -51
+KPX Acircumflex T -37
+KPX Acircumflex U -50
+KPX Acircumflex V -90
+KPX Acircumflex W -82
+KPX Acircumflex Y -47
+KPX Acircumflex comma -11
+KPX Acircumflex period -7
+KPX Adieresis C -53
+KPX Adieresis G -52
+KPX Adieresis O -54
+KPX Adieresis Q -51
+KPX Adieresis T -37
+KPX Adieresis U -50
+KPX Adieresis V -90
+KPX Adieresis W -82
+KPX Adieresis Y -47
+KPX Adieresis a -32
+KPX Adieresis b -15
+KPX Adieresis c -36
+KPX Adieresis comma -11
+KPX Adieresis d -28
+KPX Adieresis g -30
+KPX Adieresis guillemotleft -29
+KPX Adieresis guilsinglleft -31
+KPX Adieresis hyphen -19
+KPX Adieresis o -35
+KPX Adieresis period -7
+KPX Adieresis q -28
+KPX Adieresis quotedblright -84
+KPX Adieresis quoteright -84
+KPX Adieresis t -26
+KPX Adieresis u -31
+KPX Adieresis v -32
+KPX Adieresis w -32
+KPX Adieresis y -35
+KPX Agrave C -53
+KPX Agrave G -52
+KPX Agrave O -54
+KPX Agrave Q -51
+KPX Agrave T -37
+KPX Agrave U -50
+KPX Agrave V -90
+KPX Agrave W -82
+KPX Agrave Y -47
+KPX Agrave comma -11
+KPX Agrave period -7
+KPX Aring C -53
+KPX Aring G -52
+KPX Aring O -54
+KPX Aring Q -51
+KPX Aring T -37
+KPX Aring U -50
+KPX Aring V -90
+KPX Aring W -82
+KPX Aring Y -47
+KPX Aring a -32
+KPX Aring b -15
+KPX Aring c -36
+KPX Aring comma -11
+KPX Aring d -28
+KPX Aring e -37
+KPX Aring g -30
+KPX Aring guillemotleft -29
+KPX Aring guilsinglleft -31
+KPX Aring hyphen -19
+KPX Aring o -35
+KPX Aring period -7
+KPX Aring q -28
+KPX Aring quotedblright -84
+KPX Aring quoteright -84
+KPX Aring t -26
+KPX Aring u -31
+KPX Aring v -32
+KPX Aring w -32
+KPX Aring y -35
+KPX Atilde C -53
+KPX Atilde G -52
+KPX Atilde O -54
+KPX Atilde Q -51
+KPX Atilde T -37
+KPX Atilde U -50
+KPX Atilde V -90
+KPX Atilde W -82
+KPX Atilde Y -47
+KPX Atilde comma -11
+KPX Atilde period -7
+KPX B A -20
+KPX B AE -10
+KPX B Aacute -20
+KPX B Acircumflex -20
+KPX B Adieresis -20
+KPX B Aring -20
+KPX B Atilde -20
+KPX B O -9
+KPX B OE -10
+KPX B Oacute -9
+KPX B Ocircumflex -9
+KPX B Odieresis -9
+KPX B Ograve -9
+KPX B Oslash -8
+KPX B V -28
+KPX B W -28
+KPX B Y -28
+KPX C A -25
+KPX C AE -14
+KPX C Aacute -25
+KPX C Adieresis -25
+KPX C Aring -25
+KPX C H -17
+KPX C K -17
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -22
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J 21
+KPX D T 16
+KPX D V -41
+KPX D W -33
+KPX D X -42
+KPX D Y -45
+KPX F A -69
+KPX F Aacute -69
+KPX F Acircumflex -69
+KPX F Adieresis -69
+KPX F Agrave -69
+KPX F Aring -69
+KPX F Atilde -69
+KPX F J -36
+KPX F O 12
+KPX F Odieresis 12
+KPX F a -37
+KPX F aacute -37
+KPX F adieresis -37
+KPX F ae -33
+KPX F aring -37
+KPX F comma -110
+KPX F e -43
+KPX F eacute -43
+KPX F hyphen -30
+KPX F i 21
+KPX F j 30
+KPX F o -30
+KPX F oacute -30
+KPX F odieresis -30
+KPX F oe -27
+KPX F oslash -30
+KPX F period -107
+KPX F r 26
+KPX F u 26
+KPX G A -4
+KPX G AE 5
+KPX G Aacute -4
+KPX G Acircumflex -4
+KPX G Adieresis -4
+KPX G Agrave -4
+KPX G Aring -4
+KPX G Atilde -4
+KPX G T -13
+KPX G V -40
+KPX G W -40
+KPX G Y -40
+KPX J A -50
+KPX J AE -39
+KPX J Adieresis -50
+KPX J Aring -50
+KPX K C -52
+KPX K G -50
+KPX K O -52
+KPX K OE -52
+KPX K Oacute -52
+KPX K Odieresis -52
+KPX K S 2
+KPX K T 5
+KPX K a -25
+KPX K adieresis -25
+KPX K ae -7
+KPX K aring -25
+KPX K e -29
+KPX K hyphen -49
+KPX K o -29
+KPX K oacute -29
+KPX K odieresis -29
+KPX K u -23
+KPX K udieresis -23
+KPX K y -28
+KPX L A 32
+KPX L AE 42
+KPX L Aacute 32
+KPX L Adieresis 32
+KPX L Aring 32
+KPX L C 15
+KPX L Ccedilla 15
+KPX L G 15
+KPX L O 15
+KPX L Oacute 15
+KPX L Ocircumflex 15
+KPX L Odieresis 15
+KPX L Ograve 15
+KPX L Otilde 15
+KPX L S 30
+KPX L T -50
+KPX L U 1
+KPX L Udieresis 1
+KPX L V -61
+KPX L W -52
+KPX L Y -59
+KPX L hyphen 52
+KPX L quotedblright -83
+KPX L quoteright -83
+KPX L u 0
+KPX L udieresis -4
+KPX L y -1
+KPX N A -16
+KPX N AE -5
+KPX N Aacute -16
+KPX N Adieresis -16
+KPX N Aring -16
+KPX N C -21
+KPX N Ccedilla -20
+KPX N G -19
+KPX N O -21
+KPX N Oacute -21
+KPX N Odieresis -21
+KPX N a -27
+KPX N aacute -28
+KPX N adieresis -28
+KPX N ae -41
+KPX N aring -28
+KPX N comma -32
+KPX N e -29
+KPX N eacute -31
+KPX N o -24
+KPX N oacute -26
+KPX N odieresis -26
+KPX N oslash -24
+KPX N period -29
+KPX N u -33
+KPX N udieresis -35
+KPX O A -49
+KPX O AE -38
+KPX O Aacute -49
+KPX O Adieresis -49
+KPX O Aring -49
+KPX O T 14
+KPX O V -44
+KPX O W -36
+KPX O X -46
+KPX O Y -49
+KPX Oacute A -49
+KPX Oacute T 14
+KPX Oacute V -44
+KPX Oacute W -36
+KPX Oacute Y -49
+KPX Ocircumflex T 14
+KPX Ocircumflex V -44
+KPX Ocircumflex Y -49
+KPX Odieresis A -49
+KPX Odieresis T 14
+KPX Odieresis V -44
+KPX Odieresis W -36
+KPX Odieresis X -46
+KPX Odieresis Y -49
+KPX Ograve T 14
+KPX Ograve V -44
+KPX Ograve Y -49
+KPX Oslash A -49
+KPX Otilde T 14
+KPX Otilde V -44
+KPX Otilde Y -49
+KPX P A -68
+KPX P AE -97
+KPX P Aacute -68
+KPX P Adieresis -68
+KPX P Aring -68
+KPX P J -28
+KPX P a -25
+KPX P aacute -25
+KPX P adieresis -25
+KPX P ae -30
+KPX P aring -25
+KPX P comma -103
+KPX P e -28
+KPX P eacute -28
+KPX P hyphen -14
+KPX P o -20
+KPX P oacute -20
+KPX P odieresis -20
+KPX P oe -17
+KPX P oslash -20
+KPX P period -101
+KPX R C -20
+KPX R Ccedilla -20
+KPX R G -19
+KPX R O -21
+KPX R OE -21
+KPX R Oacute -21
+KPX R Odieresis -21
+KPX R T 14
+KPX R U -21
+KPX R Udieresis -21
+KPX R V -25
+KPX R W -25
+KPX R Y -25
+KPX R a -24
+KPX R aacute -24
+KPX R adieresis -24
+KPX R ae -6
+KPX R aring -24
+KPX R e -28
+KPX R eacute -29
+KPX R hyphen -35
+KPX R o -23
+KPX R oacute -24
+KPX R odieresis -24
+KPX R oe -22
+KPX R u -15
+KPX R uacute -15
+KPX R udieresis -15
+KPX R y -11
+KPX S A -13
+KPX S AE -2
+KPX S Aacute -13
+KPX S Adieresis -13
+KPX S Aring -13
+KPX S T 13
+KPX S V -17
+KPX S W -17
+KPX S Y -17
+KPX S t -8
+KPX T A -36
+KPX T AE -26
+KPX T Aacute -36
+KPX T Acircumflex -36
+KPX T Adieresis -36
+KPX T Agrave -36
+KPX T Aring -36
+KPX T Atilde -36
+KPX T C 14
+KPX T G 15
+KPX T J -51
+KPX T O 13
+KPX T OE 11
+KPX T Oacute 13
+KPX T Ocircumflex 13
+KPX T Odieresis 13
+KPX T Ograve 13
+KPX T Oslash 14
+KPX T Otilde 13
+KPX T S 18
+KPX T V 33
+KPX T W 33
+KPX T Y 33
+KPX T a -53
+KPX T ae -52
+KPX T c -54
+KPX T colon -7
+KPX T comma -95
+KPX T e -69
+KPX T g -33
+KPX T guillemotleft -86
+KPX T guilsinglleft -89
+KPX T hyphen -75
+KPX T i -21
+KPX T j 8
+KPX T o -48
+KPX T oslash -48
+KPX T period -92
+KPX T r -15
+KPX T s -37
+KPX T semicolon -7
+KPX T u -102
+KPX T v -15
+KPX T w -15
+KPX T y 12
+KPX U A -42
+KPX U AE -31
+KPX U Aacute -42
+KPX U Acircumflex -42
+KPX U Adieresis -42
+KPX U Aring -42
+KPX U Atilde -42
+KPX U comma -39
+KPX U m -26
+KPX U n -26
+KPX U p -31
+KPX U period -36
+KPX U r -26
+KPX Uacute A -42
+KPX Uacute comma -39
+KPX Uacute m -26
+KPX Uacute n -26
+KPX Uacute p -31
+KPX Uacute period -36
+KPX Uacute r -26
+KPX Ucircumflex A -42
+KPX Udieresis A -42
+KPX Udieresis b 22
+KPX Udieresis comma -39
+KPX Udieresis m -26
+KPX Udieresis n -26
+KPX Udieresis p -31
+KPX Udieresis period -36
+KPX Udieresis r -26
+KPX Ugrave A -42
+KPX V A -99
+KPX V AE -106
+KPX V Aacute -99
+KPX V Acircumflex -99
+KPX V Adieresis -99
+KPX V Agrave -99
+KPX V Aring -99
+KPX V Atilde -99
+KPX V C -54
+KPX V G -51
+KPX V O -56
+KPX V Oacute -56
+KPX V Ocircumflex -56
+KPX V Odieresis -56
+KPX V Ograve -56
+KPX V Oslash -55
+KPX V Otilde -56
+KPX V S -22
+KPX V T 30
+KPX V a -84
+KPX V ae -99
+KPX V colon -85
+KPX V comma -116
+KPX V e -87
+KPX V g -77
+KPX V guillemotleft -70
+KPX V guilsinglleft -73
+KPX V hyphen -58
+KPX V i -25
+KPX V o -81
+KPX V oslash -81
+KPX V period -114
+KPX V r -50
+KPX V semicolon -85
+KPX V u -50
+KPX V y -45
+KPX W A -89
+KPX W AE -86
+KPX W Aacute -89
+KPX W Acircumflex -89
+KPX W Adieresis -89
+KPX W Agrave -89
+KPX W Aring -89
+KPX W Atilde -89
+KPX W C -49
+KPX W G -47
+KPX W O -49
+KPX W Oacute -49
+KPX W Ocircumflex -49
+KPX W Odieresis -49
+KPX W Ograve -49
+KPX W Oslash -48
+KPX W Otilde -49
+KPX W S -22
+KPX W T 30
+KPX W a -71
+KPX W ae -86
+KPX W colon -78
+KPX W comma -99
+KPX W e -73
+KPX W g -64
+KPX W guillemotleft -57
+KPX W guilsinglleft -59
+KPX W hyphen -45
+KPX W i -25
+KPX W o -68
+KPX W oslash -68
+KPX W period -96
+KPX W r -43
+KPX W semicolon -78
+KPX W u -43
+KPX W y -39
+KPX X C -52
+KPX X O -53
+KPX X Odieresis -53
+KPX X Q -50
+KPX X a -28
+KPX X e -33
+KPX X hyphen -57
+KPX X o -32
+KPX X u -27
+KPX X y -31
+KPX Y A -57
+KPX Y AE -46
+KPX Y Aacute -57
+KPX Y Acircumflex -57
+KPX Y Adieresis -57
+KPX Y Agrave -57
+KPX Y Aring -57
+KPX Y Atilde -57
+KPX Y C -47
+KPX Y G -44
+KPX Y O -49
+KPX Y Oacute -49
+KPX Y Ocircumflex -49
+KPX Y Odieresis -49
+KPX Y Ograve -49
+KPX Y Oslash -48
+KPX Y Otilde -49
+KPX Y S -15
+KPX Y T 37
+KPX Y a -103
+KPX Y ae -116
+KPX Y colon -102
+KPX Y comma -116
+KPX Y e -105
+KPX Y g -95
+KPX Y guillemotleft -101
+KPX Y guilsinglleft -103
+KPX Y hyphen -94
+KPX Y i -18
+KPX Y o -100
+KPX Y oslash -99
+KPX Y p -73
+KPX Y period -113
+KPX Y semicolon -102
+KPX Y u -68
+KPX Y v -68
+KPX Z v -6
+KPX Z y -4
+KPX a j -2
+KPX a quoteright -32
+KPX a v -7
+KPX a w -6
+KPX a y -7
+KPX aacute v -7
+KPX aacute w -6
+KPX aacute y -7
+KPX adieresis v -7
+KPX adieresis w -6
+KPX adieresis y -7
+KPX ae v -11
+KPX ae w -14
+KPX ae y -15
+KPX agrave v -7
+KPX agrave w -6
+KPX agrave y -7
+KPX aring v -7
+KPX aring w -6
+KPX aring y -7
+KPX b v -22
+KPX b w -22
+KPX b y -21
+KPX c h -26
+KPX c k -27
+KPX comma one -90
+KPX comma quotedblright -51
+KPX comma quoteright -51
+KPX e quoteright -7
+KPX e t -22
+KPX e v -12
+KPX e w -14
+KPX e x -1
+KPX e y -16
+KPX eacute v -12
+KPX eacute w -14
+KPX eacute y -16
+KPX ecircumflex v -12
+KPX ecircumflex w -14
+KPX ecircumflex y -16
+KPX eight four -12
+KPX eight one -97
+KPX eight seven -30
+KPX f a -38
+KPX f aacute -39
+KPX f adieresis -21
+KPX f ae -52
+KPX f aring -39
+KPX f e -40
+KPX f eacute -42
+KPX f f 17
+KPX f i 10
+KPX f j 31
+KPX f l 69
+KPX f o -35
+KPX f oacute -37
+KPX f odieresis -9
+KPX f oe -35
+KPX f oslash -35
+KPX f quoteright 44
+KPX f s -48
+KPX f t 7
+KPX five four -17
+KPX five one -117
+KPX five seven -68
+KPX four four -3
+KPX four one -86
+KPX four seven -67
+KPX g a -16
+KPX g adieresis -18
+KPX g ae -31
+KPX g aring -18
+KPX g e -18
+KPX g eacute -19
+KPX g l -23
+KPX g oacute -15
+KPX g odieresis -15
+KPX g r -21
+KPX guillemotright A -35
+KPX guillemotright AE -82
+KPX guillemotright Aacute -35
+KPX guillemotright Adieresis -35
+KPX guillemotright Aring -35
+KPX guillemotright T -91
+KPX guillemotright V -66
+KPX guillemotright W -56
+KPX guillemotright Y -93
+KPX guilsinglright A -25
+KPX guilsinglright AE -72
+KPX guilsinglright Aacute -25
+KPX guilsinglright Adieresis -25
+KPX guilsinglright Aring -25
+KPX guilsinglright T -81
+KPX guilsinglright V -56
+KPX guilsinglright W -46
+KPX guilsinglright Y -83
+KPX h quoteright -41
+KPX h y -7
+KPX hyphen A -16
+KPX hyphen AE -64
+KPX hyphen Aacute -16
+KPX hyphen Adieresis -16
+KPX hyphen Aring -16
+KPX hyphen T -70
+KPX hyphen V -44
+KPX hyphen W -34
+KPX hyphen Y -77
+KPX i T -6
+KPX i j 0
+KPX k a -17
+KPX k aacute -17
+KPX k adieresis -17
+KPX k ae -3
+KPX k aring -17
+KPX k comma -9
+KPX k e -19
+KPX k eacute -19
+KPX k g -14
+KPX k hyphen -74
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period -7
+KPX k s -3
+KPX k u 1
+KPX k udieresis 1
+KPX l v -9
+KPX l y -8
+KPX m p -1
+KPX m v -6
+KPX m w -5
+KPX m y -7
+KPX n T -35
+KPX n p -11
+KPX n quoteright -37
+KPX n v -14
+KPX n w -13
+KPX n y -14
+KPX nine four -20
+KPX nine one -100
+KPX nine seven -33
+KPX o T -65
+KPX o quoteright -19
+KPX o t -16
+KPX o v -18
+KPX o w -17
+KPX o x -17
+KPX o y -16
+KPX oacute v -18
+KPX oacute w -17
+KPX oacute y -16
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -18
+KPX odieresis w -17
+KPX odieresis x -17
+KPX odieresis y -16
+KPX ograve v -18
+KPX ograve w -17
+KPX ograve y -16
+KPX one comma -85
+KPX one eight -87
+KPX one five -88
+KPX one four -113
+KPX one nine -86
+KPX one one -113
+KPX one period -83
+KPX one seven -120
+KPX one six -89
+KPX one three -81
+KPX one two -69
+KPX one zero -85
+KPX p t -21
+KPX p y -21
+KPX period one -92
+KPX period quotedblright -49
+KPX period quoteright -49
+KPX q c -12
+KPX q u -18
+KPX quotedblbase A -10
+KPX quotedblbase AE 0
+KPX quotedblbase T -93
+KPX quotedblbase V -108
+KPX quotedblbase W -94
+KPX quotedblbase Y -103
+KPX quotedblleft A -83
+KPX quotedblleft AE -204
+KPX quotedblleft Aacute -84
+KPX quotedblleft Adieresis -84
+KPX quotedblleft Aring -84
+KPX quotedblleft T 24
+KPX quotedblleft V 11
+KPX quotedblleft W 14
+KPX quotedblleft Y 6
+KPX quotedblright A -107
+KPX quotedblright AE -231
+KPX quotedblright Aacute -108
+KPX quotedblright Adieresis -108
+KPX quotedblright Aring -108
+KPX quotedblright T 0
+KPX quotedblright V -10
+KPX quotedblright W -7
+KPX quotedblright Y -13
+KPX quoteleft A -85
+KPX quoteleft AE -206
+KPX quoteleft Aacute -86
+KPX quoteleft Adieresis -86
+KPX quoteleft Aring -86
+KPX quoteleft T 23
+KPX quoteleft V 9
+KPX quoteleft W 13
+KPX quoteleft Y 5
+KPX quoteright A -109
+KPX quoteright AE -232
+KPX quoteright Aacute -110
+KPX quoteright Adieresis -110
+KPX quoteright Aring -110
+KPX quoteright comma -85
+KPX quoteright d -62
+KPX quoteright o -56
+KPX quoteright period -82
+KPX quoteright r -44
+KPX quoteright s -55
+KPX quoteright t -42
+KPX quoteright v -43
+KPX quoteright w -44
+KPX quoteright y -40
+KPX r a -27
+KPX r aacute -27
+KPX r acircumflex -27
+KPX r adieresis -27
+KPX r ae -28
+KPX r agrave -27
+KPX r aring -27
+KPX r c -25
+KPX r ccedilla -25
+KPX r colon -18
+KPX r comma -99
+KPX r d -24
+KPX r e -33
+KPX r eacute -33
+KPX r ecircumflex -33
+KPX r egrave -33
+KPX r f -6
+KPX r g -16
+KPX r h -26
+KPX r hyphen -71
+KPX r i 13
+KPX r j 11
+KPX r k -26
+KPX r l -22
+KPX r m 13
+KPX r n 13
+KPX r o -21
+KPX r oacute -21
+KPX r ocircumflex -21
+KPX r odieresis -21
+KPX r oe -19
+KPX r ograve -21
+KPX r oslash -22
+KPX r p 7
+KPX r period -97
+KPX r q -21
+KPX r quoteright -1
+KPX r r 13
+KPX r s -19
+KPX r semicolon -18
+KPX r t 13
+KPX r u 13
+KPX r v 13
+KPX r w 13
+KPX r x -6
+KPX r y 15
+KPX r z -1
+KPX s quoteright -31
+KPX s t -34
+KPX seven colon -103
+KPX seven comma -129
+KPX seven eight -63
+KPX seven five -48
+KPX seven four -117
+KPX seven one -83
+KPX seven period -126
+KPX seven seven -42
+KPX seven six -76
+KPX seven three -50
+KPX seven two -56
+KPX six four -10
+KPX six one -94
+KPX six seven -36
+KPX t S 1
+KPX t a -14
+KPX t aacute -14
+KPX t adieresis -14
+KPX t ae -2
+KPX t aring -14
+KPX t colon -8
+KPX t e -17
+KPX t eacute -17
+KPX t h -12
+KPX t o -16
+KPX t oacute -16
+KPX t odieresis -16
+KPX t quoteright -18
+KPX t semicolon -10
+KPX three four -20
+KPX three one -108
+KPX three seven -46
+KPX two four -22
+KPX two one -91
+KPX two seven -39
+KPX u quoteright -30
+KPX v a -11
+KPX v aacute -11
+KPX v acircumflex -11
+KPX v adieresis -11
+KPX v ae -30
+KPX v agrave -11
+KPX v aring -11
+KPX v atilde -11
+KPX v c -9
+KPX v colon -37
+KPX v comma -42
+KPX v e -13
+KPX v eacute -13
+KPX v ecircumflex -13
+KPX v egrave -13
+KPX v g -6
+KPX v hyphen 17
+KPX v l -20
+KPX v o -8
+KPX v oacute -8
+KPX v odieresis -8
+KPX v ograve -8
+KPX v oslash -7
+KPX v period -39
+KPX v s -25
+KPX v semicolon -39
+KPX w a -17
+KPX w aacute -17
+KPX w acircumflex -17
+KPX w adieresis -17
+KPX w ae -36
+KPX w agrave -17
+KPX w aring -17
+KPX w atilde -17
+KPX w c -15
+KPX w colon -42
+KPX w comma -48
+KPX w e -18
+KPX w eacute -18
+KPX w ecircumflex -18
+KPX w egrave -18
+KPX w g -11
+KPX w hyphen 11
+KPX w l -25
+KPX w o -14
+KPX w oacute -14
+KPX w odieresis -14
+KPX w ograve -14
+KPX w oslash -13
+KPX w period -45
+KPX w s -30
+KPX w semicolon -45
+KPX x a -12
+KPX x c -15
+KPX x e -15
+KPX x eacute -15
+KPX x o -14
+KPX x q -10
+KPX y a -22
+KPX y aacute -22
+KPX y acircumflex -22
+KPX y adieresis -22
+KPX y ae -37
+KPX y agrave -22
+KPX y aring -22
+KPX y atilde -22
+KPX y c -20
+KPX y colon -42
+KPX y comma -32
+KPX y e -23
+KPX y eacute -23
+KPX y ecircumflex -23
+KPX y egrave -23
+KPX y g -15
+KPX y hyphen -3
+KPX y l -28
+KPX y o -19
+KPX y oacute -19
+KPX y odieresis -19
+KPX y ograve -19
+KPX y oslash -18
+KPX y period -29
+KPX y s -32
+KPX y semicolon -45
+KPX zero four -14
+KPX zero one -99
+KPX zero seven -38
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ubkli8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ubkli8a.pfb
new file mode 100644
index 00000000000..3ef45dcbecd
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ubkli8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrb8a.afm b/Master/tlpkg/tlgs/lib/fonts/ucrb8a.afm
new file mode 100644
index 00000000000..0bafed51b84
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrb8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusMonL-Bold
+FullName Nimbus Mono L Bold
+FamilyName Nimbus Mono L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -43 -278 681 871
+CapHeight 583
+XHeight 437
+Descender -205
+Ascender 624
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 375 0 375 0 ;
+C 33 ; WX 600 ; N exclam ; B 220 -15 381 638 ;
+C 34 ; WX 600 ; N quotedbl ; B 136 312 464 602 ;
+C 35 ; WX 600 ; N numbersign ; B 62 -92 538 675 ;
+C 36 ; WX 600 ; N dollar ; B 83 -123 517 684 ;
+C 37 ; WX 600 ; N percent ; B 80 -15 521 617 ;
+C 38 ; WX 600 ; N ampersand ; B 75 -14 508 550 ;
+C 39 ; WX 600 ; N quoteright ; B 147 331 351 623 ;
+C 40 ; WX 600 ; N parenleft ; B 264 -153 488 632 ;
+C 41 ; WX 600 ; N parenright ; B 117 -153 341 632 ;
+C 42 ; WX 600 ; N asterisk ; B 83 208 517 622 ;
+C 43 ; WX 600 ; N plus ; B 42 0 558 560 ;
+C 44 ; WX 600 ; N comma ; B 147 -158 351 134 ;
+C 45 ; WX 600 ; N hyphen ; B 42 229 558 329 ;
+C 46 ; WX 600 ; N period ; B 225 -15 375 117 ;
+C 47 ; WX 600 ; N slash ; B 83 -113 517 695 ;
+C 48 ; WX 600 ; N zero ; B 83 -15 517 638 ;
+C 49 ; WX 600 ; N one ; B 83 0 517 638 ;
+C 50 ; WX 600 ; N two ; B 54 0 508 638 ;
+C 51 ; WX 600 ; N three ; B 66 -15 529 638 ;
+C 52 ; WX 600 ; N four ; B 75 0 508 622 ;
+C 53 ; WX 600 ; N five ; B 66 -15 529 622 ;
+C 54 ; WX 600 ; N six ; B 105 -15 540 638 ;
+C 55 ; WX 600 ; N seven ; B 75 -1 508 622 ;
+C 56 ; WX 600 ; N eight ; B 83 -15 517 638 ;
+C 57 ; WX 600 ; N nine ; B 106 -15 541 638 ;
+C 58 ; WX 600 ; N colon ; B 225 -15 375 437 ;
+C 59 ; WX 600 ; N semicolon ; B 147 -158 351 437 ;
+C 60 ; WX 600 ; N less ; B 42 54 544 501 ;
+C 61 ; WX 600 ; N equal ; B 42 138 558 422 ;
+C 62 ; WX 600 ; N greater ; B 56 53 558 500 ;
+C 63 ; WX 600 ; N question ; B 104 -15 517 598 ;
+C 64 ; WX 600 ; N at ; B 76 -152 509 620 ;
+C 65 ; WX 600 ; N A ; B -21 0 621 583 ;
+C 66 ; WX 600 ; N B ; B 13 0 571 583 ;
+C 67 ; WX 600 ; N C ; B 33 -14 564 597 ;
+C 68 ; WX 600 ; N D ; B 13 0 550 583 ;
+C 69 ; WX 600 ; N E ; B 13 0 550 583 ;
+C 70 ; WX 600 ; N F ; B 13 0 550 583 ;
+C 71 ; WX 600 ; N G ; B 33 -14 592 597 ;
+C 72 ; WX 600 ; N H ; B 23 0 581 583 ;
+C 73 ; WX 600 ; N I ; B 83 0 517 583 ;
+C 74 ; WX 600 ; N J ; B 54 -14 613 583 ;
+C 75 ; WX 600 ; N K ; B 13 0 602 583 ;
+C 76 ; WX 600 ; N L ; B 33 0 571 583 ;
+C 77 ; WX 600 ; N M ; B -19 0 623 584 ;
+C 78 ; WX 600 ; N N ; B -8 0 592 583 ;
+C 79 ; WX 600 ; N O ; B 21 -14 579 597 ;
+C 80 ; WX 600 ; N P ; B 13 0 529 583 ;
+C 81 ; WX 600 ; N Q ; B 21 -145 579 597 ;
+C 82 ; WX 600 ; N R ; B 13 0 619 583 ;
+C 83 ; WX 600 ; N S ; B 62 -14 538 597 ;
+C 84 ; WX 600 ; N T ; B 42 0 558 583 ;
+C 85 ; WX 600 ; N U ; B 10 -14 590 583 ;
+C 86 ; WX 600 ; N V ; B -21 0 621 583 ;
+C 87 ; WX 600 ; N W ; B -10 0 610 583 ;
+C 88 ; WX 600 ; N X ; B 10 0 590 583 ;
+C 89 ; WX 600 ; N Y ; B 21 0 579 583 ;
+C 90 ; WX 600 ; N Z ; B 73 0 527 583 ;
+C 91 ; WX 600 ; N bracketleft ; B 250 -148 475 627 ;
+C 92 ; WX 600 ; N backslash ; B 83 -113 517 695 ;
+C 93 ; WX 600 ; N bracketright ; B 125 -148 350 627 ;
+C 94 ; WX 600 ; N asciicircum ; B 83 325 517 652 ;
+C 95 ; WX 600 ; N underscore ; B -12 -125 612 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 249 348 453 602 ;
+C 97 ; WX 600 ; N a ; B 42 -16 571 450 ;
+C 98 ; WX 600 ; N b ; B -8 -14 571 624 ;
+C 99 ; WX 600 ; N c ; B 54 -16 565 450 ;
+C 100 ; WX 600 ; N d ; B 33 -14 613 624 ;
+C 101 ; WX 600 ; N e ; B 33 -16 550 450 ;
+C 102 ; WX 600 ; N f ; B 75 0 571 623 ;
+C 103 ; WX 600 ; N g ; B 33 -205 592 451 ;
+C 104 ; WX 600 ; N h ; B 13 0 581 624 ;
+C 105 ; WX 600 ; N i ; B 62 0 538 623 ;
+C 106 ; WX 600 ; N j ; B 117 -205 488 623 ;
+C 107 ; WX 600 ; N k ; B 33 0 571 624 ;
+C 108 ; WX 600 ; N l ; B 62 0 538 624 ;
+C 109 ; WX 600 ; N m ; B -19 0 623 450 ;
+C 110 ; WX 600 ; N n ; B 23 0 571 450 ;
+C 111 ; WX 600 ; N o ; B 42 -16 558 450 ;
+C 112 ; WX 600 ; N p ; B -8 -205 571 450 ;
+C 113 ; WX 600 ; N q ; B 33 -205 613 450 ;
+C 114 ; WX 600 ; N r ; B 54 0 571 449 ;
+C 115 ; WX 600 ; N s ; B 73 -16 527 450 ;
+C 116 ; WX 600 ; N t ; B 13 -16 529 591 ;
+C 117 ; WX 600 ; N u ; B 13 -13 571 437 ;
+C 118 ; WX 600 ; N v ; B 0 0 600 437 ;
+C 119 ; WX 600 ; N w ; B 0 0 600 437 ;
+C 120 ; WX 600 ; N x ; B 21 0 579 437 ;
+C 121 ; WX 600 ; N y ; B 21 -205 579 437 ;
+C 122 ; WX 600 ; N z ; B 85 0 519 437 ;
+C 123 ; WX 600 ; N braceleft ; B 167 -153 433 623 ;
+C 124 ; WX 600 ; N bar ; B 250 -153 350 622 ;
+C 125 ; WX 600 ; N braceright ; B 167 -153 433 623 ;
+C 126 ; WX 600 ; N asciitilde ; B 62 179 538 385 ;
+C 161 ; WX 600 ; N exclamdown ; B 220 -227 381 426 ;
+C 162 ; WX 600 ; N cent ; B 83 -44 499 661 ;
+C 163 ; WX 600 ; N sterling ; B 33 0 550 598 ;
+C 164 ; WX 600 ; N fraction ; B 21 102 580 500 ;
+C 165 ; WX 600 ; N yen ; B 21 0 579 580 ;
+C 166 ; WX 600 ; N florin ; B 57 -123 548 638 ;
+C 167 ; WX 600 ; N section ; B 36 -170 564 583 ;
+C 168 ; WX 600 ; N currency ; B 73 64 527 519 ;
+C 169 ; WX 600 ; N quotesingle ; B 236 312 364 602 ;
+C 170 ; WX 600 ; N quotedblleft ; B 98 348 502 602 ;
+C 171 ; WX 600 ; N guillemotleft ; B 33 20 571 415 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 33 20 342 415 ;
+C 173 ; WX 600 ; N guilsinglright ; B 263 20 571 415 ;
+C 174 ; WX 600 ; N fi ; B -14 0 619 624 ;
+C 175 ; WX 600 ; N fl ; B -17 0 617 623 ;
+C 177 ; WX 600 ; N endash ; B 42 229 558 329 ;
+C 178 ; WX 600 ; N dagger ; B 94 -92 506 622 ;
+C 179 ; WX 600 ; N daggerdbl ; B 94 -92 506 622 ;
+C 180 ; WX 600 ; N periodcentered ; B 225 214 375 346 ;
+C 182 ; WX 600 ; N paragraph ; B 49 -174 558 583 ;
+C 183 ; WX 600 ; N bullet ; B 150 154 449 453 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 147 -158 351 134 ;
+C 185 ; WX 600 ; N quotedblbase ; B 87 -120 491 134 ;
+C 186 ; WX 600 ; N quotedblright ; B 87 348 491 602 ;
+C 187 ; WX 600 ; N guillemotright ; B 33 20 571 415 ;
+C 188 ; WX 600 ; N ellipsis ; B 25 -15 575 117 ;
+C 189 ; WX 600 ; N perthousand ; B 0 0 600 618 ;
+C 191 ; WX 600 ; N questiondown ; B 83 -227 496 386 ;
+C 193 ; WX 600 ; N grave ; B 125 496 350 696 ;
+C 194 ; WX 600 ; N acute ; B 250 496 475 696 ;
+C 195 ; WX 600 ; N circumflex ; B 125 497 476 696 ;
+C 196 ; WX 600 ; N tilde ; B 115 523 485 656 ;
+C 197 ; WX 600 ; N macron ; B 125 546 475 626 ;
+C 198 ; WX 600 ; N breve ; B 125 503 475 687 ;
+C 199 ; WX 600 ; N dotaccent ; B 240 534 360 654 ;
+C 200 ; WX 600 ; N dieresis ; B 136 534 464 654 ;
+C 202 ; WX 600 ; N ring ; B 177 486 423 727 ;
+C 203 ; WX 600 ; N cedilla ; B 180 -229 407 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 125 496 475 694 ;
+C 206 ; WX 600 ; N ogonek ; B 250 -208 463 0 ;
+C 207 ; WX 600 ; N caron ; B 125 497 476 696 ;
+C 208 ; WX 600 ; N emdash ; B -29 229 629 329 ;
+C 225 ; WX 600 ; N AE ; B -20 0 614 583 ;
+C 227 ; WX 600 ; N ordfeminine ; B 118 182 489 595 ;
+C 232 ; WX 600 ; N Lslash ; B 12 0 571 583 ;
+C 233 ; WX 600 ; N Oslash ; B 9 -70 590 638 ;
+C 234 ; WX 600 ; N OE ; B -20 0 612 583 ;
+C 235 ; WX 600 ; N ordmasculine ; B 122 182 480 595 ;
+C 241 ; WX 600 ; N ae ; B -13 -16 612 450 ;
+C 245 ; WX 600 ; N dotlessi ; B 62 0 538 437 ;
+C 248 ; WX 600 ; N lslash ; B 62 0 538 624 ;
+C 249 ; WX 600 ; N oslash ; B 23 -70 573 494 ;
+C 250 ; WX 600 ; N oe ; B -11 -16 613 450 ;
+C 251 ; WX 600 ; N germandbls ; B 13 -16 529 623 ;
+C -1 ; WX 600 ; N Udieresis ; B 10 -14 590 798 ;
+C -1 ; WX 600 ; N Uacute ; B 10 -14 590 839 ;
+C -1 ; WX 600 ; N Scedilla ; B 62 -229 538 597 ;
+C -1 ; WX 600 ; N Tcaron ; B 42 0 558 839 ;
+C -1 ; WX 600 ; N Scaron ; B 62 -14 538 839 ;
+C -1 ; WX 600 ; N Rcaron ; B 13 0 619 839 ;
+C -1 ; WX 600 ; N Racute ; B 13 0 619 839 ;
+C -1 ; WX 600 ; N Sacute ; B 62 -14 538 839 ;
+C -1 ; WX 600 ; N Otilde ; B 21 -14 579 799 ;
+C -1 ; WX 600 ; N ucircumflex ; B 13 -13 571 696 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 21 -14 579 838 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 10 -14 590 838 ;
+C -1 ; WX 600 ; N Yacute ; B 21 0 579 839 ;
+C -1 ; WX 600 ; N Eth ; B 0 0 550 583 ;
+C -1 ; WX 600 ; N Dcroat ; B 0 0 550 583 ;
+C -1 ; WX 600 ; N Zacute ; B 73 0 527 839 ;
+C -1 ; WX 600 ; N Uring ; B 10 -14 590 871 ;
+C -1 ; WX 600 ; N gbreve ; B 33 -205 592 687 ;
+C -1 ; WX 600 ; N eogonek ; B 33 -208 550 450 ;
+C -1 ; WX 600 ; N edotaccent ; B 33 -16 550 654 ;
+C -1 ; WX 600 ; N ecaron ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N Ugrave ; B 10 -14 590 839 ;
+C -1 ; WX 600 ; N Thorn ; B 14 0 523 583 ;
+C -1 ; WX 600 ; N eacute ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N edieresis ; B 33 -16 550 654 ;
+C -1 ; WX 600 ; N dcaron ; B 33 -14 681 637 ;
+C -1 ; WX 600 ; N ccedilla ; B 54 -229 565 450 ;
+C -1 ; WX 600 ; N ccaron ; B 54 -16 565 696 ;
+C -1 ; WX 600 ; N cacute ; B 54 -16 565 696 ;
+C -1 ; WX 600 ; N aogonek ; B 42 -208 580 450 ;
+C -1 ; WX 600 ; N aring ; B 42 -16 571 727 ;
+C -1 ; WX 600 ; N atilde ; B 42 -16 571 656 ;
+C -1 ; WX 600 ; N abreve ; B 42 -16 571 687 ;
+C -1 ; WX 600 ; N egrave ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N agrave ; B 42 -16 571 696 ;
+C -1 ; WX 600 ; N aacute ; B 42 -16 571 696 ;
+C -1 ; WX 600 ; N adieresis ; B 42 -16 571 654 ;
+C -1 ; WX 600 ; N Uogonek ; B 10 -208 590 583 ;
+C -1 ; WX 600 ; N ugrave ; B 13 -13 571 696 ;
+C -1 ; WX 600 ; N uacute ; B 13 -13 571 696 ;
+C -1 ; WX 600 ; N udieresis ; B 13 -13 571 654 ;
+C -1 ; WX 600 ; N tcaron ; B 13 -16 530 637 ;
+C -1 ; WX 600 ; N scommaaccent ; B 73 -278 527 450 ;
+C -1 ; WX 600 ; N Zcaron ; B 73 0 527 839 ;
+C -1 ; WX 600 ; N ecircumflex ; B 33 -16 550 696 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 10 -14 590 839 ;
+C -1 ; WX 600 ; N acircumflex ; B 42 -16 571 696 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 73 0 527 798 ;
+C -1 ; WX 600 ; N scaron ; B 73 -16 527 696 ;
+C -1 ; WX 600 ; N Amacron ; B -21 0 621 769 ;
+C -1 ; WX 600 ; N sacute ; B 73 -16 527 696 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 42 -278 558 583 ;
+C -1 ; WX 600 ; N Ydieresis ; B 21 0 579 798 ;
+C -1 ; WX 600 ; N thorn ; B -8 -205 571 624 ;
+C -1 ; WX 600 ; N Emacron ; B 13 0 550 769 ;
+C -1 ; WX 600 ; N Ograve ; B 21 -14 579 839 ;
+C -1 ; WX 600 ; N Oacute ; B 21 -14 579 839 ;
+C -1 ; WX 600 ; N Odieresis ; B 21 -14 579 798 ;
+C -1 ; WX 600 ; N Ntilde ; B -8 0 592 799 ;
+C -1 ; WX 600 ; N Ncaron ; B -8 0 592 839 ;
+C -1 ; WX 600 ; N Nacute ; B -8 0 592 839 ;
+C -1 ; WX 600 ; N Lcaron ; B 33 0 571 598 ;
+C -1 ; WX 600 ; N Lacute ; B 33 0 571 839 ;
+C -1 ; WX 600 ; N Idotaccent ; B 83 0 517 798 ;
+C -1 ; WX 600 ; N racute ; B 54 0 571 696 ;
+C -1 ; WX 600 ; N Icircumflex ; B 83 0 517 839 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 42 -16 558 694 ;
+C -1 ; WX 600 ; N otilde ; B 42 -16 558 656 ;
+C -1 ; WX 600 ; N Euro ; B 4 -14 538 597 ;
+C -1 ; WX 600 ; N ocircumflex ; B 42 -16 558 696 ;
+C -1 ; WX 600 ; N onesuperior ; B 166 247 434 638 ;
+C -1 ; WX 600 ; N twosuperior ; B 149 247 429 637 ;
+C -1 ; WX 600 ; N threesuperior ; B 157 238 442 637 ;
+C -1 ; WX 600 ; N Igrave ; B 83 0 517 839 ;
+C -1 ; WX 600 ; N Iacute ; B 83 0 517 839 ;
+C -1 ; WX 600 ; N Imacron ; B 83 0 517 769 ;
+C -1 ; WX 600 ; N Iogonek ; B 83 -208 517 583 ;
+C -1 ; WX 600 ; N Idieresis ; B 83 0 517 798 ;
+C -1 ; WX 600 ; N Gbreve ; B 33 -14 592 831 ;
+C -1 ; WX 600 ; N Umacron ; B 10 -14 590 769 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 13 -278 602 583 ;
+C -1 ; WX 600 ; N ograve ; B 42 -16 558 696 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 62 -278 538 597 ;
+C -1 ; WX 600 ; N Eogonek ; B 13 -208 587 583 ;
+C -1 ; WX 600 ; N oacute ; B 42 -16 558 696 ;
+C -1 ; WX 600 ; N Edotaccent ; B 13 0 550 798 ;
+C -1 ; WX 600 ; N iogonek ; B 62 -208 540 623 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 33 -205 592 721 ;
+C -1 ; WX 600 ; N odieresis ; B 42 -16 558 654 ;
+C -1 ; WX 600 ; N ntilde ; B 23 0 571 656 ;
+C -1 ; WX 600 ; N ncaron ; B 23 0 571 696 ;
+C -1 ; WX 600 ; N Ecaron ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N scedilla ; B 73 -229 527 450 ;
+C -1 ; WX 600 ; N rcaron ; B 54 0 571 696 ;
+C -1 ; WX 600 ; N Egrave ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N Eacute ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 33 -278 592 597 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 13 -278 619 583 ;
+C -1 ; WX 600 ; N Edieresis ; B 13 0 550 798 ;
+C -1 ; WX 600 ; N nacute ; B 23 0 571 696 ;
+C -1 ; WX 600 ; N uogonek ; B 13 -208 571 437 ;
+C -1 ; WX 600 ; N umacron ; B 13 -13 571 626 ;
+C -1 ; WX 600 ; N Dcaron ; B 13 0 550 839 ;
+C -1 ; WX 600 ; N lcaron ; B 62 0 538 637 ;
+C -1 ; WX 600 ; N Ccaron ; B 33 -14 564 839 ;
+C -1 ; WX 600 ; N Cacute ; B 33 -14 564 839 ;
+C -1 ; WX 600 ; N Ccedilla ; B 33 -229 564 597 ;
+C -1 ; WX 600 ; N degree ; B 125 243 475 596 ;
+C -1 ; WX 600 ; N Aogonek ; B -21 -208 621 583 ;
+C -1 ; WX 600 ; N minus ; B 42 230 558 330 ;
+C -1 ; WX 600 ; N multiply ; B 100 80 500 480 ;
+C -1 ; WX 600 ; N divide ; B 42 28 558 532 ;
+C -1 ; WX 600 ; N Aring ; B -21 0 621 871 ;
+C -1 ; WX 600 ; N trademark ; B -33 220 620 583 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 54 -278 571 449 ;
+C -1 ; WX 600 ; N lacute ; B 62 0 538 840 ;
+C -1 ; WX 600 ; N omacron ; B 42 -16 558 626 ;
+C -1 ; WX 600 ; N Atilde ; B -21 0 621 799 ;
+C -1 ; WX 600 ; N icircumflex ; B 62 0 538 696 ;
+C -1 ; WX 600 ; N igrave ; B 62 0 538 696 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 23 -278 571 450 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 62 -278 538 624 ;
+C -1 ; WX 600 ; N plusminus ; B 42 0 558 624 ;
+C -1 ; WX 600 ; N onehalf ; B -34 0 629 638 ;
+C -1 ; WX 600 ; N onequarter ; B -34 0 629 638 ;
+C -1 ; WX 600 ; N threequarters ; B -43 0 630 637 ;
+C -1 ; WX 600 ; N iacute ; B 62 0 538 696 ;
+C -1 ; WX 600 ; N Abreve ; B -21 0 621 831 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 33 -278 571 624 ;
+C -1 ; WX 600 ; N Omacron ; B 21 -14 579 769 ;
+C -1 ; WX 600 ; N imacron ; B 62 0 538 626 ;
+C -1 ; WX 600 ; N emacron ; B 33 -16 550 626 ;
+C -1 ; WX 600 ; N amacron ; B 42 -16 571 626 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 13 -278 529 591 ;
+C -1 ; WX 600 ; N ydieresis ; B 21 -205 579 654 ;
+C -1 ; WX 600 ; N zdotaccent ; B 85 0 519 654 ;
+C -1 ; WX 600 ; N zcaron ; B 85 0 519 696 ;
+C -1 ; WX 600 ; N zacute ; B 85 0 519 696 ;
+C -1 ; WX 600 ; N yacute ; B 21 -205 579 696 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 13 -13 571 694 ;
+C -1 ; WX 600 ; N eth ; B 42 -16 558 646 ;
+C -1 ; WX 600 ; N uring ; B 13 -13 571 727 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 21 -14 579 839 ;
+C -1 ; WX 600 ; N commaaccent ; B 183 -278 351 -59 ;
+C -1 ; WX 600 ; N copyright ; B -7 -15 606 598 ;
+C -1 ; WX 600 ; N registered ; B -7 -15 606 598 ;
+C -1 ; WX 600 ; N Acircumflex ; B -21 0 621 839 ;
+C -1 ; WX 600 ; N idieresis ; B 62 0 538 654 ;
+C -1 ; WX 600 ; N lozenge ; B 72 -19 529 593 ;
+C -1 ; WX 600 ; N Delta ; B 15 0 585 583 ;
+C -1 ; WX 600 ; N notequal ; B 42 22 558 525 ;
+C -1 ; WX 600 ; N radical ; B 12 -60 642 697 ;
+C -1 ; WX 600 ; N Agrave ; B -21 0 621 839 ;
+C -1 ; WX 600 ; N Aacute ; B -21 0 621 839 ;
+C -1 ; WX 600 ; N lessequal ; B 3 0 549 591 ;
+C -1 ; WX 600 ; N greaterequal ; B 35 0 582 591 ;
+C -1 ; WX 600 ; N logicalnot ; B 42 115 465 445 ;
+C -1 ; WX 600 ; N summation ; B 45 -97 538 671 ;
+C -1 ; WX 600 ; N partialdiff ; B 102 -16 524 590 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B -8 -278 592 583 ;
+C -1 ; WX 600 ; N dcroat ; B 33 -16 613 624 ;
+C -1 ; WX 600 ; N brokenbar ; B 250 -153 350 622 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 33 -278 571 583 ;
+C -1 ; WX 600 ; N Adieresis ; B -21 0 621 798 ;
+C -1 ; WX 600 ; N mu ; B 13 -153 571 437 ;
+C -1 ; WX 600 ; N .notdef ; B 375 0 375 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -14
+KPX A Ccedilla -22
+KPX A G -10
+KPX A O -15
+KPX A Odieresis -15
+KPX A Q -16
+KPX A T -27
+KPX A U -23
+KPX A Uacute -23
+KPX A Ucircumflex -23
+KPX A Udieresis -23
+KPX A Ugrave -23
+KPX A V -59
+KPX A W -13
+KPX A Y -27
+KPX A a 15
+KPX A b 45
+KPX A c -4
+KPX A ccedilla -8
+KPX A comma -47
+KPX A d 4
+KPX A e 2
+KPX A g 0
+KPX A guillemotleft -40
+KPX A guilsinglleft -40
+KPX A hyphen -19
+KPX A o -3
+KPX A period -62
+KPX A q -4
+KPX A quotedblright -84
+KPX A quoteright -113
+KPX A t -20
+KPX A u -12
+KPX A v -39
+KPX A w -13
+KPX A y -39
+KPX Aacute C -14
+KPX Aacute G -10
+KPX Aacute O -15
+KPX Aacute Q -16
+KPX Aacute T -27
+KPX Aacute U -23
+KPX Aacute V -59
+KPX Aacute W -13
+KPX Aacute Y -27
+KPX Aacute a 15
+KPX Aacute b 45
+KPX Aacute c -4
+KPX Aacute comma -47
+KPX Aacute d 4
+KPX Aacute e 2
+KPX Aacute g 0
+KPX Aacute guillemotleft -40
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen -19
+KPX Aacute o -3
+KPX Aacute period -62
+KPX Aacute q -4
+KPX Aacute quoteright -113
+KPX Aacute t -20
+KPX Aacute u -12
+KPX Aacute v -39
+KPX Aacute w -13
+KPX Aacute y -39
+KPX Acircumflex C -14
+KPX Acircumflex G -10
+KPX Acircumflex O -15
+KPX Acircumflex Q -16
+KPX Acircumflex T -27
+KPX Acircumflex U -23
+KPX Acircumflex V -59
+KPX Acircumflex W -13
+KPX Acircumflex Y -27
+KPX Acircumflex comma -47
+KPX Acircumflex period -62
+KPX Adieresis C -14
+KPX Adieresis G -10
+KPX Adieresis O -15
+KPX Adieresis Q -16
+KPX Adieresis T -27
+KPX Adieresis U -23
+KPX Adieresis V -59
+KPX Adieresis W -13
+KPX Adieresis Y -27
+KPX Adieresis a 15
+KPX Adieresis b 45
+KPX Adieresis c -4
+KPX Adieresis comma -47
+KPX Adieresis d 4
+KPX Adieresis g 0
+KPX Adieresis guillemotleft -40
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen -19
+KPX Adieresis o -3
+KPX Adieresis period -62
+KPX Adieresis q -4
+KPX Adieresis quotedblright -84
+KPX Adieresis quoteright -113
+KPX Adieresis t -20
+KPX Adieresis u -12
+KPX Adieresis v -39
+KPX Adieresis w -13
+KPX Adieresis y -39
+KPX Agrave C -14
+KPX Agrave G -10
+KPX Agrave O -15
+KPX Agrave Q -16
+KPX Agrave T -27
+KPX Agrave U -23
+KPX Agrave V -59
+KPX Agrave W -13
+KPX Agrave Y -27
+KPX Agrave comma -47
+KPX Agrave period -62
+KPX Aring C -14
+KPX Aring G -10
+KPX Aring O -15
+KPX Aring Q -16
+KPX Aring T -27
+KPX Aring U -23
+KPX Aring V -59
+KPX Aring W -13
+KPX Aring Y -27
+KPX Aring a 15
+KPX Aring b 45
+KPX Aring c -4
+KPX Aring comma -47
+KPX Aring d 4
+KPX Aring e 2
+KPX Aring g 0
+KPX Aring guillemotleft -40
+KPX Aring guilsinglleft -40
+KPX Aring hyphen -19
+KPX Aring o -3
+KPX Aring period -62
+KPX Aring q -4
+KPX Aring quotedblright -84
+KPX Aring quoteright -113
+KPX Aring t -20
+KPX Aring u -12
+KPX Aring v -39
+KPX Aring w -13
+KPX Aring y -39
+KPX Atilde C -14
+KPX Atilde G -10
+KPX Atilde O -15
+KPX Atilde Q -16
+KPX Atilde T -27
+KPX Atilde U -23
+KPX Atilde V -59
+KPX Atilde W -13
+KPX Atilde Y -27
+KPX Atilde comma -47
+KPX Atilde period -62
+KPX B A 4
+KPX B AE 3
+KPX B Aacute 4
+KPX B Acircumflex 4
+KPX B Adieresis 4
+KPX B Aring 4
+KPX B Atilde 4
+KPX B O -9
+KPX B OE 11
+KPX B Oacute -9
+KPX B Ocircumflex -9
+KPX B Odieresis -9
+KPX B Ograve -9
+KPX B Oslash -5
+KPX B V -18
+KPX B W -6
+KPX B Y -39
+KPX C A 8
+KPX C AE 7
+KPX C Aacute 8
+KPX C Adieresis 8
+KPX C Aring 8
+KPX C H -13
+KPX C K -8
+KPX C O -14
+KPX C Oacute -14
+KPX C Odieresis -14
+KPX Ccedilla A 3
+KPX D A -25
+KPX D Aacute -25
+KPX D Acircumflex -25
+KPX D Adieresis -25
+KPX D Agrave -25
+KPX D Aring -25
+KPX D Atilde -25
+KPX D J -32
+KPX D T -27
+KPX D V -30
+KPX D W -13
+KPX D X -37
+KPX D Y -51
+KPX F A -39
+KPX F Aacute -39
+KPX F Acircumflex -39
+KPX F Adieresis -39
+KPX F Agrave -39
+KPX F Aring -39
+KPX F Atilde -39
+KPX F J -78
+KPX F O -24
+KPX F Odieresis -24
+KPX F a -40
+KPX F aacute -40
+KPX F adieresis -40
+KPX F ae -18
+KPX F aring -40
+KPX F comma -168
+KPX F e -47
+KPX F eacute -47
+KPX F hyphen -55
+KPX F i -46
+KPX F j -54
+KPX F o -51
+KPX F oacute -51
+KPX F odieresis -51
+KPX F oe -16
+KPX F oslash -51
+KPX F period -187
+KPX F r -32
+KPX F u -1
+KPX G A 6
+KPX G AE 5
+KPX G Aacute 6
+KPX G Acircumflex 6
+KPX G Adieresis 6
+KPX G Agrave 6
+KPX G Aring 6
+KPX G Atilde 6
+KPX G T -25
+KPX G V 6
+KPX G W 6
+KPX G Y -14
+KPX J A -8
+KPX J AE -16
+KPX J Adieresis -8
+KPX J Aring -8
+KPX K C -24
+KPX K G -19
+KPX K O -25
+KPX K OE -4
+KPX K Oacute -25
+KPX K Odieresis -25
+KPX K S -9
+KPX K T -13
+KPX K a 6
+KPX K adieresis 6
+KPX K ae 31
+KPX K aring 6
+KPX K e -6
+KPX K hyphen -44
+KPX K o -12
+KPX K oacute -12
+KPX K odieresis -12
+KPX K u -22
+KPX K udieresis -22
+KPX K y -50
+KPX L A 16
+KPX L AE 16
+KPX L Aacute 16
+KPX L Adieresis 16
+KPX L Aring 16
+KPX L C -10
+KPX L Ccedilla -11
+KPX L G -10
+KPX L O -7
+KPX L Oacute -7
+KPX L Ocircumflex -7
+KPX L Odieresis -7
+KPX L Ograve -7
+KPX L Otilde -7
+KPX L S -24
+KPX L T -52
+KPX L U -29
+KPX L Udieresis -29
+KPX L V -57
+KPX L W -22
+KPX L Y -52
+KPX L hyphen 9
+KPX L quotedblright -72
+KPX L quoteright -99
+KPX L u -10
+KPX L udieresis -11
+KPX L y -33
+KPX N A -3
+KPX N AE -3
+KPX N Aacute -3
+KPX N Adieresis -3
+KPX N Aring -3
+KPX N C -7
+KPX N Ccedilla -6
+KPX N G -6
+KPX N O -5
+KPX N Oacute -5
+KPX N Odieresis -5
+KPX N a -11
+KPX N aacute -11
+KPX N adieresis -11
+KPX N ae 18
+KPX N aring -11
+KPX N comma -75
+KPX N e -3
+KPX N eacute -3
+KPX N o -8
+KPX N oacute -8
+KPX N odieresis -8
+KPX N oslash -3
+KPX N period -93
+KPX N u -8
+KPX N udieresis -8
+KPX O A -14
+KPX O AE -14
+KPX O Aacute -14
+KPX O Adieresis -14
+KPX O Aring -14
+KPX O T -15
+KPX O V -23
+KPX O W -2
+KPX O X -26
+KPX O Y -43
+KPX Oacute A -14
+KPX Oacute T -15
+KPX Oacute V -23
+KPX Oacute W -2
+KPX Oacute Y -43
+KPX Ocircumflex T -15
+KPX Ocircumflex V -23
+KPX Ocircumflex Y -43
+KPX Odieresis A -14
+KPX Odieresis T -15
+KPX Odieresis V -23
+KPX Odieresis W -2
+KPX Odieresis X -26
+KPX Odieresis Y -43
+KPX Ograve T -15
+KPX Ograve V -23
+KPX Ograve Y -43
+KPX Oslash A -10
+KPX Otilde T -15
+KPX Otilde V -23
+KPX Otilde Y -43
+KPX P A -61
+KPX P AE -59
+KPX P Aacute -61
+KPX P Adieresis -61
+KPX P Aring -61
+KPX P J -73
+KPX P a -49
+KPX P aacute -49
+KPX P adieresis -49
+KPX P ae -27
+KPX P aring -49
+KPX P comma -160
+KPX P e -38
+KPX P eacute -38
+KPX P hyphen -33
+KPX P o -42
+KPX P oacute -42
+KPX P odieresis -42
+KPX P oe -13
+KPX P oslash -42
+KPX P period -178
+KPX R C -14
+KPX R Ccedilla -17
+KPX R G -10
+KPX R O -14
+KPX R OE 5
+KPX R Oacute -14
+KPX R Odieresis -14
+KPX R T -28
+KPX R U -16
+KPX R Udieresis -17
+KPX R V -24
+KPX R W -8
+KPX R Y -28
+KPX R a 14
+KPX R aacute 14
+KPX R adieresis 14
+KPX R ae 40
+KPX R aring 14
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen -25
+KPX R o -3
+KPX R oacute -3
+KPX R odieresis -3
+KPX R oe 29
+KPX R u -7
+KPX R uacute -8
+KPX R udieresis -8
+KPX R y -18
+KPX S A -10
+KPX S AE -10
+KPX S Aacute -10
+KPX S Adieresis -10
+KPX S Aring -10
+KPX S T -41
+KPX S V -10
+KPX S W -12
+KPX S Y -31
+KPX S t -17
+KPX T A -28
+KPX T AE -28
+KPX T Aacute -28
+KPX T Acircumflex -28
+KPX T Adieresis -28
+KPX T Agrave -28
+KPX T Aring -28
+KPX T Atilde -28
+KPX T C -19
+KPX T G -19
+KPX T J -65
+KPX T O -14
+KPX T OE 6
+KPX T Oacute -14
+KPX T Ocircumflex -14
+KPX T Odieresis -14
+KPX T Ograve -14
+KPX T Oslash -14
+KPX T Otilde -14
+KPX T S -41
+KPX T V 10
+KPX T W 4
+KPX T Y -10
+KPX T a -34
+KPX T ae -12
+KPX T c -37
+KPX T colon -112
+KPX T comma -130
+KPX T e -26
+KPX T g -24
+KPX T guillemotleft -73
+KPX T guilsinglleft -73
+KPX T hyphen -91
+KPX T i -42
+KPX T j -49
+KPX T o -31
+KPX T oslash -31
+KPX T period -148
+KPX T r -28
+KPX T s -39
+KPX T semicolon -100
+KPX T u 4
+KPX T v 10
+KPX T w 10
+KPX T y 0
+KPX U A -19
+KPX U AE -18
+KPX U Aacute -19
+KPX U Acircumflex -19
+KPX U Adieresis -19
+KPX U Aring -19
+KPX U Atilde -19
+KPX U comma -95
+KPX U m 16
+KPX U n -8
+KPX U p 0
+KPX U period -114
+KPX U r -34
+KPX Uacute A -19
+KPX Uacute comma -95
+KPX Uacute m 16
+KPX Uacute n -8
+KPX Uacute p 0
+KPX Uacute period -114
+KPX Uacute r -34
+KPX Ucircumflex A -19
+KPX Udieresis A -19
+KPX Udieresis b 27
+KPX Udieresis comma -95
+KPX Udieresis m 16
+KPX Udieresis n -8
+KPX Udieresis p 0
+KPX Udieresis period -114
+KPX Udieresis r -34
+KPX Ugrave A -19
+KPX V A -4
+KPX V AE -12
+KPX V Aacute -4
+KPX V Acircumflex -4
+KPX V Adieresis -4
+KPX V Agrave -4
+KPX V Aring -4
+KPX V Atilde -4
+KPX V C -24
+KPX V G -24
+KPX V O -23
+KPX V Oacute -23
+KPX V Ocircumflex -23
+KPX V Odieresis -23
+KPX V Ograve -23
+KPX V Oslash -23
+KPX V Otilde -23
+KPX V S -27
+KPX V T 10
+KPX V a -54
+KPX V ae -27
+KPX V colon -132
+KPX V comma -146
+KPX V e -47
+KPX V g -46
+KPX V guillemotleft -75
+KPX V guilsinglleft -75
+KPX V hyphen -39
+KPX V i -59
+KPX V o -52
+KPX V oslash -48
+KPX V period -164
+KPX V r -45
+KPX V semicolon -120
+KPX V u -15
+KPX V y -17
+KPX W A -9
+KPX W AE -9
+KPX W Aacute -9
+KPX W Acircumflex -9
+KPX W Adieresis -9
+KPX W Agrave -9
+KPX W Aring -9
+KPX W Atilde -9
+KPX W C -4
+KPX W G -3
+KPX W O -2
+KPX W Oacute -2
+KPX W Ocircumflex -2
+KPX W Odieresis -2
+KPX W Ograve -2
+KPX W Oslash 2
+KPX W Otilde -2
+KPX W S -17
+KPX W T 4
+KPX W a -11
+KPX W ae 17
+KPX W colon -99
+KPX W comma -83
+KPX W e -3
+KPX W g -3
+KPX W guillemotleft -31
+KPX W guilsinglleft -31
+KPX W hyphen 1
+KPX W i -38
+KPX W o -8
+KPX W oslash -4
+KPX W period -101
+KPX W r -25
+KPX W semicolon -82
+KPX W u 1
+KPX W y -2
+KPX X C -28
+KPX X O -26
+KPX X Odieresis -26
+KPX X Q -26
+KPX X a 0
+KPX X e -12
+KPX X hyphen -50
+KPX X o -18
+KPX X u -28
+KPX X y -43
+KPX Y A -25
+KPX Y AE -28
+KPX Y Aacute -25
+KPX Y Acircumflex -25
+KPX Y Adieresis -25
+KPX Y Agrave -25
+KPX Y Aring -25
+KPX Y Atilde -25
+KPX Y C -45
+KPX Y G -45
+KPX Y O -44
+KPX Y Oacute -44
+KPX Y Ocircumflex -44
+KPX Y Odieresis -44
+KPX Y Ograve -44
+KPX Y Oslash -43
+KPX Y Otilde -44
+KPX Y S -48
+KPX Y T -10
+KPX Y a -53
+KPX Y ae -28
+KPX Y colon -150
+KPX Y comma -118
+KPX Y e -59
+KPX Y g -59
+KPX Y guillemotleft -94
+KPX Y guilsinglleft -94
+KPX Y hyphen -81
+KPX Y i -58
+KPX Y o -64
+KPX Y oslash -51
+KPX Y p -30
+KPX Y period -136
+KPX Y semicolon -133
+KPX Y u -43
+KPX Y v -33
+KPX Z v -41
+KPX Z y -52
+KPX a j -81
+KPX a quoteright -78
+KPX a v -21
+KPX a w -12
+KPX a y -31
+KPX aacute v -21
+KPX aacute w -12
+KPX aacute y -31
+KPX adieresis v -21
+KPX adieresis w -12
+KPX adieresis y -31
+KPX ae v 28
+KPX ae w 32
+KPX ae y 18
+KPX agrave v -21
+KPX agrave w -12
+KPX agrave y -31
+KPX aring v -21
+KPX aring w -12
+KPX aring y -31
+KPX b v 0
+KPX b w 4
+KPX b y -10
+KPX c h 11
+KPX c k 6
+KPX comma one -128
+KPX comma quotedblright -137
+KPX comma quoteright -166
+KPX e quoteright -65
+KPX e t -16
+KPX e v -9
+KPX e w -3
+KPX e x 6
+KPX e y -20
+KPX eacute v -9
+KPX eacute w -3
+KPX eacute y -20
+KPX ecircumflex v -9
+KPX ecircumflex w -3
+KPX ecircumflex y -20
+KPX eight four -58
+KPX eight one -72
+KPX eight seven -65
+KPX f a -32
+KPX f aacute -32
+KPX f adieresis -32
+KPX f ae -7
+KPX f aring -32
+KPX f e -43
+KPX f eacute -43
+KPX f f -43
+KPX f i -37
+KPX f j -60
+KPX f l -25
+KPX f o -47
+KPX f oacute -47
+KPX f odieresis -42
+KPX f oe -15
+KPX f oslash -29
+KPX f quoteright -73
+KPX f s -42
+KPX f t -6
+KPX five four -52
+KPX five one -73
+KPX five seven -73
+KPX four four -62
+KPX four one -66
+KPX four seven -93
+KPX g a -4
+KPX g adieresis -4
+KPX g ae 23
+KPX g aring -4
+KPX g e 1
+KPX g eacute 1
+KPX g l -34
+KPX g oacute -3
+KPX g odieresis -3
+KPX g r 0
+KPX guillemotright A -37
+KPX guillemotright AE -34
+KPX guillemotright Aacute -37
+KPX guillemotright Adieresis -37
+KPX guillemotright Aring -37
+KPX guillemotright T -71
+KPX guillemotright V -72
+KPX guillemotright W -29
+KPX guillemotright Y -92
+KPX guilsinglright A -37
+KPX guilsinglright AE -34
+KPX guilsinglright Aacute -37
+KPX guilsinglright Adieresis -37
+KPX guilsinglright Aring -37
+KPX guilsinglright T -71
+KPX guilsinglright V -72
+KPX guilsinglright W -29
+KPX guilsinglright Y -92
+KPX h quoteright -69
+KPX h y -23
+KPX hyphen A -18
+KPX hyphen AE -14
+KPX hyphen Aacute -18
+KPX hyphen Adieresis -18
+KPX hyphen Aring -18
+KPX hyphen T -90
+KPX hyphen V -38
+KPX hyphen W 1
+KPX hyphen Y -81
+KPX i T -58
+KPX i j -143
+KPX k a 1
+KPX k aacute 1
+KPX k adieresis 1
+KPX k ae 26
+KPX k aring 1
+KPX k comma -63
+KPX k e -11
+KPX k eacute -11
+KPX k g -14
+KPX k hyphen -50
+KPX k o -17
+KPX k oacute -17
+KPX k odieresis -17
+KPX k period -75
+KPX k s -9
+KPX k u -3
+KPX k udieresis -3
+KPX l v -77
+KPX l y -77
+KPX m p 32
+KPX m v 18
+KPX m w 22
+KPX m y 8
+KPX n T -40
+KPX n p 4
+KPX n quoteright -68
+KPX n v -12
+KPX n w -5
+KPX n y -22
+KPX nine four -53
+KPX nine one -66
+KPX nine seven -57
+KPX o T -31
+KPX o quoteright -62
+KPX o t -13
+KPX o v -6
+KPX o w -3
+KPX o x -10
+KPX o y -17
+KPX oacute v -6
+KPX oacute w -3
+KPX oacute y -17
+KPX ocircumflex t -13
+KPX odieresis t -13
+KPX odieresis v -6
+KPX odieresis w -3
+KPX odieresis x -10
+KPX odieresis y -17
+KPX ograve v -6
+KPX ograve w -3
+KPX ograve y -17
+KPX one comma -99
+KPX one eight -74
+KPX one five -55
+KPX one four -87
+KPX one nine -73
+KPX one one -62
+KPX one period -114
+KPX one seven -141
+KPX one six -98
+KPX one three -53
+KPX one two -47
+KPX one zero -86
+KPX p t -3
+KPX p y -6
+KPX period one -113
+KPX period quotedblright -131
+KPX period quoteright -161
+KPX q c 2
+KPX q u 41
+KPX quotedblbase A -6
+KPX quotedblbase AE -7
+KPX quotedblbase T -90
+KPX quotedblbase V -104
+KPX quotedblbase W -43
+KPX quotedblbase Y -78
+KPX quotedblleft A -62
+KPX quotedblleft AE -60
+KPX quotedblleft Aacute -62
+KPX quotedblleft Adieresis -62
+KPX quotedblleft Aring -62
+KPX quotedblleft T -24
+KPX quotedblleft V -22
+KPX quotedblleft W -13
+KPX quotedblleft Y -49
+KPX quotedblright A -76
+KPX quotedblright AE -75
+KPX quotedblright Aacute -76
+KPX quotedblright Adieresis -76
+KPX quotedblright Aring -76
+KPX quotedblright T -39
+KPX quotedblright V -30
+KPX quotedblright W -26
+KPX quotedblright Y -51
+KPX quoteleft A -87
+KPX quoteleft AE -85
+KPX quoteleft Aacute -87
+KPX quoteleft Adieresis -87
+KPX quoteleft Aring -87
+KPX quoteleft T -49
+KPX quoteleft V -46
+KPX quoteleft W -38
+KPX quoteleft Y -73
+KPX quoteright A -154
+KPX quoteright AE -153
+KPX quoteright Aacute -154
+KPX quoteright Adieresis -154
+KPX quoteright Aring -154
+KPX quoteright comma -227
+KPX quoteright d -140
+KPX quoteright o -143
+KPX quoteright period -244
+KPX quoteright r -149
+KPX quoteright s -150
+KPX quoteright t -117
+KPX quoteright v -110
+KPX quoteright w -105
+KPX quoteright y -116
+KPX r a -17
+KPX r aacute -17
+KPX r acircumflex -17
+KPX r adieresis -17
+KPX r ae 4
+KPX r agrave -17
+KPX r aring -17
+KPX r c -18
+KPX r ccedilla -15
+KPX r colon -95
+KPX r comma -108
+KPX r d -8
+KPX r e -7
+KPX r eacute -7
+KPX r ecircumflex -7
+KPX r egrave -7
+KPX r f -16
+KPX r g -5
+KPX r h -20
+KPX r hyphen -41
+KPX r i -25
+KPX r j -33
+KPX r k -30
+KPX r l -47
+KPX r m 36
+KPX r n 10
+KPX r o -12
+KPX r oacute -12
+KPX r ocircumflex -12
+KPX r odieresis -12
+KPX r oe 18
+KPX r ograve -12
+KPX r oslash -12
+KPX r p 30
+KPX r period -122
+KPX r q -4
+KPX r quoteright -41
+KPX r r -11
+KPX r s -21
+KPX r semicolon -83
+KPX r t 20
+KPX r u 20
+KPX r v 26
+KPX r w 26
+KPX r x 7
+KPX r y 16
+KPX r z -21
+KPX s quoteright -60
+KPX s t -11
+KPX seven colon -156
+KPX seven comma -157
+KPX seven eight -74
+KPX seven five -82
+KPX seven four -101
+KPX seven one -67
+KPX seven period -176
+KPX seven seven -62
+KPX seven six -93
+KPX seven three -72
+KPX seven two -64
+KPX six four -49
+KPX six one -54
+KPX six seven -46
+KPX t S -35
+KPX t a -16
+KPX t aacute -16
+KPX t adieresis -16
+KPX t ae 9
+KPX t aring -16
+KPX t colon -117
+KPX t e -24
+KPX t eacute -24
+KPX t h -5
+KPX t o -30
+KPX t oacute -30
+KPX t odieresis -30
+KPX t quoteright -102
+KPX t semicolon -103
+KPX three four -52
+KPX three one -71
+KPX three seven -64
+KPX two four -67
+KPX two one -66
+KPX two seven -68
+KPX u quoteright -56
+KPX v a -3
+KPX v aacute -3
+KPX v acircumflex -3
+KPX v adieresis -3
+KPX v ae 18
+KPX v agrave -3
+KPX v aring -3
+KPX v atilde -3
+KPX v c -11
+KPX v colon -81
+KPX v comma -136
+KPX v e 0
+KPX v eacute 0
+KPX v ecircumflex 0
+KPX v egrave 0
+KPX v g 1
+KPX v hyphen -23
+KPX v l -77
+KPX v o -5
+KPX v oacute -5
+KPX v odieresis -5
+KPX v ograve -5
+KPX v oslash -5
+KPX v period -156
+KPX v s -11
+KPX v semicolon -69
+KPX w a -3
+KPX w aacute -3
+KPX w acircumflex -3
+KPX w adieresis -3
+KPX w ae 23
+KPX w agrave -3
+KPX w aring -3
+KPX w atilde -3
+KPX w c -6
+KPX w colon -81
+KPX w comma -90
+KPX w e 2
+KPX w eacute 2
+KPX w ecircumflex 2
+KPX w egrave 2
+KPX w g 3
+KPX w hyphen 3
+KPX w l -48
+KPX w o -2
+KPX w oacute -2
+KPX w odieresis -2
+KPX w ograve -2
+KPX w oslash 2
+KPX w period -109
+KPX w s -11
+KPX w semicolon -69
+KPX x a 5
+KPX x c -14
+KPX x e -5
+KPX x eacute -5
+KPX x o -10
+KPX x q -8
+KPX y a -13
+KPX y aacute -13
+KPX y acircumflex -13
+KPX y adieresis -13
+KPX y ae 8
+KPX y agrave -13
+KPX y aring -13
+KPX y atilde -13
+KPX y c -21
+KPX y colon -91
+KPX y comma -134
+KPX y e -11
+KPX y eacute -11
+KPX y ecircumflex -11
+KPX y egrave -11
+KPX y g -9
+KPX y hyphen -19
+KPX y l -78
+KPX y o -15
+KPX y oacute -15
+KPX y odieresis -15
+KPX y ograve -15
+KPX y oslash -15
+KPX y period -155
+KPX y s -21
+KPX y semicolon -79
+KPX zero four -59
+KPX zero one -76
+KPX zero seven -68
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrb8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ucrb8a.pfb
new file mode 100644
index 00000000000..f1da6121bba
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrb8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrbo8a.afm b/Master/tlpkg/tlgs/lib/fonts/ucrbo8a.afm
new file mode 100644
index 00000000000..8e614b89bed
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrbo8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusMonL-BoldObli
+FullName Nimbus Mono L Bold Oblique
+FamilyName Nimbus Mono L
+Weight Bold
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -61 -278 840 871
+CapHeight 583
+XHeight 437
+Descender -205
+Ascender 624
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 386 0 386 0 ;
+C 33 ; WX 600 ; N exclam ; B 234 -15 501 638 ;
+C 34 ; WX 600 ; N quotedbl ; B 243 312 592 602 ;
+C 35 ; WX 600 ; N numbersign ; B 101 -92 623 675 ;
+C 36 ; WX 600 ; N dollar ; B 100 -123 610 684 ;
+C 37 ; WX 600 ; N percent ; B 131 -15 599 617 ;
+C 38 ; WX 600 ; N ampersand ; B 102 -14 557 550 ;
+C 39 ; WX 600 ; N quoteright ; B 222 331 483 623 ;
+C 40 ; WX 600 ; N parenleft ; B 304 -153 613 632 ;
+C 41 ; WX 600 ; N parenright ; B 94 -153 403 632 ;
+C 42 ; WX 600 ; N asterisk ; B 178 208 614 622 ;
+C 43 ; WX 600 ; N plus ; B 101 0 619 560 ;
+C 44 ; WX 600 ; N comma ; B 118 -158 379 134 ;
+C 45 ; WX 600 ; N hyphen ; B 101 229 619 329 ;
+C 46 ; WX 600 ; N period ; B 234 -15 387 117 ;
+C 47 ; WX 600 ; N slash ; B 69 -113 656 695 ;
+C 48 ; WX 600 ; N zero ; B 130 -15 602 638 ;
+C 49 ; WX 600 ; N one ; B 93 0 529 638 ;
+C 50 ; WX 600 ; N two ; B 54 0 602 638 ;
+C 51 ; WX 600 ; N three ; B 80 -15 609 638 ;
+C 52 ; WX 600 ; N four ; B 104 0 579 622 ;
+C 53 ; WX 600 ; N five ; B 83 -15 610 622 ;
+C 54 ; WX 600 ; N six ; B 154 -15 663 638 ;
+C 55 ; WX 600 ; N seven ; B 184 -1 640 622 ;
+C 56 ; WX 600 ; N eight ; B 114 -15 608 638 ;
+C 57 ; WX 600 ; N nine ; B 115 -15 624 638 ;
+C 58 ; WX 600 ; N colon ; B 234 -15 455 437 ;
+C 59 ; WX 600 ; N semicolon ; B 118 -158 431 437 ;
+C 60 ; WX 600 ; N less ; B 102 54 642 501 ;
+C 61 ; WX 600 ; N equal ; B 81 138 638 422 ;
+C 62 ; WX 600 ; N greater ; B 76 53 616 500 ;
+C 63 ; WX 600 ; N question ; B 197 -15 608 598 ;
+C 64 ; WX 600 ; N at ; B 98 -152 582 620 ;
+C 65 ; WX 600 ; N A ; B -11 0 633 583 ;
+C 66 ; WX 600 ; N B ; B 22 0 620 583 ;
+C 67 ; WX 600 ; N C ; B 80 -14 663 597 ;
+C 68 ; WX 600 ; N D ; B 23 0 622 583 ;
+C 69 ; WX 600 ; N E ; B 23 0 652 583 ;
+C 70 ; WX 600 ; N F ; B 23 0 674 583 ;
+C 71 ; WX 600 ; N G ; B 79 -14 667 597 ;
+C 72 ; WX 600 ; N H ; B 32 0 675 583 ;
+C 73 ; WX 600 ; N I ; B 93 0 632 583 ;
+C 74 ; WX 600 ; N J ; B 64 -14 727 583 ;
+C 75 ; WX 600 ; N K ; B 22 0 687 583 ;
+C 76 ; WX 600 ; N L ; B 42 0 616 583 ;
+C 77 ; WX 600 ; N M ; B -10 0 728 583 ;
+C 78 ; WX 600 ; N N ; B 21 0 706 583 ;
+C 79 ; WX 600 ; N O ; B 75 -14 649 597 ;
+C 80 ; WX 600 ; N P ; B 23 0 617 583 ;
+C 81 ; WX 600 ; N Q ; B 75 -145 649 597 ;
+C 82 ; WX 600 ; N R ; B 23 0 631 583 ;
+C 83 ; WX 600 ; N S ; B 72 -14 634 597 ;
+C 84 ; WX 600 ; N T ; B 121 0 682 583 ;
+C 85 ; WX 600 ; N U ; B 110 -14 705 583 ;
+C 86 ; WX 600 ; N V ; B 91 0 735 583 ;
+C 87 ; WX 600 ; N W ; B 98 0 725 583 ;
+C 88 ; WX 600 ; N X ; B 19 0 692 583 ;
+C 89 ; WX 600 ; N Y ; B 128 0 694 583 ;
+C 90 ; WX 600 ; N Z ; B 73 0 628 583 ;
+C 91 ; WX 600 ; N bracketleft ; B 219 -148 598 627 ;
+C 92 ; WX 600 ; N backslash ; B 219 -113 504 695 ;
+C 93 ; WX 600 ; N bracketright ; B 104 -148 483 627 ;
+C 94 ; WX 600 ; N asciicircum ; B 161 325 598 652 ;
+C 95 ; WX 600 ; N underscore ; B -61 -125 564 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 377 348 534 602 ;
+C 97 ; WX 600 ; N a ; B 65 -16 583 450 ;
+C 98 ; WX 600 ; N b ; B 2 -14 623 624 ;
+C 99 ; WX 600 ; N c ; B 93 -16 626 450 ;
+C 100 ; WX 600 ; N d ; B 74 -14 664 624 ;
+C 101 ; WX 600 ; N e ; B 74 -16 600 450 ;
+C 102 ; WX 600 ; N f ; B 84 0 691 623 ;
+C 103 ; WX 600 ; N g ; B 73 -205 675 451 ;
+C 104 ; WX 600 ; N h ; B 33 0 593 624 ;
+C 105 ; WX 600 ; N i ; B 72 0 550 623 ;
+C 106 ; WX 600 ; N j ; B 83 -205 581 623 ;
+C 107 ; WX 600 ; N k ; B 42 0 606 624 ;
+C 108 ; WX 600 ; N l ; B 72 0 550 624 ;
+C 109 ; WX 600 ; N m ; B -9 0 635 450 ;
+C 110 ; WX 600 ; N n ; B 33 0 583 450 ;
+C 111 ; WX 600 ; N o ; B 84 -16 609 450 ;
+C 112 ; WX 600 ; N p ; B -42 -205 623 450 ;
+C 113 ; WX 600 ; N q ; B 75 -205 696 450 ;
+C 114 ; WX 600 ; N r ; B 64 0 650 449 ;
+C 115 ; WX 600 ; N s ; B 83 -16 592 450 ;
+C 116 ; WX 600 ; N t ; B 94 -16 547 591 ;
+C 117 ; WX 600 ; N u ; B 94 -13 603 437 ;
+C 118 ; WX 600 ; N v ; B 81 0 683 437 ;
+C 119 ; WX 600 ; N w ; B 82 0 684 437 ;
+C 120 ; WX 600 ; N x ; B 30 0 641 437 ;
+C 121 ; WX 600 ; N y ; B -13 -205 662 437 ;
+C 122 ; WX 600 ; N z ; B 85 0 599 437 ;
+C 123 ; WX 600 ; N braceleft ; B 217 -153 556 623 ;
+C 124 ; WX 600 ; N bar ; B 227 -153 472 622 ;
+C 125 ; WX 600 ; N braceright ; B 144 -153 483 623 ;
+C 126 ; WX 600 ; N asciitilde ; B 114 179 606 385 ;
+C 161 ; WX 600 ; N exclamdown ; B 186 -227 453 426 ;
+C 162 ; WX 600 ; N cent ; B 144 -44 593 661 ;
+C 163 ; WX 600 ; N sterling ; B 64 0 571 598 ;
+C 164 ; WX 600 ; N fraction ; B 52 102 676 500 ;
+C 165 ; WX 600 ; N yen ; B 133 0 693 580 ;
+C 166 ; WX 600 ; N florin ; B 43 -123 672 638 ;
+C 167 ; WX 600 ; N section ; B 45 -170 643 583 ;
+C 168 ; WX 600 ; N currency ; B 96 64 626 519 ;
+C 169 ; WX 600 ; N quotesingle ; B 343 312 492 602 ;
+C 170 ; WX 600 ; N quotedblleft ; B 226 348 583 602 ;
+C 171 ; WX 600 ; N guillemotleft ; B 80 20 654 415 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 80 20 425 415 ;
+C 173 ; WX 600 ; N guilsinglright ; B 273 20 617 415 ;
+C 174 ; WX 600 ; N fi ; B -4 0 633 624 ;
+C 175 ; WX 600 ; N fl ; B -8 0 645 623 ;
+C 177 ; WX 600 ; N endash ; B 101 229 619 329 ;
+C 178 ; WX 600 ; N dagger ; B 175 -92 589 622 ;
+C 179 ; WX 600 ; N daggerdbl ; B 123 -92 589 622 ;
+C 180 ; WX 600 ; N periodcentered ; B 283 214 436 346 ;
+C 182 ; WX 600 ; N paragraph ; B 108 -174 672 583 ;
+C 183 ; WX 600 ; N bullet ; B 211 154 517 453 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 118 -158 379 134 ;
+C 185 ; WX 600 ; N quotedblbase ; B 66 -120 519 134 ;
+C 186 ; WX 600 ; N quotedblright ; B 166 348 619 602 ;
+C 187 ; WX 600 ; N guillemotright ; B 43 20 617 415 ;
+C 188 ; WX 600 ; N ellipsis ; B 34 -15 587 117 ;
+C 189 ; WX 600 ; N perthousand ; B 104 0 627 618 ;
+C 191 ; WX 600 ; N questiondown ; B 70 -227 481 386 ;
+C 193 ; WX 600 ; N grave ; B 264 496 464 696 ;
+C 194 ; WX 600 ; N acute ; B 362 496 616 696 ;
+C 195 ; WX 600 ; N circumflex ; B 237 497 590 696 ;
+C 196 ; WX 600 ; N tilde ; B 233 523 619 656 ;
+C 197 ; WX 600 ; N macron ; B 249 546 600 626 ;
+C 198 ; WX 600 ; N breve ; B 261 503 614 687 ;
+C 199 ; WX 600 ; N dotaccent ; B 365 534 488 654 ;
+C 200 ; WX 600 ; N dieresis ; B 261 534 592 654 ;
+C 202 ; WX 600 ; N ring ; B 303 486 554 727 ;
+C 203 ; WX 600 ; N cedilla ; B 143 -229 381 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 237 496 616 694 ;
+C 206 ; WX 600 ; N ogonek ; B 222 -208 433 0 ;
+C 207 ; WX 600 ; N caron ; B 264 497 617 696 ;
+C 208 ; WX 600 ; N emdash ; B 30 229 690 329 ;
+C 225 ; WX 600 ; N AE ; B -10 0 717 583 ;
+C 227 ; WX 600 ; N ordfeminine ; B 170 182 559 595 ;
+C 232 ; WX 600 ; N Lslash ; B 43 0 616 583 ;
+C 233 ; WX 600 ; N Oslash ; B 4 -70 717 638 ;
+C 234 ; WX 600 ; N OE ; B 34 0 717 583 ;
+C 235 ; WX 600 ; N ordmasculine ; B 168 182 566 595 ;
+C 241 ; WX 600 ; N ae ; B 14 -16 665 450 ;
+C 245 ; WX 600 ; N dotlessi ; B 72 0 550 437 ;
+C 248 ; WX 600 ; N lslash ; B 72 0 557 624 ;
+C 249 ; WX 600 ; N oslash ; B 17 -70 669 494 ;
+C 250 ; WX 600 ; N oe ; B 28 -16 666 450 ;
+C 251 ; WX 600 ; N germandbls ; B 22 -16 569 623 ;
+C -1 ; WX 600 ; N Udieresis ; B 110 -14 705 800 ;
+C -1 ; WX 600 ; N Uacute ; B 110 -14 705 839 ;
+C -1 ; WX 600 ; N Scedilla ; B 72 -229 634 597 ;
+C -1 ; WX 600 ; N Tcaron ; B 121 0 682 839 ;
+C -1 ; WX 600 ; N Scaron ; B 72 -14 657 839 ;
+C -1 ; WX 600 ; N Rcaron ; B 23 0 631 839 ;
+C -1 ; WX 600 ; N Racute ; B 23 0 631 839 ;
+C -1 ; WX 600 ; N Sacute ; B 72 -14 634 839 ;
+C -1 ; WX 600 ; N Otilde ; B 75 -14 656 799 ;
+C -1 ; WX 600 ; N ucircumflex ; B 94 -13 603 696 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 75 -14 680 837 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 110 -14 705 837 ;
+C -1 ; WX 600 ; N Yacute ; B 128 0 694 839 ;
+C -1 ; WX 600 ; N Eth ; B 23 0 622 583 ;
+C -1 ; WX 600 ; N Dcroat ; B 23 0 622 583 ;
+C -1 ; WX 600 ; N Zacute ; B 73 0 628 839 ;
+C -1 ; WX 600 ; N Uring ; B 110 -14 705 871 ;
+C -1 ; WX 600 ; N gbreve ; B 73 -205 675 687 ;
+C -1 ; WX 600 ; N eogonek ; B 74 -208 600 450 ;
+C -1 ; WX 600 ; N edotaccent ; B 74 -16 600 654 ;
+C -1 ; WX 600 ; N ecaron ; B 74 -16 617 696 ;
+C -1 ; WX 600 ; N Ugrave ; B 110 -14 705 839 ;
+C -1 ; WX 600 ; N Thorn ; B 23 0 588 583 ;
+C -1 ; WX 600 ; N eacute ; B 74 -16 600 696 ;
+C -1 ; WX 600 ; N edieresis ; B 74 -16 600 654 ;
+C -1 ; WX 740 ; N dcaron ; B 74 -14 840 639 ;
+C -1 ; WX 600 ; N ccedilla ; B 92 -229 626 450 ;
+C -1 ; WX 600 ; N ccaron ; B 93 -16 627 696 ;
+C -1 ; WX 600 ; N cacute ; B 93 -16 626 696 ;
+C -1 ; WX 600 ; N aogonek ; B 65 -208 583 450 ;
+C -1 ; WX 600 ; N aring ; B 65 -16 583 727 ;
+C -1 ; WX 600 ; N atilde ; B 65 -16 612 656 ;
+C -1 ; WX 600 ; N abreve ; B 65 -16 614 687 ;
+C -1 ; WX 600 ; N egrave ; B 74 -16 600 696 ;
+C -1 ; WX 600 ; N agrave ; B 65 -16 583 696 ;
+C -1 ; WX 600 ; N aacute ; B 66 -16 584 696 ;
+C -1 ; WX 600 ; N adieresis ; B 65 -16 583 654 ;
+C -1 ; WX 600 ; N Uogonek ; B 110 -208 705 583 ;
+C -1 ; WX 600 ; N ugrave ; B 94 -13 603 696 ;
+C -1 ; WX 600 ; N uacute ; B 94 -13 603 696 ;
+C -1 ; WX 600 ; N udieresis ; B 94 -13 603 654 ;
+C -1 ; WX 600 ; N tcaron ; B 94 -16 700 639 ;
+C -1 ; WX 600 ; N scommaaccent ; B 83 -278 592 450 ;
+C -1 ; WX 600 ; N Zcaron ; B 73 0 644 839 ;
+C -1 ; WX 600 ; N ecircumflex ; B 74 -16 600 696 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 110 -14 705 839 ;
+C -1 ; WX 600 ; N acircumflex ; B 65 -16 583 696 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 73 0 628 793 ;
+C -1 ; WX 600 ; N scaron ; B 83 -16 627 696 ;
+C -1 ; WX 600 ; N Amacron ; B -11 0 633 776 ;
+C -1 ; WX 600 ; N sacute ; B 83 -16 616 696 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 121 -278 682 583 ;
+C -1 ; WX 600 ; N Ydieresis ; B 128 0 694 800 ;
+C -1 ; WX 600 ; N thorn ; B -42 -205 623 624 ;
+C -1 ; WX 600 ; N Emacron ; B 23 0 652 776 ;
+C -1 ; WX 600 ; N Ograve ; B 75 -14 649 839 ;
+C -1 ; WX 600 ; N Oacute ; B 75 -14 649 839 ;
+C -1 ; WX 600 ; N Odieresis ; B 75 -14 649 800 ;
+C -1 ; WX 600 ; N Ntilde ; B 21 0 706 799 ;
+C -1 ; WX 600 ; N Ncaron ; B 21 0 706 839 ;
+C -1 ; WX 600 ; N Nacute ; B 21 0 706 839 ;
+C -1 ; WX 600 ; N Lcaron ; B 42 0 680 598 ;
+C -1 ; WX 600 ; N Lacute ; B 42 0 616 839 ;
+C -1 ; WX 600 ; N Idotaccent ; B 93 0 632 793 ;
+C -1 ; WX 600 ; N racute ; B 64 0 650 696 ;
+C -1 ; WX 600 ; N Icircumflex ; B 93 0 632 839 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 84 -16 616 694 ;
+C -1 ; WX 600 ; N otilde ; B 84 -16 626 656 ;
+C -1 ; WX 600 ; N Euro ; B 54 -14 639 597 ;
+C -1 ; WX 600 ; N ocircumflex ; B 84 -16 609 696 ;
+C -1 ; WX 600 ; N onesuperior ; B 224 247 494 638 ;
+C -1 ; WX 600 ; N twosuperior ; B 202 247 538 637 ;
+C -1 ; WX 600 ; N threesuperior ; B 218 238 543 637 ;
+C -1 ; WX 600 ; N Igrave ; B 93 0 632 839 ;
+C -1 ; WX 600 ; N Iacute ; B 93 0 632 839 ;
+C -1 ; WX 600 ; N Imacron ; B 93 0 632 776 ;
+C -1 ; WX 600 ; N Iogonek ; B 93 -208 632 583 ;
+C -1 ; WX 600 ; N Idieresis ; B 93 0 632 800 ;
+C -1 ; WX 600 ; N Gbreve ; B 79 -14 667 831 ;
+C -1 ; WX 600 ; N Umacron ; B 110 -14 705 776 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 22 -278 687 583 ;
+C -1 ; WX 600 ; N ograve ; B 84 -16 609 696 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 72 -278 634 597 ;
+C -1 ; WX 600 ; N Eogonek ; B 23 -208 652 583 ;
+C -1 ; WX 600 ; N oacute ; B 84 -16 609 696 ;
+C -1 ; WX 600 ; N Edotaccent ; B 23 0 652 793 ;
+C -1 ; WX 600 ; N iogonek ; B 72 -208 550 623 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 73 -205 675 722 ;
+C -1 ; WX 600 ; N odieresis ; B 84 -16 609 654 ;
+C -1 ; WX 600 ; N ntilde ; B 33 0 613 656 ;
+C -1 ; WX 600 ; N ncaron ; B 33 0 617 696 ;
+C -1 ; WX 600 ; N Ecaron ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N scedilla ; B 83 -229 592 450 ;
+C -1 ; WX 600 ; N rcaron ; B 64 0 650 696 ;
+C -1 ; WX 600 ; N Egrave ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N Eacute ; B 23 0 652 839 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 79 -278 667 597 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 23 -278 631 583 ;
+C -1 ; WX 600 ; N Edieresis ; B 23 0 652 800 ;
+C -1 ; WX 600 ; N nacute ; B 33 0 616 696 ;
+C -1 ; WX 600 ; N uogonek ; B 94 -208 603 437 ;
+C -1 ; WX 600 ; N umacron ; B 94 -13 603 626 ;
+C -1 ; WX 600 ; N Dcaron ; B 23 0 622 839 ;
+C -1 ; WX 600 ; N lcaron ; B 72 0 700 639 ;
+C -1 ; WX 600 ; N Ccaron ; B 80 -14 663 839 ;
+C -1 ; WX 600 ; N Cacute ; B 80 -14 663 839 ;
+C -1 ; WX 600 ; N Ccedilla ; B 80 -229 663 597 ;
+C -1 ; WX 600 ; N degree ; B 210 243 568 596 ;
+C -1 ; WX 600 ; N Aogonek ; B -11 -208 633 583 ;
+C -1 ; WX 600 ; N minus ; B 101 230 619 330 ;
+C -1 ; WX 600 ; N multiply ; B 126 80 592 480 ;
+C -1 ; WX 600 ; N divide ; B 101 28 619 532 ;
+C -1 ; WX 600 ; N Aring ; B -11 0 633 871 ;
+C -1 ; WX 600 ; N trademark ; B 60 220 732 583 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 64 -278 650 449 ;
+C -1 ; WX 600 ; N lacute ; B 72 0 600 839 ;
+C -1 ; WX 600 ; N omacron ; B 84 -16 609 626 ;
+C -1 ; WX 600 ; N Atilde ; B -11 0 633 799 ;
+C -1 ; WX 600 ; N icircumflex ; B 72 0 573 696 ;
+C -1 ; WX 600 ; N igrave ; B 72 0 550 696 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 33 -278 583 450 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 72 -278 550 624 ;
+C -1 ; WX 600 ; N plusminus ; B 52 0 640 624 ;
+C -1 ; WX 600 ; N onehalf ; B 25 0 685 638 ;
+C -1 ; WX 600 ; N onequarter ; B 25 0 673 638 ;
+C -1 ; WX 600 ; N threequarters ; B 18 0 673 637 ;
+C -1 ; WX 600 ; N iacute ; B 71 0 574 696 ;
+C -1 ; WX 600 ; N Abreve ; B -11 0 633 831 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 42 -278 606 624 ;
+C -1 ; WX 600 ; N Omacron ; B 75 -14 649 776 ;
+C -1 ; WX 600 ; N imacron ; B 72 0 600 626 ;
+C -1 ; WX 600 ; N emacron ; B 74 -16 600 626 ;
+C -1 ; WX 600 ; N amacron ; B 65 -16 600 626 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 94 -278 547 591 ;
+C -1 ; WX 600 ; N ydieresis ; B -13 -205 662 654 ;
+C -1 ; WX 600 ; N zdotaccent ; B 85 0 599 654 ;
+C -1 ; WX 600 ; N zcaron ; B 85 0 619 696 ;
+C -1 ; WX 600 ; N zacute ; B 85 0 616 696 ;
+C -1 ; WX 600 ; N yacute ; B -13 -205 662 696 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 94 -13 616 694 ;
+C -1 ; WX 600 ; N eth ; B 83 -16 617 646 ;
+C -1 ; WX 600 ; N uring ; B 94 -13 603 727 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 75 -14 649 839 ;
+C -1 ; WX 600 ; N commaaccent ; B 147 -278 342 -59 ;
+C -1 ; WX 600 ; N copyright ; B 48 -15 675 598 ;
+C -1 ; WX 600 ; N registered ; B 48 -15 675 598 ;
+C -1 ; WX 600 ; N Acircumflex ; B -11 0 633 839 ;
+C -1 ; WX 600 ; N idieresis ; B 72 0 575 656 ;
+C -1 ; WX 600 ; N lozenge ; B 133 -19 590 593 ;
+C -1 ; WX 600 ; N Delta ; B 15 0 585 583 ;
+C -1 ; WX 600 ; N notequal ; B 81 22 638 525 ;
+C -1 ; WX 600 ; N radical ; B 74 -60 782 697 ;
+C -1 ; WX 600 ; N Agrave ; B -11 0 633 839 ;
+C -1 ; WX 600 ; N Aacute ; B -11 0 633 839 ;
+C -1 ; WX 600 ; N lessequal ; B 50 0 666 591 ;
+C -1 ; WX 600 ; N greaterequal ; B 52 0 660 591 ;
+C -1 ; WX 600 ; N logicalnot ; B 125 115 560 445 ;
+C -1 ; WX 600 ; N summation ; B 32 -97 668 671 ;
+C -1 ; WX 600 ; N partialdiff ; B 138 -16 579 590 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B 21 -278 706 583 ;
+C -1 ; WX 600 ; N dcroat ; B 74 -14 712 624 ;
+C -1 ; WX 600 ; N brokenbar ; B 227 -153 472 622 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 42 -278 616 583 ;
+C -1 ; WX 600 ; N Adieresis ; B -11 0 633 800 ;
+C -1 ; WX 600 ; N mu ; B 72 -153 603 440 ;
+C -1 ; WX 600 ; N .notdef ; B 386 0 386 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -24
+KPX A Ccedilla -30
+KPX A G -20
+KPX A O -26
+KPX A Odieresis -26
+KPX A Q -25
+KPX A T -35
+KPX A U -33
+KPX A Uacute -33
+KPX A Ucircumflex -33
+KPX A Udieresis -33
+KPX A Ugrave -33
+KPX A V -63
+KPX A W -21
+KPX A Y -34
+KPX A a 8
+KPX A b 39
+KPX A c -12
+KPX A ccedilla -15
+KPX A comma -52
+KPX A d -4
+KPX A e -5
+KPX A g -5
+KPX A guillemotleft -44
+KPX A guilsinglleft -44
+KPX A hyphen -23
+KPX A o -11
+KPX A period -67
+KPX A q -10
+KPX A quotedblright -89
+KPX A quoteright -116
+KPX A t -25
+KPX A u -18
+KPX A v -41
+KPX A w -15
+KPX A y -41
+KPX Aacute C -24
+KPX Aacute G -20
+KPX Aacute O -26
+KPX Aacute Q -25
+KPX Aacute T -35
+KPX Aacute U -33
+KPX Aacute V -63
+KPX Aacute W -21
+KPX Aacute Y -34
+KPX Aacute a 8
+KPX Aacute b 39
+KPX Aacute c -12
+KPX Aacute comma -52
+KPX Aacute d -4
+KPX Aacute e -5
+KPX Aacute g -5
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -44
+KPX Aacute hyphen -23
+KPX Aacute o -11
+KPX Aacute period -67
+KPX Aacute q -10
+KPX Aacute quoteright -116
+KPX Aacute t -25
+KPX Aacute u -18
+KPX Aacute v -41
+KPX Aacute w -15
+KPX Aacute y -41
+KPX Acircumflex C -24
+KPX Acircumflex G -20
+KPX Acircumflex O -26
+KPX Acircumflex Q -25
+KPX Acircumflex T -35
+KPX Acircumflex U -33
+KPX Acircumflex V -63
+KPX Acircumflex W -21
+KPX Acircumflex Y -34
+KPX Acircumflex comma -52
+KPX Acircumflex period -67
+KPX Adieresis C -24
+KPX Adieresis G -20
+KPX Adieresis O -26
+KPX Adieresis Q -25
+KPX Adieresis T -35
+KPX Adieresis U -33
+KPX Adieresis V -63
+KPX Adieresis W -21
+KPX Adieresis Y -34
+KPX Adieresis a 8
+KPX Adieresis b 39
+KPX Adieresis c -12
+KPX Adieresis comma -52
+KPX Adieresis d -4
+KPX Adieresis g -5
+KPX Adieresis guillemotleft -44
+KPX Adieresis guilsinglleft -44
+KPX Adieresis hyphen -23
+KPX Adieresis o -11
+KPX Adieresis period -67
+KPX Adieresis q -10
+KPX Adieresis quotedblright -89
+KPX Adieresis quoteright -116
+KPX Adieresis t -25
+KPX Adieresis u -18
+KPX Adieresis v -41
+KPX Adieresis w -15
+KPX Adieresis y -41
+KPX Agrave C -24
+KPX Agrave G -20
+KPX Agrave O -26
+KPX Agrave Q -25
+KPX Agrave T -35
+KPX Agrave U -33
+KPX Agrave V -63
+KPX Agrave W -21
+KPX Agrave Y -34
+KPX Agrave comma -52
+KPX Agrave period -67
+KPX Aring C -24
+KPX Aring G -20
+KPX Aring O -26
+KPX Aring Q -25
+KPX Aring T -35
+KPX Aring U -33
+KPX Aring V -63
+KPX Aring W -21
+KPX Aring Y -34
+KPX Aring a 8
+KPX Aring b 39
+KPX Aring c -12
+KPX Aring comma -52
+KPX Aring d -4
+KPX Aring e -5
+KPX Aring g -5
+KPX Aring guillemotleft -44
+KPX Aring guilsinglleft -44
+KPX Aring hyphen -23
+KPX Aring o -11
+KPX Aring period -67
+KPX Aring q -10
+KPX Aring quotedblright -89
+KPX Aring quoteright -116
+KPX Aring t -25
+KPX Aring u -18
+KPX Aring v -41
+KPX Aring w -15
+KPX Aring y -41
+KPX Atilde C -24
+KPX Atilde G -20
+KPX Atilde O -26
+KPX Atilde Q -25
+KPX Atilde T -35
+KPX Atilde U -33
+KPX Atilde V -63
+KPX Atilde W -21
+KPX Atilde Y -34
+KPX Atilde comma -52
+KPX Atilde period -67
+KPX B A -2
+KPX B AE -3
+KPX B Aacute -2
+KPX B Acircumflex -2
+KPX B Adieresis -2
+KPX B Aring -2
+KPX B Atilde -2
+KPX B O -14
+KPX B OE 7
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -12
+KPX B V -29
+KPX B W -10
+KPX B Y -50
+KPX C A 2
+KPX C AE 2
+KPX C Aacute 2
+KPX C Adieresis 2
+KPX C Aring 2
+KPX C H -18
+KPX C K -13
+KPX C O -19
+KPX C Oacute -19
+KPX C Odieresis -19
+KPX Ccedilla A -5
+KPX D A -32
+KPX D Aacute -32
+KPX D Acircumflex -32
+KPX D Adieresis -32
+KPX D Agrave -32
+KPX D Aring -32
+KPX D Atilde -32
+KPX D J -38
+KPX D T -36
+KPX D V -40
+KPX D W -16
+KPX D X -40
+KPX D Y -61
+KPX F A -47
+KPX F Aacute -47
+KPX F Acircumflex -47
+KPX F Adieresis -47
+KPX F Agrave -47
+KPX F Aring -47
+KPX F Atilde -47
+KPX F J -83
+KPX F O -32
+KPX F Odieresis -32
+KPX F a -44
+KPX F aacute -45
+KPX F adieresis -44
+KPX F ae -22
+KPX F aring -44
+KPX F comma -172
+KPX F e -51
+KPX F eacute -51
+KPX F hyphen -61
+KPX F i -50
+KPX F j -58
+KPX F o -55
+KPX F oacute -55
+KPX F odieresis -55
+KPX F oe -20
+KPX F oslash -55
+KPX F period -191
+KPX F r -37
+KPX F u -6
+KPX G A 0
+KPX G AE 0
+KPX G Aacute 0
+KPX G Acircumflex 0
+KPX G Adieresis 0
+KPX G Agrave 0
+KPX G Aring 0
+KPX G Atilde 0
+KPX G T -30
+KPX G V 1
+KPX G W 5
+KPX G Y -20
+KPX J A -15
+KPX J AE -24
+KPX J Adieresis -15
+KPX J Aring -15
+KPX K C -32
+KPX K G -30
+KPX K O -31
+KPX K OE -9
+KPX K Oacute -31
+KPX K Odieresis -31
+KPX K S -17
+KPX K T -20
+KPX K a -1
+KPX K adieresis -1
+KPX K ae 23
+KPX K aring -1
+KPX K e -14
+KPX K hyphen -50
+KPX K o -20
+KPX K oacute -20
+KPX K odieresis -20
+KPX K u -30
+KPX K udieresis -30
+KPX K y -56
+KPX L A 9
+KPX L AE 9
+KPX L Aacute 9
+KPX L Adieresis 9
+KPX L Aring 9
+KPX L C -19
+KPX L Ccedilla -19
+KPX L G -19
+KPX L O -16
+KPX L Oacute -16
+KPX L Ocircumflex -16
+KPX L Odieresis -16
+KPX L Ograve -16
+KPX L Otilde -16
+KPX L S -32
+KPX L T -60
+KPX L U -31
+KPX L Udieresis -31
+KPX L V -61
+KPX L W -23
+KPX L Y -59
+KPX L hyphen 5
+KPX L quotedblright -82
+KPX L quoteright -107
+KPX L u -13
+KPX L udieresis -14
+KPX L y -36
+KPX N A -10
+KPX N AE -11
+KPX N Aacute -10
+KPX N Adieresis -10
+KPX N Aring -10
+KPX N C -13
+KPX N Ccedilla -10
+KPX N G -12
+KPX N O -10
+KPX N Oacute -10
+KPX N Odieresis -10
+KPX N a -14
+KPX N aacute -15
+KPX N adieresis -14
+KPX N ae 14
+KPX N aring -14
+KPX N comma -79
+KPX N e -7
+KPX N eacute -7
+KPX N o -12
+KPX N oacute -12
+KPX N odieresis -12
+KPX N oslash -6
+KPX N period -98
+KPX N u -12
+KPX N udieresis -12
+KPX O A -21
+KPX O AE -20
+KPX O Aacute -21
+KPX O Adieresis -21
+KPX O Aring -21
+KPX O T -23
+KPX O V -32
+KPX O W -4
+KPX O X -28
+KPX O Y -51
+KPX Oacute A -21
+KPX Oacute T -23
+KPX Oacute V -32
+KPX Oacute W -4
+KPX Oacute Y -51
+KPX Ocircumflex T -23
+KPX Ocircumflex V -32
+KPX Ocircumflex Y -51
+KPX Odieresis A -21
+KPX Odieresis T -23
+KPX Odieresis V -32
+KPX Odieresis W -4
+KPX Odieresis X -28
+KPX Odieresis Y -51
+KPX Ograve T -23
+KPX Ograve V -32
+KPX Ograve Y -51
+KPX Oslash A -13
+KPX Otilde T -23
+KPX Otilde V -32
+KPX Otilde Y -51
+KPX P A -65
+KPX P AE -63
+KPX P Aacute -65
+KPX P Adieresis -65
+KPX P Aring -65
+KPX P J -80
+KPX P a -54
+KPX P aacute -54
+KPX P adieresis -54
+KPX P ae -31
+KPX P aring -54
+KPX P comma -164
+KPX P e -43
+KPX P eacute -43
+KPX P hyphen -39
+KPX P o -47
+KPX P oacute -47
+KPX P odieresis -47
+KPX P oe -18
+KPX P oslash -46
+KPX P period -183
+KPX R C -19
+KPX R Ccedilla -18
+KPX R G -18
+KPX R O -18
+KPX R OE 3
+KPX R Oacute -18
+KPX R Odieresis -18
+KPX R T -36
+KPX R U -20
+KPX R Udieresis -21
+KPX R V -34
+KPX R W -10
+KPX R Y -35
+KPX R a 7
+KPX R aacute 6
+KPX R adieresis 7
+KPX R ae 32
+KPX R aring 7
+KPX R e -4
+KPX R eacute -4
+KPX R hyphen -30
+KPX R o -9
+KPX R oacute -9
+KPX R odieresis -9
+KPX R oe 24
+KPX R u -9
+KPX R uacute -9
+KPX R udieresis -9
+KPX R y -22
+KPX S A -16
+KPX S AE -16
+KPX S Aacute -16
+KPX S Adieresis -16
+KPX S Aring -16
+KPX S T -47
+KPX S V -16
+KPX S W -15
+KPX S Y -37
+KPX S t -20
+KPX T A -35
+KPX T AE -35
+KPX T Aacute -35
+KPX T Acircumflex -35
+KPX T Adieresis -35
+KPX T Agrave -35
+KPX T Aring -35
+KPX T Atilde -35
+KPX T C -27
+KPX T G -27
+KPX T J -72
+KPX T O -22
+KPX T OE 0
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -23
+KPX T Otilde -22
+KPX T S -49
+KPX T V 4
+KPX T W -2
+KPX T Y -17
+KPX T a -39
+KPX T ae -17
+KPX T c -42
+KPX T colon -119
+KPX T comma -136
+KPX T e -31
+KPX T g -28
+KPX T guillemotleft -81
+KPX T guilsinglleft -81
+KPX T hyphen -96
+KPX T i -46
+KPX T j -53
+KPX T o -36
+KPX T oslash -36
+KPX T period -154
+KPX T r -33
+KPX T s -43
+KPX T semicolon -106
+KPX T u -1
+KPX T v 6
+KPX T w 5
+KPX T y -4
+KPX U A -23
+KPX U AE -22
+KPX U Aacute -23
+KPX U Acircumflex -23
+KPX U Adieresis -23
+KPX U Aring -23
+KPX U Atilde -23
+KPX U comma -98
+KPX U m 14
+KPX U n -10
+KPX U p -3
+KPX U period -118
+KPX U r -36
+KPX Uacute A -23
+KPX Uacute comma -98
+KPX Uacute m 14
+KPX Uacute n -10
+KPX Uacute p -3
+KPX Uacute period -118
+KPX Uacute r -36
+KPX Ucircumflex A -23
+KPX Udieresis A -23
+KPX Udieresis b 20
+KPX Udieresis comma -98
+KPX Udieresis m 14
+KPX Udieresis n -10
+KPX Udieresis p -3
+KPX Udieresis period -118
+KPX Udieresis r -36
+KPX Ugrave A -23
+KPX V A -12
+KPX V AE -21
+KPX V Aacute -12
+KPX V Acircumflex -12
+KPX V Adieresis -12
+KPX V Agrave -12
+KPX V Aring -12
+KPX V Atilde -12
+KPX V C -34
+KPX V G -34
+KPX V O -32
+KPX V Oacute -32
+KPX V Ocircumflex -32
+KPX V Odieresis -32
+KPX V Ograve -32
+KPX V Oslash -32
+KPX V Otilde -32
+KPX V S -35
+KPX V T 3
+KPX V a -59
+KPX V ae -30
+KPX V colon -139
+KPX V comma -150
+KPX V e -51
+KPX V g -50
+KPX V guillemotleft -83
+KPX V guilsinglleft -83
+KPX V hyphen -45
+KPX V i -64
+KPX V o -56
+KPX V oslash -51
+KPX V period -169
+KPX V r -51
+KPX V semicolon -127
+KPX V u -21
+KPX V y -22
+KPX W A -15
+KPX W AE -14
+KPX W Aacute -15
+KPX W Acircumflex -15
+KPX W Adieresis -15
+KPX W Agrave -15
+KPX W Aring -15
+KPX W Atilde -15
+KPX W C -9
+KPX W G -8
+KPX W O -7
+KPX W Oacute -7
+KPX W Ocircumflex -7
+KPX W Odieresis -7
+KPX W Ograve -7
+KPX W Oslash -3
+KPX W Otilde -7
+KPX W S -21
+KPX W T -1
+KPX W a -14
+KPX W ae 15
+KPX W colon -103
+KPX W comma -86
+KPX W e -6
+KPX W g -5
+KPX W guillemotleft -38
+KPX W guilsinglleft -38
+KPX W hyphen -3
+KPX W i -40
+KPX W o -11
+KPX W oslash -6
+KPX W period -105
+KPX W r -28
+KPX W semicolon -86
+KPX W u -3
+KPX W y -6
+KPX X C -33
+KPX X O -31
+KPX X Odieresis -31
+KPX X Q -30
+KPX X a -7
+KPX X e -20
+KPX X hyphen -55
+KPX X o -26
+KPX X u -36
+KPX X y -49
+KPX Y A -32
+KPX Y AE -35
+KPX Y Aacute -32
+KPX Y Acircumflex -32
+KPX Y Adieresis -32
+KPX Y Agrave -32
+KPX Y Aring -32
+KPX Y Atilde -32
+KPX Y C -54
+KPX Y G -54
+KPX Y O -52
+KPX Y Oacute -52
+KPX Y Ocircumflex -52
+KPX Y Odieresis -52
+KPX Y Ograve -52
+KPX Y Oslash -50
+KPX Y Otilde -52
+KPX Y S -55
+KPX Y T -17
+KPX Y a -61
+KPX Y ae -36
+KPX Y colon -157
+KPX Y comma -123
+KPX Y e -63
+KPX Y g -62
+KPX Y guillemotleft -99
+KPX Y guilsinglleft -99
+KPX Y hyphen -87
+KPX Y i -63
+KPX Y o -68
+KPX Y oslash -56
+KPX Y p -34
+KPX Y period -141
+KPX Y semicolon -139
+KPX Y u -48
+KPX Y v -38
+KPX Z v -47
+KPX Z y -55
+KPX a j -85
+KPX a quoteright -79
+KPX a v -25
+KPX a w -13
+KPX a y -36
+KPX aacute v -25
+KPX aacute w -13
+KPX aacute y -36
+KPX adieresis v -25
+KPX adieresis w -13
+KPX adieresis y -36
+KPX ae v 24
+KPX ae w 31
+KPX ae y 13
+KPX agrave v -25
+KPX agrave w -13
+KPX agrave y -36
+KPX aring v -25
+KPX aring w -13
+KPX aring y -36
+KPX b v -4
+KPX b w 3
+KPX b y -15
+KPX c h 8
+KPX c k 3
+KPX comma one -133
+KPX comma quotedblright -142
+KPX comma quoteright -170
+KPX e quoteright -64
+KPX e t -16
+KPX e v -14
+KPX e w -4
+KPX e x 3
+KPX e y -25
+KPX eacute v -14
+KPX eacute w -4
+KPX eacute y -25
+KPX ecircumflex v -14
+KPX ecircumflex w -4
+KPX ecircumflex y -25
+KPX eight four -63
+KPX eight one -80
+KPX eight seven -75
+KPX f a -38
+KPX f aacute -38
+KPX f adieresis -38
+KPX f ae -13
+KPX f aring -38
+KPX f e -46
+KPX f eacute -46
+KPX f f -46
+KPX f i -40
+KPX f j -63
+KPX f l -30
+KPX f o -51
+KPX f oacute -51
+KPX f odieresis -48
+KPX f oe -17
+KPX f oslash -34
+KPX f quoteright -78
+KPX f s -46
+KPX f t -10
+KPX five four -58
+KPX five one -80
+KPX five seven -80
+KPX four four -68
+KPX four one -72
+KPX four seven -100
+KPX g a -7
+KPX g adieresis -7
+KPX g ae 21
+KPX g aring -7
+KPX g e -1
+KPX g eacute -1
+KPX g l -38
+KPX g oacute -6
+KPX g odieresis -6
+KPX g r -5
+KPX guillemotright A -42
+KPX guillemotright AE -39
+KPX guillemotright Aacute -42
+KPX guillemotright Adieresis -42
+KPX guillemotright Aring -42
+KPX guillemotright T -81
+KPX guillemotright V -80
+KPX guillemotright W -35
+KPX guillemotright Y -96
+KPX guilsinglright A -42
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -42
+KPX guilsinglright Adieresis -42
+KPX guilsinglright Aring -42
+KPX guilsinglright T -81
+KPX guilsinglright V -80
+KPX guilsinglright W -35
+KPX guilsinglright Y -96
+KPX h quoteright -71
+KPX h y -29
+KPX hyphen A -21
+KPX hyphen AE -17
+KPX hyphen Aacute -21
+KPX hyphen Adieresis -21
+KPX hyphen Aring -21
+KPX hyphen T -93
+KPX hyphen V -41
+KPX hyphen W -1
+KPX hyphen Y -84
+KPX i T -64
+KPX i j -145
+KPX k a -5
+KPX k aacute -5
+KPX k adieresis -5
+KPX k ae 20
+KPX k aring -5
+KPX k comma -67
+KPX k e -17
+KPX k eacute -17
+KPX k g -16
+KPX k hyphen -53
+KPX k o -22
+KPX k oacute -22
+KPX k odieresis -22
+KPX k period -80
+KPX k s -13
+KPX k u -7
+KPX k udieresis -7
+KPX l v -77
+KPX l y -78
+KPX m p 31
+KPX m v 13
+KPX m w 22
+KPX m y 2
+KPX n T -47
+KPX n p 2
+KPX n quoteright -69
+KPX n v -17
+KPX n w -6
+KPX n y -28
+KPX nine four -59
+KPX nine one -76
+KPX nine seven -68
+KPX o T -39
+KPX o quoteright -61
+KPX o t -16
+KPX o v -10
+KPX o w -3
+KPX o x -10
+KPX o y -21
+KPX oacute v -10
+KPX oacute w -3
+KPX oacute y -21
+KPX ocircumflex t -16
+KPX odieresis t -16
+KPX odieresis v -10
+KPX odieresis w -3
+KPX odieresis x -10
+KPX odieresis y -21
+KPX ograve v -10
+KPX ograve w -3
+KPX ograve y -21
+KPX one comma -104
+KPX one eight -83
+KPX one five -63
+KPX one four -95
+KPX one nine -80
+KPX one one -68
+KPX one period -119
+KPX one seven -146
+KPX one six -107
+KPX one three -62
+KPX one two -53
+KPX one zero -95
+KPX p t -7
+KPX p y -12
+KPX period one -118
+KPX period quotedblright -137
+KPX period quoteright -165
+KPX q c 0
+KPX q u 37
+KPX quotedblbase A -10
+KPX quotedblbase AE -11
+KPX quotedblbase T -92
+KPX quotedblbase V -108
+KPX quotedblbase W -46
+KPX quotedblbase Y -80
+KPX quotedblleft A -66
+KPX quotedblleft AE -64
+KPX quotedblleft Aacute -66
+KPX quotedblleft Adieresis -66
+KPX quotedblleft Aring -66
+KPX quotedblleft T -28
+KPX quotedblleft V -20
+KPX quotedblleft W -15
+KPX quotedblleft Y -50
+KPX quotedblright A -81
+KPX quotedblright AE -79
+KPX quotedblright Aacute -81
+KPX quotedblright Adieresis -81
+KPX quotedblright Aring -81
+KPX quotedblright T -45
+KPX quotedblright V -35
+KPX quotedblright W -30
+KPX quotedblright Y -57
+KPX quoteleft A -90
+KPX quoteleft AE -88
+KPX quoteleft Aacute -90
+KPX quoteleft Adieresis -90
+KPX quoteleft Aring -90
+KPX quoteleft T -52
+KPX quoteleft V -45
+KPX quoteleft W -40
+KPX quoteleft Y -74
+KPX quoteright A -160
+KPX quoteright AE -158
+KPX quoteright Aacute -160
+KPX quoteright Adieresis -160
+KPX quoteright Aring -160
+KPX quoteright comma -234
+KPX quoteright d -146
+KPX quoteright o -148
+KPX quoteright period -251
+KPX quoteright r -155
+KPX quoteright s -154
+KPX quoteright t -121
+KPX quoteright v -114
+KPX quoteright w -109
+KPX quoteright y -120
+KPX r a -22
+KPX r aacute -22
+KPX r acircumflex -22
+KPX r adieresis -22
+KPX r ae 0
+KPX r agrave -22
+KPX r aring -22
+KPX r c -23
+KPX r ccedilla -18
+KPX r colon -100
+KPX r comma -112
+KPX r d -13
+KPX r e -11
+KPX r eacute -11
+KPX r ecircumflex -11
+KPX r egrave -11
+KPX r f -20
+KPX r g -9
+KPX r h -23
+KPX r hyphen -48
+KPX r i -30
+KPX r j -38
+KPX r k -33
+KPX r l -50
+KPX r m 31
+KPX r n 5
+KPX r o -16
+KPX r oacute -16
+KPX r ocircumflex -16
+KPX r odieresis -16
+KPX r oe 15
+KPX r ograve -16
+KPX r oslash -16
+KPX r p 25
+KPX r period -126
+KPX r q -8
+KPX r quoteright -45
+KPX r r -17
+KPX r s -25
+KPX r semicolon -88
+KPX r t 15
+KPX r u 15
+KPX r v 22
+KPX r w 21
+KPX r x 2
+KPX r y 10
+KPX r z -24
+KPX s quoteright -62
+KPX s t -14
+KPX seven colon -162
+KPX seven comma -160
+KPX seven eight -79
+KPX seven five -87
+KPX seven four -105
+KPX seven one -72
+KPX seven period -179
+KPX seven seven -69
+KPX seven six -98
+KPX seven three -78
+KPX seven two -70
+KPX six four -54
+KPX six one -60
+KPX six seven -55
+KPX t S -40
+KPX t a -21
+KPX t aacute -21
+KPX t adieresis -21
+KPX t ae 4
+KPX t aring -21
+KPX t colon -121
+KPX t e -30
+KPX t eacute -30
+KPX t h -8
+KPX t o -36
+KPX t oacute -36
+KPX t odieresis -36
+KPX t quoteright -102
+KPX t semicolon -107
+KPX three four -58
+KPX three one -79
+KPX three seven -74
+KPX two four -75
+KPX two one -73
+KPX two seven -78
+KPX u quoteright -58
+KPX v a -7
+KPX v aacute -7
+KPX v acircumflex -7
+KPX v adieresis -7
+KPX v ae 15
+KPX v agrave -7
+KPX v aring -7
+KPX v atilde -7
+KPX v c -17
+KPX v colon -86
+KPX v comma -139
+KPX v e -6
+KPX v eacute -6
+KPX v ecircumflex -6
+KPX v egrave -6
+KPX v g -2
+KPX v hyphen -28
+KPX v l -79
+KPX v o -11
+KPX v oacute -11
+KPX v odieresis -11
+KPX v ograve -11
+KPX v oslash -10
+KPX v period -159
+KPX v s -15
+KPX v semicolon -74
+KPX w a -6
+KPX w aacute -7
+KPX w acircumflex -6
+KPX w adieresis -6
+KPX w ae 22
+KPX w agrave -6
+KPX w aring -6
+KPX w atilde -6
+KPX w c -8
+KPX w colon -86
+KPX w comma -93
+KPX w e 0
+KPX w eacute 0
+KPX w ecircumflex 0
+KPX w egrave 0
+KPX w g 2
+KPX w hyphen -1
+KPX w l -51
+KPX w o -4
+KPX w oacute -4
+KPX w odieresis -4
+KPX w ograve -4
+KPX w oslash 0
+KPX w period -112
+KPX w s -13
+KPX w semicolon -74
+KPX x a -1
+KPX x c -16
+KPX x e -7
+KPX x eacute -7
+KPX x o -12
+KPX x q -9
+KPX y a -17
+KPX y aacute -18
+KPX y acircumflex -17
+KPX y adieresis -17
+KPX y ae 4
+KPX y agrave -17
+KPX y aring -17
+KPX y atilde -17
+KPX y c -25
+KPX y colon -96
+KPX y comma -137
+KPX y e -14
+KPX y eacute -14
+KPX y ecircumflex -14
+KPX y egrave -14
+KPX y g -11
+KPX y hyphen -23
+KPX y l -79
+KPX y o -20
+KPX y oacute -20
+KPX y odieresis -20
+KPX y ograve -20
+KPX y oslash -19
+KPX y period -158
+KPX y s -24
+KPX y semicolon -84
+KPX zero four -65
+KPX zero one -81
+KPX zero seven -79
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrbo8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ucrbo8a.pfb
new file mode 100644
index 00000000000..8b7c24ff3a4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrbo8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrr8a.afm b/Master/tlpkg/tlgs/lib/fonts/ucrr8a.afm
new file mode 100644
index 00000000000..2ebe8d247b3
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrr8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusMonL-Regu
+FullName Nimbus Mono L Regular
+FamilyName Nimbus Mono L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -12 -237 650 811
+CapHeight 563
+XHeight 417
+Descender -186
+Ascender 604
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 295 0 295 0 ;
+C 33 ; WX 600 ; N exclam ; B 240 -15 360 618 ;
+C 34 ; WX 600 ; N quotedbl ; B 146 315 454 604 ;
+C 35 ; WX 600 ; N numbersign ; B 92 -62 508 647 ;
+C 36 ; WX 600 ; N dollar ; B 113 -92 487 655 ;
+C 37 ; WX 600 ; N percent ; B 87 -12 513 611 ;
+C 38 ; WX 600 ; N ampersand ; B 105 -16 478 519 ;
+C 39 ; WX 600 ; N quoteright ; B 135 314 340 604 ;
+C 40 ; WX 600 ; N parenleft ; B 294 -124 458 604 ;
+C 41 ; WX 600 ; N parenright ; B 147 -124 311 604 ;
+C 42 ; WX 600 ; N asterisk ; B 113 250 487 604 ;
+C 43 ; WX 600 ; N plus ; B 72 32 528 530 ;
+C 44 ; WX 600 ; N comma ; B 135 -145 340 145 ;
+C 45 ; WX 600 ; N hyphen ; B 72 258 528 299 ;
+C 46 ; WX 600 ; N period ; B 226 -15 374 116 ;
+C 47 ; WX 600 ; N slash ; B 113 -81 487 668 ;
+C 48 ; WX 600 ; N zero ; B 113 -15 487 618 ;
+C 49 ; WX 600 ; N one ; B 113 0 487 612 ;
+C 50 ; WX 600 ; N two ; B 84 0 478 618 ;
+C 51 ; WX 600 ; N three ; B 96 -15 499 618 ;
+C 52 ; WX 600 ; N four ; B 105 0 478 604 ;
+C 53 ; WX 600 ; N five ; B 96 -15 499 604 ;
+C 54 ; WX 600 ; N six ; B 136 -15 510 618 ;
+C 55 ; WX 600 ; N seven ; B 105 -1 478 604 ;
+C 56 ; WX 600 ; N eight ; B 113 -15 487 618 ;
+C 57 ; WX 600 ; N nine ; B 136 -15 510 618 ;
+C 58 ; WX 600 ; N colon ; B 226 -15 374 417 ;
+C 59 ; WX 600 ; N semicolon ; B 139 -145 350 417 ;
+C 60 ; WX 600 ; N less ; B 72 44 522 518 ;
+C 61 ; WX 600 ; N equal ; B 51 190 549 375 ;
+C 62 ; WX 600 ; N greater ; B 78 44 528 518 ;
+C 63 ; WX 600 ; N question ; B 134 -15 487 577 ;
+C 64 ; WX 600 ; N at ; B 105 -62 478 624 ;
+C 65 ; WX 600 ; N A ; B 9 0 591 563 ;
+C 66 ; WX 600 ; N B ; B 43 0 541 563 ;
+C 67 ; WX 600 ; N C ; B 63 -16 534 576 ;
+C 68 ; WX 600 ; N D ; B 43 0 520 563 ;
+C 69 ; WX 600 ; N E ; B 43 0 520 563 ;
+C 70 ; WX 600 ; N F ; B 43 0 520 563 ;
+C 71 ; WX 600 ; N G ; B 63 -16 562 576 ;
+C 72 ; WX 600 ; N H ; B 53 0 551 563 ;
+C 73 ; WX 600 ; N I ; B 113 0 487 563 ;
+C 74 ; WX 600 ; N J ; B 84 -16 583 563 ;
+C 75 ; WX 600 ; N K ; B 43 0 572 563 ;
+C 76 ; WX 600 ; N L ; B 63 0 541 563 ;
+C 77 ; WX 600 ; N M ; B 11 0 593 563 ;
+C 78 ; WX 600 ; N N ; B 22 0 562 563 ;
+C 79 ; WX 600 ; N O ; B 51 -16 549 576 ;
+C 80 ; WX 600 ; N P ; B 43 0 499 563 ;
+C 81 ; WX 600 ; N Q ; B 51 -115 549 576 ;
+C 82 ; WX 600 ; N R ; B 43 0 589 563 ;
+C 83 ; WX 600 ; N S ; B 92 -16 508 576 ;
+C 84 ; WX 600 ; N T ; B 72 0 528 563 ;
+C 85 ; WX 600 ; N U ; B 40 -16 560 563 ;
+C 86 ; WX 600 ; N V ; B 9 0 591 563 ;
+C 87 ; WX 600 ; N W ; B 20 0 580 563 ;
+C 88 ; WX 600 ; N X ; B 40 0 560 563 ;
+C 89 ; WX 600 ; N Y ; B 51 0 549 563 ;
+C 90 ; WX 600 ; N Z ; B 103 0 497 563 ;
+C 91 ; WX 600 ; N bracketleft ; B 280 -124 445 604 ;
+C 92 ; WX 600 ; N backslash ; B 113 -81 487 668 ;
+C 93 ; WX 600 ; N bracketright ; B 155 -124 320 604 ;
+C 94 ; WX 600 ; N asciicircum ; B 113 354 487 615 ;
+C 95 ; WX 600 ; N underscore ; B -12 -125 612 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 260 343 465 604 ;
+C 97 ; WX 600 ; N a ; B 72 -16 541 431 ;
+C 98 ; WX 600 ; N b ; B 22 -16 541 604 ;
+C 99 ; WX 600 ; N c ; B 84 -16 535 431 ;
+C 100 ; WX 600 ; N d ; B 63 -16 583 604 ;
+C 101 ; WX 600 ; N e ; B 63 -16 520 431 ;
+C 102 ; WX 600 ; N f ; B 105 0 541 604 ;
+C 103 ; WX 600 ; N g ; B 63 -186 562 431 ;
+C 104 ; WX 600 ; N h ; B 43 0 551 604 ;
+C 105 ; WX 600 ; N i ; B 92 0 508 624 ;
+C 106 ; WX 600 ; N j ; B 147 -186 458 624 ;
+C 107 ; WX 600 ; N k ; B 63 0 541 604 ;
+C 108 ; WX 600 ; N l ; B 92 0 508 604 ;
+C 109 ; WX 600 ; N m ; B 11 0 593 431 ;
+C 110 ; WX 600 ; N n ; B 53 0 541 431 ;
+C 111 ; WX 600 ; N o ; B 72 -16 528 431 ;
+C 112 ; WX 600 ; N p ; B 22 -186 541 431 ;
+C 113 ; WX 600 ; N q ; B 63 -186 583 431 ;
+C 114 ; WX 600 ; N r ; B 84 0 541 427 ;
+C 115 ; WX 600 ; N s ; B 103 -16 497 431 ;
+C 116 ; WX 600 ; N t ; B 43 -16 499 563 ;
+C 117 ; WX 600 ; N u ; B 43 -16 541 417 ;
+C 118 ; WX 600 ; N v ; B 30 0 570 417 ;
+C 119 ; WX 600 ; N w ; B 30 0 570 417 ;
+C 120 ; WX 600 ; N x ; B 51 0 549 417 ;
+C 121 ; WX 600 ; N y ; B 51 -186 549 417 ;
+C 122 ; WX 600 ; N z ; B 115 0 489 417 ;
+C 123 ; WX 600 ; N braceleft ; B 197 -124 403 604 ;
+C 124 ; WX 600 ; N bar ; B 280 -124 320 604 ;
+C 125 ; WX 600 ; N braceright ; B 197 -124 403 604 ;
+C 126 ; WX 600 ; N asciitilde ; B 92 212 508 348 ;
+C 161 ; WX 600 ; N exclamdown ; B 240 -216 360 417 ;
+C 162 ; WX 600 ; N cent ; B 113 -13 469 630 ;
+C 163 ; WX 600 ; N sterling ; B 63 0 520 578 ;
+C 164 ; WX 600 ; N fraction ; B 50 138 549 470 ;
+C 165 ; WX 600 ; N yen ; B 51 0 549 563 ;
+C 166 ; WX 600 ; N florin ; B 87 -93 518 618 ;
+C 167 ; WX 600 ; N section ; B 66 -62 534 603 ;
+C 168 ; WX 600 ; N currency ; B 103 95 497 489 ;
+C 169 ; WX 600 ; N quotesingle ; B 236 315 364 604 ;
+C 170 ; WX 600 ; N quotedblleft ; B 93 343 507 604 ;
+C 171 ; WX 600 ; N guillemotleft ; B 63 0 541 417 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 63 0 312 417 ;
+C 173 ; WX 600 ; N guilsinglright ; B 293 0 541 417 ;
+C 174 ; WX 600 ; N fi ; B 10 0 585 624 ;
+C 175 ; WX 600 ; N fl ; B 10 0 587 604 ;
+C 177 ; WX 600 ; N endash ; B 72 261 528 302 ;
+C 178 ; WX 600 ; N dagger ; B 124 -63 476 604 ;
+C 179 ; WX 600 ; N daggerdbl ; B 124 -62 476 604 ;
+C 180 ; WX 600 ; N periodcentered ; B 226 217 374 348 ;
+C 182 ; WX 600 ; N paragraph ; B 79 -62 525 604 ;
+C 183 ; WX 600 ; N bullet ; B 202 141 398 337 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 135 -145 340 145 ;
+C 185 ; WX 600 ; N quotedblbase ; B 93 -116 507 145 ;
+C 186 ; WX 600 ; N quotedblright ; B 93 343 507 604 ;
+C 187 ; WX 600 ; N guillemotright ; B 63 0 541 417 ;
+C 188 ; WX 600 ; N ellipsis ; B 51 -15 549 84 ;
+C 189 ; WX 600 ; N perthousand ; B 34 -9 564 614 ;
+C 191 ; WX 600 ; N questiondown ; B 113 -175 466 417 ;
+C 193 ; WX 600 ; N grave ; B 155 490 320 639 ;
+C 194 ; WX 600 ; N acute ; B 280 490 445 639 ;
+C 195 ; WX 600 ; N circumflex ; B 155 490 445 639 ;
+C 196 ; WX 600 ; N tilde ; B 145 516 455 605 ;
+C 197 ; WX 600 ; N macron ; B 155 536 445 576 ;
+C 198 ; WX 600 ; N breve ; B 155 490 445 620 ;
+C 199 ; WX 600 ; N dotaccent ; B 250 511 350 611 ;
+C 200 ; WX 600 ; N dieresis ; B 140 511 461 611 ;
+C 202 ; WX 600 ; N ring ; B 207 480 393 661 ;
+C 203 ; WX 600 ; N cedilla ; B 210 -173 377 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 155 490 445 633 ;
+C 206 ; WX 600 ; N ogonek ; B 280 -155 433 0 ;
+C 207 ; WX 600 ; N caron ; B 155 490 445 639 ;
+C 208 ; WX 600 ; N emdash ; B 1 261 599 302 ;
+C 225 ; WX 600 ; N AE ; B 10 0 590 563 ;
+C 227 ; WX 600 ; N ordfeminine ; B 155 279 447 574 ;
+C 232 ; WX 600 ; N Lslash ; B 43 0 541 563 ;
+C 233 ; WX 600 ; N Oslash ; B 40 -43 560 605 ;
+C 234 ; WX 600 ; N OE ; B 10 0 590 563 ;
+C 235 ; WX 600 ; N ordmasculine ; B 154 284 448 577 ;
+C 241 ; WX 600 ; N ae ; B 12 -16 578 431 ;
+C 245 ; WX 600 ; N dotlessi ; B 92 0 508 417 ;
+C 248 ; WX 600 ; N lslash ; B 92 0 508 604 ;
+C 249 ; WX 600 ; N oslash ; B 53 -43 543 458 ;
+C 250 ; WX 600 ; N oe ; B 12 -16 578 431 ;
+C 251 ; WX 600 ; N germandbls ; B 43 -16 499 604 ;
+C -1 ; WX 600 ; N Udieresis ; B 40 -16 560 761 ;
+C -1 ; WX 600 ; N Uacute ; B 40 -16 560 789 ;
+C -1 ; WX 600 ; N Scedilla ; B 92 -173 508 576 ;
+C -1 ; WX 600 ; N Tcaron ; B 72 0 528 789 ;
+C -1 ; WX 600 ; N Scaron ; B 92 -16 508 789 ;
+C -1 ; WX 600 ; N Rcaron ; B 43 0 589 789 ;
+C -1 ; WX 600 ; N Racute ; B 43 0 589 789 ;
+C -1 ; WX 600 ; N Sacute ; B 92 -16 508 789 ;
+C -1 ; WX 600 ; N Otilde ; B 51 -16 549 755 ;
+C -1 ; WX 600 ; N ucircumflex ; B 43 -16 541 639 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 51 -16 549 783 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 40 -16 560 783 ;
+C -1 ; WX 600 ; N Yacute ; B 51 0 549 789 ;
+C -1 ; WX 600 ; N Eth ; B 0 0 520 563 ;
+C -1 ; WX 600 ; N Dcroat ; B 0 0 520 563 ;
+C -1 ; WX 600 ; N Zacute ; B 103 0 497 789 ;
+C -1 ; WX 600 ; N Uring ; B 40 -16 560 811 ;
+C -1 ; WX 600 ; N gbreve ; B 63 -186 562 620 ;
+C -1 ; WX 600 ; N eogonek ; B 63 -155 520 431 ;
+C -1 ; WX 600 ; N edotaccent ; B 63 -16 520 611 ;
+C -1 ; WX 600 ; N ecaron ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N Ugrave ; B 40 -16 560 789 ;
+C -1 ; WX 600 ; N Thorn ; B 43 0 499 563 ;
+C -1 ; WX 600 ; N eacute ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N edieresis ; B 63 -16 520 611 ;
+C -1 ; WX 600 ; N dcaron ; B 63 -16 650 616 ;
+C -1 ; WX 600 ; N ccedilla ; B 84 -173 535 431 ;
+C -1 ; WX 600 ; N ccaron ; B 84 -16 535 639 ;
+C -1 ; WX 600 ; N cacute ; B 84 -16 535 639 ;
+C -1 ; WX 600 ; N aogonek ; B 72 -155 556 431 ;
+C -1 ; WX 600 ; N aring ; B 72 -16 541 661 ;
+C -1 ; WX 600 ; N atilde ; B 72 -16 541 605 ;
+C -1 ; WX 600 ; N abreve ; B 72 -16 541 620 ;
+C -1 ; WX 600 ; N egrave ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N agrave ; B 72 -16 541 639 ;
+C -1 ; WX 600 ; N aacute ; B 72 -16 541 639 ;
+C -1 ; WX 600 ; N adieresis ; B 72 -16 541 611 ;
+C -1 ; WX 600 ; N Uogonek ; B 40 -155 560 563 ;
+C -1 ; WX 600 ; N ugrave ; B 43 -16 541 639 ;
+C -1 ; WX 600 ; N uacute ; B 43 -16 541 639 ;
+C -1 ; WX 600 ; N udieresis ; B 43 -16 541 611 ;
+C -1 ; WX 600 ; N tcaron ; B 43 -16 508 616 ;
+C -1 ; WX 600 ; N scommaaccent ; B 103 -237 497 431 ;
+C -1 ; WX 600 ; N Zcaron ; B 103 0 497 789 ;
+C -1 ; WX 600 ; N ecircumflex ; B 63 -16 520 639 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 40 -16 560 789 ;
+C -1 ; WX 600 ; N acircumflex ; B 72 -16 541 639 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 103 0 497 761 ;
+C -1 ; WX 600 ; N scaron ; B 103 -16 497 639 ;
+C -1 ; WX 600 ; N Amacron ; B 9 0 591 726 ;
+C -1 ; WX 600 ; N sacute ; B 103 -16 497 639 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 72 -237 528 563 ;
+C -1 ; WX 600 ; N Ydieresis ; B 51 0 549 761 ;
+C -1 ; WX 600 ; N thorn ; B 22 -186 541 590 ;
+C -1 ; WX 600 ; N Emacron ; B 43 0 520 726 ;
+C -1 ; WX 600 ; N Ograve ; B 51 -16 549 789 ;
+C -1 ; WX 600 ; N Oacute ; B 51 -16 549 789 ;
+C -1 ; WX 600 ; N Odieresis ; B 51 -16 549 761 ;
+C -1 ; WX 600 ; N Ntilde ; B 22 0 562 755 ;
+C -1 ; WX 600 ; N Ncaron ; B 22 0 562 789 ;
+C -1 ; WX 600 ; N Nacute ; B 22 0 562 789 ;
+C -1 ; WX 600 ; N Lcaron ; B 63 0 541 566 ;
+C -1 ; WX 600 ; N Lacute ; B 63 0 541 789 ;
+C -1 ; WX 600 ; N Idotaccent ; B 113 0 487 761 ;
+C -1 ; WX 600 ; N racute ; B 84 0 541 639 ;
+C -1 ; WX 600 ; N Icircumflex ; B 113 0 487 789 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 72 -16 528 633 ;
+C -1 ; WX 600 ; N otilde ; B 72 -16 528 605 ;
+C -1 ; WX 600 ; N Euro ; B 11 -16 534 576 ;
+C -1 ; WX 600 ; N ocircumflex ; B 72 -16 528 639 ;
+C -1 ; WX 600 ; N onesuperior ; B 191 259 410 612 ;
+C -1 ; WX 600 ; N twosuperior ; B 175 259 405 612 ;
+C -1 ; WX 600 ; N threesuperior ; B 181 251 416 612 ;
+C -1 ; WX 600 ; N Igrave ; B 113 0 487 789 ;
+C -1 ; WX 600 ; N Iacute ; B 113 0 487 789 ;
+C -1 ; WX 600 ; N Imacron ; B 113 0 487 726 ;
+C -1 ; WX 600 ; N Iogonek ; B 113 -155 500 563 ;
+C -1 ; WX 600 ; N Idieresis ; B 113 0 487 761 ;
+C -1 ; WX 600 ; N Gbreve ; B 63 -16 562 770 ;
+C -1 ; WX 600 ; N Umacron ; B 40 -16 560 726 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 43 -237 572 563 ;
+C -1 ; WX 600 ; N ograve ; B 72 -16 528 639 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 92 -237 508 576 ;
+C -1 ; WX 600 ; N Eogonek ; B 43 -155 549 563 ;
+C -1 ; WX 600 ; N oacute ; B 72 -16 528 639 ;
+C -1 ; WX 600 ; N Edotaccent ; B 43 0 520 761 ;
+C -1 ; WX 600 ; N iogonek ; B 92 -155 520 624 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 63 -186 562 666 ;
+C -1 ; WX 600 ; N odieresis ; B 72 -16 528 611 ;
+C -1 ; WX 600 ; N ntilde ; B 53 0 541 605 ;
+C -1 ; WX 600 ; N ncaron ; B 53 0 541 639 ;
+C -1 ; WX 600 ; N Ecaron ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N scedilla ; B 103 -173 497 431 ;
+C -1 ; WX 600 ; N rcaron ; B 84 0 541 639 ;
+C -1 ; WX 600 ; N Egrave ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N Eacute ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 63 -237 562 576 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 43 -237 589 563 ;
+C -1 ; WX 600 ; N Edieresis ; B 43 0 520 761 ;
+C -1 ; WX 600 ; N nacute ; B 53 0 541 639 ;
+C -1 ; WX 600 ; N uogonek ; B 43 -155 556 417 ;
+C -1 ; WX 600 ; N umacron ; B 43 -16 541 576 ;
+C -1 ; WX 600 ; N Dcaron ; B 43 0 520 789 ;
+C -1 ; WX 600 ; N lcaron ; B 92 0 508 616 ;
+C -1 ; WX 600 ; N Ccaron ; B 63 -16 534 789 ;
+C -1 ; WX 600 ; N Cacute ; B 63 -16 534 789 ;
+C -1 ; WX 600 ; N Ccedilla ; B 63 -173 534 576 ;
+C -1 ; WX 600 ; N degree ; B 155 346 445 636 ;
+C -1 ; WX 600 ; N Aogonek ; B 9 -155 600 563 ;
+C -1 ; WX 600 ; N minus ; B 72 261 528 302 ;
+C -1 ; WX 600 ; N multiply ; B 118 100 482 464 ;
+C -1 ; WX 600 ; N divide ; B 72 25 528 540 ;
+C -1 ; WX 600 ; N Aring ; B 9 0 591 811 ;
+C -1 ; WX 600 ; N trademark ; B 4 243 598 563 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 84 -237 541 427 ;
+C -1 ; WX 600 ; N lacute ; B 92 0 508 789 ;
+C -1 ; WX 600 ; N omacron ; B 72 -16 528 576 ;
+C -1 ; WX 600 ; N Atilde ; B 9 0 591 755 ;
+C -1 ; WX 600 ; N icircumflex ; B 92 0 508 639 ;
+C -1 ; WX 600 ; N igrave ; B 92 0 508 639 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 53 -237 541 431 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 92 -237 508 604 ;
+C -1 ; WX 600 ; N plusminus ; B 72 0 528 529 ;
+C -1 ; WX 600 ; N onehalf ; B 23 0 573 612 ;
+C -1 ; WX 600 ; N onequarter ; B 16 0 580 612 ;
+C -1 ; WX 600 ; N threequarters ; B 6 0 580 612 ;
+C -1 ; WX 600 ; N iacute ; B 92 0 508 639 ;
+C -1 ; WX 600 ; N Abreve ; B 9 0 591 770 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 63 -237 541 604 ;
+C -1 ; WX 600 ; N Omacron ; B 51 -16 549 726 ;
+C -1 ; WX 600 ; N imacron ; B 92 0 508 576 ;
+C -1 ; WX 600 ; N emacron ; B 63 -16 520 576 ;
+C -1 ; WX 600 ; N amacron ; B 72 -16 541 576 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 43 -237 499 563 ;
+C -1 ; WX 600 ; N ydieresis ; B 51 -186 549 611 ;
+C -1 ; WX 600 ; N zdotaccent ; B 115 0 489 611 ;
+C -1 ; WX 600 ; N zcaron ; B 115 0 489 639 ;
+C -1 ; WX 600 ; N zacute ; B 115 0 489 639 ;
+C -1 ; WX 600 ; N yacute ; B 51 -186 549 639 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 43 -16 541 633 ;
+C -1 ; WX 600 ; N eth ; B 72 -17 528 620 ;
+C -1 ; WX 600 ; N uring ; B 43 -16 541 661 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 51 -16 549 789 ;
+C -1 ; WX 600 ; N commaaccent ; B 234 -237 367 -60 ;
+C -1 ; WX 600 ; N copyright ; B 3 -15 596 578 ;
+C -1 ; WX 600 ; N registered ; B 3 -15 596 578 ;
+C -1 ; WX 600 ; N Acircumflex ; B 9 0 591 789 ;
+C -1 ; WX 600 ; N idieresis ; B 92 0 508 611 ;
+C -1 ; WX 600 ; N lozenge ; B 89 -11 511 575 ;
+C -1 ; WX 600 ; N Delta ; B 43 0 557 563 ;
+C -1 ; WX 600 ; N notequal ; B 51 94 549 464 ;
+C -1 ; WX 600 ; N radical ; B 27 0 628 699 ;
+C -1 ; WX 600 ; N Agrave ; B 9 0 591 789 ;
+C -1 ; WX 600 ; N Aacute ; B 9 0 591 789 ;
+C -1 ; WX 600 ; N lessequal ; B 53 0 525 535 ;
+C -1 ; WX 600 ; N greaterequal ; B 59 0 531 535 ;
+C -1 ; WX 600 ; N logicalnot ; B 72 168 528 438 ;
+C -1 ; WX 600 ; N summation ; B 113 -127 507 563 ;
+C -1 ; WX 600 ; N partialdiff ; B 71 -17 529 582 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B 22 -237 562 563 ;
+C -1 ; WX 600 ; N dcroat ; B 63 -16 583 604 ;
+C -1 ; WX 600 ; N brokenbar ; B 280 -124 320 604 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 63 -237 541 563 ;
+C -1 ; WX 600 ; N Adieresis ; B 9 0 591 761 ;
+C -1 ; WX 600 ; N mu ; B 43 -200 541 417 ;
+C -1 ; WX 600 ; N .notdef ; B 295 0 295 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -33
+KPX A Ccedilla -30
+KPX A G -27
+KPX A O -27
+KPX A Odieresis -27
+KPX A Q -28
+KPX A T -27
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -74
+KPX A W -12
+KPX A Y -28
+KPX A a 8
+KPX A b 46
+KPX A c -19
+KPX A ccedilla -15
+KPX A comma -39
+KPX A d -10
+KPX A e -14
+KPX A g -23
+KPX A guillemotleft -49
+KPX A guilsinglleft -49
+KPX A hyphen -30
+KPX A o -16
+KPX A period -67
+KPX A q -24
+KPX A quotedblright -78
+KPX A quoteright -98
+KPX A t -26
+KPX A u -15
+KPX A v -55
+KPX A w -19
+KPX A y -60
+KPX Aacute C -33
+KPX Aacute G -27
+KPX Aacute O -27
+KPX Aacute Q -28
+KPX Aacute T -27
+KPX Aacute U -32
+KPX Aacute V -74
+KPX Aacute W -12
+KPX Aacute Y -28
+KPX Aacute a 8
+KPX Aacute b 46
+KPX Aacute c -19
+KPX Aacute comma -39
+KPX Aacute d -10
+KPX Aacute e -14
+KPX Aacute g -23
+KPX Aacute guillemotleft -49
+KPX Aacute guilsinglleft -49
+KPX Aacute hyphen -30
+KPX Aacute o -16
+KPX Aacute period -67
+KPX Aacute q -24
+KPX Aacute quoteright -98
+KPX Aacute t -26
+KPX Aacute u -15
+KPX Aacute v -55
+KPX Aacute w -19
+KPX Aacute y -60
+KPX Acircumflex C -33
+KPX Acircumflex G -27
+KPX Acircumflex O -27
+KPX Acircumflex Q -28
+KPX Acircumflex T -27
+KPX Acircumflex U -32
+KPX Acircumflex V -74
+KPX Acircumflex W -12
+KPX Acircumflex Y -28
+KPX Acircumflex comma -39
+KPX Acircumflex period -67
+KPX Adieresis C -33
+KPX Adieresis G -27
+KPX Adieresis O -27
+KPX Adieresis Q -28
+KPX Adieresis T -27
+KPX Adieresis U -32
+KPX Adieresis V -74
+KPX Adieresis W -12
+KPX Adieresis Y -28
+KPX Adieresis a 8
+KPX Adieresis b 46
+KPX Adieresis c -19
+KPX Adieresis comma -39
+KPX Adieresis d -10
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -49
+KPX Adieresis guilsinglleft -49
+KPX Adieresis hyphen -30
+KPX Adieresis o -16
+KPX Adieresis period -67
+KPX Adieresis q -24
+KPX Adieresis quotedblright -78
+KPX Adieresis quoteright -98
+KPX Adieresis t -26
+KPX Adieresis u -15
+KPX Adieresis v -55
+KPX Adieresis w -19
+KPX Adieresis y -60
+KPX Agrave C -33
+KPX Agrave G -27
+KPX Agrave O -27
+KPX Agrave Q -28
+KPX Agrave T -27
+KPX Agrave U -32
+KPX Agrave V -74
+KPX Agrave W -12
+KPX Agrave Y -28
+KPX Agrave comma -39
+KPX Agrave period -67
+KPX Aring C -33
+KPX Aring G -27
+KPX Aring O -27
+KPX Aring Q -28
+KPX Aring T -27
+KPX Aring U -32
+KPX Aring V -74
+KPX Aring W -12
+KPX Aring Y -28
+KPX Aring a 8
+KPX Aring b 46
+KPX Aring c -19
+KPX Aring comma -39
+KPX Aring d -10
+KPX Aring e -14
+KPX Aring g -23
+KPX Aring guillemotleft -49
+KPX Aring guilsinglleft -49
+KPX Aring hyphen -30
+KPX Aring o -16
+KPX Aring period -67
+KPX Aring q -24
+KPX Aring quotedblright -78
+KPX Aring quoteright -98
+KPX Aring t -26
+KPX Aring u -15
+KPX Aring v -55
+KPX Aring w -19
+KPX Aring y -60
+KPX Atilde C -33
+KPX Atilde G -27
+KPX Atilde O -27
+KPX Atilde Q -28
+KPX Atilde T -27
+KPX Atilde U -32
+KPX Atilde V -74
+KPX Atilde W -12
+KPX Atilde Y -28
+KPX Atilde comma -39
+KPX Atilde period -67
+KPX B A -9
+KPX B AE -9
+KPX B Aacute -9
+KPX B Acircumflex -9
+KPX B Adieresis -9
+KPX B Aring -9
+KPX B Atilde -9
+KPX B O -10
+KPX B OE 10
+KPX B Oacute -10
+KPX B Ocircumflex -10
+KPX B Odieresis -10
+KPX B Ograve -10
+KPX B Oslash -8
+KPX B V -29
+KPX B W -12
+KPX B Y -50
+KPX C A -9
+KPX C AE -9
+KPX C Aacute -9
+KPX C Adieresis -9
+KPX C Aring -9
+KPX C H -26
+KPX C K -11
+KPX C O -21
+KPX C Oacute -21
+KPX C Odieresis -21
+KPX Ccedilla A -5
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -31
+KPX D T -40
+KPX D V -42
+KPX D W -17
+KPX D X -55
+KPX D Y -63
+KPX F A -38
+KPX F Aacute -38
+KPX F Acircumflex -38
+KPX F Adieresis -38
+KPX F Agrave -38
+KPX F Aring -38
+KPX F Atilde -38
+KPX F J -95
+KPX F O -27
+KPX F Odieresis -27
+KPX F a -47
+KPX F aacute -47
+KPX F adieresis -43
+KPX F ae -20
+KPX F aring -47
+KPX F comma -168
+KPX F e -56
+KPX F eacute -56
+KPX F hyphen -67
+KPX F i -47
+KPX F j -54
+KPX F o -63
+KPX F oacute -63
+KPX F odieresis -48
+KPX F oe -21
+KPX F oslash -63
+KPX F period -193
+KPX F r -32
+KPX F u -1
+KPX G A 6
+KPX G AE 5
+KPX G Aacute 6
+KPX G Acircumflex 6
+KPX G Adieresis 6
+KPX G Agrave 6
+KPX G Aring 6
+KPX G Atilde 6
+KPX G T -25
+KPX G V 6
+KPX G W 1
+KPX G Y -14
+KPX J A -7
+KPX J AE -16
+KPX J Adieresis -7
+KPX J Aring -7
+KPX K C -42
+KPX K G -36
+KPX K O -37
+KPX K OE -19
+KPX K Oacute -37
+KPX K Odieresis -37
+KPX K S -9
+KPX K T -12
+KPX K a -1
+KPX K adieresis -1
+KPX K ae 26
+KPX K aring -1
+KPX K e -24
+KPX K hyphen -61
+KPX K o -25
+KPX K oacute -25
+KPX K odieresis -25
+KPX K u -25
+KPX K udieresis -25
+KPX K y -67
+KPX L A 17
+KPX L AE 16
+KPX L Aacute 17
+KPX L Adieresis 17
+KPX L Aring 17
+KPX L C -11
+KPX L Ccedilla -10
+KPX L G -10
+KPX L O -6
+KPX L Oacute -6
+KPX L Ocircumflex -6
+KPX L Odieresis -6
+KPX L Ograve -6
+KPX L Otilde -6
+KPX L S -24
+KPX L T -52
+KPX L U -29
+KPX L Udieresis -29
+KPX L V -66
+KPX L W -27
+KPX L Y -53
+KPX L hyphen 3
+KPX L quotedblright -66
+KPX L quoteright -73
+KPX L u -16
+KPX L udieresis -16
+KPX L y -45
+KPX N A -3
+KPX N AE -3
+KPX N Aacute -3
+KPX N Adieresis -3
+KPX N Aring -3
+KPX N C -12
+KPX N Ccedilla -12
+KPX N G -11
+KPX N O -9
+KPX N Oacute -9
+KPX N Odieresis -9
+KPX N a -19
+KPX N aacute -19
+KPX N adieresis -19
+KPX N ae 11
+KPX N aring -19
+KPX N comma -58
+KPX N e -6
+KPX N eacute -6
+KPX N o -10
+KPX N oacute -10
+KPX N odieresis -10
+KPX N oslash -7
+KPX N period -83
+KPX N u -9
+KPX N udieresis -9
+KPX O A -27
+KPX O AE -26
+KPX O Aacute -27
+KPX O Adieresis -27
+KPX O Aring -27
+KPX O T -30
+KPX O V -31
+KPX O W -5
+KPX O X -43
+KPX O Y -52
+KPX Oacute A -27
+KPX Oacute T -30
+KPX Oacute V -31
+KPX Oacute W -5
+KPX Oacute Y -52
+KPX Ocircumflex T -30
+KPX Ocircumflex V -31
+KPX Ocircumflex Y -52
+KPX Odieresis A -27
+KPX Odieresis T -30
+KPX Odieresis V -31
+KPX Odieresis W -5
+KPX Odieresis X -43
+KPX Odieresis Y -52
+KPX Ograve T -30
+KPX Ograve V -31
+KPX Ograve Y -52
+KPX Oslash A -26
+KPX Otilde T -30
+KPX Otilde V -31
+KPX Otilde Y -52
+KPX P A -79
+KPX P AE -76
+KPX P Aacute -79
+KPX P Adieresis -79
+KPX P Aring -79
+KPX P J -82
+KPX P a -52
+KPX P aacute -52
+KPX P adieresis -52
+KPX P ae -25
+KPX P aring -52
+KPX P comma -156
+KPX P e -42
+KPX P eacute -42
+KPX P hyphen -46
+KPX P o -48
+KPX P oacute -48
+KPX P odieresis -48
+KPX P oe -13
+KPX P oslash -48
+KPX P period -181
+KPX R C -27
+KPX R Ccedilla -28
+KPX R G -26
+KPX R O -25
+KPX R OE -4
+KPX R Oacute -25
+KPX R Odieresis -25
+KPX R T -28
+KPX R U -32
+KPX R Udieresis -32
+KPX R V -33
+KPX R W -13
+KPX R Y -29
+KPX R a 7
+KPX R aacute 7
+KPX R adieresis 7
+KPX R ae 35
+KPX R aring 7
+KPX R e -15
+KPX R eacute -15
+KPX R hyphen -48
+KPX R o -17
+KPX R oacute -17
+KPX R odieresis -17
+KPX R oe 22
+KPX R u -11
+KPX R uacute -11
+KPX R udieresis -11
+KPX R y -15
+KPX S A -22
+KPX S AE -22
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T -42
+KPX S V -10
+KPX S W -16
+KPX S Y -31
+KPX S t -18
+KPX T A -27
+KPX T AE -27
+KPX T Aacute -27
+KPX T Acircumflex -27
+KPX T Adieresis -27
+KPX T Agrave -27
+KPX T Aring -27
+KPX T Atilde -27
+KPX T C -29
+KPX T G -30
+KPX T J -79
+KPX T O -29
+KPX T OE -7
+KPX T Oacute -29
+KPX T Ocircumflex -29
+KPX T Odieresis -29
+KPX T Ograve -29
+KPX T Oslash -29
+KPX T Otilde -29
+KPX T S -43
+KPX T V 10
+KPX T W 5
+KPX T Y -10
+KPX T a -60
+KPX T ae -33
+KPX T c -88
+KPX T colon -136
+KPX T comma -108
+KPX T e -83
+KPX T g -92
+KPX T guillemotleft -122
+KPX T guilsinglleft -122
+KPX T hyphen -94
+KPX T i -58
+KPX T j -80
+KPX T o -85
+KPX T oslash -54
+KPX T period -136
+KPX T r -54
+KPX T s -63
+KPX T semicolon -111
+KPX T u -84
+KPX T v -93
+KPX T w -88
+KPX T y -103
+KPX U A -18
+KPX U AE -27
+KPX U Aacute -18
+KPX U Acircumflex -18
+KPX U Adieresis -18
+KPX U Aring -18
+KPX U Atilde -18
+KPX U comma -76
+KPX U m 6
+KPX U n -19
+KPX U p 0
+KPX U period -101
+KPX U r -41
+KPX Uacute A -18
+KPX Uacute comma -76
+KPX Uacute m 6
+KPX Uacute n -19
+KPX Uacute p 0
+KPX Uacute period -101
+KPX Uacute r -41
+KPX Ucircumflex A -18
+KPX Udieresis A -18
+KPX Udieresis b 25
+KPX Udieresis comma -76
+KPX Udieresis m 6
+KPX Udieresis n -19
+KPX Udieresis p 0
+KPX Udieresis period -101
+KPX Udieresis r -41
+KPX Ugrave A -18
+KPX V A -3
+KPX V AE -12
+KPX V Aacute -3
+KPX V Acircumflex -3
+KPX V Adieresis -3
+KPX V Agrave -3
+KPX V Aring -3
+KPX V Atilde -3
+KPX V C -29
+KPX V G -31
+KPX V O -31
+KPX V Oacute -31
+KPX V Ocircumflex -31
+KPX V Odieresis -31
+KPX V Ograve -31
+KPX V Oslash -31
+KPX V Otilde -31
+KPX V S -34
+KPX V T 10
+KPX V a -60
+KPX V ae -33
+KPX V colon -124
+KPX V comma -129
+KPX V e -52
+KPX V g -53
+KPX V guillemotleft -75
+KPX V guilsinglleft -75
+KPX V hyphen -43
+KPX V i -60
+KPX V o -56
+KPX V oslash -53
+KPX V period -154
+KPX V r -46
+KPX V semicolon -114
+KPX V u -15
+KPX V y -19
+KPX W A -8
+KPX W AE -14
+KPX W Aacute -8
+KPX W Acircumflex -8
+KPX W Adieresis -8
+KPX W Agrave -8
+KPX W Aring -8
+KPX W Atilde -8
+KPX W C -8
+KPX W G -7
+KPX W O -5
+KPX W Oacute -5
+KPX W Ocircumflex -5
+KPX W Odieresis -5
+KPX W Ograve -5
+KPX W Oslash -2
+KPX W Otilde -5
+KPX W S -24
+KPX W T 5
+KPX W a -20
+KPX W ae 10
+KPX W colon -88
+KPX W comma -66
+KPX W e -6
+KPX W g -7
+KPX W guillemotleft -31
+KPX W guilsinglleft -31
+KPX W hyphen -2
+KPX W i -43
+KPX W o -10
+KPX W oslash -7
+KPX W period -90
+KPX W r -29
+KPX W semicolon -69
+KPX W u 2
+KPX W y -2
+KPX X C -46
+KPX X O -43
+KPX X Odieresis -43
+KPX X Q -44
+KPX X a -7
+KPX X e -30
+KPX X hyphen -75
+KPX X o -31
+KPX X u -31
+KPX X y -53
+KPX Y A -24
+KPX Y AE -27
+KPX Y Aacute -24
+KPX Y Acircumflex -24
+KPX Y Adieresis -24
+KPX Y Agrave -24
+KPX Y Aring -24
+KPX Y Atilde -24
+KPX Y C -51
+KPX Y G -52
+KPX Y O -53
+KPX Y Oacute -53
+KPX Y Ocircumflex -53
+KPX Y Odieresis -53
+KPX Y Ograve -53
+KPX Y Oslash -53
+KPX Y Otilde -53
+KPX Y S -55
+KPX Y T -10
+KPX Y a -60
+KPX Y ae -32
+KPX Y colon -135
+KPX Y comma -107
+KPX Y e -78
+KPX Y g -81
+KPX Y guillemotleft -115
+KPX Y guilsinglleft -115
+KPX Y hyphen -91
+KPX Y i -57
+KPX Y o -83
+KPX Y oslash -54
+KPX Y p -35
+KPX Y period -135
+KPX Y semicolon -110
+KPX Y u -46
+KPX Y v -39
+KPX Z v -50
+KPX Z y -61
+KPX a j -87
+KPX a quoteright -56
+KPX a v -28
+KPX a w -21
+KPX a y -38
+KPX aacute v -28
+KPX aacute w -21
+KPX aacute y -38
+KPX adieresis v -28
+KPX adieresis w -21
+KPX adieresis y -38
+KPX ae v 21
+KPX ae w 21
+KPX ae y 10
+KPX agrave v -28
+KPX agrave w -21
+KPX agrave y -38
+KPX aring v -28
+KPX aring w -21
+KPX aring y -38
+KPX b v -12
+KPX b w 1
+KPX b y -22
+KPX c h -3
+KPX c k -9
+KPX comma one -144
+KPX comma quotedblright -119
+KPX comma quoteright -136
+KPX e quoteright -41
+KPX e t -29
+KPX e v -22
+KPX e w -19
+KPX e x -2
+KPX e y -33
+KPX eacute v -22
+KPX eacute w -19
+KPX eacute y -33
+KPX ecircumflex v -22
+KPX ecircumflex w -19
+KPX ecircumflex y -33
+KPX eight four -58
+KPX eight one -75
+KPX eight seven -68
+KPX f a -38
+KPX f aacute -38
+KPX f adieresis -22
+KPX f ae -11
+KPX f aring -38
+KPX f e -55
+KPX f eacute -55
+KPX f f -42
+KPX f i -36
+KPX f j -59
+KPX f l -25
+KPX f o -62
+KPX f oacute -62
+KPX f odieresis -27
+KPX f oe -20
+KPX f oslash -32
+KPX f quoteright -56
+KPX f s -41
+KPX f t -6
+KPX five four -52
+KPX five one -86
+KPX five seven -72
+KPX four four -62
+KPX four one -66
+KPX four seven -93
+KPX g a -10
+KPX g adieresis -10
+KPX g ae 16
+KPX g aring -10
+KPX g e -4
+KPX g eacute -4
+KPX g l -33
+KPX g oacute -8
+KPX g odieresis -8
+KPX g r 0
+KPX guillemotright A -43
+KPX guillemotright AE -39
+KPX guillemotright Aacute -43
+KPX guillemotright Adieresis -43
+KPX guillemotright Aring -43
+KPX guillemotright T -121
+KPX guillemotright V -71
+KPX guillemotright W -29
+KPX guillemotright Y -114
+KPX guilsinglright A -43
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -43
+KPX guilsinglright Adieresis -43
+KPX guilsinglright Aring -43
+KPX guilsinglright T -121
+KPX guilsinglright V -71
+KPX guilsinglright W -29
+KPX guilsinglright Y -114
+KPX h quoteright -49
+KPX h y -32
+KPX hyphen A -26
+KPX hyphen AE -20
+KPX hyphen Aacute -26
+KPX hyphen Adieresis -26
+KPX hyphen Aring -26
+KPX hyphen T -95
+KPX hyphen V -41
+KPX hyphen W -1
+KPX hyphen Y -92
+KPX i T -58
+KPX i j -142
+KPX k a -6
+KPX k aacute -6
+KPX k adieresis -6
+KPX k ae 21
+KPX k aring -6
+KPX k comma -53
+KPX k e -29
+KPX k eacute -29
+KPX k g -38
+KPX k hyphen -99
+KPX k o -30
+KPX k oacute -30
+KPX k odieresis -30
+KPX k period -81
+KPX k s -9
+KPX k u -3
+KPX k udieresis -3
+KPX l v -83
+KPX l y -93
+KPX m p 22
+KPX m v 14
+KPX m w 15
+KPX m y 3
+KPX n T -42
+KPX n p -5
+KPX n quoteright -47
+KPX n v -21
+KPX n w -12
+KPX n y -31
+KPX nine four -51
+KPX nine one -75
+KPX nine seven -66
+KPX o T -85
+KPX o quoteright -39
+KPX o t -22
+KPX o v -21
+KPX o w -6
+KPX o x -26
+KPX o y -31
+KPX oacute v -21
+KPX oacute w -6
+KPX oacute y -31
+KPX ocircumflex t -22
+KPX odieresis t -22
+KPX odieresis v -21
+KPX odieresis w -6
+KPX odieresis x -26
+KPX odieresis y -31
+KPX ograve v -21
+KPX ograve w -6
+KPX ograve y -31
+KPX one comma -91
+KPX one eight -86
+KPX one five -67
+KPX one four -119
+KPX one nine -75
+KPX one one -62
+KPX one period -119
+KPX one seven -141
+KPX one six -111
+KPX one three -61
+KPX one two -47
+KPX one zero -94
+KPX p t -15
+KPX p y -19
+KPX period one -119
+KPX period quotedblright -108
+KPX period quoteright -125
+KPX q c -2
+KPX q u 42
+KPX quotedblbase A -3
+KPX quotedblbase AE -3
+KPX quotedblbase T -78
+KPX quotedblbase V -83
+KPX quotedblbase W -23
+KPX quotedblbase Y -79
+KPX quotedblleft A -59
+KPX quotedblleft AE -52
+KPX quotedblleft Aacute -59
+KPX quotedblleft Adieresis -59
+KPX quotedblleft Aring -59
+KPX quotedblleft T -37
+KPX quotedblleft V -14
+KPX quotedblleft W -3
+KPX quotedblleft Y -35
+KPX quotedblright A -59
+KPX quotedblright AE -68
+KPX quotedblright Aacute -59
+KPX quotedblright Adieresis -59
+KPX quotedblright Aring -59
+KPX quotedblright T -45
+KPX quotedblright V -14
+KPX quotedblright W -20
+KPX quotedblright Y -35
+KPX quoteleft A -80
+KPX quoteleft AE -73
+KPX quoteleft Aacute -80
+KPX quoteleft Adieresis -80
+KPX quoteleft Aring -80
+KPX quoteleft T -59
+KPX quoteleft V -36
+KPX quoteleft W -24
+KPX quoteleft Y -56
+KPX quoteright A -140
+KPX quoteright AE -149
+KPX quoteright Aacute -140
+KPX quoteright Adieresis -140
+KPX quoteright Aring -140
+KPX quoteright comma -196
+KPX quoteright d -126
+KPX quoteright o -131
+KPX quoteright period -220
+KPX quoteright r -145
+KPX quoteright s -140
+KPX quoteright t -114
+KPX quoteright v -108
+KPX quoteright w -105
+KPX quoteright y -118
+KPX r a -20
+KPX r aacute -20
+KPX r acircumflex -20
+KPX r adieresis -20
+KPX r ae 7
+KPX r agrave -20
+KPX r aring -20
+KPX r c -24
+KPX r ccedilla -28
+KPX r colon -81
+KPX r comma -97
+KPX r d -14
+KPX r e -12
+KPX r eacute -12
+KPX r ecircumflex -12
+KPX r egrave -12
+KPX r f -18
+KPX r g -11
+KPX r h -19
+KPX r hyphen -120
+KPX r i -28
+KPX r j -35
+KPX r k -29
+KPX r l -47
+KPX r m 33
+KPX r n 6
+KPX r o -19
+KPX r oacute -19
+KPX r ocircumflex -19
+KPX r odieresis -19
+KPX r oe 18
+KPX r ograve -19
+KPX r oslash -19
+KPX r p 28
+KPX r period -125
+KPX r q -11
+KPX r quoteright -37
+KPX r r -13
+KPX r s -24
+KPX r semicolon -69
+KPX r t 17
+KPX r u 17
+KPX r v 24
+KPX r w 24
+KPX r x 2
+KPX r y 13
+KPX r z -19
+KPX s quoteright -48
+KPX s t -13
+KPX seven colon -148
+KPX seven comma -140
+KPX seven eight -79
+KPX seven five -84
+KPX seven four -111
+KPX seven one -67
+KPX seven period -165
+KPX seven seven -62
+KPX seven six -99
+KPX seven three -72
+KPX seven two -69
+KPX six four -46
+KPX six one -61
+KPX six seven -48
+KPX t S -35
+KPX t a -20
+KPX t aacute -20
+KPX t adieresis -20
+KPX t ae 8
+KPX t aring -20
+KPX t colon -102
+KPX t e -37
+KPX t eacute -37
+KPX t h -7
+KPX t o -39
+KPX t oacute -39
+KPX t odieresis -39
+KPX t quoteright -94
+KPX t semicolon -80
+KPX three four -52
+KPX three one -74
+KPX three seven -67
+KPX two four -92
+KPX two one -66
+KPX two seven -71
+KPX u quoteright -38
+KPX v a -6
+KPX v aacute -6
+KPX v acircumflex -6
+KPX v adieresis -6
+KPX v ae 20
+KPX v agrave -6
+KPX v aring -6
+KPX v atilde -6
+KPX v c -25
+KPX v colon -71
+KPX v comma -113
+KPX v e -13
+KPX v eacute -13
+KPX v ecircumflex -13
+KPX v egrave -13
+KPX v g -11
+KPX v hyphen -24
+KPX v l -82
+KPX v o -21
+KPX v oacute -21
+KPX v odieresis -21
+KPX v ograve -21
+KPX v oslash -21
+KPX v period -139
+KPX v s -19
+KPX v semicolon -62
+KPX w a -6
+KPX w aacute -6
+KPX w acircumflex -6
+KPX w adieresis -6
+KPX w ae 20
+KPX w agrave -6
+KPX w aring -6
+KPX w atilde -6
+KPX w c -10
+KPX w colon -71
+KPX w comma -70
+KPX w e -1
+KPX w eacute -1
+KPX w ecircumflex -1
+KPX w egrave -1
+KPX w g -3
+KPX w hyphen 1
+KPX w l -50
+KPX w o -6
+KPX w oacute -6
+KPX w odieresis -6
+KPX w ograve -6
+KPX w oslash -3
+KPX w period -95
+KPX w s -18
+KPX w semicolon -62
+KPX x a -2
+KPX x c -29
+KPX x e -25
+KPX x eacute -25
+KPX x o -26
+KPX x q -30
+KPX y a -17
+KPX y aacute -17
+KPX y acircumflex -17
+KPX y adieresis -17
+KPX y ae 10
+KPX y agrave -17
+KPX y aring -17
+KPX y atilde -17
+KPX y c -35
+KPX y colon -81
+KPX y comma -117
+KPX y e -24
+KPX y eacute -24
+KPX y ecircumflex -24
+KPX y egrave -24
+KPX y g -21
+KPX y hyphen -24
+KPX y l -93
+KPX y o -31
+KPX y oacute -31
+KPX y odieresis -31
+KPX y ograve -31
+KPX y oslash -31
+KPX y period -144
+KPX y s -30
+KPX y semicolon -72
+KPX zero four -58
+KPX zero one -81
+KPX zero seven -73
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrr8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ucrr8a.pfb
new file mode 100644
index 00000000000..0cadce7d139
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrr8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrro8a.afm b/Master/tlpkg/tlgs/lib/fonts/ucrro8a.afm
new file mode 100644
index 00000000000..718ec5de05a
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrro8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusMonL-ReguObli
+FullName Nimbus Mono L Regular Oblique
+FamilyName Nimbus Mono L
+Weight Regular
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -61 -237 774 811
+CapHeight 563
+XHeight 417
+Descender -186
+Ascender 604
+StartCharMetrics 316
+C 32 ; WX 600 ; N space ; B 319 0 319 0 ;
+C 33 ; WX 600 ; N exclam ; B 246 -15 463 618 ;
+C 34 ; WX 600 ; N quotedbl ; B 254 315 582 604 ;
+C 35 ; WX 600 ; N numbersign ; B 137 -62 589 647 ;
+C 36 ; WX 600 ; N dollar ; B 131 -92 582 655 ;
+C 37 ; WX 600 ; N percent ; B 137 -12 591 611 ;
+C 38 ; WX 600 ; N ampersand ; B 132 -16 527 519 ;
+C 39 ; WX 600 ; N quoteright ; B 207 314 468 604 ;
+C 40 ; WX 600 ; N parenleft ; B 335 -124 583 604 ;
+C 41 ; WX 600 ; N parenright ; B 124 -124 372 604 ;
+C 42 ; WX 600 ; N asterisk ; B 211 250 586 604 ;
+C 43 ; WX 600 ; N plus ; B 131 32 588 530 ;
+C 44 ; WX 600 ; N comma ; B 110 -145 371 145 ;
+C 45 ; WX 600 ; N hyphen ; B 131 258 588 299 ;
+C 46 ; WX 600 ; N period ; B 235 -15 386 116 ;
+C 47 ; WX 600 ; N slash ; B 99 -81 625 668 ;
+C 48 ; WX 600 ; N zero ; B 156 -15 571 618 ;
+C 49 ; WX 600 ; N one ; B 117 0 492 612 ;
+C 50 ; WX 600 ; N two ; B 84 0 572 618 ;
+C 51 ; WX 600 ; N three ; B 110 -15 579 618 ;
+C 52 ; WX 600 ; N four ; B 141 0 545 604 ;
+C 53 ; WX 600 ; N five ; B 113 -15 584 604 ;
+C 54 ; WX 600 ; N six ; B 184 -15 631 618 ;
+C 55 ; WX 600 ; N seven ; B 215 -1 606 604 ;
+C 56 ; WX 600 ; N eight ; B 143 -15 576 618 ;
+C 57 ; WX 600 ; N nine ; B 142 -15 589 618 ;
+C 58 ; WX 600 ; N colon ; B 235 -15 450 417 ;
+C 59 ; WX 600 ; N semicolon ; B 114 -145 426 417 ;
+C 60 ; WX 600 ; N less ; B 131 44 627 518 ;
+C 61 ; WX 600 ; N equal ; B 95 190 625 375 ;
+C 62 ; WX 600 ; N greater ; B 92 44 588 518 ;
+C 63 ; WX 600 ; N question ; B 231 -15 581 577 ;
+C 64 ; WX 600 ; N at ; B 139 -62 561 624 ;
+C 65 ; WX 600 ; N A ; B 13 0 596 563 ;
+C 66 ; WX 600 ; N B ; B 47 0 591 563 ;
+C 67 ; WX 600 ; N C ; B 110 -16 635 576 ;
+C 68 ; WX 600 ; N D ; B 47 0 592 563 ;
+C 69 ; WX 600 ; N E ; B 47 0 619 563 ;
+C 70 ; WX 600 ; N F ; B 47 0 640 563 ;
+C 71 ; WX 600 ; N G ; B 108 -16 636 576 ;
+C 72 ; WX 600 ; N H ; B 57 0 646 563 ;
+C 73 ; WX 600 ; N I ; B 117 0 603 563 ;
+C 74 ; WX 600 ; N J ; B 100 -16 699 563 ;
+C 75 ; WX 600 ; N K ; B 47 0 662 563 ;
+C 76 ; WX 600 ; N L ; B 67 0 585 563 ;
+C 77 ; WX 600 ; N M ; B 15 0 700 563 ;
+C 78 ; WX 600 ; N N ; B 46 0 678 563 ;
+C 79 ; WX 600 ; N O ; B 102 -16 616 576 ;
+C 80 ; WX 600 ; N P ; B 47 0 587 563 ;
+C 81 ; WX 600 ; N Q ; B 102 -115 616 576 ;
+C 82 ; WX 600 ; N R ; B 47 0 594 563 ;
+C 83 ; WX 600 ; N S ; B 96 -17 602 577 ;
+C 84 ; WX 600 ; N T ; B 152 0 648 563 ;
+C 85 ; WX 600 ; N U ; B 136 -16 676 563 ;
+C 86 ; WX 600 ; N V ; B 124 0 707 563 ;
+C 87 ; WX 600 ; N W ; B 122 0 696 563 ;
+C 88 ; WX 600 ; N X ; B 44 0 662 563 ;
+C 89 ; WX 600 ; N Y ; B 153 0 665 563 ;
+C 90 ; WX 600 ; N Z ; B 103 0 590 563 ;
+C 91 ; WX 600 ; N bracketleft ; B 254 -124 570 604 ;
+C 92 ; WX 600 ; N backslash ; B 250 -81 474 668 ;
+C 93 ; WX 600 ; N bracketright ; B 132 -124 448 604 ;
+C 94 ; WX 600 ; N asciicircum ; B 192 354 567 615 ;
+C 95 ; WX 600 ; N underscore ; B -61 -125 564 -75 ;
+C 96 ; WX 600 ; N quoteleft ; B 388 343 544 604 ;
+C 97 ; WX 600 ; N a ; B 93 -16 546 431 ;
+C 98 ; WX 600 ; N b ; B 26 -16 591 604 ;
+C 99 ; WX 600 ; N c ; B 121 -17 596 432 ;
+C 100 ; WX 600 ; N d ; B 102 -16 630 604 ;
+C 101 ; WX 600 ; N e ; B 104 -16 570 431 ;
+C 102 ; WX 600 ; N f ; B 109 0 663 604 ;
+C 103 ; WX 600 ; N g ; B 105 -186 647 431 ;
+C 104 ; WX 600 ; N h ; B 55 0 556 604 ;
+C 105 ; WX 600 ; N i ; B 96 0 513 624 ;
+C 106 ; WX 600 ; N j ; B 112 -186 547 624 ;
+C 107 ; WX 600 ; N k ; B 67 0 578 604 ;
+C 108 ; WX 600 ; N l ; B 96 0 513 604 ;
+C 109 ; WX 600 ; N m ; B 15 0 603 431 ;
+C 110 ; WX 600 ; N n ; B 57 0 546 431 ;
+C 111 ; WX 600 ; N o ; B 111 -16 577 431 ;
+C 112 ; WX 600 ; N p ; B -13 -186 593 431 ;
+C 113 ; WX 600 ; N q ; B 105 -186 668 431 ;
+C 114 ; WX 600 ; N r ; B 88 0 619 427 ;
+C 115 ; WX 600 ; N s ; B 108 -17 558 431 ;
+C 116 ; WX 600 ; N t ; B 127 -16 518 563 ;
+C 117 ; WX 600 ; N u ; B 127 -16 569 417 ;
+C 118 ; WX 600 ; N v ; B 114 0 655 417 ;
+C 119 ; WX 600 ; N w ; B 114 0 655 417 ;
+C 120 ; WX 600 ; N x ; B 55 0 611 417 ;
+C 121 ; WX 600 ; N y ; B 22 -186 634 417 ;
+C 122 ; WX 600 ; N z ; B 115 0 563 417 ;
+C 123 ; WX 600 ; N braceleft ; B 248 -124 528 604 ;
+C 124 ; WX 600 ; N bar ; B 257 -124 444 604 ;
+C 125 ; WX 600 ; N braceright ; B 175 -124 455 604 ;
+C 126 ; WX 600 ; N asciitilde ; B 145 212 575 348 ;
+C 161 ; WX 600 ; N exclamdown ; B 222 -216 439 417 ;
+C 162 ; WX 600 ; N cent ; B 175 -13 563 630 ;
+C 163 ; WX 600 ; N sterling ; B 90 0 541 578 ;
+C 164 ; WX 600 ; N fraction ; B 84 138 645 470 ;
+C 165 ; WX 600 ; N yen ; B 161 0 665 563 ;
+C 166 ; WX 600 ; N florin ; B 74 -93 643 618 ;
+C 167 ; WX 600 ; N section ; B 91 -62 624 603 ;
+C 168 ; WX 600 ; N currency ; B 127 95 597 489 ;
+C 169 ; WX 600 ; N quotesingle ; B 344 315 492 604 ;
+C 170 ; WX 600 ; N quotedblleft ; B 221 343 586 604 ;
+C 171 ; WX 600 ; N guillemotleft ; B 108 0 626 417 ;
+C 172 ; WX 600 ; N guilsinglleft ; B 108 0 397 417 ;
+C 173 ; WX 600 ; N guilsinglright ; B 297 0 585 417 ;
+C 174 ; WX 600 ; N fi ; B 14 0 615 624 ;
+C 175 ; WX 600 ; N fl ; B 14 0 611 604 ;
+C 177 ; WX 600 ; N endash ; B 131 261 588 302 ;
+C 178 ; WX 600 ; N dagger ; B 208 -63 561 604 ;
+C 179 ; WX 600 ; N daggerdbl ; B 154 -62 561 604 ;
+C 180 ; WX 600 ; N periodcentered ; B 285 217 436 348 ;
+C 182 ; WX 600 ; N paragraph ; B 152 -62 648 604 ;
+C 183 ; WX 600 ; N bullet ; B 253 141 449 337 ;
+C 184 ; WX 600 ; N quotesinglbase ; B 110 -145 371 145 ;
+C 185 ; WX 600 ; N quotedblbase ; B 73 -116 538 145 ;
+C 186 ; WX 600 ; N quotedblright ; B 170 343 635 604 ;
+C 187 ; WX 600 ; N guillemotright ; B 67 0 585 417 ;
+C 188 ; WX 600 ; N ellipsis ; B 57 -15 557 84 ;
+C 189 ; WX 600 ; N perthousand ; B 91 -9 598 614 ;
+C 191 ; WX 600 ; N questiondown ; B 105 -175 455 417 ;
+C 193 ; WX 600 ; N grave ; B 286 490 429 639 ;
+C 194 ; WX 600 ; N acute ; B 388 490 577 639 ;
+C 195 ; WX 600 ; N circumflex ; B 263 490 554 639 ;
+C 196 ; WX 600 ; N tilde ; B 258 516 579 605 ;
+C 197 ; WX 600 ; N macron ; B 273 536 564 576 ;
+C 198 ; WX 600 ; N breve ; B 280 489 574 621 ;
+C 199 ; WX 600 ; N dotaccent ; B 368 511 470 611 ;
+C 200 ; WX 600 ; N dieresis ; B 258 511 581 611 ;
+C 202 ; WX 600 ; N ring ; B 326 480 516 661 ;
+C 203 ; WX 600 ; N cedilla ; B 181 -173 356 0 ;
+C 205 ; WX 600 ; N hungarumlaut ; B 263 490 576 633 ;
+C 206 ; WX 600 ; N ogonek ; B 258 -155 408 0 ;
+C 207 ; WX 600 ; N caron ; B 286 490 577 639 ;
+C 208 ; WX 600 ; N emdash ; B 60 261 659 302 ;
+C 225 ; WX 600 ; N AE ; B 14 0 690 563 ;
+C 227 ; WX 600 ; N ordfeminine ; B 229 279 511 574 ;
+C 232 ; WX 600 ; N Lslash ; B 66 0 586 563 ;
+C 233 ; WX 600 ; N Oslash ; B 34 -43 685 605 ;
+C 234 ; WX 600 ; N OE ; B 62 0 690 563 ;
+C 235 ; WX 600 ; N ordmasculine ; B 243 284 543 577 ;
+C 241 ; WX 600 ; N ae ; B 36 -16 630 431 ;
+C 245 ; WX 600 ; N dotlessi ; B 96 0 513 417 ;
+C 248 ; WX 600 ; N lslash ; B 96 0 524 604 ;
+C 249 ; WX 600 ; N oslash ; B 47 -43 637 458 ;
+C 250 ; WX 600 ; N oe ; B 50 -16 630 431 ;
+C 251 ; WX 600 ; N germandbls ; B 47 -16 539 604 ;
+C -1 ; WX 600 ; N Udieresis ; B 136 -16 676 762 ;
+C -1 ; WX 600 ; N Uacute ; B 136 -16 676 789 ;
+C -1 ; WX 600 ; N Scedilla ; B 96 -179 602 577 ;
+C -1 ; WX 600 ; N Tcaron ; B 152 0 648 789 ;
+C -1 ; WX 600 ; N Scaron ; B 96 -17 618 789 ;
+C -1 ; WX 600 ; N Rcaron ; B 47 0 594 789 ;
+C -1 ; WX 600 ; N Racute ; B 47 0 594 789 ;
+C -1 ; WX 600 ; N Sacute ; B 96 -17 602 789 ;
+C -1 ; WX 600 ; N Otilde ; B 103 -16 618 755 ;
+C -1 ; WX 600 ; N ucircumflex ; B 127 -16 569 639 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 102 -16 672 787 ;
+C -1 ; WX 600 ; N Uhungarumlaut ; B 136 -16 676 787 ;
+C -1 ; WX 600 ; N Yacute ; B 153 0 665 789 ;
+C -1 ; WX 600 ; N Eth ; B 47 0 592 563 ;
+C -1 ; WX 600 ; N Dcroat ; B 47 0 592 563 ;
+C -1 ; WX 600 ; N Zacute ; B 103 0 590 789 ;
+C -1 ; WX 600 ; N Uring ; B 136 -16 676 807 ;
+C -1 ; WX 600 ; N gbreve ; B 105 -186 647 621 ;
+C -1 ; WX 600 ; N eogonek ; B 104 -155 570 431 ;
+C -1 ; WX 600 ; N edotaccent ; B 104 -16 570 611 ;
+C -1 ; WX 600 ; N ecaron ; B 104 -16 577 639 ;
+C -1 ; WX 600 ; N Ugrave ; B 136 -16 676 789 ;
+C -1 ; WX 600 ; N Thorn ; B 47 0 566 563 ;
+C -1 ; WX 600 ; N eacute ; B 104 -16 570 639 ;
+C -1 ; WX 600 ; N edieresis ; B 104 -16 586 611 ;
+C -1 ; WX 600 ; N dcaron ; B 102 -16 774 618 ;
+C -1 ; WX 600 ; N ccedilla ; B 122 -173 596 431 ;
+C -1 ; WX 600 ; N ccaron ; B 121 -17 596 639 ;
+C -1 ; WX 600 ; N cacute ; B 121 -17 596 639 ;
+C -1 ; WX 600 ; N aogonek ; B 93 -155 546 431 ;
+C -1 ; WX 600 ; N aring ; B 93 -16 546 661 ;
+C -1 ; WX 600 ; N atilde ; B 93 -16 570 605 ;
+C -1 ; WX 600 ; N abreve ; B 93 -16 574 621 ;
+C -1 ; WX 600 ; N egrave ; B 104 -16 570 639 ;
+C -1 ; WX 600 ; N agrave ; B 93 -16 546 639 ;
+C -1 ; WX 600 ; N aacute ; B 93 -16 546 639 ;
+C -1 ; WX 600 ; N adieresis ; B 93 -16 571 611 ;
+C -1 ; WX 600 ; N Uogonek ; B 136 -155 676 563 ;
+C -1 ; WX 600 ; N ugrave ; B 127 -16 569 639 ;
+C -1 ; WX 600 ; N uacute ; B 127 -16 569 639 ;
+C -1 ; WX 600 ; N udieresis ; B 127 -16 573 611 ;
+C -1 ; WX 600 ; N tcaron ; B 127 -16 593 618 ;
+C -1 ; WX 600 ; N scommaaccent ; B 108 -237 558 431 ;
+C -1 ; WX 600 ; N Zcaron ; B 103 0 604 789 ;
+C -1 ; WX 600 ; N ecircumflex ; B 104 -16 570 639 ;
+C -1 ; WX 600 ; N Ucircumflex ; B 136 -16 676 789 ;
+C -1 ; WX 600 ; N acircumflex ; B 93 -16 546 639 ;
+C -1 ; WX 600 ; N Zdotaccent ; B 103 0 590 762 ;
+C -1 ; WX 600 ; N scaron ; B 107 -17 584 639 ;
+C -1 ; WX 600 ; N Amacron ; B 13 0 596 723 ;
+C -1 ; WX 600 ; N sacute ; B 108 -17 577 639 ;
+C -1 ; WX 600 ; N Tcommaaccent ; B 152 -237 648 563 ;
+C -1 ; WX 600 ; N Ydieresis ; B 153 0 665 762 ;
+C -1 ; WX 600 ; N thorn ; B -13 -186 593 590 ;
+C -1 ; WX 600 ; N Emacron ; B 47 0 619 723 ;
+C -1 ; WX 600 ; N Ograve ; B 102 -16 616 789 ;
+C -1 ; WX 600 ; N Oacute ; B 102 -16 616 789 ;
+C -1 ; WX 600 ; N Odieresis ; B 102 -16 616 762 ;
+C -1 ; WX 600 ; N Ntilde ; B 46 0 678 755 ;
+C -1 ; WX 600 ; N Ncaron ; B 46 0 678 789 ;
+C -1 ; WX 600 ; N Nacute ; B 46 0 678 789 ;
+C -1 ; WX 600 ; N Lcaron ; B 67 0 638 576 ;
+C -1 ; WX 600 ; N Lacute ; B 67 0 585 789 ;
+C -1 ; WX 600 ; N Idotaccent ; B 117 0 603 762 ;
+C -1 ; WX 600 ; N racute ; B 88 0 619 639 ;
+C -1 ; WX 600 ; N Icircumflex ; B 117 0 603 789 ;
+C -1 ; WX 600 ; N ohungarumlaut ; B 111 -16 616 633 ;
+C -1 ; WX 600 ; N otilde ; B 111 -16 586 605 ;
+C -1 ; WX 600 ; N Euro ; B 60 -16 634 576 ;
+C -1 ; WX 600 ; N ocircumflex ; B 111 -16 577 639 ;
+C -1 ; WX 600 ; N onesuperior ; B 249 259 469 612 ;
+C -1 ; WX 600 ; N twosuperior ; B 230 259 514 612 ;
+C -1 ; WX 600 ; N threesuperior ; B 245 251 516 612 ;
+C -1 ; WX 600 ; N Igrave ; B 117 0 603 789 ;
+C -1 ; WX 600 ; N Iacute ; B 117 0 603 789 ;
+C -1 ; WX 600 ; N Imacron ; B 117 0 603 723 ;
+C -1 ; WX 600 ; N Iogonek ; B 117 -155 603 563 ;
+C -1 ; WX 600 ; N Idieresis ; B 117 0 611 762 ;
+C -1 ; WX 600 ; N Gbreve ; B 108 -16 656 777 ;
+C -1 ; WX 600 ; N Umacron ; B 136 -16 676 723 ;
+C -1 ; WX 600 ; N Kcommaaccent ; B 47 -237 662 563 ;
+C -1 ; WX 600 ; N ograve ; B 111 -16 577 639 ;
+C -1 ; WX 600 ; N Scommaaccent ; B 96 -237 602 577 ;
+C -1 ; WX 600 ; N Eogonek ; B 47 -155 619 563 ;
+C -1 ; WX 600 ; N oacute ; B 111 -16 577 639 ;
+C -1 ; WX 600 ; N Edotaccent ; B 47 0 619 762 ;
+C -1 ; WX 600 ; N iogonek ; B 96 -155 513 624 ;
+C -1 ; WX 600 ; N gcommaaccent ; B 105 -186 647 668 ;
+C -1 ; WX 600 ; N odieresis ; B 111 -16 581 611 ;
+C -1 ; WX 600 ; N ntilde ; B 57 0 570 605 ;
+C -1 ; WX 600 ; N ncaron ; B 57 0 577 639 ;
+C -1 ; WX 600 ; N Ecaron ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N Ecircumflex ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N scedilla ; B 108 -173 558 431 ;
+C -1 ; WX 600 ; N rcaron ; B 88 0 619 639 ;
+C -1 ; WX 600 ; N Egrave ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N Eacute ; B 47 0 619 789 ;
+C -1 ; WX 600 ; N Gcommaaccent ; B 108 -237 636 576 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 47 -237 594 563 ;
+C -1 ; WX 600 ; N Edieresis ; B 47 0 619 762 ;
+C -1 ; WX 600 ; N nacute ; B 57 0 577 639 ;
+C -1 ; WX 600 ; N uogonek ; B 127 -155 569 417 ;
+C -1 ; WX 600 ; N umacron ; B 127 -16 569 576 ;
+C -1 ; WX 600 ; N Dcaron ; B 47 0 592 789 ;
+C -1 ; WX 600 ; N lcaron ; B 96 0 593 618 ;
+C -1 ; WX 600 ; N Ccaron ; B 110 -16 635 789 ;
+C -1 ; WX 600 ; N Cacute ; B 110 -16 635 789 ;
+C -1 ; WX 600 ; N Ccedilla ; B 110 -173 635 576 ;
+C -1 ; WX 600 ; N degree ; B 257 346 553 636 ;
+C -1 ; WX 600 ; N Aogonek ; B 13 -155 596 563 ;
+C -1 ; WX 600 ; N minus ; B 131 261 588 302 ;
+C -1 ; WX 600 ; N multiply ; B 143 100 577 464 ;
+C -1 ; WX 600 ; N divide ; B 131 25 588 540 ;
+C -1 ; WX 600 ; N Aring ; B 13 0 596 811 ;
+C -1 ; WX 600 ; N trademark ; B 90 243 710 563 ;
+C -1 ; WX 600 ; N rcommaaccent ; B 88 -237 619 427 ;
+C -1 ; WX 600 ; N lacute ; B 96 0 572 789 ;
+C -1 ; WX 600 ; N omacron ; B 111 -16 577 576 ;
+C -1 ; WX 600 ; N Atilde ; B 13 0 596 755 ;
+C -1 ; WX 600 ; N icircumflex ; B 95 0 536 639 ;
+C -1 ; WX 600 ; N igrave ; B 96 0 513 639 ;
+C -1 ; WX 600 ; N ncommaaccent ; B 57 -237 546 431 ;
+C -1 ; WX 600 ; N lcommaaccent ; B 96 -237 513 604 ;
+C -1 ; WX 600 ; N plusminus ; B 76 0 597 529 ;
+C -1 ; WX 600 ; N onehalf ; B 82 0 627 612 ;
+C -1 ; WX 600 ; N onequarter ; B 74 0 619 612 ;
+C -1 ; WX 600 ; N threequarters ; B 70 0 619 612 ;
+C -1 ; WX 600 ; N iacute ; B 96 0 535 639 ;
+C -1 ; WX 600 ; N Abreve ; B 13 0 596 777 ;
+C -1 ; WX 600 ; N kcommaaccent ; B 67 -237 578 604 ;
+C -1 ; WX 600 ; N Omacron ; B 102 -16 616 723 ;
+C -1 ; WX 600 ; N imacron ; B 96 0 564 576 ;
+C -1 ; WX 600 ; N emacron ; B 104 -16 570 576 ;
+C -1 ; WX 600 ; N amacron ; B 93 -16 564 576 ;
+C -1 ; WX 600 ; N tcommaaccent ; B 127 -237 518 563 ;
+C -1 ; WX 600 ; N ydieresis ; B 22 -186 634 611 ;
+C -1 ; WX 600 ; N zdotaccent ; B 115 0 563 611 ;
+C -1 ; WX 600 ; N zcaron ; B 115 0 576 639 ;
+C -1 ; WX 600 ; N zacute ; B 115 0 577 639 ;
+C -1 ; WX 600 ; N yacute ; B 22 -186 634 639 ;
+C -1 ; WX 600 ; N uhungarumlaut ; B 127 -16 576 633 ;
+C -1 ; WX 600 ; N eth ; B 111 -17 582 620 ;
+C -1 ; WX 600 ; N uring ; B 127 -16 569 661 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 102 -16 616 789 ;
+C -1 ; WX 600 ; N commaaccent ; B 159 -237 322 -60 ;
+C -1 ; WX 600 ; N copyright ; B 57 -15 663 578 ;
+C -1 ; WX 600 ; N registered ; B 57 -15 663 578 ;
+C -1 ; WX 600 ; N Acircumflex ; B 13 0 596 789 ;
+C -1 ; WX 600 ; N idieresis ; B 96 0 568 611 ;
+C -1 ; WX 600 ; N lozenge ; B 149 -11 571 575 ;
+C -1 ; WX 600 ; N Delta ; B 43 0 557 563 ;
+C -1 ; WX 600 ; N notequal ; B 96 94 625 464 ;
+C -1 ; WX 600 ; N radical ; B 88 0 773 699 ;
+C -1 ; WX 600 ; N Agrave ; B 13 0 596 789 ;
+C -1 ; WX 600 ; N Aacute ; B 13 0 596 789 ;
+C -1 ; WX 600 ; N lessequal ; B 56 0 635 535 ;
+C -1 ; WX 600 ; N greaterequal ; B 71 0 600 535 ;
+C -1 ; WX 600 ; N logicalnot ; B 160 168 621 438 ;
+C -1 ; WX 600 ; N summation ; B 90 -127 616 563 ;
+C -1 ; WX 600 ; N partialdiff ; B 111 -16 580 581 ;
+C -1 ; WX 600 ; N Ncommaaccent ; B 46 -237 678 563 ;
+C -1 ; WX 600 ; N dcroat ; B 102 -16 690 604 ;
+C -1 ; WX 600 ; N brokenbar ; B 257 -124 444 604 ;
+C -1 ; WX 600 ; N Lcommaaccent ; B 67 -237 585 563 ;
+C -1 ; WX 600 ; N Adieresis ; B 13 0 596 762 ;
+C -1 ; WX 600 ; N mu ; B 86 -200 569 417 ;
+C -1 ; WX 600 ; N .notdef ; B 319 0 319 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -41
+KPX A Ccedilla -39
+KPX A G -36
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -37
+KPX A T -34
+KPX A U -41
+KPX A Uacute -41
+KPX A Ucircumflex -41
+KPX A Udieresis -41
+KPX A Ugrave -41
+KPX A V -78
+KPX A W -20
+KPX A Y -35
+KPX A a 1
+KPX A b 40
+KPX A c -26
+KPX A ccedilla -23
+KPX A comma -47
+KPX A d -17
+KPX A e -21
+KPX A g -27
+KPX A guillemotleft -57
+KPX A guilsinglleft -57
+KPX A hyphen -35
+KPX A o -22
+KPX A period -70
+KPX A q -27
+KPX A quotedblright -82
+KPX A quoteright -102
+KPX A t -33
+KPX A u -23
+KPX A v -59
+KPX A w -27
+KPX A y -63
+KPX Aacute C -41
+KPX Aacute G -36
+KPX Aacute O -35
+KPX Aacute Q -37
+KPX Aacute T -34
+KPX Aacute U -41
+KPX Aacute V -78
+KPX Aacute W -20
+KPX Aacute Y -35
+KPX Aacute a 1
+KPX Aacute b 40
+KPX Aacute c -26
+KPX Aacute comma -47
+KPX Aacute d -17
+KPX Aacute e -21
+KPX Aacute g -27
+KPX Aacute guillemotleft -57
+KPX Aacute guilsinglleft -57
+KPX Aacute hyphen -35
+KPX Aacute o -22
+KPX Aacute period -70
+KPX Aacute q -27
+KPX Aacute quoteright -102
+KPX Aacute t -33
+KPX Aacute u -23
+KPX Aacute v -59
+KPX Aacute w -27
+KPX Aacute y -63
+KPX Acircumflex C -41
+KPX Acircumflex G -36
+KPX Acircumflex O -35
+KPX Acircumflex Q -37
+KPX Acircumflex T -34
+KPX Acircumflex U -41
+KPX Acircumflex V -78
+KPX Acircumflex W -20
+KPX Acircumflex Y -35
+KPX Acircumflex comma -47
+KPX Acircumflex period -70
+KPX Adieresis C -41
+KPX Adieresis G -36
+KPX Adieresis O -35
+KPX Adieresis Q -37
+KPX Adieresis T -34
+KPX Adieresis U -41
+KPX Adieresis V -78
+KPX Adieresis W -20
+KPX Adieresis Y -35
+KPX Adieresis a 1
+KPX Adieresis b 40
+KPX Adieresis c -26
+KPX Adieresis comma -47
+KPX Adieresis d -17
+KPX Adieresis g -27
+KPX Adieresis guillemotleft -57
+KPX Adieresis guilsinglleft -57
+KPX Adieresis hyphen -35
+KPX Adieresis o -22
+KPX Adieresis period -70
+KPX Adieresis q -27
+KPX Adieresis quotedblright -82
+KPX Adieresis quoteright -102
+KPX Adieresis t -33
+KPX Adieresis u -23
+KPX Adieresis v -59
+KPX Adieresis w -27
+KPX Adieresis y -63
+KPX Agrave C -41
+KPX Agrave G -36
+KPX Agrave O -35
+KPX Agrave Q -37
+KPX Agrave T -34
+KPX Agrave U -41
+KPX Agrave V -78
+KPX Agrave W -20
+KPX Agrave Y -35
+KPX Agrave comma -47
+KPX Agrave period -70
+KPX Aring C -41
+KPX Aring G -36
+KPX Aring O -35
+KPX Aring Q -37
+KPX Aring T -34
+KPX Aring U -41
+KPX Aring V -78
+KPX Aring W -20
+KPX Aring Y -35
+KPX Aring a 1
+KPX Aring b 40
+KPX Aring c -26
+KPX Aring comma -47
+KPX Aring d -17
+KPX Aring e -21
+KPX Aring g -27
+KPX Aring guillemotleft -57
+KPX Aring guilsinglleft -57
+KPX Aring hyphen -35
+KPX Aring o -22
+KPX Aring period -70
+KPX Aring q -27
+KPX Aring quotedblright -82
+KPX Aring quoteright -102
+KPX Aring t -33
+KPX Aring u -23
+KPX Aring v -59
+KPX Aring w -27
+KPX Aring y -63
+KPX Atilde C -41
+KPX Atilde G -36
+KPX Atilde O -35
+KPX Atilde Q -37
+KPX Atilde T -34
+KPX Atilde U -41
+KPX Atilde V -78
+KPX Atilde W -20
+KPX Atilde Y -35
+KPX Atilde comma -47
+KPX Atilde period -70
+KPX B A -15
+KPX B AE -16
+KPX B Aacute -15
+KPX B Acircumflex -15
+KPX B Adieresis -15
+KPX B Aring -15
+KPX B Atilde -15
+KPX B O -15
+KPX B OE 5
+KPX B Oacute -15
+KPX B Ocircumflex -15
+KPX B Odieresis -15
+KPX B Ograve -15
+KPX B Oslash -14
+KPX B V -37
+KPX B W -15
+KPX B Y -58
+KPX C A -14
+KPX C AE -14
+KPX C Aacute -14
+KPX C Adieresis -14
+KPX C Aring -14
+KPX C H -34
+KPX C K -19
+KPX C O -24
+KPX C Oacute -24
+KPX C Odieresis -24
+KPX Ccedilla A -8
+KPX D A -47
+KPX D Aacute -47
+KPX D Acircumflex -47
+KPX D Adieresis -47
+KPX D Agrave -47
+KPX D Aring -47
+KPX D Atilde -47
+KPX D J -38
+KPX D T -47
+KPX D V -50
+KPX D W -20
+KPX D X -60
+KPX D Y -71
+KPX F A -45
+KPX F Aacute -45
+KPX F Acircumflex -45
+KPX F Adieresis -45
+KPX F Agrave -45
+KPX F Aring -45
+KPX F Atilde -45
+KPX F J -100
+KPX F O -34
+KPX F Odieresis -34
+KPX F a -52
+KPX F aacute -52
+KPX F adieresis -49
+KPX F ae -25
+KPX F aring -52
+KPX F comma -172
+KPX F e -61
+KPX F eacute -61
+KPX F hyphen -72
+KPX F i -51
+KPX F j -59
+KPX F o -68
+KPX F oacute -68
+KPX F odieresis -54
+KPX F oe -26
+KPX F oslash -68
+KPX F period -196
+KPX F r -37
+KPX F u -6
+KPX G A 0
+KPX G AE 0
+KPX G Aacute 0
+KPX G Acircumflex 0
+KPX G Adieresis 0
+KPX G Agrave 0
+KPX G Aring 0
+KPX G Atilde 0
+KPX G T -31
+KPX G V -1
+KPX G W -4
+KPX G Y -22
+KPX J A -14
+KPX J AE -23
+KPX J Adieresis -14
+KPX J Aring -14
+KPX K C -50
+KPX K G -46
+KPX K O -45
+KPX K OE -28
+KPX K Oacute -45
+KPX K Odieresis -45
+KPX K S -16
+KPX K T -18
+KPX K a -8
+KPX K adieresis -8
+KPX K ae 19
+KPX K aring -8
+KPX K e -30
+KPX K hyphen -66
+KPX K o -32
+KPX K oacute -32
+KPX K odieresis -32
+KPX K u -33
+KPX K udieresis -33
+KPX K y -72
+KPX L A 9
+KPX L AE 9
+KPX L Aacute 9
+KPX L Adieresis 9
+KPX L Aring 9
+KPX L C -19
+KPX L Ccedilla -19
+KPX L G -18
+KPX L O -15
+KPX L Oacute -15
+KPX L Ocircumflex -15
+KPX L Odieresis -15
+KPX L Ograve -15
+KPX L Otilde -15
+KPX L S -31
+KPX L T -59
+KPX L U -36
+KPX L Udieresis -36
+KPX L V -71
+KPX L W -31
+KPX L Y -60
+KPX L hyphen -1
+KPX L quotedblright -76
+KPX L quoteright -84
+KPX L u -20
+KPX L udieresis -20
+KPX L y -50
+KPX N A -10
+KPX N AE -10
+KPX N Aacute -10
+KPX N Adieresis -10
+KPX N Aring -10
+KPX N C -18
+KPX N Ccedilla -18
+KPX N G -16
+KPX N O -14
+KPX N Oacute -14
+KPX N Odieresis -14
+KPX N a -23
+KPX N aacute -23
+KPX N adieresis -23
+KPX N ae 7
+KPX N aring -23
+KPX N comma -64
+KPX N e -10
+KPX N eacute -10
+KPX N o -14
+KPX N oacute -14
+KPX N odieresis -14
+KPX N oslash -11
+KPX N period -87
+KPX N u -14
+KPX N udieresis -14
+KPX O A -33
+KPX O AE -30
+KPX O Aacute -33
+KPX O Adieresis -33
+KPX O Aring -33
+KPX O T -37
+KPX O V -40
+KPX O W -8
+KPX O X -47
+KPX O Y -61
+KPX Oacute A -33
+KPX Oacute T -37
+KPX Oacute V -40
+KPX Oacute W -8
+KPX Oacute Y -61
+KPX Ocircumflex T -37
+KPX Ocircumflex V -40
+KPX Ocircumflex Y -61
+KPX Odieresis A -33
+KPX Odieresis T -37
+KPX Odieresis V -40
+KPX Odieresis W -8
+KPX Odieresis X -47
+KPX Odieresis Y -61
+KPX Ograve T -37
+KPX Ograve V -40
+KPX Ograve Y -61
+KPX Oslash A -31
+KPX Otilde T -36
+KPX Otilde V -39
+KPX Otilde Y -60
+KPX P A -87
+KPX P AE -81
+KPX P Aacute -87
+KPX P Adieresis -87
+KPX P Aring -87
+KPX P J -90
+KPX P a -57
+KPX P aacute -57
+KPX P adieresis -57
+KPX P ae -29
+KPX P aring -57
+KPX P comma -161
+KPX P e -47
+KPX P eacute -47
+KPX P hyphen -52
+KPX P o -53
+KPX P oacute -53
+KPX P odieresis -53
+KPX P oe -18
+KPX P oslash -53
+KPX P period -185
+KPX R C -32
+KPX R Ccedilla -33
+KPX R G -31
+KPX R O -29
+KPX R OE -8
+KPX R Oacute -29
+KPX R Odieresis -29
+KPX R T -35
+KPX R U -36
+KPX R Udieresis -36
+KPX R V -42
+KPX R W -21
+KPX R Y -36
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae 27
+KPX R aring 0
+KPX R e -22
+KPX R eacute -22
+KPX R hyphen -53
+KPX R o -23
+KPX R oacute -23
+KPX R odieresis -23
+KPX R oe 15
+KPX R u -16
+KPX R uacute -16
+KPX R udieresis -16
+KPX R y -20
+KPX S A -28
+KPX S AE -28
+KPX S Aacute -28
+KPX S Adieresis -28
+KPX S Aring -28
+KPX S T -48
+KPX S V -18
+KPX S W -23
+KPX S Y -39
+KPX S t -25
+KPX T A -34
+KPX T AE -35
+KPX T Aacute -34
+KPX T Acircumflex -34
+KPX T Adieresis -34
+KPX T Agrave -34
+KPX T Aring -34
+KPX T Atilde -34
+KPX T C -36
+KPX T G -35
+KPX T J -88
+KPX T O -34
+KPX T OE -12
+KPX T Oacute -34
+KPX T Ocircumflex -34
+KPX T Odieresis -34
+KPX T Ograve -34
+KPX T Oslash -34
+KPX T Otilde -34
+KPX T S -50
+KPX T V 4
+KPX T W -1
+KPX T Y -17
+KPX T a -68
+KPX T ae -38
+KPX T c -83
+KPX T colon -145
+KPX T comma -116
+KPX T e -83
+KPX T g -76
+KPX T guillemotleft -129
+KPX T guilsinglleft -129
+KPX T hyphen -99
+KPX T i -51
+KPX T j -59
+KPX T o -87
+KPX T oslash -60
+KPX T period -145
+KPX T r -37
+KPX T s -70
+KPX T semicolon -119
+KPX T u -92
+KPX T v -98
+KPX T w -96
+KPX T y -108
+KPX U A -26
+KPX U AE -35
+KPX U Aacute -26
+KPX U Acircumflex -26
+KPX U Adieresis -26
+KPX U Aring -26
+KPX U Atilde -26
+KPX U comma -80
+KPX U m 3
+KPX U n -22
+KPX U p -5
+KPX U period -105
+KPX U r -47
+KPX Uacute A -26
+KPX Uacute comma -80
+KPX Uacute m 3
+KPX Uacute n -22
+KPX Uacute p -5
+KPX Uacute period -105
+KPX Uacute r -47
+KPX Ucircumflex A -26
+KPX Udieresis A -26
+KPX Udieresis b 17
+KPX Udieresis comma -80
+KPX Udieresis m 3
+KPX Udieresis n -22
+KPX Udieresis p -5
+KPX Udieresis period -105
+KPX Udieresis r -47
+KPX Ugrave A -26
+KPX V A -10
+KPX V AE -19
+KPX V Aacute -10
+KPX V Acircumflex -10
+KPX V Adieresis -10
+KPX V Agrave -10
+KPX V Aring -10
+KPX V Atilde -10
+KPX V C -39
+KPX V G -38
+KPX V O -37
+KPX V Oacute -37
+KPX V Ocircumflex -37
+KPX V Odieresis -37
+KPX V Ograve -37
+KPX V Oslash -38
+KPX V Otilde -38
+KPX V S -41
+KPX V T 4
+KPX V a -65
+KPX V ae -37
+KPX V colon -130
+KPX V comma -134
+KPX V e -56
+KPX V g -57
+KPX V guillemotleft -83
+KPX V guilsinglleft -83
+KPX V hyphen -49
+KPX V i -65
+KPX V o -60
+KPX V oslash -57
+KPX V period -158
+KPX V r -51
+KPX V semicolon -121
+KPX V u -20
+KPX V y -24
+KPX W A -16
+KPX W AE -21
+KPX W Aacute -16
+KPX W Acircumflex -16
+KPX W Adieresis -16
+KPX W Agrave -16
+KPX W Aring -16
+KPX W Atilde -16
+KPX W C -14
+KPX W G -12
+KPX W O -10
+KPX W Oacute -10
+KPX W Ocircumflex -10
+KPX W Odieresis -10
+KPX W Ograve -10
+KPX W Oslash -7
+KPX W Otilde -10
+KPX W S -29
+KPX W T -2
+KPX W a -24
+KPX W ae 6
+KPX W colon -93
+KPX W comma -71
+KPX W e -10
+KPX W g -11
+KPX W guillemotleft -38
+KPX W guilsinglleft -38
+KPX W hyphen -7
+KPX W i -48
+KPX W o -14
+KPX W oslash -11
+KPX W period -95
+KPX W r -34
+KPX W semicolon -74
+KPX W u -2
+KPX W y -6
+KPX X C -52
+KPX X O -48
+KPX X Odieresis -48
+KPX X Q -48
+KPX X a -14
+KPX X e -36
+KPX X hyphen -81
+KPX X o -38
+KPX X u -39
+KPX X y -57
+KPX Y A -31
+KPX Y AE -34
+KPX Y Aacute -31
+KPX Y Acircumflex -31
+KPX Y Adieresis -31
+KPX Y Agrave -31
+KPX Y Aring -31
+KPX Y Atilde -31
+KPX Y C -60
+KPX Y G -60
+KPX Y O -59
+KPX Y Oacute -59
+KPX Y Ocircumflex -59
+KPX Y Odieresis -59
+KPX Y Ograve -59
+KPX Y Oslash -59
+KPX Y Otilde -59
+KPX Y S -62
+KPX Y T -17
+KPX Y a -67
+KPX Y ae -40
+KPX Y colon -145
+KPX Y comma -116
+KPX Y e -81
+KPX Y g -84
+KPX Y guillemotleft -119
+KPX Y guilsinglleft -119
+KPX Y hyphen -96
+KPX Y i -63
+KPX Y o -86
+KPX Y oslash -59
+KPX Y p -39
+KPX Y period -144
+KPX Y semicolon -119
+KPX Y u -50
+KPX Y v -44
+KPX Z v -54
+KPX Z y -64
+KPX a j -93
+KPX a quoteright -60
+KPX a v -33
+KPX a w -23
+KPX a y -44
+KPX aacute v -33
+KPX aacute w -23
+KPX aacute y -44
+KPX adieresis v -33
+KPX adieresis w -23
+KPX adieresis y -44
+KPX ae v 16
+KPX ae w 16
+KPX ae y 5
+KPX agrave v -33
+KPX agrave w -23
+KPX agrave y -44
+KPX aring v -33
+KPX aring w -23
+KPX aring y -44
+KPX b v -17
+KPX b w 0
+KPX b y -28
+KPX c h -6
+KPX c k -12
+KPX comma one -148
+KPX comma quotedblright -123
+KPX comma quoteright -142
+KPX e quoteright -43
+KPX e t -34
+KPX e v -28
+KPX e w -20
+KPX e x -5
+KPX e y -39
+KPX eacute v -28
+KPX eacute w -20
+KPX eacute y -39
+KPX ecircumflex v -28
+KPX ecircumflex w -20
+KPX ecircumflex y -39
+KPX eight four -65
+KPX eight one -85
+KPX eight seven -77
+KPX f a -44
+KPX f aacute -44
+KPX f adieresis -26
+KPX f ae -17
+KPX f aring -44
+KPX f e -58
+KPX f eacute -58
+KPX f f -46
+KPX f i -40
+KPX f j -63
+KPX f l -31
+KPX f o -65
+KPX f oacute -65
+KPX f odieresis -31
+KPX f oe -23
+KPX f oslash -36
+KPX f quoteright -62
+KPX f s -46
+KPX f t -10
+KPX five four -56
+KPX five one -90
+KPX five seven -78
+KPX four four -68
+KPX four one -73
+KPX four seven -99
+KPX g a -14
+KPX g adieresis -14
+KPX g ae 13
+KPX g aring -14
+KPX g e -7
+KPX g eacute -7
+KPX g l -37
+KPX g oacute -12
+KPX g odieresis -12
+KPX g r -4
+KPX guillemotright A -50
+KPX guillemotright AE -46
+KPX guillemotright Aacute -50
+KPX guillemotright Adieresis -50
+KPX guillemotright Aring -50
+KPX guillemotright T -128
+KPX guillemotright V -80
+KPX guillemotright W -37
+KPX guillemotright Y -119
+KPX guilsinglright A -50
+KPX guilsinglright AE -46
+KPX guilsinglright Aacute -50
+KPX guilsinglright Adieresis -50
+KPX guilsinglright Aring -50
+KPX guilsinglright T -128
+KPX guilsinglright V -80
+KPX guilsinglright W -37
+KPX guilsinglright Y -119
+KPX h quoteright -52
+KPX h y -37
+KPX hyphen A -29
+KPX hyphen AE -23
+KPX hyphen Aacute -29
+KPX hyphen Adieresis -29
+KPX hyphen Aring -29
+KPX hyphen T -98
+KPX hyphen V -44
+KPX hyphen W -4
+KPX hyphen Y -95
+KPX i T -64
+KPX i j -146
+KPX k a -12
+KPX k aacute -12
+KPX k adieresis -12
+KPX k ae 15
+KPX k aring -12
+KPX k comma -60
+KPX k e -34
+KPX k eacute -34
+KPX k g -43
+KPX k hyphen -104
+KPX k o -35
+KPX k oacute -35
+KPX k odieresis -35
+KPX k period -89
+KPX k s -14
+KPX k u -7
+KPX k udieresis -7
+KPX l v -86
+KPX l y -96
+KPX m p 19
+KPX m v 7
+KPX m w 13
+KPX m y -3
+KPX n T -48
+KPX n p -8
+KPX n quoteright -50
+KPX n v -25
+KPX n w -14
+KPX n y -36
+KPX nine four -58
+KPX nine one -84
+KPX nine seven -75
+KPX o T -89
+KPX o quoteright -41
+KPX o t -24
+KPX o v -25
+KPX o w -7
+KPX o x -28
+KPX o y -36
+KPX oacute v -25
+KPX oacute w -7
+KPX oacute y -36
+KPX ocircumflex t -24
+KPX odieresis t -24
+KPX odieresis v -25
+KPX odieresis w -7
+KPX odieresis x -28
+KPX odieresis y -36
+KPX ograve v -25
+KPX ograve w -7
+KPX ograve y -36
+KPX one comma -99
+KPX one eight -94
+KPX one five -76
+KPX one four -127
+KPX one nine -81
+KPX one one -69
+KPX one period -128
+KPX one seven -147
+KPX one six -119
+KPX one three -69
+KPX one two -54
+KPX one zero -102
+KPX p t -20
+KPX p y -25
+KPX period one -125
+KPX period quotedblright -114
+KPX period quoteright -133
+KPX q c -4
+KPX q u 37
+KPX quotedblbase A -6
+KPX quotedblbase AE -6
+KPX quotedblbase T -82
+KPX quotedblbase V -85
+KPX quotedblbase W -24
+KPX quotedblbase Y -83
+KPX quotedblleft A -66
+KPX quotedblleft AE -57
+KPX quotedblleft Aacute -66
+KPX quotedblleft Adieresis -66
+KPX quotedblleft Aring -66
+KPX quotedblleft T -46
+KPX quotedblleft V -18
+KPX quotedblleft W -8
+KPX quotedblleft Y -46
+KPX quotedblright A -67
+KPX quotedblright AE -76
+KPX quotedblright Aacute -66
+KPX quotedblright Adieresis -66
+KPX quotedblright Aring -66
+KPX quotedblright T -53
+KPX quotedblright V -22
+KPX quotedblright W -26
+KPX quotedblright Y -43
+KPX quoteleft A -87
+KPX quoteleft AE -78
+KPX quoteleft Aacute -87
+KPX quoteleft Adieresis -87
+KPX quoteleft Aring -87
+KPX quoteleft T -67
+KPX quoteleft V -39
+KPX quoteleft W -29
+KPX quoteleft Y -67
+KPX quoteright A -145
+KPX quoteright AE -154
+KPX quoteright Aacute -145
+KPX quoteright Adieresis -145
+KPX quoteright Aring -145
+KPX quoteright comma -201
+KPX quoteright d -129
+KPX quoteright o -135
+KPX quoteright period -224
+KPX quoteright r -150
+KPX quoteright s -144
+KPX quoteright t -118
+KPX quoteright v -112
+KPX quoteright w -108
+KPX quoteright y -122
+KPX r a -26
+KPX r aacute -26
+KPX r acircumflex -26
+KPX r adieresis -26
+KPX r ae 1
+KPX r agrave -26
+KPX r aring -26
+KPX r c -26
+KPX r ccedilla -34
+KPX r colon -86
+KPX r comma -104
+KPX r d -18
+KPX r e -17
+KPX r eacute -17
+KPX r ecircumflex -17
+KPX r egrave -17
+KPX r f -24
+KPX r g -15
+KPX r h -24
+KPX r hyphen -125
+KPX r i -34
+KPX r j -42
+KPX r k -34
+KPX r l -51
+KPX r m 27
+KPX r n 0
+KPX r o -24
+KPX r oacute -24
+KPX r ocircumflex -24
+KPX r odieresis -24
+KPX r oe 13
+KPX r ograve -24
+KPX r oslash -24
+KPX r p 21
+KPX r period -133
+KPX r q -16
+KPX r quoteright -44
+KPX r r -20
+KPX r s -29
+KPX r semicolon -75
+KPX r t 11
+KPX r u 11
+KPX r v 17
+KPX r w 17
+KPX r x -4
+KPX r y 6
+KPX r z -23
+KPX s quoteright -51
+KPX s t -17
+KPX seven colon -154
+KPX seven comma -146
+KPX seven eight -86
+KPX seven five -91
+KPX seven four -116
+KPX seven one -74
+KPX seven period -169
+KPX seven seven -69
+KPX seven six -104
+KPX seven three -79
+KPX seven two -76
+KPX six four -52
+KPX six one -68
+KPX six seven -55
+KPX t S -40
+KPX t a -25
+KPX t aacute -25
+KPX t adieresis -25
+KPX t ae 2
+KPX t aring -25
+KPX t colon -107
+KPX t e -43
+KPX t eacute -43
+KPX t h -8
+KPX t o -45
+KPX t oacute -45
+KPX t odieresis -45
+KPX t quoteright -100
+KPX t semicolon -86
+KPX three four -58
+KPX three one -82
+KPX three seven -75
+KPX two four -97
+KPX two one -73
+KPX two seven -79
+KPX u quoteright -43
+KPX v a -9
+KPX v aacute -9
+KPX v acircumflex -9
+KPX v adieresis -9
+KPX v ae 17
+KPX v agrave -9
+KPX v aring -9
+KPX v atilde -9
+KPX v c -22
+KPX v colon -75
+KPX v comma -118
+KPX v e -17
+KPX v eacute -17
+KPX v ecircumflex -17
+KPX v egrave -17
+KPX v g -14
+KPX v hyphen -30
+KPX v l -87
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -23
+KPX v period -143
+KPX v s -22
+KPX v semicolon -66
+KPX w a -9
+KPX w aacute -9
+KPX w acircumflex -9
+KPX w adieresis -9
+KPX w ae 17
+KPX w agrave -9
+KPX w aring -9
+KPX w atilde -9
+KPX w c -12
+KPX w colon -75
+KPX w comma -75
+KPX w e -4
+KPX w eacute -4
+KPX w ecircumflex -4
+KPX w egrave -4
+KPX w g -6
+KPX w hyphen -4
+KPX w l -53
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -6
+KPX w period -99
+KPX w s -22
+KPX w semicolon -66
+KPX x a -8
+KPX x c -35
+KPX x e -30
+KPX x eacute -30
+KPX x o -31
+KPX x q -33
+KPX y a -20
+KPX y aacute -20
+KPX y acircumflex -20
+KPX y adieresis -20
+KPX y ae 6
+KPX y agrave -20
+KPX y aring -20
+KPX y atilde -20
+KPX y c -33
+KPX y colon -86
+KPX y comma -122
+KPX y e -28
+KPX y eacute -28
+KPX y ecircumflex -28
+KPX y egrave -28
+KPX y g -25
+KPX y hyphen -29
+KPX y l -98
+KPX y o -34
+KPX y oacute -34
+KPX y odieresis -34
+KPX y ograve -34
+KPX y oslash -34
+KPX y period -148
+KPX y s -33
+KPX y semicolon -77
+KPX zero four -64
+KPX zero one -91
+KPX zero seven -82
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/ucrro8a.pfb b/Master/tlpkg/tlgs/lib/fonts/ucrro8a.pfb
new file mode 100644
index 00000000000..107a513372d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/ucrro8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvb8a.afm b/Master/tlpkg/tlgs/lib/fonts/uhvb8a.afm
new file mode 100644
index 00000000000..fe41636b63c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvb8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-Bold
+FullName Nimbus Sans L Bold
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -155
+UnderlineThickness 69
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -173 -307 1003 949
+CapHeight 729
+XHeight 540
+Descender -217
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 214 0 214 0 ;
+C 33 ; WX 333 ; N exclam ; B 112 0 262 726 ;
+C 34 ; WX 474 ; N quotedbl ; B 50 470 424 729 ;
+C 35 ; WX 556 ; N numbersign ; B 3 -32 553 697 ;
+C 36 ; WX 556 ; N dollar ; B 22 -126 527 763 ;
+C 37 ; WX 889 ; N percent ; B 22 -20 863 709 ;
+C 38 ; WX 722 ; N ampersand ; B 55 -23 694 723 ;
+C 39 ; WX 278 ; N quoteright ; B 66 469 201 729 ;
+C 40 ; WX 333 ; N parenleft ; B 40 -200 303 729 ;
+C 41 ; WX 333 ; N parenright ; B 22 -200 285 729 ;
+C 42 ; WX 389 ; N asterisk ; B 23 407 357 729 ;
+C 43 ; WX 584 ; N plus ; B 50 -10 533 473 ;
+C 44 ; WX 278 ; N comma ; B 64 -174 214 146 ;
+C 45 ; WX 333 ; N hyphen ; B 26 207 298 342 ;
+C 46 ; WX 278 ; N period ; B 64 0 214 146 ;
+C 47 ; WX 278 ; N slash ; B 2 -14 275 714 ;
+C 48 ; WX 556 ; N zero ; B 29 -23 517 724 ;
+C 49 ; WX 556 ; N one ; B 68 0 378 709 ;
+C 50 ; WX 556 ; N two ; B 30 0 515 724 ;
+C 51 ; WX 556 ; N three ; B 29 -23 516 724 ;
+C 52 ; WX 556 ; N four ; B 24 0 522 709 ;
+C 53 ; WX 556 ; N five ; B 27 -23 517 709 ;
+C 54 ; WX 556 ; N six ; B 32 -23 519 724 ;
+C 55 ; WX 556 ; N seven ; B 29 0 528 709 ;
+C 56 ; WX 556 ; N eight ; B 22 -23 525 724 ;
+C 57 ; WX 556 ; N nine ; B 28 -24 516 724 ;
+C 58 ; WX 333 ; N colon ; B 113 0 263 520 ;
+C 59 ; WX 333 ; N semicolon ; B 113 -174 263 520 ;
+C 60 ; WX 584 ; N less ; B 40 -10 529 474 ;
+C 61 ; WX 584 ; N equal ; B 50 52 534 411 ;
+C 62 ; WX 584 ; N greater ; B 40 -10 529 474 ;
+C 63 ; WX 611 ; N question ; B 64 0 556 744 ;
+C 64 ; WX 975 ; N at ; B 27 -138 947 745 ;
+C 65 ; WX 722 ; N A ; B 26 0 703 729 ;
+C 66 ; WX 722 ; N B ; B 82 0 666 729 ;
+C 67 ; WX 722 ; N C ; B 44 -23 685 741 ;
+C 68 ; WX 722 ; N D ; B 77 0 681 729 ;
+C 69 ; WX 667 ; N E ; B 79 0 624 729 ;
+C 70 ; WX 611 ; N F ; B 74 0 586 729 ;
+C 71 ; WX 778 ; N G ; B 42 -23 711 741 ;
+C 72 ; WX 722 ; N H ; B 68 0 657 729 ;
+C 73 ; WX 278 ; N I ; B 63 0 213 729 ;
+C 74 ; WX 556 ; N J ; B 24 -23 486 729 ;
+C 75 ; WX 722 ; N K ; B 74 0 717 729 ;
+C 76 ; WX 611 ; N L ; B 80 0 579 729 ;
+C 77 ; WX 833 ; N M ; B 66 0 776 729 ;
+C 78 ; WX 722 ; N N ; B 68 0 661 729 ;
+C 79 ; WX 778 ; N O ; B 40 -23 742 741 ;
+C 80 ; WX 667 ; N P ; B 76 0 633 729 ;
+C 81 ; WX 778 ; N Q ; B 43 -54 745 741 ;
+C 82 ; WX 722 ; N R ; B 80 0 677 729 ;
+C 83 ; WX 667 ; N S ; B 32 -23 633 741 ;
+C 84 ; WX 611 ; N T ; B 14 0 598 729 ;
+C 85 ; WX 722 ; N U ; B 76 -23 654 729 ;
+C 86 ; WX 667 ; N V ; B 24 0 647 729 ;
+C 87 ; WX 944 ; N W ; B 13 0 932 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 653 729 ;
+C 89 ; WX 667 ; N Y ; B 27 0 650 729 ;
+C 90 ; WX 611 ; N Z ; B 30 0 578 729 ;
+C 91 ; WX 333 ; N bracketleft ; B 66 -200 308 729 ;
+C 92 ; WX 278 ; N backslash ; B -12 -14 289 714 ;
+C 93 ; WX 333 ; N bracketright ; B 18 -200 260 729 ;
+C 94 ; WX 584 ; N asciicircum ; B 61 270 522 695 ;
+C 95 ; WX 556 ; N underscore ; B -22 -189 578 -120 ;
+C 96 ; WX 278 ; N quoteleft ; B 67 469 202 729 ;
+C 97 ; WX 556 ; N a ; B 28 -23 524 549 ;
+C 98 ; WX 611 ; N b ; B 59 -23 575 729 ;
+C 99 ; WX 556 ; N c ; B 34 -23 522 549 ;
+C 100 ; WX 611 ; N d ; B 29 -23 545 729 ;
+C 101 ; WX 556 ; N e ; B 22 -23 525 549 ;
+C 102 ; WX 333 ; N f ; B 14 0 313 729 ;
+C 103 ; WX 611 ; N g ; B 34 -218 541 549 ;
+C 104 ; WX 611 ; N h ; B 67 0 541 729 ;
+C 105 ; WX 278 ; N i ; B 67 0 207 729 ;
+C 106 ; WX 278 ; N j ; B 4 -218 210 729 ;
+C 107 ; WX 556 ; N k ; B 59 0 548 729 ;
+C 108 ; WX 278 ; N l ; B 67 0 207 729 ;
+C 109 ; WX 889 ; N m ; B 60 0 824 549 ;
+C 110 ; WX 611 ; N n ; B 63 0 546 549 ;
+C 111 ; WX 611 ; N o ; B 35 -23 569 549 ;
+C 112 ; WX 611 ; N p ; B 58 -218 574 549 ;
+C 113 ; WX 611 ; N q ; B 28 -218 544 549 ;
+C 114 ; WX 389 ; N r ; B 63 0 370 549 ;
+C 115 ; WX 556 ; N s ; B 29 -23 520 549 ;
+C 116 ; WX 333 ; N t ; B 14 -23 301 674 ;
+C 117 ; WX 611 ; N u ; B 58 -23 541 540 ;
+C 118 ; WX 556 ; N v ; B 14 0 536 540 ;
+C 119 ; WX 778 ; N w ; B 5 0 766 540 ;
+C 120 ; WX 556 ; N x ; B 16 0 535 540 ;
+C 121 ; WX 556 ; N y ; B 9 -219 538 540 ;
+C 122 ; WX 500 ; N z ; B 21 0 468 540 ;
+C 123 ; WX 389 ; N braceleft ; B 37 -200 317 729 ;
+C 124 ; WX 280 ; N bar ; B 100 -200 180 729 ;
+C 125 ; WX 389 ; N braceright ; B 72 -200 352 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 60 142 519 314 ;
+C 161 ; WX 333 ; N exclamdown ; B 66 -186 216 540 ;
+C 162 ; WX 556 ; N cent ; B 36 -124 522 634 ;
+C 163 ; WX 556 ; N sterling ; B 31 -23 537 715 ;
+C 164 ; WX 167 ; N fraction ; B -173 -20 337 715 ;
+C 165 ; WX 556 ; N yen ; B 5 0 552 704 ;
+C 166 ; WX 556 ; N florin ; B 21 -220 535 744 ;
+C 167 ; WX 556 ; N section ; B 33 -201 518 723 ;
+C 168 ; WX 556 ; N currency ; B 26 100 530 604 ;
+C 169 ; WX 238 ; N quotesingle ; B 50 470 188 729 ;
+C 170 ; WX 500 ; N quotedblleft ; B 71 469 433 729 ;
+C 171 ; WX 556 ; N guillemotleft ; B 88 72 468 481 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 83 72 250 481 ;
+C 173 ; WX 333 ; N guilsinglright ; B 80 72 247 481 ;
+C 174 ; WX 611 ; N fi ; B 9 0 548 729 ;
+C 175 ; WX 611 ; N fl ; B 12 0 546 729 ;
+C 177 ; WX 556 ; N endash ; B -9 207 557 311 ;
+C 178 ; WX 556 ; N dagger ; B 31 -194 523 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 28 -194 520 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 64 169 188 292 ;
+C 182 ; WX 556 ; N paragraph ; B 19 -191 529 729 ;
+C 183 ; WX 350 ; N bullet ; B 50 175 300 425 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 66 -135 201 125 ;
+C 185 ; WX 500 ; N quotedblbase ; B 72 -135 432 125 ;
+C 186 ; WX 500 ; N quotedblright ; B 73 469 440 729 ;
+C 187 ; WX 556 ; N guillemotright ; B 88 72 462 481 ;
+C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ;
+C 189 ; WX 1000 ; N perthousand ; B 11 -22 990 739 ;
+C 191 ; WX 611 ; N questiondown ; B 51 -204 544 540 ;
+C 193 ; WX 333 ; N grave ; B 17 607 213 757 ;
+C 194 ; WX 333 ; N acute ; B 121 607 317 757 ;
+C 195 ; WX 333 ; N circumflex ; B 8 607 326 757 ;
+C 196 ; WX 333 ; N tilde ; B -9 621 345 749 ;
+C 197 ; WX 333 ; N macron ; B 16 640 315 719 ;
+C 198 ; WX 333 ; N breve ; B 35 605 299 748 ;
+C 199 ; WX 333 ; N dotaccent ; B 112 621 222 743 ;
+C 200 ; WX 333 ; N dieresis ; B 18 621 314 743 ;
+C 202 ; WX 333 ; N ring ; B 77 590 257 770 ;
+C 203 ; WX 333 ; N cedilla ; B 27 -220 294 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -44 610 340 757 ;
+C 206 ; WX 333 ; N ogonek ; B 45 -234 268 0 ;
+C 207 ; WX 333 ; N caron ; B 9 607 327 757 ;
+C 208 ; WX 1000 ; N emdash ; B -7 207 1003 311 ;
+C 225 ; WX 1000 ; N AE ; B 1 0 966 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 31 262 329 729 ;
+C 232 ; WX 611 ; N Lslash ; B 0 0 597 729 ;
+C 233 ; WX 778 ; N Oslash ; B 31 -39 755 749 ;
+C 234 ; WX 1000 ; N OE ; B 28 -23 970 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 23 262 343 729 ;
+C 241 ; WX 889 ; N ae ; B 27 -24 857 549 ;
+C 245 ; WX 278 ; N dotlessi ; B 67 0 207 540 ;
+C 248 ; WX 278 ; N lslash ; B 0 0 252 729 ;
+C 249 ; WX 611 ; N oslash ; B 11 -38 598 557 ;
+C 250 ; WX 944 ; N oe ; B 23 -23 920 549 ;
+C 251 ; WX 611 ; N germandbls ; B 67 -17 575 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 76 -23 654 922 ;
+C -1 ; WX 722 ; N Uacute ; B 76 -23 654 936 ;
+C -1 ; WX 667 ; N Scedilla ; B 32 -220 633 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ;
+C -1 ; WX 667 ; N Scaron ; B 32 -23 633 936 ;
+C -1 ; WX 722 ; N Rcaron ; B 80 0 677 936 ;
+C -1 ; WX 722 ; N Racute ; B 80 0 677 936 ;
+C -1 ; WX 667 ; N Sacute ; B 32 -23 633 936 ;
+C -1 ; WX 778 ; N Otilde ; B 40 -23 742 928 ;
+C -1 ; WX 611 ; N ucircumflex ; B 58 -23 541 757 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 40 -23 742 936 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 76 -23 654 936 ;
+C -1 ; WX 667 ; N Yacute ; B 27 0 650 936 ;
+C -1 ; WX 722 ; N Eth ; B 0 0 681 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 0 0 681 729 ;
+C -1 ; WX 611 ; N Zacute ; B 30 0 578 936 ;
+C -1 ; WX 722 ; N Uring ; B 76 -23 654 949 ;
+C -1 ; WX 611 ; N gbreve ; B 34 -218 541 748 ;
+C -1 ; WX 556 ; N eogonek ; B 21 -234 525 549 ;
+C -1 ; WX 556 ; N edotaccent ; B 22 -23 525 743 ;
+C -1 ; WX 556 ; N ecaron ; B 22 -23 525 757 ;
+C -1 ; WX 722 ; N Ugrave ; B 76 -23 654 936 ;
+C -1 ; WX 667 ; N Thorn ; B 76 0 633 729 ;
+C -1 ; WX 556 ; N eacute ; B 22 -23 525 757 ;
+C -1 ; WX 556 ; N edieresis ; B 22 -23 525 743 ;
+C -1 ; WX 707 ; N dcaron ; B 29 -23 720 729 ;
+C -1 ; WX 556 ; N ccedilla ; B 34 -220 522 549 ;
+C -1 ; WX 556 ; N ccaron ; B 34 -23 522 757 ;
+C -1 ; WX 556 ; N cacute ; B 34 -23 522 757 ;
+C -1 ; WX 556 ; N aogonek ; B 28 -233 548 549 ;
+C -1 ; WX 556 ; N aring ; B 28 -23 524 770 ;
+C -1 ; WX 556 ; N atilde ; B 28 -23 524 749 ;
+C -1 ; WX 556 ; N abreve ; B 28 -23 524 748 ;
+C -1 ; WX 556 ; N egrave ; B 22 -23 525 757 ;
+C -1 ; WX 556 ; N agrave ; B 28 -23 524 757 ;
+C -1 ; WX 556 ; N aacute ; B 28 -23 524 757 ;
+C -1 ; WX 556 ; N adieresis ; B 28 -23 524 743 ;
+C -1 ; WX 722 ; N Uogonek ; B 76 -234 654 729 ;
+C -1 ; WX 611 ; N ugrave ; B 58 -23 541 757 ;
+C -1 ; WX 611 ; N uacute ; B 58 -23 541 757 ;
+C -1 ; WX 611 ; N udieresis ; B 58 -23 541 743 ;
+C -1 ; WX 385 ; N tcaron ; B 14 -23 398 829 ;
+C -1 ; WX 556 ; N scommaaccent ; B 29 -307 520 549 ;
+C -1 ; WX 611 ; N Zcaron ; B 30 0 578 936 ;
+C -1 ; WX 556 ; N ecircumflex ; B 22 -23 525 757 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 76 -23 654 936 ;
+C -1 ; WX 556 ; N acircumflex ; B 28 -23 524 757 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 30 0 578 922 ;
+C -1 ; WX 556 ; N scaron ; B 29 -23 520 757 ;
+C -1 ; WX 722 ; N Amacron ; B 26 0 703 898 ;
+C -1 ; WX 556 ; N sacute ; B 29 -23 520 757 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 14 -307 598 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 27 0 650 922 ;
+C -1 ; WX 611 ; N thorn ; B 58 -218 574 729 ;
+C -1 ; WX 667 ; N Emacron ; B 79 0 624 898 ;
+C -1 ; WX 778 ; N Ograve ; B 40 -23 742 936 ;
+C -1 ; WX 778 ; N Oacute ; B 40 -23 742 936 ;
+C -1 ; WX 778 ; N Odieresis ; B 40 -23 742 922 ;
+C -1 ; WX 722 ; N Ntilde ; B 68 0 661 928 ;
+C -1 ; WX 722 ; N Ncaron ; B 68 0 661 936 ;
+C -1 ; WX 722 ; N Nacute ; B 68 0 661 936 ;
+C -1 ; WX 611 ; N Lcaron ; B 80 0 579 729 ;
+C -1 ; WX 611 ; N Lacute ; B 80 0 579 936 ;
+C -1 ; WX 278 ; N Idotaccent ; B 63 0 213 922 ;
+C -1 ; WX 389 ; N racute ; B 63 0 370 757 ;
+C -1 ; WX 278 ; N Icircumflex ; B -19 0 299 936 ;
+C -1 ; WX 611 ; N ohungarumlaut ; B 35 -23 569 757 ;
+C -1 ; WX 611 ; N otilde ; B 35 -23 569 749 ;
+C -1 ; WX 556 ; N Euro ; B 6 -23 546 724 ;
+C -1 ; WX 611 ; N ocircumflex ; B 35 -23 569 757 ;
+C -1 ; WX 351 ; N onesuperior ; B 40 284 242 709 ;
+C -1 ; WX 351 ; N twosuperior ; B 16 284 328 718 ;
+C -1 ; WX 351 ; N threesuperior ; B 15 271 329 718 ;
+C -1 ; WX 278 ; N Igrave ; B -10 0 213 936 ;
+C -1 ; WX 278 ; N Iacute ; B 63 0 290 936 ;
+C -1 ; WX 278 ; N Imacron ; B 2 0 274 898 ;
+C -1 ; WX 278 ; N Iogonek ; B 34 -233 237 729 ;
+C -1 ; WX 278 ; N Idieresis ; B -9 0 287 922 ;
+C -1 ; WX 778 ; N Gbreve ; B 42 -23 711 927 ;
+C -1 ; WX 722 ; N Umacron ; B 76 -23 654 898 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B 74 -307 717 729 ;
+C -1 ; WX 611 ; N ograve ; B 35 -23 569 757 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 32 -307 633 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 79 -233 648 729 ;
+C -1 ; WX 611 ; N oacute ; B 35 -23 569 757 ;
+C -1 ; WX 667 ; N Edotaccent ; B 79 0 624 922 ;
+C -1 ; WX 278 ; N iogonek ; B 34 -233 231 729 ;
+C -1 ; WX 611 ; N gcommaaccent ; B 34 -218 541 853 ;
+C -1 ; WX 611 ; N odieresis ; B 35 -23 569 743 ;
+C -1 ; WX 611 ; N ntilde ; B 63 0 546 749 ;
+C -1 ; WX 611 ; N ncaron ; B 63 0 546 757 ;
+C -1 ; WX 667 ; N Ecaron ; B 79 0 624 936 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 79 0 624 936 ;
+C -1 ; WX 556 ; N scedilla ; B 29 -220 520 549 ;
+C -1 ; WX 389 ; N rcaron ; B 54 0 372 757 ;
+C -1 ; WX 667 ; N Egrave ; B 79 0 624 936 ;
+C -1 ; WX 667 ; N Eacute ; B 79 0 624 936 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 42 -307 711 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 80 -307 677 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 79 0 624 922 ;
+C -1 ; WX 611 ; N nacute ; B 63 0 546 757 ;
+C -1 ; WX 611 ; N uogonek ; B 58 -233 564 540 ;
+C -1 ; WX 611 ; N umacron ; B 58 -23 541 719 ;
+C -1 ; WX 722 ; N Dcaron ; B 77 0 681 936 ;
+C -1 ; WX 369 ; N lcaron ; B 67 0 382 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 44 -23 685 936 ;
+C -1 ; WX 722 ; N Cacute ; B 44 -23 685 936 ;
+C -1 ; WX 722 ; N Ccedilla ; B 44 -220 685 741 ;
+C -1 ; WX 606 ; N degree ; B 151 383 454 686 ;
+C -1 ; WX 722 ; N Aogonek ; B 26 -233 723 729 ;
+C -1 ; WX 584 ; N minus ; B 40 172 544 291 ;
+C -1 ; WX 584 ; N multiply ; B 79 18 505 444 ;
+C -1 ; WX 584 ; N divide ; B 50 -11 534 474 ;
+C -1 ; WX 722 ; N Aring ; B 26 0 703 949 ;
+C -1 ; WX 1000 ; N trademark ; B 71 273 929 729 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 63 -307 370 549 ;
+C -1 ; WX 278 ; N lacute ; B 67 0 278 936 ;
+C -1 ; WX 611 ; N omacron ; B 35 -23 569 719 ;
+C -1 ; WX 722 ; N Atilde ; B 26 0 703 928 ;
+C -1 ; WX 278 ; N icircumflex ; B -19 0 299 757 ;
+C -1 ; WX 278 ; N igrave ; B -10 0 207 757 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 63 -307 546 549 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 67 -307 207 729 ;
+C -1 ; WX 584 ; N plusminus ; B 56 -16 527 608 ;
+C -1 ; WX 869 ; N onehalf ; B 40 -20 846 715 ;
+C -1 ; WX 869 ; N onequarter ; B 40 -20 850 715 ;
+C -1 ; WX 869 ; N threequarters ; B 15 -20 850 718 ;
+C -1 ; WX 278 ; N iacute ; B 67 0 290 757 ;
+C -1 ; WX 722 ; N Abreve ; B 26 0 703 927 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 59 -307 548 729 ;
+C -1 ; WX 778 ; N Omacron ; B 40 -23 742 898 ;
+C -1 ; WX 278 ; N imacron ; B 7 0 266 719 ;
+C -1 ; WX 556 ; N emacron ; B 22 -23 525 719 ;
+C -1 ; WX 556 ; N amacron ; B 28 -23 524 719 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 14 -307 301 674 ;
+C -1 ; WX 556 ; N ydieresis ; B 9 -219 538 743 ;
+C -1 ; WX 500 ; N zdotaccent ; B 21 0 468 743 ;
+C -1 ; WX 500 ; N zcaron ; B 21 0 468 757 ;
+C -1 ; WX 500 ; N zacute ; B 21 0 468 757 ;
+C -1 ; WX 556 ; N yacute ; B 9 -219 538 757 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 58 -23 559 757 ;
+C -1 ; WX 611 ; N eth ; B 35 -23 569 744 ;
+C -1 ; WX 611 ; N uring ; B 58 -23 541 770 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 40 -23 742 936 ;
+C -1 ; WX 333 ; N commaaccent ; B 112 -307 234 -60 ;
+C -1 ; WX 737 ; N copyright ; B -14 -22 751 743 ;
+C -1 ; WX 737 ; N registered ; B -14 -22 751 743 ;
+C -1 ; WX 722 ; N Acircumflex ; B 26 0 703 936 ;
+C -1 ; WX 278 ; N idieresis ; B -9 0 287 743 ;
+C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ;
+C -1 ; WX 729 ; N Delta ; B 8 0 721 729 ;
+C -1 ; WX 548 ; N notequal ; B 50 -69 534 528 ;
+C -1 ; WX 542 ; N radical ; B 7 -36 512 913 ;
+C -1 ; WX 722 ; N Agrave ; B 26 0 703 936 ;
+C -1 ; WX 722 ; N Aacute ; B 26 0 703 936 ;
+C -1 ; WX 584 ; N lessequal ; B 45 -10 534 639 ;
+C -1 ; WX 584 ; N greaterequal ; B 45 -10 534 639 ;
+C -1 ; WX 584 ; N logicalnot ; B 40 86 544 375 ;
+C -1 ; WX 711 ; N summation ; B 17 -96 694 760 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 68 -307 661 729 ;
+C -1 ; WX 611 ; N dcroat ; B 29 -23 605 729 ;
+C -1 ; WX 280 ; N brokenbar ; B 100 -200 180 729 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 80 -307 579 729 ;
+C -1 ; WX 722 ; N Adieresis ; B 26 0 703 922 ;
+C -1 ; WX 611 ; N mu ; B 58 -220 573 540 ;
+C -1 ; WX 278 ; N .notdef ; B 214 0 214 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -33
+KPX A Ccedilla -33
+KPX A G -35
+KPX A O -34
+KPX A Odieresis -34
+KPX A Q -35
+KPX A T -81
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -66
+KPX A W -51
+KPX A Y -90
+KPX A a -1
+KPX A b -1
+KPX A c -14
+KPX A ccedilla -14
+KPX A comma 19
+KPX A d -13
+KPX A e -9
+KPX A g -14
+KPX A guillemotleft -43
+KPX A guilsinglleft -40
+KPX A hyphen 7
+KPX A o -16
+KPX A period 19
+KPX A q -12
+KPX A quotedblright -65
+KPX A quoteright -61
+KPX A t -18
+KPX A u -12
+KPX A v -37
+KPX A w -23
+KPX A y -35
+KPX Aacute C -33
+KPX Aacute G -35
+KPX Aacute O -34
+KPX Aacute Q -35
+KPX Aacute T -81
+KPX Aacute U -32
+KPX Aacute V -66
+KPX Aacute W -51
+KPX Aacute Y -90
+KPX Aacute a -1
+KPX Aacute b -1
+KPX Aacute c -14
+KPX Aacute comma 19
+KPX Aacute d -13
+KPX Aacute e -9
+KPX Aacute g -14
+KPX Aacute guillemotleft -43
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen 7
+KPX Aacute o -16
+KPX Aacute period 19
+KPX Aacute q -12
+KPX Aacute quoteright -61
+KPX Aacute t -18
+KPX Aacute u -12
+KPX Aacute v -37
+KPX Aacute w -23
+KPX Aacute y -35
+KPX Acircumflex C -33
+KPX Acircumflex G -35
+KPX Acircumflex O -34
+KPX Acircumflex Q -35
+KPX Acircumflex T -81
+KPX Acircumflex U -32
+KPX Acircumflex V -66
+KPX Acircumflex W -51
+KPX Acircumflex Y -90
+KPX Acircumflex comma 19
+KPX Acircumflex period 19
+KPX Adieresis C -33
+KPX Adieresis G -35
+KPX Adieresis O -34
+KPX Adieresis Q -35
+KPX Adieresis T -81
+KPX Adieresis U -32
+KPX Adieresis V -66
+KPX Adieresis W -51
+KPX Adieresis Y -90
+KPX Adieresis a -1
+KPX Adieresis b -1
+KPX Adieresis c -14
+KPX Adieresis comma 19
+KPX Adieresis d -13
+KPX Adieresis g -14
+KPX Adieresis guillemotleft -43
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen 7
+KPX Adieresis o -16
+KPX Adieresis period 19
+KPX Adieresis q -12
+KPX Adieresis quotedblright -65
+KPX Adieresis quoteright -61
+KPX Adieresis t -18
+KPX Adieresis u -12
+KPX Adieresis v -37
+KPX Adieresis w -23
+KPX Adieresis y -35
+KPX Agrave C -33
+KPX Agrave G -35
+KPX Agrave O -34
+KPX Agrave Q -35
+KPX Agrave T -81
+KPX Agrave U -32
+KPX Agrave V -66
+KPX Agrave W -51
+KPX Agrave Y -90
+KPX Agrave comma 19
+KPX Agrave period 19
+KPX Aring C -33
+KPX Aring G -35
+KPX Aring O -34
+KPX Aring Q -35
+KPX Aring T -81
+KPX Aring U -32
+KPX Aring V -66
+KPX Aring W -51
+KPX Aring Y -90
+KPX Aring a -1
+KPX Aring b -1
+KPX Aring c -14
+KPX Aring comma 19
+KPX Aring d -13
+KPX Aring e -9
+KPX Aring g -14
+KPX Aring guillemotleft -43
+KPX Aring guilsinglleft -40
+KPX Aring hyphen 7
+KPX Aring o -16
+KPX Aring period 19
+KPX Aring q -12
+KPX Aring quotedblright -65
+KPX Aring quoteright -61
+KPX Aring t -18
+KPX Aring u -12
+KPX Aring v -37
+KPX Aring w -23
+KPX Aring y -35
+KPX Atilde C -33
+KPX Atilde G -35
+KPX Atilde O -34
+KPX Atilde Q -35
+KPX Atilde T -81
+KPX Atilde U -32
+KPX Atilde V -66
+KPX Atilde W -51
+KPX Atilde Y -90
+KPX Atilde comma 19
+KPX Atilde period 19
+KPX B A -32
+KPX B AE -20
+KPX B Aacute -32
+KPX B Acircumflex -32
+KPX B Adieresis -32
+KPX B Aring -32
+KPX B Atilde -32
+KPX B O -11
+KPX B OE -2
+KPX B Oacute -11
+KPX B Ocircumflex -11
+KPX B Odieresis -11
+KPX B Ograve -11
+KPX B Oslash -5
+KPX B V -39
+KPX B W -27
+KPX B Y -51
+KPX C A -29
+KPX C AE -17
+KPX C Aacute -29
+KPX C Adieresis -29
+KPX C Aring -29
+KPX C H 5
+KPX C K 2
+KPX C O -6
+KPX C Oacute -6
+KPX C Odieresis -6
+KPX Ccedilla A -28
+KPX D A -37
+KPX D Aacute -37
+KPX D Acircumflex -37
+KPX D Adieresis -37
+KPX D Agrave -37
+KPX D Aring -37
+KPX D Atilde -37
+KPX D J 2
+KPX D T -17
+KPX D V -35
+KPX D W -20
+KPX D X -35
+KPX D Y -56
+KPX F A -63
+KPX F Aacute -63
+KPX F Acircumflex -63
+KPX F Adieresis -63
+KPX F Agrave -63
+KPX F Aring -63
+KPX F Atilde -63
+KPX F J -25
+KPX F O -16
+KPX F Odieresis -16
+KPX F a -15
+KPX F aacute -15
+KPX F adieresis -15
+KPX F ae -17
+KPX F aring -15
+KPX F comma -76
+KPX F e -7
+KPX F eacute -7
+KPX F hyphen 11
+KPX F i -7
+KPX F j -9
+KPX F o -14
+KPX F oacute -14
+KPX F odieresis -14
+KPX F oe -8
+KPX F oslash -15
+KPX F period -75
+KPX F r -27
+KPX F u -24
+KPX G A -8
+KPX G AE 4
+KPX G Aacute -8
+KPX G Acircumflex -8
+KPX G Adieresis -8
+KPX G Agrave -8
+KPX G Aring -8
+KPX G Atilde -8
+KPX G T -17
+KPX G V -36
+KPX G W -20
+KPX G Y -56
+KPX J A -32
+KPX J AE -20
+KPX J Adieresis -32
+KPX J Aring -32
+KPX K C -53
+KPX K G -55
+KPX K O -54
+KPX K OE -44
+KPX K Oacute -54
+KPX K Odieresis -54
+KPX K S -30
+KPX K T 13
+KPX K a -3
+KPX K adieresis -3
+KPX K ae 0
+KPX K aring -3
+KPX K e -25
+KPX K hyphen -44
+KPX K o -33
+KPX K oacute -33
+KPX K odieresis -33
+KPX K u -23
+KPX K udieresis -23
+KPX K y -65
+KPX L A 9
+KPX L AE 21
+KPX L Aacute 9
+KPX L Adieresis 9
+KPX L Aring 9
+KPX L C -26
+KPX L Ccedilla -26
+KPX L G -30
+KPX L O -29
+KPX L Oacute -29
+KPX L Ocircumflex -29
+KPX L Odieresis -29
+KPX L Ograve -29
+KPX L Otilde -29
+KPX L S -2
+KPX L T -95
+KPX L U -24
+KPX L Udieresis -24
+KPX L V -90
+KPX L W -68
+KPX L Y -112
+KPX L hyphen -12
+KPX L quotedblright -141
+KPX L quoteright -138
+KPX L u -7
+KPX L udieresis -7
+KPX L y -55
+KPX N A -5
+KPX N AE 7
+KPX N Aacute -5
+KPX N Adieresis -5
+KPX N Aring -5
+KPX N C 9
+KPX N Ccedilla 9
+KPX N G 8
+KPX N O 8
+KPX N Oacute 8
+KPX N Odieresis 8
+KPX N a 13
+KPX N aacute 13
+KPX N adieresis 13
+KPX N ae 13
+KPX N aring 13
+KPX N comma 15
+KPX N e 18
+KPX N eacute 18
+KPX N o 11
+KPX N oacute 11
+KPX N odieresis 11
+KPX N oslash 11
+KPX N period 16
+KPX N u 12
+KPX N udieresis 12
+KPX O A -37
+KPX O AE -26
+KPX O Aacute -37
+KPX O Adieresis -37
+KPX O Aring -37
+KPX O T -20
+KPX O V -36
+KPX O W -21
+KPX O X -36
+KPX O Y -59
+KPX Oacute A -37
+KPX Oacute T -20
+KPX Oacute V -36
+KPX Oacute W -21
+KPX Oacute Y -59
+KPX Ocircumflex T -20
+KPX Ocircumflex V -36
+KPX Ocircumflex Y -59
+KPX Odieresis A -37
+KPX Odieresis T -20
+KPX Odieresis V -36
+KPX Odieresis W -21
+KPX Odieresis X -36
+KPX Odieresis Y -59
+KPX Ograve T -20
+KPX Ograve V -36
+KPX Ograve Y -59
+KPX Oslash A -32
+KPX Otilde T -20
+KPX Otilde V -36
+KPX Otilde Y -59
+KPX P A -65
+KPX P AE -54
+KPX P Aacute -65
+KPX P Adieresis -65
+KPX P Aring -65
+KPX P J -44
+KPX P a -7
+KPX P aacute -7
+KPX P adieresis -7
+KPX P ae -8
+KPX P aring -7
+KPX P comma -94
+KPX P e -8
+KPX P eacute -8
+KPX P hyphen 0
+KPX P o -14
+KPX P oacute -14
+KPX P odieresis -14
+KPX P oe -8
+KPX P oslash -17
+KPX P period -94
+KPX R C -5
+KPX R Ccedilla -5
+KPX R G -6
+KPX R O -6
+KPX R OE 3
+KPX R Oacute -6
+KPX R Odieresis -6
+KPX R T 0
+KPX R U -4
+KPX R Udieresis -4
+KPX R V -26
+KPX R W -17
+KPX R Y -37
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae 0
+KPX R aring 0
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen 15
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe 1
+KPX R u 0
+KPX R uacute 0
+KPX R udieresis 0
+KPX R y 5
+KPX S A -20
+KPX S AE -8
+KPX S Aacute -20
+KPX S Adieresis -20
+KPX S Aring -20
+KPX S T -5
+KPX S V -31
+KPX S W -17
+KPX S Y -43
+KPX S t 1
+KPX T A -87
+KPX T AE -75
+KPX T Aacute -87
+KPX T Acircumflex -87
+KPX T Adieresis -87
+KPX T Agrave -87
+KPX T Aring -87
+KPX T Atilde -87
+KPX T C -20
+KPX T G -22
+KPX T J -87
+KPX T O -22
+KPX T OE -11
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -23
+KPX T Otilde -22
+KPX T S 3
+KPX T V 18
+KPX T W 24
+KPX T Y 16
+KPX T a -73
+KPX T ae -73
+KPX T c -74
+KPX T colon -97
+KPX T comma -67
+KPX T e -69
+KPX T g -75
+KPX T guillemotleft -101
+KPX T guilsinglleft -98
+KPX T hyphen -48
+KPX T i -1
+KPX T j -3
+KPX T o -76
+KPX T oslash -73
+KPX T period -67
+KPX T r -71
+KPX T s -74
+KPX T semicolon -98
+KPX T u -72
+KPX T v -82
+KPX T w -77
+KPX T y -80
+KPX U A -34
+KPX U AE -22
+KPX U Aacute -34
+KPX U Acircumflex -34
+KPX U Adieresis -34
+KPX U Aring -34
+KPX U Atilde -34
+KPX U comma -7
+KPX U m 6
+KPX U n 5
+KPX U p 7
+KPX U period -4
+KPX U r 5
+KPX Uacute A -34
+KPX Uacute comma -7
+KPX Uacute m 6
+KPX Uacute n 5
+KPX Uacute p 7
+KPX Uacute period -4
+KPX Uacute r 5
+KPX Ucircumflex A -34
+KPX Udieresis A -34
+KPX Udieresis b 6
+KPX Udieresis comma -7
+KPX Udieresis m 6
+KPX Udieresis n 5
+KPX Udieresis p 7
+KPX Udieresis period -4
+KPX Udieresis r 5
+KPX Ugrave A -34
+KPX V A -71
+KPX V AE -59
+KPX V Aacute -71
+KPX V Acircumflex -71
+KPX V Adieresis -71
+KPX V Agrave -71
+KPX V Aring -71
+KPX V Atilde -71
+KPX V C -36
+KPX V G -38
+KPX V O -37
+KPX V Oacute -37
+KPX V Ocircumflex -37
+KPX V Odieresis -37
+KPX V Ograve -37
+KPX V Oslash -31
+KPX V Otilde -37
+KPX V S -21
+KPX V T 21
+KPX V a -47
+KPX V ae -48
+KPX V colon -65
+KPX V comma -69
+KPX V e -43
+KPX V g -49
+KPX V guillemotleft -74
+KPX V guilsinglleft -72
+KPX V hyphen -21
+KPX V i -5
+KPX V o -50
+KPX V oslash -48
+KPX V period -69
+KPX V r -34
+KPX V semicolon -67
+KPX V u -34
+KPX V y -10
+KPX W A -54
+KPX W AE -43
+KPX W Aacute -54
+KPX W Acircumflex -54
+KPX W Adieresis -54
+KPX W Agrave -54
+KPX W Aring -54
+KPX W Atilde -54
+KPX W C -20
+KPX W G -22
+KPX W O -21
+KPX W Oacute -21
+KPX W Ocircumflex -21
+KPX W Odieresis -21
+KPX W Ograve -21
+KPX W Oslash -15
+KPX W Otilde -21
+KPX W S -12
+KPX W T 25
+KPX W a -29
+KPX W ae -29
+KPX W colon -53
+KPX W comma -45
+KPX W e -24
+KPX W g -30
+KPX W guillemotleft -55
+KPX W guilsinglleft -53
+KPX W hyphen -3
+KPX W i -1
+KPX W o -31
+KPX W oslash -29
+KPX W period -45
+KPX W r -24
+KPX W semicolon -54
+KPX W u -23
+KPX W y 0
+KPX X C -34
+KPX X O -35
+KPX X Odieresis -35
+KPX X Q -37
+KPX X a -5
+KPX X e -25
+KPX X hyphen -27
+KPX X o -32
+KPX X u -25
+KPX X y -40
+KPX Y A -86
+KPX Y AE -74
+KPX Y Aacute -86
+KPX Y Acircumflex -86
+KPX Y Adieresis -86
+KPX Y Agrave -86
+KPX Y Aring -86
+KPX Y Atilde -86
+KPX Y C -52
+KPX Y G -54
+KPX Y O -54
+KPX Y Oacute -54
+KPX Y Ocircumflex -54
+KPX Y Odieresis -54
+KPX Y Ograve -54
+KPX Y Oslash -47
+KPX Y Otilde -54
+KPX Y S -29
+KPX Y T 22
+KPX Y a -66
+KPX Y ae -67
+KPX Y colon -81
+KPX Y comma -78
+KPX Y e -63
+KPX Y g -68
+KPX Y guillemotleft -98
+KPX Y guilsinglleft -96
+KPX Y hyphen -50
+KPX Y i -3
+KPX Y o -70
+KPX Y oslash -67
+KPX Y p -45
+KPX Y period -78
+KPX Y semicolon -83
+KPX Y u -48
+KPX Y v -27
+KPX Z v -11
+KPX Z y -9
+KPX a j -1
+KPX a quoteright -11
+KPX a v -19
+KPX a w -5
+KPX a y -17
+KPX aacute v -19
+KPX aacute w -5
+KPX aacute y -17
+KPX adieresis v -19
+KPX adieresis w -5
+KPX adieresis y -17
+KPX ae v -21
+KPX ae w -7
+KPX ae y -19
+KPX agrave v -19
+KPX agrave w -5
+KPX agrave y -17
+KPX aring v -19
+KPX aring w -5
+KPX aring y -17
+KPX b v -20
+KPX b w -7
+KPX b y -20
+KPX c h 0
+KPX c k 3
+KPX comma one -73
+KPX comma quotedblright -33
+KPX comma quoteright -30
+KPX e quoteright -12
+KPX e t -4
+KPX e v -19
+KPX e w -6
+KPX e x -21
+KPX e y -17
+KPX eacute v -19
+KPX eacute w -6
+KPX eacute y -17
+KPX ecircumflex v -19
+KPX ecircumflex w -6
+KPX ecircumflex y -17
+KPX eight four 10
+KPX eight one -23
+KPX eight seven -6
+KPX f a 1
+KPX f aacute 1
+KPX f adieresis 1
+KPX f ae 0
+KPX f aring 1
+KPX f e -3
+KPX f eacute -3
+KPX f f 21
+KPX f i -3
+KPX f j -6
+KPX f l -3
+KPX f o -9
+KPX f oacute -9
+KPX f odieresis -9
+KPX f oe -3
+KPX f oslash -9
+KPX f quoteright 10
+KPX f s -1
+KPX f t 21
+KPX five four 6
+KPX five one -29
+KPX five seven -10
+KPX four four 9
+KPX four one -50
+KPX four seven -28
+KPX g a 3
+KPX g adieresis 3
+KPX g ae 3
+KPX g aring 3
+KPX g e 8
+KPX g eacute 8
+KPX g l 0
+KPX g oacute 1
+KPX g odieresis 1
+KPX g r 1
+KPX guillemotright A -51
+KPX guillemotright AE -39
+KPX guillemotright Aacute -51
+KPX guillemotright Adieresis -51
+KPX guillemotright Aring -51
+KPX guillemotright T -108
+KPX guillemotright V -78
+KPX guillemotright W -60
+KPX guillemotright Y -111
+KPX guilsinglright A -46
+KPX guilsinglright AE -35
+KPX guilsinglright Aacute -46
+KPX guilsinglright Adieresis -46
+KPX guilsinglright Aring -46
+KPX guilsinglright T -104
+KPX guilsinglright V -74
+KPX guilsinglright W -56
+KPX guilsinglright Y -107
+KPX h quoteright -14
+KPX h y -21
+KPX hyphen A -1
+KPX hyphen AE 10
+KPX hyphen Aacute -1
+KPX hyphen Adieresis -1
+KPX hyphen Aring -1
+KPX hyphen T -57
+KPX hyphen V -27
+KPX hyphen W -9
+KPX hyphen Y -64
+KPX i T -4
+KPX i j -2
+KPX k a -2
+KPX k aacute -2
+KPX k adieresis -2
+KPX k ae 1
+KPX k aring -2
+KPX k comma 7
+KPX k e -15
+KPX k eacute -15
+KPX k g -21
+KPX k hyphen -25
+KPX k o -22
+KPX k oacute -22
+KPX k odieresis -22
+KPX k period 6
+KPX k s -10
+KPX k u -1
+KPX k udieresis -1
+KPX l v -5
+KPX l y -2
+KPX m p 6
+KPX m v -19
+KPX m w -6
+KPX m y -18
+KPX n T -80
+KPX n p 5
+KPX n quoteright -12
+KPX n v -20
+KPX n w -7
+KPX n y -19
+KPX nine four 4
+KPX nine one -21
+KPX nine seven -17
+KPX o T -84
+KPX o quoteright -17
+KPX o t -8
+KPX o v -23
+KPX o w -10
+KPX o x -25
+KPX o y -22
+KPX oacute v -23
+KPX oacute w -10
+KPX oacute y -22
+KPX ocircumflex t -8
+KPX odieresis t -8
+KPX odieresis v -23
+KPX odieresis w -10
+KPX odieresis x -25
+KPX odieresis y -22
+KPX ograve v -23
+KPX ograve w -10
+KPX ograve y -22
+KPX one comma -42
+KPX one eight -37
+KPX one five -43
+KPX one four -56
+KPX one nine -39
+KPX one one -85
+KPX one period -42
+KPX one seven -65
+KPX one six -37
+KPX one three -44
+KPX one two -47
+KPX one zero -34
+KPX p t -5
+KPX p y -20
+KPX period one -73
+KPX period quotedblright -32
+KPX period quoteright -29
+KPX q c 4
+KPX q u 4
+KPX quotedblbase A 12
+KPX quotedblbase AE 24
+KPX quotedblbase T -75
+KPX quotedblbase V -73
+KPX quotedblbase W -51
+KPX quotedblbase Y -92
+KPX quotedblleft A -68
+KPX quotedblleft AE -57
+KPX quotedblleft Aacute -68
+KPX quotedblleft Adieresis -68
+KPX quotedblleft Aring -68
+KPX quotedblleft T -2
+KPX quotedblleft V 6
+KPX quotedblleft W 16
+KPX quotedblleft Y -9
+KPX quotedblright A -69
+KPX quotedblright AE -57
+KPX quotedblright Aacute -69
+KPX quotedblright Adieresis -69
+KPX quotedblright Aring -69
+KPX quotedblright T 1
+KPX quotedblright V 7
+KPX quotedblright W 17
+KPX quotedblright Y -7
+KPX quoteleft A -73
+KPX quoteleft AE -62
+KPX quoteleft Aacute -73
+KPX quoteleft Adieresis -73
+KPX quoteleft Aring -73
+KPX quoteleft T -7
+KPX quoteleft V 2
+KPX quoteleft W 11
+KPX quoteleft Y -13
+KPX quoteright A -77
+KPX quoteright AE -66
+KPX quoteright Aacute -77
+KPX quoteright Adieresis -77
+KPX quoteright Aring -77
+KPX quoteright comma -46
+KPX quoteright d -27
+KPX quoteright o -30
+KPX quoteright period -45
+KPX quoteright r -15
+KPX quoteright s -22
+KPX quoteright t -4
+KPX quoteright v -5
+KPX quoteright w 1
+KPX quoteright y -3
+KPX r a 6
+KPX r aacute 6
+KPX r acircumflex 6
+KPX r adieresis 6
+KPX r ae 4
+KPX r agrave 6
+KPX r aring 6
+KPX r c 0
+KPX r ccedilla 0
+KPX r colon -27
+KPX r comma -57
+KPX r d 0
+KPX r e 4
+KPX r eacute 4
+KPX r ecircumflex 4
+KPX r egrave 4
+KPX r f 22
+KPX r g -2
+KPX r h -4
+KPX r hyphen -35
+KPX r i -4
+KPX r j -6
+KPX r k 0
+KPX r l -4
+KPX r m -1
+KPX r n -2
+KPX r o -1
+KPX r oacute -1
+KPX r ocircumflex -1
+KPX r odieresis -1
+KPX r oe 5
+KPX r ograve -1
+KPX r oslash -4
+KPX r p 0
+KPX r period -57
+KPX r q 1
+KPX r quoteright 14
+KPX r r -2
+KPX r s 3
+KPX r semicolon -27
+KPX r t 22
+KPX r u 0
+KPX r v 21
+KPX r w 26
+KPX r x 17
+KPX r y 23
+KPX r z 9
+KPX s quoteright -12
+KPX s t -1
+KPX seven colon -63
+KPX seven comma -88
+KPX seven eight -3
+KPX seven five -21
+KPX seven four -62
+KPX seven one -14
+KPX seven period -87
+KPX seven seven 9
+KPX seven six -13
+KPX seven three 0
+KPX seven two -4
+KPX six four 7
+KPX six one -21
+KPX six seven -3
+KPX t S 0
+KPX t a 6
+KPX t aacute 6
+KPX t adieresis 6
+KPX t ae 7
+KPX t aring 6
+KPX t colon -25
+KPX t e -3
+KPX t eacute -3
+KPX t h 2
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright 4
+KPX t semicolon -25
+KPX three four 6
+KPX three one -27
+KPX three seven -10
+KPX two four -9
+KPX two one -16
+KPX two seven -3
+KPX u quoteright -2
+KPX v a -15
+KPX v aacute -15
+KPX v acircumflex -15
+KPX v adieresis -15
+KPX v ae -16
+KPX v agrave -15
+KPX v aring -15
+KPX v atilde -15
+KPX v c -20
+KPX v colon -32
+KPX v comma -51
+KPX v e -15
+KPX v eacute -15
+KPX v ecircumflex -15
+KPX v egrave -15
+KPX v g -21
+KPX v hyphen 0
+KPX v l -5
+KPX v o -22
+KPX v oacute -22
+KPX v odieresis -22
+KPX v ograve -22
+KPX v oslash -20
+KPX v period -50
+KPX v s -17
+KPX v semicolon -34
+KPX w a -7
+KPX w aacute -7
+KPX w acircumflex -7
+KPX w adieresis -7
+KPX w ae -8
+KPX w agrave -7
+KPX w aring -7
+KPX w atilde -7
+KPX w c -8
+KPX w colon -27
+KPX w comma -33
+KPX w e -3
+KPX w eacute -3
+KPX w ecircumflex -3
+KPX w egrave -3
+KPX w g -9
+KPX w hyphen 11
+KPX w l -1
+KPX w o -10
+KPX w oacute -10
+KPX w odieresis -10
+KPX w ograve -10
+KPX w oslash -8
+KPX w period -32
+KPX w s -9
+KPX w semicolon -29
+KPX x a -9
+KPX x c -22
+KPX x e -17
+KPX x eacute -17
+KPX x o -24
+KPX x q -20
+KPX y a -14
+KPX y aacute -14
+KPX y acircumflex -14
+KPX y adieresis -14
+KPX y ae -15
+KPX y agrave -14
+KPX y aring -14
+KPX y atilde -14
+KPX y c -21
+KPX y colon -31
+KPX y comma -51
+KPX y e -16
+KPX y eacute -16
+KPX y ecircumflex -16
+KPX y egrave -16
+KPX y g -21
+KPX y hyphen 0
+KPX y l -4
+KPX y o -22
+KPX y oacute -22
+KPX y odieresis -22
+KPX y ograve -22
+KPX y oslash -20
+KPX y period -50
+KPX y s -16
+KPX y semicolon -33
+KPX zero four 5
+KPX zero one -19
+KPX zero seven -10
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvb8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvb8a.pfb
new file mode 100644
index 00000000000..aec380a3310
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvb8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvb8ac.afm b/Master/tlpkg/tlgs/lib/fonts/uhvb8ac.afm
new file mode 100644
index 00000000000..e865d9372e4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvb8ac.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-BoldCond
+FullName Nimbus Sans L Bold Condensed
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -139 -307 822 975
+CapHeight 718
+XHeight 532
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 273 ; N exclam ; B 74 0 200 718 ;
+C 34 ; WX 389 ; N quotedbl ; B 80 447 308 718 ;
+C 35 ; WX 456 ; N numbersign ; B 15 0 441 698 ;
+C 36 ; WX 456 ; N dollar ; B 24 -115 429 775 ;
+C 37 ; WX 729 ; N percent ; B 23 -19 706 710 ;
+C 38 ; WX 592 ; N ampersand ; B 44 -19 575 718 ;
+C 39 ; WX 228 ; N quoteright ; B 57 445 171 718 ;
+C 40 ; WX 273 ; N parenleft ; B 29 -207 257 734 ;
+C 41 ; WX 273 ; N parenright ; B 16 -207 244 734 ;
+C 42 ; WX 319 ; N asterisk ; B 22 387 297 718 ;
+C 43 ; WX 479 ; N plus ; B 33 0 446 506 ;
+C 44 ; WX 228 ; N comma ; B 52 -168 175 147 ;
+C 45 ; WX 273 ; N hyphen ; B 22 215 251 345 ;
+C 46 ; WX 228 ; N period ; B 52 0 175 147 ;
+C 47 ; WX 228 ; N slash ; B -27 -19 255 737 ;
+C 48 ; WX 456 ; N zero ; B 26 -19 430 710 ;
+C 49 ; WX 456 ; N one ; B 57 0 310 710 ;
+C 50 ; WX 456 ; N two ; B 21 0 419 710 ;
+C 51 ; WX 456 ; N three ; B 22 -19 423 710 ;
+C 52 ; WX 456 ; N four ; B 22 0 431 710 ;
+C 53 ; WX 456 ; N five ; B 22 -19 423 698 ;
+C 54 ; WX 456 ; N six ; B 25 -19 426 710 ;
+C 55 ; WX 456 ; N seven ; B 20 0 433 698 ;
+C 56 ; WX 456 ; N eight ; B 26 -19 430 710 ;
+C 57 ; WX 456 ; N nine ; B 25 -19 428 710 ;
+C 58 ; WX 273 ; N colon ; B 75 0 198 512 ;
+C 59 ; WX 273 ; N semicolon ; B 75 -168 198 512 ;
+C 60 ; WX 479 ; N less ; B 31 -15 448 521 ;
+C 61 ; WX 479 ; N equal ; B 33 87 446 419 ;
+C 62 ; WX 479 ; N greater ; B 31 -15 448 521 ;
+C 63 ; WX 501 ; N question ; B 49 0 456 727 ;
+C 64 ; WX 800 ; N at ; B 97 -19 702 737 ;
+C 65 ; WX 592 ; N A ; B 16 0 576 718 ;
+C 66 ; WX 592 ; N B ; B 62 0 549 718 ;
+C 67 ; WX 592 ; N C ; B 36 -19 561 737 ;
+C 68 ; WX 592 ; N D ; B 62 0 562 718 ;
+C 69 ; WX 547 ; N E ; B 62 0 509 718 ;
+C 70 ; WX 501 ; N F ; B 62 0 481 718 ;
+C 71 ; WX 638 ; N G ; B 36 -19 585 737 ;
+C 72 ; WX 592 ; N H ; B 58 0 534 718 ;
+C 73 ; WX 228 ; N I ; B 52 0 175 718 ;
+C 74 ; WX 456 ; N J ; B 18 -18 397 718 ;
+C 75 ; WX 592 ; N K ; B 71 0 592 718 ;
+C 76 ; WX 501 ; N L ; B 62 0 478 718 ;
+C 77 ; WX 683 ; N M ; B 57 0 627 718 ;
+C 78 ; WX 592 ; N N ; B 57 0 536 718 ;
+C 79 ; WX 638 ; N O ; B 36 -19 602 737 ;
+C 80 ; WX 547 ; N P ; B 62 0 514 718 ;
+C 81 ; WX 638 ; N Q ; B 36 -52 604 737 ;
+C 82 ; WX 592 ; N R ; B 62 0 555 718 ;
+C 83 ; WX 547 ; N S ; B 32 -19 516 737 ;
+C 84 ; WX 501 ; N T ; B 11 0 490 718 ;
+C 85 ; WX 592 ; N U ; B 59 -19 534 718 ;
+C 86 ; WX 547 ; N V ; B 16 0 531 718 ;
+C 87 ; WX 774 ; N W ; B 13 0 762 718 ;
+C 88 ; WX 547 ; N X ; B 11 0 535 718 ;
+C 89 ; WX 547 ; N Y ; B 12 0 535 718 ;
+C 90 ; WX 501 ; N Z ; B 20 0 481 718 ;
+C 91 ; WX 273 ; N bracketleft ; B 52 -196 253 722 ;
+C 92 ; WX 228 ; N backslash ; B -27 -19 255 737 ;
+C 93 ; WX 273 ; N bracketright ; B 20 -196 221 722 ;
+C 94 ; WX 479 ; N asciicircum ; B 51 323 428 698 ;
+C 95 ; WX 456 ; N underscore ; B 0 -125 456 -75 ;
+C 96 ; WX 228 ; N quoteleft ; B 57 454 171 727 ;
+C 97 ; WX 456 ; N a ; B 24 -14 432 546 ;
+C 98 ; WX 501 ; N b ; B 50 -14 474 718 ;
+C 99 ; WX 456 ; N c ; B 28 -14 430 546 ;
+C 100 ; WX 501 ; N d ; B 28 -14 452 718 ;
+C 101 ; WX 456 ; N e ; B 19 -14 433 546 ;
+C 102 ; WX 273 ; N f ; B 8 0 261 727 ;
+C 103 ; WX 501 ; N g ; B 33 -217 453 546 ;
+C 104 ; WX 501 ; N h ; B 53 0 448 718 ;
+C 105 ; WX 228 ; N i ; B 57 0 171 725 ;
+C 106 ; WX 228 ; N j ; B 2 -214 171 725 ;
+C 107 ; WX 456 ; N k ; B 57 0 461 718 ;
+C 108 ; WX 228 ; N l ; B 57 0 171 718 ;
+C 109 ; WX 729 ; N m ; B 52 0 677 546 ;
+C 110 ; WX 501 ; N n ; B 53 0 448 546 ;
+C 111 ; WX 501 ; N o ; B 28 -14 474 546 ;
+C 112 ; WX 501 ; N p ; B 51 -207 474 546 ;
+C 113 ; WX 501 ; N q ; B 28 -207 453 546 ;
+C 114 ; WX 319 ; N r ; B 52 0 306 546 ;
+C 115 ; WX 456 ; N s ; B 25 -14 426 546 ;
+C 116 ; WX 273 ; N t ; B 8 -6 253 676 ;
+C 117 ; WX 501 ; N u ; B 54 -14 447 532 ;
+C 118 ; WX 456 ; N v ; B 11 0 445 532 ;
+C 119 ; WX 638 ; N w ; B 8 0 631 532 ;
+C 120 ; WX 456 ; N x ; B 12 0 444 532 ;
+C 121 ; WX 456 ; N y ; B 8 -214 442 532 ;
+C 122 ; WX 410 ; N z ; B 16 0 394 532 ;
+C 123 ; WX 319 ; N braceleft ; B 39 -196 299 722 ;
+C 124 ; WX 230 ; N bar ; B 69 -19 161 737 ;
+C 125 ; WX 319 ; N braceright ; B 20 -196 280 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 50 173 429 336 ;
+C 161 ; WX 273 ; N exclamdown ; B 74 -186 200 532 ;
+C 162 ; WX 456 ; N cent ; B 28 -118 430 628 ;
+C 163 ; WX 456 ; N sterling ; B 23 -16 444 718 ;
+C 164 ; WX 137 ; N fraction ; B -139 -19 276 710 ;
+C 165 ; WX 456 ; N yen ; B -7 0 463 698 ;
+C 166 ; WX 456 ; N florin ; B -8 -210 423 737 ;
+C 167 ; WX 456 ; N section ; B 28 -184 428 727 ;
+C 168 ; WX 456 ; N currency ; B -2 76 458 636 ;
+C 169 ; WX 195 ; N quotesingle ; B 57 447 138 718 ;
+C 170 ; WX 410 ; N quotedblleft ; B 52 454 358 727 ;
+C 171 ; WX 456 ; N guillemotleft ; B 72 76 384 484 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 68 76 205 484 ;
+C 173 ; WX 273 ; N guilsinglright ; B 68 76 205 484 ;
+C 174 ; WX 501 ; N fi ; B 8 0 444 727 ;
+C 175 ; WX 501 ; N fl ; B 8 0 444 727 ;
+C 177 ; WX 456 ; N endash ; B 0 226 456 333 ;
+C 178 ; WX 456 ; N dagger ; B 30 -171 426 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 30 -171 426 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 48 172 180 334 ;
+C 182 ; WX 456 ; N paragraph ; B -7 -191 442 700 ;
+C 183 ; WX 287 ; N bullet ; B 8 194 279 524 ;
+C 184 ; WX 228 ; N quotesinglbase ; B 57 -146 171 127 ;
+C 185 ; WX 410 ; N quotedblbase ; B 52 -146 358 127 ;
+C 186 ; WX 410 ; N quotedblright ; B 52 445 358 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 72 76 384 484 ;
+C 188 ; WX 820 ; N ellipsis ; B 75 0 745 147 ;
+C 189 ; WX 820 ; N perthousand ; B -2 -19 822 710 ;
+C 191 ; WX 501 ; N questiondown ; B 45 -195 452 532 ;
+C 193 ; WX 273 ; N grave ; B -19 604 184 750 ;
+C 194 ; WX 273 ; N acute ; B 89 604 292 750 ;
+C 195 ; WX 273 ; N circumflex ; B -8 604 281 750 ;
+C 196 ; WX 273 ; N tilde ; B -14 610 287 737 ;
+C 197 ; WX 273 ; N macron ; B -5 605 278 678 ;
+C 198 ; WX 273 ; N breve ; B -2 604 275 750 ;
+C 199 ; WX 273 ; N dotaccent ; B 85 614 189 729 ;
+C 200 ; WX 273 ; N dieresis ; B 5 614 268 729 ;
+C 202 ; WX 273 ; N ring ; B 48 568 225 776 ;
+C 203 ; WX 273 ; N cedilla ; B 5 -228 201 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 7 604 399 750 ;
+C 206 ; WX 273 ; N ogonek ; B 58 -228 249 0 ;
+C 207 ; WX 273 ; N caron ; B -8 604 281 750 ;
+C 208 ; WX 820 ; N emdash ; B 0 226 820 333 ;
+C 225 ; WX 820 ; N AE ; B 4 0 782 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 18 276 285 737 ;
+C 232 ; WX 501 ; N Lslash ; B -16 0 478 718 ;
+C 233 ; WX 638 ; N Oslash ; B 27 -27 610 745 ;
+C 234 ; WX 820 ; N OE ; B 30 -19 788 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 5 276 295 737 ;
+C 241 ; WX 729 ; N ae ; B 24 -14 704 546 ;
+C 245 ; WX 228 ; N dotlessi ; B 57 0 171 532 ;
+C 248 ; WX 228 ; N lslash ; B -15 0 243 718 ;
+C 249 ; WX 501 ; N oslash ; B 18 -29 483 560 ;
+C 250 ; WX 774 ; N oe ; B 28 -14 748 546 ;
+C 251 ; WX 501 ; N germandbls ; B 57 -14 475 731 ;
+C -1 ; WX 592 ; N Udieresis ; B 59 -19 534 915 ;
+C -1 ; WX 592 ; N Uacute ; B 59 -19 534 936 ;
+C -1 ; WX 547 ; N Scedilla ; B 32 -228 516 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 11 0 490 936 ;
+C -1 ; WX 547 ; N Scaron ; B 32 -19 516 936 ;
+C -1 ; WX 592 ; N Rcaron ; B 62 0 555 936 ;
+C -1 ; WX 592 ; N Racute ; B 62 0 555 936 ;
+C -1 ; WX 547 ; N Sacute ; B 32 -19 516 936 ;
+C -1 ; WX 638 ; N Otilde ; B 36 -19 602 923 ;
+C -1 ; WX 501 ; N ucircumflex ; B 54 -14 447 750 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 36 -19 602 936 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 59 -19 559 936 ;
+C -1 ; WX 547 ; N Yacute ; B 12 0 535 936 ;
+C -1 ; WX 592 ; N Eth ; B -4 0 562 718 ;
+C -1 ; WX 592 ; N Dcroat ; B -4 0 562 718 ;
+C -1 ; WX 501 ; N Zacute ; B 20 0 481 936 ;
+C -1 ; WX 592 ; N Uring ; B 59 -19 534 962 ;
+C -1 ; WX 501 ; N gbreve ; B 33 -217 453 750 ;
+C -1 ; WX 456 ; N eogonek ; B 19 -228 433 546 ;
+C -1 ; WX 456 ; N edotaccent ; B 19 -14 433 729 ;
+C -1 ; WX 456 ; N ecaron ; B 19 -14 433 750 ;
+C -1 ; WX 592 ; N Ugrave ; B 59 -19 534 936 ;
+C -1 ; WX 547 ; N Thorn ; B 62 0 514 718 ;
+C -1 ; WX 456 ; N eacute ; B 19 -14 433 750 ;
+C -1 ; WX 456 ; N edieresis ; B 19 -14 433 729 ;
+C -1 ; WX 561 ; N dcaron ; B 28 -14 581 718 ;
+C -1 ; WX 456 ; N ccedilla ; B 28 -228 430 546 ;
+C -1 ; WX 456 ; N ccaron ; B 28 -14 430 750 ;
+C -1 ; WX 456 ; N cacute ; B 28 -14 430 750 ;
+C -1 ; WX 456 ; N aogonek ; B 24 -228 465 546 ;
+C -1 ; WX 456 ; N aring ; B 24 -14 432 803 ;
+C -1 ; WX 456 ; N atilde ; B 24 -14 432 737 ;
+C -1 ; WX 456 ; N abreve ; B 24 -14 432 750 ;
+C -1 ; WX 456 ; N egrave ; B 19 -14 433 750 ;
+C -1 ; WX 456 ; N agrave ; B 24 -14 432 750 ;
+C -1 ; WX 456 ; N aacute ; B 24 -14 432 750 ;
+C -1 ; WX 456 ; N adieresis ; B 24 -14 432 729 ;
+C -1 ; WX 592 ; N Uogonek ; B 59 -228 534 718 ;
+C -1 ; WX 501 ; N ugrave ; B 54 -14 447 750 ;
+C -1 ; WX 501 ; N uacute ; B 54 -14 447 750 ;
+C -1 ; WX 501 ; N udieresis ; B 54 -14 447 729 ;
+C -1 ; WX 338 ; N tcaron ; B 8 -6 358 718 ;
+C -1 ; WX 456 ; N scommaaccent ; B 25 -307 426 546 ;
+C -1 ; WX 501 ; N Zcaron ; B 20 0 481 936 ;
+C -1 ; WX 456 ; N ecircumflex ; B 19 -14 433 750 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 59 -19 534 936 ;
+C -1 ; WX 456 ; N acircumflex ; B 24 -14 432 750 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 20 0 481 915 ;
+C -1 ; WX 456 ; N scaron ; B 25 -14 426 750 ;
+C -1 ; WX 592 ; N Amacron ; B 16 0 576 864 ;
+C -1 ; WX 456 ; N sacute ; B 25 -14 426 750 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 11 -307 490 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 12 0 535 915 ;
+C -1 ; WX 501 ; N thorn ; B 51 -207 474 718 ;
+C -1 ; WX 547 ; N Emacron ; B 62 0 509 864 ;
+C -1 ; WX 638 ; N Ograve ; B 36 -19 602 936 ;
+C -1 ; WX 638 ; N Oacute ; B 36 -19 602 936 ;
+C -1 ; WX 638 ; N Odieresis ; B 36 -19 602 915 ;
+C -1 ; WX 592 ; N Ntilde ; B 57 0 536 923 ;
+C -1 ; WX 592 ; N Ncaron ; B 57 0 536 936 ;
+C -1 ; WX 592 ; N Nacute ; B 57 0 536 936 ;
+C -1 ; WX 501 ; N Lcaron ; B 62 0 478 718 ;
+C -1 ; WX 501 ; N Lacute ; B 62 0 478 936 ;
+C -1 ; WX 228 ; N Idotaccent ; B 52 0 175 915 ;
+C -1 ; WX 319 ; N racute ; B 52 0 315 750 ;
+C -1 ; WX 228 ; N Icircumflex ; B -30 0 259 936 ;
+C -1 ; WX 501 ; N ohungarumlaut ; B 28 -14 513 750 ;
+C -1 ; WX 501 ; N otilde ; B 28 -14 474 737 ;
+C -1 ; WX 440 ; N Euro ; B 0 -12 433 678 ;
+C -1 ; WX 501 ; N ocircumflex ; B 28 -14 474 750 ;
+C -1 ; WX 273 ; N onesuperior ; B 21 283 194 710 ;
+C -1 ; WX 273 ; N twosuperior ; B 7 283 266 722 ;
+C -1 ; WX 273 ; N threesuperior ; B 7 271 267 722 ;
+C -1 ; WX 228 ; N Igrave ; B -41 0 175 936 ;
+C -1 ; WX 228 ; N Iacute ; B 52 0 270 936 ;
+C -1 ; WX 228 ; N Imacron ; B -28 0 255 864 ;
+C -1 ; WX 228 ; N Iogonek ; B 17 -228 208 718 ;
+C -1 ; WX 228 ; N Idieresis ; B -17 0 246 915 ;
+C -1 ; WX 638 ; N Gbreve ; B 36 -19 585 936 ;
+C -1 ; WX 592 ; N Umacron ; B 59 -19 534 864 ;
+C -1 ; WX 592 ; N Kcommaaccent ; B 71 -307 592 718 ;
+C -1 ; WX 501 ; N ograve ; B 28 -14 474 750 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 32 -307 516 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 62 -228 542 718 ;
+C -1 ; WX 501 ; N oacute ; B 28 -14 474 750 ;
+C -1 ; WX 547 ; N Edotaccent ; B 62 0 509 915 ;
+C -1 ; WX 228 ; N iogonek ; B 13 -228 204 725 ;
+C -1 ; WX 501 ; N gcommaaccent ; B 33 -217 453 853 ;
+C -1 ; WX 501 ; N odieresis ; B 28 -14 474 729 ;
+C -1 ; WX 501 ; N ntilde ; B 53 0 448 737 ;
+C -1 ; WX 501 ; N ncaron ; B 53 0 448 750 ;
+C -1 ; WX 547 ; N Ecaron ; B 62 0 509 936 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 62 0 509 936 ;
+C -1 ; WX 456 ; N scedilla ; B 25 -228 426 546 ;
+C -1 ; WX 319 ; N rcaron ; B 30 0 319 750 ;
+C -1 ; WX 547 ; N Egrave ; B 62 0 509 936 ;
+C -1 ; WX 547 ; N Eacute ; B 62 0 509 936 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 36 -307 585 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 62 -307 555 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 62 0 509 915 ;
+C -1 ; WX 501 ; N nacute ; B 53 0 448 750 ;
+C -1 ; WX 501 ; N uogonek ; B 54 -228 480 532 ;
+C -1 ; WX 501 ; N umacron ; B 54 -14 447 678 ;
+C -1 ; WX 592 ; N Dcaron ; B 62 0 562 936 ;
+C -1 ; WX 280 ; N lcaron ; B 57 0 300 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 36 -19 561 936 ;
+C -1 ; WX 592 ; N Cacute ; B 36 -19 561 936 ;
+C -1 ; WX 592 ; N Ccedilla ; B 36 -228 561 737 ;
+C -1 ; WX 328 ; N degree ; B 47 426 281 712 ;
+C -1 ; WX 592 ; N Aogonek ; B 16 -228 609 718 ;
+C -1 ; WX 479 ; N minus ; B 33 197 446 309 ;
+C -1 ; WX 479 ; N multiply ; B 33 1 447 505 ;
+C -1 ; WX 479 ; N divide ; B 33 -42 446 548 ;
+C -1 ; WX 592 ; N Aring ; B 16 0 576 975 ;
+C -1 ; WX 820 ; N trademark ; B 36 306 784 718 ;
+C -1 ; WX 319 ; N rcommaaccent ; B 52 -307 306 546 ;
+C -1 ; WX 228 ; N lacute ; B 57 0 270 936 ;
+C -1 ; WX 501 ; N omacron ; B 28 -14 474 678 ;
+C -1 ; WX 592 ; N Atilde ; B 16 0 576 923 ;
+C -1 ; WX 228 ; N icircumflex ; B -30 0 259 750 ;
+C -1 ; WX 228 ; N igrave ; B -41 0 171 750 ;
+C -1 ; WX 501 ; N ncommaaccent ; B 53 -307 448 546 ;
+C -1 ; WX 228 ; N lcommaaccent ; B 57 -307 171 718 ;
+C -1 ; WX 479 ; N plusminus ; B 33 0 446 578 ;
+C -1 ; WX 684 ; N onehalf ; B 21 -19 651 710 ;
+C -1 ; WX 684 ; N onequarter ; B 21 -19 628 710 ;
+C -1 ; WX 684 ; N threequarters ; B 13 -19 655 722 ;
+C -1 ; WX 228 ; N iacute ; B 57 0 270 750 ;
+C -1 ; WX 592 ; N Abreve ; B 16 0 576 936 ;
+C -1 ; WX 456 ; N kcommaaccent ; B 57 -307 461 718 ;
+C -1 ; WX 638 ; N Omacron ; B 36 -19 602 864 ;
+C -1 ; WX 228 ; N imacron ; B -28 0 255 678 ;
+C -1 ; WX 456 ; N emacron ; B 19 -14 433 678 ;
+C -1 ; WX 456 ; N amacron ; B 24 -14 432 678 ;
+C -1 ; WX 273 ; N tcommaaccent ; B 8 -307 253 676 ;
+C -1 ; WX 456 ; N ydieresis ; B 8 -214 442 729 ;
+C -1 ; WX 410 ; N zdotaccent ; B 16 0 394 729 ;
+C -1 ; WX 410 ; N zcaron ; B 16 0 394 750 ;
+C -1 ; WX 410 ; N zacute ; B 16 0 394 750 ;
+C -1 ; WX 456 ; N yacute ; B 8 -214 442 750 ;
+C -1 ; WX 501 ; N uhungarumlaut ; B 54 -14 513 750 ;
+C -1 ; WX 501 ; N eth ; B 28 -14 474 737 ;
+C -1 ; WX 501 ; N uring ; B 54 -14 447 776 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 36 -19 602 936 ;
+C -1 ; WX 273 ; N commaaccent ; B 83 -307 191 -60 ;
+C -1 ; WX 604 ; N copyright ; B -9 -19 614 737 ;
+C -1 ; WX 604 ; N registered ; B -9 -19 613 737 ;
+C -1 ; WX 592 ; N Acircumflex ; B 16 0 576 936 ;
+C -1 ; WX 228 ; N idieresis ; B -17 0 246 729 ;
+C -1 ; WX 405 ; N lozenge ; B 15 0 382 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 33 -16 446 522 ;
+C -1 ; WX 450 ; N radical ; B -27 -35 448 918 ;
+C -1 ; WX 592 ; N Agrave ; B 16 0 576 936 ;
+C -1 ; WX 592 ; N Aacute ; B 16 0 576 936 ;
+C -1 ; WX 479 ; N lessequal ; B 31 0 448 672 ;
+C -1 ; WX 479 ; N greaterequal ; B 31 0 448 672 ;
+C -1 ; WX 479 ; N logicalnot ; B 33 108 446 419 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 12 -21 388 743 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 57 -307 536 718 ;
+C -1 ; WX 501 ; N dcroat ; B 28 -14 501 718 ;
+C -1 ; WX 230 ; N brokenbar ; B 69 -19 161 737 ;
+C -1 ; WX 501 ; N Lcommaaccent ; B 62 -307 478 718 ;
+C -1 ; WX 592 ; N Adieresis ; B 16 0 576 915 ;
+C -1 ; WX 501 ; N mu ; B 54 -207 447 532 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -26
+KPX A Ccedilla -26
+KPX A G -27
+KPX A O -27
+KPX A Odieresis -27
+KPX A Q -27
+KPX A T -62
+KPX A U -24
+KPX A Uacute -24
+KPX A Ucircumflex -24
+KPX A Udieresis -24
+KPX A Ugrave -24
+KPX A V -50
+KPX A W -41
+KPX A Y -69
+KPX A a -1
+KPX A b -1
+KPX A c -11
+KPX A ccedilla -11
+KPX A comma 17
+KPX A d -11
+KPX A e -7
+KPX A g -16
+KPX A guillemotleft -35
+KPX A guilsinglleft -33
+KPX A hyphen 7
+KPX A o -14
+KPX A period 17
+KPX A q -12
+KPX A quotedblright -47
+KPX A quoteright -50
+KPX A t -12
+KPX A u -12
+KPX A v -29
+KPX A w -19
+KPX A y -27
+KPX Aacute C -26
+KPX Aacute G -27
+KPX Aacute O -27
+KPX Aacute Q -27
+KPX Aacute T -62
+KPX Aacute U -24
+KPX Aacute V -50
+KPX Aacute W -41
+KPX Aacute Y -69
+KPX Aacute a -1
+KPX Aacute b -1
+KPX Aacute c -11
+KPX Aacute comma 17
+KPX Aacute d -11
+KPX Aacute e -7
+KPX Aacute g -16
+KPX Aacute guillemotleft -35
+KPX Aacute guilsinglleft -33
+KPX Aacute hyphen 7
+KPX Aacute o -14
+KPX Aacute period 17
+KPX Aacute q -12
+KPX Aacute quoteright -50
+KPX Aacute t -12
+KPX Aacute u -12
+KPX Aacute v -29
+KPX Aacute w -19
+KPX Aacute y -27
+KPX Acircumflex C -26
+KPX Acircumflex G -27
+KPX Acircumflex O -27
+KPX Acircumflex Q -27
+KPX Acircumflex T -62
+KPX Acircumflex U -24
+KPX Acircumflex V -50
+KPX Acircumflex W -41
+KPX Acircumflex Y -69
+KPX Acircumflex comma 17
+KPX Acircumflex period 17
+KPX Adieresis C -26
+KPX Adieresis G -27
+KPX Adieresis O -27
+KPX Adieresis Q -27
+KPX Adieresis T -62
+KPX Adieresis U -24
+KPX Adieresis V -50
+KPX Adieresis W -41
+KPX Adieresis Y -69
+KPX Adieresis a -1
+KPX Adieresis b -1
+KPX Adieresis c -11
+KPX Adieresis comma 17
+KPX Adieresis d -11
+KPX Adieresis g -16
+KPX Adieresis guillemotleft -35
+KPX Adieresis guilsinglleft -33
+KPX Adieresis hyphen 7
+KPX Adieresis o -14
+KPX Adieresis period 17
+KPX Adieresis q -12
+KPX Adieresis quotedblright -47
+KPX Adieresis quoteright -50
+KPX Adieresis t -12
+KPX Adieresis u -12
+KPX Adieresis v -29
+KPX Adieresis w -19
+KPX Adieresis y -27
+KPX Agrave C -26
+KPX Agrave G -27
+KPX Agrave O -27
+KPX Agrave Q -27
+KPX Agrave T -62
+KPX Agrave U -24
+KPX Agrave V -50
+KPX Agrave W -41
+KPX Agrave Y -69
+KPX Agrave comma 17
+KPX Agrave period 17
+KPX Aring C -26
+KPX Aring G -27
+KPX Aring O -27
+KPX Aring Q -27
+KPX Aring T -62
+KPX Aring U -24
+KPX Aring V -50
+KPX Aring W -41
+KPX Aring Y -69
+KPX Aring a -1
+KPX Aring b -1
+KPX Aring c -11
+KPX Aring comma 17
+KPX Aring d -11
+KPX Aring e -7
+KPX Aring g -16
+KPX Aring guillemotleft -35
+KPX Aring guilsinglleft -33
+KPX Aring hyphen 7
+KPX Aring o -14
+KPX Aring period 17
+KPX Aring q -12
+KPX Aring quotedblright -47
+KPX Aring quoteright -50
+KPX Aring t -12
+KPX Aring u -12
+KPX Aring v -29
+KPX Aring w -19
+KPX Aring y -27
+KPX Atilde C -26
+KPX Atilde G -27
+KPX Atilde O -27
+KPX Atilde Q -27
+KPX Atilde T -62
+KPX Atilde U -24
+KPX Atilde V -50
+KPX Atilde W -41
+KPX Atilde Y -69
+KPX Atilde comma 17
+KPX Atilde period 17
+KPX B A -17
+KPX B AE -11
+KPX B Aacute -17
+KPX B Acircumflex -17
+KPX B Adieresis -17
+KPX B Aring -17
+KPX B Atilde -17
+KPX B O -4
+KPX B OE 1
+KPX B Oacute -4
+KPX B Ocircumflex -4
+KPX B Odieresis -4
+KPX B Ograve -4
+KPX B Oslash -1
+KPX B V -22
+KPX B W -17
+KPX B Y -29
+KPX C A -19
+KPX C AE -14
+KPX C Aacute -19
+KPX C Adieresis -19
+KPX C Aring -19
+KPX C H 1
+KPX C K -5
+KPX C O -2
+KPX C Oacute -2
+KPX C Odieresis -2
+KPX Ccedilla A -21
+KPX D A -24
+KPX D Aacute -24
+KPX D Acircumflex -24
+KPX D Adieresis -24
+KPX D Agrave -24
+KPX D Aring -24
+KPX D Atilde -24
+KPX D J 8
+KPX D T -3
+KPX D V -20
+KPX D W -13
+KPX D X -22
+KPX D Y -31
+KPX F A -43
+KPX F Aacute -43
+KPX F Acircumflex -43
+KPX F Adieresis -43
+KPX F Agrave -43
+KPX F Aring -43
+KPX F Atilde -43
+KPX F J -14
+KPX F O -10
+KPX F Odieresis -10
+KPX F a -15
+KPX F aacute -15
+KPX F adieresis -15
+KPX F ae -16
+KPX F aring -15
+KPX F comma -71
+KPX F e -6
+KPX F eacute -6
+KPX F hyphen 8
+KPX F i -6
+KPX F j -6
+KPX F o -11
+KPX F oacute -11
+KPX F odieresis -11
+KPX F oe -11
+KPX F oslash -11
+KPX F period -71
+KPX F r -22
+KPX F u -23
+KPX G A 1
+KPX G AE 7
+KPX G Aacute 1
+KPX G Acircumflex 1
+KPX G Adieresis 1
+KPX G Agrave 1
+KPX G Aring 1
+KPX G Atilde 1
+KPX G T -6
+KPX G V -24
+KPX G W -15
+KPX G Y -35
+KPX J A -21
+KPX J AE -15
+KPX J Adieresis -21
+KPX J Aring -21
+KPX K C -35
+KPX K G -36
+KPX K O -36
+KPX K OE -30
+KPX K Oacute -36
+KPX K Odieresis -36
+KPX K S -18
+KPX K T 23
+KPX K a 0
+KPX K adieresis 0
+KPX K ae -1
+KPX K aring 0
+KPX K e -17
+KPX K hyphen -26
+KPX K o -25
+KPX K oacute -25
+KPX K odieresis -25
+KPX K u -19
+KPX K udieresis -19
+KPX K y -48
+KPX L A 16
+KPX L AE 22
+KPX L Aacute 16
+KPX L Adieresis 16
+KPX L Aring 16
+KPX L C -13
+KPX L Ccedilla -16
+KPX L G -15
+KPX L O -15
+KPX L Oacute -15
+KPX L Ocircumflex -15
+KPX L Odieresis -15
+KPX L Ograve -15
+KPX L Otilde -15
+KPX L S 3
+KPX L T -70
+KPX L U -12
+KPX L Udieresis -12
+KPX L V -64
+KPX L W -50
+KPX L Y -83
+KPX L hyphen -8
+KPX L quotedblright -115
+KPX L quoteright -118
+KPX L u -7
+KPX L udieresis -7
+KPX L y -41
+KPX N A 0
+KPX N AE 6
+KPX N Aacute 0
+KPX N Adieresis 0
+KPX N Aring 0
+KPX N C 7
+KPX N Ccedilla 7
+KPX N G 6
+KPX N O 6
+KPX N Oacute 6
+KPX N Odieresis 6
+KPX N a 7
+KPX N aacute 7
+KPX N adieresis 7
+KPX N ae 6
+KPX N aring 7
+KPX N comma 12
+KPX N e 12
+KPX N eacute 12
+KPX N o 6
+KPX N oacute 6
+KPX N odieresis 6
+KPX N oslash 7
+KPX N period 12
+KPX N u 5
+KPX N udieresis 5
+KPX O A -28
+KPX O AE -22
+KPX O Aacute -28
+KPX O Adieresis -28
+KPX O Aring -28
+KPX O T -9
+KPX O V -26
+KPX O W -17
+KPX O X -26
+KPX O Y -38
+KPX Oacute A -28
+KPX Oacute T -9
+KPX Oacute V -26
+KPX Oacute W -17
+KPX Oacute Y -38
+KPX Ocircumflex T -9
+KPX Ocircumflex V -26
+KPX Ocircumflex Y -38
+KPX Odieresis A -28
+KPX Odieresis T -9
+KPX Odieresis V -26
+KPX Odieresis W -17
+KPX Odieresis X -26
+KPX Odieresis Y -38
+KPX Ograve T -9
+KPX Ograve V -26
+KPX Ograve Y -38
+KPX Oslash A -24
+KPX Otilde T -9
+KPX Otilde V -26
+KPX Otilde Y -38
+KPX P A -51
+KPX P AE -47
+KPX P Aacute -51
+KPX P Adieresis -51
+KPX P Aring -51
+KPX P J -36
+KPX P a -12
+KPX P aacute -12
+KPX P adieresis -12
+KPX P ae -13
+KPX P aring -12
+KPX P comma -92
+KPX P e -10
+KPX P eacute -10
+KPX P hyphen -3
+KPX P o -16
+KPX P oacute -16
+KPX P odieresis -16
+KPX P oe -16
+KPX P oslash -16
+KPX P period -92
+KPX R C -2
+KPX R Ccedilla -2
+KPX R G -3
+KPX R O -3
+KPX R OE 1
+KPX R Oacute -3
+KPX R Odieresis -3
+KPX R T 3
+KPX R U -1
+KPX R Udieresis -1
+KPX R V -16
+KPX R W -12
+KPX R Y -24
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae -1
+KPX R aring 0
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen 14
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe -4
+KPX R u -1
+KPX R uacute -2
+KPX R udieresis -2
+KPX R y 3
+KPX S A -10
+KPX S AE -5
+KPX S Aacute -10
+KPX S Adieresis -10
+KPX S Aring -10
+KPX S T 0
+KPX S V -20
+KPX S W -15
+KPX S Y -27
+KPX S t 2
+KPX T A -63
+KPX T AE -59
+KPX T Aacute -63
+KPX T Acircumflex -63
+KPX T Adieresis -63
+KPX T Agrave -63
+KPX T Aring -63
+KPX T Atilde -63
+KPX T C -8
+KPX T G -10
+KPX T J -67
+KPX T O -9
+KPX T OE -3
+KPX T Oacute -9
+KPX T Ocircumflex -9
+KPX T Odieresis -9
+KPX T Ograve -9
+KPX T Oslash -9
+KPX T Otilde -9
+KPX T S 6
+KPX T V 22
+KPX T W 23
+KPX T Y 23
+KPX T a -62
+KPX T ae -63
+KPX T c -62
+KPX T colon -73
+KPX T comma -55
+KPX T e -58
+KPX T g -65
+KPX T guillemotleft -84
+KPX T guilsinglleft -82
+KPX T hyphen -39
+KPX T i -2
+KPX T j -2
+KPX T o -65
+KPX T oslash -61
+KPX T period -55
+KPX T r -59
+KPX T s -63
+KPX T semicolon -73
+KPX T u -63
+KPX T v -68
+KPX T w -67
+KPX T y -67
+KPX U A -24
+KPX U AE -20
+KPX U Aacute -24
+KPX U Acircumflex -24
+KPX U Adieresis -24
+KPX U Aring -24
+KPX U Atilde -24
+KPX U comma -6
+KPX U m 4
+KPX U n 3
+KPX U p 4
+KPX U period -3
+KPX U r 4
+KPX Uacute A -24
+KPX Uacute comma -6
+KPX Uacute m 4
+KPX Uacute n 3
+KPX Uacute p 4
+KPX Uacute period -3
+KPX Uacute r 4
+KPX Ucircumflex A -24
+KPX Udieresis A -24
+KPX Udieresis b 4
+KPX Udieresis comma -6
+KPX Udieresis m 4
+KPX Udieresis n 3
+KPX Udieresis p 4
+KPX Udieresis period -3
+KPX Udieresis r 4
+KPX Ugrave A -24
+KPX V A -51
+KPX V AE -46
+KPX V Aacute -51
+KPX V Acircumflex -51
+KPX V Adieresis -51
+KPX V Agrave -51
+KPX V Aring -51
+KPX V Atilde -51
+KPX V C -25
+KPX V G -26
+KPX V O -26
+KPX V Oacute -26
+KPX V Ocircumflex -26
+KPX V Odieresis -26
+KPX V Ograve -26
+KPX V Oslash -22
+KPX V Otilde -26
+KPX V S -13
+KPX V T 22
+KPX V a -38
+KPX V ae -39
+KPX V colon -38
+KPX V comma -52
+KPX V e -34
+KPX V g -40
+KPX V guillemotleft -59
+KPX V guilsinglleft -57
+KPX V hyphen -14
+KPX V i -4
+KPX V o -40
+KPX V oslash -37
+KPX V period -52
+KPX V r -27
+KPX V semicolon -38
+KPX V u -31
+KPX V y -7
+KPX W A -40
+KPX W AE -36
+KPX W Aacute -40
+KPX W Acircumflex -40
+KPX W Adieresis -40
+KPX W Agrave -40
+KPX W Aring -40
+KPX W Atilde -40
+KPX W C -15
+KPX W G -16
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -12
+KPX W Otilde -16
+KPX W S -8
+KPX W T 24
+KPX W a -26
+KPX W ae -27
+KPX W colon -31
+KPX W comma -36
+KPX W e -21
+KPX W g -27
+KPX W guillemotleft -47
+KPX W guilsinglleft -45
+KPX W hyphen -2
+KPX W i -2
+KPX W o -28
+KPX W oslash -25
+KPX W period -36
+KPX W r -21
+KPX W semicolon -31
+KPX W u -24
+KPX W y -1
+KPX X C -26
+KPX X O -27
+KPX X Odieresis -27
+KPX X Q -27
+KPX X a -5
+KPX X e -20
+KPX X hyphen -21
+KPX X o -27
+KPX X u -24
+KPX X y -35
+KPX Y A -67
+KPX Y AE -62
+KPX Y Aacute -67
+KPX Y Acircumflex -67
+KPX Y Adieresis -67
+KPX Y Agrave -67
+KPX Y Aring -67
+KPX Y Atilde -67
+KPX Y C -36
+KPX Y G -38
+KPX Y O -37
+KPX Y Oacute -37
+KPX Y Ocircumflex -37
+KPX Y Odieresis -37
+KPX Y Ograve -37
+KPX Y Oslash -37
+KPX Y Otilde -37
+KPX Y S -19
+KPX Y T 24
+KPX Y a -58
+KPX Y ae -59
+KPX Y colon -52
+KPX Y comma -65
+KPX Y e -54
+KPX Y g -61
+KPX Y guillemotleft -83
+KPX Y guilsinglleft -81
+KPX Y hyphen -42
+KPX Y i -2
+KPX Y o -61
+KPX Y oslash -57
+KPX Y p -39
+KPX Y period -65
+KPX Y semicolon -52
+KPX Y u -45
+KPX Y v -22
+KPX Z v -9
+KPX Z y -8
+KPX a j 0
+KPX a quoteright -7
+KPX a v -15
+KPX a w -6
+KPX a y -13
+KPX aacute v -15
+KPX aacute w -6
+KPX aacute y -13
+KPX adieresis v -15
+KPX adieresis w -6
+KPX adieresis y -13
+KPX ae v -16
+KPX ae w -6
+KPX ae y -15
+KPX agrave v -15
+KPX agrave w -6
+KPX agrave y -13
+KPX aring v -15
+KPX aring w -6
+KPX aring y -13
+KPX b v -15
+KPX b w -5
+KPX b y -14
+KPX c h 0
+KPX c k -2
+KPX comma one -59
+KPX comma quotedblright -18
+KPX comma quoteright -20
+KPX e quoteright -8
+KPX e t -2
+KPX e v -15
+KPX e w -6
+KPX e x -16
+KPX e y -14
+KPX eacute v -15
+KPX eacute w -6
+KPX eacute y -14
+KPX ecircumflex v -15
+KPX ecircumflex w -6
+KPX ecircumflex y -14
+KPX eight four 12
+KPX eight one -15
+KPX eight seven 0
+KPX f a -5
+KPX f aacute -5
+KPX f adieresis -5
+KPX f ae -6
+KPX f aring -5
+KPX f e -5
+KPX f eacute -5
+KPX f f 17
+KPX f i -3
+KPX f j -7
+KPX f l -3
+KPX f o -12
+KPX f oacute -12
+KPX f odieresis -12
+KPX f oe -12
+KPX f oslash -9
+KPX f quoteright 11
+KPX f s -5
+KPX f t 17
+KPX five four 8
+KPX five one -20
+KPX five seven -2
+KPX four four 12
+KPX four one -37
+KPX four seven -19
+KPX g a 5
+KPX g adieresis 5
+KPX g ae 5
+KPX g aring 5
+KPX g e 10
+KPX g eacute 10
+KPX g l 3
+KPX g oacute 4
+KPX g odieresis 4
+KPX g r 6
+KPX guillemotright A -36
+KPX guillemotright AE -30
+KPX guillemotright Aacute -36
+KPX guillemotright Adieresis -36
+KPX guillemotright Aring -36
+KPX guillemotright T -84
+KPX guillemotright V -59
+KPX guillemotright W -48
+KPX guillemotright Y -86
+KPX guilsinglright A -33
+KPX guilsinglright AE -28
+KPX guilsinglright Aacute -33
+KPX guilsinglright Adieresis -33
+KPX guilsinglright Aring -33
+KPX guilsinglright T -82
+KPX guilsinglright V -56
+KPX guilsinglright W -45
+KPX guilsinglright Y -84
+KPX h quoteright -7
+KPX h y -14
+KPX hyphen A 7
+KPX hyphen AE 12
+KPX hyphen Aacute 7
+KPX hyphen Adieresis 7
+KPX hyphen Aring 7
+KPX hyphen T -39
+KPX hyphen V -14
+KPX hyphen W -3
+KPX hyphen Y -45
+KPX i T -2
+KPX i j -1
+KPX k a 0
+KPX k aacute 0
+KPX k adieresis 0
+KPX k ae 0
+KPX k aring 0
+KPX k comma 15
+KPX k e -6
+KPX k eacute -6
+KPX k g -14
+KPX k hyphen -10
+KPX k o -13
+KPX k oacute -13
+KPX k odieresis -13
+KPX k period 15
+KPX k s -8
+KPX k u -4
+KPX k udieresis 0
+KPX l v -7
+KPX l y -5
+KPX m p 3
+KPX m v -16
+KPX m w -7
+KPX m y -14
+KPX n T -63
+KPX n p 3
+KPX n quoteright -7
+KPX n v -16
+KPX n w -7
+KPX n y -14
+KPX nine four 10
+KPX nine one -11
+KPX nine seven -4
+KPX o T -64
+KPX o quoteright -13
+KPX o t -5
+KPX o v -18
+KPX o w -8
+KPX o x -20
+KPX o y -17
+KPX oacute v -18
+KPX oacute w -8
+KPX oacute y -17
+KPX ocircumflex t -5
+KPX odieresis t -5
+KPX odieresis v -18
+KPX odieresis w -8
+KPX odieresis x -20
+KPX odieresis y -17
+KPX ograve v -18
+KPX ograve w -8
+KPX ograve y -17
+KPX one comma -32
+KPX one eight -32
+KPX one five -33
+KPX one four -46
+KPX one nine -32
+KPX one one -65
+KPX one period -32
+KPX one seven -47
+KPX one six -29
+KPX one three -36
+KPX one two -37
+KPX one zero -28
+KPX p t -1
+KPX p y -14
+KPX period one -59
+KPX period quotedblright -18
+KPX period quoteright -20
+KPX q c 6
+KPX q u 4
+KPX quotedblbase A 16
+KPX quotedblbase AE 22
+KPX quotedblbase T -56
+KPX quotedblbase V -53
+KPX quotedblbase W -38
+KPX quotedblbase Y -69
+KPX quotedblleft A -49
+KPX quotedblleft AE -45
+KPX quotedblleft Aacute -49
+KPX quotedblleft Adieresis -49
+KPX quotedblleft Aring -49
+KPX quotedblleft T 3
+KPX quotedblleft V 10
+KPX quotedblleft W 15
+KPX quotedblleft Y 2
+KPX quotedblright A -52
+KPX quotedblright AE -48
+KPX quotedblright Aacute -52
+KPX quotedblright Adieresis -52
+KPX quotedblright Aring -52
+KPX quotedblright T 4
+KPX quotedblright V 7
+KPX quotedblright W 12
+KPX quotedblright Y 0
+KPX quoteleft A -51
+KPX quoteleft AE -47
+KPX quoteleft Aacute -51
+KPX quoteleft Adieresis -51
+KPX quoteleft Aring -51
+KPX quoteleft T 1
+KPX quoteleft V 7
+KPX quoteleft W 12
+KPX quoteleft Y 0
+KPX quoteright A -55
+KPX quoteright AE -51
+KPX quoteright Aacute -55
+KPX quoteright Adieresis -55
+KPX quoteright Aring -55
+KPX quoteright comma -31
+KPX quoteright d -18
+KPX quoteright o -24
+KPX quoteright period -31
+KPX quoteright r -7
+KPX quoteright s -16
+KPX quoteright t 4
+KPX quoteright v 0
+KPX quoteright w 5
+KPX quoteright y 2
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae -2
+KPX r agrave -1
+KPX r aring -1
+KPX r c -4
+KPX r ccedilla -1
+KPX r colon -12
+KPX r comma -42
+KPX r d -3
+KPX r e 0
+KPX r eacute 0
+KPX r ecircumflex 0
+KPX r egrave 0
+KPX r f 17
+KPX r g -2
+KPX r h -5
+KPX r hyphen -24
+KPX r i -7
+KPX r j -7
+KPX r k -7
+KPX r l -7
+KPX r m -5
+KPX r n -5
+KPX r o -6
+KPX r oacute -6
+KPX r ocircumflex -6
+KPX r odieresis -6
+KPX r oe -6
+KPX r ograve -6
+KPX r oslash -6
+KPX r p -4
+KPX r period -42
+KPX r q -3
+KPX r quoteright 13
+KPX r r -5
+KPX r s -1
+KPX r semicolon -12
+KPX r t 17
+KPX r u -6
+KPX r v 15
+KPX r w 16
+KPX r x 10
+KPX r y 16
+KPX r z 5
+KPX s quoteright -11
+KPX s t -5
+KPX seven colon -40
+KPX seven comma -71
+KPX seven eight -2
+KPX seven five -9
+KPX seven four -53
+KPX seven one -4
+KPX seven period -71
+KPX seven seven 14
+KPX seven six -6
+KPX seven three 1
+KPX seven two 1
+KPX six four 10
+KPX six one -13
+KPX six seven 1
+KPX t S 1
+KPX t a 4
+KPX t aacute 4
+KPX t adieresis 4
+KPX t ae 4
+KPX t aring 4
+KPX t colon -5
+KPX t e -2
+KPX t eacute -2
+KPX t h 5
+KPX t o -8
+KPX t oacute -8
+KPX t odieresis -8
+KPX t quoteright 7
+KPX t semicolon -4
+KPX three four 8
+KPX three one -18
+KPX three seven -3
+KPX two four -11
+KPX two one -11
+KPX two seven 0
+KPX u quoteright 1
+KPX v a -17
+KPX v aacute -17
+KPX v acircumflex -17
+KPX v adieresis -17
+KPX v ae -18
+KPX v agrave -17
+KPX v aring -17
+KPX v atilde -17
+KPX v c -16
+KPX v colon -13
+KPX v comma -35
+KPX v e -12
+KPX v eacute -12
+KPX v ecircumflex -12
+KPX v egrave -12
+KPX v g -18
+KPX v hyphen 5
+KPX v l -7
+KPX v o -19
+KPX v oacute -19
+KPX v odieresis -19
+KPX v ograve -19
+KPX v oslash -16
+KPX v period -35
+KPX v s -17
+KPX v semicolon -13
+KPX w a -7
+KPX w aacute -7
+KPX w acircumflex -7
+KPX w adieresis -7
+KPX w ae -8
+KPX w agrave -7
+KPX w aring -7
+KPX w atilde -7
+KPX w c -7
+KPX w colon -10
+KPX w comma -20
+KPX w e -2
+KPX w eacute -2
+KPX w ecircumflex -2
+KPX w egrave -2
+KPX w g -8
+KPX w hyphen 14
+KPX w l -3
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -6
+KPX w period -20
+KPX w s -8
+KPX w semicolon -10
+KPX x a -10
+KPX x c -17
+KPX x e -13
+KPX x eacute -13
+KPX x o -20
+KPX x q -17
+KPX y a -18
+KPX y aacute -18
+KPX y acircumflex -18
+KPX y adieresis -18
+KPX y ae -19
+KPX y agrave -18
+KPX y aring -18
+KPX y atilde -18
+KPX y c -18
+KPX y colon -14
+KPX y comma -36
+KPX y e -14
+KPX y eacute -14
+KPX y ecircumflex -14
+KPX y egrave -14
+KPX y g -20
+KPX y hyphen 4
+KPX y l -8
+KPX y o -20
+KPX y oacute -20
+KPX y odieresis -20
+KPX y ograve -20
+KPX y oslash -17
+KPX y period -35
+KPX y s -19
+KPX y semicolon -14
+KPX zero four 11
+KPX zero one -10
+KPX zero seven -1
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvb8ac.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvb8ac.pfb
new file mode 100644
index 00000000000..7ee6a2c812c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvb8ac.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvbo8a.afm b/Master/tlpkg/tlgs/lib/fonts/uhvbo8a.afm
new file mode 100644
index 00000000000..9433a322e29
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvbo8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-BoldItal
+FullName Nimbus Sans L Bold Italic
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -111
+UnderlineThickness 69
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -177 -309 1107 953
+CapHeight 729
+XHeight 540
+Descender -217
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 245 0 245 0 ;
+C 33 ; WX 333 ; N exclam ; B 112 0 417 726 ;
+C 34 ; WX 474 ; N quotedbl ; B 177 470 579 729 ;
+C 35 ; WX 556 ; N numbersign ; B 33 -32 660 697 ;
+C 36 ; WX 556 ; N dollar ; B 59 -126 628 763 ;
+C 37 ; WX 889 ; N percent ; B 129 -20 903 709 ;
+C 38 ; WX 722 ; N ampersand ; B 89 -23 720 723 ;
+C 39 ; WX 278 ; N quoteright ; B 165 469 356 729 ;
+C 40 ; WX 333 ; N parenleft ; B 84 -200 458 729 ;
+C 41 ; WX 333 ; N parenright ; B -21 -200 356 729 ;
+C 42 ; WX 389 ; N asterisk ; B 145 407 478 729 ;
+C 43 ; WX 584 ; N plus ; B 87 -10 596 473 ;
+C 44 ; WX 278 ; N comma ; B 27 -174 245 146 ;
+C 45 ; WX 333 ; N hyphen ; B 70 207 371 342 ;
+C 46 ; WX 278 ; N period ; B 64 0 245 146 ;
+C 47 ; WX 278 ; N slash ; B -1 -14 427 714 ;
+C 48 ; WX 556 ; N zero ; B 81 -23 614 724 ;
+C 49 ; WX 556 ; N one ; B 172 0 529 709 ;
+C 50 ; WX 556 ; N two ; B 30 0 628 724 ;
+C 51 ; WX 556 ; N three ; B 67 -23 613 724 ;
+C 52 ; WX 556 ; N four ; B 57 0 599 709 ;
+C 53 ; WX 556 ; N five ; B 59 -23 641 709 ;
+C 54 ; WX 556 ; N six ; B 85 -23 625 724 ;
+C 55 ; WX 556 ; N seven ; B 131 0 679 709 ;
+C 56 ; WX 556 ; N eight ; B 60 -23 620 724 ;
+C 57 ; WX 556 ; N nine ; B 68 -23 611 724 ;
+C 58 ; WX 333 ; N colon ; B 113 0 374 520 ;
+C 59 ; WX 333 ; N semicolon ; B 76 -174 374 520 ;
+C 60 ; WX 584 ; N less ; B 77 -10 630 474 ;
+C 61 ; WX 584 ; N equal ; B 61 52 622 412 ;
+C 62 ; WX 584 ; N greater ; B 38 -10 591 474 ;
+C 63 ; WX 611 ; N question ; B 168 0 672 744 ;
+C 64 ; WX 975 ; N at ; B 73 -137 1032 745 ;
+C 65 ; WX 722 ; N A ; B 26 0 703 729 ;
+C 66 ; WX 722 ; N B ; B 82 0 762 729 ;
+C 67 ; WX 722 ; N C ; B 107 -23 793 741 ;
+C 68 ; WX 722 ; N D ; B 77 0 776 729 ;
+C 69 ; WX 667 ; N E ; B 79 0 762 729 ;
+C 70 ; WX 611 ; N F ; B 74 0 741 729 ;
+C 71 ; WX 778 ; N G ; B 107 -23 819 741 ;
+C 72 ; WX 722 ; N H ; B 68 0 812 729 ;
+C 73 ; WX 278 ; N I ; B 63 0 368 729 ;
+C 74 ; WX 556 ; N J ; B 59 -23 641 729 ;
+C 75 ; WX 722 ; N K ; B 74 0 843 729 ;
+C 76 ; WX 611 ; N L ; B 80 0 606 729 ;
+C 77 ; WX 833 ; N M ; B 66 0 931 729 ;
+C 78 ; WX 722 ; N N ; B 68 0 816 729 ;
+C 79 ; WX 778 ; N O ; B 106 -23 828 741 ;
+C 80 ; WX 667 ; N P ; B 76 0 747 729 ;
+C 81 ; WX 778 ; N Q ; B 109 -54 831 741 ;
+C 82 ; WX 722 ; N R ; B 80 0 785 729 ;
+C 83 ; WX 667 ; N S ; B 76 -23 725 741 ;
+C 84 ; WX 611 ; N T ; B 142 0 753 729 ;
+C 85 ; WX 722 ; N U ; B 119 -23 809 729 ;
+C 86 ; WX 667 ; N V ; B 179 0 802 729 ;
+C 87 ; WX 944 ; N W ; B 168 0 1087 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 802 729 ;
+C 89 ; WX 667 ; N Y ; B 182 0 805 729 ;
+C 90 ; WX 611 ; N Z ; B 30 0 733 729 ;
+C 91 ; WX 333 ; N bracketleft ; B 23 -200 463 729 ;
+C 92 ; WX 278 ; N backslash ; B 138 -23 285 709 ;
+C 93 ; WX 333 ; N bracketright ; B -25 -200 415 729 ;
+C 94 ; WX 584 ; N asciicircum ; B 119 270 580 695 ;
+C 95 ; WX 556 ; N underscore ; B -65 -145 550 -76 ;
+C 96 ; WX 278 ; N quoteleft ; B 167 469 357 729 ;
+C 97 ; WX 556 ; N a ; B 50 -23 578 549 ;
+C 98 ; WX 611 ; N b ; B 59 -23 640 729 ;
+C 99 ; WX 556 ; N c ; B 77 -23 597 549 ;
+C 100 ; WX 611 ; N d ; B 79 -23 700 729 ;
+C 101 ; WX 556 ; N e ; B 64 -23 591 549 ;
+C 102 ; WX 333 ; N f ; B 90 0 464 729 ;
+C 103 ; WX 611 ; N g ; B 26 -218 656 549 ;
+C 104 ; WX 611 ; N h ; B 67 0 629 729 ;
+C 105 ; WX 278 ; N i ; B 67 0 362 729 ;
+C 106 ; WX 278 ; N j ; B -43 -218 365 729 ;
+C 107 ; WX 556 ; N k ; B 59 0 651 729 ;
+C 108 ; WX 278 ; N l ; B 67 0 362 729 ;
+C 109 ; WX 889 ; N m ; B 60 0 911 549 ;
+C 110 ; WX 611 ; N n ; B 63 0 629 549 ;
+C 111 ; WX 611 ; N o ; B 82 -23 634 549 ;
+C 112 ; WX 611 ; N p ; B 11 -218 637 549 ;
+C 113 ; WX 611 ; N q ; B 72 -218 659 549 ;
+C 114 ; WX 389 ; N r ; B 63 0 487 549 ;
+C 115 ; WX 556 ; N s ; B 60 -23 589 549 ;
+C 116 ; WX 333 ; N t ; B 101 -23 414 674 ;
+C 117 ; WX 611 ; N u ; B 88 -23 656 540 ;
+C 118 ; WX 556 ; N v ; B 129 0 651 540 ;
+C 119 ; WX 778 ; N w ; B 120 0 881 540 ;
+C 120 ; WX 556 ; N x ; B 16 0 648 540 ;
+C 121 ; WX 556 ; N y ; B 37 -219 653 540 ;
+C 122 ; WX 500 ; N z ; B 21 0 575 540 ;
+C 123 ; WX 389 ; N braceleft ; B 84 -200 472 729 ;
+C 124 ; WX 280 ; N bar ; B 57 -200 335 729 ;
+C 125 ; WX 389 ; N braceright ; B 29 -200 419 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 97 142 581 314 ;
+C 161 ; WX 333 ; N exclamdown ; B 26 -186 331 540 ;
+C 162 ; WX 556 ; N cent ; B 79 -124 598 634 ;
+C 163 ; WX 556 ; N sterling ; B 49 -23 629 715 ;
+C 164 ; WX 167 ; N fraction ; B -177 -20 489 715 ;
+C 165 ; WX 556 ; N yen ; B 107 0 702 704 ;
+C 166 ; WX 556 ; N florin ; B -21 -220 690 744 ;
+C 167 ; WX 556 ; N section ; B 56 -201 596 723 ;
+C 168 ; WX 556 ; N currency ; B 66 100 644 604 ;
+C 169 ; WX 238 ; N quotesingle ; B 177 470 343 729 ;
+C 170 ; WX 500 ; N quotedblleft ; B 171 469 588 729 ;
+C 171 ; WX 556 ; N guillemotleft ; B 135 72 571 481 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 128 72 351 481 ;
+C 173 ; WX 333 ; N guilsinglright ; B 96 72 319 481 ;
+C 174 ; WX 611 ; N fi ; B 85 0 703 729 ;
+C 175 ; WX 611 ; N fl ; B 88 0 701 729 ;
+C 177 ; WX 556 ; N endash ; B 35 207 624 311 ;
+C 178 ; WX 556 ; N dagger ; B 109 -194 626 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 35 -194 623 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 143 182 270 282 ;
+C 182 ; WX 556 ; N paragraph ; B 121 -191 684 729 ;
+C 183 ; WX 350 ; N bullet ; B 111 175 367 425 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 37 -135 228 125 ;
+C 185 ; WX 500 ; N quotedblbase ; B 37 -135 462 125 ;
+C 186 ; WX 500 ; N quotedblright ; B 173 469 595 729 ;
+C 187 ; WX 556 ; N guillemotright ; B 103 72 533 481 ;
+C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ;
+C 189 ; WX 1000 ; N perthousand ; B 72 -21 1021 739 ;
+C 191 ; WX 611 ; N questiondown ; B 52 -204 556 540 ;
+C 193 ; WX 333 ; N grave ; B 175 607 339 757 ;
+C 194 ; WX 333 ; N acute ; B 247 607 475 757 ;
+C 195 ; WX 333 ; N circumflex ; B 135 610 453 757 ;
+C 196 ; WX 333 ; N tilde ; B 117 622 500 744 ;
+C 197 ; WX 333 ; N macron ; B 150 642 467 722 ;
+C 198 ; WX 333 ; N breve ; B 188 611 455 754 ;
+C 199 ; WX 333 ; N dotaccent ; B 241 621 377 741 ;
+C 200 ; WX 333 ; N dieresis ; B 147 621 469 741 ;
+C 202 ; WX 333 ; N ring ; B 214 593 398 773 ;
+C 203 ; WX 333 ; N cedilla ; B -13 -220 270 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 82 610 498 757 ;
+C 206 ; WX 333 ; N ogonek ; B 23 -233 248 0 ;
+C 207 ; WX 333 ; N caron ; B 167 610 485 757 ;
+C 208 ; WX 1000 ; N emdash ; B 37 207 1070 311 ;
+C 225 ; WX 1000 ; N AE ; B 1 0 1104 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 96 262 451 729 ;
+C 232 ; WX 611 ; N Lslash ; B 54 0 624 729 ;
+C 233 ; WX 778 ; N Oslash ; B 34 -39 906 749 ;
+C 234 ; WX 1000 ; N OE ; B 90 -23 1107 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 92 262 471 729 ;
+C 241 ; WX 889 ; N ae ; B 54 -23 927 549 ;
+C 245 ; WX 278 ; N dotlessi ; B 67 0 322 540 ;
+C 248 ; WX 278 ; N lslash ; B 50 0 372 729 ;
+C 249 ; WX 611 ; N oslash ; B 12 -38 709 557 ;
+C 250 ; WX 944 ; N oe ; B 71 -23 986 549 ;
+C 251 ; WX 611 ; N germandbls ; B 67 -23 654 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 119 -23 809 920 ;
+C -1 ; WX 722 ; N Uacute ; B 119 -23 809 936 ;
+C -1 ; WX 667 ; N Scedilla ; B 76 -220 725 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 142 0 753 936 ;
+C -1 ; WX 667 ; N Scaron ; B 76 -23 725 936 ;
+C -1 ; WX 722 ; N Rcaron ; B 80 0 785 936 ;
+C -1 ; WX 722 ; N Racute ; B 80 0 785 936 ;
+C -1 ; WX 667 ; N Sacute ; B 76 -23 725 936 ;
+C -1 ; WX 778 ; N Otilde ; B 106 -23 828 923 ;
+C -1 ; WX 611 ; N ucircumflex ; B 88 -23 656 757 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 106 -23 841 936 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 119 -23 809 936 ;
+C -1 ; WX 667 ; N Yacute ; B 182 0 805 936 ;
+C -1 ; WX 722 ; N Eth ; B 73 0 776 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 73 0 776 729 ;
+C -1 ; WX 611 ; N Zacute ; B 30 0 733 936 ;
+C -1 ; WX 722 ; N Uring ; B 119 -23 809 953 ;
+C -1 ; WX 611 ; N gbreve ; B 26 -218 656 754 ;
+C -1 ; WX 556 ; N eogonek ; B 64 -233 591 549 ;
+C -1 ; WX 556 ; N edotaccent ; B 64 -23 591 741 ;
+C -1 ; WX 556 ; N ecaron ; B 64 -23 593 757 ;
+C -1 ; WX 722 ; N Ugrave ; B 119 -23 809 936 ;
+C -1 ; WX 667 ; N Thorn ; B 76 0 721 729 ;
+C -1 ; WX 556 ; N eacute ; B 64 -23 591 757 ;
+C -1 ; WX 556 ; N edieresis ; B 64 -23 591 741 ;
+C -1 ; WX 722 ; N dcaron ; B 79 -23 882 729 ;
+C -1 ; WX 556 ; N ccedilla ; B 77 -220 597 549 ;
+C -1 ; WX 556 ; N ccaron ; B 77 -23 607 757 ;
+C -1 ; WX 556 ; N cacute ; B 77 -23 597 757 ;
+C -1 ; WX 556 ; N aogonek ; B 50 -233 578 549 ;
+C -1 ; WX 556 ; N aring ; B 50 -23 578 773 ;
+C -1 ; WX 556 ; N atilde ; B 50 -23 612 744 ;
+C -1 ; WX 556 ; N abreve ; B 50 -23 578 754 ;
+C -1 ; WX 556 ; N egrave ; B 64 -23 591 757 ;
+C -1 ; WX 556 ; N agrave ; B 50 -23 578 757 ;
+C -1 ; WX 556 ; N aacute ; B 50 -23 587 757 ;
+C -1 ; WX 556 ; N adieresis ; B 50 -23 581 741 ;
+C -1 ; WX 722 ; N Uogonek ; B 119 -233 809 729 ;
+C -1 ; WX 611 ; N ugrave ; B 88 -23 656 757 ;
+C -1 ; WX 611 ; N uacute ; B 88 -23 656 757 ;
+C -1 ; WX 611 ; N udieresis ; B 88 -23 656 741 ;
+C -1 ; WX 404 ; N tcaron ; B 101 -23 578 829 ;
+C -1 ; WX 556 ; N scommaaccent ; B 60 -307 589 549 ;
+C -1 ; WX 611 ; N Zcaron ; B 30 0 733 936 ;
+C -1 ; WX 556 ; N ecircumflex ; B 64 -23 591 757 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 119 -23 809 936 ;
+C -1 ; WX 556 ; N acircumflex ; B 50 -23 578 757 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 30 0 733 918 ;
+C -1 ; WX 556 ; N scaron ; B 60 -23 597 757 ;
+C -1 ; WX 722 ; N Amacron ; B 26 0 706 901 ;
+C -1 ; WX 556 ; N sacute ; B 60 -23 589 757 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 142 -307 753 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 182 0 805 920 ;
+C -1 ; WX 611 ; N thorn ; B 11 -218 637 729 ;
+C -1 ; WX 667 ; N Emacron ; B 79 0 762 901 ;
+C -1 ; WX 778 ; N Ograve ; B 106 -23 828 936 ;
+C -1 ; WX 778 ; N Oacute ; B 106 -23 828 936 ;
+C -1 ; WX 778 ; N Odieresis ; B 106 -23 828 920 ;
+C -1 ; WX 722 ; N Ntilde ; B 68 0 816 923 ;
+C -1 ; WX 722 ; N Ncaron ; B 68 0 816 936 ;
+C -1 ; WX 722 ; N Nacute ; B 68 0 816 936 ;
+C -1 ; WX 611 ; N Lcaron ; B 80 0 607 729 ;
+C -1 ; WX 611 ; N Lacute ; B 80 0 606 936 ;
+C -1 ; WX 278 ; N Idotaccent ; B 63 0 388 918 ;
+C -1 ; WX 389 ; N racute ; B 63 0 500 757 ;
+C -1 ; WX 278 ; N Icircumflex ; B 63 0 467 936 ;
+C -1 ; WX 611 ; N ohungarumlaut ; B 82 -23 710 757 ;
+C -1 ; WX 611 ; N otilde ; B 82 -23 639 744 ;
+C -1 ; WX 556 ; N Euro ; B 21 -23 648 724 ;
+C -1 ; WX 611 ; N ocircumflex ; B 82 -23 634 757 ;
+C -1 ; WX 444 ; N onesuperior ; B 210 284 438 709 ;
+C -1 ; WX 444 ; N twosuperior ; B 124 284 499 718 ;
+C -1 ; WX 444 ; N threesuperior ; B 147 271 490 718 ;
+C -1 ; WX 278 ; N Igrave ; B 63 0 368 936 ;
+C -1 ; WX 278 ; N Iacute ; B 63 0 489 936 ;
+C -1 ; WX 278 ; N Imacron ; B 63 0 466 901 ;
+C -1 ; WX 278 ; N Iogonek ; B 7 -233 368 729 ;
+C -1 ; WX 278 ; N Idieresis ; B 63 0 483 920 ;
+C -1 ; WX 778 ; N Gbreve ; B 107 -23 819 934 ;
+C -1 ; WX 722 ; N Umacron ; B 119 -23 809 901 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B 74 -307 843 729 ;
+C -1 ; WX 611 ; N ograve ; B 82 -23 634 757 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 76 -307 725 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 79 -233 762 729 ;
+C -1 ; WX 611 ; N oacute ; B 82 -23 634 757 ;
+C -1 ; WX 667 ; N Edotaccent ; B 79 0 762 918 ;
+C -1 ; WX 268 ; N iogonek ; B 0 -233 351 729 ;
+C -1 ; WX 611 ; N gcommaaccent ; B 26 -218 656 854 ;
+C -1 ; WX 611 ; N odieresis ; B 82 -23 634 741 ;
+C -1 ; WX 611 ; N ntilde ; B 63 0 646 744 ;
+C -1 ; WX 611 ; N ncaron ; B 63 0 629 757 ;
+C -1 ; WX 667 ; N Ecaron ; B 79 0 762 936 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 79 0 762 936 ;
+C -1 ; WX 556 ; N scedilla ; B 60 -220 589 549 ;
+C -1 ; WX 389 ; N rcaron ; B 63 0 533 757 ;
+C -1 ; WX 667 ; N Egrave ; B 79 0 762 936 ;
+C -1 ; WX 667 ; N Eacute ; B 79 0 762 936 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 107 -307 819 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 80 -307 785 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 79 0 762 920 ;
+C -1 ; WX 611 ; N nacute ; B 63 0 629 757 ;
+C -1 ; WX 611 ; N uogonek ; B 88 -233 656 540 ;
+C -1 ; WX 611 ; N umacron ; B 88 -23 656 722 ;
+C -1 ; WX 722 ; N Dcaron ; B 77 0 776 936 ;
+C -1 ; WX 384 ; N lcaron ; B 67 0 544 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 107 -23 793 936 ;
+C -1 ; WX 722 ; N Cacute ; B 107 -23 793 936 ;
+C -1 ; WX 722 ; N Ccedilla ; B 107 -220 793 741 ;
+C -1 ; WX 606 ; N degree ; B 240 383 543 686 ;
+C -1 ; WX 722 ; N Aogonek ; B 26 -233 703 729 ;
+C -1 ; WX 584 ; N minus ; B 77 172 606 292 ;
+C -1 ; WX 584 ; N multiply ; B 102 18 582 444 ;
+C -1 ; WX 584 ; N divide ; B 77 0 606 462 ;
+C -1 ; WX 722 ; N Aring ; B 26 0 703 953 ;
+C -1 ; WX 1000 ; N trademark ; B 213 273 1087 729 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 8 -307 487 549 ;
+C -1 ; WX 278 ; N lacute ; B 67 0 474 936 ;
+C -1 ; WX 611 ; N omacron ; B 82 -23 634 722 ;
+C -1 ; WX 722 ; N Atilde ; B 26 0 739 923 ;
+C -1 ; WX 278 ; N icircumflex ; B 67 0 426 757 ;
+C -1 ; WX 278 ; N igrave ; B 67 0 322 757 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 63 -307 629 549 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 11 -307 362 729 ;
+C -1 ; WX 584 ; N plusminus ; B 50 0 630 633 ;
+C -1 ; WX 1055 ; N onehalf ; B 210 -20 1050 715 ;
+C -1 ; WX 1055 ; N onequarter ; B 210 -20 1032 715 ;
+C -1 ; WX 1055 ; N threequarters ; B 147 -20 1032 718 ;
+C -1 ; WX 278 ; N iacute ; B 67 0 448 757 ;
+C -1 ; WX 722 ; N Abreve ; B 26 0 703 934 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 59 -307 651 729 ;
+C -1 ; WX 778 ; N Omacron ; B 106 -23 828 901 ;
+C -1 ; WX 278 ; N imacron ; B 67 0 424 722 ;
+C -1 ; WX 556 ; N emacron ; B 64 -23 591 722 ;
+C -1 ; WX 556 ; N amacron ; B 50 -23 579 722 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 62 -307 414 674 ;
+C -1 ; WX 556 ; N ydieresis ; B 37 -219 653 741 ;
+C -1 ; WX 500 ; N zdotaccent ; B 21 0 575 741 ;
+C -1 ; WX 500 ; N zcaron ; B 21 0 575 757 ;
+C -1 ; WX 500 ; N zacute ; B 21 0 575 757 ;
+C -1 ; WX 556 ; N yacute ; B 37 -219 653 757 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 88 -23 697 757 ;
+C -1 ; WX 611 ; N eth ; B 83 -23 633 744 ;
+C -1 ; WX 611 ; N uring ; B 88 -23 656 773 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 106 -23 828 936 ;
+C -1 ; WX 333 ; N commaaccent ; B 43 -307 217 -60 ;
+C -1 ; WX 737 ; N copyright ; B 54 -22 837 743 ;
+C -1 ; WX 737 ; N registered ; B 55 -22 837 743 ;
+C -1 ; WX 722 ; N Acircumflex ; B 26 0 703 936 ;
+C -1 ; WX 278 ; N idieresis ; B 67 0 442 741 ;
+C -1 ; WX 489 ; N lozenge ; B 95 0 541 744 ;
+C -1 ; WX 729 ; N Delta ; B 8 0 721 729 ;
+C -1 ; WX 584 ; N notequal ; B 61 -74 622 544 ;
+C -1 ; WX 542 ; N radical ; B 102 -36 705 913 ;
+C -1 ; WX 722 ; N Agrave ; B 26 0 703 936 ;
+C -1 ; WX 722 ; N Aacute ; B 26 0 714 936 ;
+C -1 ; WX 584 ; N lessequal ; B 35 0 657 624 ;
+C -1 ; WX 584 ; N greaterequal ; B 44 0 627 624 ;
+C -1 ; WX 584 ; N logicalnot ; B 103 86 632 376 ;
+C -1 ; WX 711 ; N summation ; B -18 -97 760 760 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 68 -307 816 729 ;
+C -1 ; WX 611 ; N dcroat ; B 79 -23 746 729 ;
+C -1 ; WX 280 ; N brokenbar ; B 57 -200 335 729 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 80 -309 606 729 ;
+C -1 ; WX 722 ; N Adieresis ; B 26 0 708 920 ;
+C -1 ; WX 611 ; N mu ; B 11 -220 655 540 ;
+C -1 ; WX 278 ; N .notdef ; B 245 0 245 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -36
+KPX A G -38
+KPX A O -37
+KPX A Odieresis -37
+KPX A Q -39
+KPX A T -91
+KPX A U -37
+KPX A Uacute -37
+KPX A Ucircumflex -37
+KPX A Udieresis -37
+KPX A Ugrave -37
+KPX A V -74
+KPX A W -57
+KPX A Y -96
+KPX A a -11
+KPX A b -10
+KPX A c -17
+KPX A ccedilla -17
+KPX A comma 9
+KPX A d -17
+KPX A e -10
+KPX A g -20
+KPX A guillemotleft -48
+KPX A guilsinglleft -44
+KPX A hyphen 2
+KPX A o -19
+KPX A period 13
+KPX A q -13
+KPX A quotedblright -71
+KPX A quoteright -67
+KPX A t -21
+KPX A u -17
+KPX A v -42
+KPX A w -28
+KPX A y -41
+KPX Aacute C -37
+KPX Aacute G -38
+KPX Aacute O -38
+KPX Aacute Q -40
+KPX Aacute T -91
+KPX Aacute U -38
+KPX Aacute V -74
+KPX Aacute W -57
+KPX Aacute Y -96
+KPX Aacute a -11
+KPX Aacute b -10
+KPX Aacute c -17
+KPX Aacute comma 9
+KPX Aacute d -17
+KPX Aacute e -11
+KPX Aacute g -20
+KPX Aacute guillemotleft -48
+KPX Aacute guilsinglleft -45
+KPX Aacute hyphen 2
+KPX Aacute o -20
+KPX Aacute period 12
+KPX Aacute q -14
+KPX Aacute quoteright -67
+KPX Aacute t -22
+KPX Aacute u -18
+KPX Aacute v -42
+KPX Aacute w -29
+KPX Aacute y -41
+KPX Acircumflex C -36
+KPX Acircumflex G -38
+KPX Acircumflex O -37
+KPX Acircumflex Q -39
+KPX Acircumflex T -91
+KPX Acircumflex U -37
+KPX Acircumflex V -74
+KPX Acircumflex W -57
+KPX Acircumflex Y -96
+KPX Acircumflex comma 9
+KPX Acircumflex period 13
+KPX Adieresis C -37
+KPX Adieresis G -38
+KPX Adieresis O -38
+KPX Adieresis Q -39
+KPX Adieresis T -91
+KPX Adieresis U -38
+KPX Adieresis V -74
+KPX Adieresis W -57
+KPX Adieresis Y -96
+KPX Adieresis a -11
+KPX Adieresis b -10
+KPX Adieresis c -17
+KPX Adieresis comma 9
+KPX Adieresis d -17
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -48
+KPX Adieresis guilsinglleft -44
+KPX Adieresis hyphen 2
+KPX Adieresis o -20
+KPX Adieresis period 12
+KPX Adieresis q -13
+KPX Adieresis quotedblright -71
+KPX Adieresis quoteright -67
+KPX Adieresis t -22
+KPX Adieresis u -17
+KPX Adieresis v -42
+KPX Adieresis w -28
+KPX Adieresis y -41
+KPX Agrave C -36
+KPX Agrave G -38
+KPX Agrave O -37
+KPX Agrave Q -39
+KPX Agrave T -91
+KPX Agrave U -37
+KPX Agrave V -74
+KPX Agrave W -57
+KPX Agrave Y -96
+KPX Agrave comma 9
+KPX Agrave period 13
+KPX Aring C -36
+KPX Aring G -38
+KPX Aring O -37
+KPX Aring Q -39
+KPX Aring T -91
+KPX Aring U -37
+KPX Aring V -74
+KPX Aring W -57
+KPX Aring Y -96
+KPX Aring a -11
+KPX Aring b -10
+KPX Aring c -17
+KPX Aring comma 9
+KPX Aring d -17
+KPX Aring e -10
+KPX Aring g -20
+KPX Aring guillemotleft -48
+KPX Aring guilsinglleft -44
+KPX Aring hyphen 2
+KPX Aring o -19
+KPX Aring period 13
+KPX Aring q -13
+KPX Aring quotedblright -71
+KPX Aring quoteright -67
+KPX Aring t -21
+KPX Aring u -17
+KPX Aring v -42
+KPX Aring w -28
+KPX Aring y -41
+KPX Atilde C -38
+KPX Atilde G -40
+KPX Atilde O -39
+KPX Atilde Q -41
+KPX Atilde T -92
+KPX Atilde U -39
+KPX Atilde V -74
+KPX Atilde W -57
+KPX Atilde Y -96
+KPX Atilde comma 9
+KPX Atilde period 11
+KPX B A -41
+KPX B AE -30
+KPX B Aacute -41
+KPX B Acircumflex -41
+KPX B Adieresis -41
+KPX B Aring -41
+KPX B Atilde -41
+KPX B O -18
+KPX B OE -9
+KPX B Oacute -18
+KPX B Ocircumflex -18
+KPX B Odieresis -18
+KPX B Ograve -18
+KPX B Oslash -17
+KPX B V -46
+KPX B W -30
+KPX B Y -63
+KPX C A -34
+KPX C AE -23
+KPX C Aacute -34
+KPX C Adieresis -34
+KPX C Aring -34
+KPX C H -1
+KPX C K -4
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -34
+KPX D A -40
+KPX D Aacute -40
+KPX D Acircumflex -40
+KPX D Adieresis -40
+KPX D Agrave -40
+KPX D Aring -40
+KPX D Atilde -40
+KPX D J -4
+KPX D T -24
+KPX D V -37
+KPX D W -20
+KPX D X -40
+KPX D Y -62
+KPX F A -68
+KPX F Aacute -68
+KPX F Acircumflex -68
+KPX F Adieresis -68
+KPX F Agrave -68
+KPX F Aring -68
+KPX F Atilde -68
+KPX F J -33
+KPX F O -24
+KPX F Odieresis -24
+KPX F a -23
+KPX F aacute -23
+KPX F adieresis -23
+KPX F ae -26
+KPX F aring -23
+KPX F comma -84
+KPX F e -12
+KPX F eacute -12
+KPX F hyphen 4
+KPX F i -15
+KPX F j -17
+KPX F o -21
+KPX F oacute -21
+KPX F odieresis -21
+KPX F oe -16
+KPX F oslash -24
+KPX F period -82
+KPX F r -35
+KPX F u -32
+KPX G A -17
+KPX G AE -5
+KPX G Aacute -17
+KPX G Acircumflex -17
+KPX G Adieresis -17
+KPX G Agrave -17
+KPX G Aring -17
+KPX G Atilde -17
+KPX G T -28
+KPX G V -41
+KPX G W -25
+KPX G Y -65
+KPX J A -38
+KPX J AE -29
+KPX J Adieresis -38
+KPX J Aring -38
+KPX K C -59
+KPX K G -61
+KPX K O -60
+KPX K OE -51
+KPX K Oacute -60
+KPX K Odieresis -60
+KPX K S -45
+KPX K T 5
+KPX K a -17
+KPX K adieresis -17
+KPX K ae -17
+KPX K aring -17
+KPX K e -38
+KPX K hyphen -52
+KPX K o -45
+KPX K oacute -45
+KPX K odieresis -45
+KPX K u -35
+KPX K udieresis -35
+KPX K y -74
+KPX L A 0
+KPX L AE 12
+KPX L Aacute 0
+KPX L Adieresis 0
+KPX L Aring 0
+KPX L C -35
+KPX L Ccedilla -36
+KPX L G -40
+KPX L O -39
+KPX L Oacute -39
+KPX L Ocircumflex -39
+KPX L Odieresis -39
+KPX L Ograve -39
+KPX L Otilde -39
+KPX L S -14
+KPX L T -104
+KPX L U -35
+KPX L Udieresis -35
+KPX L V -102
+KPX L W -79
+KPX L Y -121
+KPX L hyphen -20
+KPX L quotedblright -147
+KPX L quoteright -143
+KPX L u -17
+KPX L udieresis -17
+KPX L y -64
+KPX N A -15
+KPX N AE -2
+KPX N Aacute -15
+KPX N Adieresis -15
+KPX N Aring -15
+KPX N C -1
+KPX N Ccedilla -1
+KPX N G -2
+KPX N O -2
+KPX N Oacute -2
+KPX N Odieresis -2
+KPX N a 5
+KPX N aacute 5
+KPX N adieresis 5
+KPX N ae 4
+KPX N aring 5
+KPX N comma 7
+KPX N e 10
+KPX N eacute 10
+KPX N o 1
+KPX N oacute 1
+KPX N odieresis 1
+KPX N oslash 2
+KPX N period 8
+KPX N u 4
+KPX N udieresis 4
+KPX O A -42
+KPX O AE -33
+KPX O Aacute -42
+KPX O Adieresis -42
+KPX O Aring -42
+KPX O T -32
+KPX O V -40
+KPX O W -24
+KPX O X -43
+KPX O Y -65
+KPX Oacute A -42
+KPX Oacute T -32
+KPX Oacute V -40
+KPX Oacute W -24
+KPX Oacute Y -65
+KPX Ocircumflex T -32
+KPX Ocircumflex V -40
+KPX Ocircumflex Y -65
+KPX Odieresis A -42
+KPX Odieresis T -32
+KPX Odieresis V -40
+KPX Odieresis W -24
+KPX Odieresis X -43
+KPX Odieresis Y -65
+KPX Ograve T -32
+KPX Ograve V -40
+KPX Ograve Y -65
+KPX Oslash A -34
+KPX Otilde T -32
+KPX Otilde V -40
+KPX Otilde Y -65
+KPX P A -71
+KPX P AE -62
+KPX P Aacute -71
+KPX P Adieresis -71
+KPX P Aring -71
+KPX P J -52
+KPX P a -14
+KPX P aacute -14
+KPX P adieresis -14
+KPX P ae -15
+KPX P aring -14
+KPX P comma -103
+KPX P e -13
+KPX P eacute -13
+KPX P hyphen -7
+KPX P o -22
+KPX P oacute -22
+KPX P odieresis -22
+KPX P oe -17
+KPX P oslash -26
+KPX P period -101
+KPX R C -12
+KPX R Ccedilla -12
+KPX R G -13
+KPX R O -13
+KPX R OE -3
+KPX R Oacute -13
+KPX R Odieresis -13
+KPX R T -12
+KPX R U -12
+KPX R Udieresis -12
+KPX R V -38
+KPX R W -22
+KPX R Y -50
+KPX R a -4
+KPX R aacute -4
+KPX R adieresis -4
+KPX R ae -5
+KPX R aring -4
+KPX R e 0
+KPX R eacute 0
+KPX R hyphen 10
+KPX R o -9
+KPX R oacute -9
+KPX R odieresis -9
+KPX R oe -4
+KPX R u -6
+KPX R uacute -6
+KPX R udieresis -6
+KPX R y -4
+KPX S A -26
+KPX S AE -14
+KPX S Aacute -26
+KPX S Adieresis -26
+KPX S Aring -26
+KPX S T -15
+KPX S V -36
+KPX S W -20
+KPX S Y -54
+KPX S t -4
+KPX T A -93
+KPX T AE -85
+KPX T Aacute -93
+KPX T Acircumflex -93
+KPX T Adieresis -93
+KPX T Agrave -93
+KPX T Aring -93
+KPX T Atilde -93
+KPX T C -29
+KPX T G -30
+KPX T J -95
+KPX T O -30
+KPX T OE -20
+KPX T Oacute -30
+KPX T Ocircumflex -30
+KPX T Odieresis -30
+KPX T Ograve -30
+KPX T Oslash -36
+KPX T Otilde -30
+KPX T S -7
+KPX T V 9
+KPX T W 15
+KPX T Y 7
+KPX T a -77
+KPX T ae -78
+KPX T c -79
+KPX T colon -104
+KPX T comma -75
+KPX T e -72
+KPX T g -79
+KPX T guillemotleft -107
+KPX T guilsinglleft -103
+KPX T hyphen -53
+KPX T i -9
+KPX T j -11
+KPX T o -81
+KPX T oslash -80
+KPX T period -73
+KPX T r -76
+KPX T s -81
+KPX T semicolon -105
+KPX T u -78
+KPX T v -91
+KPX T w -85
+KPX T y -89
+KPX U A -40
+KPX U AE -30
+KPX U Aacute -40
+KPX U Acircumflex -40
+KPX U Adieresis -40
+KPX U Aring -40
+KPX U Atilde -40
+KPX U comma -17
+KPX U m -3
+KPX U n -5
+KPX U p -3
+KPX U period -12
+KPX U r -5
+KPX Uacute A -40
+KPX Uacute comma -17
+KPX Uacute m -3
+KPX Uacute n -5
+KPX Uacute p -3
+KPX Uacute period -12
+KPX Uacute r -5
+KPX Ucircumflex A -40
+KPX Udieresis A -40
+KPX Udieresis b -4
+KPX Udieresis comma -17
+KPX Udieresis m -3
+KPX Udieresis n -5
+KPX Udieresis p -3
+KPX Udieresis period -12
+KPX Udieresis r -5
+KPX Ugrave A -40
+KPX V A -75
+KPX V AE -65
+KPX V Aacute -75
+KPX V Acircumflex -75
+KPX V Adieresis -75
+KPX V Agrave -75
+KPX V Aring -75
+KPX V Atilde -75
+KPX V C -43
+KPX V G -44
+KPX V O -44
+KPX V Oacute -44
+KPX V Ocircumflex -44
+KPX V Odieresis -44
+KPX V Ograve -44
+KPX V Oslash -42
+KPX V Otilde -44
+KPX V S -31
+KPX V T 12
+KPX V a -51
+KPX V ae -52
+KPX V colon -74
+KPX V comma -76
+KPX V e -46
+KPX V g -54
+KPX V guillemotleft -81
+KPX V guilsinglleft -77
+KPX V hyphen -26
+KPX V i -13
+KPX V o -56
+KPX V oslash -55
+KPX V period -74
+KPX V r -43
+KPX V semicolon -77
+KPX V u -42
+KPX V y -19
+KPX W A -59
+KPX W AE -50
+KPX W Aacute -59
+KPX W Acircumflex -59
+KPX W Adieresis -59
+KPX W Agrave -59
+KPX W Aring -59
+KPX W Atilde -59
+KPX W C -28
+KPX W G -29
+KPX W O -29
+KPX W Oacute -29
+KPX W Ocircumflex -29
+KPX W Odieresis -29
+KPX W Ograve -29
+KPX W Oslash -27
+KPX W Otilde -29
+KPX W S -22
+KPX W T 16
+KPX W a -34
+KPX W ae -34
+KPX W colon -61
+KPX W comma -53
+KPX W e -28
+KPX W g -36
+KPX W guillemotleft -63
+KPX W guilsinglleft -59
+KPX W hyphen -9
+KPX W i -9
+KPX W o -38
+KPX W oslash -37
+KPX W period -51
+KPX W r -33
+KPX W semicolon -63
+KPX W u -32
+KPX W y -9
+KPX X C -39
+KPX X O -40
+KPX X Odieresis -40
+KPX X Q -43
+KPX X a -17
+KPX X e -33
+KPX X hyphen -33
+KPX X o -43
+KPX X u -35
+KPX X y -48
+KPX Y A -91
+KPX Y AE -81
+KPX Y Aacute -91
+KPX Y Acircumflex -91
+KPX Y Adieresis -91
+KPX Y Agrave -91
+KPX Y Aring -91
+KPX Y Atilde -91
+KPX Y C -60
+KPX Y G -61
+KPX Y O -61
+KPX Y Oacute -61
+KPX Y Ocircumflex -61
+KPX Y Odieresis -61
+KPX Y Ograve -61
+KPX Y Oslash -58
+KPX Y Otilde -61
+KPX Y S -39
+KPX Y T 14
+KPX Y a -71
+KPX Y ae -71
+KPX Y colon -90
+KPX Y comma -85
+KPX Y e -66
+KPX Y g -73
+KPX Y guillemotleft -105
+KPX Y guilsinglleft -101
+KPX Y hyphen -55
+KPX Y i -11
+KPX Y o -76
+KPX Y oslash -74
+KPX Y p -53
+KPX Y period -84
+KPX Y semicolon -93
+KPX Y u -57
+KPX Y v -36
+KPX Z v -21
+KPX Z y -19
+KPX a j -7
+KPX a quoteright -14
+KPX a v -23
+KPX a w -10
+KPX a y -24
+KPX aacute v -23
+KPX aacute w -10
+KPX aacute y -24
+KPX adieresis v -23
+KPX adieresis w -10
+KPX adieresis y -24
+KPX ae v -21
+KPX ae w -7
+KPX ae y -23
+KPX agrave v -23
+KPX agrave w -10
+KPX agrave y -24
+KPX aring v -23
+KPX aring w -10
+KPX aring y -24
+KPX b v -23
+KPX b w -9
+KPX b y -25
+KPX c h -9
+KPX c k -5
+KPX comma one -79
+KPX comma quotedblright -39
+KPX comma quoteright -35
+KPX e quoteright -13
+KPX e t -9
+KPX e v -22
+KPX e w -9
+KPX e x -25
+KPX e y -25
+KPX eacute v -22
+KPX eacute w -9
+KPX eacute y -25
+KPX ecircumflex v -22
+KPX ecircumflex w -9
+KPX ecircumflex y -25
+KPX eight four 2
+KPX eight one -32
+KPX eight seven -15
+KPX f a -6
+KPX f aacute -6
+KPX f adieresis -6
+KPX f ae -6
+KPX f aring -6
+KPX f e -6
+KPX f eacute -6
+KPX f f 14
+KPX f i -13
+KPX f j -15
+KPX f l -13
+KPX f o -16
+KPX f oacute -16
+KPX f odieresis -16
+KPX f oe -11
+KPX f oslash -16
+KPX f quoteright 0
+KPX f s -10
+KPX f t 14
+KPX five four -3
+KPX five one -37
+KPX five seven -17
+KPX four four 0
+KPX four one -55
+KPX four seven -33
+KPX g a -3
+KPX g adieresis -3
+KPX g ae -4
+KPX g aring -3
+KPX g e 1
+KPX g eacute 1
+KPX g l -5
+KPX g oacute -8
+KPX g odieresis -8
+KPX g r -3
+KPX guillemotright A -56
+KPX guillemotright AE -46
+KPX guillemotright Aacute -56
+KPX guillemotright Adieresis -56
+KPX guillemotright Aring -56
+KPX guillemotright T -115
+KPX guillemotright V -84
+KPX guillemotright W -65
+KPX guillemotright Y -117
+KPX guilsinglright A -52
+KPX guilsinglright AE -42
+KPX guilsinglright Aacute -52
+KPX guilsinglright Adieresis -52
+KPX guilsinglright Aring -52
+KPX guilsinglright T -110
+KPX guilsinglright V -79
+KPX guilsinglright W -60
+KPX guilsinglright Y -113
+KPX h quoteright -15
+KPX h y -25
+KPX hyphen A -7
+KPX hyphen AE 2
+KPX hyphen Aacute -7
+KPX hyphen Adieresis -7
+KPX hyphen Aring -7
+KPX hyphen T -64
+KPX hyphen V -34
+KPX hyphen W -15
+KPX hyphen Y -71
+KPX i T -12
+KPX i j -7
+KPX k a -13
+KPX k aacute -13
+KPX k adieresis -13
+KPX k ae -15
+KPX k aring -13
+KPX k comma -3
+KPX k e -19
+KPX k eacute -19
+KPX k g -26
+KPX k hyphen -31
+KPX k o -28
+KPX k oacute -28
+KPX k odieresis -28
+KPX k period -3
+KPX k s -23
+KPX k u -8
+KPX k udieresis -8
+KPX l v -14
+KPX l y -11
+KPX m p -1
+KPX m v -23
+KPX m w -9
+KPX m y -23
+KPX n T -87
+KPX n p -2
+KPX n quoteright -15
+KPX n v -24
+KPX n w -11
+KPX n y -25
+KPX nine four -6
+KPX nine one -30
+KPX nine seven -23
+KPX o T -90
+KPX o quoteright -19
+KPX o t -13
+KPX o v -27
+KPX o w -13
+KPX o x -30
+KPX o y -29
+KPX oacute v -27
+KPX oacute w -13
+KPX oacute y -29
+KPX ocircumflex t -13
+KPX odieresis t -13
+KPX odieresis v -27
+KPX odieresis w -13
+KPX odieresis x -30
+KPX odieresis y -29
+KPX ograve v -27
+KPX ograve w -13
+KPX ograve y -29
+KPX one comma -51
+KPX one eight -47
+KPX one five -50
+KPX one four -70
+KPX one nine -47
+KPX one one -92
+KPX one period -49
+KPX one seven -72
+KPX one six -48
+KPX one three -53
+KPX one two -56
+KPX one zero -44
+KPX p t -10
+KPX p y -25
+KPX period one -80
+KPX period quotedblright -39
+KPX period quoteright -35
+KPX q c -3
+KPX q u -3
+KPX quotedblbase A 7
+KPX quotedblbase AE 19
+KPX quotedblbase T -79
+KPX quotedblbase V -77
+KPX quotedblbase W -54
+KPX quotedblbase Y -96
+KPX quotedblleft A -72
+KPX quotedblleft AE -64
+KPX quotedblleft Aacute -72
+KPX quotedblleft Adieresis -72
+KPX quotedblleft Aring -72
+KPX quotedblleft T -11
+KPX quotedblleft V 0
+KPX quotedblleft W 9
+KPX quotedblleft Y -15
+KPX quotedblright A -72
+KPX quotedblright AE -64
+KPX quotedblright Aacute -72
+KPX quotedblright Adieresis -72
+KPX quotedblright Aring -72
+KPX quotedblright T -7
+KPX quotedblright V 1
+KPX quotedblright W 11
+KPX quotedblright Y -14
+KPX quoteleft A -76
+KPX quoteleft AE -69
+KPX quoteleft Aacute -76
+KPX quoteleft Adieresis -76
+KPX quoteleft Aring -76
+KPX quoteleft T -15
+KPX quoteleft V -4
+KPX quoteleft W 5
+KPX quoteleft Y -20
+KPX quoteright A -80
+KPX quoteright AE -72
+KPX quoteright Aacute -80
+KPX quoteright Adieresis -80
+KPX quoteright Aring -80
+KPX quoteright comma -53
+KPX quoteright d -30
+KPX quoteright o -34
+KPX quoteright period -51
+KPX quoteright r -20
+KPX quoteright s -27
+KPX quoteright t -11
+KPX quoteright v -11
+KPX quoteright w -4
+KPX quoteright y -9
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae -2
+KPX r agrave -1
+KPX r aring -1
+KPX r c -6
+KPX r ccedilla -6
+KPX r colon -36
+KPX r comma -64
+KPX r d -5
+KPX r e 2
+KPX r eacute 2
+KPX r ecircumflex 2
+KPX r egrave 2
+KPX r f 15
+KPX r g -7
+KPX r h -12
+KPX r hyphen -40
+KPX r i -12
+KPX r j -13
+KPX r k -8
+KPX r l -12
+KPX r m -8
+KPX r n -10
+KPX r o -7
+KPX r oacute -7
+KPX r ocircumflex -7
+KPX r odieresis -7
+KPX r oe -2
+KPX r ograve -7
+KPX r oslash -12
+KPX r p -7
+KPX r period -63
+KPX r q -2
+KPX r quoteright 4
+KPX r r -10
+KPX r s -4
+KPX r semicolon -37
+KPX r t 15
+KPX r u -8
+KPX r v 12
+KPX r w 17
+KPX r x 7
+KPX r y 14
+KPX r z 2
+KPX s quoteright -12
+KPX s t -9
+KPX seven colon -71
+KPX seven comma -95
+KPX seven eight -10
+KPX seven five -28
+KPX seven four -70
+KPX seven one -21
+KPX seven period -94
+KPX seven seven 2
+KPX seven six -21
+KPX seven three -7
+KPX seven two -11
+KPX six four -1
+KPX six one -29
+KPX six seven -13
+KPX t S -9
+KPX t a -3
+KPX t aacute -3
+KPX t adieresis -3
+KPX t ae -5
+KPX t aring -3
+KPX t colon -41
+KPX t e -5
+KPX t eacute -5
+KPX t h -9
+KPX t o -15
+KPX t oacute -15
+KPX t odieresis -15
+KPX t quoteright -3
+KPX t semicolon -42
+KPX three four -2
+KPX three one -34
+KPX three seven -19
+KPX two four -16
+KPX two one -24
+KPX two seven -12
+KPX u quoteright -8
+KPX v a -21
+KPX v aacute -21
+KPX v acircumflex -21
+KPX v adieresis -21
+KPX v ae -21
+KPX v agrave -21
+KPX v aring -21
+KPX v atilde -21
+KPX v c -25
+KPX v colon -41
+KPX v comma -57
+KPX v e -18
+KPX v eacute -18
+KPX v ecircumflex -18
+KPX v egrave -18
+KPX v g -26
+KPX v hyphen -5
+KPX v l -12
+KPX v o -28
+KPX v oacute -28
+KPX v odieresis -28
+KPX v ograve -28
+KPX v oslash -28
+KPX v period -55
+KPX v s -25
+KPX v semicolon -43
+KPX w a -11
+KPX w aacute -11
+KPX w acircumflex -11
+KPX w adieresis -11
+KPX w ae -12
+KPX w agrave -11
+KPX w aring -11
+KPX w atilde -11
+KPX w c -12
+KPX w colon -36
+KPX w comma -38
+KPX w e -5
+KPX w eacute -5
+KPX w ecircumflex -5
+KPX w egrave -5
+KPX w g -13
+KPX w hyphen 7
+KPX w l -8
+KPX w o -15
+KPX w oacute -15
+KPX w odieresis -15
+KPX w ograve -15
+KPX w oslash -14
+KPX w period -36
+KPX w s -15
+KPX w semicolon -38
+KPX x a -22
+KPX x c -27
+KPX x e -20
+KPX x eacute -20
+KPX x o -30
+KPX x q -23
+KPX y a -20
+KPX y aacute -20
+KPX y acircumflex -20
+KPX y adieresis -20
+KPX y ae -20
+KPX y agrave -20
+KPX y aring -20
+KPX y atilde -20
+KPX y c -26
+KPX y colon -40
+KPX y comma -58
+KPX y e -19
+KPX y eacute -19
+KPX y ecircumflex -19
+KPX y egrave -19
+KPX y g -27
+KPX y hyphen -4
+KPX y l -11
+KPX y o -28
+KPX y oacute -28
+KPX y odieresis -28
+KPX y ograve -28
+KPX y oslash -27
+KPX y period -55
+KPX y s -24
+KPX y semicolon -43
+KPX zero four -3
+KPX zero one -29
+KPX zero seven -21
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvbo8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvbo8a.pfb
new file mode 100644
index 00000000000..479904083a9
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvbo8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.afm b/Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.afm
new file mode 100644
index 00000000000..8dbd253f0c5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-BoldCondItal
+FullName Nimbus Sans L Bold Condensed Italic
+FamilyName Nimbus Sans L
+Weight Bold
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -143 -298 913 989
+CapHeight 718
+XHeight 532
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 273 ; N exclam ; B 77 0 325 718 ;
+C 34 ; WX 389 ; N quotedbl ; B 158 447 433 718 ;
+C 35 ; WX 456 ; N numbersign ; B 49 0 528 698 ;
+C 36 ; WX 456 ; N dollar ; B 55 -115 510 775 ;
+C 37 ; WX 729 ; N percent ; B 112 -19 739 710 ;
+C 38 ; WX 592 ; N ampersand ; B 73 -19 600 718 ;
+C 39 ; WX 228 ; N quoteright ; B 137 445 297 718 ;
+C 40 ; WX 273 ; N parenleft ; B 62 -207 385 734 ;
+C 41 ; WX 273 ; N parenright ; B -21 -207 302 734 ;
+C 42 ; WX 319 ; N asterisk ; B 120 387 394 718 ;
+C 43 ; WX 479 ; N plus ; B 67 0 500 506 ;
+C 44 ; WX 228 ; N comma ; B 23 -168 201 146 ;
+C 45 ; WX 273 ; N hyphen ; B 60 215 311 345 ;
+C 46 ; WX 228 ; N period ; B 52 0 201 146 ;
+C 47 ; WX 228 ; N slash ; B -30 -19 383 737 ;
+C 48 ; WX 456 ; N zero ; B 71 -19 506 710 ;
+C 49 ; WX 456 ; N one ; B 142 0 434 710 ;
+C 50 ; WX 456 ; N two ; B 21 0 508 710 ;
+C 51 ; WX 456 ; N three ; B 54 -19 499 710 ;
+C 52 ; WX 456 ; N four ; B 50 0 490 710 ;
+C 53 ; WX 456 ; N five ; B 53 -19 522 698 ;
+C 54 ; WX 456 ; N six ; B 70 -19 507 710 ;
+C 55 ; WX 456 ; N seven ; B 102 0 555 698 ;
+C 56 ; WX 456 ; N eight ; B 57 -19 505 710 ;
+C 57 ; WX 456 ; N nine ; B 64 -19 504 710 ;
+C 58 ; WX 273 ; N colon ; B 75 0 288 512 ;
+C 59 ; WX 273 ; N semicolon ; B 46 -168 288 512 ;
+C 60 ; WX 479 ; N less ; B 67 -15 537 521 ;
+C 61 ; WX 479 ; N equal ; B 48 87 519 419 ;
+C 62 ; WX 479 ; N greater ; B 30 -15 500 521 ;
+C 63 ; WX 501 ; N question ; B 135 0 550 727 ;
+C 64 ; WX 800 ; N at ; B 152 -19 782 737 ;
+C 65 ; WX 592 ; N A ; B 16 0 576 718 ;
+C 66 ; WX 592 ; N B ; B 62 0 626 718 ;
+C 67 ; WX 592 ; N C ; B 88 -19 647 737 ;
+C 68 ; WX 592 ; N D ; B 62 0 637 718 ;
+C 69 ; WX 547 ; N E ; B 62 0 620 718 ;
+C 70 ; WX 501 ; N F ; B 62 0 606 718 ;
+C 71 ; WX 638 ; N G ; B 89 -19 670 737 ;
+C 72 ; WX 592 ; N H ; B 58 0 659 718 ;
+C 73 ; WX 228 ; N I ; B 52 0 301 718 ;
+C 74 ; WX 456 ; N J ; B 49 -18 522 718 ;
+C 75 ; WX 592 ; N K ; B 71 0 703 718 ;
+C 76 ; WX 501 ; N L ; B 62 0 501 718 ;
+C 77 ; WX 683 ; N M ; B 57 0 752 718 ;
+C 78 ; WX 592 ; N N ; B 57 0 661 718 ;
+C 79 ; WX 638 ; N O ; B 88 -19 675 737 ;
+C 80 ; WX 547 ; N P ; B 62 0 605 718 ;
+C 81 ; WX 638 ; N Q ; B 88 -52 675 737 ;
+C 82 ; WX 592 ; N R ; B 62 0 638 718 ;
+C 83 ; WX 547 ; N S ; B 66 -19 588 737 ;
+C 84 ; WX 501 ; N T ; B 114 0 615 718 ;
+C 85 ; WX 592 ; N U ; B 96 -19 659 718 ;
+C 86 ; WX 547 ; N V ; B 141 0 656 718 ;
+C 87 ; WX 774 ; N W ; B 138 0 887 718 ;
+C 88 ; WX 547 ; N X ; B 11 0 648 718 ;
+C 89 ; WX 547 ; N Y ; B 137 0 661 718 ;
+C 90 ; WX 501 ; N Z ; B 20 0 604 718 ;
+C 91 ; WX 273 ; N bracketleft ; B 17 -196 379 722 ;
+C 92 ; WX 228 ; N backslash ; B 101 -19 252 737 ;
+C 93 ; WX 273 ; N bracketright ; B -14 -196 347 722 ;
+C 94 ; WX 479 ; N asciicircum ; B 107 323 484 698 ;
+C 95 ; WX 456 ; N underscore ; B -22 -125 443 -75 ;
+C 96 ; WX 228 ; N quoteleft ; B 136 454 296 727 ;
+C 97 ; WX 456 ; N a ; B 45 -14 478 546 ;
+C 98 ; WX 501 ; N b ; B 50 -14 529 718 ;
+C 99 ; WX 456 ; N c ; B 65 -14 491 546 ;
+C 100 ; WX 501 ; N d ; B 67 -14 577 718 ;
+C 101 ; WX 456 ; N e ; B 58 -14 486 546 ;
+C 102 ; WX 273 ; N f ; B 71 0 385 727 ;
+C 103 ; WX 501 ; N g ; B 31 -217 546 546 ;
+C 104 ; WX 501 ; N h ; B 53 0 516 718 ;
+C 105 ; WX 228 ; N i ; B 57 0 298 725 ;
+C 106 ; WX 228 ; N j ; B -35 -214 298 725 ;
+C 107 ; WX 456 ; N k ; B 57 0 549 718 ;
+C 108 ; WX 228 ; N l ; B 57 0 297 718 ;
+C 109 ; WX 729 ; N m ; B 52 0 746 546 ;
+C 110 ; WX 501 ; N n ; B 53 0 516 546 ;
+C 111 ; WX 501 ; N o ; B 67 -14 527 546 ;
+C 112 ; WX 501 ; N p ; B 15 -207 529 546 ;
+C 113 ; WX 501 ; N q ; B 66 -207 545 546 ;
+C 114 ; WX 319 ; N r ; B 52 0 401 546 ;
+C 115 ; WX 456 ; N s ; B 52 -14 479 546 ;
+C 116 ; WX 273 ; N t ; B 82 -6 346 676 ;
+C 117 ; WX 501 ; N u ; B 80 -14 540 532 ;
+C 118 ; WX 456 ; N v ; B 103 0 538 532 ;
+C 119 ; WX 638 ; N w ; B 101 0 723 532 ;
+C 120 ; WX 456 ; N x ; B 12 0 531 532 ;
+C 121 ; WX 456 ; N y ; B 34 -214 535 532 ;
+C 122 ; WX 410 ; N z ; B 16 0 478 532 ;
+C 123 ; WX 319 ; N braceleft ; B 77 -196 425 722 ;
+C 124 ; WX 230 ; N bar ; B 66 -19 289 737 ;
+C 125 ; WX 319 ; N braceright ; B -14 -196 333 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 94 173 473 336 ;
+C 161 ; WX 273 ; N exclamdown ; B 41 -186 290 532 ;
+C 162 ; WX 456 ; N cent ; B 65 -118 491 628 ;
+C 163 ; WX 456 ; N sterling ; B 41 -16 520 718 ;
+C 164 ; WX 137 ; N fraction ; B -143 -19 399 710 ;
+C 165 ; WX 456 ; N yen ; B 49 0 585 698 ;
+C 166 ; WX 456 ; N florin ; B -41 -210 548 737 ;
+C 167 ; WX 456 ; N section ; B 50 -184 491 727 ;
+C 168 ; WX 456 ; N currency ; B 22 76 558 636 ;
+C 169 ; WX 195 ; N quotesingle ; B 135 447 263 718 ;
+C 170 ; WX 410 ; N quotedblleft ; B 132 454 482 727 ;
+C 171 ; WX 456 ; N guillemotleft ; B 111 76 468 484 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 106 76 289 484 ;
+C 173 ; WX 273 ; N guilsinglright ; B 81 76 264 484 ;
+C 174 ; WX 501 ; N fi ; B 71 0 571 727 ;
+C 175 ; WX 501 ; N fl ; B 71 0 570 727 ;
+C 177 ; WX 456 ; N endash ; B 40 227 514 333 ;
+C 178 ; WX 456 ; N dagger ; B 97 -171 513 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 38 -171 515 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 90 172 226 334 ;
+C 182 ; WX 456 ; N paragraph ; B 80 -191 564 700 ;
+C 183 ; WX 287 ; N bullet ; B 68 194 345 524 ;
+C 184 ; WX 228 ; N quotesinglbase ; B 34 -146 194 127 ;
+C 185 ; WX 410 ; N quotedblbase ; B 29 -146 380 127 ;
+C 186 ; WX 410 ; N quotedblright ; B 132 445 483 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 85 76 443 484 ;
+C 188 ; WX 820 ; N ellipsis ; B 75 0 770 146 ;
+C 189 ; WX 820 ; N perthousand ; B 62 -19 851 710 ;
+C 191 ; WX 501 ; N questiondown ; B 44 -195 459 532 ;
+C 193 ; WX 273 ; N grave ; B 112 604 290 750 ;
+C 194 ; WX 273 ; N acute ; B 194 604 423 750 ;
+C 195 ; WX 273 ; N circumflex ; B 97 604 387 750 ;
+C 196 ; WX 273 ; N tilde ; B 92 610 415 737 ;
+C 197 ; WX 273 ; N macron ; B 100 604 396 678 ;
+C 198 ; WX 273 ; N breve ; B 128 604 405 750 ;
+C 199 ; WX 273 ; N dotaccent ; B 192 614 316 729 ;
+C 200 ; WX 273 ; N dieresis ; B 112 614 395 729 ;
+C 202 ; WX 273 ; N ring ; B 164 568 344 776 ;
+C 203 ; WX 273 ; N cedilla ; B -30 -228 180 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 113 604 529 750 ;
+C 206 ; WX 273 ; N ogonek ; B 33 -228 216 0 ;
+C 207 ; WX 273 ; N caron ; B 123 604 412 750 ;
+C 208 ; WX 820 ; N emdash ; B 40 227 878 333 ;
+C 225 ; WX 820 ; N AE ; B 4 0 902 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 75 276 381 737 ;
+C 232 ; WX 501 ; N Lslash ; B 28 0 501 718 ;
+C 233 ; WX 638 ; N Oslash ; B 29 -27 733 745 ;
+C 234 ; WX 820 ; N OE ; B 81 -19 913 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 75 276 398 737 ;
+C 241 ; WX 729 ; N ae ; B 46 -14 757 546 ;
+C 245 ; WX 228 ; N dotlessi ; B 57 0 264 532 ;
+C 248 ; WX 228 ; N lslash ; B 33 0 334 718 ;
+C 249 ; WX 501 ; N oslash ; B 18 -29 575 560 ;
+C 250 ; WX 774 ; N oe ; B 67 -14 801 546 ;
+C 251 ; WX 501 ; N germandbls ; B 57 -14 539 731 ;
+C -1 ; WX 592 ; N Udieresis ; B 96 -19 659 915 ;
+C -1 ; WX 592 ; N Uacute ; B 96 -19 659 936 ;
+C -1 ; WX 547 ; N Scedilla ; B 66 -228 588 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 114 0 615 936 ;
+C -1 ; WX 547 ; N Scaron ; B 66 -19 588 936 ;
+C -1 ; WX 592 ; N Rcaron ; B 62 0 638 936 ;
+C -1 ; WX 592 ; N Racute ; B 62 0 638 936 ;
+C -1 ; WX 547 ; N Sacute ; B 66 -19 592 936 ;
+C -1 ; WX 638 ; N Otilde ; B 88 -19 675 923 ;
+C -1 ; WX 501 ; N ucircumflex ; B 80 -14 540 750 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 88 -19 744 936 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 96 -19 721 936 ;
+C -1 ; WX 547 ; N Yacute ; B 137 0 661 936 ;
+C -1 ; WX 592 ; N Eth ; B 51 0 637 718 ;
+C -1 ; WX 592 ; N Dcroat ; B 51 0 637 718 ;
+C -1 ; WX 501 ; N Zacute ; B 20 0 604 936 ;
+C -1 ; WX 592 ; N Uring ; B 96 -19 659 962 ;
+C -1 ; WX 501 ; N gbreve ; B 31 -217 546 750 ;
+C -1 ; WX 456 ; N eogonek ; B 58 -228 486 546 ;
+C -1 ; WX 456 ; N edotaccent ; B 58 -14 486 729 ;
+C -1 ; WX 456 ; N ecaron ; B 58 -14 504 750 ;
+C -1 ; WX 592 ; N Ugrave ; B 96 -19 659 936 ;
+C -1 ; WX 547 ; N Thorn ; B 62 0 588 718 ;
+C -1 ; WX 456 ; N eacute ; B 58 -14 515 750 ;
+C -1 ; WX 456 ; N edieresis ; B 58 -14 488 729 ;
+C -1 ; WX 561 ; N dcaron ; B 67 -14 701 718 ;
+C -1 ; WX 456 ; N ccedilla ; B 65 -228 491 546 ;
+C -1 ; WX 456 ; N ccaron ; B 65 -14 504 750 ;
+C -1 ; WX 456 ; N cacute ; B 65 -14 515 750 ;
+C -1 ; WX 456 ; N aogonek ; B 45 -228 478 546 ;
+C -1 ; WX 456 ; N aring ; B 45 -14 478 803 ;
+C -1 ; WX 456 ; N atilde ; B 45 -14 507 737 ;
+C -1 ; WX 456 ; N abreve ; B 45 -14 496 750 ;
+C -1 ; WX 456 ; N egrave ; B 58 -14 486 750 ;
+C -1 ; WX 456 ; N agrave ; B 45 -14 478 750 ;
+C -1 ; WX 456 ; N aacute ; B 45 -14 514 750 ;
+C -1 ; WX 456 ; N adieresis ; B 45 -14 487 729 ;
+C -1 ; WX 592 ; N Uogonek ; B 96 -228 659 718 ;
+C -1 ; WX 501 ; N ugrave ; B 80 -14 540 750 ;
+C -1 ; WX 501 ; N uacute ; B 80 -14 540 750 ;
+C -1 ; WX 501 ; N udieresis ; B 80 -14 540 729 ;
+C -1 ; WX 312 ; N tcaron ; B 82 -6 452 718 ;
+C -1 ; WX 456 ; N scommaaccent ; B 52 -298 479 546 ;
+C -1 ; WX 501 ; N Zcaron ; B 20 0 604 936 ;
+C -1 ; WX 456 ; N ecircumflex ; B 58 -14 486 750 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 96 -19 659 936 ;
+C -1 ; WX 456 ; N acircumflex ; B 45 -14 478 750 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 20 0 604 915 ;
+C -1 ; WX 456 ; N scaron ; B 52 -14 503 750 ;
+C -1 ; WX 592 ; N Amacron ; B 16 0 588 864 ;
+C -1 ; WX 456 ; N sacute ; B 52 -14 515 750 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 114 -298 615 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 137 0 661 915 ;
+C -1 ; WX 501 ; N thorn ; B 15 -207 529 718 ;
+C -1 ; WX 547 ; N Emacron ; B 62 0 620 864 ;
+C -1 ; WX 638 ; N Ograve ; B 88 -19 675 936 ;
+C -1 ; WX 638 ; N Oacute ; B 88 -19 675 936 ;
+C -1 ; WX 638 ; N Odieresis ; B 88 -19 675 915 ;
+C -1 ; WX 592 ; N Ntilde ; B 57 0 661 923 ;
+C -1 ; WX 592 ; N Ncaron ; B 57 0 661 936 ;
+C -1 ; WX 592 ; N Nacute ; B 57 0 661 936 ;
+C -1 ; WX 501 ; N Lcaron ; B 62 0 573 718 ;
+C -1 ; WX 501 ; N Lacute ; B 62 0 501 936 ;
+C -1 ; WX 228 ; N Idotaccent ; B 52 0 326 915 ;
+C -1 ; WX 319 ; N racute ; B 52 0 446 750 ;
+C -1 ; WX 228 ; N Icircumflex ; B 52 0 397 936 ;
+C -1 ; WX 501 ; N ohungarumlaut ; B 67 -14 643 750 ;
+C -1 ; WX 501 ; N otilde ; B 67 -14 529 737 ;
+C -1 ; WX 467 ; N Euro ; B 0 -15 507 670 ;
+C -1 ; WX 501 ; N ocircumflex ; B 67 -14 527 750 ;
+C -1 ; WX 273 ; N onesuperior ; B 121 283 318 710 ;
+C -1 ; WX 273 ; N twosuperior ; B 57 283 368 722 ;
+C -1 ; WX 273 ; N threesuperior ; B 75 271 361 722 ;
+C -1 ; WX 228 ; N Igrave ; B 52 0 301 936 ;
+C -1 ; WX 228 ; N Iacute ; B 52 0 433 936 ;
+C -1 ; WX 228 ; N Imacron ; B 52 0 406 864 ;
+C -1 ; WX 228 ; N Iogonek ; B -8 -228 301 718 ;
+C -1 ; WX 228 ; N Idieresis ; B 52 0 405 915 ;
+C -1 ; WX 638 ; N Gbreve ; B 89 -19 670 936 ;
+C -1 ; WX 592 ; N Umacron ; B 96 -19 659 864 ;
+C -1 ; WX 592 ; N Kcommaaccent ; B 71 -298 703 718 ;
+C -1 ; WX 501 ; N ograve ; B 67 -14 527 750 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 66 -298 588 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 62 -228 620 718 ;
+C -1 ; WX 501 ; N oacute ; B 67 -14 537 750 ;
+C -1 ; WX 547 ; N Edotaccent ; B 62 0 620 915 ;
+C -1 ; WX 228 ; N iogonek ; B -11 -228 298 725 ;
+C -1 ; WX 501 ; N gcommaaccent ; B 31 -217 546 844 ;
+C -1 ; WX 501 ; N odieresis ; B 67 -14 527 729 ;
+C -1 ; WX 501 ; N ntilde ; B 53 0 529 737 ;
+C -1 ; WX 501 ; N ncaron ; B 53 0 526 750 ;
+C -1 ; WX 547 ; N Ecaron ; B 62 0 620 936 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 62 0 620 936 ;
+C -1 ; WX 456 ; N scedilla ; B 52 -228 479 546 ;
+C -1 ; WX 319 ; N rcaron ; B 52 0 435 750 ;
+C -1 ; WX 547 ; N Egrave ; B 62 0 620 936 ;
+C -1 ; WX 547 ; N Eacute ; B 62 0 620 936 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 89 -298 670 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 62 -298 638 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 62 0 620 915 ;
+C -1 ; WX 501 ; N nacute ; B 53 0 537 750 ;
+C -1 ; WX 501 ; N uogonek ; B 80 -228 540 532 ;
+C -1 ; WX 501 ; N umacron ; B 80 -14 540 678 ;
+C -1 ; WX 592 ; N Dcaron ; B 62 0 637 936 ;
+C -1 ; WX 283 ; N lcaron ; B 57 0 422 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 88 -19 647 936 ;
+C -1 ; WX 592 ; N Cacute ; B 88 -19 647 936 ;
+C -1 ; WX 592 ; N Ccedilla ; B 88 -228 647 737 ;
+C -1 ; WX 328 ; N degree ; B 143 426 383 712 ;
+C -1 ; WX 592 ; N Aogonek ; B 16 -228 576 718 ;
+C -1 ; WX 479 ; N minus ; B 67 197 500 309 ;
+C -1 ; WX 479 ; N multiply ; B 47 1 520 505 ;
+C -1 ; WX 479 ; N divide ; B 67 -42 500 548 ;
+C -1 ; WX 592 ; N Aring ; B 16 0 576 989 ;
+C -1 ; WX 820 ; N trademark ; B 146 306 909 718 ;
+C -1 ; WX 319 ; N rcommaaccent ; B 5 -298 401 546 ;
+C -1 ; WX 228 ; N lacute ; B 57 0 433 936 ;
+C -1 ; WX 501 ; N omacron ; B 67 -14 527 678 ;
+C -1 ; WX 592 ; N Atilde ; B 16 0 607 923 ;
+C -1 ; WX 228 ; N icircumflex ; B 57 0 365 750 ;
+C -1 ; WX 228 ; N igrave ; B 57 0 268 750 ;
+C -1 ; WX 501 ; N ncommaaccent ; B 53 -298 516 546 ;
+C -1 ; WX 228 ; N lcommaaccent ; B 12 -298 297 718 ;
+C -1 ; WX 479 ; N plusminus ; B 33 0 512 578 ;
+C -1 ; WX 684 ; N onehalf ; B 108 -19 704 710 ;
+C -1 ; WX 684 ; N onequarter ; B 108 -19 661 710 ;
+C -1 ; WX 684 ; N threequarters ; B 82 -19 688 722 ;
+C -1 ; WX 228 ; N iacute ; B 57 0 401 750 ;
+C -1 ; WX 592 ; N Abreve ; B 16 0 597 936 ;
+C -1 ; WX 456 ; N kcommaaccent ; B 57 -298 549 718 ;
+C -1 ; WX 638 ; N Omacron ; B 88 -19 675 864 ;
+C -1 ; WX 228 ; N imacron ; B 57 0 374 678 ;
+C -1 ; WX 456 ; N emacron ; B 58 -14 488 678 ;
+C -1 ; WX 456 ; N amacron ; B 45 -14 488 678 ;
+C -1 ; WX 273 ; N tcommaaccent ; B 35 -298 346 676 ;
+C -1 ; WX 456 ; N ydieresis ; B 34 -214 535 729 ;
+C -1 ; WX 410 ; N zdotaccent ; B 16 0 478 729 ;
+C -1 ; WX 410 ; N zcaron ; B 16 0 480 750 ;
+C -1 ; WX 410 ; N zacute ; B 16 0 492 750 ;
+C -1 ; WX 456 ; N yacute ; B 34 -214 535 750 ;
+C -1 ; WX 501 ; N uhungarumlaut ; B 80 -14 643 750 ;
+C -1 ; WX 501 ; N eth ; B 67 -14 549 737 ;
+C -1 ; WX 501 ; N uring ; B 80 -14 540 776 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 88 -19 675 936 ;
+C -1 ; WX 273 ; N commaaccent ; B 35 -298 175 -60 ;
+C -1 ; WX 604 ; N copyright ; B 46 -19 685 737 ;
+C -1 ; WX 604 ; N registered ; B 45 -19 684 737 ;
+C -1 ; WX 592 ; N Acircumflex ; B 16 0 579 936 ;
+C -1 ; WX 228 ; N idieresis ; B 57 0 373 729 ;
+C -1 ; WX 405 ; N lozenge ; B 80 0 447 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 48 -16 519 522 ;
+C -1 ; WX 450 ; N radical ; B 54 -35 605 918 ;
+C -1 ; WX 592 ; N Agrave ; B 16 0 576 936 ;
+C -1 ; WX 592 ; N Aacute ; B 16 0 615 936 ;
+C -1 ; WX 479 ; N lessequal ; B 34 0 565 672 ;
+C -1 ; WX 479 ; N greaterequal ; B 34 0 527 671 ;
+C -1 ; WX 479 ; N logicalnot ; B 86 108 519 419 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 39 -21 465 743 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 57 -298 661 718 ;
+C -1 ; WX 501 ; N dcroat ; B 67 -14 617 718 ;
+C -1 ; WX 230 ; N brokenbar ; B 66 -19 289 737 ;
+C -1 ; WX 501 ; N Lcommaaccent ; B 62 -298 501 718 ;
+C -1 ; WX 592 ; N Adieresis ; B 16 0 587 915 ;
+C -1 ; WX 501 ; N mu ; B 18 -207 540 532 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -30
+KPX A Ccedilla -30
+KPX A G -31
+KPX A O -31
+KPX A Odieresis -31
+KPX A Q -30
+KPX A T -72
+KPX A U -29
+KPX A Uacute -29
+KPX A Ucircumflex -29
+KPX A Udieresis -29
+KPX A Ugrave -29
+KPX A V -56
+KPX A W -46
+KPX A Y -75
+KPX A a -11
+KPX A b -11
+KPX A c -15
+KPX A ccedilla -14
+KPX A comma 9
+KPX A d -14
+KPX A e -11
+KPX A g -19
+KPX A guillemotleft -41
+KPX A guilsinglleft -39
+KPX A hyphen 1
+KPX A o -17
+KPX A period 11
+KPX A q -14
+KPX A quotedblright -54
+KPX A quoteright -56
+KPX A t -16
+KPX A u -16
+KPX A v -34
+KPX A w -24
+KPX A y -32
+KPX Aacute C -31
+KPX Aacute G -32
+KPX Aacute O -32
+KPX Aacute Q -32
+KPX Aacute T -72
+KPX Aacute U -30
+KPX Aacute V -56
+KPX Aacute W -46
+KPX Aacute Y -74
+KPX Aacute a -11
+KPX Aacute b -11
+KPX Aacute c -16
+KPX Aacute comma 9
+KPX Aacute d -16
+KPX Aacute e -12
+KPX Aacute g -19
+KPX Aacute guillemotleft -42
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen 1
+KPX Aacute o -18
+KPX Aacute period 9
+KPX Aacute q -15
+KPX Aacute quoteright -56
+KPX Aacute t -17
+KPX Aacute u -17
+KPX Aacute v -33
+KPX Aacute w -24
+KPX Aacute y -32
+KPX Acircumflex C -30
+KPX Acircumflex G -31
+KPX Acircumflex O -31
+KPX Acircumflex Q -30
+KPX Acircumflex T -72
+KPX Acircumflex U -29
+KPX Acircumflex V -56
+KPX Acircumflex W -46
+KPX Acircumflex Y -74
+KPX Acircumflex comma 10
+KPX Acircumflex period 11
+KPX Adieresis C -31
+KPX Adieresis G -32
+KPX Adieresis O -32
+KPX Adieresis Q -31
+KPX Adieresis T -72
+KPX Adieresis U -30
+KPX Adieresis V -56
+KPX Adieresis W -46
+KPX Adieresis Y -75
+KPX Adieresis a -11
+KPX Adieresis b -11
+KPX Adieresis c -15
+KPX Adieresis comma 9
+KPX Adieresis d -15
+KPX Adieresis g -19
+KPX Adieresis guillemotleft -42
+KPX Adieresis guilsinglleft -39
+KPX Adieresis hyphen 0
+KPX Adieresis o -18
+KPX Adieresis period 10
+KPX Adieresis q -15
+KPX Adieresis quotedblright -54
+KPX Adieresis quoteright -57
+KPX Adieresis t -16
+KPX Adieresis u -16
+KPX Adieresis v -34
+KPX Adieresis w -24
+KPX Adieresis y -32
+KPX Agrave C -30
+KPX Agrave G -31
+KPX Agrave O -31
+KPX Agrave Q -30
+KPX Agrave T -72
+KPX Agrave U -29
+KPX Agrave V -56
+KPX Agrave W -46
+KPX Agrave Y -75
+KPX Agrave comma 9
+KPX Agrave period 11
+KPX Aring C -30
+KPX Aring G -31
+KPX Aring O -31
+KPX Aring Q -30
+KPX Aring T -72
+KPX Aring U -29
+KPX Aring V -56
+KPX Aring W -46
+KPX Aring Y -75
+KPX Aring a -11
+KPX Aring b -11
+KPX Aring c -15
+KPX Aring comma 9
+KPX Aring d -14
+KPX Aring e -11
+KPX Aring g -19
+KPX Aring guillemotleft -41
+KPX Aring guilsinglleft -39
+KPX Aring hyphen 1
+KPX Aring o -17
+KPX Aring period 11
+KPX Aring q -14
+KPX Aring quotedblright -54
+KPX Aring quoteright -56
+KPX Aring t -16
+KPX Aring u -16
+KPX Aring v -34
+KPX Aring w -24
+KPX Aring y -32
+KPX Atilde C -32
+KPX Atilde G -33
+KPX Atilde O -33
+KPX Atilde Q -32
+KPX Atilde T -73
+KPX Atilde U -31
+KPX Atilde V -56
+KPX Atilde W -47
+KPX Atilde Y -75
+KPX Atilde comma 9
+KPX Atilde period 9
+KPX B A -27
+KPX B AE -21
+KPX B Aacute -27
+KPX B Acircumflex -27
+KPX B Adieresis -27
+KPX B Aring -27
+KPX B Atilde -27
+KPX B O -12
+KPX B OE -6
+KPX B Oacute -12
+KPX B Ocircumflex -12
+KPX B Odieresis -12
+KPX B Ograve -12
+KPX B Oslash -9
+KPX B V -31
+KPX B W -21
+KPX B Y -40
+KPX C A -29
+KPX C AE -23
+KPX C Aacute -29
+KPX C Adieresis -29
+KPX C Aring -29
+KPX C H -7
+KPX C K -13
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -31
+KPX D A -31
+KPX D Aacute -31
+KPX D Acircumflex -31
+KPX D Adieresis -31
+KPX D Agrave -31
+KPX D Aring -31
+KPX D Atilde -31
+KPX D J -1
+KPX D T -14
+KPX D V -25
+KPX D W -16
+KPX D X -28
+KPX D Y -43
+KPX F A -53
+KPX F Aacute -53
+KPX F Acircumflex -53
+KPX F Adieresis -53
+KPX F Agrave -53
+KPX F Aring -53
+KPX F Atilde -53
+KPX F J -24
+KPX F O -19
+KPX F Odieresis -19
+KPX F a -24
+KPX F aacute -24
+KPX F adieresis -24
+KPX F ae -24
+KPX F aring -24
+KPX F comma -78
+KPX F e -15
+KPX F eacute -15
+KPX F hyphen 0
+KPX F i -14
+KPX F j -13
+KPX F o -19
+KPX F oacute -19
+KPX F odieresis -19
+KPX F oe -19
+KPX F oslash -20
+KPX F period -77
+KPX F r -30
+KPX F u -31
+KPX G A -8
+KPX G AE -2
+KPX G Aacute -8
+KPX G Acircumflex -8
+KPX G Adieresis -8
+KPX G Agrave -8
+KPX G Aring -8
+KPX G Atilde -8
+KPX G T -18
+KPX G V -29
+KPX G W -20
+KPX G Y -47
+KPX J A -30
+KPX J AE -25
+KPX J Adieresis -30
+KPX J Aring -30
+KPX K C -42
+KPX K G -43
+KPX K O -43
+KPX K OE -37
+KPX K Oacute -43
+KPX K Odieresis -43
+KPX K S -30
+KPX K T 14
+KPX K a -10
+KPX K adieresis -10
+KPX K ae -11
+KPX K aring -10
+KPX K e -27
+KPX K hyphen -34
+KPX K o -35
+KPX K oacute -35
+KPX K odieresis -35
+KPX K u -30
+KPX K udieresis -30
+KPX K y -57
+KPX L A 6
+KPX L AE 12
+KPX L Aacute 6
+KPX L Adieresis 6
+KPX L Aring 6
+KPX L C -25
+KPX L Ccedilla -26
+KPX L G -27
+KPX L O -26
+KPX L Oacute -26
+KPX L Ocircumflex -26
+KPX L Odieresis -26
+KPX L Ograve -26
+KPX L Otilde -26
+KPX L S -8
+KPX L T -79
+KPX L U -23
+KPX L Udieresis -23
+KPX L V -75
+KPX L W -60
+KPX L Y -92
+KPX L hyphen -19
+KPX L quotedblright -123
+KPX L quoteright -125
+KPX L u -17
+KPX L udieresis -17
+KPX L y -50
+KPX N A -10
+KPX N AE -4
+KPX N Aacute -10
+KPX N Adieresis -10
+KPX N Aring -10
+KPX N C -3
+KPX N Ccedilla -2
+KPX N G -4
+KPX N O -4
+KPX N Oacute -4
+KPX N Odieresis -4
+KPX N a -1
+KPX N aacute -1
+KPX N adieresis -1
+KPX N ae -2
+KPX N aring -1
+KPX N comma 5
+KPX N e 2
+KPX N eacute 2
+KPX N o -3
+KPX N oacute -3
+KPX N odieresis -3
+KPX N oslash 0
+KPX N period 5
+KPX N u -1
+KPX N udieresis -2
+KPX O A -35
+KPX O AE -30
+KPX O Aacute -35
+KPX O Adieresis -35
+KPX O Aring -35
+KPX O T -21
+KPX O V -29
+KPX O W -20
+KPX O X -32
+KPX O Y -50
+KPX Oacute A -35
+KPX Oacute T -21
+KPX Oacute V -29
+KPX Oacute W -20
+KPX Oacute Y -50
+KPX Ocircumflex T -21
+KPX Ocircumflex V -29
+KPX Ocircumflex Y -50
+KPX Odieresis A -35
+KPX Odieresis T -21
+KPX Odieresis V -29
+KPX Odieresis W -20
+KPX Odieresis X -32
+KPX Odieresis Y -50
+KPX Ograve T -21
+KPX Ograve V -29
+KPX Ograve Y -50
+KPX Oslash A -32
+KPX Otilde T -21
+KPX Otilde V -29
+KPX Otilde Y -50
+KPX P A -61
+KPX P AE -56
+KPX P Aacute -61
+KPX P Adieresis -61
+KPX P Aring -61
+KPX P J -45
+KPX P a -22
+KPX P aacute -22
+KPX P adieresis -22
+KPX P ae -22
+KPX P aring -22
+KPX P comma -98
+KPX P e -20
+KPX P eacute -20
+KPX P hyphen -13
+KPX P o -24
+KPX P oacute -24
+KPX P odieresis -24
+KPX P oe -25
+KPX P oslash -25
+KPX P period -98
+KPX R C -10
+KPX R Ccedilla -9
+KPX R G -11
+KPX R O -11
+KPX R OE -5
+KPX R Oacute -11
+KPX R Odieresis -11
+KPX R T -9
+KPX R U -9
+KPX R Udieresis -9
+KPX R V -27
+KPX R W -18
+KPX R Y -36
+KPX R a -7
+KPX R aacute -7
+KPX R adieresis -7
+KPX R ae -7
+KPX R aring -7
+KPX R e -4
+KPX R eacute -4
+KPX R hyphen 7
+KPX R o -10
+KPX R oacute -10
+KPX R odieresis -10
+KPX R oe -10
+KPX R u -7
+KPX R uacute -8
+KPX R udieresis -8
+KPX R y -6
+KPX S A -20
+KPX S AE -14
+KPX S Aacute -20
+KPX S Adieresis -20
+KPX S Aring -20
+KPX S T -12
+KPX S V -29
+KPX S W -20
+KPX S Y -39
+KPX S t -5
+KPX T A -72
+KPX T AE -68
+KPX T Aacute -72
+KPX T Acircumflex -72
+KPX T Adieresis -72
+KPX T Agrave -72
+KPX T Aring -72
+KPX T Atilde -72
+KPX T C -18
+KPX T G -19
+KPX T J -77
+KPX T O -18
+KPX T OE -12
+KPX T Oacute -18
+KPX T Ocircumflex -18
+KPX T Odieresis -18
+KPX T Ograve -18
+KPX T Oslash -18
+KPX T Otilde -18
+KPX T S -3
+KPX T V 11
+KPX T W 13
+KPX T Y 13
+KPX T a -68
+KPX T ae -69
+KPX T c -68
+KPX T colon -79
+KPX T comma -61
+KPX T e -64
+KPX T g -69
+KPX T guillemotleft -92
+KPX T guilsinglleft -89
+KPX T hyphen -46
+KPX T i -9
+KPX T j -9
+KPX T o -70
+KPX T oslash -67
+KPX T period -61
+KPX T r -64
+KPX T s -69
+KPX T semicolon -79
+KPX T u -68
+KPX T v -77
+KPX T w -72
+KPX T y -76
+KPX U A -32
+KPX U AE -27
+KPX U Aacute -32
+KPX U Acircumflex -32
+KPX U Adieresis -32
+KPX U Aring -32
+KPX U Atilde -32
+KPX U comma -14
+KPX U m -5
+KPX U n -5
+KPX U p -5
+KPX U period -11
+KPX U r -5
+KPX Uacute A -32
+KPX Uacute comma -14
+KPX Uacute m -5
+KPX Uacute n -5
+KPX Uacute p -5
+KPX Uacute period -11
+KPX Uacute r -5
+KPX Ucircumflex A -32
+KPX Udieresis A -32
+KPX Udieresis b -5
+KPX Udieresis comma -14
+KPX Udieresis m -5
+KPX Udieresis n -5
+KPX Udieresis p -5
+KPX Udieresis period -11
+KPX Udieresis r -5
+KPX Ugrave A -32
+KPX V A -58
+KPX V AE -53
+KPX V Aacute -58
+KPX V Acircumflex -58
+KPX V Adieresis -58
+KPX V Agrave -58
+KPX V Aring -58
+KPX V Atilde -58
+KPX V C -33
+KPX V G -34
+KPX V O -34
+KPX V Oacute -34
+KPX V Ocircumflex -34
+KPX V Odieresis -34
+KPX V Ograve -34
+KPX V Oslash -29
+KPX V Otilde -34
+KPX V S -23
+KPX V T 13
+KPX V a -45
+KPX V ae -46
+KPX V colon -47
+KPX V comma -58
+KPX V e -41
+KPX V g -45
+KPX V guillemotleft -68
+KPX V guilsinglleft -65
+KPX V hyphen -22
+KPX V i -12
+KPX V o -47
+KPX V oslash -44
+KPX V period -58
+KPX V r -36
+KPX V semicolon -47
+KPX V u -40
+KPX V y -17
+KPX W A -47
+KPX W AE -42
+KPX W Aacute -47
+KPX W Acircumflex -47
+KPX W Adieresis -47
+KPX W Agrave -47
+KPX W Aring -47
+KPX W Atilde -47
+KPX W C -23
+KPX W G -24
+KPX W O -23
+KPX W Oacute -23
+KPX W Ocircumflex -23
+KPX W Odieresis -23
+KPX W Ograve -23
+KPX W Oslash -19
+KPX W Otilde -23
+KPX W S -18
+KPX W T 15
+KPX W a -32
+KPX W ae -33
+KPX W colon -40
+KPX W comma -42
+KPX W e -28
+KPX W g -32
+KPX W guillemotleft -55
+KPX W guilsinglleft -52
+KPX W hyphen -9
+KPX W i -10
+KPX W o -34
+KPX W oslash -31
+KPX W period -42
+KPX W r -27
+KPX W semicolon -41
+KPX W u -32
+KPX W y -11
+KPX X C -32
+KPX X O -33
+KPX X Odieresis -33
+KPX X Q -33
+KPX X a -15
+KPX X e -31
+KPX X hyphen -28
+KPX X o -37
+KPX X u -34
+KPX X y -44
+KPX Y A -73
+KPX Y AE -68
+KPX Y Aacute -73
+KPX Y Acircumflex -73
+KPX Y Adieresis -73
+KPX Y Agrave -73
+KPX Y Aring -73
+KPX Y Atilde -73
+KPX Y C -45
+KPX Y G -46
+KPX Y O -46
+KPX Y Oacute -46
+KPX Y Ocircumflex -46
+KPX Y Odieresis -46
+KPX Y Ograve -46
+KPX Y Oslash -45
+KPX Y Otilde -46
+KPX Y S -28
+KPX Y T 16
+KPX Y a -64
+KPX Y ae -65
+KPX Y colon -61
+KPX Y comma -71
+KPX Y e -60
+KPX Y g -64
+KPX Y guillemotleft -91
+KPX Y guilsinglleft -88
+KPX Y hyphen -49
+KPX Y i -9
+KPX Y o -66
+KPX Y oslash -63
+KPX Y p -48
+KPX Y period -71
+KPX Y semicolon -61
+KPX Y u -54
+KPX Y v -31
+KPX Z v -19
+KPX Z y -18
+KPX a j -2
+KPX a quoteright -11
+KPX a v -16
+KPX a w -7
+KPX a y -16
+KPX aacute v -17
+KPX aacute w -8
+KPX aacute y -17
+KPX adieresis v -16
+KPX adieresis w -7
+KPX adieresis y -16
+KPX ae v -17
+KPX ae w -7
+KPX ae y -18
+KPX agrave v -16
+KPX agrave w -7
+KPX agrave y -16
+KPX aring v -16
+KPX aring w -7
+KPX aring y -16
+KPX b v -15
+KPX b w -6
+KPX b y -17
+KPX c h -6
+KPX c k -8
+KPX comma one -65
+KPX comma quotedblright -27
+KPX comma quoteright -29
+KPX e quoteright -11
+KPX e t -4
+KPX e v -16
+KPX e w -6
+KPX e x -19
+KPX e y -17
+KPX eacute v -17
+KPX eacute w -7
+KPX eacute y -18
+KPX ecircumflex v -16
+KPX ecircumflex w -6
+KPX ecircumflex y -17
+KPX eight four 2
+KPX eight one -24
+KPX eight seven -10
+KPX f a -12
+KPX f aacute -12
+KPX f adieresis -12
+KPX f ae -13
+KPX f aring -12
+KPX f e -10
+KPX f eacute -10
+KPX f f 12
+KPX f i -11
+KPX f j -11
+KPX f l -11
+KPX f o -16
+KPX f oacute -16
+KPX f odieresis -16
+KPX f oe -16
+KPX f oslash -13
+KPX f quoteright 0
+KPX f s -13
+KPX f t 12
+KPX five four 0
+KPX five one -30
+KPX five seven -10
+KPX four four 3
+KPX four one -46
+KPX four seven -27
+KPX g a -2
+KPX g adieresis -2
+KPX g ae -3
+KPX g aring -2
+KPX g e 1
+KPX g eacute 1
+KPX g l 0
+KPX g oacute -4
+KPX g odieresis -4
+KPX g r 1
+KPX guillemotright A -42
+KPX guillemotright AE -36
+KPX guillemotright Aacute -42
+KPX guillemotright Adieresis -42
+KPX guillemotright Aring -42
+KPX guillemotright T -89
+KPX guillemotright V -63
+KPX guillemotright W -51
+KPX guillemotright Y -92
+KPX guilsinglright A -40
+KPX guilsinglright AE -35
+KPX guilsinglright Aacute -40
+KPX guilsinglright Adieresis -40
+KPX guilsinglright Aring -40
+KPX guilsinglright T -88
+KPX guilsinglright V -61
+KPX guilsinglright W -49
+KPX guilsinglright Y -90
+KPX h quoteright -13
+KPX h y -18
+KPX hyphen A 0
+KPX hyphen AE 6
+KPX hyphen Aacute 0
+KPX hyphen Adieresis 0
+KPX hyphen Aring 0
+KPX hyphen T -46
+KPX hyphen V -19
+KPX hyphen W -8
+KPX hyphen Y -52
+KPX i T -9
+KPX i j -3
+KPX k a -9
+KPX k aacute -9
+KPX k adieresis -9
+KPX k ae -9
+KPX k aring -9
+KPX k comma 7
+KPX k e -11
+KPX k eacute -11
+KPX k g -16
+KPX k hyphen -16
+KPX k o -18
+KPX k oacute -18
+KPX k odieresis -18
+KPX k period 7
+KPX k s -15
+KPX k u -12
+KPX k udieresis -6
+KPX l v -14
+KPX l y -13
+KPX m p -1
+KPX m v -17
+KPX m w -8
+KPX m y -17
+KPX n T -67
+KPX n p -2
+KPX n quoteright -12
+KPX n v -18
+KPX n w -9
+KPX n y -18
+KPX nine four 0
+KPX nine one -21
+KPX nine seven -14
+KPX o T -68
+KPX o quoteright -16
+KPX o t -7
+KPX o v -19
+KPX o w -9
+KPX o x -22
+KPX o y -21
+KPX oacute v -19
+KPX oacute w -9
+KPX oacute y -21
+KPX ocircumflex t -7
+KPX odieresis t -7
+KPX odieresis v -19
+KPX odieresis w -9
+KPX odieresis x -22
+KPX odieresis y -21
+KPX ograve v -19
+KPX ograve w -9
+KPX ograve y -21
+KPX one comma -39
+KPX one eight -41
+KPX one five -41
+KPX one four -57
+KPX one nine -42
+KPX one one -74
+KPX one period -39
+KPX one seven -55
+KPX one six -39
+KPX one three -46
+KPX one two -47
+KPX one zero -39
+KPX p t -4
+KPX p y -18
+KPX period one -65
+KPX period quotedblright -27
+KPX period quoteright -29
+KPX q c -1
+KPX q u -2
+KPX quotedblbase A 9
+KPX quotedblbase AE 15
+KPX quotedblbase T -61
+KPX quotedblbase V -58
+KPX quotedblbase W -43
+KPX quotedblbase Y -75
+KPX quotedblleft A -55
+KPX quotedblleft AE -51
+KPX quotedblleft Aacute -55
+KPX quotedblleft Adieresis -55
+KPX quotedblleft Aring -55
+KPX quotedblleft T -6
+KPX quotedblleft V 4
+KPX quotedblleft W 9
+KPX quotedblleft Y -6
+KPX quotedblright A -57
+KPX quotedblright AE -53
+KPX quotedblright Aacute -57
+KPX quotedblright Adieresis -57
+KPX quotedblright Aring -57
+KPX quotedblright T -4
+KPX quotedblright V 2
+KPX quotedblright W 7
+KPX quotedblright Y -8
+KPX quoteleft A -57
+KPX quoteleft AE -53
+KPX quoteleft Aacute -57
+KPX quoteleft Adieresis -57
+KPX quoteleft Aring -57
+KPX quoteleft T -8
+KPX quoteleft V 2
+KPX quoteleft W 7
+KPX quoteleft Y -8
+KPX quoteright A -59
+KPX quoteright AE -55
+KPX quoteright Aacute -59
+KPX quoteright Adieresis -59
+KPX quoteright Aring -59
+KPX quoteright comma -35
+KPX quoteright d -23
+KPX quoteright o -28
+KPX quoteright period -35
+KPX quoteright r -11
+KPX quoteright s -21
+KPX quoteright t 0
+KPX quoteright v -3
+KPX quoteright w 0
+KPX quoteright y -2
+KPX r a -9
+KPX r aacute -9
+KPX r acircumflex -9
+KPX r adieresis -9
+KPX r ae -9
+KPX r agrave -9
+KPX r aring -9
+KPX r c -11
+KPX r ccedilla -7
+KPX r colon -19
+KPX r comma -47
+KPX r d -9
+KPX r e -8
+KPX r eacute -8
+KPX r ecircumflex -8
+KPX r egrave -8
+KPX r f 12
+KPX r g -6
+KPX r h -10
+KPX r hyphen -30
+KPX r i -13
+KPX r j -12
+KPX r k -12
+KPX r l -12
+KPX r m -10
+KPX r n -11
+KPX r o -12
+KPX r oacute -12
+KPX r ocircumflex -12
+KPX r odieresis -12
+KPX r oe -12
+KPX r ograve -12
+KPX r oslash -13
+KPX r p -10
+KPX r period -47
+KPX r q -9
+KPX r quoteright 4
+KPX r r -10
+KPX r s -8
+KPX r semicolon -19
+KPX r t 12
+KPX r u -12
+KPX r v 8
+KPX r w 10
+KPX r x 4
+KPX r y 9
+KPX r z 0
+KPX s quoteright -12
+KPX s t -7
+KPX seven colon -48
+KPX seven comma -77
+KPX seven eight -11
+KPX seven five -20
+KPX seven four -59
+KPX seven one -14
+KPX seven period -77
+KPX seven seven 5
+KPX seven six -16
+KPX seven three -9
+KPX seven two -8
+KPX six four 0
+KPX six one -23
+KPX six seven -9
+KPX t S -5
+KPX t a -3
+KPX t aacute -3
+KPX t adieresis -3
+KPX t ae -3
+KPX t aring -3
+KPX t colon -19
+KPX t e -6
+KPX t eacute -6
+KPX t h -4
+KPX t o -12
+KPX t oacute -12
+KPX t odieresis -12
+KPX t quoteright -1
+KPX t semicolon -19
+KPX three four -1
+KPX three one -27
+KPX three seven -13
+KPX two four -21
+KPX two one -21
+KPX two seven -10
+KPX u quoteright -4
+KPX v a -21
+KPX v aacute -21
+KPX v acircumflex -21
+KPX v adieresis -21
+KPX v ae -22
+KPX v agrave -21
+KPX v aring -21
+KPX v atilde -21
+KPX v c -20
+KPX v colon -20
+KPX v comma -40
+KPX v e -17
+KPX v eacute -17
+KPX v ecircumflex -17
+KPX v egrave -17
+KPX v g -20
+KPX v hyphen 0
+KPX v l -12
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -20
+KPX v period -39
+KPX v s -21
+KPX v semicolon -20
+KPX w a -12
+KPX w aacute -12
+KPX w acircumflex -12
+KPX w adieresis -12
+KPX w ae -13
+KPX w agrave -12
+KPX w aring -12
+KPX w atilde -12
+KPX w c -11
+KPX w colon -18
+KPX w comma -25
+KPX w e -7
+KPX w eacute -7
+KPX w ecircumflex -7
+KPX w egrave -7
+KPX w g -11
+KPX w hyphen 9
+KPX w l -9
+KPX w o -13
+KPX w oacute -13
+KPX w odieresis -13
+KPX w ograve -13
+KPX w oslash -11
+KPX w period -25
+KPX w s -12
+KPX w semicolon -18
+KPX x a -19
+KPX x c -22
+KPX x e -18
+KPX x eacute -18
+KPX x o -24
+KPX x q -20
+KPX y a -23
+KPX y aacute -23
+KPX y acircumflex -23
+KPX y adieresis -23
+KPX y ae -23
+KPX y agrave -23
+KPX y aring -23
+KPX y atilde -23
+KPX y c -22
+KPX y colon -21
+KPX y comma -40
+KPX y e -19
+KPX y eacute -19
+KPX y ecircumflex -19
+KPX y egrave -19
+KPX y g -23
+KPX y hyphen 0
+KPX y l -14
+KPX y o -25
+KPX y oacute -25
+KPX y odieresis -25
+KPX y ograve -25
+KPX y oslash -21
+KPX y period -40
+KPX y s -23
+KPX y semicolon -22
+KPX zero four 2
+KPX zero one -20
+KPX zero seven -11
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.pfb
new file mode 100644
index 00000000000..d2e96f3b7e7
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvbo8ac.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvr8a-105.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvr8a-105.pfb
new file mode 100644
index 00000000000..ff605552c96
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvr8a-105.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvr8a.afm b/Master/tlpkg/tlgs/lib/fonts/uhvr8a.afm
new file mode 100644
index 00000000000..36133a4290f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvr8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-Regu
+FullName Nimbus Sans L Regular
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -151
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -174 -285 1001 953
+CapHeight 729
+XHeight 524
+Descender -218
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 191 0 191 0 ;
+C 33 ; WX 278 ; N exclam ; B 124 0 208 729 ;
+C 34 ; WX 355 ; N quotedbl ; B 52 464 305 709 ;
+C 35 ; WX 556 ; N numbersign ; B 14 -20 542 697 ;
+C 36 ; WX 556 ; N dollar ; B 26 -126 518 770 ;
+C 37 ; WX 889 ; N percent ; B 29 -20 859 709 ;
+C 38 ; WX 667 ; N ampersand ; B 52 -23 637 709 ;
+C 39 ; WX 221 ; N quoteright ; B 64 497 157 729 ;
+C 40 ; WX 333 ; N parenleft ; B 73 -212 291 729 ;
+C 41 ; WX 333 ; N parenright ; B 38 -212 256 729 ;
+C 42 ; WX 389 ; N asterisk ; B 40 441 343 729 ;
+C 43 ; WX 584 ; N plus ; B 50 -10 534 474 ;
+C 44 ; WX 278 ; N comma ; B 87 -147 192 104 ;
+C 45 ; WX 333 ; N hyphen ; B 46 240 284 312 ;
+C 46 ; WX 278 ; N period ; B 87 0 191 104 ;
+C 47 ; WX 278 ; N slash ; B -8 -20 284 729 ;
+C 48 ; WX 556 ; N zero ; B 43 -23 507 709 ;
+C 49 ; WX 556 ; N one ; B 102 0 347 709 ;
+C 50 ; WX 556 ; N two ; B 34 0 511 709 ;
+C 51 ; WX 556 ; N three ; B 32 -23 506 709 ;
+C 52 ; WX 556 ; N four ; B 28 0 520 709 ;
+C 53 ; WX 556 ; N five ; B 35 -23 513 709 ;
+C 54 ; WX 556 ; N six ; B 43 -23 513 709 ;
+C 55 ; WX 556 ; N seven ; B 46 0 520 709 ;
+C 56 ; WX 556 ; N eight ; B 37 -23 513 709 ;
+C 57 ; WX 556 ; N nine ; B 38 -23 509 709 ;
+C 58 ; WX 278 ; N colon ; B 110 0 214 524 ;
+C 59 ; WX 278 ; N semicolon ; B 110 -147 215 524 ;
+C 60 ; WX 584 ; N less ; B 45 -9 534 474 ;
+C 61 ; WX 584 ; N equal ; B 50 111 534 353 ;
+C 62 ; WX 584 ; N greater ; B 50 -9 539 474 ;
+C 63 ; WX 556 ; N question ; B 77 0 509 741 ;
+C 64 ; WX 1015 ; N at ; B 34 -142 951 741 ;
+C 65 ; WX 667 ; N A ; B 17 0 653 729 ;
+C 66 ; WX 667 ; N B ; B 79 0 623 729 ;
+C 67 ; WX 722 ; N C ; B 48 -23 677 741 ;
+C 68 ; WX 722 ; N D ; B 89 0 667 729 ;
+C 69 ; WX 667 ; N E ; B 90 0 613 729 ;
+C 70 ; WX 611 ; N F ; B 90 0 579 729 ;
+C 71 ; WX 778 ; N G ; B 44 -23 709 741 ;
+C 72 ; WX 722 ; N H ; B 83 0 644 729 ;
+C 73 ; WX 278 ; N I ; B 100 0 194 729 ;
+C 74 ; WX 500 ; N J ; B 17 -23 426 729 ;
+C 75 ; WX 667 ; N K ; B 79 0 658 729 ;
+C 76 ; WX 556 ; N L ; B 80 0 533 729 ;
+C 77 ; WX 833 ; N M ; B 75 0 761 729 ;
+C 78 ; WX 722 ; N N ; B 76 0 646 729 ;
+C 79 ; WX 778 ; N O ; B 38 -23 742 741 ;
+C 80 ; WX 667 ; N P ; B 91 0 617 729 ;
+C 81 ; WX 778 ; N Q ; B 38 -59 742 741 ;
+C 82 ; WX 722 ; N R ; B 93 0 679 729 ;
+C 83 ; WX 667 ; N S ; B 48 -23 621 741 ;
+C 84 ; WX 611 ; N T ; B 21 0 593 729 ;
+C 85 ; WX 722 ; N U ; B 85 -23 645 729 ;
+C 86 ; WX 667 ; N V ; B 30 0 645 729 ;
+C 87 ; WX 944 ; N W ; B 22 0 929 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 649 729 ;
+C 89 ; WX 667 ; N Y ; B 13 0 661 729 ;
+C 90 ; WX 611 ; N Z ; B 28 0 583 729 ;
+C 91 ; WX 278 ; N bracketleft ; B 64 -212 250 729 ;
+C 92 ; WX 278 ; N backslash ; B -8 -20 284 729 ;
+C 93 ; WX 278 ; N bracketright ; B 23 -212 209 729 ;
+C 94 ; WX 469 ; N asciicircum ; B 44 329 425 709 ;
+C 95 ; WX 556 ; N underscore ; B -22 -176 578 -126 ;
+C 96 ; WX 222 ; N quoteleft ; B 65 477 158 709 ;
+C 97 ; WX 556 ; N a ; B 42 -23 535 539 ;
+C 98 ; WX 556 ; N b ; B 54 -23 523 729 ;
+C 99 ; WX 500 ; N c ; B 31 -23 477 539 ;
+C 100 ; WX 556 ; N d ; B 26 -23 495 729 ;
+C 101 ; WX 556 ; N e ; B 40 -23 513 539 ;
+C 102 ; WX 278 ; N f ; B 18 0 258 732 ;
+C 103 ; WX 556 ; N g ; B 29 -218 489 539 ;
+C 104 ; WX 556 ; N h ; B 70 0 486 729 ;
+C 105 ; WX 222 ; N i ; B 66 0 150 729 ;
+C 106 ; WX 222 ; N j ; B -18 -218 153 729 ;
+C 107 ; WX 500 ; N k ; B 58 0 502 729 ;
+C 108 ; WX 222 ; N l ; B 68 0 152 729 ;
+C 109 ; WX 833 ; N m ; B 70 0 762 539 ;
+C 110 ; WX 556 ; N n ; B 70 0 487 539 ;
+C 111 ; WX 556 ; N o ; B 36 -23 510 539 ;
+C 112 ; WX 556 ; N p ; B 54 -218 523 539 ;
+C 113 ; WX 556 ; N q ; B 26 -218 495 539 ;
+C 114 ; WX 333 ; N r ; B 69 0 321 539 ;
+C 115 ; WX 500 ; N s ; B 34 -23 459 539 ;
+C 116 ; WX 278 ; N t ; B 14 -23 254 668 ;
+C 117 ; WX 556 ; N u ; B 65 -23 482 524 ;
+C 118 ; WX 500 ; N v ; B 10 0 486 524 ;
+C 119 ; WX 722 ; N w ; B 6 0 708 524 ;
+C 120 ; WX 500 ; N x ; B 17 0 473 524 ;
+C 121 ; WX 500 ; N y ; B 20 -218 478 524 ;
+C 122 ; WX 500 ; N z ; B 31 0 457 524 ;
+C 123 ; WX 334 ; N braceleft ; B 43 -212 276 729 ;
+C 124 ; WX 260 ; N bar ; B 100 -212 160 729 ;
+C 125 ; WX 334 ; N braceright ; B 29 -212 262 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 75 268 508 438 ;
+C 161 ; WX 333 ; N exclamdown ; B 121 -205 205 524 ;
+C 162 ; WX 556 ; N cent ; B 52 -120 510 628 ;
+C 163 ; WX 556 ; N sterling ; B 26 -23 535 729 ;
+C 164 ; WX 167 ; N fraction ; B -174 -20 336 709 ;
+C 165 ; WX 556 ; N yen ; B 11 0 545 709 ;
+C 166 ; WX 556 ; N florin ; B 11 -212 542 738 ;
+C 167 ; WX 556 ; N section ; B 43 -213 506 729 ;
+C 168 ; WX 556 ; N currency ; B 67 133 489 551 ;
+C 169 ; WX 191 ; N quotesingle ; B 48 464 142 709 ;
+C 170 ; WX 333 ; N quotedblleft ; B 48 477 299 709 ;
+C 171 ; WX 556 ; N guillemotleft ; B 98 106 455 438 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 91 106 243 438 ;
+C 173 ; WX 333 ; N guilsinglright ; B 85 106 239 438 ;
+C 174 ; WX 500 ; N fi ; B 12 0 436 732 ;
+C 175 ; WX 500 ; N fl ; B 17 0 430 732 ;
+C 177 ; WX 556 ; N endash ; B -5 240 561 312 ;
+C 178 ; WX 556 ; N dagger ; B 38 -177 513 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 38 -177 513 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 87 302 211 427 ;
+C 182 ; WX 537 ; N paragraph ; B 48 -177 522 729 ;
+C 183 ; WX 350 ; N bullet ; B 50 220 300 470 ;
+C 184 ; WX 222 ; N quotesinglbase ; B 64 -128 158 104 ;
+C 185 ; WX 333 ; N quotedblbase ; B 47 -128 300 104 ;
+C 186 ; WX 333 ; N quotedblright ; B 49 477 302 709 ;
+C 187 ; WX 556 ; N guillemotright ; B 98 106 451 438 ;
+C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 104 ;
+C 189 ; WX 1000 ; N perthousand ; B 9 -22 993 738 ;
+C 191 ; WX 611 ; N questiondown ; B 95 -217 528 524 ;
+C 193 ; WX 333 ; N grave ; B 22 592 231 740 ;
+C 194 ; WX 333 ; N acute ; B 92 592 301 740 ;
+C 195 ; WX 333 ; N circumflex ; B 20 591 307 741 ;
+C 196 ; WX 333 ; N tilde ; B 5 613 319 717 ;
+C 197 ; WX 333 ; N macron ; B 28 631 302 701 ;
+C 198 ; WX 333 ; N breve ; B 15 597 316 732 ;
+C 199 ; WX 333 ; N dotaccent ; B 115 612 219 716 ;
+C 200 ; WX 333 ; N dieresis ; B 30 612 296 715 ;
+C 202 ; WX 333 ; N ring ; B 79 579 255 754 ;
+C 203 ; WX 333 ; N cedilla ; B 39 -214 287 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -35 590 348 740 ;
+C 206 ; WX 333 ; N ogonek ; B 57 -205 265 0 ;
+C 207 ; WX 333 ; N caron ; B 19 591 306 741 ;
+C 208 ; WX 1000 ; N emdash ; B -9 240 1001 312 ;
+C 225 ; WX 1000 ; N AE ; B 11 0 950 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 37 303 333 742 ;
+C 232 ; WX 556 ; N Lslash ; B 0 0 552 729 ;
+C 233 ; WX 778 ; N Oslash ; B 30 -23 744 755 ;
+C 234 ; WX 1000 ; N OE ; B 43 -20 959 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 40 303 324 742 ;
+C 241 ; WX 889 ; N ae ; B 34 -23 845 539 ;
+C 245 ; WX 278 ; N dotlessi ; B 94 0 178 524 ;
+C 248 ; WX 222 ; N lslash ; B 0 0 212 729 ;
+C 249 ; WX 611 ; N oslash ; B 18 -30 529 539 ;
+C 250 ; WX 944 ; N oe ; B 40 -23 899 539 ;
+C 251 ; WX 611 ; N germandbls ; B 126 -20 566 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 85 -23 645 914 ;
+C -1 ; WX 722 ; N Uacute ; B 85 -23 645 939 ;
+C -1 ; WX 667 ; N Scedilla ; B 45 -214 621 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 21 0 593 940 ;
+C -1 ; WX 667 ; N Scaron ; B 48 -23 621 940 ;
+C -1 ; WX 722 ; N Rcaron ; B 93 0 679 940 ;
+C -1 ; WX 722 ; N Racute ; B 93 0 679 939 ;
+C -1 ; WX 667 ; N Sacute ; B 48 -23 621 939 ;
+C -1 ; WX 778 ; N Otilde ; B 38 -23 742 916 ;
+C -1 ; WX 556 ; N ucircumflex ; B 65 -23 482 741 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 38 -23 742 939 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 85 -23 645 939 ;
+C -1 ; WX 666 ; N Yacute ; B 13 0 661 939 ;
+C -1 ; WX 722 ; N Eth ; B 20 0 667 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 20 0 667 729 ;
+C -1 ; WX 611 ; N Zacute ; B 28 0 583 939 ;
+C -1 ; WX 722 ; N Uring ; B 85 -23 645 953 ;
+C -1 ; WX 556 ; N gbreve ; B 29 -218 489 732 ;
+C -1 ; WX 556 ; N eogonek ; B 40 -204 514 539 ;
+C -1 ; WX 556 ; N edotaccent ; B 40 -23 513 716 ;
+C -1 ; WX 556 ; N ecaron ; B 40 -23 513 741 ;
+C -1 ; WX 722 ; N Ugrave ; B 85 -23 645 939 ;
+C -1 ; WX 666 ; N Thorn ; B 91 0 616 729 ;
+C -1 ; WX 556 ; N eacute ; B 40 -23 513 740 ;
+C -1 ; WX 556 ; N edieresis ; B 40 -23 513 715 ;
+C -1 ; WX 635 ; N dcaron ; B 26 -23 648 729 ;
+C -1 ; WX 500 ; N ccedilla ; B 31 -214 477 539 ;
+C -1 ; WX 500 ; N ccaron ; B 31 -23 477 741 ;
+C -1 ; WX 500 ; N cacute ; B 31 -23 477 740 ;
+C -1 ; WX 556 ; N aogonek ; B 43 -205 596 539 ;
+C -1 ; WX 556 ; N aring ; B 42 -23 535 754 ;
+C -1 ; WX 556 ; N atilde ; B 42 -23 535 717 ;
+C -1 ; WX 556 ; N abreve ; B 42 -23 535 732 ;
+C -1 ; WX 556 ; N egrave ; B 40 -23 513 740 ;
+C -1 ; WX 556 ; N agrave ; B 42 -23 535 740 ;
+C -1 ; WX 556 ; N aacute ; B 42 -23 535 740 ;
+C -1 ; WX 556 ; N adieresis ; B 42 -23 535 715 ;
+C -1 ; WX 722 ; N Uogonek ; B 85 -205 645 729 ;
+C -1 ; WX 556 ; N ugrave ; B 65 -23 482 740 ;
+C -1 ; WX 556 ; N uacute ; B 65 -23 482 740 ;
+C -1 ; WX 556 ; N udieresis ; B 65 -23 482 715 ;
+C -1 ; WX 308 ; N tcaron ; B 14 -23 321 800 ;
+C -1 ; WX 500 ; N scommaaccent ; B 34 -285 459 539 ;
+C -1 ; WX 611 ; N Zcaron ; B 28 0 583 940 ;
+C -1 ; WX 556 ; N ecircumflex ; B 40 -23 513 741 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 85 -23 645 940 ;
+C -1 ; WX 556 ; N acircumflex ; B 42 -23 535 741 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 28 0 583 915 ;
+C -1 ; WX 500 ; N scaron ; B 34 -23 459 741 ;
+C -1 ; WX 667 ; N Amacron ; B 17 0 653 900 ;
+C -1 ; WX 500 ; N sacute ; B 34 -23 459 740 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 21 -285 593 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 13 0 661 914 ;
+C -1 ; WX 555 ; N thorn ; B 54 -218 522 714 ;
+C -1 ; WX 667 ; N Emacron ; B 90 0 613 900 ;
+C -1 ; WX 778 ; N Ograve ; B 38 -23 742 939 ;
+C -1 ; WX 778 ; N Oacute ; B 38 -23 742 939 ;
+C -1 ; WX 778 ; N Odieresis ; B 38 -23 742 914 ;
+C -1 ; WX 722 ; N Ntilde ; B 76 0 646 916 ;
+C -1 ; WX 722 ; N Ncaron ; B 76 0 646 940 ;
+C -1 ; WX 722 ; N Nacute ; B 76 0 646 939 ;
+C -1 ; WX 556 ; N Lcaron ; B 80 0 533 729 ;
+C -1 ; WX 556 ; N Lacute ; B 70 0 533 939 ;
+C -1 ; WX 278 ; N Idotaccent ; B 92 0 196 915 ;
+C -1 ; WX 333 ; N racute ; B 69 0 331 740 ;
+C -1 ; WX 278 ; N Icircumflex ; B -1 0 286 940 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 36 -23 526 740 ;
+C -1 ; WX 556 ; N otilde ; B 36 -23 510 717 ;
+C -1 ; WX 556 ; N Euro ; B 2 -23 543 709 ;
+C -1 ; WX 556 ; N ocircumflex ; B 36 -23 510 741 ;
+C -1 ; WX 351 ; N onesuperior ; B 61 284 222 709 ;
+C -1 ; WX 351 ; N twosuperior ; B 19 284 326 709 ;
+C -1 ; WX 351 ; N threesuperior ; B 16 270 322 709 ;
+C -1 ; WX 278 ; N Igrave ; B 1 0 210 939 ;
+C -1 ; WX 278 ; N Iacute ; B 71 0 280 939 ;
+C -1 ; WX 278 ; N Imacron ; B 20 0 274 900 ;
+C -1 ; WX 278 ; N Iogonek ; B 66 -204 234 729 ;
+C -1 ; WX 278 ; N Idieresis ; B 9 0 275 907 ;
+C -1 ; WX 778 ; N Gbreve ; B 44 -23 709 931 ;
+C -1 ; WX 722 ; N Umacron ; B 85 -23 645 900 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 79 -285 658 729 ;
+C -1 ; WX 556 ; N ograve ; B 36 -23 510 740 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 48 -285 621 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 90 -205 652 729 ;
+C -1 ; WX 556 ; N oacute ; B 36 -23 510 740 ;
+C -1 ; WX 667 ; N Edotaccent ; B 90 0 613 915 ;
+C -1 ; WX 222 ; N iogonek ; B 25 -204 190 729 ;
+C -1 ; WX 556 ; N gcommaaccent ; B 29 -218 489 817 ;
+C -1 ; WX 556 ; N odieresis ; B 36 -23 510 715 ;
+C -1 ; WX 556 ; N ntilde ; B 70 0 487 717 ;
+C -1 ; WX 556 ; N ncaron ; B 70 0 487 741 ;
+C -1 ; WX 667 ; N Ecaron ; B 90 0 613 940 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 90 0 613 940 ;
+C -1 ; WX 500 ; N scedilla ; B 34 -214 459 539 ;
+C -1 ; WX 333 ; N rcaron ; B 48 0 335 741 ;
+C -1 ; WX 667 ; N Egrave ; B 90 0 613 939 ;
+C -1 ; WX 667 ; N Eacute ; B 90 0 613 939 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 44 -285 709 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 93 -285 679 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 90 0 613 914 ;
+C -1 ; WX 556 ; N nacute ; B 70 0 487 740 ;
+C -1 ; WX 556 ; N uogonek ; B 65 -204 521 524 ;
+C -1 ; WX 556 ; N umacron ; B 65 -23 482 701 ;
+C -1 ; WX 722 ; N Dcaron ; B 89 0 667 940 ;
+C -1 ; WX 292 ; N lcaron ; B 68 0 305 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 48 -23 677 940 ;
+C -1 ; WX 722 ; N Cacute ; B 48 -23 677 939 ;
+C -1 ; WX 722 ; N Ccedilla ; B 48 -214 677 741 ;
+C -1 ; WX 606 ; N degree ; B 151 383 454 686 ;
+C -1 ; WX 667 ; N Aogonek ; B 17 -205 692 729 ;
+C -1 ; WX 584 ; N minus ; B 40 197 544 267 ;
+C -1 ; WX 584 ; N multiply ; B 95 34 488 427 ;
+C -1 ; WX 584 ; N divide ; B 50 0 534 472 ;
+C -1 ; WX 667 ; N Aring ; B 17 0 653 953 ;
+C -1 ; WX 1000 ; N trademark ; B 63 292 938 729 ;
+C -1 ; WX 333 ; N rcommaaccent ; B 65 -285 321 539 ;
+C -1 ; WX 222 ; N lacute ; B 63 0 272 939 ;
+C -1 ; WX 556 ; N omacron ; B 36 -23 510 701 ;
+C -1 ; WX 667 ; N Atilde ; B 17 0 653 916 ;
+C -1 ; WX 278 ; N icircumflex ; B -7 0 280 741 ;
+C -1 ; WX 278 ; N igrave ; B -5 0 204 740 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 70 -285 487 539 ;
+C -1 ; WX 222 ; N lcommaaccent ; B 63 -285 163 729 ;
+C -1 ; WX 584 ; N plusminus ; B 50 -11 534 623 ;
+C -1 ; WX 869 ; N onehalf ; B 61 -20 844 709 ;
+C -1 ; WX 869 ; N onequarter ; B 61 -20 849 709 ;
+C -1 ; WX 869 ; N threequarters ; B 16 -20 849 709 ;
+C -1 ; WX 278 ; N iacute ; B 65 0 274 740 ;
+C -1 ; WX 667 ; N Abreve ; B 17 0 653 931 ;
+C -1 ; WX 500 ; N kcommaaccent ; B 58 -285 502 729 ;
+C -1 ; WX 778 ; N Omacron ; B 38 -23 742 900 ;
+C -1 ; WX 222 ; N imacron ; B -16 0 231 701 ;
+C -1 ; WX 556 ; N emacron ; B 40 -23 513 701 ;
+C -1 ; WX 556 ; N amacron ; B 42 -23 535 701 ;
+C -1 ; WX 278 ; N tcommaaccent ; B 14 -285 254 668 ;
+C -1 ; WX 500 ; N ydieresis ; B 20 -218 478 715 ;
+C -1 ; WX 500 ; N zdotaccent ; B 31 0 457 716 ;
+C -1 ; WX 500 ; N zcaron ; B 31 0 457 741 ;
+C -1 ; WX 500 ; N zacute ; B 31 0 457 740 ;
+C -1 ; WX 500 ; N yacute ; B 20 -218 478 740 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 65 -23 530 740 ;
+C -1 ; WX 556 ; N eth ; B 36 -23 510 743 ;
+C -1 ; WX 556 ; N uring ; B 65 -23 482 754 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 38 -23 742 940 ;
+C -1 ; WX 333 ; N commaaccent ; B 116 -285 216 -60 ;
+C -1 ; WX 737 ; N copyright ; B -13 -22 751 742 ;
+C -1 ; WX 737 ; N registered ; B -13 -22 751 742 ;
+C -1 ; WX 667 ; N Acircumflex ; B 17 0 653 940 ;
+C -1 ; WX 278 ; N idieresis ; B 3 0 269 708 ;
+C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ;
+C -1 ; WX 711 ; N Delta ; B 10 0 701 729 ;
+C -1 ; WX 548 ; N notequal ; B 32 -25 516 486 ;
+C -1 ; WX 542 ; N radical ; B 7 -36 512 913 ;
+C -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ;
+C -1 ; WX 667 ; N Aacute ; B 17 0 653 939 ;
+C -1 ; WX 584 ; N lessequal ; B 45 -11 534 639 ;
+C -1 ; WX 584 ; N greaterequal ; B 45 -11 534 639 ;
+C -1 ; WX 584 ; N logicalnot ; B 40 86 544 375 ;
+C -1 ; WX 711 ; N summation ; B 17 -97 694 760 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 76 -285 646 729 ;
+C -1 ; WX 556 ; N dcroat ; B 26 -23 557 729 ;
+C -1 ; WX 260 ; N brokenbar ; B 100 -212 160 729 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B 80 -285 533 729 ;
+C -1 ; WX 667 ; N Adieresis ; B 17 0 653 914 ;
+C -1 ; WX 556 ; N mu ; B 65 -220 544 524 ;
+C -1 ; WX 278 ; N .notdef ; B 191 0 191 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -36
+KPX A Ccedilla -36
+KPX A G -35
+KPX A O -33
+KPX A Odieresis -33
+KPX A Q -32
+KPX A T -93
+KPX A U -37
+KPX A Uacute -37
+KPX A Ucircumflex -37
+KPX A Udieresis -37
+KPX A Ugrave -37
+KPX A V -75
+KPX A W -51
+KPX A Y -99
+KPX A a -4
+KPX A b 4
+KPX A c -11
+KPX A ccedilla -10
+KPX A comma 5
+KPX A d -8
+KPX A e -16
+KPX A g -10
+KPX A guillemotleft -44
+KPX A guilsinglleft -40
+KPX A hyphen -3
+KPX A o -13
+KPX A period 5
+KPX A q -8
+KPX A quotedblright -56
+KPX A quoteright -65
+KPX A t -16
+KPX A u -12
+KPX A v -31
+KPX A w -21
+KPX A y -34
+KPX Aacute C -36
+KPX Aacute G -35
+KPX Aacute O -33
+KPX Aacute Q -32
+KPX Aacute T -93
+KPX Aacute U -37
+KPX Aacute V -75
+KPX Aacute W -51
+KPX Aacute Y -99
+KPX Aacute a -4
+KPX Aacute b 4
+KPX Aacute c -11
+KPX Aacute comma 5
+KPX Aacute d -8
+KPX Aacute e -16
+KPX Aacute g -10
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen -3
+KPX Aacute o -13
+KPX Aacute period 5
+KPX Aacute q -8
+KPX Aacute quoteright -65
+KPX Aacute t -16
+KPX Aacute u -12
+KPX Aacute v -31
+KPX Aacute w -21
+KPX Aacute y -34
+KPX Acircumflex C -36
+KPX Acircumflex G -35
+KPX Acircumflex O -33
+KPX Acircumflex Q -32
+KPX Acircumflex T -93
+KPX Acircumflex U -37
+KPX Acircumflex V -75
+KPX Acircumflex W -51
+KPX Acircumflex Y -99
+KPX Acircumflex comma 5
+KPX Acircumflex period 5
+KPX Adieresis C -36
+KPX Adieresis G -35
+KPX Adieresis O -33
+KPX Adieresis Q -32
+KPX Adieresis T -93
+KPX Adieresis U -37
+KPX Adieresis V -75
+KPX Adieresis W -51
+KPX Adieresis Y -99
+KPX Adieresis a -4
+KPX Adieresis b 4
+KPX Adieresis c -11
+KPX Adieresis comma 5
+KPX Adieresis d -8
+KPX Adieresis g -10
+KPX Adieresis guillemotleft -44
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen -3
+KPX Adieresis o -13
+KPX Adieresis period 5
+KPX Adieresis q -8
+KPX Adieresis quotedblright -56
+KPX Adieresis quoteright -65
+KPX Adieresis t -16
+KPX Adieresis u -12
+KPX Adieresis v -31
+KPX Adieresis w -21
+KPX Adieresis y -34
+KPX Agrave C -36
+KPX Agrave G -35
+KPX Agrave O -33
+KPX Agrave Q -32
+KPX Agrave T -93
+KPX Agrave U -37
+KPX Agrave V -75
+KPX Agrave W -51
+KPX Agrave Y -99
+KPX Agrave comma 5
+KPX Agrave period 5
+KPX Aring C -36
+KPX Aring G -35
+KPX Aring O -33
+KPX Aring Q -32
+KPX Aring T -93
+KPX Aring U -37
+KPX Aring V -75
+KPX Aring W -51
+KPX Aring Y -99
+KPX Aring a -4
+KPX Aring b 4
+KPX Aring c -11
+KPX Aring comma 5
+KPX Aring d -8
+KPX Aring e -16
+KPX Aring g -10
+KPX Aring guillemotleft -44
+KPX Aring guilsinglleft -40
+KPX Aring hyphen -3
+KPX Aring o -13
+KPX Aring period 5
+KPX Aring q -8
+KPX Aring quotedblright -56
+KPX Aring quoteright -65
+KPX Aring t -16
+KPX Aring u -12
+KPX Aring v -31
+KPX Aring w -21
+KPX Aring y -34
+KPX Atilde C -36
+KPX Atilde G -35
+KPX Atilde O -33
+KPX Atilde Q -32
+KPX Atilde T -93
+KPX Atilde U -37
+KPX Atilde V -75
+KPX Atilde W -51
+KPX Atilde Y -99
+KPX Atilde comma 5
+KPX Atilde period 5
+KPX B A -21
+KPX B AE -21
+KPX B Aacute -21
+KPX B Acircumflex -21
+KPX B Adieresis -21
+KPX B Aring -21
+KPX B Atilde -21
+KPX B O -7
+KPX B OE -5
+KPX B Oacute -7
+KPX B Ocircumflex -7
+KPX B Odieresis -7
+KPX B Ograve -7
+KPX B Oslash -1
+KPX B V -41
+KPX B W -25
+KPX B Y -44
+KPX C A -32
+KPX C AE -33
+KPX C Aacute -32
+KPX C Adieresis -32
+KPX C Aring -32
+KPX C H -12
+KPX C K -10
+KPX C O -8
+KPX C Oacute -8
+KPX C Odieresis -8
+KPX Ccedilla A -31
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -5
+KPX D T -45
+KPX D V -51
+KPX D W -29
+KPX D X -53
+KPX D Y -63
+KPX F A -69
+KPX F Aacute -69
+KPX F Acircumflex -69
+KPX F Adieresis -69
+KPX F Agrave -69
+KPX F Aring -69
+KPX F Atilde -69
+KPX F J -51
+KPX F O -22
+KPX F Odieresis -22
+KPX F a -33
+KPX F aacute -33
+KPX F adieresis -33
+KPX F ae -29
+KPX F aring -33
+KPX F comma -108
+KPX F e -24
+KPX F eacute -24
+KPX F hyphen -14
+KPX F i -10
+KPX F j -12
+KPX F o -21
+KPX F oacute -21
+KPX F odieresis -21
+KPX F oe -23
+KPX F oslash -21
+KPX F period -108
+KPX F r -35
+KPX F u -33
+KPX G A -6
+KPX G AE -3
+KPX G Aacute -6
+KPX G Acircumflex -6
+KPX G Adieresis -6
+KPX G Agrave -6
+KPX G Aring -6
+KPX G Atilde -6
+KPX G T -44
+KPX G V -50
+KPX G W -28
+KPX G Y -62
+KPX J A -32
+KPX J AE -31
+KPX J Adieresis -32
+KPX J Aring -32
+KPX K C -51
+KPX K G -51
+KPX K O -48
+KPX K OE -45
+KPX K Oacute -48
+KPX K Odieresis -48
+KPX K S -38
+KPX K T 20
+KPX K a -11
+KPX K adieresis -11
+KPX K ae -7
+KPX K aring -11
+KPX K e -32
+KPX K hyphen -47
+KPX K o -29
+KPX K oacute -29
+KPX K odieresis -29
+KPX K u -19
+KPX K udieresis -19
+KPX K y -62
+KPX L A 17
+KPX L AE 20
+KPX L Aacute 17
+KPX L Adieresis 17
+KPX L Aring 17
+KPX L C -41
+KPX L Ccedilla -37
+KPX L G -42
+KPX L O -41
+KPX L Oacute -41
+KPX L Ocircumflex -41
+KPX L Odieresis -41
+KPX L Ograve -41
+KPX L Otilde -41
+KPX L S -19
+KPX L T -105
+KPX L U -35
+KPX L Udieresis -35
+KPX L V -105
+KPX L W -68
+KPX L Y -121
+KPX L hyphen -125
+KPX L quotedblright -141
+KPX L quoteright -149
+KPX L u -7
+KPX L udieresis -7
+KPX L y -56
+KPX N A -9
+KPX N AE -6
+KPX N Aacute -9
+KPX N Adieresis -9
+KPX N Aring -9
+KPX N C -3
+KPX N Ccedilla -3
+KPX N G -2
+KPX N O 0
+KPX N Oacute 0
+KPX N Odieresis 0
+KPX N a -5
+KPX N aacute -5
+KPX N adieresis -5
+KPX N ae -2
+KPX N aring -5
+KPX N comma -7
+KPX N e 0
+KPX N eacute 0
+KPX N o 2
+KPX N oacute 2
+KPX N odieresis 2
+KPX N oslash 4
+KPX N period -7
+KPX N u 0
+KPX N udieresis 0
+KPX O A -35
+KPX O AE -39
+KPX O Aacute -35
+KPX O Adieresis -35
+KPX O Aring -35
+KPX O T -42
+KPX O V -45
+KPX O W -23
+KPX O X -46
+KPX O Y -59
+KPX Oacute A -35
+KPX Oacute T -42
+KPX Oacute V -45
+KPX Oacute W -23
+KPX Oacute Y -59
+KPX Ocircumflex T -42
+KPX Ocircumflex V -45
+KPX Ocircumflex Y -59
+KPX Odieresis A -35
+KPX Odieresis T -42
+KPX Odieresis V -45
+KPX Odieresis W -23
+KPX Odieresis X -46
+KPX Odieresis Y -59
+KPX Ograve T -42
+KPX Ograve V -45
+KPX Ograve Y -59
+KPX Oslash A -33
+KPX Otilde T -42
+KPX Otilde V -45
+KPX Otilde Y -59
+KPX P A -78
+KPX P AE -86
+KPX P Aacute -78
+KPX P Adieresis -78
+KPX P Aring -78
+KPX P J -78
+KPX P a -28
+KPX P aacute -28
+KPX P adieresis -28
+KPX P ae -24
+KPX P aring -28
+KPX P comma -135
+KPX P e -31
+KPX P eacute -31
+KPX P hyphen -40
+KPX P o -27
+KPX P oacute -27
+KPX P odieresis -27
+KPX P oe -28
+KPX P oslash -27
+KPX P period -135
+KPX R C -16
+KPX R Ccedilla -16
+KPX R G -15
+KPX R O -13
+KPX R OE -11
+KPX R Oacute -13
+KPX R Odieresis -13
+KPX R T -23
+KPX R U -17
+KPX R Udieresis -17
+KPX R V -39
+KPX R W -27
+KPX R Y -43
+KPX R a -15
+KPX R aacute -15
+KPX R adieresis -15
+KPX R ae -12
+KPX R aring -15
+KPX R e -12
+KPX R eacute -12
+KPX R hyphen -2
+KPX R o -9
+KPX R oacute -9
+KPX R odieresis -9
+KPX R oe -11
+KPX R u -9
+KPX R uacute -9
+KPX R udieresis -9
+KPX R y -8
+KPX S A -22
+KPX S AE -22
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T -28
+KPX S V -42
+KPX S W -28
+KPX S Y -48
+KPX S t -3
+KPX T A -95
+KPX T AE -97
+KPX T Aacute -95
+KPX T Acircumflex -95
+KPX T Adieresis -95
+KPX T Agrave -95
+KPX T Aring -95
+KPX T Atilde -95
+KPX T C -44
+KPX T G -45
+KPX T J -100
+KPX T O -42
+KPX T OE -35
+KPX T Oacute -42
+KPX T Ocircumflex -42
+KPX T Odieresis -42
+KPX T Ograve -42
+KPX T Oslash -41
+KPX T Otilde -42
+KPX T S -24
+KPX T V 12
+KPX T W 16
+KPX T Y 20
+KPX T a -100
+KPX T ae -97
+KPX T c -90
+KPX T colon -133
+KPX T comma -100
+KPX T e -95
+KPX T g -89
+KPX T guillemotleft -121
+KPX T guilsinglleft -117
+KPX T hyphen -77
+KPX T i -3
+KPX T j -5
+KPX T o -92
+KPX T oslash -87
+KPX T period -100
+KPX T r -92
+KPX T s -92
+KPX T semicolon -129
+KPX T u -91
+KPX T v -95
+KPX T w -93
+KPX T y -100
+KPX U A -36
+KPX U AE -39
+KPX U Aacute -36
+KPX U Acircumflex -36
+KPX U Adieresis -36
+KPX U Aring -36
+KPX U Atilde -36
+KPX U comma -27
+KPX U m -4
+KPX U n -4
+KPX U p 3
+KPX U period -25
+KPX U r -4
+KPX Uacute A -36
+KPX Uacute comma -27
+KPX Uacute m -4
+KPX Uacute n -4
+KPX Uacute p 3
+KPX Uacute period -25
+KPX Uacute r -4
+KPX Ucircumflex A -36
+KPX Udieresis A -36
+KPX Udieresis b 3
+KPX Udieresis comma -27
+KPX Udieresis m -4
+KPX Udieresis n -4
+KPX Udieresis p 3
+KPX Udieresis period -25
+KPX Udieresis r -4
+KPX Ugrave A -36
+KPX V A -71
+KPX V AE -78
+KPX V Aacute -71
+KPX V Acircumflex -71
+KPX V Adieresis -71
+KPX V Agrave -71
+KPX V Aring -71
+KPX V Atilde -71
+KPX V C -43
+KPX V G -42
+KPX V O -40
+KPX V Oacute -40
+KPX V Ocircumflex -40
+KPX V Odieresis -40
+KPX V Ograve -40
+KPX V Oslash -33
+KPX V Otilde -40
+KPX V S -35
+KPX V T 15
+KPX V a -59
+KPX V ae -55
+KPX V colon -66
+KPX V comma -89
+KPX V e -57
+KPX V g -50
+KPX V guillemotleft -83
+KPX V guilsinglleft -80
+KPX V hyphen -38
+KPX V i -5
+KPX V o -54
+KPX V oslash -50
+KPX V period -89
+KPX V r -42
+KPX V semicolon -66
+KPX V u -41
+KPX V y -20
+KPX W A -50
+KPX W AE -56
+KPX W Aacute -50
+KPX W Acircumflex -50
+KPX W Adieresis -50
+KPX W Agrave -50
+KPX W Aring -50
+KPX W Atilde -50
+KPX W C -23
+KPX W G -22
+KPX W O -20
+KPX W Oacute -20
+KPX W Ocircumflex -20
+KPX W Odieresis -20
+KPX W Ograve -20
+KPX W Oslash -13
+KPX W Otilde -20
+KPX W S -24
+KPX W T 19
+KPX W a -38
+KPX W ae -34
+KPX W colon -52
+KPX W comma -56
+KPX W e -32
+KPX W g -25
+KPX W guillemotleft -58
+KPX W guilsinglleft -54
+KPX W hyphen -13
+KPX W i -1
+KPX W o -29
+KPX W oslash -25
+KPX W period -56
+KPX W r -28
+KPX W semicolon -53
+KPX W u -28
+KPX W y -6
+KPX X C -48
+KPX X O -45
+KPX X Odieresis -45
+KPX X Q -44
+KPX X a -15
+KPX X e -36
+KPX X hyphen -51
+KPX X o -33
+KPX X u -24
+KPX X y -61
+KPX Y A -96
+KPX Y AE -103
+KPX Y Aacute -96
+KPX Y Acircumflex -96
+KPX Y Adieresis -96
+KPX Y Agrave -96
+KPX Y Aring -96
+KPX Y Atilde -96
+KPX Y C -58
+KPX Y G -58
+KPX Y O -56
+KPX Y Oacute -56
+KPX Y Ocircumflex -56
+KPX Y Odieresis -56
+KPX Y Ograve -56
+KPX Y Oslash -54
+KPX Y Otilde -56
+KPX Y S -41
+KPX Y T 23
+KPX Y a -88
+KPX Y ae -84
+KPX Y colon -87
+KPX Y comma -111
+KPX Y e -89
+KPX Y g -83
+KPX Y guillemotleft -123
+KPX Y guilsinglleft -119
+KPX Y hyphen -84
+KPX Y i 3
+KPX Y o -86
+KPX Y oslash -82
+KPX Y p -54
+KPX Y period -111
+KPX Y semicolon -88
+KPX Y u -63
+KPX Y v -36
+KPX Z v -33
+KPX Z y -38
+KPX a j -4
+KPX a quoteright -23
+KPX a v -21
+KPX a w -13
+KPX a y -26
+KPX aacute v -21
+KPX aacute w -13
+KPX aacute y -26
+KPX adieresis v -21
+KPX adieresis w -13
+KPX adieresis y -26
+KPX ae v -16
+KPX ae w -10
+KPX ae y -20
+KPX agrave v -21
+KPX agrave w -13
+KPX agrave y -26
+KPX aring v -21
+KPX aring w -13
+KPX aring y -26
+KPX b v -11
+KPX b w -3
+KPX b y -15
+KPX c h 1
+KPX c k 7
+KPX comma one -100
+KPX comma quotedblright -41
+KPX comma quoteright -50
+KPX e quoteright -18
+KPX e t -10
+KPX e v -15
+KPX e w -9
+KPX e x -27
+KPX e y -19
+KPX eacute v -15
+KPX eacute w -9
+KPX eacute y -19
+KPX ecircumflex v -15
+KPX ecircumflex w -9
+KPX ecircumflex y -19
+KPX eight four 1
+KPX eight one -48
+KPX eight seven -33
+KPX f a -9
+KPX f aacute -9
+KPX f adieresis -9
+KPX f ae -5
+KPX f aring -9
+KPX f e -15
+KPX f eacute -15
+KPX f f 22
+KPX f i -2
+KPX f j -4
+KPX f l -3
+KPX f o -10
+KPX f oacute -10
+KPX f odieresis -10
+KPX f oe -12
+KPX f oslash -9
+KPX f quoteright 0
+KPX f s 0
+KPX f t 24
+KPX five four 1
+KPX five one -76
+KPX five seven -26
+KPX four four 5
+KPX four one -84
+KPX four seven -56
+KPX g a -5
+KPX g adieresis -5
+KPX g ae -1
+KPX g aring -5
+KPX g e 0
+KPX g eacute 0
+KPX g l 0
+KPX g oacute 3
+KPX g odieresis 3
+KPX g r 0
+KPX guillemotright A -50
+KPX guillemotright AE -54
+KPX guillemotright Aacute -50
+KPX guillemotright Adieresis -50
+KPX guillemotright Aring -50
+KPX guillemotright T -126
+KPX guillemotright V -93
+KPX guillemotright W -66
+KPX guillemotright Y -133
+KPX guilsinglright A -44
+KPX guilsinglright AE -48
+KPX guilsinglright Aacute -44
+KPX guilsinglright Adieresis -44
+KPX guilsinglright Aring -44
+KPX guilsinglright T -121
+KPX guilsinglright V -88
+KPX guilsinglright W -60
+KPX guilsinglright Y -128
+KPX h quoteright -15
+KPX h y -18
+KPX hyphen A -7
+KPX hyphen AE -11
+KPX hyphen Aacute -7
+KPX hyphen Adieresis -7
+KPX hyphen Aring -7
+KPX hyphen T -80
+KPX hyphen V -46
+KPX hyphen W -19
+KPX hyphen Y -92
+KPX i T -7
+KPX i j -3
+KPX k a -2
+KPX k aacute -2
+KPX k adieresis -2
+KPX k ae 2
+KPX k aring -2
+KPX k comma 0
+KPX k e -21
+KPX k eacute -21
+KPX k g -16
+KPX k hyphen -41
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period 0
+KPX k s -3
+KPX k u -11
+KPX k udieresis -6
+KPX l v 0
+KPX l y -5
+KPX m p 5
+KPX m v -13
+KPX m w -7
+KPX m y -18
+KPX n T -96
+KPX n p 5
+KPX n quoteright -14
+KPX n v -13
+KPX n w -7
+KPX n y -18
+KPX nine four -3
+KPX nine one -43
+KPX nine seven -37
+KPX o T -99
+KPX o quoteright -21
+KPX o t -10
+KPX o v -18
+KPX o w -10
+KPX o x -27
+KPX o y -22
+KPX oacute v -18
+KPX oacute w -10
+KPX oacute y -22
+KPX ocircumflex t -10
+KPX odieresis t -10
+KPX odieresis v -18
+KPX odieresis w -10
+KPX odieresis x -27
+KPX odieresis y -22
+KPX ograve v -18
+KPX ograve w -10
+KPX ograve y -22
+KPX one comma -74
+KPX one eight -65
+KPX one five -67
+KPX one four -81
+KPX one nine -65
+KPX one one -118
+KPX one period -74
+KPX one seven -90
+KPX one six -62
+KPX one three -67
+KPX one two -69
+KPX one zero -62
+KPX p t -4
+KPX p y -16
+KPX period one -101
+KPX period quotedblright -41
+KPX period quoteright -51
+KPX q c 8
+KPX q u 4
+KPX quotedblbase A 30
+KPX quotedblbase AE 30
+KPX quotedblbase T -75
+KPX quotedblbase V -69
+KPX quotedblbase W -34
+KPX quotedblbase Y -91
+KPX quotedblleft A -52
+KPX quotedblleft AE -64
+KPX quotedblleft Aacute -52
+KPX quotedblleft Adieresis -52
+KPX quotedblleft Aring -52
+KPX quotedblleft T 9
+KPX quotedblleft V 15
+KPX quotedblleft W 27
+KPX quotedblleft Y 5
+KPX quotedblright A -53
+KPX quotedblright AE -66
+KPX quotedblright Aacute -53
+KPX quotedblright Adieresis -53
+KPX quotedblright Aring -53
+KPX quotedblright T 11
+KPX quotedblright V 15
+KPX quotedblright W 26
+KPX quotedblright Y 7
+KPX quoteleft A -67
+KPX quoteleft AE -79
+KPX quoteleft Aacute -67
+KPX quoteleft Adieresis -67
+KPX quoteleft Aring -67
+KPX quoteleft T -5
+KPX quoteleft V 0
+KPX quoteleft W 12
+KPX quoteleft Y -9
+KPX quoteright A -72
+KPX quoteright AE -85
+KPX quoteright Aacute -72
+KPX quoteright Adieresis -72
+KPX quoteright Aring -72
+KPX quoteright comma -60
+KPX quoteright d -20
+KPX quoteright o -26
+KPX quoteright period -60
+KPX quoteright r -18
+KPX quoteright s -18
+KPX quoteright t -7
+KPX quoteright v -2
+KPX quoteright w 2
+KPX quoteright y -6
+KPX r a -5
+KPX r aacute -5
+KPX r acircumflex -5
+KPX r adieresis -5
+KPX r ae -1
+KPX r agrave -5
+KPX r aring -5
+KPX r c -6
+KPX r ccedilla -9
+KPX r colon -22
+KPX r comma -69
+KPX r d -1
+KPX r e -11
+KPX r eacute -11
+KPX r ecircumflex -11
+KPX r egrave -11
+KPX r f 26
+KPX r g -4
+KPX r h 0
+KPX r hyphen -47
+KPX r i 1
+KPX r j 0
+KPX r k 6
+KPX r l 1
+KPX r m 0
+KPX r n 0
+KPX r o -6
+KPX r oacute -6
+KPX r ocircumflex -6
+KPX r odieresis -6
+KPX r oe -8
+KPX r ograve -6
+KPX r oslash -6
+KPX r p 8
+KPX r period -69
+KPX r q -3
+KPX r quoteright 1
+KPX r r 0
+KPX r s 4
+KPX r semicolon -22
+KPX r t 28
+KPX r u 2
+KPX r v 29
+KPX r w 31
+KPX r x 20
+KPX r y 24
+KPX r z 9
+KPX s quoteright -22
+KPX s t -3
+KPX seven colon -77
+KPX seven comma -119
+KPX seven eight -28
+KPX seven five -30
+KPX seven four -93
+KPX seven one -53
+KPX seven period -119
+KPX seven seven -4
+KPX seven six -40
+KPX seven three -23
+KPX seven two -28
+KPX six four 1
+KPX six one -43
+KPX six seven -30
+KPX t S -8
+KPX t a -1
+KPX t aacute -1
+KPX t adieresis -1
+KPX t ae 2
+KPX t aring -1
+KPX t colon -28
+KPX t e -14
+KPX t eacute -14
+KPX t h -3
+KPX t o -12
+KPX t oacute -12
+KPX t odieresis -12
+KPX t quoteright -1
+KPX t semicolon -28
+KPX three four -2
+KPX three one -49
+KPX three seven -33
+KPX two four -37
+KPX two one -36
+KPX two seven -25
+KPX u quoteright -8
+KPX v a -18
+KPX v aacute -18
+KPX v acircumflex -18
+KPX v adieresis -18
+KPX v ae -14
+KPX v agrave -18
+KPX v aring -18
+KPX v atilde -18
+KPX v c -16
+KPX v colon -23
+KPX v comma -69
+KPX v e -21
+KPX v eacute -21
+KPX v ecircumflex -21
+KPX v egrave -21
+KPX v g -14
+KPX v hyphen -12
+KPX v l 0
+KPX v o -17
+KPX v oacute -17
+KPX v odieresis -17
+KPX v ograve -17
+KPX v oslash -17
+KPX v period -69
+KPX v s -9
+KPX v semicolon -23
+KPX w a -15
+KPX w aacute -15
+KPX w acircumflex -15
+KPX w adieresis -15
+KPX w ae -11
+KPX w agrave -15
+KPX w aring -15
+KPX w atilde -15
+KPX w c -7
+KPX w colon -23
+KPX w comma -50
+KPX w e -12
+KPX w eacute -12
+KPX w ecircumflex -12
+KPX w egrave -12
+KPX w g -6
+KPX w hyphen -1
+KPX w l 0
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -6
+KPX w period -50
+KPX w s -5
+KPX w semicolon -23
+KPX x a -17
+KPX x c -23
+KPX x e -28
+KPX x eacute -28
+KPX x o -25
+KPX x q -20
+KPX y a -22
+KPX y aacute -22
+KPX y acircumflex -22
+KPX y adieresis -22
+KPX y ae -18
+KPX y agrave -22
+KPX y aring -22
+KPX y atilde -22
+KPX y c -19
+KPX y colon -27
+KPX y comma -70
+KPX y e -24
+KPX y eacute -24
+KPX y ecircumflex -24
+KPX y egrave -24
+KPX y g -17
+KPX y hyphen -14
+KPX y l -4
+KPX y o -20
+KPX y oacute -20
+KPX y odieresis -20
+KPX y ograve -20
+KPX y oslash -19
+KPX y period -70
+KPX y s -12
+KPX y semicolon -27
+KPX zero four -2
+KPX zero one -46
+KPX zero seven -39
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvr8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvr8a.pfb
new file mode 100644
index 00000000000..ee77b02bdf5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvr8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvr8ac.afm b/Master/tlpkg/tlgs/lib/fonts/uhvr8ac.afm
new file mode 100644
index 00000000000..c78fd9bd32a
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvr8ac.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-ReguCond
+FullName Nimbus Sans L Regular Condensed
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -136 -282 820 951
+CapHeight 718
+XHeight 523
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 228 ; N exclam ; B 74 0 153 718 ;
+C 34 ; WX 291 ; N quotedbl ; B 57 463 234 718 ;
+C 35 ; WX 456 ; N numbersign ; B 23 0 434 688 ;
+C 36 ; WX 456 ; N dollar ; B 26 -115 427 775 ;
+C 37 ; WX 729 ; N percent ; B 32 -19 697 703 ;
+C 38 ; WX 547 ; N ampersand ; B 36 -15 529 718 ;
+C 39 ; WX 182 ; N quoteright ; B 43 462 129 718 ;
+C 40 ; WX 273 ; N parenleft ; B 56 -207 245 733 ;
+C 41 ; WX 273 ; N parenright ; B 28 -207 217 733 ;
+C 42 ; WX 319 ; N asterisk ; B 32 431 286 718 ;
+C 43 ; WX 479 ; N plus ; B 32 0 447 505 ;
+C 44 ; WX 228 ; N comma ; B 71 -147 157 107 ;
+C 45 ; WX 273 ; N hyphen ; B 36 232 237 322 ;
+C 46 ; WX 228 ; N period ; B 71 0 157 107 ;
+C 47 ; WX 228 ; N slash ; B -14 -19 242 737 ;
+C 48 ; WX 456 ; N zero ; B 30 -19 426 703 ;
+C 49 ; WX 456 ; N one ; B 83 0 294 703 ;
+C 50 ; WX 456 ; N two ; B 21 0 416 703 ;
+C 51 ; WX 456 ; N three ; B 28 -19 428 703 ;
+C 52 ; WX 456 ; N four ; B 20 0 429 703 ;
+C 53 ; WX 456 ; N five ; B 26 -19 421 688 ;
+C 54 ; WX 456 ; N six ; B 31 -19 425 703 ;
+C 55 ; WX 456 ; N seven ; B 30 0 429 688 ;
+C 56 ; WX 456 ; N eight ; B 31 -19 424 703 ;
+C 57 ; WX 456 ; N nine ; B 34 -19 421 703 ;
+C 58 ; WX 228 ; N colon ; B 71 0 157 516 ;
+C 59 ; WX 228 ; N semicolon ; B 71 -147 157 516 ;
+C 60 ; WX 479 ; N less ; B 39 10 440 496 ;
+C 61 ; WX 479 ; N equal ; B 32 115 447 390 ;
+C 62 ; WX 479 ; N greater ; B 39 10 440 496 ;
+C 63 ; WX 456 ; N question ; B 46 0 403 727 ;
+C 64 ; WX 832 ; N at ; B 121 -19 712 737 ;
+C 65 ; WX 547 ; N A ; B 11 0 536 718 ;
+C 66 ; WX 547 ; N B ; B 61 0 514 718 ;
+C 67 ; WX 592 ; N C ; B 36 -19 558 737 ;
+C 68 ; WX 592 ; N D ; B 66 0 553 718 ;
+C 69 ; WX 547 ; N E ; B 71 0 505 718 ;
+C 70 ; WX 501 ; N F ; B 71 0 478 718 ;
+C 71 ; WX 638 ; N G ; B 39 -19 577 737 ;
+C 72 ; WX 592 ; N H ; B 63 0 530 718 ;
+C 73 ; WX 228 ; N I ; B 75 0 154 718 ;
+C 74 ; WX 410 ; N J ; B 14 -19 351 718 ;
+C 75 ; WX 547 ; N K ; B 62 0 544 718 ;
+C 76 ; WX 456 ; N L ; B 62 0 440 718 ;
+C 77 ; WX 683 ; N M ; B 60 0 624 718 ;
+C 78 ; WX 592 ; N N ; B 62 0 530 718 ;
+C 79 ; WX 638 ; N O ; B 32 -19 606 737 ;
+C 80 ; WX 547 ; N P ; B 71 0 510 718 ;
+C 81 ; WX 638 ; N Q ; B 32 -56 606 737 ;
+C 82 ; WX 592 ; N R ; B 72 0 561 718 ;
+C 83 ; WX 547 ; N S ; B 40 -19 508 737 ;
+C 84 ; WX 501 ; N T ; B 11 0 490 718 ;
+C 85 ; WX 592 ; N U ; B 65 -19 528 718 ;
+C 86 ; WX 547 ; N V ; B 16 0 531 718 ;
+C 87 ; WX 774 ; N W ; B 13 0 761 718 ;
+C 88 ; WX 547 ; N X ; B 16 0 531 718 ;
+C 89 ; WX 547 ; N Y ; B 11 0 535 718 ;
+C 90 ; WX 501 ; N Z ; B 19 0 482 718 ;
+C 91 ; WX 228 ; N bracketleft ; B 52 -196 205 722 ;
+C 92 ; WX 228 ; N backslash ; B -14 -19 242 737 ;
+C 93 ; WX 228 ; N bracketright ; B 23 -196 176 722 ;
+C 94 ; WX 385 ; N asciicircum ; B -11 264 396 688 ;
+C 95 ; WX 456 ; N underscore ; B 0 -125 456 -75 ;
+C 96 ; WX 182 ; N quoteleft ; B 53 469 139 725 ;
+C 97 ; WX 456 ; N a ; B 30 -15 435 538 ;
+C 98 ; WX 456 ; N b ; B 48 -15 424 718 ;
+C 99 ; WX 410 ; N c ; B 25 -15 391 538 ;
+C 100 ; WX 456 ; N d ; B 29 -15 409 718 ;
+C 101 ; WX 456 ; N e ; B 33 -15 423 538 ;
+C 102 ; WX 228 ; N f ; B 11 0 215 728 ;
+C 103 ; WX 456 ; N g ; B 33 -220 409 538 ;
+C 104 ; WX 456 ; N h ; B 53 0 403 718 ;
+C 105 ; WX 182 ; N i ; B 55 0 127 718 ;
+C 106 ; WX 182 ; N j ; B -13 -210 127 718 ;
+C 107 ; WX 410 ; N k ; B 55 0 411 718 ;
+C 108 ; WX 182 ; N l ; B 55 0 127 718 ;
+C 109 ; WX 683 ; N m ; B 53 0 631 538 ;
+C 110 ; WX 456 ; N n ; B 53 0 403 538 ;
+C 111 ; WX 456 ; N o ; B 29 -14 427 538 ;
+C 112 ; WX 456 ; N p ; B 48 -207 424 538 ;
+C 113 ; WX 456 ; N q ; B 29 -207 405 538 ;
+C 114 ; WX 273 ; N r ; B 63 0 272 538 ;
+C 115 ; WX 410 ; N s ; B 26 -15 380 538 ;
+C 116 ; WX 228 ; N t ; B 11 -7 211 669 ;
+C 117 ; WX 456 ; N u ; B 56 -15 401 523 ;
+C 118 ; WX 410 ; N v ; B 7 0 403 523 ;
+C 119 ; WX 592 ; N w ; B 11 0 581 523 ;
+C 120 ; WX 410 ; N x ; B 9 0 402 523 ;
+C 121 ; WX 410 ; N y ; B 9 -214 401 523 ;
+C 122 ; WX 410 ; N z ; B 25 0 385 523 ;
+C 123 ; WX 274 ; N braceleft ; B 34 -196 239 722 ;
+C 124 ; WX 213 ; N bar ; B 77 -19 137 737 ;
+C 125 ; WX 274 ; N braceright ; B 34 -196 239 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 50 181 429 322 ;
+C 161 ; WX 273 ; N exclamdown ; B 97 -195 176 523 ;
+C 162 ; WX 456 ; N cent ; B 42 -115 421 623 ;
+C 163 ; WX 456 ; N sterling ; B 27 -16 442 718 ;
+C 164 ; WX 137 ; N fraction ; B -136 -19 273 703 ;
+C 165 ; WX 456 ; N yen ; B 2 0 453 688 ;
+C 166 ; WX 456 ; N florin ; B -9 -207 411 737 ;
+C 167 ; WX 456 ; N section ; B 35 -191 420 737 ;
+C 168 ; WX 456 ; N currency ; B 23 99 433 603 ;
+C 169 ; WX 157 ; N quotesingle ; B 48 463 108 718 ;
+C 170 ; WX 273 ; N quotedblleft ; B 31 469 252 725 ;
+C 171 ; WX 456 ; N guillemotleft ; B 80 108 376 446 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 72 108 201 446 ;
+C 173 ; WX 273 ; N guilsinglright ; B 72 108 201 446 ;
+C 174 ; WX 410 ; N fi ; B 11 0 356 728 ;
+C 175 ; WX 410 ; N fl ; B 11 0 354 728 ;
+C 177 ; WX 456 ; N endash ; B 0 240 456 313 ;
+C 178 ; WX 456 ; N dagger ; B 35 -159 421 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 35 -159 421 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 63 190 166 315 ;
+C 182 ; WX 440 ; N paragraph ; B 15 -173 408 718 ;
+C 183 ; WX 287 ; N bullet ; B 15 202 273 517 ;
+C 184 ; WX 182 ; N quotesinglbase ; B 43 -149 129 107 ;
+C 185 ; WX 273 ; N quotedblbase ; B 21 -149 242 107 ;
+C 186 ; WX 273 ; N quotedblright ; B 21 462 242 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 80 108 376 446 ;
+C 188 ; WX 820 ; N ellipsis ; B 94 0 726 107 ;
+C 189 ; WX 820 ; N perthousand ; B 6 -19 815 703 ;
+C 191 ; WX 501 ; N questiondown ; B 75 -201 432 525 ;
+C 193 ; WX 273 ; N grave ; B 11 593 173 734 ;
+C 194 ; WX 273 ; N acute ; B 100 593 262 734 ;
+C 195 ; WX 273 ; N circumflex ; B 17 593 256 734 ;
+C 196 ; WX 273 ; N tilde ; B -3 606 276 722 ;
+C 197 ; WX 273 ; N macron ; B 8 627 265 684 ;
+C 198 ; WX 273 ; N breve ; B 11 595 263 731 ;
+C 199 ; WX 273 ; N dotaccent ; B 99 604 174 706 ;
+C 200 ; WX 273 ; N dieresis ; B 33 604 240 706 ;
+C 202 ; WX 273 ; N ring ; B 61 572 212 756 ;
+C 203 ; WX 273 ; N cedilla ; B 37 -225 212 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 25 593 335 734 ;
+C 206 ; WX 273 ; N ogonek ; B 60 -225 235 0 ;
+C 207 ; WX 273 ; N caron ; B 17 593 256 734 ;
+C 208 ; WX 820 ; N emdash ; B 0 240 820 313 ;
+C 225 ; WX 820 ; N AE ; B 7 0 780 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 20 304 284 737 ;
+C 232 ; WX 456 ; N Lslash ; B -16 0 440 718 ;
+C 233 ; WX 638 ; N Oslash ; B 32 -19 607 737 ;
+C 234 ; WX 820 ; N OE ; B 30 -19 791 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 20 304 280 737 ;
+C 241 ; WX 729 ; N ae ; B 30 -15 695 538 ;
+C 245 ; WX 228 ; N dotlessi ; B 78 0 150 523 ;
+C 248 ; WX 182 ; N lslash ; B -16 0 198 718 ;
+C 249 ; WX 501 ; N oslash ; B 23 -22 440 545 ;
+C 250 ; WX 774 ; N oe ; B 29 -15 740 538 ;
+C 251 ; WX 501 ; N germandbls ; B 55 -15 468 728 ;
+C -1 ; WX 592 ; N Udieresis ; B 65 -19 528 901 ;
+C -1 ; WX 592 ; N Uacute ; B 65 -19 528 929 ;
+C -1 ; WX 547 ; N Scedilla ; B 35 -225 508 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 11 0 490 929 ;
+C -1 ; WX 547 ; N Scaron ; B 40 -19 508 929 ;
+C -1 ; WX 592 ; N Rcaron ; B 72 0 561 929 ;
+C -1 ; WX 592 ; N Racute ; B 72 0 561 903 ;
+C -1 ; WX 547 ; N Sacute ; B 40 -19 508 903 ;
+C -1 ; WX 638 ; N Otilde ; B 32 -19 606 917 ;
+C -1 ; WX 456 ; N ucircumflex ; B 56 -15 401 734 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 32 -19 606 929 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 65 -19 528 929 ;
+C -1 ; WX 547 ; N Yacute ; B 11 0 535 929 ;
+C -1 ; WX 592 ; N Eth ; B 0 0 553 718 ;
+C -1 ; WX 592 ; N Dcroat ; B 0 0 553 718 ;
+C -1 ; WX 501 ; N Zacute ; B 19 0 482 903 ;
+C -1 ; WX 592 ; N Uring ; B 65 -19 528 951 ;
+C -1 ; WX 456 ; N gbreve ; B 33 -220 409 731 ;
+C -1 ; WX 456 ; N eogonek ; B 33 -225 423 538 ;
+C -1 ; WX 456 ; N edotaccent ; B 33 -15 423 706 ;
+C -1 ; WX 456 ; N ecaron ; B 33 -15 423 734 ;
+C -1 ; WX 592 ; N Ugrave ; B 65 -19 528 929 ;
+C -1 ; WX 547 ; N Thorn ; B 71 0 510 718 ;
+C -1 ; WX 456 ; N eacute ; B 33 -15 423 734 ;
+C -1 ; WX 456 ; N edieresis ; B 33 -15 423 706 ;
+C -1 ; WX 496 ; N dcaron ; B 29 -15 516 718 ;
+C -1 ; WX 410 ; N ccedilla ; B 25 -225 391 538 ;
+C -1 ; WX 410 ; N ccaron ; B 25 -15 391 734 ;
+C -1 ; WX 410 ; N cacute ; B 25 -15 391 734 ;
+C -1 ; WX 456 ; N aogonek ; B 30 -225 466 538 ;
+C -1 ; WX 456 ; N aring ; B 30 -15 435 769 ;
+C -1 ; WX 456 ; N atilde ; B 30 -15 435 722 ;
+C -1 ; WX 456 ; N abreve ; B 30 -15 435 731 ;
+C -1 ; WX 456 ; N egrave ; B 33 -15 423 734 ;
+C -1 ; WX 456 ; N agrave ; B 30 -15 435 734 ;
+C -1 ; WX 456 ; N aacute ; B 30 -15 435 734 ;
+C -1 ; WX 456 ; N adieresis ; B 30 -15 435 706 ;
+C -1 ; WX 592 ; N Uogonek ; B 65 -225 528 718 ;
+C -1 ; WX 456 ; N ugrave ; B 56 -15 401 734 ;
+C -1 ; WX 456 ; N uacute ; B 56 -15 401 734 ;
+C -1 ; WX 456 ; N udieresis ; B 56 -15 401 706 ;
+C -1 ; WX 248 ; N tcaron ; B 11 -7 268 718 ;
+C -1 ; WX 410 ; N scommaaccent ; B 26 -282 380 538 ;
+C -1 ; WX 501 ; N Zcaron ; B 19 0 482 929 ;
+C -1 ; WX 456 ; N ecircumflex ; B 33 -15 423 734 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 65 -19 528 929 ;
+C -1 ; WX 456 ; N acircumflex ; B 30 -15 435 734 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 19 0 482 901 ;
+C -1 ; WX 410 ; N scaron ; B 26 -15 380 734 ;
+C -1 ; WX 547 ; N Amacron ; B 11 0 536 879 ;
+C -1 ; WX 410 ; N sacute ; B 26 -15 380 734 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 11 -282 490 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 11 0 535 901 ;
+C -1 ; WX 456 ; N thorn ; B 48 -207 424 718 ;
+C -1 ; WX 547 ; N Emacron ; B 71 0 505 879 ;
+C -1 ; WX 638 ; N Ograve ; B 32 -19 606 929 ;
+C -1 ; WX 638 ; N Oacute ; B 32 -19 606 929 ;
+C -1 ; WX 638 ; N Odieresis ; B 32 -19 606 901 ;
+C -1 ; WX 592 ; N Ntilde ; B 62 0 530 917 ;
+C -1 ; WX 592 ; N Ncaron ; B 62 0 530 929 ;
+C -1 ; WX 592 ; N Nacute ; B 62 0 530 903 ;
+C -1 ; WX 456 ; N Lcaron ; B 62 0 440 718 ;
+C -1 ; WX 456 ; N Lacute ; B 62 0 440 903 ;
+C -1 ; WX 228 ; N Idotaccent ; B 75 0 154 901 ;
+C -1 ; WX 273 ; N racute ; B 63 0 272 734 ;
+C -1 ; WX 228 ; N Icircumflex ; B -5 0 234 929 ;
+C -1 ; WX 456 ; N ohungarumlaut ; B 29 -14 427 734 ;
+C -1 ; WX 456 ; N otilde ; B 29 -14 427 722 ;
+C -1 ; WX 510 ; N Euro ; B 0 -12 495 730 ;
+C -1 ; WX 456 ; N ocircumflex ; B 29 -14 427 734 ;
+C -1 ; WX 273 ; N onesuperior ; B 35 281 182 703 ;
+C -1 ; WX 273 ; N twosuperior ; B 3 280 265 714 ;
+C -1 ; WX 273 ; N threesuperior ; B 4 270 266 714 ;
+C -1 ; WX 228 ; N Igrave ; B -11 0 154 929 ;
+C -1 ; WX 228 ; N Iacute ; B 75 0 240 903 ;
+C -1 ; WX 228 ; N Imacron ; B -15 0 242 879 ;
+C -1 ; WX 228 ; N Iogonek ; B 10 -225 185 718 ;
+C -1 ; WX 228 ; N Idieresis ; B 11 0 218 901 ;
+C -1 ; WX 638 ; N Gbreve ; B 39 -19 577 926 ;
+C -1 ; WX 592 ; N Umacron ; B 65 -19 528 879 ;
+C -1 ; WX 547 ; N Kcommaaccent ; B 62 -282 544 718 ;
+C -1 ; WX 456 ; N ograve ; B 29 -14 427 734 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 40 -282 508 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 71 -225 536 718 ;
+C -1 ; WX 456 ; N oacute ; B 29 -14 427 734 ;
+C -1 ; WX 547 ; N Edotaccent ; B 71 0 505 901 ;
+C -1 ; WX 182 ; N iogonek ; B -17 -225 158 718 ;
+C -1 ; WX 456 ; N gcommaaccent ; B 33 -220 409 813 ;
+C -1 ; WX 456 ; N odieresis ; B 29 -14 427 706 ;
+C -1 ; WX 456 ; N ntilde ; B 53 0 403 722 ;
+C -1 ; WX 456 ; N ncaron ; B 53 0 403 734 ;
+C -1 ; WX 547 ; N Ecaron ; B 71 0 505 929 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 71 0 505 929 ;
+C -1 ; WX 410 ; N scedilla ; B 26 -225 380 538 ;
+C -1 ; WX 273 ; N rcaron ; B 44 0 283 734 ;
+C -1 ; WX 547 ; N Egrave ; B 71 0 505 929 ;
+C -1 ; WX 547 ; N Eacute ; B 71 0 505 929 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 39 -282 577 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 72 -282 561 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 71 0 505 901 ;
+C -1 ; WX 456 ; N nacute ; B 53 0 403 734 ;
+C -1 ; WX 456 ; N uogonek ; B 56 -225 432 523 ;
+C -1 ; WX 456 ; N umacron ; B 56 -15 401 684 ;
+C -1 ; WX 592 ; N Dcaron ; B 66 0 553 929 ;
+C -1 ; WX 212 ; N lcaron ; B 55 0 232 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 36 -19 558 929 ;
+C -1 ; WX 592 ; N Cacute ; B 36 -19 558 903 ;
+C -1 ; WX 592 ; N Ccedilla ; B 36 -225 558 737 ;
+C -1 ; WX 328 ; N degree ; B 44 411 284 703 ;
+C -1 ; WX 547 ; N Aogonek ; B 11 -225 567 718 ;
+C -1 ; WX 479 ; N minus ; B 32 216 447 289 ;
+C -1 ; WX 479 ; N multiply ; B 32 0 447 506 ;
+C -1 ; WX 479 ; N divide ; B 32 -19 447 524 ;
+C -1 ; WX 547 ; N Aring ; B 11 0 536 944 ;
+C -1 ; WX 820 ; N trademark ; B 38 306 740 718 ;
+C -1 ; WX 273 ; N rcommaaccent ; B 57 -282 272 538 ;
+C -1 ; WX 182 ; N lacute ; B 55 0 217 903 ;
+C -1 ; WX 456 ; N omacron ; B 29 -14 427 684 ;
+C -1 ; WX 547 ; N Atilde ; B 11 0 536 917 ;
+C -1 ; WX 228 ; N icircumflex ; B -5 0 234 734 ;
+C -1 ; WX 228 ; N igrave ; B -11 0 151 734 ;
+C -1 ; WX 456 ; N ncommaaccent ; B 53 -282 403 538 ;
+C -1 ; WX 182 ; N lcommaaccent ; B 50 -282 133 718 ;
+C -1 ; WX 479 ; N plusminus ; B 32 0 447 561 ;
+C -1 ; WX 684 ; N onehalf ; B 35 -19 634 703 ;
+C -1 ; WX 684 ; N onequarter ; B 60 -19 620 703 ;
+C -1 ; WX 684 ; N threequarters ; B 37 -19 664 714 ;
+C -1 ; WX 228 ; N iacute ; B 78 0 240 734 ;
+C -1 ; WX 547 ; N Abreve ; B 11 0 536 926 ;
+C -1 ; WX 410 ; N kcommaaccent ; B 55 -282 411 718 ;
+C -1 ; WX 638 ; N Omacron ; B 32 -19 606 879 ;
+C -1 ; WX 228 ; N imacron ; B -15 0 242 684 ;
+C -1 ; WX 456 ; N emacron ; B 33 -15 423 684 ;
+C -1 ; WX 456 ; N amacron ; B 30 -15 435 684 ;
+C -1 ; WX 228 ; N tcommaaccent ; B 11 -282 211 669 ;
+C -1 ; WX 410 ; N ydieresis ; B 9 -214 401 706 ;
+C -1 ; WX 410 ; N zdotaccent ; B 25 0 385 706 ;
+C -1 ; WX 410 ; N zcaron ; B 25 0 385 734 ;
+C -1 ; WX 410 ; N zacute ; B 25 0 385 734 ;
+C -1 ; WX 410 ; N yacute ; B 9 -214 401 734 ;
+C -1 ; WX 456 ; N uhungarumlaut ; B 56 -15 427 734 ;
+C -1 ; WX 456 ; N eth ; B 29 -15 428 737 ;
+C -1 ; WX 456 ; N uring ; B 56 -15 401 756 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 32 -19 606 929 ;
+C -1 ; WX 273 ; N commaaccent ; B 95 -282 178 -60 ;
+C -1 ; WX 604 ; N copyright ; B -11 -19 617 737 ;
+C -1 ; WX 604 ; N registered ; B -11 -19 617 737 ;
+C -1 ; WX 547 ; N Acircumflex ; B 11 0 536 929 ;
+C -1 ; WX 228 ; N idieresis ; B 11 0 218 706 ;
+C -1 ; WX 405 ; N lozenge ; B 15 0 382 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 32 10 447 495 ;
+C -1 ; WX 450 ; N radical ; B -5 -74 433 927 ;
+C -1 ; WX 547 ; N Agrave ; B 11 0 536 929 ;
+C -1 ; WX 547 ; N Aacute ; B 11 0 536 929 ;
+C -1 ; WX 479 ; N lessequal ; B 39 0 439 594 ;
+C -1 ; WX 479 ; N greaterequal ; B 39 0 439 594 ;
+C -1 ; WX 479 ; N logicalnot ; B 32 108 447 390 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 21 -10 379 753 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 62 -282 530 718 ;
+C -1 ; WX 456 ; N dcroat ; B 29 -15 456 718 ;
+C -1 ; WX 213 ; N brokenbar ; B 77 -19 137 737 ;
+C -1 ; WX 456 ; N Lcommaaccent ; B 62 -282 440 718 ;
+C -1 ; WX 547 ; N Adieresis ; B 11 0 536 901 ;
+C -1 ; WX 456 ; N mu ; B 56 -207 401 523 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -28
+KPX A Ccedilla -29
+KPX A G -30
+KPX A O -27
+KPX A Odieresis -27
+KPX A Q -28
+KPX A T -74
+KPX A U -29
+KPX A Uacute -29
+KPX A Ucircumflex -29
+KPX A Udieresis -29
+KPX A Ugrave -29
+KPX A V -56
+KPX A W -39
+KPX A Y -78
+KPX A a -3
+KPX A b 0
+KPX A c -10
+KPX A ccedilla -10
+KPX A comma 5
+KPX A d -11
+KPX A e -14
+KPX A g -14
+KPX A guillemotleft -40
+KPX A guilsinglleft -36
+KPX A hyphen -2
+KPX A o -13
+KPX A period 5
+KPX A q -11
+KPX A quotedblright -37
+KPX A quoteright -48
+KPX A t -15
+KPX A u -12
+KPX A v -27
+KPX A w -21
+KPX A y -27
+KPX Aacute C -28
+KPX Aacute G -30
+KPX Aacute O -27
+KPX Aacute Q -28
+KPX Aacute T -74
+KPX Aacute U -29
+KPX Aacute V -56
+KPX Aacute W -39
+KPX Aacute Y -78
+KPX Aacute a -3
+KPX Aacute b 0
+KPX Aacute c -10
+KPX Aacute comma 5
+KPX Aacute d -11
+KPX Aacute e -14
+KPX Aacute g -14
+KPX Aacute guillemotleft -40
+KPX Aacute guilsinglleft -36
+KPX Aacute hyphen -2
+KPX Aacute o -13
+KPX Aacute period 5
+KPX Aacute q -11
+KPX Aacute quoteright -48
+KPX Aacute t -15
+KPX Aacute u -12
+KPX Aacute v -27
+KPX Aacute w -21
+KPX Aacute y -27
+KPX Acircumflex C -28
+KPX Acircumflex G -30
+KPX Acircumflex O -27
+KPX Acircumflex Q -28
+KPX Acircumflex T -74
+KPX Acircumflex U -29
+KPX Acircumflex V -56
+KPX Acircumflex W -39
+KPX Acircumflex Y -78
+KPX Acircumflex comma 5
+KPX Acircumflex period 5
+KPX Adieresis C -28
+KPX Adieresis G -30
+KPX Adieresis O -27
+KPX Adieresis Q -28
+KPX Adieresis T -74
+KPX Adieresis U -29
+KPX Adieresis V -56
+KPX Adieresis W -39
+KPX Adieresis Y -78
+KPX Adieresis a -3
+KPX Adieresis b 0
+KPX Adieresis c -10
+KPX Adieresis comma 5
+KPX Adieresis d -11
+KPX Adieresis g -14
+KPX Adieresis guillemotleft -40
+KPX Adieresis guilsinglleft -36
+KPX Adieresis hyphen -2
+KPX Adieresis o -13
+KPX Adieresis period 5
+KPX Adieresis q -11
+KPX Adieresis quotedblright -37
+KPX Adieresis quoteright -48
+KPX Adieresis t -15
+KPX Adieresis u -12
+KPX Adieresis v -27
+KPX Adieresis w -21
+KPX Adieresis y -27
+KPX Agrave C -28
+KPX Agrave G -30
+KPX Agrave O -27
+KPX Agrave Q -28
+KPX Agrave T -74
+KPX Agrave U -29
+KPX Agrave V -56
+KPX Agrave W -39
+KPX Agrave Y -78
+KPX Agrave comma 5
+KPX Agrave period 5
+KPX Aring C -28
+KPX Aring G -30
+KPX Aring O -27
+KPX Aring Q -28
+KPX Aring T -74
+KPX Aring U -29
+KPX Aring V -56
+KPX Aring W -39
+KPX Aring Y -78
+KPX Aring a -3
+KPX Aring b 0
+KPX Aring c -10
+KPX Aring comma 5
+KPX Aring d -11
+KPX Aring e -14
+KPX Aring g -14
+KPX Aring guillemotleft -40
+KPX Aring guilsinglleft -36
+KPX Aring hyphen -2
+KPX Aring o -13
+KPX Aring period 5
+KPX Aring q -11
+KPX Aring quotedblright -37
+KPX Aring quoteright -48
+KPX Aring t -15
+KPX Aring u -12
+KPX Aring v -27
+KPX Aring w -21
+KPX Aring y -27
+KPX Atilde C -28
+KPX Atilde G -30
+KPX Atilde O -27
+KPX Atilde Q -28
+KPX Atilde T -74
+KPX Atilde U -29
+KPX Atilde V -56
+KPX Atilde W -39
+KPX Atilde Y -78
+KPX Atilde comma 5
+KPX Atilde period 5
+KPX B A -15
+KPX B AE -14
+KPX B Aacute -15
+KPX B Acircumflex -15
+KPX B Adieresis -15
+KPX B Aring -15
+KPX B Atilde -15
+KPX B O -3
+KPX B OE 0
+KPX B Oacute -3
+KPX B Ocircumflex -3
+KPX B Odieresis -3
+KPX B Ograve -3
+KPX B Oslash 0
+KPX B V -25
+KPX B W -14
+KPX B Y -31
+KPX C A -25
+KPX C AE -24
+KPX C Aacute -25
+KPX C Adieresis -25
+KPX C Aring -25
+KPX C H -6
+KPX C K -5
+KPX C O -4
+KPX C Oacute -4
+KPX C Odieresis -4
+KPX Ccedilla A -28
+KPX D A -33
+KPX D Aacute -33
+KPX D Acircumflex -33
+KPX D Adieresis -33
+KPX D Agrave -33
+KPX D Aring -33
+KPX D Atilde -33
+KPX D J -1
+KPX D T -30
+KPX D V -32
+KPX D W -18
+KPX D X -38
+KPX D Y -44
+KPX F A -55
+KPX F Aacute -55
+KPX F Acircumflex -55
+KPX F Adieresis -55
+KPX F Agrave -55
+KPX F Aring -55
+KPX F Atilde -55
+KPX F J -50
+KPX F O -15
+KPX F Odieresis -15
+KPX F a -26
+KPX F aacute -26
+KPX F adieresis -26
+KPX F ae -26
+KPX F aring -26
+KPX F comma -102
+KPX F e -19
+KPX F eacute -19
+KPX F hyphen -12
+KPX F i -8
+KPX F j -8
+KPX F o -17
+KPX F oacute -17
+KPX F odieresis -17
+KPX F oe -17
+KPX F oslash -17
+KPX F period -102
+KPX F r -32
+KPX F u -28
+KPX G A -4
+KPX G AE -2
+KPX G Aacute -4
+KPX G Acircumflex -4
+KPX G Adieresis -4
+KPX G Agrave -4
+KPX G Aring -4
+KPX G Atilde -4
+KPX G T -30
+KPX G V -36
+KPX G W -20
+KPX G Y -47
+KPX J A -22
+KPX J AE -21
+KPX J Adieresis -22
+KPX J Aring -22
+KPX K C -37
+KPX K G -40
+KPX K O -37
+KPX K OE -33
+KPX K Oacute -37
+KPX K Odieresis -37
+KPX K S -27
+KPX K T 22
+KPX K a -6
+KPX K adieresis -6
+KPX K ae -7
+KPX K aring -6
+KPX K e -26
+KPX K hyphen -38
+KPX K o -26
+KPX K oacute -26
+KPX K odieresis -26
+KPX K u -21
+KPX K udieresis -21
+KPX K y -52
+KPX L A 18
+KPX L AE 20
+KPX L Aacute 18
+KPX L Adieresis 18
+KPX L Aring 18
+KPX L C -28
+KPX L Ccedilla -32
+KPX L G -31
+KPX L O -29
+KPX L Oacute -29
+KPX L Ocircumflex -29
+KPX L Odieresis -29
+KPX L Ograve -29
+KPX L Otilde -29
+KPX L S -11
+KPX L T -81
+KPX L U -25
+KPX L Udieresis -25
+KPX L V -78
+KPX L W -50
+KPX L Y -92
+KPX L hyphen -110
+KPX L quotedblright -105
+KPX L quoteright -116
+KPX L u -9
+KPX L udieresis -9
+KPX L y -47
+KPX N A -4
+KPX N AE -2
+KPX N Aacute -4
+KPX N Adieresis -4
+KPX N Aring -4
+KPX N C 0
+KPX N Ccedilla 0
+KPX N G -1
+KPX N O 1
+KPX N Oacute 1
+KPX N Odieresis 1
+KPX N a -1
+KPX N aacute -1
+KPX N adieresis -1
+KPX N ae -1
+KPX N aring -1
+KPX N comma -4
+KPX N e 1
+KPX N eacute 1
+KPX N o 1
+KPX N oacute 1
+KPX N odieresis 1
+KPX N oslash 4
+KPX N period -4
+KPX N u 0
+KPX N udieresis 0
+KPX O A -29
+KPX O AE -29
+KPX O Aacute -29
+KPX O Adieresis -29
+KPX O Aring -29
+KPX O T -27
+KPX O V -30
+KPX O W -14
+KPX O X -35
+KPX O Y -42
+KPX Oacute A -29
+KPX Oacute T -27
+KPX Oacute V -30
+KPX Oacute W -14
+KPX Oacute Y -42
+KPX Ocircumflex T -27
+KPX Ocircumflex V -30
+KPX Ocircumflex Y -42
+KPX Odieresis A -29
+KPX Odieresis T -27
+KPX Odieresis V -30
+KPX Odieresis W -14
+KPX Odieresis X -35
+KPX Odieresis Y -42
+KPX Ograve T -27
+KPX Ograve V -30
+KPX Ograve Y -42
+KPX Oslash A -27
+KPX Otilde T -27
+KPX Otilde V -30
+KPX Otilde Y -42
+KPX P A -62
+KPX P AE -64
+KPX P Aacute -62
+KPX P Adieresis -62
+KPX P Aring -62
+KPX P J -70
+KPX P a -21
+KPX P aacute -21
+KPX P adieresis -21
+KPX P ae -21
+KPX P aring -21
+KPX P comma -123
+KPX P e -24
+KPX P eacute -24
+KPX P hyphen -28
+KPX P o -24
+KPX P oacute -24
+KPX P odieresis -24
+KPX P oe -22
+KPX P oslash -22
+KPX P period -123
+KPX R C -7
+KPX R Ccedilla -7
+KPX R G -9
+KPX R O -6
+KPX R OE -3
+KPX R Oacute -6
+KPX R Odieresis -6
+KPX R T -12
+KPX R U -8
+KPX R Udieresis -8
+KPX R V -22
+KPX R W -15
+KPX R Y -29
+KPX R a -6
+KPX R aacute -6
+KPX R adieresis -6
+KPX R ae -6
+KPX R aring -6
+KPX R e -5
+KPX R eacute -5
+KPX R hyphen 4
+KPX R o -5
+KPX R oacute -5
+KPX R odieresis -5
+KPX R oe -5
+KPX R u -4
+KPX R uacute -5
+KPX R udieresis -5
+KPX R y -1
+KPX S A -15
+KPX S AE -14
+KPX S Aacute -15
+KPX S Adieresis -15
+KPX S Aring -15
+KPX S T -14
+KPX S V -25
+KPX S W -17
+KPX S Y -31
+KPX S t -2
+KPX T A -78
+KPX T AE -76
+KPX T Aacute -78
+KPX T Acircumflex -78
+KPX T Adieresis -78
+KPX T Agrave -78
+KPX T Aring -78
+KPX T Atilde -78
+KPX T C -27
+KPX T G -31
+KPX T J -80
+KPX T O -26
+KPX T OE -22
+KPX T Oacute -26
+KPX T Ocircumflex -26
+KPX T Odieresis -26
+KPX T Ograve -26
+KPX T Oslash -27
+KPX T Otilde -26
+KPX T S -15
+KPX T V 17
+KPX T W 19
+KPX T Y 19
+KPX T a -79
+KPX T ae -79
+KPX T c -73
+KPX T colon -95
+KPX T comma -80
+KPX T e -77
+KPX T g -76
+KPX T guillemotleft -100
+KPX T guilsinglleft -96
+KPX T hyphen -60
+KPX T i -2
+KPX T j -2
+KPX T o -76
+KPX T oslash -72
+KPX T period -80
+KPX T r -77
+KPX T s -74
+KPX T semicolon -93
+KPX T u -75
+KPX T v -79
+KPX T w -80
+KPX T y -79
+KPX U A -32
+KPX U AE -32
+KPX U Aacute -32
+KPX U Acircumflex -32
+KPX U Adieresis -32
+KPX U Aring -32
+KPX U Atilde -32
+KPX U comma -24
+KPX U m -1
+KPX U n -1
+KPX U p 0
+KPX U period -22
+KPX U r -6
+KPX Uacute A -32
+KPX Uacute comma -24
+KPX Uacute m -1
+KPX Uacute n -1
+KPX Uacute p 0
+KPX Uacute period -22
+KPX Uacute r -6
+KPX Ucircumflex A -32
+KPX Udieresis A -32
+KPX Udieresis b 0
+KPX Udieresis comma -24
+KPX Udieresis m -1
+KPX Udieresis n -1
+KPX Udieresis p 0
+KPX Udieresis period -22
+KPX Udieresis r -6
+KPX Ugrave A -32
+KPX V A -58
+KPX V AE -60
+KPX V Aacute -58
+KPX V Acircumflex -58
+KPX V Adieresis -58
+KPX V Agrave -58
+KPX V Aring -58
+KPX V Atilde -58
+KPX V C -31
+KPX V G -34
+KPX V O -30
+KPX V Oacute -30
+KPX V Ocircumflex -30
+KPX V Odieresis -30
+KPX V Ograve -30
+KPX V Oslash -27
+KPX V Otilde -30
+KPX V S -26
+KPX V T 18
+KPX V a -47
+KPX V ae -47
+KPX V colon -41
+KPX V comma -73
+KPX V e -46
+KPX V g -44
+KPX V guillemotleft -68
+KPX V guilsinglleft -64
+KPX V hyphen -29
+KPX V i -5
+KPX V o -46
+KPX V oslash -41
+KPX V period -73
+KPX V r -37
+KPX V semicolon -41
+KPX V u -35
+KPX V y -12
+KPX W A -42
+KPX W AE -43
+KPX W Aacute -42
+KPX W Acircumflex -42
+KPX W Adieresis -42
+KPX W Agrave -42
+KPX W Aring -42
+KPX W Atilde -42
+KPX W C -15
+KPX W G -18
+KPX W O -14
+KPX W Oacute -14
+KPX W Ocircumflex -14
+KPX W Odieresis -14
+KPX W Ograve -14
+KPX W Oslash -12
+KPX W Otilde -14
+KPX W S -19
+KPX W T 20
+KPX W a -29
+KPX W ae -29
+KPX W colon -31
+KPX W comma -46
+KPX W e -26
+KPX W g -24
+KPX W guillemotleft -48
+KPX W guilsinglleft -44
+KPX W hyphen -9
+KPX W i -3
+KPX W o -26
+KPX W oslash -21
+KPX W period -46
+KPX W r -26
+KPX W semicolon -31
+KPX W u -24
+KPX W y -2
+KPX X C -33
+KPX X O -33
+KPX X Odieresis -33
+KPX X Q -33
+KPX X a -12
+KPX X e -31
+KPX X hyphen -40
+KPX X o -31
+KPX X u -27
+KPX X y -42
+KPX Y A -80
+KPX Y AE -82
+KPX Y Aacute -80
+KPX Y Acircumflex -80
+KPX Y Adieresis -80
+KPX Y Agrave -80
+KPX Y Aring -80
+KPX Y Atilde -80
+KPX Y C -43
+KPX Y G -47
+KPX Y O -43
+KPX Y Oacute -43
+KPX Y Ocircumflex -43
+KPX Y Odieresis -43
+KPX Y Ograve -43
+KPX Y Oslash -44
+KPX Y Otilde -43
+KPX Y S -33
+KPX Y T 20
+KPX Y a -73
+KPX Y ae -73
+KPX Y colon -60
+KPX Y comma -92
+KPX Y e -74
+KPX Y g -73
+KPX Y guillemotleft -103
+KPX Y guilsinglleft -99
+KPX Y hyphen -68
+KPX Y i -3
+KPX Y o -74
+KPX Y oslash -69
+KPX Y p -48
+KPX Y period -92
+KPX Y semicolon -60
+KPX Y u -54
+KPX Y v -31
+KPX Z v -24
+KPX Z y -25
+KPX a j -5
+KPX a quoteright -10
+KPX a v -19
+KPX a w -14
+KPX a y -20
+KPX aacute v -19
+KPX aacute w -14
+KPX aacute y -20
+KPX adieresis v -19
+KPX adieresis w -14
+KPX adieresis y -20
+KPX ae v -17
+KPX ae w -11
+KPX ae y -19
+KPX agrave v -19
+KPX agrave w -14
+KPX agrave y -20
+KPX aring v -19
+KPX aring w -14
+KPX aring y -20
+KPX b v -13
+KPX b w -8
+KPX b y -15
+KPX c h 2
+KPX c k 1
+KPX comma one -83
+KPX comma quotedblright -22
+KPX comma quoteright -33
+KPX e quoteright -5
+KPX e t -8
+KPX e v -16
+KPX e w -11
+KPX e x -19
+KPX e y -18
+KPX eacute v -16
+KPX eacute w -11
+KPX eacute y -18
+KPX ecircumflex v -16
+KPX ecircumflex w -11
+KPX ecircumflex y -18
+KPX eight four 6
+KPX eight one -36
+KPX eight seven -16
+KPX f a -9
+KPX f aacute -9
+KPX f adieresis -9
+KPX f ae -9
+KPX f aring -9
+KPX f e -12
+KPX f eacute -12
+KPX f f 17
+KPX f i -5
+KPX f j -5
+KPX f l -5
+KPX f o -12
+KPX f oacute -12
+KPX f odieresis -12
+KPX f oe -12
+KPX f oslash -8
+KPX f quoteright 12
+KPX f s -4
+KPX f t 17
+KPX five four 4
+KPX five one -56
+KPX five seven -16
+KPX four four 8
+KPX four one -65
+KPX four seven -39
+KPX g a 1
+KPX g adieresis 1
+KPX g ae 1
+KPX g aring 1
+KPX g e 4
+KPX g eacute 4
+KPX g l 4
+KPX g oacute 4
+KPX g odieresis 4
+KPX g r 0
+KPX guillemotright A -42
+KPX guillemotright AE -43
+KPX guillemotright Aacute -42
+KPX guillemotright Adieresis -42
+KPX guillemotright Aring -42
+KPX guillemotright T -101
+KPX guillemotright V -68
+KPX guillemotright W -48
+KPX guillemotright Y -102
+KPX guilsinglright A -38
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -38
+KPX guilsinglright Adieresis -38
+KPX guilsinglright Aring -38
+KPX guilsinglright T -96
+KPX guilsinglright V -64
+KPX guilsinglright W -43
+KPX guilsinglright Y -98
+KPX h quoteright -3
+KPX h y -14
+KPX hyphen A -3
+KPX hyphen AE -4
+KPX hyphen Aacute -3
+KPX hyphen Adieresis -3
+KPX hyphen Aring -3
+KPX hyphen T -61
+KPX hyphen V -29
+KPX hyphen W -9
+KPX hyphen Y -67
+KPX i T -2
+KPX i j 0
+KPX k a -5
+KPX k aacute -5
+KPX k adieresis -5
+KPX k ae -5
+KPX k aring -5
+KPX k comma 1
+KPX k e -19
+KPX k eacute -19
+KPX k g -18
+KPX k hyphen -31
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period 1
+KPX k s -9
+KPX k u -3
+KPX k udieresis -3
+KPX l v -3
+KPX l y -3
+KPX m p 4
+KPX m v -13
+KPX m w -7
+KPX m y -13
+KPX n T -75
+KPX n p 4
+KPX n quoteright -3
+KPX n v -14
+KPX n w -8
+KPX n y -14
+KPX nine four 1
+KPX nine one -31
+KPX nine seven -19
+KPX o T -77
+KPX o quoteright -8
+KPX o t -7
+KPX o v -15
+KPX o w -9
+KPX o x -18
+KPX o y -17
+KPX oacute v -15
+KPX oacute w -9
+KPX oacute y -17
+KPX ocircumflex t -7
+KPX odieresis t -7
+KPX odieresis v -15
+KPX odieresis w -9
+KPX odieresis x -18
+KPX odieresis y -17
+KPX ograve v -15
+KPX ograve w -9
+KPX ograve y -17
+KPX one comma -54
+KPX one eight -46
+KPX one five -49
+KPX one four -59
+KPX one nine -47
+KPX one one -90
+KPX one period -54
+KPX one seven -64
+KPX one six -44
+KPX one three -51
+KPX one two -50
+KPX one zero -43
+KPX p t -6
+KPX p y -15
+KPX period one -83
+KPX period quotedblright -22
+KPX period quoteright -33
+KPX q c 6
+KPX q u 1
+KPX quotedblbase A 24
+KPX quotedblbase AE 25
+KPX quotedblbase T -60
+KPX quotedblbase V -53
+KPX quotedblbase W -25
+KPX quotedblbase Y -71
+KPX quotedblleft A -41
+KPX quotedblleft AE -44
+KPX quotedblleft Aacute -41
+KPX quotedblleft Adieresis -41
+KPX quotedblleft Aring -41
+KPX quotedblleft T 16
+KPX quotedblleft V 24
+KPX quotedblleft W 31
+KPX quotedblleft Y 14
+KPX quotedblright A -49
+KPX quotedblright AE -52
+KPX quotedblright Aacute -49
+KPX quotedblright Adieresis -49
+KPX quotedblright Aring -49
+KPX quotedblright T 11
+KPX quotedblright V 16
+KPX quotedblright W 23
+KPX quotedblright Y 9
+KPX quoteleft A -52
+KPX quoteleft AE -55
+KPX quoteleft Aacute -52
+KPX quoteleft Adieresis -52
+KPX quoteleft Aring -52
+KPX quoteleft T 5
+KPX quoteleft V 13
+KPX quoteleft W 20
+KPX quoteleft Y 3
+KPX quoteright A -60
+KPX quoteright AE -63
+KPX quoteright Aacute -60
+KPX quoteright Adieresis -60
+KPX quoteright Aring -60
+KPX quoteright comma -48
+KPX quoteright d -16
+KPX quoteright o -24
+KPX quoteright period -48
+KPX quoteright r -15
+KPX quoteright s -13
+KPX quoteright t -3
+KPX quoteright v 0
+KPX quoteright w 1
+KPX quoteright y 0
+KPX r a -3
+KPX r aacute -3
+KPX r acircumflex -3
+KPX r adieresis -3
+KPX r ae -3
+KPX r agrave -3
+KPX r aring -3
+KPX r c -6
+KPX r ccedilla -3
+KPX r colon -5
+KPX r comma -48
+KPX r d -4
+KPX r e -10
+KPX r eacute -10
+KPX r ecircumflex -10
+KPX r egrave -10
+KPX r f 23
+KPX r g -4
+KPX r h 2
+KPX r hyphen -30
+KPX r i 1
+KPX r j 0
+KPX r k 1
+KPX r l 1
+KPX r m 2
+KPX r n 2
+KPX r o -11
+KPX r oacute -11
+KPX r ocircumflex -11
+KPX r odieresis -11
+KPX r oe -7
+KPX r ograve -11
+KPX r oslash -7
+KPX r p 4
+KPX r period -48
+KPX r q -4
+KPX r quoteright 14
+KPX r r -3
+KPX r s 2
+KPX r semicolon -5
+KPX r t 23
+KPX r u 0
+KPX r v 24
+KPX r w 22
+KPX r x 19
+KPX r y 23
+KPX r z 6
+KPX s quoteright -5
+KPX s t -5
+KPX seven colon -47
+KPX seven comma -95
+KPX seven eight -15
+KPX seven five -22
+KPX seven four -72
+KPX seven one -34
+KPX seven period -95
+KPX seven seven 3
+KPX seven six -24
+KPX seven three -14
+KPX seven two -14
+KPX six four 6
+KPX six one -31
+KPX six seven -13
+KPX t S -8
+KPX t a 1
+KPX t aacute 1
+KPX t adieresis 1
+KPX t ae 1
+KPX t aring 1
+KPX t colon -13
+KPX t e -10
+KPX t eacute -10
+KPX t h 1
+KPX t o -10
+KPX t oacute -10
+KPX t odieresis -10
+KPX t quoteright 10
+KPX t semicolon -13
+KPX three four 8
+KPX three one -34
+KPX three seven -15
+KPX two four -38
+KPX two one -29
+KPX two seven -14
+KPX u quoteright 5
+KPX v a -16
+KPX v aacute -16
+KPX v acircumflex -16
+KPX v adieresis -16
+KPX v ae -16
+KPX v agrave -16
+KPX v aring -16
+KPX v atilde -16
+KPX v c -12
+KPX v colon -8
+KPX v comma -50
+KPX v e -16
+KPX v eacute -16
+KPX v ecircumflex -16
+KPX v egrave -16
+KPX v g -15
+KPX v hyphen -3
+KPX v l -2
+KPX v o -16
+KPX v oacute -16
+KPX v odieresis -16
+KPX v ograve -16
+KPX v oslash -12
+KPX v period -50
+KPX v s -10
+KPX v semicolon -8
+KPX w a -13
+KPX w aacute -13
+KPX w acircumflex -13
+KPX w adieresis -13
+KPX w ae -13
+KPX w agrave -13
+KPX w aring -13
+KPX w atilde -13
+KPX w c -5
+KPX w colon -10
+KPX w comma -37
+KPX w e -9
+KPX w eacute -9
+KPX w ecircumflex -9
+KPX w egrave -9
+KPX w g -8
+KPX w hyphen 3
+KPX w l -4
+KPX w o -9
+KPX w oacute -9
+KPX w odieresis -9
+KPX w ograve -9
+KPX w oslash -5
+KPX w period -37
+KPX w s -7
+KPX w semicolon -10
+KPX x a -10
+KPX x c -13
+KPX x e -17
+KPX x eacute -17
+KPX x o -17
+KPX x q -14
+KPX y a -16
+KPX y aacute -16
+KPX y acircumflex -16
+KPX y adieresis -16
+KPX y ae -16
+KPX y agrave -16
+KPX y aring -16
+KPX y atilde -16
+KPX y c -13
+KPX y colon -9
+KPX y comma -49
+KPX y e -17
+KPX y eacute -17
+KPX y ecircumflex -17
+KPX y egrave -17
+KPX y g -15
+KPX y hyphen -2
+KPX y l -3
+KPX y o -16
+KPX y oacute -16
+KPX y odieresis -16
+KPX y ograve -16
+KPX y oslash -12
+KPX y period -49
+KPX y s -11
+KPX y semicolon -9
+KPX zero four 5
+KPX zero one -31
+KPX zero seven -21
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvr8ac.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvr8ac.pfb
new file mode 100644
index 00000000000..f2387225df2
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvr8ac.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvro8a-105.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvro8a-105.pfb
new file mode 100644
index 00000000000..876cda876de
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvro8a-105.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvro8a.afm b/Master/tlpkg/tlgs/lib/fonts/uhvro8a.afm
new file mode 100644
index 00000000000..0172d808283
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvro8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-ReguItal
+FullName Nimbus Sans L Regular Italic
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle -12.0
+IsFixedPitch false
+UnderlinePosition -151
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -178 -284 1108 953
+CapHeight 729
+XHeight 524
+Descender -213
+Ascender 729
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 213 0 213 0 ;
+C 33 ; WX 278 ; N exclam ; B 124 0 363 729 ;
+C 34 ; WX 355 ; N quotedbl ; B 177 464 455 709 ;
+C 35 ; WX 556 ; N numbersign ; B 54 -20 649 697 ;
+C 36 ; WX 556 ; N dollar ; B 69 -126 613 770 ;
+C 37 ; WX 889 ; N percent ; B 134 -20 895 709 ;
+C 38 ; WX 667 ; N ampersand ; B 83 -23 644 709 ;
+C 39 ; WX 222 ; N quoteright ; B 166 477 309 708 ;
+C 40 ; WX 333 ; N parenleft ; B 113 -213 446 729 ;
+C 41 ; WX 333 ; N parenright ; B -7 -213 325 729 ;
+C 42 ; WX 389 ; N asterisk ; B 169 438 471 729 ;
+C 43 ; WX 584 ; N plus ; B 92 -11 591 473 ;
+C 44 ; WX 278 ; N comma ; B 55 -150 214 103 ;
+C 45 ; WX 333 ; N hyphen ; B 97 240 351 312 ;
+C 46 ; WX 278 ; N period ; B 87 0 213 103 ;
+C 47 ; WX 278 ; N slash ; B -12 -20 434 729 ;
+C 48 ; WX 556 ; N zero ; B 98 -23 598 709 ;
+C 49 ; WX 556 ; N one ; B 208 0 498 709 ;
+C 50 ; WX 556 ; N two ; B 34 0 620 709 ;
+C 51 ; WX 556 ; N three ; B 71 -23 599 709 ;
+C 52 ; WX 556 ; N four ; B 63 0 573 709 ;
+C 53 ; WX 556 ; N five ; B 70 -23 629 709 ;
+C 54 ; WX 556 ; N six ; B 93 -23 611 709 ;
+C 55 ; WX 556 ; N seven ; B 137 0 671 709 ;
+C 56 ; WX 556 ; N eight ; B 74 -23 604 709 ;
+C 57 ; WX 556 ; N nine ; B 83 -23 599 709 ;
+C 58 ; WX 278 ; N colon ; B 110 0 326 524 ;
+C 59 ; WX 278 ; N semicolon ; B 78 -150 325 524 ;
+C 60 ; WX 584 ; N less ; B 87 -9 635 474 ;
+C 61 ; WX 584 ; N equal ; B 74 111 609 355 ;
+C 62 ; WX 584 ; N greater ; B 48 -9 596 474 ;
+C 63 ; WX 556 ; N question ; B 184 0 630 741 ;
+C 64 ; WX 1015 ; N at ; B 80 -142 1036 741 ;
+C 65 ; WX 667 ; N A ; B 17 0 653 729 ;
+C 66 ; WX 667 ; N B ; B 79 0 711 729 ;
+C 67 ; WX 722 ; N C ; B 112 -23 770 741 ;
+C 68 ; WX 722 ; N D ; B 89 0 759 729 ;
+C 69 ; WX 667 ; N E ; B 90 0 751 729 ;
+C 70 ; WX 611 ; N F ; B 90 0 734 729 ;
+C 71 ; WX 778 ; N G ; B 109 -23 809 741 ;
+C 72 ; WX 722 ; N H ; B 83 0 799 729 ;
+C 73 ; WX 278 ; N I ; B 100 0 349 729 ;
+C 74 ; WX 500 ; N J ; B 47 -23 581 729 ;
+C 75 ; WX 667 ; N K ; B 79 0 813 729 ;
+C 76 ; WX 556 ; N L ; B 80 0 551 729 ;
+C 77 ; WX 833 ; N M ; B 75 0 916 729 ;
+C 78 ; WX 722 ; N N ; B 76 0 801 729 ;
+C 79 ; WX 778 ; N O ; B 104 -23 828 741 ;
+C 80 ; WX 667 ; N P ; B 91 0 733 729 ;
+C 81 ; WX 778 ; N Q ; B 104 -59 828 741 ;
+C 82 ; WX 722 ; N R ; B 93 0 770 729 ;
+C 83 ; WX 667 ; N S ; B 89 -23 714 741 ;
+C 84 ; WX 611 ; N T ; B 158 0 748 729 ;
+C 85 ; WX 722 ; N U ; B 124 -23 800 729 ;
+C 86 ; WX 667 ; N V ; B 185 0 800 729 ;
+C 87 ; WX 944 ; N W ; B 177 0 1084 729 ;
+C 88 ; WX 667 ; N X ; B 22 0 794 729 ;
+C 89 ; WX 667 ; N Y ; B 168 0 816 729 ;
+C 90 ; WX 611 ; N Z ; B 28 0 737 729 ;
+C 91 ; WX 278 ; N bracketleft ; B 19 -213 405 729 ;
+C 92 ; WX 278 ; N backslash ; B 147 -20 280 729 ;
+C 93 ; WX 278 ; N bracketright ; B -23 -213 364 729 ;
+C 94 ; WX 469 ; N asciicircum ; B 115 329 496 709 ;
+C 95 ; WX 556 ; N underscore ; B -59 -176 551 -126 ;
+C 96 ; WX 222 ; N quoteleft ; B 163 477 308 709 ;
+C 97 ; WX 556 ; N a ; B 65 -23 568 539 ;
+C 98 ; WX 556 ; N b ; B 54 -23 588 729 ;
+C 99 ; WX 500 ; N c ; B 76 -23 554 539 ;
+C 100 ; WX 556 ; N d ; B 73 -23 650 729 ;
+C 101 ; WX 556 ; N e ; B 84 -23 580 539 ;
+C 102 ; WX 278 ; N f ; B 89 0 413 732 ;
+C 103 ; WX 556 ; N g ; B 32 -218 601 539 ;
+C 104 ; WX 556 ; N h ; B 70 0 574 729 ;
+C 105 ; WX 222 ; N i ; B 66 0 305 729 ;
+C 106 ; WX 222 ; N j ; B -65 -218 308 729 ;
+C 107 ; WX 500 ; N k ; B 58 0 584 729 ;
+C 108 ; WX 222 ; N l ; B 68 0 307 729 ;
+C 109 ; WX 833 ; N m ; B 71 0 852 539 ;
+C 110 ; WX 556 ; N n ; B 70 0 574 539 ;
+C 111 ; WX 556 ; N o ; B 80 -23 576 539 ;
+C 112 ; WX 556 ; N p ; B 7 -213 586 539 ;
+C 113 ; WX 556 ; N q ; B 71 -213 607 539 ;
+C 114 ; WX 333 ; N r ; B 69 0 436 539 ;
+C 115 ; WX 500 ; N s ; B 61 -23 520 539 ;
+C 116 ; WX 278 ; N t ; B 97 -23 366 668 ;
+C 117 ; WX 556 ; N u ; B 88 -23 594 524 ;
+C 118 ; WX 500 ; N v ; B 122 0 598 524 ;
+C 119 ; WX 722 ; N w ; B 118 0 820 524 ;
+C 120 ; WX 500 ; N x ; B 17 0 583 524 ;
+C 121 ; WX 500 ; N y ; B 8 -218 590 524 ;
+C 122 ; WX 500 ; N z ; B 31 0 557 524 ;
+C 123 ; WX 334 ; N braceleft ; B 91 -213 431 729 ;
+C 124 ; WX 260 ; N bar ; B 54 -212 315 729 ;
+C 125 ; WX 334 ; N braceright ; B -16 -213 324 729 ;
+C 126 ; WX 584 ; N asciitilde ; B 137 268 594 438 ;
+C 161 ; WX 333 ; N exclamdown ; B 76 -205 317 524 ;
+C 162 ; WX 556 ; N cent ; B 96 -120 585 628 ;
+C 163 ; WX 556 ; N sterling ; B 44 -23 628 729 ;
+C 164 ; WX 167 ; N fraction ; B -178 -20 486 709 ;
+C 165 ; WX 556 ; N yen ; B 100 0 696 709 ;
+C 166 ; WX 556 ; N florin ; B -32 -212 696 738 ;
+C 167 ; WX 556 ; N section ; B 63 -213 589 729 ;
+C 168 ; WX 556 ; N currency ; B 110 133 593 556 ;
+C 169 ; WX 191 ; N quotesingle ; B 173 464 292 709 ;
+C 170 ; WX 333 ; N quotedblleft ; B 146 477 449 709 ;
+C 171 ; WX 556 ; N guillemotleft ; B 147 106 548 438 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 140 106 336 438 ;
+C 173 ; WX 333 ; N guilsinglright ; B 109 106 307 438 ;
+C 174 ; WX 500 ; N fi ; B 83 0 591 732 ;
+C 175 ; WX 500 ; N fl ; B 88 0 585 732 ;
+C 177 ; WX 556 ; N endash ; B 46 240 628 312 ;
+C 178 ; WX 556 ; N dagger ; B 127 -177 620 709 ;
+C 179 ; WX 556 ; N daggerdbl ; B 51 -177 620 709 ;
+C 180 ; WX 278 ; N periodcentered ; B 166 192 293 295 ;
+C 182 ; WX 537 ; N paragraph ; B 145 -178 677 729 ;
+C 183 ; WX 350 ; N bullet ; B 120 220 376 470 ;
+C 184 ; WX 222 ; N quotesinglbase ; B 37 -128 180 103 ;
+C 185 ; WX 333 ; N quotedblbase ; B 20 -128 322 103 ;
+C 186 ; WX 333 ; N quotedblright ; B 150 477 452 708 ;
+C 187 ; WX 556 ; N guillemotright ; B 121 106 518 438 ;
+C 188 ; WX 1000 ; N ellipsis ; B 115 0 907 103 ;
+C 189 ; WX 1000 ; N perthousand ; B 93 -20 1024 738 ;
+C 191 ; WX 611 ; N questiondown ; B 86 -217 531 524 ;
+C 193 ; WX 333 ; N grave ; B 179 592 357 740 ;
+C 194 ; WX 333 ; N acute ; B 218 592 458 740 ;
+C 195 ; WX 333 ; N circumflex ; B 146 591 433 741 ;
+C 196 ; WX 333 ; N tilde ; B 130 611 471 719 ;
+C 197 ; WX 333 ; N macron ; B 160 627 450 696 ;
+C 198 ; WX 333 ; N breve ; B 165 594 471 729 ;
+C 199 ; WX 333 ; N dotaccent ; B 244 612 370 715 ;
+C 200 ; WX 333 ; N dieresis ; B 159 612 446 715 ;
+C 202 ; WX 333 ; N ring ; B 216 579 396 754 ;
+C 203 ; WX 333 ; N cedilla ; B 1 -214 264 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 91 590 505 740 ;
+C 206 ; WX 333 ; N ogonek ; B 35 -205 246 0 ;
+C 207 ; WX 333 ; N caron ; B 176 592 463 740 ;
+C 208 ; WX 1000 ; N emdash ; B 42 240 1068 312 ;
+C 225 ; WX 1000 ; N AE ; B 11 0 1087 729 ;
+C 227 ; WX 370 ; N ordfeminine ; B 107 303 441 742 ;
+C 232 ; WX 556 ; N Lslash ; B 75 0 570 729 ;
+C 233 ; WX 778 ; N Oslash ; B 32 -24 867 741 ;
+C 234 ; WX 1000 ; N OE ; B 101 -23 1108 741 ;
+C 235 ; WX 365 ; N ordmasculine ; B 114 303 452 742 ;
+C 241 ; WX 889 ; N ae ; B 59 -23 915 539 ;
+C 245 ; WX 278 ; N dotlessi ; B 94 0 290 527 ;
+C 248 ; WX 222 ; N lslash ; B 62 0 312 729 ;
+C 249 ; WX 611 ; N oslash ; B 19 -30 639 541 ;
+C 250 ; WX 944 ; N oe ; B 85 -23 966 539 ;
+C 251 ; WX 611 ; N germandbls ; B 126 -23 655 729 ;
+C -1 ; WX 722 ; N Udieresis ; B 124 -23 800 914 ;
+C -1 ; WX 722 ; N Uacute ; B 124 -23 800 939 ;
+C -1 ; WX 667 ; N Scedilla ; B 89 -214 714 741 ;
+C -1 ; WX 611 ; N Tcaron ; B 158 0 748 939 ;
+C -1 ; WX 667 ; N Scaron ; B 89 -23 714 939 ;
+C -1 ; WX 722 ; N Rcaron ; B 93 0 770 939 ;
+C -1 ; WX 722 ; N Racute ; B 93 0 770 939 ;
+C -1 ; WX 667 ; N Sacute ; B 89 -23 714 939 ;
+C -1 ; WX 778 ; N Otilde ; B 104 -23 828 918 ;
+C -1 ; WX 556 ; N ucircumflex ; B 88 -23 594 741 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 104 -23 841 939 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 124 -23 806 939 ;
+C -1 ; WX 667 ; N Yacute ; B 168 0 816 939 ;
+C -1 ; WX 722 ; N Eth ; B 89 0 759 729 ;
+C -1 ; WX 722 ; N Dcroat ; B 89 0 759 729 ;
+C -1 ; WX 611 ; N Zacute ; B 28 0 737 939 ;
+C -1 ; WX 722 ; N Uring ; B 124 -23 800 953 ;
+C -1 ; WX 556 ; N gbreve ; B 32 -218 601 729 ;
+C -1 ; WX 556 ; N eogonek ; B 84 -205 580 539 ;
+C -1 ; WX 556 ; N edotaccent ; B 84 -23 580 715 ;
+C -1 ; WX 556 ; N ecaron ; B 84 -23 580 740 ;
+C -1 ; WX 722 ; N Ugrave ; B 124 -23 800 939 ;
+C -1 ; WX 667 ; N Thorn ; B 91 0 708 729 ;
+C -1 ; WX 556 ; N eacute ; B 84 -23 580 740 ;
+C -1 ; WX 556 ; N edieresis ; B 84 -23 580 715 ;
+C -1 ; WX 650 ; N dcaron ; B 73 -23 810 729 ;
+C -1 ; WX 500 ; N ccedilla ; B 76 -214 554 539 ;
+C -1 ; WX 500 ; N ccaron ; B 76 -23 563 740 ;
+C -1 ; WX 500 ; N cacute ; B 76 -23 575 740 ;
+C -1 ; WX 556 ; N aogonek ; B 65 -205 571 539 ;
+C -1 ; WX 556 ; N aring ; B 65 -23 568 754 ;
+C -1 ; WX 556 ; N atilde ; B 65 -23 583 719 ;
+C -1 ; WX 556 ; N abreve ; B 65 -23 582 729 ;
+C -1 ; WX 556 ; N egrave ; B 84 -23 580 740 ;
+C -1 ; WX 556 ; N agrave ; B 65 -23 568 740 ;
+C -1 ; WX 556 ; N aacute ; B 65 -23 570 740 ;
+C -1 ; WX 556 ; N adieresis ; B 65 -23 568 715 ;
+C -1 ; WX 722 ; N Uogonek ; B 124 -205 800 729 ;
+C -1 ; WX 556 ; N ugrave ; B 88 -23 594 740 ;
+C -1 ; WX 556 ; N uacute ; B 88 -23 594 740 ;
+C -1 ; WX 556 ; N udieresis ; B 88 -23 594 715 ;
+C -1 ; WX 319 ; N tcaron ; B 97 -23 492 801 ;
+C -1 ; WX 500 ; N scommaaccent ; B 61 -284 520 539 ;
+C -1 ; WX 611 ; N Zcaron ; B 28 0 737 939 ;
+C -1 ; WX 556 ; N ecircumflex ; B 84 -23 580 741 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 124 -23 800 940 ;
+C -1 ; WX 556 ; N acircumflex ; B 65 -23 568 741 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 28 0 737 914 ;
+C -1 ; WX 500 ; N scaron ; B 61 -23 547 740 ;
+C -1 ; WX 667 ; N Amacron ; B 17 0 663 895 ;
+C -1 ; WX 500 ; N sacute ; B 61 -23 545 740 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 158 -284 748 729 ;
+C -1 ; WX 667 ; N Ydieresis ; B 168 0 816 914 ;
+C -1 ; WX 556 ; N thorn ; B 7 -213 586 729 ;
+C -1 ; WX 667 ; N Emacron ; B 90 0 751 895 ;
+C -1 ; WX 778 ; N Ograve ; B 104 -23 828 939 ;
+C -1 ; WX 778 ; N Oacute ; B 104 -23 828 939 ;
+C -1 ; WX 778 ; N Odieresis ; B 104 -23 828 914 ;
+C -1 ; WX 722 ; N Ntilde ; B 76 0 801 918 ;
+C -1 ; WX 722 ; N Ncaron ; B 76 0 801 939 ;
+C -1 ; WX 722 ; N Nacute ; B 76 0 801 939 ;
+C -1 ; WX 556 ; N Lcaron ; B 80 0 551 729 ;
+C -1 ; WX 556 ; N Lacute ; B 80 0 551 939 ;
+C -1 ; WX 278 ; N Idotaccent ; B 100 0 389 914 ;
+C -1 ; WX 333 ; N racute ; B 69 0 498 740 ;
+C -1 ; WX 278 ; N Icircumflex ; B 100 0 454 940 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 80 -23 683 740 ;
+C -1 ; WX 556 ; N otilde ; B 80 -23 583 719 ;
+C -1 ; WX 556 ; N Euro ; B 12 -22 636 709 ;
+C -1 ; WX 556 ; N ocircumflex ; B 80 -23 576 741 ;
+C -1 ; WX 390 ; N onesuperior ; B 205 284 393 709 ;
+C -1 ; WX 390 ; N twosuperior ; B 100 284 468 709 ;
+C -1 ; WX 390 ; N threesuperior ; B 123 270 455 709 ;
+C -1 ; WX 278 ; N Igrave ; B 100 0 378 939 ;
+C -1 ; WX 278 ; N Iacute ; B 100 0 479 939 ;
+C -1 ; WX 278 ; N Imacron ; B 100 0 458 895 ;
+C -1 ; WX 278 ; N Iogonek ; B 28 -205 349 729 ;
+C -1 ; WX 278 ; N Idieresis ; B 100 0 467 907 ;
+C -1 ; WX 778 ; N Gbreve ; B 109 -23 809 928 ;
+C -1 ; WX 722 ; N Umacron ; B 124 -23 800 895 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 79 -284 813 729 ;
+C -1 ; WX 556 ; N ograve ; B 80 -23 576 740 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 89 -284 714 741 ;
+C -1 ; WX 667 ; N Eogonek ; B 90 -205 751 729 ;
+C -1 ; WX 556 ; N oacute ; B 80 -23 576 740 ;
+C -1 ; WX 667 ; N Edotaccent ; B 90 0 751 914 ;
+C -1 ; WX 222 ; N iogonek ; B 0 -205 305 729 ;
+C -1 ; WX 527 ; N gcommaaccent ; B 3 -218 572 813 ;
+C -1 ; WX 556 ; N odieresis ; B 80 -23 576 715 ;
+C -1 ; WX 556 ; N ntilde ; B 70 0 589 719 ;
+C -1 ; WX 556 ; N ncaron ; B 70 0 578 740 ;
+C -1 ; WX 667 ; N Ecaron ; B 90 0 751 939 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 90 0 751 940 ;
+C -1 ; WX 500 ; N scedilla ; B 61 -214 521 539 ;
+C -1 ; WX 333 ; N rcaron ; B 69 0 486 740 ;
+C -1 ; WX 667 ; N Egrave ; B 90 0 751 939 ;
+C -1 ; WX 667 ; N Eacute ; B 90 0 751 939 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 109 -284 809 741 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 93 -284 770 729 ;
+C -1 ; WX 667 ; N Edieresis ; B 90 0 751 914 ;
+C -1 ; WX 556 ; N nacute ; B 70 0 580 740 ;
+C -1 ; WX 556 ; N uogonek ; B 88 -205 594 524 ;
+C -1 ; WX 556 ; N umacron ; B 88 -23 594 696 ;
+C -1 ; WX 722 ; N Dcaron ; B 89 0 759 939 ;
+C -1 ; WX 307 ; N lcaron ; B 68 0 467 729 ;
+C -1 ; WX 722 ; N Ccaron ; B 112 -23 770 939 ;
+C -1 ; WX 722 ; N Cacute ; B 112 -23 770 939 ;
+C -1 ; WX 722 ; N Ccedilla ; B 112 -214 770 741 ;
+C -1 ; WX 606 ; N degree ; B 291 383 594 686 ;
+C -1 ; WX 667 ; N Aogonek ; B 17 -205 663 729 ;
+C -1 ; WX 584 ; N minus ; B 81 197 601 269 ;
+C -1 ; WX 584 ; N multiply ; B 113 34 568 427 ;
+C -1 ; WX 584 ; N divide ; B 92 0 591 462 ;
+C -1 ; WX 667 ; N Aring ; B 17 0 653 953 ;
+C -1 ; WX 1000 ; N trademark ; B 208 292 1096 729 ;
+C -1 ; WX 333 ; N rcommaaccent ; B 5 -284 436 539 ;
+C -1 ; WX 222 ; N lacute ; B 68 0 463 939 ;
+C -1 ; WX 556 ; N omacron ; B 80 -23 576 696 ;
+C -1 ; WX 667 ; N Atilde ; B 17 0 680 918 ;
+C -1 ; WX 278 ; N icircumflex ; B 94 0 406 741 ;
+C -1 ; WX 278 ; N igrave ; B 94 0 330 740 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 70 -284 574 539 ;
+C -1 ; WX 222 ; N lcommaaccent ; B -1 -284 307 729 ;
+C -1 ; WX 584 ; N plusminus ; B 50 0 625 633 ;
+C -1 ; WX 947 ; N onehalf ; B 202 -20 965 709 ;
+C -1 ; WX 947 ; N onequarter ; B 205 -20 938 709 ;
+C -1 ; WX 947 ; N threequarters ; B 123 -20 938 709 ;
+C -1 ; WX 278 ; N iacute ; B 94 0 431 740 ;
+C -1 ; WX 667 ; N Abreve ; B 17 0 683 928 ;
+C -1 ; WX 500 ; N kcommaaccent ; B 58 -284 584 729 ;
+C -1 ; WX 778 ; N Omacron ; B 104 -23 828 895 ;
+C -1 ; WX 222 ; N imacron ; B 66 0 373 696 ;
+C -1 ; WX 556 ; N emacron ; B 84 -23 580 696 ;
+C -1 ; WX 556 ; N amacron ; B 65 -23 568 696 ;
+C -1 ; WX 278 ; N tcommaaccent ; B 55 -284 366 668 ;
+C -1 ; WX 500 ; N ydieresis ; B 8 -218 590 715 ;
+C -1 ; WX 500 ; N zdotaccent ; B 31 0 557 715 ;
+C -1 ; WX 500 ; N zcaron ; B 31 0 557 740 ;
+C -1 ; WX 500 ; N zacute ; B 31 0 557 740 ;
+C -1 ; WX 500 ; N yacute ; B 8 -218 590 740 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 88 -23 683 740 ;
+C -1 ; WX 556 ; N eth ; B 80 -23 576 743 ;
+C -1 ; WX 556 ; N uring ; B 88 -23 594 754 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 104 -23 828 940 ;
+C -1 ; WX 333 ; N commaaccent ; B 57 -284 205 -60 ;
+C -1 ; WX 737 ; N copyright ; B 55 -22 836 742 ;
+C -1 ; WX 737 ; N registered ; B 55 -22 836 742 ;
+C -1 ; WX 667 ; N Acircumflex ; B 17 0 653 940 ;
+C -1 ; WX 278 ; N idieresis ; B 94 0 419 708 ;
+C -1 ; WX 489 ; N lozenge ; B 16 0 462 744 ;
+C -1 ; WX 712 ; N Delta ; B 10 0 701 729 ;
+C -1 ; WX 584 ; N notequal ; B 74 2 609 480 ;
+C -1 ; WX 542 ; N radical ; B 102 -36 705 913 ;
+C -1 ; WX 667 ; N Agrave ; B 17 0 653 939 ;
+C -1 ; WX 667 ; N Aacute ; B 17 0 667 939 ;
+C -1 ; WX 584 ; N lessequal ; B 45 0 659 584 ;
+C -1 ; WX 584 ; N greaterequal ; B 56 0 626 584 ;
+C -1 ; WX 584 ; N logicalnot ; B 99 86 619 377 ;
+C -1 ; WX 711 ; N summation ; B -18 -97 760 762 ;
+C -1 ; WX 490 ; N partialdiff ; B 22 -15 458 750 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 76 -284 801 729 ;
+C -1 ; WX 556 ; N dcroat ; B 73 -23 695 729 ;
+C -1 ; WX 260 ; N brokenbar ; B 54 -212 315 729 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B 80 -284 551 729 ;
+C -1 ; WX 667 ; N Adieresis ; B 17 0 662 914 ;
+C -1 ; WX 556 ; N mu ; B 18 -220 593 524 ;
+C -1 ; WX 278 ; N .notdef ; B 213 0 213 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -41
+KPX A Ccedilla -41
+KPX A G -41
+KPX A O -37
+KPX A Odieresis -37
+KPX A Q -38
+KPX A T -103
+KPX A U -42
+KPX A Uacute -42
+KPX A Ucircumflex -42
+KPX A Udieresis -42
+KPX A Ugrave -42
+KPX A V -81
+KPX A W -57
+KPX A Y -104
+KPX A a -16
+KPX A b -5
+KPX A c -16
+KPX A ccedilla -16
+KPX A comma -4
+KPX A d -14
+KPX A e -22
+KPX A g -17
+KPX A guillemotleft -51
+KPX A guilsinglleft -47
+KPX A hyphen -8
+KPX A o -19
+KPX A period -2
+KPX A q -15
+KPX A quotedblright -60
+KPX A quoteright -68
+KPX A t -22
+KPX A u -18
+KPX A v -40
+KPX A w -29
+KPX A y -44
+KPX Aacute C -42
+KPX Aacute G -42
+KPX Aacute O -38
+KPX Aacute Q -39
+KPX Aacute T -103
+KPX Aacute U -43
+KPX Aacute V -81
+KPX Aacute W -57
+KPX Aacute Y -104
+KPX Aacute a -16
+KPX Aacute b -6
+KPX Aacute c -17
+KPX Aacute comma -4
+KPX Aacute d -15
+KPX Aacute e -23
+KPX Aacute g -17
+KPX Aacute guillemotleft -51
+KPX Aacute guilsinglleft -48
+KPX Aacute hyphen -9
+KPX Aacute o -20
+KPX Aacute period -3
+KPX Aacute q -16
+KPX Aacute quoteright -68
+KPX Aacute t -23
+KPX Aacute u -20
+KPX Aacute v -40
+KPX Aacute w -29
+KPX Aacute y -44
+KPX Acircumflex C -41
+KPX Acircumflex G -41
+KPX Acircumflex O -37
+KPX Acircumflex Q -38
+KPX Acircumflex T -103
+KPX Acircumflex U -42
+KPX Acircumflex V -81
+KPX Acircumflex W -57
+KPX Acircumflex Y -104
+KPX Acircumflex comma -4
+KPX Acircumflex period -2
+KPX Adieresis C -42
+KPX Adieresis G -41
+KPX Adieresis O -38
+KPX Adieresis Q -39
+KPX Adieresis T -103
+KPX Adieresis U -43
+KPX Adieresis V -81
+KPX Adieresis W -57
+KPX Adieresis Y -104
+KPX Adieresis a -16
+KPX Adieresis b -5
+KPX Adieresis c -17
+KPX Adieresis comma -4
+KPX Adieresis d -14
+KPX Adieresis g -17
+KPX Adieresis guillemotleft -51
+KPX Adieresis guilsinglleft -48
+KPX Adieresis hyphen -8
+KPX Adieresis o -19
+KPX Adieresis period -3
+KPX Adieresis q -15
+KPX Adieresis quotedblright -60
+KPX Adieresis quoteright -68
+KPX Adieresis t -22
+KPX Adieresis u -19
+KPX Adieresis v -40
+KPX Adieresis w -29
+KPX Adieresis y -44
+KPX Agrave C -41
+KPX Agrave G -41
+KPX Agrave O -37
+KPX Agrave Q -38
+KPX Agrave T -103
+KPX Agrave U -42
+KPX Agrave V -81
+KPX Agrave W -57
+KPX Agrave Y -104
+KPX Agrave comma -4
+KPX Agrave period -2
+KPX Aring C -41
+KPX Aring G -41
+KPX Aring O -37
+KPX Aring Q -38
+KPX Aring T -103
+KPX Aring U -42
+KPX Aring V -81
+KPX Aring W -57
+KPX Aring Y -104
+KPX Aring a -16
+KPX Aring b -5
+KPX Aring c -16
+KPX Aring comma -4
+KPX Aring d -14
+KPX Aring e -22
+KPX Aring g -17
+KPX Aring guillemotleft -51
+KPX Aring guilsinglleft -47
+KPX Aring hyphen -8
+KPX Aring o -19
+KPX Aring period -2
+KPX Aring q -15
+KPX Aring quotedblright -60
+KPX Aring quoteright -68
+KPX Aring t -22
+KPX Aring u -18
+KPX Aring v -40
+KPX Aring w -29
+KPX Aring y -44
+KPX Atilde C -43
+KPX Atilde G -42
+KPX Atilde O -39
+KPX Atilde Q -40
+KPX Atilde T -103
+KPX Atilde U -44
+KPX Atilde V -81
+KPX Atilde W -57
+KPX Atilde Y -104
+KPX Atilde comma -4
+KPX Atilde period -4
+KPX B A -28
+KPX B AE -29
+KPX B Aacute -28
+KPX B Acircumflex -28
+KPX B Adieresis -28
+KPX B Aring -28
+KPX B Atilde -28
+KPX B O -14
+KPX B OE -11
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -2
+KPX B V -49
+KPX B W -27
+KPX B Y -56
+KPX C A -43
+KPX C AE -44
+KPX C Aacute -43
+KPX C Adieresis -43
+KPX C Aring -43
+KPX C H -22
+KPX C K -20
+KPX C O -18
+KPX C Oacute -18
+KPX C Odieresis -18
+KPX Ccedilla A -44
+KPX D A -50
+KPX D Aacute -50
+KPX D Acircumflex -50
+KPX D Adieresis -50
+KPX D Agrave -50
+KPX D Aring -50
+KPX D Atilde -50
+KPX D J -13
+KPX D T -56
+KPX D V -54
+KPX D W -31
+KPX D X -58
+KPX D Y -74
+KPX F A -78
+KPX F Aacute -78
+KPX F Acircumflex -78
+KPX F Adieresis -78
+KPX F Agrave -78
+KPX F Aring -78
+KPX F Atilde -78
+KPX F J -59
+KPX F O -30
+KPX F Odieresis -30
+KPX F a -45
+KPX F aacute -45
+KPX F adieresis -45
+KPX F ae -41
+KPX F aring -45
+KPX F comma -113
+KPX F e -33
+KPX F eacute -33
+KPX F hyphen -20
+KPX F i -19
+KPX F j -19
+KPX F o -30
+KPX F oacute -30
+KPX F odieresis -30
+KPX F oe -33
+KPX F oslash -30
+KPX F period -113
+KPX F r -44
+KPX F u -42
+KPX G A -14
+KPX G AE -11
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -53
+KPX G V -53
+KPX G W -31
+KPX G Y -72
+KPX J A -39
+KPX J AE -39
+KPX J Adieresis -39
+KPX J Aring -39
+KPX K C -56
+KPX K G -57
+KPX K O -53
+KPX K OE -49
+KPX K Oacute -53
+KPX K Odieresis -53
+KPX K S -48
+KPX K T 14
+KPX K a -23
+KPX K adieresis -23
+KPX K ae -20
+KPX K aring -23
+KPX K e -46
+KPX K hyphen -53
+KPX K o -42
+KPX K oacute -42
+KPX K odieresis -42
+KPX K u -32
+KPX K udieresis -32
+KPX K y -76
+KPX L A 8
+KPX L AE 11
+KPX L Aacute 8
+KPX L Adieresis 8
+KPX L Aring 8
+KPX L C -52
+KPX L Ccedilla -51
+KPX L G -53
+KPX L O -51
+KPX L Oacute -51
+KPX L Ocircumflex -51
+KPX L Odieresis -51
+KPX L Ograve -51
+KPX L Otilde -51
+KPX L S -28
+KPX L T -112
+KPX L U -46
+KPX L Udieresis -46
+KPX L V -115
+KPX L W -77
+KPX L Y -128
+KPX L hyphen -140
+KPX L quotedblright -145
+KPX L quoteright -153
+KPX L u -17
+KPX L udieresis -17
+KPX L y -68
+KPX N A -19
+KPX N AE -16
+KPX N Aacute -19
+KPX N Adieresis -19
+KPX N Aring -19
+KPX N C -15
+KPX N Ccedilla -14
+KPX N G -14
+KPX N O -11
+KPX N Oacute -11
+KPX N Odieresis -11
+KPX N a -17
+KPX N aacute -17
+KPX N adieresis -17
+KPX N ae -13
+KPX N aring -17
+KPX N comma -15
+KPX N e -11
+KPX N eacute -11
+KPX N o -8
+KPX N oacute -8
+KPX N odieresis -8
+KPX N oslash -4
+KPX N period -15
+KPX N u -8
+KPX N udieresis -9
+KPX O A -43
+KPX O AE -47
+KPX O Aacute -43
+KPX O Adieresis -43
+KPX O Aring -43
+KPX O T -54
+KPX O V -48
+KPX O W -25
+KPX O X -52
+KPX O Y -71
+KPX Oacute A -43
+KPX Oacute T -54
+KPX Oacute V -48
+KPX Oacute W -25
+KPX Oacute Y -71
+KPX Ocircumflex T -54
+KPX Ocircumflex V -48
+KPX Ocircumflex Y -71
+KPX Odieresis A -43
+KPX Odieresis T -54
+KPX Odieresis V -48
+KPX Odieresis W -25
+KPX Odieresis X -52
+KPX Odieresis Y -71
+KPX Ograve T -54
+KPX Ograve V -48
+KPX Ograve Y -71
+KPX Oslash A -47
+KPX Otilde T -54
+KPX Otilde V -48
+KPX Otilde Y -71
+KPX P A -86
+KPX P AE -93
+KPX P Aacute -86
+KPX P Adieresis -86
+KPX P Aring -86
+KPX P J -85
+KPX P a -39
+KPX P aacute -39
+KPX P adieresis -39
+KPX P ae -35
+KPX P aring -39
+KPX P comma -138
+KPX P e -38
+KPX P eacute -38
+KPX P hyphen -45
+KPX P o -34
+KPX P oacute -34
+KPX P odieresis -34
+KPX P oe -38
+KPX P oslash -35
+KPX P period -138
+KPX R C -21
+KPX R Ccedilla -21
+KPX R G -21
+KPX R O -17
+KPX R OE -14
+KPX R Oacute -17
+KPX R Odieresis -17
+KPX R T -33
+KPX R U -21
+KPX R Udieresis -21
+KPX R V -49
+KPX R W -27
+KPX R Y -54
+KPX R a -21
+KPX R aacute -21
+KPX R adieresis -21
+KPX R ae -17
+KPX R aring -21
+KPX R e -16
+KPX R eacute -16
+KPX R hyphen -4
+KPX R o -13
+KPX R oacute -13
+KPX R odieresis -13
+KPX R oe -16
+KPX R u -13
+KPX R uacute -14
+KPX R udieresis -14
+KPX R y -16
+KPX S A -31
+KPX S AE -31
+KPX S Aacute -31
+KPX S Adieresis -31
+KPX S Aring -31
+KPX S T -38
+KPX S V -52
+KPX S W -31
+KPX S Y -58
+KPX S t -11
+KPX T A -104
+KPX T AE -106
+KPX T Aacute -104
+KPX T Acircumflex -104
+KPX T Adieresis -104
+KPX T Agrave -104
+KPX T Aring -104
+KPX T Atilde -104
+KPX T C -53
+KPX T G -55
+KPX T J -108
+KPX T O -50
+KPX T OE -44
+KPX T Oacute -50
+KPX T Ocircumflex -50
+KPX T Odieresis -50
+KPX T Ograve -50
+KPX T Oslash -42
+KPX T Otilde -50
+KPX T S -32
+KPX T V 2
+KPX T W 7
+KPX T Y 10
+KPX T a -107
+KPX T ae -104
+KPX T c -96
+KPX T colon -152
+KPX T comma -105
+KPX T e -102
+KPX T g -94
+KPX T guillemotleft -126
+KPX T guilsinglleft -123
+KPX T hyphen -82
+KPX T i -12
+KPX T j -12
+KPX T o -99
+KPX T oslash -94
+KPX T period -105
+KPX T r -98
+KPX T s -98
+KPX T semicolon -140
+KPX T u -98
+KPX T v -106
+KPX T w -103
+KPX T y -110
+KPX U A -45
+KPX U AE -48
+KPX U Aacute -45
+KPX U Acircumflex -45
+KPX U Adieresis -45
+KPX U Aring -45
+KPX U Atilde -45
+KPX U comma -35
+KPX U m -17
+KPX U n -16
+KPX U p -8
+KPX U period -32
+KPX U r -16
+KPX Uacute A -45
+KPX Uacute comma -35
+KPX Uacute m -17
+KPX Uacute n -16
+KPX Uacute p -8
+KPX Uacute period -32
+KPX Uacute r -16
+KPX Ucircumflex A -45
+KPX Udieresis A -44
+KPX Udieresis b -8
+KPX Udieresis comma -35
+KPX Udieresis m -17
+KPX Udieresis n -16
+KPX Udieresis p -8
+KPX Udieresis period -32
+KPX Udieresis r -16
+KPX Ugrave A -45
+KPX V A -77
+KPX V AE -84
+KPX V Aacute -77
+KPX V Acircumflex -77
+KPX V Adieresis -77
+KPX V Agrave -77
+KPX V Aring -77
+KPX V Atilde -77
+KPX V C -50
+KPX V G -50
+KPX V O -46
+KPX V Oacute -46
+KPX V Ocircumflex -46
+KPX V Odieresis -46
+KPX V Ograve -46
+KPX V Oslash -34
+KPX V Otilde -46
+KPX V S -44
+KPX V T 7
+KPX V a -71
+KPX V ae -66
+KPX V colon -76
+KPX V comma -94
+KPX V e -64
+KPX V g -57
+KPX V guillemotleft -88
+KPX V guilsinglleft -84
+KPX V hyphen -44
+KPX V i -14
+KPX V o -61
+KPX V oslash -57
+KPX V period -94
+KPX V r -51
+KPX V semicolon -75
+KPX V u -52
+KPX V y -28
+KPX W A -56
+KPX W AE -62
+KPX W Aacute -56
+KPX W Acircumflex -56
+KPX W Adieresis -56
+KPX W Agrave -56
+KPX W Aring -56
+KPX W Atilde -56
+KPX W C -30
+KPX W G -30
+KPX W O -26
+KPX W Oacute -26
+KPX W Ocircumflex -26
+KPX W Odieresis -26
+KPX W Ograve -26
+KPX W Oslash -14
+KPX W Otilde -26
+KPX W S -31
+KPX W T 11
+KPX W a -46
+KPX W ae -42
+KPX W colon -62
+KPX W comma -62
+KPX W e -39
+KPX W g -32
+KPX W guillemotleft -63
+KPX W guilsinglleft -60
+KPX W hyphen -19
+KPX W i -10
+KPX W o -36
+KPX W oslash -32
+KPX W period -62
+KPX W r -36
+KPX W semicolon -62
+KPX W u -36
+KPX W y -15
+KPX X C -53
+KPX X O -50
+KPX X Odieresis -50
+KPX X Q -51
+KPX X a -27
+KPX X e -51
+KPX X hyphen -57
+KPX X o -46
+KPX X u -36
+KPX X y -67
+KPX Y A -102
+KPX Y AE -108
+KPX Y Aacute -102
+KPX Y Acircumflex -102
+KPX Y Adieresis -102
+KPX Y Agrave -102
+KPX Y Aring -102
+KPX Y Atilde -102
+KPX Y C -68
+KPX Y G -69
+KPX Y O -64
+KPX Y Oacute -64
+KPX Y Ocircumflex -64
+KPX Y Odieresis -64
+KPX Y Ograve -64
+KPX Y Oslash -55
+KPX Y Otilde -64
+KPX Y S -49
+KPX Y T 15
+KPX Y a -100
+KPX Y ae -95
+KPX Y colon -97
+KPX Y comma -117
+KPX Y e -97
+KPX Y g -89
+KPX Y guillemotleft -128
+KPX Y guilsinglleft -124
+KPX Y hyphen -89
+KPX Y i -6
+KPX Y o -93
+KPX Y oslash -89
+KPX Y p -63
+KPX Y period -117
+KPX Y semicolon -97
+KPX Y u -73
+KPX Y v -48
+KPX Z v -44
+KPX Z y -44
+KPX a j -10
+KPX a quoteright -23
+KPX a v -26
+KPX a w -16
+KPX a y -33
+KPX aacute v -26
+KPX aacute w -16
+KPX aacute y -33
+KPX adieresis v -26
+KPX adieresis w -16
+KPX adieresis y -33
+KPX ae v -26
+KPX ae w -15
+KPX ae y -32
+KPX agrave v -26
+KPX agrave w -16
+KPX agrave y -33
+KPX aring v -26
+KPX aring w -16
+KPX aring y -33
+KPX b v -21
+KPX b w -10
+KPX b y -28
+KPX c h -7
+KPX c k -1
+KPX comma one -105
+KPX comma quotedblright -47
+KPX comma quoteright -55
+KPX e quoteright -20
+KPX e t -16
+KPX e v -26
+KPX e w -16
+KPX e x -35
+KPX e y -33
+KPX eacute v -26
+KPX eacute w -16
+KPX eacute y -33
+KPX ecircumflex v -26
+KPX ecircumflex w -16
+KPX ecircumflex y -33
+KPX eight four -6
+KPX eight one -55
+KPX eight seven -43
+KPX f a -20
+KPX f aacute -20
+KPX f adieresis -20
+KPX f ae -15
+KPX f aring -20
+KPX f e -21
+KPX f eacute -21
+KPX f f 12
+KPX f i -10
+KPX f j -11
+KPX f l -12
+KPX f o -18
+KPX f oacute -18
+KPX f odieresis -18
+KPX f oe -20
+KPX f oslash -16
+KPX f quoteright -8
+KPX f s -8
+KPX f t 16
+KPX five four -7
+KPX five one -83
+KPX five seven -32
+KPX four four -3
+KPX four one -88
+KPX four seven -65
+KPX g a -17
+KPX g adieresis -17
+KPX g ae -13
+KPX g aring -17
+KPX g e -11
+KPX g eacute -11
+KPX g l -8
+KPX g oacute -8
+KPX g odieresis -8
+KPX g r -9
+KPX guillemotright A -58
+KPX guillemotright AE -62
+KPX guillemotright Aacute -58
+KPX guillemotright Adieresis -58
+KPX guillemotright Aring -58
+KPX guillemotright T -132
+KPX guillemotright V -96
+KPX guillemotright W -68
+KPX guillemotright Y -137
+KPX guilsinglright A -52
+KPX guilsinglright AE -56
+KPX guilsinglright Aacute -52
+KPX guilsinglright Adieresis -52
+KPX guilsinglright Aring -52
+KPX guilsinglright T -126
+KPX guilsinglright V -90
+KPX guilsinglright W -62
+KPX guilsinglright Y -131
+KPX h quoteright -19
+KPX h y -31
+KPX hyphen A -12
+KPX hyphen AE -17
+KPX hyphen Aacute -12
+KPX hyphen Adieresis -12
+KPX hyphen Aring -12
+KPX hyphen T -86
+KPX hyphen V -51
+KPX hyphen W -24
+KPX hyphen Y -97
+KPX i T -16
+KPX i j -10
+KPX k a -14
+KPX k aacute -14
+KPX k adieresis -14
+KPX k ae -12
+KPX k aring -14
+KPX k comma -13
+KPX k e -33
+KPX k eacute -33
+KPX k g -26
+KPX k hyphen -49
+KPX k o -30
+KPX k oacute -30
+KPX k odieresis -30
+KPX k period -13
+KPX k s -14
+KPX k u -22
+KPX k udieresis -16
+KPX l v -11
+KPX l y -15
+KPX m p -3
+KPX m v -24
+KPX m w -14
+KPX m y -30
+KPX n T -103
+KPX n p -3
+KPX n quoteright -19
+KPX n v -24
+KPX n w -14
+KPX n y -31
+KPX nine four -12
+KPX nine one -55
+KPX nine seven -50
+KPX o T -106
+KPX o quoteright -23
+KPX o t -17
+KPX o v -27
+KPX o w -16
+KPX o x -35
+KPX o y -34
+KPX oacute v -27
+KPX oacute w -16
+KPX oacute y -34
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -27
+KPX odieresis w -16
+KPX odieresis x -35
+KPX odieresis y -34
+KPX ograve v -27
+KPX ograve w -16
+KPX ograve y -34
+KPX one comma -82
+KPX one eight -73
+KPX one five -72
+KPX one four -88
+KPX one nine -71
+KPX one one -125
+KPX one period -82
+KPX one seven -98
+KPX one six -71
+KPX one three -75
+KPX one two -78
+KPX one zero -71
+KPX p t -10
+KPX p y -28
+KPX period one -106
+KPX period quotedblright -48
+KPX period quoteright -56
+KPX q c -2
+KPX q u -5
+KPX quotedblbase A 21
+KPX quotedblbase AE 21
+KPX quotedblbase T -80
+KPX quotedblbase V -74
+KPX quotedblbase W -39
+KPX quotedblbase Y -96
+KPX quotedblleft A -58
+KPX quotedblleft AE -70
+KPX quotedblleft Aacute -58
+KPX quotedblleft Adieresis -58
+KPX quotedblleft Aring -58
+KPX quotedblleft T 1
+KPX quotedblleft V 10
+KPX quotedblleft W 22
+KPX quotedblleft Y -1
+KPX quotedblright A -60
+KPX quotedblright AE -72
+KPX quotedblright Aacute -60
+KPX quotedblright Adieresis -60
+KPX quotedblright Aring -60
+KPX quotedblright T 2
+KPX quotedblright V 9
+KPX quotedblright W 21
+KPX quotedblright Y -2
+KPX quoteleft A -74
+KPX quoteleft AE -86
+KPX quoteleft Aacute -74
+KPX quoteleft Adieresis -74
+KPX quoteleft Aring -74
+KPX quoteleft T -14
+KPX quoteleft V -5
+KPX quoteleft W 6
+KPX quoteleft Y -17
+KPX quoteright A -76
+KPX quoteright AE -88
+KPX quoteright Aacute -76
+KPX quoteright Adieresis -76
+KPX quoteright Aring -76
+KPX quoteright comma -68
+KPX quoteright d -25
+KPX quoteright o -31
+KPX quoteright period -68
+KPX quoteright r -24
+KPX quoteright s -23
+KPX quoteright t -14
+KPX quoteright v -10
+KPX quoteright w -5
+KPX quoteright y -14
+KPX r a -16
+KPX r aacute -16
+KPX r acircumflex -16
+KPX r adieresis -16
+KPX r ae -11
+KPX r agrave -16
+KPX r aring -16
+KPX r c -11
+KPX r ccedilla -11
+KPX r colon -31
+KPX r comma -77
+KPX r d -8
+KPX r e -17
+KPX r eacute -17
+KPX r ecircumflex -17
+KPX r egrave -17
+KPX r f 17
+KPX r g -8
+KPX r h -8
+KPX r hyphen -54
+KPX r i -6
+KPX r j -6
+KPX r k -2
+KPX r l -7
+KPX r m -9
+KPX r n -8
+KPX r o -14
+KPX r oacute -14
+KPX r ocircumflex -14
+KPX r odieresis -14
+KPX r oe -16
+KPX r ograve -14
+KPX r oslash -14
+KPX r p 0
+KPX r period -77
+KPX r q -10
+KPX r quoteright -6
+KPX r r -8
+KPX r s -4
+KPX r semicolon -30
+KPX r t 21
+KPX r u -7
+KPX r v 18
+KPX r w 21
+KPX r x 9
+KPX r y 15
+KPX r z 0
+KPX s quoteright -24
+KPX s t -15
+KPX seven colon -84
+KPX seven comma -123
+KPX seven eight -34
+KPX seven five -37
+KPX seven four -95
+KPX seven one -58
+KPX seven period -123
+KPX seven seven -11
+KPX seven six -44
+KPX seven three -29
+KPX seven two -31
+KPX six four -7
+KPX six one -52
+KPX six seven -40
+KPX t S -17
+KPX t a -10
+KPX t aacute -10
+KPX t adieresis -10
+KPX t ae -7
+KPX t aring -10
+KPX t colon -37
+KPX t e -22
+KPX t eacute -22
+KPX t h -14
+KPX t o -19
+KPX t oacute -19
+KPX t odieresis -19
+KPX t quoteright -7
+KPX t semicolon -36
+KPX three four -9
+KPX three one -57
+KPX three seven -45
+KPX two four -43
+KPX two one -45
+KPX two seven -38
+KPX u quoteright -14
+KPX v a -30
+KPX v aacute -30
+KPX v acircumflex -30
+KPX v adieresis -30
+KPX v ae -25
+KPX v agrave -30
+KPX v aring -30
+KPX v atilde -30
+KPX v c -22
+KPX v colon -32
+KPX v comma -76
+KPX v e -29
+KPX v eacute -29
+KPX v ecircumflex -29
+KPX v egrave -29
+KPX v g -20
+KPX v hyphen -19
+KPX v l -8
+KPX v o -25
+KPX v oacute -25
+KPX v odieresis -25
+KPX v ograve -25
+KPX v oslash -25
+KPX v period -76
+KPX v s -17
+KPX v semicolon -31
+KPX w a -26
+KPX w aacute -26
+KPX w acircumflex -26
+KPX w adieresis -26
+KPX w ae -22
+KPX w agrave -26
+KPX w aring -26
+KPX w atilde -26
+KPX w c -14
+KPX w colon -32
+KPX w comma -57
+KPX w e -20
+KPX w eacute -20
+KPX w ecircumflex -20
+KPX w egrave -20
+KPX w g -13
+KPX w hyphen -8
+KPX w l -8
+KPX w o -17
+KPX w oacute -17
+KPX w odieresis -17
+KPX w ograve -17
+KPX w oslash -14
+KPX w period -57
+KPX w s -14
+KPX w semicolon -31
+KPX x a -30
+KPX x c -30
+KPX x e -36
+KPX x eacute -36
+KPX x o -33
+KPX x q -28
+KPX y a -36
+KPX y aacute -36
+KPX y acircumflex -36
+KPX y adieresis -36
+KPX y ae -31
+KPX y agrave -36
+KPX y aring -36
+KPX y atilde -36
+KPX y c -28
+KPX y colon -40
+KPX y comma -80
+KPX y e -35
+KPX y eacute -35
+KPX y ecircumflex -35
+KPX y egrave -35
+KPX y g -26
+KPX y hyphen -24
+KPX y l -14
+KPX y o -31
+KPX y oacute -31
+KPX y odieresis -31
+KPX y ograve -31
+KPX y oslash -30
+KPX y period -80
+KPX y s -23
+KPX y semicolon -40
+KPX zero four -11
+KPX zero one -56
+KPX zero seven -50
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvro8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvro8a.pfb
new file mode 100644
index 00000000000..d978164f2db
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvro8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvro8ac.afm b/Master/tlpkg/tlgs/lib/fonts/uhvro8ac.afm
new file mode 100644
index 00000000000..3948cea9777
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvro8ac.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusSanL-ReguCondItal
+FullName Nimbus Sans L Regular Condensed Italic
+FamilyName Nimbus Sans L
+Weight Regular
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -139 -286 915 951
+CapHeight 718
+XHeight 523
+Descender -207
+Ascender 718
+StartCharMetrics 316
+C 32 ; WX 228 ; N space ; B 21 0 21 0 ;
+C 33 ; WX 228 ; N exclam ; B 74 0 278 718 ;
+C 34 ; WX 291 ; N quotedbl ; B 138 463 359 718 ;
+C 35 ; WX 456 ; N numbersign ; B 60 0 517 688 ;
+C 36 ; WX 456 ; N dollar ; B 57 -115 506 775 ;
+C 37 ; WX 729 ; N percent ; B 120 -19 729 703 ;
+C 38 ; WX 547 ; N ampersand ; B 63 -15 530 718 ;
+C 39 ; WX 182 ; N quoteright ; B 124 463 254 718 ;
+C 40 ; WX 273 ; N parenleft ; B 89 -207 372 733 ;
+C 41 ; WX 273 ; N parenright ; B -7 -207 276 733 ;
+C 42 ; WX 319 ; N asterisk ; B 135 431 389 718 ;
+C 43 ; WX 479 ; N plus ; B 70 0 497 505 ;
+C 44 ; WX 228 ; N comma ; B 46 -147 175 106 ;
+C 45 ; WX 273 ; N hyphen ; B 77 232 293 322 ;
+C 46 ; WX 228 ; N period ; B 71 0 175 106 ;
+C 47 ; WX 228 ; N slash ; B -17 -19 370 737 ;
+C 48 ; WX 456 ; N zero ; B 77 -19 499 703 ;
+C 49 ; WX 456 ; N one ; B 170 0 417 703 ;
+C 50 ; WX 456 ; N two ; B 21 0 506 703 ;
+C 51 ; WX 456 ; N three ; B 61 -19 500 703 ;
+C 52 ; WX 456 ; N four ; B 50 0 472 703 ;
+C 53 ; WX 456 ; N five ; B 55 -19 509 688 ;
+C 54 ; WX 456 ; N six ; B 74 -19 504 703 ;
+C 55 ; WX 456 ; N seven ; B 112 0 549 688 ;
+C 56 ; WX 456 ; N eight ; B 60 -19 497 703 ;
+C 57 ; WX 456 ; N nine ; B 67 -19 499 703 ;
+C 58 ; WX 228 ; N colon ; B 71 0 247 516 ;
+C 59 ; WX 228 ; N semicolon ; B 46 -147 247 516 ;
+C 60 ; WX 479 ; N less ; B 77 10 526 496 ;
+C 61 ; WX 479 ; N equal ; B 52 115 515 390 ;
+C 62 ; WX 479 ; N greater ; B 41 10 490 496 ;
+C 63 ; WX 456 ; N question ; B 132 0 500 727 ;
+C 64 ; WX 832 ; N at ; B 176 -19 791 737 ;
+C 65 ; WX 547 ; N A ; B 11 0 536 718 ;
+C 66 ; WX 547 ; N B ; B 61 0 583 718 ;
+C 67 ; WX 592 ; N C ; B 88 -19 640 737 ;
+C 68 ; WX 592 ; N D ; B 66 0 626 718 ;
+C 69 ; WX 547 ; N E ; B 71 0 625 718 ;
+C 70 ; WX 501 ; N F ; B 71 0 603 718 ;
+C 71 ; WX 638 ; N G ; B 91 -19 655 737 ;
+C 72 ; WX 592 ; N H ; B 63 0 655 718 ;
+C 73 ; WX 228 ; N I ; B 75 0 279 718 ;
+C 74 ; WX 410 ; N J ; B 39 -19 476 718 ;
+C 75 ; WX 547 ; N K ; B 62 0 662 718 ;
+C 76 ; WX 456 ; N L ; B 62 0 455 718 ;
+C 77 ; WX 683 ; N M ; B 60 0 749 718 ;
+C 78 ; WX 592 ; N N ; B 62 0 655 718 ;
+C 79 ; WX 638 ; N O ; B 86 -19 677 737 ;
+C 80 ; WX 547 ; N P ; B 71 0 604 718 ;
+C 81 ; WX 638 ; N Q ; B 86 -56 677 737 ;
+C 82 ; WX 592 ; N R ; B 72 0 634 718 ;
+C 83 ; WX 547 ; N S ; B 74 -19 584 737 ;
+C 84 ; WX 501 ; N T ; B 122 0 615 718 ;
+C 85 ; WX 592 ; N U ; B 101 -19 653 718 ;
+C 86 ; WX 547 ; N V ; B 142 0 656 718 ;
+C 87 ; WX 774 ; N W ; B 138 0 886 718 ;
+C 88 ; WX 547 ; N X ; B 16 0 647 718 ;
+C 89 ; WX 547 ; N Y ; B 137 0 661 718 ;
+C 90 ; WX 501 ; N Z ; B 19 0 607 718 ;
+C 91 ; WX 228 ; N bracketleft ; B 17 -196 331 722 ;
+C 92 ; WX 228 ; N backslash ; B 115 -19 239 737 ;
+C 93 ; WX 228 ; N bracketright ; B -11 -196 302 722 ;
+C 94 ; WX 385 ; N asciicircum ; B 35 264 442 688 ;
+C 95 ; WX 456 ; N underscore ; B -22 -125 443 -75 ;
+C 96 ; WX 182 ; N quoteleft ; B 135 470 265 725 ;
+C 97 ; WX 456 ; N a ; B 50 -15 458 538 ;
+C 98 ; WX 456 ; N b ; B 48 -15 479 718 ;
+C 99 ; WX 410 ; N c ; B 61 -15 454 538 ;
+C 100 ; WX 456 ; N d ; B 69 -15 534 718 ;
+C 101 ; WX 456 ; N e ; B 69 -15 474 538 ;
+C 102 ; WX 228 ; N f ; B 71 0 341 728 ;
+C 103 ; WX 456 ; N g ; B 34 -220 500 538 ;
+C 104 ; WX 456 ; N h ; B 53 0 470 718 ;
+C 105 ; WX 182 ; N i ; B 55 0 252 718 ;
+C 106 ; WX 182 ; N j ; B -49 -210 252 718 ;
+C 107 ; WX 410 ; N k ; B 55 0 492 718 ;
+C 108 ; WX 182 ; N l ; B 55 0 252 718 ;
+C 109 ; WX 683 ; N m ; B 53 0 699 538 ;
+C 110 ; WX 456 ; N n ; B 53 0 470 538 ;
+C 111 ; WX 456 ; N o ; B 68 -14 479 538 ;
+C 112 ; WX 456 ; N p ; B 11 -207 479 538 ;
+C 113 ; WX 456 ; N q ; B 69 -207 496 538 ;
+C 114 ; WX 273 ; N r ; B 63 0 365 538 ;
+C 115 ; WX 410 ; N s ; B 52 -15 434 538 ;
+C 116 ; WX 228 ; N t ; B 84 -7 302 669 ;
+C 117 ; WX 456 ; N u ; B 77 -15 492 523 ;
+C 118 ; WX 410 ; N v ; B 98 0 495 523 ;
+C 119 ; WX 592 ; N w ; B 103 0 673 523 ;
+C 120 ; WX 410 ; N x ; B 9 0 487 523 ;
+C 121 ; WX 410 ; N y ; B 12 -214 492 523 ;
+C 122 ; WX 410 ; N z ; B 25 0 468 523 ;
+C 123 ; WX 274 ; N braceleft ; B 75 -196 365 722 ;
+C 124 ; WX 213 ; N bar ; B 74 -19 265 737 ;
+C 125 ; WX 274 ; N braceright ; B 0 -196 291 722 ;
+C 126 ; WX 479 ; N asciitilde ; B 91 181 476 322 ;
+C 161 ; WX 273 ; N exclamdown ; B 63 -195 267 523 ;
+C 162 ; WX 456 ; N cent ; B 78 -115 479 623 ;
+C 163 ; WX 456 ; N sterling ; B 40 -16 520 718 ;
+C 164 ; WX 137 ; N fraction ; B -139 -19 396 703 ;
+C 165 ; WX 456 ; N yen ; B 67 0 573 688 ;
+C 166 ; WX 456 ; N florin ; B -43 -207 537 737 ;
+C 167 ; WX 456 ; N section ; B 63 -191 479 737 ;
+C 168 ; WX 456 ; N currency ; B 49 99 530 603 ;
+C 169 ; WX 157 ; N quotesingle ; B 129 463 233 718 ;
+C 170 ; WX 273 ; N quotedblleft ; B 113 470 378 725 ;
+C 171 ; WX 456 ; N guillemotleft ; B 120 108 454 446 ;
+C 172 ; WX 273 ; N guilsinglleft ; B 112 108 279 446 ;
+C 173 ; WX 273 ; N guilsinglright ; B 91 108 257 446 ;
+C 174 ; WX 410 ; N fi ; B 71 0 481 728 ;
+C 175 ; WX 410 ; N fl ; B 71 0 479 728 ;
+C 177 ; WX 456 ; N endash ; B 42 240 510 313 ;
+C 178 ; WX 456 ; N dagger ; B 110 -159 510 718 ;
+C 179 ; WX 456 ; N daggerdbl ; B 43 -159 511 718 ;
+C 180 ; WX 228 ; N periodcentered ; B 106 190 211 315 ;
+C 182 ; WX 440 ; N paragraph ; B 103 -173 533 718 ;
+C 183 ; WX 287 ; N bullet ; B 74 202 339 517 ;
+C 184 ; WX 182 ; N quotesinglbase ; B 17 -149 147 106 ;
+C 185 ; WX 273 ; N quotedblbase ; B -5 -149 260 106 ;
+C 186 ; WX 273 ; N quotedblright ; B 102 463 367 718 ;
+C 187 ; WX 456 ; N guillemotright ; B 98 108 433 446 ;
+C 188 ; WX 820 ; N ellipsis ; B 94 0 744 106 ;
+C 189 ; WX 820 ; N perthousand ; B 72 -19 844 703 ;
+C 191 ; WX 501 ; N questiondown ; B 70 -201 438 525 ;
+C 193 ; WX 273 ; N grave ; B 139 593 276 734 ;
+C 194 ; WX 273 ; N acute ; B 203 593 390 734 ;
+C 195 ; WX 273 ; N circumflex ; B 121 593 359 734 ;
+C 196 ; WX 273 ; N tilde ; B 102 606 402 722 ;
+C 197 ; WX 273 ; N macron ; B 117 627 384 684 ;
+C 198 ; WX 273 ; N breve ; B 137 595 391 731 ;
+C 199 ; WX 273 ; N dotaccent ; B 204 604 297 706 ;
+C 200 ; WX 273 ; N dieresis ; B 138 604 363 706 ;
+C 202 ; WX 273 ; N ring ; B 175 572 330 756 ;
+C 203 ; WX 273 ; N cedilla ; B 2 -225 191 0 ;
+C 205 ; WX 273 ; N hungarumlaut ; B 129 593 463 734 ;
+C 206 ; WX 273 ; N ogonek ; B 35 -225 204 0 ;
+C 207 ; WX 273 ; N caron ; B 145 593 384 734 ;
+C 208 ; WX 820 ; N emdash ; B 42 240 875 313 ;
+C 225 ; WX 820 ; N AE ; B 7 0 899 718 ;
+C 227 ; WX 303 ; N ordfeminine ; B 82 304 368 737 ;
+C 232 ; WX 456 ; N Lslash ; B 34 0 455 718 ;
+C 233 ; WX 638 ; N Oslash ; B 35 -19 730 737 ;
+C 234 ; WX 820 ; N OE ; B 80 -19 915 737 ;
+C 235 ; WX 299 ; N ordmasculine ; B 82 304 384 737 ;
+C 241 ; WX 729 ; N ae ; B 50 -15 746 538 ;
+C 245 ; WX 228 ; N dotlessi ; B 78 0 241 523 ;
+C 248 ; WX 182 ; N lslash ; B 34 0 284 718 ;
+C 249 ; WX 501 ; N oslash ; B 24 -22 531 545 ;
+C 250 ; WX 774 ; N oe ; B 68 -15 791 538 ;
+C 251 ; WX 501 ; N germandbls ; B 55 -15 539 728 ;
+C -1 ; WX 592 ; N Udieresis ; B 101 -19 653 901 ;
+C -1 ; WX 592 ; N Uacute ; B 101 -19 653 929 ;
+C -1 ; WX 547 ; N Scedilla ; B 74 -225 584 737 ;
+C -1 ; WX 501 ; N Tcaron ; B 122 0 615 929 ;
+C -1 ; WX 547 ; N Scaron ; B 74 -19 584 929 ;
+C -1 ; WX 592 ; N Rcaron ; B 72 0 634 929 ;
+C -1 ; WX 592 ; N Racute ; B 72 0 634 929 ;
+C -1 ; WX 547 ; N Sacute ; B 74 -19 584 929 ;
+C -1 ; WX 638 ; N Otilde ; B 86 -19 677 917 ;
+C -1 ; WX 456 ; N ucircumflex ; B 77 -15 492 734 ;
+C -1 ; WX 638 ; N Ohungarumlaut ; B 86 -19 679 929 ;
+C -1 ; WX 592 ; N Uhungarumlaut ; B 101 -19 656 929 ;
+C -1 ; WX 547 ; N Yacute ; B 137 0 661 929 ;
+C -1 ; WX 592 ; N Eth ; B 57 0 626 718 ;
+C -1 ; WX 592 ; N Dcroat ; B 57 0 626 718 ;
+C -1 ; WX 501 ; N Zacute ; B 19 0 607 929 ;
+C -1 ; WX 592 ; N Uring ; B 101 -19 653 951 ;
+C -1 ; WX 456 ; N gbreve ; B 34 -220 500 731 ;
+C -1 ; WX 456 ; N eogonek ; B 69 -225 474 538 ;
+C -1 ; WX 456 ; N edotaccent ; B 69 -15 474 706 ;
+C -1 ; WX 456 ; N ecaron ; B 69 -15 476 734 ;
+C -1 ; WX 592 ; N Ugrave ; B 101 -19 653 929 ;
+C -1 ; WX 547 ; N Thorn ; B 71 0 584 718 ;
+C -1 ; WX 456 ; N eacute ; B 69 -15 482 734 ;
+C -1 ; WX 456 ; N edieresis ; B 69 -15 474 706 ;
+C -1 ; WX 503 ; N dcaron ; B 69 -15 643 718 ;
+C -1 ; WX 410 ; N ccedilla ; B 61 -225 454 538 ;
+C -1 ; WX 410 ; N ccaron ; B 61 -15 484 734 ;
+C -1 ; WX 410 ; N cacute ; B 61 -15 480 734 ;
+C -1 ; WX 456 ; N aogonek ; B 50 -225 458 538 ;
+C -1 ; WX 456 ; N aring ; B 50 -15 458 769 ;
+C -1 ; WX 456 ; N atilde ; B 50 -15 486 722 ;
+C -1 ; WX 456 ; N abreve ; B 50 -15 482 731 ;
+C -1 ; WX 456 ; N egrave ; B 69 -15 474 734 ;
+C -1 ; WX 456 ; N agrave ; B 50 -15 458 734 ;
+C -1 ; WX 456 ; N aacute ; B 50 -15 482 734 ;
+C -1 ; WX 456 ; N adieresis ; B 50 -15 458 706 ;
+C -1 ; WX 592 ; N Uogonek ; B 101 -225 653 718 ;
+C -1 ; WX 456 ; N ugrave ; B 77 -15 492 734 ;
+C -1 ; WX 456 ; N uacute ; B 77 -15 492 734 ;
+C -1 ; WX 456 ; N udieresis ; B 77 -15 492 706 ;
+C -1 ; WX 254 ; N tcaron ; B 84 -7 394 718 ;
+C -1 ; WX 410 ; N scommaaccent ; B 52 -286 434 538 ;
+C -1 ; WX 501 ; N Zcaron ; B 19 0 607 929 ;
+C -1 ; WX 456 ; N ecircumflex ; B 69 -15 474 734 ;
+C -1 ; WX 592 ; N Ucircumflex ; B 101 -19 653 929 ;
+C -1 ; WX 456 ; N acircumflex ; B 50 -15 458 734 ;
+C -1 ; WX 501 ; N Zdotaccent ; B 19 0 607 901 ;
+C -1 ; WX 410 ; N scaron ; B 52 -15 453 734 ;
+C -1 ; WX 547 ; N Amacron ; B 11 0 555 879 ;
+C -1 ; WX 410 ; N sacute ; B 52 -15 459 734 ;
+C -1 ; WX 501 ; N Tcommaaccent ; B 122 -286 615 718 ;
+C -1 ; WX 547 ; N Ydieresis ; B 137 0 661 901 ;
+C -1 ; WX 456 ; N thorn ; B 11 -207 479 718 ;
+C -1 ; WX 547 ; N Emacron ; B 71 0 625 879 ;
+C -1 ; WX 638 ; N Ograve ; B 86 -19 677 929 ;
+C -1 ; WX 638 ; N Oacute ; B 86 -19 677 929 ;
+C -1 ; WX 638 ; N Odieresis ; B 86 -19 677 901 ;
+C -1 ; WX 592 ; N Ntilde ; B 62 0 655 917 ;
+C -1 ; WX 592 ; N Ncaron ; B 62 0 655 929 ;
+C -1 ; WX 592 ; N Nacute ; B 62 0 655 929 ;
+C -1 ; WX 456 ; N Lcaron ; B 62 0 536 718 ;
+C -1 ; WX 456 ; N Lacute ; B 62 0 455 929 ;
+C -1 ; WX 228 ; N Idotaccent ; B 75 0 308 901 ;
+C -1 ; WX 273 ; N racute ; B 63 0 390 734 ;
+C -1 ; WX 228 ; N Icircumflex ; B 75 0 370 929 ;
+C -1 ; WX 456 ; N ohungarumlaut ; B 68 -14 555 734 ;
+C -1 ; WX 456 ; N otilde ; B 68 -14 494 722 ;
+C -1 ; WX 481 ; N Euro ; B 0 -13 535 670 ;
+C -1 ; WX 456 ; N ocircumflex ; B 68 -14 479 734 ;
+C -1 ; WX 273 ; N onesuperior ; B 136 281 305 703 ;
+C -1 ; WX 273 ; N twosuperior ; B 52 281 368 714 ;
+C -1 ; WX 273 ; N threesuperior ; B 74 270 358 714 ;
+C -1 ; WX 228 ; N Igrave ; B 75 0 288 929 ;
+C -1 ; WX 228 ; N Iacute ; B 75 0 401 929 ;
+C -1 ; WX 228 ; N Imacron ; B 75 0 395 879 ;
+C -1 ; WX 228 ; N Iogonek ; B -15 -225 279 718 ;
+C -1 ; WX 228 ; N Idieresis ; B 75 0 375 901 ;
+C -1 ; WX 638 ; N Gbreve ; B 91 -19 655 926 ;
+C -1 ; WX 592 ; N Umacron ; B 101 -19 653 879 ;
+C -1 ; WX 547 ; N Kcommaaccent ; B 62 -286 662 718 ;
+C -1 ; WX 456 ; N ograve ; B 68 -14 479 734 ;
+C -1 ; WX 547 ; N Scommaaccent ; B 74 -286 584 737 ;
+C -1 ; WX 547 ; N Eogonek ; B 71 -225 625 718 ;
+C -1 ; WX 456 ; N oacute ; B 68 -14 482 734 ;
+C -1 ; WX 547 ; N Edotaccent ; B 71 0 625 901 ;
+C -1 ; WX 182 ; N iogonek ; B -42 -225 252 718 ;
+C -1 ; WX 456 ; N gcommaaccent ; B 34 -220 500 818 ;
+C -1 ; WX 456 ; N odieresis ; B 68 -14 479 706 ;
+C -1 ; WX 456 ; N ntilde ; B 53 0 486 722 ;
+C -1 ; WX 456 ; N ncaron ; B 53 0 476 734 ;
+C -1 ; WX 547 ; N Ecaron ; B 71 0 625 929 ;
+C -1 ; WX 547 ; N Ecircumflex ; B 71 0 625 929 ;
+C -1 ; WX 410 ; N scedilla ; B 52 -225 434 538 ;
+C -1 ; WX 273 ; N rcaron ; B 63 0 384 734 ;
+C -1 ; WX 547 ; N Egrave ; B 71 0 625 929 ;
+C -1 ; WX 547 ; N Eacute ; B 71 0 625 929 ;
+C -1 ; WX 638 ; N Gcommaaccent ; B 91 -286 655 737 ;
+C -1 ; WX 592 ; N Rcommaaccent ; B 72 -286 634 718 ;
+C -1 ; WX 547 ; N Edieresis ; B 71 0 625 901 ;
+C -1 ; WX 456 ; N nacute ; B 53 0 482 734 ;
+C -1 ; WX 456 ; N uogonek ; B 77 -225 492 523 ;
+C -1 ; WX 456 ; N umacron ; B 77 -15 492 684 ;
+C -1 ; WX 592 ; N Dcaron ; B 66 0 626 929 ;
+C -1 ; WX 217 ; N lcaron ; B 55 0 357 718 ;
+C -1 ; WX 592 ; N Ccaron ; B 88 -19 640 929 ;
+C -1 ; WX 592 ; N Cacute ; B 88 -19 640 929 ;
+C -1 ; WX 592 ; N Ccedilla ; B 88 -225 640 737 ;
+C -1 ; WX 328 ; N degree ; B 138 411 384 703 ;
+C -1 ; WX 547 ; N Aogonek ; B 11 -225 536 718 ;
+C -1 ; WX 479 ; N minus ; B 70 216 497 289 ;
+C -1 ; WX 479 ; N multiply ; B 41 0 526 506 ;
+C -1 ; WX 479 ; N divide ; B 70 -19 497 524 ;
+C -1 ; WX 547 ; N Aring ; B 11 0 536 944 ;
+C -1 ; WX 820 ; N trademark ; B 152 306 866 718 ;
+C -1 ; WX 273 ; N rcommaaccent ; B 8 -286 365 538 ;
+C -1 ; WX 182 ; N lacute ; B 55 0 378 929 ;
+C -1 ; WX 456 ; N omacron ; B 68 -14 479 684 ;
+C -1 ; WX 547 ; N Atilde ; B 11 0 573 917 ;
+C -1 ; WX 228 ; N icircumflex ; B 78 0 336 734 ;
+C -1 ; WX 228 ; N igrave ; B 78 0 254 734 ;
+C -1 ; WX 456 ; N ncommaaccent ; B 53 -286 470 538 ;
+C -1 ; WX 182 ; N lcommaaccent ; B 2 -286 252 718 ;
+C -1 ; WX 479 ; N plusminus ; B 32 0 507 561 ;
+C -1 ; WX 684 ; N onehalf ; B 93 -19 688 703 ;
+C -1 ; WX 684 ; N onequarter ; B 123 -19 658 703 ;
+C -1 ; WX 684 ; N threequarters ; B 106 -19 706 714 ;
+C -1 ; WX 228 ; N iacute ; B 78 0 368 734 ;
+C -1 ; WX 547 ; N Abreve ; B 11 0 562 926 ;
+C -1 ; WX 410 ; N kcommaaccent ; B 55 -286 492 718 ;
+C -1 ; WX 638 ; N Omacron ; B 86 -19 677 879 ;
+C -1 ; WX 228 ; N imacron ; B 78 0 362 684 ;
+C -1 ; WX 456 ; N emacron ; B 69 -15 476 684 ;
+C -1 ; WX 456 ; N amacron ; B 50 -15 476 684 ;
+C -1 ; WX 228 ; N tcommaaccent ; B 25 -286 302 669 ;
+C -1 ; WX 410 ; N ydieresis ; B 12 -214 492 706 ;
+C -1 ; WX 410 ; N zdotaccent ; B 25 0 468 706 ;
+C -1 ; WX 410 ; N zcaron ; B 25 0 468 734 ;
+C -1 ; WX 410 ; N zacute ; B 25 0 468 734 ;
+C -1 ; WX 410 ; N yacute ; B 12 -214 492 734 ;
+C -1 ; WX 456 ; N uhungarumlaut ; B 77 -15 555 734 ;
+C -1 ; WX 456 ; N eth ; B 67 -15 506 737 ;
+C -1 ; WX 456 ; N uring ; B 77 -15 492 756 ;
+C -1 ; WX 638 ; N Ocircumflex ; B 86 -19 677 929 ;
+C -1 ; WX 273 ; N commaaccent ; B 47 -286 163 -60 ;
+C -1 ; WX 604 ; N copyright ; B 44 -19 687 737 ;
+C -1 ; WX 604 ; N registered ; B 44 -19 687 737 ;
+C -1 ; WX 547 ; N Acircumflex ; B 11 0 536 929 ;
+C -1 ; WX 228 ; N idieresis ; B 78 0 341 706 ;
+C -1 ; WX 405 ; N lozenge ; B 80 0 447 740 ;
+C -1 ; WX 502 ; N Delta ; B 5 0 499 688 ;
+C -1 ; WX 479 ; N notequal ; B 52 10 515 495 ;
+C -1 ; WX 450 ; N radical ; B 74 -74 593 927 ;
+C -1 ; WX 547 ; N Agrave ; B 11 0 536 929 ;
+C -1 ; WX 547 ; N Aacute ; B 11 0 561 929 ;
+C -1 ; WX 479 ; N lessequal ; B 39 0 543 594 ;
+C -1 ; WX 479 ; N greaterequal ; B 39 0 507 594 ;
+C -1 ; WX 479 ; N logicalnot ; B 87 108 515 390 ;
+C -1 ; WX 585 ; N summation ; B 12 -123 570 752 ;
+C -1 ; WX 405 ; N partialdiff ; B 21 -10 379 753 ;
+C -1 ; WX 592 ; N Ncommaaccent ; B 62 -286 655 718 ;
+C -1 ; WX 456 ; N dcroat ; B 69 -15 573 718 ;
+C -1 ; WX 213 ; N brokenbar ; B 74 -19 265 737 ;
+C -1 ; WX 456 ; N Lcommaaccent ; B 62 -286 455 718 ;
+C -1 ; WX 547 ; N Adieresis ; B 11 0 536 901 ;
+C -1 ; WX 456 ; N mu ; B 20 -207 492 523 ;
+C -1 ; WX 228 ; N .notdef ; B 21 0 21 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -29
+KPX A Ccedilla -29
+KPX A G -33
+KPX A O -30
+KPX A Odieresis -30
+KPX A Q -30
+KPX A T -81
+KPX A U -32
+KPX A Uacute -32
+KPX A Ucircumflex -32
+KPX A Udieresis -32
+KPX A Ugrave -32
+KPX A V -61
+KPX A W -43
+KPX A Y -82
+KPX A a -11
+KPX A b -6
+KPX A c -11
+KPX A ccedilla -11
+KPX A comma 0
+KPX A d -13
+KPX A e -15
+KPX A g -16
+KPX A guillemotleft -43
+KPX A guilsinglleft -39
+KPX A hyphen -6
+KPX A o -16
+KPX A period 1
+KPX A q -13
+KPX A quotedblright -40
+KPX A quoteright -51
+KPX A t -17
+KPX A u -15
+KPX A v -30
+KPX A w -25
+KPX A y -31
+KPX Aacute C -31
+KPX Aacute G -34
+KPX Aacute O -31
+KPX Aacute Q -31
+KPX Aacute T -81
+KPX Aacute U -33
+KPX Aacute V -61
+KPX Aacute W -43
+KPX Aacute Y -82
+KPX Aacute a -12
+KPX Aacute b -6
+KPX Aacute c -12
+KPX Aacute comma 0
+KPX Aacute d -14
+KPX Aacute e -16
+KPX Aacute g -16
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen -6
+KPX Aacute o -17
+KPX Aacute period 0
+KPX Aacute q -14
+KPX Aacute quoteright -51
+KPX Aacute t -18
+KPX Aacute u -16
+KPX Aacute v -30
+KPX Aacute w -25
+KPX Aacute y -31
+KPX Acircumflex C -29
+KPX Acircumflex G -33
+KPX Acircumflex O -30
+KPX Acircumflex Q -30
+KPX Acircumflex T -81
+KPX Acircumflex U -32
+KPX Acircumflex V -61
+KPX Acircumflex W -43
+KPX Acircumflex Y -82
+KPX Acircumflex comma 0
+KPX Acircumflex period 1
+KPX Adieresis C -29
+KPX Adieresis G -33
+KPX Adieresis O -30
+KPX Adieresis Q -30
+KPX Adieresis T -81
+KPX Adieresis U -32
+KPX Adieresis V -61
+KPX Adieresis W -43
+KPX Adieresis Y -82
+KPX Adieresis a -11
+KPX Adieresis b -6
+KPX Adieresis c -11
+KPX Adieresis comma 0
+KPX Adieresis d -13
+KPX Adieresis g -16
+KPX Adieresis guillemotleft -43
+KPX Adieresis guilsinglleft -39
+KPX Adieresis hyphen -6
+KPX Adieresis o -16
+KPX Adieresis period 1
+KPX Adieresis q -13
+KPX Adieresis quotedblright -40
+KPX Adieresis quoteright -51
+KPX Adieresis t -17
+KPX Adieresis u -15
+KPX Adieresis v -30
+KPX Adieresis w -25
+KPX Adieresis y -31
+KPX Agrave C -29
+KPX Agrave G -33
+KPX Agrave O -30
+KPX Agrave Q -30
+KPX Agrave T -81
+KPX Agrave U -32
+KPX Agrave V -61
+KPX Agrave W -43
+KPX Agrave Y -82
+KPX Agrave comma 0
+KPX Agrave period 1
+KPX Aring C -29
+KPX Aring G -33
+KPX Aring O -30
+KPX Aring Q -30
+KPX Aring T -81
+KPX Aring U -32
+KPX Aring V -61
+KPX Aring W -43
+KPX Aring Y -82
+KPX Aring a -11
+KPX Aring b -6
+KPX Aring c -11
+KPX Aring comma 0
+KPX Aring d -13
+KPX Aring e -15
+KPX Aring g -16
+KPX Aring guillemotleft -43
+KPX Aring guilsinglleft -39
+KPX Aring hyphen -6
+KPX Aring o -16
+KPX Aring period 1
+KPX Aring q -13
+KPX Aring quotedblright -40
+KPX Aring quoteright -51
+KPX Aring t -17
+KPX Aring u -15
+KPX Aring v -30
+KPX Aring w -25
+KPX Aring y -31
+KPX Atilde C -31
+KPX Atilde G -35
+KPX Atilde O -31
+KPX Atilde Q -31
+KPX Atilde T -81
+KPX Atilde U -34
+KPX Atilde V -61
+KPX Atilde W -43
+KPX Atilde Y -82
+KPX Atilde comma 0
+KPX Atilde period 0
+KPX B A -22
+KPX B AE -21
+KPX B Aacute -22
+KPX B Acircumflex -22
+KPX B Adieresis -22
+KPX B Aring -22
+KPX B Atilde -22
+KPX B O -9
+KPX B OE -5
+KPX B Oacute -9
+KPX B Ocircumflex -9
+KPX B Odieresis -9
+KPX B Ograve -9
+KPX B Oslash -7
+KPX B V -34
+KPX B W -17
+KPX B Y -42
+KPX C A -32
+KPX C AE -31
+KPX C Aacute -32
+KPX C Adieresis -32
+KPX C Aring -32
+KPX C H -13
+KPX C K -13
+KPX C O -13
+KPX C Oacute -13
+KPX C Odieresis -13
+KPX Ccedilla A -37
+KPX D A -39
+KPX D Aacute -39
+KPX D Acircumflex -39
+KPX D Adieresis -39
+KPX D Agrave -39
+KPX D Aring -39
+KPX D Atilde -39
+KPX D J -9
+KPX D T -36
+KPX D V -37
+KPX D W -19
+KPX D X -42
+KPX D Y -55
+KPX F A -64
+KPX F Aacute -64
+KPX F Acircumflex -64
+KPX F Adieresis -64
+KPX F Agrave -64
+KPX F Aring -64
+KPX F Atilde -64
+KPX F J -59
+KPX F O -22
+KPX F Odieresis -22
+KPX F a -32
+KPX F aacute -32
+KPX F adieresis -32
+KPX F ae -32
+KPX F aring -32
+KPX F comma -107
+KPX F e -26
+KPX F eacute -26
+KPX F hyphen -18
+KPX F i -15
+KPX F j -15
+KPX F o -26
+KPX F oacute -26
+KPX F odieresis -26
+KPX F oe -24
+KPX F oslash -24
+KPX F period -107
+KPX F r -38
+KPX F u -34
+KPX G A -11
+KPX G AE -9
+KPX G Aacute -11
+KPX G Acircumflex -11
+KPX G Adieresis -11
+KPX G Agrave -11
+KPX G Aring -11
+KPX G Atilde -11
+KPX G T -38
+KPX G V -40
+KPX G W -23
+KPX G Y -58
+KPX J A -30
+KPX J AE -29
+KPX J Adieresis -30
+KPX J Aring -30
+KPX K C -41
+KPX K G -45
+KPX K O -42
+KPX K OE -37
+KPX K Oacute -42
+KPX K Odieresis -42
+KPX K S -38
+KPX K T 15
+KPX K a -15
+KPX K adieresis -15
+KPX K ae -15
+KPX K aring -15
+KPX K e -35
+KPX K hyphen -43
+KPX K o -36
+KPX K oacute -36
+KPX K odieresis -36
+KPX K u -29
+KPX K udieresis -29
+KPX K y -59
+KPX L A 10
+KPX L AE 12
+KPX L Aacute 10
+KPX L Adieresis 10
+KPX L Aring 10
+KPX L C -36
+KPX L Ccedilla -39
+KPX L G -40
+KPX L O -38
+KPX L Oacute -38
+KPX L Ocircumflex -38
+KPX L Odieresis -38
+KPX L Ograve -38
+KPX L Otilde -38
+KPX L S -20
+KPX L T -87
+KPX L U -34
+KPX L Udieresis -34
+KPX L V -87
+KPX L W -58
+KPX L Y -99
+KPX L hyphen -114
+KPX L quotedblright -108
+KPX L quoteright -120
+KPX L u -16
+KPX L udieresis -16
+KPX L y -53
+KPX N A -12
+KPX N AE -10
+KPX N Aacute -12
+KPX N Adieresis -12
+KPX N Aring -12
+KPX N C -6
+KPX N Ccedilla -5
+KPX N G -10
+KPX N O -6
+KPX N Oacute -6
+KPX N Odieresis -6
+KPX N a -8
+KPX N aacute -8
+KPX N adieresis -8
+KPX N ae -8
+KPX N aring -8
+KPX N comma -10
+KPX N e -5
+KPX N eacute -5
+KPX N o -6
+KPX N oacute -6
+KPX N odieresis -6
+KPX N oslash -1
+KPX N period -9
+KPX N u -4
+KPX N udieresis -5
+KPX O A -36
+KPX O AE -37
+KPX O Aacute -36
+KPX O Adieresis -36
+KPX O Aring -36
+KPX O T -34
+KPX O V -34
+KPX O W -16
+KPX O X -39
+KPX O Y -53
+KPX Oacute A -36
+KPX Oacute T -34
+KPX Oacute V -34
+KPX Oacute W -16
+KPX Oacute Y -53
+KPX Ocircumflex T -34
+KPX Ocircumflex V -34
+KPX Ocircumflex Y -53
+KPX Odieresis A -36
+KPX Odieresis T -34
+KPX Odieresis V -34
+KPX Odieresis W -16
+KPX Odieresis X -39
+KPX Odieresis Y -53
+KPX Ograve T -34
+KPX Ograve V -34
+KPX Ograve Y -53
+KPX Oslash A -33
+KPX Otilde T -34
+KPX Otilde V -34
+KPX Otilde Y -53
+KPX P A -71
+KPX P AE -72
+KPX P Aacute -71
+KPX P Adieresis -71
+KPX P Aring -71
+KPX P J -78
+KPX P a -27
+KPX P aacute -27
+KPX P adieresis -27
+KPX P ae -27
+KPX P aring -27
+KPX P comma -126
+KPX P e -31
+KPX P eacute -31
+KPX P hyphen -36
+KPX P o -31
+KPX P oacute -31
+KPX P odieresis -31
+KPX P oe -28
+KPX P oslash -29
+KPX P period -126
+KPX R C -11
+KPX R Ccedilla -10
+KPX R G -14
+KPX R O -11
+KPX R OE -7
+KPX R Oacute -11
+KPX R Odieresis -11
+KPX R T -19
+KPX R U -13
+KPX R Udieresis -13
+KPX R V -33
+KPX R W -17
+KPX R Y -39
+KPX R a -11
+KPX R aacute -11
+KPX R adieresis -11
+KPX R ae -11
+KPX R aring -11
+KPX R e -9
+KPX R eacute -9
+KPX R hyphen 0
+KPX R o -10
+KPX R oacute -10
+KPX R odieresis -10
+KPX R oe -9
+KPX R u -8
+KPX R uacute -8
+KPX R udieresis -8
+KPX R y -10
+KPX S A -22
+KPX S AE -21
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T -22
+KPX S V -36
+KPX S W -20
+KPX S Y -42
+KPX S t -10
+KPX T A -86
+KPX T AE -84
+KPX T Aacute -86
+KPX T Acircumflex -86
+KPX T Adieresis -86
+KPX T Agrave -86
+KPX T Aring -86
+KPX T Atilde -86
+KPX T C -34
+KPX T G -39
+KPX T J -88
+KPX T O -34
+KPX T OE -28
+KPX T Oacute -34
+KPX T Ocircumflex -34
+KPX T Odieresis -34
+KPX T Ograve -34
+KPX T Oslash -36
+KPX T Otilde -34
+KPX T S -23
+KPX T V 7
+KPX T W 10
+KPX T Y 9
+KPX T a -83
+KPX T ae -83
+KPX T c -76
+KPX T colon -106
+KPX T comma -84
+KPX T e -80
+KPX T g -78
+KPX T guillemotleft -104
+KPX T guilsinglleft -100
+KPX T hyphen -65
+KPX T i -9
+KPX T j -9
+KPX T o -81
+KPX T oslash -76
+KPX T period -84
+KPX T r -81
+KPX T s -78
+KPX T semicolon -102
+KPX T u -79
+KPX T v -87
+KPX T w -85
+KPX T y -88
+KPX U A -37
+KPX U AE -38
+KPX U Aacute -37
+KPX U Acircumflex -37
+KPX U Adieresis -37
+KPX U Aring -37
+KPX U Atilde -37
+KPX U comma -30
+KPX U m -9
+KPX U n -9
+KPX U p -7
+KPX U period -27
+KPX U r -14
+KPX Uacute A -37
+KPX Uacute comma -30
+KPX Uacute m -9
+KPX Uacute n -9
+KPX Uacute p -7
+KPX Uacute period -27
+KPX Uacute r -14
+KPX Ucircumflex A -37
+KPX Udieresis A -37
+KPX Udieresis b -7
+KPX Udieresis comma -30
+KPX Udieresis m -9
+KPX Udieresis n -9
+KPX Udieresis p -7
+KPX Udieresis period -27
+KPX Udieresis r -14
+KPX Ugrave A -37
+KPX V A -63
+KPX V AE -64
+KPX V Aacute -63
+KPX V Acircumflex -63
+KPX V Adieresis -63
+KPX V Agrave -63
+KPX V Aring -63
+KPX V Atilde -63
+KPX V C -36
+KPX V G -39
+KPX V O -36
+KPX V Oacute -36
+KPX V Ocircumflex -36
+KPX V Odieresis -36
+KPX V Ograve -36
+KPX V Oslash -33
+KPX V Otilde -36
+KPX V S -33
+KPX V T 12
+KPX V a -52
+KPX V ae -52
+KPX V colon -48
+KPX V comma -77
+KPX V e -50
+KPX V g -47
+KPX V guillemotleft -72
+KPX V guilsinglleft -68
+KPX V hyphen -33
+KPX V i -10
+KPX V o -51
+KPX V oslash -45
+KPX V period -77
+KPX V r -43
+KPX V semicolon -48
+KPX V u -40
+KPX V y -19
+KPX W A -46
+KPX W AE -47
+KPX W Aacute -46
+KPX W Acircumflex -46
+KPX W Adieresis -46
+KPX W Agrave -46
+KPX W Aring -46
+KPX W Atilde -46
+KPX W C -20
+KPX W G -23
+KPX W O -20
+KPX W Oacute -20
+KPX W Ocircumflex -20
+KPX W Odieresis -20
+KPX W Ograve -20
+KPX W Oslash -17
+KPX W Otilde -20
+KPX W S -25
+KPX W T 13
+KPX W a -32
+KPX W ae -32
+KPX W colon -38
+KPX W comma -50
+KPX W e -29
+KPX W g -27
+KPX W guillemotleft -52
+KPX W guilsinglleft -48
+KPX W hyphen -14
+KPX W i -9
+KPX W o -30
+KPX W oslash -25
+KPX W period -50
+KPX W r -30
+KPX W semicolon -38
+KPX W u -28
+KPX W y -10
+KPX X C -37
+KPX X O -37
+KPX X Odieresis -37
+KPX X Q -37
+KPX X a -20
+KPX X e -40
+KPX X hyphen -45
+KPX X o -41
+KPX X u -35
+KPX X y -50
+KPX Y A -84
+KPX Y AE -85
+KPX Y Aacute -84
+KPX Y Acircumflex -84
+KPX Y Adieresis -84
+KPX Y Agrave -84
+KPX Y Aring -84
+KPX Y Atilde -84
+KPX Y C -48
+KPX Y G -53
+KPX Y O -49
+KPX Y Oacute -49
+KPX Y Ocircumflex -49
+KPX Y Odieresis -49
+KPX Y Ograve -49
+KPX Y Oslash -50
+KPX Y Otilde -49
+KPX Y S -39
+KPX Y T 14
+KPX Y a -79
+KPX Y ae -79
+KPX Y colon -67
+KPX Y comma -95
+KPX Y e -77
+KPX Y g -75
+KPX Y guillemotleft -106
+KPX Y guilsinglleft -102
+KPX Y hyphen -72
+KPX Y i -8
+KPX Y o -78
+KPX Y oslash -72
+KPX Y p -53
+KPX Y period -95
+KPX Y semicolon -67
+KPX Y u -60
+KPX Y v -38
+KPX Z v -32
+KPX Z y -33
+KPX a j -9
+KPX a quoteright -13
+KPX a v -21
+KPX a w -16
+KPX a y -24
+KPX aacute v -22
+KPX aacute w -17
+KPX aacute y -24
+KPX adieresis v -21
+KPX adieresis w -16
+KPX adieresis y -24
+KPX ae v -18
+KPX ae w -13
+KPX ae y -23
+KPX agrave v -21
+KPX agrave w -16
+KPX agrave y -24
+KPX aring v -21
+KPX aring w -16
+KPX aring y -24
+KPX b v -15
+KPX b w -9
+KPX b y -19
+KPX c h -3
+KPX c k -4
+KPX comma one -88
+KPX comma quotedblright -27
+KPX comma quoteright -38
+KPX e quoteright -8
+KPX e t -12
+KPX e v -18
+KPX e w -12
+KPX e x -22
+KPX e y -22
+KPX eacute v -18
+KPX eacute w -13
+KPX eacute y -22
+KPX ecircumflex v -18
+KPX ecircumflex w -12
+KPX ecircumflex y -22
+KPX eight four -1
+KPX eight one -43
+KPX eight seven -24
+KPX f a -14
+KPX f aacute -14
+KPX f adieresis -14
+KPX f ae -14
+KPX f aring -14
+KPX f e -16
+KPX f eacute -16
+KPX f f 11
+KPX f i -10
+KPX f j -10
+KPX f l -10
+KPX f o -17
+KPX f oacute -17
+KPX f odieresis -17
+KPX f oe -16
+KPX f oslash -11
+KPX f quoteright 1
+KPX f s -10
+KPX f t 11
+KPX five four -3
+KPX five one -63
+KPX five seven -23
+KPX four four 1
+KPX four one -72
+KPX four seven -47
+KPX g a -5
+KPX g adieresis -5
+KPX g ae -5
+KPX g aring -5
+KPX g e -3
+KPX g eacute -3
+KPX g l 0
+KPX g oacute -3
+KPX g odieresis -3
+KPX g r -3
+KPX guillemotright A -47
+KPX guillemotright AE -47
+KPX guillemotright Aacute -47
+KPX guillemotright Adieresis -47
+KPX guillemotright Aring -47
+KPX guillemotright T -104
+KPX guillemotright V -72
+KPX guillemotright W -50
+KPX guillemotright Y -106
+KPX guilsinglright A -43
+KPX guilsinglright AE -44
+KPX guilsinglright Aacute -43
+KPX guilsinglright Adieresis -43
+KPX guilsinglright Aring -43
+KPX guilsinglright T -100
+KPX guilsinglright V -68
+KPX guilsinglright W -46
+KPX guilsinglright Y -103
+KPX h quoteright -6
+KPX h y -18
+KPX hyphen A -8
+KPX hyphen AE -8
+KPX hyphen Aacute -8
+KPX hyphen Adieresis -8
+KPX hyphen Aring -8
+KPX hyphen T -65
+KPX hyphen V -34
+KPX hyphen W -13
+KPX hyphen Y -72
+KPX i T -9
+KPX i j -3
+KPX k a -12
+KPX k aacute -12
+KPX k adieresis -12
+KPX k ae -13
+KPX k aring -12
+KPX k comma -5
+KPX k e -22
+KPX k eacute -22
+KPX k g -20
+KPX k hyphen -35
+KPX k o -23
+KPX k oacute -23
+KPX k odieresis -23
+KPX k period -4
+KPX k s -16
+KPX k u -8
+KPX k udieresis -8
+KPX l v -9
+KPX l y -10
+KPX m p 0
+KPX m v -15
+KPX m w -10
+KPX m y -18
+KPX n T -79
+KPX n p -1
+KPX n quoteright -6
+KPX n v -16
+KPX n w -11
+KPX n y -18
+KPX nine four -6
+KPX nine one -40
+KPX nine seven -27
+KPX o T -80
+KPX o quoteright -10
+KPX o t -10
+KPX o v -16
+KPX o w -10
+KPX o x -20
+KPX o y -20
+KPX oacute v -16
+KPX oacute w -10
+KPX oacute y -20
+KPX ocircumflex t -10
+KPX odieresis t -10
+KPX odieresis v -16
+KPX odieresis w -10
+KPX odieresis x -20
+KPX odieresis y -20
+KPX ograve v -16
+KPX ograve w -10
+KPX ograve y -20
+KPX one comma -59
+KPX one eight -53
+KPX one five -53
+KPX one four -65
+KPX one nine -53
+KPX one one -96
+KPX one period -59
+KPX one seven -71
+KPX one six -51
+KPX one three -57
+KPX one two -57
+KPX one zero -50
+KPX p t -9
+KPX p y -19
+KPX period one -88
+KPX period quotedblright -28
+KPX period quoteright -39
+KPX q c 0
+KPX q u -3
+KPX quotedblbase A 18
+KPX quotedblbase AE 19
+KPX quotedblbase T -64
+KPX quotedblbase V -57
+KPX quotedblbase W -30
+KPX quotedblbase Y -76
+KPX quotedblleft A -46
+KPX quotedblleft AE -49
+KPX quotedblleft Aacute -46
+KPX quotedblleft Adieresis -46
+KPX quotedblleft Aring -46
+KPX quotedblleft T 9
+KPX quotedblleft V 19
+KPX quotedblleft W 26
+KPX quotedblleft Y 7
+KPX quotedblright A -54
+KPX quotedblright AE -56
+KPX quotedblright Aacute -54
+KPX quotedblright Adieresis -54
+KPX quotedblright Aring -54
+KPX quotedblright T 3
+KPX quotedblright V 11
+KPX quotedblright W 19
+KPX quotedblright Y 0
+KPX quoteleft A -57
+KPX quoteleft AE -60
+KPX quoteleft Aacute -57
+KPX quoteleft Adieresis -57
+KPX quoteleft Aring -57
+KPX quoteleft T -2
+KPX quoteleft V 7
+KPX quoteleft W 15
+KPX quoteleft Y -4
+KPX quoteright A -65
+KPX quoteright AE -67
+KPX quoteright Aacute -65
+KPX quoteright Adieresis -65
+KPX quoteright Aring -65
+KPX quoteright comma -52
+KPX quoteright d -20
+KPX quoteright o -29
+KPX quoteright period -52
+KPX quoteright r -19
+KPX quoteright s -17
+KPX quoteright t -9
+KPX quoteright v -3
+KPX quoteright w -3
+KPX quoteright y -4
+KPX r a -9
+KPX r aacute -9
+KPX r acircumflex -9
+KPX r adieresis -9
+KPX r ae -9
+KPX r agrave -9
+KPX r aring -9
+KPX r c -11
+KPX r ccedilla -8
+KPX r colon -12
+KPX r comma -52
+KPX r d -9
+KPX r e -16
+KPX r eacute -16
+KPX r ecircumflex -16
+KPX r egrave -16
+KPX r f 17
+KPX r g -8
+KPX r h -4
+KPX r hyphen -34
+KPX r i -5
+KPX r j -5
+KPX r k -5
+KPX r l -5
+KPX r m -4
+KPX r n -4
+KPX r o -18
+KPX r oacute -18
+KPX r ocircumflex -18
+KPX r odieresis -18
+KPX r oe -15
+KPX r ograve -18
+KPX r oslash -15
+KPX r p -1
+KPX r period -52
+KPX r q -9
+KPX r quoteright 3
+KPX r r -9
+KPX r s -4
+KPX r semicolon -12
+KPX r t 17
+KPX r u -5
+KPX r v 17
+KPX r w 15
+KPX r x 12
+KPX r y 16
+KPX r z 0
+KPX s quoteright -6
+KPX s t -11
+KPX seven colon -55
+KPX seven comma -99
+KPX seven eight -24
+KPX seven five -30
+KPX seven four -76
+KPX seven one -42
+KPX seven period -99
+KPX seven seven -3
+KPX seven six -32
+KPX seven three -22
+KPX seven two -22
+KPX six four -1
+KPX six one -39
+KPX six seven -21
+KPX t S -14
+KPX t a -5
+KPX t aacute -5
+KPX t adieresis -5
+KPX t ae -5
+KPX t aring -5
+KPX t colon -19
+KPX t e -12
+KPX t eacute -12
+KPX t h -6
+KPX t o -13
+KPX t oacute -13
+KPX t odieresis -13
+KPX t quoteright 2
+KPX t semicolon -19
+KPX three four 0
+KPX three one -41
+KPX three seven -23
+KPX two four -46
+KPX two one -37
+KPX two seven -21
+KPX u quoteright 0
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -20
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -15
+KPX v colon -14
+KPX v comma -54
+KPX v e -19
+KPX v eacute -19
+KPX v ecircumflex -19
+KPX v egrave -19
+KPX v g -17
+KPX v hyphen -7
+KPX v l -7
+KPX v o -20
+KPX v oacute -20
+KPX v odieresis -20
+KPX v ograve -20
+KPX v oslash -16
+KPX v period -54
+KPX v s -15
+KPX v semicolon -14
+KPX w a -16
+KPX w aacute -16
+KPX w acircumflex -16
+KPX w adieresis -16
+KPX w ae -16
+KPX w agrave -16
+KPX w aring -16
+KPX w atilde -16
+KPX w c -8
+KPX w colon -16
+KPX w comma -40
+KPX w e -12
+KPX w eacute -12
+KPX w ecircumflex -12
+KPX w egrave -12
+KPX w g -11
+KPX w hyphen 0
+KPX w l -9
+KPX w o -13
+KPX w oacute -13
+KPX w odieresis -13
+KPX w ograve -13
+KPX w oslash -8
+KPX w period -40
+KPX w s -11
+KPX w semicolon -16
+KPX x a -17
+KPX x c -16
+KPX x e -20
+KPX x eacute -20
+KPX x o -21
+KPX x q -17
+KPX y a -21
+KPX y aacute -21
+KPX y acircumflex -21
+KPX y adieresis -21
+KPX y ae -21
+KPX y agrave -21
+KPX y aring -21
+KPX y atilde -21
+KPX y c -16
+KPX y colon -15
+KPX y comma -54
+KPX y e -20
+KPX y eacute -20
+KPX y ecircumflex -20
+KPX y egrave -20
+KPX y g -19
+KPX y hyphen -6
+KPX y l -8
+KPX y o -21
+KPX y oacute -21
+KPX y odieresis -21
+KPX y ograve -21
+KPX y oslash -16
+KPX y period -53
+KPX y s -16
+KPX y semicolon -15
+KPX zero four -2
+KPX zero one -40
+KPX zero seven -28
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uhvro8ac.pfb b/Master/tlpkg/tlgs/lib/fonts/uhvro8ac.pfb
new file mode 100644
index 00000000000..4ff13e5f64d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uhvro8ac.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncb8a.afm b/Master/tlpkg/tlgs/lib/fonts/uncb8a.afm
new file mode 100644
index 00000000000..65a3c60529d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncb8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName CenturySchL-Bold
+FullName Century Schoolbook L Bold
+FamilyName Century Schoolbook L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -103
+UnderlineThickness 90
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -166 -372 1000 1005
+CapHeight 722
+XHeight 473
+Descender -202
+Ascender 737
+StartCharMetrics 316
+C 32 ; WX 287 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 296 ; N exclam ; B 57 -15 244 737 ;
+C 34 ; WX 333 ; N quotedbl ; B -12 416 346 737 ;
+C 35 ; WX 574 ; N numbersign ; B 41 0 533 700 ;
+C 36 ; WX 574 ; N dollar ; B 25 -137 549 801 ;
+C 37 ; WX 833 ; N percent ; B 17 0 821 722 ;
+C 38 ; WX 852 ; N ampersand ; B 39 -16 822 737 ;
+C 39 ; WX 241 ; N quoteright ; B 22 379 219 737 ;
+C 40 ; WX 389 ; N parenleft ; B 72 -118 338 737 ;
+C 41 ; WX 389 ; N parenright ; B 50 -118 316 737 ;
+C 42 ; WX 500 ; N asterisk ; B 56 297 447 737 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 505 ;
+C 44 ; WX 278 ; N comma ; B 39 -186 236 173 ;
+C 45 ; WX 333 ; N hyphen ; B 42 180 291 310 ;
+C 46 ; WX 278 ; N period ; B 45 -15 233 173 ;
+C 47 ; WX 278 ; N slash ; B -23 -15 302 737 ;
+C 48 ; WX 574 ; N zero ; B 27 -14 546 708 ;
+C 49 ; WX 574 ; N one ; B 83 0 491 708 ;
+C 50 ; WX 574 ; N two ; B 19 -4 531 708 ;
+C 51 ; WX 574 ; N three ; B 24 -14 530 708 ;
+C 52 ; WX 574 ; N four ; B 19 0 546 708 ;
+C 53 ; WX 574 ; N five ; B 31 -14 535 708 ;
+C 54 ; WX 574 ; N six ; B 29 -14 549 708 ;
+C 55 ; WX 574 ; N seven ; B 45 -14 546 708 ;
+C 56 ; WX 574 ; N eight ; B 27 -14 546 708 ;
+C 57 ; WX 574 ; N nine ; B 25 -14 545 708 ;
+C 58 ; WX 278 ; N colon ; B 57 -15 244 481 ;
+C 59 ; WX 278 ; N semicolon ; B 47 -185 244 481 ;
+C 60 ; WX 606 ; N less ; B 49 -25 558 529 ;
+C 61 ; WX 606 ; N equal ; B 51 92 555 413 ;
+C 62 ; WX 606 ; N greater ; B 48 -25 557 529 ;
+C 63 ; WX 500 ; N question ; B 23 -15 476 737 ;
+C 64 ; WX 747 ; N at ; B 24 -15 722 737 ;
+C 65 ; WX 759 ; N A ; B -18 0 778 737 ;
+C 66 ; WX 778 ; N B ; B 17 0 736 722 ;
+C 67 ; WX 778 ; N C ; B 40 -15 723 737 ;
+C 68 ; WX 833 ; N D ; B 19 0 793 722 ;
+C 69 ; WX 759 ; N E ; B 16 0 707 722 ;
+C 70 ; WX 722 ; N F ; B 22 0 690 722 ;
+C 71 ; WX 833 ; N G ; B 39 -15 817 737 ;
+C 72 ; WX 870 ; N H ; B 20 0 850 722 ;
+C 73 ; WX 444 ; N I ; B 28 0 417 722 ;
+C 74 ; WX 648 ; N J ; B 4 -15 639 722 ;
+C 75 ; WX 815 ; N K ; B 15 0 818 722 ;
+C 76 ; WX 722 ; N L ; B 19 0 701 722 ;
+C 77 ; WX 981 ; N M ; B 9 0 965 722 ;
+C 78 ; WX 833 ; N N ; B 16 -7 833 722 ;
+C 79 ; WX 833 ; N O ; B 39 -15 794 737 ;
+C 80 ; WX 759 ; N P ; B 24 0 735 722 ;
+C 81 ; WX 833 ; N Q ; B 38 -188 808 737 ;
+C 82 ; WX 815 ; N R ; B 20 -15 817 722 ;
+C 83 ; WX 667 ; N S ; B 51 -15 633 737 ;
+C 84 ; WX 722 ; N T ; B 15 0 707 722 ;
+C 85 ; WX 833 ; N U ; B 15 -15 824 722 ;
+C 86 ; WX 759 ; N V ; B -18 -15 778 722 ;
+C 87 ; WX 981 ; N W ; B 6 -15 973 722 ;
+C 88 ; WX 722 ; N X ; B -12 0 735 722 ;
+C 89 ; WX 722 ; N Y ; B -12 0 735 722 ;
+C 90 ; WX 667 ; N Z ; B 24 0 634 722 ;
+C 91 ; WX 389 ; N bracketleft ; B 84 -108 339 722 ;
+C 92 ; WX 606 ; N backslash ; B 50 0 555 737 ;
+C 93 ; WX 389 ; N bracketright ; B 31 -108 286 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -148 500 -58 ;
+C 96 ; WX 241 ; N quoteleft ; B 22 388 219 747 ;
+C 97 ; WX 611 ; N a ; B 36 -15 597 488 ;
+C 98 ; WX 648 ; N b ; B 0 -15 612 737 ;
+C 99 ; WX 556 ; N c ; B 31 -15 527 488 ;
+C 100 ; WX 667 ; N d ; B 37 -15 654 737 ;
+C 101 ; WX 574 ; N e ; B 32 -15 540 488 ;
+C 102 ; WX 389 ; N f ; B 14 0 464 733 ;
+C 103 ; WX 611 ; N g ; B 30 -202 623 538 ;
+C 104 ; WX 685 ; N h ; B 16 0 666 737 ;
+C 105 ; WX 370 ; N i ; B 28 0 341 737 ;
+C 106 ; WX 352 ; N j ; B -82 -202 272 737 ;
+C 107 ; WX 667 ; N k ; B 12 0 660 737 ;
+C 108 ; WX 352 ; N l ; B 16 0 331 737 ;
+C 109 ; WX 963 ; N m ; B 20 0 942 488 ;
+C 110 ; WX 685 ; N n ; B 20 0 668 488 ;
+C 111 ; WX 611 ; N o ; B 31 -15 579 488 ;
+C 112 ; WX 667 ; N p ; B 18 -202 632 488 ;
+C 113 ; WX 648 ; N q ; B 34 -202 640 488 ;
+C 114 ; WX 519 ; N r ; B 18 0 517 488 ;
+C 115 ; WX 500 ; N s ; B 38 -15 466 488 ;
+C 116 ; WX 426 ; N t ; B 23 -15 405 671 ;
+C 117 ; WX 685 ; N u ; B 13 -15 667 473 ;
+C 118 ; WX 611 ; N v ; B 12 -14 598 473 ;
+C 119 ; WX 889 ; N w ; B 19 -14 876 473 ;
+C 120 ; WX 611 ; N x ; B 13 0 598 473 ;
+C 121 ; WX 611 ; N y ; B 10 -206 598 473 ;
+C 122 ; WX 537 ; N z ; B 35 0 495 473 ;
+C 123 ; WX 389 ; N braceleft ; B 84 -108 343 722 ;
+C 124 ; WX 606 ; N bar ; B 243 0 362 722 ;
+C 125 ; WX 389 ; N braceright ; B 31 -108 290 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 160 555 335 ;
+C 161 ; WX 296 ; N exclamdown ; B 53 -203 241 549 ;
+C 162 ; WX 574 ; N cent ; B 36 -107 534 567 ;
+C 163 ; WX 574 ; N sterling ; B 19 -14 561 708 ;
+C 164 ; WX 167 ; N fraction ; B -166 0 333 705 ;
+C 165 ; WX 574 ; N yen ; B 3 0 571 722 ;
+C 166 ; WX 574 ; N florin ; B 14 -195 549 746 ;
+C 167 ; WX 500 ; N section ; B 63 -87 438 737 ;
+C 168 ; WX 574 ; N currency ; B 33 97 540 604 ;
+C 169 ; WX 241 ; N quotesingle ; B 52 416 188 737 ;
+C 170 ; WX 481 ; N quotedblleft ; B 22 388 457 747 ;
+C 171 ; WX 500 ; N guillemotleft ; B 49 100 442 419 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 72 100 266 419 ;
+C 173 ; WX 333 ; N guilsinglright ; B 74 100 269 419 ;
+C 174 ; WX 685 ; N fi ; B 15 0 667 733 ;
+C 175 ; WX 685 ; N fl ; B 15 0 666 737 ;
+C 177 ; WX 500 ; N endash ; B 0 191 500 296 ;
+C 178 ; WX 500 ; N dagger ; B 44 -87 451 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B 47 -87 458 737 ;
+C 180 ; WX 278 ; N periodcentered ; B 46 160 234 348 ;
+C 182 ; WX 747 ; N paragraph ; B 35 -144 713 722 ;
+C 183 ; WX 606 ; N bullet ; B 131 180 475 524 ;
+C 184 ; WX 241 ; N quotesinglbase ; B 22 -186 219 173 ;
+C 185 ; WX 481 ; N quotedblbase ; B 23 -186 458 173 ;
+C 186 ; WX 481 ; N quotedblright ; B 23 379 458 737 ;
+C 187 ; WX 500 ; N guillemotright ; B 56 100 451 419 ;
+C 188 ; WX 1000 ; N ellipsis ; B 73 -15 927 173 ;
+C 189 ; WX 1000 ; N perthousand ; B 8 -1 994 701 ;
+C 191 ; WX 500 ; N questiondown ; B 23 -203 476 549 ;
+C 193 ; WX 333 ; N grave ; B 2 545 249 734 ;
+C 194 ; WX 333 ; N acute ; B 84 545 331 734 ;
+C 195 ; WX 333 ; N circumflex ; B -8 544 343 722 ;
+C 196 ; WX 333 ; N tilde ; B -23 566 358 705 ;
+C 197 ; WX 333 ; N macron ; B -5 583 339 663 ;
+C 198 ; WX 333 ; N breve ; B 9 545 324 712 ;
+C 199 ; WX 333 ; N dotaccent ; B 96 552 237 693 ;
+C 200 ; WX 333 ; N dieresis ; B -11 552 345 693 ;
+C 202 ; WX 333 ; N ring ; B 59 545 274 760 ;
+C 203 ; WX 333 ; N cedilla ; B 17 -222 251 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 68 545 365 733 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -170 246 0 ;
+C 207 ; WX 333 ; N caron ; B -8 544 343 722 ;
+C 208 ; WX 1000 ; N emdash ; B 0 191 1000 296 ;
+C 225 ; WX 981 ; N AE ; B -29 0 963 722 ;
+C 227 ; WX 367 ; N ordfeminine ; B 1 293 365 737 ;
+C 232 ; WX 722 ; N Lslash ; B 19 0 701 722 ;
+C 233 ; WX 833 ; N Oslash ; B 39 -40 793 762 ;
+C 234 ; WX 1000 ; N OE ; B 5 0 987 722 ;
+C 235 ; WX 367 ; N ordmasculine ; B 1 293 357 737 ;
+C 241 ; WX 870 ; N ae ; B 29 -15 837 488 ;
+C 245 ; WX 370 ; N dotlessi ; B 28 0 341 473 ;
+C 248 ; WX 352 ; N lslash ; B 16 0 331 737 ;
+C 249 ; WX 611 ; N oslash ; B 31 -90 579 563 ;
+C 250 ; WX 907 ; N oe ; B 35 -15 872 488 ;
+C 251 ; WX 611 ; N germandbls ; B 6 -15 575 737 ;
+C -1 ; WX 833 ; N Udieresis ; B 15 -15 824 938 ;
+C -1 ; WX 833 ; N Uacute ; B 15 -15 824 979 ;
+C -1 ; WX 667 ; N Scedilla ; B 51 -222 633 737 ;
+C -1 ; WX 722 ; N Tcaron ; B 15 0 707 967 ;
+C -1 ; WX 667 ; N Scaron ; B 51 -15 633 968 ;
+C -1 ; WX 815 ; N Rcaron ; B 20 -15 817 967 ;
+C -1 ; WX 815 ; N Racute ; B 20 -15 817 979 ;
+C -1 ; WX 667 ; N Sacute ; B 51 -15 633 979 ;
+C -1 ; WX 833 ; N Otilde ; B 39 -15 794 936 ;
+C -1 ; WX 685 ; N ucircumflex ; B 13 -15 667 722 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 39 -15 794 978 ;
+C -1 ; WX 833 ; N Uhungarumlaut ; B 15 -15 824 978 ;
+C -1 ; WX 722 ; N Yacute ; B -12 0 735 979 ;
+C -1 ; WX 833 ; N Eth ; B 19 0 793 722 ;
+C -1 ; WX 833 ; N Dcroat ; B 19 0 793 722 ;
+C -1 ; WX 667 ; N Zacute ; B 24 0 634 979 ;
+C -1 ; WX 833 ; N Uring ; B 15 -15 824 1005 ;
+C -1 ; WX 611 ; N gbreve ; B 30 -202 623 712 ;
+C -1 ; WX 574 ; N eogonek ; B 32 -170 540 488 ;
+C -1 ; WX 574 ; N edotaccent ; B 32 -15 540 693 ;
+C -1 ; WX 574 ; N ecaron ; B 32 -15 540 722 ;
+C -1 ; WX 833 ; N Ugrave ; B 15 -15 824 979 ;
+C -1 ; WX 759 ; N Thorn ; B 24 0 735 722 ;
+C -1 ; WX 574 ; N eacute ; B 32 -15 540 734 ;
+C -1 ; WX 574 ; N edieresis ; B 32 -15 540 693 ;
+C -1 ; WX 747 ; N dcaron ; B 37 -15 767 737 ;
+C -1 ; WX 556 ; N ccedilla ; B 31 -222 527 488 ;
+C -1 ; WX 556 ; N ccaron ; B 31 -15 527 722 ;
+C -1 ; WX 556 ; N cacute ; B 31 -15 527 734 ;
+C -1 ; WX 611 ; N aogonek ; B 36 -170 631 488 ;
+C -1 ; WX 611 ; N aring ; B 36 -15 597 760 ;
+C -1 ; WX 611 ; N atilde ; B 36 -15 597 705 ;
+C -1 ; WX 611 ; N abreve ; B 36 -15 597 712 ;
+C -1 ; WX 574 ; N egrave ; B 32 -15 540 734 ;
+C -1 ; WX 611 ; N agrave ; B 36 -15 597 734 ;
+C -1 ; WX 611 ; N aacute ; B 36 -15 597 734 ;
+C -1 ; WX 611 ; N adieresis ; B 36 -15 597 693 ;
+C -1 ; WX 833 ; N Uogonek ; B 15 -170 824 722 ;
+C -1 ; WX 685 ; N ugrave ; B 13 -15 667 734 ;
+C -1 ; WX 685 ; N uacute ; B 13 -15 667 734 ;
+C -1 ; WX 685 ; N udieresis ; B 13 -15 667 693 ;
+C -1 ; WX 446 ; N tcaron ; B 23 -15 466 737 ;
+C -1 ; WX 500 ; N scommaaccent ; B 38 -372 466 488 ;
+C -1 ; WX 667 ; N Zcaron ; B 24 0 634 968 ;
+C -1 ; WX 574 ; N ecircumflex ; B 32 -15 540 722 ;
+C -1 ; WX 833 ; N Ucircumflex ; B 15 -15 824 968 ;
+C -1 ; WX 611 ; N acircumflex ; B 36 -15 597 722 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 24 0 634 938 ;
+C -1 ; WX 500 ; N scaron ; B 38 -15 466 722 ;
+C -1 ; WX 759 ; N Amacron ; B -18 0 778 908 ;
+C -1 ; WX 500 ; N sacute ; B 38 -15 466 734 ;
+C -1 ; WX 722 ; N Tcommaaccent ; B 15 -372 707 722 ;
+C -1 ; WX 722 ; N Ydieresis ; B -12 0 735 938 ;
+C -1 ; WX 667 ; N thorn ; B 18 -202 632 736 ;
+C -1 ; WX 759 ; N Emacron ; B 16 0 707 908 ;
+C -1 ; WX 833 ; N Ograve ; B 39 -15 794 979 ;
+C -1 ; WX 833 ; N Oacute ; B 39 -15 794 979 ;
+C -1 ; WX 833 ; N Odieresis ; B 39 -15 794 938 ;
+C -1 ; WX 833 ; N Ntilde ; B 16 -7 833 936 ;
+C -1 ; WX 833 ; N Ncaron ; B 16 -7 833 967 ;
+C -1 ; WX 833 ; N Nacute ; B 16 -7 833 979 ;
+C -1 ; WX 722 ; N Lcaron ; B 19 0 701 737 ;
+C -1 ; WX 722 ; N Lacute ; B 19 0 701 979 ;
+C -1 ; WX 444 ; N Idotaccent ; B 28 0 417 938 ;
+C -1 ; WX 519 ; N racute ; B 18 0 517 734 ;
+C -1 ; WX 444 ; N Icircumflex ; B 28 0 417 968 ;
+C -1 ; WX 611 ; N ohungarumlaut ; B 31 -15 579 733 ;
+C -1 ; WX 611 ; N otilde ; B 31 -15 579 705 ;
+C -1 ; WX 574 ; N Euro ; B 3 -15 563 717 ;
+C -1 ; WX 611 ; N ocircumflex ; B 31 -15 579 722 ;
+C -1 ; WX 344 ; N onesuperior ; B 39 284 304 708 ;
+C -1 ; WX 344 ; N twosuperior ; B 5 281 338 708 ;
+C -1 ; WX 344 ; N threesuperior ; B 8 275 336 708 ;
+C -1 ; WX 444 ; N Igrave ; B 28 0 417 979 ;
+C -1 ; WX 444 ; N Iacute ; B 28 0 417 979 ;
+C -1 ; WX 444 ; N Imacron ; B 28 0 417 908 ;
+C -1 ; WX 444 ; N Iogonek ; B 28 -170 485 722 ;
+C -1 ; WX 444 ; N Idieresis ; B 28 0 417 938 ;
+C -1 ; WX 833 ; N Gbreve ; B 39 -15 817 957 ;
+C -1 ; WX 833 ; N Umacron ; B 15 -15 824 908 ;
+C -1 ; WX 815 ; N Kcommaaccent ; B 15 -372 818 722 ;
+C -1 ; WX 611 ; N ograve ; B 31 -15 579 734 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 51 -372 633 737 ;
+C -1 ; WX 759 ; N Eogonek ; B 16 -170 763 722 ;
+C -1 ; WX 611 ; N oacute ; B 31 -15 579 734 ;
+C -1 ; WX 759 ; N Edotaccent ; B 16 0 707 938 ;
+C -1 ; WX 370 ; N iogonek ; B 28 -170 409 737 ;
+C -1 ; WX 611 ; N gcommaaccent ; B 30 -202 623 837 ;
+C -1 ; WX 611 ; N odieresis ; B 31 -15 579 693 ;
+C -1 ; WX 685 ; N ntilde ; B 20 0 668 705 ;
+C -1 ; WX 685 ; N ncaron ; B 20 0 668 722 ;
+C -1 ; WX 759 ; N Ecaron ; B 16 0 707 967 ;
+C -1 ; WX 759 ; N Ecircumflex ; B 16 0 707 968 ;
+C -1 ; WX 500 ; N scedilla ; B 38 -222 466 488 ;
+C -1 ; WX 519 ; N rcaron ; B 18 0 517 722 ;
+C -1 ; WX 759 ; N Egrave ; B 16 0 707 979 ;
+C -1 ; WX 759 ; N Eacute ; B 16 0 707 979 ;
+C -1 ; WX 833 ; N Gcommaaccent ; B 39 -372 817 737 ;
+C -1 ; WX 815 ; N Rcommaaccent ; B 20 -372 817 722 ;
+C -1 ; WX 759 ; N Edieresis ; B 16 0 707 938 ;
+C -1 ; WX 685 ; N nacute ; B 20 0 668 734 ;
+C -1 ; WX 685 ; N uogonek ; B 13 -170 735 473 ;
+C -1 ; WX 685 ; N umacron ; B 13 -15 667 663 ;
+C -1 ; WX 833 ; N Dcaron ; B 19 0 793 967 ;
+C -1 ; WX 436 ; N lcaron ; B 16 0 456 737 ;
+C -1 ; WX 778 ; N Ccaron ; B 40 -15 723 967 ;
+C -1 ; WX 778 ; N Cacute ; B 40 -15 723 979 ;
+C -1 ; WX 778 ; N Ccedilla ; B 40 -224 723 737 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 759 ; N Aogonek ; B -18 -170 846 737 ;
+C -1 ; WX 606 ; N minus ; B 51 195 555 310 ;
+C -1 ; WX 606 ; N multiply ; B 51 1 555 505 ;
+C -1 ; WX 606 ; N divide ; B 51 -31 555 536 ;
+C -1 ; WX 759 ; N Aring ; B -18 0 778 990 ;
+C -1 ; WX 1000 ; N trademark ; B 30 302 970 722 ;
+C -1 ; WX 519 ; N rcommaaccent ; B 18 -372 517 488 ;
+C -1 ; WX 352 ; N lacute ; B 16 0 341 979 ;
+C -1 ; WX 611 ; N omacron ; B 31 -15 579 663 ;
+C -1 ; WX 759 ; N Atilde ; B -18 0 778 936 ;
+C -1 ; WX 370 ; N icircumflex ; B 11 0 362 722 ;
+C -1 ; WX 370 ; N igrave ; B 21 0 341 734 ;
+C -1 ; WX 685 ; N ncommaaccent ; B 20 -372 668 488 ;
+C -1 ; WX 352 ; N lcommaaccent ; B 16 -372 331 737 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 610 ;
+C -1 ; WX 861 ; N onehalf ; B 39 -2 832 722 ;
+C -1 ; WX 861 ; N onequarter ; B 39 0 822 722 ;
+C -1 ; WX 861 ; N threequarters ; B 8 0 822 722 ;
+C -1 ; WX 370 ; N iacute ; B 28 0 350 734 ;
+C -1 ; WX 759 ; N Abreve ; B -18 0 778 957 ;
+C -1 ; WX 667 ; N kcommaaccent ; B 12 -372 660 737 ;
+C -1 ; WX 833 ; N Omacron ; B 39 -15 794 908 ;
+C -1 ; WX 370 ; N imacron ; B 14 0 358 663 ;
+C -1 ; WX 574 ; N emacron ; B 32 -15 540 663 ;
+C -1 ; WX 611 ; N amacron ; B 36 -15 597 663 ;
+C -1 ; WX 426 ; N tcommaaccent ; B 23 -372 405 671 ;
+C -1 ; WX 611 ; N ydieresis ; B 10 -206 598 693 ;
+C -1 ; WX 537 ; N zdotaccent ; B 35 0 495 693 ;
+C -1 ; WX 537 ; N zcaron ; B 35 0 495 722 ;
+C -1 ; WX 537 ; N zacute ; B 35 0 495 734 ;
+C -1 ; WX 611 ; N yacute ; B 10 -206 598 734 ;
+C -1 ; WX 685 ; N uhungarumlaut ; B 13 -15 667 733 ;
+C -1 ; WX 611 ; N eth ; B 31 -15 579 793 ;
+C -1 ; WX 685 ; N uring ; B 13 -15 667 760 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 39 -15 794 968 ;
+C -1 ; WX 333 ; N commaaccent ; B 78 -372 255 -50 ;
+C -1 ; WX 747 ; N copyright ; B 5 -15 741 721 ;
+C -1 ; WX 747 ; N registered ; B 5 -15 741 721 ;
+C -1 ; WX 759 ; N Acircumflex ; B -18 0 778 968 ;
+C -1 ; WX 370 ; N idieresis ; B 8 0 364 693 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -51 555 557 ;
+C -1 ; WX 549 ; N radical ; B -34 -35 548 918 ;
+C -1 ; WX 759 ; N Agrave ; B -18 0 778 979 ;
+C -1 ; WX 759 ; N Aacute ; B -18 0 778 979 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 698 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 557 698 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 0 555 310 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 13 -11 476 753 ;
+C -1 ; WX 833 ; N Ncommaaccent ; B 16 -372 833 722 ;
+C -1 ; WX 667 ; N dcroat ; B 37 -15 654 737 ;
+C -1 ; WX 606 ; N brokenbar ; B 243 0 362 722 ;
+C -1 ; WX 722 ; N Lcommaaccent ; B 19 -372 701 722 ;
+C -1 ; WX 759 ; N Adieresis ; B -18 0 778 938 ;
+C -1 ; WX 685 ; N mu ; B 13 -219 667 473 ;
+C -1 ; WX 287 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -34
+KPX A Ccedilla -37
+KPX A G -31
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -34
+KPX A T -31
+KPX A U -40
+KPX A Uacute -40
+KPX A Ucircumflex -40
+KPX A Udieresis -40
+KPX A Ugrave -40
+KPX A V -87
+KPX A W -82
+KPX A Y -31
+KPX A a 22
+KPX A b 9
+KPX A c -3
+KPX A ccedilla -6
+KPX A comma 35
+KPX A d -1
+KPX A e -5
+KPX A g 21
+KPX A guillemotleft -39
+KPX A guilsinglleft -51
+KPX A hyphen -2
+KPX A o -6
+KPX A period 31
+KPX A q 3
+KPX A quotedblright -53
+KPX A quoteright -53
+KPX A t -8
+KPX A u -11
+KPX A v -54
+KPX A w -54
+KPX A y -60
+KPX Aacute C -34
+KPX Aacute G -31
+KPX Aacute O -35
+KPX Aacute Q -34
+KPX Aacute T -31
+KPX Aacute U -40
+KPX Aacute V -87
+KPX Aacute W -82
+KPX Aacute Y -31
+KPX Aacute a 22
+KPX Aacute b 9
+KPX Aacute c -3
+KPX Aacute comma 35
+KPX Aacute d -1
+KPX Aacute e -5
+KPX Aacute g 21
+KPX Aacute guillemotleft -39
+KPX Aacute guilsinglleft -51
+KPX Aacute hyphen -2
+KPX Aacute o -6
+KPX Aacute period 31
+KPX Aacute q 3
+KPX Aacute quoteright -53
+KPX Aacute t -8
+KPX Aacute u -11
+KPX Aacute v -54
+KPX Aacute w -54
+KPX Aacute y -60
+KPX Acircumflex C -34
+KPX Acircumflex G -31
+KPX Acircumflex O -35
+KPX Acircumflex Q -34
+KPX Acircumflex T -31
+KPX Acircumflex U -40
+KPX Acircumflex V -87
+KPX Acircumflex W -82
+KPX Acircumflex Y -31
+KPX Acircumflex comma 35
+KPX Acircumflex period 31
+KPX Adieresis C -34
+KPX Adieresis G -31
+KPX Adieresis O -35
+KPX Adieresis Q -34
+KPX Adieresis T -31
+KPX Adieresis U -40
+KPX Adieresis V -87
+KPX Adieresis W -82
+KPX Adieresis Y -31
+KPX Adieresis a 22
+KPX Adieresis b 9
+KPX Adieresis c -3
+KPX Adieresis comma 35
+KPX Adieresis d -1
+KPX Adieresis g 21
+KPX Adieresis guillemotleft -39
+KPX Adieresis guilsinglleft -51
+KPX Adieresis hyphen -2
+KPX Adieresis o -6
+KPX Adieresis period 31
+KPX Adieresis q 3
+KPX Adieresis quotedblright -53
+KPX Adieresis quoteright -53
+KPX Adieresis t -8
+KPX Adieresis u -11
+KPX Adieresis v -54
+KPX Adieresis w -54
+KPX Adieresis y -60
+KPX Agrave C -34
+KPX Agrave G -31
+KPX Agrave O -35
+KPX Agrave Q -34
+KPX Agrave T -31
+KPX Agrave U -40
+KPX Agrave V -87
+KPX Agrave W -82
+KPX Agrave Y -31
+KPX Agrave comma 35
+KPX Agrave period 31
+KPX Aring C -34
+KPX Aring G -31
+KPX Aring O -35
+KPX Aring Q -34
+KPX Aring T -31
+KPX Aring U -40
+KPX Aring V -87
+KPX Aring W -82
+KPX Aring Y -31
+KPX Aring a 22
+KPX Aring b 9
+KPX Aring c -3
+KPX Aring comma 35
+KPX Aring d -1
+KPX Aring e -5
+KPX Aring g 21
+KPX Aring guillemotleft -39
+KPX Aring guilsinglleft -51
+KPX Aring hyphen -2
+KPX Aring o -6
+KPX Aring period 31
+KPX Aring q 3
+KPX Aring quotedblright -53
+KPX Aring quoteright -53
+KPX Aring t -8
+KPX Aring u -11
+KPX Aring v -54
+KPX Aring w -54
+KPX Aring y -60
+KPX Atilde C -34
+KPX Atilde G -31
+KPX Atilde O -35
+KPX Atilde Q -34
+KPX Atilde T -31
+KPX Atilde U -40
+KPX Atilde V -87
+KPX Atilde W -82
+KPX Atilde Y -31
+KPX Atilde comma 35
+KPX Atilde period 31
+KPX B A 1
+KPX B AE 3
+KPX B Aacute 1
+KPX B Acircumflex 1
+KPX B Adieresis 1
+KPX B Aring 1
+KPX B Atilde 1
+KPX B O -7
+KPX B OE 7
+KPX B Oacute -7
+KPX B Ocircumflex -7
+KPX B Odieresis -7
+KPX B Ograve -7
+KPX B Oslash -6
+KPX B V -14
+KPX B W -30
+KPX B Y -13
+KPX C A -27
+KPX C AE -26
+KPX C Aacute -27
+KPX C Adieresis -27
+KPX C Aring -27
+KPX C H -9
+KPX C K -7
+KPX C O -10
+KPX C Oacute -10
+KPX C Odieresis -10
+KPX Ccedilla A -28
+KPX D A -32
+KPX D Aacute -32
+KPX D Acircumflex -32
+KPX D Adieresis -32
+KPX D Agrave -32
+KPX D Aring -32
+KPX D Atilde -32
+KPX D J 7
+KPX D T 8
+KPX D V -33
+KPX D W -42
+KPX D X -30
+KPX D Y -32
+KPX F A -79
+KPX F Aacute -79
+KPX F Acircumflex -79
+KPX F Adieresis -79
+KPX F Agrave -79
+KPX F Aring -79
+KPX F Atilde -79
+KPX F J -55
+KPX F O -2
+KPX F Odieresis -2
+KPX F a -32
+KPX F aacute -32
+KPX F adieresis -32
+KPX F ae -30
+KPX F aring -32
+KPX F comma -80
+KPX F e -45
+KPX F eacute -45
+KPX F hyphen -40
+KPX F i 5
+KPX F j 11
+KPX F o -46
+KPX F oacute -46
+KPX F odieresis -46
+KPX F oe -48
+KPX F oslash -51
+KPX F period -82
+KPX F r 10
+KPX F u 12
+KPX G A -4
+KPX G AE 0
+KPX G Aacute -4
+KPX G Acircumflex -4
+KPX G Adieresis -4
+KPX G Agrave -4
+KPX G Aring -4
+KPX G Atilde -4
+KPX G T -21
+KPX G V -7
+KPX G W -20
+KPX G Y -10
+KPX J A -44
+KPX J AE -43
+KPX J Adieresis -44
+KPX J Aring -44
+KPX K C -45
+KPX K G -44
+KPX K O -45
+KPX K OE -31
+KPX K Oacute -45
+KPX K Odieresis -45
+KPX K S 12
+KPX K T 13
+KPX K a 12
+KPX K adieresis 12
+KPX K ae 15
+KPX K aring 12
+KPX K e -18
+KPX K hyphen -25
+KPX K o -20
+KPX K oacute -20
+KPX K odieresis -20
+KPX K u -23
+KPX K udieresis -23
+KPX K y -84
+KPX L A 32
+KPX L AE 37
+KPX L Aacute 32
+KPX L Adieresis 32
+KPX L Aring 32
+KPX L C 5
+KPX L Ccedilla 4
+KPX L G 5
+KPX L O 5
+KPX L Oacute 5
+KPX L Ocircumflex 5
+KPX L Odieresis 5
+KPX L Ograve 5
+KPX L Otilde 5
+KPX L S 3
+KPX L T -56
+KPX L U -31
+KPX L Udieresis -31
+KPX L V -74
+KPX L W -68
+KPX L Y -56
+KPX L hyphen 44
+KPX L quotedblright -22
+KPX L quoteright -21
+KPX L u -4
+KPX L udieresis -4
+KPX L y -34
+KPX N A -7
+KPX N AE -1
+KPX N Aacute -7
+KPX N Adieresis -7
+KPX N Aring -7
+KPX N C -14
+KPX N Ccedilla -15
+KPX N G -13
+KPX N O -15
+KPX N Oacute -15
+KPX N Odieresis -15
+KPX N a -19
+KPX N aacute -19
+KPX N adieresis -19
+KPX N ae -15
+KPX N aring -19
+KPX N comma 2
+KPX N e -18
+KPX N eacute -18
+KPX N o -18
+KPX N oacute -18
+KPX N odieresis -18
+KPX N oslash -18
+KPX N period 0
+KPX N u -26
+KPX N udieresis -26
+KPX O A -36
+KPX O AE -35
+KPX O Aacute -36
+KPX O Adieresis -36
+KPX O Aring -36
+KPX O T 7
+KPX O V -35
+KPX O W -45
+KPX O X -32
+KPX O Y -33
+KPX Oacute A -36
+KPX Oacute T 7
+KPX Oacute V -35
+KPX Oacute W -45
+KPX Oacute Y -33
+KPX Ocircumflex T 7
+KPX Ocircumflex V -35
+KPX Ocircumflex Y -33
+KPX Odieresis A -36
+KPX Odieresis T 7
+KPX Odieresis V -35
+KPX Odieresis W -45
+KPX Odieresis X -32
+KPX Odieresis Y -33
+KPX Ograve T 7
+KPX Ograve V -35
+KPX Ograve Y -33
+KPX Oslash A -37
+KPX Otilde T 7
+KPX Otilde V -35
+KPX Otilde Y -33
+KPX P A -81
+KPX P AE -69
+KPX P Aacute -81
+KPX P Adieresis -81
+KPX P Aring -81
+KPX P J -50
+KPX P a -22
+KPX P aacute -22
+KPX P adieresis -22
+KPX P ae -20
+KPX P aring -22
+KPX P comma -90
+KPX P e -32
+KPX P eacute -32
+KPX P hyphen -35
+KPX P o -32
+KPX P oacute -32
+KPX P odieresis -32
+KPX P oe -34
+KPX P oslash -37
+KPX P period -92
+KPX R C -1
+KPX R Ccedilla -3
+KPX R G 0
+KPX R O -1
+KPX R OE 14
+KPX R Oacute -1
+KPX R Odieresis -1
+KPX R T -16
+KPX R U -22
+KPX R Udieresis -22
+KPX R V -18
+KPX R W -34
+KPX R Y -16
+KPX R a 16
+KPX R aacute 16
+KPX R adieresis 16
+KPX R ae 20
+KPX R aring 16
+KPX R e 15
+KPX R eacute 15
+KPX R hyphen 31
+KPX R o 16
+KPX R oacute 16
+KPX R odieresis 16
+KPX R oe 13
+KPX R u -9
+KPX R uacute -9
+KPX R udieresis -9
+KPX R y -25
+KPX S A 0
+KPX S AE 0
+KPX S Aacute 0
+KPX S Adieresis 0
+KPX S Aring 0
+KPX S T -2
+KPX S V 10
+KPX S W -2
+KPX S Y 7
+KPX S t -5
+KPX T A -31
+KPX T AE -26
+KPX T Aacute -31
+KPX T Acircumflex -31
+KPX T Adieresis -31
+KPX T Agrave -31
+KPX T Aring -31
+KPX T Atilde -31
+KPX T C 8
+KPX T G 8
+KPX T J -52
+KPX T O 7
+KPX T OE 23
+KPX T Oacute 7
+KPX T Ocircumflex 7
+KPX T Odieresis 7
+KPX T Ograve 7
+KPX T Oslash 8
+KPX T Otilde 7
+KPX T S 4
+KPX T V 34
+KPX T W 22
+KPX T Y 31
+KPX T a -20
+KPX T ae -17
+KPX T c -38
+KPX T colon -4
+KPX T comma -60
+KPX T e -36
+KPX T g -32
+KPX T guillemotleft -109
+KPX T guilsinglleft -121
+KPX T hyphen -74
+KPX T i 13
+KPX T j 20
+KPX T o -37
+KPX T oslash -43
+KPX T period -64
+KPX T r 18
+KPX T s -14
+KPX T semicolon -4
+KPX T u 21
+KPX T v 21
+KPX T w 18
+KPX T y 20
+KPX U A -45
+KPX U AE -43
+KPX U Aacute -45
+KPX U Acircumflex -45
+KPX U Adieresis -45
+KPX U Aring -45
+KPX U Atilde -45
+KPX U comma -23
+KPX U m -34
+KPX U n -34
+KPX U p -33
+KPX U period -25
+KPX U r -33
+KPX Uacute A -45
+KPX Uacute comma -23
+KPX Uacute m -34
+KPX Uacute n -34
+KPX Uacute p -33
+KPX Uacute period -25
+KPX Uacute r -33
+KPX Ucircumflex A -45
+KPX Udieresis A -45
+KPX Udieresis b 30
+KPX Udieresis comma -23
+KPX Udieresis m -34
+KPX Udieresis n -34
+KPX Udieresis p -33
+KPX Udieresis period -25
+KPX Udieresis r -33
+KPX Ugrave A -45
+KPX V A -101
+KPX V AE -41
+KPX V Aacute -101
+KPX V Acircumflex -101
+KPX V Adieresis -101
+KPX V Agrave -101
+KPX V Aring -101
+KPX V Atilde -101
+KPX V C -34
+KPX V G -35
+KPX V O -34
+KPX V Oacute -34
+KPX V Ocircumflex -34
+KPX V Odieresis -34
+KPX V Ograve -34
+KPX V Oslash -39
+KPX V Otilde -34
+KPX V S -1
+KPX V T 34
+KPX V a -85
+KPX V ae -82
+KPX V colon -74
+KPX V comma -90
+KPX V e -85
+KPX V g -85
+KPX V guillemotleft -92
+KPX V guilsinglleft -103
+KPX V hyphen -60
+KPX V i -2
+KPX V o -85
+KPX V oslash -85
+KPX V period -93
+KPX V r -48
+KPX V semicolon -73
+KPX V u -45
+KPX V y -46
+KPX W A -85
+KPX W AE -55
+KPX W Aacute -85
+KPX W Acircumflex -85
+KPX W Adieresis -85
+KPX W Agrave -85
+KPX W Aring -85
+KPX W Atilde -85
+KPX W C -47
+KPX W G -46
+KPX W O -48
+KPX W Oacute -48
+KPX W Ocircumflex -48
+KPX W Odieresis -48
+KPX W Ograve -48
+KPX W Oslash -46
+KPX W Otilde -48
+KPX W S -19
+KPX W T 21
+KPX W a -70
+KPX W ae -66
+KPX W colon -62
+KPX W comma -67
+KPX W e -68
+KPX W g -69
+KPX W guillemotleft -76
+KPX W guilsinglleft -87
+KPX W hyphen -44
+KPX W i -17
+KPX W o -68
+KPX W oslash -68
+KPX W period -70
+KPX W r -42
+KPX W semicolon -59
+KPX W u -40
+KPX W y -40
+KPX X C -37
+KPX X O -38
+KPX X Odieresis -38
+KPX X Q -37
+KPX X a 19
+KPX X e -8
+KPX X hyphen -26
+KPX X o -9
+KPX X u -14
+KPX X y -80
+KPX Y A -31
+KPX Y AE -26
+KPX Y Aacute -31
+KPX Y Acircumflex -31
+KPX Y Adieresis -31
+KPX Y Agrave -31
+KPX Y Aring -31
+KPX Y Atilde -31
+KPX Y C -33
+KPX Y G -34
+KPX Y O -33
+KPX Y Oacute -33
+KPX Y Ocircumflex -33
+KPX Y Odieresis -33
+KPX Y Ograve -33
+KPX Y Oslash -37
+KPX Y Otilde -33
+KPX Y S 0
+KPX Y T 32
+KPX Y a -68
+KPX Y ae -65
+KPX Y colon -71
+KPX Y comma -61
+KPX Y e -85
+KPX Y g -68
+KPX Y guillemotleft -104
+KPX Y guilsinglleft -116
+KPX Y hyphen -73
+KPX Y i -4
+KPX Y o -85
+KPX Y oslash -85
+KPX Y p -62
+KPX Y period -65
+KPX Y semicolon -65
+KPX Y u -59
+KPX Y v -62
+KPX Z v -33
+KPX Z y -38
+KPX a j -28
+KPX a quoteright -3
+KPX a v -29
+KPX a w -32
+KPX a y -32
+KPX aacute v -29
+KPX aacute w -32
+KPX aacute y -32
+KPX adieresis v -29
+KPX adieresis w -32
+KPX adieresis y -32
+KPX ae v -15
+KPX ae w -18
+KPX ae y -20
+KPX agrave v -29
+KPX agrave w -32
+KPX agrave y -32
+KPX aring v -29
+KPX aring w -32
+KPX aring y -32
+KPX b v -17
+KPX b w -20
+KPX b y -22
+KPX c h -15
+KPX c k -13
+KPX comma one -28
+KPX comma quotedblright 5
+KPX comma quoteright 5
+KPX e quoteright 15
+KPX e t -15
+KPX e v -15
+KPX e w -19
+KPX e x -16
+KPX e y -20
+KPX eacute v -15
+KPX eacute w -19
+KPX eacute y -20
+KPX ecircumflex v -15
+KPX ecircumflex w -19
+KPX ecircumflex y -20
+KPX eight four 15
+KPX eight one -30
+KPX eight seven -12
+KPX f a -5
+KPX f aacute -5
+KPX f adieresis 12
+KPX f ae -3
+KPX f aring -5
+KPX f e -15
+KPX f eacute -15
+KPX f f 21
+KPX f i 21
+KPX f j 20
+KPX f l 55
+KPX f o -15
+KPX f oacute -15
+KPX f odieresis 4
+KPX f oe -16
+KPX f oslash -20
+KPX f quoteright 61
+KPX f s 0
+KPX f t 16
+KPX five four 10
+KPX five one -45
+KPX five seven -27
+KPX four four 15
+KPX four one -26
+KPX four seven -26
+KPX g a -6
+KPX g adieresis -6
+KPX g ae -4
+KPX g aring -6
+KPX g e -18
+KPX g eacute -18
+KPX g l -4
+KPX g oacute -20
+KPX g odieresis -20
+KPX g r 28
+KPX guillemotright A -45
+KPX guillemotright AE -34
+KPX guillemotright Aacute -45
+KPX guillemotright Adieresis -45
+KPX guillemotright Aring -45
+KPX guillemotright T -109
+KPX guillemotright V -81
+KPX guillemotright W -72
+KPX guillemotright Y -102
+KPX guilsinglright A -52
+KPX guilsinglright AE -41
+KPX guilsinglright Aacute -52
+KPX guilsinglright Adieresis -52
+KPX guilsinglright Aring -52
+KPX guilsinglright T -117
+KPX guilsinglright V -89
+KPX guilsinglright W -80
+KPX guilsinglright Y -110
+KPX h quoteright -6
+KPX h y -36
+KPX hyphen A -7
+KPX hyphen AE 3
+KPX hyphen Aacute -7
+KPX hyphen Adieresis -7
+KPX hyphen Aring -7
+KPX hyphen T -74
+KPX hyphen V -50
+KPX hyphen W -40
+KPX hyphen Y -72
+KPX i T -25
+KPX i j -29
+KPX k a 3
+KPX k aacute 3
+KPX k adieresis 3
+KPX k ae 7
+KPX k aring 3
+KPX k comma 11
+KPX k e -27
+KPX k eacute -27
+KPX k g 3
+KPX k hyphen -46
+KPX k o -29
+KPX k oacute -29
+KPX k odieresis -29
+KPX k period 7
+KPX k s 7
+KPX k u 3
+KPX k udieresis 3
+KPX l v -22
+KPX l y -23
+KPX m p -27
+KPX m v -33
+KPX m w -36
+KPX m y -37
+KPX n T -41
+KPX n p -25
+KPX n quoteright -5
+KPX n v -31
+KPX n w -35
+KPX n y -35
+KPX nine four 9
+KPX nine one -39
+KPX nine seven 1
+KPX o T -38
+KPX o quoteright 8
+KPX o t -17
+KPX o v -24
+KPX o w -28
+KPX o x -25
+KPX o y -29
+KPX oacute v -24
+KPX oacute w -28
+KPX oacute y -29
+KPX ocircumflex t -17
+KPX odieresis t -17
+KPX odieresis v -24
+KPX odieresis w -28
+KPX odieresis x -25
+KPX odieresis y -29
+KPX ograve v -24
+KPX ograve w -28
+KPX ograve y -29
+KPX one comma -23
+KPX one eight -38
+KPX one five -35
+KPX one four -69
+KPX one nine -34
+KPX one one -48
+KPX one period -26
+KPX one seven -73
+KPX one six -51
+KPX one three -35
+KPX one two -12
+KPX one zero -49
+KPX p t -15
+KPX p y -26
+KPX period one -31
+KPX period quotedblright 6
+KPX period quoteright 6
+KPX q c -13
+KPX q u -11
+KPX quotedblbase A 44
+KPX quotedblbase AE 52
+KPX quotedblbase T -52
+KPX quotedblbase V -71
+KPX quotedblbase W -57
+KPX quotedblbase Y -52
+KPX quotedblleft A -64
+KPX quotedblleft AE -48
+KPX quotedblleft Aacute -64
+KPX quotedblleft Adieresis -64
+KPX quotedblleft Aring -64
+KPX quotedblleft T 35
+KPX quotedblleft V 35
+KPX quotedblleft W 23
+KPX quotedblleft Y 32
+KPX quotedblright A -67
+KPX quotedblright AE -52
+KPX quotedblright Aacute -67
+KPX quotedblright Adieresis -67
+KPX quotedblright Aring -67
+KPX quotedblright T 30
+KPX quotedblright V 33
+KPX quotedblright W 20
+KPX quotedblright Y 31
+KPX quoteleft A -63
+KPX quoteleft AE -47
+KPX quoteleft Aacute -63
+KPX quoteleft Adieresis -63
+KPX quoteleft Aring -63
+KPX quoteleft T 36
+KPX quoteleft V 36
+KPX quoteleft W 24
+KPX quoteleft Y 33
+KPX quoteright A -67
+KPX quoteright AE -51
+KPX quoteright Aacute -67
+KPX quoteright Adieresis -67
+KPX quoteright Aring -67
+KPX quoteright comma -7
+KPX quoteright d -5
+KPX quoteright o -6
+KPX quoteright period -9
+KPX quoteright r 6
+KPX quoteright s 6
+KPX quoteright t 6
+KPX quoteright v 11
+KPX quoteright w 8
+KPX quoteright y 9
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae 2
+KPX r agrave -1
+KPX r aring -1
+KPX r c 0
+KPX r ccedilla 1
+KPX r colon 5
+KPX r comma -68
+KPX r d -1
+KPX r e 0
+KPX r eacute 0
+KPX r ecircumflex 0
+KPX r egrave 0
+KPX r f 23
+KPX r g 1
+KPX r h -19
+KPX r hyphen 5
+KPX r i 15
+KPX r j 21
+KPX r k -17
+KPX r l -19
+KPX r m 19
+KPX r n 19
+KPX r o 1
+KPX r oacute 1
+KPX r ocircumflex 1
+KPX r odieresis 1
+KPX r oe 0
+KPX r ograve 1
+KPX r oslash -1
+KPX r p 20
+KPX r period -72
+KPX r q -2
+KPX r quoteright 45
+KPX r r 20
+KPX r s 7
+KPX r semicolon 8
+KPX r t 18
+KPX r u 21
+KPX r v 23
+KPX r w 20
+KPX r x 23
+KPX r y 21
+KPX r z 2
+KPX s quoteright 20
+KPX s t -9
+KPX seven colon -45
+KPX seven comma -42
+KPX seven eight -21
+KPX seven five -24
+KPX seven four -62
+KPX seven one -20
+KPX seven period -45
+KPX seven seven -11
+KPX seven six -25
+KPX seven three -19
+KPX seven two -20
+KPX six four 17
+KPX six one -25
+KPX six seven -10
+KPX t S 8
+KPX t a 1
+KPX t aacute 1
+KPX t adieresis 1
+KPX t ae 4
+KPX t aring 1
+KPX t colon -6
+KPX t e 3
+KPX t eacute 3
+KPX t h -7
+KPX t o 3
+KPX t oacute 3
+KPX t odieresis 3
+KPX t quoteright 1
+KPX t semicolon -3
+KPX three four 7
+KPX three one -37
+KPX three seven -18
+KPX two four 8
+KPX two one -30
+KPX two seven -8
+KPX u quoteright 1
+KPX v a -11
+KPX v aacute -11
+KPX v acircumflex -11
+KPX v adieresis -11
+KPX v ae -9
+KPX v agrave -11
+KPX v aring -11
+KPX v atilde -11
+KPX v c -24
+KPX v colon 0
+KPX v comma -59
+KPX v e -22
+KPX v eacute -22
+KPX v ecircumflex -22
+KPX v egrave -22
+KPX v g -18
+KPX v hyphen -26
+KPX v l -24
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -28
+KPX v period -61
+KPX v s -6
+KPX v semicolon 0
+KPX w a -11
+KPX w aacute -11
+KPX w acircumflex -11
+KPX w adieresis -11
+KPX w ae -9
+KPX w agrave -11
+KPX w aring -11
+KPX w atilde -11
+KPX w c -24
+KPX w colon 0
+KPX w comma -60
+KPX w e -22
+KPX w eacute -22
+KPX w ecircumflex -22
+KPX w egrave -22
+KPX w g -18
+KPX w hyphen -26
+KPX w l -24
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -28
+KPX w period -62
+KPX w s -6
+KPX w semicolon 0
+KPX x a 0
+KPX x c -29
+KPX x e -27
+KPX x eacute -27
+KPX x o -28
+KPX x q -20
+KPX y a -14
+KPX y aacute -14
+KPX y acircumflex -14
+KPX y adieresis -14
+KPX y ae -12
+KPX y agrave -14
+KPX y aring -14
+KPX y atilde -14
+KPX y c -29
+KPX y colon -2
+KPX y comma -63
+KPX y e -27
+KPX y eacute -27
+KPX y ecircumflex -27
+KPX y egrave -27
+KPX y g -23
+KPX y hyphen -28
+KPX y l -24
+KPX y o -28
+KPX y oacute -28
+KPX y odieresis -28
+KPX y ograve -28
+KPX y oslash -33
+KPX y period -64
+KPX y s -9
+KPX y semicolon -1
+KPX zero four 12
+KPX zero one -38
+KPX zero seven 0
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncb8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uncb8a.pfb
new file mode 100644
index 00000000000..321a282f43c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncb8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncbi8a.afm b/Master/tlpkg/tlgs/lib/fonts/uncbi8a.afm
new file mode 100644
index 00000000000..57d3e386a8e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncbi8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName CenturySchL-BoldItal
+FullName Century Schoolbook L Bold Italic
+FamilyName Century Schoolbook L
+Weight Bold
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -102
+UnderlineThickness 54
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -170 -371 1151 998
+CapHeight 722
+XHeight 464
+Descender -202
+Ascender 736
+StartCharMetrics 316
+C 32 ; WX 287 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 333 ; N exclam ; B 3 -15 336 737 ;
+C 34 ; WX 400 ; N quotedbl ; B 100 397 507 734 ;
+C 35 ; WX 574 ; N numbersign ; B 41 0 533 700 ;
+C 36 ; WX 574 ; N dollar ; B 3 -145 559 794 ;
+C 37 ; WX 889 ; N percent ; B 51 0 836 722 ;
+C 38 ; WX 889 ; N ampersand ; B 31 -15 823 737 ;
+C 39 ; WX 259 ; N quoteright ; B 70 377 301 722 ;
+C 40 ; WX 407 ; N parenleft ; B 71 -118 452 737 ;
+C 41 ; WX 407 ; N parenright ; B -70 -118 308 737 ;
+C 42 ; WX 500 ; N asterisk ; B 32 297 472 737 ;
+C 43 ; WX 606 ; N plus ; B 41 0 545 505 ;
+C 44 ; WX 287 ; N comma ; B -48 -187 180 159 ;
+C 45 ; WX 333 ; N hyphen ; B 10 180 272 310 ;
+C 46 ; WX 287 ; N period ; B 12 -15 186 159 ;
+C 47 ; WX 278 ; N slash ; B -25 -15 311 737 ;
+C 48 ; WX 574 ; N zero ; B 21 -15 553 705 ;
+C 49 ; WX 574 ; N one ; B 25 0 489 707 ;
+C 50 ; WX 574 ; N two ; B -45 0 538 705 ;
+C 51 ; WX 574 ; N three ; B -5 -15 538 705 ;
+C 52 ; WX 574 ; N four ; B -13 0 544 707 ;
+C 53 ; WX 574 ; N five ; B 0 -15 573 705 ;
+C 54 ; WX 574 ; N six ; B 30 -15 573 705 ;
+C 55 ; WX 574 ; N seven ; B 64 -15 593 705 ;
+C 56 ; WX 574 ; N eight ; B 0 -15 551 705 ;
+C 57 ; WX 574 ; N nine ; B 1 -15 544 705 ;
+C 58 ; WX 287 ; N colon ; B -2 -15 257 481 ;
+C 59 ; WX 287 ; N semicolon ; B -39 -187 257 481 ;
+C 60 ; WX 606 ; N less ; B 14 -25 523 529 ;
+C 61 ; WX 606 ; N equal ; B 41 92 545 413 ;
+C 62 ; WX 606 ; N greater ; B 38 -25 547 529 ;
+C 63 ; WX 481 ; N question ; B 79 -15 452 737 ;
+C 64 ; WX 747 ; N at ; B 22 -15 722 737 ;
+C 65 ; WX 741 ; N A ; B -75 0 716 736 ;
+C 66 ; WX 759 ; N B ; B -50 0 720 722 ;
+C 67 ; WX 759 ; N C ; B 35 -15 759 737 ;
+C 68 ; WX 833 ; N D ; B -49 0 796 722 ;
+C 69 ; WX 741 ; N E ; B -41 0 728 722 ;
+C 70 ; WX 704 ; N F ; B -41 0 726 722 ;
+C 71 ; WX 815 ; N G ; B 34 -15 802 737 ;
+C 72 ; WX 870 ; N H ; B -41 0 912 722 ;
+C 73 ; WX 444 ; N I ; B -41 0 486 722 ;
+C 74 ; WX 667 ; N J ; B -9 -15 718 722 ;
+C 75 ; WX 778 ; N K ; B -41 0 832 722 ;
+C 76 ; WX 704 ; N L ; B -41 0 670 722 ;
+C 77 ; WX 944 ; N M ; B -24 0 988 722 ;
+C 78 ; WX 852 ; N N ; B -57 -14 912 722 ;
+C 79 ; WX 833 ; N O ; B 36 -15 797 737 ;
+C 80 ; WX 741 ; N P ; B -38 0 731 722 ;
+C 81 ; WX 833 ; N Q ; B 35 -186 796 737 ;
+C 82 ; WX 796 ; N R ; B -41 -15 751 722 ;
+C 83 ; WX 685 ; N S ; B 1 -15 666 737 ;
+C 84 ; WX 722 ; N T ; B 44 0 762 722 ;
+C 85 ; WX 833 ; N U ; B 88 -15 895 722 ;
+C 86 ; WX 741 ; N V ; B 32 -14 802 722 ;
+C 87 ; WX 944 ; N W ; B 40 -14 994 722 ;
+C 88 ; WX 741 ; N X ; B -72 0 811 722 ;
+C 89 ; WX 704 ; N Y ; B 15 0 777 722 ;
+C 90 ; WX 704 ; N Z ; B -29 0 715 722 ;
+C 91 ; WX 407 ; N bracketleft ; B -31 -108 432 722 ;
+C 92 ; WX 606 ; N backslash ; B 81 0 545 722 ;
+C 93 ; WX 407 ; N bracketright ; B -49 -108 414 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -129 500 -75 ;
+C 96 ; WX 259 ; N quoteleft ; B 39 391 270 737 ;
+C 97 ; WX 667 ; N a ; B 15 -15 646 479 ;
+C 98 ; WX 611 ; N b ; B 28 -15 557 736 ;
+C 99 ; WX 537 ; N c ; B 3 -14 487 478 ;
+C 100 ; WX 667 ; N d ; B 0 -15 663 736 ;
+C 101 ; WX 519 ; N e ; B -2 -14 478 479 ;
+C 102 ; WX 389 ; N f ; B -48 -205 550 737 ;
+C 103 ; WX 611 ; N g ; B -66 -202 602 533 ;
+C 104 ; WX 685 ; N h ; B 0 -15 637 736 ;
+C 105 ; WX 389 ; N i ; B 28 -15 343 737 ;
+C 106 ; WX 370 ; N j ; B -170 -202 381 737 ;
+C 107 ; WX 648 ; N k ; B -5 -15 584 736 ;
+C 108 ; WX 389 ; N l ; B 26 -15 370 736 ;
+C 109 ; WX 944 ; N m ; B 9 -14 920 479 ;
+C 110 ; WX 685 ; N n ; B 3 -15 642 479 ;
+C 111 ; WX 574 ; N o ; B 10 -14 540 479 ;
+C 112 ; WX 648 ; N p ; B -118 -202 590 479 ;
+C 113 ; WX 630 ; N q ; B 0 -202 587 478 ;
+C 114 ; WX 519 ; N r ; B 3 0 524 479 ;
+C 115 ; WX 481 ; N s ; B 2 -15 437 479 ;
+C 116 ; WX 407 ; N t ; B 24 -14 404 650 ;
+C 117 ; WX 685 ; N u ; B 38 -14 639 478 ;
+C 118 ; WX 556 ; N v ; B 32 -15 500 479 ;
+C 119 ; WX 833 ; N w ; B 22 -15 788 479 ;
+C 120 ; WX 574 ; N x ; B -49 -15 571 479 ;
+C 121 ; WX 519 ; N y ; B -66 -202 492 479 ;
+C 122 ; WX 519 ; N z ; B -19 -15 471 479 ;
+C 123 ; WX 407 ; N braceleft ; B 52 -108 402 722 ;
+C 124 ; WX 606 ; N bar ; B 262 0 343 722 ;
+C 125 ; WX 407 ; N braceright ; B -30 -108 322 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 160 555 335 ;
+C 161 ; WX 333 ; N exclamdown ; B -39 -203 289 549 ;
+C 162 ; WX 574 ; N cent ; B 30 -137 514 586 ;
+C 163 ; WX 574 ; N sterling ; B -18 -15 566 705 ;
+C 164 ; WX 167 ; N fraction ; B -166 0 333 722 ;
+C 165 ; WX 574 ; N yen ; B 23 0 635 706 ;
+C 166 ; WX 574 ; N florin ; B -27 -204 588 737 ;
+C 167 ; WX 500 ; N section ; B -40 -144 505 737 ;
+C 168 ; WX 574 ; N currency ; B 40 97 546 603 ;
+C 169 ; WX 287 ; N quotesingle ; B 100 397 269 734 ;
+C 170 ; WX 481 ; N quotedblleft ; B 52 391 522 737 ;
+C 171 ; WX 481 ; N guillemotleft ; B -35 78 427 419 ;
+C 172 ; WX 278 ; N guilsinglleft ; B -35 78 224 419 ;
+C 173 ; WX 278 ; N guilsinglright ; B -6 78 253 419 ;
+C 174 ; WX 685 ; N fi ; B -70 -205 646 737 ;
+C 175 ; WX 685 ; N fl ; B -70 -205 681 736 ;
+C 177 ; WX 500 ; N endash ; B -18 193 518 298 ;
+C 178 ; WX 500 ; N dagger ; B 50 -144 510 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B -48 -147 514 737 ;
+C 180 ; WX 287 ; N periodcentered ; B 41 171 215 345 ;
+C 182 ; WX 650 ; N paragraph ; B 67 -144 661 722 ;
+C 183 ; WX 606 ; N bullet ; B 109 180 446 517 ;
+C 184 ; WX 259 ; N quotesinglbase ; B -43 -187 188 159 ;
+C 185 ; WX 481 ; N quotedblbase ; B -70 -187 402 159 ;
+C 186 ; WX 481 ; N quotedblright ; B 61 391 533 737 ;
+C 187 ; WX 481 ; N guillemotright ; B -6 78 456 419 ;
+C 188 ; WX 1000 ; N ellipsis ; B 20 -15 860 159 ;
+C 189 ; WX 1167 ; N perthousand ; B 26 0 1151 722 ;
+C 191 ; WX 481 ; N questiondown ; B 1 -203 368 549 ;
+C 193 ; WX 333 ; N grave ; B 74 535 294 719 ;
+C 194 ; WX 333 ; N acute ; B 123 535 371 719 ;
+C 195 ; WX 333 ; N circumflex ; B 23 535 365 709 ;
+C 196 ; WX 333 ; N tilde ; B 34 557 404 683 ;
+C 197 ; WX 333 ; N macron ; B 32 566 387 642 ;
+C 198 ; WX 333 ; N breve ; B 67 537 390 701 ;
+C 199 ; WX 333 ; N dotaccent ; B 145 542 288 685 ;
+C 200 ; WX 333 ; N dieresis ; B 34 542 392 685 ;
+C 202 ; WX 333 ; N ring ; B 217 530 432 745 ;
+C 203 ; WX 333 ; N cedilla ; B -87 -220 157 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 23 542 472 709 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -173 245 0 ;
+C 207 ; WX 333 ; N caron ; B 60 535 403 711 ;
+C 208 ; WX 1000 ; N emdash ; B -18 193 1018 298 ;
+C 225 ; WX 889 ; N AE ; B -81 0 903 722 ;
+C 227 ; WX 412 ; N ordfeminine ; B 29 293 449 737 ;
+C 232 ; WX 704 ; N Lslash ; B -41 0 670 722 ;
+C 233 ; WX 833 ; N Oslash ; B 17 -83 797 773 ;
+C 234 ; WX 963 ; N OE ; B 19 0 980 722 ;
+C 235 ; WX 356 ; N ordmasculine ; B 29 293 383 737 ;
+C 241 ; WX 815 ; N ae ; B -19 -15 774 479 ;
+C 245 ; WX 389 ; N dotlessi ; B 38 -15 353 478 ;
+C 248 ; WX 389 ; N lslash ; B 26 -15 397 736 ;
+C 249 ; WX 574 ; N oslash ; B 10 -126 540 578 ;
+C 250 ; WX 852 ; N oe ; B -5 -15 810 479 ;
+C 251 ; WX 574 ; N germandbls ; B -66 -205 523 737 ;
+C -1 ; WX 833 ; N Udieresis ; B 88 -15 895 933 ;
+C -1 ; WX 833 ; N Uacute ; B 88 -15 895 958 ;
+C -1 ; WX 685 ; N Scedilla ; B 1 -222 666 737 ;
+C -1 ; WX 722 ; N Tcaron ; B 44 0 762 950 ;
+C -1 ; WX 685 ; N Scaron ; B 1 -15 666 950 ;
+C -1 ; WX 796 ; N Rcaron ; B -41 -15 751 950 ;
+C -1 ; WX 796 ; N Racute ; B -41 -15 751 958 ;
+C -1 ; WX 685 ; N Sacute ; B 1 -15 666 958 ;
+C -1 ; WX 833 ; N Otilde ; B 36 -15 797 922 ;
+C -1 ; WX 685 ; N ucircumflex ; B 38 -14 639 709 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 36 -15 797 958 ;
+C -1 ; WX 833 ; N Uhungarumlaut ; B 88 -15 895 958 ;
+C -1 ; WX 704 ; N Yacute ; B 15 0 777 958 ;
+C -1 ; WX 833 ; N Eth ; B -49 0 796 722 ;
+C -1 ; WX 833 ; N Dcroat ; B -49 0 796 722 ;
+C -1 ; WX 704 ; N Zacute ; B -29 0 715 958 ;
+C -1 ; WX 833 ; N Uring ; B 88 -15 895 998 ;
+C -1 ; WX 611 ; N gbreve ; B -66 -202 602 701 ;
+C -1 ; WX 519 ; N eogonek ; B -2 -173 478 479 ;
+C -1 ; WX 519 ; N edotaccent ; B -2 -14 478 685 ;
+C -1 ; WX 519 ; N ecaron ; B -2 -14 496 711 ;
+C -1 ; WX 833 ; N Ugrave ; B 88 -15 895 958 ;
+C -1 ; WX 741 ; N Thorn ; B -38 0 690 722 ;
+C -1 ; WX 519 ; N eacute ; B -2 -14 478 719 ;
+C -1 ; WX 519 ; N edieresis ; B -2 -14 495 685 ;
+C -1 ; WX 780 ; N dcaron ; B 0 -15 840 736 ;
+C -1 ; WX 537 ; N ccedilla ; B 3 -220 487 479 ;
+C -1 ; WX 537 ; N ccaron ; B 3 -14 515 711 ;
+C -1 ; WX 537 ; N cacute ; B 3 -14 487 719 ;
+C -1 ; WX 667 ; N aogonek ; B 15 -173 646 479 ;
+C -1 ; WX 667 ; N aring ; B 15 -15 646 745 ;
+C -1 ; WX 667 ; N atilde ; B 15 -15 646 683 ;
+C -1 ; WX 667 ; N abreve ; B 15 -15 646 701 ;
+C -1 ; WX 519 ; N egrave ; B -2 -14 478 719 ;
+C -1 ; WX 667 ; N agrave ; B 15 -15 646 719 ;
+C -1 ; WX 667 ; N aacute ; B 15 -15 646 719 ;
+C -1 ; WX 667 ; N adieresis ; B 15 -15 646 685 ;
+C -1 ; WX 833 ; N Uogonek ; B 88 -173 895 722 ;
+C -1 ; WX 685 ; N ugrave ; B 38 -14 639 719 ;
+C -1 ; WX 685 ; N uacute ; B 38 -14 639 719 ;
+C -1 ; WX 685 ; N udieresis ; B 38 -14 639 685 ;
+C -1 ; WX 483 ; N tcaron ; B 24 -14 543 722 ;
+C -1 ; WX 481 ; N scommaaccent ; B 0 -371 437 479 ;
+C -1 ; WX 704 ; N Zcaron ; B -29 0 715 950 ;
+C -1 ; WX 519 ; N ecircumflex ; B -2 -14 478 709 ;
+C -1 ; WX 833 ; N Ucircumflex ; B 88 -15 895 950 ;
+C -1 ; WX 667 ; N acircumflex ; B 15 -15 646 709 ;
+C -1 ; WX 704 ; N Zdotaccent ; B -29 0 715 933 ;
+C -1 ; WX 481 ; N scaron ; B 2 -15 477 711 ;
+C -1 ; WX 741 ; N Amacron ; B -75 0 716 894 ;
+C -1 ; WX 481 ; N sacute ; B 2 -15 445 719 ;
+C -1 ; WX 722 ; N Tcommaaccent ; B 44 -371 762 722 ;
+C -1 ; WX 704 ; N Ydieresis ; B 15 0 777 933 ;
+C -1 ; WX 648 ; N thorn ; B -118 -202 590 737 ;
+C -1 ; WX 741 ; N Emacron ; B -41 0 728 894 ;
+C -1 ; WX 833 ; N Ograve ; B 36 -15 797 958 ;
+C -1 ; WX 833 ; N Oacute ; B 36 -15 797 958 ;
+C -1 ; WX 833 ; N Odieresis ; B 36 -15 797 933 ;
+C -1 ; WX 852 ; N Ntilde ; B -57 -14 912 922 ;
+C -1 ; WX 852 ; N Ncaron ; B -57 -14 912 950 ;
+C -1 ; WX 852 ; N Nacute ; B -57 -14 912 958 ;
+C -1 ; WX 704 ; N Lcaron ; B -41 0 784 722 ;
+C -1 ; WX 704 ; N Lacute ; B -41 0 670 958 ;
+C -1 ; WX 444 ; N Idotaccent ; B -41 0 486 933 ;
+C -1 ; WX 519 ; N racute ; B 3 0 524 719 ;
+C -1 ; WX 444 ; N Icircumflex ; B -41 0 486 950 ;
+C -1 ; WX 574 ; N ohungarumlaut ; B 10 -14 593 709 ;
+C -1 ; WX 574 ; N otilde ; B 10 -14 540 683 ;
+C -1 ; WX 574 ; N Euro ; B -37 -15 640 717 ;
+C -1 ; WX 574 ; N ocircumflex ; B 10 -14 540 709 ;
+C -1 ; WX 344 ; N onesuperior ; B 21 282 323 706 ;
+C -1 ; WX 344 ; N twosuperior ; B -16 282 360 705 ;
+C -1 ; WX 344 ; N threesuperior ; B -4 274 348 705 ;
+C -1 ; WX 444 ; N Igrave ; B -41 0 486 958 ;
+C -1 ; WX 444 ; N Iacute ; B -41 0 486 958 ;
+C -1 ; WX 444 ; N Imacron ; B -41 0 504 894 ;
+C -1 ; WX 444 ; N Iogonek ; B -41 -173 486 722 ;
+C -1 ; WX 444 ; N Idieresis ; B -41 0 498 933 ;
+C -1 ; WX 815 ; N Gbreve ; B 34 -15 802 941 ;
+C -1 ; WX 833 ; N Umacron ; B 88 -15 895 894 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B -41 -371 832 722 ;
+C -1 ; WX 574 ; N ograve ; B 10 -14 540 719 ;
+C -1 ; WX 685 ; N Scommaaccent ; B 1 -371 666 737 ;
+C -1 ; WX 741 ; N Eogonek ; B -41 -173 728 722 ;
+C -1 ; WX 574 ; N oacute ; B 10 -14 540 719 ;
+C -1 ; WX 741 ; N Edotaccent ; B -41 0 728 933 ;
+C -1 ; WX 389 ; N iogonek ; B 28 -173 343 737 ;
+C -1 ; WX 611 ; N gcommaaccent ; B -66 -202 602 842 ;
+C -1 ; WX 574 ; N odieresis ; B 10 -14 540 685 ;
+C -1 ; WX 685 ; N ntilde ; B 3 -15 642 683 ;
+C -1 ; WX 685 ; N ncaron ; B 3 -15 642 711 ;
+C -1 ; WX 741 ; N Ecaron ; B -41 0 728 950 ;
+C -1 ; WX 741 ; N Ecircumflex ; B -41 0 728 950 ;
+C -1 ; WX 481 ; N scedilla ; B 2 -220 437 479 ;
+C -1 ; WX 519 ; N rcaron ; B 3 0 524 711 ;
+C -1 ; WX 741 ; N Egrave ; B -41 0 728 958 ;
+C -1 ; WX 741 ; N Eacute ; B -41 0 728 958 ;
+C -1 ; WX 815 ; N Gcommaaccent ; B 34 -371 802 737 ;
+C -1 ; WX 796 ; N Rcommaaccent ; B -41 -371 751 722 ;
+C -1 ; WX 741 ; N Edieresis ; B -41 0 728 933 ;
+C -1 ; WX 685 ; N nacute ; B 3 -15 642 719 ;
+C -1 ; WX 685 ; N uogonek ; B 38 -173 639 478 ;
+C -1 ; WX 685 ; N umacron ; B 38 -14 639 642 ;
+C -1 ; WX 833 ; N Dcaron ; B -49 0 796 950 ;
+C -1 ; WX 486 ; N lcaron ; B 26 -15 546 736 ;
+C -1 ; WX 759 ; N Ccaron ; B 35 -15 759 950 ;
+C -1 ; WX 759 ; N Cacute ; B 35 -15 759 958 ;
+C -1 ; WX 759 ; N Ccedilla ; B 35 -222 759 737 ;
+C -1 ; WX 400 ; N degree ; B 70 380 370 686 ;
+C -1 ; WX 741 ; N Aogonek ; B -75 -173 775 736 ;
+C -1 ; WX 606 ; N minus ; B 41 195 545 310 ;
+C -1 ; WX 606 ; N multiply ; B 41 0 547 506 ;
+C -1 ; WX 606 ; N divide ; B 41 -31 545 536 ;
+C -1 ; WX 741 ; N Aring ; B -75 0 716 998 ;
+C -1 ; WX 950 ; N trademark ; B 42 302 982 722 ;
+C -1 ; WX 519 ; N rcommaaccent ; B -80 -371 524 479 ;
+C -1 ; WX 389 ; N lacute ; B 26 -15 399 958 ;
+C -1 ; WX 574 ; N omacron ; B 10 -14 540 642 ;
+C -1 ; WX 741 ; N Atilde ; B -75 0 716 922 ;
+C -1 ; WX 389 ; N icircumflex ; B 38 -15 383 709 ;
+C -1 ; WX 389 ; N igrave ; B 38 -15 353 719 ;
+C -1 ; WX 685 ; N ncommaaccent ; B 3 -371 642 479 ;
+C -1 ; WX 389 ; N lcommaaccent ; B -71 -371 370 736 ;
+C -1 ; WX 606 ; N plusminus ; B 41 0 545 610 ;
+C -1 ; WX 861 ; N onehalf ; B 21 0 857 722 ;
+C -1 ; WX 861 ; N onequarter ; B 21 0 826 722 ;
+C -1 ; WX 861 ; N threequarters ; B -4 0 826 722 ;
+C -1 ; WX 389 ; N iacute ; B 38 -15 399 719 ;
+C -1 ; WX 741 ; N Abreve ; B -75 0 716 941 ;
+C -1 ; WX 648 ; N kcommaaccent ; B -5 -371 584 736 ;
+C -1 ; WX 833 ; N Omacron ; B 36 -15 797 894 ;
+C -1 ; WX 389 ; N imacron ; B 38 -15 415 642 ;
+C -1 ; WX 519 ; N emacron ; B -2 -14 480 642 ;
+C -1 ; WX 667 ; N amacron ; B 15 -15 646 642 ;
+C -1 ; WX 407 ; N tcommaaccent ; B -62 -371 404 650 ;
+C -1 ; WX 519 ; N ydieresis ; B -66 -202 492 685 ;
+C -1 ; WX 519 ; N zdotaccent ; B -19 -15 471 685 ;
+C -1 ; WX 519 ; N zcaron ; B -19 -15 496 711 ;
+C -1 ; WX 519 ; N zacute ; B -19 -15 471 719 ;
+C -1 ; WX 519 ; N yacute ; B -66 -202 492 719 ;
+C -1 ; WX 685 ; N uhungarumlaut ; B 38 -14 648 709 ;
+C -1 ; WX 574 ; N eth ; B 10 -14 540 788 ;
+C -1 ; WX 685 ; N uring ; B 38 -14 639 745 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 36 -15 797 950 ;
+C -1 ; WX 333 ; N commaaccent ; B -99 -371 109 -60 ;
+C -1 ; WX 747 ; N copyright ; B 23 -15 723 685 ;
+C -1 ; WX 747 ; N registered ; B 23 -15 723 685 ;
+C -1 ; WX 741 ; N Acircumflex ; B -75 0 716 950 ;
+C -1 ; WX 389 ; N idieresis ; B 38 -15 410 685 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 41 -51 545 557 ;
+C -1 ; WX 549 ; N radical ; B -34 -35 548 918 ;
+C -1 ; WX 741 ; N Agrave ; B -75 0 716 958 ;
+C -1 ; WX 741 ; N Aacute ; B -75 0 716 958 ;
+C -1 ; WX 606 ; N lessequal ; B 14 0 523 698 ;
+C -1 ; WX 606 ; N greaterequal ; B 38 0 547 698 ;
+C -1 ; WX 606 ; N logicalnot ; B 41 19 545 310 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 13 -11 476 753 ;
+C -1 ; WX 852 ; N Ncommaaccent ; B -57 -371 912 722 ;
+C -1 ; WX 667 ; N dcroat ; B 0 -15 695 736 ;
+C -1 ; WX 606 ; N brokenbar ; B 262 0 343 722 ;
+C -1 ; WX 704 ; N Lcommaaccent ; B -41 -371 670 722 ;
+C -1 ; WX 741 ; N Adieresis ; B -75 0 716 933 ;
+C -1 ; WX 685 ; N mu ; B -90 -219 639 478 ;
+C -1 ; WX 287 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -35
+KPX A Ccedilla -37
+KPX A G -32
+KPX A O -35
+KPX A Odieresis -35
+KPX A Q -34
+KPX A T -12
+KPX A U -46
+KPX A Uacute -46
+KPX A Ucircumflex -46
+KPX A Udieresis -46
+KPX A Ugrave -46
+KPX A V -87
+KPX A W -71
+KPX A Y -13
+KPX A a -9
+KPX A b -10
+KPX A c 0
+KPX A ccedilla -2
+KPX A comma 37
+KPX A d -1
+KPX A e 3
+KPX A g 14
+KPX A guillemotleft -10
+KPX A guilsinglleft -10
+KPX A hyphen -5
+KPX A o -7
+KPX A period 32
+KPX A q 5
+KPX A quotedblright -61
+KPX A quoteright -66
+KPX A t 4
+KPX A u -4
+KPX A v -20
+KPX A w 3
+KPX A y -48
+KPX Aacute C -35
+KPX Aacute G -32
+KPX Aacute O -35
+KPX Aacute Q -34
+KPX Aacute T -12
+KPX Aacute U -46
+KPX Aacute V -87
+KPX Aacute W -71
+KPX Aacute Y -13
+KPX Aacute a -9
+KPX Aacute b -10
+KPX Aacute c 0
+KPX Aacute comma 37
+KPX Aacute d -1
+KPX Aacute e 3
+KPX Aacute g 14
+KPX Aacute guillemotleft -10
+KPX Aacute guilsinglleft -10
+KPX Aacute hyphen -5
+KPX Aacute o -7
+KPX Aacute period 32
+KPX Aacute q 5
+KPX Aacute quoteright -66
+KPX Aacute t 4
+KPX Aacute u -4
+KPX Aacute v -20
+KPX Aacute w 3
+KPX Aacute y -48
+KPX Acircumflex C -35
+KPX Acircumflex G -32
+KPX Acircumflex O -35
+KPX Acircumflex Q -34
+KPX Acircumflex T -12
+KPX Acircumflex U -46
+KPX Acircumflex V -87
+KPX Acircumflex W -71
+KPX Acircumflex Y -13
+KPX Acircumflex comma 37
+KPX Acircumflex period 32
+KPX Adieresis C -35
+KPX Adieresis G -32
+KPX Adieresis O -35
+KPX Adieresis Q -34
+KPX Adieresis T -12
+KPX Adieresis U -46
+KPX Adieresis V -87
+KPX Adieresis W -71
+KPX Adieresis Y -13
+KPX Adieresis a -9
+KPX Adieresis b -10
+KPX Adieresis c 0
+KPX Adieresis comma 37
+KPX Adieresis d -1
+KPX Adieresis g 14
+KPX Adieresis guillemotleft -10
+KPX Adieresis guilsinglleft -10
+KPX Adieresis hyphen -5
+KPX Adieresis o -7
+KPX Adieresis period 32
+KPX Adieresis q 5
+KPX Adieresis quotedblright -61
+KPX Adieresis quoteright -66
+KPX Adieresis t 4
+KPX Adieresis u -4
+KPX Adieresis v -20
+KPX Adieresis w 3
+KPX Adieresis y -48
+KPX Agrave C -35
+KPX Agrave G -32
+KPX Agrave O -35
+KPX Agrave Q -34
+KPX Agrave T -12
+KPX Agrave U -46
+KPX Agrave V -87
+KPX Agrave W -71
+KPX Agrave Y -13
+KPX Agrave comma 37
+KPX Agrave period 32
+KPX Aring C -35
+KPX Aring G -32
+KPX Aring O -35
+KPX Aring Q -34
+KPX Aring T -12
+KPX Aring U -46
+KPX Aring V -87
+KPX Aring W -71
+KPX Aring Y -13
+KPX Aring a -9
+KPX Aring b -10
+KPX Aring c 0
+KPX Aring comma 37
+KPX Aring d -1
+KPX Aring e 3
+KPX Aring g 14
+KPX Aring guillemotleft -10
+KPX Aring guilsinglleft -10
+KPX Aring hyphen -5
+KPX Aring o -7
+KPX Aring period 32
+KPX Aring q 5
+KPX Aring quotedblright -61
+KPX Aring quoteright -66
+KPX Aring t 4
+KPX Aring u -4
+KPX Aring v -20
+KPX Aring w 3
+KPX Aring y -48
+KPX Atilde C -35
+KPX Atilde G -32
+KPX Atilde O -35
+KPX Atilde Q -34
+KPX Atilde T -12
+KPX Atilde U -46
+KPX Atilde V -87
+KPX Atilde W -71
+KPX Atilde Y -13
+KPX Atilde comma 37
+KPX Atilde period 32
+KPX B A 1
+KPX B AE 4
+KPX B Aacute 1
+KPX B Acircumflex 1
+KPX B Adieresis 1
+KPX B Aring 1
+KPX B Atilde 1
+KPX B O -6
+KPX B OE 0
+KPX B Oacute -6
+KPX B Ocircumflex -6
+KPX B Odieresis -6
+KPX B Ograve -6
+KPX B Oslash -5
+KPX B V -19
+KPX B W -23
+KPX B Y -8
+KPX C A -17
+KPX C AE -14
+KPX C Aacute -17
+KPX C Adieresis -17
+KPX C Aring -17
+KPX C H -15
+KPX C K -15
+KPX C O -7
+KPX C Oacute -7
+KPX C Odieresis -7
+KPX Ccedilla A -21
+KPX D A -44
+KPX D Aacute -44
+KPX D Acircumflex -44
+KPX D Adieresis -44
+KPX D Agrave -44
+KPX D Aring -44
+KPX D Atilde -44
+KPX D J -1
+KPX D T -5
+KPX D V -39
+KPX D W -32
+KPX D X -43
+KPX D Y -27
+KPX F A -79
+KPX F Aacute -79
+KPX F Acircumflex -79
+KPX F Adieresis -79
+KPX F Agrave -79
+KPX F Aring -79
+KPX F Atilde -79
+KPX F J -61
+KPX F O -7
+KPX F Odieresis -7
+KPX F a -66
+KPX F aacute -66
+KPX F adieresis -66
+KPX F ae -41
+KPX F aring -66
+KPX F comma -67
+KPX F e -60
+KPX F eacute -61
+KPX F hyphen -38
+KPX F i 3
+KPX F j -21
+KPX F o -65
+KPX F oacute -66
+KPX F odieresis -52
+KPX F oe -56
+KPX F oslash -69
+KPX F period -80
+KPX F r -2
+KPX F u -7
+KPX G A -14
+KPX G AE -11
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -27
+KPX G V -3
+KPX G W -7
+KPX G Y 5
+KPX J A -48
+KPX J AE -43
+KPX J Adieresis -48
+KPX J Aring -48
+KPX K C -33
+KPX K G -30
+KPX K O -33
+KPX K OE -22
+KPX K Oacute -33
+KPX K Odieresis -33
+KPX K S 22
+KPX K T 9
+KPX K a -7
+KPX K adieresis -7
+KPX K ae 25
+KPX K aring -7
+KPX K e 5
+KPX K hyphen -24
+KPX K o -5
+KPX K oacute -5
+KPX K odieresis -5
+KPX K u -2
+KPX K udieresis -2
+KPX K y -69
+KPX L A 27
+KPX L AE 30
+KPX L Aacute 27
+KPX L Adieresis 27
+KPX L Aring 27
+KPX L C 0
+KPX L Ccedilla 0
+KPX L G 1
+KPX L O 0
+KPX L Oacute 0
+KPX L Ocircumflex 0
+KPX L Odieresis 0
+KPX L Ograve 0
+KPX L Otilde 0
+KPX L S -3
+KPX L T -43
+KPX L U -27
+KPX L Udieresis -27
+KPX L V -67
+KPX L W -50
+KPX L Y -43
+KPX L hyphen 44
+KPX L quotedblright -36
+KPX L quoteright -39
+KPX L u 2
+KPX L udieresis 0
+KPX L y 11
+KPX N A -33
+KPX N AE -30
+KPX N Aacute -33
+KPX N Adieresis -33
+KPX N Aring -33
+KPX N C -20
+KPX N Ccedilla -20
+KPX N G -20
+KPX N O -21
+KPX N Oacute -21
+KPX N Odieresis -21
+KPX N a -38
+KPX N aacute -38
+KPX N adieresis -38
+KPX N ae -32
+KPX N aring -38
+KPX N comma -11
+KPX N e -30
+KPX N eacute -32
+KPX N o -36
+KPX N oacute -37
+KPX N odieresis -35
+KPX N oslash -40
+KPX N period -24
+KPX N u -38
+KPX N udieresis -39
+KPX O A -49
+KPX O AE -32
+KPX O Aacute -49
+KPX O Adieresis -49
+KPX O Aring -49
+KPX O T -4
+KPX O V -38
+KPX O W -35
+KPX O X -45
+KPX O Y -26
+KPX Oacute A -49
+KPX Oacute T -4
+KPX Oacute V -38
+KPX Oacute W -35
+KPX Oacute Y -26
+KPX Ocircumflex T -4
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -26
+KPX Odieresis A -49
+KPX Odieresis T -4
+KPX Odieresis V -38
+KPX Odieresis W -35
+KPX Odieresis X -45
+KPX Odieresis Y -26
+KPX Ograve T -4
+KPX Ograve V -38
+KPX Ograve Y -26
+KPX Oslash A -49
+KPX Otilde T -4
+KPX Otilde V -38
+KPX Otilde Y -26
+KPX P A -89
+KPX P AE -65
+KPX P Aacute -89
+KPX P Adieresis -89
+KPX P Aring -89
+KPX P J -60
+KPX P a -50
+KPX P aacute -50
+KPX P adieresis -50
+KPX P ae -30
+KPX P aring -50
+KPX P comma -96
+KPX P e -48
+KPX P eacute -48
+KPX P hyphen -45
+KPX P o -51
+KPX P oacute -51
+KPX P odieresis -51
+KPX P oe -38
+KPX P oslash -56
+KPX P period -109
+KPX R C -8
+KPX R Ccedilla -8
+KPX R G -8
+KPX R O -9
+KPX R OE -2
+KPX R Oacute -9
+KPX R Odieresis -9
+KPX R T -19
+KPX R U -25
+KPX R Udieresis -25
+KPX R V -18
+KPX R W -22
+KPX R Y -7
+KPX R a -6
+KPX R aacute -6
+KPX R adieresis -6
+KPX R ae 7
+KPX R aring -6
+KPX R e 2
+KPX R eacute 2
+KPX R hyphen 19
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe 2
+KPX R u -11
+KPX R uacute -12
+KPX R udieresis -12
+KPX R y -32
+KPX S A -2
+KPX S AE 0
+KPX S Aacute -2
+KPX S Adieresis -2
+KPX S Aring -2
+KPX S T -17
+KPX S V 7
+KPX S W 3
+KPX S Y 16
+KPX S t -6
+KPX T A -55
+KPX T AE -50
+KPX T Aacute -55
+KPX T Acircumflex -55
+KPX T Adieresis -55
+KPX T Agrave -55
+KPX T Aring -55
+KPX T Atilde -55
+KPX T C 6
+KPX T G 5
+KPX T J -58
+KPX T O 5
+KPX T OE 10
+KPX T Oacute 5
+KPX T Ocircumflex 5
+KPX T Odieresis 5
+KPX T Ograve 5
+KPX T Oslash 5
+KPX T Otilde 5
+KPX T S -9
+KPX T V 37
+KPX T W 33
+KPX T Y 45
+KPX T a -45
+KPX T ae -18
+KPX T c -56
+KPX T colon -9
+KPX T comma -73
+KPX T e -48
+KPX T g -40
+KPX T guillemotleft -90
+KPX T guilsinglleft -90
+KPX T hyphen -86
+KPX T i 13
+KPX T j -12
+KPX T o -51
+KPX T oslash -59
+KPX T period -86
+KPX T r 12
+KPX T s -21
+KPX T semicolon -12
+KPX T u 6
+KPX T v 11
+KPX T w 16
+KPX T y -3
+KPX U A -51
+KPX U AE -40
+KPX U Aacute -51
+KPX U Acircumflex -51
+KPX U Adieresis -51
+KPX U Aring -51
+KPX U Atilde -51
+KPX U comma -23
+KPX U m -39
+KPX U n -35
+KPX U p -37
+KPX U period -36
+KPX U r -36
+KPX Uacute A -51
+KPX Uacute comma -23
+KPX Uacute m -39
+KPX Uacute n -35
+KPX Uacute p -37
+KPX Uacute period -36
+KPX Uacute r -36
+KPX Ucircumflex A -51
+KPX Udieresis A -51
+KPX Udieresis b 18
+KPX Udieresis comma -23
+KPX Udieresis m -39
+KPX Udieresis n -35
+KPX Udieresis p -37
+KPX Udieresis period -36
+KPX Udieresis r -36
+KPX Ugrave A -51
+KPX V A -101
+KPX V AE -40
+KPX V Aacute -101
+KPX V Acircumflex -101
+KPX V Adieresis -101
+KPX V Agrave -101
+KPX V Aring -101
+KPX V Atilde -101
+KPX V C -45
+KPX V G -49
+KPX V O -50
+KPX V Oacute -50
+KPX V Ocircumflex -50
+KPX V Odieresis -50
+KPX V Ograve -50
+KPX V Oslash -48
+KPX V Otilde -50
+KPX V S -19
+KPX V T 12
+KPX V a -91
+KPX V ae -85
+KPX V colon -81
+KPX V comma -86
+KPX V e -84
+KPX V g -94
+KPX V guillemotleft -64
+KPX V guilsinglleft -64
+KPX V hyphen -60
+KPX V i -25
+KPX V o -90
+KPX V oslash -94
+KPX V period -99
+KPX V r -55
+KPX V semicolon -80
+KPX V u -61
+KPX V y -74
+KPX W A -74
+KPX W AE -45
+KPX W Aacute -74
+KPX W Acircumflex -74
+KPX W Adieresis -74
+KPX W Agrave -74
+KPX W Aring -74
+KPX W Atilde -74
+KPX W C -38
+KPX W G -38
+KPX W O -39
+KPX W Oacute -39
+KPX W Ocircumflex -39
+KPX W Odieresis -39
+KPX W Ograve -39
+KPX W Oslash -37
+KPX W Otilde -39
+KPX W S -24
+KPX W T 7
+KPX W a -64
+KPX W ae -58
+KPX W colon -53
+KPX W comma -48
+KPX W e -57
+KPX W g -66
+KPX W guillemotleft -37
+KPX W guilsinglleft -37
+KPX W hyphen -33
+KPX W i -30
+KPX W o -62
+KPX W oslash -66
+KPX W period -61
+KPX W r -45
+KPX W semicolon -52
+KPX W u -51
+KPX W y -58
+KPX X C -35
+KPX X O -37
+KPX X Odieresis -37
+KPX X Q -35
+KPX X a -14
+KPX X e -2
+KPX X hyphen -35
+KPX X o -12
+KPX X u -9
+KPX X y -75
+KPX Y A -49
+KPX Y AE -33
+KPX Y Aacute -49
+KPX Y Acircumflex -49
+KPX Y Adieresis -49
+KPX Y Agrave -49
+KPX Y Aring -49
+KPX Y Atilde -49
+KPX Y C -33
+KPX Y G -37
+KPX Y O -38
+KPX Y Oacute -38
+KPX Y Ocircumflex -38
+KPX Y Odieresis -38
+KPX Y Ograve -38
+KPX Y Oslash -36
+KPX Y Otilde -38
+KPX Y S -8
+KPX Y T 20
+KPX Y a -95
+KPX Y ae -83
+KPX Y colon -82
+KPX Y comma -67
+KPX Y e -88
+KPX Y g -92
+KPX Y guillemotleft -80
+KPX Y guilsinglleft -80
+KPX Y hyphen -78
+KPX Y i -18
+KPX Y o -93
+KPX Y oslash -97
+KPX Y p -70
+KPX Y period -80
+KPX Y semicolon -80
+KPX Y u -75
+KPX Y v -68
+KPX Z v -16
+KPX Z y 2
+KPX a j -36
+KPX a quoteright -15
+KPX a v -16
+KPX a w 0
+KPX a y -18
+KPX aacute v -16
+KPX aacute w 0
+KPX aacute y -18
+KPX adieresis v -16
+KPX adieresis w 0
+KPX adieresis y -18
+KPX ae v -23
+KPX ae w -13
+KPX ae y -4
+KPX agrave v -16
+KPX agrave w 0
+KPX agrave y -18
+KPX aring v -16
+KPX aring w 0
+KPX aring y -18
+KPX b v -28
+KPX b w -13
+KPX b y -3
+KPX c h -26
+KPX c k -23
+KPX comma one -25
+KPX comma quotedblright 7
+KPX comma quoteright 1
+KPX e quoteright 8
+KPX e t -15
+KPX e v -27
+KPX e w -12
+KPX e x 0
+KPX e y -2
+KPX eacute v -27
+KPX eacute w -13
+KPX eacute y -2
+KPX ecircumflex v -27
+KPX ecircumflex w -13
+KPX ecircumflex y -2
+KPX eight four 7
+KPX eight one -46
+KPX eight seven -19
+KPX f a -25
+KPX f aacute -25
+KPX f adieresis 0
+KPX f ae -6
+KPX f aring -25
+KPX f e -25
+KPX f eacute -25
+KPX f f 15
+KPX f i 21
+KPX f j -3
+KPX f l 50
+KPX f o -27
+KPX f oacute -27
+KPX f odieresis 16
+KPX f oe -14
+KPX f oslash -33
+KPX f quoteright 58
+KPX f s -6
+KPX f t 17
+KPX five four 8
+KPX five one -56
+KPX five seven -30
+KPX four four 22
+KPX four one -28
+KPX four seven -21
+KPX g a -37
+KPX g adieresis -37
+KPX g ae -26
+KPX g aring -37
+KPX g e -30
+KPX g eacute -30
+KPX g l -41
+KPX g oacute -34
+KPX g odieresis -34
+KPX g r 1
+KPX guillemotright A -23
+KPX guillemotright AE -1
+KPX guillemotright Aacute -23
+KPX guillemotright Adieresis -23
+KPX guillemotright Aring -23
+KPX guillemotright T -77
+KPX guillemotright V -64
+KPX guillemotright W -43
+KPX guillemotright Y -68
+KPX guilsinglright A -23
+KPX guilsinglright AE -1
+KPX guilsinglright Aacute -23
+KPX guilsinglright Adieresis -23
+KPX guilsinglright Aring -23
+KPX guilsinglright T -77
+KPX guilsinglright V -64
+KPX guilsinglright W -43
+KPX guilsinglright Y -68
+KPX h quoteright -33
+KPX h y -33
+KPX hyphen A -14
+KPX hyphen AE 8
+KPX hyphen Aacute -14
+KPX hyphen Adieresis -14
+KPX hyphen Aring -14
+KPX hyphen T -68
+KPX hyphen V -56
+KPX hyphen W -35
+KPX hyphen Y -63
+KPX i T -40
+KPX i j -46
+KPX k a -15
+KPX k aacute -15
+KPX k adieresis -15
+KPX k ae -4
+KPX k aring -15
+KPX k comma 20
+KPX k e -7
+KPX k eacute -9
+KPX k g -15
+KPX k hyphen 8
+KPX k o -13
+KPX k oacute -15
+KPX k odieresis -15
+KPX k period 8
+KPX k s -12
+KPX k u -16
+KPX k udieresis -18
+KPX l v -30
+KPX l y -34
+KPX m p -12
+KPX m v -19
+KPX m w -2
+KPX m y -21
+KPX n T -59
+KPX n p -21
+KPX n quoteright -30
+KPX n v -29
+KPX n w -13
+KPX n y -31
+KPX nine four 0
+KPX nine one -54
+KPX nine seven -12
+KPX o T -53
+KPX o quoteright 0
+KPX o t -5
+KPX o v -16
+KPX o w -1
+KPX o x 1
+KPX o y 7
+KPX oacute v -18
+KPX oacute w -2
+KPX oacute y 7
+KPX ocircumflex t -7
+KPX odieresis t -7
+KPX odieresis v -18
+KPX odieresis w -2
+KPX odieresis x 0
+KPX odieresis y 7
+KPX ograve v -18
+KPX ograve w -2
+KPX ograve y 7
+KPX one comma -12
+KPX one eight -36
+KPX one five -35
+KPX one four -54
+KPX one nine -30
+KPX one one -39
+KPX one period -23
+KPX one seven -61
+KPX one six -40
+KPX one three -34
+KPX one two -5
+KPX one zero -34
+KPX p t -15
+KPX p y -4
+KPX period one -27
+KPX period quotedblright 8
+KPX period quoteright 3
+KPX q c -19
+KPX q u -22
+KPX quotedblbase A 46
+KPX quotedblbase AE 61
+KPX quotedblbase T -29
+KPX quotedblbase V -66
+KPX quotedblbase W -41
+KPX quotedblbase Y -28
+KPX quotedblleft A -57
+KPX quotedblleft AE -27
+KPX quotedblleft Aacute -57
+KPX quotedblleft Adieresis -57
+KPX quotedblleft Aring -57
+KPX quotedblleft T 34
+KPX quotedblleft V 36
+KPX quotedblleft W 35
+KPX quotedblleft Y 45
+KPX quotedblright A -53
+KPX quotedblright AE -22
+KPX quotedblright Aacute -53
+KPX quotedblright Adieresis -53
+KPX quotedblright Aring -53
+KPX quotedblright T 41
+KPX quotedblright V 48
+KPX quotedblright W 46
+KPX quotedblright Y 56
+KPX quoteleft A -72
+KPX quoteleft AE -42
+KPX quoteleft Aacute -72
+KPX quoteleft Adieresis -72
+KPX quoteleft Aring -72
+KPX quoteleft T 20
+KPX quoteleft V 22
+KPX quoteleft W 21
+KPX quoteleft Y 31
+KPX quoteright A -54
+KPX quoteright AE -24
+KPX quoteright Aacute -54
+KPX quoteright Adieresis -54
+KPX quoteright Aring -54
+KPX quoteright comma -2
+KPX quoteright d -5
+KPX quoteright o -8
+KPX quoteright period -15
+KPX quoteright r 12
+KPX quoteright s 9
+KPX quoteright t 16
+KPX quoteright v 10
+KPX quoteright w 21
+KPX quoteright y 30
+KPX r a -10
+KPX r aacute -10
+KPX r acircumflex -10
+KPX r adieresis -10
+KPX r ae -9
+KPX r agrave -10
+KPX r aring -10
+KPX r c -8
+KPX r ccedilla -4
+KPX r colon -10
+KPX r comma -92
+KPX r d -4
+KPX r e -5
+KPX r eacute -5
+KPX r ecircumflex -5
+KPX r egrave -5
+KPX r f 6
+KPX r g -15
+KPX r h -28
+KPX r hyphen -2
+KPX r i 7
+KPX r j -15
+KPX r k -26
+KPX r l -26
+KPX r m 5
+KPX r n 7
+KPX r o -8
+KPX r oacute -8
+KPX r ocircumflex -8
+KPX r odieresis -8
+KPX r oe 2
+KPX r ograve -8
+KPX r oslash -10
+KPX r p 8
+KPX r period -105
+KPX r q -8
+KPX r quoteright 32
+KPX r r 8
+KPX r s -6
+KPX r semicolon -10
+KPX r t 10
+KPX r u 4
+KPX r v 5
+KPX r w 10
+KPX r x 4
+KPX r y 14
+KPX r z 7
+KPX s quoteright 5
+KPX s t -11
+KPX seven colon -43
+KPX seven comma -33
+KPX seven eight -24
+KPX seven five -27
+KPX seven four -59
+KPX seven one -49
+KPX seven period -46
+KPX seven seven -29
+KPX seven six -27
+KPX seven three -25
+KPX seven two -21
+KPX six four 14
+KPX six one -44
+KPX six seven -16
+KPX t S -9
+KPX t a -21
+KPX t aacute -21
+KPX t adieresis -21
+KPX t ae -10
+KPX t aring -21
+KPX t colon -17
+KPX t e -12
+KPX t eacute -12
+KPX t h -26
+KPX t o -19
+KPX t oacute -19
+KPX t odieresis -19
+KPX t quoteright -2
+KPX t semicolon -16
+KPX three four 0
+KPX three one -56
+KPX three seven -27
+KPX two four 4
+KPX two one -47
+KPX two seven -20
+KPX u quoteright -21
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -18
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -15
+KPX v colon -18
+KPX v comma -9
+KPX v e -12
+KPX v eacute -14
+KPX v ecircumflex -14
+KPX v egrave -14
+KPX v g -26
+KPX v hyphen 11
+KPX v l -25
+KPX v o -17
+KPX v oacute -19
+KPX v odieresis -19
+KPX v ograve -19
+KPX v oslash -21
+KPX v period -22
+KPX v s -18
+KPX v semicolon -16
+KPX w a -14
+KPX w aacute -14
+KPX w acircumflex -14
+KPX w adieresis -14
+KPX w ae -12
+KPX w agrave -14
+KPX w aring -14
+KPX w atilde -14
+KPX w c -9
+KPX w colon -13
+KPX w comma -4
+KPX w e -7
+KPX w eacute -9
+KPX w ecircumflex -9
+KPX w egrave -9
+KPX w g -21
+KPX w hyphen 16
+KPX w l -20
+KPX w o -12
+KPX w oacute -14
+KPX w odieresis -14
+KPX w ograve -14
+KPX w oslash -16
+KPX w period -17
+KPX w s -13
+KPX w semicolon -11
+KPX x a -11
+KPX x c -7
+KPX x e -4
+KPX x eacute -5
+KPX x o -9
+KPX x q -3
+KPX y a -15
+KPX y aacute -15
+KPX y acircumflex -15
+KPX y adieresis -15
+KPX y ae -12
+KPX y agrave -15
+KPX y aring -15
+KPX y atilde -15
+KPX y c -12
+KPX y colon -13
+KPX y comma -9
+KPX y e -9
+KPX y eacute -9
+KPX y ecircumflex -9
+KPX y egrave -9
+KPX y g -20
+KPX y hyphen 12
+KPX y l -20
+KPX y o -14
+KPX y oacute -14
+KPX y odieresis -14
+KPX y ograve -14
+KPX y oslash -16
+KPX y period -22
+KPX y s -13
+KPX y semicolon -11
+KPX zero four 10
+KPX zero one -46
+KPX zero seven -7
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncbi8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uncbi8a.pfb
new file mode 100644
index 00000000000..31e589003a4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncbi8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncr8a.afm b/Master/tlpkg/tlgs/lib/fonts/uncr8a.afm
new file mode 100644
index 00000000000..b8f6643983a
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncr8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName CenturySchL-Roma
+FullName Century Schoolbook L Roman
+FamilyName Century Schoolbook L
+Weight Roman
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -104
+UnderlineThickness 61
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -217 -302 1000 981
+CapHeight 722
+XHeight 466
+Descender -202
+Ascender 737
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 296 ; N exclam ; B 87 -14 212 736 ;
+C 34 ; WX 389 ; N quotedbl ; B 61 498 328 736 ;
+C 35 ; WX 556 ; N numbersign ; B 33 0 524 686 ;
+C 36 ; WX 556 ; N dollar ; B 45 -130 510 801 ;
+C 37 ; WX 833 ; N percent ; B 45 0 792 722 ;
+C 38 ; WX 815 ; N ampersand ; B 51 -15 775 737 ;
+C 39 ; WX 204 ; N quoteright ; B 24 450 178 741 ;
+C 40 ; WX 333 ; N parenleft ; B 36 -123 279 736 ;
+C 41 ; WX 333 ; N parenright ; B 54 -123 297 736 ;
+C 42 ; WX 500 ; N asterisk ; B 56 300 443 736 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 505 ;
+C 44 ; WX 278 ; N comma ; B 64 -183 218 108 ;
+C 45 ; WX 333 ; N hyphen ; B 42 195 291 278 ;
+C 46 ; WX 278 ; N period ; B 74 -14 199 111 ;
+C 47 ; WX 278 ; N slash ; B -23 -14 302 736 ;
+C 48 ; WX 556 ; N zero ; B 42 -15 514 704 ;
+C 49 ; WX 556 ; N one ; B 100 0 496 704 ;
+C 50 ; WX 556 ; N two ; B 35 0 505 704 ;
+C 51 ; WX 556 ; N three ; B 42 -15 498 704 ;
+C 52 ; WX 556 ; N four ; B 28 0 527 704 ;
+C 53 ; WX 556 ; N five ; B 45 -15 502 704 ;
+C 54 ; WX 556 ; N six ; B 42 -15 516 704 ;
+C 55 ; WX 556 ; N seven ; B 59 -14 508 704 ;
+C 56 ; WX 556 ; N eight ; B 41 -15 513 704 ;
+C 57 ; WX 556 ; N nine ; B 39 -15 513 704 ;
+C 58 ; WX 278 ; N colon ; B 86 -14 211 473 ;
+C 59 ; WX 278 ; N semicolon ; B 72 -183 226 472 ;
+C 60 ; WX 606 ; N less ; B 49 -17 558 523 ;
+C 61 ; WX 606 ; N equal ; B 51 112 555 394 ;
+C 62 ; WX 606 ; N greater ; B 48 -17 557 523 ;
+C 63 ; WX 444 ; N question ; B 25 -15 411 736 ;
+C 64 ; WX 737 ; N at ; B 43 -14 705 736 ;
+C 65 ; WX 722 ; N A ; B -8 0 731 736 ;
+C 66 ; WX 722 ; N B ; B 30 0 670 722 ;
+C 67 ; WX 722 ; N C ; B 45 -15 668 737 ;
+C 68 ; WX 778 ; N D ; B 29 0 732 722 ;
+C 69 ; WX 722 ; N E ; B 29 0 663 722 ;
+C 70 ; WX 667 ; N F ; B 29 0 638 722 ;
+C 71 ; WX 778 ; N G ; B 42 -15 772 737 ;
+C 72 ; WX 833 ; N H ; B 29 0 804 722 ;
+C 73 ; WX 407 ; N I ; B 38 0 369 722 ;
+C 74 ; WX 556 ; N J ; B 5 -15 537 722 ;
+C 75 ; WX 778 ; N K ; B 30 0 803 722 ;
+C 76 ; WX 667 ; N L ; B 35 0 646 722 ;
+C 77 ; WX 944 ; N M ; B 22 0 913 722 ;
+C 78 ; WX 815 ; N N ; B 19 -14 794 722 ;
+C 79 ; WX 778 ; N O ; B 45 -15 733 737 ;
+C 80 ; WX 667 ; N P ; B 28 0 649 722 ;
+C 81 ; WX 778 ; N Q ; B 45 -189 749 737 ;
+C 82 ; WX 722 ; N R ; B 26 -15 713 722 ;
+C 83 ; WX 630 ; N S ; B 51 -15 590 737 ;
+C 84 ; WX 667 ; N T ; B 19 0 648 722 ;
+C 85 ; WX 815 ; N U ; B 17 -15 799 722 ;
+C 86 ; WX 722 ; N V ; B -8 -15 731 722 ;
+C 87 ; WX 981 ; N W ; B 6 -15 976 722 ;
+C 88 ; WX 704 ; N X ; B -6 0 716 722 ;
+C 89 ; WX 704 ; N Y ; B -13 0 713 722 ;
+C 90 ; WX 611 ; N Z ; B 24 0 575 722 ;
+C 91 ; WX 333 ; N bracketleft ; B 66 -108 297 722 ;
+C 92 ; WX 606 ; N backslash ; B 74 0 532 737 ;
+C 93 ; WX 333 ; N bracketright ; B 36 -108 266 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -134 500 -73 ;
+C 96 ; WX 204 ; N quoteleft ; B 26 444 181 736 ;
+C 97 ; WX 556 ; N a ; B 44 -15 543 481 ;
+C 98 ; WX 556 ; N b ; B 8 -15 520 737 ;
+C 99 ; WX 444 ; N c ; B 34 -15 426 481 ;
+C 100 ; WX 574 ; N d ; B 43 -15 554 737 ;
+C 101 ; WX 500 ; N e ; B 35 -15 466 481 ;
+C 102 ; WX 333 ; N f ; B 19 0 433 737 ;
+C 103 ; WX 537 ; N g ; B 23 -203 542 495 ;
+C 104 ; WX 611 ; N h ; B 15 0 593 737 ;
+C 105 ; WX 315 ; N i ; B 18 0 289 715 ;
+C 106 ; WX 296 ; N j ; B -82 -202 218 715 ;
+C 107 ; WX 593 ; N k ; B 14 0 587 737 ;
+C 108 ; WX 315 ; N l ; B 19 0 287 737 ;
+C 109 ; WX 889 ; N m ; B 23 0 868 481 ;
+C 110 ; WX 611 ; N n ; B 27 0 593 481 ;
+C 111 ; WX 500 ; N o ; B 34 -15 466 481 ;
+C 112 ; WX 574 ; N p ; B 28 -202 535 481 ;
+C 113 ; WX 556 ; N q ; B 36 -202 548 481 ;
+C 114 ; WX 444 ; N r ; B 21 0 435 481 ;
+C 115 ; WX 463 ; N s ; B 51 -15 421 481 ;
+C 116 ; WX 389 ; N t ; B 18 -15 374 664 ;
+C 117 ; WX 611 ; N u ; B 21 -15 594 466 ;
+C 118 ; WX 537 ; N v ; B 8 -15 528 466 ;
+C 119 ; WX 778 ; N w ; B 15 -15 763 466 ;
+C 120 ; WX 537 ; N x ; B 9 0 529 466 ;
+C 121 ; WX 537 ; N y ; B 3 -206 531 466 ;
+C 122 ; WX 481 ; N z ; B 39 0 435 466 ;
+C 123 ; WX 333 ; N braceleft ; B 66 -108 297 722 ;
+C 124 ; WX 606 ; N bar ; B 264 0 342 722 ;
+C 125 ; WX 333 ; N braceright ; B 36 -108 267 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 165 555 327 ;
+C 161 ; WX 296 ; N exclamdown ; B 86 -202 211 549 ;
+C 162 ; WX 556 ; N cent ; B 71 -141 479 585 ;
+C 163 ; WX 556 ; N sterling ; B 17 -15 537 704 ;
+C 164 ; WX 167 ; N fraction ; B -217 0 339 708 ;
+C 165 ; WX 556 ; N yen ; B -1 0 557 722 ;
+C 166 ; WX 556 ; N florin ; B 3 -205 541 737 ;
+C 167 ; WX 500 ; N section ; B 58 -148 448 736 ;
+C 168 ; WX 556 ; N currency ; B 26 93 530 597 ;
+C 169 ; WX 204 ; N quotesingle ; B 59 498 145 736 ;
+C 170 ; WX 389 ; N quotedblleft ; B 26 444 365 736 ;
+C 171 ; WX 426 ; N guillemotleft ; B 38 85 388 402 ;
+C 172 ; WX 259 ; N guilsinglleft ; B 38 85 221 402 ;
+C 173 ; WX 259 ; N guilsinglright ; B 39 85 221 402 ;
+C 174 ; WX 611 ; N fi ; B 16 0 588 736 ;
+C 175 ; WX 611 ; N fl ; B 16 0 590 737 ;
+C 177 ; WX 556 ; N endash ; B 0 206 556 267 ;
+C 178 ; WX 500 ; N dagger ; B 44 -144 460 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B 47 -144 462 737 ;
+C 180 ; WX 278 ; N periodcentered ; B 76 184 201 309 ;
+C 182 ; WX 606 ; N paragraph ; B 49 -144 557 722 ;
+C 183 ; WX 606 ; N bullet ; B 134 217 471 554 ;
+C 184 ; WX 204 ; N quotesinglbase ; B 24 -183 178 108 ;
+C 185 ; WX 389 ; N quotedblbase ; B 24 -183 362 108 ;
+C 186 ; WX 389 ; N quotedblright ; B 24 444 362 736 ;
+C 187 ; WX 426 ; N guillemotright ; B 39 85 388 402 ;
+C 188 ; WX 1000 ; N ellipsis ; B 104 -14 895 111 ;
+C 189 ; WX 1000 ; N perthousand ; B 2 -2 991 700 ;
+C 191 ; WX 444 ; N questiondown ; B 30 -202 416 549 ;
+C 193 ; WX 333 ; N grave ; B 17 535 242 706 ;
+C 194 ; WX 333 ; N acute ; B 91 535 316 706 ;
+C 195 ; WX 333 ; N circumflex ; B 10 535 323 701 ;
+C 196 ; WX 333 ; N tilde ; B 1 553 332 659 ;
+C 197 ; WX 333 ; N macron ; B 10 568 323 622 ;
+C 198 ; WX 333 ; N breve ; B 25 535 308 692 ;
+C 199 ; WX 333 ; N dotaccent ; B 117 544 217 644 ;
+C 200 ; WX 333 ; N dieresis ; B 17 544 316 644 ;
+C 202 ; WX 333 ; N ring ; B 67 530 266 729 ;
+C 203 ; WX 333 ; N cedilla ; B 29 -215 237 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 45 535 288 701 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -152 246 0 ;
+C 207 ; WX 333 ; N caron ; B 10 535 323 701 ;
+C 208 ; WX 1000 ; N emdash ; B 0 206 1000 267 ;
+C 225 ; WX 1000 ; N AE ; B 0 0 963 722 ;
+C 227 ; WX 334 ; N ordfeminine ; B 5 329 329 730 ;
+C 232 ; WX 667 ; N Lslash ; B 34 0 645 722 ;
+C 233 ; WX 778 ; N Oslash ; B 30 -76 733 762 ;
+C 234 ; WX 1000 ; N OE ; B 19 0 981 722 ;
+C 235 ; WX 300 ; N ordmasculine ; B 10 329 291 730 ;
+C 241 ; WX 796 ; N ae ; B 36 -15 759 481 ;
+C 245 ; WX 315 ; N dotlessi ; B 18 0 289 466 ;
+C 248 ; WX 315 ; N lslash ; B 19 0 287 737 ;
+C 249 ; WX 500 ; N oslash ; B 34 -91 466 555 ;
+C 250 ; WX 833 ; N oe ; B 34 -15 800 481 ;
+C 251 ; WX 574 ; N germandbls ; B 29 -15 535 737 ;
+C -1 ; WX 815 ; N Udieresis ; B 17 -15 799 902 ;
+C -1 ; WX 815 ; N Uacute ; B 17 -15 799 958 ;
+C -1 ; WX 630 ; N Scedilla ; B 51 -215 590 737 ;
+C -1 ; WX 667 ; N Tcaron ; B 19 0 648 953 ;
+C -1 ; WX 630 ; N Scaron ; B 51 -15 590 953 ;
+C -1 ; WX 722 ; N Rcaron ; B 26 -15 713 953 ;
+C -1 ; WX 722 ; N Racute ; B 26 -15 713 958 ;
+C -1 ; WX 630 ; N Sacute ; B 51 -15 590 958 ;
+C -1 ; WX 778 ; N Otilde ; B 45 -15 733 915 ;
+C -1 ; WX 611 ; N ucircumflex ; B 21 -15 594 701 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 45 -15 733 953 ;
+C -1 ; WX 815 ; N Uhungarumlaut ; B 17 -15 799 953 ;
+C -1 ; WX 704 ; N Yacute ; B -13 0 713 958 ;
+C -1 ; WX 778 ; N Eth ; B 29 0 732 722 ;
+C -1 ; WX 778 ; N Dcroat ; B 29 0 732 722 ;
+C -1 ; WX 611 ; N Zacute ; B 24 0 575 958 ;
+C -1 ; WX 815 ; N Uring ; B 17 -15 799 981 ;
+C -1 ; WX 537 ; N gbreve ; B 23 -203 542 692 ;
+C -1 ; WX 500 ; N eogonek ; B 35 -152 466 481 ;
+C -1 ; WX 500 ; N edotaccent ; B 35 -15 466 644 ;
+C -1 ; WX 500 ; N ecaron ; B 35 -15 466 701 ;
+C -1 ; WX 815 ; N Ugrave ; B 17 -15 799 958 ;
+C -1 ; WX 667 ; N Thorn ; B 28 0 649 722 ;
+C -1 ; WX 500 ; N eacute ; B 35 -15 466 706 ;
+C -1 ; WX 500 ; N edieresis ; B 35 -15 466 644 ;
+C -1 ; WX 606 ; N dcaron ; B 43 -15 627 740 ;
+C -1 ; WX 444 ; N ccedilla ; B 34 -215 426 481 ;
+C -1 ; WX 444 ; N ccaron ; B 34 -15 426 701 ;
+C -1 ; WX 444 ; N cacute ; B 34 -15 426 706 ;
+C -1 ; WX 556 ; N aogonek ; B 44 -152 564 481 ;
+C -1 ; WX 556 ; N aring ; B 44 -15 543 729 ;
+C -1 ; WX 556 ; N atilde ; B 44 -15 543 659 ;
+C -1 ; WX 556 ; N abreve ; B 44 -15 543 692 ;
+C -1 ; WX 500 ; N egrave ; B 35 -15 466 706 ;
+C -1 ; WX 556 ; N agrave ; B 44 -15 543 706 ;
+C -1 ; WX 556 ; N aacute ; B 44 -15 543 706 ;
+C -1 ; WX 556 ; N adieresis ; B 44 -15 543 644 ;
+C -1 ; WX 815 ; N Uogonek ; B 17 -152 799 722 ;
+C -1 ; WX 611 ; N ugrave ; B 21 -15 594 706 ;
+C -1 ; WX 611 ; N uacute ; B 21 -15 594 706 ;
+C -1 ; WX 611 ; N udieresis ; B 21 -15 594 644 ;
+C -1 ; WX 389 ; N tcaron ; B 18 -15 389 740 ;
+C -1 ; WX 463 ; N scommaaccent ; B 51 -302 421 481 ;
+C -1 ; WX 611 ; N Zcaron ; B 24 0 575 953 ;
+C -1 ; WX 500 ; N ecircumflex ; B 35 -15 466 701 ;
+C -1 ; WX 815 ; N Ucircumflex ; B 17 -15 799 953 ;
+C -1 ; WX 556 ; N acircumflex ; B 44 -15 543 701 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 24 0 575 896 ;
+C -1 ; WX 463 ; N scaron ; B 51 -15 421 701 ;
+C -1 ; WX 722 ; N Amacron ; B -8 0 731 874 ;
+C -1 ; WX 463 ; N sacute ; B 51 -15 421 706 ;
+C -1 ; WX 667 ; N Tcommaaccent ; B 19 -302 648 722 ;
+C -1 ; WX 704 ; N Ydieresis ; B -13 0 713 902 ;
+C -1 ; WX 574 ; N thorn ; B 28 -202 535 737 ;
+C -1 ; WX 722 ; N Emacron ; B 29 0 663 874 ;
+C -1 ; WX 778 ; N Ograve ; B 45 -15 733 958 ;
+C -1 ; WX 778 ; N Oacute ; B 45 -15 733 958 ;
+C -1 ; WX 778 ; N Odieresis ; B 45 -15 733 902 ;
+C -1 ; WX 815 ; N Ntilde ; B 19 -14 794 915 ;
+C -1 ; WX 815 ; N Ncaron ; B 19 -14 794 953 ;
+C -1 ; WX 815 ; N Nacute ; B 19 -14 794 958 ;
+C -1 ; WX 667 ; N Lcaron ; B 35 0 646 740 ;
+C -1 ; WX 667 ; N Lacute ; B 35 0 646 958 ;
+C -1 ; WX 407 ; N Idotaccent ; B 38 0 369 896 ;
+C -1 ; WX 444 ; N racute ; B 21 0 435 706 ;
+C -1 ; WX 407 ; N Icircumflex ; B 38 0 369 953 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 34 -15 466 701 ;
+C -1 ; WX 500 ; N otilde ; B 34 -15 466 659 ;
+C -1 ; WX 556 ; N Euro ; B 0 -15 545 713 ;
+C -1 ; WX 500 ; N ocircumflex ; B 34 -15 466 701 ;
+C -1 ; WX 333 ; N onesuperior ; B 39 289 294 712 ;
+C -1 ; WX 333 ; N twosuperior ; B 13 289 319 712 ;
+C -1 ; WX 333 ; N threesuperior ; B 18 280 314 712 ;
+C -1 ; WX 407 ; N Igrave ; B 38 0 369 958 ;
+C -1 ; WX 407 ; N Iacute ; B 38 0 369 958 ;
+C -1 ; WX 407 ; N Imacron ; B 38 0 369 874 ;
+C -1 ; WX 407 ; N Iogonek ; B 38 -152 407 722 ;
+C -1 ; WX 407 ; N Idieresis ; B 38 0 369 902 ;
+C -1 ; WX 778 ; N Gbreve ; B 42 -15 772 944 ;
+C -1 ; WX 815 ; N Umacron ; B 17 -15 799 874 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B 30 -302 803 722 ;
+C -1 ; WX 500 ; N ograve ; B 34 -15 466 706 ;
+C -1 ; WX 630 ; N Scommaaccent ; B 51 -302 590 737 ;
+C -1 ; WX 722 ; N Eogonek ; B 29 -152 680 722 ;
+C -1 ; WX 500 ; N oacute ; B 34 -15 466 706 ;
+C -1 ; WX 722 ; N Edotaccent ; B 29 0 663 896 ;
+C -1 ; WX 315 ; N iogonek ; B 18 -152 327 715 ;
+C -1 ; WX 537 ; N gcommaaccent ; B 23 -203 542 780 ;
+C -1 ; WX 500 ; N odieresis ; B 34 -15 466 644 ;
+C -1 ; WX 611 ; N ntilde ; B 27 0 593 659 ;
+C -1 ; WX 611 ; N ncaron ; B 27 0 593 701 ;
+C -1 ; WX 722 ; N Ecaron ; B 29 0 663 953 ;
+C -1 ; WX 722 ; N Ecircumflex ; B 29 0 663 953 ;
+C -1 ; WX 463 ; N scedilla ; B 51 -215 421 481 ;
+C -1 ; WX 444 ; N rcaron ; B 21 0 435 701 ;
+C -1 ; WX 722 ; N Egrave ; B 29 0 663 958 ;
+C -1 ; WX 722 ; N Eacute ; B 29 0 663 958 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 42 -302 772 737 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 26 -302 713 722 ;
+C -1 ; WX 722 ; N Edieresis ; B 29 0 663 902 ;
+C -1 ; WX 611 ; N nacute ; B 27 0 593 706 ;
+C -1 ; WX 611 ; N uogonek ; B 21 -152 632 466 ;
+C -1 ; WX 611 ; N umacron ; B 21 -15 594 622 ;
+C -1 ; WX 778 ; N Dcaron ; B 29 0 732 953 ;
+C -1 ; WX 339 ; N lcaron ; B 19 0 359 740 ;
+C -1 ; WX 722 ; N Ccaron ; B 45 -15 668 953 ;
+C -1 ; WX 722 ; N Cacute ; B 45 -15 668 958 ;
+C -1 ; WX 722 ; N Ccedilla ; B 45 -216 668 737 ;
+C -1 ; WX 400 ; N degree ; B 50 380 350 686 ;
+C -1 ; WX 722 ; N Aogonek ; B -8 -152 769 736 ;
+C -1 ; WX 606 ; N minus ; B 51 213 555 293 ;
+C -1 ; WX 606 ; N multiply ; B 51 1 555 505 ;
+C -1 ; WX 606 ; N divide ; B 51 -9 555 515 ;
+C -1 ; WX 722 ; N Aring ; B -8 0 731 979 ;
+C -1 ; WX 1000 ; N trademark ; B 45 294 955 722 ;
+C -1 ; WX 444 ; N rcommaaccent ; B 21 -302 435 481 ;
+C -1 ; WX 315 ; N lacute ; B 19 0 307 958 ;
+C -1 ; WX 500 ; N omacron ; B 34 -15 466 622 ;
+C -1 ; WX 722 ; N Atilde ; B -8 0 731 915 ;
+C -1 ; WX 315 ; N icircumflex ; B 1 0 314 701 ;
+C -1 ; WX 315 ; N igrave ; B 8 0 289 706 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 27 -302 593 481 ;
+C -1 ; WX 315 ; N lcommaaccent ; B 19 -302 287 737 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 581 ;
+C -1 ; WX 834 ; N onehalf ; B 39 0 821 712 ;
+C -1 ; WX 834 ; N onequarter ; B 39 0 795 712 ;
+C -1 ; WX 834 ; N threequarters ; B 28 0 795 712 ;
+C -1 ; WX 315 ; N iacute ; B 18 0 307 706 ;
+C -1 ; WX 722 ; N Abreve ; B -8 0 731 944 ;
+C -1 ; WX 593 ; N kcommaaccent ; B 14 -302 587 737 ;
+C -1 ; WX 778 ; N Omacron ; B 45 -15 733 874 ;
+C -1 ; WX 315 ; N imacron ; B 1 0 314 622 ;
+C -1 ; WX 500 ; N emacron ; B 35 -15 466 622 ;
+C -1 ; WX 556 ; N amacron ; B 44 -15 543 622 ;
+C -1 ; WX 389 ; N tcommaaccent ; B 18 -302 374 664 ;
+C -1 ; WX 537 ; N ydieresis ; B 3 -206 531 644 ;
+C -1 ; WX 481 ; N zdotaccent ; B 39 0 435 644 ;
+C -1 ; WX 481 ; N zcaron ; B 39 0 435 701 ;
+C -1 ; WX 481 ; N zacute ; B 39 0 436 706 ;
+C -1 ; WX 537 ; N yacute ; B 3 -206 531 706 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 21 -15 594 701 ;
+C -1 ; WX 500 ; N eth ; B 34 -15 466 731 ;
+C -1 ; WX 611 ; N uring ; B 21 -15 594 729 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 45 -15 733 953 ;
+C -1 ; WX 333 ; N commaaccent ; B 96 -302 235 -40 ;
+C -1 ; WX 737 ; N copyright ; B -8 -15 744 737 ;
+C -1 ; WX 737 ; N registered ; B -8 -15 744 737 ;
+C -1 ; WX 722 ; N Acircumflex ; B -8 0 731 953 ;
+C -1 ; WX 315 ; N idieresis ; B 8 0 307 644 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -43 555 549 ;
+C -1 ; WX 549 ; N radical ; B -10 -35 531 916 ;
+C -1 ; WX 722 ; N Agrave ; B -8 0 731 958 ;
+C -1 ; WX 722 ; N Aacute ; B -8 0 731 958 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 643 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 557 643 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 0 555 293 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 815 ; N Ncommaaccent ; B 19 -302 794 722 ;
+C -1 ; WX 574 ; N dcroat ; B 43 -15 554 737 ;
+C -1 ; WX 606 ; N brokenbar ; B 264 0 342 722 ;
+C -1 ; WX 667 ; N Lcommaaccent ; B 35 -302 646 722 ;
+C -1 ; WX 722 ; N Adieresis ; B -8 0 731 902 ;
+C -1 ; WX 611 ; N mu ; B 21 -219 594 466 ;
+C -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -38
+KPX A Ccedilla -43
+KPX A G -37
+KPX A O -41
+KPX A Odieresis -41
+KPX A Q -39
+KPX A T -31
+KPX A U -41
+KPX A Uacute -41
+KPX A Ucircumflex -41
+KPX A Udieresis -41
+KPX A Ugrave -41
+KPX A V -101
+KPX A W -90
+KPX A Y -45
+KPX A a 15
+KPX A b 8
+KPX A c -2
+KPX A ccedilla -9
+KPX A comma 13
+KPX A d -6
+KPX A e -5
+KPX A g 18
+KPX A guillemotleft -36
+KPX A guilsinglleft -36
+KPX A hyphen -6
+KPX A o -9
+KPX A period 12
+KPX A q 0
+KPX A quotedblright -67
+KPX A quoteright -66
+KPX A t -12
+KPX A u -15
+KPX A v -66
+KPX A w -61
+KPX A y -70
+KPX Aacute C -38
+KPX Aacute G -37
+KPX Aacute O -41
+KPX Aacute Q -39
+KPX Aacute T -31
+KPX Aacute U -41
+KPX Aacute V -101
+KPX Aacute W -90
+KPX Aacute Y -45
+KPX Aacute a 15
+KPX Aacute b 8
+KPX Aacute c -2
+KPX Aacute comma 13
+KPX Aacute d -6
+KPX Aacute e -5
+KPX Aacute g 18
+KPX Aacute guillemotleft -36
+KPX Aacute guilsinglleft -36
+KPX Aacute hyphen -6
+KPX Aacute o -9
+KPX Aacute period 12
+KPX Aacute q 0
+KPX Aacute quoteright -66
+KPX Aacute t -12
+KPX Aacute u -15
+KPX Aacute v -66
+KPX Aacute w -61
+KPX Aacute y -70
+KPX Acircumflex C -38
+KPX Acircumflex G -37
+KPX Acircumflex O -41
+KPX Acircumflex Q -39
+KPX Acircumflex T -31
+KPX Acircumflex U -41
+KPX Acircumflex V -101
+KPX Acircumflex W -90
+KPX Acircumflex Y -45
+KPX Acircumflex comma 13
+KPX Acircumflex period 12
+KPX Adieresis C -38
+KPX Adieresis G -37
+KPX Adieresis O -41
+KPX Adieresis Q -39
+KPX Adieresis T -31
+KPX Adieresis U -41
+KPX Adieresis V -101
+KPX Adieresis W -90
+KPX Adieresis Y -45
+KPX Adieresis a 15
+KPX Adieresis b 8
+KPX Adieresis c -2
+KPX Adieresis comma 13
+KPX Adieresis d -6
+KPX Adieresis g 18
+KPX Adieresis guillemotleft -36
+KPX Adieresis guilsinglleft -36
+KPX Adieresis hyphen -6
+KPX Adieresis o -9
+KPX Adieresis period 12
+KPX Adieresis q 0
+KPX Adieresis quotedblright -67
+KPX Adieresis quoteright -66
+KPX Adieresis t -12
+KPX Adieresis u -15
+KPX Adieresis v -66
+KPX Adieresis w -61
+KPX Adieresis y -70
+KPX Agrave C -38
+KPX Agrave G -37
+KPX Agrave O -41
+KPX Agrave Q -39
+KPX Agrave T -31
+KPX Agrave U -41
+KPX Agrave V -101
+KPX Agrave W -90
+KPX Agrave Y -45
+KPX Agrave comma 13
+KPX Agrave period 12
+KPX Aring C -38
+KPX Aring G -37
+KPX Aring O -41
+KPX Aring Q -39
+KPX Aring T -31
+KPX Aring U -41
+KPX Aring V -101
+KPX Aring W -90
+KPX Aring Y -45
+KPX Aring a 15
+KPX Aring b 8
+KPX Aring c -2
+KPX Aring comma 13
+KPX Aring d -6
+KPX Aring e -5
+KPX Aring g 18
+KPX Aring guillemotleft -36
+KPX Aring guilsinglleft -36
+KPX Aring hyphen -6
+KPX Aring o -9
+KPX Aring period 12
+KPX Aring q 0
+KPX Aring quotedblright -67
+KPX Aring quoteright -66
+KPX Aring t -12
+KPX Aring u -15
+KPX Aring v -66
+KPX Aring w -61
+KPX Aring y -70
+KPX Atilde C -38
+KPX Atilde G -37
+KPX Atilde O -41
+KPX Atilde Q -39
+KPX Atilde T -31
+KPX Atilde U -41
+KPX Atilde V -101
+KPX Atilde W -90
+KPX Atilde Y -45
+KPX Atilde comma 13
+KPX Atilde period 12
+KPX B A -9
+KPX B AE -13
+KPX B Aacute -9
+KPX B Acircumflex -9
+KPX B Adieresis -9
+KPX B Aring -9
+KPX B Atilde -9
+KPX B O -11
+KPX B OE 0
+KPX B Oacute -11
+KPX B Ocircumflex -11
+KPX B Odieresis -11
+KPX B Ograve -11
+KPX B Oslash -9
+KPX B V -26
+KPX B W -33
+KPX B Y -19
+KPX C A -24
+KPX C AE -28
+KPX C Aacute -24
+KPX C Adieresis -24
+KPX C Aring -24
+KPX C H -9
+KPX C K -9
+KPX C O -6
+KPX C Oacute -6
+KPX C Odieresis -6
+KPX Ccedilla A -28
+KPX D A -38
+KPX D Aacute -38
+KPX D Acircumflex -38
+KPX D Adieresis -38
+KPX D Agrave -38
+KPX D Aring -38
+KPX D Atilde -38
+KPX D J 6
+KPX D T 10
+KPX D V -41
+KPX D W -47
+KPX D X -37
+KPX D Y -34
+KPX F A -77
+KPX F Aacute -77
+KPX F Acircumflex -77
+KPX F Adieresis -77
+KPX F Agrave -77
+KPX F Aring -77
+KPX F Atilde -77
+KPX F J -57
+KPX F O 2
+KPX F Odieresis 2
+KPX F a -36
+KPX F aacute -36
+KPX F adieresis -36
+KPX F ae -33
+KPX F aring -36
+KPX F comma -93
+KPX F e -42
+KPX F eacute -42
+KPX F hyphen -40
+KPX F i 11
+KPX F j 14
+KPX F o -41
+KPX F oacute -41
+KPX F odieresis -29
+KPX F oe -40
+KPX F oslash -45
+KPX F period -94
+KPX F r 10
+KPX F u 14
+KPX G A -6
+KPX G AE -10
+KPX G Aacute -6
+KPX G Acircumflex -6
+KPX G Adieresis -6
+KPX G Agrave -6
+KPX G Aring -6
+KPX G Atilde -6
+KPX G T -12
+KPX G V -13
+KPX G W -20
+KPX G Y -10
+KPX J A -42
+KPX J AE -46
+KPX J Adieresis -42
+KPX J Aring -42
+KPX K C -30
+KPX K G -29
+KPX K O -33
+KPX K OE -23
+KPX K Oacute -33
+KPX K Odieresis -33
+KPX K S 30
+KPX K T 21
+KPX K a 23
+KPX K adieresis 23
+KPX K ae 28
+KPX K aring 23
+KPX K e 2
+KPX K hyphen -30
+KPX K o -1
+KPX K oacute -1
+KPX K odieresis -1
+KPX K u -7
+KPX K udieresis -7
+KPX K y -67
+KPX L A 29
+KPX L AE 25
+KPX L Aacute 29
+KPX L Adieresis 29
+KPX L Aring 29
+KPX L C 7
+KPX L Ccedilla 6
+KPX L G 9
+KPX L O 6
+KPX L Oacute 6
+KPX L Ocircumflex 6
+KPX L Odieresis 6
+KPX L Ograve 6
+KPX L Otilde 6
+KPX L S 8
+KPX L T -51
+KPX L U -27
+KPX L Udieresis -27
+KPX L V -80
+KPX L W -69
+KPX L Y -69
+KPX L hyphen 49
+KPX L quotedblright -47
+KPX L quoteright -46
+KPX L u -8
+KPX L udieresis -8
+KPX L y -37
+KPX N A -19
+KPX N AE -23
+KPX N Aacute -19
+KPX N Adieresis -19
+KPX N Aring -19
+KPX N C -26
+KPX N Ccedilla -26
+KPX N G -24
+KPX N O -26
+KPX N Oacute -26
+KPX N Odieresis -26
+KPX N a -37
+KPX N aacute -37
+KPX N adieresis -37
+KPX N ae -32
+KPX N aring -37
+KPX N comma -24
+KPX N e -29
+KPX N eacute -29
+KPX N o -29
+KPX N oacute -29
+KPX N odieresis -29
+KPX N oslash -28
+KPX N period -25
+KPX N u -39
+KPX N udieresis -39
+KPX O A -41
+KPX O AE -45
+KPX O Aacute -41
+KPX O Adieresis -41
+KPX O Aring -41
+KPX O T 10
+KPX O V -38
+KPX O W -45
+KPX O X -34
+KPX O Y -31
+KPX Oacute A -41
+KPX Oacute T 10
+KPX Oacute V -38
+KPX Oacute W -45
+KPX Oacute Y -31
+KPX Ocircumflex T 10
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -31
+KPX Odieresis A -41
+KPX Odieresis T 10
+KPX Odieresis V -38
+KPX Odieresis W -45
+KPX Odieresis X -34
+KPX Odieresis Y -31
+KPX Ograve T 10
+KPX Ograve V -38
+KPX Ograve Y -31
+KPX Oslash A -44
+KPX Otilde T 10
+KPX Otilde V -38
+KPX Otilde Y -31
+KPX P A -76
+KPX P AE -84
+KPX P Aacute -76
+KPX P Adieresis -76
+KPX P Aring -76
+KPX P J -56
+KPX P a -23
+KPX P aacute -23
+KPX P adieresis -23
+KPX P ae -20
+KPX P aring -23
+KPX P comma -100
+KPX P e -26
+KPX P eacute -26
+KPX P hyphen -35
+KPX P o -26
+KPX P oacute -26
+KPX P odieresis -25
+KPX P oe -25
+KPX P oslash -29
+KPX P period -101
+KPX R C -3
+KPX R Ccedilla -5
+KPX R G 0
+KPX R O -5
+KPX R OE 6
+KPX R Oacute -5
+KPX R Odieresis -5
+KPX R T -10
+KPX R U -22
+KPX R Udieresis -22
+KPX R V -21
+KPX R W -28
+KPX R Y -14
+KPX R a 11
+KPX R aacute 11
+KPX R adieresis 11
+KPX R ae 15
+KPX R aring 11
+KPX R e 15
+KPX R eacute 15
+KPX R hyphen 30
+KPX R o 13
+KPX R oacute 13
+KPX R odieresis 13
+KPX R oe 14
+KPX R u -15
+KPX R uacute -15
+KPX R udieresis -15
+KPX R y -19
+KPX S A -1
+KPX S AE -5
+KPX S Aacute -1
+KPX S Adieresis -1
+KPX S Aring -1
+KPX S T -1
+KPX S V 8
+KPX S W 1
+KPX S Y 10
+KPX S t -5
+KPX T A -32
+KPX T AE -36
+KPX T Aacute -32
+KPX T Acircumflex -32
+KPX T Adieresis -32
+KPX T Agrave -32
+KPX T Aring -32
+KPX T Atilde -32
+KPX T C 10
+KPX T G 12
+KPX T J -58
+KPX T O 10
+KPX T OE 23
+KPX T Oacute 10
+KPX T Ocircumflex 10
+KPX T Odieresis 10
+KPX T Ograve 10
+KPX T Oslash 10
+KPX T Otilde 10
+KPX T S 0
+KPX T V 33
+KPX T W 26
+KPX T Y 35
+KPX T a -19
+KPX T ae -15
+KPX T c -23
+KPX T colon -9
+KPX T comma -71
+KPX T e -24
+KPX T g -23
+KPX T guillemotleft -104
+KPX T guilsinglleft -104
+KPX T hyphen -74
+KPX T i 21
+KPX T j 23
+KPX T o -23
+KPX T oslash -27
+KPX T period -73
+KPX T r 19
+KPX T s -10
+KPX T semicolon -9
+KPX T u 19
+KPX T v 26
+KPX T w 22
+KPX T y 23
+KPX U A -54
+KPX U AE -58
+KPX U Aacute -54
+KPX U Acircumflex -54
+KPX U Adieresis -54
+KPX U Aring -54
+KPX U Atilde -54
+KPX U comma -43
+KPX U m -38
+KPX U n -40
+KPX U p -40
+KPX U period -44
+KPX U r -37
+KPX Uacute A -54
+KPX Uacute comma -43
+KPX Uacute m -38
+KPX Uacute n -40
+KPX Uacute p -40
+KPX Uacute period -44
+KPX Uacute r -37
+KPX Ucircumflex A -54
+KPX Udieresis A -54
+KPX Udieresis b 27
+KPX Udieresis comma -43
+KPX Udieresis m -38
+KPX Udieresis n -40
+KPX Udieresis p -40
+KPX Udieresis period -44
+KPX Udieresis r -37
+KPX Ugrave A -54
+KPX V A -100
+KPX V AE -70
+KPX V Aacute -100
+KPX V Acircumflex -100
+KPX V Adieresis -100
+KPX V Agrave -100
+KPX V Aring -100
+KPX V Atilde -100
+KPX V C -40
+KPX V G -39
+KPX V O -36
+KPX V Oacute -36
+KPX V Ocircumflex -36
+KPX V Odieresis -36
+KPX V Ograve -36
+KPX V Oslash -39
+KPX V Otilde -36
+KPX V S -7
+KPX V T 33
+KPX V a -87
+KPX V ae -84
+KPX V colon -81
+KPX V comma -101
+KPX V e -82
+KPX V g -86
+KPX V guillemotleft -85
+KPX V guilsinglleft -85
+KPX V hyphen -57
+KPX V i -7
+KPX V o -82
+KPX V oslash -82
+KPX V period -102
+KPX V r -49
+KPX V semicolon -81
+KPX V u -47
+KPX V y -43
+KPX W A -84
+KPX W AE -77
+KPX W Aacute -84
+KPX W Acircumflex -84
+KPX W Adieresis -84
+KPX W Agrave -84
+KPX W Aring -84
+KPX W Atilde -84
+KPX W C -47
+KPX W G -45
+KPX W O -43
+KPX W Oacute -43
+KPX W Ocircumflex -43
+KPX W Odieresis -43
+KPX W Ograve -43
+KPX W Oslash -43
+KPX W Otilde -43
+KPX W S -14
+KPX W T 26
+KPX W a -75
+KPX W ae -70
+KPX W colon -75
+KPX W comma -79
+KPX W e -66
+KPX W g -70
+KPX W guillemotleft -70
+KPX W guilsinglleft -70
+KPX W hyphen -41
+KPX W i -14
+KPX W o -67
+KPX W oslash -66
+KPX W period -81
+KPX W r -43
+KPX W semicolon -75
+KPX W u -42
+KPX W y -38
+KPX X C -36
+KPX X O -39
+KPX X Odieresis -39
+KPX X Q -37
+KPX X a 17
+KPX X e -3
+KPX X hyphen -37
+KPX X o -7
+KPX X u -14
+KPX X y -74
+KPX Y A -36
+KPX Y AE -40
+KPX Y Aacute -36
+KPX Y Acircumflex -36
+KPX Y Adieresis -36
+KPX Y Agrave -36
+KPX Y Aring -36
+KPX Y Atilde -36
+KPX Y C -36
+KPX Y G -34
+KPX Y O -32
+KPX Y Oacute -32
+KPX Y Ocircumflex -32
+KPX Y Odieresis -32
+KPX Y Ograve -32
+KPX Y Oslash -35
+KPX Y Otilde -32
+KPX Y S -3
+KPX Y T 33
+KPX Y a -74
+KPX Y ae -69
+KPX Y colon -83
+KPX Y comma -76
+KPX Y e -88
+KPX Y g -71
+KPX Y guillemotleft -104
+KPX Y guilsinglleft -104
+KPX Y hyphen -78
+KPX Y i -7
+KPX Y o -89
+KPX Y oslash -88
+KPX Y p -71
+KPX Y period -77
+KPX Y semicolon -80
+KPX Y u -64
+KPX Y v -58
+KPX Z v -38
+KPX Z y -42
+KPX a j -28
+KPX a quoteright -11
+KPX a v -33
+KPX a w -37
+KPX a y -39
+KPX aacute v -33
+KPX aacute w -37
+KPX aacute y -39
+KPX adieresis v -33
+KPX adieresis w -37
+KPX adieresis y -39
+KPX ae v -21
+KPX ae w -25
+KPX ae y -29
+KPX agrave v -33
+KPX agrave w -37
+KPX agrave y -39
+KPX aring v -33
+KPX aring w -37
+KPX aring y -39
+KPX b v -17
+KPX b w -21
+KPX b y -25
+KPX c h -14
+KPX c k -14
+KPX comma one -35
+KPX comma quotedblright -13
+KPX comma quoteright -12
+KPX e quoteright 10
+KPX e t -20
+KPX e v -19
+KPX e w -22
+KPX e x -18
+KPX e y -25
+KPX eacute v -19
+KPX eacute w -22
+KPX eacute y -25
+KPX ecircumflex v -19
+KPX ecircumflex w -22
+KPX ecircumflex y -25
+KPX eight four 9
+KPX eight one -44
+KPX eight seven -24
+KPX f a -15
+KPX f aacute -15
+KPX f adieresis 19
+KPX f ae -11
+KPX f aring -3
+KPX f e -23
+KPX f eacute -23
+KPX f f 21
+KPX f i 32
+KPX f j 32
+KPX f l 73
+KPX f o -21
+KPX f oacute -21
+KPX f odieresis 31
+KPX f oe -21
+KPX f oslash -25
+KPX f quoteright 72
+KPX f s -10
+KPX f t 13
+KPX five four 4
+KPX five one -63
+KPX five seven -36
+KPX four four 16
+KPX four one -33
+KPX four seven -45
+KPX g a -5
+KPX g adieresis -5
+KPX g ae -2
+KPX g aring -5
+KPX g e -6
+KPX g eacute -6
+KPX g l -10
+KPX g oacute -6
+KPX g odieresis -6
+KPX g r 25
+KPX guillemotright A -36
+KPX guillemotright AE -39
+KPX guillemotright Aacute -36
+KPX guillemotright Adieresis -36
+KPX guillemotright Aring -36
+KPX guillemotright T -104
+KPX guillemotright V -85
+KPX guillemotright W -73
+KPX guillemotright Y -112
+KPX guilsinglright A -36
+KPX guilsinglright AE -39
+KPX guilsinglright Aacute -36
+KPX guilsinglright Adieresis -36
+KPX guilsinglright Aring -36
+KPX guilsinglright T -104
+KPX guilsinglright V -85
+KPX guilsinglright W -73
+KPX guilsinglright Y -112
+KPX h quoteright -11
+KPX h y -43
+KPX hyphen A -5
+KPX hyphen AE -9
+KPX hyphen Aacute -5
+KPX hyphen Adieresis -5
+KPX hyphen Aring -5
+KPX hyphen T -74
+KPX hyphen V -56
+KPX hyphen W -44
+KPX hyphen Y -87
+KPX i T -24
+KPX i j -26
+KPX k a 1
+KPX k aacute 1
+KPX k adieresis 1
+KPX k ae 5
+KPX k aring 1
+KPX k comma 1
+KPX k e -23
+KPX k eacute -23
+KPX k g 4
+KPX k hyphen -63
+KPX k o -26
+KPX k oacute -26
+KPX k odieresis -26
+KPX k period -1
+KPX k s 5
+KPX k u -2
+KPX k udieresis -2
+KPX l v -25
+KPX l y -28
+KPX m p -30
+KPX m v -37
+KPX m w -40
+KPX m y -44
+KPX n T -36
+KPX n p -28
+KPX n quoteright -11
+KPX n v -36
+KPX n w -40
+KPX n y -43
+KPX nine four 0
+KPX nine one -49
+KPX nine seven -9
+KPX o T -22
+KPX o quoteright 8
+KPX o t -21
+KPX o v -22
+KPX o w -26
+KPX o x -22
+KPX o y -30
+KPX oacute v -22
+KPX oacute w -26
+KPX oacute y -30
+KPX ocircumflex t -21
+KPX odieresis t -21
+KPX odieresis v -22
+KPX odieresis w -26
+KPX odieresis x -22
+KPX odieresis y -30
+KPX ograve v -22
+KPX ograve w -26
+KPX ograve y -30
+KPX one comma -20
+KPX one eight -31
+KPX one five -29
+KPX one four -56
+KPX one nine -23
+KPX one one -35
+KPX one period -22
+KPX one seven -83
+KPX one six -50
+KPX one three -27
+KPX one two -2
+KPX one zero -50
+KPX p t -21
+KPX p y -33
+KPX period one -44
+KPX period quotedblright -20
+KPX period quoteright -19
+KPX q c -14
+KPX q u -11
+KPX quotedblbase A 36
+KPX quotedblbase AE 38
+KPX quotedblbase T -49
+KPX quotedblbase V -81
+KPX quotedblbase W -65
+KPX quotedblbase Y -63
+KPX quotedblleft A -65
+KPX quotedblleft AE -78
+KPX quotedblleft Aacute -65
+KPX quotedblleft Adieresis -65
+KPX quotedblleft Aring -65
+KPX quotedblleft T 47
+KPX quotedblleft V 36
+KPX quotedblleft W 29
+KPX quotedblleft Y 38
+KPX quotedblright A -68
+KPX quotedblright AE -81
+KPX quotedblright Aacute -68
+KPX quotedblright Adieresis -68
+KPX quotedblright Aring -68
+KPX quotedblright T 45
+KPX quotedblright V 33
+KPX quotedblright W 26
+KPX quotedblright Y 36
+KPX quoteleft A -65
+KPX quoteleft AE -78
+KPX quoteleft Aacute -65
+KPX quoteleft Adieresis -65
+KPX quoteleft Aring -65
+KPX quoteleft T 48
+KPX quoteleft V 36
+KPX quoteleft W 30
+KPX quoteleft Y 39
+KPX quoteright A -68
+KPX quoteright AE -81
+KPX quoteright Aacute -68
+KPX quoteright Adieresis -68
+KPX quoteright Aring -68
+KPX quoteright comma -30
+KPX quoteright d -9
+KPX quoteright o -7
+KPX quoteright period -31
+KPX quoteright r 0
+KPX quoteright s -4
+KPX quoteright t 4
+KPX quoteright v 8
+KPX quoteright w 4
+KPX quoteright y 5
+KPX r a -7
+KPX r aacute -7
+KPX r acircumflex -7
+KPX r adieresis -7
+KPX r ae -3
+KPX r agrave -7
+KPX r aring -7
+KPX r c -2
+KPX r ccedilla 0
+KPX r colon -8
+KPX r comma -72
+KPX r d -5
+KPX r e -2
+KPX r eacute -2
+KPX r ecircumflex -2
+KPX r egrave -2
+KPX r f 19
+KPX r g -5
+KPX r h -23
+KPX r hyphen -35
+KPX r i 20
+KPX r j 23
+KPX r k -23
+KPX r l -25
+KPX r m 18
+KPX r n 16
+KPX r o -1
+KPX r oacute -1
+KPX r ocircumflex -1
+KPX r odieresis -1
+KPX r oe -1
+KPX r ograve -1
+KPX r oslash -3
+KPX r p 15
+KPX r period -74
+KPX r q -6
+KPX r quoteright 30
+KPX r r 19
+KPX r s -1
+KPX r semicolon -8
+KPX r t 19
+KPX r u 18
+KPX r v 23
+KPX r w 19
+KPX r x 20
+KPX r y 18
+KPX r z -2
+KPX s quoteright 7
+KPX s t -11
+KPX seven colon -76
+KPX seven comma -68
+KPX seven eight -39
+KPX seven five -38
+KPX seven four -77
+KPX seven one -39
+KPX seven period -70
+KPX seven seven -21
+KPX seven six -39
+KPX seven three -31
+KPX seven two -31
+KPX six four 11
+KPX six one -36
+KPX six seven -20
+KPX t S 8
+KPX t a 3
+KPX t aacute 3
+KPX t adieresis 3
+KPX t ae 6
+KPX t aring 3
+KPX t colon -19
+KPX t e 7
+KPX t eacute 7
+KPX t h -4
+KPX t o 7
+KPX t oacute 7
+KPX t odieresis 7
+KPX t quoteright 3
+KPX t semicolon -17
+KPX three four 2
+KPX three one -47
+KPX three seven -26
+KPX two four 5
+KPX two one -37
+KPX two seven -13
+KPX u quoteright -6
+KPX v a -19
+KPX v aacute -19
+KPX v acircumflex -19
+KPX v adieresis -19
+KPX v ae -15
+KPX v agrave -19
+KPX v aring -19
+KPX v atilde -19
+KPX v c -24
+KPX v colon -9
+KPX v comma -78
+KPX v e -25
+KPX v eacute -25
+KPX v ecircumflex -25
+KPX v egrave -25
+KPX v g -23
+KPX v hyphen -29
+KPX v l -25
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -28
+KPX v period -79
+KPX v s -11
+KPX v semicolon -10
+KPX w a -22
+KPX w aacute -22
+KPX w acircumflex -22
+KPX w adieresis -22
+KPX w ae -18
+KPX w agrave -22
+KPX w aring -22
+KPX w atilde -22
+KPX w c -27
+KPX w colon -12
+KPX w comma -73
+KPX w e -28
+KPX w eacute -28
+KPX w ecircumflex -28
+KPX w egrave -28
+KPX w g -26
+KPX w hyphen -26
+KPX w l -28
+KPX w o -26
+KPX w oacute -26
+KPX w odieresis -26
+KPX w ograve -26
+KPX w oslash -31
+KPX w period -74
+KPX w s -14
+KPX w semicolon -13
+KPX x a -3
+KPX x c -24
+KPX x e -27
+KPX x eacute -27
+KPX x o -31
+KPX x q -20
+KPX y a -21
+KPX y aacute -21
+KPX y acircumflex -21
+KPX y adieresis -21
+KPX y ae -17
+KPX y agrave -21
+KPX y aring -21
+KPX y atilde -21
+KPX y c -25
+KPX y colon -10
+KPX y comma -76
+KPX y e -26
+KPX y eacute -26
+KPX y ecircumflex -26
+KPX y egrave -26
+KPX y g -25
+KPX y hyphen -28
+KPX y l -24
+KPX y o -25
+KPX y oacute -25
+KPX y odieresis -25
+KPX y ograve -25
+KPX y oslash -29
+KPX y period -78
+KPX y s -12
+KPX y semicolon -11
+KPX zero four 4
+KPX zero one -52
+KPX zero seven -11
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncr8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uncr8a.pfb
new file mode 100644
index 00000000000..6cbded3c764
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncr8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncri8a.afm b/Master/tlpkg/tlgs/lib/fonts/uncri8a.afm
new file mode 100644
index 00000000000..2e365d486c7
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncri8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName CenturySchL-Ital
+FullName Century Schoolbook L Italic
+FamilyName Century Schoolbook L
+Weight Regular
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -102
+UnderlineThickness 42
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -166 -329 1018 966
+CapHeight 722
+XHeight 455
+Descender -202
+Ascender 737
+StartCharMetrics 316
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 333 ; N exclam ; B 30 -15 316 737 ;
+C 34 ; WX 400 ; N quotedbl ; B 100 510 395 732 ;
+C 35 ; WX 556 ; N numbersign ; B 33 0 524 686 ;
+C 36 ; WX 556 ; N dollar ; B 3 -135 536 792 ;
+C 37 ; WX 833 ; N percent ; B 46 0 792 722 ;
+C 38 ; WX 852 ; N ampersand ; B 24 -15 773 737 ;
+C 39 ; WX 204 ; N quoteright ; B 39 433 230 709 ;
+C 40 ; WX 333 ; N parenleft ; B 40 -123 399 736 ;
+C 41 ; WX 333 ; N parenright ; B -93 -123 265 736 ;
+C 42 ; WX 500 ; N asterisk ; B 34 286 452 705 ;
+C 43 ; WX 606 ; N plus ; B 37 2 540 505 ;
+C 44 ; WX 278 ; N comma ; B -39 -167 151 109 ;
+C 45 ; WX 333 ; N hyphen ; B 32 195 259 278 ;
+C 46 ; WX 278 ; N period ; B 17 -15 141 109 ;
+C 47 ; WX 606 ; N slash ; B 140 -108 466 722 ;
+C 48 ; WX 556 ; N zero ; B 29 -15 527 704 ;
+C 49 ; WX 556 ; N one ; B 50 0 459 708 ;
+C 50 ; WX 556 ; N two ; B -35 0 508 704 ;
+C 51 ; WX 556 ; N three ; B -2 -15 506 704 ;
+C 52 ; WX 556 ; N four ; B -8 0 512 708 ;
+C 53 ; WX 556 ; N five ; B 4 -15 540 704 ;
+C 54 ; WX 556 ; N six ; B 36 -15 547 704 ;
+C 55 ; WX 556 ; N seven ; B 69 -15 561 704 ;
+C 56 ; WX 556 ; N eight ; B 8 -15 527 704 ;
+C 57 ; WX 556 ; N nine ; B 7 -15 519 704 ;
+C 58 ; WX 278 ; N colon ; B 42 -15 254 463 ;
+C 59 ; WX 278 ; N semicolon ; B -14 -167 261 463 ;
+C 60 ; WX 606 ; N less ; B 34 -17 543 523 ;
+C 61 ; WX 606 ; N equal ; B 36 112 540 394 ;
+C 62 ; WX 606 ; N greater ; B 53 -17 562 523 ;
+C 63 ; WX 444 ; N question ; B 102 -15 417 737 ;
+C 64 ; WX 747 ; N at ; B 28 -14 728 736 ;
+C 65 ; WX 704 ; N A ; B -82 0 668 737 ;
+C 66 ; WX 722 ; N B ; B -31 0 668 722 ;
+C 67 ; WX 722 ; N C ; B 40 -15 713 737 ;
+C 68 ; WX 778 ; N D ; B -38 0 735 722 ;
+C 69 ; WX 722 ; N E ; B -37 0 701 722 ;
+C 70 ; WX 667 ; N F ; B -34 0 698 722 ;
+C 71 ; WX 778 ; N G ; B 39 -15 763 737 ;
+C 72 ; WX 833 ; N H ; B -38 0 867 722 ;
+C 73 ; WX 407 ; N I ; B -33 0 431 722 ;
+C 74 ; WX 611 ; N J ; B -13 -15 646 722 ;
+C 75 ; WX 741 ; N K ; B -40 0 814 722 ;
+C 76 ; WX 667 ; N L ; B -37 0 630 722 ;
+C 77 ; WX 944 ; N M ; B -26 0 973 722 ;
+C 78 ; WX 815 ; N N ; B -48 -14 859 722 ;
+C 79 ; WX 778 ; N O ; B 40 -15 735 737 ;
+C 80 ; WX 667 ; N P ; B -33 0 663 722 ;
+C 81 ; WX 778 ; N Q ; B 40 -188 735 737 ;
+C 82 ; WX 741 ; N R ; B -41 -15 691 722 ;
+C 83 ; WX 667 ; N S ; B 0 -15 632 737 ;
+C 84 ; WX 685 ; N T ; B 40 0 726 722 ;
+C 85 ; WX 815 ; N U ; B 93 -15 860 722 ;
+C 86 ; WX 704 ; N V ; B 36 -15 772 722 ;
+C 87 ; WX 926 ; N W ; B 53 -15 973 722 ;
+C 88 ; WX 704 ; N X ; B -73 0 770 722 ;
+C 89 ; WX 685 ; N Y ; B 32 0 758 722 ;
+C 90 ; WX 667 ; N Z ; B -25 0 667 722 ;
+C 91 ; WX 333 ; N bracketleft ; B -33 -108 410 722 ;
+C 92 ; WX 606 ; N backslash ; B 89 0 522 708 ;
+C 93 ; WX 333 ; N bracketright ; B -83 -108 359 722 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 318 554 722 ;
+C 95 ; WX 500 ; N underscore ; B 0 -123 500 -81 ;
+C 96 ; WX 204 ; N quoteleft ; B 61 461 252 737 ;
+C 97 ; WX 574 ; N a ; B 1 -15 523 470 ;
+C 98 ; WX 556 ; N b ; B 32 -15 488 737 ;
+C 99 ; WX 444 ; N c ; B 5 -15 401 470 ;
+C 100 ; WX 611 ; N d ; B 3 -15 586 737 ;
+C 101 ; WX 444 ; N e ; B -6 -15 391 470 ;
+C 102 ; WX 333 ; N f ; B -68 -202 470 736 ;
+C 103 ; WX 537 ; N g ; B -79 -202 523 505 ;
+C 104 ; WX 611 ; N h ; B 0 -15 555 737 ;
+C 105 ; WX 333 ; N i ; B 27 -14 282 714 ;
+C 106 ; WX 315 ; N j ; B -166 -202 317 714 ;
+C 107 ; WX 556 ; N k ; B -5 -15 492 737 ;
+C 108 ; WX 333 ; N l ; B 16 -15 294 737 ;
+C 109 ; WX 889 ; N m ; B 15 -15 837 470 ;
+C 110 ; WX 611 ; N n ; B 14 -15 562 470 ;
+C 111 ; WX 500 ; N o ; B 5 -15 450 470 ;
+C 112 ; WX 574 ; N p ; B -101 -202 506 470 ;
+C 113 ; WX 556 ; N q ; B 0 -202 499 470 ;
+C 114 ; WX 444 ; N r ; B 9 0 433 470 ;
+C 115 ; WX 444 ; N s ; B -1 -15 392 470 ;
+C 116 ; WX 352 ; N t ; B 25 -15 329 621 ;
+C 117 ; WX 611 ; N u ; B 41 -15 556 470 ;
+C 118 ; WX 519 ; N v ; B 34 -16 445 470 ;
+C 119 ; WX 778 ; N w ; B 32 -15 708 470 ;
+C 120 ; WX 500 ; N x ; B -33 -15 471 470 ;
+C 121 ; WX 500 ; N y ; B -79 -202 454 470 ;
+C 122 ; WX 463 ; N z ; B -33 -15 417 470 ;
+C 123 ; WX 333 ; N braceleft ; B 52 -108 381 722 ;
+C 124 ; WX 606 ; N bar ; B 269 0 337 722 ;
+C 125 ; WX 333 ; N braceright ; B -98 -108 231 722 ;
+C 126 ; WX 606 ; N asciitilde ; B 41 165 545 327 ;
+C 161 ; WX 333 ; N exclamdown ; B -7 -203 280 549 ;
+C 162 ; WX 556 ; N cent ; B 61 -135 486 581 ;
+C 163 ; WX 556 ; N sterling ; B -8 -15 545 704 ;
+C 164 ; WX 167 ; N fraction ; B -104 0 333 708 ;
+C 165 ; WX 556 ; N yen ; B 40 0 623 704 ;
+C 166 ; WX 556 ; N florin ; B -57 -202 563 736 ;
+C 167 ; WX 500 ; N section ; B -11 -150 480 737 ;
+C 168 ; WX 556 ; N currency ; B 25 93 530 598 ;
+C 169 ; WX 278 ; N quotesingle ; B 114 510 262 732 ;
+C 170 ; WX 389 ; N quotedblleft ; B 63 461 432 737 ;
+C 171 ; WX 426 ; N guillemotleft ; B -15 85 402 402 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 42 85 261 402 ;
+C 173 ; WX 333 ; N guilsinglright ; B 40 85 259 402 ;
+C 174 ; WX 611 ; N fi ; B -60 -202 564 736 ;
+C 175 ; WX 611 ; N fl ; B -60 -202 594 736 ;
+C 177 ; WX 500 ; N endash ; B -18 206 518 267 ;
+C 178 ; WX 500 ; N dagger ; B 64 -144 518 737 ;
+C 179 ; WX 500 ; N daggerdbl ; B -30 -144 528 737 ;
+C 180 ; WX 278 ; N periodcentered ; B 77 183 201 307 ;
+C 182 ; WX 650 ; N paragraph ; B 88 -144 645 722 ;
+C 183 ; WX 606 ; N bullet ; B 114 217 451 554 ;
+C 184 ; WX 204 ; N quotesinglbase ; B -79 -167 112 109 ;
+C 185 ; WX 389 ; N quotedblbase ; B -79 -167 289 109 ;
+C 186 ; WX 389 ; N quotedblright ; B 38 461 407 737 ;
+C 187 ; WX 426 ; N guillemotright ; B -17 85 400 402 ;
+C 188 ; WX 1000 ; N ellipsis ; B 55 -15 845 109 ;
+C 189 ; WX 1000 ; N perthousand ; B -6 -2 1003 700 ;
+C 191 ; WX 444 ; N questiondown ; B 7 -203 323 549 ;
+C 193 ; WX 333 ; N grave ; B 73 519 263 691 ;
+C 194 ; WX 333 ; N acute ; B 132 519 355 689 ;
+C 195 ; WX 333 ; N circumflex ; B 37 519 331 688 ;
+C 196 ; WX 333 ; N tilde ; B 52 544 380 650 ;
+C 197 ; WX 333 ; N macron ; B 51 559 363 610 ;
+C 198 ; WX 333 ; N breve ; B 69 518 370 677 ;
+C 199 ; WX 333 ; N dotaccent ; B 118 546 216 644 ;
+C 200 ; WX 333 ; N dieresis ; B 59 546 359 644 ;
+C 202 ; WX 333 ; N ring ; B 230 513 429 712 ;
+C 203 ; WX 333 ; N cedilla ; B 3 -216 215 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 134 519 520 688 ;
+C 206 ; WX 333 ; N ogonek ; B 68 -155 245 0 ;
+C 207 ; WX 333 ; N caron ; B 73 520 378 683 ;
+C 208 ; WX 1000 ; N emdash ; B -18 206 1018 267 ;
+C 225 ; WX 870 ; N AE ; B -92 0 870 722 ;
+C 227 ; WX 422 ; N ordfeminine ; B 83 330 422 731 ;
+C 232 ; WX 667 ; N Lslash ; B -37 0 630 722 ;
+C 233 ; WX 778 ; N Oslash ; B 1 -87 735 750 ;
+C 234 ; WX 981 ; N OE ; B 36 0 963 722 ;
+C 235 ; WX 372 ; N ordmasculine ; B 83 329 372 731 ;
+C 241 ; WX 722 ; N ae ; B -18 -15 667 470 ;
+C 245 ; WX 333 ; N dotlessi ; B 27 -14 282 470 ;
+C 248 ; WX 333 ; N lslash ; B 16 -10 342 742 ;
+C 249 ; WX 500 ; N oslash ; B -5 -120 440 548 ;
+C 250 ; WX 778 ; N oe ; B 0 -15 720 470 ;
+C 251 ; WX 556 ; N germandbls ; B -76 -202 525 736 ;
+C -1 ; WX 815 ; N Udieresis ; B 93 -15 860 910 ;
+C -1 ; WX 815 ; N Uacute ; B 93 -15 860 947 ;
+C -1 ; WX 667 ; N Scedilla ; B 0 -216 632 737 ;
+C -1 ; WX 685 ; N Tcaron ; B 40 0 726 940 ;
+C -1 ; WX 667 ; N Scaron ; B 0 -15 632 940 ;
+C -1 ; WX 741 ; N Rcaron ; B -41 -15 691 940 ;
+C -1 ; WX 741 ; N Racute ; B -41 -15 691 947 ;
+C -1 ; WX 667 ; N Sacute ; B 0 -15 632 947 ;
+C -1 ; WX 778 ; N Otilde ; B 40 -15 735 917 ;
+C -1 ; WX 611 ; N ucircumflex ; B 41 -15 556 688 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 40 -15 758 947 ;
+C -1 ; WX 815 ; N Uhungarumlaut ; B 93 -15 860 947 ;
+C -1 ; WX 685 ; N Yacute ; B 32 0 758 947 ;
+C -1 ; WX 778 ; N Eth ; B -38 0 735 722 ;
+C -1 ; WX 778 ; N Dcroat ; B -38 0 735 722 ;
+C -1 ; WX 667 ; N Zacute ; B -25 0 667 947 ;
+C -1 ; WX 815 ; N Uring ; B 93 -15 860 966 ;
+C -1 ; WX 537 ; N gbreve ; B -79 -202 523 677 ;
+C -1 ; WX 444 ; N eogonek ; B -6 -155 391 470 ;
+C -1 ; WX 444 ; N edotaccent ; B -6 -15 391 644 ;
+C -1 ; WX 444 ; N ecaron ; B -6 -15 434 683 ;
+C -1 ; WX 815 ; N Ugrave ; B 93 -15 860 946 ;
+C -1 ; WX 667 ; N Thorn ; B -33 0 624 722 ;
+C -1 ; WX 444 ; N eacute ; B -6 -15 411 689 ;
+C -1 ; WX 444 ; N edieresis ; B -6 -15 405 644 ;
+C -1 ; WX 651 ; N dcaron ; B 3 -15 711 737 ;
+C -1 ; WX 444 ; N ccedilla ; B 5 -216 401 470 ;
+C -1 ; WX 444 ; N ccaron ; B 5 -15 474 683 ;
+C -1 ; WX 444 ; N cacute ; B 5 -15 444 689 ;
+C -1 ; WX 574 ; N aogonek ; B 1 -155 523 470 ;
+C -1 ; WX 574 ; N aring ; B 1 -15 523 712 ;
+C -1 ; WX 574 ; N atilde ; B 1 -15 523 650 ;
+C -1 ; WX 574 ; N abreve ; B 1 -15 523 677 ;
+C -1 ; WX 444 ; N egrave ; B -6 -15 391 691 ;
+C -1 ; WX 574 ; N agrave ; B 1 -15 523 691 ;
+C -1 ; WX 574 ; N aacute ; B 1 -15 523 689 ;
+C -1 ; WX 574 ; N adieresis ; B 1 -15 523 644 ;
+C -1 ; WX 815 ; N Uogonek ; B 93 -155 860 722 ;
+C -1 ; WX 611 ; N ugrave ; B 41 -15 556 691 ;
+C -1 ; WX 611 ; N uacute ; B 41 -15 556 689 ;
+C -1 ; WX 611 ; N udieresis ; B 41 -15 556 644 ;
+C -1 ; WX 368 ; N tcaron ; B 25 -15 428 709 ;
+C -1 ; WX 444 ; N scommaaccent ; B -1 -288 392 470 ;
+C -1 ; WX 667 ; N Zcaron ; B -25 0 667 940 ;
+C -1 ; WX 444 ; N ecircumflex ; B -6 -15 391 688 ;
+C -1 ; WX 815 ; N Ucircumflex ; B 93 -15 860 940 ;
+C -1 ; WX 574 ; N acircumflex ; B 1 -15 523 688 ;
+C -1 ; WX 667 ; N Zdotaccent ; B -25 0 667 910 ;
+C -1 ; WX 444 ; N scaron ; B -1 -15 434 683 ;
+C -1 ; WX 704 ; N Amacron ; B -82 0 668 877 ;
+C -1 ; WX 444 ; N sacute ; B -1 -15 424 689 ;
+C -1 ; WX 685 ; N Tcommaaccent ; B 40 -288 726 722 ;
+C -1 ; WX 685 ; N Ydieresis ; B 32 0 758 910 ;
+C -1 ; WX 574 ; N thorn ; B -101 -202 506 737 ;
+C -1 ; WX 722 ; N Emacron ; B -37 0 701 877 ;
+C -1 ; WX 778 ; N Ograve ; B 40 -15 735 946 ;
+C -1 ; WX 778 ; N Oacute ; B 40 -15 735 947 ;
+C -1 ; WX 778 ; N Odieresis ; B 40 -15 735 910 ;
+C -1 ; WX 815 ; N Ntilde ; B -48 -14 859 917 ;
+C -1 ; WX 815 ; N Ncaron ; B -48 -14 859 940 ;
+C -1 ; WX 815 ; N Nacute ; B -48 -14 859 947 ;
+C -1 ; WX 667 ; N Lcaron ; B -37 0 707 737 ;
+C -1 ; WX 667 ; N Lacute ; B -37 0 630 947 ;
+C -1 ; WX 407 ; N Idotaccent ; B -33 0 431 910 ;
+C -1 ; WX 444 ; N racute ; B 9 0 450 689 ;
+C -1 ; WX 407 ; N Icircumflex ; B -33 0 431 940 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 5 -15 560 688 ;
+C -1 ; WX 500 ; N otilde ; B 5 -15 454 650 ;
+C -1 ; WX 556 ; N Euro ; B -29 -15 629 713 ;
+C -1 ; WX 500 ; N ocircumflex ; B 5 -15 450 688 ;
+C -1 ; WX 333 ; N onesuperior ; B 43 288 309 712 ;
+C -1 ; WX 333 ; N twosuperior ; B 0 288 353 710 ;
+C -1 ; WX 333 ; N threesuperior ; B 1 279 331 710 ;
+C -1 ; WX 407 ; N Igrave ; B -33 0 431 946 ;
+C -1 ; WX 407 ; N Iacute ; B -33 0 431 947 ;
+C -1 ; WX 407 ; N Imacron ; B -33 0 465 877 ;
+C -1 ; WX 407 ; N Iogonek ; B -33 -155 431 722 ;
+C -1 ; WX 407 ; N Idieresis ; B -33 0 446 910 ;
+C -1 ; WX 778 ; N Gbreve ; B 39 -15 763 935 ;
+C -1 ; WX 815 ; N Umacron ; B 93 -15 860 877 ;
+C -1 ; WX 741 ; N Kcommaaccent ; B -40 -288 814 722 ;
+C -1 ; WX 500 ; N ograve ; B 5 -15 450 691 ;
+C -1 ; WX 667 ; N Scommaaccent ; B 0 -329 632 737 ;
+C -1 ; WX 722 ; N Eogonek ; B -37 -155 701 722 ;
+C -1 ; WX 500 ; N oacute ; B 5 -15 450 689 ;
+C -1 ; WX 722 ; N Edotaccent ; B -37 0 701 910 ;
+C -1 ; WX 333 ; N iogonek ; B 27 -155 282 714 ;
+C -1 ; WX 537 ; N gcommaaccent ; B -79 -202 523 759 ;
+C -1 ; WX 500 ; N odieresis ; B 5 -15 450 644 ;
+C -1 ; WX 611 ; N ntilde ; B 14 -15 562 650 ;
+C -1 ; WX 611 ; N ncaron ; B 14 -15 562 683 ;
+C -1 ; WX 722 ; N Ecaron ; B -37 0 701 940 ;
+C -1 ; WX 722 ; N Ecircumflex ; B -37 0 701 940 ;
+C -1 ; WX 444 ; N scedilla ; B -1 -216 392 470 ;
+C -1 ; WX 444 ; N rcaron ; B 9 0 434 683 ;
+C -1 ; WX 722 ; N Egrave ; B -37 0 701 946 ;
+C -1 ; WX 722 ; N Eacute ; B -37 0 701 947 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 39 -288 763 737 ;
+C -1 ; WX 741 ; N Rcommaaccent ; B -41 -288 691 722 ;
+C -1 ; WX 722 ; N Edieresis ; B -37 0 701 910 ;
+C -1 ; WX 611 ; N nacute ; B 14 -15 562 689 ;
+C -1 ; WX 611 ; N uogonek ; B 41 -155 556 470 ;
+C -1 ; WX 611 ; N umacron ; B 41 -15 556 610 ;
+C -1 ; WX 778 ; N Dcaron ; B -38 0 735 940 ;
+C -1 ; WX 359 ; N lcaron ; B 16 -15 419 737 ;
+C -1 ; WX 722 ; N Ccaron ; B 40 -15 713 940 ;
+C -1 ; WX 722 ; N Cacute ; B 40 -15 713 947 ;
+C -1 ; WX 722 ; N Ccedilla ; B 40 -216 713 737 ;
+C -1 ; WX 400 ; N degree ; B 70 380 370 686 ;
+C -1 ; WX 704 ; N Aogonek ; B -82 -155 753 737 ;
+C -1 ; WX 606 ; N minus ; B 41 213 545 293 ;
+C -1 ; WX 606 ; N multiply ; B 37 1 540 504 ;
+C -1 ; WX 606 ; N divide ; B 37 -9 540 515 ;
+C -1 ; WX 704 ; N Aring ; B -82 0 668 966 ;
+C -1 ; WX 950 ; N trademark ; B 48 288 971 722 ;
+C -1 ; WX 444 ; N rcommaaccent ; B 9 -288 433 470 ;
+C -1 ; WX 333 ; N lacute ; B 16 -15 371 944 ;
+C -1 ; WX 500 ; N omacron ; B 5 -15 450 610 ;
+C -1 ; WX 704 ; N Atilde ; B -82 0 668 917 ;
+C -1 ; WX 333 ; N icircumflex ; B -3 -14 291 688 ;
+C -1 ; WX 333 ; N igrave ; B 27 -14 282 691 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 14 -288 562 470 ;
+C -1 ; WX 333 ; N lcommaaccent ; B -34 -288 294 737 ;
+C -1 ; WX 606 ; N plusminus ; B 37 0 540 581 ;
+C -1 ; WX 834 ; N onehalf ; B 33 0 844 712 ;
+C -1 ; WX 834 ; N onequarter ; B 33 0 833 712 ;
+C -1 ; WX 834 ; N threequarters ; B 1 0 833 710 ;
+C -1 ; WX 333 ; N iacute ; B 27 -14 355 689 ;
+C -1 ; WX 704 ; N Abreve ; B -82 0 668 935 ;
+C -1 ; WX 556 ; N kcommaaccent ; B -5 -288 492 737 ;
+C -1 ; WX 778 ; N Omacron ; B 40 -15 735 877 ;
+C -1 ; WX 333 ; N imacron ; B 27 -14 363 610 ;
+C -1 ; WX 444 ; N emacron ; B -6 -15 419 610 ;
+C -1 ; WX 574 ; N amacron ; B 1 -15 523 610 ;
+C -1 ; WX 352 ; N tcommaaccent ; B -5 -288 329 621 ;
+C -1 ; WX 500 ; N ydieresis ; B -79 -202 454 644 ;
+C -1 ; WX 463 ; N zdotaccent ; B -33 -15 417 644 ;
+C -1 ; WX 463 ; N zcaron ; B -33 -15 443 683 ;
+C -1 ; WX 463 ; N zacute ; B -33 -15 420 689 ;
+C -1 ; WX 500 ; N yacute ; B -79 -202 454 689 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 41 -15 611 688 ;
+C -1 ; WX 500 ; N eth ; B 5 -15 450 716 ;
+C -1 ; WX 611 ; N uring ; B 41 -15 556 712 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 40 -15 735 940 ;
+C -1 ; WX 333 ; N commaaccent ; B 46 -288 218 -40 ;
+C -1 ; WX 747 ; N copyright ; B 24 -15 724 685 ;
+C -1 ; WX 747 ; N registered ; B 23 -15 723 685 ;
+C -1 ; WX 704 ; N Acircumflex ; B -82 0 668 940 ;
+C -1 ; WX 333 ; N idieresis ; B 27 -14 349 644 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 36 -43 540 549 ;
+C -1 ; WX 549 ; N radical ; B -10 -35 531 916 ;
+C -1 ; WX 704 ; N Agrave ; B -82 0 668 946 ;
+C -1 ; WX 704 ; N Aacute ; B -82 0 668 947 ;
+C -1 ; WX 606 ; N lessequal ; B 34 0 543 643 ;
+C -1 ; WX 606 ; N greaterequal ; B 53 0 562 643 ;
+C -1 ; WX 606 ; N logicalnot ; B 41 0 545 293 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 815 ; N Ncommaaccent ; B -48 -288 859 722 ;
+C -1 ; WX 611 ; N dcroat ; B 3 -15 635 737 ;
+C -1 ; WX 606 ; N brokenbar ; B 269 0 337 722 ;
+C -1 ; WX 667 ; N Lcommaaccent ; B -37 -288 630 722 ;
+C -1 ; WX 704 ; N Adieresis ; B -82 0 668 910 ;
+C -1 ; WX 611 ; N mu ; B -70 -219 556 470 ;
+C -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -37
+KPX A Ccedilla -41
+KPX A G -32
+KPX A O -34
+KPX A Odieresis -34
+KPX A Q -32
+KPX A T -18
+KPX A U -43
+KPX A Uacute -43
+KPX A Ucircumflex -43
+KPX A Udieresis -43
+KPX A Ugrave -43
+KPX A V -91
+KPX A W -85
+KPX A Y -21
+KPX A a 3
+KPX A b -11
+KPX A c -3
+KPX A ccedilla -7
+KPX A comma 16
+KPX A d 1
+KPX A e 3
+KPX A g 17
+KPX A guillemotleft -19
+KPX A guilsinglleft -47
+KPX A hyphen -16
+KPX A o -4
+KPX A period 17
+KPX A q 3
+KPX A quotedblright -59
+KPX A quoteright -58
+KPX A t 3
+KPX A u -8
+KPX A v -13
+KPX A w -1
+KPX A y -51
+KPX Aacute C -37
+KPX Aacute G -32
+KPX Aacute O -34
+KPX Aacute Q -32
+KPX Aacute T -18
+KPX Aacute U -43
+KPX Aacute V -91
+KPX Aacute W -85
+KPX Aacute Y -21
+KPX Aacute a 3
+KPX Aacute b -11
+KPX Aacute c -3
+KPX Aacute comma 16
+KPX Aacute d 1
+KPX Aacute e 3
+KPX Aacute g 17
+KPX Aacute guillemotleft -19
+KPX Aacute guilsinglleft -47
+KPX Aacute hyphen -16
+KPX Aacute o -4
+KPX Aacute period 17
+KPX Aacute q 3
+KPX Aacute quoteright -58
+KPX Aacute t 3
+KPX Aacute u -8
+KPX Aacute v -13
+KPX Aacute w -1
+KPX Aacute y -51
+KPX Acircumflex C -37
+KPX Acircumflex G -32
+KPX Acircumflex O -34
+KPX Acircumflex Q -32
+KPX Acircumflex T -18
+KPX Acircumflex U -43
+KPX Acircumflex V -91
+KPX Acircumflex W -85
+KPX Acircumflex Y -21
+KPX Acircumflex comma 16
+KPX Acircumflex period 17
+KPX Adieresis C -37
+KPX Adieresis G -32
+KPX Adieresis O -34
+KPX Adieresis Q -32
+KPX Adieresis T -18
+KPX Adieresis U -43
+KPX Adieresis V -91
+KPX Adieresis W -85
+KPX Adieresis Y -21
+KPX Adieresis a 3
+KPX Adieresis b -11
+KPX Adieresis c -3
+KPX Adieresis comma 16
+KPX Adieresis d 1
+KPX Adieresis g 17
+KPX Adieresis guillemotleft -19
+KPX Adieresis guilsinglleft -47
+KPX Adieresis hyphen -16
+KPX Adieresis o -4
+KPX Adieresis period 17
+KPX Adieresis q 3
+KPX Adieresis quotedblright -59
+KPX Adieresis quoteright -58
+KPX Adieresis t 3
+KPX Adieresis u -8
+KPX Adieresis v -13
+KPX Adieresis w -1
+KPX Adieresis y -51
+KPX Agrave C -37
+KPX Agrave G -32
+KPX Agrave O -34
+KPX Agrave Q -32
+KPX Agrave T -18
+KPX Agrave U -43
+KPX Agrave V -91
+KPX Agrave W -85
+KPX Agrave Y -21
+KPX Agrave comma 16
+KPX Agrave period 17
+KPX Aring C -37
+KPX Aring G -32
+KPX Aring O -34
+KPX Aring Q -32
+KPX Aring T -18
+KPX Aring U -43
+KPX Aring V -91
+KPX Aring W -85
+KPX Aring Y -21
+KPX Aring a 3
+KPX Aring b -11
+KPX Aring c -3
+KPX Aring comma 16
+KPX Aring d 1
+KPX Aring e 3
+KPX Aring g 17
+KPX Aring guillemotleft -19
+KPX Aring guilsinglleft -47
+KPX Aring hyphen -16
+KPX Aring o -4
+KPX Aring period 17
+KPX Aring q 3
+KPX Aring quotedblright -59
+KPX Aring quoteright -58
+KPX Aring t 3
+KPX Aring u -8
+KPX Aring v -13
+KPX Aring w -1
+KPX Aring y -51
+KPX Atilde C -37
+KPX Atilde G -32
+KPX Atilde O -34
+KPX Atilde Q -32
+KPX Atilde T -18
+KPX Atilde U -43
+KPX Atilde V -91
+KPX Atilde W -85
+KPX Atilde Y -21
+KPX Atilde comma 16
+KPX Atilde period 17
+KPX B A -3
+KPX B AE 1
+KPX B Aacute -3
+KPX B Acircumflex -3
+KPX B Adieresis -3
+KPX B Aring -3
+KPX B Atilde -3
+KPX B O -12
+KPX B OE -13
+KPX B Oacute -12
+KPX B Ocircumflex -12
+KPX B Odieresis -12
+KPX B Ograve -12
+KPX B Oslash -13
+KPX B V -26
+KPX B W -37
+KPX B Y -21
+KPX C A -18
+KPX C AE -13
+KPX C Aacute -18
+KPX C Adieresis -18
+KPX C Aring -18
+KPX C H -21
+KPX C K -20
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -23
+KPX D A -42
+KPX D Aacute -42
+KPX D Acircumflex -42
+KPX D Adieresis -42
+KPX D Agrave -42
+KPX D Aring -42
+KPX D Atilde -42
+KPX D J -7
+KPX D T 0
+KPX D V -41
+KPX D W -48
+KPX D X -47
+KPX D Y -36
+KPX F A -73
+KPX F Aacute -73
+KPX F Acircumflex -73
+KPX F Adieresis -73
+KPX F Agrave -73
+KPX F Aring -73
+KPX F Atilde -73
+KPX F J -72
+KPX F O -1
+KPX F Odieresis -1
+KPX F a -49
+KPX F aacute -49
+KPX F adieresis -48
+KPX F ae -35
+KPX F aring -49
+KPX F comma -92
+KPX F e -52
+KPX F eacute -52
+KPX F hyphen -50
+KPX F i 0
+KPX F j -18
+KPX F o -54
+KPX F oacute -54
+KPX F odieresis -33
+KPX F oe -51
+KPX F oslash -55
+KPX F period -93
+KPX F r -1
+KPX F u 3
+KPX G A -7
+KPX G AE -2
+KPX G Aacute -7
+KPX G Acircumflex -7
+KPX G Adieresis -7
+KPX G Agrave -7
+KPX G Aring -7
+KPX G Atilde -7
+KPX G T -22
+KPX G V 1
+KPX G W -7
+KPX G Y 2
+KPX J A -47
+KPX J AE -42
+KPX J Adieresis -47
+KPX J Aring -47
+KPX K C -34
+KPX K G -36
+KPX K O -36
+KPX K OE -39
+KPX K Oacute -36
+KPX K Odieresis -36
+KPX K S 17
+KPX K T 20
+KPX K a 0
+KPX K adieresis 0
+KPX K ae 18
+KPX K aring 0
+KPX K e 0
+KPX K hyphen -51
+KPX K o -8
+KPX K oacute -8
+KPX K odieresis -8
+KPX K u -12
+KPX K udieresis -12
+KPX K y -83
+KPX L A 31
+KPX L AE 36
+KPX L Aacute 31
+KPX L Adieresis 31
+KPX L Aring 31
+KPX L C 2
+KPX L Ccedilla 2
+KPX L G 3
+KPX L O 2
+KPX L Oacute 2
+KPX L Ocircumflex 2
+KPX L Odieresis 2
+KPX L Ograve 2
+KPX L Otilde 2
+KPX L S 0
+KPX L T -49
+KPX L U -26
+KPX L Udieresis -26
+KPX L V -72
+KPX L W -67
+KPX L Y -52
+KPX L hyphen 38
+KPX L quotedblright -48
+KPX L quoteright -41
+KPX L u -7
+KPX L udieresis -7
+KPX L y -1
+KPX N A -32
+KPX N AE -27
+KPX N Aacute -32
+KPX N Adieresis -32
+KPX N Aring -32
+KPX N C -28
+KPX N Ccedilla -27
+KPX N G -29
+KPX N O -28
+KPX N Oacute -28
+KPX N Odieresis -28
+KPX N a -34
+KPX N aacute -34
+KPX N adieresis -34
+KPX N ae -39
+KPX N aring -34
+KPX N comma -36
+KPX N e -32
+KPX N eacute -32
+KPX N o -37
+KPX N oacute -37
+KPX N odieresis -37
+KPX N oslash -33
+KPX N period -38
+KPX N u -42
+KPX N udieresis -42
+KPX O A -42
+KPX O AE -37
+KPX O Aacute -42
+KPX O Adieresis -42
+KPX O Aring -42
+KPX O T 0
+KPX O V -35
+KPX O W -47
+KPX O X -47
+KPX O Y -30
+KPX Oacute A -42
+KPX Oacute T 0
+KPX Oacute V -35
+KPX Oacute W -47
+KPX Oacute Y -30
+KPX Ocircumflex T 0
+KPX Ocircumflex V -35
+KPX Ocircumflex Y -30
+KPX Odieresis A -42
+KPX Odieresis T 0
+KPX Odieresis V -35
+KPX Odieresis W -47
+KPX Odieresis X -47
+KPX Odieresis Y -30
+KPX Ograve T 0
+KPX Ograve V -35
+KPX Ograve Y -30
+KPX Oslash A -41
+KPX Otilde T 0
+KPX Otilde V -35
+KPX Otilde Y -30
+KPX P A -80
+KPX P AE -69
+KPX P Aacute -80
+KPX P Adieresis -80
+KPX P Aring -80
+KPX P J -78
+KPX P a -32
+KPX P aacute -32
+KPX P adieresis -32
+KPX P ae -23
+KPX P aring -32
+KPX P comma -111
+KPX P e -33
+KPX P eacute -33
+KPX P hyphen -55
+KPX P o -36
+KPX P oacute -36
+KPX P odieresis -36
+KPX P oe -32
+KPX P oslash -35
+KPX P period -112
+KPX R C -15
+KPX R Ccedilla -14
+KPX R G -14
+KPX R O -14
+KPX R OE -14
+KPX R Oacute -14
+KPX R Odieresis -14
+KPX R T -14
+KPX R U -33
+KPX R Udieresis -33
+KPX R V -22
+KPX R W -33
+KPX R Y -17
+KPX R a -1
+KPX R aacute -1
+KPX R adieresis -1
+KPX R ae 5
+KPX R aring -1
+KPX R e 1
+KPX R eacute 1
+KPX R hyphen 0
+KPX R o -4
+KPX R oacute -4
+KPX R odieresis -4
+KPX R oe -2
+KPX R u -22
+KPX R uacute -22
+KPX R udieresis -22
+KPX R y -45
+KPX S A -5
+KPX S AE 0
+KPX S Aacute -5
+KPX S Adieresis -5
+KPX S Aring -5
+KPX S T -21
+KPX S V 3
+KPX S W -5
+KPX S Y 4
+KPX S t -19
+KPX T A -46
+KPX T AE -41
+KPX T Aacute -46
+KPX T Acircumflex -46
+KPX T Adieresis -46
+KPX T Agrave -46
+KPX T Aring -46
+KPX T Atilde -46
+KPX T C 8
+KPX T G 6
+KPX T J -80
+KPX T O 7
+KPX T OE 8
+KPX T Oacute 7
+KPX T Ocircumflex 7
+KPX T Odieresis 7
+KPX T Ograve 7
+KPX T Oslash 6
+KPX T Otilde 7
+KPX T S -10
+KPX T V 41
+KPX T W 34
+KPX T Y 43
+KPX T a -28
+KPX T ae -14
+KPX T c -35
+KPX T colon -26
+KPX T comma -92
+KPX T e -33
+KPX T g -35
+KPX T guillemotleft -102
+KPX T guilsinglleft -130
+KPX T hyphen -99
+KPX T i 15
+KPX T j -3
+KPX T o -35
+KPX T oslash -37
+KPX T period -93
+KPX T r 13
+KPX T s -21
+KPX T semicolon -30
+KPX T u 13
+KPX T v 17
+KPX T w 16
+KPX T y 2
+KPX U A -50
+KPX U AE -45
+KPX U Aacute -50
+KPX U Acircumflex -50
+KPX U Adieresis -50
+KPX U Aring -50
+KPX U Atilde -50
+KPX U comma -47
+KPX U m -44
+KPX U n -44
+KPX U p -47
+KPX U period -48
+KPX U r -43
+KPX Uacute A -50
+KPX Uacute comma -47
+KPX Uacute m -44
+KPX Uacute n -44
+KPX Uacute p -47
+KPX Uacute period -48
+KPX Uacute r -43
+KPX Ucircumflex A -50
+KPX Udieresis A -50
+KPX Udieresis b 8
+KPX Udieresis comma -47
+KPX Udieresis m -44
+KPX Udieresis n -44
+KPX Udieresis p -47
+KPX Udieresis period -48
+KPX Udieresis r -43
+KPX Ugrave A -50
+KPX V A -95
+KPX V AE -42
+KPX V Aacute -95
+KPX V Acircumflex -95
+KPX V Adieresis -95
+KPX V Agrave -95
+KPX V Aring -95
+KPX V Atilde -95
+KPX V C -41
+KPX V G -45
+KPX V O -43
+KPX V Oacute -43
+KPX V Ocircumflex -43
+KPX V Odieresis -43
+KPX V Ograve -43
+KPX V Oslash -46
+KPX V Otilde -43
+KPX V S -15
+KPX V T 17
+KPX V a -79
+KPX V ae -84
+KPX V colon -99
+KPX V comma -101
+KPX V e -78
+KPX V g -88
+KPX V guillemotleft -70
+KPX V guilsinglleft -98
+KPX V hyphen -68
+KPX V i -13
+KPX V o -83
+KPX V oslash -79
+KPX V period -102
+KPX V r -56
+KPX V semicolon -103
+KPX V u -55
+KPX V y -68
+KPX W A -71
+KPX W AE -53
+KPX W Aacute -71
+KPX W Acircumflex -71
+KPX W Adieresis -71
+KPX W Agrave -71
+KPX W Aring -71
+KPX W Atilde -71
+KPX W C -44
+KPX W G -44
+KPX W O -44
+KPX W Oacute -44
+KPX W Ocircumflex -44
+KPX W Odieresis -44
+KPX W Ograve -44
+KPX W Oslash -43
+KPX W Otilde -44
+KPX W S -26
+KPX W T 6
+KPX W a -58
+KPX W ae -64
+KPX W colon -92
+KPX W comma -71
+KPX W e -57
+KPX W g -66
+KPX W guillemotleft -49
+KPX W guilsinglleft -77
+KPX W hyphen -46
+KPX W i -24
+KPX W o -61
+KPX W oslash -57
+KPX W period -72
+KPX W r -49
+KPX W semicolon -93
+KPX W u -48
+KPX W y -56
+KPX X C -37
+KPX X O -39
+KPX X Odieresis -39
+KPX X Q -41
+KPX X a -5
+KPX X e -5
+KPX X hyphen -50
+KPX X o -13
+KPX X u -17
+KPX X y -88
+KPX Y A -43
+KPX Y AE -38
+KPX Y Aacute -43
+KPX Y Acircumflex -43
+KPX Y Adieresis -43
+KPX Y Agrave -43
+KPX Y Aring -43
+KPX Y Atilde -43
+KPX Y C -33
+KPX Y G -37
+KPX Y O -35
+KPX Y Oacute -35
+KPX Y Ocircumflex -35
+KPX Y Odieresis -35
+KPX Y Ograve -35
+KPX Y Oslash -38
+KPX Y Otilde -35
+KPX Y S -8
+KPX Y T 21
+KPX Y a -92
+KPX Y ae -83
+KPX Y colon -103
+KPX Y comma -89
+KPX Y e -91
+KPX Y g -87
+KPX Y guillemotleft -95
+KPX Y guilsinglleft -123
+KPX Y hyphen -95
+KPX Y i -10
+KPX Y o -95
+KPX Y oslash -91
+KPX Y p -80
+KPX Y period -90
+KPX Y semicolon -102
+KPX Y u -72
+KPX Y v -69
+KPX Z v -15
+KPX Z y -8
+KPX a j -45
+KPX a quoteright -7
+KPX a v -21
+KPX a w -18
+KPX a y -37
+KPX aacute v -21
+KPX aacute w -18
+KPX aacute y -37
+KPX adieresis v -21
+KPX adieresis w -18
+KPX adieresis y -37
+KPX ae v -21
+KPX ae w -22
+KPX ae y -6
+KPX agrave v -21
+KPX agrave w -18
+KPX agrave y -37
+KPX aring v -21
+KPX aring w -18
+KPX aring y -37
+KPX b v -27
+KPX b w -26
+KPX b y -4
+KPX c h -23
+KPX c k -21
+KPX comma one -48
+KPX comma quotedblright 4
+KPX comma quoteright 4
+KPX e quoteright 20
+KPX e t -13
+KPX e v -22
+KPX e w -22
+KPX e x -1
+KPX e y -4
+KPX eacute v -22
+KPX eacute w -23
+KPX eacute y -4
+KPX ecircumflex v -22
+KPX ecircumflex w -22
+KPX ecircumflex y -4
+KPX eight four 7
+KPX eight one -60
+KPX eight seven -11
+KPX f a -14
+KPX f aacute -14
+KPX f adieresis 3
+KPX f ae -7
+KPX f aring -14
+KPX f e -15
+KPX f eacute -15
+KPX f f 14
+KPX f i 16
+KPX f j -2
+KPX f l 42
+KPX f o -18
+KPX f oacute -18
+KPX f odieresis 18
+KPX f oe -15
+KPX f oslash -18
+KPX f quoteright 57
+KPX f s -12
+KPX f t 18
+KPX five four 4
+KPX five one -77
+KPX five seven -42
+KPX four four 17
+KPX four one -41
+KPX four seven -30
+KPX g a -32
+KPX g adieresis -32
+KPX g ae -22
+KPX g aring -32
+KPX g e -29
+KPX g eacute -29
+KPX g l -37
+KPX g oacute -32
+KPX g odieresis -32
+KPX g r 0
+KPX guillemotright A -14
+KPX guillemotright AE -1
+KPX guillemotright Aacute -14
+KPX guillemotright Adieresis -14
+KPX guillemotright Aring -14
+KPX guillemotright T -81
+KPX guillemotright V -61
+KPX guillemotright W -53
+KPX guillemotright Y -80
+KPX guilsinglright A -38
+KPX guilsinglright AE -25
+KPX guilsinglright Aacute -38
+KPX guilsinglright Adieresis -38
+KPX guilsinglright Aring -38
+KPX guilsinglright T -105
+KPX guilsinglright V -86
+KPX guilsinglright W -77
+KPX guilsinglright Y -104
+KPX h quoteright -22
+KPX h y -43
+KPX hyphen A -11
+KPX hyphen AE 2
+KPX hyphen Aacute -11
+KPX hyphen Adieresis -11
+KPX hyphen Aring -11
+KPX hyphen T -78
+KPX hyphen V -60
+KPX hyphen W -51
+KPX hyphen Y -81
+KPX i T -38
+KPX i j -44
+KPX k a -5
+KPX k aacute -5
+KPX k adieresis -5
+KPX k ae 0
+KPX k aring -5
+KPX k comma 0
+KPX k e -2
+KPX k eacute -2
+KPX k g -7
+KPX k hyphen -9
+KPX k o -8
+KPX k oacute -8
+KPX k odieresis -8
+KPX k period -1
+KPX k s -6
+KPX k u -27
+KPX k udieresis -27
+KPX l v -28
+KPX l y -52
+KPX m p -27
+KPX m v -22
+KPX m w -18
+KPX m y -42
+KPX n T -61
+KPX n p -26
+KPX n quoteright -19
+KPX n v -21
+KPX n w -17
+KPX n y -40
+KPX nine four -2
+KPX nine one -69
+KPX nine seven -12
+KPX o T -48
+KPX o quoteright 15
+KPX o t -15
+KPX o v -19
+KPX o w -17
+KPX o x -9
+KPX o y 3
+KPX oacute v -19
+KPX oacute w -17
+KPX oacute y 3
+KPX ocircumflex t -15
+KPX odieresis t -15
+KPX odieresis v -19
+KPX odieresis w -17
+KPX odieresis x -9
+KPX odieresis y 3
+KPX ograve v -19
+KPX ograve w -17
+KPX ograve y 3
+KPX one comma -30
+KPX one eight -41
+KPX one five -39
+KPX one four -60
+KPX one nine -33
+KPX one one -50
+KPX one period -31
+KPX one seven -67
+KPX one six -49
+KPX one three -36
+KPX one two -8
+KPX one zero -42
+KPX p t -21
+KPX p y -4
+KPX period one -54
+KPX period quotedblright -1
+KPX period quoteright -1
+KPX q c -26
+KPX q u -23
+KPX quotedblbase A 37
+KPX quotedblbase AE 50
+KPX quotedblbase T -50
+KPX quotedblbase V -76
+KPX quotedblbase W -64
+KPX quotedblbase Y -53
+KPX quotedblleft A -63
+KPX quotedblleft AE -51
+KPX quotedblleft Aacute -63
+KPX quotedblleft Adieresis -63
+KPX quotedblleft Aring -63
+KPX quotedblleft T 33
+KPX quotedblleft V 43
+KPX quotedblleft W 35
+KPX quotedblleft Y 44
+KPX quotedblright A -69
+KPX quotedblright AE -57
+KPX quotedblright Aacute -69
+KPX quotedblright Adieresis -69
+KPX quotedblright Aring -69
+KPX quotedblright T 29
+KPX quotedblright V 33
+KPX quotedblright W 25
+KPX quotedblright Y 35
+KPX quoteleft A -61
+KPX quoteleft AE -49
+KPX quoteleft Aacute -61
+KPX quoteleft Adieresis -61
+KPX quoteleft Aring -61
+KPX quoteleft T 35
+KPX quoteleft V 45
+KPX quoteleft W 38
+KPX quoteleft Y 47
+KPX quoteright A -62
+KPX quoteright AE -50
+KPX quoteright Aacute -62
+KPX quoteright Adieresis -62
+KPX quoteright Aring -62
+KPX quoteright comma -42
+KPX quoteright d -18
+KPX quoteright o -13
+KPX quoteright period -43
+KPX quoteright r -5
+KPX quoteright s -11
+KPX quoteright t -1
+KPX quoteright v -1
+KPX quoteright w -2
+KPX quoteright y 14
+KPX r a -10
+KPX r aacute -10
+KPX r acircumflex -10
+KPX r adieresis -10
+KPX r ae -11
+KPX r agrave -10
+KPX r aring -10
+KPX r c -11
+KPX r ccedilla -9
+KPX r colon -36
+KPX r comma -108
+KPX r d -15
+KPX r e -8
+KPX r eacute -8
+KPX r ecircumflex -8
+KPX r egrave -8
+KPX r f 5
+KPX r g -15
+KPX r h -33
+KPX r hyphen -75
+KPX r i 4
+KPX r j -14
+KPX r k -30
+KPX r l -28
+KPX r m -3
+KPX r n -3
+KPX r o -10
+KPX r oacute -10
+KPX r ocircumflex -10
+KPX r odieresis -10
+KPX r oe -6
+KPX r ograve -10
+KPX r oslash -8
+KPX r p -3
+KPX r period -109
+KPX r q -15
+KPX r quoteright 36
+KPX r r 1
+KPX r s -14
+KPX r semicolon -39
+KPX r t 9
+KPX r u -1
+KPX r v 2
+KPX r w 1
+KPX r x 2
+KPX r y 10
+KPX r z 2
+KPX s quoteright 19
+KPX s t -14
+KPX seven colon -95
+KPX seven comma -78
+KPX seven eight -47
+KPX seven five -49
+KPX seven four -82
+KPX seven one -67
+KPX seven period -79
+KPX seven seven -28
+KPX seven six -49
+KPX seven three -38
+KPX seven two -31
+KPX six four 11
+KPX six one -55
+KPX six seven -12
+KPX t S -11
+KPX t a -6
+KPX t aacute -6
+KPX t adieresis -6
+KPX t ae -1
+KPX t aring -6
+KPX t colon -40
+KPX t e -3
+KPX t eacute -3
+KPX t h -24
+KPX t o -9
+KPX t oacute -9
+KPX t odieresis -9
+KPX t quoteright 4
+KPX t semicolon -37
+KPX three four -3
+KPX three one -73
+KPX three seven -20
+KPX two four 2
+KPX two one -56
+KPX two seven -18
+KPX u quoteright -12
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -28
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -23
+KPX v colon -67
+KPX v comma -43
+KPX v e -19
+KPX v eacute -19
+KPX v ecircumflex -19
+KPX v egrave -19
+KPX v g -31
+KPX v hyphen -9
+KPX v l -33
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -19
+KPX v period -44
+KPX v s -31
+KPX v semicolon -65
+KPX w a -18
+KPX w aacute -18
+KPX w acircumflex -18
+KPX w adieresis -18
+KPX w ae -26
+KPX w agrave -18
+KPX w aring -18
+KPX w atilde -18
+KPX w c -21
+KPX w colon -65
+KPX w comma -40
+KPX w e -17
+KPX w eacute -17
+KPX w ecircumflex -17
+KPX w egrave -17
+KPX w g -29
+KPX w hyphen -8
+KPX w l -31
+KPX w o -21
+KPX w oacute -21
+KPX w odieresis -21
+KPX w ograve -21
+KPX w oslash -17
+KPX w period -41
+KPX w s -29
+KPX w semicolon -63
+KPX x a 3
+KPX x c 0
+KPX x e 5
+KPX x eacute 5
+KPX x o 0
+KPX x q 3
+KPX y a -21
+KPX y aacute -21
+KPX y acircumflex -21
+KPX y adieresis -21
+KPX y ae -28
+KPX y agrave -21
+KPX y aring -21
+KPX y atilde -21
+KPX y c -24
+KPX y colon -53
+KPX y comma -48
+KPX y e -20
+KPX y eacute -20
+KPX y ecircumflex -20
+KPX y egrave -20
+KPX y g -31
+KPX y hyphen -15
+KPX y l -33
+KPX y o -24
+KPX y oacute -24
+KPX y odieresis -24
+KPX y ograve -24
+KPX y oslash -20
+KPX y period -49
+KPX y s -31
+KPX y semicolon -57
+KPX zero four 6
+KPX zero one -62
+KPX zero seven -8
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uncri8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uncri8a.pfb
new file mode 100644
index 00000000000..2fbd6164793
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uncri8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplb8a.afm b/Master/tlpkg/tlgs/lib/fonts/uplb8a.afm
new file mode 100644
index 00000000000..6b6b6bbc43f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplb8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWPalladioL-Bold
+FullName URW Palladio L Bold
+FamilyName URW Palladio L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -152 -301 1000 935
+CapHeight 681
+XHeight 471
+Descender -258
+Ascender 720
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 278 ; N exclam ; B 63 -12 219 688 ;
+C 34 ; WX 402 ; N quotedbl ; B 22 376 380 695 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 496 673 ;
+C 36 ; WX 500 ; N dollar ; B 28 -114 472 721 ;
+C 37 ; WX 889 ; N percent ; B 61 -9 828 714 ;
+C 38 ; WX 833 ; N ampersand ; B 52 -17 813 684 ;
+C 39 ; WX 278 ; N quoteright ; B 29 405 249 695 ;
+C 40 ; WX 333 ; N parenleft ; B 65 -104 305 723 ;
+C 41 ; WX 333 ; N parenright ; B 28 -104 268 723 ;
+C 42 ; WX 444 ; N asterisk ; B 44 332 399 695 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 505 ;
+C 44 ; WX 250 ; N comma ; B -6 -166 227 141 ;
+C 45 ; WX 333 ; N hyphen ; B 16 195 317 305 ;
+C 46 ; WX 250 ; N period ; B 47 -12 203 144 ;
+C 47 ; WX 296 ; N slash ; B -9 -17 305 720 ;
+C 48 ; WX 500 ; N zero ; B 33 -17 468 660 ;
+C 49 ; WX 500 ; N one ; B 35 -3 455 670 ;
+C 50 ; WX 500 ; N two ; B 25 -3 472 660 ;
+C 51 ; WX 500 ; N three ; B 22 -17 458 660 ;
+C 52 ; WX 500 ; N four ; B 12 -3 473 672 ;
+C 53 ; WX 500 ; N five ; B 42 -17 472 656 ;
+C 54 ; WX 500 ; N six ; B 37 -17 469 660 ;
+C 55 ; WX 500 ; N seven ; B 46 -3 493 656 ;
+C 56 ; WX 500 ; N eight ; B 34 -17 467 660 ;
+C 57 ; WX 500 ; N nine ; B 31 -17 463 660 ;
+C 58 ; WX 250 ; N colon ; B 47 -12 203 454 ;
+C 59 ; WX 250 ; N semicolon ; B -6 -166 227 454 ;
+C 60 ; WX 606 ; N less ; B 49 -19 558 523 ;
+C 61 ; WX 606 ; N equal ; B 51 114 555 396 ;
+C 62 ; WX 606 ; N greater ; B 49 -19 558 523 ;
+C 63 ; WX 444 ; N question ; B 43 -12 411 687 ;
+C 64 ; WX 747 ; N at ; B 42 -12 704 681 ;
+C 65 ; WX 778 ; N A ; B 24 -3 757 686 ;
+C 66 ; WX 667 ; N B ; B 39 -3 611 681 ;
+C 67 ; WX 722 ; N C ; B 44 -17 695 695 ;
+C 68 ; WX 833 ; N D ; B 35 -3 786 681 ;
+C 69 ; WX 611 ; N E ; B 39 -4 577 682 ;
+C 70 ; WX 556 ; N F ; B 28 -3 539 682 ;
+C 71 ; WX 833 ; N G ; B 47 -17 776 695 ;
+C 72 ; WX 833 ; N H ; B 36 -3 796 681 ;
+C 73 ; WX 389 ; N I ; B 39 -3 350 681 ;
+C 74 ; WX 389 ; N J ; B -11 -213 350 681 ;
+C 75 ; WX 778 ; N K ; B 39 -3 763 681 ;
+C 76 ; WX 611 ; N L ; B 39 -4 577 681 ;
+C 77 ; WX 1000 ; N M ; B 32 -10 968 681 ;
+C 78 ; WX 833 ; N N ; B 35 -16 798 681 ;
+C 79 ; WX 833 ; N O ; B 47 -17 787 695 ;
+C 80 ; WX 611 ; N P ; B 39 -3 594 681 ;
+C 81 ; WX 833 ; N Q ; B 47 -184 787 695 ;
+C 82 ; WX 722 ; N R ; B 39 -3 708 681 ;
+C 83 ; WX 611 ; N S ; B 57 -17 559 695 ;
+C 84 ; WX 667 ; N T ; B 17 -3 650 681 ;
+C 85 ; WX 778 ; N U ; B 26 -17 760 681 ;
+C 86 ; WX 778 ; N V ; B 20 -3 763 681 ;
+C 87 ; WX 1000 ; N W ; B 17 -3 988 686 ;
+C 88 ; WX 667 ; N X ; B 17 -3 650 695 ;
+C 89 ; WX 667 ; N Y ; B 15 -3 660 695 ;
+C 90 ; WX 667 ; N Z ; B 24 -3 627 681 ;
+C 91 ; WX 333 ; N bracketleft ; B 73 -104 291 720 ;
+C 92 ; WX 606 ; N backslash ; B 72 0 534 720 ;
+C 93 ; WX 333 ; N bracketright ; B 42 -104 260 720 ;
+C 94 ; WX 606 ; N asciicircum ; B 52 275 554 678 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 29 405 249 695 ;
+C 97 ; WX 500 ; N a ; B 40 -17 478 471 ;
+C 98 ; WX 611 ; N b ; B 10 -17 556 720 ;
+C 99 ; WX 444 ; N c ; B 37 -17 414 471 ;
+C 100 ; WX 611 ; N d ; B 42 -17 577 720 ;
+C 101 ; WX 500 ; N e ; B 42 -17 461 471 ;
+C 102 ; WX 389 ; N f ; B 34 -3 381 720 ;
+C 103 ; WX 556 ; N g ; B 26 -266 535 471 ;
+C 104 ; WX 611 ; N h ; B 24 -3 587 720 ;
+C 105 ; WX 333 ; N i ; B 34 -3 298 706 ;
+C 106 ; WX 333 ; N j ; B 3 -266 241 706 ;
+C 107 ; WX 611 ; N k ; B 21 -3 597 720 ;
+C 108 ; WX 333 ; N l ; B 24 -3 296 720 ;
+C 109 ; WX 889 ; N m ; B 24 -3 864 471 ;
+C 110 ; WX 611 ; N n ; B 24 -3 587 471 ;
+C 111 ; WX 556 ; N o ; B 40 -17 517 471 ;
+C 112 ; WX 611 ; N p ; B 29 -258 567 471 ;
+C 113 ; WX 611 ; N q ; B 52 -258 589 471 ;
+C 114 ; WX 389 ; N r ; B 30 -3 389 471 ;
+C 115 ; WX 444 ; N s ; B 39 -17 405 471 ;
+C 116 ; WX 333 ; N t ; B 22 -17 324 632 ;
+C 117 ; WX 611 ; N u ; B 25 -17 583 471 ;
+C 118 ; WX 556 ; N v ; B 11 -3 545 459 ;
+C 119 ; WX 833 ; N w ; B 13 -3 820 471 ;
+C 120 ; WX 500 ; N x ; B 20 -3 483 471 ;
+C 121 ; WX 556 ; N y ; B 10 -266 546 459 ;
+C 122 ; WX 500 ; N z ; B 16 -3 464 459 ;
+C 123 ; WX 310 ; N braceleft ; B 5 -117 288 725 ;
+C 124 ; WX 606 ; N bar ; B 260 0 346 720 ;
+C 125 ; WX 310 ; N braceright ; B 22 -117 305 725 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 174 555 329 ;
+C 161 ; WX 278 ; N exclamdown ; B 59 -227 215 471 ;
+C 162 ; WX 500 ; N cent ; B 73 -106 450 554 ;
+C 163 ; WX 500 ; N sterling ; B -2 -19 501 676 ;
+C 164 ; WX 167 ; N fraction ; B -152 0 320 660 ;
+C 165 ; WX 500 ; N yen ; B 17 -3 483 695 ;
+C 166 ; WX 500 ; N florin ; B 11 -242 490 703 ;
+C 167 ; WX 500 ; N section ; B 30 -217 471 695 ;
+C 168 ; WX 500 ; N currency ; B 32 96 468 533 ;
+C 169 ; WX 227 ; N quotesingle ; B 45 376 181 695 ;
+C 170 ; WX 500 ; N quotedblleft ; B 34 405 466 695 ;
+C 171 ; WX 500 ; N guillemotleft ; B 36 44 463 438 ;
+C 172 ; WX 389 ; N guilsinglleft ; B 82 44 307 438 ;
+C 173 ; WX 389 ; N guilsinglright ; B 82 44 307 438 ;
+C 174 ; WX 611 ; N fi ; B 10 -3 595 720 ;
+C 175 ; WX 611 ; N fl ; B 17 -3 593 720 ;
+C 177 ; WX 500 ; N endash ; B 0 208 500 291 ;
+C 178 ; WX 500 ; N dagger ; B 29 -6 472 682 ;
+C 179 ; WX 500 ; N daggerdbl ; B 32 -245 468 682 ;
+C 180 ; WX 250 ; N periodcentered ; B 47 179 203 335 ;
+C 182 ; WX 641 ; N paragraph ; B 19 -161 599 683 ;
+C 183 ; WX 606 ; N bullet ; B 131 172 475 516 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 56 -160 276 130 ;
+C 185 ; WX 500 ; N quotedblbase ; B 34 -160 466 130 ;
+C 186 ; WX 500 ; N quotedblright ; B 34 405 466 695 ;
+C 187 ; WX 500 ; N guillemotright ; B 37 44 464 438 ;
+C 188 ; WX 1000 ; N ellipsis ; B 89 -12 911 144 ;
+C 189 ; WX 1000 ; N perthousand ; B 33 -9 982 724 ;
+C 191 ; WX 444 ; N questiondown ; B 33 -231 401 471 ;
+C 193 ; WX 333 ; N grave ; B 18 506 256 691 ;
+C 194 ; WX 333 ; N acute ; B 78 506 316 691 ;
+C 195 ; WX 333 ; N circumflex ; B -2 506 335 681 ;
+C 196 ; WX 333 ; N tilde ; B -16 535 349 661 ;
+C 197 ; WX 333 ; N macron ; B 1 538 332 609 ;
+C 198 ; WX 333 ; N breve ; B 15 506 318 669 ;
+C 199 ; WX 333 ; N dotaccent ; B 100 537 234 671 ;
+C 200 ; WX 333 ; N dieresis ; B -8 537 341 671 ;
+C 202 ; WX 333 ; N ring ; B 67 500 267 700 ;
+C 203 ; WX 333 ; N cedilla ; B 73 -225 300 -7 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -56 506 390 691 ;
+C 206 ; WX 333 ; N ogonek ; B 60 -229 274 0 ;
+C 207 ; WX 333 ; N caron ; B -2 510 335 685 ;
+C 208 ; WX 1000 ; N emdash ; B 0 208 1000 291 ;
+C 225 ; WX 1000 ; N AE ; B 12 -4 954 682 ;
+C 227 ; WX 438 ; N ordfeminine ; B 77 367 361 660 ;
+C 232 ; WX 611 ; N Lslash ; B 16 -4 577 681 ;
+C 233 ; WX 833 ; N Oslash ; B 32 -20 808 698 ;
+C 234 ; WX 1000 ; N OE ; B 43 -17 985 695 ;
+C 235 ; WX 488 ; N ordmasculine ; B 89 367 399 660 ;
+C 241 ; WX 778 ; N ae ; B 46 -17 731 471 ;
+C 245 ; WX 333 ; N dotlessi ; B 34 -3 298 471 ;
+C 248 ; WX 333 ; N lslash ; B -4 -3 334 720 ;
+C 249 ; WX 556 ; N oslash ; B 23 -18 534 471 ;
+C 250 ; WX 833 ; N oe ; B 48 -17 799 471 ;
+C 251 ; WX 611 ; N germandbls ; B 30 -17 565 720 ;
+C -1 ; WX 778 ; N Udieresis ; B 26 -17 760 895 ;
+C -1 ; WX 778 ; N Uacute ; B 26 -17 760 915 ;
+C -1 ; WX 611 ; N Scedilla ; B 57 -225 559 695 ;
+C -1 ; WX 667 ; N Tcaron ; B 17 -3 650 909 ;
+C -1 ; WX 611 ; N Scaron ; B 57 -17 559 909 ;
+C -1 ; WX 722 ; N Rcaron ; B 39 -3 708 909 ;
+C -1 ; WX 722 ; N Racute ; B 39 -3 708 915 ;
+C -1 ; WX 611 ; N Sacute ; B 57 -17 559 915 ;
+C -1 ; WX 833 ; N Otilde ; B 47 -17 787 885 ;
+C -1 ; WX 611 ; N ucircumflex ; B 25 -17 583 681 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 47 -17 787 915 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 26 -17 760 915 ;
+C -1 ; WX 667 ; N Yacute ; B 15 -3 660 915 ;
+C -1 ; WX 833 ; N Eth ; B 10 -3 786 681 ;
+C -1 ; WX 833 ; N Dcroat ; B 10 -3 786 681 ;
+C -1 ; WX 667 ; N Zacute ; B 24 -3 627 915 ;
+C -1 ; WX 778 ; N Uring ; B 26 -17 760 924 ;
+C -1 ; WX 556 ; N gbreve ; B 26 -266 535 669 ;
+C -1 ; WX 500 ; N eogonek ; B 42 -229 480 471 ;
+C -1 ; WX 500 ; N edotaccent ; B 42 -17 461 671 ;
+C -1 ; WX 500 ; N ecaron ; B 42 -17 461 685 ;
+C -1 ; WX 778 ; N Ugrave ; B 26 -17 760 915 ;
+C -1 ; WX 611 ; N Thorn ; B 39 -3 574 681 ;
+C -1 ; WX 500 ; N eacute ; B 42 -17 461 691 ;
+C -1 ; WX 500 ; N edieresis ; B 42 -17 461 671 ;
+C -1 ; WX 711 ; N dcaron ; B 42 -17 731 723 ;
+C -1 ; WX 444 ; N ccedilla ; B 37 -225 414 471 ;
+C -1 ; WX 444 ; N ccaron ; B 37 -17 431 685 ;
+C -1 ; WX 444 ; N cacute ; B 37 -17 444 691 ;
+C -1 ; WX 500 ; N aogonek ; B 40 -229 544 471 ;
+C -1 ; WX 500 ; N aring ; B 40 -17 478 700 ;
+C -1 ; WX 500 ; N atilde ; B 40 -17 478 661 ;
+C -1 ; WX 500 ; N abreve ; B 40 -17 478 669 ;
+C -1 ; WX 500 ; N egrave ; B 42 -17 461 691 ;
+C -1 ; WX 500 ; N agrave ; B 40 -17 478 691 ;
+C -1 ; WX 500 ; N aacute ; B 40 -17 478 691 ;
+C -1 ; WX 500 ; N adieresis ; B 40 -17 478 671 ;
+C -1 ; WX 778 ; N Uogonek ; B 26 -229 760 681 ;
+C -1 ; WX 611 ; N ugrave ; B 25 -17 583 691 ;
+C -1 ; WX 611 ; N uacute ; B 25 -17 583 691 ;
+C -1 ; WX 611 ; N udieresis ; B 25 -17 583 671 ;
+C -1 ; WX 402 ; N tcaron ; B 22 -17 422 695 ;
+C -1 ; WX 444 ; N scommaaccent ; B 39 -301 405 471 ;
+C -1 ; WX 667 ; N Zcaron ; B 24 -3 627 909 ;
+C -1 ; WX 500 ; N ecircumflex ; B 42 -17 461 681 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 26 -17 760 905 ;
+C -1 ; WX 500 ; N acircumflex ; B 40 -17 478 681 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 24 -3 627 895 ;
+C -1 ; WX 444 ; N scaron ; B 39 -17 405 685 ;
+C -1 ; WX 778 ; N Amacron ; B 24 -3 757 833 ;
+C -1 ; WX 444 ; N sacute ; B 39 -17 412 691 ;
+C -1 ; WX 667 ; N Tcommaaccent ; B 17 -301 650 681 ;
+C -1 ; WX 667 ; N Ydieresis ; B 15 -3 660 895 ;
+C -1 ; WX 611 ; N thorn ; B 17 -258 563 720 ;
+C -1 ; WX 611 ; N Emacron ; B 39 -4 577 833 ;
+C -1 ; WX 833 ; N Ograve ; B 47 -17 787 915 ;
+C -1 ; WX 833 ; N Oacute ; B 47 -17 787 915 ;
+C -1 ; WX 833 ; N Odieresis ; B 47 -17 787 895 ;
+C -1 ; WX 833 ; N Ntilde ; B 35 -16 798 885 ;
+C -1 ; WX 833 ; N Ncaron ; B 35 -16 798 909 ;
+C -1 ; WX 833 ; N Nacute ; B 35 -16 798 915 ;
+C -1 ; WX 611 ; N Lcaron ; B 39 -4 605 695 ;
+C -1 ; WX 611 ; N Lacute ; B 39 -4 577 915 ;
+C -1 ; WX 389 ; N Idotaccent ; B 39 -3 350 895 ;
+C -1 ; WX 389 ; N racute ; B 30 -3 409 691 ;
+C -1 ; WX 389 ; N Icircumflex ; B 26 -3 363 905 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 40 -17 556 691 ;
+C -1 ; WX 556 ; N otilde ; B 40 -17 517 661 ;
+C -1 ; WX 500 ; N Euro ; B 1 -17 470 695 ;
+C -1 ; WX 556 ; N ocircumflex ; B 40 -17 517 681 ;
+C -1 ; WX 300 ; N onesuperior ; B 18 259 277 663 ;
+C -1 ; WX 300 ; N twosuperior ; B 12 259 287 657 ;
+C -1 ; WX 300 ; N threesuperior ; B 9 251 278 657 ;
+C -1 ; WX 389 ; N Igrave ; B 39 -3 350 915 ;
+C -1 ; WX 389 ; N Iacute ; B 39 -3 350 915 ;
+C -1 ; WX 389 ; N Imacron ; B 29 -3 360 833 ;
+C -1 ; WX 389 ; N Iogonek ; B 39 -229 409 681 ;
+C -1 ; WX 389 ; N Idieresis ; B 20 -3 369 895 ;
+C -1 ; WX 833 ; N Gbreve ; B 47 -17 776 893 ;
+C -1 ; WX 778 ; N Umacron ; B 26 -17 760 833 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B 39 -301 763 681 ;
+C -1 ; WX 556 ; N ograve ; B 40 -17 517 691 ;
+C -1 ; WX 611 ; N Scommaaccent ; B 57 -301 559 695 ;
+C -1 ; WX 611 ; N Eogonek ; B 39 -229 613 682 ;
+C -1 ; WX 556 ; N oacute ; B 40 -17 517 691 ;
+C -1 ; WX 611 ; N Edotaccent ; B 39 -4 577 895 ;
+C -1 ; WX 333 ; N iogonek ; B 34 -229 363 706 ;
+C -1 ; WX 556 ; N gcommaaccent ; B 26 -266 535 755 ;
+C -1 ; WX 556 ; N odieresis ; B 40 -17 517 671 ;
+C -1 ; WX 611 ; N ntilde ; B 24 -3 587 661 ;
+C -1 ; WX 611 ; N ncaron ; B 24 -3 587 685 ;
+C -1 ; WX 611 ; N Ecaron ; B 39 -4 577 909 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 39 -4 577 905 ;
+C -1 ; WX 444 ; N scedilla ; B 39 -225 405 471 ;
+C -1 ; WX 389 ; N rcaron ; B 26 -3 389 685 ;
+C -1 ; WX 611 ; N Egrave ; B 39 -4 577 915 ;
+C -1 ; WX 611 ; N Eacute ; B 39 -4 577 915 ;
+C -1 ; WX 833 ; N Gcommaaccent ; B 47 -301 776 695 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 39 -301 708 681 ;
+C -1 ; WX 611 ; N Edieresis ; B 39 -4 577 895 ;
+C -1 ; WX 611 ; N nacute ; B 24 -3 587 691 ;
+C -1 ; WX 611 ; N uogonek ; B 25 -229 641 471 ;
+C -1 ; WX 611 ; N umacron ; B 25 -17 583 609 ;
+C -1 ; WX 833 ; N Dcaron ; B 35 -3 786 909 ;
+C -1 ; WX 433 ; N lcaron ; B 24 -3 453 723 ;
+C -1 ; WX 722 ; N Ccaron ; B 44 -17 695 909 ;
+C -1 ; WX 722 ; N Cacute ; B 44 -17 695 915 ;
+C -1 ; WX 722 ; N Ccedilla ; B 44 -225 695 695 ;
+C -1 ; WX 400 ; N degree ; B 50 360 350 660 ;
+C -1 ; WX 778 ; N Aogonek ; B 24 -229 818 686 ;
+C -1 ; WX 606 ; N minus ; B 51 212 555 298 ;
+C -1 ; WX 606 ; N multiply ; B 72 21 534 483 ;
+C -1 ; WX 606 ; N divide ; B 51 0 555 510 ;
+C -1 ; WX 778 ; N Aring ; B 24 -3 757 934 ;
+C -1 ; WX 998 ; N trademark ; B 38 274 961 678 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 30 -301 389 471 ;
+C -1 ; WX 333 ; N lacute ; B 24 -3 316 915 ;
+C -1 ; WX 556 ; N omacron ; B 40 -17 517 609 ;
+C -1 ; WX 778 ; N Atilde ; B 24 -3 757 885 ;
+C -1 ; WX 333 ; N icircumflex ; B -2 -3 335 681 ;
+C -1 ; WX 333 ; N igrave ; B 18 -3 298 691 ;
+C -1 ; WX 611 ; N ncommaaccent ; B 24 -301 587 471 ;
+C -1 ; WX 333 ; N lcommaaccent ; B 24 -301 296 720 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 568 ;
+C -1 ; WX 750 ; N onehalf ; B 9 -2 745 665 ;
+C -1 ; WX 750 ; N onequarter ; B 19 -2 735 665 ;
+C -1 ; WX 750 ; N threequarters ; B 15 -2 735 667 ;
+C -1 ; WX 333 ; N iacute ; B 34 -3 316 691 ;
+C -1 ; WX 778 ; N Abreve ; B 24 -3 757 893 ;
+C -1 ; WX 611 ; N kcommaaccent ; B 21 -301 597 720 ;
+C -1 ; WX 833 ; N Omacron ; B 47 -17 787 833 ;
+C -1 ; WX 333 ; N imacron ; B 1 -3 332 609 ;
+C -1 ; WX 500 ; N emacron ; B 42 -17 461 609 ;
+C -1 ; WX 500 ; N amacron ; B 40 -17 478 609 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 22 -301 324 632 ;
+C -1 ; WX 556 ; N ydieresis ; B 10 -266 546 671 ;
+C -1 ; WX 500 ; N zdotaccent ; B 16 -3 464 671 ;
+C -1 ; WX 500 ; N zcaron ; B 16 -3 464 685 ;
+C -1 ; WX 500 ; N zacute ; B 16 -3 464 691 ;
+C -1 ; WX 556 ; N yacute ; B 10 -266 546 691 ;
+C -1 ; WX 611 ; N uhungarumlaut ; B 25 -17 583 691 ;
+C -1 ; WX 556 ; N eth ; B 40 -17 517 720 ;
+C -1 ; WX 611 ; N uring ; B 25 -17 583 700 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 47 -17 787 905 ;
+C -1 ; WX 333 ; N commaaccent ; B 48 -301 246 -40 ;
+C -1 ; WX 747 ; N copyright ; B 26 -17 720 695 ;
+C -1 ; WX 747 ; N registered ; B 26 -17 720 695 ;
+C -1 ; WX 778 ; N Acircumflex ; B 24 -3 757 905 ;
+C -1 ; WX 333 ; N idieresis ; B -8 -3 341 691 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -32 555 556 ;
+C -1 ; WX 549 ; N radical ; B -15 -96 536 935 ;
+C -1 ; WX 778 ; N Agrave ; B 24 -3 757 915 ;
+C -1 ; WX 778 ; N Aacute ; B 24 -3 757 915 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 662 ;
+C -1 ; WX 606 ; N greaterequal ; B 49 0 558 662 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 114 555 396 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 23 -13 466 750 ;
+C -1 ; WX 833 ; N Ncommaaccent ; B 35 -301 798 681 ;
+C -1 ; WX 611 ; N dcroat ; B 42 -17 591 720 ;
+C -1 ; WX 606 ; N brokenbar ; B 260 0 346 720 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 39 -301 577 681 ;
+C -1 ; WX 778 ; N Adieresis ; B 24 -3 757 895 ;
+C -1 ; WX 611 ; N mu ; B 25 -225 583 471 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -51
+KPX A Ccedilla -51
+KPX A G -54
+KPX A O -45
+KPX A Odieresis -45
+KPX A Q -41
+KPX A T -53
+KPX A U -46
+KPX A Uacute -46
+KPX A Ucircumflex -46
+KPX A Udieresis -46
+KPX A Ugrave -46
+KPX A V -124
+KPX A W -71
+KPX A Y -66
+KPX A a 7
+KPX A b -8
+KPX A c -13
+KPX A ccedilla -15
+KPX A comma 7
+KPX A d -14
+KPX A e -15
+KPX A g 0
+KPX A guillemotleft -49
+KPX A guilsinglleft -72
+KPX A hyphen -12
+KPX A o -16
+KPX A period 12
+KPX A q -18
+KPX A quotedblright -83
+KPX A quoteright -81
+KPX A t -14
+KPX A u -26
+KPX A v -68
+KPX A w -58
+KPX A y -72
+KPX Aacute C -51
+KPX Aacute G -54
+KPX Aacute O -45
+KPX Aacute Q -41
+KPX Aacute T -53
+KPX Aacute U -46
+KPX Aacute V -124
+KPX Aacute W -71
+KPX Aacute Y -66
+KPX Aacute a 7
+KPX Aacute b -8
+KPX Aacute c -13
+KPX Aacute comma 7
+KPX Aacute d -14
+KPX Aacute e -15
+KPX Aacute g 0
+KPX Aacute guillemotleft -49
+KPX Aacute guilsinglleft -72
+KPX Aacute hyphen -12
+KPX Aacute o -16
+KPX Aacute period 12
+KPX Aacute q -18
+KPX Aacute quoteright -81
+KPX Aacute t -14
+KPX Aacute u -26
+KPX Aacute v -68
+KPX Aacute w -58
+KPX Aacute y -72
+KPX Acircumflex C -51
+KPX Acircumflex G -54
+KPX Acircumflex O -45
+KPX Acircumflex Q -41
+KPX Acircumflex T -53
+KPX Acircumflex U -46
+KPX Acircumflex V -124
+KPX Acircumflex W -71
+KPX Acircumflex Y -66
+KPX Acircumflex comma 7
+KPX Acircumflex period 12
+KPX Adieresis C -51
+KPX Adieresis G -54
+KPX Adieresis O -45
+KPX Adieresis Q -41
+KPX Adieresis T -53
+KPX Adieresis U -46
+KPX Adieresis V -124
+KPX Adieresis W -71
+KPX Adieresis Y -66
+KPX Adieresis a 7
+KPX Adieresis b -8
+KPX Adieresis c -13
+KPX Adieresis comma 7
+KPX Adieresis d -14
+KPX Adieresis g 0
+KPX Adieresis guillemotleft -49
+KPX Adieresis guilsinglleft -72
+KPX Adieresis hyphen -12
+KPX Adieresis o -16
+KPX Adieresis period 12
+KPX Adieresis q -18
+KPX Adieresis quotedblright -83
+KPX Adieresis quoteright -81
+KPX Adieresis t -14
+KPX Adieresis u -26
+KPX Adieresis v -68
+KPX Adieresis w -58
+KPX Adieresis y -72
+KPX Agrave C -51
+KPX Agrave G -54
+KPX Agrave O -45
+KPX Agrave Q -41
+KPX Agrave T -53
+KPX Agrave U -46
+KPX Agrave V -124
+KPX Agrave W -71
+KPX Agrave Y -66
+KPX Agrave comma 7
+KPX Agrave period 12
+KPX Aring C -51
+KPX Aring G -54
+KPX Aring O -45
+KPX Aring Q -41
+KPX Aring T -53
+KPX Aring U -46
+KPX Aring V -124
+KPX Aring W -71
+KPX Aring Y -66
+KPX Aring a 7
+KPX Aring b -8
+KPX Aring c -13
+KPX Aring comma 7
+KPX Aring d -14
+KPX Aring e -15
+KPX Aring g 0
+KPX Aring guillemotleft -49
+KPX Aring guilsinglleft -72
+KPX Aring hyphen -12
+KPX Aring o -16
+KPX Aring period 12
+KPX Aring q -18
+KPX Aring quotedblright -83
+KPX Aring quoteright -81
+KPX Aring t -14
+KPX Aring u -26
+KPX Aring v -68
+KPX Aring w -58
+KPX Aring y -72
+KPX Atilde C -51
+KPX Atilde G -54
+KPX Atilde O -45
+KPX Atilde Q -41
+KPX Atilde T -53
+KPX Atilde U -46
+KPX Atilde V -124
+KPX Atilde W -71
+KPX Atilde Y -66
+KPX Atilde comma 7
+KPX Atilde period 12
+KPX B A -36
+KPX B AE -39
+KPX B Aacute -36
+KPX B Acircumflex -36
+KPX B Adieresis -36
+KPX B Aring -36
+KPX B Atilde -36
+KPX B O -7
+KPX B OE -4
+KPX B Oacute -7
+KPX B Ocircumflex -7
+KPX B Odieresis -7
+KPX B Ograve -7
+KPX B Oslash -3
+KPX B V -20
+KPX B W -18
+KPX B Y -9
+KPX C A 11
+KPX C AE 10
+KPX C Aacute 11
+KPX C Adieresis 11
+KPX C Aring 11
+KPX C H 13
+KPX C K 12
+KPX C O -13
+KPX C Oacute -13
+KPX C Odieresis -13
+KPX Ccedilla A 11
+KPX D A -67
+KPX D Aacute -67
+KPX D Acircumflex -67
+KPX D Adieresis -67
+KPX D Agrave -67
+KPX D Aring -67
+KPX D Atilde -67
+KPX D J -25
+KPX D T -3
+KPX D V -41
+KPX D W -34
+KPX D X -35
+KPX D Y -29
+KPX F A -67
+KPX F Aacute -67
+KPX F Acircumflex -67
+KPX F Adieresis -67
+KPX F Agrave -67
+KPX F Aring -67
+KPX F Atilde -67
+KPX F J 18
+KPX F O -9
+KPX F Odieresis -9
+KPX F a -35
+KPX F aacute -35
+KPX F adieresis -5
+KPX F ae -38
+KPX F aring -35
+KPX F comma -46
+KPX F e -18
+KPX F eacute -18
+KPX F hyphen 19
+KPX F i -10
+KPX F j -11
+KPX F o -17
+KPX F oacute -17
+KPX F odieresis -17
+KPX F oe -21
+KPX F oslash -17
+KPX F period -36
+KPX F r -13
+KPX F u -10
+KPX G A -14
+KPX G AE -17
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -17
+KPX G V -18
+KPX G W -16
+KPX G Y -14
+KPX J A -29
+KPX J AE -24
+KPX J Adieresis -29
+KPX J Aring -29
+KPX K C -48
+KPX K G -51
+KPX K O -42
+KPX K OE -42
+KPX K Oacute -42
+KPX K Odieresis -42
+KPX K S 10
+KPX K T 18
+KPX K a 10
+KPX K adieresis 10
+KPX K ae 6
+KPX K aring 10
+KPX K e -12
+KPX K hyphen -43
+KPX K o -13
+KPX K oacute -13
+KPX K odieresis -13
+KPX K u -23
+KPX K udieresis -23
+KPX K y -72
+KPX L A 13
+KPX L AE 19
+KPX L Aacute 13
+KPX L Adieresis 13
+KPX L Aring 13
+KPX L C -11
+KPX L Ccedilla -11
+KPX L G -14
+KPX L O -9
+KPX L Oacute -9
+KPX L Ocircumflex -9
+KPX L Odieresis -9
+KPX L Ograve -9
+KPX L Otilde -9
+KPX L S -3
+KPX L T -63
+KPX L U -26
+KPX L Udieresis -26
+KPX L V -94
+KPX L W -64
+KPX L Y -77
+KPX L hyphen 19
+KPX L quotedblright -82
+KPX L quoteright -79
+KPX L u -22
+KPX L udieresis -22
+KPX L y -57
+KPX N A -24
+KPX N AE -18
+KPX N Aacute -24
+KPX N Adieresis -24
+KPX N Aring -24
+KPX N C -21
+KPX N Ccedilla -21
+KPX N G -23
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -28
+KPX N aacute -28
+KPX N adieresis -15
+KPX N ae -31
+KPX N aring -28
+KPX N comma -11
+KPX N e -23
+KPX N eacute -23
+KPX N o -22
+KPX N oacute -22
+KPX N odieresis -22
+KPX N oslash -17
+KPX N period -3
+KPX N u -29
+KPX N udieresis -29
+KPX O A -51
+KPX O AE -54
+KPX O Aacute -51
+KPX O Adieresis -51
+KPX O Aring -51
+KPX O T -9
+KPX O V -49
+KPX O W -31
+KPX O X -42
+KPX O Y -37
+KPX Oacute A -51
+KPX Oacute T -9
+KPX Oacute V -49
+KPX Oacute W -31
+KPX Oacute Y -37
+KPX Ocircumflex T -9
+KPX Ocircumflex V -49
+KPX Ocircumflex Y -37
+KPX Odieresis A -51
+KPX Odieresis T -9
+KPX Odieresis V -49
+KPX Odieresis W -31
+KPX Odieresis X -42
+KPX Odieresis Y -37
+KPX Ograve T -9
+KPX Ograve V -49
+KPX Ograve Y -37
+KPX Oslash A -52
+KPX Otilde T -9
+KPX Otilde V -49
+KPX Otilde Y -37
+KPX P A -88
+KPX P AE -85
+KPX P Aacute -88
+KPX P Adieresis -88
+KPX P Aring -88
+KPX P J 0
+KPX P a -28
+KPX P aacute -28
+KPX P adieresis -7
+KPX P ae -29
+KPX P aring -28
+KPX P comma -96
+KPX P e -35
+KPX P eacute -35
+KPX P hyphen -27
+KPX P o -33
+KPX P oacute -33
+KPX P odieresis -21
+KPX P oe -37
+KPX P oslash -33
+KPX P period -86
+KPX R C -35
+KPX R Ccedilla -35
+KPX R G -37
+KPX R O -34
+KPX R OE -31
+KPX R Oacute -34
+KPX R Odieresis -34
+KPX R T -25
+KPX R U -41
+KPX R Udieresis -41
+KPX R V -40
+KPX R W -38
+KPX R Y -30
+KPX R a 11
+KPX R aacute 11
+KPX R adieresis 11
+KPX R ae 6
+KPX R aring 11
+KPX R e -12
+KPX R eacute -12
+KPX R hyphen -22
+KPX R o -12
+KPX R oacute -12
+KPX R odieresis -12
+KPX R oe -16
+KPX R u -22
+KPX R uacute -22
+KPX R udieresis -22
+KPX R y -27
+KPX S A -27
+KPX S AE -30
+KPX S Aacute -27
+KPX S Adieresis -27
+KPX S Aring -27
+KPX S T -9
+KPX S V -9
+KPX S W -8
+KPX S Y -7
+KPX S t -14
+KPX T A -54
+KPX T AE -48
+KPX T Aacute -54
+KPX T Acircumflex -54
+KPX T Adieresis -54
+KPX T Agrave -54
+KPX T Aring -54
+KPX T Atilde -54
+KPX T C -12
+KPX T G -13
+KPX T J 18
+KPX T O -12
+KPX T OE -6
+KPX T Oacute -12
+KPX T Ocircumflex -12
+KPX T Odieresis -12
+KPX T Ograve -12
+KPX T Oslash -12
+KPX T Otilde -12
+KPX T S -1
+KPX T V 28
+KPX T W 29
+KPX T Y 29
+KPX T a -71
+KPX T ae -75
+KPX T c -92
+KPX T colon -67
+KPX T comma -71
+KPX T e -90
+KPX T g -79
+KPX T guillemotleft -101
+KPX T guilsinglleft -124
+KPX T hyphen -60
+KPX T i -11
+KPX T j -12
+KPX T o -89
+KPX T oslash -59
+KPX T period -65
+KPX T r -61
+KPX T s -65
+KPX T semicolon -71
+KPX T u -100
+KPX T v -94
+KPX T w -95
+KPX T y -93
+KPX U A -51
+KPX U AE -54
+KPX U Aacute -51
+KPX U Acircumflex -51
+KPX U Adieresis -51
+KPX U Aring -51
+KPX U Atilde -51
+KPX U comma -24
+KPX U m -20
+KPX U n -20
+KPX U p -23
+KPX U period -13
+KPX U r -23
+KPX Uacute A -51
+KPX Uacute comma -24
+KPX Uacute m -20
+KPX Uacute n -20
+KPX Uacute p -23
+KPX Uacute period -13
+KPX Uacute r -23
+KPX Ucircumflex A -51
+KPX Udieresis A -51
+KPX Udieresis b 29
+KPX Udieresis comma -24
+KPX Udieresis m -20
+KPX Udieresis n -20
+KPX Udieresis p -23
+KPX Udieresis period -13
+KPX Udieresis r -23
+KPX Ugrave A -51
+KPX V A -115
+KPX V AE -119
+KPX V Aacute -115
+KPX V Acircumflex -115
+KPX V Adieresis -115
+KPX V Agrave -115
+KPX V Aring -115
+KPX V Atilde -115
+KPX V C -53
+KPX V G -55
+KPX V O -52
+KPX V Oacute -52
+KPX V Ocircumflex -52
+KPX V Odieresis -52
+KPX V Ograve -52
+KPX V Oslash -51
+KPX V Otilde -52
+KPX V S -26
+KPX V T 30
+KPX V a -87
+KPX V ae -87
+KPX V colon -63
+KPX V comma -101
+KPX V e -84
+KPX V g -78
+KPX V guillemotleft -89
+KPX V guilsinglleft -112
+KPX V hyphen -48
+KPX V i -8
+KPX V o -83
+KPX V oslash -79
+KPX V period -91
+KPX V r -52
+KPX V semicolon -77
+KPX V u -49
+KPX V y -36
+KPX W A -82
+KPX W AE -78
+KPX W Aacute -82
+KPX W Acircumflex -82
+KPX W Adieresis -82
+KPX W Agrave -82
+KPX W Aring -82
+KPX W Atilde -82
+KPX W C -36
+KPX W G -38
+KPX W O -36
+KPX W Oacute -36
+KPX W Ocircumflex -36
+KPX W Odieresis -36
+KPX W Ograve -36
+KPX W Oslash -31
+KPX W Otilde -36
+KPX W S -24
+KPX W T 32
+KPX W a -60
+KPX W ae -64
+KPX W colon -42
+KPX W comma -61
+KPX W e -53
+KPX W g -55
+KPX W guillemotleft -60
+KPX W guilsinglleft -83
+KPX W hyphen -19
+KPX W i -6
+KPX W o -52
+KPX W oslash -49
+KPX W period -51
+KPX W r -35
+KPX W semicolon -55
+KPX W u -33
+KPX W y -21
+KPX X C -38
+KPX X O -36
+KPX X Odieresis -36
+KPX X Q -36
+KPX X a 9
+KPX X e -13
+KPX X hyphen -20
+KPX X o -14
+KPX X u -24
+KPX X y -61
+KPX Y A -41
+KPX Y AE -35
+KPX Y Aacute -41
+KPX Y Acircumflex -41
+KPX Y Adieresis -41
+KPX Y Agrave -41
+KPX Y Aring -41
+KPX Y Atilde -41
+KPX Y C -46
+KPX Y G -47
+KPX Y O -45
+KPX Y Oacute -45
+KPX Y Ocircumflex -45
+KPX Y Odieresis -45
+KPX Y Ograve -45
+KPX Y Oslash -39
+KPX Y Otilde -45
+KPX Y S -24
+KPX Y T 34
+KPX Y a -57
+KPX Y ae -62
+KPX Y colon -54
+KPX Y comma -57
+KPX Y e -69
+KPX Y g -65
+KPX Y guillemotleft -82
+KPX Y guilsinglleft -105
+KPX Y hyphen -45
+KPX Y i -5
+KPX Y o -68
+KPX Y oslash -45
+KPX Y p -51
+KPX Y period -51
+KPX Y semicolon -58
+KPX Y u -49
+KPX Y v -35
+KPX Z v -46
+KPX Z y -49
+KPX a j -23
+KPX a quoteright 0
+KPX a v -18
+KPX a w -19
+KPX a y -22
+KPX aacute v -18
+KPX aacute w -19
+KPX aacute y -22
+KPX adieresis v -18
+KPX adieresis w -19
+KPX adieresis y -22
+KPX ae v -8
+KPX ae w -9
+KPX ae y -12
+KPX agrave v -18
+KPX agrave w -19
+KPX agrave y -22
+KPX aring v -18
+KPX aring w -19
+KPX aring y -22
+KPX b v -18
+KPX b w -19
+KPX b y -22
+KPX c h 9
+KPX c k 7
+KPX comma one -9
+KPX comma quotedblright 14
+KPX comma quoteright 17
+KPX e quoteright 17
+KPX e t 5
+KPX e v -4
+KPX e w -5
+KPX e x -1
+KPX e y -8
+KPX eacute v -4
+KPX eacute w -5
+KPX eacute y -8
+KPX ecircumflex v -4
+KPX ecircumflex w -5
+KPX ecircumflex y -8
+KPX eight four 24
+KPX eight one -4
+KPX eight seven -4
+KPX f a -13
+KPX f aacute -13
+KPX f adieresis -2
+KPX f ae -16
+KPX f aring -13
+KPX f e -14
+KPX f eacute -14
+KPX f f 10
+KPX f i 15
+KPX f j 15
+KPX f l 23
+KPX f o -12
+KPX f oacute -12
+KPX f odieresis -12
+KPX f oe -16
+KPX f oslash -1
+KPX f quoteright 19
+KPX f s 2
+KPX f t 16
+KPX five four 26
+KPX five one 0
+KPX five seven -3
+KPX four four 25
+KPX four one -4
+KPX four seven -12
+KPX g a -4
+KPX g adieresis -4
+KPX g ae -9
+KPX g aring -4
+KPX g e -14
+KPX g eacute -14
+KPX g l 10
+KPX g oacute -12
+KPX g odieresis -12
+KPX g r 13
+KPX guillemotright A -50
+KPX guillemotright AE -63
+KPX guillemotright Aacute -50
+KPX guillemotright Adieresis -50
+KPX guillemotright Aring -50
+KPX guillemotright T -101
+KPX guillemotright V -99
+KPX guillemotright W -54
+KPX guillemotright Y -106
+KPX guilsinglright A -73
+KPX guilsinglright AE -86
+KPX guilsinglright Aacute -73
+KPX guilsinglright Adieresis -73
+KPX guilsinglright Aring -73
+KPX guilsinglright T -124
+KPX guilsinglright V -122
+KPX guilsinglright W -77
+KPX guilsinglright Y -129
+KPX h quoteright -6
+KPX h y -27
+KPX hyphen A -13
+KPX hyphen AE -28
+KPX hyphen Aacute -13
+KPX hyphen Adieresis -13
+KPX hyphen Aring -13
+KPX hyphen T -60
+KPX hyphen V -57
+KPX hyphen W -12
+KPX hyphen Y -70
+KPX i T -15
+KPX i j -30
+KPX k a 7
+KPX k aacute 7
+KPX k adieresis 7
+KPX k ae 3
+KPX k aring 7
+KPX k comma 7
+KPX k e -15
+KPX k eacute -15
+KPX k g 0
+KPX k hyphen -37
+KPX k o -16
+KPX k oacute -16
+KPX k odieresis -16
+KPX k period 11
+KPX k s 13
+KPX k u 4
+KPX k udieresis 4
+KPX l v -20
+KPX l y -19
+KPX m p -23
+KPX m v -24
+KPX m w -25
+KPX m y -26
+KPX n T -58
+KPX n p -22
+KPX n quoteright -6
+KPX n v -24
+KPX n w -25
+KPX n y -27
+KPX nine four 7
+KPX nine one -1
+KPX nine seven 3
+KPX o T -89
+KPX o quoteright 6
+KPX o t -2
+KPX o v -18
+KPX o w -19
+KPX o x -16
+KPX o y -22
+KPX oacute v -18
+KPX oacute w -19
+KPX oacute y -22
+KPX ocircumflex t -2
+KPX odieresis t -2
+KPX odieresis v -18
+KPX odieresis w -19
+KPX odieresis x -16
+KPX odieresis y -22
+KPX ograve v -18
+KPX ograve w -19
+KPX ograve y -22
+KPX one comma -4
+KPX one eight -12
+KPX one five -8
+KPX one four -41
+KPX one nine -11
+KPX one one -13
+KPX one period -1
+KPX one seven -21
+KPX one six -25
+KPX one three 3
+KPX one two 11
+KPX one zero -21
+KPX p t 0
+KPX p y -17
+KPX period one -16
+KPX period quotedblright 0
+KPX period quoteright 1
+KPX q c -18
+KPX q u -13
+KPX quotedblbase A 14
+KPX quotedblbase AE 14
+KPX quotedblbase T -59
+KPX quotedblbase V -94
+KPX quotedblbase W -36
+KPX quotedblbase Y -72
+KPX quotedblleft A -87
+KPX quotedblleft AE -117
+KPX quotedblleft Aacute -87
+KPX quotedblleft Adieresis -87
+KPX quotedblleft Aring -87
+KPX quotedblleft T 20
+KPX quotedblleft V 19
+KPX quotedblleft W 20
+KPX quotedblleft Y 20
+KPX quotedblright A -87
+KPX quotedblright AE -117
+KPX quotedblright Aacute -87
+KPX quotedblright Adieresis -87
+KPX quotedblright Aring -87
+KPX quotedblright T 20
+KPX quotedblright V 19
+KPX quotedblright W 20
+KPX quotedblright Y 20
+KPX quoteleft A -84
+KPX quoteleft AE -114
+KPX quoteleft Aacute -84
+KPX quoteleft Adieresis -84
+KPX quoteleft Aring -84
+KPX quoteleft T 23
+KPX quoteleft V 21
+KPX quoteleft W 23
+KPX quoteleft Y 23
+KPX quoteright A -84
+KPX quoteright AE -114
+KPX quoteright Aacute -84
+KPX quoteright Adieresis -84
+KPX quoteright Aring -84
+KPX quoteright comma -33
+KPX quoteright d -31
+KPX quoteright o -21
+KPX quoteright period -21
+KPX quoteright r -9
+KPX quoteright s -6
+KPX quoteright t -6
+KPX quoteright v 1
+KPX quoteright w 1
+KPX quoteright y 3
+KPX r a -5
+KPX r aacute -5
+KPX r acircumflex -5
+KPX r adieresis -5
+KPX r ae -7
+KPX r agrave -5
+KPX r aring -5
+KPX r c 7
+KPX r ccedilla 7
+KPX r colon 17
+KPX r comma -25
+KPX r d 6
+KPX r e 8
+KPX r eacute 8
+KPX r ecircumflex 8
+KPX r egrave 8
+KPX r f 19
+KPX r g 12
+KPX r h -8
+KPX r hyphen 20
+KPX r i 21
+KPX r j 21
+KPX r k -10
+KPX r l -12
+KPX r m 26
+KPX r n 26
+KPX r o 9
+KPX r oacute 9
+KPX r ocircumflex 9
+KPX r odieresis 9
+KPX r oe 5
+KPX r ograve 9
+KPX r oslash 9
+KPX r p 24
+KPX r period -21
+KPX r q 0
+KPX r quoteright 45
+KPX r r 23
+KPX r s 17
+KPX r semicolon 6
+KPX r t 26
+KPX r u 26
+KPX r v 33
+KPX r w 32
+KPX r x 28
+KPX r y 34
+KPX r z 10
+KPX s quoteright 7
+KPX s t -10
+KPX seven colon -34
+KPX seven comma -80
+KPX seven eight -3
+KPX seven five -2
+KPX seven four -44
+KPX seven one 17
+KPX seven period -70
+KPX seven seven 20
+KPX seven six -31
+KPX seven three 2
+KPX seven two 7
+KPX six four 25
+KPX six one -21
+KPX six seven -9
+KPX t S 8
+KPX t a 12
+KPX t aacute 12
+KPX t adieresis 12
+KPX t ae 9
+KPX t aring 12
+KPX t colon 15
+KPX t e -4
+KPX t eacute -4
+KPX t h 18
+KPX t o -4
+KPX t oacute -4
+KPX t odieresis -4
+KPX t quoteright 22
+KPX t semicolon 4
+KPX three four 19
+KPX three one -14
+KPX three seven -13
+KPX two four 0
+KPX two one -5
+KPX two seven -5
+KPX u quoteright 1
+KPX v a -19
+KPX v aacute -19
+KPX v acircumflex -19
+KPX v adieresis -19
+KPX v ae -20
+KPX v agrave -19
+KPX v aring -19
+KPX v atilde -19
+KPX v c -39
+KPX v colon 10
+KPX v comma -70
+KPX v e -27
+KPX v eacute -27
+KPX v ecircumflex -27
+KPX v egrave -27
+KPX v g -10
+KPX v hyphen -13
+KPX v l -17
+KPX v o -22
+KPX v oacute -22
+KPX v odieresis -22
+KPX v ograve -22
+KPX v oslash -22
+KPX v period -59
+KPX v s -3
+KPX v semicolon -4
+KPX w a -20
+KPX w aacute -20
+KPX w acircumflex -20
+KPX w adieresis -20
+KPX w ae -21
+KPX w agrave -20
+KPX w aring -20
+KPX w atilde -20
+KPX w c -36
+KPX w colon 9
+KPX w comma -57
+KPX w e -28
+KPX w eacute -28
+KPX w ecircumflex -28
+KPX w egrave -28
+KPX w g -11
+KPX w hyphen -8
+KPX w l -18
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -23
+KPX w period -47
+KPX w s -4
+KPX w semicolon -5
+KPX x a 6
+KPX x c -15
+KPX x e -17
+KPX x eacute -17
+KPX x o -17
+KPX x q -19
+KPX y a -27
+KPX y aacute -27
+KPX y acircumflex -27
+KPX y adieresis -27
+KPX y ae -28
+KPX y agrave -27
+KPX y aring -27
+KPX y atilde -27
+KPX y c -37
+KPX y colon 7
+KPX y comma -67
+KPX y e -34
+KPX y eacute -34
+KPX y ecircumflex -34
+KPX y egrave -34
+KPX y g -15
+KPX y hyphen -11
+KPX y l -17
+KPX y o -28
+KPX y oacute -28
+KPX y odieresis -28
+KPX y ograve -28
+KPX y oslash -28
+KPX y period -57
+KPX y s -8
+KPX y semicolon -7
+KPX zero four 20
+KPX zero one 1
+KPX zero seven 6
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplb8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uplb8a.pfb
new file mode 100644
index 00000000000..7f5df43f3df
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplb8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplbi8a.afm b/Master/tlpkg/tlgs/lib/fonts/uplbi8a.afm
new file mode 100644
index 00000000000..360d7d4863d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplbi8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWPalladioL-BoldItal
+FullName URW Palladio L Bold Italic
+FamilyName URW Palladio L
+Weight Bold
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -170 -300 1073 935
+CapHeight 681
+XHeight 452
+Descender -271
+Ascender 726
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 58 -17 322 695 ;
+C 34 ; WX 500 ; N quotedbl ; B 137 467 493 720 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 496 673 ;
+C 36 ; WX 500 ; N dollar ; B 20 -108 477 737 ;
+C 37 ; WX 889 ; N percent ; B 56 -17 790 697 ;
+C 38 ; WX 833 ; N ampersand ; B 74 -17 811 695 ;
+C 39 ; WX 278 ; N quoteright ; B 76 431 302 720 ;
+C 40 ; WX 333 ; N parenleft ; B 58 -129 368 723 ;
+C 41 ; WX 333 ; N parenright ; B -12 -129 298 723 ;
+C 42 ; WX 444 ; N asterisk ; B 84 332 439 695 ;
+C 43 ; WX 606 ; N plus ; B 50 -5 556 501 ;
+C 44 ; WX 250 ; N comma ; B -33 -164 208 147 ;
+C 45 ; WX 389 ; N hyphen ; B 37 198 362 300 ;
+C 46 ; WX 250 ; N period ; B 48 -17 187 135 ;
+C 47 ; WX 315 ; N slash ; B 1 -17 315 720 ;
+C 48 ; WX 500 ; N zero ; B 42 -17 490 683 ;
+C 49 ; WX 500 ; N one ; B 41 -3 434 678 ;
+C 50 ; WX 500 ; N two ; B 1 -3 454 683 ;
+C 51 ; WX 500 ; N three ; B 8 -17 450 683 ;
+C 52 ; WX 500 ; N four ; B 3 -3 487 683 ;
+C 53 ; WX 500 ; N five ; B 14 -17 481 675 ;
+C 54 ; WX 500 ; N six ; B 39 -17 488 683 ;
+C 55 ; WX 500 ; N seven ; B 69 -3 544 674 ;
+C 56 ; WX 500 ; N eight ; B 26 -17 484 683 ;
+C 57 ; WX 500 ; N nine ; B 27 -17 491 683 ;
+C 58 ; WX 250 ; N colon ; B 38 -17 236 452 ;
+C 59 ; WX 250 ; N semicolon ; B -33 -164 247 452 ;
+C 60 ; WX 606 ; N less ; B 49 -20 558 524 ;
+C 61 ; WX 606 ; N equal ; B 51 106 555 390 ;
+C 62 ; WX 606 ; N greater ; B 48 -20 557 524 ;
+C 63 ; WX 444 ; N question ; B 91 -17 450 695 ;
+C 64 ; WX 833 ; N at ; B 82 -12 744 681 ;
+C 65 ; WX 722 ; N A ; B -35 -3 685 683 ;
+C 66 ; WX 667 ; N B ; B 8 -3 629 682 ;
+C 67 ; WX 685 ; N C ; B 69 -17 695 695 ;
+C 68 ; WX 778 ; N D ; B 0 -3 747 682 ;
+C 69 ; WX 611 ; N E ; B 11 -3 606 681 ;
+C 70 ; WX 556 ; N F ; B -6 -3 593 681 ;
+C 71 ; WX 778 ; N G ; B 72 -17 750 695 ;
+C 72 ; WX 778 ; N H ; B -12 -3 826 681 ;
+C 73 ; WX 389 ; N I ; B -1 -3 412 681 ;
+C 74 ; WX 389 ; N J ; B -29 -207 417 681 ;
+C 75 ; WX 722 ; N K ; B -10 -3 746 681 ;
+C 76 ; WX 611 ; N L ; B 26 -3 578 681 ;
+C 77 ; WX 944 ; N M ; B -23 -17 985 681 ;
+C 78 ; WX 778 ; N N ; B -2 -3 829 681 ;
+C 79 ; WX 833 ; N O ; B 76 -17 794 695 ;
+C 80 ; WX 667 ; N P ; B 11 -3 673 681 ;
+C 81 ; WX 833 ; N Q ; B 76 -222 794 695 ;
+C 82 ; WX 722 ; N R ; B 4 -3 697 681 ;
+C 83 ; WX 556 ; N S ; B 50 -17 517 695 ;
+C 84 ; WX 611 ; N T ; B 56 -3 674 681 ;
+C 85 ; WX 778 ; N U ; B 83 -17 825 681 ;
+C 86 ; WX 667 ; N V ; B 67 -3 745 681 ;
+C 87 ; WX 1000 ; N W ; B 67 -3 1073 689 ;
+C 88 ; WX 722 ; N X ; B -9 -3 772 681 ;
+C 89 ; WX 611 ; N Y ; B 54 -3 675 695 ;
+C 90 ; WX 667 ; N Z ; B 1 -3 676 681 ;
+C 91 ; WX 333 ; N bracketleft ; B 45 -102 381 723 ;
+C 92 ; WX 606 ; N backslash ; B 72 0 534 720 ;
+C 93 ; WX 333 ; N bracketright ; B -21 -102 315 723 ;
+C 94 ; WX 606 ; N asciicircum ; B 63 275 543 678 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 65 431 291 720 ;
+C 97 ; WX 556 ; N a ; B 44 -17 519 470 ;
+C 98 ; WX 537 ; N b ; B 44 -17 494 726 ;
+C 99 ; WX 444 ; N c ; B 32 -17 436 469 ;
+C 100 ; WX 556 ; N d ; B 38 -17 550 726 ;
+C 101 ; WX 444 ; N e ; B 28 -17 418 469 ;
+C 102 ; WX 333 ; N f ; B -130 -271 449 726 ;
+C 103 ; WX 500 ; N g ; B -50 -271 529 469 ;
+C 104 ; WX 556 ; N h ; B 22 -17 522 726 ;
+C 105 ; WX 333 ; N i ; B 26 -17 312 695 ;
+C 106 ; WX 333 ; N j ; B -64 -271 323 695 ;
+C 107 ; WX 556 ; N k ; B 34 -17 528 726 ;
+C 108 ; WX 333 ; N l ; B 64 -17 318 726 ;
+C 109 ; WX 833 ; N m ; B 19 -17 803 469 ;
+C 110 ; WX 556 ; N n ; B 17 -17 521 469 ;
+C 111 ; WX 556 ; N o ; B 48 -17 502 469 ;
+C 112 ; WX 556 ; N p ; B -21 -271 516 469 ;
+C 113 ; WX 537 ; N q ; B 32 -271 513 469 ;
+C 114 ; WX 389 ; N r ; B 20 -17 411 469 ;
+C 115 ; WX 444 ; N s ; B 25 -17 406 469 ;
+C 116 ; WX 389 ; N t ; B 42 -17 409 636 ;
+C 117 ; WX 556 ; N u ; B 22 -17 521 469 ;
+C 118 ; WX 556 ; N v ; B 19 -17 513 469 ;
+C 119 ; WX 833 ; N w ; B 27 -17 802 469 ;
+C 120 ; WX 500 ; N x ; B -8 -17 500 469 ;
+C 121 ; WX 556 ; N y ; B 13 -271 541 469 ;
+C 122 ; WX 500 ; N z ; B 31 -17 470 469 ;
+C 123 ; WX 333 ; N braceleft ; B 18 -105 334 720 ;
+C 124 ; WX 606 ; N bar ; B 259 0 347 720 ;
+C 125 ; WX 333 ; N braceright ; B -1 -105 315 720 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 174 555 329 ;
+C 161 ; WX 333 ; N exclamdown ; B 2 -225 259 479 ;
+C 162 ; WX 500 ; N cent ; B 52 -105 456 547 ;
+C 163 ; WX 500 ; N sterling ; B 21 -5 501 683 ;
+C 164 ; WX 167 ; N fraction ; B -170 0 338 683 ;
+C 165 ; WX 500 ; N yen ; B 11 -3 538 695 ;
+C 166 ; WX 500 ; N florin ; B 8 -242 479 690 ;
+C 167 ; WX 556 ; N section ; B 47 -151 497 695 ;
+C 168 ; WX 500 ; N currency ; B 32 96 468 533 ;
+C 169 ; WX 250 ; N quotesingle ; B 127 467 293 720 ;
+C 170 ; WX 500 ; N quotedblleft ; B 65 431 511 720 ;
+C 171 ; WX 500 ; N guillemotleft ; B 35 43 458 446 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 60 43 292 446 ;
+C 173 ; WX 333 ; N guilsinglright ; B 35 40 267 443 ;
+C 174 ; WX 611 ; N fi ; B -130 -271 588 726 ;
+C 175 ; WX 611 ; N fl ; B -130 -271 631 726 ;
+C 177 ; WX 500 ; N endash ; B -12 214 512 282 ;
+C 178 ; WX 556 ; N dagger ; B 67 -3 499 685 ;
+C 179 ; WX 556 ; N daggerdbl ; B 33 -153 537 693 ;
+C 180 ; WX 250 ; N periodcentered ; B 67 172 206 324 ;
+C 182 ; WX 556 ; N paragraph ; B 14 -204 629 681 ;
+C 183 ; WX 606 ; N bullet ; B 131 172 475 516 ;
+C 184 ; WX 250 ; N quotesinglbase ; B -3 -144 220 145 ;
+C 185 ; WX 500 ; N quotedblbase ; B -18 -144 424 145 ;
+C 186 ; WX 500 ; N quotedblright ; B 73 431 519 720 ;
+C 187 ; WX 500 ; N guillemotright ; B 35 40 458 443 ;
+C 188 ; WX 1000 ; N ellipsis ; B 91 -17 896 135 ;
+C 189 ; WX 1000 ; N perthousand ; B 65 -17 912 691 ;
+C 191 ; WX 444 ; N questiondown ; B -12 -226 347 479 ;
+C 193 ; WX 333 ; N grave ; B 110 518 322 699 ;
+C 194 ; WX 333 ; N acute ; B 153 518 392 699 ;
+C 195 ; WX 333 ; N circumflex ; B 88 510 415 684 ;
+C 196 ; WX 333 ; N tilde ; B 82 535 441 654 ;
+C 197 ; WX 333 ; N macron ; B 76 538 418 608 ;
+C 198 ; WX 333 ; N breve ; B 96 519 412 681 ;
+C 199 ; WX 333 ; N dotaccent ; B 202 537 325 668 ;
+C 200 ; WX 333 ; N dieresis ; B 90 537 426 668 ;
+C 202 ; WX 556 ; N ring ; B 277 514 477 714 ;
+C 203 ; WX 333 ; N cedilla ; B 12 -218 248 5 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -28 518 409 699 ;
+C 206 ; WX 333 ; N ogonek ; B 32 -206 238 -17 ;
+C 207 ; WX 333 ; N caron ; B 113 510 445 684 ;
+C 208 ; WX 1000 ; N emdash ; B -12 214 1012 282 ;
+C 225 ; WX 944 ; N AE ; B -29 -4 927 681 ;
+C 227 ; WX 333 ; N ordfeminine ; B 47 391 355 684 ;
+C 232 ; WX 611 ; N Lslash ; B 6 -3 578 681 ;
+C 233 ; WX 833 ; N Oslash ; B 57 -54 797 730 ;
+C 234 ; WX 944 ; N OE ; B 39 -17 961 695 ;
+C 235 ; WX 333 ; N ordmasculine ; B 51 391 346 683 ;
+C 241 ; WX 738 ; N ae ; B 44 -17 711 469 ;
+C 245 ; WX 333 ; N dotlessi ; B 26 -17 293 469 ;
+C 248 ; WX 333 ; N lslash ; B 13 -17 365 726 ;
+C 249 ; WX 556 ; N oslash ; B 14 -50 522 506 ;
+C 250 ; WX 778 ; N oe ; B 48 -17 755 469 ;
+C 251 ; WX 556 ; N germandbls ; B -131 -271 549 726 ;
+C -1 ; WX 778 ; N Udieresis ; B 83 -17 825 880 ;
+C -1 ; WX 778 ; N Uacute ; B 83 -17 825 911 ;
+C -1 ; WX 556 ; N Scedilla ; B 50 -218 517 695 ;
+C -1 ; WX 611 ; N Tcaron ; B 56 -3 674 896 ;
+C -1 ; WX 556 ; N Scaron ; B 50 -17 562 896 ;
+C -1 ; WX 722 ; N Rcaron ; B 4 -3 697 896 ;
+C -1 ; WX 722 ; N Racute ; B 4 -3 697 911 ;
+C -1 ; WX 556 ; N Sacute ; B 50 -17 544 911 ;
+C -1 ; WX 833 ; N Otilde ; B 76 -17 794 866 ;
+C -1 ; WX 556 ; N ucircumflex ; B 22 -17 521 684 ;
+C -1 ; WX 833 ; N Ohungarumlaut ; B 76 -17 794 911 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 83 -17 825 911 ;
+C -1 ; WX 611 ; N Yacute ; B 54 -3 675 911 ;
+C -1 ; WX 778 ; N Eth ; B 0 -3 747 682 ;
+C -1 ; WX 778 ; N Dcroat ; B 0 -3 747 682 ;
+C -1 ; WX 667 ; N Zacute ; B 1 -3 676 911 ;
+C -1 ; WX 778 ; N Uring ; B 83 -17 825 926 ;
+C -1 ; WX 500 ; N gbreve ; B -50 -271 529 681 ;
+C -1 ; WX 444 ; N eogonek ; B 28 -189 418 469 ;
+C -1 ; WX 444 ; N edotaccent ; B 28 -17 418 668 ;
+C -1 ; WX 444 ; N ecaron ; B 28 -17 501 684 ;
+C -1 ; WX 778 ; N Ugrave ; B 83 -17 825 911 ;
+C -1 ; WX 667 ; N Thorn ; B 11 -3 644 681 ;
+C -1 ; WX 444 ; N eacute ; B 28 -17 448 699 ;
+C -1 ; WX 444 ; N edieresis ; B 28 -17 482 668 ;
+C -1 ; WX 667 ; N dcaron ; B 38 -17 727 726 ;
+C -1 ; WX 444 ; N ccedilla ; B 32 -218 436 469 ;
+C -1 ; WX 444 ; N ccaron ; B 32 -17 504 684 ;
+C -1 ; WX 444 ; N cacute ; B 32 -17 468 699 ;
+C -1 ; WX 556 ; N aogonek ; B 44 -189 519 470 ;
+C -1 ; WX 556 ; N aring ; B 44 -17 519 714 ;
+C -1 ; WX 556 ; N atilde ; B 44 -17 553 654 ;
+C -1 ; WX 556 ; N abreve ; B 44 -17 524 681 ;
+C -1 ; WX 444 ; N egrave ; B 28 -17 418 699 ;
+C -1 ; WX 556 ; N agrave ; B 44 -17 519 699 ;
+C -1 ; WX 556 ; N aacute ; B 44 -17 519 699 ;
+C -1 ; WX 556 ; N adieresis ; B 44 -17 538 668 ;
+C -1 ; WX 778 ; N Uogonek ; B 83 -189 825 681 ;
+C -1 ; WX 556 ; N ugrave ; B 22 -17 521 699 ;
+C -1 ; WX 556 ; N uacute ; B 22 -17 521 699 ;
+C -1 ; WX 556 ; N udieresis ; B 22 -17 538 668 ;
+C -1 ; WX 389 ; N tcaron ; B 42 -17 502 720 ;
+C -1 ; WX 444 ; N scommaaccent ; B 25 -300 406 469 ;
+C -1 ; WX 667 ; N Zcaron ; B 1 -3 676 896 ;
+C -1 ; WX 444 ; N ecircumflex ; B 28 -17 471 684 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 83 -17 825 896 ;
+C -1 ; WX 556 ; N acircumflex ; B 44 -17 527 684 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 1 -3 676 880 ;
+C -1 ; WX 444 ; N scaron ; B 25 -17 489 684 ;
+C -1 ; WX 722 ; N Amacron ; B -35 -3 685 820 ;
+C -1 ; WX 444 ; N sacute ; B 25 -17 448 699 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 56 -300 674 681 ;
+C -1 ; WX 611 ; N Ydieresis ; B 54 -3 675 880 ;
+C -1 ; WX 556 ; N thorn ; B -21 -271 516 726 ;
+C -1 ; WX 611 ; N Emacron ; B 11 -3 606 820 ;
+C -1 ; WX 833 ; N Ograve ; B 76 -17 794 911 ;
+C -1 ; WX 833 ; N Oacute ; B 76 -17 794 911 ;
+C -1 ; WX 833 ; N Odieresis ; B 76 -17 794 880 ;
+C -1 ; WX 778 ; N Ntilde ; B -2 -3 829 866 ;
+C -1 ; WX 778 ; N Ncaron ; B -2 -3 829 896 ;
+C -1 ; WX 778 ; N Nacute ; B -2 -3 829 911 ;
+C -1 ; WX 611 ; N Lcaron ; B 26 -3 621 720 ;
+C -1 ; WX 611 ; N Lacute ; B 26 -3 578 911 ;
+C -1 ; WX 389 ; N Idotaccent ; B -1 -3 412 880 ;
+C -1 ; WX 389 ; N racute ; B 20 -17 460 699 ;
+C -1 ; WX 389 ; N Icircumflex ; B -1 -3 443 896 ;
+C -1 ; WX 556 ; N ohungarumlaut ; B 48 -17 608 699 ;
+C -1 ; WX 556 ; N otilde ; B 48 -17 553 654 ;
+C -1 ; WX 500 ; N Euro ; B 46 -17 577 695 ;
+C -1 ; WX 556 ; N ocircumflex ; B 48 -17 515 684 ;
+C -1 ; WX 300 ; N onesuperior ; B 41 271 298 680 ;
+C -1 ; WX 300 ; N twosuperior ; B 26 271 321 683 ;
+C -1 ; WX 300 ; N threesuperior ; B 23 263 310 683 ;
+C -1 ; WX 389 ; N Igrave ; B -1 -3 412 911 ;
+C -1 ; WX 389 ; N Iacute ; B -1 -3 420 911 ;
+C -1 ; WX 389 ; N Imacron ; B -1 -3 446 820 ;
+C -1 ; WX 389 ; N Iogonek ; B -1 -189 412 681 ;
+C -1 ; WX 389 ; N Idieresis ; B -1 -3 454 880 ;
+C -1 ; WX 778 ; N Gbreve ; B 72 -17 750 892 ;
+C -1 ; WX 778 ; N Umacron ; B 83 -17 825 820 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B -10 -300 746 681 ;
+C -1 ; WX 556 ; N ograve ; B 48 -17 502 699 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 50 -300 517 695 ;
+C -1 ; WX 611 ; N Eogonek ; B 11 -189 606 681 ;
+C -1 ; WX 556 ; N oacute ; B 48 -17 504 699 ;
+C -1 ; WX 611 ; N Edotaccent ; B 11 -3 606 880 ;
+C -1 ; WX 333 ; N iogonek ; B 26 -189 312 695 ;
+C -1 ; WX 500 ; N gcommaaccent ; B -50 -271 529 760 ;
+C -1 ; WX 556 ; N odieresis ; B 48 -17 538 668 ;
+C -1 ; WX 556 ; N ntilde ; B 17 -17 553 654 ;
+C -1 ; WX 556 ; N ncaron ; B 17 -17 557 684 ;
+C -1 ; WX 611 ; N Ecaron ; B 11 -3 606 896 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 11 -3 606 896 ;
+C -1 ; WX 444 ; N scedilla ; B 25 -218 406 469 ;
+C -1 ; WX 389 ; N rcaron ; B 20 -17 473 684 ;
+C -1 ; WX 611 ; N Egrave ; B 11 -3 606 911 ;
+C -1 ; WX 611 ; N Eacute ; B 11 -3 606 911 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 72 -300 750 695 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 4 -300 697 681 ;
+C -1 ; WX 611 ; N Edieresis ; B 11 -3 606 880 ;
+C -1 ; WX 556 ; N nacute ; B 17 -17 521 699 ;
+C -1 ; WX 556 ; N uogonek ; B 22 -189 521 469 ;
+C -1 ; WX 556 ; N umacron ; B 22 -17 530 608 ;
+C -1 ; WX 778 ; N Dcaron ; B 0 -3 747 896 ;
+C -1 ; WX 429 ; N lcaron ; B 64 -17 488 726 ;
+C -1 ; WX 685 ; N Ccaron ; B 69 -17 711 896 ;
+C -1 ; WX 685 ; N Cacute ; B 69 -17 695 911 ;
+C -1 ; WX 685 ; N Ccedilla ; B 69 -218 695 695 ;
+C -1 ; WX 400 ; N degree ; B 50 383 350 683 ;
+C -1 ; WX 722 ; N Aogonek ; B -35 -189 745 683 ;
+C -1 ; WX 606 ; N minus ; B 51 204 555 292 ;
+C -1 ; WX 606 ; N multiply ; B 72 17 534 479 ;
+C -1 ; WX 606 ; N divide ; B 50 -5 556 501 ;
+C -1 ; WX 722 ; N Aring ; B -35 -3 685 935 ;
+C -1 ; WX 1000 ; N trademark ; B 38 274 961 678 ;
+C -1 ; WX 389 ; N rcommaaccent ; B -14 -300 411 469 ;
+C -1 ; WX 333 ; N lacute ; B 64 -17 432 911 ;
+C -1 ; WX 556 ; N omacron ; B 48 -17 530 608 ;
+C -1 ; WX 722 ; N Atilde ; B -35 -3 685 866 ;
+C -1 ; WX 333 ; N icircumflex ; B 26 -17 403 684 ;
+C -1 ; WX 333 ; N igrave ; B 26 -17 322 699 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 17 -300 521 469 ;
+C -1 ; WX 333 ; N lcommaaccent ; B -1 -300 318 726 ;
+C -1 ; WX 606 ; N plusminus ; B 50 0 556 568 ;
+C -1 ; WX 750 ; N onehalf ; B 14 -2 736 683 ;
+C -1 ; WX 750 ; N onequarter ; B 18 -2 732 683 ;
+C -1 ; WX 750 ; N threequarters ; B 18 -2 732 683 ;
+C -1 ; WX 333 ; N iacute ; B 26 -17 392 699 ;
+C -1 ; WX 722 ; N Abreve ; B -35 -3 685 892 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 34 -300 528 726 ;
+C -1 ; WX 833 ; N Omacron ; B 76 -17 794 820 ;
+C -1 ; WX 333 ; N imacron ; B 26 -17 418 608 ;
+C -1 ; WX 444 ; N emacron ; B 28 -17 474 608 ;
+C -1 ; WX 556 ; N amacron ; B 44 -17 530 608 ;
+C -1 ; WX 389 ; N tcommaaccent ; B 27 -300 409 636 ;
+C -1 ; WX 556 ; N ydieresis ; B 13 -271 541 668 ;
+C -1 ; WX 500 ; N zdotaccent ; B 31 -17 470 668 ;
+C -1 ; WX 500 ; N zcaron ; B 31 -17 517 684 ;
+C -1 ; WX 500 ; N zacute ; B 31 -17 476 699 ;
+C -1 ; WX 556 ; N yacute ; B 13 -271 541 699 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 22 -17 600 699 ;
+C -1 ; WX 556 ; N eth ; B 48 -17 546 726 ;
+C -1 ; WX 556 ; N uring ; B 22 -17 521 714 ;
+C -1 ; WX 833 ; N Ocircumflex ; B 76 -17 794 896 ;
+C -1 ; WX 333 ; N commaaccent ; B 39 -300 242 -40 ;
+C -1 ; WX 747 ; N copyright ; B 26 -17 720 695 ;
+C -1 ; WX 747 ; N registered ; B 26 -17 720 695 ;
+C -1 ; WX 722 ; N Acircumflex ; B -35 -3 685 896 ;
+C -1 ; WX 333 ; N idieresis ; B 26 -17 426 688 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -32 555 556 ;
+C -1 ; WX 549 ; N radical ; B -15 -96 536 935 ;
+C -1 ; WX 722 ; N Agrave ; B -35 -3 685 911 ;
+C -1 ; WX 722 ; N Aacute ; B -35 -3 685 911 ;
+C -1 ; WX 606 ; N lessequal ; B 49 0 558 663 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 557 663 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 107 555 390 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 23 -13 466 750 ;
+C -1 ; WX 778 ; N Ncommaaccent ; B -2 -300 829 681 ;
+C -1 ; WX 556 ; N dcroat ; B 38 -17 596 726 ;
+C -1 ; WX 606 ; N brokenbar ; B 259 0 347 720 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 26 -300 578 681 ;
+C -1 ; WX 722 ; N Adieresis ; B -35 -3 685 880 ;
+C -1 ; WX 556 ; N mu ; B -15 -232 521 469 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -30
+KPX A Ccedilla -29
+KPX A G -31
+KPX A O -37
+KPX A Odieresis -37
+KPX A Q -37
+KPX A T -12
+KPX A U -24
+KPX A Uacute -24
+KPX A Ucircumflex -24
+KPX A Udieresis -24
+KPX A Ugrave -24
+KPX A V -72
+KPX A W -63
+KPX A Y -30
+KPX A a 13
+KPX A b 10
+KPX A c 12
+KPX A ccedilla 12
+KPX A comma 19
+KPX A d 15
+KPX A e 17
+KPX A g -23
+KPX A guillemotleft -27
+KPX A guilsinglleft -40
+KPX A hyphen 0
+KPX A o 3
+KPX A period 17
+KPX A q 19
+KPX A quotedblright -47
+KPX A quoteright -49
+KPX A t -3
+KPX A u 9
+KPX A v -14
+KPX A w -15
+KPX A y -14
+KPX Aacute C -30
+KPX Aacute G -31
+KPX Aacute O -37
+KPX Aacute Q -37
+KPX Aacute T -12
+KPX Aacute U -24
+KPX Aacute V -72
+KPX Aacute W -63
+KPX Aacute Y -30
+KPX Aacute a 13
+KPX Aacute b 10
+KPX Aacute c 12
+KPX Aacute comma 19
+KPX Aacute d 15
+KPX Aacute e 17
+KPX Aacute g -23
+KPX Aacute guillemotleft -27
+KPX Aacute guilsinglleft -40
+KPX Aacute hyphen 0
+KPX Aacute o 3
+KPX Aacute period 17
+KPX Aacute q 19
+KPX Aacute quoteright -49
+KPX Aacute t -3
+KPX Aacute u 9
+KPX Aacute v -14
+KPX Aacute w -15
+KPX Aacute y -14
+KPX Acircumflex C -30
+KPX Acircumflex G -31
+KPX Acircumflex O -37
+KPX Acircumflex Q -37
+KPX Acircumflex T -12
+KPX Acircumflex U -24
+KPX Acircumflex V -72
+KPX Acircumflex W -62
+KPX Acircumflex Y -30
+KPX Acircumflex comma 19
+KPX Acircumflex period 17
+KPX Adieresis C -30
+KPX Adieresis G -31
+KPX Adieresis O -37
+KPX Adieresis Q -37
+KPX Adieresis T -12
+KPX Adieresis U -24
+KPX Adieresis V -72
+KPX Adieresis W -63
+KPX Adieresis Y -30
+KPX Adieresis a 13
+KPX Adieresis b 10
+KPX Adieresis c 12
+KPX Adieresis comma 19
+KPX Adieresis d 15
+KPX Adieresis g -23
+KPX Adieresis guillemotleft -27
+KPX Adieresis guilsinglleft -40
+KPX Adieresis hyphen 0
+KPX Adieresis o 3
+KPX Adieresis period 17
+KPX Adieresis q 19
+KPX Adieresis quotedblright -47
+KPX Adieresis quoteright -49
+KPX Adieresis t -3
+KPX Adieresis u 9
+KPX Adieresis v -14
+KPX Adieresis w -15
+KPX Adieresis y -14
+KPX Agrave C -30
+KPX Agrave G -31
+KPX Agrave O -37
+KPX Agrave Q -37
+KPX Agrave T -12
+KPX Agrave U -24
+KPX Agrave V -72
+KPX Agrave W -63
+KPX Agrave Y -30
+KPX Agrave comma 19
+KPX Agrave period 17
+KPX Aring C -30
+KPX Aring G -31
+KPX Aring O -37
+KPX Aring Q -37
+KPX Aring T -12
+KPX Aring U -24
+KPX Aring V -72
+KPX Aring W -63
+KPX Aring Y -30
+KPX Aring a 13
+KPX Aring b 10
+KPX Aring c 12
+KPX Aring comma 19
+KPX Aring d 15
+KPX Aring e 17
+KPX Aring g -23
+KPX Aring guillemotleft -27
+KPX Aring guilsinglleft -40
+KPX Aring hyphen 0
+KPX Aring o 3
+KPX Aring period 17
+KPX Aring q 19
+KPX Aring quotedblright -47
+KPX Aring quoteright -49
+KPX Aring t -3
+KPX Aring u 9
+KPX Aring v -14
+KPX Aring w -15
+KPX Aring y -14
+KPX Atilde C -30
+KPX Atilde G -31
+KPX Atilde O -37
+KPX Atilde Q -37
+KPX Atilde T -12
+KPX Atilde U -24
+KPX Atilde V -72
+KPX Atilde W -63
+KPX Atilde Y -30
+KPX Atilde comma 19
+KPX Atilde period 17
+KPX B A -6
+KPX B AE -14
+KPX B Aacute -6
+KPX B Acircumflex -6
+KPX B Adieresis -6
+KPX B Aring -6
+KPX B Atilde -6
+KPX B O -5
+KPX B OE 15
+KPX B Oacute -5
+KPX B Ocircumflex -5
+KPX B Odieresis -5
+KPX B Ograve -5
+KPX B Oslash -2
+KPX B V -12
+KPX B W -12
+KPX B Y 8
+KPX C A 20
+KPX C AE 12
+KPX C Aacute 20
+KPX C Adieresis 20
+KPX C Aring 20
+KPX C H 18
+KPX C K 18
+KPX C O -9
+KPX C Oacute -9
+KPX C Odieresis -9
+KPX Ccedilla A 20
+KPX D A -41
+KPX D Aacute -41
+KPX D Acircumflex -41
+KPX D Adieresis -41
+KPX D Agrave -41
+KPX D Aring -41
+KPX D Atilde -41
+KPX D J -15
+KPX D T 8
+KPX D V -33
+KPX D W -27
+KPX D X -41
+KPX D Y -7
+KPX F A -45
+KPX F Aacute -45
+KPX F Acircumflex -45
+KPX F Adieresis -45
+KPX F Agrave -45
+KPX F Aring -45
+KPX F Atilde -45
+KPX F J 23
+KPX F O -9
+KPX F Odieresis -9
+KPX F a -29
+KPX F aacute -29
+KPX F adieresis -29
+KPX F ae -36
+KPX F aring -29
+KPX F comma -57
+KPX F e -15
+KPX F eacute -15
+KPX F hyphen 7
+KPX F i 11
+KPX F j 6
+KPX F o -20
+KPX F oacute -20
+KPX F odieresis -20
+KPX F oe -18
+KPX F oslash -20
+KPX F period -56
+KPX F r 13
+KPX F u 12
+KPX G A 8
+KPX G AE 3
+KPX G Aacute 8
+KPX G Acircumflex 8
+KPX G Adieresis 8
+KPX G Agrave 8
+KPX G Aring 8
+KPX G Atilde 8
+KPX G T -8
+KPX G V -4
+KPX G W -4
+KPX G Y -1
+KPX J A -10
+KPX J AE -14
+KPX J Adieresis -10
+KPX J Aring -10
+KPX K C -33
+KPX K G -34
+KPX K O -40
+KPX K OE -19
+KPX K Oacute -40
+KPX K Odieresis -40
+KPX K S 13
+KPX K T 30
+KPX K a 13
+KPX K adieresis 13
+KPX K ae 10
+KPX K aring 13
+KPX K e 15
+KPX K hyphen -46
+KPX K o 0
+KPX K oacute 0
+KPX K odieresis 0
+KPX K u 9
+KPX K udieresis 9
+KPX K y -15
+KPX L A 42
+KPX L AE 39
+KPX L Aacute 42
+KPX L Adieresis 42
+KPX L Aring 42
+KPX L C 3
+KPX L Ccedilla 3
+KPX L G 2
+KPX L O -1
+KPX L Oacute -1
+KPX L Ocircumflex -1
+KPX L Odieresis -1
+KPX L Ograve -1
+KPX L Otilde -1
+KPX L S 7
+KPX L T -26
+KPX L U -6
+KPX L Udieresis -6
+KPX L V -69
+KPX L W -54
+KPX L Y -43
+KPX L hyphen 35
+KPX L quotedblright -74
+KPX L quoteright -75
+KPX L u 0
+KPX L udieresis 0
+KPX L y -10
+KPX N A -3
+KPX N AE -6
+KPX N Aacute -3
+KPX N Adieresis -3
+KPX N Aring -3
+KPX N C -8
+KPX N Ccedilla -8
+KPX N G -10
+KPX N O -9
+KPX N Oacute -9
+KPX N Odieresis -9
+KPX N a -17
+KPX N aacute -19
+KPX N adieresis -19
+KPX N ae -22
+KPX N aring -19
+KPX N comma -4
+KPX N e -7
+KPX N eacute -8
+KPX N o -13
+KPX N oacute -15
+KPX N odieresis -15
+KPX N oslash -15
+KPX N period -3
+KPX N u -2
+KPX N udieresis -2
+KPX O A -39
+KPX O AE -46
+KPX O Aacute -39
+KPX O Adieresis -39
+KPX O Aring -39
+KPX O T 4
+KPX O V -38
+KPX O W -29
+KPX O X -45
+KPX O Y -12
+KPX Oacute A -39
+KPX Oacute T 4
+KPX Oacute V -38
+KPX Oacute W -29
+KPX Oacute Y -12
+KPX Ocircumflex T 4
+KPX Ocircumflex V -38
+KPX Ocircumflex Y -12
+KPX Odieresis A -39
+KPX Odieresis T 4
+KPX Odieresis V -38
+KPX Odieresis W -29
+KPX Odieresis X -45
+KPX Odieresis Y -12
+KPX Ograve T 4
+KPX Ograve V -38
+KPX Ograve Y -12
+KPX Oslash A -44
+KPX Otilde T 4
+KPX Otilde V -38
+KPX Otilde Y -12
+KPX P A -68
+KPX P AE -77
+KPX P Aacute -68
+KPX P Adieresis -68
+KPX P Aring -68
+KPX P J -10
+KPX P a -38
+KPX P aacute -38
+KPX P adieresis -38
+KPX P ae -10
+KPX P aring -38
+KPX P comma -85
+KPX P e -24
+KPX P eacute -24
+KPX P hyphen -13
+KPX P o -26
+KPX P oacute -26
+KPX P odieresis -26
+KPX P oe -24
+KPX P oslash -27
+KPX P period -84
+KPX R C -25
+KPX R Ccedilla -25
+KPX R G -27
+KPX R O -26
+KPX R OE -5
+KPX R Oacute -26
+KPX R Odieresis -26
+KPX R T -2
+KPX R U -21
+KPX R Udieresis -21
+KPX R V -24
+KPX R W -24
+KPX R Y -4
+KPX R a 18
+KPX R aacute 18
+KPX R adieresis 18
+KPX R ae 15
+KPX R aring 18
+KPX R e 21
+KPX R eacute 21
+KPX R hyphen -23
+KPX R o 6
+KPX R oacute 6
+KPX R odieresis 6
+KPX R oe 6
+KPX R u 15
+KPX R uacute 15
+KPX R udieresis 15
+KPX R y -9
+KPX S A -1
+KPX S AE -9
+KPX S Aacute -1
+KPX S Adieresis -1
+KPX S Aring -1
+KPX S T 0
+KPX S V 4
+KPX S W 4
+KPX S Y 8
+KPX S t -13
+KPX T A -16
+KPX T AE -19
+KPX T Aacute -16
+KPX T Acircumflex -16
+KPX T Adieresis -16
+KPX T Agrave -16
+KPX T Aring -16
+KPX T Atilde -16
+KPX T C 0
+KPX T G -1
+KPX T J 36
+KPX T O 3
+KPX T OE 26
+KPX T Oacute 3
+KPX T Ocircumflex 3
+KPX T Odieresis 3
+KPX T Ograve 3
+KPX T Oslash 7
+KPX T Otilde 3
+KPX T S 18
+KPX T V 55
+KPX T W 53
+KPX T Y 57
+KPX T a -57
+KPX T ae -59
+KPX T c -58
+KPX T colon -51
+KPX T comma -53
+KPX T e -53
+KPX T g -81
+KPX T guillemotleft -77
+KPX T guilsinglleft -89
+KPX T hyphen -48
+KPX T i -12
+KPX T j -17
+KPX T o -67
+KPX T oslash -61
+KPX T period -56
+KPX T r -60
+KPX T s -49
+KPX T semicolon -53
+KPX T u -61
+KPX T v -69
+KPX T w -72
+KPX T y -64
+KPX U A 47
+KPX U AE 43
+KPX U Aacute 47
+KPX U Acircumflex 47
+KPX U Adieresis 47
+KPX U Aring 47
+KPX U Atilde 47
+KPX U comma 11
+KPX U m 5
+KPX U n 11
+KPX U p 4
+KPX U period 10
+KPX U r 4
+KPX Uacute A 47
+KPX Uacute comma 11
+KPX Uacute m 5
+KPX Uacute n 11
+KPX Uacute p 4
+KPX Uacute period 10
+KPX Uacute r 4
+KPX Ucircumflex A 47
+KPX Udieresis A 47
+KPX Udieresis b 51
+KPX Udieresis comma 11
+KPX Udieresis m 5
+KPX Udieresis n 11
+KPX Udieresis p 4
+KPX Udieresis period 10
+KPX Udieresis r 4
+KPX Ugrave A 47
+KPX V A -73
+KPX V AE -59
+KPX V Aacute -73
+KPX V Acircumflex -73
+KPX V Adieresis -73
+KPX V Agrave -73
+KPX V Aring -73
+KPX V Atilde -73
+KPX V C -33
+KPX V G -34
+KPX V O -33
+KPX V Oacute -33
+KPX V Ocircumflex -33
+KPX V Odieresis -33
+KPX V Ograve -33
+KPX V Oslash -28
+KPX V Otilde -33
+KPX V S -4
+KPX V T 57
+KPX V a -62
+KPX V ae -52
+KPX V colon -46
+KPX V comma -70
+KPX V e -51
+KPX V g -48
+KPX V guillemotleft -53
+KPX V guilsinglleft -66
+KPX V hyphen -24
+KPX V i -3
+KPX V o -58
+KPX V oslash -58
+KPX V period -69
+KPX V r -22
+KPX V semicolon -52
+KPX V u -22
+KPX V y -18
+KPX W A -42
+KPX W AE -46
+KPX W Aacute -42
+KPX W Acircumflex -42
+KPX W Adieresis -42
+KPX W Agrave -42
+KPX W Aring -42
+KPX W Atilde -42
+KPX W C -16
+KPX W G -18
+KPX W O -16
+KPX W Oacute -16
+KPX W Ocircumflex -16
+KPX W Odieresis -16
+KPX W Ograve -16
+KPX W Oslash -12
+KPX W Otilde -16
+KPX W S -7
+KPX W T 53
+KPX W a -37
+KPX W ae -41
+KPX W colon -24
+KPX W comma -35
+KPX W e -26
+KPX W g -32
+KPX W guillemotleft -29
+KPX W guilsinglleft -42
+KPX W hyphen 0
+KPX W i -7
+KPX W o -32
+KPX W oslash -33
+KPX W period -34
+KPX W r -6
+KPX W semicolon -30
+KPX W u -7
+KPX W y -2
+KPX X C -28
+KPX X O -35
+KPX X Odieresis -35
+KPX X Q -35
+KPX X a 15
+KPX X e 19
+KPX X hyphen -30
+KPX X o 5
+KPX X u 11
+KPX X y -12
+KPX Y A 0
+KPX Y AE -4
+KPX Y Aacute 0
+KPX Y Acircumflex 0
+KPX Y Adieresis 0
+KPX Y Agrave 0
+KPX Y Aring 0
+KPX Y Atilde 0
+KPX Y C -23
+KPX Y G -26
+KPX Y O -16
+KPX Y Oacute -16
+KPX Y Ocircumflex -16
+KPX Y Odieresis -16
+KPX Y Ograve -16
+KPX Y Oslash -11
+KPX Y Otilde -16
+KPX Y S 11
+KPX Y T 52
+KPX Y a -42
+KPX Y ae -43
+KPX Y colon -35
+KPX Y comma -37
+KPX Y e -38
+KPX Y g -57
+KPX Y guillemotleft -55
+KPX Y guilsinglleft -68
+KPX Y hyphen -30
+KPX Y i -10
+KPX Y o -52
+KPX Y oslash -45
+KPX Y p -34
+KPX Y period -40
+KPX Y semicolon -37
+KPX Y u -37
+KPX Y v -25
+KPX Z v 0
+KPX Z y -6
+KPX a j -8
+KPX a quoteright 9
+KPX a v -2
+KPX a w -5
+KPX a y 4
+KPX aacute v -2
+KPX aacute w -5
+KPX aacute y 4
+KPX adieresis v -2
+KPX adieresis w -6
+KPX adieresis y 4
+KPX ae v 23
+KPX ae w 19
+KPX ae y 30
+KPX agrave v -2
+KPX agrave w -5
+KPX agrave y 4
+KPX aring v -2
+KPX aring w -5
+KPX aring y 4
+KPX b v 19
+KPX b w 15
+KPX b y 22
+KPX c h 4
+KPX c k 0
+KPX comma one -3
+KPX comma quotedblright 26
+KPX comma quoteright 25
+KPX e quoteright 27
+KPX e t 16
+KPX e v 24
+KPX e w 20
+KPX e x 18
+KPX e y 30
+KPX eacute v 24
+KPX eacute w 20
+KPX eacute y 30
+KPX ecircumflex v 24
+KPX ecircumflex w 20
+KPX ecircumflex y 30
+KPX eight four 32
+KPX eight one 10
+KPX eight seven 12
+KPX f a -23
+KPX f aacute -23
+KPX f adieresis -4
+KPX f ae 10
+KPX f aring -23
+KPX f e -7
+KPX f eacute -7
+KPX f f 50
+KPX f i 20
+KPX f j 16
+KPX f l 50
+KPX f o -7
+KPX f oacute -7
+KPX f odieresis -4
+KPX f oe -8
+KPX f oslash -7
+KPX f quoteright 37
+KPX f s 10
+KPX f t 46
+KPX five four 31
+KPX five one -14
+KPX five seven 2
+KPX four four 43
+KPX four one 15
+KPX four seven 2
+KPX g a -25
+KPX g adieresis -25
+KPX g ae 5
+KPX g aring -25
+KPX g e -12
+KPX g eacute -12
+KPX g l -6
+KPX g oacute -12
+KPX g odieresis -12
+KPX g r 24
+KPX guillemotright A -33
+KPX guillemotright AE -42
+KPX guillemotright Aacute -33
+KPX guillemotright Adieresis -33
+KPX guillemotright Aring -33
+KPX guillemotright T -76
+KPX guillemotright V -63
+KPX guillemotright W -50
+KPX guillemotright Y -81
+KPX guilsinglright A -45
+KPX guilsinglright AE -54
+KPX guilsinglright Aacute -45
+KPX guilsinglright Adieresis -45
+KPX guilsinglright Aring -45
+KPX guilsinglright T -88
+KPX guilsinglright V -75
+KPX guilsinglright W -62
+KPX guilsinglright Y -93
+KPX h quoteright 12
+KPX h y 12
+KPX hyphen A 2
+KPX hyphen AE -8
+KPX hyphen Aacute 2
+KPX hyphen Adieresis 2
+KPX hyphen Aring 2
+KPX hyphen T -40
+KPX hyphen V -25
+KPX hyphen W -13
+KPX hyphen Y -50
+KPX i T 7
+KPX i j -7
+KPX k a 10
+KPX k aacute 10
+KPX k adieresis 10
+KPX k ae 10
+KPX k aring 10
+KPX k comma 7
+KPX k e 17
+KPX k eacute 17
+KPX k g -19
+KPX k hyphen -47
+KPX k o 6
+KPX k oacute 6
+KPX k odieresis 6
+KPX k period 10
+KPX k s 13
+KPX k u 4
+KPX k udieresis 4
+KPX l v -10
+KPX l y -3
+KPX m p 9
+KPX m v 5
+KPX m w 1
+KPX m y 12
+KPX n T -38
+KPX n p 9
+KPX n quoteright 13
+KPX n v 4
+KPX n w 0
+KPX n y 11
+KPX nine four 23
+KPX nine one 14
+KPX nine seven 9
+KPX o T -70
+KPX o quoteright 9
+KPX o t -4
+KPX o v 14
+KPX o w 10
+KPX o x 3
+KPX o y 16
+KPX oacute v 14
+KPX oacute w 10
+KPX oacute y 16
+KPX ocircumflex t -4
+KPX odieresis t -4
+KPX odieresis v 14
+KPX odieresis w 10
+KPX odieresis x 3
+KPX odieresis y 16
+KPX ograve v 14
+KPX ograve w 10
+KPX ograve y 16
+KPX one comma 3
+KPX one eight -2
+KPX one five 17
+KPX one four -25
+KPX one nine 3
+KPX one one 3
+KPX one period 0
+KPX one seven -10
+KPX one six -17
+KPX one three 20
+KPX one two 24
+KPX one zero -14
+KPX p t 9
+KPX p y 24
+KPX period one 1
+KPX period quotedblright 16
+KPX period quoteright 15
+KPX q c 0
+KPX q u 11
+KPX quotedblbase A 23
+KPX quotedblbase AE 17
+KPX quotedblbase T -42
+KPX quotedblbase V -60
+KPX quotedblbase W -43
+KPX quotedblbase Y -57
+KPX quotedblleft A -90
+KPX quotedblleft AE -99
+KPX quotedblleft Aacute -90
+KPX quotedblleft Adieresis -90
+KPX quotedblleft Aring -90
+KPX quotedblleft T 14
+KPX quotedblleft V 21
+KPX quotedblleft W 20
+KPX quotedblleft Y 18
+KPX quotedblright A -85
+KPX quotedblright AE -94
+KPX quotedblright Aacute -85
+KPX quotedblright Adieresis -85
+KPX quotedblright Aring -85
+KPX quotedblright T 20
+KPX quotedblright V 26
+KPX quotedblright W 25
+KPX quotedblright Y 23
+KPX quoteleft A -89
+KPX quoteleft AE -98
+KPX quoteleft Aacute -89
+KPX quoteleft Adieresis -89
+KPX quoteleft Aring -89
+KPX quoteleft T 15
+KPX quoteleft V 22
+KPX quoteleft W 21
+KPX quoteleft Y 19
+KPX quoteright A -83
+KPX quoteright AE -91
+KPX quoteright Aacute -83
+KPX quoteright Adieresis -83
+KPX quoteright Aring -83
+KPX quoteright comma -45
+KPX quoteright d -49
+KPX quoteright o -42
+KPX quoteright period -44
+KPX quoteright r -5
+KPX quoteright s -24
+KPX quoteright t -9
+KPX quoteright v 13
+KPX quoteright w 9
+KPX quoteright y 0
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae 0
+KPX r agrave -1
+KPX r aring -1
+KPX r c 14
+KPX r ccedilla 14
+KPX r colon 8
+KPX r comma -52
+KPX r d 5
+KPX r e 11
+KPX r eacute 11
+KPX r ecircumflex 11
+KPX r egrave 11
+KPX r f 39
+KPX r g 22
+KPX r h 2
+KPX r hyphen 17
+KPX r i 39
+KPX r j 33
+KPX r k -2
+KPX r l -7
+KPX r m 41
+KPX r n 43
+KPX r o 7
+KPX r oacute 7
+KPX r ocircumflex 7
+KPX r odieresis 7
+KPX r oe 9
+KPX r ograve 7
+KPX r oslash 7
+KPX r p 43
+KPX r period -51
+KPX r q 4
+KPX r quoteright 49
+KPX r r 41
+KPX r s 17
+KPX r semicolon 3
+KPX r t 35
+KPX r u 40
+KPX r v 41
+KPX r w 37
+KPX r x 32
+KPX r y 45
+KPX r z 14
+KPX s quoteright 17
+KPX s t 8
+KPX seven colon -43
+KPX seven comma -63
+KPX seven eight -2
+KPX seven five 9
+KPX seven four -29
+KPX seven one 17
+KPX seven period -62
+KPX seven seven 35
+KPX seven six -13
+KPX seven three 13
+KPX seven two 20
+KPX six four 41
+KPX six one -14
+KPX six seven 5
+KPX t S 11
+KPX t a 3
+KPX t aacute 3
+KPX t adieresis 3
+KPX t ae 3
+KPX t aring 3
+KPX t colon 7
+KPX t e 12
+KPX t eacute 12
+KPX t h 1
+KPX t o 1
+KPX t oacute 1
+KPX t odieresis 1
+KPX t quoteright 25
+KPX t semicolon 1
+KPX three four 29
+KPX three one -6
+KPX three seven -4
+KPX two four 6
+KPX two one 0
+KPX two seven -7
+KPX u quoteright 15
+KPX v a -18
+KPX v aacute -18
+KPX v acircumflex -18
+KPX v adieresis -18
+KPX v ae -24
+KPX v agrave -18
+KPX v aring -18
+KPX v atilde -18
+KPX v c -6
+KPX v colon -13
+KPX v comma -28
+KPX v e -6
+KPX v eacute -6
+KPX v ecircumflex -6
+KPX v egrave -6
+KPX v g -2
+KPX v hyphen 20
+KPX v l -19
+KPX v o -12
+KPX v oacute -12
+KPX v odieresis -12
+KPX v ograve -12
+KPX v oslash -13
+KPX v period -28
+KPX v s -7
+KPX v semicolon -20
+KPX w a -12
+KPX w aacute -12
+KPX w acircumflex -12
+KPX w adieresis -12
+KPX w ae -19
+KPX w agrave -12
+KPX w aring -12
+KPX w atilde -12
+KPX w c 0
+KPX w colon -8
+KPX w comma -23
+KPX w e -1
+KPX w eacute -1
+KPX w ecircumflex -1
+KPX w egrave -1
+KPX w g 3
+KPX w hyphen 26
+KPX w l -13
+KPX w o -7
+KPX w oacute -7
+KPX w odieresis -7
+KPX w ograve -7
+KPX w oslash -7
+KPX w period -24
+KPX w s -1
+KPX w semicolon -14
+KPX x a 9
+KPX x c 14
+KPX x e 17
+KPX x eacute 17
+KPX x o 6
+KPX x q 15
+KPX y a -10
+KPX y aacute -10
+KPX y acircumflex -10
+KPX y adieresis -10
+KPX y ae -15
+KPX y agrave -10
+KPX y aring -10
+KPX y atilde -10
+KPX y c 0
+KPX y colon -5
+KPX y comma -9
+KPX y e 0
+KPX y eacute 0
+KPX y ecircumflex 0
+KPX y egrave 0
+KPX y g -6
+KPX y hyphen 17
+KPX y l -11
+KPX y o -6
+KPX y oacute -6
+KPX y odieresis -6
+KPX y ograve -6
+KPX y oslash -6
+KPX y period -8
+KPX y s -1
+KPX y semicolon -11
+KPX zero four 32
+KPX zero one 12
+KPX zero seven 7
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplbi8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uplbi8a.pfb
new file mode 100644
index 00000000000..1c812b83916
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplbi8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplr8a.afm b/Master/tlpkg/tlgs/lib/fonts/uplr8a.afm
new file mode 100644
index 00000000000..4173bfe004e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplr8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWPalladioL-Roma
+FullName URW Palladio L Roman
+FamilyName URW Palladio L
+Weight Roman
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -166 -283 1021 943
+CapHeight 692
+XHeight 469
+Descender -281
+Ascender 726
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 278 ; N exclam ; B 81 -5 197 694 ;
+C 34 ; WX 371 ; N quotedbl ; B 52 469 319 709 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 495 684 ;
+C 36 ; WX 500 ; N dollar ; B 30 -116 471 731 ;
+C 37 ; WX 840 ; N percent ; B 39 -20 802 709 ;
+C 38 ; WX 778 ; N ampersand ; B 43 -20 753 689 ;
+C 39 ; WX 278 ; N quoteright ; B 45 446 233 709 ;
+C 40 ; WX 333 ; N parenleft ; B 60 -215 301 726 ;
+C 41 ; WX 333 ; N parenright ; B 32 -215 273 726 ;
+C 42 ; WX 389 ; N asterisk ; B 32 342 359 689 ;
+C 43 ; WX 606 ; N plus ; B 51 7 555 512 ;
+C 44 ; WX 250 ; N comma ; B 16 -155 218 123 ;
+C 45 ; WX 333 ; N hyphen ; B 17 215 312 287 ;
+C 46 ; WX 250 ; N period ; B 67 -5 183 111 ;
+C 47 ; WX 606 ; N slash ; B 87 -119 519 726 ;
+C 48 ; WX 500 ; N zero ; B 29 -20 465 689 ;
+C 49 ; WX 500 ; N one ; B 60 -3 418 694 ;
+C 50 ; WX 500 ; N two ; B 16 -3 468 689 ;
+C 51 ; WX 500 ; N three ; B 15 -20 462 689 ;
+C 52 ; WX 500 ; N four ; B 2 -3 472 694 ;
+C 53 ; WX 500 ; N five ; B 13 -20 459 689 ;
+C 54 ; WX 500 ; N six ; B 32 -20 468 689 ;
+C 55 ; WX 500 ; N seven ; B 44 -3 497 689 ;
+C 56 ; WX 500 ; N eight ; B 30 -20 464 689 ;
+C 57 ; WX 500 ; N nine ; B 20 -20 457 689 ;
+C 58 ; WX 250 ; N colon ; B 66 -5 182 456 ;
+C 59 ; WX 250 ; N semicolon ; B 16 -153 218 456 ;
+C 60 ; WX 606 ; N less ; B 57 -2 558 524 ;
+C 61 ; WX 606 ; N equal ; B 51 136 555 386 ;
+C 62 ; WX 606 ; N greater ; B 48 -2 549 524 ;
+C 63 ; WX 444 ; N question ; B 43 -5 395 694 ;
+C 64 ; WX 747 ; N at ; B 24 -20 724 694 ;
+C 65 ; WX 778 ; N A ; B 15 -3 756 700 ;
+C 66 ; WX 611 ; N B ; B 26 -3 576 692 ;
+C 67 ; WX 709 ; N C ; B 22 -20 670 709 ;
+C 68 ; WX 774 ; N D ; B 22 -3 751 692 ;
+C 69 ; WX 611 ; N E ; B 22 -3 572 692 ;
+C 70 ; WX 556 ; N F ; B 22 -3 536 692 ;
+C 71 ; WX 763 ; N G ; B 22 -20 728 709 ;
+C 72 ; WX 832 ; N H ; B 22 -3 810 692 ;
+C 73 ; WX 337 ; N I ; B 22 -3 315 692 ;
+C 74 ; WX 333 ; N J ; B -15 -200 311 692 ;
+C 75 ; WX 726 ; N K ; B 22 -3 719 692 ;
+C 76 ; WX 611 ; N L ; B 22 -3 586 692 ;
+C 77 ; WX 946 ; N M ; B 16 -13 926 692 ;
+C 78 ; WX 831 ; N N ; B 17 -20 813 692 ;
+C 79 ; WX 786 ; N O ; B 22 -20 764 709 ;
+C 80 ; WX 604 ; N P ; B 22 -3 580 692 ;
+C 81 ; WX 786 ; N Q ; B 22 -176 764 709 ;
+C 82 ; WX 668 ; N R ; B 22 -3 669 692 ;
+C 83 ; WX 525 ; N S ; B 24 -20 503 709 ;
+C 84 ; WX 613 ; N T ; B 18 -3 595 692 ;
+C 85 ; WX 778 ; N U ; B 12 -20 759 692 ;
+C 86 ; WX 722 ; N V ; B 8 -9 706 692 ;
+C 87 ; WX 1000 ; N W ; B 8 -9 984 700 ;
+C 88 ; WX 667 ; N X ; B 14 -3 648 700 ;
+C 89 ; WX 667 ; N Y ; B 9 -3 654 706 ;
+C 90 ; WX 667 ; N Z ; B 15 -3 638 692 ;
+C 91 ; WX 333 ; N bracketleft ; B 79 -184 288 726 ;
+C 92 ; WX 606 ; N backslash ; B 81 0 512 726 ;
+C 93 ; WX 333 ; N bracketright ; B 45 -184 254 726 ;
+C 94 ; WX 606 ; N asciicircum ; B 51 283 554 689 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 45 446 233 709 ;
+C 97 ; WX 500 ; N a ; B 32 -12 471 469 ;
+C 98 ; WX 553 ; N b ; B -15 -12 508 726 ;
+C 99 ; WX 444 ; N c ; B 26 -20 413 469 ;
+C 100 ; WX 611 ; N d ; B 35 -12 579 726 ;
+C 101 ; WX 479 ; N e ; B 26 -20 448 469 ;
+C 102 ; WX 333 ; N f ; B 23 -3 341 728 ;
+C 103 ; WX 556 ; N g ; B 32 -283 544 469 ;
+C 104 ; WX 582 ; N h ; B 6 -3 572 726 ;
+C 105 ; WX 291 ; N i ; B 21 -3 271 687 ;
+C 106 ; WX 234 ; N j ; B -40 -283 167 688 ;
+C 107 ; WX 556 ; N k ; B 21 -12 549 726 ;
+C 108 ; WX 291 ; N l ; B 21 -3 271 726 ;
+C 109 ; WX 883 ; N m ; B 16 -3 869 469 ;
+C 110 ; WX 582 ; N n ; B 6 -3 572 469 ;
+C 111 ; WX 546 ; N o ; B 32 -20 514 469 ;
+C 112 ; WX 601 ; N p ; B 8 -281 554 469 ;
+C 113 ; WX 560 ; N q ; B 35 -281 560 469 ;
+C 114 ; WX 395 ; N r ; B 21 -3 374 469 ;
+C 115 ; WX 424 ; N s ; B 30 -20 391 469 ;
+C 116 ; WX 326 ; N t ; B 22 -12 319 621 ;
+C 117 ; WX 603 ; N u ; B 18 -12 581 469 ;
+C 118 ; WX 565 ; N v ; B 6 -7 539 459 ;
+C 119 ; WX 834 ; N w ; B 6 -7 808 469 ;
+C 120 ; WX 516 ; N x ; B 20 -3 496 469 ;
+C 121 ; WX 556 ; N y ; B 12 -283 544 459 ;
+C 122 ; WX 500 ; N z ; B 16 -3 466 462 ;
+C 123 ; WX 333 ; N braceleft ; B 58 -175 289 726 ;
+C 124 ; WX 606 ; N bar ; B 275 0 331 726 ;
+C 125 ; WX 333 ; N braceright ; B 44 -175 275 726 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 182 555 341 ;
+C 161 ; WX 278 ; N exclamdown ; B 81 -225 197 469 ;
+C 162 ; WX 500 ; N cent ; B 61 -101 448 562 ;
+C 163 ; WX 500 ; N sterling ; B 12 -13 478 694 ;
+C 164 ; WX 167 ; N fraction ; B -166 0 337 689 ;
+C 165 ; WX 500 ; N yen ; B 5 -3 496 701 ;
+C 166 ; WX 500 ; N florin ; B 0 -262 473 706 ;
+C 167 ; WX 500 ; N section ; B 26 -219 465 709 ;
+C 168 ; WX 500 ; N currency ; B 30 96 470 531 ;
+C 169 ; WX 208 ; N quotesingle ; B 61 469 147 709 ;
+C 170 ; WX 500 ; N quotedblleft ; B 51 446 449 709 ;
+C 171 ; WX 500 ; N guillemotleft ; B 50 71 450 428 ;
+C 172 ; WX 331 ; N guilsinglleft ; B 66 71 265 428 ;
+C 173 ; WX 331 ; N guilsinglright ; B 66 71 265 428 ;
+C 174 ; WX 605 ; N fi ; B 23 -3 587 728 ;
+C 175 ; WX 608 ; N fl ; B 23 -3 590 728 ;
+C 177 ; WX 500 ; N endash ; B 0 219 500 277 ;
+C 178 ; WX 500 ; N dagger ; B 34 -5 466 694 ;
+C 179 ; WX 500 ; N daggerdbl ; B 34 -249 466 694 ;
+C 180 ; WX 250 ; N periodcentered ; B 67 203 183 319 ;
+C 182 ; WX 628 ; N paragraph ; B 39 -150 589 695 ;
+C 183 ; WX 606 ; N bullet ; B 131 172 475 516 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 22 -153 210 110 ;
+C 185 ; WX 500 ; N quotedblbase ; B 51 -153 449 110 ;
+C 186 ; WX 500 ; N quotedblright ; B 51 446 449 709 ;
+C 187 ; WX 500 ; N guillemotright ; B 50 71 450 428 ;
+C 188 ; WX 1000 ; N ellipsis ; B 109 -5 891 111 ;
+C 189 ; WX 1144 ; N perthousand ; B 123 -20 1021 709 ;
+C 191 ; WX 444 ; N questiondown ; B 43 -231 395 469 ;
+C 193 ; WX 333 ; N grave ; B 31 506 255 677 ;
+C 194 ; WX 333 ; N acute ; B 78 506 302 677 ;
+C 195 ; WX 333 ; N circumflex ; B 11 510 323 677 ;
+C 196 ; WX 333 ; N tilde ; B 2 535 332 640 ;
+C 197 ; WX 333 ; N macron ; B 11 538 323 591 ;
+C 198 ; WX 333 ; N breve ; B 26 506 308 664 ;
+C 199 ; WX 250 ; N dotaccent ; B 75 537 175 637 ;
+C 200 ; WX 333 ; N dieresis ; B 17 537 316 637 ;
+C 202 ; WX 333 ; N ring ; B 67 512 267 712 ;
+C 203 ; WX 333 ; N cedilla ; B 96 -225 304 -10 ;
+C 205 ; WX 380 ; N hungarumlaut ; B 3 506 377 687 ;
+C 206 ; WX 313 ; N ogonek ; B 68 -145 245 0 ;
+C 207 ; WX 333 ; N caron ; B 11 510 323 677 ;
+C 208 ; WX 1000 ; N emdash ; B 0 219 1000 277 ;
+C 225 ; WX 944 ; N AE ; B -10 -3 908 692 ;
+C 227 ; WX 333 ; N ordfeminine ; B 24 422 310 709 ;
+C 232 ; WX 611 ; N Lslash ; B 6 -3 586 692 ;
+C 233 ; WX 833 ; N Oslash ; B 30 -20 797 709 ;
+C 234 ; WX 998 ; N OE ; B 22 -20 962 709 ;
+C 235 ; WX 333 ; N ordmasculine ; B 10 416 323 709 ;
+C 241 ; WX 758 ; N ae ; B 30 -20 732 469 ;
+C 245 ; WX 287 ; N dotlessi ; B 21 -3 271 469 ;
+C 248 ; WX 291 ; N lslash ; B -14 -3 306 726 ;
+C 249 ; WX 556 ; N oslash ; B 16 -23 530 474 ;
+C 250 ; WX 827 ; N oe ; B 32 -20 800 469 ;
+C 251 ; WX 556 ; N germandbls ; B 23 -9 519 731 ;
+C -1 ; WX 778 ; N Udieresis ; B 12 -20 759 868 ;
+C -1 ; WX 778 ; N Uacute ; B 12 -20 759 908 ;
+C -1 ; WX 525 ; N Scedilla ; B 24 -225 503 709 ;
+C -1 ; WX 613 ; N Tcaron ; B 18 -3 595 908 ;
+C -1 ; WX 525 ; N Scaron ; B 24 -20 503 908 ;
+C -1 ; WX 668 ; N Rcaron ; B 22 -3 669 908 ;
+C -1 ; WX 668 ; N Racute ; B 22 -3 669 908 ;
+C -1 ; WX 525 ; N Sacute ; B 24 -20 503 908 ;
+C -1 ; WX 786 ; N Otilde ; B 22 -20 764 871 ;
+C -1 ; WX 603 ; N ucircumflex ; B 18 -12 581 677 ;
+C -1 ; WX 786 ; N Ohungarumlaut ; B 22 -20 764 918 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 12 -20 759 918 ;
+C -1 ; WX 667 ; N Yacute ; B 9 -3 654 908 ;
+C -1 ; WX 774 ; N Eth ; B 14 -3 751 692 ;
+C -1 ; WX 774 ; N Dcroat ; B 14 -3 751 692 ;
+C -1 ; WX 667 ; N Zacute ; B 15 -3 638 908 ;
+C -1 ; WX 778 ; N Uring ; B 12 -20 759 943 ;
+C -1 ; WX 556 ; N gbreve ; B 32 -283 544 664 ;
+C -1 ; WX 479 ; N eogonek ; B 26 -145 461 469 ;
+C -1 ; WX 479 ; N edotaccent ; B 26 -20 448 637 ;
+C -1 ; WX 479 ; N ecaron ; B 26 -20 448 677 ;
+C -1 ; WX 778 ; N Ugrave ; B 12 -20 759 908 ;
+C -1 ; WX 604 ; N Thorn ; B 32 -3 574 692 ;
+C -1 ; WX 479 ; N eacute ; B 26 -20 448 677 ;
+C -1 ; WX 479 ; N edieresis ; B 26 -20 448 637 ;
+C -1 ; WX 671 ; N dcaron ; B 35 -12 677 729 ;
+C -1 ; WX 444 ; N ccedilla ; B 26 -225 413 469 ;
+C -1 ; WX 444 ; N ccaron ; B 26 -20 418 677 ;
+C -1 ; WX 444 ; N cacute ; B 26 -20 444 677 ;
+C -1 ; WX 500 ; N aogonek ; B 32 -145 540 469 ;
+C -1 ; WX 500 ; N aring ; B 32 -12 471 712 ;
+C -1 ; WX 500 ; N atilde ; B 32 -12 471 640 ;
+C -1 ; WX 500 ; N abreve ; B 32 -12 471 664 ;
+C -1 ; WX 479 ; N egrave ; B 26 -20 448 677 ;
+C -1 ; WX 500 ; N agrave ; B 32 -12 471 677 ;
+C -1 ; WX 500 ; N aacute ; B 32 -12 471 677 ;
+C -1 ; WX 500 ; N adieresis ; B 32 -12 471 637 ;
+C -1 ; WX 778 ; N Uogonek ; B 12 -145 759 692 ;
+C -1 ; WX 603 ; N ugrave ; B 18 -12 581 677 ;
+C -1 ; WX 603 ; N uacute ; B 18 -12 581 677 ;
+C -1 ; WX 603 ; N udieresis ; B 18 -12 581 637 ;
+C -1 ; WX 375 ; N tcaron ; B 22 -12 381 696 ;
+C -1 ; WX 424 ; N scommaaccent ; B 30 -274 391 469 ;
+C -1 ; WX 667 ; N Zcaron ; B 15 -3 638 908 ;
+C -1 ; WX 479 ; N ecircumflex ; B 26 -20 448 677 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 12 -20 759 908 ;
+C -1 ; WX 500 ; N acircumflex ; B 32 -12 471 677 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 15 -3 638 868 ;
+C -1 ; WX 424 ; N scaron ; B 30 -20 391 677 ;
+C -1 ; WX 778 ; N Amacron ; B 15 -3 756 822 ;
+C -1 ; WX 424 ; N sacute ; B 30 -20 391 677 ;
+C -1 ; WX 613 ; N Tcommaaccent ; B 18 -274 595 692 ;
+C -1 ; WX 667 ; N Ydieresis ; B 9 -3 654 868 ;
+C -1 ; WX 601 ; N thorn ; B -2 -281 544 726 ;
+C -1 ; WX 611 ; N Emacron ; B 22 -3 572 822 ;
+C -1 ; WX 786 ; N Ograve ; B 22 -20 764 908 ;
+C -1 ; WX 786 ; N Oacute ; B 22 -20 764 908 ;
+C -1 ; WX 786 ; N Odieresis ; B 22 -20 764 868 ;
+C -1 ; WX 831 ; N Ntilde ; B 17 -20 813 871 ;
+C -1 ; WX 831 ; N Ncaron ; B 17 -20 813 908 ;
+C -1 ; WX 831 ; N Nacute ; B 17 -20 813 908 ;
+C -1 ; WX 611 ; N Lcaron ; B 22 -3 586 696 ;
+C -1 ; WX 611 ; N Lacute ; B 22 -3 586 908 ;
+C -1 ; WX 337 ; N Idotaccent ; B 22 -3 315 868 ;
+C -1 ; WX 395 ; N racute ; B 21 -3 374 677 ;
+C -1 ; WX 337 ; N Icircumflex ; B 13 -3 325 908 ;
+C -1 ; WX 546 ; N ohungarumlaut ; B 32 -20 514 687 ;
+C -1 ; WX 546 ; N otilde ; B 32 -20 514 640 ;
+C -1 ; WX 500 ; N Euro ; B -38 -20 465 709 ;
+C -1 ; WX 546 ; N ocircumflex ; B 32 -20 514 677 ;
+C -1 ; WX 300 ; N onesuperior ; B 32 271 254 689 ;
+C -1 ; WX 300 ; N twosuperior ; B 6 271 284 686 ;
+C -1 ; WX 300 ; N threesuperior ; B 5 261 281 686 ;
+C -1 ; WX 337 ; N Igrave ; B 22 -3 315 908 ;
+C -1 ; WX 337 ; N Iacute ; B 22 -3 315 908 ;
+C -1 ; WX 337 ; N Imacron ; B 13 -3 325 822 ;
+C -1 ; WX 337 ; N Iogonek ; B 22 -145 337 692 ;
+C -1 ; WX 337 ; N Idieresis ; B 19 -3 318 868 ;
+C -1 ; WX 763 ; N Gbreve ; B 22 -20 728 895 ;
+C -1 ; WX 778 ; N Umacron ; B 12 -20 759 822 ;
+C -1 ; WX 726 ; N Kcommaaccent ; B 22 -274 719 692 ;
+C -1 ; WX 546 ; N ograve ; B 32 -20 514 677 ;
+C -1 ; WX 525 ; N Scommaaccent ; B 24 -274 503 709 ;
+C -1 ; WX 611 ; N Eogonek ; B 22 -145 611 692 ;
+C -1 ; WX 546 ; N oacute ; B 32 -20 514 677 ;
+C -1 ; WX 611 ; N Edotaccent ; B 22 -3 572 868 ;
+C -1 ; WX 291 ; N iogonek ; B 21 -145 331 687 ;
+C -1 ; WX 556 ; N gcommaaccent ; B 32 -283 544 736 ;
+C -1 ; WX 546 ; N odieresis ; B 32 -20 514 637 ;
+C -1 ; WX 582 ; N ntilde ; B 6 -3 572 640 ;
+C -1 ; WX 582 ; N ncaron ; B 6 -3 572 677 ;
+C -1 ; WX 611 ; N Ecaron ; B 22 -3 572 908 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 22 -3 572 908 ;
+C -1 ; WX 424 ; N scedilla ; B 30 -225 391 469 ;
+C -1 ; WX 395 ; N rcaron ; B 21 -3 374 677 ;
+C -1 ; WX 611 ; N Egrave ; B 22 -3 572 908 ;
+C -1 ; WX 611 ; N Eacute ; B 22 -3 572 908 ;
+C -1 ; WX 763 ; N Gcommaaccent ; B 22 -274 728 709 ;
+C -1 ; WX 668 ; N Rcommaaccent ; B 22 -274 669 692 ;
+C -1 ; WX 611 ; N Edieresis ; B 22 -3 572 868 ;
+C -1 ; WX 582 ; N nacute ; B 6 -3 572 677 ;
+C -1 ; WX 603 ; N uogonek ; B 18 -145 643 469 ;
+C -1 ; WX 603 ; N umacron ; B 18 -12 581 591 ;
+C -1 ; WX 774 ; N Dcaron ; B 22 -3 751 908 ;
+C -1 ; WX 375 ; N lcaron ; B 21 -3 381 729 ;
+C -1 ; WX 709 ; N Ccaron ; B 22 -20 670 908 ;
+C -1 ; WX 709 ; N Cacute ; B 22 -20 670 908 ;
+C -1 ; WX 709 ; N Ccedilla ; B 22 -225 670 709 ;
+C -1 ; WX 400 ; N degree ; B 50 389 350 689 ;
+C -1 ; WX 778 ; N Aogonek ; B 15 -145 778 700 ;
+C -1 ; WX 606 ; N minus ; B 51 233 555 289 ;
+C -1 ; WX 606 ; N multiply ; B 83 36 523 474 ;
+C -1 ; WX 606 ; N divide ; B 51 10 555 512 ;
+C -1 ; WX 778 ; N Aring ; B 15 -3 756 943 ;
+C -1 ; WX 979 ; N trademark ; B 40 285 939 689 ;
+C -1 ; WX 395 ; N rcommaaccent ; B 21 -274 374 469 ;
+C -1 ; WX 291 ; N lacute ; B 21 -3 281 908 ;
+C -1 ; WX 546 ; N omacron ; B 32 -20 514 591 ;
+C -1 ; WX 778 ; N Atilde ; B 15 -3 756 871 ;
+C -1 ; WX 287 ; N icircumflex ; B -12 -3 300 677 ;
+C -1 ; WX 287 ; N igrave ; B 8 -3 271 677 ;
+C -1 ; WX 582 ; N ncommaaccent ; B 6 -274 572 469 ;
+C -1 ; WX 291 ; N lcommaaccent ; B 21 -274 271 726 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 512 ;
+C -1 ; WX 750 ; N onehalf ; B 15 -3 735 692 ;
+C -1 ; WX 750 ; N onequarter ; B 30 -3 727 692 ;
+C -1 ; WX 750 ; N threequarters ; B 15 -3 735 689 ;
+C -1 ; WX 287 ; N iacute ; B 21 -3 279 677 ;
+C -1 ; WX 778 ; N Abreve ; B 15 -3 756 895 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 21 -274 549 726 ;
+C -1 ; WX 786 ; N Omacron ; B 22 -20 764 822 ;
+C -1 ; WX 287 ; N imacron ; B -12 -3 300 591 ;
+C -1 ; WX 479 ; N emacron ; B 26 -20 448 591 ;
+C -1 ; WX 500 ; N amacron ; B 32 -12 471 591 ;
+C -1 ; WX 326 ; N tcommaaccent ; B 22 -274 319 621 ;
+C -1 ; WX 556 ; N ydieresis ; B 12 -283 544 637 ;
+C -1 ; WX 500 ; N zdotaccent ; B 16 -3 466 637 ;
+C -1 ; WX 500 ; N zcaron ; B 16 -3 466 677 ;
+C -1 ; WX 500 ; N zacute ; B 16 -3 466 677 ;
+C -1 ; WX 556 ; N yacute ; B 12 -283 544 677 ;
+C -1 ; WX 603 ; N uhungarumlaut ; B 18 -12 581 687 ;
+C -1 ; WX 546 ; N eth ; B 32 -20 504 728 ;
+C -1 ; WX 603 ; N uring ; B 18 -12 581 712 ;
+C -1 ; WX 786 ; N Ocircumflex ; B 22 -20 764 908 ;
+C -1 ; WX 333 ; N commaaccent ; B 54 -274 223 -37 ;
+C -1 ; WX 747 ; N copyright ; B 11 -18 736 706 ;
+C -1 ; WX 747 ; N registered ; B 11 -18 736 706 ;
+C -1 ; WX 778 ; N Acircumflex ; B 15 -3 756 908 ;
+C -1 ; WX 287 ; N idieresis ; B -6 -3 293 657 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -25 555 549 ;
+C -1 ; WX 549 ; N radical ; B 5 -48 520 918 ;
+C -1 ; WX 778 ; N Agrave ; B 15 -3 756 908 ;
+C -1 ; WX 778 ; N Aacute ; B 15 -3 756 908 ;
+C -1 ; WX 606 ; N lessequal ; B 57 0 558 613 ;
+C -1 ; WX 606 ; N greaterequal ; B 48 0 549 613 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 120 551 386 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 831 ; N Ncommaaccent ; B 17 -274 813 692 ;
+C -1 ; WX 611 ; N dcroat ; B 35 -12 579 726 ;
+C -1 ; WX 606 ; N brokenbar ; B 275 0 331 726 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 22 -274 586 692 ;
+C -1 ; WX 778 ; N Adieresis ; B 15 -3 756 868 ;
+C -1 ; WX 603 ; N mu ; B 18 -236 581 469 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -72
+KPX A Ccedilla -75
+KPX A G -70
+KPX A O -69
+KPX A Odieresis -69
+KPX A Q -67
+KPX A T -69
+KPX A U -74
+KPX A Uacute -74
+KPX A Ucircumflex -74
+KPX A Udieresis -74
+KPX A Ugrave -74
+KPX A V -140
+KPX A W -98
+KPX A Y -89
+KPX A a -11
+KPX A b -13
+KPX A c -33
+KPX A ccedilla -39
+KPX A comma -33
+KPX A d -34
+KPX A e -30
+KPX A g -26
+KPX A guillemotleft -84
+KPX A guilsinglleft -92
+KPX A hyphen -37
+KPX A o -36
+KPX A period -24
+KPX A q -34
+KPX A quotedblright -123
+KPX A quoteright -120
+KPX A t -38
+KPX A u -45
+KPX A v -87
+KPX A w -78
+KPX A y -88
+KPX Aacute C -72
+KPX Aacute G -70
+KPX Aacute O -69
+KPX Aacute Q -67
+KPX Aacute T -69
+KPX Aacute U -74
+KPX Aacute V -140
+KPX Aacute W -98
+KPX Aacute Y -89
+KPX Aacute a -11
+KPX Aacute b -13
+KPX Aacute c -33
+KPX Aacute comma -33
+KPX Aacute d -34
+KPX Aacute e -30
+KPX Aacute g -26
+KPX Aacute guillemotleft -84
+KPX Aacute guilsinglleft -92
+KPX Aacute hyphen -37
+KPX Aacute o -36
+KPX Aacute period -24
+KPX Aacute q -34
+KPX Aacute quoteright -120
+KPX Aacute t -38
+KPX Aacute u -45
+KPX Aacute v -87
+KPX Aacute w -78
+KPX Aacute y -88
+KPX Acircumflex C -72
+KPX Acircumflex G -70
+KPX Acircumflex O -69
+KPX Acircumflex Q -67
+KPX Acircumflex T -69
+KPX Acircumflex U -74
+KPX Acircumflex V -140
+KPX Acircumflex W -98
+KPX Acircumflex Y -89
+KPX Acircumflex comma -33
+KPX Acircumflex period -24
+KPX Adieresis C -72
+KPX Adieresis G -70
+KPX Adieresis O -69
+KPX Adieresis Q -67
+KPX Adieresis T -69
+KPX Adieresis U -74
+KPX Adieresis V -140
+KPX Adieresis W -98
+KPX Adieresis Y -89
+KPX Adieresis a -11
+KPX Adieresis b -13
+KPX Adieresis c -33
+KPX Adieresis comma -33
+KPX Adieresis d -34
+KPX Adieresis g -26
+KPX Adieresis guillemotleft -84
+KPX Adieresis guilsinglleft -92
+KPX Adieresis hyphen -37
+KPX Adieresis o -36
+KPX Adieresis period -24
+KPX Adieresis q -34
+KPX Adieresis quotedblright -123
+KPX Adieresis quoteright -120
+KPX Adieresis t -38
+KPX Adieresis u -45
+KPX Adieresis v -87
+KPX Adieresis w -78
+KPX Adieresis y -88
+KPX Agrave C -72
+KPX Agrave G -70
+KPX Agrave O -69
+KPX Agrave Q -67
+KPX Agrave T -69
+KPX Agrave U -74
+KPX Agrave V -140
+KPX Agrave W -98
+KPX Agrave Y -89
+KPX Agrave comma -33
+KPX Agrave period -24
+KPX Aring C -72
+KPX Aring G -70
+KPX Aring O -69
+KPX Aring Q -67
+KPX Aring T -69
+KPX Aring U -74
+KPX Aring V -140
+KPX Aring W -98
+KPX Aring Y -89
+KPX Aring a -11
+KPX Aring b -13
+KPX Aring c -33
+KPX Aring comma -33
+KPX Aring d -34
+KPX Aring e -30
+KPX Aring g -26
+KPX Aring guillemotleft -84
+KPX Aring guilsinglleft -92
+KPX Aring hyphen -37
+KPX Aring o -36
+KPX Aring period -24
+KPX Aring q -34
+KPX Aring quotedblright -123
+KPX Aring quoteright -120
+KPX Aring t -38
+KPX Aring u -45
+KPX Aring v -87
+KPX Aring w -78
+KPX Aring y -88
+KPX Atilde C -72
+KPX Atilde G -70
+KPX Atilde O -69
+KPX Atilde Q -67
+KPX Atilde T -69
+KPX Atilde U -74
+KPX Atilde V -140
+KPX Atilde W -98
+KPX Atilde Y -89
+KPX Atilde comma -33
+KPX Atilde period -24
+KPX B A -51
+KPX B AE -38
+KPX B Aacute -51
+KPX B Acircumflex -51
+KPX B Adieresis -51
+KPX B Aring -51
+KPX B Atilde -51
+KPX B O -8
+KPX B OE -8
+KPX B Oacute -8
+KPX B Ocircumflex -8
+KPX B Odieresis -8
+KPX B Ograve -8
+KPX B Oslash -15
+KPX B V -37
+KPX B W -37
+KPX B Y -33
+KPX C A -17
+KPX C AE -5
+KPX C Aacute -17
+KPX C Adieresis -17
+KPX C Aring -17
+KPX C H -11
+KPX C K -11
+KPX C O -39
+KPX C Oacute -39
+KPX C Odieresis -39
+KPX Ccedilla A -22
+KPX D A -82
+KPX D Aacute -82
+KPX D Acircumflex -82
+KPX D Adieresis -82
+KPX D Agrave -82
+KPX D Aring -82
+KPX D Atilde -82
+KPX D J -31
+KPX D T -18
+KPX D V -60
+KPX D W -46
+KPX D X -63
+KPX D Y -56
+KPX F A -95
+KPX F Aacute -95
+KPX F Acircumflex -95
+KPX F Adieresis -95
+KPX F Agrave -95
+KPX F Aring -95
+KPX F Atilde -95
+KPX F J 2
+KPX F O -18
+KPX F Odieresis -18
+KPX F a -40
+KPX F aacute -42
+KPX F adieresis -36
+KPX F ae -41
+KPX F aring -42
+KPX F comma -80
+KPX F e -23
+KPX F eacute -23
+KPX F hyphen 6
+KPX F i -22
+KPX F j -8
+KPX F o -26
+KPX F oacute -26
+KPX F odieresis -26
+KPX F oe -26
+KPX F oslash -29
+KPX F period -65
+KPX F r -22
+KPX F u -20
+KPX G A -23
+KPX G AE -10
+KPX G Aacute -23
+KPX G Acircumflex -23
+KPX G Adieresis -23
+KPX G Agrave -23
+KPX G Aring -23
+KPX G Atilde -23
+KPX G T -23
+KPX G V -17
+KPX G W -17
+KPX G Y -18
+KPX J A -47
+KPX J AE -35
+KPX J Adieresis -47
+KPX J Aring -47
+KPX K C -64
+KPX K G -63
+KPX K O -61
+KPX K OE -61
+KPX K Oacute -61
+KPX K Odieresis -61
+KPX K S 3
+KPX K T -4
+KPX K a -4
+KPX K adieresis -4
+KPX K ae 0
+KPX K aring -4
+KPX K e -23
+KPX K hyphen -77
+KPX K o -29
+KPX K oacute -29
+KPX K odieresis -29
+KPX K u -37
+KPX K udieresis -37
+KPX K y -89
+KPX L A -6
+KPX L AE 6
+KPX L Aacute -6
+KPX L Adieresis -6
+KPX L Aring -6
+KPX L C -19
+KPX L Ccedilla -21
+KPX L G -19
+KPX L O -18
+KPX L Oacute -18
+KPX L Ocircumflex -18
+KPX L Odieresis -18
+KPX L Ograve -18
+KPX L Otilde -18
+KPX L S -9
+KPX L T -78
+KPX L U -47
+KPX L Udieresis -47
+KPX L V -124
+KPX L W -83
+KPX L Y -98
+KPX L hyphen 2
+KPX L quotedblright -128
+KPX L quoteright -125
+KPX L u -35
+KPX L udieresis -35
+KPX L y -62
+KPX N A -41
+KPX N AE -29
+KPX N Aacute -41
+KPX N Adieresis -41
+KPX N Aring -41
+KPX N C -29
+KPX N Ccedilla -28
+KPX N G -29
+KPX N O -27
+KPX N Oacute -27
+KPX N Odieresis -27
+KPX N a -32
+KPX N aacute -33
+KPX N adieresis -33
+KPX N ae -33
+KPX N aring -33
+KPX N comma -45
+KPX N e -24
+KPX N eacute -24
+KPX N o -28
+KPX N oacute -28
+KPX N odieresis -28
+KPX N oslash -27
+KPX N period -32
+KPX N u -38
+KPX N udieresis -38
+KPX O A -76
+KPX O AE -63
+KPX O Aacute -76
+KPX O Adieresis -76
+KPX O Aring -76
+KPX O T -17
+KPX O V -56
+KPX O W -44
+KPX O X -59
+KPX O Y -52
+KPX Oacute A -76
+KPX Oacute T -17
+KPX Oacute V -56
+KPX Oacute W -44
+KPX Oacute Y -52
+KPX Ocircumflex T -17
+KPX Ocircumflex V -56
+KPX Ocircumflex Y -52
+KPX Odieresis A -76
+KPX Odieresis T -17
+KPX Odieresis V -56
+KPX Odieresis W -44
+KPX Odieresis X -59
+KPX Odieresis Y -52
+KPX Ograve T -17
+KPX Ograve V -56
+KPX Ograve Y -52
+KPX Oslash A -88
+KPX Otilde T -17
+KPX Otilde V -56
+KPX Otilde Y -52
+KPX P A -124
+KPX P AE -117
+KPX P Aacute -124
+KPX P Adieresis -124
+KPX P Aring -124
+KPX P J -27
+KPX P a -41
+KPX P aacute -41
+KPX P adieresis -33
+KPX P ae -42
+KPX P aring -41
+KPX P comma -142
+KPX P e -51
+KPX P eacute -51
+KPX P hyphen -50
+KPX P o -54
+KPX P oacute -54
+KPX P odieresis -45
+KPX P oe -51
+KPX P oslash -58
+KPX P period -128
+KPX R C -41
+KPX R Ccedilla -41
+KPX R G -41
+KPX R O -40
+KPX R OE -40
+KPX R Oacute -40
+KPX R Odieresis -40
+KPX R T -36
+KPX R U -55
+KPX R Udieresis -55
+KPX R V -53
+KPX R W -53
+KPX R Y -49
+KPX R a 0
+KPX R aacute 0
+KPX R adieresis 0
+KPX R ae 3
+KPX R aring 0
+KPX R e -19
+KPX R eacute -19
+KPX R hyphen -51
+KPX R o -25
+KPX R oacute -25
+KPX R odieresis -25
+KPX R oe -27
+KPX R u -33
+KPX R uacute -33
+KPX R udieresis -33
+KPX R y -36
+KPX S A -42
+KPX S AE -30
+KPX S Aacute -42
+KPX S Adieresis -42
+KPX S Aring -42
+KPX S T -19
+KPX S V -14
+KPX S W -14
+KPX S Y -14
+KPX S t -18
+KPX T A -65
+KPX T AE -53
+KPX T Aacute -65
+KPX T Acircumflex -65
+KPX T Adieresis -65
+KPX T Agrave -65
+KPX T Aring -65
+KPX T Atilde -65
+KPX T C -24
+KPX T G -24
+KPX T J 3
+KPX T O -22
+KPX T OE -23
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -33
+KPX T Otilde -22
+KPX T S -4
+KPX T V 9
+KPX T W 9
+KPX T Y 8
+KPX T a -80
+KPX T ae -77
+KPX T c -97
+KPX T colon -94
+KPX T comma -102
+KPX T e -94
+KPX T g -95
+KPX T guillemotleft -126
+KPX T guilsinglleft -134
+KPX T hyphen -77
+KPX T i -26
+KPX T j -11
+KPX T o -98
+KPX T oslash -63
+KPX T period -92
+KPX T r -63
+KPX T s -68
+KPX T semicolon -101
+KPX T u -110
+KPX T v -105
+KPX T w -105
+KPX T y -108
+KPX U A -80
+KPX U AE -68
+KPX U Aacute -80
+KPX U Acircumflex -80
+KPX U Adieresis -80
+KPX U Aring -80
+KPX U Atilde -80
+KPX U comma -66
+KPX U m -39
+KPX U n -33
+KPX U p -35
+KPX U period -49
+KPX U r -41
+KPX Uacute A -80
+KPX Uacute comma -66
+KPX Uacute m -39
+KPX Uacute n -33
+KPX Uacute p -35
+KPX Uacute period -49
+KPX Uacute r -41
+KPX Ucircumflex A -80
+KPX Udieresis A -80
+KPX Udieresis b 24
+KPX Udieresis comma -66
+KPX Udieresis m -39
+KPX Udieresis n -33
+KPX Udieresis p -35
+KPX Udieresis period -49
+KPX Udieresis r -41
+KPX Ugrave A -80
+KPX V A -142
+KPX V AE -129
+KPX V Aacute -142
+KPX V Acircumflex -142
+KPX V Adieresis -142
+KPX V Agrave -142
+KPX V Aring -142
+KPX V Atilde -142
+KPX V C -70
+KPX V G -70
+KPX V O -68
+KPX V Oacute -68
+KPX V Ocircumflex -68
+KPX V Odieresis -68
+KPX V Ograve -68
+KPX V Oslash -74
+KPX V Otilde -68
+KPX V S -35
+KPX V T 5
+KPX V a -94
+KPX V ae -95
+KPX V colon -93
+KPX V comma -136
+KPX V e -89
+KPX V g -101
+KPX V guillemotleft -115
+KPX V guilsinglleft -123
+KPX V hyphen -66
+KPX V i -26
+KPX V o -92
+KPX V oslash -92
+KPX V period -121
+KPX V r -65
+KPX V semicolon -108
+KPX V u -63
+KPX V y -56
+KPX W A -113
+KPX W AE -100
+KPX W Aacute -113
+KPX W Acircumflex -113
+KPX W Adieresis -113
+KPX W Agrave -113
+KPX W Aring -113
+KPX W Atilde -113
+KPX W C -55
+KPX W G -55
+KPX W O -54
+KPX W Oacute -54
+KPX W Ocircumflex -54
+KPX W Odieresis -54
+KPX W Ograve -54
+KPX W Oslash -58
+KPX W Otilde -54
+KPX W S -35
+KPX W T 5
+KPX W a -75
+KPX W ae -76
+KPX W colon -82
+KPX W comma -105
+KPX W e -66
+KPX W g -82
+KPX W guillemotleft -93
+KPX W guilsinglleft -101
+KPX W hyphen -44
+KPX W i -26
+KPX W o -70
+KPX W oslash -69
+KPX W period -90
+KPX W r -55
+KPX W semicolon -97
+KPX W u -52
+KPX W y -47
+KPX X C -59
+KPX X O -57
+KPX X Odieresis -57
+KPX X Q -56
+KPX X a -10
+KPX X e -29
+KPX X hyphen -53
+KPX X o -35
+KPX X u -43
+KPX X y -95
+KPX Y A -72
+KPX Y AE -60
+KPX Y Aacute -72
+KPX Y Acircumflex -72
+KPX Y Adieresis -72
+KPX Y Agrave -72
+KPX Y Aring -72
+KPX Y Atilde -72
+KPX Y C -70
+KPX Y G -70
+KPX Y O -68
+KPX Y Oacute -68
+KPX Y Ocircumflex -68
+KPX Y Odieresis -68
+KPX Y Ograve -68
+KPX Y Oslash -74
+KPX Y Otilde -68
+KPX Y S -37
+KPX Y T 6
+KPX Y a -87
+KPX Y ae -84
+KPX Y colon -101
+KPX Y comma -109
+KPX Y e -92
+KPX Y g -102
+KPX Y guillemotleft -127
+KPX Y guilsinglleft -135
+KPX Y hyphen -83
+KPX Y i -27
+KPX Y o -95
+KPX Y oslash -70
+KPX Y p -75
+KPX Y period -99
+KPX Y semicolon -108
+KPX Y u -79
+KPX Y v -69
+KPX Z v -59
+KPX Z y -60
+KPX a j -20
+KPX a quoteright -33
+KPX a v -36
+KPX a w -36
+KPX a y -39
+KPX aacute v -36
+KPX aacute w -36
+KPX aacute y -39
+KPX adieresis v -36
+KPX adieresis w -36
+KPX adieresis y -39
+KPX ae v -10
+KPX ae w -10
+KPX ae y -13
+KPX agrave v -36
+KPX agrave w -36
+KPX agrave y -39
+KPX aring v -36
+KPX aring w -36
+KPX aring y -39
+KPX b v -28
+KPX b w -28
+KPX b y -31
+KPX c h 10
+KPX c k 3
+KPX comma one -49
+KPX comma quotedblright -25
+KPX comma quoteright -22
+KPX e quoteright -6
+KPX e t -3
+KPX e v -12
+KPX e w -12
+KPX e x -8
+KPX e y -15
+KPX eacute v -12
+KPX eacute w -12
+KPX eacute y -15
+KPX ecircumflex v -12
+KPX ecircumflex w -12
+KPX ecircumflex y -15
+KPX eight four 2
+KPX eight one -42
+KPX eight seven -27
+KPX f a -11
+KPX f aacute -11
+KPX f adieresis -11
+KPX f ae -10
+KPX f aring -11
+KPX f e -15
+KPX f eacute -15
+KPX f f 5
+KPX f i 14
+KPX f j 28
+KPX f l 24
+KPX f o -18
+KPX f oacute -18
+KPX f odieresis -18
+KPX f oe -15
+KPX f oslash -8
+KPX f quoteright -4
+KPX f s 0
+KPX f t 12
+KPX five four -2
+KPX five one -44
+KPX five seven -32
+KPX four four 6
+KPX four one -40
+KPX four seven -21
+KPX g a -13
+KPX g adieresis -13
+KPX g ae -14
+KPX g aring -13
+KPX g e -19
+KPX g eacute -19
+KPX g l -5
+KPX g oacute -23
+KPX g odieresis -23
+KPX g r 14
+KPX guillemotright A -86
+KPX guillemotright AE -79
+KPX guillemotright Aacute -86
+KPX guillemotright Adieresis -86
+KPX guillemotright Aring -86
+KPX guillemotright T -126
+KPX guillemotright V -115
+KPX guillemotright W -81
+KPX guillemotright Y -139
+KPX guilsinglright A -94
+KPX guilsinglright AE -87
+KPX guilsinglright Aacute -94
+KPX guilsinglright Adieresis -94
+KPX guilsinglright Aring -94
+KPX guilsinglright T -134
+KPX guilsinglright V -123
+KPX guilsinglright W -89
+KPX guilsinglright Y -147
+KPX h quoteright -33
+KPX h y -37
+KPX hyphen A -41
+KPX hyphen AE -35
+KPX hyphen Aacute -41
+KPX hyphen Adieresis -41
+KPX hyphen Aring -41
+KPX hyphen T -79
+KPX hyphen V -67
+KPX hyphen W -34
+KPX hyphen Y -97
+KPX i T -30
+KPX i j -15
+KPX k a 4
+KPX k aacute 4
+KPX k adieresis 4
+KPX k ae 7
+KPX k aring 4
+KPX k comma -21
+KPX k e -12
+KPX k eacute -12
+KPX k g -12
+KPX k hyphen -67
+KPX k o -19
+KPX k oacute -19
+KPX k odieresis -19
+KPX k period -10
+KPX k s 12
+KPX k u 0
+KPX k udieresis 0
+KPX l v -22
+KPX l y -25
+KPX m p -20
+KPX m v -39
+KPX m w -39
+KPX m y -42
+KPX n T -58
+KPX n p -18
+KPX n quoteright -30
+KPX n v -34
+KPX n w -34
+KPX n y -37
+KPX nine four -25
+KPX nine one -42
+KPX nine seven -23
+KPX o T -99
+KPX o quoteright -18
+KPX o t -13
+KPX o v -27
+KPX o w -27
+KPX o x -31
+KPX o y -30
+KPX oacute v -27
+KPX oacute w -27
+KPX oacute y -30
+KPX ocircumflex t -13
+KPX odieresis t -13
+KPX odieresis v -27
+KPX odieresis w -27
+KPX odieresis x -31
+KPX odieresis y -30
+KPX ograve v -27
+KPX ograve w -27
+KPX ograve y -30
+KPX one comma -63
+KPX one eight -60
+KPX one five -44
+KPX one four -79
+KPX one nine -50
+KPX one one -67
+KPX one period -54
+KPX one seven -48
+KPX one six -70
+KPX one three -42
+KPX one two -27
+KPX one zero -61
+KPX p t -19
+KPX p y -40
+KPX period one -61
+KPX period quotedblright -46
+KPX period quoteright -43
+KPX q c -10
+KPX q u -10
+KPX quotedblbase A -17
+KPX quotedblbase AE -4
+KPX quotedblbase T -88
+KPX quotedblbase V -112
+KPX quotedblbase W -67
+KPX quotedblbase Y -108
+KPX quotedblleft A -131
+KPX quotedblleft AE -135
+KPX quotedblleft Aacute -131
+KPX quotedblleft Adieresis -131
+KPX quotedblleft Aring -131
+KPX quotedblleft T -14
+KPX quotedblleft V -9
+KPX quotedblleft W -8
+KPX quotedblleft Y -9
+KPX quotedblright A -130
+KPX quotedblright AE -134
+KPX quotedblright Aacute -130
+KPX quotedblright Adieresis -130
+KPX quotedblright Aring -130
+KPX quotedblright T -13
+KPX quotedblright V -8
+KPX quotedblright W -7
+KPX quotedblright Y -9
+KPX quoteleft A -128
+KPX quoteleft AE -132
+KPX quoteleft Aacute -128
+KPX quoteleft Adieresis -128
+KPX quoteleft Aring -128
+KPX quoteleft T -11
+KPX quoteleft V -6
+KPX quoteleft W -5
+KPX quoteleft Y -6
+KPX quoteright A -127
+KPX quoteright AE -131
+KPX quoteright Aacute -127
+KPX quoteright Adieresis -127
+KPX quoteright Aring -127
+KPX quoteright comma -78
+KPX quoteright d -61
+KPX quoteright o -43
+KPX quoteright period -63
+KPX quoteright r -31
+KPX quoteright s -25
+KPX quoteright t -32
+KPX quoteright v -21
+KPX quoteright w -20
+KPX quoteright y -23
+KPX r a -16
+KPX r aacute -16
+KPX r acircumflex -16
+KPX r adieresis -16
+KPX r ae -15
+KPX r agrave -16
+KPX r aring -16
+KPX r c -10
+KPX r ccedilla -8
+KPX r colon -18
+KPX r comma -71
+KPX r d -14
+KPX r e -5
+KPX r eacute -5
+KPX r ecircumflex -5
+KPX r egrave -5
+KPX r f 1
+KPX r g -12
+KPX r h -22
+KPX r hyphen -30
+KPX r i 9
+KPX r j 23
+KPX r k -30
+KPX r l -30
+KPX r m 11
+KPX r n 17
+KPX r o -9
+KPX r oacute -9
+KPX r ocircumflex -9
+KPX r odieresis -9
+KPX r oe -8
+KPX r ograve -9
+KPX r oslash -12
+KPX r p 15
+KPX r period -62
+KPX r q -17
+KPX r quoteright 9
+KPX r r 9
+KPX r s -1
+KPX r semicolon -32
+KPX r t 8
+KPX r u 11
+KPX r v 18
+KPX r w 18
+KPX r x 11
+KPX r y 15
+KPX r z -12
+KPX s quoteright -16
+KPX s t -15
+KPX seven colon -74
+KPX seven comma -135
+KPX seven eight -29
+KPX seven five -19
+KPX seven four -86
+KPX seven one -23
+KPX seven period -121
+KPX seven seven -1
+KPX seven six -66
+KPX seven three -23
+KPX seven two -16
+KPX six four 4
+KPX six one -75
+KPX six seven -42
+KPX t S 8
+KPX t a 3
+KPX t aacute 3
+KPX t adieresis 3
+KPX t ae 5
+KPX t aring 3
+KPX t colon -10
+KPX t e -9
+KPX t eacute -9
+KPX t h 13
+KPX t o -13
+KPX t oacute -13
+KPX t odieresis -13
+KPX t quoteright -3
+KPX t semicolon -24
+KPX three four 1
+KPX three one -52
+KPX three seven -33
+KPX two four -39
+KPX two one -42
+KPX two seven -23
+KPX u quoteright -22
+KPX v a -32
+KPX v aacute -32
+KPX v acircumflex -32
+KPX v adieresis -32
+KPX v ae -36
+KPX v agrave -32
+KPX v aring -32
+KPX v atilde -32
+KPX v c -52
+KPX v colon -20
+KPX v comma -111
+KPX v e -42
+KPX v eacute -42
+KPX v ecircumflex -42
+KPX v egrave -42
+KPX v g -41
+KPX v hyphen -35
+KPX v l -33
+KPX v o -40
+KPX v oacute -40
+KPX v odieresis -40
+KPX v ograve -40
+KPX v oslash -45
+KPX v period -97
+KPX v s -17
+KPX v semicolon -35
+KPX w a -32
+KPX w aacute -32
+KPX w acircumflex -32
+KPX w adieresis -32
+KPX w ae -36
+KPX w agrave -32
+KPX w aring -32
+KPX w atilde -32
+KPX w c -49
+KPX w colon -20
+KPX w comma -103
+KPX w e -42
+KPX w eacute -42
+KPX w ecircumflex -42
+KPX w egrave -42
+KPX w g -41
+KPX w hyphen -31
+KPX w l -33
+KPX w o -40
+KPX w oacute -40
+KPX w odieresis -40
+KPX w ograve -40
+KPX w oslash -45
+KPX w period -89
+KPX w s -17
+KPX w semicolon -35
+KPX x a -5
+KPX x c -27
+KPX x e -24
+KPX x eacute -24
+KPX x o -30
+KPX x q -28
+KPX y a -25
+KPX y aacute -25
+KPX y acircumflex -25
+KPX y adieresis -25
+KPX y ae -29
+KPX y agrave -25
+KPX y aring -25
+KPX y atilde -25
+KPX y c -45
+KPX y colon -13
+KPX y comma -104
+KPX y e -35
+KPX y eacute -35
+KPX y ecircumflex -35
+KPX y egrave -35
+KPX y g -34
+KPX y hyphen -28
+KPX y l -26
+KPX y o -33
+KPX y oacute -33
+KPX y odieresis -33
+KPX y ograve -33
+KPX y oslash -38
+KPX y period -90
+KPX y s -10
+KPX y semicolon -28
+KPX zero four -3
+KPX zero one -40
+KPX zero seven -18
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplr8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uplr8a.pfb
new file mode 100644
index 00000000000..4101b733586
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplr8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplri8a.afm b/Master/tlpkg/tlgs/lib/fonts/uplri8a.afm
new file mode 100644
index 00000000000..063f437d1e3
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplri8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWPalladioL-Ital
+FullName URW Palladio L Italic
+FamilyName URW Palladio L
+Weight Regular
+ItalicAngle -9.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -170 -305 1010 941
+CapHeight 692
+XHeight 471
+Descender -276
+Ascender 733
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 76 -8 292 733 ;
+C 34 ; WX 500 ; N quotedbl ; B 140 508 455 733 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 495 692 ;
+C 36 ; WX 500 ; N dollar ; B 15 -113 452 733 ;
+C 37 ; WX 889 ; N percent ; B 74 -7 809 710 ;
+C 38 ; WX 778 ; N ampersand ; B 47 -18 766 692 ;
+C 39 ; WX 278 ; N quoteright ; B 78 488 258 733 ;
+C 40 ; WX 333 ; N parenleft ; B 54 -106 331 733 ;
+C 41 ; WX 333 ; N parenright ; B 2 -106 279 733 ;
+C 42 ; WX 389 ; N asterisk ; B 76 368 400 706 ;
+C 43 ; WX 606 ; N plus ; B 51 0 555 504 ;
+C 44 ; WX 250 ; N comma ; B 8 -143 203 123 ;
+C 45 ; WX 333 ; N hyphen ; B 19 223 304 281 ;
+C 46 ; WX 250 ; N period ; B 53 -5 158 112 ;
+C 47 ; WX 296 ; N slash ; B -40 -119 392 733 ;
+C 48 ; WX 500 ; N zero ; B 36 -11 480 699 ;
+C 49 ; WX 500 ; N one ; B 54 -3 398 699 ;
+C 50 ; WX 500 ; N two ; B 12 -3 437 699 ;
+C 51 ; WX 500 ; N three ; B 22 -11 447 699 ;
+C 52 ; WX 500 ; N four ; B 15 -3 478 699 ;
+C 53 ; WX 500 ; N five ; B 14 -11 491 693 ;
+C 54 ; WX 500 ; N six ; B 49 -11 469 699 ;
+C 55 ; WX 500 ; N seven ; B 53 -3 502 692 ;
+C 56 ; WX 500 ; N eight ; B 36 -11 469 699 ;
+C 57 ; WX 500 ; N nine ; B 32 -11 468 699 ;
+C 58 ; WX 250 ; N colon ; B 44 -5 207 458 ;
+C 59 ; WX 250 ; N semicolon ; B -9 -146 219 456 ;
+C 60 ; WX 606 ; N less ; B 53 -2 554 524 ;
+C 61 ; WX 606 ; N equal ; B 51 126 555 378 ;
+C 62 ; WX 606 ; N greater ; B 53 -2 554 524 ;
+C 63 ; WX 500 ; N question ; B 114 -8 427 706 ;
+C 64 ; WX 747 ; N at ; B 27 -18 718 706 ;
+C 65 ; WX 722 ; N A ; B -19 -3 677 705 ;
+C 66 ; WX 611 ; N B ; B 26 -6 559 692 ;
+C 67 ; WX 667 ; N C ; B 45 -18 651 706 ;
+C 68 ; WX 778 ; N D ; B 28 -3 741 693 ;
+C 69 ; WX 611 ; N E ; B 30 -3 570 692 ;
+C 70 ; WX 556 ; N F ; B 0 -3 548 692 ;
+C 71 ; WX 722 ; N G ; B 50 -18 694 706 ;
+C 72 ; WX 778 ; N H ; B -3 -3 800 692 ;
+C 73 ; WX 333 ; N I ; B 7 -3 354 692 ;
+C 74 ; WX 333 ; N J ; B -35 -206 358 692 ;
+C 75 ; WX 667 ; N K ; B 13 -3 683 692 ;
+C 76 ; WX 556 ; N L ; B 16 -3 523 692 ;
+C 77 ; WX 944 ; N M ; B -19 -18 940 692 ;
+C 78 ; WX 778 ; N N ; B 2 -11 804 692 ;
+C 79 ; WX 778 ; N O ; B 53 -18 748 706 ;
+C 80 ; WX 611 ; N P ; B 9 -3 594 695 ;
+C 81 ; WX 778 ; N Q ; B 53 -201 748 706 ;
+C 82 ; WX 667 ; N R ; B 9 -3 639 694 ;
+C 83 ; WX 556 ; N S ; B 42 -18 506 706 ;
+C 84 ; WX 611 ; N T ; B 53 -3 635 692 ;
+C 85 ; WX 778 ; N U ; B 88 -19 798 692 ;
+C 86 ; WX 722 ; N V ; B 75 -8 754 692 ;
+C 87 ; WX 944 ; N W ; B 71 -8 980 700 ;
+C 88 ; WX 722 ; N X ; B 20 -3 734 692 ;
+C 89 ; WX 667 ; N Y ; B 52 -3 675 705 ;
+C 90 ; WX 667 ; N Z ; B 20 -3 637 692 ;
+C 91 ; WX 333 ; N bracketleft ; B 18 -100 326 733 ;
+C 92 ; WX 606 ; N backslash ; B 81 0 513 733 ;
+C 93 ; WX 333 ; N bracketright ; B 7 -100 315 733 ;
+C 94 ; WX 606 ; N asciicircum ; B 51 283 554 689 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 278 ; N quoteleft ; B 78 488 258 733 ;
+C 97 ; WX 444 ; N a ; B 4 -11 406 482 ;
+C 98 ; WX 463 ; N b ; B 37 -11 433 733 ;
+C 99 ; WX 407 ; N c ; B 25 -11 389 482 ;
+C 100 ; WX 500 ; N d ; B 17 -11 483 733 ;
+C 101 ; WX 389 ; N e ; B 15 -11 374 482 ;
+C 102 ; WX 278 ; N f ; B -162 -276 413 733 ;
+C 103 ; WX 500 ; N g ; B -37 -276 498 482 ;
+C 104 ; WX 500 ; N h ; B 10 -9 471 733 ;
+C 105 ; WX 278 ; N i ; B 34 -9 264 712 ;
+C 106 ; WX 278 ; N j ; B -70 -276 265 712 ;
+C 107 ; WX 444 ; N k ; B 8 -9 449 733 ;
+C 108 ; WX 278 ; N l ; B 36 -9 251 733 ;
+C 109 ; WX 778 ; N m ; B 24 -9 740 482 ;
+C 110 ; WX 556 ; N n ; B 24 -9 514 482 ;
+C 111 ; WX 444 ; N o ; B 17 -11 411 482 ;
+C 112 ; WX 500 ; N p ; B -7 -276 465 482 ;
+C 113 ; WX 463 ; N q ; B 24 -276 432 482 ;
+C 114 ; WX 389 ; N r ; B 26 -9 384 482 ;
+C 115 ; WX 389 ; N s ; B 9 -11 345 482 ;
+C 116 ; WX 333 ; N t ; B 41 -9 310 646 ;
+C 117 ; WX 556 ; N u ; B 32 -11 512 482 ;
+C 118 ; WX 500 ; N v ; B 21 -11 477 482 ;
+C 119 ; WX 722 ; N w ; B 21 -11 699 482 ;
+C 120 ; WX 500 ; N x ; B 9 -11 484 482 ;
+C 121 ; WX 500 ; N y ; B -8 -276 490 482 ;
+C 122 ; WX 444 ; N z ; B -1 -11 416 482 ;
+C 123 ; WX 333 ; N braceleft ; B 15 -100 319 733 ;
+C 124 ; WX 606 ; N bar ; B 275 0 331 733 ;
+C 125 ; WX 333 ; N braceright ; B 14 -100 318 733 ;
+C 126 ; WX 606 ; N asciitilde ; B 51 169 555 328 ;
+C 161 ; WX 333 ; N exclamdown ; B 15 -276 233 467 ;
+C 162 ; WX 500 ; N cent ; B 56 -96 418 551 ;
+C 163 ; WX 500 ; N sterling ; B 2 -18 479 708 ;
+C 164 ; WX 167 ; N fraction ; B -170 0 337 699 ;
+C 165 ; WX 500 ; N yen ; B 35 -3 512 701 ;
+C 166 ; WX 500 ; N florin ; B 5 -276 470 711 ;
+C 167 ; WX 500 ; N section ; B 14 -220 463 706 ;
+C 168 ; WX 500 ; N currency ; B 14 115 486 577 ;
+C 169 ; WX 333 ; N quotesingle ; B 140 508 288 733 ;
+C 170 ; WX 500 ; N quotedblleft ; B 98 488 475 733 ;
+C 171 ; WX 500 ; N guillemotleft ; B 57 70 437 440 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 57 70 270 440 ;
+C 173 ; WX 333 ; N guilsinglright ; B 63 70 276 440 ;
+C 174 ; WX 528 ; N fi ; B -162 -276 502 733 ;
+C 175 ; WX 545 ; N fl ; B -162 -276 520 734 ;
+C 177 ; WX 500 ; N endash ; B -10 228 510 278 ;
+C 178 ; WX 500 ; N dagger ; B 48 0 469 692 ;
+C 179 ; WX 500 ; N daggerdbl ; B 10 -162 494 692 ;
+C 180 ; WX 250 ; N periodcentered ; B 53 195 158 312 ;
+C 182 ; WX 500 ; N paragraph ; B 33 -224 611 692 ;
+C 183 ; WX 500 ; N bullet ; B 86 182 430 526 ;
+C 184 ; WX 278 ; N quotesinglbase ; B 27 -122 211 120 ;
+C 185 ; WX 500 ; N quotedblbase ; B 43 -122 424 120 ;
+C 186 ; WX 500 ; N quotedblright ; B 98 488 475 733 ;
+C 187 ; WX 500 ; N guillemotright ; B 63 70 443 440 ;
+C 188 ; WX 1000 ; N ellipsis ; B 102 -5 873 112 ;
+C 189 ; WX 1000 ; N perthousand ; B 72 -6 929 717 ;
+C 191 ; WX 500 ; N questiondown ; B 57 -246 370 467 ;
+C 193 ; WX 333 ; N grave ; B 86 518 310 687 ;
+C 194 ; WX 333 ; N acute ; B 122 518 346 687 ;
+C 195 ; WX 333 ; N circumflex ; B 56 510 350 679 ;
+C 196 ; WX 333 ; N tilde ; B 63 535 390 638 ;
+C 197 ; WX 333 ; N macron ; B 74 538 386 589 ;
+C 198 ; WX 333 ; N breve ; B 92 518 393 677 ;
+C 199 ; WX 333 ; N dotaccent ; B 175 537 283 645 ;
+C 200 ; WX 333 ; N dieresis ; B 78 537 378 637 ;
+C 202 ; WX 333 ; N ring ; B 159 518 359 718 ;
+C 203 ; WX 333 ; N cedilla ; B -9 -216 202 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 46 518 385 731 ;
+C 206 ; WX 333 ; N ogonek ; B 38 -207 196 -18 ;
+C 207 ; WX 333 ; N caron ; B 104 510 409 679 ;
+C 208 ; WX 1000 ; N emdash ; B -10 228 1010 278 ;
+C 225 ; WX 941 ; N AE ; B -4 -3 902 692 ;
+C 227 ; WX 333 ; N ordfeminine ; B 60 404 321 699 ;
+C 232 ; WX 556 ; N Lslash ; B -16 -3 523 692 ;
+C 233 ; WX 778 ; N Oslash ; B 32 -39 762 721 ;
+C 234 ; WX 1028 ; N OE ; B 56 -18 989 707 ;
+C 235 ; WX 333 ; N ordmasculine ; B 66 404 322 699 ;
+C 241 ; WX 638 ; N ae ; B 1 -11 623 482 ;
+C 245 ; WX 278 ; N dotlessi ; B 34 -9 241 482 ;
+C 248 ; WX 278 ; N lslash ; B -10 -9 302 733 ;
+C 249 ; WX 444 ; N oslash ; B -18 -24 460 510 ;
+C 250 ; WX 669 ; N oe ; B 17 -11 654 482 ;
+C 251 ; WX 500 ; N germandbls ; B -160 -276 488 733 ;
+C -1 ; WX 778 ; N Udieresis ; B 88 -19 798 847 ;
+C -1 ; WX 778 ; N Uacute ; B 88 -19 798 897 ;
+C -1 ; WX 556 ; N Scedilla ; B 42 -216 506 706 ;
+C -1 ; WX 611 ; N Tcaron ; B 53 -3 635 889 ;
+C -1 ; WX 556 ; N Scaron ; B 42 -18 559 907 ;
+C -1 ; WX 667 ; N Rcaron ; B 9 -3 639 889 ;
+C -1 ; WX 667 ; N Racute ; B 9 -3 639 897 ;
+C -1 ; WX 556 ; N Sacute ; B 42 -18 556 897 ;
+C -1 ; WX 778 ; N Otilde ; B 53 -18 748 866 ;
+C -1 ; WX 556 ; N ucircumflex ; B 32 -11 512 679 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 53 -18 748 941 ;
+C -1 ; WX 778 ; N Uhungarumlaut ; B 88 -19 798 941 ;
+C -1 ; WX 667 ; N Yacute ; B 52 -3 675 897 ;
+C -1 ; WX 778 ; N Eth ; B 19 -3 741 693 ;
+C -1 ; WX 778 ; N Dcroat ; B 19 -3 741 693 ;
+C -1 ; WX 667 ; N Zacute ; B 20 -3 637 897 ;
+C -1 ; WX 778 ; N Uring ; B 88 -19 798 928 ;
+C -1 ; WX 500 ; N gbreve ; B -37 -276 498 677 ;
+C -1 ; WX 389 ; N eogonek ; B 15 -187 374 482 ;
+C -1 ; WX 389 ; N edotaccent ; B 15 -11 374 645 ;
+C -1 ; WX 389 ; N ecaron ; B 15 -11 437 679 ;
+C -1 ; WX 778 ; N Ugrave ; B 88 -19 798 897 ;
+C -1 ; WX 611 ; N Thorn ; B 9 -3 570 692 ;
+C -1 ; WX 389 ; N eacute ; B 15 -11 394 687 ;
+C -1 ; WX 389 ; N edieresis ; B 15 -11 406 637 ;
+C -1 ; WX 577 ; N dcaron ; B 17 -11 637 733 ;
+C -1 ; WX 407 ; N ccedilla ; B 25 -216 389 482 ;
+C -1 ; WX 407 ; N ccaron ; B 25 -11 466 679 ;
+C -1 ; WX 407 ; N cacute ; B 25 -11 423 687 ;
+C -1 ; WX 444 ; N aogonek ; B 4 -187 406 482 ;
+C -1 ; WX 444 ; N aring ; B 4 -11 406 718 ;
+C -1 ; WX 444 ; N atilde ; B 4 -11 446 638 ;
+C -1 ; WX 444 ; N abreve ; B 4 -11 449 677 ;
+C -1 ; WX 389 ; N egrave ; B 15 -11 374 687 ;
+C -1 ; WX 444 ; N agrave ; B 4 -11 406 687 ;
+C -1 ; WX 444 ; N aacute ; B 4 -11 448 687 ;
+C -1 ; WX 444 ; N adieresis ; B 4 -11 434 637 ;
+C -1 ; WX 778 ; N Uogonek ; B 88 -188 798 692 ;
+C -1 ; WX 556 ; N ugrave ; B 32 -11 512 687 ;
+C -1 ; WX 556 ; N uacute ; B 32 -11 526 687 ;
+C -1 ; WX 556 ; N udieresis ; B 32 -11 512 637 ;
+C -1 ; WX 361 ; N tcaron ; B 41 -9 421 733 ;
+C -1 ; WX 389 ; N scommaaccent ; B 9 -305 345 482 ;
+C -1 ; WX 667 ; N Zcaron ; B 20 -3 637 907 ;
+C -1 ; WX 389 ; N ecircumflex ; B 15 -11 398 679 ;
+C -1 ; WX 778 ; N Ucircumflex ; B 88 -19 798 889 ;
+C -1 ; WX 444 ; N acircumflex ; B 4 -11 406 679 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 20 -3 637 855 ;
+C -1 ; WX 389 ; N scaron ; B 9 -11 419 679 ;
+C -1 ; WX 722 ; N Amacron ; B -19 -3 677 799 ;
+C -1 ; WX 389 ; N sacute ; B 9 -11 419 687 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 53 -305 635 692 ;
+C -1 ; WX 667 ; N Ydieresis ; B 52 -3 675 847 ;
+C -1 ; WX 500 ; N thorn ; B -39 -276 433 733 ;
+C -1 ; WX 611 ; N Emacron ; B 30 -3 570 799 ;
+C -1 ; WX 778 ; N Ograve ; B 53 -18 748 897 ;
+C -1 ; WX 778 ; N Oacute ; B 53 -18 748 897 ;
+C -1 ; WX 778 ; N Odieresis ; B 53 -18 748 847 ;
+C -1 ; WX 778 ; N Ntilde ; B 2 -11 804 866 ;
+C -1 ; WX 778 ; N Ncaron ; B 2 -11 804 889 ;
+C -1 ; WX 778 ; N Nacute ; B 2 -11 804 897 ;
+C -1 ; WX 556 ; N Lcaron ; B 16 -3 536 713 ;
+C -1 ; WX 556 ; N Lacute ; B 16 -3 523 897 ;
+C -1 ; WX 333 ; N Idotaccent ; B 7 -3 354 855 ;
+C -1 ; WX 389 ; N racute ; B 26 -9 419 687 ;
+C -1 ; WX 333 ; N Icircumflex ; B 7 -3 390 889 ;
+C -1 ; WX 444 ; N ohungarumlaut ; B 17 -11 484 731 ;
+C -1 ; WX 444 ; N otilde ; B 17 -11 446 638 ;
+C -1 ; WX 500 ; N Euro ; B 42 -21 615 709 ;
+C -1 ; WX 444 ; N ocircumflex ; B 17 -11 411 679 ;
+C -1 ; WX 300 ; N onesuperior ; B 61 278 285 699 ;
+C -1 ; WX 300 ; N twosuperior ; B 13 278 290 699 ;
+C -1 ; WX 300 ; N threesuperior ; B 28 273 304 699 ;
+C -1 ; WX 333 ; N Igrave ; B 7 -3 354 897 ;
+C -1 ; WX 333 ; N Iacute ; B 7 -3 406 897 ;
+C -1 ; WX 333 ; N Imacron ; B 7 -3 399 799 ;
+C -1 ; WX 333 ; N Iogonek ; B 7 -188 354 692 ;
+C -1 ; WX 333 ; N Idieresis ; B 7 -3 398 847 ;
+C -1 ; WX 722 ; N Gbreve ; B 50 -18 694 887 ;
+C -1 ; WX 778 ; N Umacron ; B 88 -19 798 799 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 13 -305 683 692 ;
+C -1 ; WX 444 ; N ograve ; B 17 -11 411 687 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 42 -305 506 706 ;
+C -1 ; WX 611 ; N Eogonek ; B 30 -187 570 692 ;
+C -1 ; WX 444 ; N oacute ; B 17 -11 414 687 ;
+C -1 ; WX 611 ; N Edotaccent ; B 30 -3 570 855 ;
+C -1 ; WX 278 ; N iogonek ; B 34 -187 264 712 ;
+C -1 ; WX 500 ; N gcommaaccent ; B -37 -276 498 753 ;
+C -1 ; WX 444 ; N odieresis ; B 17 -11 434 637 ;
+C -1 ; WX 556 ; N ntilde ; B 24 -9 514 638 ;
+C -1 ; WX 556 ; N ncaron ; B 24 -9 521 679 ;
+C -1 ; WX 611 ; N Ecaron ; B 30 -3 570 889 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 30 -3 570 889 ;
+C -1 ; WX 389 ; N scedilla ; B 9 -216 345 482 ;
+C -1 ; WX 389 ; N rcaron ; B 26 -9 437 679 ;
+C -1 ; WX 611 ; N Egrave ; B 30 -3 570 897 ;
+C -1 ; WX 611 ; N Eacute ; B 30 -3 570 897 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 50 -305 694 706 ;
+C -1 ; WX 667 ; N Rcommaaccent ; B 9 -305 639 694 ;
+C -1 ; WX 611 ; N Edieresis ; B 30 -3 570 847 ;
+C -1 ; WX 556 ; N nacute ; B 24 -9 514 687 ;
+C -1 ; WX 556 ; N uogonek ; B 32 -187 512 482 ;
+C -1 ; WX 556 ; N umacron ; B 32 -11 512 589 ;
+C -1 ; WX 778 ; N Dcaron ; B 28 -3 741 889 ;
+C -1 ; WX 346 ; N lcaron ; B 36 -9 406 733 ;
+C -1 ; WX 667 ; N Ccaron ; B 45 -18 651 889 ;
+C -1 ; WX 667 ; N Cacute ; B 45 -18 651 897 ;
+C -1 ; WX 667 ; N Ccedilla ; B 45 -216 651 706 ;
+C -1 ; WX 400 ; N degree ; B 90 389 390 689 ;
+C -1 ; WX 722 ; N Aogonek ; B -19 -187 728 705 ;
+C -1 ; WX 606 ; N minus ; B 51 224 555 280 ;
+C -1 ; WX 606 ; N multiply ; B 83 36 523 474 ;
+C -1 ; WX 606 ; N divide ; B 51 0 555 504 ;
+C -1 ; WX 722 ; N Aring ; B -19 -3 677 937 ;
+C -1 ; WX 1000 ; N trademark ; B 52 285 951 689 ;
+C -1 ; WX 389 ; N rcommaaccent ; B -5 -305 384 482 ;
+C -1 ; WX 278 ; N lacute ; B 36 -9 379 897 ;
+C -1 ; WX 444 ; N omacron ; B 17 -11 442 589 ;
+C -1 ; WX 722 ; N Atilde ; B -19 -3 677 866 ;
+C -1 ; WX 278 ; N icircumflex ; B 29 -9 323 679 ;
+C -1 ; WX 278 ; N igrave ; B 34 -9 271 687 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 24 -305 514 482 ;
+C -1 ; WX 278 ; N lcommaaccent ; B -28 -305 251 733 ;
+C -1 ; WX 606 ; N plusminus ; B 51 0 555 512 ;
+C -1 ; WX 750 ; N onehalf ; B 31 -2 721 699 ;
+C -1 ; WX 750 ; N onequarter ; B 31 -2 715 699 ;
+C -1 ; WX 750 ; N threequarters ; B 35 -2 715 699 ;
+C -1 ; WX 278 ; N iacute ; B 34 -9 331 687 ;
+C -1 ; WX 722 ; N Abreve ; B -19 -3 677 887 ;
+C -1 ; WX 444 ; N kcommaaccent ; B 8 -305 449 733 ;
+C -1 ; WX 778 ; N Omacron ; B 53 -18 748 799 ;
+C -1 ; WX 278 ; N imacron ; B 34 -9 359 589 ;
+C -1 ; WX 389 ; N emacron ; B 15 -11 414 589 ;
+C -1 ; WX 444 ; N amacron ; B 4 -11 442 589 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 20 -305 310 646 ;
+C -1 ; WX 500 ; N ydieresis ; B -8 -276 490 637 ;
+C -1 ; WX 444 ; N zdotaccent ; B -1 -11 416 645 ;
+C -1 ; WX 444 ; N zcaron ; B -1 -11 447 679 ;
+C -1 ; WX 444 ; N zacute ; B -1 -11 416 687 ;
+C -1 ; WX 500 ; N yacute ; B -8 -276 490 687 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 32 -11 536 731 ;
+C -1 ; WX 444 ; N eth ; B 17 -11 478 733 ;
+C -1 ; WX 556 ; N uring ; B 32 -11 512 718 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 53 -18 748 889 ;
+C -1 ; WX 333 ; N commaaccent ; B 20 -305 200 -60 ;
+C -1 ; WX 747 ; N copyright ; B 11 -18 736 706 ;
+C -1 ; WX 747 ; N registered ; B 11 -18 736 706 ;
+C -1 ; WX 722 ; N Acircumflex ; B -19 -3 677 889 ;
+C -1 ; WX 278 ; N idieresis ; B 34 -9 351 657 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 606 ; N notequal ; B 51 -33 555 541 ;
+C -1 ; WX 549 ; N radical ; B 5 -48 520 918 ;
+C -1 ; WX 722 ; N Agrave ; B -19 -3 677 897 ;
+C -1 ; WX 722 ; N Aacute ; B -19 -3 677 897 ;
+C -1 ; WX 606 ; N lessequal ; B 53 0 554 613 ;
+C -1 ; WX 606 ; N greaterequal ; B 53 0 554 613 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 118 555 378 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 778 ; N Ncommaaccent ; B 2 -305 804 692 ;
+C -1 ; WX 500 ; N dcroat ; B 17 -11 540 733 ;
+C -1 ; WX 606 ; N brokenbar ; B 275 0 331 733 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B 16 -305 523 692 ;
+C -1 ; WX 722 ; N Adieresis ; B -19 -3 677 847 ;
+C -1 ; WX 556 ; N mu ; B 15 -226 512 482 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -44
+KPX A Ccedilla -44
+KPX A G -47
+KPX A O -47
+KPX A Odieresis -47
+KPX A Q -47
+KPX A T -35
+KPX A U -51
+KPX A Uacute -51
+KPX A Ucircumflex -51
+KPX A Udieresis -51
+KPX A Ugrave -51
+KPX A V -93
+KPX A W -71
+KPX A Y -58
+KPX A a 6
+KPX A b -15
+KPX A c -17
+KPX A ccedilla -17
+KPX A comma -20
+KPX A d -1
+KPX A e -11
+KPX A g -34
+KPX A guillemotleft -56
+KPX A guilsinglleft -56
+KPX A hyphen -7
+KPX A o -16
+KPX A period -7
+KPX A q -3
+KPX A quotedblright -76
+KPX A quoteright -66
+KPX A t -17
+KPX A u -23
+KPX A v -42
+KPX A w -38
+KPX A y -37
+KPX Aacute C -44
+KPX Aacute G -47
+KPX Aacute O -47
+KPX Aacute Q -47
+KPX Aacute T -35
+KPX Aacute U -51
+KPX Aacute V -93
+KPX Aacute W -71
+KPX Aacute Y -58
+KPX Aacute a 6
+KPX Aacute b -15
+KPX Aacute c -17
+KPX Aacute comma -20
+KPX Aacute d -1
+KPX Aacute e -11
+KPX Aacute g -34
+KPX Aacute guillemotleft -56
+KPX Aacute guilsinglleft -56
+KPX Aacute hyphen -7
+KPX Aacute o -16
+KPX Aacute period -7
+KPX Aacute q -3
+KPX Aacute quoteright -66
+KPX Aacute t -17
+KPX Aacute u -23
+KPX Aacute v -42
+KPX Aacute w -38
+KPX Aacute y -37
+KPX Acircumflex C -44
+KPX Acircumflex G -47
+KPX Acircumflex O -47
+KPX Acircumflex Q -47
+KPX Acircumflex T -35
+KPX Acircumflex U -51
+KPX Acircumflex V -93
+KPX Acircumflex W -71
+KPX Acircumflex Y -58
+KPX Acircumflex comma -20
+KPX Acircumflex period -7
+KPX Adieresis C -44
+KPX Adieresis G -47
+KPX Adieresis O -47
+KPX Adieresis Q -47
+KPX Adieresis T -35
+KPX Adieresis U -51
+KPX Adieresis V -93
+KPX Adieresis W -71
+KPX Adieresis Y -58
+KPX Adieresis a 6
+KPX Adieresis b -15
+KPX Adieresis c -17
+KPX Adieresis comma -20
+KPX Adieresis d -1
+KPX Adieresis g -34
+KPX Adieresis guillemotleft -56
+KPX Adieresis guilsinglleft -56
+KPX Adieresis hyphen -7
+KPX Adieresis o -16
+KPX Adieresis period -7
+KPX Adieresis q -3
+KPX Adieresis quotedblright -76
+KPX Adieresis quoteright -66
+KPX Adieresis t -17
+KPX Adieresis u -23
+KPX Adieresis v -42
+KPX Adieresis w -38
+KPX Adieresis y -37
+KPX Agrave C -44
+KPX Agrave G -47
+KPX Agrave O -47
+KPX Agrave Q -47
+KPX Agrave T -35
+KPX Agrave U -51
+KPX Agrave V -93
+KPX Agrave W -71
+KPX Agrave Y -58
+KPX Agrave comma -20
+KPX Agrave period -7
+KPX Aring C -44
+KPX Aring G -47
+KPX Aring O -47
+KPX Aring Q -47
+KPX Aring T -35
+KPX Aring U -51
+KPX Aring V -93
+KPX Aring W -71
+KPX Aring Y -58
+KPX Aring a 6
+KPX Aring b -15
+KPX Aring c -17
+KPX Aring comma -20
+KPX Aring d -1
+KPX Aring e -11
+KPX Aring g -34
+KPX Aring guillemotleft -56
+KPX Aring guilsinglleft -56
+KPX Aring hyphen -7
+KPX Aring o -16
+KPX Aring period -7
+KPX Aring q -3
+KPX Aring quotedblright -76
+KPX Aring quoteright -66
+KPX Aring t -17
+KPX Aring u -23
+KPX Aring v -42
+KPX Aring w -38
+KPX Aring y -37
+KPX Atilde C -44
+KPX Atilde G -47
+KPX Atilde O -47
+KPX Atilde Q -47
+KPX Atilde T -35
+KPX Atilde U -51
+KPX Atilde V -93
+KPX Atilde W -71
+KPX Atilde Y -58
+KPX Atilde comma -20
+KPX Atilde period -7
+KPX B A -42
+KPX B AE -49
+KPX B Aacute -42
+KPX B Acircumflex -42
+KPX B Adieresis -42
+KPX B Aring -42
+KPX B Atilde -42
+KPX B O -14
+KPX B OE -14
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -13
+KPX B V -40
+KPX B W -38
+KPX B Y -17
+KPX C A -1
+KPX C AE -9
+KPX C Aacute -1
+KPX C Adieresis -1
+KPX C Aring -1
+KPX C H -11
+KPX C K -19
+KPX C O -29
+KPX C Oacute -29
+KPX C Odieresis -29
+KPX Ccedilla A -4
+KPX D A -80
+KPX D Aacute -80
+KPX D Acircumflex -80
+KPX D Adieresis -80
+KPX D Agrave -80
+KPX D Aring -80
+KPX D Atilde -80
+KPX D J -35
+KPX D T -9
+KPX D V -61
+KPX D W -43
+KPX D X -67
+KPX D Y -36
+KPX F A -93
+KPX F Aacute -93
+KPX F Acircumflex -93
+KPX F Adieresis -93
+KPX F Agrave -93
+KPX F Aring -93
+KPX F Atilde -93
+KPX F J -12
+KPX F O -27
+KPX F Odieresis -27
+KPX F a -38
+KPX F aacute -38
+KPX F adieresis -38
+KPX F ae -54
+KPX F aring -38
+KPX F comma -110
+KPX F e -36
+KPX F eacute -36
+KPX F hyphen -4
+KPX F i -41
+KPX F j -44
+KPX F o -32
+KPX F oacute -32
+KPX F odieresis -32
+KPX F oe -33
+KPX F oslash -35
+KPX F period -91
+KPX F r -34
+KPX F u -40
+KPX G A -15
+KPX G AE -22
+KPX G Aacute -15
+KPX G Acircumflex -15
+KPX G Adieresis -15
+KPX G Agrave -15
+KPX G Aring -15
+KPX G Atilde -15
+KPX G T -16
+KPX G V -20
+KPX G W -18
+KPX G Y -11
+KPX J A -29
+KPX J AE -37
+KPX J Adieresis -29
+KPX J Aring -29
+KPX K C -39
+KPX K G -43
+KPX K O -39
+KPX K OE -40
+KPX K Oacute -39
+KPX K Odieresis -39
+KPX K S 9
+KPX K T 15
+KPX K a 18
+KPX K adieresis 18
+KPX K ae 13
+KPX K aring 18
+KPX K e 0
+KPX K hyphen -56
+KPX K o -4
+KPX K oacute -4
+KPX K odieresis -4
+KPX K u -11
+KPX K udieresis -11
+KPX K y -25
+KPX L A 23
+KPX L AE 16
+KPX L Aacute 23
+KPX L Adieresis 23
+KPX L Aring 23
+KPX L C -6
+KPX L Ccedilla -7
+KPX L G -9
+KPX L O -8
+KPX L Oacute -8
+KPX L Ocircumflex -8
+KPX L Odieresis -8
+KPX L Ograve -8
+KPX L Otilde -8
+KPX L S -6
+KPX L T -41
+KPX L U -23
+KPX L Udieresis -23
+KPX L V -87
+KPX L W -62
+KPX L Y -63
+KPX L hyphen 15
+KPX L quotedblright -117
+KPX L quoteright -107
+KPX L u -24
+KPX L udieresis -24
+KPX L y -30
+KPX N A -31
+KPX N AE -38
+KPX N Aacute -31
+KPX N Adieresis -31
+KPX N Aring -31
+KPX N C -19
+KPX N Ccedilla -19
+KPX N G -23
+KPX N O -23
+KPX N Oacute -23
+KPX N Odieresis -23
+KPX N a -22
+KPX N aacute -22
+KPX N adieresis -22
+KPX N ae -26
+KPX N aring -22
+KPX N comma -47
+KPX N e -26
+KPX N eacute -26
+KPX N o -24
+KPX N oacute -24
+KPX N odieresis -24
+KPX N oslash -23
+KPX N period -29
+KPX N u -33
+KPX N udieresis -33
+KPX O A -65
+KPX O AE -73
+KPX O Aacute -65
+KPX O Adieresis -65
+KPX O Aring -65
+KPX O T -5
+KPX O V -54
+KPX O W -36
+KPX O X -62
+KPX O Y -30
+KPX Oacute A -65
+KPX Oacute T -5
+KPX Oacute V -54
+KPX Oacute W -36
+KPX Oacute Y -30
+KPX Ocircumflex T -5
+KPX Ocircumflex V -54
+KPX Ocircumflex Y -30
+KPX Odieresis A -65
+KPX Odieresis T -5
+KPX Odieresis V -54
+KPX Odieresis W -36
+KPX Odieresis X -62
+KPX Odieresis Y -30
+KPX Ograve T -5
+KPX Ograve V -54
+KPX Ograve Y -30
+KPX Oslash A -66
+KPX Otilde T -5
+KPX Otilde V -54
+KPX Otilde Y -30
+KPX P A -111
+KPX P AE -119
+KPX P Aacute -111
+KPX P Adieresis -111
+KPX P Aring -111
+KPX P J -41
+KPX P a -44
+KPX P aacute -44
+KPX P adieresis -44
+KPX P ae -22
+KPX P aring -44
+KPX P comma -135
+KPX P e -44
+KPX P eacute -44
+KPX P hyphen -30
+KPX P o -41
+KPX P oacute -41
+KPX P odieresis -41
+KPX P oe -42
+KPX P oslash -45
+KPX P period -116
+KPX R C -35
+KPX R Ccedilla -35
+KPX R G -39
+KPX R O -39
+KPX R OE -39
+KPX R Oacute -39
+KPX R Odieresis -39
+KPX R T -27
+KPX R U -42
+KPX R Udieresis -42
+KPX R V -59
+KPX R W -57
+KPX R Y -35
+KPX R a 14
+KPX R aacute 14
+KPX R adieresis 14
+KPX R ae 10
+KPX R aring 14
+KPX R e -2
+KPX R eacute -2
+KPX R hyphen -43
+KPX R o -7
+KPX R oacute -7
+KPX R odieresis -7
+KPX R oe -7
+KPX R u -14
+KPX R uacute -14
+KPX R udieresis -14
+KPX R y -29
+KPX S A -42
+KPX S AE -50
+KPX S Aacute -42
+KPX S Adieresis -42
+KPX S Aring -42
+KPX S T -17
+KPX S V -21
+KPX S W -19
+KPX S Y -13
+KPX S t -34
+KPX T A -61
+KPX T AE -68
+KPX T Aacute -61
+KPX T Acircumflex -61
+KPX T Adieresis -61
+KPX T Agrave -61
+KPX T Aring -61
+KPX T Atilde -61
+KPX T C -13
+KPX T G -18
+KPX T J 3
+KPX T O -19
+KPX T OE -19
+KPX T Oacute -19
+KPX T Ocircumflex -19
+KPX T Odieresis -19
+KPX T Ograve -19
+KPX T Oslash -20
+KPX T Otilde -19
+KPX T S -16
+KPX T V 15
+KPX T W 17
+KPX T Y 23
+KPX T a -83
+KPX T ae -87
+KPX T c -106
+KPX T colon -93
+KPX T comma -111
+KPX T e -100
+KPX T g -125
+KPX T guillemotleft -124
+KPX T guilsinglleft -124
+KPX T hyphen -75
+KPX T i -41
+KPX T j -42
+KPX T o -102
+KPX T oslash -74
+KPX T period -97
+KPX T r -103
+KPX T s -84
+KPX T semicolon -103
+KPX T u -112
+KPX T v -109
+KPX T w -109
+KPX T y -99
+KPX U A 16
+KPX U AE 8
+KPX U Aacute 16
+KPX U Acircumflex 16
+KPX U Adieresis 16
+KPX U Aring 16
+KPX U Atilde 16
+KPX U comma -34
+KPX U m -25
+KPX U n -25
+KPX U p -24
+KPX U period -19
+KPX U r -27
+KPX Uacute A 16
+KPX Uacute comma -34
+KPX Uacute m -25
+KPX Uacute n -25
+KPX Uacute p -24
+KPX Uacute period -19
+KPX Uacute r -27
+KPX Ucircumflex A 16
+KPX Udieresis A 16
+KPX Udieresis b 13
+KPX Udieresis comma -34
+KPX Udieresis m -25
+KPX Udieresis n -25
+KPX Udieresis p -24
+KPX Udieresis period -19
+KPX Udieresis r -27
+KPX Ugrave A 16
+KPX V A -139
+KPX V AE -114
+KPX V Aacute -139
+KPX V Acircumflex -139
+KPX V Adieresis -139
+KPX V Agrave -139
+KPX V Aring -139
+KPX V Atilde -139
+KPX V C -61
+KPX V G -66
+KPX V O -66
+KPX V Oacute -66
+KPX V Ocircumflex -66
+KPX V Odieresis -66
+KPX V Ograve -66
+KPX V Oslash -66
+KPX V Otilde -66
+KPX V S -49
+KPX V T 23
+KPX V a -96
+KPX V ae -81
+KPX V colon -92
+KPX V comma -149
+KPX V e -100
+KPX V g -104
+KPX V guillemotleft -112
+KPX V guilsinglleft -112
+KPX V hyphen -65
+KPX V i -36
+KPX V o -98
+KPX V oslash -98
+KPX V period -130
+KPX V r -69
+KPX V semicolon -101
+KPX V u -72
+KPX V y -57
+KPX W A -62
+KPX W AE -69
+KPX W Aacute -62
+KPX W Acircumflex -62
+KPX W Adieresis -62
+KPX W Agrave -62
+KPX W Aring -62
+KPX W Atilde -62
+KPX W C -26
+KPX W G -30
+KPX W O -30
+KPX W Oacute -30
+KPX W Ocircumflex -30
+KPX W Odieresis -30
+KPX W Ograve -30
+KPX W Oslash -27
+KPX W Otilde -30
+KPX W S -36
+KPX W T 25
+KPX W a -38
+KPX W ae -42
+KPX W colon -53
+KPX W comma -73
+KPX W e -42
+KPX W g -62
+KPX W guillemotleft -57
+KPX W guilsinglleft -57
+KPX W hyphen -9
+KPX W i -34
+KPX W o -40
+KPX W oslash -39
+KPX W period -54
+KPX W r -32
+KPX W semicolon -63
+KPX W u -35
+KPX W y -21
+KPX X C -48
+KPX X O -47
+KPX X Odieresis -47
+KPX X Q -47
+KPX X a 9
+KPX X e -7
+KPX X hyphen -52
+KPX X o -12
+KPX X u -19
+KPX X y -34
+KPX Y A -73
+KPX Y AE -80
+KPX Y Aacute -73
+KPX Y Acircumflex -73
+KPX Y Adieresis -73
+KPX Y Agrave -73
+KPX Y Aring -73
+KPX Y Atilde -73
+KPX Y C -50
+KPX Y G -55
+KPX Y O -55
+KPX Y Oacute -55
+KPX Y Ocircumflex -55
+KPX Y Odieresis -55
+KPX Y Ograve -55
+KPX Y Oslash -55
+KPX Y Otilde -55
+KPX Y S -39
+KPX Y T 10
+KPX Y a -95
+KPX Y ae -99
+KPX Y colon -105
+KPX Y comma -123
+KPX Y e -103
+KPX Y g -126
+KPX Y guillemotleft -124
+KPX Y guilsinglleft -124
+KPX Y hyphen -81
+KPX Y i -48
+KPX Y o -101
+KPX Y oslash -86
+KPX Y p -86
+KPX Y period -109
+KPX Y semicolon -115
+KPX Y u -98
+KPX Y v -82
+KPX Z v -35
+KPX Z y -42
+KPX a j -26
+KPX a quoteright -8
+KPX a v -18
+KPX a w -18
+KPX a y -6
+KPX aacute v -18
+KPX aacute w -18
+KPX aacute y -6
+KPX adieresis v -18
+KPX adieresis w -18
+KPX adieresis y -6
+KPX ae v 5
+KPX ae w 5
+KPX ae y 15
+KPX agrave v -18
+KPX agrave w -18
+KPX agrave y -6
+KPX aring v -18
+KPX aring w -18
+KPX aring y -6
+KPX b v 0
+KPX b w 0
+KPX b y 8
+KPX c h -18
+KPX c k -15
+KPX comma one -24
+KPX comma quotedblright -9
+KPX comma quoteright 0
+KPX e quoteright 8
+KPX e t -3
+KPX e v 5
+KPX e w 5
+KPX e x -12
+KPX e y 15
+KPX eacute v 5
+KPX eacute w 5
+KPX eacute y 15
+KPX ecircumflex v 5
+KPX ecircumflex w 5
+KPX ecircumflex y 15
+KPX eight four -1
+KPX eight one -16
+KPX eight seven -17
+KPX f a -16
+KPX f aacute -16
+KPX f adieresis 4
+KPX f ae 0
+KPX f aring -16
+KPX f e -17
+KPX f eacute -17
+KPX f f 16
+KPX f i 13
+KPX f j 9
+KPX f l 50
+KPX f o -13
+KPX f oacute -13
+KPX f odieresis 4
+KPX f oe -14
+KPX f oslash -18
+KPX f quoteright 25
+KPX f s -2
+KPX f t 11
+KPX five four 3
+KPX five one -38
+KPX five seven -15
+KPX four four 21
+KPX four one -16
+KPX four seven -16
+KPX g a -25
+KPX g adieresis -25
+KPX g ae -12
+KPX g aring -25
+KPX g e -26
+KPX g eacute -26
+KPX g l -34
+KPX g oacute -22
+KPX g odieresis -22
+KPX g r 8
+KPX guillemotright A -72
+KPX guillemotright AE -80
+KPX guillemotright Aacute -72
+KPX guillemotright Adieresis -72
+KPX guillemotright Aring -72
+KPX guillemotright T -103
+KPX guillemotright V -85
+KPX guillemotright W -63
+KPX guillemotright Y -114
+KPX guilsinglright A -72
+KPX guilsinglright AE -80
+KPX guilsinglright Aacute -72
+KPX guilsinglright Adieresis -72
+KPX guilsinglright Aring -72
+KPX guilsinglright T -103
+KPX guilsinglright V -84
+KPX guilsinglright W -63
+KPX guilsinglright Y -114
+KPX h quoteright -11
+KPX h y -8
+KPX hyphen A -27
+KPX hyphen AE -35
+KPX hyphen Aacute -27
+KPX hyphen Adieresis -27
+KPX hyphen Aring -27
+KPX hyphen T -58
+KPX hyphen V -41
+KPX hyphen W -19
+KPX hyphen Y -75
+KPX i T -7
+KPX i j -30
+KPX k a 12
+KPX k aacute 12
+KPX k adieresis 12
+KPX k ae 14
+KPX k aring 12
+KPX k comma -24
+KPX k e 5
+KPX k eacute 5
+KPX k g -44
+KPX k hyphen -50
+KPX k o 2
+KPX k oacute 2
+KPX k odieresis 2
+KPX k period -4
+KPX k s 6
+KPX k u -16
+KPX k udieresis -16
+KPX l v -35
+KPX l y -24
+KPX m p -14
+KPX m v -23
+KPX m w -23
+KPX m y -11
+KPX n T -83
+KPX n p -18
+KPX n quoteright -19
+KPX n v -27
+KPX n w -27
+KPX n y -15
+KPX nine four -10
+KPX nine one -18
+KPX nine seven -25
+KPX o T -88
+KPX o quoteright -3
+KPX o t -15
+KPX o v -3
+KPX o w -3
+KPX o x -23
+KPX o y 4
+KPX oacute v -3
+KPX oacute w -3
+KPX oacute y 4
+KPX ocircumflex t -15
+KPX odieresis t -15
+KPX odieresis v -3
+KPX odieresis w -3
+KPX odieresis x -23
+KPX odieresis y 4
+KPX ograve v -3
+KPX ograve w -3
+KPX ograve y 4
+KPX one comma -50
+KPX one eight -47
+KPX one five -23
+KPX one four -63
+KPX one nine -39
+KPX one one -38
+KPX one period -36
+KPX one seven -38
+KPX one six -60
+KPX one three -27
+KPX one two -15
+KPX one zero -44
+KPX p t -13
+KPX p y 5
+KPX period one -37
+KPX period quotedblright -31
+KPX period quoteright -21
+KPX q c -18
+KPX q u -15
+KPX quotedblbase A 2
+KPX quotedblbase AE -5
+KPX quotedblbase T -62
+KPX quotedblbase V -74
+KPX quotedblbase W -47
+KPX quotedblbase Y -83
+KPX quotedblleft A -149
+KPX quotedblleft AE -153
+KPX quotedblleft Aacute -149
+KPX quotedblleft Adieresis -149
+KPX quotedblleft Aring -149
+KPX quotedblleft T -16
+KPX quotedblleft V -17
+KPX quotedblleft W -12
+KPX quotedblleft Y -13
+KPX quotedblright A -146
+KPX quotedblright AE -150
+KPX quotedblright Aacute -146
+KPX quotedblright Adieresis -146
+KPX quotedblright Aring -146
+KPX quotedblright T -13
+KPX quotedblright V -14
+KPX quotedblright W -9
+KPX quotedblright Y -10
+KPX quoteleft A -146
+KPX quoteleft AE -150
+KPX quoteleft Aacute -146
+KPX quoteleft Adieresis -146
+KPX quoteleft Aring -146
+KPX quoteleft T -13
+KPX quoteleft V -15
+KPX quoteleft W -10
+KPX quoteleft Y -11
+KPX quoteright A -143
+KPX quoteright AE -147
+KPX quoteright Aacute -143
+KPX quoteright Adieresis -143
+KPX quoteright Aring -143
+KPX quoteright comma -100
+KPX quoteright d -68
+KPX quoteright o -60
+KPX quoteright period -81
+KPX quoteright r -47
+KPX quoteright s -49
+KPX quoteright t -56
+KPX quoteright v -33
+KPX quoteright w -33
+KPX quoteright y -40
+KPX r a -25
+KPX r aacute -25
+KPX r acircumflex -25
+KPX r adieresis -25
+KPX r ae -18
+KPX r agrave -25
+KPX r aring -25
+KPX r c -28
+KPX r ccedilla -28
+KPX r colon -26
+KPX r comma -113
+KPX r d -30
+KPX r e -24
+KPX r eacute -24
+KPX r ecircumflex -24
+KPX r egrave -24
+KPX r f 1
+KPX r g -24
+KPX r h -31
+KPX r hyphen -48
+KPX r i -1
+KPX r j -5
+KPX r k -30
+KPX r l -39
+KPX r m 4
+KPX r n 4
+KPX r o -21
+KPX r oacute -21
+KPX r ocircumflex -21
+KPX r odieresis -21
+KPX r oe -22
+KPX r ograve -21
+KPX r oslash -25
+KPX r p 11
+KPX r period -95
+KPX r q -30
+KPX r quoteright 4
+KPX r r 3
+KPX r s -12
+KPX r semicolon -33
+KPX r t -3
+KPX r u 0
+KPX r v 4
+KPX r w 4
+KPX r x -14
+KPX r y 14
+KPX r z -7
+KPX s quoteright -10
+KPX s t -22
+KPX seven colon -78
+KPX seven comma -124
+KPX seven eight -43
+KPX seven five -31
+KPX seven four -79
+KPX seven one -14
+KPX seven period -105
+KPX seven seven -3
+KPX seven six -58
+KPX seven three -30
+KPX seven two -20
+KPX six four 6
+KPX six one -44
+KPX six seven -25
+KPX t S -29
+KPX t a -13
+KPX t aacute -13
+KPX t adieresis -13
+KPX t ae -11
+KPX t aring -13
+KPX t colon -32
+KPX t e -18
+KPX t eacute -18
+KPX t h -27
+KPX t o -20
+KPX t oacute -20
+KPX t odieresis -20
+KPX t quoteright -19
+KPX t semicolon -40
+KPX three four 7
+KPX three one -31
+KPX three seven -32
+KPX two four -42
+KPX two one -26
+KPX two seven -27
+KPX u quoteright -19
+KPX v a -14
+KPX v aacute -14
+KPX v acircumflex -14
+KPX v adieresis -14
+KPX v ae -19
+KPX v agrave -14
+KPX v aring -14
+KPX v atilde -14
+KPX v c -20
+KPX v colon -29
+KPX v comma -71
+KPX v e -17
+KPX v eacute -17
+KPX v ecircumflex -17
+KPX v egrave -17
+KPX v g -21
+KPX v hyphen 19
+KPX v l -27
+KPX v o -13
+KPX v oacute -13
+KPX v odieresis -13
+KPX v ograve -13
+KPX v oslash -15
+KPX v period -53
+KPX v s -13
+KPX v semicolon -35
+KPX w a -13
+KPX w aacute -13
+KPX w acircumflex -13
+KPX w adieresis -13
+KPX w ae -19
+KPX w agrave -13
+KPX w aring -13
+KPX w atilde -13
+KPX w c -20
+KPX w colon -29
+KPX w comma -71
+KPX w e -17
+KPX w eacute -17
+KPX w ecircumflex -17
+KPX w egrave -17
+KPX w g -21
+KPX w hyphen 19
+KPX w l -27
+KPX w o -13
+KPX w oacute -13
+KPX w odieresis -13
+KPX w ograve -13
+KPX w oslash -15
+KPX w period -52
+KPX w s -13
+KPX w semicolon -35
+KPX x a -2
+KPX x c -15
+KPX x e -9
+KPX x eacute -9
+KPX x o -13
+KPX x q -12
+KPX y a -14
+KPX y aacute -14
+KPX y acircumflex -14
+KPX y adieresis -14
+KPX y ae -19
+KPX y agrave -14
+KPX y aring -14
+KPX y atilde -14
+KPX y c -22
+KPX y colon -32
+KPX y comma -56
+KPX y e -18
+KPX y eacute -18
+KPX y ecircumflex -18
+KPX y egrave -18
+KPX y g -34
+KPX y hyphen 7
+KPX y l -27
+KPX y o -16
+KPX y oacute -16
+KPX y odieresis -16
+KPX y ograve -16
+KPX y oslash -16
+KPX y period -37
+KPX y s -18
+KPX y semicolon -39
+KPX zero four 3
+KPX zero one -13
+KPX zero seven -22
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uplri8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uplri8a.pfb
new file mode 100644
index 00000000000..8d0f820de16
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uplri8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/usyr.afm b/Master/tlpkg/tlgs/lib/fonts/usyr.afm
new file mode 100644
index 00000000000..d8c193623fc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/usyr.afm
@@ -0,0 +1,213 @@
+StartFontMetrics 3.0
+Comment Copyright URW Software, Copyright 1997 by URW
+Comment Creation Date: 10/21/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName StandardSymL
+FullName Standard Symbols L
+FamilyName Standard Symbols L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -229
+UnderlineThickness 46
+Version 001.005
+Notice URW Software, Copyright 1997 by URW
+EncodingScheme FontSpecific
+FontBBox -180 -293 1090 1010
+CapHeight 673
+XHeight 500
+Descender -222
+Ascender 673
+StartCharMetrics 190
+C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 333 ; N exclam ; B 128 -13 240 686 ;
+C 34 ; WX 713 ; N universal ; B 31 0 681 673 ;
+C 35 ; WX 500 ; N numbersign ; B 20 0 481 631 ;
+C 36 ; WX 549 ; N existential ; B 25 0 478 673 ;
+C 37 ; WX 833 ; N percent ; B 63 -7 771 673 ;
+C 38 ; WX 778 ; N ampersand ; B 41 -13 750 675 ;
+C 39 ; WX 439 ; N suchthat ; B 48 -13 414 503 ;
+C 40 ; WX 333 ; N parenleft ; B 53 -172 300 680 ;
+C 41 ; WX 333 ; N parenright ; B 30 -172 277 680 ;
+C 42 ; WX 500 ; N asteriskmath ; B 65 127 427 546 ;
+C 43 ; WX 549 ; N plus ; B 10 0 539 533 ;
+C 44 ; WX 250 ; N comma ; B 56 -120 194 102 ;
+C 45 ; WX 549 ; N minus ; B 11 239 535 294 ;
+C 46 ; WX 250 ; N period ; B 69 -13 181 100 ;
+C 47 ; WX 278 ; N slash ; B 0 0 254 673 ;
+C 48 ; WX 500 ; N zero ; B 23 -13 471 686 ;
+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 -13 435 686 ;
+C 52 ; WX 500 ; N four ; B 16 0 469 680 ;
+C 53 ; WX 500 ; N five ; B 29 -13 443 699 ;
+C 54 ; WX 500 ; N six ; B 36 -13 468 685 ;
+C 55 ; WX 500 ; N seven ; B 24 -7 448 673 ;
+C 56 ; WX 500 ; N eight ; B 54 -13 440 686 ;
+C 57 ; WX 500 ; N nine ; B 31 -13 460 686 ;
+C 58 ; WX 278 ; N colon ; B 81 -13 193 463 ;
+C 59 ; WX 278 ; N semicolon ; B 83 -120 221 463 ;
+C 60 ; WX 549 ; N less ; B 26 0 523 522 ;
+C 61 ; WX 549 ; N equal ; B 11 142 537 391 ;
+C 62 ; WX 549 ; N greater ; B 26 0 523 522 ;
+C 63 ; WX 444 ; N question ; B 70 -13 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 -13 623 686 ;
+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 0 720 673 ;
+C 79 ; WX 722 ; N Omicron ; B 41 -13 715 686 ;
+C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ;
+C 81 ; WX 741 ; N Theta ; B 41 -13 715 686 ;
+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 -222 436 513 ;
+C 87 ; WX 768 ; N Omega ; B 34 0 736 686 ;
+C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ;
+C 89 ; WX 795 ; N Psi ; B 15 0 781 686 ;
+C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;
+C 91 ; WX 333 ; N bracketleft ; B 86 -165 299 673 ;
+C 92 ; WX 863 ; N therefore ; B 163 -13 701 433 ;
+C 93 ; WX 333 ; N bracketright ; B 33 -165 246 673 ;
+C 94 ; WX 658 ; N perpendicular ; B 15 0 652 673 ;
+C 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ;
+C 96 ; WX 500 ; N radicalex ; B 480 857 1090 913 ;
+C 97 ; WX 631 ; N alpha ; B 41 -13 622 513 ;
+C 98 ; WX 549 ; N beta ; B 61 -222 515 740 ;
+C 99 ; WX 549 ; N chi ; B 12 -210 522 513 ;
+C 100 ; WX 494 ; N delta ; B 40 -13 481 740 ;
+C 101 ; WX 439 ; N epsilon ; B 22 -13 427 513 ;
+C 102 ; WX 521 ; N phi ; B 27 -222 490 686 ;
+C 103 ; WX 411 ; N gamma ; B 5 -219 484 513 ;
+C 104 ; WX 603 ; N eta ; B 0 -222 527 513 ;
+C 105 ; WX 329 ; N iota ; B 0 -13 301 513 ;
+C 106 ; WX 603 ; N phi1 ; B 36 -222 587 513 ;
+C 107 ; WX 549 ; N kappa ; B 33 0 558 513 ;
+C 108 ; WX 549 ; N lambda ; B 24 -13 548 740 ;
+C 109 ; WX 576 ; N mu ; B 33 -219 567 500 ;
+C 110 ; WX 521 ; N nu ; B -9 -13 475 513 ;
+C 111 ; WX 549 ; N omicron ; B 35 -13 501 513 ;
+C 112 ; WX 549 ; N pi ; B 10 -13 530 500 ;
+C 113 ; WX 521 ; N theta ; B 43 -13 485 686 ;
+C 114 ; WX 549 ; N rho ; B 50 -220 490 513 ;
+C 115 ; WX 603 ; N sigma ; B 30 -13 588 500 ;
+C 116 ; WX 439 ; N tau ; B 10 -13 418 500 ;
+C 117 ; WX 576 ; N upsilon ; B 7 -13 535 513 ;
+C 118 ; WX 713 ; N omega1 ; B 12 -13 671 583 ;
+C 119 ; WX 686 ; N omega ; B 42 -13 684 513 ;
+C 120 ; WX 493 ; N xi ; B 27 -222 469 766 ;
+C 121 ; WX 686 ; N psi ; B 12 -222 701 513 ;
+C 122 ; WX 494 ; N zeta ; B 60 -222 467 756 ;
+C 123 ; WX 480 ; N braceleft ; B 58 -165 397 673 ;
+C 124 ; WX 200 ; N bar ; B 65 -177 135 673 ;
+C 125 ; WX 480 ; N braceright ; B 79 -165 418 673 ;
+C 126 ; WX 549 ; N similar ; B 17 196 529 325 ;
+C 160 ; WX 762 ; N Euro ; B 53 -4 722 671 ;
+C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 687 ;
+C 162 ; WX 247 ; N minute ; B 27 476 228 735 ;
+C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ;
+C 164 ; WX 167 ; N fraction ; B -180 0 340 673 ;
+C 165 ; WX 713 ; N infinity ; B 26 115 688 414 ;
+C 166 ; WX 500 ; N florin ; B 2 -174 494 687 ;
+C 167 ; WX 753 ; N club ; B 86 -26 660 544 ;
+C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ;
+C 169 ; WX 753 ; N heart ; B 117 -33 631 528 ;
+C 170 ; WX 753 ; N spade ; B 113 -36 629 591 ;
+C 171 ; WX 1042 ; N arrowboth ; B 24 -16 1024 512 ;
+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 380 350 686 ;
+C 177 ; WX 549 ; N plusminus ; B 10 0 539 662 ;
+C 178 ; WX 411 ; N second ; B 20 476 413 735 ;
+C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;
+C 180 ; WX 549 ; N multiply ; B 17 9 533 525 ;
+C 181 ; WX 713 ; N proportional ; B 27 114 639 416 ;
+C 182 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C 183 ; WX 460 ; N bullet ; B 50 155 410 518 ;
+C 184 ; WX 549 ; N divide ; B 10 2 536 525 ;
+C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;
+C 186 ; WX 549 ; N equivalence ; B 14 87 538 446 ;
+C 187 ; WX 549 ; N approxequal ; B 14 121 527 408 ;
+C 188 ; WX 1000 ; N ellipsis ; B 111 -13 889 100 ;
+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 0 662 689 ;
+C 193 ; WX 686 ; N Ifraktur ; B 10 -54 578 736 ;
+C 194 ; WX 795 ; N Rfraktur ; B 26 -16 759 730 ;
+C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 574 ;
+C 196 ; WX 768 ; N circlemultiply ; B 43 0 733 691 ;
+C 197 ; WX 768 ; N circleplus ; B 43 0 733 689 ;
+C 198 ; WX 823 ; N emptyset ; B 39 -24 781 718 ;
+C 199 ; WX 768 ; N intersection ; B 40 0 732 507 ;
+C 200 ; WX 768 ; N union ; B 40 -18 732 489 ;
+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 470 ;
+C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ;
+C 208 ; WX 768 ; N angle ; B 26 -1 738 672 ;
+C 209 ; WX 713 ; N gradient ; B 36 0 681 687 ;
+C 210 ; WX 790 ; N registerserif ; B 50 -13 740 690 ;
+C 211 ; WX 790 ; N copyrightserif ; B 51 -13 741 690 ;
+C 212 ; WX 890 ; N trademarkserif ; B 18 269 855 673 ;
+C 213 ; WX 823 ; N product ; B 25 -124 803 751 ;
+C 214 ; WX 549 ; N radical ; B 10 -35 515 913 ;
+C 215 ; WX 250 ; N dotmath ; B 69 209 169 311 ;
+C 216 ; WX 713 ; N logicalnot ; B 15 40 680 367 ;
+C 217 ; WX 603 ; N logicaland ; B 23 -1 583 476 ;
+C 218 ; WX 603 ; N logicalor ; B 30 -1 578 476 ;
+C 219 ; WX 1042 ; N arrowdblboth ; B 27 -19 1023 506 ;
+C 220 ; WX 987 ; N arrowdblleft ; B 30 -19 939 506 ;
+C 221 ; WX 603 ; N arrowdblup ; B 39 0 567 909 ;
+C 222 ; WX 987 ; N arrowdblright ; B 45 -19 954 506 ;
+C 223 ; WX 603 ; N arrowdbldown ; B 44 0 572 909 ;
+C 224 ; WX 494 ; N lozenge ; B 18 -1 466 740 ;
+C 225 ; WX 329 ; N angleleft ; B 25 -152 306 757 ;
+C 226 ; WX 790 ; N registersans ; B 50 -12 740 679 ;
+C 227 ; WX 790 ; N copyrightsans ; B 49 -12 739 679 ;
+C 228 ; WX 786 ; N trademarksans ; B 5 277 725 673 ;
+C 229 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C 230 ; WX 384 ; N parenlefttp ; B 40 -293 436 926 ;
+C 231 ; WX 384 ; N parenleftex ; B 40 -79 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 -85 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 -79 255 925 ;
+C 241 ; WX 329 ; N angleright ; B 21 -152 302 757 ;
+C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ;
+C 243 ; WX 686 ; N integraltp ; B 332 -83 715 922 ;
+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 -70 450 935 ;
+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 -85 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 250 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/usyr.pfb b/Master/tlpkg/tlgs/lib/fonts/usyr.pfb
new file mode 100644
index 00000000000..d0505e46cd5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/usyr.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmb8a.afm b/Master/tlpkg/tlgs/lib/fonts/utmb8a.afm
new file mode 100644
index 00000000000..8931279b60d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmb8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusRomNo9L-Medi
+FullName Nimbus Roman No9 L Medium
+FamilyName Nimbus Roman No9 L
+Weight Bold
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -168 -341 1000 960
+CapHeight 676
+XHeight 461
+Descender -205
+Ascender 676
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ;
+C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ;
+C 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ;
+C 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ;
+C 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ;
+C 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ;
+C 39 ; WX 333 ; N quoteright ; B 79 356 263 691 ;
+C 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ;
+C 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ;
+C 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ;
+C 43 ; WX 570 ; N plus ; B 33 0 537 506 ;
+C 44 ; WX 250 ; N comma ; B 39 -180 223 155 ;
+C 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ;
+C 46 ; WX 250 ; N period ; B 41 -13 210 156 ;
+C 47 ; WX 278 ; N slash ; B -24 -19 302 691 ;
+C 48 ; WX 500 ; N zero ; B 24 -13 476 688 ;
+C 49 ; WX 500 ; N one ; B 65 0 442 688 ;
+C 50 ; WX 500 ; N two ; B 17 0 478 688 ;
+C 51 ; WX 500 ; N three ; B 16 -14 468 688 ;
+C 52 ; WX 500 ; N four ; B 19 0 475 688 ;
+C 53 ; WX 500 ; N five ; B 22 -8 470 676 ;
+C 54 ; WX 500 ; N six ; B 28 -13 475 688 ;
+C 55 ; WX 500 ; N seven ; B 17 0 477 676 ;
+C 56 ; WX 500 ; N eight ; B 28 -13 472 688 ;
+C 57 ; WX 500 ; N nine ; B 26 -13 473 688 ;
+C 58 ; WX 333 ; N colon ; B 82 -13 251 472 ;
+C 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ;
+C 60 ; WX 570 ; N less ; B 31 -12 539 518 ;
+C 61 ; WX 570 ; N equal ; B 33 107 537 399 ;
+C 62 ; WX 570 ; N greater ; B 31 -12 539 518 ;
+C 63 ; WX 500 ; N question ; B 57 -13 445 689 ;
+C 64 ; WX 930 ; N at ; B 108 -19 822 691 ;
+C 65 ; WX 722 ; N A ; B 9 0 689 690 ;
+C 66 ; WX 667 ; N B ; B 16 0 619 676 ;
+C 67 ; WX 722 ; N C ; B 49 -19 687 691 ;
+C 68 ; WX 722 ; N D ; B 14 0 690 676 ;
+C 69 ; WX 667 ; N E ; B 16 0 641 676 ;
+C 70 ; WX 611 ; N F ; B 16 0 583 676 ;
+C 71 ; WX 778 ; N G ; B 37 -19 755 691 ;
+C 72 ; WX 778 ; N H ; B 21 0 759 676 ;
+C 73 ; WX 389 ; N I ; B 20 0 370 676 ;
+C 74 ; WX 500 ; N J ; B 3 -96 479 676 ;
+C 75 ; WX 778 ; N K ; B 30 0 769 676 ;
+C 76 ; WX 667 ; N L ; B 19 0 638 676 ;
+C 77 ; WX 944 ; N M ; B 14 0 921 676 ;
+C 78 ; WX 722 ; N N ; B 16 -18 701 676 ;
+C 79 ; WX 778 ; N O ; B 35 -19 743 691 ;
+C 80 ; WX 611 ; N P ; B 16 0 600 676 ;
+C 81 ; WX 778 ; N Q ; B 35 -176 743 691 ;
+C 82 ; WX 722 ; N R ; B 26 0 715 676 ;
+C 83 ; WX 556 ; N S ; B 35 -19 513 692 ;
+C 84 ; WX 667 ; N T ; B 31 0 636 676 ;
+C 85 ; WX 722 ; N U ; B 16 -19 701 676 ;
+C 86 ; WX 722 ; N V ; B 16 -18 701 676 ;
+C 87 ; WX 1000 ; N W ; B 19 -15 981 676 ;
+C 88 ; WX 722 ; N X ; B 16 0 699 676 ;
+C 89 ; WX 722 ; N Y ; B 15 0 699 676 ;
+C 90 ; WX 667 ; N Z ; B 28 0 634 676 ;
+C 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ;
+C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ;
+C 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ;
+C 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 70 356 254 691 ;
+C 97 ; WX 500 ; N a ; B 25 -14 488 473 ;
+C 98 ; WX 556 ; N b ; B 17 -14 521 676 ;
+C 99 ; WX 444 ; N c ; B 25 -14 430 473 ;
+C 100 ; WX 556 ; N d ; B 25 -14 534 676 ;
+C 101 ; WX 444 ; N e ; B 25 -14 426 473 ;
+C 102 ; WX 333 ; N f ; B 14 0 389 691 ;
+C 103 ; WX 500 ; N g ; B 28 -206 483 473 ;
+C 104 ; WX 556 ; N h ; B 16 0 534 676 ;
+C 105 ; WX 278 ; N i ; B 16 0 255 691 ;
+C 106 ; WX 333 ; N j ; B -57 -203 263 691 ;
+C 107 ; WX 556 ; N k ; B 22 0 543 676 ;
+C 108 ; WX 278 ; N l ; B 16 0 255 676 ;
+C 109 ; WX 833 ; N m ; B 16 0 814 473 ;
+C 110 ; WX 556 ; N n ; B 21 0 539 473 ;
+C 111 ; WX 500 ; N o ; B 25 -14 476 473 ;
+C 112 ; WX 556 ; N p ; B 19 -205 524 473 ;
+C 113 ; WX 556 ; N q ; B 34 -205 536 473 ;
+C 114 ; WX 444 ; N r ; B 29 0 434 473 ;
+C 115 ; WX 389 ; N s ; B 25 -14 361 473 ;
+C 116 ; WX 333 ; N t ; B 20 -12 332 630 ;
+C 117 ; WX 556 ; N u ; B 16 -14 537 461 ;
+C 118 ; WX 500 ; N v ; B 21 -14 485 461 ;
+C 119 ; WX 722 ; N w ; B 23 -14 707 461 ;
+C 120 ; WX 500 ; N x ; B 12 0 484 461 ;
+C 121 ; WX 500 ; N y ; B 16 -205 480 461 ;
+C 122 ; WX 444 ; N z ; B 21 0 420 461 ;
+C 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ;
+C 124 ; WX 220 ; N bar ; B 66 -19 154 691 ;
+C 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ;
+C 126 ; WX 520 ; N asciitilde ; B 29 175 491 331 ;
+C 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ;
+C 162 ; WX 500 ; N cent ; B 53 -140 458 588 ;
+C 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ;
+C 164 ; WX 167 ; N fraction ; B -168 -12 329 688 ;
+C 165 ; WX 500 ; N yen ; B -64 0 547 676 ;
+C 166 ; WX 500 ; N florin ; B 0 -155 498 706 ;
+C 167 ; WX 500 ; N section ; B 57 -132 443 691 ;
+C 168 ; WX 500 ; N currency ; B -26 61 526 613 ;
+C 169 ; WX 278 ; N quotesingle ; B 75 404 204 691 ;
+C 170 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ;
+C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ;
+C 173 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ;
+C 174 ; WX 556 ; N fi ; B 14 0 536 691 ;
+C 175 ; WX 556 ; N fl ; B 14 0 536 691 ;
+C 177 ; WX 500 ; N endash ; B 0 181 500 271 ;
+C 178 ; WX 500 ; N dagger ; B 47 -134 453 691 ;
+C 179 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ;
+C 180 ; WX 250 ; N periodcentered ; B 41 248 210 417 ;
+C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ;
+C 183 ; WX 350 ; N bullet ; B 35 198 315 478 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ;
+C 185 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ;
+C 186 ; WX 500 ; N quotedblright ; B 14 356 468 691 ;
+C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ;
+C 188 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ;
+C 189 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ;
+C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ;
+C 193 ; WX 333 ; N grave ; B 8 528 246 713 ;
+C 194 ; WX 333 ; N acute ; B 86 528 324 713 ;
+C 195 ; WX 333 ; N circumflex ; B -2 528 335 704 ;
+C 196 ; WX 333 ; N tilde ; B -16 547 349 674 ;
+C 197 ; WX 333 ; N macron ; B 1 565 331 637 ;
+C 198 ; WX 333 ; N breve ; B 15 528 318 691 ;
+C 199 ; WX 333 ; N dotaccent ; B 103 537 232 666 ;
+C 200 ; WX 333 ; N dieresis ; B -2 537 337 666 ;
+C 202 ; WX 333 ; N ring ; B 60 537 273 750 ;
+C 203 ; WX 333 ; N cedilla ; B 68 -218 294 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ;
+C 206 ; WX 333 ; N ogonek ; B 90 -173 319 44 ;
+C 207 ; WX 333 ; N caron ; B -2 528 335 704 ;
+C 208 ; WX 1000 ; N emdash ; B 0 181 1000 271 ;
+C 225 ; WX 1000 ; N AE ; B 4 0 951 676 ;
+C 227 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ;
+C 232 ; WX 667 ; N Lslash ; B 19 0 638 676 ;
+C 233 ; WX 778 ; N Oslash ; B 35 -74 743 737 ;
+C 234 ; WX 1000 ; N OE ; B 22 -5 981 684 ;
+C 235 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ;
+C 241 ; WX 722 ; N ae ; B 33 -14 693 473 ;
+C 245 ; WX 278 ; N dotlessi ; B 16 0 255 461 ;
+C 248 ; WX 278 ; N lslash ; B -22 0 303 676 ;
+C 249 ; WX 500 ; N oslash ; B 25 -92 476 549 ;
+C 250 ; WX 722 ; N oe ; B 22 -14 696 473 ;
+C 251 ; WX 556 ; N germandbls ; B 19 -12 517 691 ;
+C -1 ; WX 722 ; N Udieresis ; B 16 -19 701 876 ;
+C -1 ; WX 722 ; N Uacute ; B 16 -19 701 923 ;
+C -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ;
+C -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ;
+C -1 ; WX 556 ; N Scaron ; B 35 -19 513 914 ;
+C -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ;
+C -1 ; WX 722 ; N Racute ; B 26 0 715 923 ;
+C -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ;
+C -1 ; WX 778 ; N Otilde ; B 35 -19 743 884 ;
+C -1 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ;
+C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ;
+C -1 ; WX 722 ; N Yacute ; B 15 0 699 923 ;
+C -1 ; WX 722 ; N Eth ; B 6 0 690 676 ;
+C -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ;
+C -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ;
+C -1 ; WX 722 ; N Uring ; B 16 -19 701 960 ;
+C -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ;
+C -1 ; WX 444 ; N eogonek ; B 25 -173 444 473 ;
+C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 666 ;
+C -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ;
+C -1 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ;
+C -1 ; WX 611 ; N Thorn ; B 16 0 600 676 ;
+C -1 ; WX 444 ; N eacute ; B 25 -14 426 713 ;
+C -1 ; WX 444 ; N edieresis ; B 25 -14 426 666 ;
+C -1 ; WX 665 ; N dcaron ; B 25 -14 665 691 ;
+C -1 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ;
+C -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ;
+C -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ;
+C -1 ; WX 500 ; N aogonek ; B 25 -173 500 473 ;
+C -1 ; WX 500 ; N aring ; B 25 -14 488 750 ;
+C -1 ; WX 500 ; N atilde ; B 25 -14 488 674 ;
+C -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ;
+C -1 ; WX 444 ; N egrave ; B 25 -14 426 713 ;
+C -1 ; WX 500 ; N agrave ; B 25 -14 488 713 ;
+C -1 ; WX 500 ; N aacute ; B 25 -14 488 713 ;
+C -1 ; WX 500 ; N adieresis ; B 25 -14 488 666 ;
+C -1 ; WX 722 ; N Uogonek ; B 16 -173 701 676 ;
+C -1 ; WX 556 ; N ugrave ; B 16 -14 537 713 ;
+C -1 ; WX 556 ; N uacute ; B 16 -14 537 713 ;
+C -1 ; WX 556 ; N udieresis ; B 16 -14 537 666 ;
+C -1 ; WX 400 ; N tcaron ; B 20 -12 400 691 ;
+C -1 ; WX 389 ; N scommaaccent ; B 25 -341 361 473 ;
+C -1 ; WX 667 ; N Zcaron ; B 28 0 634 914 ;
+C -1 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ;
+C -1 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ;
+C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 876 ;
+C -1 ; WX 389 ; N scaron ; B 25 -14 363 704 ;
+C -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ;
+C -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ;
+C -1 ; WX 667 ; N Tcommaaccent ; B 31 -341 636 676 ;
+C -1 ; WX 722 ; N Ydieresis ; B 15 0 699 876 ;
+C -1 ; WX 556 ; N thorn ; B 19 -205 524 676 ;
+C -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ;
+C -1 ; WX 778 ; N Ograve ; B 35 -19 743 923 ;
+C -1 ; WX 778 ; N Oacute ; B 35 -19 743 923 ;
+C -1 ; WX 778 ; N Odieresis ; B 35 -19 743 876 ;
+C -1 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ;
+C -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ;
+C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ;
+C -1 ; WX 667 ; N Lcaron ; B 19 0 638 691 ;
+C -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ;
+C -1 ; WX 389 ; N Idotaccent ; B 20 0 370 876 ;
+C -1 ; WX 444 ; N racute ; B 29 0 434 713 ;
+C -1 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 509 713 ;
+C -1 ; WX 500 ; N otilde ; B 25 -14 476 674 ;
+C -1 ; WX 500 ; N Euro ; B -36 -24 478 671 ;
+C -1 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ;
+C -1 ; WX 300 ; N onesuperior ; B 28 275 273 688 ;
+C -1 ; WX 300 ; N twosuperior ; B 0 275 300 688 ;
+C -1 ; WX 300 ; N threesuperior ; B 3 268 297 688 ;
+C -1 ; WX 389 ; N Igrave ; B 20 0 370 923 ;
+C -1 ; WX 389 ; N Iacute ; B 20 0 370 923 ;
+C -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ;
+C -1 ; WX 389 ; N Iogonek ; B 20 -173 505 676 ;
+C -1 ; WX 389 ; N Idieresis ; B 20 0 370 876 ;
+C -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ;
+C -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ;
+C -1 ; WX 778 ; N Kcommaaccent ; B 30 -341 769 676 ;
+C -1 ; WX 500 ; N ograve ; B 25 -14 476 713 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 35 -341 513 692 ;
+C -1 ; WX 667 ; N Eogonek ; B 16 -173 737 676 ;
+C -1 ; WX 500 ; N oacute ; B 25 -14 476 713 ;
+C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 876 ;
+C -1 ; WX 278 ; N iogonek ; B 16 -173 388 691 ;
+C -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 811 ;
+C -1 ; WX 500 ; N odieresis ; B 25 -14 476 666 ;
+C -1 ; WX 556 ; N ntilde ; B 21 0 539 674 ;
+C -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ;
+C -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ;
+C -1 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ;
+C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ;
+C -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ;
+C -1 ; WX 667 ; N Egrave ; B 16 0 641 923 ;
+C -1 ; WX 667 ; N Eacute ; B 16 0 641 923 ;
+C -1 ; WX 778 ; N Gcommaaccent ; B 37 -341 755 691 ;
+C -1 ; WX 722 ; N Rcommaaccent ; B 26 -341 715 676 ;
+C -1 ; WX 667 ; N Edieresis ; B 16 0 641 876 ;
+C -1 ; WX 556 ; N nacute ; B 21 0 539 713 ;
+C -1 ; WX 556 ; N uogonek ; B 16 -173 556 461 ;
+C -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ;
+C -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ;
+C -1 ; WX 396 ; N lcaron ; B 16 0 396 691 ;
+C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ;
+C -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ;
+C -1 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ;
+C -1 ; WX 400 ; N degree ; B 57 402 343 688 ;
+C -1 ; WX 722 ; N Aogonek ; B 9 -173 822 690 ;
+C -1 ; WX 570 ; N minus ; B 33 209 537 297 ;
+C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;
+C -1 ; WX 570 ; N divide ; B 33 -31 537 537 ;
+C -1 ; WX 722 ; N Aring ; B 9 0 689 948 ;
+C -1 ; WX 1000 ; N trademark ; B 24 271 977 676 ;
+C -1 ; WX 444 ; N rcommaaccent ; B 29 -341 434 473 ;
+C -1 ; WX 278 ; N lacute ; B 16 0 297 923 ;
+C -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ;
+C -1 ; WX 722 ; N Atilde ; B 9 0 689 884 ;
+C -1 ; WX 278 ; N icircumflex ; B -36 0 301 704 ;
+C -1 ; WX 278 ; N igrave ; B -26 0 255 713 ;
+C -1 ; WX 556 ; N ncommaaccent ; B 21 -341 539 473 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 16 -341 255 676 ;
+C -1 ; WX 570 ; N plusminus ; B 33 0 537 568 ;
+C -1 ; WX 750 ; N onehalf ; B -7 -12 775 688 ;
+C -1 ; WX 750 ; N onequarter ; B 28 -12 743 688 ;
+C -1 ; WX 750 ; N threequarters ; B 23 -12 733 688 ;
+C -1 ; WX 278 ; N iacute ; B 16 0 290 713 ;
+C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ;
+C -1 ; WX 556 ; N kcommaaccent ; B 22 -341 543 676 ;
+C -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ;
+C -1 ; WX 278 ; N imacron ; B -27 0 303 637 ;
+C -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ;
+C -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ;
+C -1 ; WX 333 ; N tcommaaccent ; B 20 -341 332 630 ;
+C -1 ; WX 500 ; N ydieresis ; B 16 -205 480 666 ;
+C -1 ; WX 444 ; N zdotaccent ; B 21 0 420 666 ;
+C -1 ; WX 444 ; N zcaron ; B 21 0 420 704 ;
+C -1 ; WX 444 ; N zacute ; B 21 0 420 713 ;
+C -1 ; WX 500 ; N yacute ; B 16 -205 480 713 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 537 713 ;
+C -1 ; WX 500 ; N eth ; B 25 -14 476 691 ;
+C -1 ; WX 556 ; N uring ; B 16 -14 537 750 ;
+C -1 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ;
+C -1 ; WX 333 ; N commaaccent ; B 84 -341 249 -40 ;
+C -1 ; WX 747 ; N copyright ; B 26 -19 721 691 ;
+C -1 ; WX 747 ; N registered ; B 26 -19 721 691 ;
+C -1 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ;
+C -1 ; WX 278 ; N idieresis ; B -36 0 303 666 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 570 ; N notequal ; B 33 -13 537 519 ;
+C -1 ; WX 549 ; N radical ; B -17 -35 535 916 ;
+C -1 ; WX 722 ; N Agrave ; B 9 0 689 923 ;
+C -1 ; WX 722 ; N Aacute ; B 9 0 689 923 ;
+C -1 ; WX 570 ; N lessequal ; B 31 0 539 642 ;
+C -1 ; WX 570 ; N greaterequal ; B 31 0 539 642 ;
+C -1 ; WX 570 ; N logicalnot ; B 33 108 537 399 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 16 -20 472 743 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 16 -341 701 676 ;
+C -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ;
+C -1 ; WX 220 ; N brokenbar ; B 66 -19 154 691 ;
+C -1 ; WX 667 ; N Lcommaaccent ; B 19 -341 638 676 ;
+C -1 ; WX 722 ; N Adieresis ; B 9 0 689 876 ;
+C -1 ; WX 556 ; N mu ; B 33 -206 536 461 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -73
+KPX A Ccedilla -77
+KPX A G -68
+KPX A O -68
+KPX A Odieresis -68
+KPX A Q -68
+KPX A T -59
+KPX A U -66
+KPX A Uacute -66
+KPX A Ucircumflex -66
+KPX A Udieresis -66
+KPX A Ugrave -66
+KPX A V -130
+KPX A W -116
+KPX A Y -74
+KPX A a -5
+KPX A b -22
+KPX A c -35
+KPX A ccedilla -43
+KPX A comma 1
+KPX A d -28
+KPX A e -32
+KPX A g -7
+KPX A guillemotleft -53
+KPX A guilsinglleft -67
+KPX A hyphen -30
+KPX A o -37
+KPX A period 0
+KPX A q -38
+KPX A quotedblright -76
+KPX A quoteright -108
+KPX A t -27
+KPX A u -30
+KPX A v -84
+KPX A w -79
+KPX A y -83
+KPX Aacute C -73
+KPX Aacute G -68
+KPX Aacute O -68
+KPX Aacute Q -68
+KPX Aacute T -59
+KPX Aacute U -66
+KPX Aacute V -130
+KPX Aacute W -116
+KPX Aacute Y -74
+KPX Aacute a -5
+KPX Aacute b -22
+KPX Aacute c -35
+KPX Aacute comma 1
+KPX Aacute d -28
+KPX Aacute e -32
+KPX Aacute g -7
+KPX Aacute guillemotleft -53
+KPX Aacute guilsinglleft -67
+KPX Aacute hyphen -30
+KPX Aacute o -37
+KPX Aacute period 0
+KPX Aacute q -38
+KPX Aacute quoteright -108
+KPX Aacute t -27
+KPX Aacute u -30
+KPX Aacute v -84
+KPX Aacute w -79
+KPX Aacute y -83
+KPX Acircumflex C -73
+KPX Acircumflex G -68
+KPX Acircumflex O -68
+KPX Acircumflex Q -68
+KPX Acircumflex T -59
+KPX Acircumflex U -66
+KPX Acircumflex V -130
+KPX Acircumflex W -116
+KPX Acircumflex Y -74
+KPX Acircumflex comma 1
+KPX Acircumflex period 0
+KPX Adieresis C -73
+KPX Adieresis G -68
+KPX Adieresis O -68
+KPX Adieresis Q -68
+KPX Adieresis T -59
+KPX Adieresis U -66
+KPX Adieresis V -130
+KPX Adieresis W -116
+KPX Adieresis Y -74
+KPX Adieresis a -5
+KPX Adieresis b -22
+KPX Adieresis c -35
+KPX Adieresis comma 1
+KPX Adieresis d -28
+KPX Adieresis g -7
+KPX Adieresis guillemotleft -53
+KPX Adieresis guilsinglleft -67
+KPX Adieresis hyphen -30
+KPX Adieresis o -37
+KPX Adieresis period 0
+KPX Adieresis q -38
+KPX Adieresis quotedblright -76
+KPX Adieresis quoteright -108
+KPX Adieresis t -27
+KPX Adieresis u -30
+KPX Adieresis v -84
+KPX Adieresis w -79
+KPX Adieresis y -83
+KPX Agrave C -73
+KPX Agrave G -68
+KPX Agrave O -68
+KPX Agrave Q -68
+KPX Agrave T -59
+KPX Agrave U -66
+KPX Agrave V -130
+KPX Agrave W -116
+KPX Agrave Y -74
+KPX Agrave comma 1
+KPX Agrave period 0
+KPX Aring C -73
+KPX Aring G -68
+KPX Aring O -68
+KPX Aring Q -68
+KPX Aring T -59
+KPX Aring U -66
+KPX Aring V -130
+KPX Aring W -116
+KPX Aring Y -74
+KPX Aring a -5
+KPX Aring b -22
+KPX Aring c -35
+KPX Aring comma 1
+KPX Aring d -28
+KPX Aring e -32
+KPX Aring g -7
+KPX Aring guillemotleft -53
+KPX Aring guilsinglleft -67
+KPX Aring hyphen -30
+KPX Aring o -37
+KPX Aring period 0
+KPX Aring q -38
+KPX Aring quotedblright -76
+KPX Aring quoteright -108
+KPX Aring t -27
+KPX Aring u -30
+KPX Aring v -84
+KPX Aring w -79
+KPX Aring y -83
+KPX Atilde C -73
+KPX Atilde G -68
+KPX Atilde O -68
+KPX Atilde Q -68
+KPX Atilde T -59
+KPX Atilde U -66
+KPX Atilde V -130
+KPX Atilde W -116
+KPX Atilde Y -74
+KPX Atilde comma 1
+KPX Atilde period 0
+KPX B A -34
+KPX B AE -32
+KPX B Aacute -34
+KPX B Acircumflex -34
+KPX B Adieresis -34
+KPX B Aring -34
+KPX B Atilde -34
+KPX B O -12
+KPX B OE -4
+KPX B Oacute -12
+KPX B Ocircumflex -12
+KPX B Odieresis -12
+KPX B Ograve -12
+KPX B Oslash -11
+KPX B V -45
+KPX B W -46
+KPX B Y -44
+KPX C A -25
+KPX C AE -22
+KPX C Aacute -25
+KPX C Adieresis -25
+KPX C Aring -25
+KPX C H -2
+KPX C K -6
+KPX C O -14
+KPX C Oacute -14
+KPX C Odieresis -14
+KPX Ccedilla A -33
+KPX D A -55
+KPX D Aacute -55
+KPX D Acircumflex -55
+KPX D Adieresis -55
+KPX D Agrave -55
+KPX D Aring -55
+KPX D Atilde -55
+KPX D J -40
+KPX D T -7
+KPX D V -60
+KPX D W -50
+KPX D X -51
+KPX D Y -59
+KPX F A -79
+KPX F Aacute -79
+KPX F Acircumflex -79
+KPX F Adieresis -79
+KPX F Agrave -79
+KPX F Aring -79
+KPX F Atilde -79
+KPX F J -42
+KPX F O -7
+KPX F Odieresis -7
+KPX F a -50
+KPX F aacute -50
+KPX F adieresis -22
+KPX F ae -53
+KPX F aring -50
+KPX F comma -59
+KPX F e -51
+KPX F eacute -51
+KPX F hyphen -34
+KPX F i -1
+KPX F j -26
+KPX F o -54
+KPX F oacute -54
+KPX F odieresis -24
+KPX F oe -51
+KPX F oslash -53
+KPX F period -60
+KPX F r -7
+KPX F u -10
+KPX G A -27
+KPX G AE -24
+KPX G Aacute -27
+KPX G Acircumflex -27
+KPX G Adieresis -27
+KPX G Agrave -27
+KPX G Aring -27
+KPX G Atilde -27
+KPX G T -41
+KPX G V -33
+KPX G W -35
+KPX G Y -33
+KPX J A -30
+KPX J AE -27
+KPX J Adieresis -30
+KPX J Aring -30
+KPX K C -61
+KPX K G -56
+KPX K O -56
+KPX K OE -46
+KPX K Oacute -56
+KPX K Odieresis -56
+KPX K S 13
+KPX K T -2
+KPX K a 6
+KPX K adieresis 6
+KPX K ae 3
+KPX K aring 6
+KPX K e -20
+KPX K hyphen -47
+KPX K o -25
+KPX K oacute -25
+KPX K odieresis -25
+KPX K u -18
+KPX K udieresis -18
+KPX K y -83
+KPX L A -1
+KPX L AE 1
+KPX L Aacute -1
+KPX L Adieresis -1
+KPX L Aring -1
+KPX L C -11
+KPX L Ccedilla -14
+KPX L G -5
+KPX L O -5
+KPX L Oacute -5
+KPX L Ocircumflex -5
+KPX L Odieresis -5
+KPX L Ograve -5
+KPX L Otilde -5
+KPX L S 2
+KPX L T -74
+KPX L U -29
+KPX L Udieresis -29
+KPX L V -106
+KPX L W -87
+KPX L Y -89
+KPX L hyphen 24
+KPX L quotedblright -37
+KPX L quoteright -69
+KPX L u -11
+KPX L udieresis -12
+KPX L y -49
+KPX N A -19
+KPX N AE -16
+KPX N Aacute -19
+KPX N Adieresis -19
+KPX N Aring -19
+KPX N C -22
+KPX N Ccedilla -22
+KPX N G -16
+KPX N O -15
+KPX N Oacute -15
+KPX N Odieresis -15
+KPX N a -16
+KPX N aacute -16
+KPX N adieresis -16
+KPX N ae -18
+KPX N aring -16
+KPX N comma 1
+KPX N e -13
+KPX N eacute -13
+KPX N o -16
+KPX N oacute -16
+KPX N odieresis -16
+KPX N oslash -15
+KPX N period 0
+KPX N u -17
+KPX N udieresis -17
+KPX O A -55
+KPX O AE -54
+KPX O Aacute -55
+KPX O Adieresis -55
+KPX O Aring -55
+KPX O T -9
+KPX O V -60
+KPX O W -54
+KPX O X -51
+KPX O Y -59
+KPX Oacute A -55
+KPX Oacute T -9
+KPX Oacute V -60
+KPX Oacute W -54
+KPX Oacute Y -59
+KPX Ocircumflex T -9
+KPX Ocircumflex V -60
+KPX Ocircumflex Y -59
+KPX Odieresis A -55
+KPX Odieresis T -9
+KPX Odieresis V -60
+KPX Odieresis W -54
+KPX Odieresis X -51
+KPX Odieresis Y -59
+KPX Ograve T -9
+KPX Ograve V -60
+KPX Ograve Y -59
+KPX Oslash A -52
+KPX Otilde T -9
+KPX Otilde V -60
+KPX Otilde Y -59
+KPX P A -81
+KPX P AE -94
+KPX P Aacute -81
+KPX P Adieresis -81
+KPX P Aring -81
+KPX P J -68
+KPX P a -19
+KPX P aacute -19
+KPX P adieresis -19
+KPX P ae -22
+KPX P aring -19
+KPX P comma -85
+KPX P e -29
+KPX P eacute -29
+KPX P hyphen -39
+KPX P o -33
+KPX P oacute -33
+KPX P odieresis -22
+KPX P oe -30
+KPX P oslash -33
+KPX P period -86
+KPX R C -36
+KPX R Ccedilla -37
+KPX R G -30
+KPX R O -29
+KPX R OE -22
+KPX R Oacute -29
+KPX R Odieresis -29
+KPX R T -26
+KPX R U -37
+KPX R Udieresis -37
+KPX R V -53
+KPX R W -55
+KPX R Y -53
+KPX R a 7
+KPX R aacute 7
+KPX R adieresis 7
+KPX R ae 4
+KPX R aring 7
+KPX R e -19
+KPX R eacute -19
+KPX R hyphen -30
+KPX R o -24
+KPX R oacute -24
+KPX R odieresis -24
+KPX R oe -21
+KPX R u -17
+KPX R uacute -17
+KPX R udieresis -17
+KPX R y -27
+KPX S A -24
+KPX S AE -21
+KPX S Aacute -24
+KPX S Adieresis -24
+KPX S Aring -24
+KPX S T -16
+KPX S V -9
+KPX S W -10
+KPX S Y -8
+KPX S t -10
+KPX T A -46
+KPX T AE -44
+KPX T Aacute -46
+KPX T Acircumflex -46
+KPX T Adieresis -46
+KPX T Agrave -46
+KPX T Aring -46
+KPX T Atilde -46
+KPX T C -17
+KPX T G -11
+KPX T J -43
+KPX T O -9
+KPX T OE -3
+KPX T Oacute -9
+KPX T Ocircumflex -9
+KPX T Odieresis -9
+KPX T Ograve -9
+KPX T Oslash -11
+KPX T Otilde -9
+KPX T S -2
+KPX T V 11
+KPX T W 9
+KPX T Y 11
+KPX T a -65
+KPX T ae -69
+KPX T c -88
+KPX T colon -85
+KPX T comma -63
+KPX T e -85
+KPX T g -68
+KPX T guillemotleft -99
+KPX T guilsinglleft -113
+KPX T hyphen -73
+KPX T i -16
+KPX T j -40
+KPX T o -88
+KPX T oslash -87
+KPX T period -64
+KPX T r -61
+KPX T s -59
+KPX T semicolon -85
+KPX T u -89
+KPX T v -106
+KPX T w -107
+KPX T y -104
+KPX U A -54
+KPX U AE -52
+KPX U Aacute -54
+KPX U Acircumflex -54
+KPX U Adieresis -54
+KPX U Aring -54
+KPX U Atilde -54
+KPX U comma -17
+KPX U m -23
+KPX U n -25
+KPX U p -28
+KPX U period -18
+KPX U r -29
+KPX Uacute A -54
+KPX Uacute comma -17
+KPX Uacute m -23
+KPX Uacute n -25
+KPX Uacute p -28
+KPX Uacute period -18
+KPX Uacute r -29
+KPX Ucircumflex A -54
+KPX Udieresis A -54
+KPX Udieresis b 10
+KPX Udieresis comma -17
+KPX Udieresis m -23
+KPX Udieresis n -25
+KPX Udieresis p -28
+KPX Udieresis period -18
+KPX Udieresis r -29
+KPX Ugrave A -54
+KPX V A -113
+KPX V AE -113
+KPX V Aacute -113
+KPX V Acircumflex -113
+KPX V Adieresis -113
+KPX V Agrave -113
+KPX V Aring -113
+KPX V Atilde -113
+KPX V C -70
+KPX V G -64
+KPX V O -63
+KPX V Oacute -63
+KPX V Ocircumflex -63
+KPX V Odieresis -63
+KPX V Ograve -63
+KPX V Oslash -65
+KPX V Otilde -63
+KPX V S -25
+KPX V T 8
+KPX V a -87
+KPX V ae -90
+KPX V colon -94
+KPX V comma -94
+KPX V e -86
+KPX V g -86
+KPX V guillemotleft -98
+KPX V guilsinglleft -112
+KPX V hyphen -68
+KPX V i -13
+KPX V o -89
+KPX V oslash -87
+KPX V period -95
+KPX V r -60
+KPX V semicolon -94
+KPX V u -58
+KPX V y -56
+KPX W A -98
+KPX W AE -102
+KPX W Aacute -98
+KPX W Acircumflex -98
+KPX W Adieresis -98
+KPX W Agrave -98
+KPX W Aring -98
+KPX W Atilde -98
+KPX W C -58
+KPX W G -52
+KPX W O -51
+KPX W Oacute -51
+KPX W Ocircumflex -51
+KPX W Odieresis -51
+KPX W Ograve -51
+KPX W Oslash -50
+KPX W Otilde -51
+KPX W S -24
+KPX W T 9
+KPX W a -70
+KPX W ae -73
+KPX W colon -81
+KPX W comma -72
+KPX W e -67
+KPX W g -70
+KPX W guillemotleft -79
+KPX W guilsinglleft -93
+KPX W hyphen -49
+KPX W i -12
+KPX W o -70
+KPX W oslash -69
+KPX W period -73
+KPX W r -49
+KPX W semicolon -80
+KPX W u -45
+KPX W y -44
+KPX X C -63
+KPX X O -56
+KPX X Odieresis -56
+KPX X Q -57
+KPX X a 0
+KPX X e -27
+KPX X hyphen -43
+KPX X o -32
+KPX X u -25
+KPX X y -90
+KPX Y A -64
+KPX Y AE -62
+KPX Y Aacute -64
+KPX Y Acircumflex -64
+KPX Y Adieresis -64
+KPX Y Agrave -64
+KPX Y Aring -64
+KPX Y Atilde -64
+KPX Y C -71
+KPX Y G -65
+KPX Y O -64
+KPX Y Oacute -64
+KPX Y Ocircumflex -64
+KPX Y Odieresis -64
+KPX Y Ograve -64
+KPX Y Oslash -68
+KPX Y Otilde -64
+KPX Y S -26
+KPX Y T 7
+KPX Y a -83
+KPX Y ae -87
+KPX Y colon -103
+KPX Y comma -80
+KPX Y e -93
+KPX Y g -86
+KPX Y guillemotleft -111
+KPX Y guilsinglleft -125
+KPX Y hyphen -87
+KPX Y i -14
+KPX Y o -96
+KPX Y oslash -95
+KPX Y p -72
+KPX Y period -81
+KPX Y semicolon -103
+KPX Y u -76
+KPX Y v -78
+KPX Z v -45
+KPX Z y -44
+KPX a j -39
+KPX a quoteright -34
+KPX a v -39
+KPX a w -40
+KPX a y -44
+KPX aacute v -39
+KPX aacute w -40
+KPX aacute y -44
+KPX adieresis v -39
+KPX adieresis w -40
+KPX adieresis y -44
+KPX ae v -34
+KPX ae w -35
+KPX ae y -37
+KPX agrave v -39
+KPX agrave w -40
+KPX agrave y -44
+KPX aring v -39
+KPX aring w -40
+KPX aring y -44
+KPX b v -39
+KPX b w -40
+KPX b y -42
+KPX c h -17
+KPX c k -18
+KPX comma one -12
+KPX comma quotedblright 9
+KPX comma quoteright -23
+KPX e quoteright -19
+KPX e t -10
+KPX e v -29
+KPX e w -30
+KPX e x -19
+KPX e y -31
+KPX eacute v -29
+KPX eacute w -30
+KPX eacute y -31
+KPX ecircumflex v -29
+KPX ecircumflex w -30
+KPX ecircumflex y -31
+KPX eight four 11
+KPX eight one -19
+KPX eight seven 0
+KPX f a -17
+KPX f aacute -17
+KPX f adieresis 14
+KPX f ae -21
+KPX f aring -15
+KPX f e -29
+KPX f eacute -29
+KPX f f 12
+KPX f i 22
+KPX f j -1
+KPX f l 33
+KPX f o -32
+KPX f oacute -32
+KPX f odieresis 11
+KPX f oe -29
+KPX f oslash -31
+KPX f quoteright 18
+KPX f s -8
+KPX f t -3
+KPX five four 1
+KPX five one -28
+KPX five seven -9
+KPX four four 13
+KPX four one -35
+KPX four seven -16
+KPX g a -15
+KPX g adieresis -15
+KPX g ae -18
+KPX g aring -15
+KPX g e -20
+KPX g eacute -20
+KPX g l 0
+KPX g oacute -20
+KPX g odieresis -20
+KPX g r 1
+KPX guillemotright A -40
+KPX guillemotright AE -46
+KPX guillemotright Aacute -40
+KPX guillemotright Adieresis -40
+KPX guillemotright Aring -40
+KPX guillemotright T -100
+KPX guillemotright V -102
+KPX guillemotright W -84
+KPX guillemotright Y -106
+KPX guilsinglright A -54
+KPX guilsinglright AE -60
+KPX guilsinglright Aacute -54
+KPX guilsinglright Adieresis -54
+KPX guilsinglright Aring -54
+KPX guilsinglright T -114
+KPX guilsinglright V -116
+KPX guilsinglright W -98
+KPX guilsinglright Y -120
+KPX h quoteright -30
+KPX h y -34
+KPX hyphen A -18
+KPX hyphen AE -24
+KPX hyphen Aacute -18
+KPX hyphen Adieresis -18
+KPX hyphen Aring -18
+KPX hyphen T -74
+KPX hyphen V -72
+KPX hyphen W -54
+KPX hyphen Y -83
+KPX i T -18
+KPX i j -36
+KPX k a -3
+KPX k aacute -3
+KPX k adieresis -3
+KPX k ae -7
+KPX k aring -3
+KPX k comma 0
+KPX k e -33
+KPX k eacute -33
+KPX k g -4
+KPX k hyphen -47
+KPX k o -38
+KPX k oacute -38
+KPX k odieresis -38
+KPX k period 0
+KPX k s 5
+KPX k u -5
+KPX k udieresis -5
+KPX l v -22
+KPX l y -19
+KPX m p -16
+KPX m v -32
+KPX m w -33
+KPX m y -33
+KPX n T -56
+KPX n p -14
+KPX n quoteright -28
+KPX n v -31
+KPX n w -32
+KPX n y -32
+KPX nine four 2
+KPX nine one -26
+KPX nine seven 10
+KPX o T -88
+KPX o quoteright -27
+KPX o t -10
+KPX o v -42
+KPX o w -38
+KPX o x -29
+KPX o y -42
+KPX oacute v -42
+KPX oacute w -38
+KPX oacute y -42
+KPX ocircumflex t -10
+KPX odieresis t -10
+KPX odieresis v -42
+KPX odieresis w -38
+KPX odieresis x -29
+KPX odieresis y -42
+KPX ograve v -42
+KPX ograve w -38
+KPX ograve y -42
+KPX one comma -16
+KPX one eight -34
+KPX one five -16
+KPX one four -56
+KPX one nine -9
+KPX one one -27
+KPX one period -17
+KPX one seven -56
+KPX one six -47
+KPX one three -10
+KPX one two -2
+KPX one zero -35
+KPX p t -11
+KPX p y -34
+KPX period one -21
+KPX period quotedblright 5
+KPX period quoteright -27
+KPX q c -13
+KPX q u -15
+KPX quotedblbase A 19
+KPX quotedblbase AE 20
+KPX quotedblbase T -59
+KPX quotedblbase V -98
+KPX quotedblbase W -75
+KPX quotedblbase Y -73
+KPX quotedblleft A -59
+KPX quotedblleft AE -78
+KPX quotedblleft Aacute -59
+KPX quotedblleft Adieresis -59
+KPX quotedblleft Aring -59
+KPX quotedblleft T 9
+KPX quotedblleft V 15
+KPX quotedblleft W 13
+KPX quotedblleft Y 15
+KPX quotedblright A -72
+KPX quotedblright AE -91
+KPX quotedblright Aacute -72
+KPX quotedblright Adieresis -72
+KPX quotedblright Aring -72
+KPX quotedblright T 4
+KPX quotedblright V 5
+KPX quotedblright W 4
+KPX quotedblright Y 6
+KPX quoteleft A -92
+KPX quoteleft AE -111
+KPX quoteleft Aacute -92
+KPX quoteleft Adieresis -92
+KPX quoteleft Aring -92
+KPX quoteleft T -22
+KPX quoteleft V -17
+KPX quoteleft W -19
+KPX quoteleft Y -17
+KPX quoteright A -91
+KPX quoteright AE -110
+KPX quoteright Aacute -91
+KPX quoteright Adieresis -91
+KPX quoteright Aring -91
+KPX quoteright comma -34
+KPX quoteright d -31
+KPX quoteright o -34
+KPX quoteright period -35
+KPX quoteright r -26
+KPX quoteright s -17
+KPX quoteright t -19
+KPX quoteright v -25
+KPX quoteright w -23
+KPX quoteright y -22
+KPX r a -6
+KPX r aacute -6
+KPX r acircumflex -6
+KPX r adieresis -6
+KPX r ae -8
+KPX r agrave -6
+KPX r aring -6
+KPX r c -15
+KPX r ccedilla -10
+KPX r colon -16
+KPX r comma -67
+KPX r d -13
+KPX r e -11
+KPX r eacute -11
+KPX r ecircumflex -11
+KPX r egrave -11
+KPX r f 11
+KPX r g -5
+KPX r h -15
+KPX r hyphen -18
+KPX r i 6
+KPX r j -12
+KPX r k -15
+KPX r l -14
+KPX r m 6
+KPX r n 4
+KPX r o -14
+KPX r oacute -14
+KPX r ocircumflex -14
+KPX r odieresis -14
+KPX r oe -12
+KPX r ograve -14
+KPX r oslash -14
+KPX r p 4
+KPX r period -68
+KPX r q -15
+KPX r quoteright -8
+KPX r r 0
+KPX r s 0
+KPX r semicolon -16
+KPX r t 9
+KPX r u 9
+KPX r v 8
+KPX r w 7
+KPX r x 11
+KPX r y 9
+KPX r z -1
+KPX s quoteright -17
+KPX s t -7
+KPX seven colon -64
+KPX seven comma -57
+KPX seven eight -18
+KPX seven five -34
+KPX seven four -54
+KPX seven one -25
+KPX seven period -58
+KPX seven seven -6
+KPX seven six -37
+KPX seven three -20
+KPX seven two -21
+KPX six four 13
+KPX six one -43
+KPX six seven -7
+KPX t S 11
+KPX t a 11
+KPX t aacute 11
+KPX t adieresis 11
+KPX t ae 7
+KPX t aring 11
+KPX t colon -12
+KPX t e -1
+KPX t eacute -1
+KPX t h -4
+KPX t o -4
+KPX t oacute -4
+KPX t odieresis -4
+KPX t quoteright -31
+KPX t semicolon -12
+KPX three four 9
+KPX three one -33
+KPX three seven -15
+KPX two four 14
+KPX two one -29
+KPX two seven -7
+KPX u quoteright -25
+KPX v a -23
+KPX v aacute -23
+KPX v acircumflex -23
+KPX v adieresis -23
+KPX v ae -25
+KPX v agrave -23
+KPX v aring -23
+KPX v atilde -23
+KPX v c -40
+KPX v colon -23
+KPX v comma -56
+KPX v e -35
+KPX v eacute -35
+KPX v ecircumflex -35
+KPX v egrave -35
+KPX v g -22
+KPX v hyphen -27
+KPX v l -16
+KPX v o -40
+KPX v oacute -40
+KPX v odieresis -40
+KPX v ograve -40
+KPX v oslash -39
+KPX v period -57
+KPX v s -16
+KPX v semicolon -23
+KPX w a -23
+KPX w aacute -23
+KPX w acircumflex -23
+KPX w adieresis -23
+KPX w ae -25
+KPX w agrave -23
+KPX w aring -23
+KPX w atilde -23
+KPX w c -36
+KPX w colon -23
+KPX w comma -50
+KPX w e -33
+KPX w eacute -33
+KPX w ecircumflex -33
+KPX w egrave -33
+KPX w g -22
+KPX w hyphen -23
+KPX w l -16
+KPX w o -36
+KPX w oacute -36
+KPX w odieresis -36
+KPX w ograve -36
+KPX w oslash -35
+KPX w period -51
+KPX w s -16
+KPX w semicolon -23
+KPX x a -2
+KPX x c -30
+KPX x e -27
+KPX x eacute -27
+KPX x o -30
+KPX x q -32
+KPX y a -32
+KPX y aacute -32
+KPX y acircumflex -32
+KPX y adieresis -32
+KPX y ae -34
+KPX y agrave -32
+KPX y aring -32
+KPX y atilde -32
+KPX y c -42
+KPX y colon -28
+KPX y comma -56
+KPX y e -40
+KPX y eacute -40
+KPX y ecircumflex -40
+KPX y egrave -40
+KPX y g -31
+KPX y hyphen -29
+KPX y l -19
+KPX y o -42
+KPX y oacute -42
+KPX y odieresis -42
+KPX y ograve -42
+KPX y oslash -41
+KPX y period -57
+KPX y s -24
+KPX y semicolon -28
+KPX zero four 11
+KPX zero one -31
+KPX zero seven 7
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmb8a.pfb b/Master/tlpkg/tlgs/lib/fonts/utmb8a.pfb
new file mode 100644
index 00000000000..47f8fd57da4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmb8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmbi8a.afm b/Master/tlpkg/tlgs/lib/fonts/utmbi8a.afm
new file mode 100644
index 00000000000..0833e4f046f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmbi8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusRomNo9L-MediItal
+FullName Nimbus Roman No9 L Medium Italic
+FamilyName Nimbus Roman No9 L
+Weight Bold
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -200 -324 996 964
+CapHeight 669
+XHeight 449
+Descender -205
+Ascender 699
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ;
+C 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ;
+C 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ;
+C 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ;
+C 37 ; WX 833 ; N percent ; B 39 -10 793 692 ;
+C 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ;
+C 39 ; WX 333 ; N quoteright ; B 98 369 302 685 ;
+C 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ;
+C 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ;
+C 42 ; WX 500 ; N asterisk ; B 65 252 456 685 ;
+C 43 ; WX 570 ; N plus ; B 33 0 537 506 ;
+C 44 ; WX 250 ; N comma ; B -60 -182 144 134 ;
+C 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ;
+C 46 ; WX 250 ; N period ; B -9 -13 139 135 ;
+C 47 ; WX 278 ; N slash ; B -64 -18 342 685 ;
+C 48 ; WX 500 ; N zero ; B 17 -14 477 683 ;
+C 49 ; WX 500 ; N one ; B 5 0 419 683 ;
+C 50 ; WX 500 ; N two ; B -27 0 446 683 ;
+C 51 ; WX 500 ; N three ; B -15 -13 450 683 ;
+C 52 ; WX 500 ; N four ; B -15 0 503 683 ;
+C 53 ; WX 500 ; N five ; B -11 -13 487 669 ;
+C 54 ; WX 500 ; N six ; B 23 -15 509 679 ;
+C 55 ; WX 500 ; N seven ; B 52 0 525 669 ;
+C 56 ; WX 500 ; N eight ; B 3 -13 476 683 ;
+C 57 ; WX 500 ; N nine ; B -12 -10 475 683 ;
+C 58 ; WX 333 ; N colon ; B 23 -13 264 459 ;
+C 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ;
+C 60 ; WX 570 ; N less ; B 31 -12 539 518 ;
+C 61 ; WX 570 ; N equal ; B 33 107 537 399 ;
+C 62 ; WX 570 ; N greater ; B 31 -12 539 518 ;
+C 63 ; WX 500 ; N question ; B 79 -13 470 684 ;
+C 64 ; WX 832 ; N at ; B 63 -18 770 685 ;
+C 65 ; WX 667 ; N A ; B -67 0 593 683 ;
+C 66 ; WX 667 ; N B ; B -24 0 624 669 ;
+C 67 ; WX 667 ; N C ; B 32 -18 677 685 ;
+C 68 ; WX 722 ; N D ; B -46 0 685 669 ;
+C 69 ; WX 667 ; N E ; B -27 0 653 669 ;
+C 70 ; WX 667 ; N F ; B -13 0 660 669 ;
+C 71 ; WX 722 ; N G ; B 21 -18 706 685 ;
+C 72 ; WX 778 ; N H ; B -24 0 799 669 ;
+C 73 ; WX 389 ; N I ; B -32 0 406 669 ;
+C 74 ; WX 500 ; N J ; B -46 -99 524 669 ;
+C 75 ; WX 667 ; N K ; B -21 0 702 669 ;
+C 76 ; WX 611 ; N L ; B -22 0 590 669 ;
+C 77 ; WX 889 ; N M ; B -29 -12 917 669 ;
+C 78 ; WX 722 ; N N ; B -27 -15 748 669 ;
+C 79 ; WX 722 ; N O ; B 27 -18 691 685 ;
+C 80 ; WX 611 ; N P ; B -27 0 613 669 ;
+C 81 ; WX 722 ; N Q ; B 27 -208 691 685 ;
+C 82 ; WX 667 ; N R ; B -29 0 623 669 ;
+C 83 ; WX 556 ; N S ; B 2 -18 526 685 ;
+C 84 ; WX 611 ; N T ; B 50 0 650 669 ;
+C 85 ; WX 722 ; N U ; B 67 -18 744 669 ;
+C 86 ; WX 667 ; N V ; B 65 -18 715 669 ;
+C 87 ; WX 889 ; N W ; B 65 -18 940 669 ;
+C 88 ; WX 667 ; N X ; B -24 0 694 669 ;
+C 89 ; WX 611 ; N Y ; B 73 0 659 669 ;
+C 90 ; WX 611 ; N Z ; B -11 0 590 669 ;
+C 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ;
+C 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ;
+C 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ;
+C 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 128 369 332 685 ;
+C 97 ; WX 500 ; N a ; B -21 -14 455 462 ;
+C 98 ; WX 500 ; N b ; B -14 -13 444 699 ;
+C 99 ; WX 444 ; N c ; B -5 -13 392 462 ;
+C 100 ; WX 500 ; N d ; B -21 -13 517 699 ;
+C 101 ; WX 444 ; N e ; B 5 -13 398 462 ;
+C 102 ; WX 333 ; N f ; B -169 -205 446 698 ;
+C 103 ; WX 500 ; N g ; B -52 -203 478 462 ;
+C 104 ; WX 556 ; N h ; B -13 -9 498 699 ;
+C 105 ; WX 278 ; N i ; B 2 -9 263 685 ;
+C 106 ; WX 278 ; N j ; B -189 -207 279 685 ;
+C 107 ; WX 500 ; N k ; B -23 -8 483 699 ;
+C 108 ; WX 278 ; N l ; B 2 -9 290 699 ;
+C 109 ; WX 778 ; N m ; B -14 -9 722 462 ;
+C 110 ; WX 556 ; N n ; B -6 -9 493 462 ;
+C 111 ; WX 500 ; N o ; B -3 -13 441 462 ;
+C 112 ; WX 500 ; N p ; B -120 -205 446 462 ;
+C 113 ; WX 500 ; N q ; B 1 -205 471 462 ;
+C 114 ; WX 389 ; N r ; B -21 0 389 462 ;
+C 115 ; WX 389 ; N s ; B -19 -13 333 462 ;
+C 116 ; WX 278 ; N t ; B -11 -9 281 594 ;
+C 117 ; WX 556 ; N u ; B 15 -9 492 462 ;
+C 118 ; WX 444 ; N v ; B 16 -13 401 462 ;
+C 119 ; WX 667 ; N w ; B 16 -13 614 462 ;
+C 120 ; WX 500 ; N x ; B -46 -13 469 462 ;
+C 121 ; WX 444 ; N y ; B -94 -205 392 462 ;
+C 122 ; WX 389 ; N z ; B -43 -78 368 449 ;
+C 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ;
+C 124 ; WX 220 ; N bar ; B 66 -18 154 685 ;
+C 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ;
+C 126 ; WX 570 ; N asciitilde ; B 54 175 516 331 ;
+C 161 ; WX 389 ; N exclamdown ; B 19 -205 320 494 ;
+C 162 ; WX 500 ; N cent ; B 42 -143 439 576 ;
+C 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ;
+C 164 ; WX 167 ; N fraction ; B -169 -14 324 683 ;
+C 165 ; WX 500 ; N yen ; B 33 0 628 669 ;
+C 166 ; WX 500 ; N florin ; B -87 -156 537 707 ;
+C 167 ; WX 500 ; N section ; B 36 -143 459 685 ;
+C 168 ; WX 500 ; N currency ; B -26 34 526 586 ;
+C 169 ; WX 278 ; N quotesingle ; B 128 398 268 685 ;
+C 170 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ;
+C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ;
+C 173 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ;
+C 174 ; WX 556 ; N fi ; B -188 -205 514 703 ;
+C 175 ; WX 556 ; N fl ; B -186 -205 553 704 ;
+C 177 ; WX 500 ; N endash ; B -40 178 477 269 ;
+C 178 ; WX 500 ; N dagger ; B 91 -145 494 685 ;
+C 179 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ;
+C 180 ; WX 250 ; N periodcentered ; B 51 257 199 405 ;
+C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ;
+C 183 ; WX 350 ; N bullet ; B 0 175 350 525 ;
+C 184 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ;
+C 185 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ;
+C 186 ; WX 500 ; N quotedblright ; B 53 369 513 685 ;
+C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ;
+C 188 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ;
+C 189 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ;
+C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ;
+C 193 ; WX 333 ; N grave ; B 85 516 297 697 ;
+C 194 ; WX 333 ; N acute ; B 139 516 379 697 ;
+C 195 ; WX 333 ; N circumflex ; B 40 516 367 690 ;
+C 196 ; WX 333 ; N tilde ; B 48 536 407 655 ;
+C 197 ; WX 333 ; N macron ; B 51 553 393 623 ;
+C 198 ; WX 333 ; N breve ; B 71 516 387 678 ;
+C 199 ; WX 333 ; N dotaccent ; B 163 525 293 655 ;
+C 200 ; WX 333 ; N dieresis ; B 55 525 397 655 ;
+C 202 ; WX 333 ; N ring ; B 127 540 340 754 ;
+C 203 ; WX 333 ; N cedilla ; B -80 -218 156 5 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ;
+C 206 ; WX 333 ; N ogonek ; B -40 -173 189 44 ;
+C 207 ; WX 333 ; N caron ; B 79 516 411 690 ;
+C 208 ; WX 1000 ; N emdash ; B -40 178 977 269 ;
+C 225 ; WX 944 ; N AE ; B -64 0 918 669 ;
+C 227 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ;
+C 232 ; WX 611 ; N Lslash ; B -22 0 590 669 ;
+C 233 ; WX 722 ; N Oslash ; B 27 -125 691 764 ;
+C 234 ; WX 944 ; N OE ; B 23 -9 946 677 ;
+C 235 ; WX 300 ; N ordmasculine ; B 56 400 350 685 ;
+C 241 ; WX 722 ; N ae ; B -5 -13 673 462 ;
+C 245 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ;
+C 248 ; WX 278 ; N lslash ; B -13 -9 301 699 ;
+C 249 ; WX 500 ; N oslash ; B -3 -119 441 560 ;
+C 250 ; WX 722 ; N oe ; B 6 -13 674 462 ;
+C 251 ; WX 500 ; N germandbls ; B -200 -200 473 705 ;
+C -1 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ;
+C -1 ; WX 722 ; N Uacute ; B 67 -18 744 904 ;
+C -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ;
+C -1 ; WX 611 ; N Tcaron ; B 50 0 650 900 ;
+C -1 ; WX 556 ; N Scaron ; B 2 -18 526 897 ;
+C -1 ; WX 667 ; N Rcaron ; B -29 0 623 900 ;
+C -1 ; WX 667 ; N Racute ; B -29 0 623 907 ;
+C -1 ; WX 556 ; N Sacute ; B 2 -18 526 907 ;
+C -1 ; WX 722 ; N Otilde ; B 27 -18 691 862 ;
+C -1 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ;
+C -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 693 907 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 907 ;
+C -1 ; WX 611 ; N Yacute ; B 73 0 659 904 ;
+C -1 ; WX 722 ; N Eth ; B -31 0 700 669 ;
+C -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ;
+C -1 ; WX 611 ; N Zacute ; B -11 0 590 907 ;
+C -1 ; WX 722 ; N Uring ; B 67 -18 744 964 ;
+C -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ;
+C -1 ; WX 444 ; N eogonek ; B 5 -173 404 462 ;
+C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ;
+C -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ;
+C -1 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ;
+C -1 ; WX 611 ; N Thorn ; B -27 0 574 669 ;
+C -1 ; WX 444 ; N eacute ; B 5 -13 435 697 ;
+C -1 ; WX 444 ; N edieresis ; B 5 -13 443 655 ;
+C -1 ; WX 600 ; N dcaron ; B -21 -13 664 699 ;
+C -1 ; WX 444 ; N ccedilla ; B -24 -218 392 462 ;
+C -1 ; WX 444 ; N ccaron ; B -5 -13 468 690 ;
+C -1 ; WX 444 ; N cacute ; B -5 -13 444 697 ;
+C -1 ; WX 500 ; N aogonek ; B -21 -173 500 462 ;
+C -1 ; WX 500 ; N aring ; B -21 -14 455 754 ;
+C -1 ; WX 500 ; N atilde ; B -21 -14 491 655 ;
+C -1 ; WX 500 ; N abreve ; B -21 -14 470 678 ;
+C -1 ; WX 444 ; N egrave ; B 5 -13 398 697 ;
+C -1 ; WX 500 ; N agrave ; B -21 -14 455 697 ;
+C -1 ; WX 500 ; N aacute ; B -21 -14 463 697 ;
+C -1 ; WX 500 ; N adieresis ; B -21 -14 471 655 ;
+C -1 ; WX 722 ; N Uogonek ; B 67 -173 744 669 ;
+C -1 ; WX 556 ; N ugrave ; B 15 -9 492 697 ;
+C -1 ; WX 556 ; N uacute ; B 15 -9 492 697 ;
+C -1 ; WX 556 ; N udieresis ; B 15 -9 494 655 ;
+C -1 ; WX 345 ; N tcaron ; B -11 -9 409 685 ;
+C -1 ; WX 389 ; N scommaaccent ; B -26 -324 333 462 ;
+C -1 ; WX 611 ; N Zcaron ; B -11 0 590 897 ;
+C -1 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ;
+C -1 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ;
+C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 865 ;
+C -1 ; WX 389 ; N scaron ; B -19 -13 439 690 ;
+C -1 ; WX 667 ; N Amacron ; B -67 0 593 833 ;
+C -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 50 -324 650 669 ;
+C -1 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ;
+C -1 ; WX 500 ; N thorn ; B -120 -205 446 699 ;
+C -1 ; WX 667 ; N Emacron ; B -27 0 653 833 ;
+C -1 ; WX 722 ; N Ograve ; B 27 -18 691 904 ;
+C -1 ; WX 722 ; N Oacute ; B 27 -18 691 904 ;
+C -1 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ;
+C -1 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ;
+C -1 ; WX 722 ; N Ncaron ; B -27 -15 748 900 ;
+C -1 ; WX 722 ; N Nacute ; B -27 -15 748 907 ;
+C -1 ; WX 611 ; N Lcaron ; B -22 0 651 685 ;
+C -1 ; WX 611 ; N Lacute ; B -22 0 590 907 ;
+C -1 ; WX 389 ; N Idotaccent ; B -32 0 406 865 ;
+C -1 ; WX 389 ; N racute ; B -21 0 407 697 ;
+C -1 ; WX 389 ; N Icircumflex ; B -32 0 420 897 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ;
+C -1 ; WX 500 ; N otilde ; B -3 -13 491 655 ;
+C -1 ; WX 500 ; N Euro ; B 53 -5 666 689 ;
+C -1 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ;
+C -1 ; WX 300 ; N onesuperior ; B 30 274 301 683 ;
+C -1 ; WX 300 ; N twosuperior ; B 2 274 313 683 ;
+C -1 ; WX 300 ; N threesuperior ; B 17 265 321 683 ;
+C -1 ; WX 389 ; N Igrave ; B -32 0 406 904 ;
+C -1 ; WX 389 ; N Iacute ; B -32 0 407 907 ;
+C -1 ; WX 389 ; N Imacron ; B -32 0 461 833 ;
+C -1 ; WX 389 ; N Iogonek ; B -32 -173 406 669 ;
+C -1 ; WX 389 ; N Idieresis ; B -32 0 445 862 ;
+C -1 ; WX 722 ; N Gbreve ; B 21 -18 706 888 ;
+C -1 ; WX 722 ; N Umacron ; B 67 -18 744 833 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B -21 -324 702 669 ;
+C -1 ; WX 500 ; N ograve ; B -3 -13 441 697 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 2 -324 526 685 ;
+C -1 ; WX 667 ; N Eogonek ; B -27 -173 667 669 ;
+C -1 ; WX 500 ; N oacute ; B -3 -13 463 697 ;
+C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 865 ;
+C -1 ; WX 278 ; N iogonek ; B 2 -173 278 685 ;
+C -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 765 ;
+C -1 ; WX 500 ; N odieresis ; B -3 -13 466 655 ;
+C -1 ; WX 556 ; N ntilde ; B -6 -9 504 655 ;
+C -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ;
+C -1 ; WX 667 ; N Ecaron ; B -27 0 653 900 ;
+C -1 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ;
+C -1 ; WX 389 ; N scedilla ; B -40 -218 333 462 ;
+C -1 ; WX 389 ; N rcaron ; B -21 0 439 690 ;
+C -1 ; WX 667 ; N Egrave ; B -27 0 653 904 ;
+C -1 ; WX 667 ; N Eacute ; B -27 0 653 904 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 21 -324 706 685 ;
+C -1 ; WX 667 ; N Rcommaaccent ; B -29 -324 623 669 ;
+C -1 ; WX 667 ; N Edieresis ; B -27 0 653 862 ;
+C -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ;
+C -1 ; WX 556 ; N uogonek ; B 15 -173 556 462 ;
+C -1 ; WX 556 ; N umacron ; B 15 -9 505 623 ;
+C -1 ; WX 722 ; N Dcaron ; B -46 0 685 900 ;
+C -1 ; WX 382 ; N lcaron ; B 2 -9 446 699 ;
+C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 900 ;
+C -1 ; WX 667 ; N Cacute ; B 32 -18 677 907 ;
+C -1 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ;
+C -1 ; WX 400 ; N degree ; B 83 397 369 683 ;
+C -1 ; WX 667 ; N Aogonek ; B -67 -173 729 683 ;
+C -1 ; WX 606 ; N minus ; B 51 209 555 297 ;
+C -1 ; WX 570 ; N multiply ; B 48 16 522 490 ;
+C -1 ; WX 570 ; N divide ; B 33 -29 537 535 ;
+C -1 ; WX 667 ; N Aring ; B -67 0 593 950 ;
+C -1 ; WX 1000 ; N trademark ; B 32 263 968 669 ;
+C -1 ; WX 389 ; N rcommaaccent ; B -80 -324 389 462 ;
+C -1 ; WX 278 ; N lacute ; B 2 -9 392 907 ;
+C -1 ; WX 500 ; N omacron ; B -3 -13 477 623 ;
+C -1 ; WX 667 ; N Atilde ; B -67 0 593 862 ;
+C -1 ; WX 278 ; N icircumflex ; B -2 -9 325 690 ;
+C -1 ; WX 278 ; N igrave ; B 2 -9 260 697 ;
+C -1 ; WX 556 ; N ncommaaccent ; B -6 -324 493 462 ;
+C -1 ; WX 278 ; N lcommaaccent ; B -81 -324 290 699 ;
+C -1 ; WX 570 ; N plusminus ; B 33 0 537 568 ;
+C -1 ; WX 750 ; N onehalf ; B -9 -14 723 683 ;
+C -1 ; WX 750 ; N onequarter ; B 7 -14 721 683 ;
+C -1 ; WX 750 ; N threequarters ; B 7 -14 726 683 ;
+C -1 ; WX 278 ; N iacute ; B 2 -9 352 697 ;
+C -1 ; WX 667 ; N Abreve ; B -67 0 593 888 ;
+C -1 ; WX 500 ; N kcommaaccent ; B -23 -324 483 699 ;
+C -1 ; WX 722 ; N Omacron ; B 27 -18 691 833 ;
+C -1 ; WX 278 ; N imacron ; B 2 -9 366 623 ;
+C -1 ; WX 444 ; N emacron ; B 5 -13 449 623 ;
+C -1 ; WX 500 ; N amacron ; B -21 -14 477 623 ;
+C -1 ; WX 278 ; N tcommaaccent ; B -81 -324 281 594 ;
+C -1 ; WX 444 ; N ydieresis ; B -94 -205 438 655 ;
+C -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ;
+C -1 ; WX 389 ; N zcaron ; B -43 -78 424 690 ;
+C -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ;
+C -1 ; WX 444 ; N yacute ; B -94 -205 435 697 ;
+C -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ;
+C -1 ; WX 500 ; N eth ; B -3 -13 454 699 ;
+C -1 ; WX 556 ; N uring ; B 15 -9 492 754 ;
+C -1 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ;
+C -1 ; WX 333 ; N commaaccent ; B -54 -324 130 -40 ;
+C -1 ; WX 747 ; N copyright ; B 30 -18 718 685 ;
+C -1 ; WX 747 ; N registered ; B 30 -18 718 685 ;
+C -1 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ;
+C -1 ; WX 278 ; N idieresis ; B 2 -9 360 655 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 570 ; N notequal ; B 33 -13 537 519 ;
+C -1 ; WX 549 ; N radical ; B -17 -35 535 916 ;
+C -1 ; WX 667 ; N Agrave ; B -67 0 593 904 ;
+C -1 ; WX 667 ; N Aacute ; B -67 0 593 904 ;
+C -1 ; WX 570 ; N lessequal ; B 31 0 539 642 ;
+C -1 ; WX 570 ; N greaterequal ; B 31 0 539 642 ;
+C -1 ; WX 606 ; N logicalnot ; B 51 108 555 399 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 16 -20 472 743 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B -27 -324 748 669 ;
+C -1 ; WX 500 ; N dcroat ; B -21 -13 540 699 ;
+C -1 ; WX 220 ; N brokenbar ; B 66 -18 154 685 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B -22 -324 590 669 ;
+C -1 ; WX 667 ; N Adieresis ; B -67 0 593 862 ;
+C -1 ; WX 576 ; N mu ; B -60 -207 516 449 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -61
+KPX A Ccedilla -63
+KPX A G -59
+KPX A O -53
+KPX A Odieresis -53
+KPX A Q -54
+KPX A T -33
+KPX A U -61
+KPX A Uacute -61
+KPX A Ucircumflex -61
+KPX A Udieresis -61
+KPX A Ugrave -61
+KPX A V -110
+KPX A W -107
+KPX A Y -44
+KPX A a -5
+KPX A b -1
+KPX A c -20
+KPX A ccedilla -29
+KPX A comma 0
+KPX A d -5
+KPX A e -25
+KPX A g -20
+KPX A guillemotleft -58
+KPX A guilsinglleft -68
+KPX A hyphen -23
+KPX A o -23
+KPX A period 1
+KPX A q -18
+KPX A quotedblright -78
+KPX A quoteright -101
+KPX A t -4
+KPX A u -18
+KPX A v -51
+KPX A w -56
+KPX A y -67
+KPX Aacute C -61
+KPX Aacute G -59
+KPX Aacute O -53
+KPX Aacute Q -54
+KPX Aacute T -33
+KPX Aacute U -61
+KPX Aacute V -110
+KPX Aacute W -107
+KPX Aacute Y -44
+KPX Aacute a -5
+KPX Aacute b -1
+KPX Aacute c -20
+KPX Aacute comma 0
+KPX Aacute d -5
+KPX Aacute e -25
+KPX Aacute g -20
+KPX Aacute guillemotleft -58
+KPX Aacute guilsinglleft -68
+KPX Aacute hyphen -23
+KPX Aacute o -23
+KPX Aacute period 1
+KPX Aacute q -18
+KPX Aacute quoteright -101
+KPX Aacute t -4
+KPX Aacute u -18
+KPX Aacute v -51
+KPX Aacute w -56
+KPX Aacute y -67
+KPX Acircumflex C -61
+KPX Acircumflex G -59
+KPX Acircumflex O -53
+KPX Acircumflex Q -54
+KPX Acircumflex T -33
+KPX Acircumflex U -61
+KPX Acircumflex V -110
+KPX Acircumflex W -107
+KPX Acircumflex Y -44
+KPX Acircumflex comma 0
+KPX Acircumflex period 1
+KPX Adieresis C -61
+KPX Adieresis G -59
+KPX Adieresis O -53
+KPX Adieresis Q -54
+KPX Adieresis T -33
+KPX Adieresis U -61
+KPX Adieresis V -110
+KPX Adieresis W -107
+KPX Adieresis Y -44
+KPX Adieresis a -5
+KPX Adieresis b -1
+KPX Adieresis c -20
+KPX Adieresis comma 0
+KPX Adieresis d -5
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -58
+KPX Adieresis guilsinglleft -68
+KPX Adieresis hyphen -23
+KPX Adieresis o -23
+KPX Adieresis period 1
+KPX Adieresis q -18
+KPX Adieresis quotedblright -78
+KPX Adieresis quoteright -101
+KPX Adieresis t -4
+KPX Adieresis u -18
+KPX Adieresis v -51
+KPX Adieresis w -56
+KPX Adieresis y -67
+KPX Agrave C -61
+KPX Agrave G -59
+KPX Agrave O -53
+KPX Agrave Q -54
+KPX Agrave T -33
+KPX Agrave U -61
+KPX Agrave V -110
+KPX Agrave W -107
+KPX Agrave Y -44
+KPX Agrave comma 0
+KPX Agrave period 1
+KPX Aring C -61
+KPX Aring G -59
+KPX Aring O -53
+KPX Aring Q -54
+KPX Aring T -33
+KPX Aring U -61
+KPX Aring V -110
+KPX Aring W -107
+KPX Aring Y -44
+KPX Aring a -5
+KPX Aring b -1
+KPX Aring c -20
+KPX Aring comma 0
+KPX Aring d -5
+KPX Aring e -25
+KPX Aring g -20
+KPX Aring guillemotleft -58
+KPX Aring guilsinglleft -68
+KPX Aring hyphen -23
+KPX Aring o -23
+KPX Aring period 1
+KPX Aring q -18
+KPX Aring quotedblright -78
+KPX Aring quoteright -101
+KPX Aring t -4
+KPX Aring u -18
+KPX Aring v -51
+KPX Aring w -56
+KPX Aring y -67
+KPX Atilde C -61
+KPX Atilde G -59
+KPX Atilde O -53
+KPX Atilde Q -54
+KPX Atilde T -33
+KPX Atilde U -61
+KPX Atilde V -110
+KPX Atilde W -107
+KPX Atilde Y -44
+KPX Atilde comma 0
+KPX Atilde period 1
+KPX B A -34
+KPX B AE -40
+KPX B Aacute -34
+KPX B Acircumflex -34
+KPX B Adieresis -34
+KPX B Aring -34
+KPX B Atilde -34
+KPX B O -22
+KPX B OE -20
+KPX B Oacute -22
+KPX B Ocircumflex -22
+KPX B Odieresis -22
+KPX B Ograve -22
+KPX B Oslash -23
+KPX B V -46
+KPX B W -46
+KPX B Y -50
+KPX C A -24
+KPX C AE -31
+KPX C Aacute -24
+KPX C Adieresis -24
+KPX C Aring -24
+KPX C H -26
+KPX C K -28
+KPX C O -25
+KPX C Oacute -25
+KPX C Odieresis -25
+KPX Ccedilla A -30
+KPX D A -54
+KPX D Aacute -54
+KPX D Acircumflex -54
+KPX D Adieresis -54
+KPX D Agrave -54
+KPX D Aring -54
+KPX D Atilde -54
+KPX D J -67
+KPX D T -27
+KPX D V -60
+KPX D W -58
+KPX D X -64
+KPX D Y -64
+KPX F A -101
+KPX F Aacute -101
+KPX F Acircumflex -101
+KPX F Adieresis -101
+KPX F Agrave -101
+KPX F Aring -101
+KPX F Atilde -101
+KPX F J -88
+KPX F O -48
+KPX F Odieresis -48
+KPX F a -75
+KPX F aacute -75
+KPX F adieresis -48
+KPX F ae -83
+KPX F aring -75
+KPX F comma -96
+KPX F e -86
+KPX F eacute -86
+KPX F hyphen -54
+KPX F i -29
+KPX F j -34
+KPX F o -81
+KPX F oacute -82
+KPX F odieresis -45
+KPX F oe -86
+KPX F oslash -79
+KPX F period -98
+KPX F r -38
+KPX F u -42
+KPX G A -14
+KPX G AE -20
+KPX G Aacute -14
+KPX G Acircumflex -14
+KPX G Adieresis -14
+KPX G Agrave -14
+KPX G Aring -14
+KPX G Atilde -14
+KPX G T -42
+KPX G V -27
+KPX G W -27
+KPX G Y -31
+KPX J A -39
+KPX J AE -42
+KPX J Adieresis -39
+KPX J Aring -39
+KPX K C -51
+KPX K G -46
+KPX K O -43
+KPX K OE -42
+KPX K Oacute -43
+KPX K Odieresis -43
+KPX K S -1
+KPX K T 0
+KPX K a 3
+KPX K adieresis 3
+KPX K ae -4
+KPX K aring 3
+KPX K e -16
+KPX K hyphen -30
+KPX K o -13
+KPX K oacute -13
+KPX K odieresis -13
+KPX K u -8
+KPX K udieresis -8
+KPX K y -68
+KPX L A 28
+KPX L AE 25
+KPX L Aacute 28
+KPX L Adieresis 28
+KPX L Aring 28
+KPX L C 0
+KPX L Ccedilla 0
+KPX L G 4
+KPX L O 4
+KPX L Oacute 4
+KPX L Ocircumflex 4
+KPX L Odieresis 4
+KPX L Ograve 4
+KPX L Otilde 4
+KPX L S 1
+KPX L T -30
+KPX L U -17
+KPX L Udieresis -17
+KPX L V -77
+KPX L W -74
+KPX L Y -41
+KPX L hyphen 41
+KPX L quotedblright -45
+KPX L quoteright -67
+KPX L u 5
+KPX L udieresis 5
+KPX L y -23
+KPX N A -39
+KPX N AE -42
+KPX N Aacute -39
+KPX N Adieresis -39
+KPX N Aring -39
+KPX N C -32
+KPX N Ccedilla -30
+KPX N G -26
+KPX N O -32
+KPX N Oacute -32
+KPX N Odieresis -32
+KPX N a -25
+KPX N aacute -27
+KPX N adieresis -27
+KPX N ae -34
+KPX N aring -27
+KPX N comma -24
+KPX N e -37
+KPX N eacute -38
+KPX N o -32
+KPX N oacute -34
+KPX N odieresis -34
+KPX N oslash -32
+KPX N period -26
+KPX N u -33
+KPX N udieresis -33
+KPX O A -57
+KPX O AE -67
+KPX O Aacute -57
+KPX O Adieresis -57
+KPX O Aring -57
+KPX O T -18
+KPX O V -52
+KPX O W -52
+KPX O X -63
+KPX O Y -56
+KPX Oacute A -57
+KPX Oacute T -18
+KPX Oacute V -52
+KPX Oacute W -52
+KPX Oacute Y -56
+KPX Ocircumflex T -18
+KPX Ocircumflex V -52
+KPX Ocircumflex Y -56
+KPX Odieresis A -57
+KPX Odieresis T -18
+KPX Odieresis V -52
+KPX Odieresis W -52
+KPX Odieresis X -63
+KPX Odieresis Y -56
+KPX Ograve T -18
+KPX Ograve V -52
+KPX Ograve Y -56
+KPX Oslash A -57
+KPX Otilde T -18
+KPX Otilde V -52
+KPX Otilde Y -56
+KPX P A -89
+KPX P AE -104
+KPX P Aacute -89
+KPX P Adieresis -89
+KPX P Aring -89
+KPX P J -105
+KPX P a -50
+KPX P aacute -50
+KPX P adieresis -38
+KPX P ae -58
+KPX P aring -50
+KPX P comma -107
+KPX P e -57
+KPX P eacute -57
+KPX P hyphen -54
+KPX P o -52
+KPX P oacute -52
+KPX P odieresis -35
+KPX P oe -57
+KPX P oslash -47
+KPX P period -109
+KPX R C -33
+KPX R Ccedilla -32
+KPX R G -28
+KPX R O -34
+KPX R OE -32
+KPX R Oacute -34
+KPX R Odieresis -34
+KPX R T -24
+KPX R U -44
+KPX R Udieresis -44
+KPX R V -46
+KPX R W -46
+KPX R Y -40
+KPX R a -1
+KPX R aacute -1
+KPX R adieresis -1
+KPX R ae -9
+KPX R aring -1
+KPX R e -21
+KPX R eacute -21
+KPX R hyphen -30
+KPX R o -18
+KPX R oacute -18
+KPX R odieresis -18
+KPX R oe -23
+KPX R u -13
+KPX R uacute -13
+KPX R udieresis -13
+KPX R y -12
+KPX S A -11
+KPX S AE -17
+KPX S Aacute -11
+KPX S Adieresis -11
+KPX S Aring -11
+KPX S T -34
+KPX S V -20
+KPX S W -20
+KPX S Y -24
+KPX S t -6
+KPX T A -52
+KPX T AE -54
+KPX T Aacute -52
+KPX T Acircumflex -52
+KPX T Adieresis -52
+KPX T Agrave -52
+KPX T Aring -52
+KPX T Atilde -52
+KPX T C -15
+KPX T G -9
+KPX T J -63
+KPX T O -22
+KPX T OE -18
+KPX T Oacute -22
+KPX T Ocircumflex -22
+KPX T Odieresis -22
+KPX T Ograve -22
+KPX T Oslash -22
+KPX T Otilde -22
+KPX T S -16
+KPX T V 15
+KPX T W 15
+KPX T Y 11
+KPX T a -83
+KPX T ae -91
+KPX T c -89
+KPX T colon -98
+KPX T comma -77
+KPX T e -94
+KPX T g -95
+KPX T guillemotleft -110
+KPX T guilsinglleft -120
+KPX T hyphen -74
+KPX T i -19
+KPX T j -27
+KPX T o -90
+KPX T oslash -90
+KPX T period -79
+KPX T r -76
+KPX T s -78
+KPX T semicolon -98
+KPX T u -91
+KPX T v -89
+KPX T w -89
+KPX T y -86
+KPX U A -65
+KPX U AE -71
+KPX U Aacute -65
+KPX U Acircumflex -65
+KPX U Adieresis -65
+KPX U Aring -65
+KPX U Atilde -65
+KPX U comma -40
+KPX U m -35
+KPX U n -39
+KPX U p -30
+KPX U period -41
+KPX U r -32
+KPX Uacute A -65
+KPX Uacute comma -40
+KPX Uacute m -35
+KPX Uacute n -39
+KPX Uacute p -30
+KPX Uacute period -41
+KPX Uacute r -32
+KPX Ucircumflex A -65
+KPX Udieresis A -65
+KPX Udieresis b 1
+KPX Udieresis comma -40
+KPX Udieresis m -35
+KPX Udieresis n -39
+KPX Udieresis p -30
+KPX Udieresis period -41
+KPX Udieresis r -32
+KPX Ugrave A -65
+KPX V A -100
+KPX V AE -111
+KPX V Aacute -100
+KPX V Acircumflex -100
+KPX V Adieresis -100
+KPX V Agrave -100
+KPX V Aring -100
+KPX V Atilde -100
+KPX V C -60
+KPX V G -53
+KPX V O -64
+KPX V Oacute -64
+KPX V Ocircumflex -64
+KPX V Odieresis -64
+KPX V Ograve -64
+KPX V Oslash -64
+KPX V Otilde -64
+KPX V S -25
+KPX V T 7
+KPX V a -76
+KPX V ae -84
+KPX V colon -96
+KPX V comma -96
+KPX V e -87
+KPX V g -83
+KPX V guillemotleft -99
+KPX V guilsinglleft -109
+KPX V hyphen -62
+KPX V i -12
+KPX V o -83
+KPX V oslash -81
+KPX V period -97
+KPX V r -44
+KPX V semicolon -96
+KPX V u -47
+KPX V y -34
+KPX W A -83
+KPX W AE -87
+KPX W Aacute -83
+KPX W Acircumflex -83
+KPX W Adieresis -83
+KPX W Agrave -83
+KPX W Aring -83
+KPX W Atilde -83
+KPX W C -46
+KPX W G -41
+KPX W O -47
+KPX W Oacute -47
+KPX W Ocircumflex -47
+KPX W Odieresis -47
+KPX W Ograve -47
+KPX W Oslash -48
+KPX W Otilde -47
+KPX W S -24
+KPX W T 8
+KPX W a -51
+KPX W ae -60
+KPX W colon -78
+KPX W comma -62
+KPX W e -62
+KPX W g -63
+KPX W guillemotleft -74
+KPX W guilsinglleft -84
+KPX W hyphen -37
+KPX W i -11
+KPX W o -58
+KPX W oslash -57
+KPX W period -64
+KPX W r -34
+KPX W semicolon -79
+KPX W u -38
+KPX W y -25
+KPX X C -58
+KPX X O -56
+KPX X Odieresis -56
+KPX X Q -58
+KPX X a -9
+KPX X e -29
+KPX X hyphen -46
+KPX X o -26
+KPX X u -21
+KPX X y -81
+KPX Y A -45
+KPX Y AE -47
+KPX Y Aacute -45
+KPX Y Acircumflex -45
+KPX Y Adieresis -45
+KPX Y Agrave -45
+KPX Y Aring -45
+KPX Y Atilde -45
+KPX Y C -59
+KPX Y G -54
+KPX Y O -61
+KPX Y Oacute -61
+KPX Y Ocircumflex -61
+KPX Y Odieresis -61
+KPX Y Ograve -61
+KPX Y Oslash -61
+KPX Y Otilde -61
+KPX Y S -25
+KPX Y T 7
+KPX Y a -69
+KPX Y ae -77
+KPX Y colon -91
+KPX Y comma -67
+KPX Y e -80
+KPX Y g -81
+KPX Y guillemotleft -97
+KPX Y guilsinglleft -107
+KPX Y hyphen -63
+KPX Y i -12
+KPX Y o -76
+KPX Y oslash -75
+KPX Y p -54
+KPX Y period -69
+KPX Y semicolon -91
+KPX Y u -59
+KPX Y v -54
+KPX Z v -29
+KPX Z y -39
+KPX a j -2
+KPX a quoteright -22
+KPX a v -5
+KPX a w -5
+KPX a y -3
+KPX aacute v -5
+KPX aacute w -5
+KPX aacute y -3
+KPX adieresis v -5
+KPX adieresis w -5
+KPX adieresis y -3
+KPX ae v -5
+KPX ae w -5
+KPX ae y -8
+KPX agrave v -5
+KPX agrave w -5
+KPX agrave y -3
+KPX aring v -5
+KPX aring w -5
+KPX aring y -3
+KPX b v -12
+KPX b w -12
+KPX b y -17
+KPX c h -20
+KPX c k -16
+KPX comma one -26
+KPX comma quotedblright -1
+KPX comma quoteright -23
+KPX e quoteright -12
+KPX e t -3
+KPX e v -3
+KPX e w -3
+KPX e x -15
+KPX e y -6
+KPX eacute v -3
+KPX eacute w -3
+KPX eacute y -6
+KPX ecircumflex v -3
+KPX ecircumflex w -3
+KPX ecircumflex y -6
+KPX eight four -4
+KPX eight one -52
+KPX eight seven -13
+KPX f a -23
+KPX f aacute -24
+KPX f adieresis 17
+KPX f ae -32
+KPX f aring -20
+KPX f e -35
+KPX f eacute -36
+KPX f f 2
+KPX f i 20
+KPX f j 12
+KPX f l 43
+KPX f o -30
+KPX f oacute -31
+KPX f odieresis 20
+KPX f oe -35
+KPX f oslash -29
+KPX f quoteright 12
+KPX f s -14
+KPX f t 9
+KPX five four -13
+KPX five one -56
+KPX five seven -37
+KPX four four 1
+KPX four one -50
+KPX four seven -21
+KPX g a -25
+KPX g adieresis -25
+KPX g ae -34
+KPX g aring -25
+KPX g e -32
+KPX g eacute -32
+KPX g l -21
+KPX g oacute -27
+KPX g odieresis -27
+KPX g r 3
+KPX guillemotright A -30
+KPX guillemotright AE -39
+KPX guillemotright Aacute -30
+KPX guillemotright Adieresis -30
+KPX guillemotright Aring -30
+KPX guillemotright T -76
+KPX guillemotright V -79
+KPX guillemotright W -75
+KPX guillemotright Y -83
+KPX guilsinglright A -40
+KPX guilsinglright AE -49
+KPX guilsinglright Aacute -40
+KPX guilsinglright Adieresis -40
+KPX guilsinglright Aring -40
+KPX guilsinglright T -86
+KPX guilsinglright V -89
+KPX guilsinglright W -85
+KPX guilsinglright Y -93
+KPX h quoteright -32
+KPX h y -20
+KPX hyphen A -13
+KPX hyphen AE -22
+KPX hyphen Aacute -13
+KPX hyphen Adieresis -13
+KPX hyphen Aring -13
+KPX hyphen T -59
+KPX hyphen V -62
+KPX hyphen W -59
+KPX hyphen Y -69
+KPX i T -20
+KPX i j -5
+KPX k a 10
+KPX k aacute 10
+KPX k adieresis 10
+KPX k ae 2
+KPX k aring 10
+KPX k comma 19
+KPX k e -2
+KPX k eacute -2
+KPX k g -14
+KPX k hyphen 1
+KPX k o 1
+KPX k oacute 1
+KPX k odieresis 1
+KPX k period 17
+KPX k s 1
+KPX k u 2
+KPX k udieresis 2
+KPX l v -12
+KPX l y -8
+KPX m p -1
+KPX m v -16
+KPX m w -16
+KPX m y -16
+KPX n T -59
+KPX n p -4
+KPX n quoteright -32
+KPX n v -20
+KPX n w -20
+KPX n y -20
+KPX nine four -18
+KPX nine one -67
+KPX nine seven -12
+KPX o T -75
+KPX o quoteright -22
+KPX o t -2
+KPX o v -21
+KPX o w -21
+KPX o x -26
+KPX o y -29
+KPX oacute v -21
+KPX oacute w -21
+KPX oacute y -29
+KPX ocircumflex t -4
+KPX odieresis t -4
+KPX odieresis v -21
+KPX odieresis w -21
+KPX odieresis x -26
+KPX odieresis y -29
+KPX ograve v -21
+KPX ograve w -21
+KPX ograve y -29
+KPX one comma -38
+KPX one eight -56
+KPX one five -45
+KPX one four -75
+KPX one nine -40
+KPX one one -48
+KPX one period -39
+KPX one seven -65
+KPX one six -62
+KPX one three -43
+KPX one two -32
+KPX one zero -48
+KPX p t -2
+KPX p y -13
+KPX period one -32
+KPX period quotedblright -5
+KPX period quoteright -27
+KPX q c -6
+KPX q u -5
+KPX quotedblbase A 24
+KPX quotedblbase AE 19
+KPX quotedblbase T -37
+KPX quotedblbase V -79
+KPX quotedblbase W -74
+KPX quotedblbase Y -48
+KPX quotedblleft A -76
+KPX quotedblleft AE -98
+KPX quotedblleft Aacute -76
+KPX quotedblleft Adieresis -76
+KPX quotedblleft Aring -76
+KPX quotedblleft T -11
+KPX quotedblleft V 3
+KPX quotedblleft W 3
+KPX quotedblleft Y 0
+KPX quotedblright A -72
+KPX quotedblright AE -94
+KPX quotedblright Aacute -72
+KPX quotedblright Adieresis -72
+KPX quotedblright Aring -72
+KPX quotedblright T -1
+KPX quotedblright V 6
+KPX quotedblright W 6
+KPX quotedblright Y 2
+KPX quoteleft A -83
+KPX quoteleft AE -105
+KPX quoteleft Aacute -83
+KPX quoteleft Adieresis -83
+KPX quoteleft Aring -83
+KPX quoteleft T -18
+KPX quoteleft V -3
+KPX quoteleft W -3
+KPX quoteleft Y -7
+KPX quoteright A -94
+KPX quoteright AE -116
+KPX quoteright Aacute -94
+KPX quoteright Adieresis -94
+KPX quoteright Aring -94
+KPX quoteright comma -57
+KPX quoteright d -50
+KPX quoteright o -50
+KPX quoteright period -59
+KPX quoteright r -26
+KPX quoteright s -26
+KPX quoteright t -19
+KPX quoteright v -23
+KPX quoteright w -23
+KPX quoteright y -18
+KPX r a -13
+KPX r aacute -13
+KPX r acircumflex -13
+KPX r adieresis -13
+KPX r ae -22
+KPX r agrave -13
+KPX r aring -13
+KPX r c -15
+KPX r ccedilla -8
+KPX r colon -30
+KPX r comma -67
+KPX r d -14
+KPX r e -20
+KPX r eacute -20
+KPX r ecircumflex -20
+KPX r egrave -20
+KPX r f 8
+KPX r g -4
+KPX r h -16
+KPX r hyphen -13
+KPX r i 17
+KPX r j 12
+KPX r k -11
+KPX r l -12
+KPX r m 10
+KPX r n 6
+KPX r o -15
+KPX r oacute -15
+KPX r ocircumflex -15
+KPX r odieresis -15
+KPX r oe -19
+KPX r ograve -15
+KPX r oslash -12
+KPX r p 16
+KPX r period -69
+KPX r q -19
+KPX r quoteright 0
+KPX r r 14
+KPX r s 1
+KPX r semicolon -30
+KPX r t 12
+KPX r u 11
+KPX r v 20
+KPX r w 20
+KPX r x 7
+KPX r y 20
+KPX r z 10
+KPX s quoteright -22
+KPX s t -6
+KPX seven colon -90
+KPX seven comma -80
+KPX seven eight -46
+KPX seven five -60
+KPX seven four -79
+KPX seven one -43
+KPX seven period -81
+KPX seven seven -27
+KPX seven six -60
+KPX seven three -42
+KPX seven two -30
+KPX six four 2
+KPX six one -52
+KPX six seven -32
+KPX t S -11
+KPX t a 10
+KPX t aacute 10
+KPX t adieresis 10
+KPX t ae 2
+KPX t aring 10
+KPX t colon -22
+KPX t e -2
+KPX t eacute -2
+KPX t h -5
+KPX t o 1
+KPX t oacute 1
+KPX t odieresis 1
+KPX t quoteright -19
+KPX t semicolon -23
+KPX three four -15
+KPX three one -67
+KPX three seven -27
+KPX two four -8
+KPX two one -48
+KPX two seven -27
+KPX u quoteright -33
+KPX v a -20
+KPX v aacute -20
+KPX v acircumflex -20
+KPX v adieresis -20
+KPX v ae -28
+KPX v agrave -20
+KPX v aring -20
+KPX v atilde -20
+KPX v c -24
+KPX v colon -51
+KPX v comma -51
+KPX v e -28
+KPX v eacute -28
+KPX v ecircumflex -28
+KPX v egrave -28
+KPX v g -20
+KPX v hyphen -1
+KPX v l -24
+KPX v o -24
+KPX v oacute -24
+KPX v odieresis -24
+KPX v ograve -24
+KPX v oslash -22
+KPX v period -51
+KPX v s -19
+KPX v semicolon -51
+KPX w a -24
+KPX w aacute -24
+KPX w acircumflex -24
+KPX w adieresis -24
+KPX w ae -32
+KPX w agrave -24
+KPX w aring -24
+KPX w atilde -24
+KPX w c -30
+KPX w colon -56
+KPX w comma -53
+KPX w e -34
+KPX w eacute -34
+KPX w ecircumflex -34
+KPX w egrave -34
+KPX w g -26
+KPX w hyphen -7
+KPX w l -28
+KPX w o -30
+KPX w oacute -30
+KPX w odieresis -30
+KPX w ograve -30
+KPX w oslash -28
+KPX w period -53
+KPX w s -24
+KPX w semicolon -56
+KPX x a -1
+KPX x c -10
+KPX x e -14
+KPX x eacute -14
+KPX x o -11
+KPX x q -12
+KPX y a -11
+KPX y aacute -12
+KPX y acircumflex -12
+KPX y adieresis -12
+KPX y ae -19
+KPX y agrave -12
+KPX y aring -12
+KPX y atilde -12
+KPX y c -17
+KPX y colon -43
+KPX y comma -25
+KPX y e -22
+KPX y eacute -23
+KPX y ecircumflex -23
+KPX y egrave -23
+KPX y g -23
+KPX y hyphen 2
+KPX y l -16
+KPX y o -17
+KPX y oacute -19
+KPX y odieresis -19
+KPX y ograve -19
+KPX y oslash -17
+KPX y period -26
+KPX y s -13
+KPX y semicolon -44
+KPX zero four -1
+KPX zero one -50
+KPX zero seven -12
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmbi8a.pfb b/Master/tlpkg/tlgs/lib/fonts/utmbi8a.pfb
new file mode 100644
index 00000000000..2d19d942eae
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmbi8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmr8a.afm b/Master/tlpkg/tlgs/lib/fonts/utmr8a.afm
new file mode 100644
index 00000000000..95759a53b04
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmr8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusRomNo9L-Regu
+FullName Nimbus Roman No9 L Regular
+FamilyName Nimbus Roman No9 L
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -168 -281 1000 924
+CapHeight 662
+XHeight 450
+Descender -217
+Ascender 683
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 130 -9 237 676 ;
+C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ;
+C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ;
+C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ;
+C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ;
+C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ;
+C 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ;
+C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ;
+C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ;
+C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ;
+C 43 ; WX 564 ; N plus ; B 30 0 534 506 ;
+C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ;
+C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ;
+C 46 ; WX 250 ; N period ; B 70 -11 181 100 ;
+C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ;
+C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ;
+C 49 ; WX 500 ; N one ; B 111 0 394 676 ;
+C 50 ; WX 500 ; N two ; B 30 0 475 676 ;
+C 51 ; WX 500 ; N three ; B 43 -14 432 676 ;
+C 52 ; WX 500 ; N four ; B 12 0 472 676 ;
+C 53 ; WX 500 ; N five ; B 32 -14 438 688 ;
+C 54 ; WX 500 ; N six ; B 34 -14 468 684 ;
+C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ;
+C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ;
+C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ;
+C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ;
+C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ;
+C 60 ; WX 564 ; N less ; B 28 -10 536 516 ;
+C 61 ; WX 564 ; N equal ; B 30 120 534 386 ;
+C 62 ; WX 564 ; N greater ; B 28 -10 536 516 ;
+C 63 ; WX 444 ; N question ; B 68 -8 414 676 ;
+C 64 ; WX 921 ; N at ; B 116 -14 809 676 ;
+C 65 ; WX 722 ; N A ; B 15 0 706 674 ;
+C 66 ; WX 667 ; N B ; B 17 0 593 662 ;
+C 67 ; WX 667 ; N C ; B 28 -14 633 676 ;
+C 68 ; WX 722 ; N D ; B 16 0 685 662 ;
+C 69 ; WX 611 ; N E ; B 12 0 597 662 ;
+C 70 ; WX 556 ; N F ; B 12 0 546 662 ;
+C 71 ; WX 722 ; N G ; B 32 -14 709 676 ;
+C 72 ; WX 722 ; N H ; B 19 0 702 662 ;
+C 73 ; WX 333 ; N I ; B 18 0 315 662 ;
+C 74 ; WX 389 ; N J ; B 10 -14 370 662 ;
+C 75 ; WX 722 ; N K ; B 34 0 723 662 ;
+C 76 ; WX 611 ; N L ; B 12 0 598 662 ;
+C 77 ; WX 889 ; N M ; B 12 0 863 662 ;
+C 78 ; WX 722 ; N N ; B 12 -11 707 662 ;
+C 79 ; WX 722 ; N O ; B 34 -14 688 676 ;
+C 80 ; WX 556 ; N P ; B 16 0 542 662 ;
+C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ;
+C 82 ; WX 667 ; N R ; B 17 0 659 662 ;
+C 83 ; WX 556 ; N S ; B 42 -14 491 676 ;
+C 84 ; WX 611 ; N T ; B 17 0 593 662 ;
+C 85 ; WX 722 ; N U ; B 14 -14 705 662 ;
+C 86 ; WX 722 ; N V ; B 16 -11 697 662 ;
+C 87 ; WX 944 ; N W ; B 5 -11 932 662 ;
+C 88 ; WX 722 ; N X ; B 10 0 704 662 ;
+C 89 ; WX 722 ; N Y ; B 22 0 703 662 ;
+C 90 ; WX 611 ; N Z ; B 9 0 597 662 ;
+C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ;
+C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ;
+C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ;
+C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ;
+C 97 ; WX 444 ; N a ; B 37 -10 442 460 ;
+C 98 ; WX 500 ; N b ; B 3 -10 468 683 ;
+C 99 ; WX 444 ; N c ; B 25 -10 412 460 ;
+C 100 ; WX 500 ; N d ; B 27 -10 491 683 ;
+C 101 ; WX 444 ; N e ; B 25 -10 424 460 ;
+C 102 ; WX 333 ; N f ; B 20 0 383 683 ;
+C 103 ; WX 500 ; N g ; B 28 -218 470 460 ;
+C 104 ; WX 500 ; N h ; B 9 0 487 683 ;
+C 105 ; WX 278 ; N i ; B 16 0 253 683 ;
+C 106 ; WX 278 ; N j ; B -70 -218 194 683 ;
+C 107 ; WX 500 ; N k ; B 7 0 505 683 ;
+C 108 ; WX 278 ; N l ; B 19 0 257 683 ;
+C 109 ; WX 778 ; N m ; B 16 0 775 460 ;
+C 110 ; WX 500 ; N n ; B 16 0 485 460 ;
+C 111 ; WX 500 ; N o ; B 29 -10 470 460 ;
+C 112 ; WX 500 ; N p ; B 5 -217 470 460 ;
+C 113 ; WX 500 ; N q ; B 24 -217 488 461 ;
+C 114 ; WX 333 ; N r ; B 5 0 335 460 ;
+C 115 ; WX 389 ; N s ; B 51 -10 348 459 ;
+C 116 ; WX 278 ; N t ; B 13 -10 279 579 ;
+C 117 ; WX 500 ; N u ; B 9 -10 479 450 ;
+C 118 ; WX 500 ; N v ; B 19 -14 477 450 ;
+C 119 ; WX 722 ; N w ; B 21 -14 694 450 ;
+C 120 ; WX 500 ; N x ; B 17 0 479 450 ;
+C 121 ; WX 500 ; N y ; B 14 -218 475 450 ;
+C 122 ; WX 444 ; N z ; B 27 0 418 450 ;
+C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ;
+C 124 ; WX 200 ; N bar ; B 67 -14 133 676 ;
+C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ;
+C 126 ; WX 541 ; N asciitilde ; B 40 186 502 320 ;
+C 161 ; WX 333 ; N exclamdown ; B 97 -218 204 469 ;
+C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ;
+C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ;
+C 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ;
+C 165 ; WX 500 ; N yen ; B -53 0 512 662 ;
+C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ;
+C 167 ; WX 500 ; N section ; B 70 -148 426 676 ;
+C 168 ; WX 500 ; N currency ; B -22 58 522 602 ;
+C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ;
+C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ;
+C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ;
+C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ;
+C 174 ; WX 556 ; N fi ; B 31 0 521 683 ;
+C 175 ; WX 556 ; N fl ; B 32 0 521 683 ;
+C 177 ; WX 500 ; N endash ; B 0 201 500 250 ;
+C 178 ; WX 500 ; N dagger ; B 59 -149 443 676 ;
+C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ;
+C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;
+C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ;
+C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ;
+C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ;
+C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ;
+C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ;
+C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ;
+C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ;
+C 191 ; WX 444 ; N questiondown ; B 30 -218 376 468 ;
+C 193 ; WX 333 ; N grave ; B 19 507 242 678 ;
+C 194 ; WX 333 ; N acute ; B 93 507 317 678 ;
+C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ;
+C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ;
+C 197 ; WX 333 ; N macron ; B 11 547 322 601 ;
+C 198 ; WX 333 ; N breve ; B 26 507 307 664 ;
+C 199 ; WX 333 ; N dotaccent ; B 118 523 217 622 ;
+C 200 ; WX 333 ; N dieresis ; B 18 523 316 622 ;
+C 202 ; WX 333 ; N ring ; B 67 512 266 711 ;
+C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ;
+C 206 ; WX 333 ; N ogonek ; B 64 -165 249 0 ;
+C 207 ; WX 333 ; N caron ; B 11 507 322 674 ;
+C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ;
+C 225 ; WX 889 ; N AE ; B 0 0 863 662 ;
+C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ;
+C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ;
+C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ;
+C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ;
+C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ;
+C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ;
+C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ;
+C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ;
+C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ;
+C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ;
+C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ;
+C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 834 ;
+C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ;
+C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ;
+C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ;
+C -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ;
+C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ;
+C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ;
+C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ;
+C -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ;
+C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ;
+C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ;
+C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ;
+C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ;
+C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ;
+C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ;
+C -1 ; WX 722 ; N Uring ; B 14 -14 705 923 ;
+C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ;
+C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ;
+C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 622 ;
+C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ;
+C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ;
+C -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ;
+C -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ;
+C -1 ; WX 444 ; N edieresis ; B 25 -10 424 622 ;
+C -1 ; WX 600 ; N dcaron ; B 27 -10 599 683 ;
+C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ;
+C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ;
+C -1 ; WX 444 ; N cacute ; B 25 -10 412 678 ;
+C -1 ; WX 444 ; N aogonek ; B 37 -165 444 460 ;
+C -1 ; WX 444 ; N aring ; B 37 -10 442 721 ;
+C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ;
+C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ;
+C -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ;
+C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ;
+C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ;
+C -1 ; WX 444 ; N adieresis ; B 37 -10 442 622 ;
+C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ;
+C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ;
+C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ;
+C -1 ; WX 500 ; N udieresis ; B 9 -10 479 622 ;
+C -1 ; WX 278 ; N tcaron ; B 13 -10 300 676 ;
+C -1 ; WX 389 ; N scommaaccent ; B 51 -281 348 459 ;
+C -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ;
+C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ;
+C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ;
+C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 834 ;
+C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ;
+C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ;
+C -1 ; WX 389 ; N sacute ; B 51 -10 365 678 ;
+C -1 ; WX 611 ; N Tcommaaccent ; B 17 -281 593 662 ;
+C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 834 ;
+C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ;
+C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ;
+C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ;
+C -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ;
+C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 834 ;
+C -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ;
+C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ;
+C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ;
+C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ;
+C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ;
+C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 834 ;
+C -1 ; WX 333 ; N racute ; B 5 0 335 678 ;
+C -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 470 678 ;
+C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ;
+C -1 ; WX 500 ; N Euro ; B -16 -14 477 674 ;
+C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ;
+C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ;
+C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ;
+C -1 ; WX 300 ; N threesuperior ; B 14 262 291 676 ;
+C -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ;
+C -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ;
+C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ;
+C -1 ; WX 333 ; N Iogonek ; B 18 -165 397 662 ;
+C -1 ; WX 333 ; N Idieresis ; B 18 0 316 834 ;
+C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ;
+C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ;
+C -1 ; WX 722 ; N Kcommaaccent ; B 34 -281 723 662 ;
+C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ;
+C -1 ; WX 556 ; N Scommaaccent ; B 42 -281 491 676 ;
+C -1 ; WX 611 ; N Eogonek ; B 12 -165 611 662 ;
+C -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ;
+C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 834 ;
+C -1 ; WX 278 ; N iogonek ; B 16 -165 278 683 ;
+C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 736 ;
+C -1 ; WX 500 ; N odieresis ; B 29 -10 470 622 ;
+C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ;
+C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ;
+C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ;
+C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ;
+C -1 ; WX 389 ; N scedilla ; B 51 -215 348 459 ;
+C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ;
+C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ;
+C -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 32 -281 709 676 ;
+C -1 ; WX 667 ; N Rcommaaccent ; B 17 -281 659 662 ;
+C -1 ; WX 611 ; N Edieresis ; B 12 0 597 834 ;
+C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ;
+C -1 ; WX 500 ; N uogonek ; B 9 -165 500 450 ;
+C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ;
+C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ;
+C -1 ; WX 348 ; N lcaron ; B 19 0 348 683 ;
+C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ;
+C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ;
+C -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ;
+C -1 ; WX 400 ; N degree ; B 57 390 343 676 ;
+C -1 ; WX 722 ; N Aogonek ; B 15 -165 786 674 ;
+C -1 ; WX 564 ; N minus ; B 30 220 534 286 ;
+C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ;
+C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ;
+C -1 ; WX 722 ; N Aring ; B 15 0 706 915 ;
+C -1 ; WX 980 ; N trademark ; B 30 256 957 662 ;
+C -1 ; WX 333 ; N rcommaaccent ; B 5 -281 335 460 ;
+C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ;
+C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ;
+C -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ;
+C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ;
+C -1 ; WX 278 ; N igrave ; B -8 0 253 678 ;
+C -1 ; WX 500 ; N ncommaaccent ; B 16 -281 485 460 ;
+C -1 ; WX 278 ; N lcommaaccent ; B 19 -281 257 683 ;
+C -1 ; WX 564 ; N plusminus ; B 30 0 534 568 ;
+C -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ;
+C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ;
+C -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ;
+C -1 ; WX 278 ; N iacute ; B 16 0 290 678 ;
+C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ;
+C -1 ; WX 500 ; N kcommaaccent ; B 7 -281 505 683 ;
+C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ;
+C -1 ; WX 278 ; N imacron ; B -16 0 292 601 ;
+C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ;
+C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ;
+C -1 ; WX 278 ; N tcommaaccent ; B 13 -281 279 579 ;
+C -1 ; WX 500 ; N ydieresis ; B 14 -218 475 622 ;
+C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 622 ;
+C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ;
+C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ;
+C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ;
+C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 479 678 ;
+C -1 ; WX 500 ; N eth ; B 29 -10 471 686 ;
+C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ;
+C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ;
+C -1 ; WX 333 ; N commaaccent ; B 97 -281 236 -38 ;
+C -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ;
+C -1 ; WX 760 ; N registered ; B 38 -14 722 676 ;
+C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ;
+C -1 ; WX 278 ; N idieresis ; B 11 0 269 622 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 564 ; N notequal ; B 30 -3 534 509 ;
+C -1 ; WX 549 ; N radical ; B -2 -65 526 924 ;
+C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ;
+C -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ;
+C -1 ; WX 564 ; N lessequal ; B 28 0 536 628 ;
+C -1 ; WX 564 ; N greaterequal ; B 28 0 536 628 ;
+C -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 722 ; N Ncommaaccent ; B 12 -281 707 662 ;
+C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ;
+C -1 ; WX 200 ; N brokenbar ; B 67 -14 133 676 ;
+C -1 ; WX 611 ; N Lcommaaccent ; B 12 -281 598 662 ;
+C -1 ; WX 722 ; N Adieresis ; B 15 0 706 834 ;
+C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -51
+KPX A Ccedilla -57
+KPX A G -57
+KPX A O -60
+KPX A Odieresis -60
+KPX A Q -60
+KPX A T -54
+KPX A U -62
+KPX A Uacute -62
+KPX A Ucircumflex -62
+KPX A Udieresis -62
+KPX A Ugrave -62
+KPX A V -131
+KPX A W -113
+KPX A Y -81
+KPX A a -6
+KPX A b -20
+KPX A c -29
+KPX A ccedilla -29
+KPX A comma -3
+KPX A d -28
+KPX A e -27
+KPX A g -20
+KPX A guillemotleft -64
+KPX A guilsinglleft -74
+KPX A hyphen -23
+KPX A o -40
+KPX A period -10
+KPX A q -21
+KPX A quotedblright -91
+KPX A quoteright -116
+KPX A t -20
+KPX A u -28
+KPX A v -81
+KPX A w -73
+KPX A y -83
+KPX Aacute C -51
+KPX Aacute G -57
+KPX Aacute O -60
+KPX Aacute Q -60
+KPX Aacute T -54
+KPX Aacute U -62
+KPX Aacute V -131
+KPX Aacute W -113
+KPX Aacute Y -81
+KPX Aacute a -6
+KPX Aacute b -20
+KPX Aacute c -29
+KPX Aacute comma -3
+KPX Aacute d -28
+KPX Aacute e -27
+KPX Aacute g -20
+KPX Aacute guillemotleft -64
+KPX Aacute guilsinglleft -74
+KPX Aacute hyphen -23
+KPX Aacute o -40
+KPX Aacute period -10
+KPX Aacute q -21
+KPX Aacute quoteright -116
+KPX Aacute t -20
+KPX Aacute u -28
+KPX Aacute v -81
+KPX Aacute w -73
+KPX Aacute y -83
+KPX Acircumflex C -51
+KPX Acircumflex G -57
+KPX Acircumflex O -60
+KPX Acircumflex Q -60
+KPX Acircumflex T -54
+KPX Acircumflex U -62
+KPX Acircumflex V -131
+KPX Acircumflex W -113
+KPX Acircumflex Y -81
+KPX Acircumflex comma -3
+KPX Acircumflex period -10
+KPX Adieresis C -51
+KPX Adieresis G -57
+KPX Adieresis O -60
+KPX Adieresis Q -60
+KPX Adieresis T -54
+KPX Adieresis U -62
+KPX Adieresis V -131
+KPX Adieresis W -113
+KPX Adieresis Y -81
+KPX Adieresis a -6
+KPX Adieresis b -20
+KPX Adieresis c -29
+KPX Adieresis comma -3
+KPX Adieresis d -28
+KPX Adieresis g -20
+KPX Adieresis guillemotleft -64
+KPX Adieresis guilsinglleft -74
+KPX Adieresis hyphen -23
+KPX Adieresis o -40
+KPX Adieresis period -10
+KPX Adieresis q -21
+KPX Adieresis quotedblright -91
+KPX Adieresis quoteright -116
+KPX Adieresis t -20
+KPX Adieresis u -28
+KPX Adieresis v -81
+KPX Adieresis w -73
+KPX Adieresis y -83
+KPX Agrave C -51
+KPX Agrave G -57
+KPX Agrave O -60
+KPX Agrave Q -60
+KPX Agrave T -54
+KPX Agrave U -62
+KPX Agrave V -131
+KPX Agrave W -113
+KPX Agrave Y -81
+KPX Agrave comma -3
+KPX Agrave period -10
+KPX Aring C -51
+KPX Aring G -57
+KPX Aring O -60
+KPX Aring Q -60
+KPX Aring T -54
+KPX Aring U -62
+KPX Aring V -131
+KPX Aring W -113
+KPX Aring Y -81
+KPX Aring a -6
+KPX Aring b -20
+KPX Aring c -29
+KPX Aring comma -3
+KPX Aring d -28
+KPX Aring e -27
+KPX Aring g -20
+KPX Aring guillemotleft -64
+KPX Aring guilsinglleft -74
+KPX Aring hyphen -23
+KPX Aring o -40
+KPX Aring period -10
+KPX Aring q -21
+KPX Aring quotedblright -91
+KPX Aring quoteright -116
+KPX Aring t -20
+KPX Aring u -28
+KPX Aring v -81
+KPX Aring w -73
+KPX Aring y -83
+KPX Atilde C -51
+KPX Atilde G -57
+KPX Atilde O -60
+KPX Atilde Q -60
+KPX Atilde T -54
+KPX Atilde U -62
+KPX Atilde V -131
+KPX Atilde W -113
+KPX Atilde Y -81
+KPX Atilde comma -3
+KPX Atilde period -10
+KPX B A -51
+KPX B AE -44
+KPX B Aacute -51
+KPX B Acircumflex -51
+KPX B Adieresis -51
+KPX B Aring -51
+KPX B Atilde -51
+KPX B O -24
+KPX B OE -18
+KPX B Oacute -24
+KPX B Ocircumflex -24
+KPX B Odieresis -24
+KPX B Ograve -24
+KPX B Oslash -23
+KPX B V -65
+KPX B W -59
+KPX B Y -68
+KPX C A -23
+KPX C AE -15
+KPX C Aacute -23
+KPX C Adieresis -23
+KPX C Aring -23
+KPX C H -2
+KPX C K -10
+KPX C O -12
+KPX C Oacute -12
+KPX C Odieresis -12
+KPX Ccedilla A -27
+KPX D A -67
+KPX D Aacute -67
+KPX D Acircumflex -67
+KPX D Adieresis -67
+KPX D Agrave -67
+KPX D Aring -67
+KPX D Atilde -67
+KPX D J -41
+KPX D T -10
+KPX D V -71
+KPX D W -57
+KPX D X -64
+KPX D Y -74
+KPX F A -71
+KPX F Aacute -71
+KPX F Acircumflex -71
+KPX F Adieresis -71
+KPX F Agrave -71
+KPX F Aring -71
+KPX F Atilde -71
+KPX F J -13
+KPX F O -10
+KPX F Odieresis -10
+KPX F a -34
+KPX F aacute -34
+KPX F adieresis -10
+KPX F ae -36
+KPX F aring -34
+KPX F comma -51
+KPX F e -19
+KPX F eacute -19
+KPX F hyphen 3
+KPX F i -13
+KPX F j -20
+KPX F o -21
+KPX F oacute -21
+KPX F odieresis -21
+KPX F oe -21
+KPX F oslash -21
+KPX F period -58
+KPX F r -10
+KPX F u -11
+KPX G A -26
+KPX G AE -19
+KPX G Aacute -26
+KPX G Acircumflex -26
+KPX G Adieresis -26
+KPX G Agrave -26
+KPX G Aring -26
+KPX G Atilde -26
+KPX G T -21
+KPX G V -23
+KPX G W -18
+KPX G Y -26
+KPX J A -53
+KPX J AE -46
+KPX J Adieresis -53
+KPX J Aring -53
+KPX K C -43
+KPX K G -49
+KPX K O -51
+KPX K OE -44
+KPX K Oacute -51
+KPX K Odieresis -51
+KPX K S 1
+KPX K T 0
+KPX K a 2
+KPX K adieresis 2
+KPX K ae 0
+KPX K aring 2
+KPX K e -19
+KPX K hyphen -63
+KPX K o -31
+KPX K oacute -31
+KPX K odieresis -31
+KPX K u -19
+KPX K udieresis -19
+KPX K y -86
+KPX L A 0
+KPX L AE 6
+KPX L Aacute 0
+KPX L Adieresis 0
+KPX L Aring 0
+KPX L C 2
+KPX L Ccedilla 0
+KPX L G 0
+KPX L O -3
+KPX L Oacute -3
+KPX L Ocircumflex -3
+KPX L Odieresis -3
+KPX L Ograve -3
+KPX L Otilde -3
+KPX L S 5
+KPX L T -73
+KPX L U -26
+KPX L Udieresis -26
+KPX L V -115
+KPX L W -89
+KPX L Y -100
+KPX L hyphen 25
+KPX L quotedblright -100
+KPX L quoteright -125
+KPX L u -10
+KPX L udieresis -10
+KPX L y -56
+KPX N A -28
+KPX N AE -21
+KPX N Aacute -28
+KPX N Adieresis -28
+KPX N Aring -28
+KPX N C -16
+KPX N Ccedilla -16
+KPX N G -19
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -27
+KPX N aacute -27
+KPX N adieresis -27
+KPX N ae -27
+KPX N aring -27
+KPX N comma -14
+KPX N e -17
+KPX N eacute -17
+KPX N o -21
+KPX N oacute -21
+KPX N odieresis -21
+KPX N oslash -20
+KPX N period -21
+KPX N u -25
+KPX N udieresis -25
+KPX O A -58
+KPX O AE -50
+KPX O Aacute -58
+KPX O Adieresis -58
+KPX O Aring -58
+KPX O T -9
+KPX O V -69
+KPX O W -54
+KPX O X -55
+KPX O Y -72
+KPX Oacute A -58
+KPX Oacute T -9
+KPX Oacute V -69
+KPX Oacute W -54
+KPX Oacute Y -72
+KPX Ocircumflex T -9
+KPX Ocircumflex V -69
+KPX Ocircumflex Y -72
+KPX Odieresis A -58
+KPX Odieresis T -9
+KPX Odieresis V -69
+KPX Odieresis W -54
+KPX Odieresis X -55
+KPX Odieresis Y -72
+KPX Ograve T -9
+KPX Ograve V -69
+KPX Ograve Y -72
+KPX Oslash A -58
+KPX Otilde T -9
+KPX Otilde V -69
+KPX Otilde Y -72
+KPX P A -90
+KPX P AE -91
+KPX P Aacute -90
+KPX P Adieresis -90
+KPX P Aring -90
+KPX P J -52
+KPX P a -17
+KPX P aacute -17
+KPX P adieresis -17
+KPX P ae -18
+KPX P aring -17
+KPX P comma -94
+KPX P e -23
+KPX P eacute -23
+KPX P hyphen -37
+KPX P o -25
+KPX P oacute -25
+KPX P odieresis -25
+KPX P oe -25
+KPX P oslash -25
+KPX P period -101
+KPX R C -41
+KPX R Ccedilla -41
+KPX R G -44
+KPX R O -45
+KPX R OE -39
+KPX R Oacute -45
+KPX R Odieresis -45
+KPX R T -34
+KPX R U -56
+KPX R Udieresis -55
+KPX R V -73
+KPX R W -67
+KPX R Y -76
+KPX R a -2
+KPX R aacute -2
+KPX R adieresis -2
+KPX R ae -5
+KPX R aring -2
+KPX R e -23
+KPX R eacute -23
+KPX R hyphen -52
+KPX R o -36
+KPX R oacute -36
+KPX R odieresis -36
+KPX R oe -31
+KPX R u -24
+KPX R uacute -24
+KPX R udieresis -24
+KPX R y -37
+KPX S A -37
+KPX S AE -30
+KPX S Aacute -37
+KPX S Adieresis -37
+KPX S Aring -37
+KPX S T -19
+KPX S V -27
+KPX S W -21
+KPX S Y -30
+KPX S t -20
+KPX T A -53
+KPX T AE -45
+KPX T Aacute -53
+KPX T Acircumflex -53
+KPX T Adieresis -53
+KPX T Agrave -53
+KPX T Aring -53
+KPX T Atilde -53
+KPX T C -8
+KPX T G -11
+KPX T J -18
+KPX T O -10
+KPX T OE -4
+KPX T Oacute -10
+KPX T Ocircumflex -10
+KPX T Odieresis -10
+KPX T Ograve -10
+KPX T Oslash -10
+KPX T Otilde -10
+KPX T S -10
+KPX T V 14
+KPX T W 20
+KPX T Y 11
+KPX T a -77
+KPX T ae -80
+KPX T c -87
+KPX T colon -87
+KPX T comma -74
+KPX T e -86
+KPX T g -91
+KPX T guillemotleft -114
+KPX T guilsinglleft -125
+KPX T hyphen -73
+KPX T i -18
+KPX T j -25
+KPX T o -90
+KPX T oslash -89
+KPX T period -82
+KPX T r -50
+KPX T s -73
+KPX T semicolon -87
+KPX T u -93
+KPX T v -105
+KPX T w -106
+KPX T y -102
+KPX U A -65
+KPX U AE -58
+KPX U Aacute -65
+KPX U Acircumflex -65
+KPX U Adieresis -65
+KPX U Aring -65
+KPX U Atilde -65
+KPX U comma -31
+KPX U m -33
+KPX U n -31
+KPX U p -28
+KPX U period -37
+KPX U r -27
+KPX Uacute A -65
+KPX Uacute comma -31
+KPX Uacute m -33
+KPX Uacute n -31
+KPX Uacute p -28
+KPX Uacute period -37
+KPX Uacute r -27
+KPX Ucircumflex A -65
+KPX Udieresis A -65
+KPX Udieresis b 21
+KPX Udieresis comma -31
+KPX Udieresis m -33
+KPX Udieresis n -31
+KPX Udieresis p -28
+KPX Udieresis period -37
+KPX Udieresis r -27
+KPX Ugrave A -65
+KPX V A -124
+KPX V AE -104
+KPX V Aacute -124
+KPX V Acircumflex -124
+KPX V Adieresis -124
+KPX V Agrave -124
+KPX V Aring -124
+KPX V Atilde -124
+KPX V C -63
+KPX V G -66
+KPX V O -67
+KPX V Oacute -67
+KPX V Ocircumflex -67
+KPX V Odieresis -67
+KPX V Ograve -67
+KPX V Oslash -65
+KPX V Otilde -67
+KPX V S -47
+KPX V T 10
+KPX V a -88
+KPX V ae -89
+KPX V colon -90
+KPX V comma -105
+KPX V e -85
+KPX V g -101
+KPX V guillemotleft -109
+KPX V guilsinglleft -119
+KPX V hyphen -69
+KPX V i -20
+KPX V o -89
+KPX V oslash -88
+KPX V period -112
+KPX V r -56
+KPX V semicolon -89
+KPX V u -51
+KPX V y -54
+KPX W A -113
+KPX W AE -98
+KPX W Aacute -113
+KPX W Acircumflex -113
+KPX W Adieresis -113
+KPX W Agrave -113
+KPX W Aring -113
+KPX W Atilde -113
+KPX W C -53
+KPX W G -56
+KPX W O -56
+KPX W Oacute -56
+KPX W Ocircumflex -56
+KPX W Odieresis -56
+KPX W Ograve -56
+KPX W Oslash -55
+KPX W Otilde -56
+KPX W S -41
+KPX W T 17
+KPX W a -80
+KPX W ae -81
+KPX W colon -81
+KPX W comma -89
+KPX W e -72
+KPX W g -91
+KPX W guillemotleft -97
+KPX W guilsinglleft -107
+KPX W hyphen -56
+KPX W i -13
+KPX W o -76
+KPX W oslash -75
+KPX W period -96
+KPX W r -47
+KPX W semicolon -81
+KPX W u -43
+KPX W y -45
+KPX X C -52
+KPX X O -61
+KPX X Odieresis -61
+KPX X Q -61
+KPX X a -7
+KPX X e -28
+KPX X hyphen -54
+KPX X o -41
+KPX X u -29
+KPX X y -96
+KPX Y A -74
+KPX Y AE -67
+KPX Y Aacute -74
+KPX Y Acircumflex -74
+KPX Y Adieresis -74
+KPX Y Agrave -74
+KPX Y Aring -74
+KPX Y Atilde -74
+KPX Y C -68
+KPX Y G -71
+KPX Y O -69
+KPX Y Oacute -69
+KPX Y Ocircumflex -69
+KPX Y Odieresis -69
+KPX Y Ograve -69
+KPX Y Oslash -69
+KPX Y Otilde -69
+KPX Y S -44
+KPX Y T 13
+KPX Y a -99
+KPX Y ae -102
+KPX Y colon -109
+KPX Y comma -96
+KPX Y e -103
+KPX Y g -113
+KPX Y guillemotleft -135
+KPX Y guilsinglleft -145
+KPX Y hyphen -98
+KPX Y i -17
+KPX Y o -107
+KPX Y oslash -106
+KPX Y p -88
+KPX Y period -103
+KPX Y semicolon -108
+KPX Y u -78
+KPX Y v -86
+KPX Z v -48
+KPX Z y -50
+KPX a j -26
+KPX a quoteright -40
+KPX a v -30
+KPX a w -31
+KPX a y -32
+KPX aacute v -30
+KPX aacute w -31
+KPX aacute y -32
+KPX adieresis v -30
+KPX adieresis w -31
+KPX adieresis y -32
+KPX ae v -27
+KPX ae w -28
+KPX ae y -30
+KPX agrave v -30
+KPX agrave w -31
+KPX agrave y -32
+KPX aring v -30
+KPX aring w -31
+KPX aring y -32
+KPX b v -29
+KPX b w -30
+KPX b y -32
+KPX c h -15
+KPX c k -19
+KPX comma one -52
+KPX comma quotedblright -29
+KPX comma quoteright -53
+KPX e quoteright -30
+KPX e t -10
+KPX e v -27
+KPX e w -28
+KPX e x -35
+KPX e y -30
+KPX eacute v -27
+KPX eacute w -28
+KPX eacute y -30
+KPX ecircumflex v -27
+KPX ecircumflex w -28
+KPX ecircumflex y -30
+KPX eight four 0
+KPX eight one -64
+KPX eight seven -15
+KPX f a -25
+KPX f aacute -25
+KPX f adieresis 12
+KPX f ae -25
+KPX f aring -6
+KPX f e -34
+KPX f eacute -34
+KPX f f 6
+KPX f i 15
+KPX f j 8
+KPX f l 44
+KPX f o -38
+KPX f oacute -38
+KPX f odieresis -1
+KPX f oe -36
+KPX f oslash -37
+KPX f quoteright 17
+KPX f s -21
+KPX f t 10
+KPX five four -8
+KPX five one -70
+KPX five seven -36
+KPX four four 14
+KPX four one -75
+KPX four seven -42
+KPX g a -17
+KPX g adieresis -17
+KPX g ae -18
+KPX g aring -17
+KPX g e -25
+KPX g eacute -25
+KPX g l -7
+KPX g oacute -26
+KPX g odieresis -26
+KPX g r 11
+KPX guillemotright A -62
+KPX guillemotright AE -61
+KPX guillemotright Aacute -62
+KPX guillemotright Adieresis -62
+KPX guillemotright Aring -62
+KPX guillemotright T -114
+KPX guillemotright V -117
+KPX guillemotright W -95
+KPX guillemotright Y -138
+KPX guilsinglright A -72
+KPX guilsinglright AE -71
+KPX guilsinglright Aacute -72
+KPX guilsinglright Adieresis -72
+KPX guilsinglright Aring -72
+KPX guilsinglright T -124
+KPX guilsinglright V -128
+KPX guilsinglright W -105
+KPX guilsinglright Y -149
+KPX h quoteright -38
+KPX h y -30
+KPX hyphen A -26
+KPX hyphen AE -25
+KPX hyphen Aacute -26
+KPX hyphen Adieresis -26
+KPX hyphen Aring -26
+KPX hyphen T -77
+KPX hyphen V -82
+KPX hyphen W -59
+KPX hyphen Y -108
+KPX i T -28
+KPX i j -36
+KPX k a 1
+KPX k aacute 1
+KPX k adieresis 1
+KPX k ae -1
+KPX k aring 1
+KPX k comma 4
+KPX k e -19
+KPX k eacute -19
+KPX k g -12
+KPX k hyphen -65
+KPX k o -32
+KPX k oacute -32
+KPX k odieresis -32
+KPX k period -2
+KPX k s 5
+KPX k u 14
+KPX k udieresis 14
+KPX l v -28
+KPX l y -25
+KPX m p -9
+KPX m v -30
+KPX m w -31
+KPX m y -31
+KPX n T -55
+KPX n p -13
+KPX n quoteright -39
+KPX n v -30
+KPX n w -31
+KPX n y -31
+KPX nine four -7
+KPX nine one -63
+KPX nine seven -6
+KPX o T -91
+KPX o quoteright -34
+KPX o t -9
+KPX o v -36
+KPX o w -36
+KPX o x -36
+KPX o y -41
+KPX oacute v -36
+KPX oacute w -36
+KPX oacute y -41
+KPX ocircumflex t -9
+KPX odieresis t -9
+KPX odieresis v -36
+KPX odieresis w -36
+KPX odieresis x -36
+KPX odieresis y -41
+KPX ograve v -36
+KPX ograve w -36
+KPX ograve y -41
+KPX one comma -48
+KPX one eight -68
+KPX one five -37
+KPX one four -72
+KPX one nine -61
+KPX one one -78
+KPX one period -55
+KPX one seven -78
+KPX one six -66
+KPX one three -41
+KPX one two -34
+KPX one zero -54
+KPX p t -6
+KPX p y -28
+KPX period one -61
+KPX period quotedblright -33
+KPX period quoteright -58
+KPX q c -7
+KPX q u -12
+KPX quotedblbase A 12
+KPX quotedblbase AE 19
+KPX quotedblbase T -60
+KPX quotedblbase V -104
+KPX quotedblbase W -76
+KPX quotedblbase Y -87
+KPX quotedblleft A -86
+KPX quotedblleft AE -91
+KPX quotedblleft Aacute -86
+KPX quotedblleft Adieresis -86
+KPX quotedblleft Aring -86
+KPX quotedblleft T 14
+KPX quotedblleft V 1
+KPX quotedblleft W 7
+KPX quotedblleft Y -1
+KPX quotedblright A -94
+KPX quotedblright AE -99
+KPX quotedblright Aacute -94
+KPX quotedblright Adieresis -94
+KPX quotedblright Aring -94
+KPX quotedblright T 11
+KPX quotedblright V 0
+KPX quotedblright W 6
+KPX quotedblright Y -2
+KPX quoteleft A -110
+KPX quoteleft AE -115
+KPX quoteleft Aacute -110
+KPX quoteleft Adieresis -110
+KPX quoteleft Aring -110
+KPX quoteleft T -9
+KPX quoteleft V -23
+KPX quoteleft W -17
+KPX quoteleft Y -26
+KPX quoteright A -130
+KPX quoteright AE -135
+KPX quoteright Aacute -130
+KPX quoteright Adieresis -130
+KPX quoteright Aring -130
+KPX quoteright comma -71
+KPX quoteright d -56
+KPX quoteright o -54
+KPX quoteright period -78
+KPX quoteright r -44
+KPX quoteright s -47
+KPX quoteright t -43
+KPX quoteright v -47
+KPX quoteright w -47
+KPX quoteright y -45
+KPX r a -1
+KPX r aacute -1
+KPX r acircumflex -1
+KPX r adieresis -1
+KPX r ae -3
+KPX r agrave -1
+KPX r aring -1
+KPX r c -8
+KPX r ccedilla -8
+KPX r colon -7
+KPX r comma -41
+KPX r d -10
+KPX r e -6
+KPX r eacute -6
+KPX r ecircumflex -6
+KPX r egrave -6
+KPX r f 19
+KPX r g -15
+KPX r h -6
+KPX r hyphen -46
+KPX r i 20
+KPX r j 14
+KPX r k -10
+KPX r l -18
+KPX r m 20
+KPX r n 22
+KPX r o -8
+KPX r oacute -8
+KPX r ocircumflex -8
+KPX r odieresis -8
+KPX r oe -7
+KPX r ograve -8
+KPX r oslash -7
+KPX r p 25
+KPX r period -48
+KPX r q -10
+KPX r quoteright -19
+KPX r r 26
+KPX r s 0
+KPX r semicolon -7
+KPX r t 23
+KPX r u 19
+KPX r v 20
+KPX r w 19
+KPX r x 17
+KPX r y 22
+KPX r z 2
+KPX s quoteright -38
+KPX s t -15
+KPX seven colon -68
+KPX seven comma -72
+KPX seven eight -40
+KPX seven five -59
+KPX seven four -63
+KPX seven one -56
+KPX seven period -79
+KPX seven seven -20
+KPX seven six -46
+KPX seven three -35
+KPX seven two -31
+KPX six four 12
+KPX six one -74
+KPX six seven -29
+KPX t S 2
+KPX t a 10
+KPX t aacute 10
+KPX t adieresis 10
+KPX t ae 9
+KPX t aring 10
+KPX t colon -8
+KPX t e 0
+KPX t eacute 0
+KPX t h 10
+KPX t o -8
+KPX t oacute -8
+KPX t odieresis -8
+KPX t quoteright -29
+KPX t semicolon -8
+KPX three four -6
+KPX three one -75
+KPX three seven -28
+KPX two four 0
+KPX two one -60
+KPX two seven -16
+KPX u quoteright -36
+KPX v a -24
+KPX v aacute -24
+KPX v acircumflex -24
+KPX v adieresis -24
+KPX v ae -24
+KPX v agrave -24
+KPX v aring -24
+KPX v atilde -24
+KPX v c -37
+KPX v colon -20
+KPX v comma -69
+KPX v e -36
+KPX v eacute -36
+KPX v ecircumflex -36
+KPX v egrave -36
+KPX v g -41
+KPX v hyphen -28
+KPX v l -31
+KPX v o -38
+KPX v oacute -38
+KPX v odieresis -38
+KPX v ograve -38
+KPX v oslash -38
+KPX v period -76
+KPX v s -21
+KPX v semicolon -20
+KPX w a -27
+KPX w aacute -27
+KPX w acircumflex -27
+KPX w adieresis -27
+KPX w ae -27
+KPX w agrave -27
+KPX w aring -27
+KPX w atilde -27
+KPX w c -33
+KPX w colon -23
+KPX w comma -64
+KPX w e -31
+KPX w eacute -31
+KPX w ecircumflex -31
+KPX w egrave -31
+KPX w g -43
+KPX w hyphen -24
+KPX w l -33
+KPX w o -35
+KPX w oacute -35
+KPX w odieresis -35
+KPX w ograve -35
+KPX w oslash -34
+KPX w period -71
+KPX w s -23
+KPX w semicolon -23
+KPX x a -11
+KPX x c -34
+KPX x e -32
+KPX x eacute -32
+KPX x o -45
+KPX x q -26
+KPX y a -32
+KPX y aacute -32
+KPX y acircumflex -32
+KPX y adieresis -32
+KPX y ae -31
+KPX y agrave -32
+KPX y aring -32
+KPX y atilde -32
+KPX y c -37
+KPX y colon -23
+KPX y comma -66
+KPX y e -35
+KPX y eacute -35
+KPX y ecircumflex -35
+KPX y egrave -35
+KPX y g -48
+KPX y hyphen -27
+KPX y l -32
+KPX y o -39
+KPX y oacute -39
+KPX y odieresis -39
+KPX y ograve -39
+KPX y oslash -38
+KPX y period -73
+KPX y s -26
+KPX y semicolon -23
+KPX zero four 12
+KPX zero one -55
+KPX zero seven -5
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmr8a.pfb b/Master/tlpkg/tlgs/lib/fonts/utmr8a.pfb
new file mode 100644
index 00000000000..cbae7ed157e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmr8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmri8a.afm b/Master/tlpkg/tlgs/lib/fonts/utmri8a.afm
new file mode 100644
index 00000000000..8454d36a0c6
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmri8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName NimbusRomNo9L-ReguItal
+FullName Nimbus Roman No9 L Regular Italic
+FamilyName Nimbus Roman No9 L
+Weight Regular
+ItalicAngle -15.0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -169 -270 1010 924
+CapHeight 653
+XHeight 432
+Descender -205
+Ascender 683
+StartCharMetrics 316
+C 32 ; WX 250 ; N space ; B 125 0 125 0 ;
+C 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ;
+C 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ;
+C 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ;
+C 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ;
+C 37 ; WX 833 ; N percent ; B 79 -13 790 676 ;
+C 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ;
+C 39 ; WX 333 ; N quoteright ; B 151 436 290 666 ;
+C 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ;
+C 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ;
+C 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ;
+C 43 ; WX 675 ; N plus ; B 86 0 590 506 ;
+C 44 ; WX 250 ; N comma ; B -4 -129 135 101 ;
+C 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ;
+C 46 ; WX 250 ; N period ; B 27 -11 138 100 ;
+C 47 ; WX 278 ; N slash ; B -65 -18 386 666 ;
+C 48 ; WX 500 ; N zero ; B 32 -7 497 676 ;
+C 49 ; WX 500 ; N one ; B 49 0 409 676 ;
+C 50 ; WX 500 ; N two ; B 12 0 452 676 ;
+C 51 ; WX 500 ; N three ; B 15 -7 466 676 ;
+C 52 ; WX 500 ; N four ; B 1 0 479 676 ;
+C 53 ; WX 500 ; N five ; B 15 -7 491 666 ;
+C 54 ; WX 500 ; N six ; B 30 -7 521 686 ;
+C 55 ; WX 500 ; N seven ; B 75 -8 537 666 ;
+C 56 ; WX 500 ; N eight ; B 30 -7 493 676 ;
+C 57 ; WX 500 ; N nine ; B 23 -17 492 676 ;
+C 58 ; WX 333 ; N colon ; B 50 -11 261 441 ;
+C 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ;
+C 60 ; WX 675 ; N less ; B 84 -10 592 516 ;
+C 61 ; WX 675 ; N equal ; B 86 120 590 386 ;
+C 62 ; WX 675 ; N greater ; B 84 -10 592 516 ;
+C 63 ; WX 500 ; N question ; B 132 -12 472 664 ;
+C 64 ; WX 920 ; N at ; B 118 -18 806 666 ;
+C 65 ; WX 611 ; N A ; B -51 0 564 668 ;
+C 66 ; WX 611 ; N B ; B -8 0 588 653 ;
+C 67 ; WX 667 ; N C ; B 66 -18 689 666 ;
+C 68 ; WX 722 ; N D ; B -8 0 700 653 ;
+C 69 ; WX 611 ; N E ; B -1 0 634 653 ;
+C 70 ; WX 611 ; N F ; B 8 0 645 653 ;
+C 71 ; WX 722 ; N G ; B 52 -18 722 666 ;
+C 72 ; WX 722 ; N H ; B -8 0 767 653 ;
+C 73 ; WX 333 ; N I ; B -8 0 384 653 ;
+C 74 ; WX 444 ; N J ; B -6 -18 491 653 ;
+C 75 ; WX 667 ; N K ; B 7 0 722 653 ;
+C 76 ; WX 556 ; N L ; B -8 0 559 653 ;
+C 77 ; WX 833 ; N M ; B -18 0 873 653 ;
+C 78 ; WX 667 ; N N ; B -20 -15 727 653 ;
+C 79 ; WX 722 ; N O ; B 60 -18 706 666 ;
+C 80 ; WX 611 ; N P ; B 0 0 605 653 ;
+C 81 ; WX 722 ; N Q ; B 59 -183 699 666 ;
+C 82 ; WX 611 ; N R ; B -13 0 588 653 ;
+C 83 ; WX 500 ; N S ; B 17 -18 508 667 ;
+C 84 ; WX 556 ; N T ; B 59 0 633 653 ;
+C 85 ; WX 722 ; N U ; B 102 -18 765 653 ;
+C 86 ; WX 611 ; N V ; B 76 -18 688 653 ;
+C 87 ; WX 833 ; N W ; B 71 -18 906 653 ;
+C 88 ; WX 611 ; N X ; B -29 0 655 653 ;
+C 89 ; WX 556 ; N Y ; B 78 0 633 653 ;
+C 90 ; WX 556 ; N Z ; B -6 0 606 653 ;
+C 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ;
+C 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ;
+C 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ;
+C 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ;
+C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
+C 96 ; WX 333 ; N quoteleft ; B 171 436 310 666 ;
+C 97 ; WX 500 ; N a ; B 17 -11 476 441 ;
+C 98 ; WX 500 ; N b ; B 23 -11 473 683 ;
+C 99 ; WX 444 ; N c ; B 30 -11 425 441 ;
+C 100 ; WX 500 ; N d ; B 15 -13 527 683 ;
+C 101 ; WX 444 ; N e ; B 31 -11 412 441 ;
+C 102 ; WX 278 ; N f ; B -147 -207 424 678 ;
+C 103 ; WX 500 ; N g ; B 8 -206 472 441 ;
+C 104 ; WX 500 ; N h ; B 19 -9 478 683 ;
+C 105 ; WX 278 ; N i ; B 49 -11 264 654 ;
+C 106 ; WX 278 ; N j ; B -124 -207 276 654 ;
+C 107 ; WX 444 ; N k ; B 14 -11 461 683 ;
+C 108 ; WX 278 ; N l ; B 40 -11 279 683 ;
+C 109 ; WX 722 ; N m ; B 12 -9 704 441 ;
+C 110 ; WX 500 ; N n ; B 14 -9 474 441 ;
+C 111 ; WX 500 ; N o ; B 27 -11 468 441 ;
+C 112 ; WX 500 ; N p ; B -75 -205 469 442 ;
+C 113 ; WX 500 ; N q ; B 25 -209 483 441 ;
+C 114 ; WX 389 ; N r ; B 45 0 412 441 ;
+C 115 ; WX 389 ; N s ; B 16 -13 366 442 ;
+C 116 ; WX 278 ; N t ; B 37 -11 296 546 ;
+C 117 ; WX 500 ; N u ; B 42 -11 475 441 ;
+C 118 ; WX 444 ; N v ; B 21 -18 426 441 ;
+C 119 ; WX 667 ; N w ; B 16 -18 648 441 ;
+C 120 ; WX 444 ; N x ; B -27 -11 447 441 ;
+C 121 ; WX 444 ; N y ; B -24 -206 426 441 ;
+C 122 ; WX 389 ; N z ; B -2 -81 380 428 ;
+C 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ;
+C 124 ; WX 275 ; N bar ; B 105 -18 171 666 ;
+C 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ;
+C 126 ; WX 541 ; N asciitilde ; B 40 186 502 320 ;
+C 161 ; WX 389 ; N exclamdown ; B 59 -205 321 474 ;
+C 162 ; WX 500 ; N cent ; B 77 -143 472 560 ;
+C 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ;
+C 164 ; WX 167 ; N fraction ; B -169 -10 337 676 ;
+C 165 ; WX 500 ; N yen ; B 27 0 603 653 ;
+C 166 ; WX 500 ; N florin ; B 25 -182 507 682 ;
+C 167 ; WX 500 ; N section ; B 53 -162 461 666 ;
+C 168 ; WX 500 ; N currency ; B -22 53 522 597 ;
+C 169 ; WX 214 ; N quotesingle ; B 132 421 241 666 ;
+C 170 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ;
+C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ;
+C 172 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ;
+C 173 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ;
+C 174 ; WX 500 ; N fi ; B -141 -207 481 681 ;
+C 175 ; WX 500 ; N fl ; B -141 -204 518 682 ;
+C 177 ; WX 500 ; N endash ; B -6 197 505 243 ;
+C 178 ; WX 500 ; N dagger ; B 101 -159 488 666 ;
+C 179 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ;
+C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;
+C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ;
+C 183 ; WX 350 ; N bullet ; B 40 191 310 461 ;
+C 184 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ;
+C 185 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ;
+C 186 ; WX 556 ; N quotedblright ; B 151 436 499 666 ;
+C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ;
+C 188 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ;
+C 189 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ;
+C 191 ; WX 500 ; N questiondown ; B 28 -205 367 473 ;
+C 193 ; WX 333 ; N grave ; B 121 492 311 664 ;
+C 194 ; WX 333 ; N acute ; B 180 494 403 664 ;
+C 195 ; WX 333 ; N circumflex ; B 91 492 385 661 ;
+C 196 ; WX 333 ; N tilde ; B 100 517 427 624 ;
+C 197 ; WX 333 ; N macron ; B 99 532 411 583 ;
+C 198 ; WX 333 ; N breve ; B 117 492 418 650 ;
+C 199 ; WX 333 ; N dotaccent ; B 207 508 305 606 ;
+C 200 ; WX 333 ; N dieresis ; B 107 508 405 606 ;
+C 202 ; WX 333 ; N ring ; B 155 508 355 707 ;
+C 203 ; WX 333 ; N cedilla ; B -30 -217 182 0 ;
+C 205 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ;
+C 206 ; WX 333 ; N ogonek ; B -20 -169 200 40 ;
+C 207 ; WX 333 ; N caron ; B 121 492 426 661 ;
+C 208 ; WX 889 ; N emdash ; B -6 197 894 243 ;
+C 225 ; WX 889 ; N AE ; B -27 0 911 653 ;
+C 227 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ;
+C 232 ; WX 556 ; N Lslash ; B -8 0 559 653 ;
+C 233 ; WX 722 ; N Oslash ; B 60 -105 699 722 ;
+C 234 ; WX 944 ; N OE ; B 49 -8 964 666 ;
+C 235 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ;
+C 241 ; WX 667 ; N ae ; B 23 -11 640 441 ;
+C 245 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ;
+C 248 ; WX 278 ; N lslash ; B 37 -11 307 683 ;
+C 249 ; WX 500 ; N oslash ; B 28 -135 469 554 ;
+C 250 ; WX 667 ; N oe ; B 20 -12 646 441 ;
+C 251 ; WX 500 ; N germandbls ; B -168 -207 493 679 ;
+C -1 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ;
+C -1 ; WX 722 ; N Uacute ; B 102 -18 765 876 ;
+C -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ;
+C -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ;
+C -1 ; WX 500 ; N Scaron ; B 17 -18 520 873 ;
+C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ;
+C -1 ; WX 611 ; N Racute ; B -13 0 588 876 ;
+C -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ;
+C -1 ; WX 722 ; N Otilde ; B 60 -18 706 836 ;
+C -1 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ;
+C -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 706 876 ;
+C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ;
+C -1 ; WX 556 ; N Yacute ; B 78 0 633 876 ;
+C -1 ; WX 722 ; N Eth ; B -8 0 700 653 ;
+C -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ;
+C -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ;
+C -1 ; WX 722 ; N Uring ; B 102 -18 765 919 ;
+C -1 ; WX 500 ; N gbreve ; B 8 -206 502 650 ;
+C -1 ; WX 444 ; N eogonek ; B 31 -169 444 441 ;
+C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ;
+C -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ;
+C -1 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ;
+C -1 ; WX 611 ; N Thorn ; B 0 0 569 653 ;
+C -1 ; WX 444 ; N eacute ; B 31 -11 459 664 ;
+C -1 ; WX 444 ; N edieresis ; B 31 -11 451 606 ;
+C -1 ; WX 521 ; N dcaron ; B 15 -13 641 683 ;
+C -1 ; WX 444 ; N ccedilla ; B 26 -217 425 441 ;
+C -1 ; WX 444 ; N ccaron ; B 30 -11 484 661 ;
+C -1 ; WX 444 ; N cacute ; B 30 -11 458 664 ;
+C -1 ; WX 500 ; N aogonek ; B 17 -169 500 441 ;
+C -1 ; WX 500 ; N aring ; B 17 -11 476 707 ;
+C -1 ; WX 500 ; N atilde ; B 17 -11 511 624 ;
+C -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ;
+C -1 ; WX 444 ; N egrave ; B 31 -11 412 664 ;
+C -1 ; WX 500 ; N agrave ; B 17 -11 476 664 ;
+C -1 ; WX 500 ; N aacute ; B 17 -11 487 664 ;
+C -1 ; WX 500 ; N adieresis ; B 17 -11 489 606 ;
+C -1 ; WX 722 ; N Uogonek ; B 102 -169 765 653 ;
+C -1 ; WX 500 ; N ugrave ; B 42 -11 475 664 ;
+C -1 ; WX 500 ; N uacute ; B 42 -11 477 664 ;
+C -1 ; WX 500 ; N udieresis ; B 42 -11 479 606 ;
+C -1 ; WX 278 ; N tcaron ; B 37 -11 378 666 ;
+C -1 ; WX 389 ; N scommaaccent ; B 16 -270 366 442 ;
+C -1 ; WX 556 ; N Zcaron ; B -6 0 606 873 ;
+C -1 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ;
+C -1 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ;
+C -1 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ;
+C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ;
+C -1 ; WX 389 ; N scaron ; B 16 -13 454 661 ;
+C -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ;
+C -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ;
+C -1 ; WX 556 ; N Tcommaaccent ; B 59 -270 633 653 ;
+C -1 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ;
+C -1 ; WX 500 ; N thorn ; B -75 -205 469 683 ;
+C -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ;
+C -1 ; WX 722 ; N Ograve ; B 60 -18 706 876 ;
+C -1 ; WX 722 ; N Oacute ; B 60 -18 706 876 ;
+C -1 ; WX 722 ; N Odieresis ; B 60 -18 706 818 ;
+C -1 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ;
+C -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ;
+C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ;
+C -1 ; WX 556 ; N Lcaron ; B -8 0 596 666 ;
+C -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ;
+C -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ;
+C -1 ; WX 389 ; N racute ; B 45 0 431 664 ;
+C -1 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ;
+C -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 570 664 ;
+C -1 ; WX 500 ; N otilde ; B 27 -11 496 624 ;
+C -1 ; WX 500 ; N Euro ; B 57 0 668 693 ;
+C -1 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ;
+C -1 ; WX 300 ; N onesuperior ; B 43 271 284 676 ;
+C -1 ; WX 300 ; N twosuperior ; B 33 271 324 676 ;
+C -1 ; WX 300 ; N threesuperior ; B 43 268 339 676 ;
+C -1 ; WX 333 ; N Igrave ; B -8 0 384 876 ;
+C -1 ; WX 333 ; N Iacute ; B -8 0 403 876 ;
+C -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ;
+C -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ;
+C -1 ; WX 333 ; N Idieresis ; B -8 0 435 818 ;
+C -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ;
+C -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ;
+C -1 ; WX 667 ; N Kcommaaccent ; B 7 -270 722 653 ;
+C -1 ; WX 500 ; N ograve ; B 27 -11 468 664 ;
+C -1 ; WX 500 ; N Scommaaccent ; B 17 -270 508 667 ;
+C -1 ; WX 611 ; N Eogonek ; B -1 -169 651 653 ;
+C -1 ; WX 500 ; N oacute ; B 27 -11 487 664 ;
+C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ;
+C -1 ; WX 278 ; N iogonek ; B 49 -169 278 654 ;
+C -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ;
+C -1 ; WX 500 ; N odieresis ; B 27 -11 489 606 ;
+C -1 ; WX 500 ; N ntilde ; B 14 -9 476 624 ;
+C -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ;
+C -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ;
+C -1 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ;
+C -1 ; WX 389 ; N scedilla ; B -2 -217 366 442 ;
+C -1 ; WX 389 ; N rcaron ; B 45 0 454 661 ;
+C -1 ; WX 611 ; N Egrave ; B -1 0 634 876 ;
+C -1 ; WX 611 ; N Eacute ; B -1 0 634 876 ;
+C -1 ; WX 722 ; N Gcommaaccent ; B 52 -270 722 666 ;
+C -1 ; WX 611 ; N Rcommaaccent ; B -13 -270 588 653 ;
+C -1 ; WX 611 ; N Edieresis ; B -1 0 634 818 ;
+C -1 ; WX 500 ; N nacute ; B 14 -9 487 664 ;
+C -1 ; WX 500 ; N uogonek ; B 42 -169 500 441 ;
+C -1 ; WX 500 ; N umacron ; B 42 -11 495 583 ;
+C -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ;
+C -1 ; WX 278 ; N lcaron ; B 40 -11 395 683 ;
+C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ;
+C -1 ; WX 667 ; N Cacute ; B 66 -18 689 876 ;
+C -1 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ;
+C -1 ; WX 400 ; N degree ; B 101 390 387 676 ;
+C -1 ; WX 611 ; N Aogonek ; B -51 -169 707 668 ;
+C -1 ; WX 675 ; N minus ; B 86 220 590 286 ;
+C -1 ; WX 675 ; N multiply ; B 93 8 582 497 ;
+C -1 ; WX 675 ; N divide ; B 86 -11 590 517 ;
+C -1 ; WX 611 ; N Aring ; B -51 0 564 904 ;
+C -1 ; WX 980 ; N trademark ; B 30 247 957 653 ;
+C -1 ; WX 389 ; N rcommaaccent ; B 35 -270 412 441 ;
+C -1 ; WX 278 ; N lacute ; B 40 -11 376 876 ;
+C -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ;
+C -1 ; WX 611 ; N Atilde ; B -51 0 566 836 ;
+C -1 ; WX 278 ; N icircumflex ; B 34 -11 328 661 ;
+C -1 ; WX 278 ; N igrave ; B 49 -11 284 664 ;
+C -1 ; WX 500 ; N ncommaaccent ; B 14 -270 474 441 ;
+C -1 ; WX 278 ; N lcommaaccent ; B -21 -270 279 683 ;
+C -1 ; WX 675 ; N plusminus ; B 86 0 590 568 ;
+C -1 ; WX 750 ; N onehalf ; B 34 -10 749 676 ;
+C -1 ; WX 750 ; N onequarter ; B 33 -10 736 676 ;
+C -1 ; WX 750 ; N threequarters ; B 23 -10 736 676 ;
+C -1 ; WX 278 ; N iacute ; B 49 -11 356 664 ;
+C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ;
+C -1 ; WX 444 ; N kcommaaccent ; B 14 -270 461 683 ;
+C -1 ; WX 722 ; N Omacron ; B 60 -18 706 795 ;
+C -1 ; WX 278 ; N imacron ; B 49 -11 384 583 ;
+C -1 ; WX 444 ; N emacron ; B 31 -11 467 583 ;
+C -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ;
+C -1 ; WX 278 ; N tcommaaccent ; B -21 -270 296 546 ;
+C -1 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ;
+C -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ;
+C -1 ; WX 389 ; N zcaron ; B -2 -81 434 661 ;
+C -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ;
+C -1 ; WX 444 ; N yacute ; B -24 -206 459 664 ;
+C -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 570 664 ;
+C -1 ; WX 500 ; N eth ; B 27 -11 482 683 ;
+C -1 ; WX 500 ; N uring ; B 42 -11 475 707 ;
+C -1 ; WX 722 ; N Ocircumflex ; B 60 -18 706 873 ;
+C -1 ; WX 333 ; N commaaccent ; B 7 -270 146 -40 ;
+C -1 ; WX 760 ; N copyright ; B 41 -18 719 666 ;
+C -1 ; WX 760 ; N registered ; B 41 -18 719 666 ;
+C -1 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ;
+C -1 ; WX 278 ; N idieresis ; B 49 -11 353 606 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 564 ; N notequal ; B 30 -3 534 509 ;
+C -1 ; WX 549 ; N radical ; B -2 -65 526 924 ;
+C -1 ; WX 611 ; N Agrave ; B -51 0 564 876 ;
+C -1 ; WX 611 ; N Aacute ; B -51 0 564 876 ;
+C -1 ; WX 675 ; N lessequal ; B 84 0 592 628 ;
+C -1 ; WX 675 ; N greaterequal ; B 84 0 592 628 ;
+C -1 ; WX 675 ; N logicalnot ; B 86 108 590 386 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 667 ; N Ncommaaccent ; B -20 -270 727 653 ;
+C -1 ; WX 500 ; N dcroat ; B 15 -13 558 683 ;
+C -1 ; WX 275 ; N brokenbar ; B 105 -18 171 666 ;
+C -1 ; WX 556 ; N Lcommaaccent ; B -8 -270 559 653 ;
+C -1 ; WX 611 ; N Adieresis ; B -51 0 564 818 ;
+C -1 ; WX 500 ; N mu ; B -30 -209 497 428 ;
+C -1 ; WX 250 ; N .notdef ; B 125 0 125 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C -50
+KPX A Ccedilla -50
+KPX A G -44
+KPX A O -45
+KPX A Odieresis -45
+KPX A Q -44
+KPX A T -14
+KPX A U -57
+KPX A Uacute -57
+KPX A Ucircumflex -57
+KPX A Udieresis -57
+KPX A Ugrave -57
+KPX A V -81
+KPX A W -75
+KPX A Y -21
+KPX A a -4
+KPX A b 0
+KPX A c -18
+KPX A ccedilla -28
+KPX A comma 8
+KPX A d -4
+KPX A e -17
+KPX A g -25
+KPX A guillemotleft -44
+KPX A guilsinglleft -43
+KPX A hyphen -13
+KPX A o -17
+KPX A period 8
+KPX A q -12
+KPX A quotedblright -92
+KPX A quoteright -92
+KPX A t -6
+KPX A u -9
+KPX A v -50
+KPX A w -44
+KPX A y -57
+KPX Aacute C -50
+KPX Aacute G -44
+KPX Aacute O -45
+KPX Aacute Q -44
+KPX Aacute T -14
+KPX Aacute U -57
+KPX Aacute V -81
+KPX Aacute W -75
+KPX Aacute Y -21
+KPX Aacute a -4
+KPX Aacute b 0
+KPX Aacute c -18
+KPX Aacute comma 8
+KPX Aacute d -4
+KPX Aacute e -17
+KPX Aacute g -25
+KPX Aacute guillemotleft -44
+KPX Aacute guilsinglleft -43
+KPX Aacute hyphen -13
+KPX Aacute o -17
+KPX Aacute period 8
+KPX Aacute q -12
+KPX Aacute quoteright -92
+KPX Aacute t -6
+KPX Aacute u -9
+KPX Aacute v -50
+KPX Aacute w -44
+KPX Aacute y -57
+KPX Acircumflex C -50
+KPX Acircumflex G -44
+KPX Acircumflex O -45
+KPX Acircumflex Q -44
+KPX Acircumflex T -14
+KPX Acircumflex U -57
+KPX Acircumflex V -81
+KPX Acircumflex W -75
+KPX Acircumflex Y -21
+KPX Acircumflex comma 8
+KPX Acircumflex period 8
+KPX Adieresis C -50
+KPX Adieresis G -44
+KPX Adieresis O -45
+KPX Adieresis Q -44
+KPX Adieresis T -14
+KPX Adieresis U -57
+KPX Adieresis V -81
+KPX Adieresis W -75
+KPX Adieresis Y -21
+KPX Adieresis a -4
+KPX Adieresis b 0
+KPX Adieresis c -18
+KPX Adieresis comma 8
+KPX Adieresis d -4
+KPX Adieresis g -25
+KPX Adieresis guillemotleft -44
+KPX Adieresis guilsinglleft -43
+KPX Adieresis hyphen -13
+KPX Adieresis o -17
+KPX Adieresis period 8
+KPX Adieresis q -12
+KPX Adieresis quotedblright -92
+KPX Adieresis quoteright -92
+KPX Adieresis t -6
+KPX Adieresis u -9
+KPX Adieresis v -50
+KPX Adieresis w -44
+KPX Adieresis y -57
+KPX Agrave C -50
+KPX Agrave G -44
+KPX Agrave O -45
+KPX Agrave Q -44
+KPX Agrave T -14
+KPX Agrave U -57
+KPX Agrave V -81
+KPX Agrave W -75
+KPX Agrave Y -21
+KPX Agrave comma 8
+KPX Agrave period 8
+KPX Aring C -50
+KPX Aring G -44
+KPX Aring O -45
+KPX Aring Q -44
+KPX Aring T -14
+KPX Aring U -57
+KPX Aring V -81
+KPX Aring W -75
+KPX Aring Y -21
+KPX Aring a -4
+KPX Aring b 0
+KPX Aring c -18
+KPX Aring comma 8
+KPX Aring d -4
+KPX Aring e -17
+KPX Aring g -25
+KPX Aring guillemotleft -44
+KPX Aring guilsinglleft -43
+KPX Aring hyphen -13
+KPX Aring o -17
+KPX Aring period 8
+KPX Aring q -12
+KPX Aring quotedblright -92
+KPX Aring quoteright -92
+KPX Aring t -6
+KPX Aring u -9
+KPX Aring v -50
+KPX Aring w -44
+KPX Aring y -57
+KPX Atilde C -50
+KPX Atilde G -44
+KPX Atilde O -45
+KPX Atilde Q -44
+KPX Atilde T -14
+KPX Atilde U -57
+KPX Atilde V -81
+KPX Atilde W -75
+KPX Atilde Y -21
+KPX Atilde comma 7
+KPX Atilde period 7
+KPX B A -23
+KPX B AE -35
+KPX B Aacute -23
+KPX B Acircumflex -23
+KPX B Adieresis -23
+KPX B Aring -23
+KPX B Atilde -23
+KPX B O -14
+KPX B OE -6
+KPX B Oacute -14
+KPX B Ocircumflex -14
+KPX B Odieresis -14
+KPX B Ograve -14
+KPX B Oslash -14
+KPX B V -32
+KPX B W -29
+KPX B Y -39
+KPX C A -14
+KPX C AE -30
+KPX C Aacute -14
+KPX C Adieresis -14
+KPX C Aring -14
+KPX C H -13
+KPX C K -21
+KPX C O -19
+KPX C Oacute -19
+KPX C Odieresis -19
+KPX Ccedilla A -18
+KPX D A -36
+KPX D Aacute -36
+KPX D Acircumflex -36
+KPX D Adieresis -36
+KPX D Agrave -36
+KPX D Aring -36
+KPX D Atilde -36
+KPX D J -32
+KPX D T -9
+KPX D V -42
+KPX D W -36
+KPX D X -40
+KPX D Y -50
+KPX F A -72
+KPX F Aacute -72
+KPX F Acircumflex -72
+KPX F Adieresis -72
+KPX F Agrave -72
+KPX F Aring -72
+KPX F Atilde -72
+KPX F J -60
+KPX F O -40
+KPX F Odieresis -40
+KPX F a -77
+KPX F aacute -78
+KPX F adieresis -52
+KPX F ae -82
+KPX F aring -70
+KPX F comma -95
+KPX F e -83
+KPX F eacute -83
+KPX F hyphen -45
+KPX F i -36
+KPX F j -41
+KPX F o -79
+KPX F oacute -79
+KPX F odieresis -52
+KPX F oe -75
+KPX F oslash -80
+KPX F period -99
+KPX F r -52
+KPX F u -50
+KPX G A -17
+KPX G AE -29
+KPX G Aacute -17
+KPX G Acircumflex -17
+KPX G Adieresis -17
+KPX G Agrave -17
+KPX G Aring -17
+KPX G Atilde -17
+KPX G T -13
+KPX G V -5
+KPX G W -2
+KPX G Y -12
+KPX J A -40
+KPX J AE -52
+KPX J Adieresis -40
+KPX J Aring -40
+KPX K C -55
+KPX K G -53
+KPX K O -46
+KPX K OE -45
+KPX K Oacute -46
+KPX K Odieresis -46
+KPX K S 6
+KPX K T 21
+KPX K a -5
+KPX K adieresis -5
+KPX K ae -5
+KPX K aring -5
+KPX K e -18
+KPX K hyphen -57
+KPX K o -18
+KPX K oacute -18
+KPX K odieresis -18
+KPX K u -10
+KPX K udieresis -10
+KPX K y -89
+KPX L A 44
+KPX L AE 32
+KPX L Aacute 44
+KPX L Adieresis 44
+KPX L Aring 44
+KPX L C 6
+KPX L Ccedilla 4
+KPX L G 11
+KPX L O 10
+KPX L Oacute 10
+KPX L Ocircumflex 10
+KPX L Odieresis 10
+KPX L Ograve 10
+KPX L Otilde 10
+KPX L S 20
+KPX L T -13
+KPX L U -8
+KPX L Udieresis -8
+KPX L V -55
+KPX L W -48
+KPX L Y -20
+KPX L hyphen 47
+KPX L quotedblright -92
+KPX L quoteright -92
+KPX L u 12
+KPX L udieresis 10
+KPX L y -26
+KPX N A -20
+KPX N AE -32
+KPX N Aacute -20
+KPX N Adieresis -20
+KPX N Aring -20
+KPX N C -21
+KPX N Ccedilla -20
+KPX N G -14
+KPX N O -20
+KPX N Oacute -20
+KPX N Odieresis -20
+KPX N a -22
+KPX N aacute -23
+KPX N adieresis -23
+KPX N ae -27
+KPX N aring -23
+KPX N comma -13
+KPX N e -28
+KPX N eacute -30
+KPX N o -25
+KPX N oacute -27
+KPX N odieresis -27
+KPX N oslash -27
+KPX N period -16
+KPX N u -24
+KPX N udieresis -25
+KPX O A -38
+KPX O AE -70
+KPX O Aacute -38
+KPX O Adieresis -38
+KPX O Aring -38
+KPX O T -3
+KPX O V -45
+KPX O W -39
+KPX O X -41
+KPX O Y -51
+KPX Oacute A -38
+KPX Oacute T -3
+KPX Oacute V -45
+KPX Oacute W -39
+KPX Oacute Y -51
+KPX Ocircumflex T -3
+KPX Ocircumflex V -45
+KPX Ocircumflex Y -51
+KPX Odieresis A -38
+KPX Odieresis T -3
+KPX Odieresis V -45
+KPX Odieresis W -39
+KPX Odieresis X -41
+KPX Odieresis Y -51
+KPX Ograve T -3
+KPX Ograve V -45
+KPX Ograve Y -51
+KPX Oslash A -38
+KPX Otilde T -3
+KPX Otilde V -45
+KPX Otilde Y -51
+KPX P A -79
+KPX P AE -116
+KPX P Aacute -79
+KPX P Adieresis -79
+KPX P Aring -79
+KPX P J -89
+KPX P a -74
+KPX P aacute -74
+KPX P adieresis -64
+KPX P ae -80
+KPX P aring -74
+KPX P comma -118
+KPX P e -79
+KPX P eacute -79
+KPX P hyphen -64
+KPX P o -73
+KPX P oacute -73
+KPX P odieresis -64
+KPX P oe -67
+KPX P oslash -74
+KPX P period -121
+KPX R C -26
+KPX R Ccedilla -25
+KPX R G -20
+KPX R O -26
+KPX R OE -18
+KPX R Oacute -26
+KPX R Odieresis -26
+KPX R T 0
+KPX R U -36
+KPX R Udieresis -36
+KPX R V -31
+KPX R W -28
+KPX R Y -19
+KPX R a -3
+KPX R aacute -3
+KPX R adieresis -3
+KPX R ae -3
+KPX R aring -3
+KPX R e -15
+KPX R eacute -15
+KPX R hyphen -29
+KPX R o -15
+KPX R oacute -15
+KPX R odieresis -15
+KPX R oe -15
+KPX R u -7
+KPX R uacute -7
+KPX R udieresis -7
+KPX R y 0
+KPX S A -2
+KPX S AE -14
+KPX S Aacute -2
+KPX S Adieresis -2
+KPX S Aring -2
+KPX S T 1
+KPX S V 5
+KPX S W 8
+KPX S Y -1
+KPX S t -13
+KPX T A -33
+KPX T AE -45
+KPX T Aacute -33
+KPX T Acircumflex -33
+KPX T Adieresis -33
+KPX T Agrave -33
+KPX T Aring -33
+KPX T Atilde -33
+KPX T C -15
+KPX T G -7
+KPX T J -39
+KPX T O -20
+KPX T OE -8
+KPX T Oacute -20
+KPX T Ocircumflex -20
+KPX T Odieresis -20
+KPX T Ograve -20
+KPX T Oslash -20
+KPX T Otilde -20
+KPX T S -2
+KPX T V 41
+KPX T W 43
+KPX T Y 33
+KPX T a -81
+KPX T ae -81
+KPX T c -86
+KPX T colon -84
+KPX T comma -70
+KPX T e -90
+KPX T g -102
+KPX T guillemotleft -102
+KPX T guilsinglleft -101
+KPX T hyphen -68
+KPX T i -16
+KPX T j -20
+KPX T o -87
+KPX T oslash -89
+KPX T period -71
+KPX T r -87
+KPX T s -74
+KPX T semicolon -92
+KPX T u -86
+KPX T v -72
+KPX T w -69
+KPX T y -70
+KPX U A -50
+KPX U AE -69
+KPX U Aacute -50
+KPX U Acircumflex -50
+KPX U Adieresis -50
+KPX U Aring -50
+KPX U Atilde -50
+KPX U comma -35
+KPX U m -28
+KPX U n -29
+KPX U p -32
+KPX U period -39
+KPX U r -41
+KPX Uacute A -50
+KPX Uacute comma -35
+KPX Uacute m -28
+KPX Uacute n -29
+KPX Uacute p -32
+KPX Uacute period -39
+KPX Uacute r -41
+KPX Ucircumflex A -50
+KPX Udieresis A -50
+KPX Udieresis b 1
+KPX Udieresis comma -35
+KPX Udieresis m -28
+KPX Udieresis n -29
+KPX Udieresis p -32
+KPX Udieresis period -39
+KPX Udieresis r -41
+KPX Ugrave A -50
+KPX V A -66
+KPX V AE -102
+KPX V Aacute -66
+KPX V Acircumflex -66
+KPX V Adieresis -66
+KPX V Agrave -66
+KPX V Aring -66
+KPX V Atilde -66
+KPX V C -48
+KPX V G -42
+KPX V O -48
+KPX V Oacute -48
+KPX V Ocircumflex -48
+KPX V Odieresis -48
+KPX V Ograve -48
+KPX V Oslash -48
+KPX V Otilde -48
+KPX V S -15
+KPX V T 32
+KPX V a -67
+KPX V ae -72
+KPX V colon -82
+KPX V comma -76
+KPX V e -74
+KPX V g -84
+KPX V guillemotleft -82
+KPX V guilsinglleft -81
+KPX V hyphen -45
+KPX V i -16
+KPX V o -70
+KPX V oslash -72
+KPX V period -80
+KPX V r -45
+KPX V semicolon -79
+KPX V u -40
+KPX V y -16
+KPX W A -57
+KPX W AE -85
+KPX W Aacute -57
+KPX W Acircumflex -57
+KPX W Adieresis -57
+KPX W Agrave -57
+KPX W Aring -57
+KPX W Atilde -57
+KPX W C -39
+KPX W G -33
+KPX W O -39
+KPX W Oacute -39
+KPX W Ocircumflex -39
+KPX W Odieresis -39
+KPX W Ograve -39
+KPX W Oslash -39
+KPX W Otilde -39
+KPX W S -17
+KPX W T 30
+KPX W a -53
+KPX W ae -58
+KPX W colon -77
+KPX W comma -58
+KPX W e -60
+KPX W g -75
+KPX W guillemotleft -68
+KPX W guilsinglleft -67
+KPX W hyphen -32
+KPX W i -18
+KPX W o -56
+KPX W oslash -58
+KPX W period -62
+KPX W r -40
+KPX W semicolon -74
+KPX W u -35
+KPX W y -11
+KPX X C -50
+KPX X O -44
+KPX X Odieresis -44
+KPX X Q -42
+KPX X a -3
+KPX X e -15
+KPX X hyphen -41
+KPX X o -15
+KPX X u -7
+KPX X y -67
+KPX Y A -27
+KPX Y AE -39
+KPX Y Aacute -27
+KPX Y Acircumflex -27
+KPX Y Adieresis -27
+KPX Y Agrave -27
+KPX Y Aring -27
+KPX Y Atilde -27
+KPX Y C -52
+KPX Y G -45
+KPX Y O -52
+KPX Y Oacute -52
+KPX Y Ocircumflex -52
+KPX Y Odieresis -52
+KPX Y Ograve -52
+KPX Y Oslash -52
+KPX Y Otilde -52
+KPX Y S -15
+KPX Y T 32
+KPX Y a -72
+KPX Y ae -75
+KPX Y colon -78
+KPX Y comma -64
+KPX Y e -78
+KPX Y g -94
+KPX Y guillemotleft -93
+KPX Y guilsinglleft -92
+KPX Y hyphen -60
+KPX Y i -16
+KPX Y o -75
+KPX Y oslash -77
+KPX Y p -52
+KPX Y period -65
+KPX Y semicolon -86
+KPX Y u -58
+KPX Y v -32
+KPX Z v -12
+KPX Z y -28
+KPX a j -22
+KPX a quoteright -28
+KPX a v 1
+KPX a w 4
+KPX a y 2
+KPX aacute v 1
+KPX aacute w 4
+KPX aacute y 2
+KPX adieresis v 1
+KPX adieresis w 4
+KPX adieresis y 2
+KPX ae v 2
+KPX ae w 5
+KPX ae y 6
+KPX agrave v 1
+KPX agrave w 4
+KPX agrave y 2
+KPX aring v 1
+KPX aring w 4
+KPX aring y 2
+KPX b v -10
+KPX b w -7
+KPX b y -3
+KPX c h -30
+KPX c k -29
+KPX comma one -40
+KPX comma quotedblright -39
+KPX comma quoteright -39
+KPX e quoteright -21
+KPX e t -16
+KPX e v 0
+KPX e w 2
+KPX e x -10
+KPX e y 4
+KPX eacute v 0
+KPX eacute w 2
+KPX eacute y 4
+KPX ecircumflex v 0
+KPX ecircumflex w 2
+KPX ecircumflex y 4
+KPX eight four 13
+KPX eight one -50
+KPX eight seven -1
+KPX f a -26
+KPX f aacute -27
+KPX f adieresis -2
+KPX f ae -30
+KPX f aring -17
+KPX f e -32
+KPX f eacute -34
+KPX f f 30
+KPX f i 17
+KPX f j 13
+KPX f l 42
+KPX f o -29
+KPX f oacute -30
+KPX f odieresis -2
+KPX f oe -24
+KPX f oslash -31
+KPX f quoteright 18
+KPX f s -20
+KPX f t 18
+KPX five four -5
+KPX five one -71
+KPX five seven -28
+KPX four four 12
+KPX four one -69
+KPX four seven -27
+KPX g a -41
+KPX g adieresis -42
+KPX g ae -46
+KPX g aring -42
+KPX g e -45
+KPX g eacute -45
+KPX g l -46
+KPX g oacute -41
+KPX g odieresis -41
+KPX g r -21
+KPX guillemotright A -25
+KPX guillemotright AE -51
+KPX guillemotright Aacute -25
+KPX guillemotright Adieresis -25
+KPX guillemotright Aring -25
+KPX guillemotright T -77
+KPX guillemotright V -76
+KPX guillemotright W -67
+KPX guillemotright Y -81
+KPX guilsinglright A -24
+KPX guilsinglright AE -50
+KPX guilsinglright Aacute -24
+KPX guilsinglright Adieresis -24
+KPX guilsinglright Aring -24
+KPX guilsinglright T -76
+KPX guilsinglright V -75
+KPX guilsinglright W -66
+KPX guilsinglright Y -80
+KPX h quoteright -31
+KPX h y -4
+KPX hyphen A 3
+KPX hyphen AE -23
+KPX hyphen Aacute 3
+KPX hyphen Adieresis 3
+KPX hyphen Aring 3
+KPX hyphen T -46
+KPX hyphen V -43
+KPX hyphen W -34
+KPX hyphen Y -53
+KPX i T -10
+KPX i j -31
+KPX k a 12
+KPX k aacute 12
+KPX k adieresis 12
+KPX k ae 9
+KPX k aring 12
+KPX k comma 27
+KPX k e 5
+KPX k eacute 5
+KPX k g -27
+KPX k hyphen -27
+KPX k o 6
+KPX k oacute 6
+KPX k odieresis 6
+KPX k period 26
+KPX k s 7
+KPX k u 8
+KPX k udieresis 8
+KPX l v -12
+KPX l y -11
+KPX m p -4
+KPX m v -6
+KPX m w -4
+KPX m y -3
+KPX n T -41
+KPX n p -7
+KPX n quoteright -34
+KPX n v -10
+KPX n w -7
+KPX n y -6
+KPX nine four 2
+KPX nine one -64
+KPX nine seven -5
+KPX o T -63
+KPX o quoteright -24
+KPX o t -15
+KPX o v -18
+KPX o w -15
+KPX o x -33
+KPX o y -10
+KPX oacute v -18
+KPX oacute w -15
+KPX oacute y -10
+KPX ocircumflex t -16
+KPX odieresis t -16
+KPX odieresis v -18
+KPX odieresis w -15
+KPX odieresis x -33
+KPX odieresis y -10
+KPX ograve v -18
+KPX ograve w -15
+KPX ograve y -10
+KPX one comma -52
+KPX one eight -57
+KPX one five -55
+KPX one four -69
+KPX one nine -61
+KPX one one -69
+KPX one period -56
+KPX one seven -60
+KPX one six -50
+KPX one three -55
+KPX one two -50
+KPX one zero -41
+KPX p t -14
+KPX p y -4
+KPX period one -39
+KPX period quotedblright -38
+KPX period quoteright -38
+KPX q c -13
+KPX q u -11
+KPX quotedblbase A 1
+KPX quotedblbase AE -13
+KPX quotedblbase T -64
+KPX quotedblbase V -96
+KPX quotedblbase W -84
+KPX quotedblbase Y -69
+KPX quotedblleft A -88
+KPX quotedblleft AE -141
+KPX quotedblleft Aacute -88
+KPX quotedblleft Adieresis -88
+KPX quotedblleft Aring -88
+KPX quotedblleft T -19
+KPX quotedblleft V -17
+KPX quotedblleft W -15
+KPX quotedblleft Y -25
+KPX quotedblright A -94
+KPX quotedblright AE -147
+KPX quotedblright Aacute -94
+KPX quotedblright Adieresis -94
+KPX quotedblright Aring -94
+KPX quotedblright T -21
+KPX quotedblright V -22
+KPX quotedblright W -19
+KPX quotedblright Y -30
+KPX quoteleft A -78
+KPX quoteleft AE -131
+KPX quoteleft Aacute -78
+KPX quoteleft Adieresis -78
+KPX quoteleft Aring -78
+KPX quoteleft T -9
+KPX quoteleft V -8
+KPX quoteleft W -5
+KPX quoteleft Y -15
+KPX quoteright A -87
+KPX quoteright AE -140
+KPX quoteright Aacute -87
+KPX quoteright Adieresis -87
+KPX quoteright Aring -87
+KPX quoteright comma -73
+KPX quoteright d -79
+KPX quoteright o -78
+KPX quoteright period -78
+KPX quoteright r -57
+KPX quoteright s -63
+KPX quoteright t -49
+KPX quoteright v -28
+KPX quoteright w -26
+KPX quoteright y -28
+KPX r a -29
+KPX r aacute -29
+KPX r acircumflex -29
+KPX r adieresis -29
+KPX r ae -36
+KPX r agrave -29
+KPX r aring -29
+KPX r c -26
+KPX r ccedilla -17
+KPX r colon -28
+KPX r comma -68
+KPX r d -31
+KPX r e -35
+KPX r eacute -35
+KPX r ecircumflex -35
+KPX r egrave -35
+KPX r f 23
+KPX r g -21
+KPX r h -17
+KPX r hyphen -52
+KPX r i 8
+KPX r j 4
+KPX r k -15
+KPX r l -21
+KPX r m 17
+KPX r n 16
+KPX r o -28
+KPX r oacute -28
+KPX r ocircumflex -28
+KPX r odieresis -28
+KPX r oe -23
+KPX r ograve -28
+KPX r oslash -29
+KPX r p 13
+KPX r period -72
+KPX r q -31
+KPX r quoteright -4
+KPX r r 4
+KPX r s -17
+KPX r semicolon -28
+KPX r t 12
+KPX r u 11
+KPX r v 30
+KPX r w 32
+KPX r x 7
+KPX r y 33
+KPX r z 0
+KPX s quoteright -20
+KPX s t -12
+KPX seven colon -88
+KPX seven comma -79
+KPX seven eight -32
+KPX seven five -53
+KPX seven four -65
+KPX seven one -47
+KPX seven period -83
+KPX seven seven -11
+KPX seven six -37
+KPX seven three -42
+KPX seven two -13
+KPX six four 17
+KPX six one -64
+KPX six seven -37
+KPX t S -9
+KPX t a -6
+KPX t aacute -6
+KPX t adieresis -6
+KPX t ae -10
+KPX t aring -6
+KPX t colon -29
+KPX t e -13
+KPX t eacute -13
+KPX t h -11
+KPX t o -11
+KPX t oacute -11
+KPX t odieresis -11
+KPX t quoteright -19
+KPX t semicolon -26
+KPX three four -9
+KPX three one -76
+KPX three seven -15
+KPX two four -12
+KPX two one -45
+KPX two seven -22
+KPX u quoteright -31
+KPX v a -24
+KPX v aacute -26
+KPX v acircumflex -26
+KPX v adieresis -26
+KPX v ae -29
+KPX v agrave -26
+KPX v aring -26
+KPX v atilde -26
+KPX v c -26
+KPX v colon -48
+KPX v comma -46
+KPX v e -30
+KPX v eacute -32
+KPX v ecircumflex -32
+KPX v egrave -32
+KPX v g -36
+KPX v hyphen 0
+KPX v l -29
+KPX v o -26
+KPX v oacute -28
+KPX v odieresis -28
+KPX v ograve -28
+KPX v oslash -29
+KPX v period -51
+KPX v s -30
+KPX v semicolon -48
+KPX w a -26
+KPX w aacute -28
+KPX w acircumflex -28
+KPX w adieresis -28
+KPX w ae -31
+KPX w agrave -28
+KPX w aring -28
+KPX w atilde -28
+KPX w c -28
+KPX w colon -49
+KPX w comma -47
+KPX w e -32
+KPX w eacute -34
+KPX w ecircumflex -34
+KPX w egrave -34
+KPX w g -38
+KPX w hyphen -4
+KPX w l -30
+KPX w o -28
+KPX w oacute -30
+KPX w odieresis -30
+KPX w ograve -30
+KPX w oslash -31
+KPX w period -51
+KPX w s -32
+KPX w semicolon -49
+KPX x a 6
+KPX x c 0
+KPX x e 0
+KPX x eacute 0
+KPX x o 1
+KPX x q 2
+KPX y a -12
+KPX y aacute -12
+KPX y acircumflex -12
+KPX y adieresis -12
+KPX y ae -17
+KPX y agrave -12
+KPX y aring -12
+KPX y atilde -12
+KPX y c -15
+KPX y colon -48
+KPX y comma -21
+KPX y e -19
+KPX y eacute -19
+KPX y ecircumflex -19
+KPX y egrave -19
+KPX y g -34
+KPX y hyphen 7
+KPX y l -18
+KPX y o -15
+KPX y oacute -15
+KPX y odieresis -15
+KPX y ograve -15
+KPX y oslash -16
+KPX y period -25
+KPX y s -19
+KPX y semicolon -45
+KPX zero four 14
+KPX zero one -50
+KPX zero seven -3
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/utmri8a.pfb b/Master/tlpkg/tlgs/lib/fonts/utmri8a.pfb
new file mode 100644
index 00000000000..aa9ff5f8ac9
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/utmri8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uzcmi8a.afm b/Master/tlpkg/tlgs/lib/fonts/uzcmi8a.afm
new file mode 100644
index 00000000000..d3ad8d0abad
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uzcmi8a.afm
@@ -0,0 +1,1341 @@
+StartFontMetrics 3.0
+Comment Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development
+Comment Creation Date: 12/22/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName URWChanceryL-MediItal
+FullName URW Chancery L Medium Italic
+FamilyName URW Chancery L
+Weight Medium
+ItalicAngle -14.0
+IsFixedPitch false
+UnderlinePosition -120
+UnderlineThickness 50
+Version 1.05
+Notice (URW)++,Copyright 1999 by (URW)++ Design & Development
+EncodingScheme AdobeStandardEncoding
+FontBBox -133 -290 1078 913
+CapHeight 573
+XHeight 391
+Descender -248
+Ascender 677
+StartCharMetrics 316
+C 32 ; WX 220 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 280 ; N exclam ; B 109 -9 347 587 ;
+C 34 ; WX 220 ; N quotedbl ; B 170 405 333 591 ;
+C 35 ; WX 440 ; N numbersign ; B 63 -1 596 575 ;
+C 36 ; WX 440 ; N dollar ; B 60 -144 461 675 ;
+C 37 ; WX 680 ; N percent ; B 162 -7 701 584 ;
+C 38 ; WX 780 ; N ampersand ; B 121 -17 855 557 ;
+C 39 ; WX 240 ; N quoteright ; B 228 358 358 578 ;
+C 40 ; WX 260 ; N parenleft ; B 116 -165 412 668 ;
+C 41 ; WX 220 ; N parenright ; B 17 -166 313 667 ;
+C 42 ; WX 420 ; N asterisk ; B 220 377 512 677 ;
+C 43 ; WX 520 ; N plus ; B 103 14 513 424 ;
+C 44 ; WX 220 ; N comma ; B 30 -98 215 173 ;
+C 45 ; WX 280 ; N hyphen ; B 115 173 300 237 ;
+C 46 ; WX 220 ; N period ; B 107 -9 228 128 ;
+C 47 ; WX 340 ; N slash ; B -6 -170 535 679 ;
+C 48 ; WX 440 ; N zero ; B 94 -7 489 576 ;
+C 49 ; WX 440 ; N one ; B 82 0 434 582 ;
+C 50 ; WX 440 ; N two ; B 47 -17 469 572 ;
+C 51 ; WX 440 ; N three ; B 36 -6 458 575 ;
+C 52 ; WX 440 ; N four ; B 69 -25 455 585 ;
+C 53 ; WX 440 ; N five ; B 67 -8 565 640 ;
+C 54 ; WX 440 ; N six ; B 95 -8 532 585 ;
+C 55 ; WX 440 ; N seven ; B 165 -18 541 611 ;
+C 56 ; WX 440 ; N eight ; B 75 -10 494 572 ;
+C 57 ; WX 440 ; N nine ; B 42 -8 480 576 ;
+C 58 ; WX 260 ; N colon ; B 98 -9 289 408 ;
+C 59 ; WX 240 ; N semicolon ; B 29 -98 277 408 ;
+C 60 ; WX 520 ; N less ; B 120 2 557 449 ;
+C 61 ; WX 520 ; N equal ; B 108 108 518 330 ;
+C 62 ; WX 520 ; N greater ; B 119 2 556 449 ;
+C 63 ; WX 380 ; N question ; B 130 -9 497 582 ;
+C 64 ; WX 700 ; N at ; B 102 -31 765 592 ;
+C 65 ; WX 620 ; N A ; B 23 -13 687 594 ;
+C 66 ; WX 600 ; N B ; B 75 -2 642 616 ;
+C 67 ; WX 520 ; N C ; B 88 -73 635 591 ;
+C 68 ; WX 700 ; N D ; B 86 0 759 614 ;
+C 69 ; WX 620 ; N E ; B 76 -8 668 586 ;
+C 70 ; WX 580 ; N F ; B 60 -114 733 620 ;
+C 71 ; WX 620 ; N G ; B 118 -236 670 591 ;
+C 72 ; WX 680 ; N H ; B 33 -11 908 678 ;
+C 73 ; WX 380 ; N I ; B 81 0 481 573 ;
+C 74 ; WX 400 ; N J ; B 1 -122 491 572 ;
+C 75 ; WX 660 ; N K ; B 88 -147 851 577 ;
+C 76 ; WX 580 ; N L ; B 33 -6 631 577 ;
+C 77 ; WX 840 ; N M ; B 58 -13 1009 670 ;
+C 78 ; WX 700 ; N N ; B 40 -163 915 677 ;
+C 79 ; WX 600 ; N O ; B 104 -13 652 591 ;
+C 80 ; WX 540 ; N P ; B 37 1 645 601 ;
+C 81 ; WX 600 ; N Q ; B 104 -191 851 591 ;
+C 82 ; WX 600 ; N R ; B 38 -156 826 611 ;
+C 83 ; WX 460 ; N S ; B 0 -71 517 586 ;
+C 84 ; WX 500 ; N T ; B 58 0 718 649 ;
+C 85 ; WX 740 ; N U ; B 116 -14 778 578 ;
+C 86 ; WX 640 ; N V ; B 104 -12 809 685 ;
+C 87 ; WX 880 ; N W ; B 104 -17 1035 677 ;
+C 88 ; WX 560 ; N X ; B 0 -13 671 580 ;
+C 89 ; WX 560 ; N Y ; B 31 -152 763 608 ;
+C 90 ; WX 620 ; N Z ; B 62 -18 676 597 ;
+C 91 ; WX 240 ; N bracketleft ; B 47 -165 404 665 ;
+C 92 ; WX 480 ; N backslash ; B 185 0 484 579 ;
+C 93 ; WX 320 ; N bracketright ; B 23 -165 381 665 ;
+C 94 ; WX 520 ; N asciicircum ; B 212 447 472 681 ;
+C 95 ; WX 500 ; N underscore ; B 0 -145 500 -95 ;
+C 96 ; WX 240 ; N quoteleft ; B 229 435 384 676 ;
+C 97 ; WX 420 ; N a ; B 87 -13 492 411 ;
+C 98 ; WX 420 ; N b ; B 87 -17 466 677 ;
+C 99 ; WX 340 ; N c ; B 87 -13 383 411 ;
+C 100 ; WX 440 ; N d ; B 87 -13 629 677 ;
+C 101 ; WX 340 ; N e ; B 87 -13 380 411 ;
+C 102 ; WX 320 ; N f ; B -99 -246 541 680 ;
+C 103 ; WX 400 ; N g ; B -78 -247 481 410 ;
+C 104 ; WX 440 ; N h ; B 75 -15 506 678 ;
+C 105 ; WX 240 ; N i ; B 81 -13 311 616 ;
+C 106 ; WX 220 ; N j ; B -133 -247 303 616 ;
+C 107 ; WX 440 ; N k ; B 87 -153 655 675 ;
+C 108 ; WX 240 ; N l ; B 87 -13 434 678 ;
+C 109 ; WX 620 ; N m ; B 81 -10 693 411 ;
+C 110 ; WX 460 ; N n ; B 81 -16 520 411 ;
+C 111 ; WX 400 ; N o ; B 87 -13 449 411 ;
+C 112 ; WX 440 ; N p ; B -8 -248 482 411 ;
+C 113 ; WX 400 ; N q ; B 87 -249 485 479 ;
+C 114 ; WX 300 ; N r ; B 81 -10 409 411 ;
+C 115 ; WX 320 ; N s ; B 41 -13 377 411 ;
+C 116 ; WX 320 ; N t ; B 96 -13 392 503 ;
+C 117 ; WX 460 ; N u ; B 82 -13 518 415 ;
+C 118 ; WX 440 ; N v ; B 87 -13 510 437 ;
+C 119 ; WX 680 ; N w ; B 87 -13 757 444 ;
+C 120 ; WX 420 ; N x ; B 70 -160 583 411 ;
+C 121 ; WX 400 ; N y ; B 11 -248 473 415 ;
+C 122 ; WX 440 ; N z ; B 46 -13 475 426 ;
+C 123 ; WX 240 ; N braceleft ; B 105 -165 405 661 ;
+C 124 ; WX 520 ; N bar ; B 314 0 363 722 ;
+C 125 ; WX 240 ; N braceright ; B 10 -166 308 661 ;
+C 126 ; WX 520 ; N asciitilde ; B 86 165 526 278 ;
+C 161 ; WX 280 ; N exclamdown ; B 57 -186 295 409 ;
+C 162 ; WX 440 ; N cent ; B 127 -76 453 651 ;
+C 163 ; WX 440 ; N sterling ; B 4 -53 436 578 ;
+C 164 ; WX 60 ; N fraction ; B -115 -5 280 585 ;
+C 165 ; WX 440 ; N yen ; B -11 -152 623 608 ;
+C 166 ; WX 440 ; N florin ; B -49 -246 587 682 ;
+C 167 ; WX 420 ; N section ; B 63 -164 464 576 ;
+C 168 ; WX 440 ; N currency ; B 50 72 480 500 ;
+C 169 ; WX 160 ; N quotesingle ; B 170 405 259 591 ;
+C 170 ; WX 340 ; N quotedblleft ; B 229 435 500 676 ;
+C 171 ; WX 340 ; N guillemotleft ; B 98 -9 404 413 ;
+C 172 ; WX 240 ; N guilsinglleft ; B 98 -9 285 413 ;
+C 173 ; WX 260 ; N guilsinglright ; B 86 -3 284 423 ;
+C 174 ; WX 520 ; N fi ; B -104 -247 606 681 ;
+C 175 ; WX 520 ; N fl ; B -105 -246 710 688 ;
+C 177 ; WX 500 ; N endash ; B 31 173 578 237 ;
+C 178 ; WX 460 ; N dagger ; B 98 -138 529 606 ;
+C 179 ; WX 480 ; N daggerdbl ; B 98 -137 529 607 ;
+C 180 ; WX 220 ; N periodcentered ; B 108 156 229 277 ;
+C 182 ; WX 500 ; N paragraph ; B 29 -247 650 586 ;
+C 183 ; WX 600 ; N bullet ; B 228 217 568 557 ;
+C 184 ; WX 180 ; N quotesinglbase ; B 40 -109 170 111 ;
+C 185 ; WX 280 ; N quotedblbase ; B 41 -109 286 111 ;
+C 186 ; WX 360 ; N quotedblright ; B 228 454 473 673 ;
+C 187 ; WX 380 ; N guillemotright ; B 87 -3 407 423 ;
+C 188 ; WX 1000 ; N ellipsis ; B 106 -9 893 128 ;
+C 189 ; WX 960 ; N perthousand ; B 162 -7 975 584 ;
+C 191 ; WX 400 ; N questiondown ; B 57 -181 425 409 ;
+C 193 ; WX 220 ; N grave ; B 173 460 281 655 ;
+C 194 ; WX 300 ; N acute ; B 205 460 388 655 ;
+C 195 ; WX 340 ; N circumflex ; B 183 460 397 656 ;
+C 196 ; WX 440 ; N tilde ; B 183 494 513 604 ;
+C 197 ; WX 440 ; N macron ; B 183 520 515 568 ;
+C 198 ; WX 440 ; N breve ; B 183 488 516 623 ;
+C 199 ; WX 220 ; N dotaccent ; B 206 489 309 612 ;
+C 200 ; WX 360 ; N dieresis ; B 183 489 419 612 ;
+C 202 ; WX 300 ; N ring ; B 228 461 409 640 ;
+C 203 ; WX 300 ; N cedilla ; B 41 -212 216 0 ;
+C 205 ; WX 400 ; N hungarumlaut ; B 183 460 463 655 ;
+C 206 ; WX 280 ; N ogonek ; B 58 -153 216 0 ;
+C 207 ; WX 340 ; N caron ; B 234 458 447 655 ;
+C 208 ; WX 1000 ; N emdash ; B 31 172 1078 236 ;
+C 225 ; WX 740 ; N AE ; B 32 -4 798 571 ;
+C 227 ; WX 260 ; N ordfeminine ; B 81 253 324 576 ;
+C 232 ; WX 580 ; N Lslash ; B 33 -6 631 577 ;
+C 233 ; WX 660 ; N Oslash ; B 110 -132 707 690 ;
+C 234 ; WX 820 ; N OE ; B 104 -13 870 588 ;
+C 235 ; WX 260 ; N ordmasculine ; B 98 253 323 578 ;
+C 241 ; WX 540 ; N ae ; B 87 -13 588 440 ;
+C 245 ; WX 240 ; N dotlessi ; B 81 -13 311 411 ;
+C 248 ; WX 300 ; N lslash ; B 87 -13 491 678 ;
+C 249 ; WX 440 ; N oslash ; B 92 -148 467 547 ;
+C 250 ; WX 560 ; N oe ; B 88 -13 602 411 ;
+C 251 ; WX 420 ; N germandbls ; B -127 -248 506 680 ;
+C -1 ; WX 740 ; N Udieresis ; B 116 -14 778 773 ;
+C -1 ; WX 740 ; N Uacute ; B 116 -14 778 820 ;
+C -1 ; WX 460 ; N Scedilla ; B 0 -266 517 586 ;
+C -1 ; WX 500 ; N Tcaron ; B 58 0 718 821 ;
+C -1 ; WX 460 ; N Scaron ; B 0 -71 607 821 ;
+C -1 ; WX 600 ; N Rcaron ; B 38 -156 826 821 ;
+C -1 ; WX 600 ; N Racute ; B 38 -156 826 820 ;
+C -1 ; WX 460 ; N Sacute ; B 0 -71 517 820 ;
+C -1 ; WX 600 ; N Otilde ; B 104 -13 678 765 ;
+C -1 ; WX 460 ; N ucircumflex ; B 82 -13 518 656 ;
+C -1 ; WX 600 ; N Ohungarumlaut ; B 104 -13 652 820 ;
+C -1 ; WX 740 ; N Uhungarumlaut ; B 116 -14 816 820 ;
+C -1 ; WX 560 ; N Yacute ; B 31 -152 763 820 ;
+C -1 ; WX 700 ; N Eth ; B 86 0 759 615 ;
+C -1 ; WX 700 ; N Dcroat ; B 86 0 759 615 ;
+C -1 ; WX 620 ; N Zacute ; B 62 -18 676 820 ;
+C -1 ; WX 740 ; N Uring ; B 116 -14 778 802 ;
+C -1 ; WX 400 ; N gbreve ; B -78 -247 496 623 ;
+C -1 ; WX 340 ; N eogonek ; B 87 -153 380 411 ;
+C -1 ; WX 340 ; N edotaccent ; B 87 -13 380 612 ;
+C -1 ; WX 340 ; N ecaron ; B 87 -13 487 655 ;
+C -1 ; WX 740 ; N Ugrave ; B 116 -14 778 820 ;
+C -1 ; WX 540 ; N Thorn ; B 37 1 619 585 ;
+C -1 ; WX 340 ; N eacute ; B 87 -13 408 655 ;
+C -1 ; WX 340 ; N edieresis ; B 87 -13 409 612 ;
+C -1 ; WX 497 ; N dcaron ; B 87 -13 697 678 ;
+C -1 ; WX 340 ; N ccedilla ; B 61 -212 383 411 ;
+C -1 ; WX 340 ; N ccaron ; B 87 -13 467 655 ;
+C -1 ; WX 340 ; N cacute ; B 87 -13 441 655 ;
+C -1 ; WX 420 ; N aogonek ; B 87 -153 492 411 ;
+C -1 ; WX 420 ; N aring ; B 87 -13 492 640 ;
+C -1 ; WX 420 ; N atilde ; B 87 -13 513 604 ;
+C -1 ; WX 420 ; N abreve ; B 87 -13 526 623 ;
+C -1 ; WX 340 ; N egrave ; B 87 -13 380 655 ;
+C -1 ; WX 420 ; N agrave ; B 87 -13 492 655 ;
+C -1 ; WX 420 ; N aacute ; B 87 -13 492 655 ;
+C -1 ; WX 420 ; N adieresis ; B 87 -13 492 612 ;
+C -1 ; WX 740 ; N Uogonek ; B 116 -153 778 578 ;
+C -1 ; WX 460 ; N ugrave ; B 82 -13 518 655 ;
+C -1 ; WX 460 ; N uacute ; B 82 -13 518 655 ;
+C -1 ; WX 460 ; N udieresis ; B 82 -13 518 612 ;
+C -1 ; WX 320 ; N tcaron ; B 96 -13 480 678 ;
+C -1 ; WX 320 ; N scommaaccent ; B 41 -270 377 411 ;
+C -1 ; WX 620 ; N Zcaron ; B 62 -18 676 821 ;
+C -1 ; WX 340 ; N ecircumflex ; B 87 -13 397 656 ;
+C -1 ; WX 740 ; N Ucircumflex ; B 116 -14 778 821 ;
+C -1 ; WX 420 ; N acircumflex ; B 87 -13 492 656 ;
+C -1 ; WX 620 ; N Zdotaccent ; B 62 -18 676 773 ;
+C -1 ; WX 320 ; N scaron ; B 41 -13 477 655 ;
+C -1 ; WX 620 ; N Amacron ; B 23 -13 760 729 ;
+C -1 ; WX 320 ; N sacute ; B 41 -13 440 655 ;
+C -1 ; WX 500 ; N Tcommaaccent ; B 58 -270 718 649 ;
+C -1 ; WX 560 ; N Ydieresis ; B 31 -152 763 773 ;
+C -1 ; WX 440 ; N thorn ; B -8 -248 482 680 ;
+C -1 ; WX 620 ; N Emacron ; B 76 -8 668 729 ;
+C -1 ; WX 600 ; N Ograve ; B 104 -13 652 820 ;
+C -1 ; WX 600 ; N Oacute ; B 104 -13 652 820 ;
+C -1 ; WX 600 ; N Odieresis ; B 104 -13 652 773 ;
+C -1 ; WX 700 ; N Ntilde ; B 40 -163 915 765 ;
+C -1 ; WX 700 ; N Ncaron ; B 40 -163 915 821 ;
+C -1 ; WX 700 ; N Nacute ; B 40 -163 915 820 ;
+C -1 ; WX 580 ; N Lcaron ; B 33 -6 700 591 ;
+C -1 ; WX 580 ; N Lacute ; B 33 -6 631 820 ;
+C -1 ; WX 380 ; N Idotaccent ; B 81 0 481 773 ;
+C -1 ; WX 300 ; N racute ; B 81 -10 428 655 ;
+C -1 ; WX 380 ; N Icircumflex ; B 81 0 487 821 ;
+C -1 ; WX 400 ; N ohungarumlaut ; B 87 -13 543 655 ;
+C -1 ; WX 400 ; N otilde ; B 87 -13 493 604 ;
+C -1 ; WX 440 ; N Euro ; B -28 -73 528 591 ;
+C -1 ; WX 400 ; N ocircumflex ; B 87 -13 449 656 ;
+C -1 ; WX 264 ; N onesuperior ; B 86 217 314 568 ;
+C -1 ; WX 264 ; N twosuperior ; B 80 206 354 562 ;
+C -1 ; WX 264 ; N threesuperior ; B 69 212 343 561 ;
+C -1 ; WX 380 ; N Igrave ; B 81 0 481 820 ;
+C -1 ; WX 380 ; N Iacute ; B 81 0 481 820 ;
+C -1 ; WX 380 ; N Imacron ; B 81 0 548 729 ;
+C -1 ; WX 380 ; N Iogonek ; B 81 -153 481 573 ;
+C -1 ; WX 380 ; N Idieresis ; B 81 0 481 773 ;
+C -1 ; WX 620 ; N Gbreve ; B 118 -236 670 784 ;
+C -1 ; WX 740 ; N Umacron ; B 116 -14 788 729 ;
+C -1 ; WX 660 ; N Kcommaaccent ; B 88 -270 851 577 ;
+C -1 ; WX 400 ; N ograve ; B 87 -13 449 655 ;
+C -1 ; WX 460 ; N Scommaaccent ; B 0 -290 517 586 ;
+C -1 ; WX 620 ; N Eogonek ; B 76 -153 668 586 ;
+C -1 ; WX 400 ; N oacute ; B 87 -13 449 655 ;
+C -1 ; WX 620 ; N Edotaccent ; B 76 -8 668 773 ;
+C -1 ; WX 240 ; N iogonek ; B 65 -153 311 616 ;
+C -1 ; WX 400 ; N gcommaaccent ; B -78 -247 481 668 ;
+C -1 ; WX 400 ; N odieresis ; B 87 -13 449 612 ;
+C -1 ; WX 460 ; N ntilde ; B 81 -16 523 604 ;
+C -1 ; WX 460 ; N ncaron ; B 81 -16 520 655 ;
+C -1 ; WX 620 ; N Ecaron ; B 76 -8 668 821 ;
+C -1 ; WX 620 ; N Ecircumflex ; B 76 -8 668 821 ;
+C -1 ; WX 320 ; N scedilla ; B -9 -213 377 411 ;
+C -1 ; WX 300 ; N rcaron ; B 81 -10 467 655 ;
+C -1 ; WX 620 ; N Egrave ; B 76 -8 668 820 ;
+C -1 ; WX 620 ; N Eacute ; B 76 -8 668 820 ;
+C -1 ; WX 620 ; N Gcommaaccent ; B 120 -270 672 590 ;
+C -1 ; WX 600 ; N Rcommaaccent ; B 38 -270 826 611 ;
+C -1 ; WX 620 ; N Edieresis ; B 76 -8 668 773 ;
+C -1 ; WX 460 ; N nacute ; B 81 -16 520 655 ;
+C -1 ; WX 460 ; N uogonek ; B 82 -153 518 415 ;
+C -1 ; WX 460 ; N umacron ; B 82 -13 525 568 ;
+C -1 ; WX 700 ; N Dcaron ; B 86 0 759 821 ;
+C -1 ; WX 293 ; N lcaron ; B 87 -13 493 678 ;
+C -1 ; WX 520 ; N Ccaron ; B 88 -73 680 821 ;
+C -1 ; WX 520 ; N Cacute ; B 88 -73 635 820 ;
+C -1 ; WX 520 ; N Ccedilla ; B 88 -266 635 591 ;
+C -1 ; WX 400 ; N degree ; B 190 330 430 576 ;
+C -1 ; WX 620 ; N Aogonek ; B 23 -153 687 594 ;
+C -1 ; WX 520 ; N minus ; B 55 192 559 246 ;
+C -1 ; WX 520 ; N multiply ; B 103 14 513 424 ;
+C -1 ; WX 520 ; N divide ; B 103 -4 513 443 ;
+C -1 ; WX 620 ; N Aring ; B 23 -13 687 802 ;
+C -1 ; WX 1000 ; N trademark ; B 165 210 1050 580 ;
+C -1 ; WX 300 ; N rcommaaccent ; B 38 -270 409 411 ;
+C -1 ; WX 240 ; N lacute ; B 87 -13 454 860 ;
+C -1 ; WX 400 ; N omacron ; B 87 -13 495 568 ;
+C -1 ; WX 620 ; N Atilde ; B 23 -13 753 765 ;
+C -1 ; WX 240 ; N icircumflex ; B 81 -13 347 656 ;
+C -1 ; WX 240 ; N igrave ; B 81 -13 311 655 ;
+C -1 ; WX 460 ; N ncommaaccent ; B 81 -270 520 411 ;
+C -1 ; WX 240 ; N lcommaaccent ; B 8 -270 434 678 ;
+C -1 ; WX 520 ; N plusminus ; B 103 0 513 508 ;
+C -1 ; WX 660 ; N onehalf ; B 96 -10 659 585 ;
+C -1 ; WX 660 ; N onequarter ; B 96 -15 653 585 ;
+C -1 ; WX 660 ; N threequarters ; B 79 -15 663 585 ;
+C -1 ; WX 240 ; N iacute ; B 81 -13 358 655 ;
+C -1 ; WX 620 ; N Abreve ; B 23 -13 740 784 ;
+C -1 ; WX 440 ; N kcommaaccent ; B 87 -270 655 675 ;
+C -1 ; WX 600 ; N Omacron ; B 104 -13 652 729 ;
+C -1 ; WX 240 ; N imacron ; B 81 -13 415 568 ;
+C -1 ; WX 340 ; N emacron ; B 87 -13 465 568 ;
+C -1 ; WX 420 ; N amacron ; B 87 -13 505 568 ;
+C -1 ; WX 320 ; N tcommaaccent ; B 48 -270 392 503 ;
+C -1 ; WX 400 ; N ydieresis ; B 11 -248 473 612 ;
+C -1 ; WX 440 ; N zdotaccent ; B 46 -13 475 612 ;
+C -1 ; WX 440 ; N zcaron ; B 46 -13 527 655 ;
+C -1 ; WX 440 ; N zacute ; B 46 -13 498 655 ;
+C -1 ; WX 400 ; N yacute ; B 11 -248 478 655 ;
+C -1 ; WX 460 ; N uhungarumlaut ; B 82 -13 533 655 ;
+C -1 ; WX 400 ; N eth ; B 87 -13 557 689 ;
+C -1 ; WX 460 ; N uring ; B 82 -13 518 640 ;
+C -1 ; WX 600 ; N Ocircumflex ; B 104 -13 652 821 ;
+C -1 ; WX 300 ; N commaaccent ; B 38 -270 165 -60 ;
+C -1 ; WX 740 ; N copyright ; B 136 -26 830 668 ;
+C -1 ; WX 740 ; N registered ; B 135 -26 828 668 ;
+C -1 ; WX 620 ; N Acircumflex ; B 23 -13 687 821 ;
+C -1 ; WX 240 ; N idieresis ; B 81 -13 359 612 ;
+C -1 ; WX 494 ; N lozenge ; B 18 0 466 740 ;
+C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
+C -1 ; WX 520 ; N notequal ; B 108 5 518 433 ;
+C -1 ; WX 549 ; N radical ; B 10 -35 515 913 ;
+C -1 ; WX 620 ; N Agrave ; B 23 -13 687 820 ;
+C -1 ; WX 620 ; N Aacute ; B 23 -13 687 820 ;
+C -1 ; WX 549 ; N lessequal ; B 29 0 526 639 ;
+C -1 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;
+C -1 ; WX 520 ; N logicalnot ; B 55 25 559 314 ;
+C -1 ; WX 713 ; N summation ; B 14 -123 695 752 ;
+C -1 ; WX 494 ; N partialdiff ; B 26 -10 462 753 ;
+C -1 ; WX 700 ; N Ncommaaccent ; B 40 -270 915 677 ;
+C -1 ; WX 440 ; N dcroat ; B 87 -13 629 677 ;
+C -1 ; WX 520 ; N brokenbar ; B 314 0 363 722 ;
+C -1 ; WX 580 ; N Lcommaaccent ; B 33 -270 631 577 ;
+C -1 ; WX 620 ; N Adieresis ; B 23 -13 699 773 ;
+C -1 ; WX 460 ; N mu ; B 15 -218 518 415 ;
+C -1 ; WX 220 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+StartKernData
+StartKernPairs 998
+KPX A C 13
+KPX A Ccedilla 12
+KPX A G -12
+KPX A O -10
+KPX A Odieresis -10
+KPX A Q -11
+KPX A T -14
+KPX A U -22
+KPX A Uacute -24
+KPX A Ucircumflex -24
+KPX A Udieresis -24
+KPX A Ugrave -24
+KPX A V -19
+KPX A W -19
+KPX A Y -1
+KPX A a 11
+KPX A b 7
+KPX A c 10
+KPX A ccedilla 10
+KPX A comma 2
+KPX A d 11
+KPX A e 9
+KPX A g 9
+KPX A guillemotleft -10
+KPX A guilsinglleft -9
+KPX A hyphen -10
+KPX A o 8
+KPX A period 6
+KPX A q 11
+KPX A quotedblright -47
+KPX A quoteright -58
+KPX A t -12
+KPX A u 1
+KPX A v -13
+KPX A w -18
+KPX A y 5
+KPX Aacute C 13
+KPX Aacute G -12
+KPX Aacute O -10
+KPX Aacute Q -11
+KPX Aacute T -14
+KPX Aacute U -22
+KPX Aacute V -27
+KPX Aacute W -26
+KPX Aacute Y -3
+KPX Aacute a 11
+KPX Aacute b 7
+KPX Aacute c 10
+KPX Aacute comma 2
+KPX Aacute d 11
+KPX Aacute e 9
+KPX Aacute g 9
+KPX Aacute guillemotleft -10
+KPX Aacute guilsinglleft -9
+KPX Aacute hyphen -10
+KPX Aacute o 8
+KPX Aacute period 6
+KPX Aacute q 11
+KPX Aacute quoteright -58
+KPX Aacute t -12
+KPX Aacute u 1
+KPX Aacute v -13
+KPX Aacute w -18
+KPX Aacute y 5
+KPX Acircumflex C 13
+KPX Acircumflex G -12
+KPX Acircumflex O -10
+KPX Acircumflex Q -11
+KPX Acircumflex T -14
+KPX Acircumflex U -22
+KPX Acircumflex V -25
+KPX Acircumflex W -24
+KPX Acircumflex Y -3
+KPX Acircumflex comma 2
+KPX Acircumflex period 6
+KPX Adieresis C 13
+KPX Adieresis G -12
+KPX Adieresis O -11
+KPX Adieresis Q -11
+KPX Adieresis T -14
+KPX Adieresis U -23
+KPX Adieresis V -26
+KPX Adieresis W -26
+KPX Adieresis Y -3
+KPX Adieresis a 11
+KPX Adieresis b 7
+KPX Adieresis c 10
+KPX Adieresis comma 2
+KPX Adieresis d 11
+KPX Adieresis g 9
+KPX Adieresis guillemotleft -10
+KPX Adieresis guilsinglleft -9
+KPX Adieresis hyphen -10
+KPX Adieresis o 8
+KPX Adieresis period 6
+KPX Adieresis q 11
+KPX Adieresis quotedblright -53
+KPX Adieresis quoteright -58
+KPX Adieresis t -12
+KPX Adieresis u 1
+KPX Adieresis v -13
+KPX Adieresis w -18
+KPX Adieresis y 5
+KPX Agrave C 13
+KPX Agrave G -12
+KPX Agrave O -10
+KPX Agrave Q -11
+KPX Agrave T -14
+KPX Agrave U -22
+KPX Agrave V -27
+KPX Agrave W -26
+KPX Agrave Y -3
+KPX Agrave comma 2
+KPX Agrave period 6
+KPX Aring C 13
+KPX Aring G -12
+KPX Aring O -10
+KPX Aring Q -11
+KPX Aring T -14
+KPX Aring U -22
+KPX Aring V -25
+KPX Aring W -25
+KPX Aring Y -3
+KPX Aring a 11
+KPX Aring b 7
+KPX Aring c 10
+KPX Aring comma 2
+KPX Aring d 11
+KPX Aring e 9
+KPX Aring g 9
+KPX Aring guillemotleft -10
+KPX Aring guilsinglleft -9
+KPX Aring hyphen -10
+KPX Aring o 8
+KPX Aring period 6
+KPX Aring q 11
+KPX Aring quotedblright -52
+KPX Aring quoteright -58
+KPX Aring t -12
+KPX Aring u 1
+KPX Aring v -13
+KPX Aring w -18
+KPX Aring y 5
+KPX Atilde C 13
+KPX Atilde G -12
+KPX Atilde O -10
+KPX Atilde Q -10
+KPX Atilde T -13
+KPX Atilde U -22
+KPX Atilde V -26
+KPX Atilde W -26
+KPX Atilde Y -2
+KPX Atilde comma 3
+KPX Atilde period 7
+KPX B A -26
+KPX B AE -31
+KPX B Aacute -26
+KPX B Acircumflex -26
+KPX B Adieresis -26
+KPX B Aring -26
+KPX B Atilde -26
+KPX B O 0
+KPX B OE -3
+KPX B Oacute -2
+KPX B Ocircumflex -2
+KPX B Odieresis -2
+KPX B Ograve -2
+KPX B Oslash -18
+KPX B V -8
+KPX B W -8
+KPX B Y 8
+KPX C A 12
+KPX C AE 10
+KPX C Aacute 12
+KPX C Adieresis 12
+KPX C Aring 12
+KPX C H 2
+KPX C K -6
+KPX C O -25
+KPX C Oacute -25
+KPX C Odieresis -25
+KPX Ccedilla A 9
+KPX D A -29
+KPX D Aacute -32
+KPX D Acircumflex -32
+KPX D Adieresis -32
+KPX D Agrave -32
+KPX D Aring -32
+KPX D Atilde -32
+KPX D J -31
+KPX D T 26
+KPX D V 3
+KPX D W 3
+KPX D X -23
+KPX D Y 19
+KPX F A -55
+KPX F Aacute -54
+KPX F Acircumflex -54
+KPX F Adieresis -54
+KPX F Agrave -54
+KPX F Aring -54
+KPX F Atilde -54
+KPX F J -55
+KPX F O -25
+KPX F Odieresis -25
+KPX F a -41
+KPX F aacute -41
+KPX F adieresis -39
+KPX F ae -40
+KPX F aring -41
+KPX F comma -82
+KPX F e -37
+KPX F eacute -37
+KPX F hyphen -24
+KPX F i -11
+KPX F j -9
+KPX F o -41
+KPX F oacute -41
+KPX F odieresis -19
+KPX F oe -40
+KPX F oslash -47
+KPX F period -70
+KPX F r -24
+KPX F u -21
+KPX G A -33
+KPX G AE -36
+KPX G Aacute -33
+KPX G Acircumflex -33
+KPX G Adieresis -33
+KPX G Agrave -33
+KPX G Aring -33
+KPX G Atilde -33
+KPX G T 2
+KPX G V -18
+KPX G W -19
+KPX G Y 3
+KPX J A -28
+KPX J AE -35
+KPX J Adieresis -28
+KPX J Aring -28
+KPX K C 48
+KPX K G 16
+KPX K O -6
+KPX K OE -10
+KPX K Oacute -6
+KPX K Odieresis -6
+KPX K S 102
+KPX K T 42
+KPX K a -38
+KPX K adieresis -18
+KPX K ae -38
+KPX K aring -32
+KPX K e -36
+KPX K hyphen -40
+KPX K o -41
+KPX K oacute -41
+KPX K odieresis 2
+KPX K u -38
+KPX K udieresis -13
+KPX K y -16
+KPX L A 6
+KPX L AE 4
+KPX L Aacute 6
+KPX L Adieresis 6
+KPX L Aring 6
+KPX L C 5
+KPX L Ccedilla 6
+KPX L G -7
+KPX L O 0
+KPX L Oacute 0
+KPX L Ocircumflex 0
+KPX L Odieresis 0
+KPX L Ograve 0
+KPX L Otilde 0
+KPX L S 18
+KPX L T -17
+KPX L U -28
+KPX L Udieresis -28
+KPX L V -24
+KPX L W -25
+KPX L Y -4
+KPX L hyphen 30
+KPX L quotedblright -93
+KPX L quoteright -94
+KPX L u -7
+KPX L udieresis -7
+KPX L y -4
+KPX N A -24
+KPX N AE -30
+KPX N Aacute -24
+KPX N Adieresis -24
+KPX N Aring -24
+KPX N C 55
+KPX N Ccedilla 53
+KPX N G 23
+KPX N O -11
+KPX N Oacute -13
+KPX N Odieresis -12
+KPX N a -26
+KPX N aacute -26
+KPX N adieresis -26
+KPX N ae -26
+KPX N aring -26
+KPX N comma 111
+KPX N e -24
+KPX N eacute -24
+KPX N o -29
+KPX N oacute -29
+KPX N odieresis -29
+KPX N oslash 80
+KPX N period -20
+KPX N u -27
+KPX N udieresis -27
+KPX O A -28
+KPX O AE -41
+KPX O Aacute -28
+KPX O Adieresis -28
+KPX O Aring -28
+KPX O T 23
+KPX O V 2
+KPX O W 2
+KPX O X -21
+KPX O Y 16
+KPX Oacute A -28
+KPX Oacute T 23
+KPX Oacute V 0
+KPX Oacute W 0
+KPX Oacute Y 16
+KPX Ocircumflex T 23
+KPX Ocircumflex V 0
+KPX Ocircumflex Y 16
+KPX Odieresis A -28
+KPX Odieresis T 23
+KPX Odieresis V 0
+KPX Odieresis W 0
+KPX Odieresis X -21
+KPX Odieresis Y 16
+KPX Ograve T 23
+KPX Ograve V 0
+KPX Ograve Y 16
+KPX Oslash A -42
+KPX Otilde T 23
+KPX Otilde V 0
+KPX Otilde Y 17
+KPX P A -28
+KPX P AE -32
+KPX P Aacute -28
+KPX P Adieresis -28
+KPX P Aring -28
+KPX P J -13
+KPX P a -36
+KPX P aacute -36
+KPX P adieresis -36
+KPX P ae -37
+KPX P aring -36
+KPX P comma -63
+KPX P e -32
+KPX P eacute -32
+KPX P hyphen -36
+KPX P o -40
+KPX P oacute -40
+KPX P odieresis -40
+KPX P oe -39
+KPX P oslash -45
+KPX P period -59
+KPX R C 51
+KPX R Ccedilla 52
+KPX R G 22
+KPX R O -27
+KPX R OE -31
+KPX R Oacute -29
+KPX R Odieresis -29
+KPX R T 2
+KPX R U -30
+KPX R Udieresis -30
+KPX R V -20
+KPX R W -18
+KPX R Y 115
+KPX R a -44
+KPX R aacute -44
+KPX R adieresis -44
+KPX R ae -44
+KPX R aring -44
+KPX R e -42
+KPX R eacute -42
+KPX R hyphen -44
+KPX R o -47
+KPX R oacute -47
+KPX R odieresis -47
+KPX R oe -46
+KPX R u -44
+KPX R uacute -44
+KPX R udieresis -44
+KPX R y -3
+KPX S A -22
+KPX S AE -27
+KPX S Aacute -22
+KPX S Adieresis -22
+KPX S Aring -22
+KPX S T 0
+KPX S V -19
+KPX S W -19
+KPX S Y -13
+KPX S t -41
+KPX T A 7
+KPX T AE 4
+KPX T Aacute 7
+KPX T Acircumflex 7
+KPX T Adieresis 7
+KPX T Agrave 7
+KPX T Aring 7
+KPX T Atilde 7
+KPX T C -20
+KPX T G -38
+KPX T J -7
+KPX T O -16
+KPX T OE -23
+KPX T Oacute -16
+KPX T Ocircumflex -16
+KPX T Odieresis -16
+KPX T Ograve -16
+KPX T Oslash -31
+KPX T Otilde -16
+KPX T S 17
+KPX T V 24
+KPX T W 24
+KPX T Y 25
+KPX T a -22
+KPX T ae -22
+KPX T c -23
+KPX T colon -26
+KPX T comma -33
+KPX T e -23
+KPX T g -23
+KPX T guillemotleft -43
+KPX T guilsinglleft -42
+KPX T hyphen -36
+KPX T i 21
+KPX T j 22
+KPX T o -23
+KPX T oslash -27
+KPX T period -27
+KPX T r -29
+KPX T s 1
+KPX T semicolon -34
+KPX T u -33
+KPX T v -47
+KPX T w -52
+KPX T y -28
+KPX U A 26
+KPX U AE 23
+KPX U Aacute 26
+KPX U Acircumflex 26
+KPX U Adieresis 26
+KPX U Aring 26
+KPX U Atilde 26
+KPX U comma -13
+KPX U m -13
+KPX U n -12
+KPX U p -23
+KPX U period -10
+KPX U r -12
+KPX Uacute A 26
+KPX Uacute comma -13
+KPX Uacute m -13
+KPX Uacute n -12
+KPX Uacute p -23
+KPX Uacute period -10
+KPX Uacute r -12
+KPX Ucircumflex A 26
+KPX Udieresis A 26
+KPX Udieresis b -11
+KPX Udieresis comma -13
+KPX Udieresis m -13
+KPX Udieresis n -12
+KPX Udieresis p -23
+KPX Udieresis period -10
+KPX Udieresis r -12
+KPX Ugrave A 26
+KPX V A -31
+KPX V AE -68
+KPX V Aacute -31
+KPX V Acircumflex -31
+KPX V Adieresis -31
+KPX V Agrave -31
+KPX V Aring -31
+KPX V Atilde -31
+KPX V C -28
+KPX V G -33
+KPX V O -14
+KPX V Oacute -14
+KPX V Ocircumflex -14
+KPX V Odieresis -14
+KPX V Ograve -14
+KPX V Oslash -30
+KPX V Otilde -14
+KPX V S -32
+KPX V T 38
+KPX V a -57
+KPX V ae -58
+KPX V colon -43
+KPX V comma -93
+KPX V e -53
+KPX V g -59
+KPX V guillemotleft -55
+KPX V guilsinglleft -55
+KPX V hyphen -45
+KPX V i 1
+KPX V o -63
+KPX V oslash -68
+KPX V period -90
+KPX V r -12
+KPX V semicolon -38
+KPX V u -17
+KPX V y -12
+KPX W A -26
+KPX W AE -46
+KPX W Aacute -26
+KPX W Acircumflex -26
+KPX W Adieresis -26
+KPX W Agrave -26
+KPX W Aring -26
+KPX W Atilde -26
+KPX W C -9
+KPX W G -15
+KPX W O 0
+KPX W Oacute -4
+KPX W Ocircumflex -2
+KPX W Odieresis -3
+KPX W Ograve -4
+KPX W Oslash -20
+KPX W Otilde -3
+KPX W S -12
+KPX W T 44
+KPX W a -33
+KPX W ae -33
+KPX W colon -29
+KPX W comma -57
+KPX W e -31
+KPX W g -35
+KPX W guillemotleft -27
+KPX W guilsinglleft -27
+KPX W hyphen -16
+KPX W i 1
+KPX W o -36
+KPX W oslash -41
+KPX W period -53
+KPX W r 3
+KPX W semicolon -24
+KPX W u 0
+KPX W y 4
+KPX X C 2
+KPX X O -21
+KPX X Odieresis -21
+KPX X Q -21
+KPX X a 1
+KPX X e -1
+KPX X hyphen -51
+KPX X o -2
+KPX X u -9
+KPX X y -5
+KPX Y A -24
+KPX Y AE -60
+KPX Y Aacute -24
+KPX Y Acircumflex -24
+KPX Y Adieresis -24
+KPX Y Agrave -24
+KPX Y Aring -24
+KPX Y Atilde -24
+KPX Y C -28
+KPX Y G -35
+KPX Y O -13
+KPX Y Oacute -12
+KPX Y Ocircumflex -12
+KPX Y Odieresis -12
+KPX Y Ograve -12
+KPX Y Oslash -29
+KPX Y Otilde -12
+KPX Y S -25
+KPX Y T 44
+KPX Y a -53
+KPX Y ae -53
+KPX Y colon -58
+KPX Y comma -68
+KPX Y e -51
+KPX Y g -55
+KPX Y guillemotleft -48
+KPX Y guilsinglleft -47
+KPX Y hyphen -37
+KPX Y i 17
+KPX Y o -56
+KPX Y oslash -61
+KPX Y p -43
+KPX Y period -62
+KPX Y semicolon -55
+KPX Y u -39
+KPX Y v -42
+KPX Z v 4
+KPX Z y 5
+KPX a j -2
+KPX a quoteright -55
+KPX a v -13
+KPX a w -14
+KPX a y 0
+KPX aacute v -13
+KPX aacute w -14
+KPX aacute y 0
+KPX adieresis v -13
+KPX adieresis w -14
+KPX adieresis y 0
+KPX ae v -15
+KPX ae w -17
+KPX ae y -1
+KPX agrave v -13
+KPX agrave w -14
+KPX agrave y 0
+KPX aring v -13
+KPX aring w -14
+KPX aring y 0
+KPX b v -11
+KPX b w -12
+KPX b y -1
+KPX c h -10
+KPX c k -15
+KPX comma one -40
+KPX comma quotedblright -53
+KPX comma quoteright -58
+KPX e quoteright -54
+KPX e t -16
+KPX e v -21
+KPX e w -22
+KPX e x -15
+KPX e y -7
+KPX eacute v -21
+KPX eacute w -23
+KPX eacute y -7
+KPX ecircumflex v -21
+KPX ecircumflex w -23
+KPX ecircumflex y -7
+KPX eight four -12
+KPX eight one -41
+KPX eight seven -38
+KPX f a -20
+KPX f aacute -20
+KPX f adieresis -20
+KPX f ae -21
+KPX f aring -20
+KPX f e -16
+KPX f eacute -16
+KPX f f 16
+KPX f i 21
+KPX f j 21
+KPX f l -9
+KPX f o -26
+KPX f oacute -26
+KPX f odieresis -26
+KPX f oe -24
+KPX f oslash -32
+KPX f quoteright -47
+KPX f s -20
+KPX f t 7
+KPX five four -18
+KPX five one -56
+KPX five seven -30
+KPX four four -11
+KPX four one -57
+KPX four seven -50
+KPX g a -18
+KPX g adieresis -18
+KPX g ae -18
+KPX g aring -18
+KPX g e -16
+KPX g eacute -16
+KPX g l -13
+KPX g oacute -21
+KPX g odieresis -21
+KPX g r -9
+KPX guillemotright A -33
+KPX guillemotright AE -33
+KPX guillemotright Aacute -33
+KPX guillemotright Adieresis -33
+KPX guillemotright Aring -33
+KPX guillemotright T -6
+KPX guillemotright V -19
+KPX guillemotright W -20
+KPX guillemotright Y 4
+KPX guilsinglright A -34
+KPX guilsinglright AE -34
+KPX guilsinglright Aacute -34
+KPX guilsinglright Adieresis -34
+KPX guilsinglright Aring -34
+KPX guilsinglright T -6
+KPX guilsinglright V -20
+KPX guilsinglright W -21
+KPX guilsinglright Y 3
+KPX h quoteright -65
+KPX h y -3
+KPX hyphen A -44
+KPX hyphen AE -10
+KPX hyphen Aacute -44
+KPX hyphen Adieresis -44
+KPX hyphen Aring -44
+KPX hyphen T -1
+KPX hyphen V -5
+KPX hyphen W -7
+KPX hyphen Y 25
+KPX i T -1
+KPX i j -2
+KPX k a -50
+KPX k aacute -50
+KPX k adieresis -50
+KPX k ae -50
+KPX k aring -50
+KPX k comma 111
+KPX k e -49
+KPX k eacute -49
+KPX k g 148
+KPX k hyphen -78
+KPX k o -56
+KPX k oacute -56
+KPX k odieresis -56
+KPX k period -48
+KPX k s -29
+KPX k u -13
+KPX k udieresis -13
+KPX l v -18
+KPX l y -2
+KPX m p -12
+KPX m v -13
+KPX m w -14
+KPX m y 1
+KPX n T -5
+KPX n p -20
+KPX n quoteright -68
+KPX n v -22
+KPX n w -24
+KPX n y -6
+KPX nine four -24
+KPX nine one -46
+KPX nine seven -41
+KPX o T 17
+KPX o quoteright -41
+KPX o t -4
+KPX o v -4
+KPX o w -5
+KPX o x -11
+KPX o y 4
+KPX oacute v -4
+KPX oacute w -5
+KPX oacute y 4
+KPX ocircumflex t -4
+KPX odieresis t -4
+KPX odieresis v -4
+KPX odieresis w -5
+KPX odieresis x -11
+KPX odieresis y 4
+KPX ograve v -4
+KPX ograve w -5
+KPX ograve y 4
+KPX one comma -31
+KPX one eight -20
+KPX one five -12
+KPX one four -46
+KPX one nine 1
+KPX one one -25
+KPX one period -29
+KPX one seven -59
+KPX one six -37
+KPX one three 5
+KPX one two -1
+KPX one zero -30
+KPX p t -8
+KPX p y 1
+KPX period one -25
+KPX period quotedblright -43
+KPX period quoteright -48
+KPX q c -15
+KPX q u -9
+KPX quotedblbase A 15
+KPX quotedblbase AE 34
+KPX quotedblbase T -57
+KPX quotedblbase V -32
+KPX quotedblbase W -35
+KPX quotedblbase Y -11
+KPX quotedblleft A -10
+KPX quotedblleft AE -72
+KPX quotedblleft Aacute -20
+KPX quotedblleft Adieresis -20
+KPX quotedblleft Aring -20
+KPX quotedblleft T 22
+KPX quotedblleft V 30
+KPX quotedblleft W 31
+KPX quotedblleft Y 41
+KPX quotedblright A -20
+KPX quotedblright AE -81
+KPX quotedblright Aacute -32
+KPX quotedblright Adieresis -32
+KPX quotedblright Aring -32
+KPX quotedblright T 12
+KPX quotedblright V 18
+KPX quotedblright W 19
+KPX quotedblright Y 30
+KPX quoteleft A -18
+KPX quoteleft AE -80
+KPX quoteleft Aacute -28
+KPX quoteleft Adieresis -28
+KPX quoteleft Aring -28
+KPX quoteleft T 14
+KPX quoteleft V 22
+KPX quoteleft W 23
+KPX quoteleft Y 33
+KPX quoteright A 0
+KPX quoteright AE -60
+KPX quoteright Aacute 0
+KPX quoteright Adieresis 0
+KPX quoteright Aring 0
+KPX quoteright comma -38
+KPX quoteright d -27
+KPX quoteright o -29
+KPX quoteright period -38
+KPX quoteright r 1
+KPX quoteright s -21
+KPX quoteright t -9
+KPX quoteright v -1
+KPX quoteright w 0
+KPX quoteright y 4
+KPX r a -17
+KPX r aacute -17
+KPX r acircumflex -17
+KPX r adieresis -17
+KPX r ae -18
+KPX r agrave -17
+KPX r aring -17
+KPX r c -14
+KPX r ccedilla -16
+KPX r colon -14
+KPX r comma -73
+KPX r d -21
+KPX r e -13
+KPX r eacute -13
+KPX r ecircumflex -13
+KPX r egrave -13
+KPX r f 22
+KPX r g -19
+KPX r h -10
+KPX r hyphen -55
+KPX r i 20
+KPX r j 19
+KPX r k -15
+KPX r l -7
+KPX r m 18
+KPX r n 19
+KPX r o -21
+KPX r oacute -21
+KPX r ocircumflex -21
+KPX r odieresis -21
+KPX r oe -20
+KPX r ograve -21
+KPX r oslash -27
+KPX r p 15
+KPX r period -69
+KPX r q -19
+KPX r quoteright -31
+KPX r r 21
+KPX r s -19
+KPX r semicolon -9
+KPX r t 13
+KPX r u 18
+KPX r v 5
+KPX r w 3
+KPX r x 9
+KPX r y 22
+KPX r z -23
+KPX s quoteright -61
+KPX s t -22
+KPX seven colon -73
+KPX seven comma -78
+KPX seven eight -44
+KPX seven five -54
+KPX seven four -62
+KPX seven one -44
+KPX seven period -75
+KPX seven seven -27
+KPX seven six -40
+KPX seven three -53
+KPX seven two -36
+KPX six four -2
+KPX six one -47
+KPX six seven -36
+KPX t S 22
+KPX t a -5
+KPX t aacute -5
+KPX t adieresis -5
+KPX t ae -4
+KPX t aring -5
+KPX t colon -22
+KPX t e -3
+KPX t eacute -3
+KPX t h -10
+KPX t o -3
+KPX t oacute -3
+KPX t odieresis -3
+KPX t quoteright -56
+KPX t semicolon -20
+KPX three four -19
+KPX three one -54
+KPX three seven -47
+KPX two four 6
+KPX two one -42
+KPX two seven -34
+KPX u quoteright -69
+KPX v a -21
+KPX v aacute -21
+KPX v acircumflex -21
+KPX v adieresis -21
+KPX v ae -21
+KPX v agrave -21
+KPX v aring -21
+KPX v atilde -21
+KPX v c -20
+KPX v colon -27
+KPX v comma -49
+KPX v e -18
+KPX v eacute -18
+KPX v ecircumflex -18
+KPX v egrave -18
+KPX v g -24
+KPX v hyphen -8
+KPX v l -15
+KPX v o -23
+KPX v oacute -23
+KPX v odieresis -23
+KPX v ograve -23
+KPX v oslash -29
+KPX v period -50
+KPX v s -22
+KPX v semicolon -22
+KPX w a -20
+KPX w aacute -20
+KPX w acircumflex -20
+KPX w adieresis -20
+KPX w ae -20
+KPX w agrave -20
+KPX w aring -20
+KPX w atilde -20
+KPX w c -19
+KPX w colon -24
+KPX w comma -50
+KPX w e -18
+KPX w eacute -18
+KPX w ecircumflex -18
+KPX w egrave -18
+KPX w g -23
+KPX w hyphen -8
+KPX w l -14
+KPX w o -23
+KPX w oacute -23
+KPX w odieresis -23
+KPX w ograve -23
+KPX w oslash -28
+KPX w period -51
+KPX w s -22
+KPX w semicolon -19
+KPX x a -25
+KPX x c -24
+KPX x e -21
+KPX x eacute -21
+KPX x o -31
+KPX x q -27
+KPX y a -8
+KPX y aacute -8
+KPX y acircumflex -8
+KPX y adieresis -8
+KPX y ae -8
+KPX y agrave -8
+KPX y aring -8
+KPX y atilde -8
+KPX y c -7
+KPX y colon -26
+KPX y comma -18
+KPX y e -6
+KPX y eacute -6
+KPX y ecircumflex -6
+KPX y egrave -6
+KPX y g 7
+KPX y hyphen -4
+KPX y l -3
+KPX y o -10
+KPX y oacute -10
+KPX y odieresis -10
+KPX y ograve -10
+KPX y oslash -15
+KPX y period -14
+KPX y s -8
+KPX y semicolon -18
+KPX zero four -12
+KPX zero one -36
+KPX zero seven -31
+EndKernPairs
+EndKernData
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uzcmi8a.pfb b/Master/tlpkg/tlgs/lib/fonts/uzcmi8a.pfb
new file mode 100644
index 00000000000..28443517d30
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uzcmi8a.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/fonts/uzdr.afm b/Master/tlpkg/tlgs/lib/fonts/uzdr.afm
new file mode 100644
index 00000000000..98735a0aa7b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uzdr.afm
@@ -0,0 +1,226 @@
+StartFontMetrics 3.0
+Comment Copyright URW Software, Copyright 1997 by URW
+Comment Creation Date: 10/19/1999
+Comment See the file COPYING (GNU General Public License) for license conditions.
+FontName Dingbats
+FullName Dingbats
+FamilyName Dingbats
+Weight Regular
+ItalicAngle 0.0
+IsFixedPitch false
+UnderlinePosition -72
+UnderlineThickness 36
+Version 001.005
+Notice URW Software, Copyright 1997 by URW
+EncodingScheme FontSpecific
+FontBBox -1 -143 981 819
+CapHeight 691
+XHeight 567
+Descender -143
+Ascender 691
+StartCharMetrics 203
+C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
+C 33 ; WX 974 ; N a1 ; B 35 71 939 617 ;
+C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;
+C 35 ; WX 974 ; N a202 ; B 35 69 939 615 ;
+C 36 ; WX 980 ; N a3 ; B 35 0 945 691 ;
+C 37 ; WX 719 ; N a4 ; B 34 138 685 566 ;
+C 38 ; WX 789 ; N a5 ; B 35 -13 755 707 ;
+C 39 ; WX 790 ; N a119 ; B 35 -14 755 706 ;
+C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;
+C 41 ; WX 690 ; N a117 ; B 35 137 655 556 ;
+C 42 ; WX 960 ; N a11 ; B 35 122 925 568 ;
+C 43 ; WX 939 ; N a12 ; B 35 133 904 559 ;
+C 44 ; WX 549 ; N a13 ; B 29 -10 516 706 ;
+C 45 ; WX 855 ; N a14 ; B 33 59 820 632 ;
+C 46 ; WX 911 ; N a15 ; B 35 51 876 641 ;
+C 47 ; WX 933 ; N a16 ; B 35 141 899 550 ;
+C 48 ; WX 911 ; N a105 ; B 35 49 876 636 ;
+C 49 ; WX 945 ; N a17 ; B 35 139 909 550 ;
+C 50 ; WX 974 ; N a18 ; B 35 103 938 588 ;
+C 51 ; WX 755 ; N a19 ; B 34 -14 721 706 ;
+C 52 ; WX 846 ; N a20 ; B 36 -14 811 706 ;
+C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;
+C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;
+C 55 ; WX 571 ; N a23 ; B -1 -69 572 660 ;
+C 56 ; WX 677 ; N a24 ; B 36 -14 642 705 ;
+C 57 ; WX 763 ; N a25 ; B 35 0 728 694 ;
+C 58 ; WX 760 ; N a26 ; B 35 0 726 691 ;
+C 59 ; WX 759 ; N a27 ; B 35 0 725 690 ;
+C 60 ; WX 754 ; N a28 ; B 35 0 720 685 ;
+C 61 ; WX 494 ; N a6 ; B 35 0 460 691 ;
+C 62 ; WX 552 ; N a7 ; B 35 0 517 691 ;
+C 63 ; WX 537 ; N a8 ; B 35 0 503 691 ;
+C 64 ; WX 577 ; N a9 ; B 35 96 542 595 ;
+C 65 ; WX 692 ; N a10 ; B 35 -14 657 702 ;
+C 66 ; WX 786 ; N a29 ; B 35 -13 751 705 ;
+C 67 ; WX 788 ; N a30 ; B 35 -14 752 703 ;
+C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;
+C 69 ; WX 790 ; N a32 ; B 35 -14 756 707 ;
+C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;
+C 71 ; WX 794 ; N a34 ; B 35 -14 759 705 ;
+C 72 ; WX 816 ; N a35 ; B 35 -13 782 707 ;
+C 73 ; WX 823 ; N a36 ; B 35 2 787 719 ;
+C 74 ; WX 789 ; N a37 ; B 35 -13 754 706 ;
+C 75 ; WX 841 ; N a38 ; B 35 -14 807 706 ;
+C 76 ; WX 823 ; N a39 ; B 35 -12 789 706 ;
+C 77 ; WX 833 ; N a40 ; B 35 -14 798 706 ;
+C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;
+C 79 ; WX 831 ; N a42 ; B 35 -13 796 707 ;
+C 80 ; WX 923 ; N a43 ; B 35 -13 888 706 ;
+C 81 ; WX 744 ; N a44 ; B 35 0 710 691 ;
+C 82 ; WX 723 ; N a45 ; B 35 0 688 691 ;
+C 83 ; WX 749 ; N a46 ; B 35 0 714 691 ;
+C 84 ; WX 790 ; N a47 ; B 34 -15 756 706 ;
+C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;
+C 86 ; WX 695 ; N a49 ; B 35 -16 661 706 ;
+C 87 ; WX 776 ; N a50 ; B 35 -7 741 698 ;
+C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;
+C 89 ; WX 792 ; N a52 ; B 35 -1 757 720 ;
+C 90 ; WX 759 ; N a53 ; B 35 0 725 693 ;
+C 91 ; WX 707 ; N a54 ; B 35 -11 672 704 ;
+C 92 ; WX 708 ; N a55 ; B 35 -14 672 704 ;
+C 93 ; WX 682 ; N a56 ; B 35 -3 647 694 ;
+C 94 ; WX 701 ; N a57 ; B 35 -13 666 708 ;
+C 95 ; WX 826 ; N a58 ; B 35 -18 791 716 ;
+C 96 ; WX 815 ; N a59 ; B 35 -16 780 705 ;
+C 97 ; WX 789 ; N a60 ; B 35 -14 754 704 ;
+C 98 ; WX 789 ; N a61 ; B 35 -14 754 704 ;
+C 99 ; WX 707 ; N a62 ; B 33 0 674 717 ;
+C 100 ; WX 687 ; N a63 ; B 36 0 651 688 ;
+C 101 ; WX 696 ; N a64 ; B 35 0 661 693 ;
+C 102 ; WX 689 ; N a65 ; B 35 0 655 681 ;
+C 103 ; WX 786 ; N a66 ; B 34 -14 751 703 ;
+C 104 ; WX 787 ; N a67 ; B 35 -15 752 704 ;
+C 105 ; WX 713 ; N a68 ; B 35 -13 678 709 ;
+C 106 ; WX 791 ; N a69 ; B 35 -14 756 707 ;
+C 107 ; WX 785 ; N a70 ; B 36 -14 751 701 ;
+C 108 ; WX 791 ; N a71 ; B 35 -14 757 708 ;
+C 109 ; WX 873 ; N a72 ; B 35 -13 838 705 ;
+C 110 ; WX 761 ; N a73 ; B 35 0 726 691 ;
+C 111 ; WX 762 ; N a74 ; B 35 0 727 691 ;
+C 112 ; WX 762 ; N a203 ; B 35 0 727 691 ;
+C 113 ; WX 759 ; N a75 ; B 35 0 725 691 ;
+C 114 ; WX 759 ; N a204 ; B 35 0 725 691 ;
+C 115 ; WX 892 ; N a76 ; B 35 0 858 706 ;
+C 116 ; WX 892 ; N a77 ; B 35 -14 858 691 ;
+C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;
+C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;
+C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;
+C 120 ; WX 138 ; N a82 ; B 35 0 104 691 ;
+C 121 ; WX 277 ; N a83 ; B 35 0 242 691 ;
+C 122 ; WX 415 ; N a84 ; B 35 0 380 691 ;
+C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;
+C 124 ; WX 392 ; N a98 ; B 34 262 357 705 ;
+C 125 ; WX 668 ; N a99 ; B 35 263 633 707 ;
+C 126 ; WX 668 ; N a100 ; B 36 261 634 705 ;
+C 161 ; WX 732 ; N a101 ; B 35 -143 697 805 ;
+C 162 ; WX 544 ; N a102 ; B 56 -14 488 705 ;
+C 163 ; WX 544 ; N a103 ; B 34 -14 508 704 ;
+C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;
+C 165 ; WX 667 ; N a106 ; B 35 -13 633 706 ;
+C 166 ; WX 760 ; N a107 ; B 35 -13 726 705 ;
+C 167 ; WX 760 ; N a108 ; B 0 121 758 570 ;
+C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;
+C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;
+C 170 ; WX 694 ; N a110 ; B 35 -14 659 704 ;
+C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;
+C 172 ; WX 788 ; N a120 ; B 35 -13 754 706 ;
+C 173 ; WX 788 ; N a121 ; B 35 -13 754 706 ;
+C 174 ; WX 788 ; N a122 ; B 35 -13 754 706 ;
+C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;
+C 176 ; WX 788 ; N a124 ; B 35 -13 754 706 ;
+C 177 ; WX 788 ; N a125 ; B 35 -13 754 706 ;
+C 178 ; WX 788 ; N a126 ; B 35 -13 754 706 ;
+C 179 ; WX 788 ; N a127 ; B 35 -13 754 706 ;
+C 180 ; WX 788 ; N a128 ; B 35 -13 754 706 ;
+C 181 ; WX 788 ; N a129 ; B 35 -13 754 706 ;
+C 182 ; WX 788 ; N a130 ; B 35 -13 754 706 ;
+C 183 ; WX 788 ; N a131 ; B 35 -13 754 706 ;
+C 184 ; WX 788 ; N a132 ; B 35 -13 754 706 ;
+C 185 ; WX 788 ; N a133 ; B 35 -13 754 706 ;
+C 186 ; WX 788 ; N a134 ; B 35 -13 754 706 ;
+C 187 ; WX 788 ; N a135 ; B 35 -13 754 706 ;
+C 188 ; WX 788 ; N a136 ; B 35 -13 754 706 ;
+C 189 ; WX 788 ; N a137 ; B 35 -13 754 706 ;
+C 190 ; WX 788 ; N a138 ; B 35 -13 754 706 ;
+C 191 ; WX 788 ; N a139 ; B 35 -13 754 706 ;
+C 192 ; WX 788 ; N a140 ; B 35 -13 754 706 ;
+C 193 ; WX 788 ; N a141 ; B 35 -13 754 706 ;
+C 194 ; WX 788 ; N a142 ; B 35 -13 754 706 ;
+C 195 ; WX 788 ; N a143 ; B 35 -13 754 706 ;
+C 196 ; WX 788 ; N a144 ; B 35 -13 754 706 ;
+C 197 ; WX 788 ; N a145 ; B 35 -13 754 706 ;
+C 198 ; WX 788 ; N a146 ; B 35 -13 754 706 ;
+C 199 ; WX 788 ; N a147 ; B 35 -13 754 706 ;
+C 200 ; WX 788 ; N a148 ; B 35 -13 754 706 ;
+C 201 ; WX 788 ; N a149 ; B 35 -13 754 706 ;
+C 202 ; WX 788 ; N a150 ; B 35 -13 755 706 ;
+C 203 ; WX 788 ; N a151 ; B 34 -13 754 706 ;
+C 204 ; WX 788 ; N a152 ; B 34 -13 754 706 ;
+C 205 ; WX 788 ; N a153 ; B 35 -13 754 706 ;
+C 206 ; WX 788 ; N a154 ; B 35 -13 754 706 ;
+C 207 ; WX 788 ; N a155 ; B 35 -13 754 706 ;
+C 208 ; WX 788 ; N a156 ; B 35 -13 754 706 ;
+C 209 ; WX 788 ; N a157 ; B 35 -13 754 706 ;
+C 210 ; WX 788 ; N a158 ; B 35 -13 754 706 ;
+C 211 ; WX 788 ; N a159 ; B 35 -13 754 706 ;
+C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;
+C 213 ; WX 838 ; N a161 ; B 35 151 803 537 ;
+C 214 ; WX 1016 ; N a163 ; B 34 151 981 537 ;
+C 215 ; WX 458 ; N a164 ; B 35 -128 422 819 ;
+C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;
+C 217 ; WX 924 ; N a165 ; B 35 140 890 551 ;
+C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;
+C 219 ; WX 918 ; N a166 ; B 35 167 884 526 ;
+C 220 ; WX 927 ; N a167 ; B 35 28 892 664 ;
+C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;
+C 222 ; WX 928 ; N a169 ; B 35 129 893 561 ;
+C 223 ; WX 834 ; N a170 ; B 35 154 799 537 ;
+C 224 ; WX 873 ; N a171 ; B 35 97 838 594 ;
+C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;
+C 226 ; WX 924 ; N a173 ; B 35 82 889 610 ;
+C 227 ; WX 924 ; N a162 ; B 35 82 889 610 ;
+C 228 ; WX 917 ; N a174 ; B 35 4 882 688 ;
+C 229 ; WX 930 ; N a175 ; B 35 83 896 608 ;
+C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;
+C 231 ; WX 463 ; N a177 ; B 35 -100 429 790 ;
+C 232 ; WX 883 ; N a178 ; B 35 70 848 621 ;
+C 233 ; WX 836 ; N a179 ; B 35 43 802 648 ;
+C 234 ; WX 836 ; N a193 ; B 35 43 802 648 ;
+C 235 ; WX 867 ; N a180 ; B 35 101 832 589 ;
+C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;
+C 237 ; WX 696 ; N a181 ; B 35 44 661 651 ;
+C 238 ; WX 696 ; N a200 ; B 35 44 661 646 ;
+C 239 ; WX 874 ; N a182 ; B 35 75 840 613 ;
+C 241 ; WX 874 ; N a201 ; B 35 75 840 613 ;
+C 242 ; WX 760 ; N a183 ; B 35 1 725 690 ;
+C 243 ; WX 946 ; N a184 ; B 35 159 911 532 ;
+C 244 ; WX 771 ; N a197 ; B 34 36 736 655 ;
+C 245 ; WX 865 ; N a185 ; B 35 209 830 483 ;
+C 246 ; WX 771 ; N a194 ; B 34 36 736 655 ;
+C 247 ; WX 888 ; N a198 ; B 34 -18 853 711 ;
+C 248 ; WX 967 ; N a186 ; B 35 123 932 568 ;
+C 249 ; WX 888 ; N a195 ; B 34 -20 853 710 ;
+C 250 ; WX 831 ; N a187 ; B 35 113 796 578 ;
+C 251 ; WX 873 ; N a188 ; B 36 116 838 576 ;
+C 252 ; WX 927 ; N a189 ; B 35 149 891 542 ;
+C 253 ; WX 970 ; N a190 ; B 35 75 931 615 ;
+C 254 ; WX 918 ; N a191 ; B 34 99 884 592 ;
+C -1 ; WX 334 ; N a95 ; B 35 0 299 691 ;
+C -1 ; WX 234 ; N a88 ; B 35 -14 199 705 ;
+C -1 ; WX 234 ; N a87 ; B 35 -14 199 705 ;
+C -1 ; WX 410 ; N a86 ; B 35 0 375 691 ;
+C -1 ; WX 410 ; N a206 ; B 35 0 375 691 ;
+C -1 ; WX 509 ; N a85 ; B 35 0 475 691 ;
+C -1 ; WX 334 ; N a96 ; B 35 0 299 691 ;
+C -1 ; WX 276 ; N a91 ; B 35 0 242 691 ;
+C -1 ; WX 317 ; N a94 ; B 35 0 283 691 ;
+C -1 ; WX 317 ; N a93 ; B 35 0 283 691 ;
+C -1 ; WX 390 ; N a90 ; B 35 -14 355 705 ;
+C -1 ; WX 390 ; N a89 ; B 35 -14 356 705 ;
+C -1 ; WX 276 ; N a92 ; B 35 0 242 691 ;
+C -1 ; WX 509 ; N a205 ; B 35 0 475 691 ;
+C -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/Master/tlpkg/tlgs/lib/fonts/uzdr.pfb b/Master/tlpkg/tlgs/lib/fonts/uzdr.pfb
new file mode 100644
index 00000000000..4a3c386d292
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/fonts/uzdr.pfb
Binary files differ
diff --git a/Master/tlpkg/tlgs/lib/gs_agl.ps b/Master/tlpkg/tlgs/lib/gs_agl.ps
new file mode 100644
index 00000000000..380a2432958
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_agl.ps
@@ -0,0 +1,1069 @@
+% Copyright (C) 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_agl.ps 6300 2005-12-28 19:56:24Z giles $
+
+% This file was derived from the Adobe Glyph List, version 1.2, dated
+% 22 Oct 1998, at
+% http://partners.adobe.com/asn/developer/typeforum/glyphlist.txt
+% That file does not contain any copyright notice.
+
+% The AdobeGlyphList dictionary maps glyph names to Unicode values.
+% Nearly all names map to a single value; however, a few names map to
+% multiple values. See the above file, and also
+% http://partners.adobe.com/asn/developer/typeforum/unicodegn.html
+% for more details.
+
+/AdobeGlyphList 1500 dict
+dup /A 16#0041 put
+dup /AE 16#00C6 put
+dup /AEacute 16#01FC put
+dup /AEsmall 16#F7E6 put
+dup /Aacute 16#00C1 put
+dup /Aacutesmall 16#F7E1 put
+dup /Abreve 16#0102 put
+dup /Acircumflex 16#00C2 put
+dup /Acircumflexsmall 16#F7E2 put
+dup /Acute 16#F6C9 put
+dup /Acutesmall 16#F7B4 put
+dup /Adieresis 16#00C4 put
+dup /Adieresissmall 16#F7E4 put
+dup /Agrave 16#00C0 put
+dup /Agravesmall 16#F7E0 put
+dup /Alpha 16#0391 put
+dup /Alphatonos 16#0386 put
+dup /Amacron 16#0100 put
+dup /Aogonek 16#0104 put
+dup /Aring 16#00C5 put
+dup /Aringacute 16#01FA put
+dup /Aringsmall 16#F7E5 put
+dup /Asmall 16#F761 put
+dup /Atilde 16#00C3 put
+dup /Atildesmall 16#F7E3 put
+dup /B 16#0042 put
+dup /Beta 16#0392 put
+dup /Brevesmall 16#F6F4 put
+dup /Bsmall 16#F762 put
+dup /C 16#0043 put
+dup /Cacute 16#0106 put
+dup /Caron 16#F6CA put
+dup /Caronsmall 16#F6F5 put
+dup /Ccaron 16#010C put
+dup /Ccedilla 16#00C7 put
+dup /Ccedillasmall 16#F7E7 put
+dup /Ccircumflex 16#0108 put
+dup /Cdotaccent 16#010A put
+dup /Cedillasmall 16#F7B8 put
+dup /Chi 16#03A7 put
+dup /Circumflexsmall 16#F6F6 put
+dup /Csmall 16#F763 put
+dup /D 16#0044 put
+dup /Dcaron 16#010E put
+dup /Dcroat 16#0110 put
+dup /Delta [16#2206 16#0394] put
+dup /Dieresis 16#F6CB put
+dup /DieresisAcute 16#F6CC put
+dup /DieresisGrave 16#F6CD put
+dup /Dieresissmall 16#F7A8 put
+dup /Dotaccentsmall 16#F6F7 put
+dup /Dsmall 16#F764 put
+dup /E 16#0045 put
+dup /Eacute 16#00C9 put
+dup /Eacutesmall 16#F7E9 put
+dup /Ebreve 16#0114 put
+dup /Ecaron 16#011A put
+dup /Ecircumflex 16#00CA put
+dup /Ecircumflexsmall 16#F7EA put
+dup /Edieresis 16#00CB put
+dup /Edieresissmall 16#F7EB put
+dup /Edotaccent 16#0116 put
+dup /Egrave 16#00C8 put
+dup /Egravesmall 16#F7E8 put
+dup /Emacron 16#0112 put
+dup /Eng 16#014A put
+dup /Eogonek 16#0118 put
+dup /Epsilon 16#0395 put
+dup /Epsilontonos 16#0388 put
+dup /Esmall 16#F765 put
+dup /Eta 16#0397 put
+dup /Etatonos 16#0389 put
+dup /Eth 16#00D0 put
+dup /Ethsmall 16#F7F0 put
+dup /Euro 16#20AC put
+dup /F 16#0046 put
+dup /Fsmall 16#F766 put
+dup /G 16#0047 put
+dup /Gamma 16#0393 put
+dup /Gbreve 16#011E put
+dup /Gcaron 16#01E6 put
+dup /Gcircumflex 16#011C put
+dup /Gcommaaccent 16#0122 put
+dup /Gdotaccent 16#0120 put
+dup /Grave 16#F6CE put
+dup /Gravesmall 16#F760 put
+dup /Gsmall 16#F767 put
+dup /H 16#0048 put
+dup /H18533 16#25CF put
+dup /H18543 16#25AA put
+dup /H18551 16#25AB put
+dup /H22073 16#25A1 put
+dup /Hbar 16#0126 put
+dup /Hcircumflex 16#0124 put
+dup /Hsmall 16#F768 put
+dup /Hungarumlaut 16#F6CF put
+dup /Hungarumlautsmall 16#F6F8 put
+dup /I 16#0049 put
+dup /IJ 16#0132 put
+dup /Iacute 16#00CD put
+dup /Iacutesmall 16#F7ED put
+dup /Ibreve 16#012C put
+dup /Icircumflex 16#00CE put
+dup /Icircumflexsmall 16#F7EE put
+dup /Idieresis 16#00CF put
+dup /Idieresissmall 16#F7EF put
+dup /Idotaccent 16#0130 put
+dup /Ifraktur 16#2111 put
+dup /Igrave 16#00CC put
+dup /Igravesmall 16#F7EC put
+dup /Imacron 16#012A put
+dup /Iogonek 16#012E put
+dup /Iota 16#0399 put
+dup /Iotadieresis 16#03AA put
+dup /Iotatonos 16#038A put
+dup /Ismall 16#F769 put
+dup /Itilde 16#0128 put
+dup /J 16#004A put
+dup /Jcircumflex 16#0134 put
+dup /Jsmall 16#F76A put
+dup /K 16#004B put
+dup /Kappa 16#039A put
+dup /Kcommaaccent 16#0136 put
+dup /Ksmall 16#F76B put
+dup /L 16#004C put
+dup /LL 16#F6BF put
+dup /Lacute 16#0139 put
+dup /Lambda 16#039B put
+dup /Lcaron 16#013D put
+dup /Lcommaaccent 16#013B put
+dup /Ldot 16#013F put
+dup /Lslash 16#0141 put
+dup /Lslashsmall 16#F6F9 put
+dup /Lsmall 16#F76C put
+dup /M 16#004D put
+dup /Macron 16#F6D0 put
+dup /Macronsmall 16#F7AF put
+dup /Msmall 16#F76D put
+dup /Mu 16#039C put
+dup /N 16#004E put
+dup /Nacute 16#0143 put
+dup /Ncaron 16#0147 put
+dup /Ncommaaccent 16#0145 put
+dup /Nsmall 16#F76E put
+dup /Ntilde 16#00D1 put
+dup /Ntildesmall 16#F7F1 put
+dup /Nu 16#039D put
+dup /O 16#004F put
+dup /OE 16#0152 put
+dup /OEsmall 16#F6FA put
+dup /Oacute 16#00D3 put
+dup /Oacutesmall 16#F7F3 put
+dup /Obreve 16#014E put
+dup /Ocircumflex 16#00D4 put
+dup /Ocircumflexsmall 16#F7F4 put
+dup /Odieresis 16#00D6 put
+dup /Odieresissmall 16#F7F6 put
+dup /Ogoneksmall 16#F6FB put
+dup /Ograve 16#00D2 put
+dup /Ogravesmall 16#F7F2 put
+dup /Ohorn 16#01A0 put
+dup /Ohungarumlaut 16#0150 put
+dup /Omacron 16#014C put
+dup /Omega [16#2126 16#03A9] put
+dup /Omegatonos 16#038F put
+dup /Omicron 16#039F put
+dup /Omicrontonos 16#038C put
+dup /Oslash 16#00D8 put
+dup /Oslashacute 16#01FE put
+dup /Oslashsmall 16#F7F8 put
+dup /Osmall 16#F76F put
+dup /Otilde 16#00D5 put
+dup /Otildesmall 16#F7F5 put
+dup /P 16#0050 put
+dup /Phi 16#03A6 put
+dup /Pi 16#03A0 put
+dup /Psi 16#03A8 put
+dup /Psmall 16#F770 put
+dup /Q 16#0051 put
+dup /Qsmall 16#F771 put
+dup /R 16#0052 put
+dup /Racute 16#0154 put
+dup /Rcaron 16#0158 put
+dup /Rcommaaccent 16#0156 put
+dup /Rfraktur 16#211C put
+dup /Rho 16#03A1 put
+dup /Ringsmall 16#F6FC put
+dup /Rsmall 16#F772 put
+dup /S 16#0053 put
+dup /SF010000 16#250C put
+dup /SF020000 16#2514 put
+dup /SF030000 16#2510 put
+dup /SF040000 16#2518 put
+dup /SF050000 16#253C put
+dup /SF060000 16#252C put
+dup /SF070000 16#2534 put
+dup /SF080000 16#251C put
+dup /SF090000 16#2524 put
+dup /SF100000 16#2500 put
+dup /SF110000 16#2502 put
+dup /SF190000 16#2561 put
+dup /SF200000 16#2562 put
+dup /SF210000 16#2556 put
+dup /SF220000 16#2555 put
+dup /SF230000 16#2563 put
+dup /SF240000 16#2551 put
+dup /SF250000 16#2557 put
+dup /SF260000 16#255D put
+dup /SF270000 16#255C put
+dup /SF280000 16#255B put
+dup /SF360000 16#255E put
+dup /SF370000 16#255F put
+dup /SF380000 16#255A put
+dup /SF390000 16#2554 put
+dup /SF400000 16#2569 put
+dup /SF410000 16#2566 put
+dup /SF420000 16#2560 put
+dup /SF430000 16#2550 put
+dup /SF440000 16#256C put
+dup /SF450000 16#2567 put
+dup /SF460000 16#2568 put
+dup /SF470000 16#2564 put
+dup /SF480000 16#2565 put
+dup /SF490000 16#2559 put
+dup /SF500000 16#2558 put
+dup /SF510000 16#2552 put
+dup /SF520000 16#2553 put
+dup /SF530000 16#256B put
+dup /SF540000 16#256A put
+dup /Sacute 16#015A put
+dup /Scaron 16#0160 put
+dup /Scaronsmall 16#F6FD put
+dup /Scedilla [16#015E 16#F6C1] put
+dup /Scircumflex 16#015C put
+dup /Scommaaccent 16#0218 put
+dup /Sigma 16#03A3 put
+dup /Ssmall 16#F773 put
+dup /T 16#0054 put
+dup /Tau 16#03A4 put
+dup /Tbar 16#0166 put
+dup /Tcaron 16#0164 put
+dup /Tcommaaccent [16#0162 16#021A] put
+dup /Theta 16#0398 put
+dup /Thorn 16#00DE put
+dup /Thornsmall 16#F7FE put
+dup /Tildesmall 16#F6FE put
+dup /Tsmall 16#F774 put
+dup /U 16#0055 put
+dup /Uacute 16#00DA put
+dup /Uacutesmall 16#F7FA put
+dup /Ubreve 16#016C put
+dup /Ucircumflex 16#00DB put
+dup /Ucircumflexsmall 16#F7FB put
+dup /Udieresis 16#00DC put
+dup /Udieresissmall 16#F7FC put
+dup /Ugrave 16#00D9 put
+dup /Ugravesmall 16#F7F9 put
+dup /Uhorn 16#01AF put
+dup /Uhungarumlaut 16#0170 put
+dup /Umacron 16#016A put
+dup /Uogonek 16#0172 put
+dup /Upsilon 16#03A5 put
+dup /Upsilon1 16#03D2 put
+dup /Upsilondieresis 16#03AB put
+dup /Upsilontonos 16#038E put
+dup /Uring 16#016E put
+dup /Usmall 16#F775 put
+dup /Utilde 16#0168 put
+dup /V 16#0056 put
+dup /Vsmall 16#F776 put
+dup /W 16#0057 put
+dup /Wacute 16#1E82 put
+dup /Wcircumflex 16#0174 put
+dup /Wdieresis 16#1E84 put
+dup /Wgrave 16#1E80 put
+dup /Wsmall 16#F777 put
+dup /X 16#0058 put
+dup /Xi 16#039E put
+dup /Xsmall 16#F778 put
+dup /Y 16#0059 put
+dup /Yacute 16#00DD put
+dup /Yacutesmall 16#F7FD put
+dup /Ycircumflex 16#0176 put
+dup /Ydieresis 16#0178 put
+dup /Ydieresissmall 16#F7FF put
+dup /Ygrave 16#1EF2 put
+dup /Ysmall 16#F779 put
+dup /Z 16#005A put
+dup /Zacute 16#0179 put
+dup /Zcaron 16#017D put
+dup /Zcaronsmall 16#F6FF put
+dup /Zdotaccent 16#017B put
+dup /Zeta 16#0396 put
+dup /Zsmall 16#F77A put
+dup /a 16#0061 put
+dup /aacute 16#00E1 put
+dup /abreve 16#0103 put
+dup /acircumflex 16#00E2 put
+dup /acute 16#00B4 put
+dup /acutecomb 16#0301 put
+dup /adieresis 16#00E4 put
+dup /ae 16#00E6 put
+dup /aeacute 16#01FD put
+dup /afii00208 16#2015 put
+dup /afii10017 16#0410 put
+dup /afii10018 16#0411 put
+dup /afii10019 16#0412 put
+dup /afii10020 16#0413 put
+dup /afii10021 16#0414 put
+dup /afii10022 16#0415 put
+dup /afii10023 16#0401 put
+dup /afii10024 16#0416 put
+dup /afii10025 16#0417 put
+dup /afii10026 16#0418 put
+dup /afii10027 16#0419 put
+dup /afii10028 16#041A put
+dup /afii10029 16#041B put
+dup /afii10030 16#041C put
+dup /afii10031 16#041D put
+dup /afii10032 16#041E put
+dup /afii10033 16#041F put
+dup /afii10034 16#0420 put
+dup /afii10035 16#0421 put
+dup /afii10036 16#0422 put
+dup /afii10037 16#0423 put
+dup /afii10038 16#0424 put
+dup /afii10039 16#0425 put
+dup /afii10040 16#0426 put
+dup /afii10041 16#0427 put
+dup /afii10042 16#0428 put
+dup /afii10043 16#0429 put
+dup /afii10044 16#042A put
+dup /afii10045 16#042B put
+dup /afii10046 16#042C put
+dup /afii10047 16#042D put
+dup /afii10048 16#042E put
+dup /afii10049 16#042F put
+dup /afii10050 16#0490 put
+dup /afii10051 16#0402 put
+dup /afii10052 16#0403 put
+dup /afii10053 16#0404 put
+dup /afii10054 16#0405 put
+dup /afii10055 16#0406 put
+dup /afii10056 16#0407 put
+dup /afii10057 16#0408 put
+dup /afii10058 16#0409 put
+dup /afii10059 16#040A put
+dup /afii10060 16#040B put
+dup /afii10061 16#040C put
+dup /afii10062 16#040E put
+dup /afii10063 16#F6C4 put
+dup /afii10064 16#F6C5 put
+dup /afii10065 16#0430 put
+dup /afii10066 16#0431 put
+dup /afii10067 16#0432 put
+dup /afii10068 16#0433 put
+dup /afii10069 16#0434 put
+dup /afii10070 16#0435 put
+dup /afii10071 16#0451 put
+dup /afii10072 16#0436 put
+dup /afii10073 16#0437 put
+dup /afii10074 16#0438 put
+dup /afii10075 16#0439 put
+dup /afii10076 16#043A put
+dup /afii10077 16#043B put
+dup /afii10078 16#043C put
+dup /afii10079 16#043D put
+dup /afii10080 16#043E put
+dup /afii10081 16#043F put
+dup /afii10082 16#0440 put
+dup /afii10083 16#0441 put
+dup /afii10084 16#0442 put
+dup /afii10085 16#0443 put
+dup /afii10086 16#0444 put
+dup /afii10087 16#0445 put
+dup /afii10088 16#0446 put
+dup /afii10089 16#0447 put
+dup /afii10090 16#0448 put
+dup /afii10091 16#0449 put
+dup /afii10092 16#044A put
+dup /afii10093 16#044B put
+dup /afii10094 16#044C put
+dup /afii10095 16#044D put
+dup /afii10096 16#044E put
+dup /afii10097 16#044F put
+dup /afii10098 16#0491 put
+dup /afii10099 16#0452 put
+dup /afii10100 16#0453 put
+dup /afii10101 16#0454 put
+dup /afii10102 16#0455 put
+dup /afii10103 16#0456 put
+dup /afii10104 16#0457 put
+dup /afii10105 16#0458 put
+dup /afii10106 16#0459 put
+dup /afii10107 16#045A put
+dup /afii10108 16#045B put
+dup /afii10109 16#045C put
+dup /afii10110 16#045E put
+dup /afii10145 16#040F put
+dup /afii10146 16#0462 put
+dup /afii10147 16#0472 put
+dup /afii10148 16#0474 put
+dup /afii10192 16#F6C6 put
+dup /afii10193 16#045F put
+dup /afii10194 16#0463 put
+dup /afii10195 16#0473 put
+dup /afii10196 16#0475 put
+dup /afii10831 16#F6C7 put
+dup /afii10832 16#F6C8 put
+dup /afii10846 16#04D9 put
+dup /afii299 16#200E put
+dup /afii300 16#200F put
+dup /afii301 16#200D put
+dup /afii57381 16#066A put
+dup /afii57388 16#060C put
+dup /afii57392 16#0660 put
+dup /afii57393 16#0661 put
+dup /afii57394 16#0662 put
+dup /afii57395 16#0663 put
+dup /afii57396 16#0664 put
+dup /afii57397 16#0665 put
+dup /afii57398 16#0666 put
+dup /afii57399 16#0667 put
+dup /afii57400 16#0668 put
+dup /afii57401 16#0669 put
+dup /afii57403 16#061B put
+dup /afii57407 16#061F put
+dup /afii57409 16#0621 put
+dup /afii57410 16#0622 put
+dup /afii57411 16#0623 put
+dup /afii57412 16#0624 put
+dup /afii57413 16#0625 put
+dup /afii57414 16#0626 put
+dup /afii57415 16#0627 put
+dup /afii57416 16#0628 put
+dup /afii57417 16#0629 put
+dup /afii57418 16#062A put
+dup /afii57419 16#062B put
+dup /afii57420 16#062C put
+dup /afii57421 16#062D put
+dup /afii57422 16#062E put
+dup /afii57423 16#062F put
+dup /afii57424 16#0630 put
+dup /afii57425 16#0631 put
+dup /afii57426 16#0632 put
+dup /afii57427 16#0633 put
+dup /afii57428 16#0634 put
+dup /afii57429 16#0635 put
+dup /afii57430 16#0636 put
+dup /afii57431 16#0637 put
+dup /afii57432 16#0638 put
+dup /afii57433 16#0639 put
+dup /afii57434 16#063A put
+dup /afii57440 16#0640 put
+dup /afii57441 16#0641 put
+dup /afii57442 16#0642 put
+dup /afii57443 16#0643 put
+dup /afii57444 16#0644 put
+dup /afii57445 16#0645 put
+dup /afii57446 16#0646 put
+dup /afii57448 16#0648 put
+dup /afii57449 16#0649 put
+dup /afii57450 16#064A put
+dup /afii57451 16#064B put
+dup /afii57452 16#064C put
+dup /afii57453 16#064D put
+dup /afii57454 16#064E put
+dup /afii57455 16#064F put
+dup /afii57456 16#0650 put
+dup /afii57457 16#0651 put
+dup /afii57458 16#0652 put
+dup /afii57470 16#0647 put
+dup /afii57505 16#06A4 put
+dup /afii57506 16#067E put
+dup /afii57507 16#0686 put
+dup /afii57508 16#0698 put
+dup /afii57509 16#06AF put
+dup /afii57511 16#0679 put
+dup /afii57512 16#0688 put
+dup /afii57513 16#0691 put
+dup /afii57514 16#06BA put
+dup /afii57519 16#06D2 put
+dup /afii57534 16#06D5 put
+dup /afii57636 16#20AA put
+dup /afii57645 16#05BE put
+dup /afii57658 16#05C3 put
+dup /afii57664 16#05D0 put
+dup /afii57665 16#05D1 put
+dup /afii57666 16#05D2 put
+dup /afii57667 16#05D3 put
+dup /afii57668 16#05D4 put
+dup /afii57669 16#05D5 put
+dup /afii57670 16#05D6 put
+dup /afii57671 16#05D7 put
+dup /afii57672 16#05D8 put
+dup /afii57673 16#05D9 put
+dup /afii57674 16#05DA put
+dup /afii57675 16#05DB put
+dup /afii57676 16#05DC put
+dup /afii57677 16#05DD put
+dup /afii57678 16#05DE put
+dup /afii57679 16#05DF put
+dup /afii57680 16#05E0 put
+dup /afii57681 16#05E1 put
+dup /afii57682 16#05E2 put
+dup /afii57683 16#05E3 put
+dup /afii57684 16#05E4 put
+dup /afii57685 16#05E5 put
+dup /afii57686 16#05E6 put
+dup /afii57687 16#05E7 put
+dup /afii57688 16#05E8 put
+dup /afii57689 16#05E9 put
+dup /afii57690 16#05EA put
+dup /afii57694 16#FB2A put
+dup /afii57695 16#FB2B put
+dup /afii57700 16#FB4B put
+dup /afii57705 16#FB1F put
+dup /afii57716 16#05F0 put
+dup /afii57717 16#05F1 put
+dup /afii57718 16#05F2 put
+dup /afii57723 16#FB35 put
+dup /afii57793 16#05B4 put
+dup /afii57794 16#05B5 put
+dup /afii57795 16#05B6 put
+dup /afii57796 16#05BB put
+dup /afii57797 16#05B8 put
+dup /afii57798 16#05B7 put
+dup /afii57799 16#05B0 put
+dup /afii57800 16#05B2 put
+dup /afii57801 16#05B1 put
+dup /afii57802 16#05B3 put
+dup /afii57803 16#05C2 put
+dup /afii57804 16#05C1 put
+dup /afii57806 16#05B9 put
+dup /afii57807 16#05BC put
+dup /afii57839 16#05BD put
+dup /afii57841 16#05BF put
+dup /afii57842 16#05C0 put
+dup /afii57929 16#02BC put
+dup /afii61248 16#2105 put
+dup /afii61289 16#2113 put
+dup /afii61352 16#2116 put
+dup /afii61573 16#202C put
+dup /afii61574 16#202D put
+dup /afii61575 16#202E put
+dup /afii61664 16#200C put
+dup /afii63167 16#066D put
+dup /afii64937 16#02BD put
+dup /agrave 16#00E0 put
+dup /aleph 16#2135 put
+dup /alpha 16#03B1 put
+dup /alphatonos 16#03AC put
+dup /amacron 16#0101 put
+dup /ampersand 16#0026 put
+dup /ampersandsmall 16#F726 put
+dup /angle 16#2220 put
+dup /angleleft 16#2329 put
+dup /angleright 16#232A put
+dup /anoteleia 16#0387 put
+dup /aogonek 16#0105 put
+dup /approxequal 16#2248 put
+dup /aring 16#00E5 put
+dup /aringacute 16#01FB put
+dup /arrowboth 16#2194 put
+dup /arrowdblboth 16#21D4 put
+dup /arrowdbldown 16#21D3 put
+dup /arrowdblleft 16#21D0 put
+dup /arrowdblright 16#21D2 put
+dup /arrowdblup 16#21D1 put
+dup /arrowdown 16#2193 put
+dup /arrowhorizex 16#F8E7 put
+dup /arrowleft 16#2190 put
+dup /arrowright 16#2192 put
+dup /arrowup 16#2191 put
+dup /arrowupdn 16#2195 put
+dup /arrowupdnbse 16#21A8 put
+dup /arrowvertex 16#F8E6 put
+dup /asciicircum 16#005E put
+dup /asciitilde 16#007E put
+dup /asterisk 16#002A put
+dup /asteriskmath 16#2217 put
+dup /asuperior 16#F6E9 put
+dup /at 16#0040 put
+dup /atilde 16#00E3 put
+dup /b 16#0062 put
+dup /backslash 16#005C put
+dup /bar 16#007C put
+dup /beta 16#03B2 put
+dup /block 16#2588 put
+dup /braceex 16#F8F4 put
+dup /braceleft 16#007B put
+dup /braceleftbt 16#F8F3 put
+dup /braceleftmid 16#F8F2 put
+dup /bracelefttp 16#F8F1 put
+dup /braceright 16#007D put
+dup /bracerightbt 16#F8FE put
+dup /bracerightmid 16#F8FD put
+dup /bracerighttp 16#F8FC put
+dup /bracketleft 16#005B put
+dup /bracketleftbt 16#F8F0 put
+dup /bracketleftex 16#F8EF put
+dup /bracketlefttp 16#F8EE put
+dup /bracketright 16#005D put
+dup /bracketrightbt 16#F8FB put
+dup /bracketrightex 16#F8FA put
+dup /bracketrighttp 16#F8F9 put
+dup /breve 16#02D8 put
+dup /brokenbar 16#00A6 put
+dup /bsuperior 16#F6EA put
+dup /bullet 16#2022 put
+dup /c 16#0063 put
+dup /cacute 16#0107 put
+dup /caron 16#02C7 put
+dup /carriagereturn 16#21B5 put
+dup /ccaron 16#010D put
+dup /ccedilla 16#00E7 put
+dup /ccircumflex 16#0109 put
+dup /cdotaccent 16#010B put
+dup /cedilla 16#00B8 put
+dup /cent 16#00A2 put
+dup /centinferior 16#F6DF put
+dup /centoldstyle 16#F7A2 put
+dup /centsuperior 16#F6E0 put
+dup /chi 16#03C7 put
+dup /circle 16#25CB put
+dup /circlemultiply 16#2297 put
+dup /circleplus 16#2295 put
+dup /circumflex 16#02C6 put
+dup /club 16#2663 put
+dup /colon 16#003A put
+dup /colonmonetary 16#20A1 put
+dup /comma 16#002C put
+dup /commaaccent 16#F6C3 put
+dup /commainferior 16#F6E1 put
+dup /commasuperior 16#F6E2 put
+dup /congruent 16#2245 put
+dup /copyright 16#00A9 put
+dup /copyrightsans 16#F8E9 put
+dup /copyrightserif 16#F6D9 put
+dup /currency 16#00A4 put
+dup /cyrBreve 16#F6D1 put
+dup /cyrFlex 16#F6D2 put
+dup /cyrbreve 16#F6D4 put
+dup /cyrflex 16#F6D5 put
+dup /d 16#0064 put
+dup /dagger 16#2020 put
+dup /daggerdbl 16#2021 put
+dup /dblGrave 16#F6D3 put
+dup /dblgrave 16#F6D6 put
+dup /dcaron 16#010F put
+dup /dcroat 16#0111 put
+dup /degree 16#00B0 put
+dup /delta 16#03B4 put
+dup /diamond 16#2666 put
+dup /dieresis 16#00A8 put
+dup /dieresisacute 16#F6D7 put
+dup /dieresisgrave 16#F6D8 put
+dup /dieresistonos 16#0385 put
+dup /divide 16#00F7 put
+dup /dkshade 16#2593 put
+dup /dnblock 16#2584 put
+dup /dollar 16#0024 put
+dup /dollarinferior 16#F6E3 put
+dup /dollaroldstyle 16#F724 put
+dup /dollarsuperior 16#F6E4 put
+dup /dong 16#20AB put
+dup /dotaccent 16#02D9 put
+dup /dotbelowcomb 16#0323 put
+dup /dotlessi 16#0131 put
+dup /dotlessj 16#F6BE put
+dup /dotmath 16#22C5 put
+dup /dsuperior 16#F6EB put
+dup /e 16#0065 put
+dup /eacute 16#00E9 put
+dup /ebreve 16#0115 put
+dup /ecaron 16#011B put
+dup /ecircumflex 16#00EA put
+dup /edieresis 16#00EB put
+dup /edotaccent 16#0117 put
+dup /egrave 16#00E8 put
+dup /eight 16#0038 put
+dup /eightinferior 16#2088 put
+dup /eightoldstyle 16#F738 put
+dup /eightsuperior 16#2078 put
+dup /element 16#2208 put
+dup /ellipsis 16#2026 put
+dup /emacron 16#0113 put
+dup /emdash 16#2014 put
+dup /emptyset 16#2205 put
+dup /endash 16#2013 put
+dup /eng 16#014B put
+dup /eogonek 16#0119 put
+dup /epsilon 16#03B5 put
+dup /epsilontonos 16#03AD put
+dup /equal 16#003D put
+dup /equivalence 16#2261 put
+dup /estimated 16#212E put
+dup /esuperior 16#F6EC put
+dup /eta 16#03B7 put
+dup /etatonos 16#03AE put
+dup /eth 16#00F0 put
+dup /exclam 16#0021 put
+dup /exclamdbl 16#203C put
+dup /exclamdown 16#00A1 put
+dup /exclamdownsmall 16#F7A1 put
+dup /exclamsmall 16#F721 put
+dup /existential 16#2203 put
+dup /f 16#0066 put
+dup /female 16#2640 put
+dup /ff 16#FB00 put
+dup /ffi 16#FB03 put
+dup /ffl 16#FB04 put
+dup /fi 16#FB01 put
+dup /figuredash 16#2012 put
+dup /filledbox 16#25A0 put
+dup /filledrect 16#25AC put
+dup /five 16#0035 put
+dup /fiveeighths 16#215D put
+dup /fiveinferior 16#2085 put
+dup /fiveoldstyle 16#F735 put
+dup /fivesuperior 16#2075 put
+dup /fl 16#FB02 put
+dup /florin 16#0192 put
+dup /four 16#0034 put
+dup /fourinferior 16#2084 put
+dup /fouroldstyle 16#F734 put
+dup /foursuperior 16#2074 put
+dup /fraction [16#2044 16#2215] put
+dup /franc 16#20A3 put
+dup /g 16#0067 put
+dup /gamma 16#03B3 put
+dup /gbreve 16#011F put
+dup /gcaron 16#01E7 put
+dup /gcircumflex 16#011D put
+dup /gcommaaccent 16#0123 put
+dup /gdotaccent 16#0121 put
+dup /germandbls 16#00DF put
+dup /gradient 16#2207 put
+dup /grave 16#0060 put
+dup /gravecomb 16#0300 put
+dup /greater 16#003E put
+dup /greaterequal 16#2265 put
+dup /guillemotleft 16#00AB put
+dup /guillemotright 16#00BB put
+dup /guilsinglleft 16#2039 put
+dup /guilsinglright 16#203A put
+dup /h 16#0068 put
+dup /hbar 16#0127 put
+dup /hcircumflex 16#0125 put
+dup /heart 16#2665 put
+dup /hookabovecomb 16#0309 put
+dup /house 16#2302 put
+dup /hungarumlaut 16#02DD put
+dup /hyphen [16#002D 16#00AD] put
+dup /hypheninferior 16#F6E5 put
+dup /hyphensuperior 16#F6E6 put
+dup /i 16#0069 put
+dup /iacute 16#00ED put
+dup /ibreve 16#012D put
+dup /icircumflex 16#00EE put
+dup /idieresis 16#00EF put
+dup /igrave 16#00EC put
+dup /ij 16#0133 put
+dup /imacron 16#012B put
+dup /infinity 16#221E put
+dup /integral 16#222B put
+dup /integralbt 16#2321 put
+dup /integralex 16#F8F5 put
+dup /integraltp 16#2320 put
+dup /intersection 16#2229 put
+dup /invbullet 16#25D8 put
+dup /invcircle 16#25D9 put
+dup /invsmileface 16#263B put
+dup /iogonek 16#012F put
+dup /iota 16#03B9 put
+dup /iotadieresis 16#03CA put
+dup /iotadieresistonos 16#0390 put
+dup /iotatonos 16#03AF put
+dup /isuperior 16#F6ED put
+dup /itilde 16#0129 put
+dup /j 16#006A put
+dup /jcircumflex 16#0135 put
+dup /k 16#006B put
+dup /kappa 16#03BA put
+dup /kcommaaccent 16#0137 put
+dup /kgreenlandic 16#0138 put
+dup /l 16#006C put
+dup /lacute 16#013A put
+dup /lambda 16#03BB put
+dup /lcaron 16#013E put
+dup /lcommaaccent 16#013C put
+dup /ldot 16#0140 put
+dup /less 16#003C put
+dup /lessequal 16#2264 put
+dup /lfblock 16#258C put
+dup /lira 16#20A4 put
+dup /ll 16#F6C0 put
+dup /logicaland 16#2227 put
+dup /logicalnot 16#00AC put
+dup /logicalor 16#2228 put
+dup /longs 16#017F put
+dup /lozenge 16#25CA put
+dup /lslash 16#0142 put
+dup /lsuperior 16#F6EE put
+dup /ltshade 16#2591 put
+dup /m 16#006D put
+dup /macron [16#00AF 16#02C9] put
+dup /male 16#2642 put
+dup /minus 16#2212 put
+dup /minute 16#2032 put
+dup /msuperior 16#F6EF put
+dup /mu [16#00B5 16#03BC] put
+dup /multiply 16#00D7 put
+dup /musicalnote 16#266A put
+dup /musicalnotedbl 16#266B put
+dup /n 16#006E put
+dup /nacute 16#0144 put
+dup /napostrophe 16#0149 put
+dup /ncaron 16#0148 put
+dup /ncommaaccent 16#0146 put
+dup /nine 16#0039 put
+dup /nineinferior 16#2089 put
+dup /nineoldstyle 16#F739 put
+dup /ninesuperior 16#2079 put
+dup /notelement 16#2209 put
+dup /notequal 16#2260 put
+dup /notsubset 16#2284 put
+dup /nsuperior 16#207F put
+dup /ntilde 16#00F1 put
+dup /nu 16#03BD put
+dup /numbersign 16#0023 put
+dup /o 16#006F put
+dup /oacute 16#00F3 put
+dup /obreve 16#014F put
+dup /ocircumflex 16#00F4 put
+dup /odieresis 16#00F6 put
+dup /oe 16#0153 put
+dup /ogonek 16#02DB put
+dup /ograve 16#00F2 put
+dup /ohorn 16#01A1 put
+dup /ohungarumlaut 16#0151 put
+dup /omacron 16#014D put
+dup /omega 16#03C9 put
+dup /omega1 16#03D6 put
+dup /omegatonos 16#03CE put
+dup /omicron 16#03BF put
+dup /omicrontonos 16#03CC put
+dup /one 16#0031 put
+dup /onedotenleader 16#2024 put
+dup /oneeighth 16#215B put
+dup /onefitted 16#F6DC put
+dup /onehalf 16#00BD put
+dup /oneinferior 16#2081 put
+dup /oneoldstyle 16#F731 put
+dup /onequarter 16#00BC put
+dup /onesuperior 16#00B9 put
+dup /onethird 16#2153 put
+dup /openbullet 16#25E6 put
+dup /ordfeminine 16#00AA put
+dup /ordmasculine 16#00BA put
+dup /orthogonal 16#221F put
+dup /oslash 16#00F8 put
+dup /oslashacute 16#01FF put
+dup /osuperior 16#F6F0 put
+dup /otilde 16#00F5 put
+dup /p 16#0070 put
+dup /paragraph 16#00B6 put
+dup /parenleft 16#0028 put
+dup /parenleftbt 16#F8ED put
+dup /parenleftex 16#F8EC put
+dup /parenleftinferior 16#208D put
+dup /parenleftsuperior 16#207D put
+dup /parenlefttp 16#F8EB put
+dup /parenright 16#0029 put
+dup /parenrightbt 16#F8F8 put
+dup /parenrightex 16#F8F7 put
+dup /parenrightinferior 16#208E put
+dup /parenrightsuperior 16#207E put
+dup /parenrighttp 16#F8F6 put
+dup /partialdiff 16#2202 put
+dup /percent 16#0025 put
+dup /period 16#002E put
+dup /periodcentered [16#00B7 16#2219] put
+dup /periodinferior 16#F6E7 put
+dup /periodsuperior 16#F6E8 put
+dup /perpendicular 16#22A5 put
+dup /perthousand 16#2030 put
+dup /peseta 16#20A7 put
+dup /phi 16#03C6 put
+dup /phi1 16#03D5 put
+dup /pi 16#03C0 put
+dup /plus 16#002B put
+dup /plusminus 16#00B1 put
+dup /prescription 16#211E put
+dup /product 16#220F put
+dup /propersubset 16#2282 put
+dup /propersuperset 16#2283 put
+dup /proportional 16#221D put
+dup /psi 16#03C8 put
+dup /q 16#0071 put
+dup /question 16#003F put
+dup /questiondown 16#00BF put
+dup /questiondownsmall 16#F7BF put
+dup /questionsmall 16#F73F put
+dup /quotedbl 16#0022 put
+dup /quotedblbase 16#201E put
+dup /quotedblleft 16#201C put
+dup /quotedblright 16#201D put
+dup /quoteleft 16#2018 put
+dup /quotereversed 16#201B put
+dup /quoteright 16#2019 put
+dup /quotesinglbase 16#201A put
+dup /quotesingle 16#0027 put
+dup /r 16#0072 put
+dup /racute 16#0155 put
+dup /radical 16#221A put
+dup /radicalex 16#F8E5 put
+dup /rcaron 16#0159 put
+dup /rcommaaccent 16#0157 put
+dup /reflexsubset 16#2286 put
+dup /reflexsuperset 16#2287 put
+dup /registered 16#00AE put
+dup /registersans 16#F8E8 put
+dup /registerserif 16#F6DA put
+dup /revlogicalnot 16#2310 put
+dup /rho 16#03C1 put
+dup /ring 16#02DA put
+dup /rsuperior 16#F6F1 put
+dup /rtblock 16#2590 put
+dup /rupiah 16#F6DD put
+dup /s 16#0073 put
+dup /sacute 16#015B put
+dup /scaron 16#0161 put
+dup /scedilla [16#015F 16#F6C2] put
+dup /scircumflex 16#015D put
+dup /scommaaccent 16#0219 put
+dup /second 16#2033 put
+dup /section 16#00A7 put
+dup /semicolon 16#003B put
+dup /seven 16#0037 put
+dup /seveneighths 16#215E put
+dup /seveninferior 16#2087 put
+dup /sevenoldstyle 16#F737 put
+dup /sevensuperior 16#2077 put
+dup /shade 16#2592 put
+dup /sigma 16#03C3 put
+dup /sigma1 16#03C2 put
+dup /similar 16#223C put
+dup /six 16#0036 put
+dup /sixinferior 16#2086 put
+dup /sixoldstyle 16#F736 put
+dup /sixsuperior 16#2076 put
+dup /slash 16#002F put
+dup /smileface 16#263A put
+dup /space [16#0020 16#00A0] put
+dup /spade 16#2660 put
+dup /ssuperior 16#F6F2 put
+dup /sterling 16#00A3 put
+dup /suchthat 16#220B put
+dup /summation 16#2211 put
+dup /sun 16#263C put
+dup /t 16#0074 put
+dup /tau 16#03C4 put
+dup /tbar 16#0167 put
+dup /tcaron 16#0165 put
+dup /tcommaaccent [16#0163 16#021B] put
+dup /therefore 16#2234 put
+dup /theta 16#03B8 put
+dup /theta1 16#03D1 put
+dup /thorn 16#00FE put
+dup /three 16#0033 put
+dup /threeeighths 16#215C put
+dup /threeinferior 16#2083 put
+dup /threeoldstyle 16#F733 put
+dup /threequarters 16#00BE put
+dup /threequartersemdash 16#F6DE put
+dup /threesuperior 16#00B3 put
+dup /tilde 16#02DC put
+dup /tildecomb 16#0303 put
+dup /tonos 16#0384 put
+dup /trademark 16#2122 put
+dup /trademarksans 16#F8EA put
+dup /trademarkserif 16#F6DB put
+dup /triagdn 16#25BC put
+dup /triaglf 16#25C4 put
+dup /triagrt 16#25BA put
+dup /triagup 16#25B2 put
+dup /tsuperior 16#F6F3 put
+dup /two 16#0032 put
+dup /twodotenleader 16#2025 put
+dup /twoinferior 16#2082 put
+dup /twooldstyle 16#F732 put
+dup /twosuperior 16#00B2 put
+dup /twothirds 16#2154 put
+dup /u 16#0075 put
+dup /uacute 16#00FA put
+dup /ubreve 16#016D put
+dup /ucircumflex 16#00FB put
+dup /udieresis 16#00FC put
+dup /ugrave 16#00F9 put
+dup /uhorn 16#01B0 put
+dup /uhungarumlaut 16#0171 put
+dup /umacron 16#016B put
+dup /underscore 16#005F put
+dup /underscoredbl 16#2017 put
+dup /union 16#222A put
+dup /universal 16#2200 put
+dup /uogonek 16#0173 put
+dup /upblock 16#2580 put
+dup /upsilon 16#03C5 put
+dup /upsilondieresis 16#03CB put
+dup /upsilondieresistonos 16#03B0 put
+dup /upsilontonos 16#03CD put
+dup /uring 16#016F put
+dup /utilde 16#0169 put
+dup /v 16#0076 put
+dup /w 16#0077 put
+dup /wacute 16#1E83 put
+dup /wcircumflex 16#0175 put
+dup /wdieresis 16#1E85 put
+dup /weierstrass 16#2118 put
+dup /wgrave 16#1E81 put
+dup /x 16#0078 put
+dup /xi 16#03BE put
+dup /y 16#0079 put
+dup /yacute 16#00FD put
+dup /ycircumflex 16#0177 put
+dup /ydieresis 16#00FF put
+dup /yen 16#00A5 put
+dup /ygrave 16#1EF3 put
+dup /z 16#007A put
+dup /zacute 16#017A put
+dup /zcaron 16#017E put
+dup /zdotaccent 16#017C put
+dup /zero 16#0030 put
+dup /zeroinferior 16#2080 put
+dup /zerooldstyle 16#F730 put
+dup /zerosuperior 16#2070 put
+dup /zeta 16#03B6 put
+def
diff --git a/Master/tlpkg/tlgs/lib/gs_btokn.ps b/Master/tlpkg/tlgs/lib/gs_btokn.ps
new file mode 100644
index 00000000000..f2f88bb8e2c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_btokn.ps
@@ -0,0 +1,331 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_btokn.ps 7631 2007-01-22 03:26:28Z lpd $
+% Initialization file for binary tokens.
+% When this is run, systemdict is still writable,
+% but everything defined here goes into level2dict.
+
+% Define whether or not to allow writing dictionaries.
+% This is a non-standard feature!
+/WRITEDICTS false def
+
+languagelevel 1 .setlanguagelevel
+level2dict begin
+
+% Initialization for the system name table.
+
+mark
+% 0
+ /abs /add /aload /anchorsearch /and
+ /arc /arcn /arct /arcto /array
+ /ashow /astore /awidthshow /begin /bind
+ /bitshift /ceiling /charpath /clear /cleartomark
+% 20
+ /clip /clippath /closepath /concat /concatmatrix
+ /copy /count /counttomark /currentcmykcolor /currentdash
+ /currentdict /currentfile /currentfont /currentgray /currentgstate
+ /currenthsbcolor /currentlinecap /currentlinejoin /currentlinewidth /currentmatrix
+% 40
+ /currentpoint /currentrgbcolor /currentshared /curveto /cvi
+ /cvlit /cvn /cvr /cvrs /cvs
+ /cvx /def /defineusername /dict /div
+ /dtransform /dup /end /eoclip /eofill
+% 60
+ /eoviewclip /eq /exch /exec /exit
+ /file /fill /findfont /flattenpath /floor
+ /flush /flushfile /for /forall /ge
+ /get /getinterval /grestore /gsave /gstate
+% 80
+ /gt /identmatrix /idiv /idtransform /if
+ /ifelse /image /imagemask /index /ineofill
+ /infill /initviewclip /inueofill /inufill /invertmatrix
+ /itransform /known /le /length /lineto
+% 100
+ /load /loop /lt /makefont /matrix
+ /maxlength /mod /moveto /mul /ne
+ /neg /newpath /not /null /or
+ /pathbbox /pathforall /pop /print /printobject
+% 120
+ /put /putinterval /rcurveto /read /readhexstring
+ /readline /readstring /rectclip /rectfill /rectstroke
+ /rectviewclip /repeat /restore /rlineto /rmoveto
+ /roll /rotate /round /save /scale
+% 140
+ /scalefont /search /selectfont /setbbox /setcachedevice
+ /setcachedevice2 /setcharwidth /setcmykcolor /setdash /setfont
+ /setgray /setgstate /sethsbcolor /setlinecap /setlinejoin
+ /setlinewidth /setmatrix /setrgbcolor /setshared /shareddict
+% 160
+ /show /showpage /stop /stopped /store
+ /string /stringwidth /stroke /strokepath /sub
+ /systemdict /token /transform /translate /truncate
+ /type /uappend /ucache /ueofill /ufill
+% 180
+ /undef /upath /userdict /ustroke /viewclip
+ /viewclippath /where /widthshow /write /writehexstring
+ /writeobject /writestring /wtranslation /xor /xshow
+ /xyshow /yshow /FontDirectory /SharedFontDirectory /Courier
+% 200
+ /Courier-Bold /Courier-BoldOblique /Courier-Oblique /Helvetica /Helvetica-Bold
+ /Helvetica-BoldOblique /Helvetica-Oblique /Symbol /Times-Bold /Times-BoldItalic
+ /Times-Italic /Times-Roman /execuserobject /currentcolor /currentcolorspace
+ /currentglobal /execform /filter /findresource /globaldict
+% 220
+ /makepattern /setcolor /setcolorspace /setglobal /setpagedevice
+ /setpattern
+% pad to 256
+ counttomark 256 exch sub { 0 } repeat
+% 256
+ /= /== /ISOLatin1Encoding /StandardEncoding
+% 260
+ ([) cvn (]) cvn /atan /banddevice /bytesavailable
+ /cachestatus /closefile /colorimage /condition /copypage
+ /cos /countdictstack /countexecstack /cshow /currentblackgeneration
+ /currentcacheparams /currentcolorscreen /currentcolortransfer /currentcontext /currentflat
+% 280
+ /currenthalftone /currenthalftonephase /currentmiterlimit /currentobjectformat /currentpacking
+ /currentscreen /currentstrokeadjust /currenttransfer /currentundercolorremoval /defaultmatrix
+ /definefont /deletefile /detach /deviceinfo /dictstack
+ /echo /erasepage /errordict /execstack /executeonly
+% 300
+ /exp /false /filenameforall /fileposition /fork
+ /framedevice /grestoreall /handleerror /initclip /initgraphics
+ /initmatrix /instroke /inustroke /join /kshow
+ /ln /lock /log /mark /monitor
+% 320
+ /noaccess /notify /nulldevice /packedarray /quit
+ /rand /rcheck /readonly /realtime /renamefile
+ /renderbands /resetfile /reversepath /rootfont /rrand
+ /run /scheck /setblackgeneration /setcachelimit /setcacheparams
+% 340
+ /setcolorscreen /setcolortransfer /setfileposition /setflat /sethalftone
+ /sethalftonephase /setmiterlimit /setobjectformat /setpacking /setscreen
+ /setstrokeadjust /settransfer /setucacheparams /setundercolorremoval /sin
+ /sqrt /srand /stack /status /statusdict
+% 360
+ /true /ucachestatus /undefinefont /usertime /ustrokepath
+ /version /vmreclaim /vmstatus /wait /wcheck
+ /xcheck /yield /defineuserobject /undefineuserobject /UserObjects
+ /cleardictstack
+% 376
+ /A /B /C /D /E /F /G /H /I /J /K /L /M
+ /N /O /P /Q /R /S /T /U /V /W /X /Y /Z
+ /a /b /c /d /e /f /g /h /i /j /k /l /m
+ /n /o /p /q /r /s /t /u /v /w /x /y /z
+% 428
+ /setvmthreshold (<<) cvn
+ (>>) cvn /currentcolorrendering /currentdevparams /currentoverprint /currentpagedevice
+ /currentsystemparams /currentuserparams /defineresource /findencoding /gcheck
+% 440
+ /glyphshow /languagelevel /product /pstack /resourceforall
+ /resourcestatus /revision /serialnumber /setcolorrendering /setdevparams
+ /setoverprint /setsystemparams /setuserparams /startjob /undefineresource
+ /GlobalFontDirectory /ASCII85Decode /ASCII85Encode /ASCIIHexDecode /ASCIIHexEncode
+% 460
+ /CCITTFaxDecode /CCITTFaxEncode /DCTDecode /DCTEncode /LZWDecode
+ /LZWEncode /NullEncode /RunLengthDecode /RunLengthEncode /SubFileDecode
+ /CIEBasedA /CIEBasedABC /DeviceCMYK /DeviceGray /DeviceRGB
+ /Indexed /Pattern /Separation /CIEBasedDEF /CIEBasedDEFG
+% 480
+ /DeviceN
+% 481 -- end
+.packtomark .installsystemnames
+
+% Define printobject and writeobject.
+% These are mostly implemented in PostScript, so that we don't have to
+% worry about interrupts or callbacks when writing to the output file.
+
+% Define procedures for accumulating the space required to represent
+% an object in binary form. The procedures for composite objects (arrays
+% and dictionaries) leave different results on the stack:
+% <#refs> <#chars> <simple_obj> -proc- <#refs> <#chars>
+% <#refs> <#chars> <array|dict> -proc- <array|dict> <#refs> <#chars>
+% This is required so that .writeobjects can also accumulate the actual
+% list of composite objects to write in the binary object sequence.
+/cntdict mark
+ /integertype /pop load
+ /realtype 1 index
+ /marktype 1 index
+ /nulltype 1 index
+ /booleantype 1 index
+ /nametype { length add } bind
+ /stringtype 1 index
+ /arraytype null
+ /dicttype null
+.dicttomark def
+/.cntobj { % <<arguments and results as for procedures in cntdict>>
+ dup type //cntdict exch get exec
+} .bind def
+cntdict /arraytype {
+ dup dup length 5 -1 roll add 4 2 roll { .cntobj } forall
+} bind put
+cntdict /dicttype {
+ WRITEDICTS {
+ dup dup length 2 mul 5 -1 roll add 4 2 roll {
+ % We have to use .execn here, rather than simply rolling the
+ % value under the top elements, because key might involve arrays
+ % or dictionaries.
+ cvlit {.cntobj} exch 2 .execn .cntobj
+ } forall
+ } {
+ /writeobject .systemvar /typecheck signalerror
+ } ifelse
+} bind put
+
+/w2dict mark
+ /nametype { 2 copy .writecvs pop } bind
+ /stringtype 1 index
+.dicttomark def
+
+/.bosheader { % <top_length> <total_length> <string8> .bosheader
+ % <string4|8>
+ dup 0 currentobjectformat 127 add put % object format => BOS tag
+ 2 index 255 le 2 index 65531 le and {
+ % Use the short header format: tag toplen(1) totlen(2)
+ exch 4 add exch
+ 0 4 getinterval
+ dup 1 5 -1 roll put
+ } {
+ % Use the long header format: tag 0(1) toplen(2) totlen(4)
+ exch 8 add exch
+ 0 0 4 2 roll .bosobject exch pop exch pop % store with byte swapping
+ } ifelse % Stack: shortlen str
+ exch dup -8 bitshift exch 255 and % str hibyte lobyte
+ currentobjectformat 1 and 0 eq { % lsb first
+ exch
+ } if
+ 2 index 3 3 -1 roll put
+ 1 index 2 3 -1 roll put
+} .bind def
+
+/.writeobjects { % <file> <tag> <array> .writeobjects -
+ mark exch
+
+ % Count the space required for refs and strings.
+
+ dup length 0 3 -1 roll
+ % Stack: file tag -mark- #refs #chars array
+ dup 4 1 roll { .cntobj } forall
+
+ % Write the header.
+
+ % Stack: file tag -mark- array1 ... (array|dict)N #refs #chars
+ counttomark 3 add -2 roll 4 1 roll
+ % Stack: -mark- array1 ... (array|dict)N tag #refs #chars file
+ dup counttomark 1 sub index length
+ 4 index 3 bitshift 4 index add
+ (xxxxxxxx) .bosheader writestring
+
+ % Write the objects per se.
+
+ 3 1 roll pop
+ counttomark 1 sub index length 3 bitshift exch
+ 3 bitshift
+ % Stack: -mark- array1 ... (array|dict)N tag file ref# char#
+ counttomark 4 sub {
+ counttomark -1 roll dup 6 1 roll
+ % Stack: ... objN tag file ref# char# objN
+ dup type /dicttype eq { % can't be first object
+ { 5 1 roll (x\000xxxxxx) .bosobject
+ 3 index exch writestring
+ 4 -1 roll (x\000xxxxxx) .bosobject
+ 3 index exch writestring
+ } forall
+ } {
+ { (x\000xxxxxx) .bosobject
+ dup 1 6 index put
+ 3 index exch writestring
+ 4 -1 roll pop 0 4 1 roll % clear tag
+ } forall
+ } ifelse
+ } repeat
+
+ % Write the strings and names.
+
+ pop pop exch pop
+ % Stack: -mark- array1 ... array|dictN file
+ counttomark 1 sub {
+ counttomark -1 roll {
+ % The counting pass ensured that the keys and values
+ % of any dictionary must be writable objects.
+ % Hence, we are processing a dictionary iff
+ % the next-to-top stack element is not a file.
+ 1 index type /filetype ne {
+ exch 2 index exch dup type //w2dict exch .knownget
+ { exec } { pop } ifelse pop
+ } if
+ dup type //w2dict exch .knownget { exec } { pop } ifelse
+ } forall
+ } repeat
+
+ % Clean up.
+
+ % Stack: -mark- file
+ pop pop
+
+} .bind def
+
+/printobject { % <obj> <tag> printobject -
+ currentobjectformat 0 eq {
+ /printobject .systemvar /undefined signalerror
+ } if
+ (%stdout) (w) file 2 index 2 index .writeobject pop pop
+} odef
+/writeobject { % <file> <obj> <tag> writeobject -
+ currentobjectformat 0 eq {
+ /writeobject .systemvar /undefined signalerror
+ } if
+ 2 .argindex pop % check # of args
+ .writeobject
+} odef
+/.writeobject {
+ 3 copy exch
+ % We must allocate the array in local VM
+ % to avoid a possible invalidaccess.
+ .currentglobal false .setglobal exch 1 array astore exch .setglobal
+ .writeobjects pop pop pop
+} .bind def
+
+% Implement binary error message output.
+/.objectprinttest { % <obj> .objectprinttest -
+ % This is a pseudo-operator so it will restore the stack
+ % if it gets an error.
+ mark 0 0 3 .argindex .cntobj cleartomark pop
+} bind odef
+/.printerror {
+ $error /binary get .languagelevel 2 ge and {
+ currentobjectformat 0 ne {
+ [ /Error $error /errorname get $error /command get
+ % Convert the object with cvs if it isn't printable.
+ dup { .objectprinttest } .internalstopped {
+ pop 100 string cvs
+ } if
+ false ] 250 printobject
+ }
+ //.printerror % known to be a procedure
+ ifelse
+ }
+ //.printerror % known to be a procedure
+ ifelse
+} bind def
+
+currentdict /cntdict .undef
+currentdict /w2dict .undef
+
+% End of level2dict
+
+end
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_ccfnt.ps b/Master/tlpkg/tlgs/lib/gs_ccfnt.ps
new file mode 100644
index 00000000000..c33186bf356
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ccfnt.ps
@@ -0,0 +1,75 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ccfnt.ps 6300 2005-12-28 19:56:24Z giles $
+% Find and register all the precompiled font operators in systemdict.
+
+/registerfont % <fontname> <fontdict> registerfont <font>
+ { CCFONTDEBUG { (Registering ) print 1 index = } if
+ dup begin
+ Encoding type /nametype eq
+ { Encoding .findencoding /Encoding exch def
+ }
+ if
+ dup /PrefEnc known
+ { PrefEnc type /nametype eq
+ { PrefEnc .findencoding /PrefEnc exch def
+ }
+ if
+ }
+ if
+ dup /FDepVector known
+ { /FDepVector [ FDepVector
+ { .FontDirectory 1 index .knownget
+ { exch pop }
+ { ccfonts 1 index .knownget
+ { registerfont
+ }
+ { Fontmap 1 index known
+ { findfont }
+ { pop NullFont }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ forall ] readonly def
+ }
+ if
+ end
+ % Use the value of definefont appropriate at run-time, not bind-time
+ /definefont load exec
+ } bind odef
+% Bind recursive call (bind descends into oparrays: feature!)
+/registerfont dup load bind def
+
+/.loadinitialfonts {
+ //.loadinitialfonts exec
+ NOCCFONTS not {
+ /ccfonts mark
+ 0 1 null .getccfont 1 sub { .getccfont dup /FontName get exch } for
+ .dicttomark def
+ % Make sure these fonts are registered as "resources".
+ currentfile {
+ pop ccfonts {
+ .FontDirectory 2 index known { pop pop } { registerfont pop } ifelse
+ } forall
+ } .execasresource
+ currentdict /ccfonts .undef
+ } if
+} bind def
+
+currentdict /registerfont .undef
diff --git a/Master/tlpkg/tlgs/lib/gs_ce_e.ps b/Master/tlpkg/tlgs/lib/gs_ce_e.ps
new file mode 100644
index 00000000000..33ed1751b83
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ce_e.ps
@@ -0,0 +1,47 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ce_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Adobe CE (Central European) encoding vector.
+% We define it by differences from the ISOLatin1Encoding vector.
+/CEEncoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+% 047
+ /quotesingle
+ISOLatin1Encoding 40 56 getinterval aload pop
+% 140
+ /grave
+ISOLatin1Encoding 97 31 getinterval aload pop
+% 20x
+ /.notdef /.notdef /quotesinglbase /.notdef /quotedblbase /ellipsis /dagger /daggerdbl
+ /.notdef /perthousand /Scaron /guilsinglleft /Sacute /Tcaron /Zcaron /Zacute
+ /.notdef /grave /acute /circumflex /tilde /bullet /endash /emdash
+ /.notdef /trademark /scaron /guilsinglright /sacute /tcaron /zcaron /zacute
+% 24x
+ /space /caron /breve /Lslash /currency /Aogonek /brokenbar /section
+ /dieresis /copyright /Scommaaccent /guillemotleft /logicalnot /hyphen /registered /Zdotaccent
+ /degree /plusminus /ogonek /lslash /acute /mu /paragraph /periodcentered
+ /cedilla /aogonek /scommaaccent /guillemotright /Lcaron /hungarumlaut /lcaron /zdotaccent
+% 30x
+ /Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
+ /Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
+ /Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+ /Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcommaaccent /germandbls
+% 34x
+ /racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
+ /ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
+ /dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
+ /rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcommaaccent /dotaccent
+256 packedarray .defineencoding
diff --git a/Master/tlpkg/tlgs/lib/gs_cet.ps b/Master/tlpkg/tlgs/lib/gs_cet.ps
new file mode 100644
index 00000000000..83d91c7b4ce
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cet.ps
@@ -0,0 +1,61 @@
+%!PS
+% Set defaults for Ghostscript to match Adobe CPSI behaviour for CET
+% $Id: gs_cet.ps 7723 2007-02-20 23:35:19Z alexcher $
+
+% do this in the server level so it is persistent across jobs
+true 0 startjob not {
+ (*** Warning: CET startup is not in server default) = flush
+} if
+
+300 .sethiresscreen % needed for language switch build since it
+ % processes gs_init.ps BEFORE setting the resolution
+
+0 array 0 setdash % CET 09-08 wants local setdash
+
+currentglobal true setglobal
+
+{
+ systemdict dup dup dup
+ /version (3017.102) put % match CPSI 3017.102
+ /product (PhotoPRINT SE 5.0v2) put % match CPSI 3017.102
+ /revision 0 put % match CPSI 3017.103 Tek shows revision 5
+ /serialnumber 233640 put % match CPSI 3017.102 Tek shows serialnumber 1401788461
+ systemdict /deviceinfo undef % for CET 20-23-1
+} superexec
+
+{ } bind dup
+setblackgeneration
+setundercolorremoval
+0 array cvx readonly dup dup dup setcolortransfer
+
+% CPSI doesn't define "Localization" resource.
+/Localization /Category undefineresource
+
+% Some previously compile time options such as USE_ADOBE_CMYK_RGB
+% and GS_CHAR_FILL are now dynamic. Force CPSI compatibility.
+true .setCPSImode
+
+setglobal
+
+% Remove all but 'letter' page size
+<<
+currentpagedevice /InputAttributes get
+1 1 2 index length 1 sub {
+ 1 index exch undef
+} for
+/InputAttributes exch
+>>
+setpagedevice
+
+% Patch setsmoothness, currentsmoothness for a better view of shadings :
+userdict /.smoothness currentsmoothness put
+/setsmoothness {
+ dup type dup /integertype eq exch /realtype eq or {
+ userdict /.smoothness 3 2 roll cvr put
+ } {
+ /setsmoothness .systemvar /typecheck signalerror
+ } ifelse
+} bind odef
+/currentsmoothness { userdict /.smoothness get } bind odef % for 09-55.PS, 09-57.PS .
+
+false 0 startjob pop % re-enter encapsulated mode
diff --git a/Master/tlpkg/tlgs/lib/gs_cff.ps b/Master/tlpkg/tlgs/lib/gs_cff.ps
new file mode 100644
index 00000000000..6fcf80358f3
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cff.ps
@@ -0,0 +1,779 @@
+% Copyright (C) 1997, 1998, 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cff.ps 6883 2006-06-29 04:07:16Z alexcher $
+% Loader for CFF (compressed) fonts, including OpenType CFFs.
+% The following are not implemented yet:
+% Deleted entries in the Name Index
+% Embedded PostScript
+% Multiple Master fonts
+% Chameleon fonts
+% Synthetic fonts
+
+% ---------------- Font loading machinery ---------------- %
+
+% Augment the FONTPATH machinery so it recognizes OpenType CFF font sets.
+
+/.scanfontheaders where {
+ pop /.scanfontheaders [
+ .scanfontheaders aload pop (OTTO*)
+ ] def
+} if
+
+% Load a font file that might be an OpenType CFF font set.
+
+% <file> .loadfontfile -
+/.loadnonottofontfile /.loadfontfile load def
+/.loadfontfile {
+ dup 4 string .peekstring pop (OTTO) eq {
+ % If this is a font at all, it's an OpenType CFF font set.
+ .init_otto_font_file
+ % Use a random FontSet resource name. ****** WRONG ******
+ realtime rand xor =string cvs exch false
+ ReadData
+ } {
+ % Not a TrueType font.
+ .loadnonottofontfile
+ } ifelse
+} bind def
+
+% <file> .init_otto_font_file <file>
+/.init_otto_font_file {
+ /FontSetInit /ProcSet findresource begin
+ 2 dict begin
+ /f exch def /cff null def
+ card32 pop card16 6 { next pop } repeat dup {
+ % Stack: numtables tablesleft
+ dup 0 eq {
+ pop pop /.loadottofontfile cvx /invalidfont signalerror
+ } if
+ f 4 string readstring pop (CFF ) eq { sub exit } if
+ f 12 string readstring pop pop 1 sub % skip to next table
+ } loop
+ % Stack: tablesread
+ card32 pop card32 card32
+ % Stack: tablesread start length
+ exch 3 -1 roll 1 add 16 mul 12 add sub
+ f exch subfilefilter flushfile % skip to start
+ f exch subfilefilter end
+} bind def
+
+30 dict begin
+
+% ---------------- Standard strings (actually names) ---------------- %
+
+/StandardStrings mark
+ % The initial StandardStrings that that denote characters are
+ % defined as a pseudo-Encoding.
+% 0
+ /CFFStandardStrings .findencoding aload pop
+% 379
+ (001.000)
+% 380
+ (001.001) (001.002) (001.003) /Black /Bold
+ /Book /Light /Medium /Regular /Roman
+ /Semibold
+.packtomark def
+
+% ---------------- Standard encodings ---------------- %
+
+/StandardEncodings [
+
+% StandardEncoding
+mark
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
+ 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
+ 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
+ 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
+ 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
+ 0 111 112 113 114 0 115 116 117 118 119 120 121 122 0 123
+ 0 124 125 126 127 128 129 130 131 0 132 133 0 134 135 136
+ 137 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 138 0 139 0 0 0 0 140 141 142 143 0 0 0 0
+ 0 144 0 0 0 145 0 0 146 147 148 149 0 0 0 0
+.packtomark
+
+% ExpertEncoding
+mark
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 1 229 230 0 231 232 233 234 235 236 237 238 13 14 15 99
+ 239 240 241 242 243 244 245 246 247 248 27 28 249 250 251 252
+ 0 253 254 255 256 257 0 0 0 258 0 0 259 260 261 262
+ 0 0 263 264 265 0 266 109 110 267 268 269 0 270 271 272
+ 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
+ 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 304 305 306 0 0 307 308 309 310 311 0 312 0 0 313
+ 0 0 314 315 0 0 316 317 318 0 0 0 158 155 163 319
+ 320 321 322 323 324 325 0 0 326 150 164 169 327 328 329 330
+ 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
+ 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
+ 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
+.packtomark
+
+] readonly def
+
+% ---------------- Standard Charsets ---------------- %
+
+% We include an explicit 0 at the beginning of each charset.
+
+/StandardCharsets [
+
+% ISOAdobe
+mark
+ 0
+ 1 1 228 { } for
+.packtomark
+
+% Expert
+mark
+ 0
+ 1 229 230 231 232 233 234 235 236 237 238 13 14 15 99 239
+ 240 241 242 243 244 245 246 247 248 27 28 249 250 251 252 253
+ 254 255 256 257 258 259 260 261 262 263 264 265 266 109 110 267
+ 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
+ 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
+ 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
+ 316 317 318 158 155 163 319 320 321 322 323 324 325 326 150 164
+ 169 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
+ 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
+ 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373
+ 374 375 376 377 378
+.packtomark
+
+% ExpertSubset
+mark
+ 0
+ 1 231 232 235 236 237 238 13 14 15 99 239 240 241 242 243
+ 244 245 246 247 248 27 28 249 250 251 253 254 255 256 257 258
+ 259 260 261 262 263 264 265 266 109 110 267 268 269 270 272 300
+ 301 302 305 314 315 158 155 163 320 321 322 323 324 325 326 150
+ 164 169 327 328 329 330 331 332 333 334 335 336 337 338 339 340
+ 341 342 343 344 345 346
+.packtomark
+
+] readonly def
+
+% ---------------- Font loading ---------------- %
+
+% ------ Utilities ------ %
+
+/advance { % <n> advance -
+ f cff eq { pos add /pos exch store } { pop } ifelse
+} bind def
+/next { % - next <byte>
+ f read {
+ 1 advance
+ CFFDEBUG { ( ) print dup = } if
+ } if
+} bind def
+/next2 { % - next2 <byte1> <byte2>
+ f read {
+ f read {
+ 2 advance
+ CFFDEBUG { ( ) print 1 index =only (,) print dup = } if
+ } {
+ 1 advance
+ CFFDEBUG { ( ) print dup = } if
+ } ifelse
+ } if
+} bind def
+/nextstring { % <length> nextstring <string>
+ dup 0 eq {
+ pop ()
+ } {
+ string f exch readstring pop dup length advance
+ CFFDEBUG { ( ) print dup == } if
+ } ifelse
+} bind def
+/card8 % - card8 <card8>
+ /next load
+def
+/card16 { % - card16 <card16>
+ next2 exch 8 bitshift add
+} bind def
+/card32 { % - card32 <card32>
+ card16 16 bitshift card16 add
+} bind def
+/offsetprocs [
+ /card8 load
+ /card16 load
+ { card8 16 bitshift card16 add } bind
+ /card32 load
+] readonly def
+/offsetproc { % <offsize> offsetproc <proc>
+ 1 sub //offsetprocs exch get
+} bind def
+/offset { % <offsize> offset <offset>
+ offsetproc exec
+} bind def
+/sid % - <sid> sid
+ /card16 load
+def
+/Index { % <name> Index <name> <array>
+ CFFDEBUG { (% reading Index: ) print dup = } if
+ mark card16 dup 0 ne {
+ 1 exch next offsetproc dup exec pop exch {
+ dup exec dup 4 -1 roll sub 3 1 roll exch
+ } repeat pop
+ } if pop .packtomark
+ CFFDEBUG { (% Index lengths = ) print dup === } if
+ [ exch { nextstring } forall ] readonly
+} bind def
+/tokens { % - tokens <num1> ... <op#> (op# = 12 means EOF)
+ {
+ f read not { 12 exit } if
+ CFFDEBUG { (..) print dup = } if
+ 1 advance
+ dup 12 eq { pop next 32 add exit } if
+ dup 28 lt { exit } if
+ dup 32 lt {
+ 28 sub {
+ { card16 32768 xor 32768 sub }
+ { 4 offset dup 16#7fffffff gt { -1 32 bitshift add } if }
+ { tokenreal }
+ { 31 exit }
+ } exch get exec
+ } {
+ dup 247 lt {
+ 139 sub
+ } {
+ 247 sub {
+ { next 108 add }
+ { next 364 add }
+ { next 620 add }
+ { next 876 add }
+ { next 108 add neg }
+ { next 364 add neg }
+ { next 620 add neg }
+ { next 876 add neg }
+ % 255 is deliberately omitted and will cause a rangecheck
+ } exch get exec
+ } ifelse
+ } ifelse
+ } loop
+} bind def
+/tokenbuf 100 string def
+/tokenput { % <index> <str> tokenput <index+length>
+ dup length 3 1 roll
+ tokenbuf 2 index 3 -1 roll putinterval add
+} bind def
+/tokenrealarray [
+ (0)(1)(2)(3)(4)(5)(6)(7)(8)(9)(.)(E)
+ (E-)
+ () % ignore the invalid value
+ (-)
+ { exit } bind
+] readonly def
+/tokenreal { % - tokenreal <float>
+ 0 {
+ next exch 1 index -4 bitshift tokenrealarray exch get exec tokenput
+ % We must leave the byte on the stack temporarily so that
+ % the exit will see a consistent stack state.
+ 1 index 15 and tokenrealarray exch get exec tokenput exch pop
+ } loop
+ tokenbuf 0 3 -1 roll getinterval cvr exch pop
+} bind def
+/Dict { % <opsdict> Dict -
+ /opdict exch store {
+ mark tokens
+ CFFDEBUG { (tokens: ) print ] dup === mark exch aload pop } if
+ opdict exch .knownget { exec } if cleartomark
+ } loop cleartomark
+} bind def
+/idstring { % <sid> idstring <string|name>
+ dup 391 lt { //StandardStrings } { 391 sub strings } ifelse exch get
+} bind def
+/idname { % <sid> idname <name>
+ idstring dup type /nametype ne { cvn } if
+} bind def
+/subfilefilter { % <file> <length> subfilefilter <filter>
+ % SubFileDecode interprets a length of 0 as infinite.
+ dup 0 le { pop pop () 0 } if () /SubFileDecode filter
+} bind def
+
+% ------ Top dictionary ------ %
+
+/offput { % <offset> <proc> offput -
+ 1 index 0 le
+ CFFDEBUG { dup { (not ) print } if (queued: ) print 2 index =only ( ) print 1 index === } if
+ { pop pop
+ }
+ { currentdict exch aload length 1 add packedarray cvx
+ offsets 3 1 roll put
+ }
+ ifelse
+} bind def
+/queueput { % <font> <proc> queueput -
+ 16#7fffffff offsets { pop .min } forall
+ pos sub nextstring
+ 3 1 roll aload length 2 add packedarray cvx
+ [ queued aload pop counttomark 2 add -1 roll ]
+ /queued exch store
+} bind def
+/printvk { % <value> <key> printvk <value> <key>
+ CFFDEBUG { (\t% ) print dup =only ( = ) print 1 index === } if
+} bind def
+/xxput { % <value> <key> <dict> xxput -
+ 3 1 roll exch put
+} bind def
+/putfi { % <value> <key> putfi -
+ printvk FontInfo xxput
+} bind def
+/xdef { % <value> <key> xdef -
+ exch def
+} bind def
+/pxdef { % <value> <key> pxdef -
+ printvk xdef
+} bind def
+/topdictops mark
+ 12 { CFFDEBUG { (\t% EOD) = } if exit }
+ 0 { idstring /version putfi }
+ 1 { idstring /Notice putfi }
+ 32 { idstring /Copyright putfi }
+ 2 { idstring /FullName putfi }
+ 3 { idstring /FamilyName putfi }
+ 4 { idstring /Weight putfi }
+ 33 { 0 ne /isFixedPitch putfi }
+ 34 { /ItalicAngle putfi }
+ 35 { /UnderlinePosition putfi }
+ 36 { /UnderlineThickness putfi }
+ 37 { /PaintType pxdef }
+ 38 { /FontType pxdef } % actually CharstringType
+ 39 { counttomark array astore /FontMatrix pxdef }
+ 13 { /UniqueID pxdef }
+ 5 { counttomark array astore /FontBBox pxdef }
+ 40 { /StrokeWidth pxdef }
+ 14 { counttomark array astore /XUID pxdef }
+ 15 {
+ /charset printvk pop
+ dup StandardCharsets length lt {
+ StandardCharsets exch get /charset xdef
+ } {
+ { queuecharset } offput
+ } ifelse
+ }
+ 16 {
+ /Encoding printvk pop
+ dup StandardEncodings length lt {
+ /Encoding xdef
+ } {
+ { queueEncoding } offput
+ } ifelse
+ }
+ 17 { { readCharStrings } offput }
+ 18 { exch /readPrivate cvx 2 packedarray offput }
+ % CIDFont operators
+ 62 { % ROS, must be first in a CIDFont
+ currentdict /FontType undef
+ currentdict /Encoding undef
+ currentdict /FontMatrix undef
+ /CIDFontVersion 0 def
+ /CIDFontRevision 0 def
+ /CIDFontType 0 def
+ /CIDCount 8720 def % Default value defined in CFF spec.
+ 3 dict begin
+ /Supplement pxdef
+ idstring /Ordering pxdef
+ idstring /Registry pxdef
+ /CIDSystemInfo currentdict end def
+ }
+ 63 { /CIDFontVersion pxdef }
+ 64 { /CIDFontRevision pxdef }
+ 65 { /CIDFontType pxdef }
+ 66 { /CIDCount pxdef }
+ 67 { /UIDBase pxdef }
+ 68 { { readFDArray } offput }
+ 69 { { readFDSelect } offput }
+ % This operator only appears in a FDArray element.
+ % We don't really need it, so ignore an error.
+ 70 { { idstring } .internalstopped { pop pop } { /FontName pxdef } ifelse }
+.dicttomark readonly def
+
+% readcharset and readFDSelect may require the length of CharStringArray,
+% but these structures may occur in the file before the CharStrings.
+% If that happens, use a hack: assume that all the data up to the next
+% queued read should be read.
+
+/charstringcount { % <font> charstringcount <count> true
+ % <font> charstringcount <length> false
+ /CharStringArray .knownget {
+ length true
+ } {
+ % Hack: look for the next queued read.
+ 16#7fffffff offsets { pop .min } forall
+ pos sub false
+ } ifelse
+} bind def
+
+/readCharStrings { % <font> readCharStrings -
+ /CharStringArray Index put
+} bind def
+
+% ------ Charsets and encodings ------ %
+
+% Note: formats 1 and 2 can overflow the operand stack.
+% We'll fix this if it ever becomes necessary.
+/charsetcount {
+ charstringcount { 1 sub } { 2 idiv } ifelse
+} bind def
+/charsetformats [
+{ [ 0 3 -1 roll charsetcount { sid } repeat ]
+} bind
+{ [ 0 3 -1 roll charsetcount {
+ dup 0 eq { pop exit } if
+ sid card8 1 add 2 index .min { exch 1 sub 1 index 1 add } repeat pop
+ } loop ]
+} bind
+{ [ 0 3 -1 roll charsetcount {
+ dup 0 eq { pop exit } if
+ sid card16 1 add 2 index .min { exch 1 sub 1 index 1 add } repeat pop
+ } loop ]
+} bind
+] readonly def
+/queuecharset { % <font> queuecharset -
+ { readcharset } queueput
+} bind def
+/readcharset { % <data> <font> readcharset -
+ begin 0 () /SubFileDecode filter /f exch store
+ charsetformats next get currentdict exch exec /charset exch def end
+} bind def
+
+/encodingformats [
+{ 1 1 next { next exch Encoding 3 1 roll put } for
+} bind
+{ 1 next {
+ next next 1 add {
+ % Stack: gid code
+ Encoding 1 index 3 index put
+ exch 1 add exch 1 add
+ } repeat pop
+ } repeat pop
+} bind
+] readonly def
+/queueEncoding { % <font> queueEncoding -
+ { readEncoding } queueput
+} bind def
+/readEncoding { % <data> <font> readEncoding -
+ begin 0 () /SubFileDecode filter /f exch store
+ /Encoding [ 256 { /.notdef } repeat ] def
+ next encodingformats 1 index 127 and get exec
+ 128 ge {
+ % Read supplementary encodings.
+ next {
+ Encoding next sid idname put
+ } repeat
+ } if end
+} bind def
+
+% ------ FDArray and FDSelect ------ %
+
+/readFDArray { % <font> readFDArray -
+ /FDarray Index exch pop exch
+ 2 dict begin /f null def begin
+ [ exch {
+ dup length subfilefilter /f exch store
+ 10 dict begin
+ /FontType 2 def
+ /PaintType 0 def
+ /FontMatrix [0.001 0 0 0.001 0 0] def
+ /Private 20 dict def
+ //topdictops Dict currentdict end
+ } forall ] /FDArray xdef end end
+} bind def
+
+/fdselectformats [
+% Note: this procedure can overflow the operand stack.
+% We'll fix this if it ever becomes necessary.
+{ [ exch charstringcount pop { card8 } repeat ] } bind % Format 0
+{ /FDSelect cvx /invalidfont signalerror } bind % Format 1
+dup % Format 2
+% The following procedure does not use excessive op-stack space.
+{ pop 65535 array card16 card16 exch % Format 3
+ { % Stack: array previndex
+ card8 card16
+ exch 1 index 4 -1 roll
+ exch 1 exch 1 sub
+ { 3 index exch 2 index put } for pop
+ } repeat
+ % now resize the array to the final index.
+ 0 exch getinterval
+} bind
+] readonly def
+
+/readFDSelect { % <font> readFDSelect -
+ begin fdselectformats next get currentdict exch exec /FDSelect exch def end
+} bind def
+
+
+% ------ Private dictionary ------ %
+
+/deltarray { % -mark- <num1> ... deltarray <num1'> ...
+ 0 counttomark 1 sub { counttomark -1 roll add dup } repeat pop
+ counttomark array astore
+} bind def
+
+/privatedictops mark
+ 12 { CFFDEBUG { (\t% EOD) = } if exit }
+ 6 { deltarray /BlueValues pxdef }
+ 7 { deltarray /OtherBlues pxdef }
+ 8 { deltarray /FamilyBlues pxdef }
+ 9 { deltarray /FamilyOtherBlues pxdef }
+ 41 { /BlueScale pxdef }
+ 42 { /BlueShift pxdef }
+ 43 { /BlueFuzz pxdef }
+ 10 { 1 array astore /StdHW pxdef }
+ 11 { 1 array astore /StdVW pxdef }
+ 44 { deltarray /StemSnapH pxdef }
+ 45 { deltarray /StemSnapV pxdef }
+ 46 { 0 ne /ForceBold pxdef }
+ 47 { /ForceBoldThreshold pxdef }
+ 48 { /lenIV pxdef }
+ 49 { /LanguageGroup pxdef }
+ 50 { /ExpansionFactor pxdef }
+ 51 { /initialRandomSeed pxdef }
+ 19 { PrivateStart add { readSubrs } offput }
+ 20 { /defaultWidthX pxdef }
+ 21 { /nominalWidthX pxdef }
+ % Multiple Master fonts only
+ 59 { /NDV pxdef }
+ 60 { /CDV pxdef }
+ 61 { /lenBuildCharArray pxdef }
+.dicttomark readonly def
+
+/readPrivate { % <font> <size> readPrivate -
+ 2 dict begin
+ /PrivateStart pos def
+ f 3 1 roll exch 1 index f exch subfilefilter /f exch store
+ dup /FontType get exch
+ /Private get begin
+ % Default lenIV to -1 even for Type 1 CharStrings.
+ 2 ne { /lenIV -1 def } if
+ //privatedictops Dict end
+ exch /f exch store advance
+ end
+} bind def
+
+/readSubrs { % <font> readSubrs -
+ /Subrs Index put
+} bind def
+
+% ------ Main program ------ %
+
+% Clean up after finishing a font.
+/cleanupFont { % (currentdict) cleanupFont -
+ % Remove unwanted entries.
+ currentdict /charset undef
+ currentdict /CharStringArray undef
+} bind def
+
+% Update the Encoding and CharStrings for a real font.
+/finishFont { % (currentdict) finishFont -
+ % Construct the real Encoding.
+ % The value of Encoding is either a number, for predefined
+ % encodings, or an array of mixed GIDs and names.
+ /Encoding mark Encoding
+ CFFDEBUG { (Encoding: ) print dup === flush } if
+ dup type /integertype eq {
+ StandardEncodings exch get { idname } forall
+ } {
+ {
+ dup type /integertype eq { charset exch get idname } if
+ } forall
+ } ifelse .packtomark def
+ % Construct the CharStrings.
+ % Note that they may only correspond to an initial
+ % subset of the charset.
+ /CharStrings charset length CharStringArray length .min dict def
+ CFFDEBUG {
+ charset length =only ( charset ) print
+ CharStringArray length =only ( CharStringArray) =
+ charset == flush
+ } if
+ 0 1 CharStrings maxlength 1 sub {
+ dup CharStringArray exch get
+ exch charset exch get idstring CharStrings xxput
+ } for
+ cleanupFont
+} bind def
+
+% Replace CharStrings with GlyphDirectory for a CIDFont;
+% Move GlobalSubrs to descendent fonts.
+/finishCIDFont { % (currentdict) finishCIDFont -
+ % Construct the GlyphDirectory, similar to CharStrings.
+ /FDBytes FDArray length 1 gt { 1 } { 0 } ifelse def
+ /GlyphDirectory charset length CharStringArray length .min dict def
+ CFFDEBUG {
+ charset length =only ( charset ) print
+ CharStringArray length =only ( CharStringArray) =
+ charset == flush
+ } if
+ 0 1 GlyphDirectory maxlength 1 sub {
+ dup CharStringArray exch get
+ % If there is more than one FDArray entry, add the font
+ % index to the beginning of each charstring.
+ FDBytes 1 eq {
+ FDSelect 2 index get
+ 1 string dup 0 4 -1 roll put exch concatstrings
+ } if
+ exch charset exch get GlyphDirectory xxput
+ } for
+
+ Private /GlobalSubrs .knownget {
+ FDArray {
+ /Private get /GlobalSubrs 2 index put
+ } forall
+ pop
+ Private /GlobalSubrs undef
+ } if
+
+ % Clean up.
+ currentdict /FDSelect undef
+ cleanupFont
+} bind def
+% We need to pass the file as a parameter for the sake of the PDF
+% interpreter. Also for the sake of PDF, a flag forces the font
+% to be defined as <resname> instead of the name embedded in the data.
+% This is needed for subsetted fonts; it is valid if the CFF
+% contains only a single font.
+/StartData { % <resname> <nbytes> StartData -
+ currentfile exch subfilefilter false ReadData
+} bind def
+/ReadData { % <resname> <file> <forceresname> ReadData -
+
+ % Initialize.
+
+ 30 dict begin
+ /forceresname exch def
+ /cff exch def
+ /pos 0 def
+ /resname exch cvlit def
+ /DEBUG CFFDEBUG def % bring the binding closer
+
+ % Read the header.
+
+ /f cff def
+ /vmajor next def
+ /vminor next def
+ /hdrsize next def
+ /aoffsize next def
+
+ % Read the Indexes.
+
+ /names Index def
+ /topdicts Index def
+ /strings Index def
+ /gsubrs Index def
+
+ % Read the top Dicts.
+
+ /offsets 50 dict def
+ /queued [] def
+ /opdict null def % reserve a slot
+ /fonts [ topdicts {
+ 0 () /SubFileDecode filter /f exch def
+ 40 dict begin
+ % Preload defaults that differ from PostScript defaults,
+ % or that are required.
+ /FontType 2 def
+ /PaintType 0 def
+ /FontMatrix [0.001 0 0 0.001 0 0] def
+ /charset StandardCharsets 0 get def
+ /Encoding 0 def
+ /FontInfo 10 dict
+ dup /UnderlinePosition -100 put
+ dup /UnderlineThickness 50 put
+ def
+ /Private 20 dict
+ gsubrs length 0 ne { dup /GlobalSubrs gsubrs put } if
+ def
+ //topdictops Dict
+ currentdict end
+ } forall ] def
+
+ % Read other tables with queued offsets.
+ % We process these in order so we can advance if needed.
+ % The CFF file may not be positionable.
+ { % outer loop since offsets may be updated when processing
+ CFFDEBUG { (offsets: ) print [ offsets { pop } forall ] == } if
+ [ offsets { pop } forall ] { lt } .sort % process in order of appearance
+ {
+ /f cff def
+ CFFDEBUG { (queued offset: ) print dup =print flush (, current pos=) print pos = } if
+ dup pos ne { dup pos sub nextstring pop } if % negative advance will cause error
+ offsets exch 2 copy get 3 1 roll undef
+ CFFDEBUG { (exec queued: ) print dup == } if
+ exec
+ } forall
+ offsets length 0 eq { exit } if
+ } loop
+
+ % Process out-of-order tables.
+
+ CFFDEBUG { queued length =only ( queued) = flush } if
+ queued { exec } forall
+
+ % Update Encoding and CharStrings.
+
+ fonts {
+ begin
+ currentdict /CIDFontType known { finishCIDFont } { finishFont } ifelse
+ end
+ } forall
+
+ % Wrap up.
+
+ resname mark 0 1 fonts length 1 sub {
+ CFFDEBUG { dup =only ( ) print flush } if
+ dup names exch get
+ forceresname { pop resname } if
+ CFFDEBUG { dup == flush } if
+ exch fonts exch get
+ dup /CIDFontType known {
+ % This is a CIDFont.
+ dup /CIDFontName 3 index put
+ 1 index exch /CIDFont defineresource
+ } {
+ % This is a font.
+ dup /FontName 3 index put
+ 1 index exch definefont
+ } ifelse
+ } for .dicttomark
+ end % temporary dict
+ end % FontSetInit ProcSet
+ /FontSet defineresource pop
+
+} bind def
+
+% ---------------- Resource category definition ---------------- %
+
+currentdict end readonly
+
+languagelevel exch 2 .setlanguagelevel
+
+/FontSet /Generic /Category findresource dup length dict .copydict
+/Category defineresource pop
+
+/FontSetInit exch /ProcSet defineresource pop
+
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_cidcm.ps b/Master/tlpkg/tlgs/lib/gs_cidcm.ps
new file mode 100644
index 00000000000..5a6e0e2d98e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cidcm.ps
@@ -0,0 +1,443 @@
+% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cidcm.ps 8022 2007-06-05 22:23:38Z giles $
+% Extending Font resource category with CIDFont-CMap fonts.
+
+languagelevel 2 .setlanguagelevel currentglobal true setglobal
+
+
+% In the comments below, 'CSI' is an abbreviation/acronym for CIDSystemInfo.
+% We pre-scan resource files to retrieve the CSI from them.
+% First we define a hidden procset .prs_dict containing
+% necessary variables and procedures.
+% Then we redefine the old /Font category using this procset.
+
+% We maintain internal caches for the CSI values retrieved from
+% resource files. This supposes that document doesn't uninstall
+% resource files. To disable caching, set enable_cache to false.
+
+% We assume that names starting with '.prs' do not appear in resource files.
+% If this causes any problem, this prefix should be systematically changed
+% in this file. ('prs' is an abbreviation for 'prescan'.)
+
+25 dict begin
+
+% Define local variables :
+
+/.prs_dict currentdict def % self-reference (constant)
+/.prs_empty 0 dict readonly def
+/path_buffer 8192 string def
+/name_buffer 1024 string def
+/minus (-) 0 get def % character code constant for '-'
+/period (.) 0 get def % character code constant for '.'
+/CMap 10 dict def % CSI cache for CMaps
+/CIDFont 10 dict def % CSI cache for CIDFonts
+/enable_cache true def % set false to disable cache
+
+% The folloving variables are just placeholders for ones to be set
+% dynamically :
+/.prsFile 0 def % file to prescan
+/.prsResult 0 def % result of prescan
+/.prsDictCount 0 def % save the dictionary stack depth
+
+% Define a dummy CIDInit procset to use while pre-scanning :
+
+/DummyCIDInit 15 dict
+begin
+
+ /begincmap {} def
+ /usecmap {pop} bind def
+
+ {stop} bind
+ [ /begincodespacerange /endcodespacerange /beginnotdefchar /endnotdefchar
+ /beginnotdefrange /endnotdefrange /begincidchar /endcidchar /begincidrange
+ /endcidrange /endcmap /usefont /StartData
+ ] {
+ 1 index def
+ } bind forall
+ pop
+
+currentdict end def
+
+% Define a local 'findresource' for pre-scanning :
+% (it returns the dummy CIDInit instead of the regular CIDInit ProcSet)
+
+/findresource { % <InstName> <CatName> findresource <inst>
+ 2 copy /ProcSet eq exch % /InstName /CatName bool /InstName
+ /CIDInit eq and {
+ pop pop //DummyCIDInit
+ } {
+ //findresource exec
+ } ifelse
+} bind def
+
+% Define procedures for pre-scanning :
+
+/StopIfCSIDefined { % - StopIfCSIDefined -
+
+ % Check if the dictionary stack contains a dictionary containing /CIDSystemInfo.
+ % The search is limited to the top .prsDictCount dictionaries in the stack.
+ % If so, retrieve the CSI, and execute stop to terminate the pre-scanning of the file.
+ % Otherwise, do nothing, so the pre-scanning continues.
+
+ countdictstack //.prs_dict /.prsDictCount get sub dup {
+ currentdict /CIDSystemInfo .knownget {
+ //.prs_dict exch /.prsResult exch put
+ stop
+ } if
+ currentdict exch end
+ } repeat {
+ begin
+ } repeat
+} bind def
+
+/PrescanFile { % - PrescanFile -
+ { //.prs_dict /.prsFile get token {
+ dup type % token type
+ dup /nametype eq exch /operatortype eq or {
+ dup xcheck {
+ exec
+ //StopIfCSIDefined exec
+ } if
+ } if
+ } {
+ stop
+ } ifelse
+ } loop
+} bind odef
+
+/GetCIDSystemInfoFromFile { % <file> GetCIDSystemInfoFromFile <CSI>
+
+ % This procedure reads resource files with 'token',
+ % executing the tokens untill /CIDSystemInfo appears to be defined.
+ % Normally the resource file creates a new dictionary on
+ % dictionary stack and defines /CIDSystemInfo in it.
+ %
+ % Returns an empty dictionary if no CIDSystemInfo is found.
+
+ RESMPDEBUG { (cidcm GetCIDSystemInfoFromFile beg) = } if
+ //.prs_dict begin
+ /.prsFile exch def
+ /.prsResult //.prs_empty def
+ /.prsDictCount countdictstack def
+ RESMPDEBUG { (cidcm GetCIDSystemInfoFromFile will PrescanFile.) = } if
+ { //PrescanFile } stopped pop
+ //.prs_dict /.prsResult get
+ end
+ RESMPDEBUG { (cidcm GetCIDSystemInfoFromFile end) = } if
+} bind def
+
+/GetCIDSystemInfo { % <InstName> <CatName> GetCIDSystemInfo <CSI>
+
+ % Retrieve CSI, using caches.
+
+ RESMPDEBUG { (cidcm GetCIDSystemInfo beg) = } if
+ /Category findresource begin % /InstName
+ dup ResourceStatus
+ {
+ pop 2 lt {
+ FindResource /CIDSystemInfo .knownget not {
+ //.prs_empty
+ } if % CSI
+ } { % /InstName
+ currentdict /GetCIDSystemInfoFromMap .knownget {
+ exec
+ } if
+ dup type /nametype eq
+ {
+ RESMPDEBUG { (cidcm GetCIDSystemInfo got a name.) = } if
+ //.prs_dict Category get % /InstName CSIs
+ dup 2 index known
+ //enable_cache and {
+ RESMPDEBUG { (cidcm GetCIDSystemInfo from cache.) = } if
+ exch get % CSI
+ } {
+ RESMPDEBUG { (cidcm GetCIDSystemInfo from file.) = } if
+ exch % CSIs /InstName
+ dup //path_buffer ResourceFileName % CSIs /InstName (path)
+ RESMPDEBUG { (cidcm GetCIDSystemInfo from file ) print dup = } if
+ currentglobal exch true setglobal % CSIs /InstName g (path)
+ mark exch % CSIs /InstName g [ (path)
+ { (r) file % CSIs /InstName g [ file
+ //GetCIDSystemInfoFromFile exec % CSIs /InstName g [ CSI
+ } stopped {
+ cleartomark //.prs_empty
+ } {
+ exch pop
+ } ifelse % CSIs /InstName g CSI
+ exch setglobal % CSIs /InstName CSI
+ dup 4 1 roll % CSI CSIs /InstName CSI
+ put % CSI
+ RESMPDEBUG {
+ (cidcm GetCIDSystemInfo got from file : <<) print
+ dup { exch //=string cvs print ( ) print
+ //=string cvs print ( ) print
+ } forall
+ (>>) =
+ } if
+ } ifelse
+ } if
+ } ifelse
+ } {
+ pop //.prs_empty
+ } ifelse
+ end
+ RESMPDEBUG { (cidcm GetCIDSystemInfo end) = } if
+} bind def
+
+/IsCompatibleCSI { % <CSI-M> <CSI-F> IsCompatibleCSI <bool>
+
+ % The CSI in a CIDFont may be an array, a dict, or null.
+ % If it is an array, it must be of 1 element, which is a dict.
+ % In this case the dict is used for testing the compatibility.
+ % Two dicts are compatible iff they contain same /Ordering and /Registry.
+
+ exch % CSI-F CSI-M
+ { dup type /arraytype eq {
+ dup length 1 ne {
+ pop pop false exit
+ } if
+ 0 get
+ } if % CSI-F CSI-M
+ dup type /dicttype ne {
+ pop pop false exit
+ } if % CSI-F <<CSI-M>>
+ exch % <<CSI-M>> CSI-F
+ dup type /dicttype ne {
+ pop pop false exit
+ } if % <<CSI-M>> <<CSI-F>>
+ true % <<CSI-M>> <<CSI-F>> bEQ
+ [/Registry /Ordering] {
+ 2 index 1 index .knownget not {
+ 1234567
+ } if % <<CSI-M>> <<CSI-F>> bEQ /key vF
+ exch % <<CSI-M>> <<CSI-F>> bEQ vF /key
+ 4 index exch .knownget not {
+ 7654321
+ } if % <<CSI-M>> <<CSI-F>> bEQ vF vM
+ eq and % <<CSI-M>> <<CSI-F>> bEQ
+ } forall
+ exch pop exch pop % bEQ
+ exit
+ } loop
+} bind def
+
+/IsWellComposed { % <CIDFontName> <CMapName> IsWellComposed <bool>
+
+ % Check if the given CIDFont and CMap have compatible CSIs.
+ exch % /CMapName /CIDFontName
+ /CIDFont //GetCIDSystemInfo exec % /CMapName CSI-F
+ dup type /dicttype eq {
+ dup length 0 ne {
+ exch % CSI-F /CMapName
+ /CMap //GetCIDSystemInfo exec % CSI-F CSI-M
+ //IsCompatibleCSI exec % bool
+ } {
+ pop pop false
+ } ifelse
+ } {
+ pop pop false
+ } ifelse
+} bind def
+
+/IsComposedFont { % <FontName> IsComposedFont <CIDFontName> <CMapName> true
+ % <FontName> IsComposedFont false
+
+ % Check if the given font name may be decomposed into CIDFont.CMap, CIDFont-CMap
+ % or into CIDFont--CMap, such that CIDFont and CMap have compatible CSIs.
+ % FontName
+ dup type /stringtype ne {
+ //name_buffer cvs
+ } if % (FontName)
+ { dup length 2 sub -1 1 {
+ % (FontName) i
+ 2 copy get dup //minus eq exch //period eq or {
+ 2 copy 2 copy % (FontName) i (FontName) i (FontName) i
+ 2 copy get //minus eq {
+ 2 copy 1 sub get //minus eq {
+ 1 sub
+ } if
+ } if % (FontName) i (FontName) i (FontName) i0
+ 0 exch getinterval cvn % (FontName) i (FontName) i /CIDFontName
+ 3 1 roll % (FontName) i /CIDFontName (FontName) i
+ 1 add dup % (FontName) i /CIDFontName (FontName) i1 i1
+ 5 index length % (FontName) i /CIDFontName (FontName) i1 i1 l
+ exch sub getinterval cvn % (FontName) i /CIDFontName /CMapName
+ 2 copy //IsWellComposed exec { % (FontName) i /CIDFontName /CMapName
+ 4 2 roll pop pop % /CIDFontName /CMapName
+ stop
+ } if
+ pop pop pop
+ } {
+ pop
+ } ifelse % (FontName)
+ } for
+ pop
+ } stopped
+} bind def
+
+/ComposeName { % <CIDFont> <CMap> <scr> ComposeName <CIDFont-CMap>
+ dup dup 5 2 roll % (scr) (scr) /CIDFont /CMap (scr)
+ 3 2 roll exch cvs length dup % (scr) (scr) /CMap l0 l0
+ 4 -1 roll exch //minus put % (scr) /CMap l0
+ 1 add dup % (scr) /CMap l1 l1
+ 3 index dup length % (scr) /CMap l1 l1 (scr) L
+ 2 index sub % (scr) /CMap l1 l1 (scr) LT
+ 3 2 roll % (scr) /CMap l1 (scr) LT l1
+ exch getinterval % (scr) /CMap l1 (scrT)
+ 3 2 roll exch cvs length % (scr) l1 l2
+ add 0 exch getinterval % (CIDFont-CMap)
+} bind def
+
+% Redefine the /Font category with CIDFont-CMap construction :
+
+% The following code supposes that the following names are not
+% defined in the old /Font category dictionary :
+% /IsComposedFont, /IsWellComposed .
+
+
+/Font /Category findresource dup length dict copy begin
+
+/FindResource { % <InstName> FindResource <inst>
+ dup //ResourceStatus exec {
+ pop pop //FindResource exec
+ } {
+ dup //IsComposedFont exec { % /FontName /CIDFontName /CMapName
+ exch [ exch ] composefont % inst
+ } {
+ //FindResource exec
+ } ifelse
+ } ifelse
+} bind def
+
+/ResourceStatus { % <InstName> ResourceStatus <nStatus> <nSize> true
+ % <InstName> ResourceStatus false
+ dup //ResourceStatus exec {
+ 3 2 roll pop true % nStatus nSize true
+ } {
+ //IsComposedFont exec { % /CIDFontName /CMapName
+ /CMap resourcestatus { % /CIDFontName nStatusM nSizeM
+ exch pop exch % nSizeM /CIDFontName
+ /CIDFont resourcestatus { % nSizeM nStatusF nSizeF
+ exch pop % nSizeF nSizeM
+ dup 0 ge {
+ exch dup 0 ge {
+ add
+ } {
+ exch pop
+ } ifelse
+ } {
+ pop
+ } ifelse % nSize
+ 2 exch true % nStatus nSize true
+ } {
+ pop pop pop false % work around buggy resource file
+ } ifelse
+ } {
+ pop pop pop false % work around buggy resource file
+ } ifelse
+ } {
+ false
+ } ifelse
+ } ifelse
+} bind def
+
+/ResourceForAll { % <template> <proc> <scratch> ResourceForAll -
+
+ % We suppose that the resourceforall procedure does not
+ % define or install new fonts, CMaps, and/or CIDFonts.
+
+ % First we create 3 temporary dictionaries to store temporary data
+ % about fonts, CMaps and CIDFonts.
+ % These dictionaries must be created dynamically, to allow for a possible
+ % recursive call to resourceforall from the resourceforall procedure.
+ currentglobal false setglobal
+ 20 dict 20 dict 20 dict % (templ) proc (scr) g <<CIDFont>> <<CMap>> <<Fonts>>
+
+
+ % Store resource identifiers into local dictionaries
+ % A resource instance can have a key that is not a name or a string. In this
+ % case, resourceforall passes the key directly to proc instead of copying it
+ % into the scratch string. This case can arise only for a resource instance
+ % defined in virtual memory by a previous defineresource
+
+ % Discard non-string keys of CIDFont and CMap because <CIDFontName>-<CMapName>
+ % is only defined for names.
+
+ { /.DisableResourceOrdering pop % gs_resmp accesses this through execstack - don't remove !
+
+ 6 index [ 2 index {exch //null put} aload pop ] cvx bind 6 index //ResourceForAll exec
+
+ (*) [ 3 index {exch dup type /stringtype eq { cvn dup put } { pop pop } ifelse } aload pop
+ ] cvx bind 6 index /CMap resourceforall
+
+ (*) [ 4 index {exch dup type /stringtype eq { cvn dup put } { pop pop } ifelse } aload pop
+ ] cvx bind 6 index /CIDFont resourceforall
+
+ exit
+ } loop % This loop is a pattern for execstack_lookup - don't remove !
+ 4 -1 roll setglobal % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+
+ %% Make the list of fonts in the form (/Name status) :
+
+ % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+ dup {
+ pop dup
+ //ResourceStatus exec {
+ pop 2 index % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>> /Name nStatus <<Font>>
+ 3 1 roll put % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+ } {
+ pop
+ } ifelse
+ } forall % (templ) proc (scr) <<CIDFont>> <<CMap>> <<Fonts>>
+
+ %% Add CIDFont-CMap to it (filtering duplicates) :
+
+ 3 2 roll {
+ 3 index {
+ 3 1 roll % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap /CIDFont /CMap
+ 6 index //ComposeName exec % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap (Font)
+ dup 8 index .stringmatch {
+ cvn % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap /Font
+ dup 4 index exch known {
+ pop pop
+ } {
+ 2 index % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CMap /Font /CIDFont
+ 4 2 roll % (templ) proc (scr) <<CMap>> <<Font>> /Font /CIDFont /CIDFont /CMap
+ //IsWellComposed exec {
+ exch 2 index exch 2 put % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont
+ } {
+ exch pop
+ } ifelse
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ dup % (templ) proc (scr) <<CMap>> <<Font>> /CIDFont /CIDFont
+ } forall
+ pop pop % (templ) proc (scr) <<CMap>> <<Font>>
+ } forall % (templ) proc (scr) <<CMap>> <<Font>>
+ exch pop % (templ) proc (scr) <<Font>>
+ 4 3 roll pop % proc (scr) <<Font>>
+
+ % Make the enumerator and apply it :
+ /MappedCategoryRedefiner /ProcSet findresource /MakeResourceEnumerator get exec exec
+} bind def
+
+
+currentdict end /Font exch /Category defineresource pop
+end
+setglobal .setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_ciddc.ps b/Master/tlpkg/tlgs/lib/gs_ciddc.ps
new file mode 100644
index 00000000000..3d78d0ed0c6
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ciddc.ps
@@ -0,0 +1,214 @@
+% Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ciddc.ps 7873 2007-04-23 13:27:47Z leonardo $
+% Define Decoding and CIDDecoding resource categories and related procsets.
+
+languagelevel 2 .setlanguagelevel
+currentglobal true setglobal
+
+%----------------ParseDecoding procset----------------------------
+
+/ParseDecoding <<
+
+/Parse % <resource_name> <num_tokens> Parse -
+{ dict begin % /ResName
+ 0 % /ResName nCode
+ { currentfile token not {
+ exit
+ } if % /ResName nCode token
+ dup type /integertype eq { % /ResName nCode
+ exch pop
+ } {
+ 1 index def % /ResName nCode
+ } ifelse
+ } loop % /ResName nCode
+ pop % /ResName
+ currentdict end /Decoding % /ResName <<inst>> /Decoding
+ defineresource pop
+} bind
+
+>> /ProcSet defineresource pop
+
+%----------------Decoding category----------------------------
+
+/Generic /Category findresource dup length dict copy
+dup /InstanceType /dicttype put
+/Decoding exch /Category defineresource pop
+
+%----------------ParseCMap_Inverse procset----------------------------
+
+/ParseCMap_Inverse <<
+ /findresource { pop } bind
+ /defineresource { pop pop } bind
+ /dict {}
+ /def { pop pop } bind
+ /dup null
+ /begin { pop } bind
+ /end {}
+ /currentdict null
+ /CMapName null
+ /usecmap { pop } bind
+ /begincmap {}
+ /endcmap {}
+ /begincodespacerange { pop mark } bind
+ /endcodespacerange { cleartomark } bind
+ /beginnotdefrange { pop mark } bind
+ /endnotdefrange { cleartomark } bind
+ /beginbfchar { pop mark } bind
+ /endbfchar { pop mark } bind
+ /beginbfrange { begincidrange }
+ /endbfrange { endcidrange }
+ /begincidchar { beginbfchar }
+ /endcidchar { endbfchar }
+ /begincidrange { pop mark } bind
+ /endcidrange { cleartomark } bind
+>> % Just keep it on stack for a while.
+
+% Now we define another dict for local binding, than merge it with the previous one :
+dup length 5 add dict begin
+
+ /.Ranges 40 dict def % Key = CID/256, value = array of 256 integer codes.
+ //.Ranges /CIDCount 0 put
+
+ /.StringToInt % <string> .StringToInt <integer>
+ { 0 exch { exch 8 bitshift add } forall
+ } bind def
+
+ /.SetCouple % <I> <b> .SetCouple -
+ { exch % b I
+ dup 256 idiv % b I I0
+ dup //.Ranges exch known not {
+ dup //.Ranges exch 256 array put
+ } if % b I I0
+ //.Ranges exch get % b I [Range]
+ exch 256 mod % b [Range] I1
+ 2 copy get % b [Range] I1 e
+ dup //null ne {
+ % We've got char code duplicates for same CID.
+ dup type /integertype eq {
+ 4 3 roll % [Range] I1 e b
+ 2 array astore put %
+ } {
+ dup length 1 add dup dup array dup % b [Range] I1 D l l D' D'
+ 3 2 roll 0 exch getinterval % b [Range] I1 D l D' D''
+ 4 3 roll exch copy pop % b [Range] I1 l D'
+ dup 3 2 roll 1 sub % b [Range] I1 D' D' l-1
+ 6 5 roll % [Range] I1 D' D' l-1 b
+ put put %
+ } ifelse
+ } {
+ pop 3 2 roll put %
+ } ifelse
+ } bind def
+
+ /endcidrange
+ { % Writes the inversed CMap to .Ranges
+ counttomark 3 idiv { % (b) (e) I
+ exch .StringToInt % (b) I e
+ 3 2 roll .StringToInt % I e b
+ % Note : this code does't handle multidimentional CID ranges.
+ % fixme : optimize below.
+ dup 3 2 roll exch sub 1 add % I b d
+ { 2 copy //.SetCouple exec % I b
+ 1 add exch 1 add exch
+ } repeat % I b
+ pop % I
+ dup //.Ranges /CIDCount get gt { % I
+ dup //.Ranges exch /CIDCount exch put
+ } if % I
+ pop
+ } repeat
+ pop % mark
+ } bind def
+
+ /.GetCIDDecoding % - .GetCIDDEcoding <dict>
+ { //.Ranges dup length dict copy
+ //.Ranges //.PurgeDict exec
+ //.Ranges /CIDCount 0 put
+ } bind def
+
+currentdict end
+exch copy % Merge the dicts - see above.
+/ProcSet defineresource pop
+
+%----------------CIDDecoding category----------------------------
+% Note that we put all instances in global memory - see FindResource.
+
+/Generic /Category findresource dup length dict copy
+begin
+ /Category /CIDDecoding def
+ /InstanceType /dicttype def
+
+ /.CMapChooser <<
+ % This lists CMaps to inverse and unite for creating a CIDDecoding.
+ % Choose by FAPIcidfmap.Registry concatenated with TrueType encoding ID.
+ % Font renderer must provide the glyph substitution internally.
+
+ /CNS1.Big5 [ /ETen-B5-H /ETen-B5-V ]
+ /CNS1.Unicode [ /UniCNS-UCS2-H /UniCNS-UCS2-V]
+ /GB1.GB2312 [ /GBK-EUC-H /GBK-EUC-V ]
+ /GB1.Unicode [ /UniGB-UCS2-H /UniGB-UCS2-V ]
+ /Japan1.ShiftJIS [ /90ms-RKSJ-H /90ms-RKSJ-V ]
+ /Japan1.Unicode [ /UniJIS-UCS2-H /UniJIS-UCS2-V]
+ /Japan2.ShiftJIS [ /90ms-RKSJ-H /90ms-RKSJ-V ]
+ /Japan2.Unicode [ /UniHojo-UCS2-H ]
+ /Korea1.Johab [ /KSC-Johab-V /KSC-Johab-H ]
+ /Korea1.Wansung [ /KSCms-UHC-V /KSCms-UHC-H ]
+ /Korea1.Unicode [ /UniKS-UCS2-H /UniKS-UCS2-V ]
+ /Identity.Symbol [ /Identity-H /Identity-V ]
+ /Unicode.Unicode [ /Identity-UTF16-H ]
+ >> def
+
+ /.MakeInstance % <name> .MakeInstance <inst>
+ { dup % /Name /Name
+ //.CMapChooser exch .knownget not {
+ (Can't build /) print =string cvs print ( /CIDDecoding resource. See gs_ciddc.ps . ) =
+ /findresource cvx /undefinedresource signalerror
+ } if % /Name [CMaps]
+ exch pop % [CMaps]
+ /CMap /Category findresource % [CMaps] <CMapCategory>
+ /ParseCMap_Inverse /ProcSet findresource % [CMaps] <CMapCategory> <PCI>
+ 3 2 roll { % <CMapCategory> <PCI> /CMapName
+ 3 2 roll begin % <PCI> /CMapName
+ dup .ResourceFile not {
+ (Can't find CMap ) print =string cvs print ( building a CIDDecoding resource. ) =
+ /findresource cvx /undefinedresource signalerror
+ } if
+ currentdict end exch % <PCI> /CMapName <CMapCategory> file
+
+ 3 index begin
+ cvx exec % <PCI> /CMapName <CMapCategory>
+ end
+ exch pop exch % <CMapCategory> <PCI>
+ } forall
+ exch pop begin %
+ .GetCIDDecoding
+ end
+ } bind def
+
+ /FindResource % <name> FindResource <dict>
+ { currentglobal exch % bGlobal /InstName
+ true setglobal
+ dup //.MakeInstance exec % bGlobal /InstName <Inst>
+ DefineResource % bGlobal <Inst>
+ exch setglobal % <Inst>
+ } bind def
+
+currentdict end
+/CIDDecoding exch /Category defineresource pop
+
+setglobal
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_cidfm.ps b/Master/tlpkg/tlgs/lib/gs_cidfm.ps
new file mode 100644
index 00000000000..48f1b2d888d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cidfm.ps
@@ -0,0 +1,129 @@
+% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cidfm.ps 8022 2007-06-05 22:23:38Z giles $
+% Redefine CIDFont category with cidfmap .
+
+languagelevel 2 .setlanguagelevel
+
+4 dict begin
+/CategoryName /CIDFont def
+
+/MapFileName (cidfmap) def
+
+/IsMyRecord % <raw_record> -> <raw_record> bool
+{ % Only for client's needs.
+ dup type /nametype eq
+} bind def
+
+/RecordVirtualMethods 3 dict begin
+
+ /MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
+ { % We know that currentdict is the category.
+ /Substitute get FindResource % /Name <<CIDFont>>
+ dup length dict copy % /Name <<CIDFont>>
+ 1 index ResourceStatus pop exch pop % /Name <<CIDFont>> size
+ } bind def
+
+ /GetFilePath % <scratch> <Name> <record> GetFilePath <filepath>
+ { % We know that currentdict is the category.
+ exch pop
+ /Substitute get exch ResourceFileName
+ } bind def
+
+ /GetSize % <Name> <record> GetSize <size>
+ { % We know that currentdict is the category.
+ /Substitute get ResourceStatus {
+ exch pop exch pop
+ } {
+ /undefinedresource signalerror
+ } ifelse
+ } bind def
+
+ /GetCSI % <record> GetCSI null
+ % <record> GetCSI dict
+ { % We know that currentdict is the category.
+ RESMPDEBUG { (cidfm GetCSI beg ) = } if
+ /Substitute get % /Name
+ GetCIDSystemInfoFromMap
+ RESMPDEBUG { (cidfm GetCSI end ) print dup = } if
+ } bind def
+
+ /IsActive % <record> IsActive <bool>
+ { pop true
+ } bind def
+
+currentdict end def
+
+/VerifyMap % <raw_map> VerifyMap -
+{ % Checks for vicious substitution cycles.
+ dup length dict copy % <<map>>
+ dup length dict % <<map>> <<temp>>
+ { % Choose a random record :
+ true 2 index { % <<map>> <<temp>> true /Name /Subs
+ 3 2 roll pop false exit % <<map>> <<temp>> /Name /Subs false
+ } forall
+ { exit % <<map>> <<temp>>
+ } if % <<map>> <<temp>> /Name /Subs
+ % Move the substitution chain to <<temp>>, checking for a cycle :
+ 3 index 2 index undef % <<map>> <<temp>> /Name /Subs
+ exch 2 index exch 0 put % <<map>> <<temp>> /Subs
+ { //IsMyRecord exec not {
+ % Not a substitution, the chain terminates.
+ pop exit % <<map>> <<temp>>
+ } if % <<map>> <<temp>> /Subs
+ 1 index 1 index known {
+ (Vicious substitution cycle in map file with the entry ) print =string cvs print ( .) =
+ /VerifyMap cvx /undefinedresource signalerror
+ } if % <<map>> <<temp>> /Subs
+ 1 index 1 index 0 put
+ dup 3 index exch .knownget not { % <<map>> <<temp>> /Subs
+ % No more substitutions, the chain terminates.
+ pop exit % <<map>> <<temp>>
+ } if % <<map>> <<temp>> /Subs /Subs1
+ exch % <<map>> <<temp>> /Subs1 /Subs
+ 3 index exch undef % <<map>> <<temp>> /Subs1
+ } loop
+ % Not cycled, now purge the <<temp>> :
+ { % Choose a random record :
+ true 1 index { % <<map>> <<temp>> true /Name /Subs
+ 3 2 roll pop false exit % <<map>> <<temp>> /Name /Subs false
+ } forall
+ { exit % <<map>> <<temp>>
+ } if % <<map>> <<temp>> /Name /Subs
+ % Remove it :
+ pop 1 index exch undef % <<map>> <<temp>>
+ } loop
+ } loop
+ pop pop %
+} bind def
+
+/PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
+{ //IsMyRecord exec {
+ 1 dict begin
+ /Substitute exch def
+ /RecordVirtualMethods //RecordVirtualMethods def
+ currentdict end
+ true
+ } {
+ false
+ } ifelse
+} bind def
+
+currentdict end
+
+/MappedCategoryRedefiner /ProcSet findresource /Redefine get exec
+
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_cidfn.ps b/Master/tlpkg/tlgs/lib/gs_cidfn.ps
new file mode 100644
index 00000000000..0daf0d57a4d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cidfn.ps
@@ -0,0 +1,404 @@
+% Copyright (C) 1995, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cidfn.ps 7558 2007-01-03 10:30:52Z leonardo $
+% ProcSet for implementing CIDFont and CIDMap resources.
+% When this is run, systemdict is still writable.
+
+% ---------------- Defining CIDFont resources ---------------- %
+
+% Define a CIDFont resource. This is the defineresource implementation for
+% the CIDFont resource category.
+
+/.checkfonttype { % <cidfont> <fonttype> .checkfonttype <cidfont> <new?>
+ 1 index /FID known {
+ 1 index /FontType get ne {
+ /definefont cvx /invalidfont signalerror
+ } if false
+ } {
+ 1 index /FontType 3 -1 roll put true
+ } ifelse
+} bind def
+
+/.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse
+.cidfonttypes
+
+30 dict begin
+
+% The key in .cidfonttypes is the CIDFontType value;
+% the value is a procedure that takes a font name and the CIDFont dictionary
+% and replaces the latter with a real font.
+
+% ------ CIDFontType 0 (FontType 9) ------ %
+
+% We add the following entries to the CIDFont dictionary, in addition to
+% the ones documented by Adobe:
+% SubrCache - dictionary for caching Subr arrays
+% For CIDFonts where we read the data from disk incrementally:
+% GlyphData is 0 (arbitrary)
+% DataSource - a ReusableStreamDecode filter for the data
+% We also add a FID entry, and possibly a Subrs entry, to each element of
+% FDArray.
+
+dup 0 {
+ 9 .checkfonttype {
+ /CIDInit /ProcSet findresource begin
+ .completefont9
+ end
+ } if
+ 1 index exch .buildfont9 exch pop
+} put % Don't bind it here, because gs_fapi.ps redefines .buildfont9
+
+% Add entries to a new CIDFontType 0 font per documentation (FontMatrix)
+% or for .buildfont9 (FDArray.Private.Subrs).
+/.completefont9 { % <cidfont0> .completefont9 <cidfont0>
+ currentglobal 3 1 roll dup gcheck setglobal
+ dup /FontMatrix known not {
+ dup /FontMatrix [0.001 0 0 0.001 0 0] put
+ dup /FDArray get {
+ currentglobal exch dup gcheck setglobal
+ dup /FontMatrix get [1000 0 0 1000 0 0] matrix concatmatrix
+ /FontMatrix exch put
+ setglobal
+ } forall
+ } if
+ dup /FDArray get {
+ % Read the Subrs if necessary.
+ dup /Private get dup /Subrs known not {
+ dup /SubrCount .knownget {
+ % Stack: font Private SubrCount
+ currentglobal 3 1 roll 1 index gcheck setglobal
+ array 1 index /Subrs 3 -1 roll put
+ % Stack: font global Private
+ 2 index begin begin .loadsubrs end end
+ setglobal
+ } {
+ pop
+ } ifelse readonly pop
+ } {
+ pop pop
+ } ifelse
+ } forall
+ 3 -1 roll setglobal
+} bind def
+
+% Read some Subrs for the current Type 1 subfont.
+% The subfont's Private dict is currentdict; the CIDFont itself is the
+% next dictionary on the stack.
+/.readsubrs { % <Subrs> <start> .readsubrs <Subrs>
+ 1 SubrCount 1 sub {
+ dup SDBytes mul SubrMapOffset add
+ dup SDBytes .readint exch SDBytes add SDBytes .readint
+ 1 index sub string ReadString 2 index 3 1 roll put
+ } for
+} bind def
+
+% Ensure that all the Subrs for the current Type 1 subfont are loaded.
+% The subfont's Private dict is currentdict; the CIDFont itself is the
+% next dictionary on the stack.
+/.loadsubrs {
+ Subrs length 0 ne {
+ SubrCache SubrMapOffset .knownget {
+ % We've already loaded some Subrs at this offset.
+ % Make sure we've got as many as we need.
+ dup length SubrCount lt {
+ % We need to load more.
+ SubrCount array exch 1 index copy length .readsubrs
+ SubrCache SubrMapOffset 2 index put
+ } if
+ } {
+ % We haven't loaded any Subrs at this offset yet.
+ SubrCount array 0 .readsubrs
+ SubrCache SubrMapOffset 2 index put
+ } ifelse
+ Subrs copy pop
+ } if
+} bind def
+
+% ------ CIDFontType 1 (FontType 10) ------ %
+
+dup 1 {
+ 10 .checkfonttype pop
+ 1 index exch .buildfont10 exch pop
+} put % Don't bind it here because gs_fapi.ps redefines .buildfont10
+
+% ------ CIDFontType 2 (FontType 11) ------ %
+
+dup 2 {
+ 11 .checkfonttype pop
+ 1 index exch .buildfont11 exch pop
+} put % Don't bind it here because gs_fapi.ps redefines .buildfont11
+
+pop % .cidfonttypes
+
+% ---------------- Reading CIDFontType 0 files ---------------- %
+
+/StartData { % <(Binary)|(Hex)> <datalength> StartData -
+ % (currentdict is CID font dict)
+ % If we're loading a resource file and the data format is
+ % binary, we can just save a pointer to the data and load it
+ % incrementally.
+ mark {
+ % Previous versions of this code made provisions for
+ % reading hex-encoded data incrementally. Since hex data
+ % doesn't seem to be used in practice, we no longer bother.
+ 2 index (Binary) ne { stop } if
+ currentfile .currentresourcefile ne { stop } if
+ % Hack: the pdfwrite driver relies on finalization to write
+ % out fonts. However, the font may be finalized after the
+ % resource file, in which case the resource file will be
+ % closed. So if the current output device is pdfwrite,
+ % don't use incremental loading.
+ currentdevice .devicename /pdfwrite eq { stop } if
+ currentfile fileposition
+ } .internalstopped {
+ % File is not positionable, or uses hex data.
+ % Load the data now.
+ cleartomark exch
+ currentfile exch
+ (Hex) eq { /ASCIIHexDecode filter } if
+ exch
+ % Stack: file length
+ dup 65400 le {
+ % readstring with a 0-length string causes a rangecheck,
+ % but a data length of 0 is allowed.
+ string dup () ne { 1 index exch readstring pop } if
+ } {
+ mark 3 1 roll {
+ % Stack: mark str ... file length
+ dup 0 eq { pop exit } if
+ dup 65400 .min dup string 3 index exch readstring pop
+ % Stack: mark str ... file length newstrlen newstr
+ 4 1 roll sub
+ } loop
+ counttomark 1 add 1 roll ]
+ } ifelse
+ /GlyphData exch def
+ dup currentfile eq { pop } { closefile } ifelse
+ } {
+ % File is positionable and binary, just save a pointer.
+ % Stack: (Binary) length -mark- pos
+ /GlyphData 0 def
+ exch pop 3 -1 roll pop exch
+ % Stack: pos length
+ /DataSource currentfile 2 index () .subfiledecode true .reusablestream def
+ currentfile 3 1 roll add setfileposition
+ } ifelse
+ /SubrCache 10 dict def
+ CIDFontName currentdict /CIDFont defineresource pop
+ end % CID font dict
+ end % resource category dict
+} bind def
+
+% Some Adobe fonts include the line
+% /Setup /cid_Setup load def
+% This is apparently included only to prevent proper, conforming PostScript
+% interpreters (as opposed to ATM or a special Adobe font loader) from
+% loading the font, since Setup is not referenced anywhere else in the file.
+/cid_Setup { } def
+
+% ------ Generic ------ %
+
+% Read a string at a given offset in a "file" (binary file or
+% GlyphData in RAM).
+/ReadString { % <pos> <string> ReadString <string>
+ GlyphData 0 eq {
+ % Read from the file.
+ DataSource 3 -1 roll setfileposition
+ DataSource exch readstring pop
+ } {
+ % Read from a string or an array of strings.
+ GlyphData .stringsreadstring
+ } ifelse
+} bind def
+/.stringsreadstring % <pos> <string> <strings> .stringsreadstring
+ % <vmstring>
+{ dup type /stringtype eq
+ { 3 1 roll length getinterval
+ }
+ { { % Stack: pos string glyphdata
+ dup 0 get length dup 4 index gt { exit } if
+ 4 -1 roll exch sub 3 1 roll
+ dup length 1 sub 1 exch getinterval
+ }
+ loop
+ % Stack: pos string glyphdata glyphdata[0]length
+ % We know no request can span more than 2 strings.
+ 3 index 3 index length add 1 index le
+ { % Request fits in a single string: just return a substring.
+ pop 0 get 3 1 roll length getinterval
+ }
+ { % Request spans 2 strings. Copy the first part.
+ 1 index 0 get 4 index 3 -1 roll 1 index sub getinterval
+ 2 index copy
+ % Copy the second part.
+ % Stack: pos str glyphdata str1
+ length exch 1 get 0 3 index length
+ 3 index sub getinterval 2 index 3 1 roll putinterval
+ exch pop
+ }
+ ifelse
+ }
+ ifelse
+} bind def
+
+% Interpret a byte string as a (big-endian) integer.
+/.cvbsi % <bytes> .cvbsi <int>
+{ 0 exch { exch 8 bitshift add } forall
+} bind def
+
+% Read an integer from binary data.
+/.readint % <pos> <nbytes> .readint <int>
+{ string ReadString .cvbsi
+} bind def
+
+currentdict end
+
+% ---------------- Rendering ---------------- %
+
+% ------ CIDFontType 0 ------ %
+
+/.readglyphdata {
+ currentfont exch .type9mapcid
+ FDArray exch get exch
+} bind def
+
+% BuildGlyph procedure for CIDFontType 0.
+% The name %Type9BuildGlyph is known to the interpreter.
+/.cid0buildstring 10 string def
+(%Type9BuildGlyph) cvn { % <cidfont> <cid> %Type9BuildGlyph -
+ .currentglobal 3 1 roll 1 index gcheck .setglobal
+ 1 index begin
+ dup .readglyphdata dup null eq {
+ % Substitute CID 0. **** WRONG ****
+ pop pop 0 .readglyphdata
+ } if
+ % Stack: cidfont cid subfont charstring
+ dup null eq { pop pop pop pop } { %**** WRONG ****
+ 4 -1 roll pop
+ 3 1 roll exch dup 4 -1 roll 0 0 moveto
+ 3 index /FontType get 2 eq { .type2execchar } { .type1execchar } ifelse
+ } ifelse %**** WRONG ****
+ end
+ .setglobal
+} bind def
+
+% ------ CIDFontType 2 ------ %
+
+% BuildGlyph procedure for CIDFontType 2.
+% The name %Type11BuildGlyph is known to the interpreter.
+(%Type11BuildGlyph) cvn { % <cidfont> <cid> %Type11BuildGlyph -
+ % We must be prepared for out-of-range CIDs.
+ 2 copy { .type11mapcid } .internalstopped {
+ pop /CharStrings get /.notdef get
+ } if
+ % Stack: cidfont cid glyphindex
+ 1 index exch .type42execchar
+} bind def
+
+% ---------------- Define resources ---------------- %
+
+languagelevel exch 2 .setlanguagelevel
+
+% Define the CIDInit ProcSet resource.
+% The ProcSet dictionary is still on the stack.
+
+% We might have loaded CMap support already. However, Adobe's
+% protected font downloader defines a CIDInit ProcSet that will be
+% loaded from the filesystem later, so we must check specifically
+% for the ProcSet being defined in VM.
+/CIDInit /ProcSet 2 copy resourcestatus { pop 0 eq } { false } ifelse {
+ pop pop findresource dup length 4 index length add dict .copydict
+ 4 -1 roll exch .copydict
+} {
+ 3 -1 roll
+} ifelse exch defineresource pop
+
+% Define the CIDFont resource category.
+% We break out .buildcidfont because it appears that at least for
+% Type 32 (CIDFontType 4) fonts, the font can be registered in the Font
+% category with only a CIDFontType and no FontType.
+/.buildcidfont { % <name> <fontdict> .buildcidfont
+ % <name> <cidfont>
+ systemdict /ProvideUnicode .knownget not { false } if {
+ /FontEmulationProcs /ProcSet findresource
+ /ProvideUnicodeDecoding get exec
+ } if
+ dup /CIDFontType get //.cidfonttypes exch get exec
+} odef
+
+/CIDFont /Generic /Category findresource dup length dict .copydict
+dup /InstanceType /dicttype put
+dup /DefineResource {
+ .buildcidfont
+ dup /OrigFont known not {
+ dup dup /OrigFont exch .growput % CPSI does it. Adding just for CET 33_all.PS conformity.
+ } if
+ dup /PaintType known not {
+ dup /PaintType 0 .growput % CPSI does it. Adding just for CET 33_all.PS conformity.
+ } if
+ /Generic /Category findresource /DefineResource get exec
+} put
+% CIDFonts may be defined in CFF OpenType files.
+% Check for this here.
+/.loadcidfontresource {
+ dup .ResourceFile {
+ {.loadfont} .execasresource
+ } {
+ dup /undefinedresource signalerror
+ } ifelse
+} bind def
+dup /.LoadResource {
+ currentglobal {
+ .loadcidfontresource
+ } {
+ true setglobal {.loadcidfontresource} stopped false setglobal {stop} if
+ } ifelse
+} bind put
+
+/Category defineresource pop
+
+% Add the new FontType resources.
+
+9 1 11 { dup /FontType defineresource pop } for
+
+% Add the new FMapType resource.
+
+9 dup /FMapType defineresource pop
+
+% Define the CIDMap resource category.
+% These aren't documented, but it's clear what they are for:
+% to give names to CIDMaps for CIDFontType 2 fonts.
+
+/CIDMap /Generic /Category findresource dup length dict .copydict
+dup /.CheckResource {
+ % Allow a string, an array of strings, or (as of Adobe release 3011)
+ % a dictionary.
+ dup type dup dup /stringtype eq exch /dicttype eq or {
+ pop true
+ } {
+ dup /arraytype eq exch /packedarraytype eq or {
+ true exch { type /stringtype eq and } forall
+ } {
+ false
+ } ifelse
+ } ifelse
+} bind put
+/Category defineresource pop
+
+.setlanguagelevel
+
+%% Replace 1 (gs_ciddc.ps)
+(gs_ciddc.ps) runlibfile
diff --git a/Master/tlpkg/tlgs/lib/gs_cidtt.ps b/Master/tlpkg/tlgs/lib/gs_cidtt.ps
new file mode 100644
index 00000000000..b7e7fa7157d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cidtt.ps
@@ -0,0 +1,141 @@
+% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cidtt.ps 8022 2007-06-05 22:23:38Z giles $
+% Redefine CIDFont category with an emulation with True Type fonts.
+
+languagelevel 2 .setlanguagelevel
+
+15 dict begin % a temporary dictionary for local binding.
+
+%------------------Copy the FontEmulationProcs here : -------------------
+
+/FontEmulationProcs /ProcSet findresource {
+ def
+} forall
+
+currentdict /super.complete_instance currentdict /complete_instance get put
+
+%-------Auxiliary procedures for building CIDFontType 2 from TT file -----------
+
+/GenerateCIDMap % <font> GenerateCIDMap <font>
+{ begin
+ % Obtain the maximal CID :
+ % This implementation doesn't check whether glyphs really present.
+ Decoding /CIDCount get /CIDCount exch def
+ % Prepare the CIDMap structure :
+ /CIDMap [
+ CIDCount 22000 le {
+ CIDCount 2 mul string
+ } {
+ 44000 string
+ CIDCount 44000 gt {
+ % need three strings
+ 44000 string % 22000 2 mul string
+ CIDCount 44000 sub 2 mul string
+ } {
+ CIDCount 22000 sub 2 mul string
+ } ifelse
+ } ifelse
+ ] def
+ % Now fill it :
+ Decoding TT_cmap SubstNWP GDBytes CIDMap .fillCIDMap
+ currentdict end
+} bind def
+
+/load_sfnts % <FontDict> load_sfnts <FontDict>
+{ % Read the True Type file from the path /Path, and buld /sfnts,
+ % skipping glyf and loca.
+ dup /Path get % <font> (path)
+ QUIET not {
+ (Loading a TT font from ) print dup print
+ ( to emulate a CID font ) print 1 index /CIDFontName get =only ( ... ) print
+ } if
+ (r) file dup % <font> file file
+ 3 1 roll % file <font> file
+ 1 index /SubfontID .knownget not { 0 } if % file <font> file SubfontID
+ .load_tt_font_stripped exch copy % file <font>
+ QUIET not {
+ (Done.) =
+ } if
+ dup 3 1 roll % <font> file <font>
+ exch /File exch put % <font>
+ dup dup /CIDSystemInfo get /Ordering get (.) % <font> () ()
+ 2 index /Decoding get =string cvs % <font> () () ()
+ concatstrings concatstrings cvn /Decoding exch put % <font>
+ //ChooseDecoding exec % <font>
+ //GenerateCIDMap exec % <font>
+} bind def
+
+%-----------TrueType-specific methods for category redefinition : -----------
+
+/RefinePath % <FontDict> RefinePath <FontDict>
+{ dup begin
+ Path .libfile {
+ dup .filename {
+ currentdict exch /Path exch put
+ } if
+ closefile
+ } {
+ (Can't find the font file ) print =
+ /findfont cvx /undefinedfilename signalerror
+ } ifelse
+ end
+} bind def
+
+/complete_instance % <font_name> <FontDict> <Options> complete_FAPI_Font <font_name> <FontDict>
+{ 1 index /CIDFontType 2 put % Other types are not emulated yet.
+ //super.complete_instance exec
+ //RefinePath exec
+ //load_sfnts exec
+} bind def
+
+/IsMyRecord % <raw_record> -> <raw_record> bool
+{ dup type /dicttype eq { dup /FileType .knownget { /TrueType eq } { false } ifelse } { false } ifelse
+} bind def
+
+/IsActive % <record> IsActive <bool>
+{ pop true
+} bind def
+
+/CIDFontRecordVirtualMethods //RecordVirtualMethodsStub dup length 3 add dict copy begin
+ /GetCSI //TranslateCSI def
+ /IsActive //IsActive def
+ /MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
+ { currentglobal 3 1 roll true setglobal
+ //CIDFontOptions //complete_instance exec
+ 2 copy //GetSize exec
+ 4 3 roll setglobal
+ } bind def
+currentdict end def
+
+% Redefine the /CIDFont category :
+4 dict begin
+ /CategoryName /CIDFont def
+ /IsMapFileOptional true def
+ /VerifyMap { pop } bind def
+ /PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
+ { //IsMyRecord exec dup {
+ pop dup /RecordVirtualMethods //CIDFontRecordVirtualMethods put
+ true
+ } if
+ } bind def
+currentdict end
+
+/MappedCategoryRedefiner /ProcSet findresource /Redefine get exec
+
+end % the temporary dictionary for local binding.
+
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_ciecs2.ps b/Master/tlpkg/tlgs/lib/gs_ciecs2.ps
new file mode 100644
index 00000000000..17a213e4d13
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ciecs2.ps
@@ -0,0 +1,147 @@
+% Copyright (C) 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ciecs2.ps 6300 2005-12-28 19:56:24Z giles $
+% Level 2 CIEBased color space method dictionaries.
+
+%
+% The validation routines in these method dictionaries perform only
+% partial validations; the .setcie* operators will perform the rest.
+%
+
+% verify that at least one of the CIEBased color spaces is supported
+true
+ { /.setcieaspace /.setcieabcspace /.setciedefspace /.setciedefgspace }
+ {
+ where
+ { pop not exit }
+ if
+ }
+forall
+ { currentfile closefile }
+if
+
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+%
+% <obj> check_cie_cspace <obj>
+%
+% Perform a very basic check that an object is a CIEBased color space
+% array.
+%
+/check_cie_cspace
+ {
+ //check_array exec
+ dup 1 get type /dicttype ne
+ //setcspace_typecheck
+ if
+ }
+bind def
+
+
+
+/.setcieaspace where
+ {
+ pop
+ colorspacedict
+ /CIEBasedA
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_1
+
+ /cs_get_range
+ {
+ 1 get /RangeA .knownget not
+ { //dflt_range_1 }
+ if
+ }
+ bind
+
+ /cs_get_default_color { pop 0 } bind
+ /cs_get_currentgray //no_currentgray
+ /cs_get_currentrgb //no_currentrgb
+ /cs_get_currentcmyk //no_currentcmyk
+ /cs_validate //check_cie_cspace
+ /cs_substitute //dup_1
+ /cs_prepare {}
+
+ /cs_install
+ {
+ NOCIE
+ { pop /DeviceGray //.cs_install exec }
+ { 1 get .setcieaspace }
+ ifelse
+ }
+ bind
+
+ /cs_prepare_color //validate_1
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+ put
+ }
+if
+
+/.setcieabcspace where
+ {
+ pop
+ colorspacedict
+ /CIEBasedABC
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_3
+
+ /cs_get_range
+ {
+ 1 get /RangeABC .knownget not
+ { //dflt_range_3 }
+ if
+ }
+ bind
+
+ /cs_get_default_color { pop 0 0 0 } bind
+ /cs_get_currentgray //no_currentgray
+ /cs_get_currentrgb //no_currentrgb
+ /cs_get_currentcmyk //no_currentcmyk
+ /cs_validate //check_cie_cspace
+ /cs_substitute //dup_1
+ /cs_prepare {}
+
+ /cs_install
+ {
+ NOCIE
+ { pop /DeviceRGB //.cs_install exec }
+ { 1 get .setcieabcspace }
+ ifelse
+ }
+ bind
+
+ /cs_prepare_color //validate_3
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+ put
+ }
+if
+
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_ciecs3.ps b/Master/tlpkg/tlgs/lib/gs_ciecs3.ps
new file mode 100644
index 00000000000..0d7fb03eff6
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ciecs3.ps
@@ -0,0 +1,137 @@
+% Copyright (C) 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ciecs3.ps 7204 2006-11-15 23:59:58Z ray $
+% Level 3 CIEBased color space method dictionaries.
+% This assumes gs_ciecs2.ps has already been processed.
+
+%
+% The validation routines in these method dictionaries perform only
+% partial validations; the .setcie* operators will perform the rest.
+%
+
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+
+/.setciedefspace where
+ {
+ pop
+ colorspacedict
+ /CIEBasedDEF
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_3
+
+ /cs_get_range
+ {
+ 1 get /RangeDEF .knownget not
+ { //dflt_range_3 }
+ if
+ }
+ bind
+
+ % per Page 233 of the PLRM, default color should be as close to 0.0 as possible
+ % within the RangeDEF
+ /cs_get_default_color { 1 get /RangeDEF .knownget {
+ aload pop pop 5 1 roll pop 4 1 roll pop 3 1 roll
+ } {
+ 0.0 0.0 0.0
+ } ifelse
+ } bind
+ /cs_get_currentgray //no_currentgray
+ /cs_get_currentrgb //no_currentrgb
+ /cs_get_currentcmyk //no_currentcmyk
+ /cs_validate //check_cie_cspace
+ /cs_substitute //dup_1
+ /cs_prepare {}
+
+ /cs_install
+ {
+ NOCIE
+ { pop /DeviceRGB //.cs_install exec }
+ { 1 get .setciedefspace }
+ ifelse
+ }
+ bind
+
+ /cs_prepare_color //validate_3
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+ put
+ }
+if
+
+
+/.setciedefgspace where
+ {
+ pop
+ colorspacedict
+ /CIEBasedDEFG
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_4
+
+ /cs_get_range
+ {
+ 1 get /RangeDEFG .knownget not
+ { //dflt_range_4 }
+ if
+ }
+ bind
+
+ % per Page 233 of the PLRM, default color should be as close to 0.0 as possible
+ % within the RangeDEFG
+ /cs_get_default_color { 1 get /RangeDEFG .knownget {
+ aload pop pop 7 1 roll pop 6 1 roll pop 5 1 roll pop 4 1 roll
+ } {
+ 0.0 0.0 0.0 0.0
+ } ifelse
+ } bind
+ /cs_get_currentgray //no_currentgray
+ /cs_get_currentrgb //no_currentrgb
+ /cs_get_currentcmyk //no_currentcmyk
+ /cs_validate //check_cie_cspace
+ /cs_substitute //dup_1
+ /cs_prepare {}
+
+ % the use of the DeviceCMYK color space is questionable:
+ % it will likely have the wrong polarity
+ /cs_install
+ {
+ NOCIE
+ { pop /DeviceCMYK //.cs_install exec }
+ { 1 get .setciedefgspace }
+ ifelse
+ }
+ bind
+
+ /cs_prepare_color //validate_4
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+ put
+ }
+if
+
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_cmap.ps b/Master/tlpkg/tlgs/lib/gs_cmap.ps
new file mode 100644
index 00000000000..a4c5a55eecd
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cmap.ps
@@ -0,0 +1,549 @@
+% Copyright (C) 1995, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cmap.ps 7137 2006-10-30 21:57:56Z ray $
+% ProcSet for implementing CMap resources.
+% When this is run, systemdict is still writable.
+
+% NOTE: Rearranged fonts are not implemented yet.
+
+[
+ /CMERGE_DEBUG
+ /USE_CIDCHAR_AS_RANGE
+] {dup where {pop pop} { currentdict exch //false def pop } ifelse} forall
+
+% ---------------- Public operators ---------------- %
+
+/.rewriteTempMapsNotDef {
+ %
+ % Before building .CodeMapData from .TempMaps,
+ % we need to replace dst type codes in the notdef map with the value 3,
+ % which corresponds to CODE_VALUE_NOTDEF, see gxfcmap.h .
+ %
+ CMAPDEBUG { (rewriting TempMapsNotDef\n) print flush } if
+ .TempMaps 2 get
+ dup length 0 gt {
+ 0 get
+ CMAPDEBUG { (...original...\n) print flush } if
+ 1 5 2 index length 1 sub {
+ { 1 index exch get 2 3 put } stopped
+ { CMAPDEBUG { (cannot rewrite\n) print flush } if }
+ { CMAPDEBUG { (rewrite\n) print flush } if } ifelse
+ } for
+ } if
+ pop
+ CMAPDEBUG { (...FINISHED...\n) print } if
+} bind def
+
+/.composefontdict { % <name> <cmap|cmapname> <fonts> composefont <name> <font_dict>
+ 10 dict begin
+ /CMap 2 index dup type /dicttype ne { /CMap findresource } if def
+ /FDepVector 1 index cvlit def % temporarily
+ /Encoding [ 0 1 FDepVector length 1 sub { } for ] def
+ /FontInfo 1 dict def % for .processToUnicode in pdf_font.ps .
+ /FDepVector [ 0 1 FDepVector length 1 sub {
+ % Stack: name cmap[name] fonts /FDepVector [ fonts... i
+ FDepVector 1 index get
+ dup type /dicttype ne {
+ dup /CIDFont resourcestatus {
+ pop pop /CIDFont
+ } {
+ /Font
+ } ifelse findresource
+ } if
+ exch CMap /FontMatrices get dup length 2 index gt {
+ exch get dup //null eq { pop } { makefont } ifelse
+ } {
+ pop pop
+ } ifelse
+ } for ] readonly def
+ /FMapType 9 def
+ /FontMatrix matrix def
+ /FontName 3 index def
+ CMap /WMode .knownget { /WMode exch def } if
+ /FontType 0 def
+ pop pop currentdict end
+} bind odef
+
+% composefont doesn't appear in CMap files -- it's documented in
+% the "PostScript Language Reference Manual Supplement".
+/composefont { % <name> <cmap|cmapname> <fonts> composefont <font>
+ .composefontdict /Font defineresource
+} bind def
+
+% ---------------- CMap operators ---------------- %
+
+40 dict begin
+
+% Our internal .CodeMapData structure closely mirrors the structures
+% defined in gxfcmap.h (q.v.). () indicate a string, [] indicate an array,
+% ? indicates a Boolean, # indicates an integer, {} for grouping.
+% [[[(first) (last) ...]+] % code space ranges
+% [[(prefix) (key_size,?is_range,value_type,value_size) (keys...)
+% {(values...) | [value ...]} #font_index ]+] % code mappings
+% ...]
+% <<same>> % notdef mappings
+% ]
+% FontMatrices is the array of matrices defined by begin/endusematrix.
+% All of the arrays and strings are read-only after they have been built.
+%
+% Note that the code in zfcmap.c that constructs the C structures from
+% the PostScript structures has intimate knowledge of the above format.
+
+% ****** NOTE: The code currently only handles "well-behaved" CMaps:
+% - CID values only (no bfchars), 16-bit
+% - Entries (both code space and map) must be sorted
+% - Only the last byte must vary in each map range, except for
+% the identity mapping
+
+% ------ Font-level operators ------ %
+
+/begincmap { % - begincmap -
+ /.CodeMapData [[[]] [[]] [[]]] def
+ /FontMatrices [] def
+ /.FontIndex 0 def
+ /.TempMaps [20 dict 50 dict 50 dict] def
+ /CodeMap //null def % for .buildcmap
+} bind def
+
+/endcmap { % - endcmap -
+ .rewriteTempMapsNotDef
+
+ CMAPDEBUG {
+ 2 (*** undefined charmap ***)
+ 1 (*** defined charmap ***)
+ 0 (*** code space ranges ***)
+ 3 { =
+ .TempMaps exch get
+ 0 1 2 index length 1 sub {
+ dup == (\t) print
+ 1 index exch get ==
+ } for
+ pop
+ } repeat
+ } if
+
+ /.CodeMapData dup load [ exch
+ .TempMaps aload pop begin begin begin
+ {
+ [ exch aload pop
+ 0 1 currentdict length 1 sub {
+ currentdict exch get
+ } for
+ ]
+ end
+ } forall
+ ] .endmap def
+
+ CMAPDEBUG {
+ (*** Content of .CodeMapData ***) =
+ 0 .CodeMapData { exch dup == 1 add exch (\t) print == } forall
+ pop
+ } if
+
+ currentdict /.TempMaps undef
+ /FontMatrices FontMatrices .endmap def
+} bind def
+
+/.endmap { % <map> .endmap <map>
+ dup type /arraytype eq {
+ % This might be a shared read-only array inherited via usecmap.
+ % Don't try to update its elements if this is the case.
+ dup wcheck {
+ 0 1 2 index length 1 sub {
+ 2 copy 2 copy get .endmap put pop
+ } for readonly
+ } if
+ } {
+ dup type /stringtype eq { readonly } if
+ } ifelse
+} bind def
+
+/.appendmap { % -mark- <elt> ... <array#> .appendmap -
+ .TempMaps exch get counttomark 1 add 1 roll
+ ] 1 index length exch put
+} bind def
+
+/begincodespacerange { % <count> begincodespacerange -
+ pop mark
+} bind def
+
+/endcodespacerange { % <code_lo> <code_hi> ... endcodespacerange -
+ 0 .appendmap
+} bind def
+
+/usecmap { % <CMap_name> usecmap -
+ /CMap findresource dup
+ % Copy the top level of .CodeMapData
+ /.CodeMapData exch /.CodeMapData get copyarray def
+ /FontMatrices exch /FontMatrices get copyarray def
+} bind def
+
+/usefont { % <fontID> usefont -
+ /.FontIndex exch def
+} bind def
+
+/beginusematrix { % <fontID> beginusematrix -
+ FontMatrices wcheck not FontMatrices length 2 index le or {
+ FontMatrices length 1 index 1 add .max array
+ dup 0 FontMatrices putinterval
+ /FontMatrices exch def
+ } if
+} bind def
+
+/endusematrix { % <matrix> endusematrix -
+ FontMatrices 3 1 roll put
+} bind def
+
+% ------ Rearranged font operators ------ %
+
+/beginrearrangedfont { % <font_name> <font*> beginrearrangedfont -
+ 10 dict begin
+ /.FontNames exch def
+ /.FontName exch def
+ begincmap
+} bind def
+/endrearrangedfont { % - endrearrangedfont -
+ (REARRANGED FONTS NOT IMPLEMENTED YET.) = flush
+ FontName .FontNames 0 get findfont end definefont pop
+} bind def
+
+% ------ Character name/code selector operators ------ %
+
+/beginbfchar { % <count> beginbfchar -
+ pop mark
+} bind def
+/endbfchar { % <code> <to_code|charname> ... endbfchar
+ counttomark 2 idiv {
+ counttomark -2 roll % process in correct order
+ .addbfchar
+ } repeat 1 .appendmap
+} bind def
+
+/beginbfrange { % <count> beginbfrange -
+ pop mark
+} bind def
+/endbfrange { % <code_lo> <code_hi> <to_code|(charname*)> ...
+ % endbfrange -
+ counttomark 3 idiv {
+ counttomark -3 roll % process in correct order
+ dup type dup /arraytype eq exch /packedarraytype eq or {
+ % Array value, split up.
+ exch pop {
+ % Stack: code to_code|charname
+ 1 index exch .addbfchar
+ % Increment the code. As noted above, we require
+ % that only the last byte vary, but we still must
+ % mask it after incrementing, in case the last
+ % value was 0xff.
+ % Stack: code prefix params key value fontindex
+ 6 -1 roll dup length string copy
+ dup dup length 1 sub 2 copy get 1 add 255 and put
+ } forall pop
+ } {
+ % Single value, handle directly.
+ .addbfrange
+ } ifelse
+ } repeat 1 .appendmap
+} bind def
+
+/.addbfchar { % <code> <to_code|charname> .addbfchar
+ % <prefix> <params> <key> <value> <font_index>
+ 1 index exch .addbfrange
+} bind def
+/.addbfrange { % <code_lo> <code_hi> <to_code|charname>
+ % .addbfrange <<same as .addbfchar>>
+ 4 string dup 3
+ 3 index type /nametype eq {
+ 2 index 2 1 put % dst = CODE_VALUE_GLYPH, see gxfcmap.h .
+ 4 -1 roll 1 array astore 4 1 roll 4
+ } {
+ 2 index 2 2 put % dst = CODE_VALUE_CHARS, see gxfcmap.h .
+ 3 index length
+ } ifelse put
+ % Stack: code_lo code_hi value params
+ 3 index 3 index eq {
+ % Single value.
+ 3 -1 roll pop exch () exch
+ } {
+ % Range.
+ dup 0 1 put dup 1 1 put
+ 4 2 roll
+ dup dup length 1 sub 0 exch getinterval 5 1 roll % prefix
+ % Stack: prefix value params code_lo code_hi
+ 2 { exch dup length 1 sub 1 getinterval } repeat concatstrings
+ 3 -1 roll
+ } ifelse
+ .FontIndex
+} bind def
+
+% ------ CID selector operators ------ %
+
+/begincidchar { % <count> begincidchar -
+ pop mark
+} bind def
+/endcidchar { % <code> <cid> ... endcidchar -
+ 1 .endmapchars
+} bind def
+
+/begincidrange { % <count> begincidrange -
+ pop mark
+} bind def
+/endcidrange { % <code_lo> <code_hi> <cid_base> ... endcidrange -
+ 1 .endmapranges
+} bind def
+
+/.endmapchars { % -mark- <code> <cid> ... <map#> .endmapchars -
+ counttomark 1 add 1 roll
+ counttomark 2 idiv {
+ counttomark -2 roll % process in correct order
+ exch % <cid> <code>
+ % Construct prefix, params, key, value, font_index
+ dup length 1 eq { % 1-byte
+ <00 00 00 02> () % <prefix> <param> <null_key>
+ } { % N-byte
+ dup 0 1 getinterval exch % make 1-byte prefix
+ 4 string dup 0
+ USE_CIDCHAR_AS_RANGE {
+ <00 01 00 02> % skelton for param
+ } {
+ <00 00 00 02> % skelton for param
+ } ifelse
+ putinterval
+ exch % <prefix> <param> <code>
+ dup length % <prefix> <param> <code> N
+ 1 sub % <prefix> <param> <code> N-1
+ dup % <prefix> <param> <code> N-1 N-1
+ 3 index % <prefix> <param> <code> N-1 N-1 <param>
+ exch % <prefix> <param> <code> N-1 <param> N-1
+ 0 exch % <prefix> <param> <code> N-1 <param> 0 N-1
+ put % <prefix> <param'> <code> N-1
+ 1 exch % <prefix> <param'> <code> 1 N-1
+ getinterval % <prefix> <param'> <key>
+
+ USE_CIDCHAR_AS_RANGE {
+ dup length 2 mul string % <key> <dkey>
+ dup % <key> <dkey> <dkey>
+ 2 index % <key> <dkey> <dkey> <key>
+ 0 exch putinterval % <key> <dkey'>
+ dup % <key> <dkey'> <dkey'>
+ 3 -1 roll % <dkey'> <dkey'> <key>
+ dup length % <dkey'> <dkey'> <key> N-1
+ exch putinterval % <dkey''>
+ } if
+
+ } ifelse
+
+ 4 -1 roll % <prefix> <param'> <key> <cid>
+ .endmapvalue % <prefix> <param'> <key> <hex_cid> <font_idx>
+ % prefix params keys value fontindex
+ counttomark 5 gt { % 2 (or more) ranges (1 range = 5 item)
+ 4 index 10 index eq % compare prefix
+ 4 index 10 index eq and % compare params
+ 1 index 7 index eq and % compare fontindex
+ {
+ CMAPDEBUG { (merge! char\n) print } if
+ pop 4 2 roll pop pop
+ % prefix params keys value fontindex keys2 value2
+ 5 -1 roll 3 -1 roll concatstrings
+ % prefix params value fontindex value2 keys'
+ 4 -1 roll 3 -1 roll concatstrings
+ % prefix params fontindex keys' values'
+ 3 -1 roll
+ } if
+ } if % end of 2 (or more) ranges
+ CMERGE_DEBUG {
+ ( prefix:) print 4 index =only
+ ( param:) print 3 index =only
+ ( key:) print 2 index =only
+ ( hex_cid:) print 1 index =only
+ ( font_idx:) print 0 index == flush
+ } if
+ } repeat
+ counttomark 2 add -1 roll .appendmap
+} bind def
+
+/.endmapranges { % -mark- <code_lo> <code_hi> <cid_base> ... <map#>
+ % .endmapranges -
+ counttomark 1 add 1 roll
+ counttomark 3 idiv {
+ counttomark -3 roll % process in correct order
+ % Construct prefix, params, key_lo, key_hi, value, font_index
+ 3 1 roll % <cid_base> <code_lo> <code_hi>
+ % prefix key
+ % 1-byte code: () .
+ % 1-byte range: () .
+ % N-byte code: . (*)
+ % N-byte range: (*) (*)
+ dup 2 index eq { % <code_lo> == <code_hi>
+ % 0: prefix_len for 1-byte code
+ % 1: prefix_len for N-byte code
+ dup length 1 eq { 0 } { 1 } ifelse
+ } { % <code_lo> != <code_hi>
+ % calculate prefix_len for *-byte range
+ dup length 1 sub % <cid_base> <code_lo> <code_hi> <code_len-1>
+ 0 % initial value for N
+ { % <cid_base> <code_lo> <code_hi> (code_len-1) N
+ dup 2 index ge { exit } if % if (N >= len - 1) exit
+ 3 index 1 index get % N-th byte of code_lo
+ 3 index 2 index get % N-th byte of code_hi
+ eq { 1 add } { exit } ifelse
+ } loop
+ exch pop % discard <code_len-1>
+ } ifelse
+ % cid_base code_lo code_hi prefix_len
+
+ % Althogh Adobe CPSI with native CID/CMap support accept
+ % multi-dimensional range specification in notdef & cidrange
+ % (and CID is calculated as relative position in multi-dimensional
+ % range), but older CPSI & ATM cannot handle it.
+ %
+ % GS accepts such specification, but it's recommended to keep
+ % from using this feature for notdef & cidrange.
+ % Following is a disabler of this feature.
+ % -------------------------------------------------------------
+ % counttomark 1 add index % get map#
+ % 0 ne { % if not codespacerange
+ % 1 index length % get code length
+ % 1 index % get prefix length
+ % sub % calculate key length
+ % 1 gt { % if (key_len > 1),
+ % (.endmapranges error) = flush
+ % (multi-dimensional range specification is used out of codespacerange)
+ % = flush
+ % (/) =only
+ % CMapName CMapName length string cvs =only
+ % (: <) =only
+ % 2 index (%stdout) (w) file exch writehexstring
+ % (> <) =only
+ % 1 index (%stdout) (w) file exch writehexstring
+ % (>\n) =only flush
+ % quit
+ % } if
+ % } if
+ % -------------------------------------------------------------
+
+ 1 index exch 0 exch getinterval
+ % cid_base code_lo code_hi prefix
+ dup length 3 index length exch sub
+ % cid_base code_lo code_hi prefix range_len
+ dup 255 gt {
+ (too long coderange specification for current GS\n) print
+ /.endmapranges cvx /rangecheck signalerror
+ } if
+ <00 01 00 02> 4 string copy % create initialized param
+ dup 0 4 -1 roll put % put range_len into param
+
+ % get key_hi
+ 3 -1 roll dup length 3 index length dup 3 1 roll sub getinterval
+
+ % get key_lo
+ 4 -1 roll dup length 4 index length dup 3 1 roll sub getinterval
+
+ % make "keys" (concatenated key_lo + key_hi)
+ exch concatstrings
+
+ %
+ 4 -1 roll
+ .endmapvalue
+
+ % See if we can merge with the previous value.
+ % The prefix, params, and font index must match.
+ % prefix params keys value fontindex
+ counttomark 5 gt { % 2 (or more) ranges (1 range = 5 item)
+ 4 index 10 index eq % compare prefix
+ 4 index 10 index eq and % compare params
+ 1 index 7 index eq and % compare fontindex
+ {
+ CMAPDEBUG { (merge!\n) print } if
+ pop 4 2 roll pop pop
+ % prefix params keys value fontindex keys2 value2
+ 5 -1 roll 3 -1 roll concatstrings
+ % prefix params value fontindex value2 keys'
+ 4 -1 roll 3 -1 roll concatstrings
+ % prefix params fontindex keys' values'
+ 3 -1 roll
+ } if
+ } if % end of 2 (or more) ranges
+ } repeat
+ counttomark 2 add -1 roll .appendmap
+} bind def
+
+/.endmapvalue { % <cid> .endmapvalue (hi,lo) .FontIndex
+ 2 string dup 0 3 index -8 bitshift put % value
+ dup 1 4 -1 roll 255 and put
+ .FontIndex % font_index
+} bind def
+
+% ------ notdef operators ------ %
+
+/beginnotdefchar { % <count> beginnotdefchar -
+ pop mark
+} bind def
+/endnotdefchar { % <code> <cid> ... endnotdefchar -
+ 2 .endmapchars
+} bind def
+
+/beginnotdefrange { % <count> beginnotdefrange -
+ pop mark
+} bind def
+/endnotdefrange { % <code_lo> <code_hi> <cid> ... endnotdefrange -
+ 2 .endmapranges
+} bind def
+
+% ---------------- Resource category definition ---------------- %
+
+currentdict end
+
+languagelevel exch 2 .setlanguagelevel
+
+/CMap /Generic /Category findresource dup length dict .copydict
+dup /InstanceType /dicttype put
+dup /DefineResource {
+ % The AdobePS5 Windows driver emits code that attempts to
+ % create CMaps without the required CMapName entry.
+ % Work around this here.
+ dup /CMapName known not {
+ dup wcheck not {
+ .currentglobal exch dup wcheck .setglobal
+ dup length dict .copydict exch .setglobal
+ } if
+ dup gcheck 2 index gcheck not and {
+ exch .currentglobal exch //true .setglobal
+ dup length string copy exch .setglobal exch
+ } if dup /CMapName 3 index put
+ } if
+ % Adobe PS CET 23-25 and others define an almost empty CMap. Tolerate this.
+ % With the above, we can actually tolerate: /name << >> defineresource
+ dup /CIDSystemInfo known not {
+ dup wcheck not {
+ .currentglobal exch dup wcheck .setglobal
+ dup length dict .copydict exch .setglobal
+ } if
+ dup /CIDSystemInfo [ //null ] put
+ } if
+ dup /CodeMap .knownget { //null eq { .buildcmap } if } if
+ /Generic /Category findresource /DefineResource get exec
+} bind put
+/Category defineresource pop
+ % We might have loaded CID font support already.
+/CIDInit /ProcSet 2 copy { findresource } .internalstopped
+ % An interior `stopped' might have reset VM allocation to local.
+//true .setglobal
+ { pop pop 3 -1 roll }
+ { dup length 4 index length add dict .copydict 4 -1 roll exch .copydict }
+ifelse exch defineresource pop
+
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_cmdl.ps b/Master/tlpkg/tlgs/lib/gs_cmdl.ps
new file mode 100644
index 00000000000..2299c5c5f08
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cmdl.ps
@@ -0,0 +1,180 @@
+% Copyright (C) 1994, 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cmdl.ps 6300 2005-12-28 19:56:24Z giles $
+% Parse and execute the command line.
+% C code handles the following switches: -h/-? -I -M -v
+
+/cmddict 50 dict def
+cmddict begin
+
+% ---------------- Utility procedures ---------------- %
+
+% Get the next argument from the parsed argument list.
+/nextarg % - nextarg <arg> true
+ % - nextarg false
+ { argv length 0 eq
+ { false }
+ { argv dup 0 get exch dup length 1 sub 1 exch getinterval /argv exch def }
+ ifelse
+ } bind def
+
+% Run a file, under job control if implemented.
+/runjob % <file> runjob -
+ { end % cmddict
+ /startjob where { pop false () startjob pop }
+ run
+ //cmddict begin
+ } bind def
+/runfilejob % <filename> runfilejob -
+ { findlibfile { exch pop } { (r) file } runjob
+ } bind def
+
+% Expand arguments. Free variables: expand@.
+/expandarg % <string> expandarg <args...>
+ { dup () eq
+ { pop
+ }
+ { dup dup (--) eq exch (-+) eq or
+ { pop /expand@ false def
+ }
+ { expand@ { (@) anchorsearch } { false } ifelse
+ { pop findlibfile
+ { exch pop }
+ { (r) file } % let the error happen
+ expandargfile
+ }
+ if
+ }
+ ifelse
+ }
+ } bind def
+/expandargfile % <file> expandargfile <args...>
+ { [ exch cvlit
+ { token not { exit } if
+ dup type /stringtype ne { =string cvs dup length string copy } if
+ expandarg
+ }
+ /exec cvx
+ ] cvx loop
+ } bind def
+
+% ---------------- Recognized switches ---------------- %
+
+% Switches with arguments are defined as <x>;
+% switches without arguments are defined as -<x>.
+
+% Switches without arguments
+/--
+ { nextarg not
+ { (-- and -+ require a file name.) = flush }
+ { //systemdict /ARGUMENTS argv put /argv [] def runjob }
+ ifelse
+ } bind def
+/-+ /-- load def
+/-@ /-- load def
+/-A { (@) Z } bind def
+/-c
+ { { argv length 0 eq { exit } if
+ argv 0 get (-) anchorsearch { pop pop exit } if
+ pop nextarg token
+ { exch pop % Probably should check for empty.
+ end exec //cmddict begin
+ }
+ if
+ }
+ loop
+ } bind def
+/-e { (#) Z } bind def
+/-E /-e load def
+/-f { } def
+/-q { //systemdict /QUIET true put } bind def
+
+% Switches with arguments
+/d
+ { (=) search not { (#) search not { () exch dup } if } if
+ exch pop cvn dup where
+ { pop (Redefining ) print print ( is not allowed.) = flush pop }
+ { exch token
+ { exch pop } % Probably should check for empty.
+ { true }
+ ifelse
+ //systemdict 3 1 roll put
+ }
+ ifelse
+ } bind def
+/D /d load def
+/f { dup length 0 ne { runfilejob } if } bind def
+/g
+ { (x) search { cvi pop exch cvi } { cvi dup } ifelse
+ //systemdict begin /DEVICEHEIGHT exch def /DEVICEWIDTH exch def end
+ } bind def
+/r
+ { (x) search { cvr pop exch cvr } { cvr dup } ifelse
+ //systemdict begin /DEVICEYRESOLUTION exch def /DEVICEXRESOLUTION exch def end
+ } bind def
+/s
+ { (=) search not { (#) search not { () exch dup } if } if
+ exch pop cvn dup where { pop dup load } { () } ifelse
+ type /stringtype ne
+ { (Redefining ) print print ( is not allowed.) = flush pop }
+ { exch //systemdict 3 1 roll put }
+ ifelse
+ } bind def
+/S /s load def
+/Z { true .setdebug } bind def
+
+% ---------------- Main program ---------------- %
+
+% We process the command line in two passes. In the first pass,
+% we read and expand any @-files as necessary. The second pass
+% does the real work.
+
+/cmdstart
+ { //cmddict begin
+ /expand@ true def
+ [
+ % Process the GS_OPTIONS environment variable.
+ (GS_OPTIONS) getenv { 0 () /SubFileDecode filter expandargfile } if
+ % Process the actual command line.
+ .getargv { expandarg } forall
+ ] readonly /argv exch def
+ % Now interpret the commands.
+ { nextarg not { exit } if
+ dup 0 get (-) 0 get eq
+ { dup length 1 eq
+ { pop (%stdin) (r) file runjob
+ }
+ { dup length 2 gt
+ { dup dup length 2 sub 2 exch getinterval exch 1 1 getinterval }
+ if currentdict .knownget
+ { exec
+ }
+ { (Ignoring unknown switch ) print
+ dup length 1 eq { (-) print print } if print
+ () = flush
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { runfilejob
+ }
+ ifelse
+ }
+ loop end
+ } bind def
+
+end % cmddict
diff --git a/Master/tlpkg/tlgs/lib/gs_cspace.ps b/Master/tlpkg/tlgs/lib/gs_cspace.ps
new file mode 100644
index 00000000000..c7149c7ba44
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_cspace.ps
@@ -0,0 +1,1022 @@
+% Copyright (C) 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_cspace.ps 8048 2007-06-13 16:27:33Z tim $
+% basic colorspace mechanism
+
+%
+% This new implementation of color spaces extends the color space
+% formalism to all PostScript levels. Level specific features and
+% operators continue to be accessible only in the appropriate level,
+% but the colorspace concept and associated mechanisms are used
+% throughout.
+%
+% The color space mechanism is built around two dictionaries:
+%
+% .cspace_util
+% A dictionary in global VM that is accessible in userdict only
+% during initialization. This dictionary is intended for various
+% utility procedures that are used in implementing the individual
+% color spaces.
+%
+% colorspacedict
+% A dictionary of methods for each color space type. The keys
+% in this dictionary are color space type names (e.g.: /DeviceGray,
+% /Separation, etc.), and the values are dictionaries of methods.
+% The set of methods is the same for each color space type, and
+% provides a complete implementation for the corresponding color
+% space type. This dictionary is in global VM.
+%
+% The information specific to a color space type is created in a file
+% for that type or group of types (e.g.: gs_csdev.ps, gs_csindx.ps,
+% etc.). These files will generally adhere to the template:
+%
+% .currentglobal true .setglobal
+% <level-specific dictionary> begin
+% ...
+% .cspace_util begin
+% colorspacedict
+% /<color space type name>
+% mark
+% /cs_validate
+% {
+% ...
+% }
+% bind
+% ...
+% .dicttomark
+% put
+% end % .cspace_util
+% end ... % level-specific dictionary
+% .setglobal
+%
+% The methods associated with a color space are listed below (along with
+% their stack handling), followed by descriptions.
+%
+% - cs_potential_indexed_base <bool>
+%
+% - cs_potential_pattern_base <bool>
+%
+% - cs_potential_alternate <bool>
+%
+% - cs_potential_icc_alternate <bool>
+%
+%
+% <name | array> cs_get_ncomps <int>
+%
+% <name | array> cs_get_range <range_array>
+%
+% <name | array> cs_get_default_color <c1> ... <cn>
+%
+%
+% <c1> ... <cn> <name | array> cs_get_currentgray <gray>
+%
+% <c1> ... <cn> <name | array> cs_get_currentrgb <red> <green> <blue>
+%
+% <c1> ... <cn> <name | array> cs_get_currentcmyk
+% <cyan> <magenta> <yellow> <black>
+%
+%
+% <name | array> cs_validate <name | array>
+%
+% <name1 | array1> cs_substitute <name1 | array1> <array2>
+%
+% <name1 | array1> <array2> cs_prepare <name1 | array1> <array2>
+%
+% <name | array> cs_install -
+%
+%
+% <c1> ... <cn> <array> cs_verify_color <c1> ... <cn>
+%
+% <array> cs_complete_color -
+%
+%
+% cs_potential_indexed_base, cs_potential_pattern_base,
+% cs_potential_alternate, cs_potential_icc_alternate
+% These are booleans rather than procedures. They indicate if the color
+% space can be a base space of an Indexed color space (anything except
+% Indexed and Pattern), a Pattern color space (anything except Pattern),
+% the alternative color space of a Separation or DeviceN color space, or
+% the alternative color space of an ICCBased color space. The two
+% parameters are distinct only because of a Ghostscript-specific
+% implementation problem; in principle, there is nothing special about
+% ICCBased color spaces in this regard.
+%
+% cs_get_ncomps
+% Return the number of color components for the color spaces. For Pattern
+% color spaces, the value is -1 if there is no base space, or -(n + 1) if
+% the base space has n components.
+%
+% cs_get_range
+% Return the input Range array appropriate for this color space. This is
+% defined for all color spaces, though it is of interest primarily for
+% CIEBased and ICCBased color spaces. For Indexed color spaces this is
+% [ 0 hival ], where hival is the maximum support index value. For all
+% other non-CIEBased, non-ICCBased color spaces, the range is an array
+% of ncomps elements, all of which are [ 0 1 ], where ncomps is the
+% number of color space components.
+%
+% cs_get_default_color
+% Generates the default color for the current color space. Under normal
+% circumstances this is done internally. It is provided in PostScript
+% only to support an optimization that doesn't change the current color
+% space more often than necessary.
+%
+% cs_get_currentgray, cs_get_currentrgb, cs_get_currentcmyk
+% These procedures are used to implement the currentgray, currentrgb,
+% and currentcmyk operators (which are pseudo-operators in the current
+% implementation).
+%
+% cs_validate
+% Validate the operand color space. Because color spaces are extensively
+% manipulated in PostScript in this implementation, error handling can
+% become burdensome. To make the code somewhat simpler, it is useful to
+% be able to validate a color space prior to manipulation, so as to
+% ensure that errors are not discovered in awkward places.
+%
+% cs_substitute
+% Substitute a device-independent color space for device specific color
+% space. This applies directly to the device-specific color spaces
+% (DeviceGray, DeviceRGB, DeviceCMYK), and indirectly when these color
+% spaces are used as base/alternative color spaces. The mechanism for
+% color substitution is included in all language levels, though it may
+% only be accessed for Language Level 3.
+%
+% The substituted color space is the topmost of the operands pushed.
+% this may or may not be the same as the original color space, which
+% is immediately below it on the operand stack. If the two differ,
+% the substituted space will always be in local VM (and will be
+% writable).
+%
+% Substitution is applied recursively to the base/alternate color
+% space of ICCBased, Indexed, Separation, DeviceN, or Pattern
+% color spaces. Because Ghostscript currently requires that any
+% base or alternative color space be the current color space when
+% the enclosing color space is set, this substitution effectively
+% occurs twice: once in the original color space, and once when the
+% base/alternative color space is made the current color space.
+% We retain the first substitution as we would eventually like to
+% remove the restriction on making the base/alternative color space
+% the current color space.
+%
+% cs_prepare
+% Perform any operations required on the color space for installation.
+% This method exists primarily to allow conversion of PostScript
+% procedures to functions for CIEBased color spaces. Two operands are
+% provided: the original and the substituted color space. If the two
+% differ and the latter is writable, required modifications can
+% be made "in place". Otherwise, a new instance of the second color
+% space must be built.
+%
+% Currently, cs_prepare is not explicitly recursive. Because
+% Ghostscript requires a base/alternate color space to be installed
+% as the current color space prior to installing the enclosing color
+% space, the cs_prepare method will implicitly be called recursively.
+% The reason for not making this explicit is that color space
+% preparation may involve a considerable amount of work, which could
+% be avoided if, for example, an alternative color space will not
+% be used because the enclosing Separation/DeviceN color space is
+% supported in native mode by the process color model. We would
+% eventually like to remove the need to prepare color spaces that
+% will not be used.
+%
+% cs_install
+% This method actually installs the color space in the graphic state.
+% Only the substituted/prepared space (which may be the same as the
+% original space) is passed as an operand; the original space is handled
+% directly by the .setcolorspace operator.
+%
+% The provision of a separate method for this tasks reflects the
+% historical implementation of color spaces in the Ghostscript
+% interpreter. This implementation provides a unique operator for each
+% color space type.
+%
+% cs_prepare_color
+% Modify a set of color operands as required by a color space. This
+% is used primarily to verify the color operands, as this is most
+% conveniently done in PostScript.
+%
+% cs_complete_setcolor
+% This method is invoked immediately after a (successful) invocation
+% of setcolor. Ii is provided as a separate method for compatibility
+% with Adobe implementations. These implementations invoke the lookup
+% (Indexed) or tint procedure each time setcolor is invoked (only if
+% the alternative color space is used in the case of the tint
+% transform). Because Ghostscript may convert these procedures to
+% functions (or pre-sample them), the procedures may not always be
+% called when expected. There are applications that depend on this
+% behavior (e.g.: Adobe PhotoShop 5+), so this method provides a way
+% to emulate it.
+%
+% In principle, a cs_complete_setcolor procedure for an Indexed color
+% space whose base space should invoke cs_complete_setcolor on its
+% base space. Currently we don't do this, because it has not been
+% shown to be necessary. It would be simple to add if it is every
+% needed.
+%
+% All of these methods are procedures.
+%
+% For each of these methods, there is a procedure in .cspace_util with
+% a dot ('.') prefix that will invoke the appropriate procedure for the
+% operand array.
+%
+
+.currentglobal true .setglobal
+userdict /.cspace_util 80 dict put
+.cspace_util begin
+
+
+% Global, read-only, unpacked, array-form device color spaces
+%
+/DeviceGray_array /DeviceGray 1 array astore readonly def
+/DeviceRGB_array /DeviceRGB 1 array astore readonly def
+/DeviceCMYK_array /DeviceCMYK 1 array astore readonly def
+
+%
+% Colorspacedict is initially in .cspace_util; it is copied to level2dict
+% in the Level 2 initialization code to retain compatibility with
+% earlier implementations.
+%
+/colorspacedict 20 dict def
+
+
+%
+% <obj> make_array1 <array>
+%
+% procedure for conditionally converting a named color space to a
+% 1-element array. Since names are always global, the array will be
+% as well.
+%
+/make_array1
+ {
+ dup type /nametype eq
+ { currentglobal true setglobal exch 1 array astore exch setglobal }
+ if
+ }
+bind def
+
+%
+% <name|array> .get_cspace_type name
+%
+% Provide generic routine for retrieving the color space type.
+%
+/.get_cspace_type
+ {
+ dup type dup /arraytype eq exch /packedarraytype eq or
+ { 0 get }
+ if
+ }
+bind def
+
+%
+% <name|array> .get_method_dict <dict>
+%
+% Get the method dictionary for a specific color space. Note that the
+% color space is left on the stack.
+%
+/.get_method_dict
+ { //colorspacedict exch //.get_cspace_type exec get }
+bind def
+
+%
+% <name|array> <proc_name> .get_method <name|array> <proc | bool>
+%
+% Get the named method for the operand color space.
+%
+/.get_method
+ { exch //.get_method_dict exec exch get }
+bind def
+
+
+%
+% <name_array> .cs_potential_indexed_base <bool>
+% <name_array> .cs_potential_pattern_base <bool>
+% <name_array> .cs_potential_alternate <bool>
+% <name_array> .cs_potential_icc_alternate <bool>
+% <name | array> .cs_get_ncomps <int>
+% <name | array> .cs_get_range <range_array>
+% <name | array> .cs_get_default_color <c1> ... <cn>
+% <c1> ... <cn> <name | array> .cs_get_currentgray <gray>
+% <c1> ... <cn> <name | array> .cs_get_currentrgb <r> <g> <b>
+% <c1> ... <cn> <name | array> .cs_get_currentcmyk <c> <m> <y> <k>
+% <name | array> .cs_validate <name | array>
+% <name1 | array1> .cs_substitute <name1 | array1> <array2>
+% <name1 | array1> <array2> .cs_prepare <name1 | array1> <array2>
+% <name | array> .cs_install -
+% <c1> ... <cn> <array> .cs_prepare_color <c1> ... <cn>
+% <array> .cs_complete_setcolor -
+%
+% These procedures provide access to the corresponding methods of the
+% operand color space.
+%
+/.cs_potential_indexed_base
+ { /cs_potential_indexed_base //.get_method exec }
+bind def
+
+/.cs_potential_pattern_base
+ { /cs_potential_pattern_base //.get_method exec }
+bind def
+
+/.cs_potential_alternate
+ { /cs_potential_alternate //.get_method exec }
+bind def
+
+/.cs_potential_icc_alternate
+ { /cs_potential_icc_alternate //.get_method exec }
+bind def
+
+/.cs_get_ncomps
+ { dup /cs_get_ncomps //.get_method exec exec }
+bind def
+
+/.cs_get_range
+ { dup /cs_get_range //.get_method exec exec }
+bind def
+
+/.cs_get_default_color
+ { dup /cs_get_default_color //.get_method exec exec }
+bind def
+
+/.cs_get_currentgray
+ { dup /cs_get_currentgray //.get_method exec exec }
+bind def
+
+/.cs_get_currentrgb
+ { dup /cs_get_currentrgb //.get_method exec exec }
+bind def
+
+/.cs_get_currentcmyk
+ { dup /cs_get_currentcmyk //.get_method exec exec }
+bind def
+
+/.cs_validate
+ { dup /cs_validate //.get_method exec exec }
+bind def
+
+/.cs_substitute
+ { dup /cs_substitute //.get_method exec exec }
+bind def
+
+/.cs_prepare
+ { dup /cs_prepare //.get_method exec exec }
+bind def
+
+/.cs_install
+ { dup /cs_install //.get_method exec exec }
+bind def
+
+/.cs_prepare_color
+ { dup /cs_prepare_color //.get_method exec exec }
+bind def
+
+/.cs_complete_setcolor
+ { dup /cs_complete_setcolor //.get_method exec exec }
+bind def
+
+
+%
+% Make sure we have an interpreter color space before redefining
+% setcolorspace. The interpreter internal code only sets the effective
+% color space; the interpreters color spaces begins as a null object.
+%
+% NB: This should come prior to the redefinition of setcolorspace, and
+% must use an array operand.
+%
+//DeviceGray_array setcolorspace
+
+%
+% <c1> ... <cn> setcolor -
+%
+% As with setcolorspace, setcolor is initially placed in .cspace_util,
+% and is copied to level2dict by the Level 2 initialization code. The
+% internal definition of setcolor is removed from systemdict as soon
+% as this procedure is defined.
+%
+/setcolor
+ {
+ {
+ currentcolorspace //.cs_prepare_color exec //setcolor
+ currentcolorspace //.cs_complete_setcolor exec
+ }
+ stopped
+ { //.cspace_util /setcolor get $error /errorname get signalerror }
+ if
+ }
+bind odef
+
+systemdict /setcolor .undef
+
+
+%
+% <name|array> <bool> _setcolorspace -
+% <name|array> _setcolorspace_nosub -
+%
+% <name|array> setcolorspace -
+% <name|array> forcesetcolorspace -
+%
+% setcolorspace is initially placed in .cspace_util. It is copied to
+% level2dict by the Level 2 initialization code. The internal
+% setcolorspace operator is removed from systemdict as soon as this
+% procedure is defined.
+%
+% Because some jobs, in particular PDF jobs, repeatedly set the same
+% color space, this procedure will check if the operand and current
+% color spaces are the same. The check is absolute for parameterless
+% color spaces, conservative for others. For PostScript, this
+% optimization can only be employed if color space substitution is
+% disabled, as otherwise there is no way to account for possible changes
+% in the /Default* instances of the ColorSpace resource category. For PDF
+% jobs, resource category instances can only be changed at very specific
+% times (typically page boundaries), so the "operand color space is the
+% same as current color space" optimization may be used even if color
+% space substitution is in effect. The optimization is also highly
+% desirable in such cases, as it greatly improves performance.
+%
+% In certain situations, it is critical that a color space be set,
+% even if it is the same as the current color space. This is the case
+% when a CIEBased color space is used as a base or alternative color
+% space, due to some long-standing problems with the graphics libraries
+% handling of sampled information from the procedures in CIE color
+% spaces and the color rendering dictionary. The forcesetcolorspace
+% operator is provided for those situations.
+%
+% Note also that, if the current color space is not reset, at least
+% the current color must be reset to its default value.
+%
+% Another problem arises in the case of ICCBased color spaces. These
+% color spaces may be used to substitute for a DeviceGray/DeviceRGB/
+% DeviceCMYK color space, and may themselves require such a color
+% space as an alternate. Obviously, when this is the case the normal
+% setcolorspace mechanism would encounter and infinite loop if the
+% alternate colro space needed to be used. For this particular case,
+% the special _setcolorspace_nosub is provided, which suppresses
+% color space substitution. This routine does not bother to check if
+% the operand and current color space are the same.
+%
+/_setcolorspace
+ {
+ { % Early validation the argument. The code below fails in unpredictable ways
+ % when it is exposed to the garbage.
+ 1 index
+ dup type dup /arraytype eq exch /packedarraytype eq or { 0 get } if
+ dup type /nametype ne {
+ //.cspace_util /setcolorspace get /typecheck signalerror
+ } if
+ //colorspacedict exch known not {
+ //.cspace_util /setcolorspace get /undefined signalerror
+ } if
+
+ % See if the operand space is the same as the current space.
+ % The test is intentionaly conservative to meet CET 09-06.
+ 1 index % [/new] bool [/new]
+ type /nametype eq
+ { currentcolorspace 0 get % [/new] bool /old
+ 2 index eq % [/new] bool bool
+ }
+ { currentcolorspace % [/new] bool [/old]
+ 2 index eq % [/new] bool eq
+ }
+ ifelse
+ and dup
+ {
+ %
+ % If PDFfile is defined on the dictionary stack, this is a
+ % PDF job. No additional check is required in this case (see
+ % comment above).
+ %
+ /PDFfile where
+ { pop }
+ { .getuseciecolor not and } % check that UseCIEColor is off
+ ifelse
+ }
+ if
+ {
+ % Some versions of PhotoShop generate documents
+ % that place an extra value on the operand stack
+ % and tintTransform replaces it - see bug 549307
+ % for details. Also see the test case of bug 689263.
+ % Here we use mark...cleartomark to restore the stack
+ % to its normal state.
+ mark
+ true % An extra value for bogus Adobe tintTransform
+ 3 -1 roll
+ //.cs_get_default_color exec setcolor
+ cleartomark
+ }
+ {
+ //.cs_validate exec
+ //.cs_substitute exec
+ //.cs_prepare exec
+ //.cs_install exec
+ dup //make_array1 exec //setcolorspace
+ mark %See comments above
+ true
+ 3 -1 roll
+ //.cs_get_default_color exec setcolor
+ cleartomark
+ }
+ ifelse
+ }
+ stopped
+ { //.cspace_util /setcolorspace get $error /errorname get signalerror }
+ if
+ }
+bind def
+
+/_setcolorspace_nosub
+ {
+ {
+ //.cs_validate exec
+ dup
+ //.cs_prepare exec
+ //.cs_install exec
+ //make_array1 exec //setcolorspace
+ }
+ stopped
+ { //.cspace_util /setcolorspace get $error /errorname get signalerror }
+ if
+ }
+bind def
+
+/setcolorspace { //true //_setcolorspace exec } bind odef
+/forcesetcolorspace { //false //_setcolorspace exec } bind odef
+
+%
+% - initgraphics -
+%
+% The initgraphics operator must be redefined create a real color space.
+% Previously this was unnecessary, as .currentcolorspace could return
+% an integer.
+%
+%
+/initgraphics
+ { initgraphics //DeviceGray_array forcesetcolorspace }
+.bind systemdict begin odef end
+
+systemdict /setcolorspace .undef
+
+
+%
+% <gray> setgray -
+%
+% <r> <g> <b> setrgbcolor -
+%
+% <c> <m> <y> <b> setcmykcolor -
+%
+% The Level 1 color setting operators. setcmykcolor is created only if
+% setcolorscreen is present. These operators are always defined in
+% systemdict.
+%
+/setgray
+ {
+ { //DeviceGray_array //setcolorspace //setcolor }
+ stopped
+ { /setgray .systemvar $error /errorname get signalerror }
+ if
+ }
+bind systemdict begin odef end
+
+/setrgbcolor
+ {
+ { //DeviceRGB_array //setcolorspace //setcolor }
+ stopped
+ { /setrgbcolor .systemvar $error /errorname get signalerror }
+ if
+ }
+bind systemdict begin odef end
+
+/setcolorscreen where
+ {
+ pop
+ /setcmykcolor
+ {
+ { //DeviceCMYK_array //setcolorspace //setcolor }
+ stopped
+ { /setcmykcolor .systemvar $error /errorname get signalerror }
+ if
+ }
+ bind systemdict begin odef end
+ }
+if
+
+
+%
+% - currentgray <gray>
+%
+% - currentrgbcolor <r> <g> <b>
+%
+% - currentcmykcolor <c> <m> <y> <k>
+%
+% Return the current color, mapped to a DeviceGray, DeviceRGB, or
+% DeviceCMYK color space. The latter is only created if setcolorscreen
+% is present.
+/currentgray
+ { currentcolor currentcolorspace //.cs_get_currentgray exec }
+bind systemdict begin odef end
+
+/currentrgbcolor
+ { currentcolor currentcolorspace //.cs_get_currentrgb exec }
+bind systemdict begin odef end
+
+/setcolorscreen where
+ {
+ pop
+ /currentcmykcolor
+ { currentcolor currentcolorspace //.cs_get_currentcmyk exec }
+ bind systemdict begin odef end
+ }
+if
+
+
+
+%
+% Add some generically useful structures and procedures to .cspace_util.
+%
+
+%
+% Some common errors. The command for these errors will normally be
+% overwritten by the invoking operator. We cannot "load" the secolorspace
+% or setcolor operators, as they are not present in Level 1 systems.
+%
+/setcspace_typecheck
+ { /setcolorspace cvx /typecheck signalerror }
+bind def
+
+/setcspace_rangecheck
+ { /setcolorspace cvx /rangecheck signalerror }
+bind def
+
+/setcspace_invalidaccess
+ { /setcolorspace cvx /invalidaccess signalerror }
+bind def
+
+/setcspace_undefined
+ { /setcolorspace cvx /undefined signalerror }
+bind def
+
+/setcolor_typecheck
+ { /setcolor cvx /typecheck signalerror }
+bind def
+
+/setcolor_invalidaccess
+ { /setcolor cvx /invalidaccess signalerror }
+bind def
+
+
+%
+% <obj> check_array <obj>
+%
+% Check that an object is an array. Currently we don't check for
+% readability, as a failing get or length operator should generate
+% the appropriate invalidaccess error.
+/check_array
+ {
+ dup type dup /arraytype ne exch /packedarraytype ne and
+ { /setcolorspace cvx /typecheck signalerror }
+ if
+ }
+bind def
+
+
+% pre-defined procedures for cs_ncomps and cs_get_range
+/ncomps_1 { pop 1 } bind def
+/ncomps_3 { pop 3 } bind def
+/ncomps_4 { pop 4 } bind def
+
+/dflt_range_4 [ 0 1 0 1 0 1 0 1 ] readonly def
+/dflt_range_3 dflt_range_4 0 6 getinterval def
+/dflt_range_1 dflt_range_4 0 2 getinterval def
+
+% <obj> get_range_[1|3|4] <range>
+/get_range_1 { pop //dflt_range_1 } bind def
+/get_range_3 { pop //dflt_range_3 } bind def
+/get_range_4 { pop //dflt_range_4 } bind def
+
+
+%
+% <c1> ... <cn> <name | array> <n>
+% check_num_stack
+% <c1> ... <cn> <array | array>
+%
+% <c1> <array> validate_color_1 <c1>
+% <c1> <c2> <c3> <arraY> validate_color_3 <c1> <c2> <c3>
+% <c1> <c2> <c3> <c4> <arraY> validate_color_4 <c1> <c2> <c3> <c4>
+%
+% check_num_stack verifies that the stack consists of a color space array and
+% n numbers. This is used by most of the cs_prepare_color procedures. The
+% validate_color_[1|3|4] procedures can be used as the cs_prepare_color
+% procedure for Device specific, CIEBased, and Indexed color spaces.
+%
+% Note that the pseudo-operator that (indirectly) invokes this routine will
+% handle resetting the stacks.
+%
+/check_num_stack
+ { % c1 .. cn [] n
+ 1 1 3 2 roll % c1 .. cn [] 1 1 n
+ { index
+ type dup /integertype ne exch /realtype ne and
+ //setcolor_typecheck
+ if
+ }
+ for
+ } bind def
+
+% <c1> <array> validate_1 <c1>
+/validate_1 { 1 //check_num_stack exec pop } bind def
+
+% <c1> <c2> <c3> <array> validate_3 <c1> <c2> <c3>
+/validate_3 { 3 //check_num_stack exec pop } bind def
+
+% <c1> <c2> <c3> <c4> <array> validate_4 <c1> <c2> <c3> <c4>
+/validate_4 { 4 //check_num_stack exec pop } bind def
+
+
+%
+% <obj> pop_1 -
+%
+% This is a procedure form of pop. It may be used where a procedure is
+% expected, but the function of the procedure is the same as the pop
+% operator.
+/pop_1 { pop } bind def
+
+%
+% <obj> dup_1 <obj> <obj>
+%
+% An analog to pop_1, this one for dup.
+%
+/dup_1 { dup } bind def
+
+%
+% <obj1> ... <objn> <n> clear_n_objs -
+%
+% Clear n objects from the operand stack.
+%
+/clear_n_objs { //pop_1 repeat } bind def
+
+%
+% <obj1> ... <objn> <array> clear_setcolor_operands -
+%
+% Clear the setcolor operands for a color space.
+%
+/clear_setcolor_operands
+ { //.cs_get_ncomps exec //clear_n_objs exec }
+bind def
+
+%
+% Return 1, 3, or 4 zeros. These routines are used primarily for the
+% CIEBased color spaces, for which currentgray and currentrgb
+% should return 0 for all components, and currentcmyk should return
+% 0 0 0 1.0 (this varies from Adobe's documentation but is consistent
+% with their impelementations).
+%
+/no_currentgray { //.cs_get_ncomps exec //clear_n_objs exec 0. } bind def
+/no_currentrgb { //.cs_get_ncomps exec //clear_n_objs exec 0. 0. 0. } bind def
+/no_currentcmyk { //.cs_get_ncomps exec //clear_n_objs exec 0. 0. 0. 1.} bind def
+
+
+%
+% <num> bound_0_1 <num>
+%
+% Bound a number to the range [0.0, 1.0]
+%
+/bound_0_1
+ {
+ dup 0 lt
+ { pop 0.0 }
+ {
+ dup 1 gt
+ { pop 1.0 }
+ if
+ }
+ ifelse
+ }
+bind def
+
+
+%
+% Provide pseudo-operators for sethsbcolor and currenthsbcolor. These are
+% alternate versions of the setrgbcolor and currentrgbcolor operators, which
+% make use of a hue/staturation/brightness color description.
+%
+
+%
+% <num_1> ... <num_n> n max_n <num>
+% <num_1> ... <num_n> n min_n <num>
+%
+% Find the maximum and minum of 3 color component intensities.
+%
+/max_n
+ {
+ 1 sub
+ { 2 copy lt { exch } if pop }
+ repeat
+ }
+bind def
+
+/min_n
+ {
+ 1 sub
+ { 2 copy gt { exch } if pop }
+ repeat
+ }
+bind def
+
+
+%
+% <r> <g> <b> .rgb_2_hsb <h> <s> <br>
+% <h> <s> <br> .hsb_2_rgb <r> <g> <b>
+%
+% Convert between RGB and HSB colors, using the hexcone approach (see
+% Rogers, David, "Procedureal Elements For Computer Graphics",
+% (McGraw-Hill, 1985), pp. 402 - 3).
+%
+% The rgb ==> hsb calculation is:
+%
+% br = max(r, g, b)
+%
+% if (br == 0)
+% h = 0, s = 0;
+% else {
+% v = min(r, g, b)
+% diff = br - v;
+% sat = diff / br;
+% if (r == br)
+% h = (g - b) / (6 * diff) + (b > g ? 1 : 0);
+% else if (g == br)
+% h = 1/3 + (b - r) / (6 * diff);
+% else /* b == br */
+% h = 2/3 + (r - g) / (6 * diff);
+% }
+%
+% The hsb ==> rgb conversion is:
+%
+% mn = (1 - s) * br, md = 6 * s * br;
+%
+% switch ((int)floor(6 * h)) {
+% case 0: /* r >= g >= b */
+% r = br;
+% g = mn + h * md;
+% b = mn;
+% break;
+%
+% case 1: /* g >= r >= b */
+% r = mn + md * (1/3 - h);
+% g = br;
+% b = mn;
+% break;
+%
+% case 2: /* g >= b >= r */
+% r = mn;
+% g = br;
+% b = mn + (h - 1/3) * md;
+% break;
+%
+% case 3: /* b >= g >= r */
+% r = mn;
+% g = mn + (2/3 - h) * md;
+% b = br;
+% break;
+%
+% case 4: /* b >= r >= g */
+% r = mn + (h - 2/3) * md;
+% g = mn;
+% b = br;
+% break;
+%
+% case 5: /* r >= b >= g */
+% r = br;
+% g = mn;
+% b = mn + (1 - h) * md;
+% break;
+%
+% case 6: /* We have wrapped around the hexcone. Thus this case is
+% the same as case 0 with h = 0 */
+% h = 0;
+% r = br;
+% g = mn + h * md = mn;
+% b = mn;
+% break;
+% }
+%
+
+
+% Define 1/3 and 2/3 accurately (don't use literals like 0.333333).
+/.f1_3 1.0 3 div def
+/.f2_3 2.0 3 div def
+
+/.rgb_2_hsb
+ {
+ % find the largest and smallest components
+ 3 copy 3 //max_n exec dup 5 1 roll
+ dup 0.0 eq
+ { pop pop pop pop 0.0 0.0 }
+ {
+ 4 copy pop 3 //min_n exec 1 index exch sub
+ dup 2 index div 7 1 roll
+ dup 0.0 eq
+ { 5 { pop } repeat 0.0 3 1 roll }
+ {
+ 6.0 mul 5 1 roll
+ 2 copy eq % blue == brightness
+ { pop pop sub exch div //.f2_3 add }
+ {
+ 2 index eq % green == brightness
+ { exch pop exch sub exch div //.f1_3 add }
+ {
+ % red == brightness
+ sub exch pop exch div
+ dup 0.0 lt
+ { 1.0 add }
+ if
+ }
+ ifelse
+ }
+ ifelse
+ 3 1 roll
+ }
+ ifelse
+ }
+ ifelse
+ }
+bind def
+
+
+/.hsb_2_rgb
+ {
+ 3 { 0.0 max 1.0 min 3 1 roll } repeat % h s b
+ 1.0 2 index sub 1 index mul % h s b (1-s)*b
+ 3 -1 roll 2 index mul 6.0 mul % h b (1-s)*b 6*s*b
+ 4 -1 roll % b (1-s)*b=nm 6*s*b=md h
+
+ % array of procedures for the 7 hue cases
+ {
+ % 0 ==> r >= g >= b % b nm md h
+ { mul 1 index add exch }
+
+ % 1 ==> g >= r >= b
+ { //.f1_3 exch sub mul 1 index add 3 1 roll }
+
+ % 2 ==> g >= b >= r
+ { //.f1_3 sub mul 1 index add 3 1 roll exch 3 -1 roll }
+
+ % 3 ==> b >= g >= r
+ { //.f2_3 exch sub mul 1 index add 3 -1 roll }
+
+ % 4 ==> b >= r >= g
+ { //.f2_3 sub mul 1 index add 3 1 roll exch }
+
+ % 5 ==> r >= b >= g
+ { 1.0 exch sub mul 1 index add }
+
+ % 6 ==> r = br, g = b = mn
+ % Case 6 is the same as case 0 with h = 0. This also simplifies
+ % the calculations.
+ { pop pop dup }
+ }
+ 1 index 6.0 mul cvi % b (1-s)*b 6*s*b h {} int(6*h)
+ get exec
+ }
+bind def
+
+
+%
+% <hue> <saturation> <brightness sethsbcolor -
+%
+% - currenthsbcolor <hue> <saturation> <brightness>
+%
+/sethsbcolor
+ {
+ { //.hsb_2_rgb exec setrgbcolor }
+ stopped
+ { /sethsbcolor .systemvar $error /errorname get signalerror }
+ if
+ }
+bind systemdict begin odef end
+
+/currenthsbcolor
+ {
+ { currentrgbcolor //.rgb_2_hsb exec }
+ stopped
+ { /currenthsbcolor .systemvar $error /errorname get signalerror }
+ if
+ }
+bind systemdict begin odef end
+
+currentdict /DeviceGray_array .undef
+currentdict /DeviceRGB_array .undef
+currentdict /DeviceCMYK_array .undef
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_css_e.ps b/Master/tlpkg/tlgs/lib/gs_css_e.ps
new file mode 100644
index 00000000000..7537aa25590
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_css_e.ps
@@ -0,0 +1,114 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_css_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the CFF StandardStrings that represent characters.
+% This is a pseudo-encoding.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/CFFStandardStrings mark
+
+% 0
+ /.notdef /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright /parenleft
+ /parenright /asterisk /plus /comma /hyphen
+ /period /slash /zero /one /two
+ /three /four /five /six /seven
+ /eight /nine /colon /semicolon /less
+ /equal /greater /question /at /A
+ /B /C /D /E /F
+ /G /H /I /J /K
+ /L /M /N /O /P
+% 50
+ /Q /R /S /T /U
+ /V /W /X /Y /Z
+ /bracketleft /backslash /bracketright /asciicircum /underscore
+ /quoteleft /a /b /c /d
+ /e /f /g /h /i
+ /j /k /l /m /n
+ /o /p /q /r /s
+ /t /u /v /w /x
+ /y /z /braceleft /bar /braceright
+ /asciitilde /exclamdown /cent /sterling /fraction
+% 100
+ /yen /florin /section /currency /quotesingle
+ /quotedblleft /guillemotleft /guilsinglleft /guilsinglright /fi
+ /fl /endash /dagger /daggerdbl /periodcentered
+ /paragraph /bullet /quotesinglbase /quotedblbase /quotedblright
+ /guillemotright /ellipsis /perthousand /questiondown /grave
+ /acute /circumflex /tilde /macron /breve
+ /dotaccent /dieresis /ring /cedilla /hungarumlaut
+ /ogonek /caron /emdash /AE /ordfeminine
+ /Lslash /Oslash /OE /ordmasculine /ae
+ /dotlessi /lslash /oslash /oe /germandbls
+% 150
+ /onesuperior /logicalnot /mu /trademark /Eth
+ /onehalf /plusminus /Thorn /onequarter /divide
+ /brokenbar /degree /thorn /threequarters /twosuperior
+ /registered /minus /eth /multiply /threesuperior
+ /copyright /Aacute /Acircumflex /Adieresis /Agrave
+ /Aring /Atilde /Ccedilla /Eacute /Ecircumflex
+ /Edieresis /Egrave /Iacute /Icircumflex /Idieresis
+ /Igrave /Ntilde /Oacute /Ocircumflex /Odieresis
+ /Ograve /Otilde /Scaron /Uacute /Ucircumflex
+ /Udieresis /Ugrave /Yacute /Ydieresis /Zcaron
+% 200
+ /aacute /acircumflex /adieresis /agrave /aring
+ /atilde /ccedilla /eacute /ecircumflex /edieresis
+ /egrave /iacute /icircumflex /idieresis /igrave
+ /ntilde /oacute /ocircumflex /odieresis /ograve
+ /otilde /scaron /uacute /ucircumflex /udieresis
+ /ugrave /yacute /ydieresis /zcaron /exclamsmall
+ /Hungarumlautsmall /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall
+ /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader /zerooldstyle
+ /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle
+ /sixoldstyle /sevenoldstyle /eightoldstyle /nineoldstyle /commasuperior
+% 250
+ /threequartersemdash /periodsuperior /questionsmall /asuperior /bsuperior
+ /centsuperior /dsuperior /esuperior /isuperior /lsuperior
+ /msuperior /nsuperior /osuperior /rsuperior /ssuperior
+ /tsuperior /ff /ffi /ffl /parenleftinferior
+ /parenrightinferior /Circumflexsmall /hyphensuperior /Gravesmall /Asmall
+ /Bsmall /Csmall /Dsmall /Esmall /Fsmall
+ /Gsmall /Hsmall /Ismall /Jsmall /Ksmall
+ /Lsmall /Msmall /Nsmall /Osmall /Psmall
+ /Qsmall /Rsmall /Ssmall /Tsmall /Usmall
+ /Vsmall /Wsmall /Xsmall /Ysmall /Zsmall
+% 300
+ /colonmonetary /onefitted /rupiah /Tildesmall /exclamdownsmall
+ /centoldstyle /Lslashsmall /Scaronsmall /Zcaronsmall /Dieresissmall
+ /Brevesmall /Caronsmall /Dotaccentsmall /Macronsmall /figuredash
+ /hypheninferior /Ogoneksmall /Ringsmall /Cedillasmall /questiondownsmall
+ /oneeighth /threeeighths /fiveeighths /seveneighths /onethird
+ /twothirds /zerosuperior /foursuperior /fivesuperior /sixsuperior
+ /sevensuperior /eightsuperior /ninesuperior /zeroinferior /oneinferior
+ /twoinferior /threeinferior /fourinferior /fiveinferior /sixinferior
+ /seveninferior /eightinferior /nineinferior /centinferior /dollarinferior
+ /periodinferior /commainferior /Agravesmall /Aacutesmall /Acircumflexsmall
+% 350
+ /Atildesmall /Adieresissmall /Aringsmall /AEsmall /Ccedillasmall
+ /Egravesmall /Eacutesmall /Ecircumflexsmall /Edieresissmall /Igravesmall
+ /Iacutesmall /Icircumflexsmall /Idieresissmall /Ethsmall /Ntildesmall
+ /Ogravesmall /Oacutesmall /Ocircumflexsmall /Otildesmall /Odieresissmall
+ /OEsmall /Oslashsmall /Ugravesmall /Uacutesmall /Ucircumflexsmall
+ /Udieresissmall /Yacutesmall /Thornsmall /Ydieresissmall
+% 379 = end
+
+counttomark packedarray exch pop
+10 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_dbt_e.ps b/Master/tlpkg/tlgs/lib/gs_dbt_e.ps
new file mode 100644
index 00000000000..656669a38a3
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_dbt_e.ps
@@ -0,0 +1,59 @@
+% Copyright (C) 1993, 1994 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_dbt_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Dingbats encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/DingbatsEncoding
+% \000
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \040
+ /space /a1 /a2 /a202 /a3 /a4 /a5 /a119
+ /a118 /a117 /a11 /a12 /a13 /a14 /a15 /a16
+ /a105 /a17 /a18 /a19 /a20 /a21 /a22 /a23
+ /a24 /a25 /a26 /a27 /a28 /a6 /a7 /a8
+% \100
+ /a9 /a10 /a29 /a30 /a31 /a32 /a33 /a34
+ /a35 /a36 /a37 /a38 /a39 /a40 /a41 /a42
+ /a43 /a44 /a45 /a46 /a47 /a48 /a49 /a50
+ /a51 /a52 /a53 /a54 /a55 /a56 /a57 /a58
+% \140
+ /a59 /a60 /a61 /a62 /a63 /a64 /a65 /a66
+ /a67 /a68 /a69 /a70 /a71 /a72 /a73 /a74
+ /a203 /a75 /a204 /a76 /a77 /a78 /a79 /a81
+ /a82 /a83 /a84 /a97 /a98 /a99 /a100 /.notdef
+% \200
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \240
+ /.notdef /a101 /a102 /a103 /a104 /a106 /a107 /a108
+ /a112 /a111 /a110 /a109 /a120 /a121 /a122 /a123
+ /a124 /a125 /a126 /a127 /a128 /a129 /a130 /a131
+ /a132 /a133 /a134 /a135 /a136 /a137 /a138 /a139
+% \300
+ /a140 /a141 /a142 /a143 /a144 /a145 /a146 /a147
+ /a148 /a149 /a150 /a151 /a152 /a153 /a154 /a155
+ /a156 /a157 /a158 /a159 /a160 /a161 /a163 /a164
+ /a196 /a165 /a192 /a166 /a167 /a168 /a169 /a170
+% \340
+ /a171 /a172 /a173 /a162 /a174 /a175 /a176 /a177
+ /a178 /a179 /a193 /a180 /a199 /a181 /a200 /a182
+ /.notdef /a201 /a183 /a184 /a197 /a185 /a194 /a198
+ /a186 /a195 /a187 /a188 /a189 /a190 /a191 /.notdef
+256 packedarray .defineencoding
+3 DingbatsEncoding .registerencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_devcs.ps b/Master/tlpkg/tlgs/lib/gs_devcs.ps
new file mode 100644
index 00000000000..08ad3591978
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_devcs.ps
@@ -0,0 +1,250 @@
+% Copyright (C) 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_devcs.ps 7216 2006-11-22 01:26:37Z ray $
+% Device-specific color space method dictionaries.
+
+%
+% This file implements the method dictionaries for the Device-specific
+% color spaces. See gs_cspace.ps for information.
+%
+% Note that, because these color spaces are parameter-less, no color
+% space validation is required: if we can get to the color space methods,
+% we know the color space is legitimate.
+%
+% The colorspace substitution routines for these color spaces
+% (cs_substitute) will fail in a Level 1 system, but this is not a
+% problem as .getuseciecolor will always return false for such systems.
+%
+.currentglobal true .setglobal
+.cspace_util begin
+
+%
+% <r> <g> <b> rgb_2_gray <gray>
+%
+% Convert RGB colors to gray. This includes a special check for
+% r == g == b, and avoids roundoff error if this is the case.
+%
+/rgb_2_gray
+ {
+ 3 copy 1 index eq 3 1 roll eq and
+ { pop pop }
+ { .11 mul exch .59 mul add exch .3 mul add }
+ ifelse
+ }
+bind def
+
+systemdict /..page_default_spaces 3 dict put
+
+% <color_space_name> ..includecolorspace -
+/..includecolorspace
+{ % Only includes ones explicitly defined by the document.
+ systemdict /..page_default_spaces get 1 index known {
+ pop
+ } {
+ mark exch
+ { dup /ColorSpace resourcestatus {
+ pop 0 eq {
+ systemdict /..page_default_spaces get 1 index //true put
+ gsave
+ { dup /ColorSpace findresource //_setcolorspace_nosub exec .includecolorspace
+ } stopped pop
+ grestore
+ } if
+ } if
+ } stopped pop
+ cleartomark
+ } ifelse
+} bind def
+
+% <color_space> <color_space_name> cs_substitute_generic <color_space1> <color_space2>
+/cs_substitute_generic
+{ .getuseciecolor
+ { NOSUBSTDEVICECOLORS
+ { //..includecolorspace exec dup }
+ { /ColorSpace findresource }
+ ifelse
+ }
+ { pop dup }
+ ifelse
+}
+bind def
+
+% <color_space> <color_space_name> cs_substitute_DeviceRGB_for_PDFX_or_PDFA <color_space1> <color_space2>
+/cs_substitute_DeviceRGB_for_PDFX_or_PDFA
+{ systemdict /PDFX .knownget not { false } if
+ systemdict /PDFA .knownget not { false } if
+ or {
+ dup /ColorSpace resourcestatus {
+ pop pop
+ } {
+ (Error: Need a /DefaultRGB /ColorSpace resource for generating a PDF/X or PDF/A document.) =
+ /cs_substitute_DeviceRGB_for_PDFX_or_PDFA cvx /undefined signalerror
+ } ifelse
+ /ColorSpace findresource
+ } {
+ //cs_substitute_generic exec
+ } ifelse
+} bind def
+
+colorspacedict
+
+dup
+/DeviceGray
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_1
+ /cs_get_range //get_range_1
+ /cs_get_default_color { pop 0.0 } bind
+ /cs_get_currentgray //pop_1
+ /cs_get_currentrgb { pop dup dup } bind
+ /cs_get_currentcmyk { pop 1.0 exch sub 0.0 0.0 0.0 4 -1 roll } bind
+ /cs_validate {}
+
+ /cs_substitute
+ { /DefaultGray //cs_substitute_generic exec
+ }
+ bind
+
+ /cs_prepare {}
+ /cs_install { pop 0 .setdevcspace } bind
+ /cs_prepare_color //validate_1
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+put
+
+
+/DeviceRGB
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_3
+ /cs_get_range //get_range_3
+ /cs_get_default_color { pop 0.0 0.0 0.0 } bind
+ /cs_get_currentgray { pop //rgb_2_gray exec } bind
+ /cs_get_currentrgb //pop_1
+
+ % to convert to cmyk use blackgeneration and undercolorremoval
+ /cs_get_currentcmyk
+ {
+ pop
+
+ % convert to subtractive (CMY) color space
+ 3
+ { 1.0 exch sub 3 1 roll }
+ repeat
+
+ % find the minimum (initial k component)
+ 3 copy
+ 2
+ {
+ 2 copy gt
+ { exch }
+ if
+ pop
+ }
+ repeat
+
+ % apply undercolorremoval
+ dup 5 1 roll currentundercolorremoval exec cvr 4 1 roll
+ 3
+ { 3 index sub //bound_0_1 exec 3 1 roll }
+ repeat
+
+ % apply blackgeneration
+ 5 3 roll pop currentblackgeneration exec cvr //bound_0_1 exec
+ }
+ bind
+
+ /cs_validate {}
+
+ /cs_substitute
+ { /DefaultRGB //cs_substitute_DeviceRGB_for_PDFX_or_PDFA exec
+ }
+ bind
+
+ /cs_prepare {}
+ /cs_install { pop 1 .setdevcspace } bind
+ /cs_prepare_color //validate_3
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal
+
+
+% Only create the DeviceCMYK color space if setcolorscreen is present
+/setcolorscreen where
+ { pop }
+ { currentfile closefile }
+ifelse
+
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+colorspacedict
+/DeviceCMYK
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_4
+ /cs_get_range //get_range_4
+ /cs_get_default_color { pop 0.0 0.0 0.0 1.0 } bind
+
+ /cs_get_currentgray
+ { pop 4 1 roll //rgb_2_gray exec add 1.0 exch sub //bound_0_1 exec }
+ bind
+
+ /cs_get_currentrgb
+ {
+ pop
+ 4 1 roll 3
+ { 3 index add 1.0 exch sub //bound_0_1 exec 3 1 roll }
+ repeat
+ 4 -1 roll pop
+ }
+ bind
+
+ /cs_get_currentcmyk //pop_1
+
+ /cs_validate {}
+
+ /cs_substitute
+ { /DefaultCMYK //cs_substitute_generic exec
+ }
+ bind
+
+ /cs_prepare {}
+ /cs_install { pop 2 .setdevcspace } bind
+ /cs_prepare_color //validate_4
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+put
+
+currentdict /..includecolorspace .undef
+currentdict /cs_substitute_generic .undef
+
+end % .cspace_util
+.setglobal
+
diff --git a/Master/tlpkg/tlgs/lib/gs_devn.ps b/Master/tlpkg/tlgs/lib/gs_devn.ps
new file mode 100644
index 00000000000..7b717123816
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_devn.ps
@@ -0,0 +1,218 @@
+% Copyright (C) 2001, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_devn.ps 8048 2007-06-13 16:27:33Z tim $
+% DeviceN color space method dictionary; this depends on gs_sepr.ps
+
+
+% verify that DeviceN and Separation color spaces are supported
+/.setdevicenspace where
+ {
+ pop
+ /.setseparationspace where
+ { pop //false }
+ { //true }
+ ifelse
+ }
+ { //true }
+ifelse
+ { currentfile closefile }
+if
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+
+%
+% <c1> ... <cm> <array> apply_devn_tint_xform <c1>' ... <cn>' <array>
+%
+% Apply the tint transformation for the DeviceN color intensity values.
+/apply_devn_tint_xform
+ {
+ dup 1 get length 1 add exch
+ mark 2 index 2 add 2 roll
+ index 3 get exec
+ counttomark 2 add -2 roll pop
+ }
+bind def
+
+
+
+colorspacedict
+/DeviceN
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate false
+ /cs_potential_icc_alternate false
+ /cs_get_ncomps { 1 get length } bind
+ /cs_get_range { 1 get length [ exch { 0 1 } repeat ] } bind
+ /cs_get_default_color { 1 get length { 1 } repeat } bind
+
+ /cs_get_currentgray
+ { //apply_devn_tint_xform exec 2 get //.cs_get_currentgray exec }
+ bind
+ /cs_get_currentrgb
+ { //apply_devn_tint_xform exec 2 get //.cs_get_currentrgb exec }
+ bind
+ /cs_get_currentcmyk
+ { //apply_devn_tint_xform exec 2 get //.cs_get_currentcmyk exec }
+ bind
+
+ % a lot of validation is done by the cs_validate method
+ /cs_validate
+ {
+ //check_array exec
+ dup 1 get //check_array exec
+ {
+ type dup /nametype ne exch /stringtype ne and
+ //setcspace_typecheck
+ if
+ }
+ forall
+ dup 2 get //.cs_validate exec //.cs_potential_alternate exec not
+ //setcspace_rangecheck
+ if
+ dup 3 get //check_array exec xcheck not
+ //setcspace_typecheck
+ if
+ }
+ bind
+
+ % substitute the base space if appropriate
+ /cs_substitute
+ {
+ dup 2 get //.cs_substitute exec 2 copy eq
+ { pop pop dup }
+ {
+ % retain only the new alternate space
+ exch pop
+
+ % build all new structures in local VM
+ .currentglobal 3 1 roll //false .setglobal
+
+ % construct a new array and insert the new base color space
+ 1 index dup length array copy dup 2 4 -1 roll put
+
+ % restore VM mode
+ 3 -1 roll .setglobal
+ }
+ ifelse
+ }
+ bind
+
+ %
+ % The Ghostscript interpreter works better when tinttransform procedures
+ % are translated into functions. Attempt to do that here.
+ %
+ /cs_prepare //converttinttransform
+
+ %
+ % Install the current color space.
+ %
+ % The current Ghostscript color space implementation requires that
+ % color spaces that provide a base or alternative color space set
+ % that base/alternative color space to be the current color space
+ % before attempting to set the original color space.
+ %
+ % Beginning with Acrobat 5, PDF apparently supports 1-component
+ % DeviceN color spaces with the single component "All" (the "PDF
+ % Reference", 3rd ed., p. 206 still describes this as illegal).
+ % We translate such calls to Separation color spaces.
+ %
+ /cs_install
+ {
+ % save the current color space
+ currentcolorspace
+
+ % set the base color space as the current color space
+ 1 index 2 get //forcesetcolorspace
+
+ % set the indexed color space; restore the earlier space on error
+ mark 2 index
+ dup 1 get dup length 1 eq exch 0 get /All eq and
+ {
+ dup length array copy
+ dup 0 /Separation put
+ dup 1 /All put
+ { .setseparationspace }
+ } {
+ {
+ dup .setdevicenspace
+ % Check if the DeviceN color space includes an 'attributes'
+ % dict with a Colorants dict. If present then we want to
+ % attach the separation colorspace in the Colorants dict to
+ % the DeviceN color space description within the graphics
+ % library. To do this we are creating a temp gstate, building
+ % each of the Colorants color spaces in the temp gstate and
+ % then attaching the temp color space to the DeviceN color
+ % space. This round about procedure is done to create
+ % descriptions of the Colorants color spaces which are
+ % equivalent to any other color space (i.e. with color space
+ % substitution performed on the alternate color space and the
+ % tint transform function sampled).
+ dup length 4 gt {
+ dup 4 get /Colorants .knownget {
+ { gsave
+ { % Ignore any problems with the Colorants color spaces
+ //forcesetcolorspace .attachdevicenattributespace
+ } stopped pop
+ grestore
+ } forall
+ } if
+ } if
+ pop
+ }
+ }
+ ifelse
+ stopped
+ { cleartomark setcolorspace stop }
+ { pop pop pop }
+ ifelse
+ }
+ bind
+
+ /cs_prepare_color { dup 1 get length //check_num_stack exec pop } bind
+
+ %
+ % If a DeviceN color space is not supported in native mode by
+ % the current process color model, Adobe implementations will always
+ % execute the tint transform procedure when setcolor is invoked.
+ % Ghostscript may have turned this transform into a sampled function,
+ % and even if this is not the case, will have sampled the transform
+ % when the color space is first set. Some applications depend on
+ % the Adobe behavior, so we implement it via the cs_complete_setcolor
+ % method.
+ %
+ /cs_complete_setcolor
+ {
+ .usealternate
+ {
+ pop
+ currentcolor
+ currentcolorspace 3 get exec
+ currentcolorspace 2 get
+ //clear_setcolor_operands exec
+ }
+ { pop }
+ ifelse
+ }
+ bind
+
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_devpxl.ps b/Master/tlpkg/tlgs/lib/gs_devpxl.ps
new file mode 100644
index 00000000000..4f604f5d711
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_devpxl.ps
@@ -0,0 +1,78 @@
+% Copyright (C) 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_devpxl.ps 6300 2005-12-28 19:56:24Z giles $
+% DevicePixel color space method dictionaries.
+
+%
+% This file implements the DevicePixel color space. See gs_cspace.ps
+% for information.
+%
+% The DevicePixel color space includes a single parameter, the bit
+% depth of the device color representation. Color is expressed as
+% single integers in an opaque, device-specific format.
+%
+
+% verify that the DevicePixel color space is supported
+/.setdevicepixelspace where
+ { pop }
+ { currentfile closefile }
+ifelse
+
+
+.currentglobal true .setglobal
+
+.cspace_util begin
+
+
+colorspacedict
+/DevicePixel
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate true
+ /cs_get_ncomps //ncomps_1
+ /cs_get_range { [ exch 1 get 1 exch bitshift 1 sub ] } bind
+ /cs_get_default_color { pop 0 } bind % no good default
+ /cs_get_currentgray //no_currentgray
+ /cs_get_currentrgb //no_currentrgb
+ /cs_get_currentcmyk //no_currentcmyk
+
+ /cs_validate
+ {
+ //check_array exec
+ dup 1 get dup type /integertype ne
+ //setcspace_typecheck
+ if
+ dup 0 lt
+ //setcspace_rangecheck
+ if
+ 31 gt % 31 bits is an implementation limit
+ { /setcolorspace .systemvar /limitcheck signalerror }
+ if
+ }
+ bind
+
+ /cs_substitute //dup_1
+ /cs_prepare {}
+ /cs_install { .setdevicepixelspace } bind
+ /cs_prepare_color //validate_1
+ /cs_complete_setcolor //pop_1
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_diskf.ps b/Master/tlpkg/tlgs/lib/gs_diskf.ps
new file mode 100644
index 00000000000..ee8f473facf
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_diskf.ps
@@ -0,0 +1,224 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_diskf.ps 6300 2005-12-28 19:56:24Z giles $
+% Support for converting Type 1 fonts without eexec encryption to
+% Type 4 fonts that load individual character outlines on demand.
+
+% If DISKFONTS is true, we load individual CharStrings as they are needed.
+% (This is intended primarily for machines with very small memories.)
+% Initially, the character definition is the file position of the definition;
+% this gets replaced with the actual CharString.
+% Note that if we are loading characters lazily, CharStrings is writable.
+
+% _Cstring must be long enough to hold the longest CharString for
+% a character defined using seac. This is lenIV + 4 * 5 (for the operands
+% of sbw, assuming div is not used) + 2 (for sbw) + 3 * 5 (for the operands
+% of seac other than the character codes) + 2 * 2 (for the character codes)
+% + 2 (for seac), i.e., lenIV + 43.
+
+/_Cstring 60 string def
+
+% When we initially load the font, we call
+% <index|charname> <length> <readproc> cskip_C
+% to skip over each character definition and return the file position instead.
+% This substitutes for the procedure
+% <index|charname> <length> string currentfile exch read[hex]string pop
+% [encrypt]
+% What we actually store in the CharString is fileposition * 1000 + length,
+% negated if the string is stored in binary form.
+
+/cskip_C
+ { exch dup 1000 ge 3 index type /nametype ne or
+ { % This is a Subrs string, or the string is so long we can't represent
+ % its length. Load it now.
+ exch exec
+ }
+ { % Record the position and length, and skip the string.
+ dup currentfile fileposition 1000 mul add
+ 2 index 3 get /readstring cvx eq { neg } if
+ 3 1 roll
+ dup _Cstring length idiv
+ { currentfile _Cstring 3 index 3 get exec pop pop
+ } repeat
+ _Cstring length mod _Cstring exch 0 exch getinterval
+ currentfile exch 3 -1 roll 3 get exec pop pop
+ }
+ ifelse
+ } bind def
+
+% Load a CharString from the file. The font is the top entry
+% on the dictionary stack.
+/load_C % <charname> <fileposandlength> load_C -
+ { dup abs 1000 idiv FontFile exch setfileposition
+ CharStrings 3 1 roll
+ .currentglobal CharStrings .gcheck .setglobal exch
+ dup 0 lt
+ { neg 1000 mod string FontFile exch readstring }
+ { 1000 mod string FontFile exch readhexstring }
+ ifelse pop
+ exch .setglobal
+% If the CharStrings aren't encrypted on the file, encrypt now.
+ Private /-| get 0 get
+ dup type /nametype ne
+ { dup length 5 sub 5 exch getinterval exec }
+ { pop }
+ ifelse dup 4 1 roll put
+% If the character is defined with seac, load its components now.
+ mark exch seac_C
+ counttomark
+ { StandardEncoding exch get dup CharStrings exch get
+ dup type /integertype eq { load_C } { pop pop } ifelse
+ } repeat
+ pop % the mark
+ } bind def
+
+/seac_C % <charstring> seac_C <achar> <bchar> ..or nothing..
+ { dup length _Cstring length le
+ { 4330 exch _Cstring .type1decrypt exch pop
+ dup dup length 2 sub 2 getinterval <0c06> eq % seac
+ { dup length
+ Private /lenIV known { Private /lenIV get } { 4 } ifelse
+ exch 1 index sub getinterval
+% Parse the string just enough to extract the seac information.
+% We assume that the only possible operators are hsbw, sbw, and seac,
+% and that there are no 5-byte numbers.
+ mark 0 3 -1 roll
+ { exch
+ { { dup 32 lt
+ { pop 0 }
+ { dup 247 lt
+ { 139 sub 0 }
+ { dup 251 lt
+ { 247 sub 256 mul 108 add 1 1 }
+ { 251 sub -256 mul -108 add -1 1 }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } % 0
+ { mul add 0 } % 1
+ }
+ exch get exec
+ }
+ forall pop
+ counttomark 1 add 2 roll cleartomark % pop all but achar bchar
+ }
+ { pop % not seac
+ }
+ ifelse
+ }
+ { pop % punt
+ }
+ ifelse
+ } bind def
+
+% Define replacement procedures for loading fonts.
+% If DISKFONTS is true and the body of the font is not encrypted with eexec:
+% - Prevent the CharStrings from being made read-only.
+% - Substitute a different CharString-reading procedure.
+% (eexec disables this because the implicit 'systemdict begin' hides
+% the redefinitions that make the scheme work.)
+% We assume that:
+% - The magic procedures (-|, -!, |-, and |) are defined with
+% executeonly or readonly;
+% - The contents of the reading procedures are as defined in bdftops.ps;
+% - The font includes the code
+% <font> /CharStrings <CharStrings> readonly put
+/.loadfontdict 6 dict def mark
+ /begin % push this dict after systemdict
+ { dup begin
+ //systemdict eq { //.loadfontdict begin } if
+ } bind
+ /end % match begin
+ { currentdict end
+ //.loadfontdict eq currentdict //systemdict eq and { end } if
+ } bind
+ /dict % leave room for FontFile, BuildChar, BuildGlyph
+ { 3 add dict
+ } bind
+ /executeonly % for reading procedures
+ { readonly
+ }
+ /noaccess % for Subrs strings and Private dictionary
+ { readonly
+ }
+ /readonly % for procedures and CharStrings dictionary
+ { % We want to take the following non-standard actions here:
+ % - If the operand is the CharStrings dictionary, do nothing;
+ % - If the operand is a number (a file position replacing the
+ % actual CharString), do nothing;
+ % - If the operand is either of the reading procedures (-| or -!),
+ % substitute a different one.
+ dup type /dicttype eq % CharStrings or Private
+ count 2 gt and
+ { 1 index /CharStrings ne { readonly } if }
+ { dup type /arraytype eq % procedure or data array
+ { dup length 5 ge 1 index xcheck and
+ { dup 0 get /string eq
+ 1 index 1 get /currentfile eq and
+ 1 index 2 get /exch eq and
+ 1 index 3 get dup /readstring eq exch /readhexstring eq or and
+ 1 index 4 get /pop eq and
+ { /cskip_C cvx 2 packedarray cvx
+ }
+ { readonly
+ }
+ ifelse
+ }
+ { readonly
+ }
+ ifelse
+ }
+ { dup type /stringtype eq % must be a Subr string
+ { readonly }
+ if
+ }
+ ifelse
+ }
+ ifelse
+ } bind
+ /definefont % to insert BuildChar/Glyph and change FontType
+ { dup /FontType get 1 eq
+ { dup /FontType 4 put
+ dup /BuildChar /build_C load put
+ dup /BuildGlyph /build_C load put
+ }
+ if definefont
+ } bind
+counttomark 2 idiv { .loadfontdict 3 1 roll put } repeat pop
+.loadfontdict readonly pop
+
+% Define the BuildChar and BuildGlyph procedures for modified fonts.
+% A single procedure serves for both.
+/build_C % <font> <code|name> build_C -
+ { 1 index begin
+ dup dup type /integertype eq { Encoding exch get } if
+ % Stack: font code|name name
+ dup CharStrings exch .knownget not
+ { 2 copy eq { exch pop /.notdef exch } if
+ QUIET not
+ { (Substituting .notdef for ) print = flush }
+ { pop }
+ ifelse
+ /.notdef CharStrings /.notdef get
+ } if
+ % Stack: font code|name name charstring
+ dup type /integertype eq
+ { load_C end build_C }
+ { end .type1execchar }
+ ifelse
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/gs_diskn.ps b/Master/tlpkg/tlgs/lib/gs_diskn.ps
new file mode 100644
index 00000000000..6ff64c86f88
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_diskn.ps
@@ -0,0 +1,214 @@
+% Copyright (C) 1990, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_diskn.ps 6300 2005-12-28 19:56:24Z giles $
+% Initialization file for %disk device modifications
+% When this is run, systemdict is still writable,
+
+systemdict begin
+
+% Collect the list of searchable IODevices in SearchOrder
+% Efficiency here doesn't matter since we run this at the end
+% of gs_init and convert it to a static array.
+/.getsearchabledevs { % - .getsearchabledevs [ list_of_strings ]
+ //systemdict /.searchabledevs .knownget not {
+ .currentglobal true .setglobal
+ mark (*) {
+ dup length string copy dup currentdevparams /Searchable
+ .knownget { not { pop } if } { pop } ifelse
+ } 8192 string /IODevice resourceforall
+ ]
+ % now process the array into correct SearchOrder
+ 0 1 2 {
+ mark exch 2 index {
+ dup currentdevparams /SearchOrder get 2 index eq
+ { exch } { pop } ifelse
+ } forall % devices on the old list
+ pop
+ % make the array and sort it by name
+ ] { lt } bind .sort
+ exch
+ } for
+ % collect all devices with SearchOrder > 2
+ mark 2 index {
+ dup currentdevparams /SearchOrder get 2 gt
+ { exch } { pop } ifelse
+ } forall
+ ] exch pop
+ % We now have 4 arrays on the stack, SO=0 SO=1 SO=2 SO>2
+ % make them into a single array
+ mark 5 1 roll ] mark exch { { } forall } forall ]
+ //systemdict /.searchabledevs 2 index .forceput
+ exch .setglobal
+ }
+ if
+} .bind executeonly def % must be bound and hidden for .forceput
+
+% Modify .putdevparams to force regeneration of .searchabledevs list
+/.putdevparams {
+ % We could be smarter and check for %disk* device, but this
+ % doesn't get run enough to justify the complication
+ //.putdevparams
+ //systemdict /.searchabledevs .forceundef
+} .bind odef % must be bound and hidden for .forceundef
+
+% ------ extend filenameforall to handle wildcards in %dev% part of pattern -------%
+/filenameforall {
+ count 3 ge {
+ 2 index (%) search {
+ pop pop
+ } {
+ % no device specified, so search them all
+ pop (*%) 3 index concatstrings
+ % we need to suppress the device when we return the string
+ % in order to match Adobe's behaviour with %disk devices.
+ 4 -2 roll % the callers procedure
+ [ { (%) search { pop pop (%) search { pop pop } if } if } /exec load
+ 4 -1 roll % the callers procedure
+ /exec load
+ ] cvx
+ 4 2 roll % put the modified procedure where it belongs
+ } ifelse
+ % extract device portion (up to end of string or next %)
+ (%) search { exch pop } if % stack: opat proc scratch npat device
+ dup (*) search { pop pop pop true } { pop false } ifelse
+ 1 index (?) search { pop pop pop true } { pop false } ifelse
+ or not {
+ pop pop //filenameforall % device with no wildcard
+ } {
+ (%) concatstrings (%) exch concatstrings
+ .getsearchabledevs
+ % find all matching devices and add the rest of the search string
+ mark exch {
+ dup counttomark 1 add index .stringmatch {
+ counttomark 2 add index concatstrings
+ } {
+ pop
+ } ifelse
+ } forall
+ ]
+ 3 1 roll pop pop
+ 4 -1 roll pop
+ % now we need to invoke filenameforall for each of the strings
+ % in the array. We do this by building a procedure that is like
+ % an unrolled 'forall' loop. We do this to get the parameters
+ % for each filenameforall, since each execution will pop its
+ % parameters, but we can't use the operand stack for storage
+ % since each invocation must have the same operand stack.
+ mark exch {
+ counttomark dup 3 add index exch
+ 2 add index
+ /filenameforall load
+ } forall
+ ] cvx
+ 3 1 roll pop pop
+ exec % run our unrolled loop
+ }
+ ifelse
+ } {
+ //filenameforall % not enough parameters -- just let it fail
+ }
+ ifelse
+} odef
+
+% redefine file to search all devices in order
+/file {
+ dup 0 get (r) 0 get eq dup {
+ pop false % success code
+ 2 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
+ { 3 index concatstrings % prepend the device
+ {
+ 2 index //file } .internalstopped not {
+ 4 1 roll pop pop pop true
+ exit % exit with success
+ } {
+ pop pop
+ }
+ ifelse
+ }
+ forall
+ }
+ if
+ not { % just let standard file operator handle things
+ //file
+ }
+ if
+} bind odef
+
+% redefine deletefile to search all devices in order
+/deletefile {
+ false % success code
+ 1 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
+ { 2 index concatstrings % prepend the device
+ { //deletefile } .internalstopped exch pop not {
+ pop true exit % exit with success
+ }
+ if
+ }
+ forall
+ not { $error /errorname get /deletefile .systemvar exch signalerror } if
+} bind odef
+
+% redefine status to search all devices in order
+/status {
+ dup type /stringtype eq {
+ false % success code
+ 1 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
+ { 2 index concatstrings % prepend the device
+ { //status } .internalstopped not {
+ { true 7 -2 roll pop pop true exit } % exit with success
+ if
+ }
+ if
+ }
+ forall
+ % If we made it this far, no devices were found to status the file
+ % clean up to return 'false'
+ exch pop
+ } {
+ //status
+ }
+ ifelse
+} bind odef
+
+% Also redefine renamefile to search all devices in order
+/renamefile {
+ false % success code
+ 2 index 0 get 37 eq { [ () ] } { .getsearchabledevs } ifelse
+ { dup 4 index concatstrings % prepend the device
+ { (r) //file } .internalstopped
+ not {
+ closefile exch pop true exit % exit with success
+ } {
+ pop pop
+ } ifelse
+ }
+ forall
+ not { $error /errorname get /renamefile .systemvar exch signalerror } if
+ 3 -1 roll concatstrings exch
+ //renamefile
+} bind odef
+
+% redefine devforall to process devices in numeric order
+% Spec's for 'devforall' are unclear, but font downloaders may expect this
+/devforall { % <proc> <scratch> devforall -
+ [ { dup length string copy } 2 index //devforall ]
+ % stack: proc scratch array_of_device_names
+ { lt } .sort
+ % We don't really invoke the procedure with the scratch string
+ % but rather with the strings from our array
+ exch pop exch forall
+} odef
+end % systemdict
diff --git a/Master/tlpkg/tlgs/lib/gs_dpnxt.ps b/Master/tlpkg/tlgs/lib/gs_dpnxt.ps
new file mode 100644
index 00000000000..2c0b5cdc1d6
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_dpnxt.ps
@@ -0,0 +1,134 @@
+% Copyright (C) 1997, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_dpnxt.ps 6699 2006-04-03 13:43:22Z alexcher $
+% gs_dpnxt.ps
+% NeXT Display PostScript extensions
+
+% Define the operation values for compositing. These must match the values
+% in gsdpnext.h, which also are the ones from the NeXT documentation.
+% We put them in systemdict, which seems like as good a place as any.
+mark
+ /Clear /Copy /Sover /Sin /Sout /Satop /Dover /Din /Dout /Datop /Xor
+ /PlusD /PlusL /Highlight % not sure about Highlight
+counttomark { counttomark 1 sub def } repeat pop
+
+% We implement readimage and sizeimage using the following 3 otherwise
+% undocumented lower-level operators:
+%
+% <x> <y> <width> <height> <matrix> .sizeimagebox
+% <dev_x> <dev_y> <dev_width> <dev_height> <matrix>
+%
+% - .sizeimageparams <bits/sample> <multiproc> <ncolors>
+%
+% <device> <x> <y> <width> <max_height> <alpha?> <std_depth|null>
+% <string> .getbitsrect <height> <substring>
+%
+% NOTE: These operators are subject to change without notice!
+
+% Implement readimage using .getbitsrect. Experimentation on a NeXT system
+% shows that the data is always returned in order of increasing device Y,
+% regardless of the CTM.
+%
+% Note that we can't make stack protection work for this operator,
+% because it must remove its operands from the stack before calling
+% the supplied procedure(s).
+
+/readimage { % <x> <y> <width> <height> <proc> [... <procN-1>]
+ % <string> <alpha?> readimage -
+ .sizeimageparams exch {
+ % multiproc = true. If N > 1, store the procedures in an array.
+ exch pop 1 index { 1 add } if
+ % Stack: ... string alpha? nprocs
+ dup 1 eq {
+ pop false % only 1 procedure, multiproc is irrelevant
+ } {
+ dup array 4 1 roll 3 add 2 roll astore 3 1 roll true
+ } ifelse
+ } {
+ % multiproc = false.
+ pop pop false
+ } ifelse
+ % Map the rectangle to device coordinates.
+ % Stack: x y w h proc(s) str alpha? multi?
+ 8 -4 roll matrix .sizeimagebox pop 8 4 roll
+ % Make sure we allocate the operand array in local VM
+ % to avoid a possible invalidaccess.
+ .currentglobal false .setglobal 9 1 roll
+ exch { 1 } { 0 } ifelse exch % alpha is last, if present
+ exch 4 1 roll 8 array astore exch .setglobal
+ { % Read out a block of scan lines and pass them to the procedure.
+ % Stack: [x y w h alpha? proc(s) str multi?] -- we must consume this.
+ dup 3 get 0 eq { pop exit } if
+ aload 9 1 roll pop exch pop currentdevice 7 1 roll
+ % Always read out the data as standard (not native) pixels.
+ .sizeimageparams pop pop exch .getbitsrect
+ % Stack: [x y w h alpha? proc(s) str multi?] hread substr
+ 3 -1 roll
+ % Stack: hread substr [x y w h alpha? proc(s) str multi?]
+ dup 1 2 copy get 5 index add put
+ % Stack: hread substr [x y' w h alpha? proc(s) str multi?]
+ dup 3 2 copy get 6 -1 roll sub put
+ % Stack: substr [x y' w h' alpha? proc(s) str multi?]
+ dup 5 get exch 7 get {
+ % multiproc = true, pass each plane to a different procedure.
+ % Stack: substr procs
+ 0 1 2 index length 1 sub {
+ % Push 1 plane and its procedure under the top 2 elements.
+ % Stack: ... substr procs plane#
+ 2 index length 2 index length idiv % bytes per plane
+ dup 2 index mul exch
+ % Stack: ... substr procs plane# start length
+ 4 index 3 1 roll getinterval 4 1 roll
+ 2 copy get 4 1 roll pop
+ } for
+ exch pop length 2 mul .execn
+ } {
+ % multiproc = false, just call the procedure.
+ exec
+ } ifelse
+ } //systemdict /exec get 3 packedarray cvx loop
+} bind odef
+
+%
+% <w> <h> <bpc> <mtx> <dsrc0> ... <multi> <ncomp> alphaimage -
+%
+img_utils_dict begin
+/.alphaimage where
+ {
+ pop
+ currentglobal true setglobal
+ /alphaimage
+ {
+ //true
+ //.colorimage
+ stopped
+ { /alphaimage .systemvar $error /errorname get signalerror }
+ if
+ }
+ .bind systemdict begin odef end
+ setglobal
+ }
+if
+end
+
+% Implement sizeimage using lower-level operators.
+
+/sizeimage { % <x> <y> <width> <height> <matrix> sizeimage
+ % <devwidth> <devheight> <bits/sample> <matrix>
+ % <multiproc> <ncolors>
+ .sizeimagebox 5 -2 roll pop pop
+ .sizeimageparams 3 -1 roll 4 1 roll
+} bind odef
diff --git a/Master/tlpkg/tlgs/lib/gs_dps.ps b/Master/tlpkg/tlgs/lib/gs_dps.ps
new file mode 100644
index 00000000000..6685e5fbd6e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_dps.ps
@@ -0,0 +1,224 @@
+% Copyright (C) 1997, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_dps.ps 6970 2006-08-05 04:33:11Z lpd $
+% Initialization file for Display PostScript functions.
+
+% ------ Errors ------ %
+
+% These errors are only defined in DPS.
+{ /invalidcontext /invalidid } { .registererror } forall
+
+% ------ Contexts ------ %
+
+% To create a context with private local VM, we use the .localfork
+% operator to actually create the context, the new VM, and an empty
+% userdict, and then we call the .initlocaldicts procedure to make
+% local copies of the initial contents of the dictionaries in local VM.
+% savedlocaldicts in systemdict is a global read-only dictionary whose
+% elements are global read-only copies of these initial contents;
+% we just copy its elements into local VM and install them in systemdict.
+% userdict and internaldict require special handling.
+
+% Switching between contexts with different local VMs requires
+% changing the bindings in systemdict that reference local objects.
+% For this purpose, each userdict has an entry called localdicts
+% which holds the local copies of the elements of savedlocaldicts,
+% plus internaldict. The context switching code in the interpreter
+% effectively copies this dictionary into systemdict.
+% NOTE: the name localdicts is known to the interpreter.
+
+% Switching between contexts also requires resetting the user parameters.
+% The interpreter records the value of userparams (a local dictionary
+% referenced from systemdict) for each context, and uses it for this.
+% See gs_lev2.ps for more details.
+% NOTE: the name userparams is known to the interpreter.
+
+% Save copies of local dictionaries at the end of system initialization.
+% Also save the initial gstate.
+/.savelocalstate {
+ .currentglobal true .setglobal
+ //systemdict /savedlocaldicts mark //systemdict {
+ dup gcheck {
+ pop pop
+ } {
+ dup type /dicttype eq {
+ % Save a copy of this dictionary in global VM.
+ dup maxlength dict .copydict readonly
+ } {
+ pop pop
+ } ifelse
+ } ifelse
+ } forall .dicttomark readonly put
+ % Create localdicts for the current context.
+ false .setglobal
+ userdict /localdicts mark savedlocaldicts {
+ pop dup load
+ } forall /internaldict dup load
+ .dicttomark readonly put
+ % Save a copy of the initial gstate.
+ true .setglobal
+ //systemdict /savedinitialgstate gstate readonly put
+ .setglobal
+} .bind def
+
+% Initialize local dictionaries and gstate when creating a new context.
+% Note that until this completes, we are in the anomalous situation of
+% having systemdict point to dictionaries that are in a non-current
+% local VM. Because of this, we turn off garbage collection temporarily.
+/.copylocal { % <name> <dict> .copylocal <name> <dict'>
+ % Copy a dictionary to the current (local) VM,
+ % and make it read-only if its current definition is.
+ dup maxlength dict .copydict
+ 1 index load wcheck not { readonly } if
+} .bind def
+% When this is called, the dictionary stack is in its initial state,
+% and there is (anomalously) only one gstate on the gstate stack.
+/.initlocaldicts { % - .initlocaldicts -
+ -2 vmreclaim
+ .currentglobal //systemdict begin
+ false .setglobal
+ % Since localdicts doesn't exist yet, references from
+ % systemdict to local objects won't get restored if
+ % a context switch happens in this code. Therefore,
+ % until localdicts is defined, we have to keep all our
+ % state on the operand stack.
+
+ % Acquire userdict.
+ %****** WRONG IF NON-STANDARD INITIAL DSTACK ******
+ countdictstack array dictstack
+ { dup gcheck not { exit } if pop } forall
+ % Create localdicts with a local copy of each dictionary,
+ % except for userdict and userparams, which just need
+ % to be filled in.
+ mark savedlocaldicts {
+ 1 index /userdict eq {
+ % Stack: userdict mark ... /userdict inituserdict
+ counttomark 1 add index .copydict
+ } {
+ 1 index /userparams eq {
+ % Stack: userdict mark ... /userparams inituserparams
+ userparams .copydict
+ } {
+ .copylocal
+ } ifelse
+ } ifelse
+ } forall /internaldict dup .makeinternaldict .makeoperator
+ .dicttomark readonly /localdicts exch put
+ % localdicts is now defined in userdict.
+ % Copy the definitions into systemdict.
+ localdicts { .forcedef } forall
+ % Set the user parameters.
+ userparams readonly .setuserparams
+ % Establish the initial gstate(s).
+ /savedinitialgstate .systemvar setgstate gsave
+ % Wrap up.
+ end .setglobal
+} odef
+
+% Check whether an object is a procedure.
+/.proccheck { % <obj> .proccheck <bool>
+ dup xcheck
+ exch type dup /arraytype eq exch /packedarraytype eq or and
+} bind def
+
+% Create a context with private local VM.
+% The .localfork operator does all the work, but we must ensure that
+% .initlocaldicts gets called when the new context starts up.
+/localfork { % <mark> <obj1> ... <objN> <proc>
+ % <stdin|null> <stdout|null>
+ % localfork <context>
+ .currentglobal true .setglobal 3 index
+ dup .proccheck not {
+ pop .setglobal /localfork .systemvar /typecheck signalerror
+ } if
+ {exec .initlocaldicts} aload pop
+ 3 1 roll 3 packedarray cvx
+ 4 1 roll 5 -1 roll pop .setglobal .localfork
+} odef
+
+% Fork a context that shares VM. The .fork operator creates an empty
+% userparams dictionary for the context, but we still need to initialize
+% this dictionary when the new context starts up.
+/.postfork { % - .postfork -
+ % Initialize the user parameters.
+ savedlocaldicts /userparams get userparams .copydict readonly pop
+} odef
+/fork { % <mark> <obj1> ... <objN> <proc> fork <context>
+ .currentglobal false .setglobal 1 index
+ dup .proccheck not {
+ pop .setglobal /fork .systemvar /typecheck signalerror
+ } if
+ {exec .postfork} aload pop
+ 3 1 roll 3 packedarray cvx
+ 3 1 roll exch pop .setglobal .fork
+} odef
+
+% ------ Halftone phase ------ %
+
+/sethalftonephase { % <x> <y> sethalftonephase -
+ -1 2 index 2 index .setscreenphase pop pop
+} odef
+/currenthalftonephase { % - currenthalftonephase <x> <y>
+ 0 .currentscreenphase
+} odef
+
+% ------ Device-source images ------ */
+
+.imagetypes 2 /.image2 load put
+
+% ------ Device information ------ %
+
+/.deviceinfodict mark
+ /Colors null /GrayValues null /RedValues null /GreenValues null
+ /BlueValues null /ColorValues null
+.dicttomark readonly def
+/deviceinfo { % - deviceinfo <dict>
+ currentdevice //.deviceinfodict .getdeviceparams .dicttomark
+ dup begin
+ /ColorValues .knownget {
+ 0 le
+ { currentdict /ColorValues undef }
+ {
+ % hack around devices that incorrect set GrayValues
+ Colors 3 eq { 1 } { GrayValues } ifelse
+ RedValues mul GreenValues mul BlueValues mul ColorValues ne
+ { currentdict /GrayValues undef
+ currentdict /RedValues undef
+ currentdict /GreenValues undef
+ currentdict /BlueValues undef
+ } if
+ }
+ ifelse
+ } if
+ currentdict end readonly
+} odef
+
+% The current implementation allocates a 2-element array each time.
+% Perhaps we should change this to 2 separate parameters for X and Y?
+/.wtdict mark
+ /wtranslation null
+.dicttomark readonly def
+/wtranslation { % - wtranslation <x> <y>
+ currentdevice //.wtdict .getdeviceparams exch pop exch pop aload pop
+} odef
+currentdict /.wtdict .undef
+
+% ------ View clipping ------ %
+
+/rectviewclip { % <x> <y> <width> <height> rectviewclip -
+ % <numarray|numstring> rectviewclip -
+ newpath .rectappend viewclip
+} odef
diff --git a/Master/tlpkg/tlgs/lib/gs_dps1.ps b/Master/tlpkg/tlgs/lib/gs_dps1.ps
new file mode 100644
index 00000000000..6a0e3a30fbc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_dps1.ps
@@ -0,0 +1,139 @@
+% Copyright (C) 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_dps1.ps 7648 2007-01-27 13:53:57Z alexcher $
+% Initialization file for most of the Display PostScript functions
+% that are also included in Level 2.
+
+level2dict begin
+
+% ------ Virtual memory ------ %
+
+/currentshared /.currentglobal load def
+/scheck /.gcheck load def
+%****** FOLLOWING IS WRONG ******
+/shareddict currentdict /globaldict .knownget not { 20 dict } if def
+
+% Global and LocalFontDirectory must remain in systemdict
+% even if we temporarily exit Level 2 mode.
+
+end % level2dict
+systemdict begin
+
+/SharedFontDirectory .FontDirectory .gcheck
+ { .currentglobal false .setglobal
+ /LocalFontDirectory .FontDirectory dup maxlength dict copy
+ .forcedef % LocalFontDirectory is local, systemdict is global
+ .setglobal .FontDirectory
+ }
+ { /LocalFontDirectory .FontDirectory
+ .forcedef % LocalFontDirectory is local, systemdict is global
+ 50 dict
+ }
+ifelse def
+
+end % systemdict
+level2dict begin
+
+% setshared must rebind FontDirectory to the appropriate one of
+% Local or SharedFontDirectory.
+
+/.setglobal % <bool> .setglobal -
+ { dup .setglobal
+ //systemdict /FontDirectory .currentglobal
+ { //SharedFontDirectory }
+ { /LocalFontDirectory .systemvar } % can't embed ref to local VM
+ ifelse .forceput pop % LocalFontDirectory is local, systemdict is global
+ } .bind odef % must bind .forceput and .setglobal
+ % even if NOBIND in effect
+% Don't just copy (load) the definition of .setglobal:
+% it gets redefined for LL3.
+/setshared { /.setglobal .systemvar exec } odef
+.currentglobal setshared
+
+% See below for changes in save and restore.
+
+% ------ Fonts ------ %
+
+/selectfont % <fontname> <size> selectfont -
+ {
+ { 1 .argindex findfont
+ 1 index dup type /arraytype eq { makefont } { scalefont } ifelse
+ setfont pop pop
+ } stopped { /selectfont .systemvar $error /errorname get signalerror } if
+ } odef
+% undefinefont has to take local/global VM into account.
+/undefinefont % <fontname> undefinefont -
+ { .FontDirectory 1 .argindex .forceundef % FontDirectory is readonly
+ .currentglobal
+ { % Current mode is global; delete from local directory too.
+ //systemdict /LocalFontDirectory .knownget
+ { 1 index .forceundef } % LocalFontDirectory is readonly
+ if
+ }
+ { % Current mode is local; if there was a shadowed global
+ % definition, copy it into the local directory.
+ //systemdict /SharedFontDirectory .knownget
+ { 1 index .knownget
+ { .FontDirectory 2 index 3 -1 roll { put } //superexec } % readonly
+ if
+ }
+ if
+ }
+ ifelse pop
+ } odef
+
+% If we load a font into global VM within an inner save, the restore
+% will delete it from FontDirectory but not from SharedFontDirectory.
+% We have to handle this by making restore copy missing entries from
+% SharedFontDirectory to FontDirectory. Since this could slow down restore
+% considerably, we define a new operator .forcecopynew for this purpose.
+% Furthermore, if FAKEFONTS is in effect, we want global real fonts to
+% override fake local ones. We handle this by brute force.
+/restore % <save> restore -
+ { dup //restore % bind even if NOBIND
+ /LocalFontDirectory .systemvar
+ FAKEFONTS
+ { mark
+ % We want to delete a fake font from the local directory
+ % iff the global directory now has no definition for it,
+ % or a non-fake definition.
+ 1 index dup
+ { % Stack: lfd mark lfd key ... lfd key value
+ length 1 gt
+ { % This is a real local definition; don't do anything.
+ pop
+ }
+ { % This is a fake local definition, check for global.
+ //SharedFontDirectory 1 index .knownget
+ { % A global definition exists, check for fake.
+ length 1 eq { pop } { 1 index } ifelse
+ }
+ { % No global definition, delete the local one.
+ 1 index
+ }
+ ifelse
+ }
+ ifelse
+ } forall
+ pop counttomark 2 idiv { .forceundef } repeat pop % readonly
+ }
+ if
+ //SharedFontDirectory exch .forcecopynew pop
+ .currentglobal .setglobal % Rebind FontDirectory according to current VM.
+ pop
+ } .bind odef
+
+end % level2dict
diff --git a/Master/tlpkg/tlgs/lib/gs_dps2.ps b/Master/tlpkg/tlgs/lib/gs_dps2.ps
new file mode 100644
index 00000000000..45a016b0850
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_dps2.ps
@@ -0,0 +1,247 @@
+% Copyright (C) 1990, 1996, 1997, 1998, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_dps2.ps 8111 2007-07-06 16:42:18Z alexcher $
+% Initialization file for basic Display PostScript functions
+% that are also included in Level 2.
+
+level2dict begin
+
+% ------ Errors ------ %
+
+% These errors are only defined in Level 2 and DPS.
+{ /configurationerror /undefinedresource /unregistered }
+{ .registererror } forall
+
+% ------ Halftones ------ %
+
+/.makestackdict
+ { { counttomark -1 roll } forall .dicttomark
+ } bind def
+/currenthalftone % - currenthalftone <dict>
+ { mark .currenthalftone
+ { { exch pop } % halftone
+ { /HalftoneType 1 % screen
+ { /Frequency /Angle /SpotFunction }
+ .makestackdict readonly
+ }
+ { /HalftoneType 2 % colorscreen
+ { /RedFrequency /RedAngle /RedSpotFunction
+ /GreenFrequency /GreenAngle /GreenSpotFunction
+ /BlueFrequency /BlueAngle /BlueSpotFunction
+ /GrayFrequency /GrayAngle /GraySpotFunction
+ }
+ .makestackdict readonly
+ }
+ }
+ exch get exec
+ } odef
+% Define sethalftone so it converts types 1-4 to type 5.
+/.makehalftoneRGBV { % <dict> <type> <keys> <keysRGBV>
+ 4 -1 roll exch { 1 index exch get exch } forall 15 1 roll
+ 14 -2 roll mark 15 1 roll { /Gray /Blue /Green /Red } {
+ % stack: v0 v1 v2 type keys comp
+ mark
+ 2 index 0 get 8 -1 roll
+ 4 index 1 get 9 -1 roll
+ 6 index 2 get 10 -1 roll
+ % stack: type keys comp mark k0 v0 k1 v1 k2 v2
+ /HalftoneType 10 index .dicttomark
+ counttomark 2 roll
+ } forall pop pop
+ /Default 1 index .dicttomark exch pop { .sethalftone5 }
+} bind def
+
+% The value of each entry in .halftonetypes is a procedure:
+% <setdict> <htdict> <<proc>> <setdict'> <htdict'> <sethalftoneproc>
+% This allows us to use these procedures both for actually implementing
+% sethalftone and for converting subsidiary dictionaries of HalftoneType 5
+% halftones.
+systemdict begin
+15 dict /.halftonetypes 1 index def begin
+ 1 {
+ mark exch /Default exch .dicttomark { .sethalftone5 }
+ } bind def
+ 2 {
+ 1 { /Frequency /Angle /SpotFunction } {
+ /RedFrequency /RedAngle /RedSpotFunction
+ /GreenFrequency /GreenAngle /GreenSpotFunction
+ /BlueFrequency /BlueAngle /BlueSpotFunction
+ /GrayFrequency /GrayAngle /GraySpotFunction
+ } .makehalftoneRGBV
+ } bind def
+ 3 {
+ mark exch /Default exch .dicttomark { .sethalftone5 }
+ } bind def
+ 4 {
+ 3 { /Width /Height /Thresholds } {
+ /RedWidth /RedHeight /RedThresholds
+ /GreenWidth /GreenHeight /GreenThresholds
+ /BlueWidth /BlueHeight /BlueThresholds
+ /GrayWidth /GrayHeight /GrayThresholds
+ } .makehalftoneRGBV
+ } bind def
+ 5 {
+ pop dup length dict copy
+ mark 1 index {
+ % Even HalftoneType 5 dictionaries have entries other than
+ % subsidiary halftone dictionaries.
+ dup type /dicttype ne {
+ 0
+ } {
+ dup /HalftoneType .knownget not { 0 } if
+ } ifelse dup 5 gt {
+ % Stack: dict mark ... keyN dictN httypeN
+ % Assume that all HalftoneTypes > 5 convert to 5.
+ 1 index 3 1 roll
+ //.halftonetypes exch get exec pop /Default get
+ % Stack: dict mark ... keyN setdict'N htdict'N
+ counttomark 1 add index 3 index 4 -1 roll put
+ } {
+ pop
+ } ifelse
+ } forall .dicttomark { .sethalftone5 }
+ } bind def
+end
+end
+/sethalftone { % <dict> sethalftone -
+ % We must create the new dictionary in the same VM as the
+ % operand; otherwise, invalidaccess errors may occur.
+ .currentglobal 1 .argindex dup gcheck .setglobal
+ dup //.halftonetypes 1 index /HalftoneType get
+ dup type /integertype ne {
+ /sethalftone .systemvar /typecheck signalerror
+ } if
+ .knownget not {
+ /sethalftone .systemvar /rangecheck signalerror
+ } if
+ exec exec
+ .setglobal pop
+} .bind odef
+% Redefine setscreen and setcolorscreen to recognize halftone dictionaries,
+% and to insert the Frequency and Angle into Type 1 halftones, per
+% Adobe TN 5085.
+/.fixsethalftonescreen % <freq> <angle> <dict> .fix...screen
+ % <freq> <angle> <dict> <dict'>
+ { dup dup /HalftoneType get 1 eq
+ { dup wcheck not { dup length .copydict } if
+ dup /Frequency 5 index put
+ dup /Angle 4 index put
+ languagelevel 3 ge { dup /AccurateScreens dup getuserparam put } if
+ }
+ if
+ } bind def
+/setscreen % <ignore*2> <dict> setscreen -
+ { dup type /dicttype eq
+ { .fixsethalftonescreen sethalftone pop pop pop }
+ { //setscreen }
+ ifelse
+ } .bind odef
+/setcolorscreen % <ignore*11> <dict> setcolorscreen -
+ { dup type /dicttype eq
+ { .fixsethalftonescreen sethalftone 12 { pop } repeat }
+ { //setcolorscreen }
+ ifelse
+ } .bind odef
+% Redefine currentscreen and currentcolorscreen to extract the Frequency
+% and Angle from Type 1 halftones, per Adobe TN 5085.
+/.fixcurrenthalftonescreen % <dict> .fix... <freq> <angle> <proc>
+ { dup /HalftoneType get 1 eq
+ { dup /Frequency get 1 index /Angle get }
+ { 60.0 0.0 } % Adobe returns these as reals
+ ifelse 3 2 roll
+ } bind def
+/currentscreen % - currentscreen 60 0 <dict>
+ { .currenthalftone
+ { { .fixcurrenthalftonescreen } % halftone
+ { } % screen
+ { 12 3 roll 9 { pop } repeat % colorscreen
+ dup type /dicttype eq { .fixcurrenthalftonescreen } if
+ }
+ }
+ exch get exec
+ } odef
+/currentcolorscreen % - currentcolorscreen (60 0 <dict>)*4
+{ .currenthalftone
+ { { .fixcurrenthalftonescreen 3 copy 6 copy } % halftone
+ { % screen
+ % The procedure might not be readable....
+ dup rcheck { dup length array copy cvx } if
+ 3 copy 6 copy
+ }
+ { } % colorscreen
+ }
+ exch get exec
+} odef
+
+% ------ User objects ------ %
+
+/.UserObjects {
+ .userdict /UserObjects
+} odef
+% In order to get proper error recovery behavior, we need to be careful
+% not to pop any operands from the stack until we're done.
+% The code below faithfully duplicates the apparent array-growing
+% behavior of Adobe interpreters.
+/defineuserobject { % <index> <value> defineuserobject -
+ 1 index 65535 gt {
+ % .localvmarray throws limitcheck but CET 31-02 wants rangecheck
+ /defineuserobject .systemvar /rangecheck signalerror
+ } if
+ .UserObjects .knownget {
+ length dup 3 .argindex le {
+ % Stack: index value len
+ 2 index eq { 1 index 2 mul } { 1 index 1 add } ifelse
+ .localvmarray .UserObjects get
+ 1 index copy pop
+ .UserObjects 3 -1 roll put
+ } {
+ pop
+ } ifelse
+ } {
+ .UserObjects 3 .argindex 1 add 10 .max .localvmarray put
+ } ifelse
+ .UserObjects get 2 .argindex 2 index put pop pop
+} odef
+/execuserobject { % <index> execuserobject -
+ dup type /integertype ne {
+ % Adobe validates the argument before accessing UserObjects - CET 31-03
+ /execuserobject .systemvar /typecheck signalerror
+ } if
+ .UserObjects get 1 .argindex get exch pop exec
+} odef
+/undefineuserobject { % <index> undefineuserobject -
+ dup type /integertype ne {
+ % Adobe validates the argument before accessing UserObjects - CET 31-11
+ /undefineuserobject .systemvar /typecheck signalerror
+ } if
+ .UserObjects get 1 .argindex //null put pop
+} odef
+
+% ------ Cache control ------ %
+
+% Dummy definitions for cache control operators
+
+/ucachestatus { % - ucachestatus -mark- ? ? ? ? <size>
+ mark 0 0 0 0 /MaxUPathItem getuserparam
+} odef
+/setucacheparams { % -mark- ... <size> setucacheparams -
+ % Provoke an appropriate error if needed.
+ counttomark 1 lt { () 0 get } if
+ dup 0 or /MaxUPathItem getuserparam .max
+ 1 dict dup /MaxUPathItem 4 -1 roll put setuserparams cleartomark
+} odef
+
+end % level2dict
diff --git a/Master/tlpkg/tlgs/lib/gs_dscp.ps b/Master/tlpkg/tlgs/lib/gs_dscp.ps
new file mode 100644
index 00000000000..10a39aa3be4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_dscp.ps
@@ -0,0 +1,118 @@
+% Copyright (C) 2000 Artifex Software Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_dscp.ps 6300 2005-12-28 19:56:24Z giles $
+% Postscript interface routines to DSC parser
+
+/send_orientation { % <orientation> send_orientation -
+ % .parse_dsc_comments returns -1 for an Orientation key with an
+ % unrecognized value.
+ dup 0 ge {
+ << /Orientation 2 index >> setpagedevice
+ } if pop
+} bind def
+
+% This dictionary contains local handlers for DSC comments.
+% See header in zdscpars.c for more information.
+% <dsc_dict> handler <dsc_dict>
+/DSCparseprocs mark
+ /Orientation { dup /Orientation get send_orientation } bind
+ /PageOrientation { dup /PageOrientation .knownget { send_orientation }
+ { dup /Orientation .knownget { send_orientation } if }
+ ifelse } bind
+ /Page { dup /Orientation .knownget { send_orientation } if } bind
+ /NOP { } bind
+.dicttomark readonly def
+
+% This procedure is called whenever a DSC comment is found by the interpreter
+/do_parse_dsc false def
+/parse_dsc { % <file> <DSC string> [<prev proc>]
+ % parse_dsc -
+ % Run any previously installed parser.
+ 0 get dup null eq { pop } { 3 copy exec pop } ifelse
+
+ do_parse_dsc { % Check if this parser is enabled
+ currentglobal true setglobal % Go to global VM, save old state
+ 3 1 roll % Put old VM state under <file> <string>
+ dsc_dict exch % <VM state> <file> <dict> <string>
+ .parse_dsc_comments % <VM state> <file> <dict> <DSC name>
+ 4 -1 roll % Get old VM state from under <file> <dict> <DSC name>
+ setglobal % restore previous VM state
+ //DSCparseprocs exch .knownget { % Check DSC name against local handler list
+ exec % execute any local handler
+ } if
+ } if
+ pop pop % remove file, dict
+} bind def
+
+
+% Check whether the currently installed parser is the one defined in this file.
+/.using_parse_dsc { % - .using_parse_dsc <proc> <using?>
+ currentuserparams /ProcessDSCComment get
+ dup null eq { pop {{//null} //parse_dsc exec} } if
+ dup length 3 eq {
+ dup dup length 1 sub get /parse_dsc load eq
+ } {
+ false
+ } ifelse
+} bind def
+
+% Establish a binding for dsc_dict.
+userdict /dsc_dict null put
+
+% - dsc_init -
+/dsc_init { % Initialize DSC parser
+ currentglobal true setglobal
+ /dsc_dict 50 dict store % Size must be large enough for all DSC values
+ dsc_dict .initialize_dsc_parser
+ .using_parse_dsc {
+ % Already using this parser.
+ pop
+ } {
+ % Encapsulate the previous parser. We know it is in global VM:
+ % allocate the new one in global VM as well.
+ 1 array astore
+ /parse_dsc load /exec load 3 array astore cvx readonly
+ << /ProcessDSCComment 3 -1 roll >>
+ setuserparams
+ } ifelse
+ setglobal
+ /do_parse_dsc true def
+} bind def
+
+
+% Enable the DSC parser defined in this file.
+% - enable_dsc -
+/enable_dsc {
+ dsc_init
+} bind def
+
+% Disable the DSC parser defined in this file.
+% - disable_dsc -
+/disable_dsc {
+ % There might be another parser installed: if so, restore it.
+ % (If it has encapsulated our parser, we can't.)
+ .using_parse_dsc {
+ % Restore the parser we encapsulated.
+ 0 get 0 get
+ currentglobal true setglobal exch
+ << /ProcessDSCComment 3 -1 roll >>
+ exch setglobal setuserparams
+ } {
+ pop
+ } ifelse
+ % If we couldn't restore the old parser, at least disable ours.
+ /do_parse_dsc false def
+} bind def
diff --git a/Master/tlpkg/tlgs/lib/gs_epsf.ps b/Master/tlpkg/tlgs/lib/gs_epsf.ps
new file mode 100644
index 00000000000..b12f2f0e83f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_epsf.ps
@@ -0,0 +1,243 @@
+% Copyright (C) 1989, 1996, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_epsf.ps 6300 2005-12-28 19:56:24Z giles $
+% Allow the interpreter to encapsulate EPS files, to recognize MS-DOS
+% EPSF file headers, and skip to the PostScript section of the file.
+
+% Encapsulate EPS files and optionally resize page or rescale image.
+% To display an EPS file cropped to the bounding box:
+% gs -dEPSCrop file.eps
+% To display an EPS file scaled to fit the page:
+% gs -dEPSFitPage file.eps
+% To display a file without EPS encapsulation:
+% gs -dNOEPS file.ps
+
+% When starting to process an EPS file, state is 0.
+% After %%BoundingBox processed, state is 1 if OK or 2 if cropped.
+% After %%HiResBoundingBox processed, state is 3 if OK or 4 if cropped.
+% After %%EndComments processed, state is 5.
+/EPSBoundingBoxState 5 def
+/EPSBoundingBoxSetState {
+ //systemdict /EPSBoundingBoxState 3 -1 roll .forceput
+} .bind odef % .forceput must be bound and hidden
+
+% Parse 4 numbers for a bounding box
+/EPSBoundingBoxParse { % (llx lly urx ury) -- llx lly urx ury true OR false
+ mark exch
+ token {exch token {exch token {exch token {exch pop} if} if} if} if
+ counttomark
+ 4 eq {
+ 5 -1 roll pop % remove mark
+ true
+ } {
+ cleartomark false
+ } ifelse
+} bind def
+
+% Rescale and translate to fit the BoundingBox on the page
+/EPSBoundingBoxFitPage { % llx lly urx ury --
+ EPSDEBUG { (gs_epsf.ps: Rescaling EPS to fit page\n) print flush } if
+ clippath pathbbox newpath
+ % translate to new origin at lower left of clippath
+ 3 index 3 index translate
+ % calculate scale to fit smaller of width or height
+ exch 4 -1 roll sub 3 1 roll exch sub
+ 4 2 roll 5 index 5 index 4 2 roll
+ exch 4 -1 roll sub 3 1 roll exch sub
+ 4 2 roll
+ exch 4 -1 roll div 3 1 roll exch div
+ 1 index 1 index lt {pop}{exch pop} ifelse
+ dup scale
+ % translate to EPS -llx,-lly
+ exch neg exch neg translate
+} bind def
+
+% Crop the page to the BoundingBox
+/EPSBoundingBoxCrop { % llx lly urx ury --
+ EPSDEBUG {
+ (gs_epsf.ps: Setting pagesize from EPS bounding box\n) print flush
+ } if
+ exch 3 index sub exch 2 index sub % stack: llx lly urx-llx ury-lly
+ << /PageSize [ 5 -2 roll ] >> setpagedevice
+ neg exch neg exch translate
+} bind def
+
+
+/EPSBoundingBoxProcess { % (llx lly urx ury) state --
+ //systemdict /EPSBoundingBoxState get 1 index lt {
+ exch EPSBoundingBoxParse
+ {
+ //systemdict /EPSCrop known {
+ EPSBoundingBoxCrop
+ } {
+ //systemdict /EPSFitPage known {
+ EPSBoundingBoxFitPage
+ } {
+ % Warn if some of the EPS file will be clipped
+ clippath pathbbox newpath
+ { % context for exit
+ 5 -1 roll lt { 6 { pop } repeat true exit } if
+ 4 -1 roll lt { 4 { pop } repeat true exit } if
+ 3 -1 roll gt { 2 { pop } repeat true exit } if
+ exch gt { true exit } if
+ false exit
+ } loop
+ QUIET not and /EPSBoundingBoxState .systemvar 1 and 1 eq and {
+ (\n **** Warning: Some of the BoundingBox for the EPS file will be clipped.) =
+ ( Use -dEPSCrop or -dEPSFitPage to avoid clipping.\n) =
+ flush
+ 1 add
+ } if
+ } ifelse
+ } ifelse
+ EPSBoundingBoxSetState
+ } {
+ pop % state
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+} bind def
+
+/ProcessEPSComment { % file comment -- file comment
+ //systemdict /EPSBoundingBoxState get 3 lt {
+ dup
+ (%%EndComments) anchorsearch {
+ pop pop
+ % ignore any following bounding boxes
+ 5 EPSBoundingBoxSetState
+ } {
+ (%%BoundingBox:) anchorsearch {
+ pop
+ EPSDEBUG { (gs_epsf.ps: found %%BoundingBox\n) print flush } if
+ 1 EPSBoundingBoxProcess
+ } {
+ (%%HiResBoundingBox:) anchorsearch {
+ pop
+ EPSDEBUG { (gs_epsf.ps: found %%HiResBoundingBox\n) print flush } if
+ 3 EPSBoundingBoxProcess
+ } {
+ pop % Not interested in this DSC comment
+ } ifelse
+ } ifelse
+ } ifelse
+ } if
+} bind def
+
+% Install EPS handler for DSC comments, which we do later
+/EPSBoundingBoxInit {
+ systemdict /NOEPS known not {
+ % Merge ProcessEPSComment with existing handler
+ /ProcessEPSComment load /exec load
+ currentuserparams /ProcessDSCComment get
+ dup null eq {pop {pop pop}} if /exec load
+ 4 array astore cvx readonly
+ << /ProcessDSCComment 3 -1 roll >> setuserparams
+ } if
+} bind def
+
+/.runNoEPS /run load def
+
+/.runEPS { % file OR string --
+ /runEPS_save save def
+ /runEPS_dict_count countdictstack def
+ /runEPS_op_count count 2 sub def
+ /runEPS_page_count currentpagedevice /PageCount get def
+ 0 EPSBoundingBoxSetState
+ .runNoEPS
+ currentpagedevice /PageCount get runEPS_page_count sub 0 eq
+ { /showpage load exec } if
+ count runEPS_op_count sub {pop} repeat
+ countdictstack runEPS_dict_count sub {end} repeat
+ runEPS_save restore
+} bind def
+
+/run { % file OR string --
+ dup type /filetype ne { (r) file } if
+ dup (%!PS-Adobe-) .peekstring {
+ (%!PS-Adobe-) eq {
+ dup (%!PS-Adobe-X.X EPSF-X.X) .peekstring {
+ (EPSF) search {
+ pop pop pop
+ EPSDEBUG {(runEPS: Found EPS\n) print flush} if
+ systemdict /NOEPS known {
+ cvx .runNoEPS
+ } {
+ cvx .runEPS
+ } ifelse
+ } {
+ EPSDEBUG {(runEPS: Normal DSC\n) print flush} if
+ pop
+ cvx .runNoEPS
+
+ } ifelse
+ } {
+ EPSDEBUG {(runEPS: Short DSC\n) print flush} if
+ pop
+ cvx .runNoEPS
+ } ifelse
+ } {
+ EPSDEBUG {(runEPS: Not DSC\n) print flush} if
+ cvx .runNoEPS
+ } ifelse
+ } {
+ EPSDEBUG {(runEPS: Short non-DSC\n) print flush} if
+ pop
+ cvx .runNoEPS
+ } ifelse
+} bind odef
+
+
+% Handle DOS EPS files.
+
+/.runnoepsf /run load def
+/.epsfheader <C5D0D3C6> def
+/run
+ { dup type /filetype ne { (r) file } if
+ % Check for MS-DOS EPSF file (see Red Book p. 729).
+ dup ( ) .peekstring
+ { .epsfheader eq { dup ( ) readstring exch pop } { false } ifelse }
+ { pop false }
+ ifelse
+ % Stack: file true/false
+ { % This block is executed if the file is MS-DOS EPSF.
+ % Build up the little-endian byte offset and length.
+ 2
+ { 1 0 4
+ { 2 index read not { pop exit } if % if EOF, let error happen
+ 2 index mul add exch 256 mul exch
+ }
+ repeat exch pop exch
+ }
+ repeat
+ % Stack: offset length file
+ % Use flushfile to skip quickly to the start of the
+ % PostScript section.
+ dup 4 -1 roll 12 sub () /SubFileDecode filter flushfile
+ % Now interpret the PostScript.
+ exch () /SubFileDecode filter cvx run
+ }
+ { .runnoepsf
+ }
+ ifelse
+ } odef
+
+% rebind .runstdin to use redefined run
+userdict begin
+/.runstdin {
+ { (%stdin) run } execute0
+} bind def
+end
diff --git a/Master/tlpkg/tlgs/lib/gs_fapi.ps b/Master/tlpkg/tlgs/lib/gs_fapi.ps
new file mode 100644
index 00000000000..8a4566b2506
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_fapi.ps
@@ -0,0 +1,344 @@
+% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_fapi.ps 8022 2007-06-05 22:23:38Z giles $
+% Redefine Font and CIDFont categories with FAPI-handeled fonts.
+
+systemdict /.FAPIavailable known { .FAPIavailable } { false } ifelse not {
+ (%END FAPI) .skipeof
+} if
+
+languagelevel 2 .setlanguagelevel
+
+%====================================================================
+% Redefine Font category with FAPIfontmap and CIDFont with FAPIfontmap :
+15 dict begin % a temporary dictionary for local binding.
+
+/EmbedFontObjectsQuery mark
+ /.EmbedFontObjects 0
+.dicttomark def
+
+/is_device_compatible_to_FAPI % - is_device_compatible_to_FAPI <bool>
+{ currentdevice //EmbedFontObjectsQuery .getdeviceparams % <mark> <name> <value> ...
+ dup mark eq {
+ pop true
+ } {
+ exch pop exch pop 0 eq
+ } ifelse
+ % The code above assumes that only the requested parameter is rendered.
+ % The commented-out code below may be useful for general case.
+ % Keeping it for a while.
+ % counttomark 2 idiv {
+ % exch /.EmbedFontObjects eq {
+ % counttomark 1 add 1 roll cleartomark
+ % 0 eq exit
+ % } if
+ % } repeat
+ % dup mark eq {
+ % pop true
+ % } if
+} bind def
+
+%----------------------------- Process FAPIconfig -----------------------
+
+/Config
+<<
+ systemdict /FAPIconfig known {/FAPIconfig .systemvar} {(FAPIconfig)} ifelse .runlibfile
+ /ServerOptions 2 dict
+>> def
+systemdict /.FAPIconfig //Config put
+
+()
+systemdict /UFST_SSdir .knownget {
+ (UFST_SSdir=) exch concatstrings concatstrings
+} if
+systemdict /UFST_PlugIn .knownget {
+ 1 index length 0 ne {
+ exch .filenamelistseparator concatstrings exch
+ } if
+ (UFST_PlugIn=) exch concatstrings concatstrings
+} if
+dup length 0 ne {
+ //Config /ServerOptions get exch /UFST exch put
+} {
+ pop
+} ifelse
+
+%------------------Copy the FontEmulationProcs here : -------------------
+
+/FontEmulationProcs /ProcSet findresource {
+ def
+} forall
+
+currentdict /super.complete_instance currentdict /complete_instance get put
+
+%-----------FAPI-specific methods for category redefinition : -----------
+
+/RefinePath % <FontDict> /key RefinePath <FontDict>
+{ exch begin
+ //Config exch get
+ /Path exch
+ Path false .file_name_combine not {
+ exch
+ (Can't combine paths ) print print ( and ) print =
+ /RefinePath cvx /configurationerror signalerror
+ } if
+ def
+ currentdict end
+} bind def
+
+/complete_instance % <font_name> <FontDict> <Options> complete_FAPI_Font <font_name> <FontDict>
+{ //super.complete_instance exec
+ dup /CIDFontName known { /CIDFontPath } { /FontPath } ifelse //RefinePath exec
+} bind def
+
+/IsMyRecord % <raw_record> -> <raw_record> bool
+{ dup type /dicttype eq { dup /FAPI known } { false } ifelse
+} bind def
+
+/IsActive % <record> IsActive <bool>
+{ pop //is_device_compatible_to_FAPI exec
+} bind def
+
+/FontRecordVirtualMethods //RecordVirtualMethodsStub dup length 2 add dict copy begin
+ /IsActive //IsActive def
+ /MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
+ { currentglobal 3 1 roll true setglobal
+ //FontOptions //complete_instance exec
+ 2 copy //GetSize exec
+ 4 3 roll setglobal
+ } bind def
+currentdict end def
+
+/CIDFontRecordVirtualMethods //RecordVirtualMethodsStub dup length 3 add dict copy begin
+ /GetCSI //TranslateCSI def
+ /IsActive //IsActive def
+ /MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
+ { currentglobal 3 1 roll true setglobal
+ //CIDFontOptions //complete_instance exec
+ 2 copy //GetSize exec
+ 4 3 roll setglobal
+ } bind def
+currentdict end def
+
+/ReadFCOfontmap: % <path> ReadFCOfontmap: name dict ...
+{ /fontfile exch def
+ {
+ currentfile =string readline not {
+ pop exit
+ } if
+ dup length 0 ne {
+ 0 () /SubFileDecode filter
+ dup token not {
+ % A comment line
+ closefile
+ } {
+ dup /EndFCOfontmap cvx eq {
+ pop closefile exit
+ } if
+ exch dup token not {
+ /ReadFCOfontmap: cvx /rangecheck signalerror
+ } if
+ exch dup token not {
+ /StandardEncoding
+ } {
+ dup type /nametype ne {
+ /ReadFCOfontmap: cvx /rangecheck signalerror
+ } if
+ } ifelse
+ findencoding
+ exch dup token not {
+ null
+ } {
+ dup type /nametype ne {
+ /ReadFCOfontmap: cvx /rangecheck signalerror
+ } if
+ /Decoding findresource
+ } ifelse
+ exch closefile % index name enc dec|null
+ 4 3 roll % name enc dec|null index
+ << /Path fontfile
+ /FontType 1
+ /FAPI /UFST
+ /SubfontId counttomark 2 add -1 roll
+ /Decoding counttomark 2 add -1 roll
+ dup null eq {
+ pop pop
+ } if
+ /Encoding counttomark 2 add -1 roll
+ >> % dup { exch == = } forall
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } loop
+ currentdict /fontfile undef
+} bind def
+
+
+%----------------------------------The Redefintion---------------------
+
+/MappedCategoryRedefiner /ProcSet findresource /Redefine get /Redefine exch def
+
+% Redefine the /Font category :
+4 dict begin
+ /CategoryName /Font def
+ /MapFileName systemdict /FAPIfontmap known {/FAPIfontmap .systemvar} {(FAPIfontmap)} ifelse def
+ /VerifyMap { pop } bind def
+ /PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
+ { //IsMyRecord exec dup {
+ pop dup /RecordVirtualMethods //FontRecordVirtualMethods put
+ true
+ } if
+ } bind def
+currentdict end Redefine
+
+% Redefine the /CIDFont category :
+4 dict begin
+ /CategoryName /CIDFont def
+ /MapFileName systemdict /FAPIcidfmap known {/FAPIcidfmap .systemvar} {(FAPIcidfmap)} ifelse def
+ /VerifyMap { pop } bind def
+ /PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
+ { //IsMyRecord exec dup {
+ pop dup /RecordVirtualMethods //CIDFontRecordVirtualMethods put
+ true
+ } if
+ } bind def
+currentdict end Redefine
+
+%==================== A hook for buildfont* operators ====================
+
+% The procedure .FAPIhook redirects PS fonts to FAPI on necessity.
+% This depends on the following conditions :
+%
+% 1. If font dictionary has /FAPI entry, it is a font listed in FAPIconfig.FontPath,
+% and must be build with .FAPIrebuildfont, or a copy of a font, which was
+% built with .FAPIrebuildfont .
+%
+% 2. If the font dictionary has /PathLoad entry, and has no /FAPI entry,
+% it is an installed PS font, which is described in lib/fontmap or
+% in GS_FONTPATH. .loadfont inserts /PathLoad entry for this case
+% (see gs_fonts.ps).
+%
+% Installed fonts are being loaded with GS font loader,
+% the they are passed to FAPI is same way as embedded fonts are.
+% We do so because UFST cannot read fonts, which don't
+% follow Type 1/42 file format strongly.
+%
+% 3. Executing .loadfont, we place /FAPI_hook_disable in the 0th
+% element of some procedure on the execution stack - see gs_fonts.ps .
+% If FAPI_hook finds /FAPI_hook_disable in there,
+% it knows that it is called for a disk font during
+% its internal definefont.
+%
+% 4. If font dictionary has no /FAPI entry, and has no /Path entry,
+% and if we are not in .loadfont context, it is an embedded font.
+%
+% 5. Two entries to be defined in lib/FAPIconfig to control the hooking of PS fonts :
+% HookDiskFonts and HookEmbeddedFonts .
+% They specify arrays of font types (integers) to be redirected with FAPI.
+% HookDiskFonts controls disk PS fonts (which fall into (2) and (3) ).
+% HookEmbeddedFonts controls fonts being embedded into documents.
+%
+% 7. We apply the operator .passtoFAPI for checking whether FAPI can handle a font.
+% If so, we insert /FAPI entry into the font dictionary and convert it
+% with .FAPIrebuildfont . Otherwise the font is handled with the native GS font renderer.
+
+/FAPI_hook_debug % <proc> FAPI_hook_debug -
+FAPIDEBUG { {exec} } { {pop} } ifelse
+bind def
+
+/FAPI_hook_warn % <proc> FAPI_hook_debug -
+QUIET { {pop} } { {exec} } ifelse
+bind def
+
+/FAPI_is_hook_disabled % - FAPI_is_hook_disabled <bool>
+{ % checks whether execution stack contains packedarray started with /FAPI_hook_disable .
+ /FAPI_hook_disable /MappedCategoryRedefiner /ProcSet findresource /execstack_lookup get exec
+ null ne
+} bind def
+
+/FAPIhook_aux % <string|name> <font_dict> .FAPIhook <string|name> <font>
+{ % name <<font>>
+ { (FAPIhook ) print 1 index = } //FAPI_hook_debug exec
+ dup /FAPI known {
+ { //PrintFontRef exec ( is mapped to FAPI=) print dup /FAPI get = } //FAPI_hook_warn exec
+ true //.FAPIrebuildfont //ChooseDecoding exec
+ } {
+ dup /PathLoad known dup {
+ { (PathLoad known for the font ) print //PrintFontRef exec (.) = } //FAPI_hook_debug exec
+ } {
+ pop //FAPI_is_hook_disabled exec dup
+ { pop
+ { (FAPIhook is in .loadfont context for the font ) print //PrintFontRef exec (.) = } //FAPI_hook_debug exec
+ true
+ } if
+ } ifelse
+ { /HookDiskFonts } { /HookEmbeddedFonts } ifelse
+ //Config exch get % name <<font>> [types]
+ 1 index //GetFontType exec //FindInArray exec % name <<font>> bHook
+ { { (Trying to render the font ) print //PrintFontRef exec ( with FAPI...) = } //FAPI_hook_debug exec
+ //.FAPIpassfont {
+ { //PrintFontRef exec ( is being rendered with FAPI=) print dup /FAPI get = } //FAPI_hook_warn exec
+ false //.FAPIrebuildfont //ChooseDecoding exec
+ } {
+ { (Can't render ) print //PrintFontRef exec ( with FAPI, will do with native GS renderer.) = } //FAPI_hook_warn exec
+ } ifelse
+ } {
+ { (The font ) print //PrintFontRef exec ( doesn't need to render with FAPI.) = } //FAPI_hook_debug exec
+ } ifelse
+ } ifelse
+} bind def
+
+/FAPIhook % <string|name> <font_dict> .FAPIhook <string|name> <font>
+{ //is_device_compatible_to_FAPI exec
+ { //FAPIhook_aux exec
+ } {
+ { (FAPIhook is disabled for the current device.) = } //FAPI_hook_debug exec
+ } ifelse
+} bind def
+
+% ------------------ Redefine .buildfont* with FAPI : -----------------------
+
+/.buildfont1
+{ //.buildfont1 exec //FAPIhook exec
+} bind % 'odef' is below.
+
+/.buildfont2
+{ //.buildfont2 exec //FAPIhook exec
+} bind % 'odef' is below.
+
+/.buildfont42
+{ //.buildfont42 exec //FAPIhook exec
+} bind % 'odef' is below.
+
+/.buildfont9
+{ //.buildfont9 exec //FAPIhook exec
+} bind % 'odef' is below.
+
+/.buildfont10
+{ //.buildfont10 exec //FAPIhook exec
+} bind % 'odef' is below.
+
+/.buildfont11
+{ //.buildfont11 exec //FAPIhook exec
+} bind % 'odef' is below.
+
+end % the temporary dictionary for local binding.
+odef odef odef odef odef odef
+
+.setlanguagelevel
+
+%END FAPI
diff --git a/Master/tlpkg/tlgs/lib/gs_fform.ps b/Master/tlpkg/tlgs/lib/gs_fform.ps
new file mode 100644
index 00000000000..93f69d627ff
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_fform.ps
@@ -0,0 +1,92 @@
+% Copyright (C) 1995, 1996, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_fform.ps 6300 2005-12-28 19:56:24Z giles $
+% Form caching implemented in PostScript.
+
+% This implementation doesn't do the right thing about halftone or
+% Pattern phase, but the Pattern cache doesn't either....
+
+% The Form cache key is the Form dictionary; the value is an array
+% of 2 elements [CTM pattern_instance].
+%
+% In order to prevent restore from clearing the cache, we explicitly
+% push the cache entries on the stack before a restore and reinstall them.
+currentglobal false setglobal
+/.formcachedict 20 dict def % must be local
+true setglobal
+/restore {
+ mark .formcachedict { } forall
+ counttomark 1 add index { //restore } .internalstopped
+ { cleartomark //restore }
+ { counttomark 2 idiv { .formcachedict 3 1 roll put } repeat pop pop }
+ ifelse
+} bind odef
+
+/.execform1 {
+ dup /Implementation known not {
+ dup /FormType get 1 ne { /rangecheck signalerror } if
+ % The Implementation is a Pattern that will draw the form.
+ currentglobal 1 index gcheck setglobal
+ % Stack: form global
+ 10 dict begin
+ /PatternType 1 def
+ /PaintType 1 def % colored
+ /TilingType 1 def % irrelevant
+ % Copy the BBox to the correct VM.
+ /BBox 2 index /BBox get 4 array copy exch 1 index def
+ % Set XStep and YStep to very large numbers,
+ % so we won't get multiple copies of the form.
+ /XStep 1 index dup 2 get exch 0 get sub 100 mul def
+ /YStep exch dup 3 get exch 1 get sub 100 mul def
+ /PaintProc 2 index /PaintProc get def
+ currentdict end readonly
+ % Stack: form global impl
+ exch setglobal
+ 1 index /Implementation 3 -1 roll .forceput
+ } if
+ .formcachedict 1 index .knownget {
+ % Check whether we can use the cached value.
+ % Stack: form cachevalue
+ matrix currentmatrix true 0 1 3 {
+ % Stack: form cachevalue curmat true index
+ 3 index 0 get 1 index get exch 3 index exch get ne {
+ pop pop false exit
+ } if
+ } for exch pop
+ } {
+ false
+ } ifelse not
+ { % Make a new cache entry.
+ gsave
+ matrix currentmatrix dup 4 0 put dup 5 0 put dup setmatrix
+ % Stack: form mat
+ 1 index /Implementation get
+ 2 index /Matrix get
+ makepattern 2 array astore
+ .formcachedict 2 index 2 index put
+ grestore
+ } if
+ % Stack: form cachevalue
+ -1 0 0 transform
+ 2 { exch round cvi } repeat .setscreenphase
+ 1 get setpattern
+ /BBox get aload pop
+ exch 3 index sub exch 2 index sub rectfill
+} .bind odef % must bind .forceput
+
+.formtypes 1 /.execform1 load put
+
+setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_fntem.ps b/Master/tlpkg/tlgs/lib/gs_fntem.ps
new file mode 100644
index 00000000000..b5cf479c184
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_fntem.ps
@@ -0,0 +1,430 @@
+% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_fntem.ps 8022 2007-06-05 22:23:38Z giles $
+% A procset for Postscript font emulation
+
+% The procedures must not depend on the presence of the
+% procset dictionary on the dictionary stack.
+
+languagelevel 2 .setlanguagelevel
+
+%========================= Process xlatmap ====================
+mark
+%% Replace 1 (xlatmap)
+(xlatmap) .runlibfile
+.dicttomark dup systemdict exch /.xlatmap_dict exch put
+
+% Convert it into a plain text to simplify the processing in C :
+% *(fontkind\0\0\ *(charmap\0decoding\0) ) \0
+
+() exch {
+ 3 1 roll =string cvs concatstrings (\0\0) concatstrings
+ exch
+ { =string cvs concatstrings (\0) concatstrings
+ } forall
+} forall
+(\0) concatstrings
+systemdict exch /.xlatmap exch put
+
+/FontEmulationProcs 10 dict begin
+
+%-------------------------------Font--------------------------------
+
+
+/FontCommon % - font_common -
+{ currentdict /PaintType known not {
+ /PaintType 0 def
+ } if
+ currentdict /Encoding .knownget not {
+ //StandardEncoding
+ } if
+ dup type /nametype eq {
+ /Encoding findresource
+ } if
+ /Encoding exch def
+} bind def
+
+/FontOptions 5 dict begin
+ /make_procs currentdict def
+ /NameKey /FontName def
+ /TypeKey /FontType def
+
+ 1
+ { /FontMatrix [0.001 0 0 0.001 0 0] def
+ /FontBBox [-128 -128 1024 1024] def % zfapi.ps refines it.
+ /Private 0 dict def
+ /CharStrings << /.notdef () >> def
+ //FontCommon exec
+ } bind def
+
+ 42
+ { /FontMatrix [1 0 0 1 0 0] def
+ /FontBBox [0 0 1 1] def % zfapi.ps refines it.
+ /CharStrings <<>> def
+ /sfnts [<00010000 0000 0000 0000 0000 0000>] def
+ /GlyphDirectory [] def
+ //FontCommon exec
+ } bind def
+
+ %fixme : more font types.
+
+currentdict end def
+
+%---------------------------CIDFont---------------------------
+
+/TranslateCSI % <record> TranslateCSI <CSI>
+{ RESMPDEBUG { (fntem TranslateCSI beg ) = } if
+ begin
+ CSI length 2 eq {
+ << /Registry (Adobe)
+ /Ordering CSI aload pop
+ /Supplement exch
+ >>
+ } {
+ << /Registry CSI 0 get
+ /Ordering CSI 1 get
+ /Supplement CSI 2 get
+ >>
+ } ifelse
+ end
+ RESMPDEBUG { (fntem TranslateCSI end ) = } if
+} bind def
+
+/CIDFontCommon
+{ /CIDSystemInfo currentdict //TranslateCSI exec def
+ currentdict /CSI undef
+ /FontBBox [-128 -128 1024 1024] def % zfapi.ps refines it.
+ /CIDCount 1 def % ChooseDecoding will set a reasonable value.
+} bind def
+
+% GFlyph substitution table for narrow, wide, proportional glyphs -
+% used with TrueTypes.
+
+currentpacking false setpacking
+/SubstNWP <<
+
+ % Array format : orig_type, beg_CID, end_CID, subst_beg_CID, subst_type
+ % type = (n==narrow, w==wide, p==proportional).
+
+ /Japan1
+ { p 1 94 231 n
+
+ p 17 26 780 w
+ p 34 59 790 w
+ p 66 91 816 w
+ w 842 842 7918 w % fixme: These substitutions require to shift the glyph origin.
+ w 844 844 7919 w
+ w 846 846 7920 w
+ w 848 848 7921 w
+ w 850 850 7922 w
+ w 876 876 7923 w
+ w 908 908 7924 w
+ w 910 910 7925 w
+ w 912 912 7926 w
+ w 914 914 7927 w
+ w 925 925 7928 w
+ w 927 927 7929 w
+ w 929 929 7930 w
+ w 931 931 7931 w
+ w 933 933 7932 w
+ w 959 959 7933 w
+ w 991 991 7934 w
+ w 993 993 7935 w
+ w 995 995 7936 w
+ w 1002 1002 7937 w
+ w 1009 1009 7938 w
+ w 1010 1010 7939 w
+ } cvlit
+
+ /Japan2 1 index
+
+ /CNS1
+ { p 1 94 13648 n
+
+ p 17 26 333 w
+ p 34 59 365 w
+ p 66 91 391 w
+ } cvlit
+
+ /GB1
+ { p 2 94 814 n
+
+ p 2 94 262 w
+
+ p 1 1 7716 n
+ } cvlit
+
+ /Korea1
+ { p 1 60 8094 n
+ p 62 94 8155 n
+
+ p 2 59 264 w
+ p 63 94 325 w
+ } cvlit
+
+ /Identity []
+
+ /Unicode []
+
+>> def
+setpacking
+
+/CIDFontOptions 5 dict begin
+ /make_procs currentdict def
+ /NameKey /CIDFontName def
+ /TypeKey /CIDFontType def
+
+ 0
+ { //CIDFontCommon exec
+ /FDArray [
+ 14 dict begin
+ /FontName CIDFontName =string cvs (%) concatstrings cvn def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0 ] def
+ /PaintType 0 def
+ /Private 0 dict def
+ currentdict
+ end
+ ] def
+ /GlyphDirectory [] def
+ /GDBytes 1 def
+ /FDBytes 0 def
+ } bind def
+
+ 1
+ { //CIDFontCommon exec
+ /FontMatrix [1 0 0 1 0 0] def
+ /BuildGlyph {} def
+ } bind def
+
+ 2
+ { //CIDFontCommon exec
+ /FontMatrix [1 0 0 1 0 0] def
+ /GDBytes 2 def
+ /CIDMap <0000> def
+ /sfnts [<00010000 0000 0000 0000 0000 0000>] def
+ /Encoding [] def
+ /CharStrings << /.notdef 0 >> def
+ } bind def
+
+currentdict end def
+
+/complete_instance % <font_name> <FontDict> <Options> complete_FAPI_Font <font_name> <FontDict>
+{ begin
+ dup length dict copy
+ begin
+ dup type /nametype ne { cvn } if
+ dup NameKey exch def
+ currentglobal true setglobal
+ make_procs TypeKey load .knownget {
+ exec
+ } { setglobal
+ /complete_instance cvx /invalidfont signalerror
+ } ifelse
+ setglobal
+ currentdict end
+ end
+} bind def
+
+/GetFilePath % <scratch> <Name> <record> GetFilePath <filepath>
+{ exch pop % (scratch) <record>
+ /Path get % (scratch) (path)
+ exch copy
+ % What we make here it is not a complete PS resource.
+ % Unable to provide full conformity :
+ % the attempt to run this file may fail.
+} bind def
+
+/GetSize % <Name> <record> GetSize <size>
+{ pop pop -1 % Unknown size.
+ % fixme: probably we could provide an estimation size for some fonts.
+} bind def
+
+/RecordVirtualMethodsStub 3 dict begin
+ /GetFilePath //GetFilePath def
+ /GetSize //GetSize def
+currentdict end def
+
+% ---------------------- Decoding helpers ----------------------------
+
+/encodingnames mark
+ StandardEncoding /StandardEncoding
+ ISOLatin1Encoding /ISOLatin1Encoding
+ SymbolEncoding /SymbolEncoding
+ DingbatsEncoding /DingbatsEncoding
+ /resourceforall where {
+ pop (*) { dup cvn
+ EncodingDirectory exch .knownget not {
+ % A work around bug 688710 on Linux :
+ % findencoding can't load resource files until gs_init.ps executes .fixresources .
+ % It will happen after gs_init.ps runs INITFILES,
+ % from which the current file runs.
+ % Windows build has no such problem.
+ (.svn) anchorsearch {
+ % HACK : skip .svn or */* names, which are subdirectories.
+ pop pop
+ } {
+ (/) search {
+ pop pop pop
+ } {
+ cvn dup /Encoding findresource
+ } ifelse
+ } ifelse
+ } {
+ exch cvn exch
+ } ifelse
+ exch
+ } 1024 string /Encoding resourceforall
+ } if
+.dicttomark def
+
+/ChooseDecoding % <font> ChooseDecoding <font>
+{ { % A loop for 'exit' context.
+ dup /Decoding .knownget {
+ dup type /nametype eq {
+ 1 index /CIDFontType known { /CIDDecoding } { /Decoding } ifelse
+ findresource 1 index exch /Decoding exch put
+ } {
+ pop
+ } ifelse
+ dup /CIDFontType known {
+ dup dup /Decoding get /CIDCount get /CIDCount exch put
+ } if
+ exit
+ } if
+ dup /CIDFontType known {
+ % This is a hooked CID font, no need for Decoding.
+ exit
+ } if
+ % This works when the renderer can't choose character by name,
+ % and we cannot determine the charset.
+ % Probably this branch is to be removed after UFST problem is fixed.
+ dup /Encoding get % <<font>> encoding
+ dup type /nametype eq {
+ /Decoding findresource 1 index exch /Decoding exch put
+ } {
+ dup //encodingnames
+ exch .knownget {
+ exch pop
+ /Decoding findresource 1 index exch /Decoding exch put
+ } {
+ % unknown encoding, convert it to decoding :
+ dup length dict begin
+ /.notdef 0 def
+ 0 1 currentdict length 1 sub
+ { dup 2 index exch get
+ dup /.notdef ne {
+ exch def
+ } {
+ pop pop
+ } ifelse
+ } for
+ pop
+ currentdict end
+ 1 index exch /Decoding exch put
+ } ifelse
+ } ifelse
+ exit
+ } loop
+ dup /CIDFontType known {
+ dup /SubstNWP .knownget not {
+ dup /CIDSystemInfo get /Ordering get cvn
+ } if
+ dup type /nametype eq {
+ //SubstNWP exch get % <<font>> [SubstNWP]
+ } if
+ 1 index exch /SubstNWP exch put
+ } if
+} bind def
+
+/PrintFontRef % <string|name> <font> PrintFontRef <string|name> <font>
+{ dup /FontName known { (Font ) } { (CIDFont ) } ifelse print
+ 1 index =string cvs print
+ dup /FontName .knownget not {
+ dup /CIDFontName get
+ } if % <string|name> <font> <fontname>
+ dup 3 index ne {
+ ( \( aliased from ) print
+ =string cvs print ( \)) print
+ } {
+ pop
+ } ifelse
+} bind def
+
+/GetFontType % <font> GetFontType int
+{ dup /CIDFontType .knownget {
+ exch pop 9 add
+ } {
+ /FontType get
+ } ifelse
+} bind def
+
+/FindInArray % <array> <elem> .array_find <bool>
+{ false 3 1 roll
+ exch { % false elem elem_i
+ 1 index eq { % false elem
+ pop true exch
+ } if
+ } forall
+ pop
+} bind def
+
+/ProvideUnicodeDecoding % <font> ProvideUnicodeDecoding <font>
+{
+ % If the font is maintained by FAPI, or if it is TT-emulated CID font,
+ % it already has /Decoding. But its value isn't guaranteeed to
+ % be an Unicode decoding. Since we can't determine whether
+ % it is an Unicode decoding, we unconditionally load an appropriate Unicode decoding
+ % and attach it with /GlyphNames2Unicode entry.
+ %
+ % Another interesting case is when the font already has /GlyphNames2Unicode.
+ % The latter to be used instead. Note that /GlyphNames2Unicode
+ % appears only when type 32 fonts are disable (see .pdf_hook_DSC_Creator),
+ % but an automatic disabling is not implemented yet.
+
+ currentglobal true setglobal exch
+ dup /FontInfo known not {
+ dup /FontInfo 1 dict put
+ } if
+ { % A loop just for 'exit' context.
+ dup /FontInfo get /GlyphNames2Unicode known {
+ exit
+ } if
+ dup /CIDFontType known {
+ dup mark exch % bool <font> [ <font>
+ dup /CIDSystemInfo get /Ordering get (.Unicode) % bool <font> [ <font> () ()
+ concatstrings cvn % bool <font> [ <font> /Name
+ /CIDDecoding { findresource } stopped {
+ % Can't provide a decoding, giving up without creating /GlyphNames2Unicode.
+ cleartomark exit
+ } if % bool <font> [ <font> <D>
+ exch /FontInfo get exch % bool <font> [ <FI> <D>
+ /GlyphNames2Unicode exch
+ .forceput % FontInfo can be read-only.
+ pop % bool <font>
+ exit
+ } if
+ dup /FontInfo get % bool <font> <FI>
+ /GlyphNames2Unicode /Unicode /Decoding findresource
+ .forceput % FontInfo can be read-only.
+ exit
+ } loop
+ exch setglobal
+} bind def
+
+currentdict end /ProcSet defineresource pop
+
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_fonts.ps b/Master/tlpkg/tlgs/lib/gs_fonts.ps
new file mode 100644
index 00000000000..781619f72ab
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_fonts.ps
@@ -0,0 +1,1223 @@
+% Copyright (C) 1990-2003 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_fonts.ps 8022 2007-06-05 22:23:38Z giles $
+% Font initialization and management code.
+
+% Define the default font.
+/defaultfontname /Courier def
+
+% Define the name of the font map file.
+% Note that the "%%Replace " comment below provides the font map file name
+% for compiling initialization files into executable. Most likely it should be
+% consistent with the one specified here.
+/defaultfontmap (Fontmap) def
+
+/defaultfontmap_content 50 dict
+1 dict begin
+/; { 2 index 3 1 roll .growput } bind def
+%% Replace 0 (Fontmap)
+end def
+
+% ------ End of editable parameters ------ %
+
+% Define the UniqueIDs and organization XUID assigned to Aladdin.
+% UniqueIDs 5,066,501 - 5,066,580 are assigned as follows:
+% 01 and 02 for shareware Cyrillic
+% 33 through 67 for Type 1 versions of the Hershey fonts
+% UniqueIDs 5,115,501 - 5,115,600 are currently unassigned.
+/AladdinEnterprisesXUID 107 def
+
+% If SUBSTFONT is defined, make it the default font.
+/SUBSTFONT where { pop /defaultfontname /SUBSTFONT load def } if
+
+% Define a reliable way of accessing FontDirectory in systemdict.
+/.FontDirectory
+{ /FontDirectory .systemvar
+} .bind odef
+
+% If DISKFONTS is true, we load individual CharStrings as they are needed.
+% (This is intended primarily for machines with very small memories.)
+% In this case, we define another dictionary, parallel to FontDirectory,
+% that retains an open file for every font loaded.
+/FontFileDirectory 10 dict def
+
+% Define a temporary string for local use, since using =string
+% interferes with some PostScript programs.
+/.fonttempstring 8192 string def
+
+% Split up a search path into individual directories or files.
+/.pathlist % <path> .pathlist <dir1|file1> ...
+ { { dup length 0 eq { pop exit } if
+ .filenamelistseparator search not { exit } if
+ exch pop exch
+ }
+ loop
+ } bind def
+
+% Load a font name -> font file name map.
+userdict /Fontmap .FontDirectory maxlength dict put
+/.loadFontmap { % <file> .loadFontmap -
+ % We would like to simply execute .definefontmap as we read,
+ % but we have to maintain backward compatibility with an older
+ % specification that makes later entries override earlier
+ % ones within the same file.
+ 50 dict exch .readFontmap
+ { .definefontmap } forall
+} bind def
+/.readFontmap { % <dict> <file> .readFontmap <dict>
+ { dup token not { closefile exit } if
+ % stack: dict file fontname
+ % This is a hack to get around the absurd habit of MS-DOS editors
+ % of adding an EOF character at the end of the file.
+ dup (\032) eq { pop closefile exit } if
+ 1 index token not
+ { (Fontmap entry for ) print dup =only
+ ( has no associated file or alias name! Giving up.) = flush
+ {.readFontmap} 0 get 1 .quit
+ } if
+ dup type dup /stringtype eq exch /nametype eq or not
+ { (Fontmap entry for ) print 1 index =only
+ ( has an invalid file or alias name! Giving up.) = flush
+ {.readFontmap} 0 get 1 .quit
+ } if
+ % stack: dict file fontname filename|aliasname
+ 1 index type /stringtype eq
+ 1 index type /nametype eq and 1 index xcheck and
+ 1 index /run eq 2 index /.runlibfile eq or and {
+ % This is an inclusion entry.
+ pop findlibfile { exch pop } { file } ifelse
+ 2 index exch .readFontmap pop
+ } {
+ % This is a real entry.
+ % Read and pop tokens until a semicolon.
+ { 2 index token not
+ { (Fontmap entry for ) print 1 index =only
+ ( ends prematurely! Giving up.) = flush
+ {.loadFontmap} 0 get 1 .quit
+ } if
+ dup /; eq { pop 3 index 3 1 roll .growput exit } if
+ pop
+ } loop
+ } ifelse
+ } loop
+} bind def
+% Add an entry in Fontmap. We redefine this if the Level 2
+% resource machinery is loaded.
+/.definefontmap % <fontname> <file|alias> .definefontmap -
+ { % Since Fontmap is global, make sure the values are storable.
+ % If the fontname contains Unicode (first byte == \000) and
+ % this is not an alias definition, define an alias using ASCII
+ % (stripping out the high \000 bytes). Observed with some TT fonts.
+ 1 index 100 string cvs
+ dup length 0 gt {
+ 0 get 0 eq 1 index type /nametype ne and {
+ 1 index 100 string cvs dup length 2 div cvi string true exch
+ 0 1 2 index length 1 sub {
+ % stack: fontname filename fontnamestring addflag newstring index
+ dup 4 index exch 2 mul get 0 ne {
+ % High byte of pair is not \000
+ pop pop false exch
+ exit
+ } if
+ dup 4 index exch 2 mul 1 add get 2 index 3 1 roll put
+ } for
+ exch {
+ DEBUG { (\nAdding alias for: ) print 1 index ==only ( as: ) print dup == flush } if
+ cvn exch cvn .definefontmap % recurse with an alias
+ } {
+ pop pop % discard the name
+ } ifelse
+ } if
+ } {
+ pop
+ } ifelse
+ .currentglobal 3 1 roll true .setglobal
+ dup type /stringtype eq
+ { dup .gcheck not { dup length string copy } if
+ }
+ if
+ Fontmap 3 -1 roll 2 copy .knownget
+ { % Add an element to the end of the existing value,
+ % unless it's the same as the current last element.
+ mark exch aload pop counttomark 4 add -1 roll
+ 2 copy eq { cleartomark pop pop } { ] readonly .growput } ifelse
+ }
+ { % Make a new entry.
+ mark 4 -1 roll ] readonly .growput
+ }
+ ifelse .setglobal
+ } bind def
+
+% Parse a font file just enough to find the FontName or FontType.
+/.findfontvalue { % <file> <key> .findfontvalue <value> true
+ % <file> <key> .findfontvalue false
+ % Closes the file in either case.
+ exch dup read {
+ 2 copy unread 16#80 eq {
+ dup (xxxxxx) readstring pop pop % skip .PFB header
+ } if
+ { % Stack: key file
+ % Protect ourselves against syntax errors here.
+ dup { token } stopped { pop false exit } if
+ not { false exit } if % end of file
+ dup /eexec eq { pop false exit } if % reached eexec section
+ dup /Subrs eq { pop false exit } if % Subrs without eexec
+ dup /CharStrings eq { pop false exit } if % CharStrings without eexec
+ dup 3 index eq
+ { xcheck not { dup token exit } if } % found key
+ { pop }
+ ifelse
+ } loop
+ % Stack: key file value true (or)
+ % Stack: key file false
+ dup { 4 } { 3 } ifelse -2 roll closefile pop
+ } { closefile pop false } ifelse
+} bind def
+/.findfontname
+ { /FontName .findfontvalue
+ } bind def
+
+% If there is no FONTPATH, try to get one from the environment.
+NOFONTPATH { /FONTPATH () def } if
+/FONTPATH where
+ { pop }
+ { /FONTPATH (GS_FONTPATH) getenv not { () } if def }
+ifelse
+FONTPATH length 0 eq { (%END FONTPATH) .skipeof } if
+/FONTPATH [ FONTPATH .pathlist ] def
+
+% Scan directories looking for plausible fonts. "Plausible" means that
+% the file begins with %!PS-AdobeFont or %!FontType1, or with \200\001
+% followed by four arbitrary bytes and then either of these strings.
+% To speed up the search, we skip any file whose name appears in
+% the Fontmap (with any extension and upper/lower case variation) already,
+% and any file whose extension definitely indicates it is not a font.
+%
+% NOTE: The current implementation of this procedure is somewhat Unix/DOS-
+% specific. It assumes that '/' and '\' are directory separators, and that
+% the part of a file name following the last '.' is the extension.
+%
+/.lowerstring % <string> .lowerstring <lowerstring>
+ { 0 1 2 index length 1 sub
+ { 2 copy get dup 65 ge exch 90 le and
+ { 2 copy 2 copy get 32 add put }
+ if pop
+ }
+ for
+ } bind def
+/.splitfilename { % <dir.../base.extn> .basename <base> <extn>
+ % Make the file name read-only to detect aliasing bugs.
+ % We really don't like doing this, but we've had one
+ % such bug already.
+ readonly {
+ (/) search { true } { (\\) search } ifelse { pop pop } { exit } ifelse
+ } loop
+ dup { (.) search { pop pop } { exit } ifelse } loop
+ 2 copy eq {
+ pop ()
+ } {
+ exch dup length 2 index length 1 add sub 0 exch getinterval exch
+ } ifelse
+} bind def
+/.scanfontdict 1 dict def % establish a binding
+/.scanfontbegin
+ { % Construct the table of all file names already in Fontmap.
+ currentglobal true setglobal
+ .scanfontdict dup maxlength Fontmap length 2 add .max .setmaxlength
+ Fontmap
+ { exch pop
+ { dup type /stringtype eq
+ { .splitfilename pop .fonttempstring copy .lowerstring cvn
+ .scanfontdict exch true put
+ }
+ { pop
+ }
+ ifelse
+ }
+ forall
+ }
+ forall
+ setglobal
+ } bind def
+/.scanfontskip mark
+ % Strings are converted to names anyway, so....
+ /afm true
+ /bat true
+ /c true
+ /cmd true
+ /com true
+ /dir true
+ /dll true
+ /doc true
+ /drv true
+ /exe true
+ /fon true
+ /fot true
+ /h true
+ /o true
+ /obj true
+ /pfm true
+ /pss true % Adobe Multiple Master font instances
+ /txt true
+.dicttomark def
+/.scan1fontstring 8192 string def
+% %%BeginFont: is not per Adobe documentation, but a few fonts have it.
+/.scanfontheaders [(%!PS-Adobe*) (%!FontType*) (%%BeginFont:*)] def
+0 .scanfontheaders { length .max } forall 6 add % extra for PFB header
+/.scan1fontfirst exch string def
+/.scanfontdir % <dirname> .scanfontdir -
+ { currentglobal exch true setglobal
+ QUIET not { (Scanning ) print dup print ( for fonts...) print flush } if
+ [ 1 index ] (*) .generate_dir_list_templates
+ 0 0 0 4 -1 roll % found scanned files
+ { % stack: <fontcount> <scancount> <filecount> <filename>
+ exch 1 add exch % increment filecount
+ dup .splitfilename .fonttempstring copy .lowerstring
+ % stack: <fontcount> <scancount> <filecount+1> <filename>
+ % <BASE> <ext>
+ .scanfontskip exch known exch .scanfontdict exch known or
+ { pop
+ % stack: <fontcount> <scancount> <filecount+1>
+ }
+ { 3 -1 roll 1 add 3 1 roll
+ % stack: <fontcount> <scancount+1> <filecount+1> <filename>
+ dup (r) { file } .internalstopped
+ { pop pop null ()
+ % stack: <fontcount> <scancount+1> <filecount+1> <filename>
+ % null ()
+ }
+ {
+ % On some platforms, the file operator will open directories,
+ % but an error will occur if we try to read from one.
+ % Handle this possibility here.
+ dup .scan1fontfirst { readstring } .internalstopped
+ { pop pop () }
+ { pop }
+ ifelse
+ % stack: <fontcount> <scancount+1> <filecount+1>
+ % <filename> <file> <header>
+ }
+ ifelse
+ % Check for PFB file header.
+ dup (\200\001????*) .stringmatch
+ { dup length 6 sub 6 exch getinterval }
+ if
+ % Check for font file headers.
+ false .scanfontheaders
+ { 2 index exch .stringmatch or
+ }
+ forall exch pop
+ { % stack: <fontcount> <scancount+1> <filecount+1> <filename>
+ % <file>
+ dup 0 setfileposition .findfontname
+ { dup Fontmap exch known
+ { pop pop
+ }
+ { exch copystring exch
+ DEBUG { ( ) print dup =only flush } if
+ 1 index .definefontmap
+ .splitfilename pop true .scanfontdict 3 1 roll .growput
+ % Increment fontcount.
+ 3 -1 roll 1 add 3 1 roll
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ % .findfontname will have done a closefile in the above case.
+ { dup null eq { pop } { closefile } ifelse pop
+ }
+ ifelse
+ }
+ ifelse
+ }
+ .scan1fontstring filenameforall
+ QUIET
+ { pop pop pop }
+ { ( ) print =only ( files, ) print =only ( scanned, ) print
+ =only ( new fonts.) = flush
+ }
+ ifelse
+ pop
+ setglobal
+ } bind def
+
+%END FONTPATH
+
+% Try to enumerate native fonts registered with the os
+% and add them to the fontmap. This relies on a custom
+% operator which calls platform-specific C code. It
+% returns an array of arrays, each containing a pair
+% of strings: what the system thinks is the ps name,
+% and the access path.
+/.setnativefontmapbuilt { % set whether we've been run
+ systemdict exch /.nativefontmapbuilt exch .forceput
+} .bind executeonly def
+false .setnativefontmapbuilt
+/.buildnativefontmap { % - .buildnativefontmap <bool>
+ QUIET not {
+ (Querying operating system for font files...\n)
+ print flush
+ } if
+ .getnativefonts dup
+ {
+ exch
+ {
+ % stack: [ (name) (path) ]
+ % verify the font name ourselves
+ dup 1 get (r) { file } stopped
+ {
+ % skip the entry if we can't open the returned path
+ pop pop pop
+ }{
+ % we could open the font file
+ .findfontname
+ not { dup 0 get } if % stack: (newname) [ (name) (path) ]
+ % DEBUG { ( found ) print dup print (\n) print flush } if
+ % add entry to the fontmap
+ 1 index exch 0 exch dup type /nametype ne {cvn} if put
+ aload pop .definefontmap
+ } ifelse
+ } forall
+ } if
+ % record that we've been run
+ true .setnativefontmapbuilt
+} bind def
+
+% Create the dictionary that registers the .buildfont procedure
+% (called by definefont) for each FontType.
+/buildfontdict 20 dict def
+
+% Register Type 3 fonts, which are always supported, for definefont.
+buildfontdict 3 /.buildfont3 cvx put
+
+% Register Type 0 fonts if they are supported. Strictly speaking,
+% we should do this in its own file (gs_type0.ps), but since this is
+% the only thing that would be in that file, it's simpler to put it here.
+/.buildfont0 where { pop buildfontdict 0 /.buildfont0 cvx put } if
+
+% Define definefont. This is a procedure built on a set of operators
+% that do all the error checking and key insertion.
+/.growfontdict
+ { % Grow the font dictionary, if necessary, to ensure room for an
+ % added entry, making sure there is at least one slot left for FID.
+ dup maxlength 1 index length sub 2 lt
+ { dup dup wcheck
+ { .growdict }
+ { .growdictlength dict .copydict }
+ ifelse
+ }
+ { dup wcheck not { dup maxlength dict .copydict } if
+ }
+ ifelse
+ } bind def
+/.completefont {
+ { % Check for disabled platform fonts.
+ NOPLATFONTS
+ { % Make sure we leave room for FID.
+ .growfontdict dup /ExactSize 0 put
+ }
+ { % Hack: if the Encoding looks like it might be the
+ % Symbol or Dingbats encoding, load those now (for the
+ % benefit of platform font matching) just in case
+ % the font didn't actually reference them.
+ % Note that some types of font don't have an Encoding.
+ dup /Encoding .knownget {
+ dup length 65 ge {
+ 64 get
+ dup /congruent eq { SymbolEncoding pop } if
+ /a9 eq { DingbatsEncoding pop } if
+ } {
+ pop
+ } ifelse
+ } if
+ }
+ ifelse
+ dup /OrigFont known not {
+ dup dup /OrigFont exch .growput
+ } if
+ true exch
+ % If this is a CIDFont, CIDFontType takes precedence
+ % over FontType.
+ dup /CIDFontType known {
+ /.buildcidfont where {
+ pop exch not exch % true => false
+ } if
+ } if
+ exch {
+ dup /FontType get //buildfontdict exch get
+ } {
+ {.buildcidfont} % so it gets bound
+ } ifelse
+ } stopped { $error /command get /invalidfont signalerror } if
+
+ % Execute the .buildxxxfontx outside the 'stopped', because we don't
+ % want its errors converted to invalidfont.
+ exec
+
+ {
+
+ DISKFONTS {
+ FontFileDirectory 2 index known {
+ dup /FontFile FontFileDirectory 4 index get .growput
+ } if
+ } if
+ systemdict /ProvideUnicode .knownget not { false } if {
+ /FontEmulationProcs /ProcSet findresource
+ /ProvideUnicodeDecoding get exec
+ } if
+ readonly % stack: name fontdict
+ } stopped { $error /command get /invalidfont signalerror } if
+} bind def
+/definefont
+ { dup rcheck not {
+ /definefont cvx /invalidaccess signalerror
+ } if
+ /definefont cvx {.completefont} .errorexec
+ % If the current allocation mode is global, also enter
+ % the font in LocalFontDirectory.
+ .currentglobal
+ { //systemdict /LocalFontDirectory .knownget
+ { 2 index 2 index { .growput } //superexec } % readonly
+ if
+ }
+ if
+ dup .FontDirectory 4 -2 roll { .growput } //superexec % readonly
+ % If the font originated as a resource, register it.
+ currentfile .currentresourcefile eq { dup .registerfont } if
+ readonly
+ } odef
+
+% Define a procedure for defining aliased fonts.
+% We use this only for explicitly aliased fonts, not substituted fonts:
+% we think this matches the observed behavior of Adobe interpreters.
+/.aliasfont % <name> <font> .aliasfont <newFont>
+ { .currentglobal 3 1 roll dup .gcheck .setglobal
+ % <bool> <name> <font>
+ dup length 2 add dict % <bool> <name> <font> <dict>
+ dup 3 -1 roll % <bool> <name> <dict> <dict> <font>
+ { 1 index /FID eq { pop pop } { put dup } ifelse } forall
+ % <bool> <name> <dict> <dict>
+ % Stack: global fontname newfont newfont.
+ % We might be defining a global font whose FontName
+ % is a local string. This is weird, but legal,
+ % and doesn't cause problems anywhere else:
+ % to avoid any possible problems in this case, do a cvn.
+ % We might also be defining (as an alias) a global font
+ % whose FontName is a local non-string, if someone passed a
+ % garbage value to findfont. In this case, just don't
+ % call definefont at all.
+ 2 index dup type /stringtype eq exch .gcheck or 1 index .gcheck not or
+ { pop % <bool> <name> <dict>
+ 1 index dup type /stringtype eq { cvn } if
+ % <bool> <name> <dict> <name1>
+ % HACK:
+ % We want to know whether we alias a font,
+ % because in this case its FontName to be replaced with the alias.
+ % There is no simple way to know that at this point.
+ % But if the original font has defaultfontname,
+ % we probably substitute it rather than alias.
+ % Using such condition as an approximation to the strong condition.
+ %
+ % Note it works wrongly if Fontmap maps something to defaultfontname like this :
+ % /Courier /NimbusMonL-Regu ;
+ % /Something /Courier ;
+ % The FontName of Something will not be /Something. It will be /Courier .
+ %
+ 1 index /FontName get defaultfontname ne {
+ 2 copy /FontName exch put
+ } if
+ 1 index exch /.Alias exch put % <bool> <name> <dict>
+ dup dup /OrigFont exch .growput
+ % Don't bind in definefont, since Level 2 redefines it.
+ /definefont .systemvar exec
+ }
+ { /findfont cvx {.completefont} .errorexec pop exch pop
+ }
+ ifelse
+ exch .setglobal
+ } odef % so findfont will bind it
+
+% Define .loadfontfile for loading a font. If we recognize Type 1 and/or
+% TrueType fonts, gs_type1.ps and/or gs_ttf.ps will redefine this.
+/.loadfontfile {
+ % According to Ed Taft, Adobe interpreters push userdict
+ % before loading a font, and pop it afterwards.
+ userdict begin
+ cvx exec
+ end
+} bind def
+/.setloadingfont {
+ //systemdict /.loadingfont 3 -1 roll .forceput
+} .bind odef % .forceput must be bound and hidden
+/.loadfont
+ { % Some buggy fonts leave extra junk on the stack,
+ % so we have to make a closure that records the stack depth
+ % in a fail-safe way.
+ true .setloadingfont
+ { /FAPI_hook_disable pop % gs_fapi accesses this with execstack_lookup - don't remove !
+ {{.loadfontfile} .execasresource} count 1 sub 2 .execn
+ count exch sub { pop } repeat
+ exit
+ } loop % this loop is a pattern for execstack_lookup, don't remove !
+ false .setloadingfont
+ } bind def
+
+% Find an alternate font to substitute for an unknown one.
+% We go to some trouble to parse the font name and extract
+% properties from it. Later entries take priority over earlier.
+/.substitutefaces [
+ % Guess at suitable substitutions for random unknown fonts.
+ [(Book) /NewCenturySchlbk 0]
+ [(Grot) /Helvetica 0]
+ [(Roman) /Times 0]
+ [(Chancery) /ZapfChancery-MediumItalic 0]
+ % If the family name appears in the font name,
+ % use a font from that family.
+ [(Arial) /Helvetica 0]
+ [(Avant) /AvantGarde 0]
+ [(Bookman) /Bookman 0]
+ [(Century) /NewCenturySchlbk 0]
+ [(Cour) /Courier 0]
+ [(Frut) /Helvetica 0]
+ [(Garamond) /Palatino 0]
+ [(Geneva) /Helvetica 0]
+ [(Helv) /Helvetica 0]
+ [(NewYork) /Bookman 0]
+ [(Pala) /Palatino 0]
+ [(Schlbk) /NewCenturySchlbk 0]
+ [(Swiss) /Helvetica 0]
+ [(Symbol) /Symbol 0]
+ [(Times) /Times 0]
+ % Substitute for Adobe Multiple Master fonts.
+ [(Minion) /Times 0]
+ [(Myriad) /Helvetica 0]
+ % If the font wants to be monospace, use Courier.
+ [(Monospace) /Courier 0]
+ [(Typewriter) /Courier 0]
+ % Define substitutes for the other Adobe PostScript 3 fonts.
+ % For some of them, the substitution is pretty bad!
+ [(Albertus) /Palatino 0]
+ [(AntiqueOlive) /Helvetica 0]
+ [(Bodoni) /NewCenturySchlbk 0]
+ [(Chicago) /Helvetica 2]
+ [(Clarendon) /Bookman 0]
+ [(Cooper) /NewCenturySchlbk 0]
+ [(Copperplate) /AvantGarde 0] % inappropriate, small-cap font
+ [(Coronet) /ZapfChancery-MediumItalic 0]
+ [(Eurostile) /Helvetica 0]
+ [(Geneva) /Courier 2] % should be fixed-pitch sans demi
+ [(GillSans) /Helvetica 2]
+ [(GillSans-Light) /Helvetica 0]
+ [(Goudy) /Palatino 0]
+ [(Hoefler) /NewCenturySchlbk 0]
+ [(Joanna) /Times 0]
+ [(LetterGothic) /Courier 0] % should be fixed-pitch sans
+ [(LubalinGraph-Book) /Bookman 2]
+ [(LubalinGraph-Demi) /Bookman 0]
+ [(Marigold) /ZapfChancery-MediumItalic 0]
+ [(MonaLisa-Recut) /Palatino 0] % inappropriate
+ [(Monaco) /Courier 2] % should be fixed-pitch sans demi
+ [(Optima) /Helvetica 0]
+ [(Oxford) /ZapfChancery-MediumItalic 0]
+ [(Tekton) /Helvetica 0]
+ [(Univers) /Helvetica 0]
+] readonly def
+/.substituteproperties [
+ [(It) 9] [(Oblique) 1]
+ [(Black) 2] [(Bd) 2] [(Bold) 2] [(bold) 2] [(Demi) 2] [(Heavy) 2] [(Sb) 2]
+ [(Cn) 4] [(Cond) 4] [(Narrow) 4] [(Pkg) 4] [(Compr) 4]
+ [(Serif) 8] [(Sans) -8]
+] readonly def
+/.fontnameproperties { % <int> <string|name> .fontnameproperties
+ % <int'>
+ .fontnamestring
+ .substituteproperties {
+ 2 copy 0 get search {
+ pop pop pop dup length 1 sub 1 exch getinterval 3 -1 roll exch {
+ dup 0 ge { or } { neg not and } ifelse
+ } forall exch
+ } {
+ pop pop
+ } ifelse
+ } forall pop
+} bind def
+/.substitutefamilies mark
+ /AvantGarde
+ {/AvantGarde-Book /AvantGarde-BookOblique
+ /AvantGarde-Demi /AvantGarde-DemiOblique}
+ /Bookman
+ {/Bookman-Demi /Bookman-DemiItalic /Bookman-Light /Bookman-LightItalic}
+ /Courier
+ {/Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique}
+ /Helvetica
+ {/Helvetica /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique}
+ /NewCenturySchlbk
+ {/NewCenturySchlbk-Roman /NewCenturySchlbk-Italic
+ /NewCenturySchlbk-Bold /NewCenturySchlbk-BoldItalic}
+ /Palatino
+ {/Palatino-Roman /Palatino-Italic /Palatino-Bold /Palatino-BoldItalic}
+ /Symbol
+ {/Symbol /Symbol /Symbol /Symbol}
+ /Times
+ {/Times-Roman /Times-Italic /Times-Bold /Times-BoldItalic}
+ /ZapfChancery-MediumItalic
+ {/ZapfChancery-MediumItalic}
+.dicttomark readonly def
+/.nametostring { % <name> .nametostring <string>
+ % <other> .nametostring <other>
+ dup type /nametype eq { .namestring } if
+} bind def
+/.fontnamestring { % <fontname> .fontnamestring <string|name>
+ dup type dup /nametype eq {
+ pop .namestring
+ } {
+ /stringtype ne { pop () } if
+ } ifelse
+} bind def
+/.substitutefontname { % <fontname> <properties> .substitutefontname
+ % <altname|null>
+ % Look for properties and/or a face name in the font name.
+ % If we find any, use Times (serif) or Helvetica (sans) as the
+ % base font; otherwise, use the default font.
+ % Note that the "substituted" font name may be the same as
+ % the requested one; the caller must check this.
+ exch .fontnamestring {
+ defaultfontname /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique
+ /Times-Roman /Times-Italic /Times-Bold /Times-BoldItalic
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique
+ } 3 1 roll
+ % Stack: facelist properties fontname
+ % Look for a face name.
+ .substitutefaces {
+ 2 copy 0 get search {
+ pop pop pop
+ % Stack: facelist properties fontname [(pattern) family properties]
+ dup 2 get 4 -1 roll or 3 1 roll
+ 1 get .substitutefamilies exch get
+ 4 -1 roll pop 3 1 roll
+ } {
+ pop pop
+ } ifelse
+ } forall pop
+ 1 index length mod get exec
+} bind def
+/.substitutefont { % <fontname> .substitutefont <altname>
+ dup 0 exch .fontnameproperties .substitutefontname
+ % Only accept fonts known in the Fontmap.
+ Fontmap 1 index known not { pop defaultfontname } if
+} bind def
+
+% If requested, make (and recognize) fake entries in FontDirectory for fonts
+% present in Fontmap but not actually loaded. Thanks to Ray Johnston for
+% the idea behind this code.
+FAKEFONTS not { (%END FAKEFONTS) .skipeof } if
+
+% We use the presence or absence of the FontMatrix key to indicate whether
+% a font is real or fake. We must pop the arguments at the very end,
+% so that stack protection will be effective.
+
+/definefont { % <name> <font> definefont <font>
+ dup /FontMatrix known {
+ //definefont
+ } {
+ 2 copy /FontName get findfont //definefont exch pop exch pop
+ } ifelse
+} bind odef
+
+/scalefont { % <font> <scale> scalefont <font>
+ 1 index /FontMatrix known {
+ //scalefont
+ } {
+ 1 index /FontName get findfont 1 index //scalefont
+ exch pop exch pop
+ } ifelse
+} bind odef
+
+/makefont { % <font> <matrix> makefont <font>
+ 1 index /FontMatrix known {
+ //makefont
+ } {
+ 1 index /FontName get findfont 1 index //makefont
+ exch pop exch pop
+ } ifelse
+} bind odef
+
+/setfont { % <font> setfont -
+ dup /FontMatrix known {
+ //setfont
+ } {
+ dup /FontName get findfont //setfont pop
+ } ifelse
+} bind odef
+
+%END FAKEFONTS
+
+% Define findfont so it tries to load a font if it's not found.
+% The Red Book requires that findfont be a procedure, not an operator,
+% but it still needs to restore the stacks reliably if it fails,
+% so we do all the work in an operator.
+/.findfont { % <fontname> .findfont <font>
+ mark 1 index % <fontname> mark <fontname>
+ //systemdict begin .dofindfont
+ % <fontname> mark <alias> ... <font>
+ % Define any needed aliases.
+ counttomark 1 sub { .aliasfont } repeat end
+ % <fontname> mark <font>
+ exch pop exch pop
+} odef
+/findfont {
+ .findfont
+} bind def
+% Check whether the font name we are about to look for is already on the list
+% of aliases we're accumulating; if so, cause an error.
+/.checkalias % -mark- <alias1> ... <name> .checkalias <<same>>
+ { counttomark 1 sub -1 1
+ { index 1 index eq
+ { pop QUIET not
+ { (Unable to substitute for font.) = flush
+ } if
+ /findfont cvx /invalidfont signalerror
+ }
+ if
+ }
+ for
+ } bind def
+% Get a (non-fake) font if present in a FontDirectory.
+/.fontknownget % <fontdir> <fontname> .fontknownget <font> true
+ % <fontdir> <fontname> .fontknownget false
+ { .knownget
+ { FAKEFONTS
+ { dup /FontMatrix known { true } { pop false } ifelse }
+ { true }
+ ifelse
+ }
+ { false
+ }
+ ifelse
+ } bind def
+% This is the standard procedure for handling font substitution.
+% Its location is per an Adobe newsgroup posting.
+% It is called with the font name on the stack, standing in for findfont.
+/.stdsubstfont { % mark <alias1> ... <fontname> .stdsubstfont mark <alias1> ... <aliasN> <font>
+ /SUBSTFONT where {
+ pop QUIET not {
+ (Substituting for font ) print dup =only
+ (.) = flush
+ } if
+ % No aliasing.
+ % This mode is incompatible with high level devices.
+ cleartomark mark defaultfontname
+ } {
+ dup .substitutefont
+ 2 copy eq { pop defaultfontname } if
+ .checkalias
+ QUIET not {
+ SHORTERRORS {
+ (%%[) print 1 index =only
+ ( not found, substituting ) print dup =only (]%%)
+ } {
+ (Substituting font ) print dup =only
+ ( for ) print 1 index =only (.)
+ } ifelse = flush
+ } if
+ } ifelse
+ /Font findresource
+} bind def
+
+% Default font substitution does {pop /Courier} om many implementations.
+% GS post-process font substitution in .stdsubstfont and uses {} for
+% backward compatibility
+$error /SubstituteFont { } put
+
+% Scan the next directory on FONTPATH.
+/.scannextfontdir { % - .scannextfontdir <bool>
+ % If we haven't scanned all the directories in
+ % FONTPATH, scan the next one.
+ null 0 1 FONTPATH length 1 sub {
+ FONTPATH 1 index get null ne { exch pop exit } if pop
+ } for dup null ne {
+ dup 0 eq { .scanfontbegin } if
+ FONTPATH 1 index get .scanfontdir
+ FONTPATH exch null put true
+ } {
+ pop false
+ } ifelse
+} bind def
+% Do the work of findfont, including substitution, defaulting, and
+% scanning of FONTPATH.
+/.dofindfont { % mark <fontname> .dofindfont % mark <alias> ... <font>
+ .tryfindfont not {
+ % We didn't find the font. If we haven't scanned
+ % all the directories in FONTPATH, scan the next one
+ % now and look for the font again.
+ .scannextfontdir {
+ % Start over with an empty alias list.
+ counttomark 1 sub { pop } repeat % mark <fontname>
+ .dofindfont
+ } {
+ % No more directories to scan. Try building the native
+ % font map entries if we haven't already done so.
+ systemdict /.nativefontmapbuilt get not { .buildnativefontmap } { false } ifelse {
+ % Same stack as at the beginning of .dofindfont.
+ .dofindfont % start over
+ } {
+ % No luck. Make sure we're not already
+ % looking for the default font.
+ QUIET not {
+ (Didn't find this font on the system!\n)
+ print
+ } if
+ dup defaultfontname eq {
+ QUIET not {
+ (Unable to load default font ) print
+ dup =only (! Giving up.) = flush
+ } if
+ /findfont cvx /invalidfont signalerror
+ } if
+ % Substitute for the font. Don't alias.
+ % Same stack as at the beginning of .dofindfont.
+ $error /SubstituteFont get exec
+ %
+ % igorm: I guess the surrounding code assumes that .stdsubstfont
+ % must ADD an alias to allow .checkalias and .findfont to work properly.
+ % Also I guess that a trailing recursion is
+ % used in .dofindfont and through .stdsubstfont
+ % just to represent a simple iteration,
+ % which accumulates the aliases after the mark.
+ .stdsubstfont
+ } ifelse
+ } ifelse
+ } if
+} bind def
+% Try to find a font using only the present contents of Fontmap.
+/.tryfindfont { % <fontname> .tryfindfont <font> true
+ % <fontname> .tryfindfont false
+ .FontDirectory 1 index .fontknownget
+ { % Already loaded
+ exch pop true
+ }
+ { dup Fontmap exch .knownget not
+ { % Unknown font name. Look for a file with the
+ % same name as the requested font.
+ .tryloadfont
+ }
+ { % Try each element of the Fontmap in turn.
+ false exch % (in case we exhaust the list)
+ % Stack: fontname false fontmaplist
+ { exch pop
+ dup type /nametype eq
+ { % Font alias
+ .checkalias .tryfindfont exit
+ }
+ { dup dup type dup /arraytype eq exch /packedarraytype eq or exch xcheck and
+ { % Font with a procedural definition
+ exec % The procedure will load the font.
+ % Check to make sure this really happened.
+ .FontDirectory 1 index .knownget
+ { exch pop true exit }
+ if
+ }
+ { % Font file name
+ .loadfontloop { true exit } if
+ }
+ ifelse
+ }
+ ifelse false
+ }
+ forall
+ % Stack: font true -or- fontname false
+ { true
+ }
+ { % None of the Fontmap entries worked.
+ % Try loading a file with the same name
+ % as the requested font.
+ .tryloadfont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bind def
+
+% any user of .putgstringcopy must use bind and executeonly
+/.putgstringcopy % <dict> <name> <string> .putgstringcopy -
+{ 2 index gcheck currentglobal
+ 2 copy eq {
+ pop pop .forceput
+ } {
+ 5 1 roll setglobal
+ dup length string copy
+ .forceput setglobal
+ } ifelse
+} .bind odef % must be bound and hidden for .forceput
+
+
+% Attempt to load a font from a file.
+/.tryloadfont { % <fontname> .tryloadfont <font> true
+ % <fontname> .tryloadfont false
+ dup .nametostring
+ % Hack: check for the presence of the resource machinery.
+ /.genericrfn where {
+ pop
+ pop dup .fonttempstring /FontResourceDir getsystemparam .genericrfn
+ .loadfontloop {
+ //true
+ } {
+ dup .nametostring .loadfontloop
+ } ifelse
+ } {
+ .loadfontloop
+ } ifelse
+} bind def
+/.loadfontloop { % <fontname> <filename> .loadfontloop
+ % <font> true
+ % -or-
+ % <fontname> false
+ % See above regarding the use of 'loop'.
+ { % Is the font name a string?
+ dup type /stringtype ne
+ { QUIET not
+ { (Can't find font with non-string name: ) print dup =only (.) = flush
+ }
+ if pop false exit
+ }
+ if
+ % Can we open the file?
+ findlibfile not
+ { QUIET not
+ { (Can't find \(or can't open\) font file ) print dup print
+ (.) = flush
+ }
+ if pop false exit
+ }
+ if
+
+ % Stack: fontname fontfilename fontfile
+ DISKFONTS
+ { .currentglobal true .setglobal
+ 2 index (r) file
+ FontFileDirectory exch 5 index exch .growput
+ .setglobal
+ }
+ if
+ QUIET not
+ { (Loading ) print 2 index =only
+ ( font from ) print 1 index print (... ) print flush
+ }
+ if
+ % If LOCALFONTS isn't set, load the font into local or global
+ % VM according to FontType; if LOCALFONTS is set, load the font
+ % into the current VM, which is what Adobe printers (but not
+ % DPS or CPSI) do.
+ LOCALFONTS { false } { /setglobal where } ifelse
+ { pop /FontType .findfontvalue { 1 eq } { false } ifelse
+ % .setglobal, like setglobal, aliases FontDirectory to
+ % GlobalFontDirectory if appropriate. However, we mustn't
+ % allow the current version of .setglobal to be bound in,
+ % because it's different depending on language level.
+ .currentglobal exch /.setglobal .systemvar exec
+ % Remove the fake definition, if any.
+ .FontDirectory 3 index .forceundef % readonly
+ 1 index (r) file .loadfont .FontDirectory exch
+ /.setglobal .systemvar exec
+ }
+ { .loadfont .FontDirectory
+ }
+ ifelse
+ % Stack: fontname fontfilename fontdirectory
+ QUIET not
+ { //systemdict /level2dict known
+ { .currentglobal false .setglobal vmstatus
+ true .setglobal vmstatus 3 -1 roll pop
+ 6 -1 roll .setglobal 5
+ }
+ { vmstatus 3
+ }
+ ifelse { =only ( ) print } repeat
+ (done.) = flush
+ } if
+
+ % Check to make sure the font was actually loaded.
+ dup 3 index .fontknownget
+ { dup /PathLoad 4 index //.putgstringcopy exec
+ 4 1 roll pop pop pop true exit
+ } if
+
+ % Maybe the file had a different FontName.
+ % See if we can get a FontName from the file, and if so,
+ % whether a font by that name exists now.
+ exch dup % Stack: origfontname fontdirectory path path
+ (r) file .findfontname
+ { % Stack: origfontname fontdirectory path filefontname
+ 2 index 1 index .fontknownget
+ { % Yes. Stack: origfontname fontdirectory path filefontname fontdict
+ dup 4 -1 roll /PathLoad exch //.putgstringcopy exec
+ % Stack: origfontname fontdirectory filefontname fontdict
+ 3 -1 roll pop exch
+ % Stack: origfontname fontdict filefontname
+ QUIET
+ { pop
+ }
+ { (Using ) print =only
+ ( font for ) print 1 index =only
+ (.) = flush
+ }
+ ifelse % Stack: origfontname fontdict
+ exch pop true exit
+ % Stack: fontdict
+ }
+ if pop % Stack: origfontname fontdirectory path
+ }
+ if pop pop % Stack: origfontname
+
+ % The font definitely did not load correctly.
+ QUIET not
+ { (Loading ) print dup =only
+ ( font failed.) = flush
+ } if
+ false exit
+
+ } loop % end of loop
+
+ } bind executeonly def % must be bound and hidden for .putgstringcopy
+
+currentdict /.putgstringcopy .undef
+
+% Define a procedure to load all known fonts.
+% This isn't likely to be very useful.
+/loadallfonts
+ { Fontmap { pop findfont pop } forall
+ } bind def
+
+% If requested, load all the fonts defined in the Fontmap into FontDirectory
+% as "fake" fonts i.e., font dicts with only FontName and FontType defined.
+% (We define FontType only for the sake of some questionable code in the
+% Apple Printer Utility 2.0 font inquiry code.)
+%
+% Note that this procedure only creates fake fonts in the FontDirectory
+% associated with the current VM. This is because in multi-context systems,
+% creating the fake fonts in local VM leads to undesirable complications.
+/.definefakefonts
+ {
+ }
+ {
+ (gs_fonts FAKEFONTS) VMDEBUG
+ Fontmap {
+ pop dup type /stringtype eq { cvn } if
+ .FontDirectory 1 index known not {
+ 2 dict dup /FontName 3 index put
+ dup /FontType 1 put
+ .FontDirectory 3 1 roll { put } //superexec % readonly
+ } {
+ pop
+ } ifelse
+ } forall
+ }
+FAKEFONTS { exch } if pop def % don't bind, .current/setglobal get redefined
+
+% Install initial fonts from Fontmap.
+/.loadinitialfonts
+ { NOFONTMAP not
+ { /FONTMAP where
+ { pop [ FONTMAP .pathlist ]
+ { dup VMDEBUG findlibfile
+ { exch pop .loadFontmap }
+ { /undefinedfilename signalerror }
+ ifelse
+ }
+ }
+ { LIBPATH
+ { defaultfontmap
+ false .file_name_combine
+ {
+ dup VMDEBUG
+ (r) { file } .internalstopped {
+ pop pop
+ defaultfontmap_content { .definefontmap } forall
+ } {
+ .loadFontmap
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ }
+ }
+ ifelse forall
+ }
+ if
+ userdict /defaultfontmap_content .undef
+ .definefakefonts % current VM is global
+ } def % don't bind, .current/setglobal get redefined
+
+% ---------------- Synthetic font support ---------------- %
+
+% Create a new font by modifying an existing one. paramdict contains
+% entries with the same keys as the ones found in a Type 1 font;
+% it should also contain enough empty entries to allow adding the
+% corresponding non-overridden entries from the original font dictionary,
+% including FID. If paramdict includes a FontInfo entry, this will
+% also override the original font's FontInfo, entry by entry;
+% again, it must contain enough empty entries.
+
+% Note that this procedure does not perform a definefont.
+
+/.makemodifiedfont % <fontdict> <paramdict> .makemodifiedfont <fontdict'>
+ { exch
+ { % Stack: destdict key value
+ 1 index /FID ne
+ { 2 index 2 index known
+ { % Skip fontdict entry supplied in paramdict, but
+ % handle FontInfo specially.
+ 1 index /FontInfo eq
+ { 2 index 2 index get % new FontInfo
+ 1 index % old FontInfo
+ { % Stack: destdict key value destinfo key value
+ 2 index 2 index known
+ { pop pop }
+ { 2 index 3 1 roll put }
+ ifelse
+ }
+ forall pop
+ }
+ if
+ }
+ { % No override, copy the fontdict entry.
+ 2 index 3 1 roll put
+ dup dup % to match pop pop below
+ }
+ ifelse
+ }
+ if
+ pop pop
+ } forall
+ } bind def
+
+% Make a modified font and define it. Note that unlike definefont,
+% this does not leave the font on the operand stack.
+
+/.definemodifiedfont % <fontdict> <paramdict> .definemodifiedfont -
+ { .makemodifiedfont
+ dup /FontName get exch definefont pop
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/gs_frsd.ps b/Master/tlpkg/tlgs/lib/gs_frsd.ps
new file mode 100644
index 00000000000..fea125258f9
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_frsd.ps
@@ -0,0 +1,87 @@
+% Copyright (C) 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_frsd.ps 7629 2007-01-21 17:53:13Z lpd $
+% Implementation of ReusableStreamDecode filter.
+% This file must be loaded after gs_lev2.ps and gs_res.ps.
+
+level2dict begin
+
+% ------ ReusableStreamDecode filter ------ %
+
+/.reusablestreamdecode { % <source> <dict> .reusablestreamdecode <file>
+ % <source> .reusablestreamdecode <file>
+ % Collect the filter parameters.
+ dup type /dicttype eq { 2 copy } { dup 0 dict } ifelse
+ dup .rsdparams
+ % Construct the filter pipeline.
+ % The very first filter should use the value of CloseSource
+ % from the RSD dictionary; all the others should have
+ % CloseSource = true.
+ % Stack: source dict filters parms
+ 2 index /CloseSource .knownget not { false } if 5 -1 roll
+ % Stack: dict filters parms CloseSource source
+ 0 1 5 index length 1 sub {
+ 4 index 1 index get
+ % Stack: dict filters parms CloseSource source index filtname
+ 4 index null eq {
+ 0 dict
+ } {
+ 4 index 2 index get dup null eq { pop } if
+ } ifelse
+ 3 -1 roll pop exch filter
+ exch pop true exch % set CloseSource for further filters
+ } for
+ % If AsyncRead is true, try to create the filter directly.
+ % Stack: dict filters parms CloseSource source
+ 4 index /AsyncRead .knownget not { false } if {
+ 1 index { .reusablestream } .internalstopped
+ } {
+ null true
+ } ifelse {
+ pop
+ % No luck. Read the entire contents of the stream now.
+ dup type /filetype ne {
+ % Make a stream from a procedure or string data source.
+ 0 () .subfiledecode
+ } if
+ % We must allocate the string in the same VM space as its
+ % source, since the reusable stream must be allocated there.
+ .currentglobal 1 index gcheck .setglobal exch
+ % Stack: dict filters parms CloseSource oldglobal file
+ 10 dict exch {
+ % Stack: dict filters parms CloseSource oldglobal contdict file
+ dup 64000 string readstring
+ 3 index dup length 4 -1 roll put not { exit } if
+ } loop pop
+ % Concatenate the contents into one big string.
+ % Stack: dict filters parms CloseSource oldglobal contdict
+ 0 1 index { length exch pop add } forall
+ dup 65400 gt { .bytestring } { string } ifelse
+ 3 -1 roll .setglobal exch {
+ % Stack: dict filters parms CloseSource string index substring
+ exch 64000 mul exch 2 index 3 1 roll putinterval
+ } forall
+ % Now create the stream on the string.
+ 1 index .reusablestream
+ } if
+ % We created the stream successfully: clean up.
+ 4 { exch pop } repeat
+ 1 index type /dicttype eq { exch pop } if exch pop
+} odef
+
+filterdict /ReusableStreamDecode /.reusablestreamdecode load put
+
+end % level2dict
diff --git a/Master/tlpkg/tlgs/lib/gs_icc.ps b/Master/tlpkg/tlgs/lib/gs_icc.ps
new file mode 100644
index 00000000000..9856b2c9a38
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_icc.ps
@@ -0,0 +1,335 @@
+% Copyright (C) 2001, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_icc.ps 6300 2005-12-28 19:56:24Z giles $
+% ICCBased color space method dictionaries.
+% This assumes gs_ciecs2.ps has already been processed.
+
+%
+% Note that the substitution procedure in this routine will dynamically
+% check for support of ICCBased color space. If such support is not
+% provided, the alternative color space will be used.
+%
+% The validation routine in dictionary (cs_validate) performs a more
+% extensive validation than is done for other color spaces, because
+% .seticcspace does less checking than most other color space setting
+% operators.
+%
+
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+%
+% A dictionary for mapping the number of components of an ICCBased color
+% space to the appropriate alternative color space. This is used only
+% if an alternative color space is not specifically provided.
+%
+/icc_comp_map_dict
+ mark 1 /DeviceGray 3 /DeviceRGB 4 /DeviceCMYK .dicttomark
+def
+
+%
+% <array1> get_icc_alternative_space <name | array2>
+%
+% Get the alternative color space for an ICCBased color space.
+%
+/get_icc_alternative_space
+ {
+ 1 get dup /Alternate .knownget
+ { exch pop }
+ { /N get //icc_comp_map_dict exch get }
+ ifelse
+ }
+bind def
+
+
+colorspacedict
+/ICCBased
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate true
+ /cs_potential_icc_alternate false
+ /cs_get_ncomps { 1 get /N get } bind
+
+ /cs_get_range
+ {
+ 1 get dup /Range .knownget
+ { exch pop }
+ { /N get 2 mul //dflt_range_4 exch 0 exch getinterval }
+ ifelse
+ }
+ bind
+
+ /cs_get_default_color { 1 get /N get { 0 } repeat } bind
+
+ %
+ % For generating a gray, RGB, or CMYK equivalent color, we will
+ % assume that the alternative color space provides reasonable
+ % mapping.
+ /cs_get_currentgray
+ { //get_icc_alternative_space exec //.cs_get_currentgray exec }
+ bind
+ /cs_get_currentrgb
+ { //get_icc_alternative_space exec //.cs_get_currentrgb exec }
+ bind
+ /cs_get_currentcmyk
+ { //get_icc_alternative_space exec //.cs_get_currentcmyk exec }
+ bind
+
+ % a lot of validation is done by the cs_validate method
+ /cs_validate
+ {
+ //check_cie_cspace exec
+ dup 1 get
+ dup /N get
+ dup type /integertype ne
+ //setcspace_typecheck
+ if
+ //icc_comp_map_dict exch known not
+ //setcspace_rangecheck
+ if
+ dup /DataSource get
+ dup type dup /stringtype ne exch /filetype ne and
+ //setcspace_typecheck
+ if
+ rcheck not
+ //setcspace_invalidaccess
+ if
+ dup /Range .knownget
+ {
+ //check_array exec
+ {
+ type dup /integertype ne exch /realtype ne and
+ //setcspace_typecheck
+ if
+ }
+ forall
+ }
+ if
+ /Alternate .knownget
+ {
+ //.cs_validate exec
+ //.cs_potential_icc_alternate exec not
+ //setcspace_rangecheck
+ if
+ }
+ if
+ }
+ bind
+
+ % substitute the Alternate space, if appropriate
+ /cs_substitute
+ {
+ %
+ % A design problem in the Ghostscript graphic library color
+ % space code prevents an ICCBased color space from having an
+ % ICCBased alternative color space. This situation actually
+ % arises fairly frequently in PDF, as an ICCBased color space
+ % is used as the substitute color for a Device{Gray|RGB|CMYK}
+ % color space, which in turn are used as the alternative color
+ % space to another (or possibly even the same) ICCBased color
+ % space.
+ %
+ % This situation causes no fundamental problems, as
+ % Ghostscript nominally supports ICCBased color spaces, so the
+ % Alternate color space is not used. Where this is not true
+ % (primarily because the NOCIE option is selected), the code
+ % would (except for the design flaw noted above) select the
+ % Alternate of the Alternate color space.
+ %
+ % The code below works around this problem by suprressing
+ % color space substitution for alternative color spaces if
+ % the substituting space is an ICCBased color space.
+ %
+ dup //get_icc_alternative_space exec
+ //.cs_substitute exec
+ 2 copy eq
+ 1 index //.cs_potential_icc_alternate exec not
+ or
+ { pop pop dup }
+ {
+ % retain just the new Alternate space
+ exch pop
+
+ % build all new structures in local VM
+ .currentglobal 3 1 roll //false .setglobal
+
+ % copy the original ICCBased color space array
+ 1 index dup length array copy
+
+ % copy the ICCBased dictionary
+ dup 1 2 copy get dup length dict copy
+
+ % insert the new alterante color space
+ dup /Alternate 7 -1 roll put
+
+ % insert the new dictionary into the arra
+ put
+
+ % restore the VM mode
+ 3 -1 roll .setglobal
+ }
+ ifelse
+ }
+ bind
+
+ %
+ % The current implementation of ICCBased color spaces requires the
+ % DataSource to be a file.
+ %
+ /cs_prepare
+ {
+ % make DataSource a file
+ dup 1 get /DataSource get type /stringtype eq
+ {
+ % build all new structures in local VM
+ .currentglobal exch //false .setglobal
+
+ % check if we need to copy the color space and dictionary
+ 2 copy eq
+ {
+ dup length array copy
+ dup 1 2 copy get dup length dict copy put
+ }
+ if
+
+ % fetch DataSource, setting up stack for multiple puts
+ dup 1 2 copy get dup /DataSource 2 copy get
+
+ % convert the string into a file
+ /ReusableStreamDecode filter
+
+ % put the file into the dictioary, the dictionary into the array
+ put put
+
+ % restore the VM mode
+ exch .setglobal
+ }
+ if
+ }
+ bind
+
+ %
+ % Install the current color space.
+ %
+ % The current Ghostscript color space implementation requires that
+ % color spaces that provide a base or alternative color space set
+ % that base/alternative color space to be the current color space
+ % before attempting to set the original color space. This can cause
+ % difficulty if an ICCBased color space is being used as a substitute
+ % color space for a device-specific color space, and uses that same
+ % device-specific color space as an alternative space. For this
+ % reason, a special _setcolorspace_nosub operator is provided.
+ %
+ /cs_install
+ {
+ % set the alternative color space to be the current color space
+ dup //get_icc_alternative_space exec //_setcolorspace_nosub exec
+
+ % check for native support
+ /.seticcspace where
+ { pop //false }
+ { //true }
+ ifelse
+ NOCIE or
+ //pop_1 % do nothing
+ {
+ % Acrobat Reader silently ignores errors with ICC profiles
+ % and uses the alternate color space -- do the same.
+ mark exch 1 get
+ { .seticcspace }
+ .internalstopped
+ cleartomark
+ }
+ ifelse
+ }
+ bind
+
+ % for now, the alternative spaces for an ICCBased color space do
+ % not require special preparation
+ /cs_prepare_color { dup 1 get /N get //check_num_stack exec pop } bind
+ /cs_complete_setcolor //pop_1
+
+ .dicttomark
+put
+
+end % .cspace_util
+
+NOPSICC { (%END PSICC) .skipeof } if
+% Now set up ICC profile loading for PostScript %%BeginICCProfile sections.
+
+systemdict begin
+/.ProcessICCcomment { % file comment -- file comment
+ dup
+ (%%BeginICCProfile) anchorsearch {
+ pop pop
+ DEBUG { (.ProcessICCcomment found %%BeginICCProfile) print flush } if
+
+ % load an ICC profile defined as comments (hex encoded).
+ % Ends with %%End at the start of a line. Read the data into
+ % a bytestring to allow seeking. This string can be used as a
+ % seekable ReusableStreamDecode filter source by the ICC logic.
+ %
+ % Since .bigstring needs to know the size, we first read an array of
+ % strings each 64000 max length.
+ %
+ % stack: --file-- (%%BeginICCProfile: ...)
+ 1 index 0 (%%EndICCProfile) /SubFileDecode filter
+ [ { counttomark 1 add index
+ 64000 string readhexstring
+ not { exit } if
+ } loop
+ ] exch closefile
+ 0 1 index { length add } forall
+ .bigstring
+ exch 0 exch {
+ % stack: --file-- (%%BeginICCProfile: ...) --bytestring-- cur_index --string--
+ 2 copy length add % calculate next string start point
+ 3 1 roll 3 index 3 1 roll putinterval
+ } forall
+ pop % discard length of bytestring
+ % make a seekable -file- out of the bytestring
+ mark /AsyncRead true .dicttomark /ReusableStreamDecode filter
+ % stack: --file-- (%%BeginICCProfile: ...) --icc_subfile--
+ /DeviceCMYK setcolorspace
+ << /DataSource 3 -1 roll
+ /N 4 % Try CMYK first
+ >> { .seticcspace } stopped {
+ /DeviceRGB setcolorspace
+ dup /N 3 put { .seticcspace } stopped {
+ /DeviceGray setcolorspace
+ dup /N 1 put { .seticcspace } stopped { % last choice
+ QUIET not { ( *** Unable to load ICC profile from PostScript DSC comments ***) = flush } if
+ pop
+ } if
+ } if
+ } if
+ } {
+ pop % Not interested in this DSC comment
+ } ifelse
+} bind def
+
+% Merge ProcessICCcomment with existing handler
+/.ProcessICCcomment load /exec load
+currentuserparams /ProcessDSCComment get
+dup null eq {pop {pop pop}} if /exec load
+4 array astore cvx readonly
+<< /ProcessDSCComment 3 -1 roll >> setuserparams
+
+end % systemdict
+%END PSICC
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_il1_e.ps b/Master/tlpkg/tlgs/lib/gs_il1_e.ps
new file mode 100644
index 00000000000..3dc2141826c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_il1_e.ps
@@ -0,0 +1,66 @@
+% Copyright (C) 1993, 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_il1_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the ISO Latin-1 encoding vector.
+% The first half is the same as the standard encoding,
+% except for minus instead of hyphen at code 055.
+/ISOLatin1Encoding
+StandardEncoding 0 45 getinterval aload pop
+ /minus
+StandardEncoding 46 82 getinterval aload pop
+% NOTE: the following are missing in the Adobe documentation,
+% but appear in the displayed table:
+% macron at 0225, dieresis at 0230, cedilla at 0233, space at 0240.
+% This is an error in the Red Book, corrected in Adobe TN 5085.
+% \20x
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+% \24x
+ /space /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /hyphen /registered /macron
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% \30x
+ /Agrave /Aacute /Acircumflex /Atilde
+ /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+% \34x
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+% Make an array on large systems, a packed array on small ones.
+256
+vmstatus exch pop exch pop
+100000 ge { array astore readonly } { packedarray } ifelse
+def
+1 ISOLatin1Encoding .registerencoding
+/ISOLatin1Encoding ISOLatin1Encoding .defineencoding
diff --git a/Master/tlpkg/tlgs/lib/gs_il2_e.ps b/Master/tlpkg/tlgs/lib/gs_il2_e.ps
new file mode 100644
index 00000000000..0b152f23af3
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_il2_e.ps
@@ -0,0 +1,63 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_il2_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the ISO Latin-2 (8859-2) encoding vector.
+
+% The original version of this encoding vector used Unicode names, rather
+% than Adobe names, for many characters. Here are the names that appeared
+% in the original version:
+% \047 /quoteright /apostrophe
+% \056 /period /fullstop
+% \137 /underscore /lowline
+% \140 /quoteleft /grave
+% \055 is /hyphen in StandardEncoding, but /minus in 8859-1; we follow
+% 8859-1 here. In addition, the following substitutions were made:
+% /Lstroke => /Lslash
+% /Dstroke => /Dcroat
+% /*diaeresis => /*dieresis
+% /softhyphen => /hyphen
+% /*abovedot => /*dotaccent
+% /*doubleacute => /*hungarumlaut
+% /division => /divide
+% /ssharp => /germandbls
+
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/ISOLatin2Encoding
+% The first 144 entries are the same as the ISO Latin-1 encoding.
+ISOLatin1Encoding 0 144 getinterval aload pop
+% \22x
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% \24x
+ /nbspace /Aogonek /breve /Lslash /currency /Lcaron /Sacute /section
+ /dieresis /Scaron /Scedilla /Tcaron /Zacute /hyphen /Zcaron /Zdotaccent
+ /degree /aogonek /ogonek /lslash /acute /lcaron /sacute /caron
+ /cedilla /scaron /scedilla /tcaron /zacute /hungarumlaut /zcaron /zdotaccent
+% \30x
+ /Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
+ /Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
+ /Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+ /Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcedilla /germandbls
+% \34x
+ /racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
+ /ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
+ /dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
+ /rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcedilla /dotaccent
+256 packedarray .defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_img.ps b/Master/tlpkg/tlgs/lib/gs_img.ps
new file mode 100644
index 00000000000..5c0c00127b0
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_img.ps
@@ -0,0 +1,842 @@
+% (C) 2002 Artifex, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_img.ps 7647 2007-01-26 16:49:00Z alexcher $
+% image, colorimage, and imagemask implementation
+
+%
+% The design of the overprint facility in Ghostscript requires that color
+% specifications include the color space from which they were expressed,
+% even after conversion to the device color model. Directly including this
+% information in color specifications is usually not efficient, and is
+% difficult to integrate into the existing code structure. The alternative
+% approach taken is to extend a state mechanism through the device
+% interface, and make the current color space, or more specifically,
+% certain information about the current color space, a property of this
+% state.
+%
+% For such a mechanism to work, it is necessary to identify all changes
+% to the current color space. This is accomplished in the graphic library
+% by funneling all changes to the current color space through the
+% gs_setcolorspace procedure. At the PostScript interpreter level, this
+% result is achieved by forcing color space changes through the
+% setcolorspace operator.
+%
+% Aside from explicit use of setcolorspace, PostScript provides a few
+% implicit methods of changing the current color space. The setgray,
+% setrgbcolor, and setcmykcolor operators implicitly set the color space
+% while explicitly setting the current color. Similarly, the colorimage
+% operator and the traditional form of the image operator (5 operands)
+% both temporarily modify the current color space while an image is
+% being processed. The current file is concerned with the implementation
+% of these two operators. In addition, the traditional form of the
+% imagemask operator (5 operands), while it does not affect the current
+% color space, is closely related to the image operator and thus is
+% implemented in this file as well.
+%
+% In this implementation, all sampled objects are passed through one of
+% the internal operators .image1, .imagemask1, .image1alpha, .image2,
+% .image3, or .image4, each of which handles a specific ImageType value.
+%
+% The procedures in this file are responsible for constructing
+% image dictionaries from a set of stack entries. This is, in principle,
+% a trivial exercise. In practice it appears to be far more complex,
+% primarily due to the need to reconstruct the original state in the
+% event of an error. This is a particular problem for operators such as
+% image, which include data source objects that may, directly or
+% indirectly, be procedures. When these procedures are executed, the
+% image operator's operands must have been cleared from the operand
+% stack. Hence, the operand stack cannot be used to store state
+% information. Similarly, the dictionary stack also cannot be used to
+% store state information, as the data source procedures may depend on
+% a particular dictionary being on the top of this stack.
+%
+% Adobe's PostScript implementations determine the extent to which the
+% interpreter state is restored in the event of an error by the point at
+% which the error is detected. Errors in the image/colorimage/imagemask
+% operators that are detected before the data source procedures are
+% executed restore the state in effect before the image was processed.
+% Those that are detected as part of running the data source procedures
+% only attempt to restore the state to that in effect at the start of
+% the operator that failed (or at the conclusion of the data source
+% procedure, if this procedure failed to push a string).
+%
+% The implementation given here follows the Adobe convention. The
+% mechanism used is as follows:
+%
+% 1. Check that the stack has a sufficient number of operands, and
+% that enough of them have the proper type to allow construction
+% of the image dictionary. Any errors at this point are handled
+% in the conventional manner.
+%
+% 2. Build the image dictionary, in the process clearing the image/
+% colorimage/imagemask operands from the stack. No errors can
+% occur during this process.
+%
+% (Special precautions could be taken during this step to handle
+% a limitcheck or VMError during the building of the image
+% dictionary, but this essentially never occurs in practice and, if
+% it did, is very unlikely to leave a useable state. Hence, we don't
+% bother with this possibility.)
+%
+% 3. The .image operator is executed in a stopped context. If it
+% returns abnormally, a check is made to see if the uppermost
+% operand on the stack is a color image dictionary. If so, the
+% original stack is created anew using this dictionary. (Because
+% the image operand works via colorimage, some additional special
+% handling is required in this case.)
+%
+
+
+%
+% Create a dictionary of operators for specific image and image mask types.
+% Each of these will always handle ImageType 1. Additional types are added
+% as they are supported in specific interpreter levels or versions.
+%
+% These dictionaries are in systemdict for historical reasons.
+%
+.currentglobal true .setglobal
+systemdict begin
+/.imagetypes
+ 5 dict
+ dup 1 /.image1 load put
+def
+/.imagemasktypes
+ 5 dict
+ dup 1 /.imagemask1 load put
+def
+end
+.setglobal
+
+%
+% Build a dictionary of utility procedures and constants for use in
+% impelementing the image operators. This dictionary is in global VM but
+% is maintained (during initialization) in userdict. It should be pushed
+% onto the dictionary stack when constructing image-related procedures
+% and pseudo-operators.
+%
+% This dictionary is removed from userdict when initialization is
+% completed.
+%
+.currentglobal true .setglobal
+userdict /img_utils_dict 30 dict put
+img_utils_dict begin
+
+
+%
+% Some useful local data structures:
+%
+% img_csary maps the number of components in an image to the implied
+% color space.
+%
+% img_decary is a prototype Decode array; subintervals of this array
+% may be used for fewer than 4 color components.
+%
+% img_params_ary is a list of the parameters to be built in the image
+% dictionary for a colorimage invocation. ImageType is given a
+% fixed value; the other parameters are in stack order (IMG_NComps
+% is the number of components).
+%
+% img_mask_params_ary is the equivalent of img_params_ary for imagemask
+% invocations. Polarity is a proxy for Decode, and is replaced
+% by the Decode key in the image dictionary.
+%
+% img_mask_check_ary is the set of parameters that must be present in
+% an image dictionary generated by an imagemask invocation. This
+% differs from img_mask_params_ary in that Decode replaces Polarity.
+%
+/img_csary [ null /DeviceGray null /DeviceRGB /DeviceCMYK ] def
+/img_decary [ 0 1 0 1 0 1 0 1 ] def
+
+/img_params_ary
+ [
+ /ImageType /IMG_NComps /MultipleDataSources /DataSource
+ /ImageMatrix /BitsPerComponent /Height /Width /Decode
+ ]
+def
+/img_check_ary //img_params_ary def
+/img_unbuild_ary
+ //img_params_ary 1 1 index length 2 sub getinterval
+def
+
+/img_mask_params_ary
+ [ /ImageType /DataSource /ImageMatrix /Polarity /Height /Width ]
+def
+/img_mask_check_ary
+ [
+ /ImageType /BitsPerComponent
+ /DataSource /ImageMatrix /Decode /Height /Width
+ ]
+def
+/img_mask_unbuild_ary
+ //img_mask_check_ary 2 1 index length 2 sub getinterval
+def
+
+
+%
+% <?any?> <array> img_check_keys <?any?> <bool>
+%
+% Verify that:
+% that there are at least two entries on the stack, and
+% the second (lower) entry is a dictionary, and
+% that dictionary contains all of the keys in the array
+%
+% If any one of these conditions does not hold, pop the array and push
+% false; otherwise pop the array and push true. This utility is used by
+% the colorimage and imagematrix procedures to determine if .image left
+% the image dictionary on the stack after an abnormal return.
+%
+/img_check_keys
+ {
+ count 2 ge
+ {
+ 1 index type /dicttype eq
+ {
+ true exch
+ {
+ 2 index exch known and
+ dup not
+ { exit }
+ if
+ }
+ forall
+ }
+ { pop //false }
+ ifelse
+ }
+ { pop //false }
+ ifelse
+ }
+.bind def
+
+%
+% Procedures to convert a set of stack entries to a dictionary. There is
+% a procedure associated with each key, though most keys use the same
+% procedure. The dictionary to be built is at the top of the dictionary
+% stack. Stack handling for the procedures is:
+%
+% <?val0?> ... <?val(n - 1)?> <key> proc -
+%
+% Parameters are handle in inverse-stack order, so inter-parameter
+% dependencies that on the stack can generally be used here.
+%
+/img_params_dict
+ mark
+ /ImageType { 1 def } .bind
+
+ /IMG_NComps { exch def } .bind % number of components
+ /MultipleDataSources 1 index
+ /Width 1 index
+ /Height 1 index
+ /ImageMatrix 1 index
+ /BitsPerComponent 1 index
+ /DataSource 1 index
+
+ % Polarity is a proxy for Decode; it never appears in a dictionary
+ /Polarity
+ {
+ pop
+ { { 1 0 } }
+ { { 0 1 } }
+ ifelse
+ /Decode exch cvlit def
+ }
+ .bind
+
+ % the definition of Decode is based on the number of components
+ /Decode { //img_decary 0 IMG_NComps 2 mul getinterval def } .bind
+ .dicttomark
+def
+
+%
+% <oper_0> ... <oper_n> <array> img_build_dict <dict>
+%
+% Build a dictionary. This will always be done in local VM. The array is
+% a list of the keys to be associated with operands on the stack, in
+% inverse stack order (topmost element first). The caller should verify
+% that the dictionary can be built successfully (except for a possible
+% VMerror) before calling this routine.
+%
+/img_build_dict
+ {
+ % build the dictionary in local VM; all for 2 extra entries
+ .currentglobal false .setglobal
+ 1 index length 2 add dict
+ exch .setglobal
+ begin
+
+ % process all keys in the array
+ { //img_params_dict 1 index get exec }
+ forall
+
+ % if BitsPerComponent is not yet defined, define it to be 1
+ currentdict /BitsPerComponent known not
+ { /BitsPerComponent 1 def }
+ if
+
+ currentdict end
+ }
+.bind def
+
+%
+% <dict> <array> img_unbuild_dict <oper_0> ... <oper_n>
+%
+% "Unbuild" a dictionary: spread the contents the dictionary back onto the
+% stack, in the inverse of the order indicated in the array (inverse is
+% used as this order is more convenient for img_build_dict, which is
+% expected to be invoked far more frequently).
+%
+/img_unbuild_dict
+ {
+ exch begin
+ dup length 1 sub -1 0
+ { 1 index exch get load exch }
+ for
+ pop
+ end
+ }
+.bind def
+
+%
+% Check the image types that can be used as data sources
+% <any> foo <bool>
+%
+/good_image_types mark
+ /filetype { pop //true } .bind
+ /stringtype 1 index
+ /arraytype //xcheck
+ /packedarraytype //xcheck
+.dicttomark readonly def
+
+%
+% <width> <height> <bits/component> <matrix> <dsrc0> ...
+% <multi> <ncomp> <has_alpha>
+% img_build_image_dict
+% <dict> <has_alpha>
+%
+% Build the dictionary corresponding to a colorimage operand stack. This
+% routine will check just enough of the stack to verify that the
+% dictionary can be built, and will generate the appropriate error if this
+% is not the case.
+%
+% The <has_alpha> boolean is used to support the Next alphaimage extension.
+%
+% At the first level, errors in this procedure are reported as colorimage
+% errors. The error actually reported will usually be determined by the
+% pseudo-operator which invokes this routine.
+%
+/img_build_image_dict
+ {
+ % Veify that at least 8 operands are available, and that the top three
+ % operands have the expected types
+ count 8 lt
+ { /.colorimage cvx /stackunderflow signalerror }
+ if
+ 3 copy
+ type /booleantype ne exch
+ type /integertype ne or exch
+ type /booleantype ne or
+ { /.colorimage cvx /typecheck signalerror }
+ if
+
+ % verify that the number of components is 1, 3, or 4
+ 1 index 1 lt 2 index 2 eq or 2 index 4 gt or
+ { /.colorimage cvx /rangecheck signalerror }
+ if
+
+ % Verify that the required number of operands are present if multiple
+ % data sources are being used. If this test is successful, convert
+ % the data sources to an array (in local VM).
+ 2 index
+ {
+ % if an alpha component is present, this adds one more component
+ 2 copy
+ { 1 add }
+ if
+ dup count 9 sub gt
+ {
+ % Adobe interpreters appear to test the arguments sequentially
+ % starting from the top of the stack and report the 1st error found.
+ % To satisfy CET test 12-02.PS we emulate this logic.
+ //true exch -1 1
+ { 3 add index
+ //good_image_types 1 index type .knownget
+ { exec and
+ }
+ { pop pop //false
+ }
+ ifelse
+ }
+ for
+ { /stackunderflow
+ }
+ { /typecheck
+ }
+ ifelse
+ /.colorimage cvx exch signalerror
+ }
+ if
+
+ % build the DataSource array in local VM
+ dup .currentglobal false .setglobal exch array exch .setglobal
+
+ % stack: <w> <h> <bps> <mtx> <d0> ... <multi> <n> <alpha> <n'> <array>
+ 5 1 roll 4 add 3 roll astore 4 1 roll
+ }
+ if
+
+ % the image dictionary can be built; do so
+ % stack: <w> <h> <bps> <mtx> <dsrc|dsrc_array> <multi> <n> <alpha>
+ 8 1 roll //img_params_ary //img_build_dict exec exch
+ }
+.bind def
+currentdict /good_image_types .undef
+
+%
+% <?dict?>
+% img_unbuild_image_dict
+% <width> <height> <bits/component> <matrix> <dsrc0> ...
+% <multi> <ncomp>
+%
+% If the top entry of the stack is a dictionary that has the keys required
+% by a colorimage dictionary, unpack that dictionary onto the stack.
+% Otherwise just leave things as they are. Note that the <has_alpha>
+% parameter is not pushd onto the stack.
+%
+/img_unbuild_image_dict
+ {
+ //img_check_ary //img_check_keys exec
+ {
+ //img_unbuild_ary //img_unbuild_dict exec
+ 1 index type /booleantype eq
+ {
+ 1 index
+ { 3 -1 roll aload length 2 add -2 roll }
+ if
+ }
+ if
+ }
+ if
+ }
+.bind def
+
+
+%
+% <width> <height> <polarity> <matrix> <dsrc>
+% img_unbuild_imagemask_dict
+% <dict>
+%
+% Build the dictionary corresponding to an imagemask stack. This routine
+% will verify that the appropriate number of operands are on the stack,
+% and that polarity is a boolean. This is all that is necessary to build
+% the dictionary.
+%
+/img_build_imagemask_dict
+ {
+ % check for proper number of operands
+ count 5 lt
+ { /imagemask .systemvar /stackunderflow signalerror }
+ if
+
+ % verify that polarity is a boolean
+ 2 index type /booleantype ne
+ { /imagemask .systemvar /typecheck signalerror }
+ if
+
+ % the imagemask dictionary can be built; do so
+ //img_mask_params_ary //img_build_dict exec
+ }
+.bind def
+
+%
+% <?dict?>
+% img_unbuild_imagemask_dict
+% <width> <height> <polarity> <matrix> <dsrc>
+%
+% If the top entry of the stack is a dictionary that has the keys rquired
+% by an imagemask dictionary, unpack that dictionary onto the stack.
+% Otherwise just leave things as they are.
+%
+/img_unbuild_imagemask_dict
+ {
+ //img_mask_check_ary //img_check_keys exec
+ {
+ //img_mask_unbuild_ary //img_unbuild_dict exec
+ 3 -1 roll
+ dup type dup /arraytype eq exch /packedarraytype eq or
+ 1 index rcheck and
+ { 0 get 1 eq }
+ if
+ 3 1 roll
+ }
+ if
+ }
+.bind def
+
+
+%
+% <width> <height> <bits/component> <matrix> <dsrc_0> ...
+% <multi> <ncomp> <has_alpha>
+% .colorimage
+% -
+%
+% Convert the image/colorimage operator from their traditional form to
+% the dictionary form. The <has_alpha> operand is used ot support the
+% Next alphaimage extension.
+%
+% Error handling for these operators is a bit complex, due to the stack
+% handling required of operators that potentially invoke procedures.
+% This problem is discussed in the comment above. The facts relevant to
+% this particular implementation are:
+%
+% 1. The .image1 (or .alphaimage) operator is executed in a stopped
+% context, so that we can undo the gsave context in the event of
+% an error.
+%
+% 2. In the event of an error, the stack is examined to see if the
+% dictionary passed to .image1 (.alphaimage) is still present.
+% If so, this dictionary is "unpacked" onto the stack to re-
+% create the original stack. The <has_alpha> parameter is not
+% pushed onto the stack, as it is not required for any of the
+% pseudo-operators than invoke this procedure.
+%
+% 3. The use of pseudo-operators in this case may yield incorrect
+% results for late-detected errors, as the stack depth will be
+% restored (even though the stack is not). This is, however, no
+% worse than the prior (level >= 2) code, so it should cause no
+% new problems.
+%
+/.colorimage
+ {
+ % build the image dictionary
+ //img_build_image_dict exec
+
+ % execute .image1 in a stopped context
+ {
+ gsave
+ % The CET test file 12-02.ps creates colorimages with a width and
+ % height of 0. Ignore these since that is what the CET expects.
+ 1 index dup /Height get 0 eq exch /Width get 0 eq or
+ { pop pop } % Ignore colorimage. Pop bool and dict
+ {
+ 0 .setoverprintmode % disable overprint mode for images
+ //img_csary 2 index /IMG_NComps get get setcolorspace
+ { .alphaimage }
+ { .image1 }
+ ifelse
+ }
+ ifelse
+ }
+ stopped
+ grestore
+ {
+ //img_unbuild_image_dict exec
+ /.colorimage cvx $error /errorname get
+ signalerror
+ }
+ if
+ }
+.bind def
+
+
+%
+% <width> <height> <bits/component> <matrix> <dsrc_0> ...
+% <multi> <ncomp>
+% colorimage
+% -
+%
+% Build the colorimage pseudo-operator only if setcolorscreen is visible.
+%
+systemdict /setcolorscreen .knownget
+ {
+ type /operatortype eq
+ {
+ /colorimage
+ {
+ //false
+ //.colorimage
+ stopped
+ { /colorimage .systemvar $error /errorname get signalerror }
+ if
+ }
+ .bind systemdict begin odef end
+ }
+ if
+ }
+if
+
+
+%
+% width height bits_per_component matrix data_src image -
+%
+% <dict> image -
+%
+% Some special handling is required for ImageType 2 (Display PostScript
+% pixmap images) so as to set the appropriate color space as the current
+% color space.
+%
+/image
+ {
+ dup type /dicttype eq .languagelevel 2 ge and
+ {
+ dup /ImageType get dup 2 eq
+ {
+ % verify the ImageType 2 is supported
+ //.imagetypes exch known
+ {
+ %
+ % Set either DevicePixel or DeviceRGB as the current
+ % color space. DevicePixel is used if the image data is
+ % to be copied directly, with only a geometric
+ % transformation (PixelCopy true). The use of DeviceRGB
+ % in the alternate case is not, in general, correct, and
+ % reflects a current implementation limitation. Ideally,
+ % an intermediate color space should be used only if
+ % the source and destination color models vary; otherwise
+ % the native color space corresponding to the color model
+ % should be used.
+ %
+ % The mechanism to determine depth for the DevicePixel
+ % color space when BitsPerPixel is not available is
+ % somewhat of a hack.
+ %
+ gsave
+ 0 .setoverprintmode % disable overprintmode for images
+ dup /PixelCopy .knownget dup
+ { pop }
+ if
+ {
+ [
+ /DevicePixel
+ currentpagedevice dup /BitsPerPixel .knownget
+ { exch pop }
+ {
+ /GrayValues .knownget not
+ { 2 } % try a guess
+ if
+ ln 2 ln div round cvi
+ }
+ ifelse
+ ]
+ }
+ { /DeviceRGB }
+ ifelse
+ setcolorspace
+ //.imagetypes 2 get
+ stopped
+ grestore
+ { /image .systemvar $error /errorname get signalerror }
+ if
+ }
+ { /image .systemvar /rangecheck signalerror
+ }
+ ifelse
+ }
+ {
+ dup //.imagetypes exch .knownget
+ {
+ exch pop gsave
+ 0 .setoverprintmode % disable overprintmode for images
+ stopped
+ grestore
+ { /image .systemvar $error /errorname get signalerror }
+ if
+ }
+ {
+ /image .systemvar exch type /integertype eq
+ { /rangecheck } { /typecheck }
+ ifelse signalerror
+ }
+ ifelse
+ }
+ ifelse
+ }
+ {
+ //false 1 //false
+ //.colorimage
+ stopped
+ { /image .systemvar $error /errorname get signalerror }
+ if
+ }
+ ifelse
+ }
+.bind systemdict begin odef end
+
+
+%
+% width height polarity matrix datasrc imagemask -
+%
+% See the comment preceding the definition of .colorimage for information
+% as to the handling of error conditions.
+%
+/imagemask
+ {
+ dup type /dicttype eq .languagelevel 2 ge and
+ { dup /ImageType get
+ //.imagemasktypes exch .knownget
+ { 1 index /ImageType get 1 eq
+ 2 index /BitsPerComponent get 1 eq and
+ 2 index /Interpolate .knownget not { false } if and
+ //filterdict /ImscaleDecode known and {
+ % Apply interpolated imagemask scaling filter
+ exch dup length dict .copydict
+ dup dup /DataSource get
+ mark /Width 3 index /Width get /Height 5 index /Height get .dicttomark
+ /ImscaleDecode filter /DataSource exch put
+ dup dup /Width get 4 mul /Width exch put
+ dup dup /Height get 4 mul /Height exch put
+ dup dup /ImageMatrix get
+ 4 4 matrix scale matrix concatmatrix /ImageMatrix exch put
+ exch
+ } if
+ exec
+ }
+ { % CET 12-08b.ps wants /typecheck
+ /imagemask .systemvar /typecheck signalerror
+ }
+ ifelse
+ }
+ {
+ //img_build_imagemask_dict exec
+ { .imagemask1 }
+ stopped
+ {
+ //img_unbuild_imagemask_dict exec
+ /imagemask .systemvar $error /errorname get signalerror
+ }
+ if
+ }
+ ifelse
+ }
+.bind systemdict begin odef end
+
+end % img_utils_dict
+
+% Conditionally turn image interpolation on or off.
+% INTERPOLATE is not yet set, handle all cases
+currentdict /INTERPOLATE known
+currentdict /DOTERPOLATE known or
+currentdict /NOTERPOLATE known or not {
+ currentfile 1 (%END INTERPOLATE) .subfiledecode flushfile
+} if
+
+/.interpolate {
+ dup /Interpolate .knownget not { //false } if
+ /INTERPOLATE .systemvar ne {
+ dup gcheck .currentglobal exch .setglobal
+ exch dup length dict copy
+ dup /Interpolate /INTERPOLATE .systemvar put
+ exch .setglobal
+ } if
+} .bind odef
+
+/colorimage
+ { /INTERPOLATE .systemvar
+ { .currentglobal % w h bit [] {}...{} multi ncomp glob
+ //false .setglobal
+ 9 dict begin % w h bit [] {}...{} multi ncomp glob
+ 2 .argindex { 1 index 7 add } { 8 } ifelse
+ dup .argindex pop % check # of arguments
+ copy gsave pop % preserve the arguments
+ { 0 /DeviceGray 0 /DeviceRGB /DeviceCMYK }
+ 1 index get setcolorspace % ... glob w h bit [] {}...{} multi ncomp
+ {0 1 0 1 0 1 0 1}
+ 1 index 2 mul 0 exch % ... glob w h bit [] {}...{} multi ncomp {0 1 ...} 0 2*ncomp
+ getinterval /Decode exch def % ... glob w h bit [] {}...{} multi ncomp
+ exch dup % ... glob w h bit [] {}...{} ncomp multi multi
+ /MultipleDataSources exch def % ... glob w h bit [] {}...{} ncomp multi
+ { array astore} { pop } ifelse % ... glob w h bit [] [{}...{}]
+ /DataSource exch def % ... glob w h bit []
+ /ImageMatrix exch def % ... glob w h bit
+ /BitsPerComponent exch def % ... glob w h
+ /Height exch def % ... glob w
+ /Width exch def % ... glob
+ /ImageType 1 def
+ /Interpolate //true def
+ .setglobal currentdict end % ... <<>>
+ image grestore
+ exch { 4 add } { 6 } ifelse
+ { pop } repeat % -
+ }
+ { colorimage
+ }
+ ifelse
+ } .bind odef
+
+/image
+ { dup type /dicttype eq
+ { dup /ImageType get 3 eq
+ { .currentglobal //false .setglobal exch
+ dup length dict copy begin .setglobal
+ /DataDict DataDict .interpolate def
+ /MaskDict MaskDict .interpolate def
+ currentdict end
+ }
+ { .interpolate
+ }
+ ifelse
+ image
+ }
+ { /INTERPOLATE .systemvar
+ { 4 .argindex pop % check # of args
+ .currentglobal //false .setglobal
+ 8 dict begin .setglobal
+ /ImageType 1 def
+ /DataSource 1 index def
+ /ImageMatrix 2 index def
+ /BitsPerComponent 3 index def
+ /Decode {0 1} def
+ /Height 4 index def
+ /Width 5 index def
+ /Interpolate //true def
+ currentdict end
+ gsave /DeviceGray setcolorspace image grestore
+ 5 { pop } repeat
+ }
+ { image
+ }
+ ifelse
+ }
+ ifelse
+ } .bind odef
+
+/imagemask {
+ dup type /dicttype eq {
+ .interpolate imagemask
+ } {
+ /INTERPOLATE .systemvar {
+ 4 .argindex pop % check # of args
+ .currentglobal //false .setglobal
+ 8 dict begin .setglobal
+ /ImageType 1 def
+ /DataSource 1 index def
+ /ImageMatrix 2 index def
+ /BitsPerComponent 1 def
+ 2 index { {1 0} } { {0 1} } ifelse /Decode exch def
+ /Height 4 index def
+ /Width 5 index def
+ /Interpolate //true def
+ currentdict end imagemask 5 { pop } repeat
+ } {
+ imagemask
+ } ifelse
+ } ifelse
+} .bind odef
+
+currentdict /.interpolate .undef
+
+%END INTERPOLATE
+
+.setglobal % restore VM mode
diff --git a/Master/tlpkg/tlgs/lib/gs_indxd.ps b/Master/tlpkg/tlgs/lib/gs_indxd.ps
new file mode 100644
index 00000000000..f58e552d0a8
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_indxd.ps
@@ -0,0 +1,205 @@
+% Copyright (C) 2001, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_indxd.ps 7162 2006-11-04 17:05:22Z alexcher $
+% Indexed color space method dictionary
+
+
+% verify that Indexed color spaces are supported
+/.setindexedspace where
+ { pop }
+ { currentfile closefile }
+ifelse
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+%
+% <num> <array> restrict_index <int> <array>
+%
+% Restrict the operand to setcolor for an Indexed color space to be an
+% integer in the applicable range.
+%
+/restrict_index
+ {
+ exch round cvi
+ dup 0 lt
+ { pop 0 }
+ {
+ 1 index 2 get 2 copy gt
+ { exch }
+ if
+ pop
+ }
+ ifelse
+ exch
+ }
+bind def
+
+%
+% <num> <array> get_indexed_base_color <c1> ... <cn> <array>
+%
+% Get the base color corresponding to an indexed color value.
+%
+/get_indexed_base_color
+ {
+ % just in case, set the index into the appropriate range
+ //restrict_index exec
+
+ % lookup in the string or use the lookup proc
+ mark 1 index 3 get dup type /stringtype eq
+ {
+ 2 index 1 get //.cs_get_ncomps exec dup 6 -1 roll mul exch getinterval
+ { 255 div }
+ forall
+ }
+ { 4 -1 roll exch exec }
+ ifelse
+ counttomark 2 add -2 roll pop
+ }
+bind def
+
+
+colorspacedict
+/Indexed
+ mark
+ /cs_potential_indexed_base false
+ /cs_potential_pattern_base true
+ /cs_potential_alternate false
+ /cs_potential_icc_alternate false
+ /cs_get_ncomps //ncomps_1
+ /cs_get_range { 0 exch 2 get 2 array astore } bind
+ /cs_get_default_color { pop 0 } bind
+
+ /cs_get_currentgray
+ { //get_indexed_base_color exec 1 get //.cs_get_currentgray exec }
+ bind
+ /cs_get_currentrgb
+ { //get_indexed_base_color exec 1 get //.cs_get_currentrgb exec }
+ bind
+ /cs_get_currentcmyk
+ { //get_indexed_base_color exec 1 get //.cs_get_currentcmyk exec }
+ bind
+
+ % a lot of validation is done by the cs_validate method
+ /cs_validate
+ {
+ //check_array exec
+ dup 1 get //.cs_validate exec //.cs_potential_indexed_base exec not
+ //setcspace_rangecheck
+ if
+ dup 2 get dup type /integertype ne
+ //setcspace_typecheck
+ {
+ dup 0 lt exch 4095 gt or
+ //setcspace_rangecheck
+ if
+ }
+ ifelse
+ dup 3 get dup type /stringtype eq
+ {
+ length
+ 1 index dup 2 get 1 add exch 1 get //.cs_get_ncomps exec mul
+ lt
+ //setcspace_rangecheck
+ if
+ }
+ {
+ //check_array exec xcheck not
+ //setcspace_typecheck
+ if
+ }
+ ifelse
+ }
+ bind
+
+ % substitute the base space if appropriate
+ /cs_substitute
+ {
+ dup 1 get //.cs_substitute exec 2 copy eq
+ { pop pop dup }
+ {
+ % retain only the new base space
+ exch pop
+
+ % build all new structures in local VM
+ .currentglobal 3 1 roll //false .setglobal
+
+ % construct a new array and insert the new base color space
+ 1 index dup length array copy dup 1 4 -1 roll put
+
+ % restore VM mode
+ 3 -1 roll .setglobal
+ }
+ ifelse
+ }
+ bind
+
+ /cs_prepare {}
+
+ %
+ % Install the current color space. Note that the alternative color
+ % space will already have been set as the current color space.
+ %
+ % The current Ghostscript color space implementation requires that
+ % color spaces that provide a base or alternative color space set
+ % that base/alternative color space to be the current color space
+ % before attempting to set the original color space.
+ %
+ /cs_install
+ {
+ % save the current color space
+ currentcolorspace
+
+ % set the base color space as the current color space
+ 1 index 1 get //forcesetcolorspace
+
+ % set the indexed color space; restore the earlier space on error
+ mark 2 index
+ { .setindexedspace }
+ stopped
+ { cleartomark setcolorspace stop }
+ { pop pop pop }
+ ifelse
+ }
+ bind
+
+ % Adobe implementations accept floating point values
+ /cs_prepare_color { //validate_1 exec cvi } bind
+
+ %
+ % Adobe implementations always execute a lookup procedure when setcolor
+ % is invoked. Ghostscript samples the lookup procedure when
+ % setcolorspace is invoked, and then does not access it again. In the
+ % unlikely event that an application depends on the Adobe-specific
+ % behavior, it is replicated in this method.
+ %
+ /cs_complete_setcolor
+ {
+ 3 get dup type /stringtype eq
+ { pop }
+ {
+ currentcolor exch exec
+ currentcolorspace 1 get //clear_setcolor_operands exec
+ }
+ ifelse
+ }
+ bind
+
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_init.ps b/Master/tlpkg/tlgs/lib/gs_init.ps
new file mode 100644
index 00000000000..8e04aaf4d95
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_init.ps
@@ -0,0 +1,2179 @@
+% Copyright (C) 1989-2004 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_init.ps 8054 2007-06-17 00:01:02Z alexcher $
+% Initialization file for the interpreter.
+% When this is run, systemdict is still writable.
+
+% Comment lines of the form
+% %% Replace <n> <file(s)>
+% indicate places where the next <n> lines should be replaced by
+% the contents of <file(s)>, when creating a single merged init file.
+
+% The interpreter can call out to PostScript code. All procedures
+% called in this way, and no other procedures defined in these
+% initialization files, have names that begin with %, e.g.,
+% (%Type1BuildChar) cvn.
+
+% Check the interpreter revision. NOTE: the interpreter code requires
+% that the first non-comment token in this file be an integer.
+860
+dup revision ne
+ { (gs: Interpreter revision \() print revision 10 string cvs print
+ (\) does not match gs_init.ps revision \() print 10 string cvs print
+ (\).\n) print flush //null 1 .quit
+ }
+if pop
+
+% Acquire userdict, and set its length if necessary.
+/userdict where
+ { pop userdict maxlength 0 eq }
+ { true }
+ifelse
+systemdict exch
+ { % userdict wasn't already set up by iinit.c.
+ dup /userdict
+ currentdict dup 200 .setmaxlength % userdict
+ .forceput % userdict is local, systemdict is global
+ }
+if begin
+
+% Define dummy local/global operators if needed.
+systemdict /.setglobal known
+ { true .setglobal
+ }
+ { /.setglobal { pop } bind def
+ /.currentglobal { false } bind def
+ /.gcheck { pop false } bind def
+ }
+ifelse
+
+% Define .languagelevel if needed.
+systemdict /.languagelevel known not { /.languagelevel 1 def } if
+
+% Optionally choose a default paper size other than U.S. letter.
+% The default page size for many devices is set at compile time to
+% letter, but this can be changed to A4 although this is rarely done.
+% Some devices such as bbox have a different default page size,
+% and should not be set to A4 or letter.
+% When ghostscript is used in countries that use the international
+% standard page size A4 rather than US letter, the page size of
+% devices that default to letter or A4 can be changed by setting
+% DEFAULTPAPERSIZE.
+% /DEFAULTPAPERSIZE (a4) def
+
+% Turn on array packing for the rest of initialization.
+true setpacking
+
+% Define the old MS-DOS EOF character as a no-op.
+% This is a hack to get around the absurd habit of MS-DOS editors
+% of adding an EOF character at the end of the file.
+<1a> cvn { } def
+
+% Acquire the debugging flags.
+currentdict /DEBUG known /DEBUG exch def
+
+% if DEBUG is set, set ALL of the subset debugging flags
+mark % '[' isn't defined yet
+ /CCFONTDEBUG % Compiled Fonts
+ /CFFDEBUG % CFF Fonts
+ /CMAPDEBUG % CMAP
+ /DOCIEDEBUG % CIE color
+ /EPSDEBUG % EPS handling
+ /FAPIDEBUG % Font API
+ /INITDEBUG % Initialization
+ /PDFDEBUG % PDF Interpreter
+ /PDFOPTDEBUG % PDF Optimizer (Linearizer)
+ /PDFWRDEBUG % PDF Writer
+ /SETPDDEBUG % setpagedevice
+ /TTFDEBUG % TTF Fonts
+ /VGIFDEBUG % ViewGIF
+ /VJPGDEBUG % ViewJPEG
+ /RESMPDEBUG % Resource map
+counttomark array astore exch pop % ']' isn't defined yet
+{ dup currentdict exch known DEBUG or def } forall
+
+currentdict /PDFSTEP known /PDFSTEP exch def
+% if PDFSTEP is on, turn on PDFDEBUG
+PDFSTEP { /PDFDEBUG true def } if
+
+ /VMDEBUG
+ INITDEBUG {{print mark
+ systemdict /level2dict known
+ { .currentglobal dup false .setglobal vmstatus
+ true .setglobal vmstatus 3 -1 roll pop
+ 6 -2 roll pop .setglobal
+ }
+ { vmstatus 3 -1 roll pop
+ }
+ ifelse usertime 16#fffff and counttomark
+ { ( ) print ( ) cvs print }
+ repeat pop
+ ( ) print systemdict length ( ) cvs print
+ ( ) print countdictstack ( ) cvs print
+ ( <) print count ( ) cvs print (>\n) print flush
+ }}
+ {{pop
+ }}
+ ifelse
+ def
+
+currentdict /BATCH known /BATCH exch def
+currentdict /DELAYBIND known /DELAYBIND exch def
+currentdict /DISKFONTS known /DISKFONTS exch def
+currentdict /DOINTERPOLATE .knownget { /INTERPOLATE exch def } if
+currentdict /ESTACKPRINT known /ESTACKPRINT exch def
+currentdict /FAKEFONTS known /FAKEFONTS exch def
+currentdict /FIXEDMEDIA known /FIXEDMEDIA exch def
+currentdict /FIXEDRESOLUTION known /FIXEDRESOLUTION exch def
+currentdict /LOCALFONTS known /LOCALFONTS exch def
+currentdict /JOBSERVER known /JOBSERVER exch def
+currentdict /NOBIND known /NOBIND exch def
+/.bind /bind load def
+NOBIND { /bind { } def } if
+currentdict /NOCACHE known /NOCACHE exch def
+currentdict /NOCCFONTS known /NOCCFONTS exch def
+currentdict /NOCIE known /NOCIE exch def
+currentdict /NOPSICC known /NOPSICC exch def
+currentdict /NODISPLAY known not /DISPLAYING exch def
+currentdict /NOFONTMAP known /NOFONTMAP exch def
+currentdict /NOFONTPATH known /NOFONTPATH exch def
+currentdict /NOGC known /NOGC exch def
+currentdict /NOINTERPOLATE .knownget { /INTERPOLATE exch not def } if
+currentdict /NOMEDIAATTRS known /NOMEDIAATTRS exch def
+currentdict /NOOUTERSAVE known /NOOUTERSAVE exch def
+currentdict /NOPAGEPROMPT known /NOPAGEPROMPT exch def
+currentdict /NOPAUSE known /NOPAUSE exch def
+currentdict /NOPLATFONTS known /NOPLATFONTS exch def
+currentdict /NOPROMPT known /NOPROMPT exch def
+currentdict /NOTRANSPARENCY known /NOTRANSPARENCY exch def
+currentdict /DOPS known /DOPS exch def
+currentdict /NOSUBSTDEVICECOLORS known /NOSUBSTDEVICECOLORS exch def
+% The default value of ORIENT1 is true, not false.
+currentdict /ORIENT1 known not { /ORIENT1 true def } if
+currentdict /OSTACKPRINT known /OSTACKPRINT exch def
+currentdict /OUTPUTFILE known % obsolete
+ { /OutputFile /OUTPUTFILE load def
+ currentdict /OUTPUTFILE .undef
+ } if
+currentdict /QUIET known /QUIET exch def
+% DELAYSAFER is effectively the same as newer NOSAFER
+currentdict /DELAYSAFER known { /DELAYSAFER true def /NOSAFER true def } if
+/SAFER currentdict /NOSAFER known {
+ false
+} {
+ currentdict /SAFER known
+ currentdict /PARANOIDSAFER known or % PARANOIDSAFER is equivalent
+}
+ifelse def
+currentdict /SHORTERRORS known /SHORTERRORS exch def
+currentdict /STRICT known /STRICT exch def
+currentdict /TTYPAUSE known /TTYPAUSE exch def
+currentdict /WRITESYSTEMDICT known /WRITESYSTEMDICT exch def
+
+% Acquire environment variables.
+currentdict /DEVICE known not
+ { (GS_DEVICE) getenv { /DEVICE exch def } if } if
+
+(START) VMDEBUG
+
+% Open the standard files, so they will be open at the outermost save level.
+(%stdin) (r) file pop
+(%stdout) (w) file pop
+(%stderr) (w) file pop
+
+/.currentuserparams where {
+ pop mark
+ % The Adobe implementations appear to have very large maximum
+ % stack sizes. This turns out to actually make a difference,
+ % since some badly-behaved files include extremely long procedures,
+ % or construct huge arrays on the operand stack.
+ % We reset the stack sizes now so that we don't have to worry
+ % about overflowing the (rather small) built-in stack sizes
+ % during initialization.
+ /MaxDictStack 500
+ /MaxExecStack 5000
+ /MaxOpStack 65414
+ .dicttomark .setuserparams
+} if
+
+% Define a procedure for skipping over an unneeded section of code.
+% This avoids allocating space for the skipped procedures.
+% We can't use readline, because that imposes a line length limit.
+/.skipeof % <string> .skipeof -
+ { currentfile exch 1 exch .subfiledecode flushfile
+ } .bind def
+
+% Define procedures to assist users who don't read the documentation.
+userdict begin
+/help
+ { (Enter PostScript commands. '(filename) run' runs a file, 'quit' exits.\n)
+ print flush
+ } .bind def
+end
+
+% Define =string, which is used by some PostScript programs even though
+% it isn't documented anywhere.
+% Put it in userdict so that each context can have its own copy.
+userdict /=string 256 string put
+
+% Print the greeting.
+
+/printgreeting
+ { mark
+ product (Ghostscript) search
+ { pop pop pop
+ (This software comes with NO WARRANTY: see the file PUBLIC for details.\n)
+ }
+ { pop
+ }
+ ifelse
+ (\n) copyright
+ (\)\n) revisiondate 10 mod revisiondate 10 idiv 10 mod (-)
+ revisiondate 100 idiv 10 mod revisiondate 1000 idiv 10 mod (-)
+ revisiondate 10000 idiv ( \()
+ revision 10 mod
+ revision 100 mod 10 idiv (.)
+ revision 100 idiv ( )
+ product
+ counttomark
+ { (%stdout) (w) file exch 0 .writecvp
+ } repeat pop
+ } .bind def
+
+QUIET not { printgreeting flush } if
+
+% Define a special version of def for making operator procedures.
+/obind { % <name> <proc> obind <name> <oper>
+ 1 index exch .makeoperator
+} .bind def
+/odef { % <name> <proc> odef -
+ 1 index exch .makeoperator def
+} .bind def
+
+% Define a special version of def for storing local objects into global
+% dictionaries. Like .forceput, this exists only during initialization.
+/.forcedef { % <key> <value> .forcedef -
+ 1 .argindex pop % check # of args
+ currentdict 3 1 roll .forceput
+} .bind odef
+
+% Define procedures for accessing variables in systemdict and userdict
+% regardless of the contents of the dictionary stack.
+/.systemvar { % <name> .systemvar <value>
+ //systemdict exch get
+} .bind odef
+/.userdict { % - .userdict <dict>
+ /userdict .systemvar
+} .bind odef
+/.uservar { % <name> .uservar <value>
+ .userdict exch get
+} .bind odef
+
+% If we're delaying binding, remember everything that needs to be bound later.
+DELAYBIND NOBIND not and
+ { .currentglobal false .setglobal
+ systemdict /.delaybind 1500 array .forceput
+ .setglobal
+ userdict /.delaycount 0 put
+ % When we've done the delayed bind, we want to stop saving.
+ % Detect this by the disappearance of .delaybind.
+ /bind
+ { /.delaybind .systemvar dup length 0 ne
+ { .delaycount 2 index put
+ .userdict /.delaycount .delaycount 1 add put
+ }
+ { pop /.bind cvx exec
+ }
+ ifelse
+ } .bind def
+ } if
+
+%**************** BACKWARD COMPATIBILITY ****************
+/hwsizedict mark /HWSize //null .dicttomark readonly def
+/copyscanlines { % <device> <y> <string> copyscanlines <substr>
+ 0 3 1 roll 3 index //hwsizedict .getdeviceparams
+ exch pop exch pop aload pop 3 2 roll
+ 0 exch //null exch .getbitsrect exch pop
+} bind odef
+currentdict /hwsizedict .undef
+/getdeviceprops
+ { //null .getdeviceparams
+ } bind odef
+/.putdeviceprops
+ { //null true counttomark 1 add 3 roll .putdeviceparams
+ dup type /booleantype ne
+ { dup mark eq { /unknown /rangecheck } if
+ counttomark 4 add 1 roll cleartomark pop pop pop
+ /.putdeviceprops .systemvar exch signalerror
+ }
+ if
+ } bind odef
+/.currentfilladjust { .currentfilladjust2 pop } bind odef
+/.setfilladjust { dup .setfilladjust2 } bind odef
+/.writecvs { 0 .writecvp } bind odef
+%**************** DEPRECATED PROCEDURES ****************
+%**************** DO NOT USE THESE IN NEW CODE ****************
+/max { .max } bind def % use .max instead
+/min { .min } bind def % use .min instead
+/unread /.unread load def % use .peekstring instead
+%**************** END OF BACKWARD COMPATIBILITY SECTION ****************
+
+% Utility for removing all entries from a dictionary
+/.PurgeDict % <dict> .PurgeDict -
+{ { true
+ 1 index { pop exch pop false exit
+ } forall
+ { exit
+ } if
+ 1 index exch undef
+ } loop
+ pop
+} bind def
+
+% Define predefined procedures substituting for operators,
+% in alphabetical order.
+
+userdict /#copies 1 put
+% Adobe implementations don't accept /[ or /], so we don't either.
+([) cvn
+ /mark load def
+(]) cvn
+ {counttomark array astore exch pop} odef
+% .beginpage is redefined if setpagedevice is present.
+/.beginpage { } odef
+% In LanguageLevel 3, copypage erases the page.
+/copypage {
+ .languagelevel 3 ge
+ dup { 0 } { 1 } ifelse .endpage .doneshowpage {
+ .currentnumcopies 1 index .outputpage
+ (>>copypage, press <return> to continue<<\n) .confirm
+ dup { erasepage } if
+ } if pop
+ systemdict /..page_default_spaces .knownget { //.PurgeDict exec } if
+ .beginpage
+} odef
+/currentmatrix {
+ dup type /arraytype ne
+ { /currentmatrix load /typecheck signalerror } if
+ dup length 6 ne
+ { /currentmatrix load /rangecheck signalerror } if
+ .currentmatrix 6 .argindex astore pop
+} odef
+% .currentnumcopies is redefined in Level 2.
+/.currentnumcopies { #copies } odef
+/setcolorscreen where { pop % not in all Level 1 configurations
+ /currentcolorscreen
+ { .currenthalftone
+ { { 60.0 exch 0.0 exch 3 copy 6 copy } % halftone - not possible
+ { 3 copy 6 copy } % screen
+ { } % colorscreen
+ }
+ exch get exec
+ } odef
+} if
+/currentscreen
+ { .currenthalftone
+ { { 60.0 exch 0.0 exch } % halftone - not possible
+ { } % screen
+ { 12 3 roll 9 { pop } repeat } % colorscreen
+ }
+ exch get exec
+ } odef
+/.echo /echo load def
+userdict /.echo.mode true put
+/echo {dup /.echo.mode exch store .echo} odef
+/.eexec_param_dict mark
+ /eexec true
+ /seed 55665
+.dicttomark readonly def
+/eexec {
+ % Rebind .currentresourcefile if it is the source for the eexec.
+ dup //.eexec_param_dict //filterdict /eexecDecode get exec
+ cvx exch .currentresourcefile eq
+ //systemdict begin { {exec} .execasresource } { exec } ifelse
+ % Only pop systemdict if it is still the top element,
+ % because this is apparently what Adobe interpreters do.
+ currentdict //systemdict eq { end } if
+} odef
+% .endpage is redefined if setpagedevice is present.
+/.endpage { 2 ne } odef
+% erasepage mustn't use gsave/grestore, because we call it before
+% the graphics state stack has been fully initialized.
+/erasepage
+ { /currentcolor where
+ { pop currentcolor currentcolorspace { setcolorspace setcolor } }
+ { /currentcmykcolor where
+ { pop currentcmykcolor { setcmykcolor } }
+ { currentrgbcolor { setrgbcolor } }
+ ifelse
+ }
+ ifelse
+ currentoverprint false setoverprint 1 setgray .fillpage setoverprint
+ exec
+ } odef
+% To satisfy the Genoa FTS, executive must be a procedure, not an operator.
+/executive
+ { { prompt
+ { (%statementedit) (r) .systemvmfile } stopped
+ { pop pop $error /errorname get /undefinedfilename eq
+ { .clearerror exit } if % EOF
+ /handleerror .systemvar exec //null % ioerror??
+ }
+ if
+ cvx { .runexec } execute
+ } loop
+ } bind def
+/filter
+ { //filterdict 1 .argindex .knownget
+ { exch pop exec }
+ { /filter .systemvar /undefined signalerror }
+ ifelse
+ } odef
+% handleerror procedure as mentioned in the "Operators" section of the PLRM Section 8.2
+% This invokes the handleerror procedure from errordict (unless we are running under a
+% JOBSERVER where we want to always use a defined error handler (many error handlers in
+% 'wild' PostScript files are broken and don't indicate the error in any useful fashion).
+%
+% We run the handleerror procedure using .internalstopped so that broken error handlers
+% won't cause nested errors (Unexpected Error conditions).
+/handleerror
+ JOBSERVER {
+ { /.GShandleerror .systemvar .internalstopped pop } bind % always use .GShandleerror.
+ } {
+ { /errordict .systemvar /handleerror get .internalstopped pop } bind % PLRM standard errorhandling
+ } ifelse def
+/identmatrix [1.0 0.0 0.0 1.0 0.0 0.0] readonly def
+/identmatrix {
+ dup type /arraytype ne { /identmatrix load /typecheck signalerror } if
+ dup length 6 ne { /identmatrix load /rangecheck signalerror } if
+ dup 0 //identmatrix putinterval
+} odef
+/languagelevel 1 def % gs_lev2.ps may change this
+/makeimagedevice { false makewordimagedevice } odef
+/matrix { 6 array identmatrix } odef
+% .promptmsg is redefined if the interpreter includes readline support.
+/.promptmsg {
+ (GS) print
+ count 0 ne { (<) print count =only } if
+ (>) print flush
+} bind def
+/prompt { flush flushpage NOPROMPT not { .promptmsg } if } bind def
+/pstack { 0 1 count 3 sub { index == } for } bind def
+/putdeviceprops
+ { .putdeviceprops { erasepage } if } odef
+/quit { /quit load 0 .quit } odef
+/run { dup type /filetype ne { (r) .systemvmfile } if
+ % We must close the file when execution terminates,
+ % regardless of the state of the stack,
+ % and then propagate an error, if any.
+ cvx null {.runexec} .errorexec
+ } odef
+% Execute a file.
+% Level 2 uses 2 .stop to clear the e-stack for a successful startjob:
+% we detect that here, since we need to handle this even if we start out
+% without job control in effect.
+%
+% What we push on the e-stack is the following to be executed in this order:
+% <lit-file|fileproc> .runexec1 <lit-file|fileproc> .runexec2
+/.runexec1 { % <file|fileproc> .runexec1 -
+ dup type /filetype ne { cvx exec } if
+ cvx //null 2 .stopped
+ % If we got back here from a startjob, just keep going.
+ % startjob replaces the null on the o-stack with a procedure
+ % to be executed when we get back here.
+ dup //null ne { exec true } { pop false } ifelse
+} bind def
+/.runexec2 { % <continue> <file|fileproc> .runexec2 -
+ exch {
+ .runexec
+ } {
+ dup type /filetype ne { cvx exec } if
+ closefile
+ } ifelse
+} bind def
+/.runexec { % <file|fileproc> .runexec -
+ cvlit /.runexec1 cvx 1 index /.runexec2 cvx 4 .execn
+} bind def
+% The following is only for compatibility with Adobe interpreters.
+/setdash {
+ 0 .argindex type dup /integertype eq exch /realtype eq or not {
+ /setdash .systemvar /typecheck signalerror
+ } if
+ 1 .argindex length 11 gt { /setdash .systemvar /limitcheck signalerror } if
+ //setdash
+} odef
+/setdevice
+ {
+ .setdevice
+ {
+ mark
+ { % Reset the halftone since the device may differ
+ currenthalftone
+ dup type /dicttype eq
+ { sethalftone }
+ { pop }
+ ifelse
+ }
+ stopped
+ cleartomark
+ erasepage
+ }
+ if
+ }
+odef
+/setlinecap {
+ dup 2 gt { /setlinecap .systemvar /rangecheck signalerror } if
+ .setlinecap
+} odef
+/setlinejoin {
+ dup 2 gt { /setlinejoin .systemvar /rangecheck signalerror } if
+ .setlinejoin
+} odef
+/setmatrix {
+ dup type /arraytype ne {
+ dup type /packedarraytype ne {
+ /setmatrix load /typecheck signalerror
+ } if
+ } if
+ dup length 6 ne { /setmatrix load /rangecheck signalerror } if
+ dup aload pop .setmatrix pop
+} odef
+/showpage {
+ 0 .endpage .doneshowpage {
+ .currentnumcopies true .outputpage
+ (>>showpage, press <return> to continue<<\n) .confirm
+ initgraphics
+ currentoverprint false setoverprint 1 setcolor
+ .fillpage
+ setoverprint 0 setcolor
+ }
+ { initgraphics } ifelse
+ systemdict /..page_default_spaces .knownget { //.PurgeDict exec } if
+ .beginpage
+} odef
+% Code output by Adobe Illustrator relies on the fact that
+% `stack' is a procedure, not an operator!!!
+/stack { 0 1 count 3 sub { index = } for } bind def
+/start { BATCH { //null 0 .quit } { executive } ifelse } def
+% Internal uses of stopped that aren't going to do a stop if an error occurs
+% should use .internalstopped to avoid setting newerror et al.
+/.internalstopped { //null 1 .stopped //null ne } bind def
+/store { % Don't alter operands before completing.
+ 1 .argindex where { 2 index 2 index put pop pop } { def } ifelse
+} odef
+/.typenames mark .typenames counttomark packedarray exch pop def
+/type {
+ //.typenames .type
+} odef
+currentdict /.typenames .undef
+% When running in Level 1 mode, this interpreter is supposed to be
+% compatible with PostScript "version" 54.0 (I think).
+/version (54.0) readonly def
+/.wheredict 10 dict def
+/.where /where load def
+/where {
+ //.wheredict 1 .argindex .knownget { exec } { .where } ifelse
+} odef
+
+% internaldict is defined in systemdict, but the dictionary is allocated
+% in local VM. However, the procedure must be global, since it is an
+% "operator" and must be bind-able into global procedures.
+% We make a procedure for creating it, since we must create a new one
+% for each context with private local VM.
+/.makeinternaldict {
+ .currentglobal true .setglobal
+ [ /dup .systemvar 1183615869 /eq .systemvar
+ [ /pop .systemvar //null ] cvx
+ false .setglobal
+ dup 1 10 dict .forceput % proc is global, dict is local
+ true .setglobal
+ [ /internaldict /cvx .systemvar /invalidaccess /signalerror cvx ] cvx
+ /ifelse .systemvar
+ ] cvx executeonly
+ exch .setglobal
+} odef
+systemdict /internaldict dup .makeinternaldict .makeoperator
+.forceput % proc is local, systemdict is global
+
+% Define some additional built-in procedures (beyond the ones defined by
+% the PostScript Language Reference Manual).
+% Warning: these are not guaranteed to stay the same from one release
+% to the next!
+/concatstrings % (str1) (str2) concatstrings (str1str2)
+ { exch dup length 2 index length add string % str2 str1 new
+ dup dup 4 2 roll copy % str2 new new new1
+ length 4 -1 roll putinterval
+ } bind def
+/copyarray
+ { dup length array copy } bind def
+% Copy a dictionary per the Level 2 spec even in Level 1.
+/.copydict % <fromdict> <todict> .copydict <todict>
+ { dup 3 -1 roll { put dup } forall pop } bind def
+/copystring
+ { dup length string copy } bind def
+/findlibfile {
+ .systemvmlibfile { dup .filename pop exch true } { false } ifelse
+} odef
+/.growdictlength % get size for growing a dictionary
+ { length 3 mul 2 idiv 1 add
+ } bind def
+/.growdict % grow a dictionary
+ { dup .growdictlength .setmaxlength
+ } bind def
+/.growput % put, grow the dictionary if needed
+ { 2 index length 3 index maxlength eq
+ { 3 copy pop known not { 2 index .growdict } if
+ } if
+ put
+ } bind def
+% .localvmarray may be an operator: see zsysvm.c.
+/.localvmarray where {
+ pop
+} {
+ /.localvmarray {
+ .currentglobal false .setglobal
+ exch array exch .setglobal
+ } bind def
+} ifelse
+/.localvmdict where {
+ pop
+} {
+ /.localvmdict {
+ .currentglobal false .setglobal
+ exch dict exch .setglobal
+ } bind def
+} ifelse
+/.packtomark
+ { counttomark packedarray exch pop } bind def
+/ppstack
+ { 0 1 count 3 sub { index === } for } bind def
+/runlibfile
+ { % We don't want to bind 'run' into this procedure,
+ % since run may get redefined.
+ findlibfile
+ { exch pop /run .systemvar exec }
+ { /undefinedfilename signalerror }
+ ifelse
+ } bind def
+/selectdevice
+ { finddevice setdevice .setdefaultscreen } bind def
+/signalerror % <object> <errorname> signalerror -
+ { /errordict .systemvar exch get exec } bind def
+/signaloperror { % <object> <errorname> signaloperror -
+ % Same as signalerror, except that if we are inside a pseudo-operator
+ % or .errorexec, we use its error object, just as errors generated by
+ % real operators do.
+ /errordict .systemvar exch get
+ .finderrorobject { 3 -1 roll pop exch } if
+ exec
+} bind def
+
+% Define the =[only] procedures. Also define =print,
+% which is used by some PostScript programs even though
+% it isn't documented anywhere.
+/write=only {
+ .writecvs
+} bind def
+/write= {
+ 1 index exch write=only (\n) writestring
+} bind def
+/=only { (%stdout) (w) file exch write=only } bind def
+/= { =only (\n) print } bind def
+/=print /=only load def
+% Temporarily define == as = for the sake of runlibfile0.
+/== /= load def
+
+% The following procedures are documented.
+/copydevice { % <device> copydevice <newdevice>
+ false .copydevice2
+} odef
+/finddevice { % <devicename> finddevice <device>
+ /devicedict .systemvar exch get
+ dup 1 get //null eq {
+ % This is the first request for this type of device.
+ % Create a default instance now.
+ % Stack: [proto null]
+ .currentglobal true .setglobal exch
+ dup dup 0 get copydevice 1 exch put
+ exch .setglobal
+ } if 1 get
+} bind def
+/findprotodevice { % <devicename> findprotodevice <protodevice>
+ /devicedict .systemvar exch get 0 get
+} bind def
+
+% Run a resource file. This allows us to distinguish resource objects
+% from objects coming from input files.
+userdict /.currentresourcefile //null put
+/.execasresource { % <file> <proc|runfile> .execasresource -
+ /stopped .systemvar
+ /.currentresourcefile .uservar
+ % Stack: file proc -stopped- currfile
+ .userdict /.currentresourcefile 5 index cvlit put
+ 2 .execn % stopped <file>
+ .userdict /.currentresourcefile 3 -1 roll put
+ { stop } if
+} bind def
+/.runresource { % <file> .runresource -
+ { /run .systemvar exec } .execasresource
+} bind def
+
+% Define procedures for getting and setting the current device resolution.
+
+/gsgetdeviceprop % <device> <propname> gsgetdeviceprop <value>
+ { 2 copy mark exch //null .dicttomark .getdeviceparams
+ dup mark eq % if true, not found
+ { pop dup /undefined signalerror }
+ { 5 1 roll pop pop pop pop }
+ ifelse
+ } bind def
+/gscurrentresolution % - gscurrentresolution <[xres yres]>
+ { currentdevice /HWResolution gsgetdeviceprop
+ } bind def
+/gssetresolution % <[xres yres]> gssetresolution -
+ { 2 array astore mark exch /HWResolution exch
+ currentdevice copydevice putdeviceprops setdevice
+ } bind def
+
+% Define auxiliary procedures needed for the above.
+/shellarguments % -> shell_arguments true (or) false
+ { /ARGUMENTS where
+ { /ARGUMENTS get dup type /arraytype eq
+ { aload pop /ARGUMENTS //null store true }
+ { pop false }
+ ifelse }
+ { false } ifelse
+ } bind def
+/.confirm {
+ DISPLAYING NOPAUSE not TTYPAUSE or and {
+ % Print a message (unless NOPAGEPROMPT or NOPROMPT is true)
+ % and wait for the user to type something.
+ % If the user just types a newline, flush it.
+ NOPAGEPROMPT NOPROMPT or { pop } { print flush } ifelse
+ .confirmread
+ } {
+ pop
+ } ifelse
+} bind def
+/.confirmread {
+ TTYPAUSE {
+ (/dev/tty) (r) file dup read pop pop closefile
+ } {
+ .echo.mode false echo
+ (%stdin) (r) file dup read {
+ dup (\n) 0 get eq { pop pop } { unread } ifelse
+ } {
+ pop
+ } ifelse echo
+ } ifelse
+} bind def
+
+% Define the procedure used by .runfile, .runstdin and .runstring
+% for executing user input.
+% This is called with a procedure or executable file on the operand stack.
+/.execute { % <obj> .execute <stopped>
+ stopped $error /newerror get and
+ { /handleerror .systemvar exec flush true } { false } ifelse
+} bind def
+/execute { % <obj> execute -
+ .execute pop
+} odef
+% Define an execute analogue of runlibfile0.
+/execute0 { % <obj> execute0 -
+ .execute { /execute0 cvx 1 .quit } if
+} bind def
+% Define the procedure that the C code uses for running files
+% named on the command line.
+/.runfile {
+ { runlibfile } execute0
+} def
+% Define the procedure that the C code uses for running piped input.
+% We don't use the obvious { (%stdin) run }, because we want the file to be
+% reopened if a startjob does a restore.
+/.runstdin {
+ { { (%stdin) (r) file cvx } .runexec } execute0
+} bind def
+% Define the procedure that the C code uses for running commands
+% given on the command line with -c. We turn the string into a file so that
+% .runexec can do the right thing with a startjob.
+/.runstring {
+ 0 0 .systemvmstring .systemvmSFD cvx { .runexec } execute0
+} bind def
+% Define the procedure that the C code uses to set up for executing
+% a string that may be received in pieces.
+/.runstringbegin {
+ 1 .systemvmarray dup 0 /.needinput load put cvx % { .needinput } in systemvm
+ 0 0 .systemvmstring .systemvmSFD cvx .runexec
+} bind def
+
+% Define a special version of runlibfile that aborts on errors.
+/runlibfile0
+ { cvlit dup dup /.currentfilename exch def
+ { findlibfile not { stop } if }
+ stopped
+ { (Can't find \(or open\) initialization file ) print
+ .currentfilename == flush /runlibfile0 cvx 1 .quit
+ } if
+ exch pop cvx
+ { stopped } 0 get 3 -1 roll 2 array astore cvx exec
+ /.currentfilename exch store
+ { (While reading ) print .currentfilename print (:\n) print flush
+ /handleerror .systemvar exec /runlibfile0 1 .quit
+ } if
+ } bind def
+% Temporarily substitute it for the real runlibfile.
+/.runlibfile /runlibfile load def
+/runlibfile /runlibfile0 load def
+
+% Create the error handling machinery.
+% Define the standard error handlers.
+% The interpreter has created the ErrorNames array.
+/.unstoppederrorhandler % <command> <errorname> .unstoppederrorhandler -
+ { % This is the handler that gets used for recursive errors,
+ % or errors outside the scope of a 'stopped'.
+ 2 copy SHORTERRORS
+ { (%%[ Error: ) print =only flush
+ (; OffendingCommand: ) print =only ( ]%%) =
+ }
+ { (Unrecoverable error: ) print =only flush
+ ( in ) print = flush
+ count 2 gt
+ { (Operand stack:\n ) print
+ count 1 sub -1 2 { ( ) print index =only flush } for
+ () = flush
+ } if
+ }
+ ifelse
+ -1 0 1 //ErrorNames length 1 sub
+ { dup //ErrorNames exch get 3 index eq
+ { not exch pop exit } { pop } ifelse
+ }
+ for exch pop .quit
+ } bind def
+/.errorhandler % <command> <errorname> .errorhandler -
+ { % Detect an internal 'stopped'.
+ 1 .instopped { //null eq { pop pop stop } if } if
+ (I) false .setdebug
+ $error /.inerror get 1 .instopped { pop } { pop true } ifelse
+ { .unstoppederrorhandler
+ } if % detect error recursion
+ $error /globalmode .currentglobal false .setglobal put
+ $error /.inerror true put
+ $error /newerror true put
+ $error exch /errorname exch put
+ $error exch /command exch put
+ $error /errorinfo known not { $error /errorinfo //null put } if
+ $error /recordstacks get $error /errorname get /VMerror ne and
+ { % Attempt to store the stack contents atomically.
+ count array astore dup $error /ostack 4 -1 roll
+ % Grab the execstack, then remove to two elements that are from
+ % this error handler (not interesting).
+ countexecstack array execstack dup length 2 sub 0 exch getinterval
+ $error /estack 3 -1 roll
+ countdictstack array dictstack $error /dstack 3 -1 roll
+ put put put aload pop
+ }
+ { $error /dstack .undef
+ $error /estack .undef
+ $error /ostack .undef
+ }
+ ifelse
+ $error /position currentfile status
+ { currentfile { fileposition } .internalstopped { pop //null } if
+ }
+ { % If this was a scanner error, the file is no longer current,
+ % but the command holds the file, which may still be open.
+ $error /command get dup type /filetype eq
+ { { fileposition } .internalstopped { pop //null } if }
+ { pop //null }
+ ifelse
+ }
+ ifelse put
+ % During initialization, we don't reset the allocation
+ % mode on errors.
+ $error /globalmode get $error /.nosetlocal get and .setglobal
+ $error /.inerror false put
+ stop
+ } bind def
+% Define the standard handleerror. We break out the printing procedure
+% (.printerror) so that it can be extended for binary output
+% if the Level 2 facilities are present.
+ /.printerror
+ { $error begin newerror
+ {
+ /command load errorname SHORTERRORS
+ { (%%[ Error: ) print =only flush
+ (; OffendingCommand: ) print =only
+ errorinfo dup //null eq {
+ pop
+ } {
+ (;\nErrorInfo:) print
+ dup type /arraytype eq
+ { { ( ) print =only } forall }
+ { ( ) print =only }
+ ifelse
+ } ifelse
+ ( ]%%) = flush
+ }
+ { (Error: ) print ==only flush
+ ( in ) print ==only flush
+ errorinfo dup //null eq {
+ pop
+ } {
+ (\nAdditional information: ) print ==only flush
+ } ifelse
+ .printerror_long
+ }
+ ifelse
+ .clearerror flush
+ }
+ { % newerror is false, test to see if user has set handleerror to a different
+ % routine, if so execute it, otherwise, just return. This code deals with the
+ % Genoa issue of setting /handleerror, and then calling it, without an error
+ % being set. We were erroring in this case, due to /command load failing.
+
+ //JOBSERVER {
+ /errordict .systemvar /handleerror get /.GShandleerror .systemvar ne
+ } {
+ false
+ } ifelse
+ { /errordict .systemvar begin /handleerror load .internalstopped pop end
+ }
+ if
+ }
+ ifelse % newerror
+ end
+ flush
+ } bind def
+ /.printerror_long % long error printout,
+ % $error is on the dict stack
+ { % Push the (anonymous) stack printing procedure.
+ % <heading> <==flag> <override-name> <stackname> proc
+ {
+ currentdict exch .knownget % stackname defined in $error?
+ {
+ 4 1 roll % stack: <stack> <head> <==flag> <over>
+ /errordict .systemvar exch .knownget % overridename defined?
+ {
+ exch pop exch pop exec % call override with <stack>
+ }
+ {
+ exch print exch % print heading. stack <==flag> <stack>
+ 1 index not { () = } if
+ { 1 index { (\n ) } { ( ) } ifelse print
+ dup type /dicttype eq
+ {
+ (--dict:) print
+ dup rcheck {
+ dup length =only (/) print dup maxlength =only
+ dup wcheck not { ((ro)) print } if
+ } if
+ /gcheck where {
+ pop gcheck { ((G)) } { ((L)) } ifelse print
+ } {
+ pop
+ } ifelse (--) print
+ }
+ {
+ dup type /stringtype eq 2 index or
+ { ==only } { =only } ifelse
+ } ifelse
+ } forall
+ pop
+ }
+ ifelse % overridden
+ }
+ { pop pop pop
+ }
+ ifelse % stack known
+ }
+
+ (\nOperand stack:) OSTACKPRINT /.printostack /ostack 4 index exec
+ (\nExecution stack:) ESTACKPRINT /.printestack /estack 4 index exec
+ (\nBacktrace:) true /.printbacktrace /backtrace 4 index exec
+ (\nDictionary stack:) false /.printdstack /dstack 4 index exec
+ () =
+ pop % printing procedure
+
+ errorname /VMerror eq
+ { (VM status:) print mark vmstatus
+ counttomark { ( ) print counttomark -1 roll dup =only } repeat
+ cleartomark () =
+ } if
+
+ .languagelevel 2 ge
+ { (Current allocation mode is ) print
+ globalmode { (global\n) } { (local\n) } ifelse print
+ } if
+
+ .oserrno dup 0 ne
+ { (Last OS error: ) print
+ errorname /VMerror ne
+ { dup .oserrorstring { = pop } { = } ifelse }
+ { = }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+
+ position //null ne
+ { (Current file position is ) print position = }
+ if
+
+ } bind def
+% Define a procedure for clearing the error indication.
+/.clearerror
+ { $error /newerror false put
+ $error /errorname //null put
+ $error /errorinfo //null put
+ 0 .setoserrno
+ } bind def
+
+% Define $error. This must be in local VM.
+.currentglobal false .setglobal
+/$error 40 dict .forcedef % $error is local, systemdict is global
+ % newerror, errorname, command, errorinfo,
+ % ostack, estack, dstack, recordstacks,
+ % binary, globalmode,
+ % .inerror, .nosetlocal, position,
+ % plus extra space for badly designed error handers.
+$error begin
+ /newerror false def
+ /recordstacks true def
+ /binary false def
+ /globalmode .currentglobal def
+ /.inerror false def
+ /.nosetlocal true def
+ /position //null def
+ /errorinfo //null def
+end
+% Define errordict similarly. It has one entry per error name,
+% plus handleerror. However, some astonishingly badly written PostScript
+% files require it to have at least one empty slot.
+/errordict ErrorNames length 3 add dict
+.forcedef % errordict is local, systemdict is global
+.setglobal % back to global VM
+% For greater Adobe compatibility, we put all non-standard errors in a
+% separate dictionary, gserrordict. It does not need to be in local VM,
+% because PostScript programs do not access it.
+% NOTE: the name gserrordict is known to the interpreter.
+/gserrordict 5 dict def
+% Register an error in errordict. We make this a procedure because we only
+% register the Level 1 errors here: the rest are registered by "feature"
+% files. However, ErrorNames contains all of the error names regardless of
+% what features are included, so we have to "know" that VMerror is the last
+% Level 1 error.
+/.registererror % <name> .registererror -
+ { errordict exch .registererror2
+ } bind def
+/.registererror2 % <dict> <name> .registererror -
+ { .currentglobal true .setglobal % create procs in global VM
+ 3 1 roll
+ mark 1 index systemdict /.errorhandler get /exec load .packtomark cvx put
+ .setglobal
+ } bind def
+ErrorNames
+ { dup .registererror /VMerror eq {exit} if
+ } forall
+errordict begin
+% The handlers for interrupt and timeout are special; there is no
+% 'current object', so they push their own name.
+ { /interrupt /timeout }
+ { mark 1 index dup systemdict /.errorhandler get /exec load .packtomark cvx def
+ } forall
+/handleerror % this key is 'well known' and some PS may redefine it
+ { /.printerror .systemvar exec
+ } bind def
+end % errordict
+
+% Put non-standard errors in gserrordict.
+gserrordict /unknownerror errordict /unknownerror get put
+errordict /unknownerror .undef
+% Define a stable private copy of handleerror that we will always use under
+% JOBSERVER mode.
+/.GShandleerror errordict /handleerror get def
+
+% Define the [write]==[only] procedures.
+/.dict 8 dict dup
+begin def
+ /.cvp {1 index exch 1 .writecvp} bind def
+ /.p {1 index exch writestring} bind def
+ /.p1 {2 index exch writestring} bind def
+ /.p2 {3 index exch writestring} bind def
+ /.print
+ { dup type .dict exch .knownget { exec } { .cvp } ifelse
+ } bind def
+ /arraytype
+ {dup rcheck
+ {() exch dup xcheck
+ {({) .p2
+ {exch .p1
+ 1 index exch .print pop ( )} forall
+ (})}
+ {([) .p2
+ {exch .p1
+ 1 index exch .print pop ( )} forall
+ (])}
+ ifelse exch pop .p}
+ {.cvp}
+ ifelse} bind def
+ /packedarraytype /arraytype load def
+{//.dict begin .print pop end}
+ bind
+end
+
+/write==only exch def
+/write== {1 index exch write==only (\n) writestring} bind def
+/==only { (%stdout) (w) file exch write==only } bind def
+/== {==only (\n) print} bind def
+
+% Define [write]===[only], an extension that prints dictionaries
+% in readable form and doesn't truncate strings.
+/.dict /write==only load 0 get dup length 2 add dict .copydict dup
+begin def
+ /dicttype
+ { dup rcheck
+ { (<< ) .p1
+ { 2 index 3 -1 roll .print pop ( ) .p1
+ 1 index exch .print pop ( ) .p
+ }
+ forall (>>) .p
+ }
+ { .cvp
+ }
+ ifelse
+ } bind def
+ /stringtype
+ { 1 index exch 2 .writecvp
+ } bind def
+
+{//.dict begin .print pop end}
+ bind
+end
+
+/write===only exch def
+/write=== {1 index exch write===only (\n) writestring} bind def
+/===only { (%stdout) (w) file exch write===only } bind def
+/=== { ===only (\n) print } bind def
+
+% Create the initialization queue.
+
+/.delayed_init_queue 10 dict def
+
+/.schedule_init % <priority> <proc> .schedule_init -
+{
+ //.delayed_init_queue 2 index known {
+ (.delayed_init_queue priority conflict with ) print 1 index =
+ /.schedule_init cvx /configurationerror signalerror
+ } if
+ //.delayed_init_queue 3 1 roll .growput
+} bind def
+
+/.execute_scheduled_inits % - .execute_scheduled_inits -
+{
+ { 0 //null //.delayed_init_queue { % maxp {} p {}
+ 3 index 2 index lt {
+ 4 2 roll
+ } if
+ pop pop
+ } forall
+ exch //.delayed_init_queue exch undef
+ dup //null eq {
+ pop exit
+ } if
+ exec
+ } loop
+} bind def
+
+(END PROCS) VMDEBUG
+
+% Define the font directory.
+/FontDirectory false .setglobal 100 dict true .setglobal
+.forcedef % FontDirectory is local, systemdict is global
+
+% Define the encoding dictionary.
+/EncodingDirectory 16 dict def % enough for Level 2 + PDF standard encodings
+
+% Define .findencoding. (This is redefined in Level 2.)
+/.findencoding
+ { //EncodingDirectory exch get exec
+ } bind def
+/.defineencoding
+ { //EncodingDirectory 3 1 roll put
+ } bind def
+% If we've got the composite font extensions, define findencoding.
+% To satisfy the Genoa FTS, findencoding must be a procedure, not an operator.
+/rootfont where { pop /findencoding { .findencoding } def } if
+
+% Define .registerencoding.
+% NOTE: This procedure no longer does anything, but it must continue to
+% exist for the sake of toolbin/encs2c.ps.
+/.registerencoding { % <index> <array> .registerencoding -
+ pop pop
+} bind odef
+
+% Load StandardEncoding.
+%% Replace 1 (gs_std_e.ps)
+(gs_std_e.ps) dup runlibfile VMDEBUG
+
+% Load ISOLatin1Encoding.
+%% Replace 1 (gs_il1_e.ps)
+(gs_il1_e.ps) dup runlibfile VMDEBUG
+
+% Define stubs for the Symbol and Dingbats encodings.
+% Note that the first element of the procedure must be the file name,
+% since gs_lev2.ps extracts it to set up the Encoding resource category.
+
+ /SymbolEncoding { /SymbolEncoding .findencoding } bind def
+%% Replace 3 (gs_sym_e.ps)
+ EncodingDirectory /SymbolEncoding
+ { (gs_sym_e.ps) //systemdict begin runlibfile SymbolEncoding end }
+ bind put
+
+ /DingbatsEncoding { /DingbatsEncoding .findencoding } bind def
+%% Replace 3 (gs_dbt_e.ps)
+ EncodingDirectory /DingbatsEncoding
+ { (gs_dbt_e.ps) //systemdict begin runlibfile DingbatsEncoding end }
+ bind put
+
+(END FONTDIR/ENCS) VMDEBUG
+
+% Construct a dictionary of all available devices.
+% These are (read-only) device prototypes that can't be
+% installed or have their parameters changed. For this reason,
+% the value in the dictionary is actually a 2-element writable array,
+% to allow us to create a default instance of the prototype on demand.
+
+ % Loop until the .getdevice gets a rangecheck.
+errordict /rangecheck 2 copy get
+errordict /rangecheck { pop stop } put % pop the command
+ 0 { {dup .getdevice exch 1 add} loop} .internalstopped pop
+ 1 add dict /devicedict 1 index def
+ begin % 2nd copy of count is on stack
+ { dup .devicename exch
+ dup wcheck { dup } { //null } ifelse 2 array astore def
+ } repeat
+ end
+put % errordict /rangecheck
+.clearerror
+/devicenames devicedict { pop } forall devicedict length packedarray def
+
+% Determine the default device.
+/defaultdevice DISPLAYING
+ { systemdict /DEVICE .knownget
+ { devicedict 1 index known not
+ { (Unknown device: ) print =
+ flush /defaultdevice cvx 1 .quit
+ }
+ if
+ }
+ { 0 .getdevice .devicename
+ }
+ ifelse
+ }
+ { /nullpage
+ }
+ifelse
+/.defaultdevicename 1 index def
+finddevice % make a copy
+def
+devicedict /Default devicedict .defaultdevicename get put
+
+(END DEVS) VMDEBUG
+
+% Define statusdict, for the benefit of programs
+% that think they are running on a LaserWriter or similar printer.
+%% Replace 1 (gs_statd.ps)
+(gs_statd.ps) runlibfile
+
+(END STATD) VMDEBUG
+
+% Load the standard font environment.
+%% Replace 1 (gs_fonts.ps)
+(gs_fonts.ps) runlibfile
+
+(END GS_FONTS) VMDEBUG
+
+% Define the default halftone screen and BG/UCR functions now, so that
+% it will bind in the original definitions of set[color]screen.
+% We make this a procedure so we can call it again when switching devices.
+
+% Use an ordered dither for low-resolution devices.
+/.setloreshalftone { % <dpi> .setloreshalftone -
+ % The following 'ordered dither' spot function was contributed by
+ % Gregg Townsend. Thanks, Gregg!
+ 16.001 div 0 % not 16: avoids rounding problems
+ { 1 add 7.9999 mul cvi exch 1 add 7.9999 mul cvi 16 mul add <
+ 0E 8E 2E AE 06 86 26 A6 0C 8C 2C AC 04 84 24 A4
+ CE 4E EE 6E C6 46 E6 66 CC 4C EC 6C C4 44 E4 64
+ 3E BE 1E 9E 36 B6 16 96 3C BC 1C 9C 34 B4 14 94
+ FE 7E DE 5E F6 76 D6 56 FC 7C DC 5C F4 74 D4 54
+ 01 81 21 A1 09 89 29 A9 03 83 23 A3 0B 8B 2B AB
+ C1 41 E1 61 C9 49 E9 69 C3 43 E3 63 CB 4B EB 6B
+ 31 B1 11 91 39 B9 19 99 33 B3 13 93 3B BB 1B 9B
+ F1 71 D1 51 F9 79 D9 59 F3 73 D3 53 FB 7B DB 5B
+ 0D 8D 2D AD 05 85 25 A5 0F 8F 2F AF 07 87 27 A7
+ CD 4D ED 6D C5 45 E5 65 CF 4F EF 6F C7 47 E7 67
+ 3D BD 1D 9D 35 B5 15 95 3F BF 1F 9F 37 B7 17 97
+ FD 7D DD 5D F5 75 D5 55 FF 7F DF 5F F7 77 D7 57
+ 02 82 22 A2 0A 8A 2A AA 00 80 20 A0 08 88 28 A8
+ C2 42 E2 62 CA 4A EA 6A C0 40 E0 60 C8 48 E8 68
+ 32 B2 12 92 3A BA 1A 9A 30 B0 10 90 38 B8 18 98
+ F2 72 D2 52 FA 7A DA 5A F0 70 D0 50 F8 78 D8 58
+ > exch get 256 div
+ }
+ bind
+ % Use correct, per-plane screens for CMYK devices only.
+ //systemdict /setcolorscreen known processcolors 4 eq and
+ { 3 copy 6 copy //setcolorscreen }
+ { //setscreen }
+ ifelse
+} bind def
+/.setloresscreen { % <dpi> .setloresscreen -
+ .setloreshalftone
+ 0 array cvx settransfer % Genoa CET won't accept a packed array!
+ /setstrokeadjust where { pop true setstrokeadjust } if
+} bind def
+% Use a 45-degree spot screen for high-resolution devices.
+% The PS3 CET insists that the screen be an array and not a packedarray (!).
+currentpacking false setpacking
+/.linescreen
+% The following screen algorithm is used by permission of the author.
+ { ((C) 1989 Berthold K.P. Horn) pop
+ 1 add 180 mul cos 1 0.08 add mul exch 2 add 180 mul cos
+ 1 0.08 sub mul add 2 div
+ }
+bind readonly def
+setpacking
+/.sethireshalftone { % <dpi> .sethireshalftone <doscreen>
+ % According to information published by Hewlett-Packard,
+ % they use a 60 line screen on 300 DPI printers and
+ % an 85 line screen on 600 DPI printers.
+ % However, we use a 106 line screen, which produces smoother-
+ % looking shades but fewer of them (32 vs. 50).
+ % 46 was suggested as a good frequency value for printers
+ % between 200 and 400 DPI, so we use it for lower resolutions.
+ % Imagesetters need even higher frequency screens.
+ //systemdict /DITHERPPI known
+ { DITHERPPI
+ }
+ { dup cvi 100 idiv 15 .min
+ {//null 46 46 60 60 60 106 106 106 106 133 133 133 133 133 150}
+ exch get
+ }
+ ifelse
+ 1 index 4.01 div .min % at least a 4x4 cell
+ 45
+ //.linescreen
+ % Determine whether we have lots of process colors.
+ % If so, don't bother with color screening or gamma correction.
+ % Also don't do gamma correction on very high-resolution devices.
+ % (This should depend on dot gain, not resolution, but we don't
+ % currently have a way to determine this.) Ignore missing components
+ % (*Values = 1).
+ currentdevice mark
+ /RedValues 0 /GreenValues 0 /BlueValues 0 /GrayValues 0
+ .dicttomark .getdeviceparams
+ counttomark 2 idiv 1 sub
+ { exch pop dup 1 le
+ { pop }
+ { exch dup 1 le
+ { pop }
+ { .min }
+ ifelse
+ }
+ ifelse
+ }
+ repeat
+ exch pop exch pop 32 lt 4 index 800 lt and 5 1 roll
+ % Stack: doscreen dpi freq angle proc
+ % Ghostscript currently doesn't use correct, per-plane halftones
+ % unless setcolorscreen has been executed. Since these are
+ % computationally much more expensive than binary halftones,
+ % we check to make sure they are really warranted, i.e., we have
+ % a high-resolution CMYK device (i.e., not a display) with
+ % fewer than 5 bits per plane (i.e., not a true-color device).
+ 4 -1 roll 150 ge
+ { /setcolorscreen where
+ { pop //systemdict /COLORSCREEN known
+ { COLORSCREEN }
+ { 3 index }
+ ifelse
+ dup false ne
+ { 4 1 roll 3 copy 6 copy 13 -1 roll
+ % For really high-quality screening on printers, we need to
+ % give each plane its own screen angle. Unfortunately,
+ % this currently has very large space and time costs.
+ true eq % true => different angles,
+ % 0 => same angles
+ { { 45 90 15 75 } { 3 1 roll exch pop 12 3 roll } forall
+ }
+ if //setcolorscreen
+ }
+ { pop //setscreen % false => single binary screen
+ }
+ ifelse
+ }
+ { //setscreen % setcolorscreen not known
+ }
+ ifelse
+ }
+ { //setscreen % not high resolution
+ }
+ ifelse
+} bind def
+/.sethiresscreen { % <dpi> .sethiresscreen
+ .sethireshalftone % pushes true if a screen halftone used
+ % Stack: doscree
+ {
+ % Set the transfer function to lighten up the grays.
+ % Parameter values closer to 1 are better for devices with
+ % less dot spreading; lower values are better with more spreading.
+ % The value 0.8 is a compromise that will probably please no one!
+ %
+ % Because of a bug in FrameMaker, we have to accept operands
+ % outside the valid range of [0..1].
+ {
+ dup dup 0.0 gt exch 1.0 lt and
+ {
+ 0.8 exp
+ }
+ if
+ }
+ }
+ {
+ % Set the transfer function to the identity.
+ 0 array cvx % Genoa CET won't accept a packed array!
+ }
+ ifelse
+ settransfer
+ /setstrokeadjust where
+ { pop false setstrokeadjust }
+ if
+
+ % Increase fill adjustment so that we effectively use Adobe's
+ % any-part-of-pixel rule.
+ 0.5 .setfilladjust
+} bind def
+% Set the default screen and BG/UCR.
+/.setdefaultbgucr {
+ systemdict /setblackgeneration known {
+ { pop 0 } dup setblackgeneration setundercolorremoval
+ } if
+} bind def
+/.useloresscreen { % - .useloresscreen <bool>
+ % Compute min(|dpi x|,|dpi y|) as the definition of the resolution.
+ 72 72 matrix defaultmatrix dtransform abs exch abs .min
+ dup 150 lt //systemdict /DITHERPPI known not and
+} bind def
+
+% The following implementation uses LL2 extensions, but only in stopped
+% contexts so that with LL1, the .set??reshalftone will be used.
+%
+% - .getdefaulthalftone <halftonedict> true if default found
+% false
+/.getdefaulthalftone {
+ % try the device to see if it has a default halftone
+ { currentdevice /HalftoneDefault gsgetdeviceprop } .internalstopped
+ { pop pop false } % no device property
+ { dup type /dicttype eq { true } { pop false } ifelse }
+ ifelse
+ % stack: <halftonedict> true if default found
+ % false not found
+ dup not
+ { % device did not provide a default, try Resource
+ pop { /Default /Halftone /findresource .systemvar exec } .internalstopped
+ { pop pop false } { true } ifelse
+ }
+ if
+} bind def
+
+/.setdefaulthalftone {
+ .getdefaulthalftone
+ { sethalftone }
+ { % default not found
+ .useloresscreen { .setloreshalftone } { .sethireshalftone pop } ifelse
+ }
+ ifelse
+} bind def
+
+/.setdefaultscreen {
+ .useloresscreen { .setloresscreen } { .sethiresscreen } ifelse
+ .setdefaultbgucr
+} bind def
+
+% Load basic color support
+%% Replace 1 (gs_cspace.ps)
+(gs_cspace.ps) runlibfile
+
+(END BASIC COLOR) VMDEBUG
+
+%% Replace 1 (gs_devcs.ps)
+(gs_devcs.ps) runlibfile
+
+(END LEVEL 1 COLOR) VMDEBUG
+
+% Load image support
+%% Replace 1 (gs_img.ps)
+(gs_img.ps) runlibfile
+
+(END IMAGE) VMDEBUG
+
+% Auxiliary procedures for generating file name templates.
+
+% Convert a path name into a string suitable for filenameforall
+% For example: (a\\b*?c) to (a\\\\b\\*\\?c)
+/.makepathtemplate { % str1 -- str2
+ dup length dup add string 0 % result string up to twice the size
+ 0 1 4 index length 1 sub {
+ 3 index exch get
+ dup 92 eq { % \ -> \\
+ 2 index 2 index 92
+ put
+ exch 1 add exch
+ }
+ if
+ dup 42 eq { % * -> \*
+ 2 index 2 index 92
+ put
+ exch 1 add exch
+ }
+ if
+ dup 63 eq { % ? -> \?
+ 2 index 2 index 92
+ put
+ exch 1 add exch
+ }
+ if
+ 2 index 2 index 3 -1 roll put 1 add
+ } for
+ 0 exch getinterval exch pop
+} bind def
+
+% false <dir_list> <template> .generate_dir_list_templates_with_length <t1> ... <tN>
+% true <dir_list> <template> .generate_dir_list_templates_with_length <t1> <l1> ... <tN> <ln>
+%
+% Generates various valid templates combining a directory list with a given template.
+% With 'true' operand it also returns lengths of directory pathes.
+%
+% Example1 (DOS, Windows) :
+% false [(/gs/lib) (/gs/Resource/) (\gs8.00\Resource)] (*/*) -->
+% (/gs/lib/*/*) (/gs/Resource/*/*) (\\gs8.00\\Resource/*/*)
+%
+% Example2 (OpenVMS) :
+% false [(gs:[lib]) (gs:[Resource]) (gs800:[Resource)] (*]*) -->
+% ((gs:[lib.*]*) [gs:[Resource.*]*) ([gs800:[Resource.*]*)
+%
+/.generate_dir_list_templates_with_length
+{ % [dl] (templ)
+ % We need to convert paths into templates,
+ % because it can include '\' on DOS.
+ % In same time, the <template> must not convert,
+ % because it is already a template.
+ % Besides that, we cannot combine template using .file_name_combine,
+ % because template syntax breaks the platform path syntax.
+ % To resolve this, we first convert the <template> into
+ % a fake filename, and combine it with path,
+ % obtaining a correct separator. Then we replace
+ % the fake file name with the given template.
+ %
+
+ % Create the fake file name :
+ dup dup length string copy % b [dl] (templ) (ffn)
+ (*) 0 get (?) 0 get (\\) 0 get (x) 0 get 0 0 % b [dl] (templ) (ffn) * ? \ x i j
+ { 1 index 7 index length ge { exit } if
+ 6 index 2 index get % b [dl] (templ) (ffn) * ? \ x i j c
+ dup 7 index eq % b [dl] (templ) (ffn) * ? \ x i j c bool
+ 1 index 7 index eq or { % *?
+ pop 2 index
+ } if % b [dl] (templ) (ffn) * ? \ x i j C
+ dup 5 index eq { % \
+ 3 2 roll 1 add 3 1 roll % b [dl] (templ) (ffn) * ? \ x i' j C
+ 2 index 8 index length ge { pop exit } if
+ pop 6 index 2 index get % b [dl] (templ) (ffn) * ? \ x i' j C'
+ } if
+ 7 index 2 index 3 2 roll put % b [dl] (templ) (ffn) * ? \ x i' j
+ 1 add exch 1 add exch % b [dl] (templ) (ffn) * ? \ x i'' j'
+ } loop % b [dl] (templ) (ffn) * ? \ x i j
+ 6 1 roll pop % b [dl] (templ) (ffn) j * ? \ x
+ exch pop exch pop exch pop exch % b [dl] (templ) (ffn) x j
+ { dup 3 index length ge { exit } if
+ 3 copy exch put
+ 1 add
+ } loop
+ pop pop % b [dl] (templ) (ffn)
+
+ % An internal procedure :
+ { % {} b [dl] (templ) (ffn) (dffn)
+ dup length
+ 1 sub % drop 'x', which was added above.
+ exch % {} b [dl] (templ) (ffn) ldffn (dffn)
+ .makepathtemplate % {} b [dl] (templ) (ffn) ldffn (Dffn)
+ dup % {} b [dl] (templ) (ffn) ldffn (Dffn) (Dffn)
+ 4 index length dup % {} b [dl] (templ) (ffn) ldffn (Dffn) (Dffn) templL templL
+ 2 index length % {} b [dl] (templ) (ffn) ldffn (Dffn) (Dffn) templL templL DffnL
+ exch sub % {} b [dl] (templ) (ffn) ldffn (Dffn) (Dffn) templL i
+ exch getinterval % {} b [dl] (templ) (ffn) ldffn (Dffn) (suffix)
+ 4 index exch copy pop % {} b [dl] (templ) (ffn) ldffn (dt)
+ 5 index {
+ exch % {} b [dl] (templ) (ffn) (dt) ldffn
+ 7 2 roll % (dt) ldffn {} b [dl] (templ) (ffn)
+ } {
+ exch pop % {} b [dl] (templ) (ffn) (dt)
+ 6 1 roll % (dt) {} b [dl] (templ) (ffn)
+ } ifelse
+ }
+ 5 1 roll % {} b [dl] (templ) (ffn)
+
+ % Generate templates :
+ dup .file_name_is_absolute {
+ dup % {} b [dl] (templ) (ffn) (ffn)
+ 5 index exec % (t1) {} b [dl] (templ) (ffn)
+ } {
+ 2 index { % ... {} b [dl] (templ) (ffn) (d)
+ 1 index % ... {} b [dl] (templ) (ffn) (d) (ffn)
+ false .file_name_combine { % ... {} b [dl] (templ) (ffn) (dffn)
+ 5 index exec % ... (t1) ?l1 {} b [dl] (templ) (ffn)
+ } { % ... {} b [dl] (templ) (ffn) (d) (ffn)
+ pop pop % ... {} b [dl] (templ) (ffn)
+ } ifelse
+ } forall
+ } ifelse % (t1) ?l1 (t2) ?l2 ... (tN) ?ln {} b [dl] (templ) (ffn)
+ pop pop pop pop pop % (t1) ?l1 (t2) ?l2 ... (tN) ?ln
+} bind def
+
+% <dir_list> <template> .generate_dir_list_templates <t1> ... <tN>
+%
+% Generates various valid templates combining a directory list with a given template.
+% It's the 'false' case of the function above.
+%
+/.generate_dir_list_templates
+{ //false 3 1 roll //.generate_dir_list_templates_with_length exec
+} bind def
+
+% Load the initialization files for optional features.
+%% Replace 4 INITFILES
+systemdict /INITFILES known
+ { INITFILES { dup runlibfile VMDEBUG } forall
+ }
+if
+
+% If Level 2 (or higher) functionality is implemented, enable it now.
+/.setlanguagelevel where {
+ pop 2 .setlanguagelevel
+ % If the resource machinery is loaded, fix up some things now.
+ /.fixresources where { pop .fixresources } if
+} if
+/ll3dict where {
+ pop 3 .setlanguagelevel
+} if
+
+(END INITFILES) VMDEBUG
+
+% Create a null font. This is the initial font.
+8 dict dup begin
+ /FontMatrix [ 1 0 0 1 0 0 ] readonly def
+ /FontType 3 def
+ /FontName () def
+ /Encoding StandardEncoding def
+ /FontBBox { 0 0 0 0 } readonly def % executable is bogus, but customary ...
+ /BuildChar { pop pop 0 0 setcharwidth } bind def
+ /PaintType 0 def % shouldn't be needed!
+end
+/NullFont exch definefont setfont
+
+% Define NullFont as the font.
+/NullFont currentfont def
+
+% Load initial fonts from FONTPATH directories, Fontmap file,
+% and/or .getccfont as appropriate.
+.loadinitialfonts
+
+% Remove NullFont from FontDirectory, so it can't be accessed by mistake.
+/undefinefont where {
+ pop /NullFont undefinefont
+} {
+ FontDirectory /NullFont .undef
+} ifelse
+
+(END FONTS) VMDEBUG
+
+% Restore the real definition of runlibfile.
+/runlibfile /.runlibfile load def
+currentdict /.runlibfile .undef
+
+% Bind all the operators defined as procedures.
+/.bindoperators % binds operators in currentdict
+ { % Temporarily disable the typecheck error.
+ errordict /typecheck 2 copy get
+ errordict /typecheck { pop } put % pop the command
+ currentdict
+ { dup type /operatortype eq
+ { % This might be a real operator, so bind might cause a typecheck,
+ % but we've made the error a no-op temporarily.
+ .bind % do a real bind even if NOBIND is set
+ }
+ if pop pop
+ } forall
+ put
+ } def
+NOBIND DELAYBIND or not { .bindoperators } if
+
+% Establish a default environment.
+
+defaultdevice
+% The following line used to skip setting of page size and resolution if
+% NODISPLAY was selected. We think this was only to save time and memory,
+% and it is a bad idea because it prevents setting the resolution in this
+% situation, which pstoedit (among other programs) relies on.
+%DISPLAYING not { setdevice (%END DISPLAYING) .skipeof } if
+
+% If the paper size is not specifed and the device defaults to
+% letter or A4 paper, select the DEFAULTPAPERSIZE.
+systemdict /DEFAULTPAPERSIZE known
+systemdict /PAPERSIZE known not and
+systemdict /DEVICEWIDTH known not and
+systemdict /DEVICEHEIGHT known not and
+systemdict /DEVICEWIDTHPOINTS known not and
+systemdict /DEVICEHEIGHTPOINTS known not and
+ {
+ defaultdevice mark /PageSize //null .dicttomark .getdeviceparams
+ .dicttomark /PageSize get
+ dup 0 get 0.5 add cvi 612 eq 1 index 1 get 0.5 add cvi 792 eq and
+ 1 index 0 get 0.5 add cvi 595 eq 2 index 1 get 0.5 add cvi 842 eq and
+ or exch pop
+ {
+ % the default paper size was letter, so replace it with DEFAULTPAPERSIZE
+ /PAPERSIZE DEFAULTPAPERSIZE def
+ } if
+ }
+if
+
+systemdict /DEVICEWIDTH known
+systemdict /DEVICEHEIGHT known or
+systemdict /DEVICEWIDTHPOINTS known or
+systemdict /DEVICEHEIGHTPOINTS known or
+systemdict /DEVICEXRESOLUTION known or
+systemdict /DEVICEYRESOLUTION known or
+systemdict /PAPERSIZE known or
+not { (%END DEVICE) .skipeof } if
+% Let DEVICE{WIDTH,HEIGHT}[POINTS] override PAPERSIZE.
+systemdict /PAPERSIZE known
+systemdict /DEVICEWIDTH known not and
+systemdict /DEVICEHEIGHT known not and
+systemdict /DEVICEWIDTHPOINTS known not and
+systemdict /DEVICEHEIGHTPOINTS known not and
+ { % Convert the paper size to device dimensions.
+ true statusdict /.pagetypenames get
+ { PAPERSIZE eq
+ { PAPERSIZE load
+ dup 0 get /DEVICEWIDTHPOINTS exch def
+ 1 get /DEVICEHEIGHTPOINTS exch def
+ pop false exit
+ }
+ if
+ }
+ forall
+ { (Unknown paper size: ) print PAPERSIZE ==only (.) =
+ }
+ if
+ }
+if
+% Adjust the device parameters per the command line.
+% It is possible to specify resolution, pixel size, and page size;
+% since any two of these determine the third, conflicts are possible.
+% We simply pass them to .setdeviceparams and let it sort things out.
+ mark /HWResolution //null /HWSize //null /PageSize //null .dicttomark
+ .getdeviceparams .dicttomark begin
+ mark
+ % Check for resolution.
+ /DEVICEXRESOLUTION where dup
+ { exch pop HWResolution 0 DEVICEXRESOLUTION put }
+ if
+ /DEVICEYRESOLUTION where dup
+ { exch pop HWResolution 1 DEVICEYRESOLUTION put }
+ if
+ or { /HWResolution HWResolution } if
+ % Check for device sizes specified in pixels.
+ /DEVICEWIDTH where dup
+ { exch pop HWSize 0 DEVICEWIDTH put }
+ if
+ /DEVICEHEIGHT where dup
+ { exch pop HWSize 1 DEVICEHEIGHT put }
+ if
+ or { /HWSize HWSize } if
+ % Check for device sizes specified in points.
+ /DEVICEWIDTHPOINTS where dup
+ { exch pop PageSize 0 DEVICEWIDTHPOINTS put }
+ if
+ /DEVICEHEIGHTPOINTS where dup
+ { exch pop PageSize 1 DEVICEHEIGHTPOINTS put }
+ if
+ or { /PageSize PageSize } if
+ % Check whether any parameters were set.
+ dup mark eq { pop } { defaultdevice putdeviceprops } ifelse
+ end
+%END DEVICE
+% Set any device properties defined on the command line.
+% If BufferSpace is defined but not MaxBitmap, set MaxBitmap to BufferSpace.
+systemdict /BufferSpace known
+systemdict /MaxBitmap known not and
+ { systemdict /MaxBitmap BufferSpace put
+ } if
+dup getdeviceprops
+counttomark 2 idiv
+ { systemdict 2 index known
+ { pop dup load counttomark 2 roll }
+ { pop pop }
+ ifelse
+ } repeat
+counttomark dup 0 ne
+ { 2 add -1 roll putdeviceprops }
+ { pop pop }
+ifelse
+% If the initial device parameters are invalid, the setdevice may fail.
+% Trap this and produce a reasonable error message.
+{ setdevice } % does an erasepage
+INITDEBUG { exec false } { .internalstopped } ifelse {
+ (**** Unable to open the initial device, quitting.) = flush 1 .quit
+} if
+
+% If the media size is fixed, update the current page device dictionary.
+FIXEDMEDIA
+dup { pop systemdict /.currentpagedevice known } if
+dup { pop .currentpagedevice exch pop } if
+not { (%END MEDIA) .skipeof } if
+currentpagedevice dup length dict .copydict
+dup /Policies
+ % Stack: <pagedevice> <pagedevice> /Policies
+1 index /InputAttributes
+2 copy get dup length dict .copydict
+ % Stack: <pagedevice> <pagedevice> /Policies <pagedevice>
+ % /InputAttributes <inputattrs'>
+dup 0 2 copy get dup length dict .copydict
+ % Stack: <pagedevice> <pagedevice> /Policies <pagedevice>
+ % /InputAttributes <inputattrs'> <inputattrs'> 0 <attrs0'>
+dup /PageSize 7 index /PageSize get
+put % PageSize in 0
+put % 0 in InputAttributes
+put % InputAttributes in pagedevice
+% Also change the page size policy so we don't get an error.
+ % Stack: <pagedevice> <pagedevice> /Policies
+2 copy get dup length dict .copydict
+ % Stack: <pagedevice> <pagedevice> /Policies <policies'>
+dup /PageSize 7 put % PageSize in Policies
+put % Policies in pagedevice
+.setpagedevice
+%END MEDIA
+
+% Set up the interpreter context version of -dUSeCIEColor option
+% so that .getuseciecolor has the correct value (see gs_setpd.ps)
+/setpagedevice where {
+ pop systemdict /UseCIEColor known {
+ mark /UseCIEColor UseCIEColor .dicttomark setpagedevice
+ } if
+} if
+
+%END DISPLAYING
+
+(END DEVICE) VMDEBUG
+
+% Establish a default upper limit in the character cache,
+% namely, enough room for a 18-point character at the resolution
+% of the default device, or for a character consuming 1% of the
+% maximum cache size, whichever is larger.
+mark
+ % Compute limit based on character size.
+ 18 dup dtransform
+ exch abs cvi 31 add 32 idiv 4 mul % X raster
+ exch abs cvi mul % Y
+ % Compute limit based on allocated space.
+ cachestatus pop pop pop pop pop exch pop 0.01 mul cvi
+ .max dup 10 idiv exch
+setcacheparams
+% Conditionally disable the character cache.
+NOCACHE { 0 setcachelimit } if
+
+(END CONFIG) VMDEBUG
+
+% Initialize graphics.
+
+.setdefaultscreen
+initgraphics
+
+% The interpreter relies on there being at least 2 entries
+% on the graphics stack. Establish the second one now.
+gsave
+
+% Define some control sequences as no-ops.
+% This is a hack to get around problems
+% in some common PostScript-generating applications.
+<04> cvn JOBSERVER {
+ { { clear cleardictstack //false 0 .startnewjob } 2 .stop } bind
+ } {
+ { }
+ } ifelse def
+<1b> cvn { % UEL is <esc>%-12345X and acts the same as ^D
+ currentfile (%-12345X) .peekstring pop (%-12345X) eq <04> cvn load if
+} bind def
+<1b45> cvn { } def % PJL reset prologue (ESC E)
+<1b451b> cvn <1b> cvn load def % PJL reset epilogue (ESC E + UEL)
+(\001M) cvn % TBCP initiator
+ { currentfile /TBCPDecode filter cvx exec
+ } bind def
+/@PJL % H-P job control
+ {
+ % Windows 2000 driver includes PJL into %%BeginFeature block.
+ % Identify this from the pattern on the stack: countdictstack lucas mark
+ % and fail the feature request.
+
+ count 3 ge {
+ dup mark eq {
+ 2 index countdictstack eq {
+ 1 index /lucas where { /lucas get eq } { pop false } ifelse {
+ stop
+ } if
+ } if
+ } if
+ } if
+ currentfile //=string readline pop pop
+ } bind def
+
+% Install the EPS handler if needed
+systemdict /EPSBoundingBoxInit known { EPSBoundingBoxInit } if
+
+% If we want a "safer" system, disable some obvious ways to cause havoc.
+.currentglobal true .setglobal
+/SAFETY 2 dict
+ dup /safe false put
+ dup /tempfiles 10 dict readonly put
+readonly def
+.setglobal
+
+/.locksafe {
+ SAFETY /safe get not {
+ <<
+ /PermitFileReading [
+ currentuserparams /PermitFileReading get aload pop
+ /FONTPATH .systemvar (*) .generate_dir_list_templates
+ % Library files :
+ /LIBPATH .systemvar (*) .generate_dir_list_templates
+ % Resource files on OpenVMS requires a separate template (gs:[dir.*]*)
+ % because the (gs:[dir]*) doesn't cover them.
+ /LIBPATH .systemvar (*) .file_name_separator (*)
+ concatstrings concatstrings .generate_dir_list_templates
+ .languagelevel 2 ge {
+ % Default resources :
+ [ currentsystemparams /GenericResourceDir get] (*) .generate_dir_list_templates
+ % Default resources (OpenVMS, see comment above.) :
+ [ currentsystemparams /GenericResourceDir get] (*) .file_name_separator (*)
+ concatstrings concatstrings .generate_dir_list_templates
+ } if
+ ]
+ /LockFilePermissions true
+ >> setuserparams
+ }
+ if
+ % setpagedevice has the side effect of clearing the page, but
+ % we will just document that. Using setpagedevice keeps the device
+ % properties and pagedevice .LockSafetyParams in agreement even
+ % after a restore that changes the value to false.
+ currentglobal currentpagedevice gcheck setglobal % use correct VM space
+ << /.LockSafetyParams true >> setpagedevice
+ setglobal
+ //SAFETY /safe //true .forceput % overrides readonly
+} .bind executeonly odef
+
+/.setsafe
+{
+ SAFETY /safe get not {
+ <<
+ /PermitFileReading [ ]
+ /PermitFileWriting [ ]
+ /PermitFileControl [ ]
+ >> setuserparams
+ }
+ if
+ .locksafe
+} .bind executeonly odef
+
+/deletefile {
+ dup { deletefile } stopped {
+ pop //deletefile $error /errorname get signalerror
+ } {
+ % deletefile succeeded. Remove from tempfile list if present
+ //SAFETY /tempfiles get exch cvn 2 copy known {
+ .forceundef
+ } {
+ pop pop
+ }
+ ifelse
+ }
+ ifelse
+} .bind executeonly odef
+
+% If a file is opened with .tempfile with SAFER not (yet) set,
+% the file can be deleted later, even if SAFER is set.
+/.tempfile {
+ .tempfile % filename file
+ //SAFETY /tempfiles get 2 .argindex true .forceput
+} .bind executeonly odef
+
+% If we are running in SAFER mode, lock things down
+SAFER { .setsafe } if
+
+% If we delayed binding, make it possible to do it later.
+/.bindnow {
+ currentuserparams /IdiomRecognition .knownget {
+ 1 dict dup /IdiomRecognition //false put setuserparams
+ } if
+ //systemdict begin .bindoperators end
+ % Temporarily disable the typecheck error.
+ errordict /typecheck 2 copy get
+ errordict /typecheck { pop } put % pop the command
+ 0 1 .delaycount 1 sub { .delaybind exch get .bind pop } for
+ //systemdict /.delaybind {} .forceput % reclaim the space
+ //systemdict /.bindnow .forceundef % ditto
+ put
+ //systemdict /.forcecopynew .forceundef % remove temptation
+ //systemdict /.forcedef .forceundef % ditto
+ //systemdict /.forceput .forceundef % ditto
+ //systemdict /.forceundef .forceundef % ditto
+ currentuserparams /IdiomRecognition known {
+ 1 dict dup /IdiomRecognition 4 -1 roll put setuserparams
+ } if
+} .bind odef
+
+% Turn off array packing, since some PostScript code assumes that
+% procedures are writable.
+false setpacking
+
+(END INIT) VMDEBUG
+
+/.currentuserparams where {
+ pop
+ % Remove real user params from psuserparams.
+ mark .currentuserparams counttomark 2 idiv {
+ pop psuserparams exch undef
+ } repeat pop
+ % Update the copy of the user parameters.
+ mark .currentuserparams counttomark 2 idiv {
+ userparams 3 1 roll .forceput % userparams is read-only
+ } repeat pop
+ % Turn on idiom recognition, if available.
+ currentuserparams /IdiomRecognition known {
+ /IdiomRecognition true .definepsuserparam
+ } if
+ psuserparams readonly pop
+ systemdict /.definepsuserparam undef
+ % Save a copy of userparams for use with save/restore
+ % (and, if implemented, context switching).
+ .currentglobal false .setglobal
+ mark userparams { } forall .dicttomark readonly
+ /userparams exch .forcedef % systemdict is read-only
+ .setglobal
+} if
+/.currentsystemparams where {
+ pop
+ % Remove real system params from pssystemparams.
+ mark .currentsystemparams counttomark 2 idiv {
+ pop pssystemparams exch .forceundef
+ } repeat pop
+} if
+
+% Set up AlignToPixels :
+
+/AlignToPixels where {
+ mark /AlignToPixels 2 index /AlignToPixels get .dicttomark setuserparams
+ /AlignToPixels undef
+} if
+
+% Set up GridFitTT :
+
+/GridFitTT where {
+ mark /GridFitTT 2 index /GridFitTT get .dicttomark setuserparams
+ /GridFitTT undef
+} if
+
+% Establish local VM as the default.
+false /setglobal where { pop setglobal } { .setglobal } ifelse
+$error /.nosetlocal false put
+
+(END GLOBAL) VMDEBUG
+
+/.savelocalstate where {
+ % If we might create new contexts, save away copies of all dictionaries
+ % referenced from systemdict that are stored in local VM,
+ % and also save a copy of the initial gstate.
+ pop .savelocalstate
+} {
+ % If we're *not* running in a multi-context system and FAKEFONTS is
+ % defined, add the fake fonts to LocalFontDirectory.
+ .definefakefonts % current VM is local
+} ifelse
+
+% Execute scheduled inits :
+//.execute_scheduled_inits exec
+currentdict /.execute_scheduled_inits undef
+currentdict /.delayed_init_queue undef
+
+% Make global and local FontDirectory read-only.
+FontDirectory readonly pop
+/GlobalFontDirectory where { pop GlobalFontDirectory readonly pop } if
+
+% Remove systemdict entries for things that have been bound in where used
+% and that shouldn't be accessible by name, and close up systemdict.
+currentdict /filterdict .undef
+currentdict /.cidfonttypes .undef
+currentdict /.colorrenderingtypes .undef
+currentdict /.formtypes .undef
+currentdict /.halftonetypes .undef
+currentdict /.imagetypes .undef
+currentdict /.imagemasktypes .undef
+currentdict /.patterntypes .undef
+currentdict /.shadingtypes .undef
+currentdict /.wheredict .undef
+end
+
+% Clean up VM, and enable GC.
+/vmreclaim where
+ { pop NOGC not { 2 vmreclaim 0 vmreclaim } if
+ } if
+DELAYBIND not {
+ systemdict /.forcecopynew .undef % remove temptation
+ systemdict /.forcedef .undef % ditto
+ systemdict /.forceput .undef % ditto
+ systemdict /.forceundef .undef % ditto
+} if
+% Move superexec to internaldict if superexec is defined.
+currentdict /superexec .knownget {
+ 1183615869 internaldict /superexec 3 -1 roll put
+ currentdict /superexec .undef
+} if
+WRITESYSTEMDICT not { systemdict readonly pop } if
+(END GC) VMDEBUG
+
+% The Adobe AGM_Core used by Illustrator 9 has some code that breaks
+% if the 'product' is not (Adobe PostScript Parser). A bug has been
+% submitted to Adobe since this also fails with Acrobat Distiller.
+% As a temporary work around, the following HACK will work for
+% devices without spot color support. Once Ghostscript can
+% support DeviceN and spot color separations this will need to
+% be 'true' in some cases.
+userdict /AGM_preserve_spots false put
+
+% The interpreter will run the initial procedure (start).
diff --git a/Master/tlpkg/tlgs/lib/gs_kanji.ps b/Master/tlpkg/tlgs/lib/gs_kanji.ps
new file mode 100644
index 00000000000..db7e83acbba
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_kanji.ps
@@ -0,0 +1,158 @@
+% Copyright (C) 1994, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_kanji.ps 6300 2005-12-28 19:56:24Z giles $
+% Scaffolding for Kanji fonts. This is based on the Wadalab free font
+% from the University of Tokyo; it may not be appropriate for other
+% Kanji fonts.
+
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+
+% Define the encoding for the root font.
+
+/KanjiEncoding
+% \x00
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+% \x20
+ 0 1 2 3 4 5 6 7
+ 8 0 0 0 0 0 0 0
+ 9 10 11 12 13 14 15 16
+ 17 18 19 20 21 22 23 24
+% \x40
+ 25 26 27 28 29 30 31 32
+ 33 34 35 36 37 38 39 40
+ 41 42 43 44 45 46 47 48
+ 49 50 51 52 53 54 55 56
+% \x60
+ 57 58 59 60 61 62 63 64
+ 65 66 67 68 69 70 71 72
+ 73 74 75 76 77 0 0 0
+ 0 0 0 0 0 0 0 0
+% \x80
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0
+% \xA0
+ 0 1 2 3 4 5 6 7
+ 8 0 0 0 0 0 0 0
+ 9 10 11 12 13 14 15 16
+ 17 18 19 20 21 22 23 24
+% \xC0
+ 25 26 27 28 29 30 31 32
+ 33 34 35 36 37 38 39 40
+ 41 42 43 44 45 46 47 48
+ 49 50 51 52 53 54 55 56
+% \xE0
+ 57 58 59 60 61 62 63 64
+ 65 66 67 68 69 70 71 72
+ 73 74 75 76 77 0 0 0
+ 0 0 0 0 0 0 0 0
+256 packedarray def
+
+% Define a stub for the base font encoding.
+
+ /KanjiSubEncoding { /KanjiSubEncoding .findencoding } bind def
+%% Replace 3 (gs_ksb_e.ps)
+ EncodingDirectory /KanjiSubEncoding
+ { (gs_ksb_e.ps) //systemdict begin runlibfile KanjiSubEncoding end }
+ bind put
+
+% Support procedures and data.
+
+/T1FontInfo 8 dict begin
+ /version (001.001) readonly def
+ /FullName (KanjiBase) readonly def
+ /FamilyName (KanjiBase) readonly def
+ /Weight (Medium) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch false def
+ /UnderlinePosition 0 def
+ /UnderlineThickness 0 def
+currentdict end readonly def
+
+/T1NF % <fontname> T1NF <font>
+{
+20 dict begin
+ /FontName exch def
+ /FontType 1 def
+ /FontInfo T1FontInfo def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [0 0 1000 1000] def
+ /Encoding KanjiSubEncoding def
+ /CharStrings 150 dict def
+ /PaintType 0 def
+ /Private 2 dict def
+ Private begin
+ /BlueValues [] def
+ /password 5839 def
+ end
+FontName currentdict end definefont
+} def
+
+/T0NF % <fontname> T0NF <font>
+{
+20 dict begin
+ /FontName exch def
+ /FDepVector exch def
+ /FontType 0 def
+ /FontMatrix [1 0 0 1 0 0] def
+ /FMapType 2 def
+ /Encoding KanjiEncoding def
+FontName currentdict end definefont
+} def
+
+% Define the composite font and all the base fonts.
+
+/CompNF % <fontname> CompNF <font>
+{
+/newname1 exch def
+newname1 dup length string cvs /str exch def
+str length /len exch def
+/fdepvector 78 array def
+/j 1 def
+16#21 1 16#74 {
+/i exch def
+KanjiEncoding i get 0 gt {
+len 4 add string /newstr exch def
+newstr 0 str putinterval
+newstr len (.r) putinterval
+newstr len 2 add i 16 2 string cvrs putinterval
+newstr cvn /newlit exch def
+newlit T1NF /newfont exch def
+fdepvector j newfont put
+/j j 1 add def
+} if
+} for
+fdepvector 0 fdepvector 1 get put
+/j 0 def
+fdepvector newname1 T0NF
+} def
+
+% Define an individual character in a composite font.
+/CompD % <charstring> <(HL)> CompD -
+ { currentfont /Encoding get 1 index 0 get get % FDepVector index
+ currentfont /FDepVector get exch get % base font
+ dup /Encoding get 3 -1 roll 1 get get % base font character name
+ exch /CharStrings get exch 3 -1 roll put
+ } bind def
+
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_ksb_e.ps b/Master/tlpkg/tlgs/lib/gs_ksb_e.ps
new file mode 100644
index 00000000000..cba2f588f2b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ksb_e.ps
@@ -0,0 +1,64 @@
+% Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ksb_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the KanjiSub encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/KanjiSubEncoding
+%\x00
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%\x20
+ /.notdef /c21 /c22 /c23 /c24 /c25 /c26 /c27
+ /c28 /c29 /c2A /c2B /c2C /c2D /c2E /c2F
+ /c30 /c31 /c32 /c33 /c34 /c35 /c36 /c37
+ /c38 /c39 /c3A /c3B /c3C /c3D /c3E /c3F
+%\x40
+ /c40 /c41 /c42 /c43 /c44 /c45 /c46 /c47
+ /c48 /c49 /c4A /c4B /c4C /c4D /c4E /c4F
+ /c50 /c51 /c52 /c53 /c54 /c55 /c56 /c57
+ /c58 /c59 /c5A /c5B /c5C /c5D /c5E /c5F
+%\x60
+ /c60 /c61 /c62 /c63 /c64 /c65 /c66 /c67
+ /c68 /c69 /c6A /c6B /c6C /c6D /c6E /c6F
+ /c70 /c71 /c72 /c73 /c74 /c75 /c76 /c77
+ /c78 /c79 /c7A /c7B /c7C /c7D /c7E /.notdef
+%\x80
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%\xA0
+ /.notdef /c21 /c22 /c23 /c24 /c25 /c26 /c27
+ /c28 /c29 /c2A /c2B /c2C /c2D /c2E /c2F
+ /c30 /c31 /c32 /c33 /c34 /c35 /c36 /c37
+ /c38 /c39 /c3A /c3B /c3C /c3D /c3E /c3F
+%\xC0
+ /c40 /c41 /c42 /c43 /c44 /c45 /c46 /c47
+ /c48 /c49 /c4A /c4B /c4C /c4D /c4E /c4F
+ /c50 /c51 /c52 /c53 /c54 /c55 /c56 /c57
+ /c58 /c59 /c5A /c5B /c5C /c5D /c5E /c5F
+%\xE0
+ /c60 /c61 /c62 /c63 /c64 /c65 /c66 /c67
+ /c68 /c69 /c6A /c6B /c6C /c6D /c6E /c6F
+ /c70 /c71 /c72 /c73 /c74 /c75 /c76 /c77
+ /c78 /c79 /c7A /c7B /c7C /c7D /c7E /.notdef
+256 packedarray .defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_l2img.ps b/Master/tlpkg/tlgs/lib/gs_l2img.ps
new file mode 100644
index 00000000000..877044e6f9b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_l2img.ps
@@ -0,0 +1,184 @@
+% Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_l2img.ps 6300 2005-12-28 19:56:24Z giles $
+% Emulate the Level 2 dictionary-based image operator in Level 1,
+% except for Interpolate (ignored) and MultipleDataSources = true;
+% also, we require that the data source be either a procedure of a
+% particular form or a stream, not a string or a general procedure.
+
+% pdf2ps copies the portion of this file from %BEGIN to %END if Level 1
+% compatible output is requested.
+
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+
+/packedarray where
+ { pop }
+ { /packedarray { array astore readonly } bind def }
+ifelse
+
+%BEGIN
+
+11 dict /.csncompdict 1 index def begin
+ /DeviceGray { 1 /setgray load } bind def
+ /DeviceRGB { 3 /setrgbcolor load } bind def
+ /DeviceCMYK { 4 /setcmykcolor load } bind def
+ /Indexed
+ { dup 1 index 1 get //.csncompdict exch get exec
+ % Stack: [/Indexed base hival map] ncomp basesetcolor
+ 3 -1 roll 3 get mark 3 1 roll
+ % Stack: ncomp -mark- basesetcolor map
+ dup type /stringtype eq
+ { { -
+ { exch round cvi get 255 div
+ }
+ -
+ { exch round cvi 3 mul 2 copy 2 copy get 255 div
+ 3 1 roll 1 add get 255 div
+ 4 2 roll 2 add get 255 div
+ }
+ { exch round cvi 4 mul 2 copy 2 copy 2 copy get 255 div
+ 3 1 roll 1 add get 255 div
+ 4 2 roll 2 add get 255 div
+ 5 3 roll 3 add get 255 div
+ }
+ }
+ 4 index get aload pop counttomark -1 roll
+ }
+ { /exec load 3 -1 roll
+ % Stack: -mark- mapproc --exec-- basesetcolor
+ }
+ ifelse .packtomark cvx
+ exch pop 1 exch
+ } bind def
+ /Separation
+ { dup 2 index //.csncompdict exch get exec
+ % Stack: [/Separation name alt xform] ncomp altsetcolor
+ 3 -1 roll 3 get /exec load 3 -1 roll 3 array astore readonly cvx
+ exch pop 1 exch
+ } bind def
+ % Substitute device spaces for CIE spaces.
+ /CIEBasedA /DeviceGray load def
+ /CIEBasedABC /DeviceRGB load def
+ /CIEBasedDEF /DeviceRGB load def
+ /CIEBasedDEFG /DeviceCMYK load def
+end
+
+/.packtomark { counttomark packedarray exch pop } bind def
+
+/.csinextbits % - .csinextbits <bits>
+ % Uses b, nnb, i, row, mask, BitsPerComponent;
+ % sets b, nnb, i.
+ { /nnb nnb BitsPerComponent add
+ { dup 0 le { exit } if
+ /b b 8 bitshift row i get add def
+ /i i 1 add def 8 sub
+ }
+ loop def
+ b nnb bitshift mask and
+ } bind def
+
+% Note that the ColorSpace key must be present in the image dictionary.
+/.colorspaceimage % <imagedict> .colorspaceimage -
+ { save exch
+ dup length 15 add dict begin { cvlit def } forall
+ ColorSpace dup dup type /nametype ne { 0 get } if
+ .csncompdict exch get exec
+ /setpixelcolor exch def /ncomp exch def pop
+ /row ncomp BitsPerComponent mul Width mul 7 add 8 idiv string def
+ /mask 1 BitsPerComponent bitshift 1 sub def
+ /nextbits BitsPerComponent 8 eq
+ { { row i get /i i 1 add def } }
+ { /.csinextbits load }
+ ifelse def
+ /nextpixel mark 0 2 ncomp 1 sub 2 mul
+ { /nextbits cvx exch
+ Decode exch 2 getinterval
+ dup aload pop exch sub
+ dup mask eq { pop } { mask div /mul load 3 -1 roll } ifelse
+ 0 get dup 0 eq { pop } { /sub load 3 -1 roll } ifelse
+ }
+ for
+ /setpixelcolor load dup type /operatortype ne { /exec load } if
+ .packtomark cvx def
+ /readrow
+ /DataSource load dup type
+ dup /arraytype eq exch /packedarraytype eq or
+ { % Must be { <file> <string> ... }
+ aload length 1 add array /pop load exch astore
+ dup 1 row put cvx
+ }
+ { pop
+ % Adobe requires readstring to signal an error if given
+ % an empty string. Work around this nonsense here.
+ row length 0 eq
+ { { } }
+ { { DataSource row readstring pop pop } }
+ ifelse
+ }
+ ifelse def
+ ImageMatrix matrix invertmatrix concat
+ /imat matrix def
+ 0 1 Height 1 sub
+ { imat 5 3 -1 roll neg put
+ readrow
+ /b 0 def /nnb 0 def /i 0 def
+ 0 1 Width 1 sub
+ { imat 4 3 -1 roll neg put nextpixel
+ 1 1 true imat {<80>} imagemask
+ }
+ for
+ }
+ for
+ end restore
+ } bind def
+
+%END
+exec
+currentfile closefile
+
+% Patch for testing.
+/.cincompdict 3 dict begin
+ 1 { {0 1} {/DeviceGray} } def
+ 3 { {0 1 0 1 0 1} {/DeviceRGB} } def
+ 4 { {0 1 0 1 0 1 0 1} {/DeviceCMYK} } def
+currentdict end def
+/.imagekeys [
+ /Decode /DataSource /ImageMatrix /BitsPerComponent /Height /Width
+] def
+/colorimage % <width> <height> <bits/comp> <matrix>
+ % <datasrc> false <ncomp> colorimage -
+ { 1 index { /colorimage .systemvar /rangecheck signalerror } if exch pop
+ //.cincompdict exch get exec
+ 7 dict begin /ColorSpace exch cvlit def
+ .imagekeys { exch cvlit def } forall
+ currentdict end .colorspaceimage
+ } bind odef
+/image
+ { dup type /dicttype ne
+ { 7 dict begin /ColorSpace /DeviceGray def [0 1]
+ .imagekeys { exch cvlit def } forall
+ currentdict end
+ }
+ { dup length 1 add dict .copydict dup /ColorSpace currentcolorspace put
+ }
+ ifelse
+ .colorspaceimage
+ } bind odef
+
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_lev2.ps b/Master/tlpkg/tlgs/lib/gs_lev2.ps
new file mode 100644
index 00000000000..de632671ecc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_lev2.ps
@@ -0,0 +1,1009 @@
+% Copyright (C) 1990, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_lev2.ps 8119 2007-07-12 13:34:24Z alexcher $
+% Initialization file for Level 2 functions.
+% When this is run, systemdict is still writable,
+% but (almost) everything defined here goes into level2dict.
+
+level2dict begin
+
+% ------ System and user parameters ------ %
+
+% User parameters must obey save/restore, and must also be maintained
+% per-context. We implement the former, and some of the latter, here
+% with PostScript code. NOTE: our implementation assumes that user
+% parameters change only as a result of setuserparams -- that there are
+% no user parameters that are ever changed dynamically by the interpreter
+% (although the interpreter may adjust the value presented to setuserparams)
+%
+% There are two types of user parameters: those which are actually
+% maintained in the interpreter, and those which exist only at the
+% PostScript level. We maintain the current state of both types in
+% a read-only local dictionary named userparams, defined in systemdict.
+% In a multi-context system, each context has its own copy of this
+% dictionary. In addition, there is a constant dictionary named
+% psuserparams where each key is the name of a user parameter that exists
+% only in PostScript and the value is a procedure to check that the value
+% is legal: setuserparams uses this for checking the values.
+% setuserparams updates userparams explicitly, in addition to setting
+% any user parameters in the interpreter; thus we can use userparams
+% to reset those parameters after a restore or a context switch.
+% NOTE: the name userparams is known to the interpreter, and in fact
+% the interpreter creates the userparams dictionary.
+
+% Check parameters that are managed at the PostScript level.
+/.checkparamtype { % <newvalue> <type> .checkparamtype <bool>
+ exch type eq
+} .bind def
+/.checksetparams { % <newdict> <opname> <checkdict>
+ % .checksetparams <newdict>
+ 2 .argindex {
+ % Stack: newdict opname checkdict key newvalue
+ 3 copy 3 1 roll .knownget {
+ exec not {
+ pop pop pop load /typecheck signalerror
+ } if
+ dup type /stringtype eq {
+ dup rcheck not {
+ pop pop pop load /invalidaccess signalerror
+ } if
+ } if
+ } {
+ pop
+ } ifelse pop pop
+ } forall pop pop
+} .bind def % not odef, shouldn't reset stacks
+
+% currentuser/systemparams creates and returns a dictionary in the
+% current VM. The easiest way to make this work is to copy any composite
+% PostScript-level parameters to global VM. Currently we have strings
+% as well as arrays. For arrays, we also need to copy any contents that
+% are in VM. Also copying string parameters insures the contents won't
+% be changed. Also be careful to preserve 'executable' state.
+/.copyparam { % <value> .copyparam <value'>
+ dup type /arraytype eq {
+ .currentglobal true .setglobal exch
+ dup wcheck exch dup xcheck exch % original attributes
+ dup length array exch dup { % stack: destination_array original_array original_array
+ dup type /arraytype eq {
+ dup 2 index ne { % avoid recursion
+ .copyparam % recurse to handle composite array elements
+ } {
+ % this array self referenced, do it again (yuk!)
+ pop 1 index % get copy of destination array
+ } ifelse
+ } {
+ dup type /stringtype eq {
+ .copyparam
+ } if
+ }
+ ifelse 3 1 roll % keep arrays on top
+ } forall pop astore
+ exch { cvx } if % set executable state
+ exch not { readonly } if % set readonly attribute as original
+ exch .setglobal
+ } if
+ dup type /stringtype eq {
+ dup wcheck exch % save attr for setting readonly
+ .currentglobal true .setglobal
+ 1 index length string exch .setglobal
+ copy exch not { readonly } if
+ } if
+} .bind def
+
+% Some user parameters are managed entirely at the PostScript level.
+% We take care of that here.
+systemdict begin
+/psuserparams 48 dict def
+/getuserparam { % <name> getuserparam <value>
+ /userparams .systemvar 1 .argindex get exch pop
+} odef
+% Fill in userparams (created by the interpreter) with current values.
+mark .currentuserparams
+counttomark 2 idiv {
+ userparams 3 1 roll put
+} repeat pop
+/.definepsuserparam { % <name> <value> .definepsuserparam -
+ psuserparams 3 copy pop
+ type cvlit /.checkparamtype cvx 2 packedarray cvx put
+ userparams 3 1 roll put
+} .bind def
+end
+/currentuserparams { % - currentuserparams <dict>
+ /userparams .systemvar dup length dict .copydict
+} odef
+% We break out setuserparams into a separate procedure so that setvmxxx
+% can use it without affecting the command in case of an error.
+/.setuserparams2 {
+ % Check that we will be able to set the PostScript-level
+ % user parameters.
+ /setuserparams /psuserparams .systemvar .checksetparams
+ % Set the C-level user params. If this succeeds, we know that
+ % the password check succeeded.
+ dup .setuserparams
+ % Now set the PostScript-level params.
+ % The interpreter may have adjusted the values of some of the
+ % parameters, so we have to read them back.
+ dup {
+ /userparams .systemvar 2 index known {
+ psuserparams 2 index known not {
+ pop dup .getuserparam
+ } if
+ .copyparam
+ % special protection for the security related parameters
+ [ /PermitFileReading /PermitFileWriting /PermitFileControl ]
+ { 2 index eq { % force all strings to readonly but make sure the
+ % array is in the correct VM space (local/global).
+ currentglobal exch dup gcheck setglobal
+ dup length array exch { readonly exch } forall astore
+ exch setglobal
+ } if
+ } forall
+ % protect top level of parameters that we copied
+ dup type dup /arraytype eq exch /stringtype eq or { readonly } if
+ /userparams .systemvar 3 1 roll .forceput % userparams is read-only
+ } {
+ pop pop
+ } ifelse
+ } forall
+ % A context switch might have occurred during the above loop,
+ % causing the interpreter-level parameters to be reset.
+ % Set them again to the new values. From here on, we are safe,
+ % since a context switch will consult userparams.
+ .setuserparams
+} .bind def
+/setuserparams { % <dict> setuserparams -
+ .setuserparams2
+} .bind odef
+% Initialize user parameters managed here.
+/JobName () .definepsuserparam
+
+% Restore must restore the user parameters.
+% (Since userparams is in local VM, save takes care of saving them.)
+/restore { % <save> restore -
+ //restore /userparams .systemvar .setuserparams
+} .bind odef
+
+% The pssystemparams dictionary holds some system parameters that
+% are managed entirely at the PostScript level.
+systemdict begin
+currentdict /pssystemparams known not {
+ /pssystemparams 40 dict readonly def
+} if
+/getsystemparam { % <name> getsystemparam <value>
+ //pssystemparams 1 .argindex .knownget { exch pop } { .getsystemparam } ifelse
+} odef
+end
+/currentsystemparams { % - currentsystemparams <dict>
+ mark .currentsystemparams //pssystemparams { } forall .dicttomark
+} odef
+/setsystemparams { % <dict> setsystemparams -
+ % Check that we will be able to set the PostScript-level
+ % system parameters.
+ dup pop % check # of args
+ /SAFETY .systemvar /safe get {
+ % SAFER mode disallows some changes
+ [ /GenericResourceDir /FontResourceDir /GenericResourcePathSep ] {
+ 2 copy .knownget {
+ exch //pssystemparams exch .knownget {
+ ne { /setsystemparams /invalidaccess signalerror } if
+ } {
+ pop
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } forall
+ } if
+ /setsystemparams //pssystemparams mark exch {
+ type cvlit /.checkparamtype cvx 2 packedarray cvx
+ } forall .dicttomark .checksetparams
+ % Set the C-level system params. If this succeeds, we know that
+ % the password check succeeded.
+ dup .setsystemparams
+ % Now set the PostScript-level params. We must copy local strings
+ % into global VM.
+ dup
+ { //pssystemparams 2 index known
+ { % Stack: key newvalue
+ .copyparam
+ % protect top level parameters that we copied
+ dup type dup /arraytype eq exch /stringtype eq or { readonly } if
+ //pssystemparams 3 1 roll .forceput % pssystemparams is read-only
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ forall pop
+} .bind odef
+
+% Initialize the passwords.
+% NOTE: the names StartJobPassword and SystemParamsPassword are known to
+% the interpreter, and must be bound to noaccess strings.
+% The length of these strings must be max_password (iutil2.h) + 1.
+/StartJobPassword 65 string noaccess def
+/SystemParamsPassword 65 string noaccess def
+
+% Redefine cache parameter setting to interact properly with userparams.
+/setcachelimit {
+ { mark /MaxFontItem 2 .argindex .dicttomark setuserparams pop }
+ stopped
+ { /setcachelimit .systemvar $error /errorname get signalerror
+ } if
+} .bind odef
+/setcacheparams {
+ % The MaxFontCache parameter is a system parameter, which we might
+ % not be able to set. Fortunately, this doesn't matter, because
+ % system parameters don't have to be synchronized between this code
+ % and the VM.
+ counttomark 1 add copy setcacheparams
+ currentcacheparams % mark size lower upper
+ 3 -1 roll pop
+ /MinFontCompress 3 1 roll
+ /MaxFontItem exch
+ .dicttomark { setuserparams cleartomark } stopped {
+ /setcacheparams .systemvar $error /errorname get signalerror
+ } if
+} .bind odef
+
+% Add bogus user and system parameters to satisfy badly written PostScript
+% programs that incorrectly assume the existence of all the parameters
+% listed in Appendix C of the Red Book. Note that some of these may become
+% real parameters later: code near the end of gs_init.ps takes care of
+% removing any such parameters from ps{user,system}params.
+
+% psuserparams
+ /MaxFormItem 100000 .definepsuserparam
+ /MaxPatternItem 20000 .definepsuserparam
+ /MaxScreenItem 48000 .definepsuserparam
+ /MaxUPathItem 0 .definepsuserparam
+
+% File Access Permission parameters
+ .currentglobal true .setglobal
+ /.checkFilePermitparams {
+ type /arraytype eq {
+ currentuserparams /LockFilePermissions get {
+ 5 { pop } repeat /setuserparams /invalidaccess signalerror
+ }{
+ % in addition to validating the value, ensure the value is read/only
+ dup { readonly exch } forall
+ .currentglobal exch dup gcheck .setglobal length array exch .setglobal
+ astore readonly
+ }
+ ifelse
+ } {
+ 5 { pop } repeat /setuserparams /typecheck signalerror
+ }
+ ifelse
+ true
+ } .bind def
+% Initialize the File Permission access control to wide open
+% These will only be accessed via current/set userparams.
+% Values are a string containing multiple nul terminated path strings
+ /PermitFileReading dup [ (*) ] .definepsuserparam
+ psuserparams exch /.checkFilePermitparams load put
+ /PermitFileWriting dup [ (*) ] .definepsuserparam
+ psuserparams exch /.checkFilePermitparams load put
+ /PermitFileControl dup [ (*) ] .definepsuserparam
+ psuserparams exch /.checkFilePermitparams load put
+ .setglobal
+
+pssystemparams begin
+ /CurDisplayList 0 .forcedef
+ /CurFormCache 0 .forcedef
+ /CurInputDevice () .forcedef
+ /CurOutlineCache 0 .forcedef
+ /CurOutputDevice () .forcedef
+ /CurPatternCache 0 .forcedef
+ /CurUPathCache 0 .forcedef
+ /CurScreenStorage 0 .forcedef
+ /CurSourceList 0 .forcedef
+ /DoPrintErrors false .forcedef
+ /JobTimeout 0 .forcedef
+ /LicenseID (LN-001) .forcedef % bogus
+ /MaxDisplayList 140000 .forcedef
+ /MaxFormCache 100000 .forcedef
+ /MaxImageBuffer 524288 .forcedef
+ /MaxOutlineCache 65000 .forcedef
+ /MaxPatternCache 100000 .forcedef
+ /MaxUPathCache 300000 .forcedef
+ /MaxScreenStorage 84000 .forcedef
+ /MaxSourceList 25000 .forcedef
+ /PrinterName product .forcedef
+ /RamSize 4194304 .forcedef
+ /WaitTimeout 40 .forcedef
+end
+
+% Define the procedures for handling comment scanning. The names
+% %ProcessComment and %ProcessDSCComment are known to the interpreter.
+% These procedures take the file and comment string and file as operands.
+/.checkprocesscomment {
+ dup null eq {
+ pop true
+ } {
+ dup xcheck {
+ type dup /arraytype eq exch /packedarraytype eq or
+ } {
+ pop false
+ } ifelse
+ } ifelse
+} .bind def
+/ProcessComment null .definepsuserparam
+psuserparams /ProcessComment {.checkprocesscomment} put
+(%ProcessComment) cvn {
+ /ProcessComment getuserparam
+ dup null eq { pop pop pop } { exec } ifelse
+} bind def
+/ProcessDSCComment null .definepsuserparam
+psuserparams /ProcessDSCComment {.checkprocesscomment} put
+/.loadingfont false def
+(%ProcessDSCComment) cvn {
+ /ProcessDSCComment getuserparam
+ dup null eq .loadingfont or { pop pop pop } { exec } ifelse
+} bind def
+
+% ------ Miscellaneous ------ %
+
+(<<) cvn % - << -mark-
+ /mark load def
+% (>> is defined primitively.)
+/languagelevel 2 def
+% When running in Level 2 mode, this interpreter is supposed to be
+% compatible with Adobe version 2017.
+/version (2017) readonly def
+
+% If binary tokens are supported by this interpreter,
+% set an appropriate default binary object format.
+/setobjectformat where
+ { pop
+ /RealFormat getsystemparam (IEEE) eq { 1 } { 3 } ifelse
+ /ByteOrder getsystemparam { 1 add } if
+ setobjectformat
+ } if
+
+% Aldus Freehand versions 2.x check for the presence of the
+% setcolor operator, and if it is missing, substitute a procedure.
+% Unfortunately, the procedure takes different parameters from
+% the operator. As a result, files produced by this application
+% cause an error if the setcolor operator is actually defined
+% and 'bind' is ever used. Aldus fixed this bug in Freehand 3.0,
+% but there are a lot of files created by the older versions
+% still floating around. Therefore, at Adobe's suggestion,
+% we implement the following dreadful hack in the 'where' operator:
+% If the key is /setcolor, and
+% there is a dictionary named FreeHandDict, and
+% currentdict is that dictionary,
+% then "where" consults only that dictionary and not any other
+% dictionaries on the dictionary stack.
+.wheredict /setcolor {
+ /FreeHandDict .where {
+ /FreeHandDict get currentdict eq {
+ pop currentdict /setcolor known { currentdict true } { false } ifelse
+ } {
+ .where
+ } ifelse
+ } {
+ .where
+ } ifelse
+} bind put
+
+% ------ Virtual memory ------ %
+
+/currentglobal % - currentglobal <bool>
+ /currentshared load def
+/gcheck % <obj> gcheck <bool>
+ /scheck load def
+/setglobal % <bool> setglobal -
+ /setshared load def
+% We can make the global dictionaries very small, because they auto-expand.
+/globaldict currentdict /shareddict .knownget not { 4 dict } if def
+/GlobalFontDirectory SharedFontDirectory def
+
+% VMReclaim and VMThreshold are user parameters.
+/setvmthreshold { % <int> setvmthreshold -
+ mark /VMThreshold 2 .argindex .dicttomark .setuserparams2 pop
+} odef
+/vmreclaim { % <int> vmreclaim -
+ dup 0 gt {
+ .vmreclaim
+ } {
+ mark /VMReclaim 2 index .dicttomark .setuserparams2 pop
+ } ifelse
+} odef
+-1 setvmthreshold
+
+% ------ IODevices ------ %
+
+/.getdevparams where {
+ pop /currentdevparams { % <iodevice> currentdevparams <dict>
+ .getdevparams .dicttomark
+ } odef
+} if
+/.putdevparams where {
+ pop /setdevparams { % <iodevice> <dict> setdevparams -
+ dup type /dicttype ne { /setdevparams .systemvar /typecheck signalerror } if
+ mark 1 index { } forall counttomark 2 add index
+ .putdevparams pop pop
+ } odef
+} if
+
+% ------ Job control ------ %
+
+serverdict begin
+
+% We could protect the job information better, but we aren't attempting
+% (currently) to protect ourselves against maliciousness.
+
+/.jobsave //null def % top-level save object
+/.jobsavelevel 0 def % save depth of job (0 if .jobsave is null,
+ % 1 otherwise)
+/.adminjob //true def % status of current unencapsulated job
+
+end % serverdict
+
+% Because there may be objects on the e-stack created since the job save,
+% we have to clear the e-stack before doing the end-of-job restore.
+% We do this by executing a 2 .stop, which is caught by the 2 .stopped
+% in .runexec; we leave on the o-stack a procedure to execute aftewards.
+%
+%**************** The definition of startjob is not complete yet, since
+% it doesn't reset stdin/stdout.
+/.startnewjob { % <exit_bool> <password_level>
+ % .startnewjob -
+ serverdict /.jobsave get dup //null eq { pop } { restore } ifelse
+ exch {
+ % Unencapsulated job
+ serverdict /.jobsave //null put
+ serverdict /.jobsavelevel 0 put
+ serverdict /.adminjob 3 -1 roll 1 gt put
+ } {
+ % Encapsulated job
+ pop
+ serverdict /.jobsave save put
+ serverdict /.jobsavelevel 1 put
+ .userdict /quit { stop } .bind put % CET 28-10 requires a procedure
+ } ifelse
+ % Reset the interpreter state.
+ clear cleardictstack
+ initgraphics
+ //false setglobal
+ 2 vmreclaim % Make sure GC'ed memory is reclaimed and freed.
+} bind def
+/.startjob { % <exit_bool> <password> <finish_proc>
+ % .startjob <ok_bool>
+ vmstatus pop pop serverdict /.jobsavelevel get eq
+ 2 .argindex .checkpassword 0 gt and {
+ exch .checkpassword exch count 3 roll count 3 sub { pop } repeat
+ cleardictstack
+ % Reset the e-stack back to the 2 .stopped in .runexec,
+ % passing the finish_proc to be executed afterwards.
+ 2 .stop
+ } { % Password check failed
+ pop pop pop //false
+ } ifelse
+} odef
+/startjob { % <exit_bool> <password> startjob <ok_bool>
+ % This is a hack. We really need some way to indicate explicitly
+ % to the interpreter that we are under control of a job server.
+ 1 .argindex type /booleantype ne {
+ /startjob .systemvar /typecheck signalerror
+ } if
+ { .startnewjob //true } .startjob
+} odef
+
+% The procedure to undo the job encapsulation
+/.endjob {
+ clear cleardictstack
+ serverdict /.jobsave get dup //null eq { pop } { restore } ifelse
+ serverdict /.jobsave //null put
+ 2 vmreclaim % recover local and global VM
+} odef
+
+systemdict begin
+/quit { % - quit -
+ //systemdict begin serverdict /.jobsave get null eq
+ { end //quit }
+ { /quit .systemvar /invalidaccess /signalerror load end exec }
+ ifelse
+} bind odef
+end
+
+% We would like to define exitserver as a procedure, using the code
+% that the Red Book says is equivalent to it. However, since startjob
+% resets the exec stack, we can't do this, because control would never
+% proceed past the call on startjob if the exitserver is successful.
+% Instead, we need to construct exitserver out of pieces of startjob.
+
+serverdict begin
+
+/exitserver { % <password> exitserver -
+ //true exch { .startnewjob } .startjob not {
+ /exitserver /invalidaccess signalerror
+ } if
+} bind def
+
+end % serverdict
+
+% ------ Compatibility ------ %
+
+% In Level 2 mode, the following replace the definitions that gs_statd.ps
+% installs in statusdict and serverdict.
+% Note that statusdict must be allocated in local VM.
+% We don't bother with many of these yet.
+
+/.dict1 { exch mark 3 1 roll .dicttomark } bind def
+
+currentglobal false setglobal 25 dict exch setglobal begin
+currentsystemparams
+
+% The following do not depend on the presence of setpagedevice.
+/buildtime 1 index /BuildTime get def
+% Also define /buildtime in systemdict because Adobe does so and some fonts use it as ID
+systemdict /buildtime dup load put
+/byteorder 1 index /ByteOrder get def
+/checkpassword { .checkpassword 0 gt } bind def
+dup /DoStartPage known
+ { /dostartpage { /DoStartPage getsystemparam } bind def
+ /setdostartpage { /DoStartPage .dict1 setsystemparams } bind def
+ } if
+dup /StartupMode known
+ { /dosysstart { /StartupMode getsystemparam 0 ne } bind def
+ /setdosysstart { { 1 } { 0 } ifelse /StartupMode .dict1 setsystemparams } bind def
+ } if
+%****** Setting jobname is supposed to set userparams.JobName, too.
+/jobname { /JobName getuserparam } bind def
+/jobtimeout { /JobTimeout getuserparam } bind def
+/ramsize { /RamSize getsystemparam } bind def
+/realformat 1 index /RealFormat get def
+dup /PrinterName known
+ { /setprintername { /PrinterName .dict1 setsystemparams } bind def
+ } if
+/printername
+ { currentsystemparams /PrinterName .knownget not { () } if exch copy
+ } bind def
+currentuserparams /WaitTimeout known
+ { /waittimeout { /WaitTimeout getuserparam } bind def
+ } if
+
+% The following do require setpagedevice.
+/.setpagedevice where { pop } { (%END PAGEDEVICE) .skipeof } ifelse
+/defaulttimeouts
+ { currentsystemparams dup
+ /JobTimeout .knownget not { 0 } if
+ exch /WaitTimeout .knownget not { 0 } if
+ currentpagedevice /ManualFeedTimeout .knownget not { 0 } if
+ } bind def
+/margins
+ { currentpagedevice /Margins .knownget { exch } { [0 0] } ifelse
+ } bind def
+/pagemargin
+ { currentpagedevice /PageOffset .knownget { 0 get } { 0 } ifelse
+ } bind def
+/pageparams
+ { currentpagedevice
+ dup /Orientation .knownget { 1 and ORIENT1 { 1 xor } if } { 0 } ifelse exch
+ dup /PageSize get aload pop 3 index 0 ne { exch } if 3 2 roll
+ /PageOffset .knownget { 0 get } { 0 } ifelse 4 -1 roll
+ } bind def
+/setdefaulttimeouts
+ { exch mark /ManualFeedTimeout 3 -1 roll
+ /Policies mark /ManualFeedTimeout 1 .dicttomark
+ .dicttomark setpagedevice
+ /WaitTimeout exch mark /JobTimeout 5 2 roll .dicttomark setsystemparams
+ } bind def
+/.setpagesize { 2 array astore /PageSize .dict1 setpagedevice } bind def
+/setduplexmode { /Duplex .dict1 setpagedevice } bind def
+/setmargins
+ { exch 2 array astore /Margins .dict1 setpagedevice
+ } bind def
+/setpagemargin { 0 2 array astore /PageOffset .dict1 setpagedevice } bind def
+/setpageparams
+ { mark /PageSize 6 -2 roll
+ 4 index 1 and ORIENT1 { 1 } { 0 } ifelse ne { exch } if 2 array astore
+ /Orientation 5 -1 roll ORIENT1 { 1 xor } if
+ /PageOffset counttomark 2 add -1 roll 0 2 array astore
+ .dicttomark setpagedevice
+ } bind def
+/setresolution
+ { dup 2 array astore /HWResolution .dict1 setpagedevice
+ } bind def
+%END PAGEDEVICE
+
+% The following are not implemented yet.
+%manualfeed
+%manualfeedtimeout
+%pagecount
+%pagestackorder
+%setpagestackorder
+
+pop % currentsystemparams
+
+% Flag the current dictionary so it will be swapped when we
+% change language levels. (See zmisc2.c for more information.)
+/statusdict currentdict def
+
+currentdict end
+/statusdict exch .forcedef % statusdict is local, systemdict is global
+
+% The following compatibility operators are in systemdict. They are
+% defined here, rather than in gs_init.ps, because they require the
+% resource machinery.
+
+/devforall { % <proc> <scratch> devforall -
+ exch {
+ 1 index currentdevparams
+ /Type .knownget { /FileSystem eq } { false } ifelse
+ { exec } { pop pop } ifelse
+ } /exec load 3 packedarray cvx exch
+ (*) 3 1 roll /IODevice resourceforall
+} odef
+/devstatus { % <(%disk*%)> devstatus <searchable> <writable>
+ % <hasNames> <mounted> <removable> <searchOrder>
+ % <freePages> <size> true
+ % <string> devstatus false
+ dup length 5 ge {
+ dup 0 5 getinterval (%disk) eq {
+ dup /IODevice resourcestatus {
+ pop pop dup currentdevparams
+ dup /Searchable get
+ exch dup /Writeable get
+ exch dup /HasNames get
+ exch dup /Mounted get
+ exch dup /Removable get
+ exch dup /SearchOrder get
+ exch dup /Free get
+ exch /LogicalSize get
+ 9 -1 roll pop true
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+} odef
+
+% ------ Color spaces ------ %
+
+% Move setcolorspace, setcolor, and colorspacedict to level2dict
+level2dict /setcolorspace .cspace_util 1 index get put
+level2dict /setcolor .cspace_util 1 index get put
+level2dict /colorspacedict .cspace_util 1 index get put
+
+% Add the level 2 color spaces
+% DevicePixel is actually a LanguageLevel 3 feature; it is here for
+% historical reasons.
+%% Replace 1 (gs_devpxl.ps)
+(gs_devpxl.ps) runlibfile
+
+%% Replace 1 (gs_ciecs2.ps)
+(gs_ciecs2.ps) runlibfile
+
+%% Replace 1 (gs_indxd.ps)
+(gs_indxd.ps) runlibfile
+
+%% Replace 1 (gs_sepr.ps)
+(gs_sepr.ps) runlibfile
+
+%% Replace 1 (gs_patrn.ps)
+(gs_patrn.ps) runlibfile
+
+
+
+% ------ CIE color rendering ------ %
+
+% Define findcolorrendering and a default ColorRendering ProcSet.
+
+/findcolorrendering { % <intentname> findcolorrendering
+ % <crdname> <found>
+ % Adobe interpreters report /findcolorrendering (literal name), not the
+ % operator itself, if an error occurs in findcolorrendering.
+ /findcolorrendering {
+ /ColorRendering /ProcSet findresource
+ 1 .argindex dup type /nametype eq { .namestring } if (.) concatstrings
+ 1 index /GetPageDeviceName get exec dup type /nametype eq { .namestring } if (.) concatstrings
+ 2 index /GetHalftoneName get exec dup type /nametype eq { .namestring } if
+ concatstrings concatstrings cvn % stack: intentname procset crdname
+ dup /ColorRendering resourcestatus {
+ pop pop exch pop exch pop true
+ } {
+ pop /GetSubstituteCRD get exec false
+ } ifelse
+ } .errorexec
+} odef
+
+5 dict dup begin
+
+/GetPageDeviceName { % - GetPageDeviceName <name>
+ currentpagedevice dup /PageDeviceName .knownget {
+ exch pop dup null eq { pop /none } if
+ } {
+ pop /none
+ } ifelse
+} bind def
+
+/GetHalftoneName { % - GetHalftoneName <name>
+ currenthalftone /HalftoneName .knownget not { /none } if
+} bind def
+
+/GetSubstituteCRD { % <intentname> GetSubstituteCRD <crdname>
+ pop /DefaultColorRendering
+} bind def
+
+end
+% The resource machinery hasn't been activated, so just save the ProcSet
+% and let .fixresources finish the installation process.
+/ColorRendering exch def
+
+% Define setcolorrendering.
+
+/.colorrenderingtypes 5 dict def
+
+/setcolorrendering { % <crd> setcolorrendering -
+ dup /ColorRenderingType get
+ dup type /integertype ne {
+ /setcolorrendering .systemvar /typecheck signalerror
+ } if
+ //.colorrenderingtypes exch .knownget {
+ exec
+ } {
+ /setcolorrendering .systemvar /rangecheck signalerror
+ } ifelse
+} odef
+
+/.setcolorrendering1 where { pop } { (%END CRD) .skipeof } ifelse
+
+.colorrenderingtypes 1 {
+ dup .buildcolorrendering1 .setcolorrendering1
+} .bind put
+
+% Note: the value 101 in the next line must be the same as the value of
+% GX_DEVICE_CRD1_TYPE in gscrdp.h.
+.colorrenderingtypes 101 {
+ dup .builddevicecolorrendering1 .setdevicecolorrendering1
+} .bind put
+
+% sRGB output CRD, D65 white point
+mark
+/ColorRenderingType 1
+/RangePQR [ -0.5 2 -0.5 2 -0.5 2 ] readonly
+
+% Bradford Cone Space
+/MatrixPQR [ 0.8951 -0.7502 0.0389
+ 0.2664 1.7135 -0.0685
+ -0.1614 0.0367 1.0296] readonly
+
+/MatrixLMN [ 3.240449 -0.969265 0.055643
+ -1.537136 1.876011 -0.204026
+ -0.498531 0.041556 1.057229 ] readonly
+
+% Inverse sRGB gamma transform
+/EncodeABC [ { dup 0.00304 le
+ { 12.92321 mul }
+ { 1 2.4 div exp 1.055 mul 0.055 sub }
+ ifelse
+ } bind dup dup
+ ] readonly
+
+/WhitePoint [ 0.9505 1 1.0890 ] readonly % D65
+/BlackPoint [ 0 0 0 ] readonly
+
+% VonKries-like transform in Bradford Cone Space
+ /TransformPQR
+ % The implementations have been moved to C for performance.
+ [ { .TransformPQR_scale_WB0 } bind
+ { .TransformPQR_scale_WB1 } bind
+ { .TransformPQR_scale_WB2 } bind
+ ] readonly
+.dicttomark setcolorrendering
+
+%END CRD
+
+% Initialize a CIEBased color space for sRGB.
+/CIEsRGB [ /CIEBasedABC
+ mark
+ /DecodeLMN [ {
+ dup 0.03928 le { 12.92321 div } { 0.055 add 1.055 div 2.4 exp } ifelse
+ } bind dup dup ] readonly
+ /MatrixLMN [
+ 0.412457 0.212673 0.019334
+ 0.357576 0.715152 0.119192
+ 0.180437 0.072175 0.950301
+ ] readonly
+ /WhitePoint [0.9505 1.0 1.0890] readonly
+ .dicttomark readonly
+] readonly def
+
+% ------ Painting ------ %
+
+% A straightforward definition of execform that doesn't actually
+% do any caching.
+/.execform1 {
+ % This is a separate operator so that the stacks will be restored
+ % properly if an error occurs.
+ dup /Matrix get concat
+ dup /BBox get aload pop
+ exch 3 index sub exch 2 index sub rectclip
+ dup /PaintProc get
+ 1 index /Implementation known not {
+ 1 index dup /Implementation null .forceput readonly pop
+ } if
+ exec
+} .bind odef % must bind .forceput
+
+/.formtypes 5 dict
+ dup 1 /.execform1 load put
+def
+
+/execform { % <form> execform -
+ gsave {
+ dup /FormType get //.formtypes exch get exec
+ } stopped grestore { stop } if
+} odef
+
+/.patterntypes 5 dict
+ dup 1 /.buildpattern1 load put
+def
+
+/makepattern { % <proto_dict> <matrix> makepattern <pattern>
+ dup type /dicttype eq {
+ % "<dict> makepattern" reports /typecheck on Adobe
+ /makepattern .systemvar /typecheck signalerror
+ } if
+ //.patterntypes 2 .argindex /PatternType get .knownget not {
+ /makepattern .systemvar /rangecheck signalerror
+ } if
+ .currentglobal false .setglobal exch
+ % Stack: proto matrix global buildproc
+ 3 index dup length 1 add dict .copydict
+ % Stack: proto matrix global buildproc newdict
+ 3 index 3 -1 roll exec
+ % Stack: proto matrix global newdict instance
+ % Create an 'Implementation' entry for the pattern dict. The PRLM 3rd says
+ % this about the contents of Implementation: "The type and value of this
+ % entry are implementation-dependent." The CET (page 2 of 18-02f) expects
+ % that this entry be an array and that the second element of the array be a
+ % gstate. We put our pattern instance struct into the first element of the
+ % array.
+ 1 index /Implementation 3 -1 roll gstate 2 array astore
+ put % put Implementation into the pattern dict.
+ % Stack: proto matrix global newdict
+ readonly exch .setglobal exch pop exch pop
+} odef
+
+/setpattern { % [<comp1> ...] <pattern> setpattern -
+ { currentcolorspace 0 get /Pattern ne {
+ [ /Pattern currentcolorspace ] setcolorspace
+ } if setcolor
+ } stopped {
+ /setpattern .systemvar $error /errorname get signalerror
+ } if
+} odef
+
+% The following functions emulate the actions of findcmykcustomcolor and
+% setcustomcolor. These functions are described in Adobe's TN 5044. That
+% same document also says "The following “operators” are not defined in the
+% PostScript Language Reference Manual, but should be used as pseudo-operators
+% in your PostScript language output. Separation applications from Adobe
+% Systems and other vendors will redefine these convention operators to
+% separate your documents. Your application should conditionally define
+% procedures with these special names, as shown later in this document."
+%
+% We are providing these functions because we have found files created by
+% "QuarkXPress: pictwpstops filter 1.0" which produce bad shading dictionaries
+% if these operators are not defined.
+
+% Conditionally disable the TN 5044 psuedo-ops if NO_TN5044 specified
+/NO_TN5044 where { pop (%END TN 5044 psuedo-ops) .skipeof } if
+
+% TN 5044 does not define the contents of the array. We are simply putting
+% the values given into an array. This is consistent with what we see when
+% testing with Adobe Distiller 6.0.
+% <cyan> <magenta> <yellow> <black> <key> findcmykcustomcolor <array>
+/findcmykcustomcolor { 5 array astore } bind def
+
+% Build a tint transform function for use by setcustomcolor. This function
+% is for a Separation color space which has a DeviceCMYK base color space
+% (i.e. 1 input and 4 outputs). The input to buildcustomtinttransform is the
+% array created by findcmykcustomcolor. The resulting function is:
+% { dup cyan mul exch dup magenta mul exch dup yellow mul exch black mul }
+% Where cyan, magenta, yellow, and black are values from the array.
+/buildcustomtinttransform % <array> buildcustomtinttransform <function>
+{ [ /dup load 2 index 0 get /mul load
+ /exch load /dup load 6 index 1 get /mul load
+ /exch load /dup load 10 index 2 get /mul load
+ /exch load 13 index 3 get /mul load
+ ] cvx bind
+ exch pop % Remove the input array
+} bind def
+
+% Set a custom color based upon a tint and array which describes the custom
+% color. See findcmykcustomcolor. First we create and then set a Separation
+% colorspace. Then we set the specified color.
+% Note that older Adobe ProcSets apparently allow for 'null' as the tint
+% for some reason, so an alternate operational mode is tolerated:
+% null setcustomcolor -
+/setcustomcolor % <array> <tint> setcustomcolor -
+{ dup //null ne {
+ % Start building Separation colorspace
+ [ /Separation 3 index 4 get % Get separation name from array's key
+ /DeviceCMYK
+ 5 index //buildcustomtinttransform exec] % build the tint transform function
+ setcolorspace % Set the Separation color space as current
+ setcolor % Set the tint as the current color
+ pop % Remove the input array
+ }
+ { pop } % 'null' as the tint is ignored
+ ifelse
+} bind def
+
+% This proc is supposed to implement a version of overprinting. TN 5044 says
+% that this proc is not used by any shipping host-based application. We have
+% only found it being used in a proc set in files by Canvas from Deneba Systems.
+% Even their proc set does not actually do any overprinting. However their
+% files crash if this is not defined. Thus we have a copy of this proc but
+% we are simply checking for inputs being -1 and if so then we set the value
+% to 0.
+/setcmykoverprint {
+ 4 { dup -1 eq { pop 0 } if 4 1 roll } repeat setcmykcolor
+} bind def
+
+/separation_all [/Separation /All /DeviceCMYK { dup dup dup } bind ] readonly def
+
+% Collect the arguments into the image dictionary
+% <width> <height> <bits/sample> <matrix> <proc> args2dict <dict>
+/args2dict {
+ 10 dict begin
+ {1 0} 1
+ { /ImageType /Decode /DataSource /ImageMatrix /BitsPerComponent /Height /Width
+ } { exch def } forall
+ currentdict end
+} bind def
+
+% Prints (1-gray) on all separations.
+% <gray> setseparationgray -
+/setseparationgray {
+ //separation_all setcolorspace
+ 1 exch sub setcolor
+} bind def
+
+% Renders an image whose sample values specify the amount of the custom color.
+% <width> <height> <bits/sample> <matrix> <proc> <array> customcolorimage -
+/customcolorimage {
+ gsave
+ [ /Separation 2 index 4 get /DeviceCMYK 5 -1 roll //buildcustomtinttransform exec] setcolorspace
+ //args2dict exec image
+ grestore
+} bind def
+
+% Renders an image on all process and custom color plates.
+% <width> <height> <bits/sample> <matrix> <proc>
+/separationimage {
+ gsave
+ //separation_all setcolorspace
+ //args2dict exec image
+ grestore
+} bind def
+
+{ /buildcustomtinttransform /separation_all /args2dict }
+{ currentdict exch undef } forall
+
+%END TN 5044 psuedo-ops
+
+end % level2dict
diff --git a/Master/tlpkg/tlgs/lib/gs_lgo_e.ps b/Master/tlpkg/tlgs/lib/gs_lgo_e.ps
new file mode 100644
index 00000000000..19a3d2f3312
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_lgo_e.ps
@@ -0,0 +1,91 @@
+% Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_lgo_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Adobe "original" Latin glyph set.
+% This is not an Encoding strictly speaking, but we treat it like one.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/AdobeLatinOriginalGlyphEncoding mark
+
+/.notdef
+/A /AE /Aacute /Acircumflex /Adieresis /Agrave /Aring /Atilde
+/B
+/C /Ccedilla
+/D
+/E /Eacute /Ecircumflex /Edieresis /Egrave /Eth
+/F
+/G
+/H
+/I /Iacute /Icircumflex /Idieresis /Igrave
+/J
+/K
+/L /Lslash
+/M
+/N /Ntilde
+/O /OE /Oacute /Ocircumflex /Odieresis /Ograve /Oslash /Otilde
+/P
+/Q
+/R
+/S /Scaron
+/T /Thorn
+/U /Uacute /Ucircumflex /Udieresis /Ugrave
+/V
+/W
+/X
+/Y /Yacute /Ydieresis
+/Z /Zcaron
+/a /aacute /acircumflex /acute /adieresis /ae /agrave /ampersand /aring
+ /asciicircum /asciitilde /asterisk /at /atilde
+/b /backslash /bar /braceleft /braceright /bracketleft /bracketright /breve
+ /brokenbar /bullet
+/c /caron /ccedilla /cedilla /cent /circumflex /colon /comma /copyright
+ /currency
+/d /dagger /daggerdbl /degree /dieresis /divide /dollar /dotaccent /dotlessi
+/e /eacute /ecircumflex /edieresis /egrave /eight /ellipsis /emdash /endash
+ /equal /eth /exclam /exclamdown
+/f /fi /five /fl /florin /four /fraction
+/g /germandbls /grave /greater /guillemotleft /guillemotright /guilsinglleft
+ /guilsinglright
+/h /hungarumlaut /hyphen
+/i /iacute /icircumflex /idieresis /igrave
+/j
+/k
+/l /less /logicalnot /lslash
+/m /macron /minus /mu /multiply
+/n /nine /ntilde /numbersign
+/o /oacute /ocircumflex /odieresis /oe /ogonek /ograve /one /onehalf
+ /onequarter /onesuperior /ordfeminine /ordmasculine /oslash /otilde
+/p /paragraph /parenleft /parenright /percent /period /periodcentered
+ /perthousand /plus /plusminus
+/q /question /questiondown /quotedbl /quotedblbase /quotedblleft
+ /quotedblright /quoteleft /quoteright /quotesinglbase /quotesingle
+/r /registered /ring
+/s /scaron /section /semicolon /seven /six /slash /space /sterling
+/t /thorn /three /threequarters /threesuperior /tilde /trademark /two
+ /twosuperior
+/u /uacute /ucircumflex /udieresis /ugrave /underscore
+/v
+/w
+/x
+/y /yacute /ydieresis /yen
+/z /zcaron /zero
+
+counttomark packedarray exch pop
+8 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_lgx_e.ps b/Master/tlpkg/tlgs/lib/gs_lgx_e.ps
new file mode 100644
index 00000000000..cbc270b1d56
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_lgx_e.ps
@@ -0,0 +1,60 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_lgx_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Adobe "extension" Latin glyph set.
+% This is not an Encoding strictly speaking, but we treat it like one.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/AdobeLatinExtensionGlyphEncoding mark
+
+/Abreve /Amacron /Aogonek
+/Cacute /Ccaron /Dcaron
+/Dcroat /Delta
+/Ecaron /Edotaccent /Emacron /Eogonek
+/Gbreve /Gcommaaccent
+/Idotaccent /Imacron /Iogonek
+/Kcommaaccent
+/Lacute /Lcaron /Lcommaaccent
+/Nacute /Ncaron /Ncommaaccent
+/Ohungarumlaut /Omacron
+/Racute /Rcaron /Rcommaaccent
+/Sacute /Scedilla /Scommaaccent
+/Tcaron /Tcommaaccent
+/Uhungarumlaut /Umacron /Uogonek /Uring
+/Zacute /Zdotaccent
+/abreve /amacron /aogonek
+/cacute /ccaron /commaaccent
+/dcaron /dcroat
+/ecaron /edotaccent /emacron /eogonek
+/gbreve /gcommaaccent /greaterequal
+/imacron /iogonek
+/kcommaaccent
+/lacute /lcaron /lcommaaccent /lessequal /lozenge
+/nacute /ncaron /ncommaaccent /notequal
+/ohungarumlaut /omacron
+/partialdiff
+/racute /radical /rcaron /rcommaaccent
+/sacute /scedilla /scommaaccent /summation
+/tcaron /tcommaaccent
+/uhungarumlaut /umacron /uogonek /uring
+/zacute /zdotaccent
+
+counttomark packedarray exch pop
+9 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_ll3.ps b/Master/tlpkg/tlgs/lib/gs_ll3.ps
new file mode 100644
index 00000000000..a7d7df86737
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ll3.ps
@@ -0,0 +1,379 @@
+% Copyright (C) 1997, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ll3.ps 8111 2007-07-06 16:42:18Z alexcher $
+% Initialization file for PostScript LanguageLevel 3 functions.
+% This file must be loaded after gs_lev2.ps and gs_res.ps.
+% These definitions go into ll3dict or various ProcSets.
+% NOTE: the interpreter creates ll3dict.
+
+ll3dict begin
+
+% We need LanguageLevel 2 or higher in order to have setuserparams and
+% defineresource.
+languagelevel dup 2 .max .setlanguagelevel
+
+% ------ Idiom recognition ------ %
+
+/IdiomRecognition false .definepsuserparam
+
+% Modify `bind' to apply idiom recognition afterwards.
+/.bindscratch 128 string def
+% Note that since this definition of `bind' may get bound in,
+% it has to function properly even at lower language levels,
+% where IdiomRecognition may not be defined.
+/.bind_ { % <proc> .bind <proc'>
+ //.bind currentuserparams /IdiomRecognition
+ .knownget not { false } if {
+ (*) {
+ /IdiomSet findresource
+ false exch {
+ % Stack: proc false dummykey [template substitute]
+ exch pop dup 1 get exch 0 get
+ % Stack: proc false substitute template
+ 3 index .eqproc {
+ 2 index gcheck 1 index gcheck not and {
+ pop
+ } {
+ 3 -1 roll pop exch not exit
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } forall { exit } if
+ } //.bindscratch /IdiomSet resourceforall
+ } if
+} def
+/.bind /.bind_ load odef % note that .bind_ will get bound
+currentdict /.bindscratch .undef
+
+DELAYBIND NOBIND or not {
+% We can't just do
+% /bind /.bind load def
+% because then /bind load == prints --.bind-- .
+ /bind {//.bind_ exec} odef
+} if
+currentdict /.bind_ undef
+
+% ------ HalftoneTypes 6, 10, 16 and HalftoneMode ------ %
+
+% This code depends on an internal HalftoneType 7 with the following keys:
+% Width, Height, Width2, Height2, TransferFunction:
+% as for HalftoneType 16.
+% Thresholds: a string or bytestring holding the thresholds,
+% (Width x Height + Width2 x Height2) x BitsPerSample / 8 bytes,
+% as for HalftoneType 16 except that the samples may be either
+% 8 or 16 bits wide.
+% BitsPerSample: 8 or 16.
+
+% Note that this HalftoneType never appears in halftone dictionaries given
+% to sethalftone, only as a component in those given to .sethalftone5,
+% so its numeric value can be chosen ad lib as long as it differs from the
+% other values that are legal in component dictionaries for .sethalftone5
+% (currently only 1 and 3).
+
+/.makehalftone7 { % <dict> <dict> <source> <Width> <Height>
+ % (<Width2> <Height2> | null) <BPS> .makehalftone7
+ % <setdict> <dict5> { .sethalftone5 }
+ 8 dict begin
+ /HalftoneType 7 def
+ /BitsPerSample exch def
+ dup null eq {
+ pop 0
+ } {
+ /Height2 1 index def /Width2 2 index def mul
+ } ifelse 3 1 roll
+ /Height 1 index def
+ /Width 2 index def
+ mul add BitsPerSample 8 idiv mul .bigstring
+ % Stack: dict dict source str
+ dup type /stringtype eq { readstring } { .readbytestring } ifelse
+ not { /sethalftone .systemvar /rangecheck signalerror exit } if
+ readonly /Thresholds exch def
+ /TransferFunction .knownget { /TransferFunction exch def } if
+ % If the original Thresholds was a file, replace it with
+ % a new one.
+ dup /Thresholds get type /filetype eq {
+ dup /Thresholds [ Thresholds ] cvx 0 () .subfiledecode put
+ } if
+ mark /HalftoneType 5 /Default currentdict end .dicttomark
+ { .sethalftone5 }
+} bind def
+
+/.bigstring { % <size> .bigstring <string|bytestring>
+ dup 65400 gt { .bytestring } { string } ifelse
+} bind def
+
+/.readbytestring { % <source> <bytestring> .readbytestring
+ % <bytestring> <filled>
+ % Note that since bytestrings don't implement getinterval,
+ % if filled is false, there is no way to tell how much
+ % was read.
+ true exch 0 1 2 index length 1 sub {
+ % Stack: source true str index
+ 3 index read not { pop exch not exch exit } if
+ 3 copy put pop pop
+ } for 3 -1 roll pop exch
+} bind def
+
+/.sethalftone6 { % <dict> <dict> .sethalftone6 <setdict> <dict5>
+ % { .sethalftone5 }
+ % Keys: Width, Height, Thresholds, T'Function
+ dup /Thresholds get
+ 1 index /Width get 2 index /Height get
+ null 8 .makehalftone7
+} bind def
+
+/.sethalftone10 { % <dict> <dict> .sethalftone10 <setdict> <dict5>
+ % { .sethalftone5 }
+ % Keys: Xsquare, Ysquare, Thresholds, T'Function
+ % Note that this is the only one of these three HalftoneTypes
+ % that allows either a file or a string for Thresholds.
+ dup /Thresholds get dup type /stringtype eq { 0 () .subfiledecode } if
+ 1 index /Xsquare get dup 3 index /Ysquare get dup
+ 8 .makehalftone7
+} bind def
+
+/.sethalftone16 { % <dict> <dict> .sethalftone16 <setdict> <dict5>
+ % { .sethalftone5 }
+ % Keys: Width, Height, Width2, Height2,
+ % Thresholds, T'Function
+ dup /Thresholds get
+ 1 index /Width get 2 index /Height get
+ 3 index /Width2 .knownget { % 2-rectangle case
+ 4 index /Height2 get
+ } { % 1-rectangle case
+ null
+ } ifelse 16 .makehalftone7
+} bind def
+
+.halftonetypes begin
+ 6 /.sethalftone6 load def
+ 10 /.sethalftone10 load def
+ 16 /.sethalftone16 load def
+end
+
+% Redefine the halftone-setting operators to honor HalftoneMode.
+/setcolorscreen {
+ /HalftoneMode getuserparam 0 eq {
+ //setcolorscreen
+ } {
+ 12 { pop } repeat .getdefaulthalftone
+ { //sethalftone }
+ { .setdefaulthalftone }
+ ifelse
+ } ifelse
+} odef
+/setscreen {
+ /HalftoneMode getuserparam 0 eq {
+ //setscreen
+ } {
+ pop pop pop .getdefaulthalftone
+ { //sethalftone }
+ { .setdefaulthalftone }
+ ifelse
+ } ifelse
+} odef
+/sethalftone {
+ /HalftoneMode getuserparam 0 eq {
+ //sethalftone
+ } {
+ gsave //sethalftone grestore
+ .getdefaulthalftone
+ { //sethalftone }
+ { .setdefaulthalftone }
+ ifelse
+ } ifelse
+} odef
+
+% ------ ImageTypes 3 and 4 (masked images) ------ %
+
+.imagetypes
+ dup 3 /.image3 load put
+ dup 4 /.image4 load put
+% We also detect ImageType 103 here: it isn't worth making a separate file
+% just for this.
+ /.image3x where { pop dup 103 /.image3x load put } if
+pop
+
+% ------ Functions ------ %
+
+% Define the FunctionType resource category.
+/Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /integertype def
+/FunctionType currentdict end /Category defineresource pop
+
+{0 2 3} { dup /FunctionType defineresource pop } forall
+
+% ------ Smooth shading ------ %
+
+% Define the ShadingType resource category.
+/Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /integertype def
+/ShadingType currentdict end /Category defineresource pop
+
+systemdict /.shadingtypes mark % not ll3dict
+ 1 /.buildshading1 load
+ 2 /.buildshading2 load
+ 3 /.buildshading3 load
+ 4 /.buildshading4 load
+ 5 /.buildshading5 load
+ 6 /.buildshading6 load
+ 7 /.buildshading7 load
+.dicttomark put
+
+systemdict /.reuseparamdict mark
+ /Intent 2
+ /AsyncRead false
+ /CloseSource true
+.dicttomark readonly put
+/.buildshading { % <shadingdict> .buildshading <shading>
+ dup rcheck not {
+ % Adobe seems to access ColorSpace first and CET 12-14c checks this.
+ /$error .systemvar /errorinfo [ /ColorSpace null ] put
+ /shfill .systemvar /invalidaccess signalerror
+ } if
+ % Unfortunately, we always need to make the DataSource reusable,
+ % because if clipping is involved, even shfill may need to read
+ % the source data multiple times. If it weren't for this,
+ % we would only need to create a reusable stream if the ultimate
+ % source of the data is a procedure (since the library can't
+ % suspend shading to do a procedure callout).
+ dup /DataSource .knownget {
+ dup type /filetype eq {
+ //.reuseparamdict /ReusableStreamDecode filter
+ % Copy the dictionary to replace the DataSource, but make sure the
+ % copy is in the same VM as the original.
+ .currentglobal 2 index gcheck .setglobal
+ % Stack: shdict rsdfile saveglobal
+ 2 index dup length dict copy exch .setglobal
+ dup /DataSource 4 -1 roll put exch pop
+ } {
+ pop
+ } ifelse
+ } if
+ % The .buildshading operators use the current color space
+ % for ColorSpace.
+ dup /ShadingType .knownget not { % error handling for CET 12-14b conformance
+ /$error .systemvar /errorinfo [ /ShadingType //null ] put
+ /shfill .systemvar /undefined signalerror
+ } if
+ dup type /integertype ne {
+ /$error .systemvar /errorinfo [ /ShadingType 4 index ] put
+ /shfill .systemvar /typecheck signalerror
+ } if
+ //.shadingtypes 1 index .knownget not {
+ /$error .systemvar /errorinfo [ /ShadingType 4 index ] put
+ /shfill .systemvar /rangecheck signalerror
+ } if
+ exch pop 1 index /ColorSpace .knownget {
+ { setcolorspace } stopped {
+ /$error .systemvar /errorinfo [ /ColorSpace 4 index ] put
+ /shfill .systemvar /$error .systemvar /errorname get signalerror
+ } if
+ exec
+ } {
+ /$error .systemvar /errorinfo [ /ColorSpace //null ] put
+ /shfill .systemvar /undefined signalerror
+ } ifelse
+} bind def
+systemdict /.reuseparamdict undef
+
+/.buildpattern2 { % <template> <matrix> .buildpattern2
+ % <template> <pattern>
+ % We want to build the pattern without doing gsave/grestore,
+ % since we want it to load the CIE caches.
+ 1 index /Shading get
+ mark currentcolor currentcolorspace
+ counttomark 4 add -3 roll mark 4 1 roll
+ % Stack: -mark- ..color.. cspace -mark- template matrix shadingdict
+ { .buildshading } stopped {
+ cleartomark setcolorspace setcolor pop stop
+ } if
+ .buildshadingpattern
+ 3 -1 roll pop counttomark 1 add 2 roll setcolorspace setcolor pop
+} bind def
+
+.patterntypes
+ 2 /.buildpattern2 load put
+
+/shfill { % <shadingdict> shfill -
+ % Currently, .shfill requires that the color space
+ % in the pattern be the current color space.
+ % Disable overprintmode for shfill
+ { dup gsave 0 .setoverprintmode .buildshading .shfill } stopped
+ grestore {
+ /$error .systemvar /errorinfo 2 copy known {
+ pop pop
+ } {
+ //null put % CET 12-14c
+ } ifelse
+ stop
+ } if
+ pop
+} odef
+
+% Establish an initial smoothness value that matches Adobe RIPs.
+0.02 setsmoothness
+
+% ------ DeviceN color space ------ %
+
+%% Replace 1 (gs_ciecs3.ps)
+(gs_ciecs3.ps) runlibfile
+
+%% Replace 1 (gs_devn.ps)
+(gs_devn.ps) runlibfile
+
+% ------ Miscellaneous ------ %
+
+% Make the setoverprintmode and currentoverprintmode operators visible (3015)
+% Because of the requirements of PDF, the .currentoverprintmode and
+% .setoverprintmode operators have integer parameters. Thus we need to
+% convert the Postscript bool parameters to integers.
+%
+/setoverprintmode % bool setoverprint -
+{
+ { 1 } { 0 } ifelse % convert bool to integer
+ //.setoverprintmode
+} odef
+
+/currentoverprintmode % - currentoverprintmode bool
+{
+ //.currentoverprintmode
+ 0 ne % convert integers to bool
+} odef
+
+% Define additional user and system parameters.
+/HalftoneMode 0 .definepsuserparam
+/MaxSuperScreen 1016 .definepsuserparam
+pssystemparams begin % read-only, so use .forcedef
+ /MaxDisplayAndSourceList 160000 .forcedef
+end
+
+% Define the IdiomSet resource category.
+{ /IdiomSet } {
+ /Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /dicttype def
+ currentdict end /Category defineresource pop
+} forall
+
+/languagelevel 3 def
+% When running in LanguageLevel 3 mode, this interpreter is supposed to be
+% compatible with Adobe version 3010.
+/version (3010) readonly def
+
+.setlanguagelevel
+
+end % ll3dict
diff --git a/Master/tlpkg/tlgs/lib/gs_mex_e.ps b/Master/tlpkg/tlgs/lib/gs_mex_e.ps
new file mode 100644
index 00000000000..94711299faf
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_mex_e.ps
@@ -0,0 +1,66 @@
+% Copyright (C) 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_mex_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the MacExpert encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/MacExpertEncoding
+% \00x
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% \04x
+ /space /exclamsmall /Hungarumlautsmall /centoldstyle /dollaroldstyle /dollarsuperior /ampersandsmall /Acutesmall
+ /parenleftsuperior /parenrightsuperior /twodotenleader /onedotenleader /comma /hyphen /period /fraction
+ /zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle /fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle
+ /eightoldstyle /nineoldstyle /colon /semicolon /.notdef /threequartersemdash /.notdef /questionsmall
+% \10x
+ /.notdef /.notdef /.notdef /.notdef /Ethsmall /.notdef /.notdef /onequarter
+ /onehalf /threequarters /oneeighth /threeeighths /fiveeighths /seveneighths /onethird /twothirds
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ff /fi
+ /fl /ffi /ffl /parenleftinferior /.notdef /parenrightinferior /Circumflexsmall /hypheninferior
+% \14x
+ /Gravesmall /Asmall /Bsmall /Csmall /Dsmall /Esmall /Fsmall /Gsmall
+ /Hsmall /Ismall /Jsmall /Ksmall /Lsmall /Msmall /Nsmall /Osmall
+ /Psmall /Qsmall /Rsmall /Ssmall /Tsmall /Usmall /Vsmall /Wsmall
+ /Xsmall /Ysmall /Zsmall /colonmonetary /onefitted /rupiah /Tildesmall /.notdef
+% \20x
+ /.notdef /asuperior /centsuperior /.notdef /.notdef /.notdef /.notdef /Aacutesmall
+ /Agravesmall /Acircumflexsmall /Adieresissmall /Atildesmall /Aringsmall /Ccedillasmall /Eacutesmall /Egravesmall
+ /Ecircumflexsmall /Edieresissmall /Iacutesmall /Igravesmall /Icircumflexsmall /Idieresissmall /Ntildesmall /Oacutesmall
+ /Ogravesmall /Ocircumflexsmall /Odieresissmall /Otildesmall /Uacutesmall /Ugravesmall /Ucircumflexsmall /Udieresissmall
+% \24x
+ /.notdef /eightsuperior /fourinferior /threeinferior /sixinferior /eightinferior /seveninferior /Scaronsmall
+ /.notdef /centinferior /twoinferior /.notdef /Dieresissmall /.notdef /Caronsmall /osuperior
+ /fiveinferior /.notdef /commainferior /periodinferior /Yacutesmall /.notdef /dollarinferior /.notdef
+ /.notdef /Thornsmall /.notdef /nineinferior /zeroinferior /Zcaronsmall /AEsmall /Oslashsmall
+% \30x
+ /questiondownsmall /oneinferior /Lslashsmall /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /Cedillasmall /.notdef /.notdef /.notdef /.notdef /.notdef /OEsmall
+ /figuredash /hyphensuperior /.notdef /.notdef /.notdef /.notdef /exclamdownsmall /.notdef
+ /Ydieresissmall /.notdef /onesuperior /twosuperior /threesuperior /foursuperior /fivesuperior /sixsuperior
+% \34x
+ /sevensuperior /ninesuperior /zerosuperior /.notdef /esuperior /rsuperior /tsuperior /.notdef
+ /.notdef /isuperior /ssuperior /dsuperior /.notdef /.notdef /.notdef /.notdef
+ /.notdef /lsuperior /Ogoneksmall /Brevesmall /Macronsmall /bsuperior /nsuperior /msuperior
+ /commasuperior /periodsuperior /Dotaccentsmall /Ringsmall /.notdef /.notdef /.notdef /.notdef
+256 packedarray
+6 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_mgl_e.ps b/Master/tlpkg/tlgs/lib/gs_mgl_e.ps
new file mode 100644
index 00000000000..cb6cefe9795
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_mgl_e.ps
@@ -0,0 +1,64 @@
+% Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_mgl_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Macintosh standard glyph encoding vector.
+% This is not an Encoding strictly speaking, but we treat it like one.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/MacRomanEncoding .findencoding
+/MacGlyphEncoding
+ /.notdef /.null /CR
+% 3
+4 index 32 95 getinterval aload pop
+% 98
+99 index 128 45 getinterval aload pop
+% 143
+ /notequal /AE
+ /Oslash /infinity /plusminus /lessequal /greaterequal
+ /yen /mu1 /partialdiff /summation /product
+ /pi /integral /ordfeminine /ordmasculine /Ohm
+ /ae /oslash /questiondown /exclamdown /logicalnot
+ /radical /florin /approxequal /increment /guillemotleft
+ /guillemotright /ellipsis /nbspace
+% 173
+174 index 203 12 getinterval aload pop
+ /lozenge
+% 186
+187 index 216 24 getinterval aload pop
+ /applelogo
+% 211
+212 index 241 7 getinterval aload pop
+ /overscore
+% 219
+220 index 249 7 getinterval aload pop
+% 226
+ /Lslash /lslash /Scaron /scaron
+ /Zcaron /zcaron /brokenbar /Eth /eth
+ /Yacute /yacute /Thorn /thorn /minus
+ /multiply /onesuperior /twosuperior /threesuperior /onehalf
+ /onequarter /threequarters /franc /Gbreve /gbreve
+ % The TrueType documentation says the next glyph is named
+ % Idot, but the Adobe standard name for this glyph is
+ % Idotaccent.
+ /Idotaccent /Scedilla /scedilla /Cacute /cacute
+ /Ccaron /ccaron /dmacron
+260 -1 roll pop % delete MacRomanEncoding
+258 packedarray
+7 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_mro_e.ps b/Master/tlpkg/tlgs/lib/gs_mro_e.ps
new file mode 100644
index 00000000000..ed44fbd7bb9
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_mro_e.ps
@@ -0,0 +1,61 @@
+% Copyright (C) 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_mro_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the MacRoman encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/MacRomanEncoding
+StandardEncoding 0 39 getinterval aload pop
+ /quotesingle
+StandardEncoding 40 56 getinterval aload pop
+ /grave
+StandardEncoding 97 31 getinterval aload pop
+% \20x
+ /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute
+ /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave
+ /ecircumflex /edieresis /iacute /igrave
+ /icircumflex /idieresis /ntilde /oacute
+ /ograve /ocircumflex /odieresis /otilde
+ /uacute /ugrave /ucircumflex /udieresis
+% \24x
+ /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls
+ /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash
+ /.notdef /plusminus /.notdef /.notdef /yen /mu /.notdef /.notdef
+ /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash
+% \30x
+ /questiondown /exclamdown /logicalnot /.notdef
+ /florin /.notdef /.notdef /guillemotleft
+ /guillemotright /ellipsis /space /Agrave /Atilde /Otilde /OE /oe
+ /endash /emdash /quotedblleft /quotedblright
+ /quoteleft /quoteright /divide /.notdef
+ % NOTE: Euro should replace currency, but the PDF 1.3 documentation
+ % explicitly says it does not.
+ /ydieresis /Ydieresis /fraction /currency
+ /guilsinglleft /guilsinglright /fi /fl
+% \34x
+ /daggerdbl /periodcentered /quotesinglbase /quotedblbase
+ /perthousand /Acircumflex /Ecircumflex /Aacute
+ /Edieresis /Egrave /Iacute /Icircumflex
+ /Idieresis /Igrave /Oacute /Ocircumflex
+ /.notdef /Ograve /Uacute /Ucircumflex
+ /Ugrave /dotlessi /circumflex /tilde
+ /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
+256 packedarray
+5 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_patrn.ps b/Master/tlpkg/tlgs/lib/gs_patrn.ps
new file mode 100644
index 00000000000..6f1e9dd5e57
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_patrn.ps
@@ -0,0 +1,309 @@
+% Copyright (C) 2001, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_patrn.ps 7186 2006-11-10 12:18:42Z alexcher $
+% Pattern color space method dictionary.
+
+
+% verify that Pattern color spaces are supported
+/.setpatternspace where
+ { pop }
+ { currentfile closefile }
+ifelse
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+%
+% <name1 | array1> get_pattern_base_cspace <null | name2 | array2>
+%
+% If the Pattern color space has a base color space, push that base
+% color space onto the stack. Otherwise, push a null object.
+%
+/get_pattern_base_cspace
+ {
+ dup type /nametype eq
+ { pop //null }
+ {
+ dup length 1 gt
+ { 1 get }
+ { pop //null }
+ ifelse
+ }
+ ifelse
+ }
+bind def
+
+
+%
+% <dict> has_base_color <bool>
+%
+% Determine if a Pattern "color" includes a base color. This is the case
+% if the pattern dictionary has PatternType 1 and PaintType 2.
+%
+/has_base_color
+ {
+ dup //null eq
+ { pop //false }
+ {
+ dup /PatternType get 1 eq
+ { /PaintType get 2 eq }
+ { pop //false }
+ ifelse
+ }
+ ifelse
+ }
+bind def
+
+%
+% <c1> ... <cn> <pattern_dict> <pattern_cspace>
+% get_pattern_base_color
+% <c1> ... <cn> <base_cspace> true
+% or
+% <?c1?> ... <?cn?> <dict> <pattern>
+% get_pattern_base_color
+% false
+%
+% If a pattern dictionary has a base color, set up that base color and
+% color space, and push true. Otherwise, just push false. It is assumed
+% that if the pattern includes a base color, the Pattern color space
+% has a base color space.
+%
+/get_pattern_base_color
+ {
+ exch //has_base_color exec
+ { 1 get //true }
+ { pop //false }
+ ifelse
+ }
+bind def
+
+
+colorspacedict
+/Pattern
+ mark
+ /cs_potential_indexed_base false
+ /cs_potential_pattern_base false
+ /cs_potential_alternate false
+ /cs_potential_icc_alternate false
+
+ %
+ % We employ the same convention for describing the number of
+ % components in a Pattern color space as is used by the graphic
+ % library. For pattern spaces with no underlying color space,
+ % the result is -1. If a Pattern space has an underlying color
+ % space with n components, the result is -(n + 1).
+ %
+ /cs_get_ncomps
+ {
+ //get_pattern_base_cspace exec dup //null eq
+ { pop 0 }
+ //.cs_get_ncomps
+ ifelse
+ 1 add neg
+ }
+ bind
+
+ % there is no "range" for a Pattern color space
+ /cs_get_range { {} cvlit } bind
+
+ /cs_get_default_color { pop //null } bind
+
+ /cs_get_currentgray
+ {
+ //get_pattern_base_color exec
+ //.cs_get_currentgray
+ { 0. }
+ ifelse
+ }
+ bind
+
+ /cs_get_currentrgb
+ {
+ //get_pattern_base_color exec
+ //.cs_get_currentrgb
+ { 0. 0. 0. }
+ ifelse
+ }
+ bind
+
+ /cs_get_currentcmyk
+ {
+ //get_pattern_base_color exec
+ //.cs_get_currentcmyk
+ { 0. 0. 0. 1. }
+ ifelse
+ }
+ bind
+
+ /cs_validate
+ {
+ dup //get_pattern_base_cspace exec dup //null eq
+ { pop }
+ {
+ //.cs_validate exec //.cs_potential_pattern_base exec not
+ //setcspace_rangecheck
+ if
+ }
+ ifelse
+ }
+ bind
+
+ % substitute the base space if appropriate
+ /cs_substitute
+ {
+ dup //get_pattern_base_cspace exec dup //null eq
+ { pop dup }
+ {
+ //.cs_substitute exec 2 copy eq
+ { pop pop dup }
+ {
+ % retain only the new alternate space
+ exch pop
+
+ % build all new structures in local VM
+ .currentglobal 3 1 roll //false .setglobal
+
+ % construct a new array and insert the new base color space
+ 1 index dup length array copy dup 1 4 -1 roll put
+
+ % restore VM mode
+ 3 -1 roll .setglobal
+ }
+ ifelse
+ }
+ ifelse
+ }
+ bind
+
+ /cs_prepare {}
+
+ %
+ % Install the current color space.
+ %
+ % The current Ghostscript color space implementation requires that
+ % color spaces that provide a base or alternative color space set
+ % that base/alternative color space to be the current color space
+ % before attempting to set the original color space.
+ %
+ % In principle, the only errors that are possible for .setpatternspace
+ % (given that setcolorspace itself is legal) are limitcheck and/or
+ % VMerror. The Ghostscript implementation allows a few others, so
+ % we go through the full code to restore the current color space in
+ % the event of an error.
+ %
+ /cs_install
+ {
+ dup //get_pattern_base_cspace exec dup //null eq
+ {
+ pop
+ dup type /nametype eq
+ { pop { /Pattern } cvlit }
+ if
+ .setpatternspace
+ }
+ {
+ % save the current color space
+ currentcolorspace
+
+ % set the base color space as the current color space
+ exch //forcesetcolorspace
+
+ % set the pattern color space; restore the earlier space on error
+ mark 2 index
+ { .setpatternspace }
+ stopped
+ { cleartomark setcolorspace stop }
+ { pop pop pop }
+ ifelse
+ }
+ ifelse
+ }
+ bind
+
+
+ %
+ % Pattern dictionaries generated by makepattern will include an
+ % Implementation entry whose value is an internal data structure.
+ % Such structures are given executable type names that match their
+ % internal structure names. The names used for pattern
+ % implementations are gs_pattern1_instance_t and
+ % gs_pattern2_instance_t. It is unfortunate to have to expose such
+ % internal names at this level, but not easily avoided.
+ % For CPSI/CET compatibility we 'hide' this inside an array
+ %
+ /cs_prepare_color
+ {
+ % verify that the topmost operand is a pattern dictionary
+ 1 index dup type /dicttype ne
+ {
+ //null ne
+ //setcspace_typecheck
+ if
+ pop
+ }
+ {
+ dup /Implementation .knownget
+ { 0 get type dup dup
+ /gs_pattern1_instance_t ne exch /gs_pattern2_instance_t ne and
+ exch xcheck not
+ or
+ //setcspace_typecheck
+ if
+ }
+ //setcspace_typecheck
+ ifelse
+
+ % check if base color space operands are present
+ dup /PatternType get 1 eq
+ {
+ /PaintType get 2 eq
+ {
+ % verify that a base color space exists
+ //get_pattern_base_cspace exec dup //null eq
+ //setcspace_rangecheck
+ if
+ //.cs_get_ncomps exec
+ % We cannot use check_num_stack since it does not
+ % properly clean the stack. The CET test 09-47n.ps has
+ % a very bad test case with a faulty setpattern call with
+ % no color values. To properly handle that case and to
+ % ensure that the stack is properly cleaned, we are
+ % testing the type of the color values inline.
+ 1 exch 1 exch
+ {
+ index type dup /integertype ne exch /realtype ne and
+ //setcolor_typecheck
+ if
+ }
+ for
+ }
+ { pop }
+ ifelse
+ }
+ { pop pop }
+ ifelse
+ }
+ ifelse
+ }
+ bind
+
+ /cs_complete_setcolor //pop_1
+
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_pdf_e.ps b/Master/tlpkg/tlgs/lib/gs_pdf_e.ps
new file mode 100644
index 00000000000..6ea63a66922
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_pdf_e.ps
@@ -0,0 +1,44 @@
+% Copyright (C) 1994, 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_pdf_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the PDFDoc encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/PDFDocEncoding
+ISOLatin1Encoding 0 24 getinterval aload pop
+ /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde
+ISOLatin1Encoding 32 7 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 31 getinterval aload pop
+% \20x
+ /bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction
+ /guilsinglleft /guilsinglright /minus /perthousand
+ /quotedblbase /quotedblleft /quotedblright /quoteleft
+ /quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron
+ /Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron /.notdef
+% \24x
+ /Euro
+ISOLatin1Encoding 161 12 getinterval aload pop
+ /.notdef
+ISOLatin1Encoding 174 82 getinterval aload pop
+256 packedarray .defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_pdfwr.ps b/Master/tlpkg/tlgs/lib/gs_pdfwr.ps
new file mode 100644
index 00000000000..494fb30cec5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_pdfwr.ps
@@ -0,0 +1,834 @@
+% Copyright (C) 1996, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_pdfwr.ps 7814 2007-04-01 19:14:49Z leonardo $
+% PDF writer additions to systemdict.
+
+% This file should be included iff the pdfwrite "device" is included
+% in the executable.
+
+% ---------------- Predefined configurations ---------------- %
+
+% These correspond to the 4 predefined settings in Acrobat Distiller 5,
+% plus a "default" setting that doesn't downsample images.
+
+/.a2112 [2 1 1 2] readonly def
+/.a1111 [1 1 1 1] readonly def
+/.standardfonts [
+ /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique
+ /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique
+ /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic
+ /Symbol /ZapfDingbats
+] readonly def
+
+% Parameters common to all non-default configurations.
+% Note that the default configuration overrides a few of these.
+/.defaultImageDict mark
+ /QFactor 0.9 /Blend 1
+ /HSamples .a2112 /VSamples .a2112
+.dicttomark readonly def
+/.distillercommon mark
+ /AlwaysEmbed []
+ /AntiAliasColorImages false
+ /AntiAliasGrayImages false
+ /AntiAliasMonoImages false
+ /ASCII85EncodePages false
+ /AutoFilterColorImages true
+ /AutoFilterGrayImages true
+ /AutoPositionEPSFiles true
+ /Binding /Left
+ /CalCMYKProfile (None) % (U.S. Web Coated (SWOP) v2)
+ /CalGrayProfile (None) % (Dot Gain 20%)
+ /CalRGBProfile (None) % (sRGB IEC61966-2.1)
+ /ColorImageDepth -1
+ /ColorImageDict .defaultImageDict
+ /ColorImageDownsampleThreshold 1.5
+ /ColorImageFilter /DCTEncode
+ /CompressPages true
+ /ConvertImagesToIndexed true
+ /DefaultRenderingIntent /Default
+ /DetectBlends true
+ /DownsampleColorImages true
+ /DownsampleGrayImages true
+ /DownsampleMonoImages true
+ /EmitDSCWarnings false
+ /EncodeColorImages true
+ /EncodeGrayImages true
+ /EncodeMonoImages true
+ /EndPage -1
+ /GrayImageDepth -1
+ /GrayImageDict .defaultImageDict
+ /GrayImageDownsampleThreshold 1.5
+ /GrayImageFilter /DCTEncode
+ /ImageMemory 524288
+ /LockDistillerParams false
+ /MaxSubsetPct 100
+ /MonoImageDepth -1
+ /MonoImageDict mark
+ /K -1
+ .dicttomark readonly
+ /MonoImageDownsampleThreshold 1.5
+ /MonoImageFilter /CCITTFaxEncode
+ /OffOptimizations 0
+ /OPM 1
+ /Optimize true
+ /ParseDSCComments true
+ /ParseDSCCommentsForDocInfo true
+ /PDFXTrimBoxToMediaBoxOffset [0 0 0 0]
+ /PDFXSetBleedBoxToMediaBox true
+ /PDFXBleedBoxToTrimBoxOffset [0 0 0 0]
+ /PreserveCopyPage true
+ /PreserveHalftoneInfo false
+ /sRGBProfile (None) % (sRGB IEC61966-2.1)
+ /StartPage 1
+ /SubsetFonts true
+ /TransferFunctionInfo /Preserve
+ /UseFlateCompression true
+ /UsePrologue false
+.dicttomark readonly def
+
+/.distillersettings mark
+
+/default mark
+ /AutoRotatePages /PageByPage
+ /CannotEmbedFontPolicy /Warning
+ /ColorACSImageDict .defaultImageDict
+ /ColorConversionStrategy /LeaveColorUnchanged
+% /ColorImageDownsampleType
+% /ColorImageResolution
+% /CompatibilityLevel
+ /CreateJobTicket false
+ /DoThumbnails false
+ /DownsampleColorImages false % override
+ /DownsampleGrayImages false % override
+ /DownsampleMonoImages false % override
+ /EmbedAllFonts true
+ /GrayACSImageDict .defaultImageDict
+% /GrayImageDownsampleType
+% /GrayImageResolution
+% /MonoImageDownsampleType
+% /MonoImageResolution
+ /NeverEmbed .standardfonts
+ /Optimize false % override
+ /PreserveEPSInfo true
+ /PreserveOPIComments true
+ /PreserveOverprintSettings true
+ /UCRandBGInfo /Preserve
+.dicttomark readonly
+
+/.screenACSImageDict mark
+ /QFactor 0.76 /Blend 1 /ColorTransform 1
+ /HSamples .a2112 /VSamples .a2112
+.dicttomark readonly def
+/screen mark
+ /AutoRotatePages /PageByPage
+% /CalGrayProfile (None)
+ /CannotEmbedFontPolicy /Warning
+ /ColorACSImageDict .screenACSImageDict
+ /ColorConversionStrategy /sRGB
+ /ColorImageDownsampleType /Average
+ /ColorImageResolution 72
+ /CompatibilityLevel 1.3
+ /CreateJobTicket false
+ /DoThumbnails false
+ /EmbedAllFonts true
+ /GrayACSImageDict .screenACSImageDict
+ /GrayImageDownsampleType /Average
+ /GrayImageResolution 72
+ /MonoImageDownsampleType /Average
+ /MonoImageResolution 300
+ /NeverEmbed .standardfonts
+ /PreserveEPSInfo false
+ /PreserveOPIComments false
+ /PreserveOverprintSettings false
+ /UCRandBGInfo /Remove
+.dicttomark readonly
+
+/ebook mark
+ /AutoRotatePages /All
+% /CalGrayProfile (None)
+ /CannotEmbedFontPolicy /Warning
+ /ColorACSImageDict .screenACSImageDict
+ /ColorConversionStrategy /sRGB
+ /ColorImageDownsampleType /Bicubic
+ /ColorImageResolution 150
+ /CompatibilityLevel 1.4
+ /CreateJobTicket false
+ /DoThumbnails false
+ /EmbedAllFonts true
+ /GrayACSImageDict .screenACSImageDict
+ /GrayImageDownsampleType /Bicubic
+ /GrayImageResolution 150
+ /MonoImageDownsampleType /Bicubic
+ /MonoImageResolution 300
+ /NeverEmbed .standardfonts
+ /PreserveEPSInfo false
+ /PreserveOPIComments false
+ /PreserveOverprintSettings false
+ /UCRandBGInfo /Remove
+.dicttomark readonly
+
+/.printerACSImageDict mark
+ /QFactor 0.4 /Blend 1 /ColorTransform 1
+ /HSamples .a1111 /VSamples .a1111
+.dicttomark readonly def
+/printer mark
+ /AutoRotatePages /None
+% /CalGrayProfile (None)
+ /CannotEmbedFontPolicy /Warning
+ /ColorACSImageDict .printerACSImageDict
+ /ColorConversionStrategy /UseDeviceIndependentColor
+ /ColorImageDownsampleType /Bicubic
+ /ColorImageResolution 300
+ /CompatibilityLevel 1.4
+ /CreateJobTicket true
+ /DoThumbnails false
+ /EmbedAllFonts true
+ /GrayACSImageDict .printerACSImageDict
+ /GrayImageDownsampleType /Bicubic
+ /GrayImageResolution 300
+ /MonoImageDownsampleType /Bicubic
+ /MonoImageResolution 1200
+ /NeverEmbed []
+ /PreserveEPSInfo true
+ /PreserveOPIComments true
+ /PreserveOverprintSettings true
+ /UCRandBGInfo /Preserve
+.dicttomark readonly
+
+/.prepressACSImageDict mark
+ /QFactor 0.15 /Blend 1 /ColorTransform 1
+ /HSamples .a1111 /VSamples .a1111
+.dicttomark readonly def
+/prepress mark
+ /AutoRotatePages /None
+ /CannotEmbedFontPolicy /Error
+ /ColorACSImageDict .prepressACSImageDict
+ /ColorConversionStrategy /LeaveColorUnchanged
+ /ColorImageDownsampleType /Bicubic
+ /ColorImageResolution 300
+ /CompatibilityLevel 1.4
+ /CreateJobTicket true
+ /DoThumbnails true
+ /EmbedAllFonts true
+ /GrayACSImageDict .prepressACSImageDict
+ /GrayImageDownsampleType /Bicubic
+ /GrayImageResolution 300
+ /MonoImageDownsampleType /Bicubic
+ /MonoImageResolution 1200
+ /NeverEmbed []
+ /PreserveEPSInfo true
+ /PreserveOPIComments true
+ /PreserveOverprintSettings true
+ /UCRandBGInfo /Preserve
+.dicttomark readonly
+
+% Define distiller settings for the ps2write device and for the ps2ps2 script :
+/PSL2Printer mark
+ /AutoRotatePages /None
+ /CannotEmbedFontPolicy /Error
+ /ColorACSImageDict .prepressACSImageDict
+ /ColorConversionStrategy /LeaveColorUnchanged
+ /ColorImageDownsampleType /Bicubic
+ /ColorImageResolution 600
+ /CompatibilityLevel 1.2 % Always 1.2 with ps2write.
+ % /CreateJobTicket true % Not sure
+ /DoThumbnails false
+ /EmbedAllFonts true
+ /GrayACSImageDict .prepressACSImageDict
+ /GrayImageDownsampleType /Bicubic
+ /GrayImageResolution 600
+ /MonoImageDownsampleType /Bicubic
+ /MonoImageResolution 1200
+ /NeverEmbed []
+ /PreserveEPSInfo true
+ /PreserveOPIComments true
+ /PreserveOverprintSettings true
+ /UCRandBGInfo /Preserve
+
+ /PreserveHalftoneInfo true
+ /TransferFunctionInfo /Preserve
+ /MaxViewerMemorySize 8000000
+ /CompressPages false
+ /CompressFonts false
+ /ASCII85EncodePages true
+.dicttomark readonly
+
+.dicttomark readonly def
+
+% ---------------- End of predefined configurations ---------------- %
+
+% Set optimizations for converting PostScript to PDF.
+% The ps2pdf* scripts invoke this.
+/.setpdfwrite { % - .setpdfwrite -
+ % Set a large VM threshold to reduce garbage collection.
+ currentuserparams /VMThreshold get 3000000 .max setvmthreshold
+} bind def
+
+% ---------------- pdfmark and DSC processing ---------------- %
+
+/.write_small_positive_real % <file> <real> .write_small_positive_real -
+{ % The argument must be grater than 0 and must be strongly samller than 0.1.
+ % The conversion isn't simple due to the low (24 bits) precision
+ % of the floating point arithmetics in Postscript.
+ % For best result we first use the 1e8 factor since its binary
+ % representation 101111101011110000100000000 well rounds into 14 significant
+ % bits : 101111101011110000000000000 .
+ 1 index (.) writestring
+ { dup 100000000 mul
+ dup 10 mul 1 ge {
+ % Will need not greater than 0.1 due to a rounding below.
+ pop exit
+ } if
+ exch pop
+ 1 index (00000000) writestring
+ } loop
+ % Now it is not smaller than 1e-9, use simple digitizing.
+ { dup 10 mul
+ dup 10 mul 1 ge {
+ pop exit
+ } if
+ exch pop
+ 1 index (0) writestring
+ } loop
+ % Now 0.01 <= n < 0.1, but rounding may give 0.1 .
+ % Convert to integer with 7 digits precision :
+ 100000000 % precision factor 1e8 % f n r
+ dup 10 idiv 3 1 roll mul 0.5 add cvi % f r' N
+ 2 copy le {
+ % The rounding overflows, suppress it.
+ % Note it carries out an additional digit,
+ % that's why we needed <0.1 above.
+ pop pop (1) writestring
+ } {
+ % Didn't cary out, put 0.
+ 2 index (0) writestring
+ exch % f N r
+ % Continue the simple digitizing :
+ { 10 idiv dup % f N r' r'
+ 2 index exch idiv % f N r' d
+ (0123456789) exch 1 getinterval % f N r' (d)
+ 3 index exch writestring % f N r'
+ dup 3 2 roll exch mod % f r' N'
+ dup 0 eq {
+ % Don't write trailing zeros.
+ exit
+ } if
+ exch % f N' r'
+ } loop
+ pop pop pop
+ } ifelse
+} bind def
+
+% Encode values to pass for the /pdfmark or /DSC pseudo-parameter.
+/.pdf===dict mark
+ /arraytype
+ { dup xcheck { ({) (}) } { ([) (]) } ifelse
+ % Stack: file obj left right
+ 4 1 roll 2 index exch writestring () exch
+ { exch 2 index exch writestring
+ 1 index exch pdf===only ( )
+ }
+ forall pop exch writestring
+ } bind
+ /packedarraytype 1 index
+ /dicttype
+ { 1 index (<<\n) writestring
+ { 2 index 3 -1 roll pdf===only 1 index ( ) writestring
+ 1 index exch pdf===only dup (\n) writestring
+ }
+ forall (>>) writestring
+ } bind
+ /nametype {
+ % If the name string includes any non-regular characters,
+ % write it with two preceding and one following null character(s).
+ % (Null characters in the name itself are not allowed.)
+ % This non-standard escape convention is required for passing names
+ % that include non-regular characters, because PostScript provides
+ % no way to do this. The pdf_scan_token procedure in the C code of
+ % the pdfwrite driver is currently the only place that recognizes
+ % this convention.
+ % Note that \004 may be self-delimiting in gs, but is not in standard PS.
+ dup .namestring (\000\004\011\012\014\015 %()/<>[]{}) .stringbreak null ne {
+ dup .namestring (\000) .stringbreak null ne {
+ /rangecheck signalerror
+ } if
+ 1 index <0000> writestring 1 index exch write===only 0 write
+ } {
+ write===only
+ } ifelse
+ } bind
+ /realtype {
+ % Prevent using floating point format - see Bug 688167.
+ dup dup 0 lt { neg } if 0.01 lt {
+ dup 0 eq {
+ pop (0) writestring
+ } {
+ dup 0 lt {
+ 1 index (-) writestring neg
+ } if
+ .write_small_positive_real
+ } ifelse
+ } {
+ write===only
+ } ifelse
+ } bind
+.dicttomark readonly def
+/pdf===only { % <file> <obj> pdf===only -
+ .pdf===dict 1 index type .knownget { exec } { write===only } ifelse
+} bind def
+/.pdfcvbuf 30 string def % enough for most arguments
+userdict /.pdfcvstring () put
+/.pdfcvs { % <obj> .pdfcvs <string>
+ currentglobal exch false .setglobal
+ /.pdfcvstring () store
+ % We can't handle long values yet.
+ { pop dup length 0 eq { pop } {
+ /.pdfcvstring .pdfcvstring 3 -1 roll concatstrings store
+ } ifelse //.pdfcvbuf
+ } /NullEncode filter dup 3 -1 roll pdf===only
+ closefile
+ .setglobal .pdfcvstring
+} bind def
+
+% Redefine pdfmark to pass the data to the driver.
+% We use a pseudo-parameter named /pdfmark whose value is an array:
+% /key1 (value1) ... (CTM) /type
+/.pdfputparams { % -mark- <key1> <value1> ... .pdfputparams <result...>
+ currentdevice null false counttomark 1 add 3 roll
+ % Don't allow the page device to get cleared....
+ {.putdeviceparams} .currentpagedevice pop {.setpagedevice} 3 .execn
+} bind def
+% Convert relevant operands to strings in an array.
+/.pdfcvsloop { % -mark- values ... markname start step .pdfcvsloop
+ % [values ... ctm markname]
+ matrix currentmatrix .pdfcvs 4 1 roll
+ counttomark 1 add 2 roll
+ counttomark .localvmarray astore exch pop
+ 3 1 roll
+ % Stack: values start step
+ 2 index length 3 sub { 2 copy 2 copy get .pdfcvs put pop } for
+} bind def
+/.pdfcvsall { % -mark- values ... markname .pdfcvsall <<same>>
+ 0 1 .pdfcvsloop
+} bind def
+/.pdfcvseven { % -mark- key value ... markname .pdfcvseven <<same>>
+ 1 2 .pdfcvsloop
+} bind def
+/.pdfcvsnone { % -mark- values ... markname .pdfcvsnone <<same>>
+ 100000 1 .pdfcvsloop
+} bind def
+/.pdfcvsfirst { % -mark- first values ... markname .pdfcvsfirst<<same>>
+ .pdfcvsnone
+ dup 0 2 copy get .pdfcvs put
+} bind def
+% The procedures in the following dictionary are called with the entire
+% pdfmark operand list (including the pdfmark name) on the stack;
+% they may modify this ad lib. They must call .pdfcvsxxx.
+/.pdfmarkparams mark
+ % Unpack a dictionary for PUT, and don't convert stream data.
+ /PUT {
+ counttomark 3 eq {
+ 1 index type /dicttype eq {
+ pop { } forall /.PUTDICT .pdfcvsall
+ } {
+ pop dup type /filetype eq {
+ % Read the file into a sequence of strings.
+ % This isn't great, but it's simple.
+ {
+ dup 64000 string readstring not { exch exit } if
+ exch
+ } loop closefile
+ } if
+ /.PUTSTREAM .pdfcvsfirst
+ } ifelse
+ } {
+ .pdfcvsall
+ } ifelse
+ } bind
+ % Unpack the array for PUTINTERVAL.
+ /PUTINTERVAL {
+ pop aload pop /.PUTINTERVAL .pdfcvsall
+ } bind
+.dicttomark readonly def
+/.pdfparamerror { % ? ? ? -mark- ... <errname> <opname> .pdfparamerror -
+ counttomark 4 add 2 roll cleartomark pop pop pop
+ .systemvar exch signalerror
+} bind def
+/pdfmark { % -mark- <key> <value> ... <markname> pdfmark -
+ dup /SP eq {
+ % A hack for synchronizing the clipping path.
+ gsave
+ [1 0 0 1 0 0] setmatrix 0 setlinewidth
+ newpath -3 -3 moveto closepath stroke % Paints outside the device bbox.
+ grestore
+ } if
+ dup /PS eq systemdict /PDFX .knownget not { false } if
+ systemdict /PDFA .knownget not { false } if or and {
+ % Execute it since PDF/X doesn't allow to embed it.
+ pop
+ { dup mark eq {
+ pop exit
+ } if
+ 1 index /DataSource eq {
+ exch pop
+ cvx exec
+ } {
+ pop pop
+ } ifelse
+ } loop
+ } {
+ counttomark 1 add copy
+ //.pdfmarkparams 1 index .knownget { exec } { .pdfcvsall } ifelse
+ mark /pdfmark 3 -1 roll .pdfputparams
+ dup type /booleantype ne {
+ /pdfmark .pdfparamerror
+ } if cleartomark
+ } ifelse
+} odef
+userdict /pdfmark .undef
+currentdict /.pdfmarkparams .undef
+
+
+% <dict> .hook_DSC_Creator -
+/.pdf_hook_DSC_Creator
+{
+ % If the Creator is PScript5.dll, disable the 32 /FontType resource for
+ % handling GlyphNames2Unicode. Since /FontType category can't redefine,
+ % we can do only with redefining the operator 'resourcestatus'.
+ currentdevice .devicename /pdfwrite eq {
+ /Creator .knownget {
+ (PScript5.dll) search {
+ pop pop
+ systemdict /resourcestatus dup
+ { dup /FontType eq 2 index 32 eq and {
+ pop pop false
+ } {
+ resourcestatus
+ } ifelse
+ } bind .makeoperator .forceput
+ } if
+ pop
+ } if
+ } {
+ pop
+ } ifelse
+}
+bind def
+
+% Use the DSC processing hook to pass DSC comments to the driver.
+% We use a pseudo-parameter named DSC whose value is an array:
+% /key1 (value1) ... /type
+/.pdfdsc_dict 2 dict def
+/.pdfdsc { % <file> <DSC string> <dsc dict> [<prev proc>] .pdfdsc -
+ 0 get dup null ne { 4 copy exch pop exec pop } { pop } ifelse 3 -1 roll pop
+ % Stack: <dsc string> <dsc dict>
+ 20 .localvmdict 1 index { 3 copy put pop pop } forall
+ 3 -1 roll .parse_dsc_comments % <dsc dict> <dict> <type>
+ 1 index //.pdf_hook_DSC_Creator exec
+ dup /NOP ne 2 index length 1 gt or { % Skip unparsed comments
+ PDFWRDEBUG { (**** DSC comment: ) print dup == 1 index === flush } if
+ exch mark 4 1 roll {
+ % mark <key1> <value1> ... <dsc dict> <type> <key> <value>
+ 3 index 2 index known { % Skip the DSC_struct entry
+ pop pop
+ } {
+ .pdfcvs 4 -2 roll
+ } ifelse
+ } forall exch pop counttomark .localvmarray astore
+ mark /DSC 3 -1 roll .pdfputparams
+ dup type /booleantype ne {
+ /DSC .pdfparamerror
+ } {
+ cleartomark
+ } ifelse
+ } {
+ pop pop pop
+ } ifelse
+} bind def
+currentdict /.pdf_hook_DSC_Creator undef
+/.initialize_dsc_parser where {
+ pop
+ 3000 % priority
+ {
+ currentglobal true setglobal
+ 2 dict dup .initialize_dsc_parser readonly
+ currentuserparams /ProcessDSCComment get
+ 1 array astore % in case the value is executable
+ //.pdfdsc /exec load 4 array astore cvx readonly
+ << /ProcessDSCComment 3 -1 roll >> setuserparams
+ setglobal
+ } bind .schedule_init
+} if
+
+% ---------------- {set,current}distillerparams ---------------- %
+
+% Define setdistillerparams / currentdistillerparams.
+% Distiller parameters are currently treated as device parameters.
+/.distillerparamkeys mark
+ % General parameters -- all distillers
+ /ASCII85EncodePages { }
+ /AutoRotatePages { }
+ /Binding { }
+ /CompressPages { }
+ /DefaultRenderingIntent { }
+ /DetectBlends { }
+ /DoThumbnails { }
+ /ImageMemory { }
+ /LockDistillerParams { }
+ /LZWEncodePages { }
+ /OPM { }
+ /PreserveHalftoneInfo { }
+ /PreserveOPIComments { }
+ /PreserveOverprintSettings { }
+ /TransferFunctionInfo { }
+ /UCRandBGInfo { }
+ /UseFlateCompression { }
+ % General parameters -- PDF writer
+ % StartPage and EndPage are renamed because EndPage
+ % clashes with a page device parameter.
+ /CoreDistVersion { }
+ /CompatibilityLevel { }
+ % ****** NOTE: StartPage and EndPage are disabled because
+ % ****** EndPage clashes with a page device parameter.
+% /EndPage { exch pop /PDFEndPage exch }
+ /PDFEndPage { pop pop }
+% /StartPage { exch pop /PDFStartPage exch }
+ /PDFStartPage { pop pop }
+ /Optimize { }
+ /ParseDSCCommentsForDocInfo { }
+ /ParseDSCComments { }
+ /EmitDSCWarnings { }
+ /CreateJobTicket { }
+ /PreserveEPSInfo { }
+ /AutoPositionEPSFiles { }
+ /PreserveCopyPage { }
+ /UsePrologue { }
+ /OffOptimizations { }
+ % PDF/X parameters
+ /PDFXTrimBoxToMediaBoxOffset { }
+ /PDFXSetBleedBoxToMediaBox { }
+ /PDFXBleedBoxToTrimBoxOffset { }
+ % Color sampled image parameters
+ /ColorACSImageDict { }
+ /AntiAliasColorImages { }
+ /AutoFilterColorImages { }
+ /ColorImageDepth { }
+ /ColorImageDict { }
+ /DownsampleColorImages { }
+ /ColorImageDownsampleThreshold { }
+ /ColorImageDownsampleType { }
+ /EncodeColorImages { }
+ /ColorImageFilter { }
+ /ColorImageResolution { }
+ % Color processing parameters
+ /CalCMYKProfile { }
+ /CalGrayProfile { }
+ /CalRGBProfile { }
+ /sRGBProfile { }
+ /ColorConversionStrategy { }
+ /ConvertCMYKImagesToRGB { }
+ /ConvertImagesToIndexed { }
+ % Grayscale sampled image parameters
+ /GrayACSImageDict { }
+ /AntiAliasGrayImages { }
+ /AutoFilterGrayImages { }
+ /GrayImageDepth { }
+ /GrayImageDict { }
+ /DownsampleGrayImages { }
+ /GrayImageDownsampleThreshold { }
+ /GrayImageDownsampleType { }
+ /EncodeGrayImages { }
+ /GrayImageFilter { }
+ /GrayImageResolution { }
+ % Monochrome sampled image parameters
+ /AntiAliasMonoImages { }
+ /MonoImageDepth { }
+ /MonoImageDict { }
+ /DownsampleMonoImages { }
+ /MonoImageDownsampleThreshold { }
+ /MonoImageDownsampleType { }
+ /EncodeMonoImages { }
+ /MonoImageFilter { }
+ /MonoImageResolution { }
+ % Font embedding parameters
+ /AlwaysEmbed
+ { dup length 0 gt
+ { dup 0 get false eq
+ { dup length 1 sub 1 exch getinterval exch pop /~AlwaysEmbed exch
+ } if
+ } if
+ }
+ /NeverEmbed
+ { dup length 0 gt
+ { dup 0 get false eq
+ { dup length 1 sub 1 exch getinterval exch pop /~NeverEmbed exch
+ } if
+ } if
+ }
+ /CannotEmbedFontPolicy { }
+ /EmbedAllFonts { }
+ /MaxSubsetPct { }
+ /SubsetFonts { }
+.dicttomark readonly def
+/.distillerdevice
+ { currentdevice .devicename dup /pdfwrite eq exch /ps2write eq or
+ { currentdevice }
+ { /pdfwrite finddevice }
+ ifelse
+ } bind def
+
+% Some badly designed PostScript files only expect the current/set
+% distillerparams operators to exist in a distiller. Since we have
+% this as a runtime option, we enable these operators IFF the
+% currentdevice is pdfwrite. Also, we mask their existence in
+% systemdict so that 'where' and 'known' don't show them unless
+% the currentdevice is pdfwrite.
+/.setdistillerparams { % <dict> setdistillerparams -
+ .distillerdevice //null false mark 4 index {
+ //.distillerparamkeys 2 index .knownget { exec } { pop pop } ifelse
+ } forall .putdeviceparamsonly
+ dup type /booleantype ne {
+ /setdistillerparams .pdfparamerror
+ } {
+ pop pop pop
+ } ifelse
+} odef
+/.currentdistillerparams { % - currentdistillerparams <dict>
+ .distillerdevice //.distillerparamkeys .getdeviceparams .dicttomark
+ % Patch StartPage and EndPage
+ % ****** NOTE: StartPage and EndPage are disabled because
+ % ****** EndPage clashes with a page device parameter.
+% begin /StartPage PDFStartPage /EndPage PDFEndPage
+% currentdict dup /PDFStartPage undef /PDFEndPage undef
+% def def currentdict end
+} odef
+/setdistillerparams {
+ currentdevice .devicename dup /pdfwrite ne exch /ps2write ne and {
+ /setdistillerparams /undefined signalerror
+ } if
+ .setdistillerparams
+} bind odef
+/currentdistillerparams {
+ currentdevice .devicename dup /pdfwrite ne exch /ps2write ne and {
+ /currentdistillerparams /undefined signalerror
+ } if
+ .currentdistillerparams
+} bind odef
+
+% Patch 'where' so that the distiller operators are only visible
+% if the pdfwrite device is the current one.
+{ currentdevice .devicename dup /pdfwrite eq exch /ps2write eq or{
+ .where
+ } {
+ .where pop dup //systemdict eq { pop false } { true } ifelse
+ } ifelse
+} bind
+{ /currentdistillerparams /setdistillerparams /pdfmark }
+{ .wheredict exch 2 index put } forall pop
+
+% Patch 'known' to hide the systemdict version of distiller operators
+% unless the currentdevice is pdfwrite.
+/known {
+ /currentdistillerparams 1 index eq /setdistillerparams 2 index eq or
+ /pdfmark 2 index eq or {
+ systemdict 2 index eq { % only mask the operator in systemdict
+ known currentdevice .devicename dup /pdfwrite ne exch /ps2write ne and { pop false } if
+ } {
+ known
+ } ifelse
+ } {
+ known
+ } ifelse
+} .bind odef
+
+1000 % priority
+{
+ % Note, this may not work if the initial device is not pdfwrite
+ % and may require the use of -dProvideUnicode on the command line.
+ currentdevice .devicename /pdfwrite eq
+ systemdict /ProvideUnicode .knownget not { false } if or {
+ currentglobal true setglobal
+ systemdict /.setupUnicodeDecoder known {
+ /Unicode /Decoding resourcestatus {
+ pop pop
+ /Unicode /Decoding findresource
+ .setupUnicodeDecoder
+ } {
+ QUIET not {
+ (WARNING: /Unicode /Decoding resource is not accessible but it is useful for generating ToUnicode CMap.) =
+ } if
+ } ifelse
+ } if
+ setglobal
+ } if
+} bind .schedule_init
+
+1010 % priority
+{
+ % Set a predefined configuration in the distiller device (pdfwrite)
+ /PDFSETTINGS where {
+ pop /PDFSETTINGS load
+ } {
+ currentdevice .devicename /ps2write eq { /PSL2Printer } { /default } ifelse
+ } ifelse
+ .distillersettings exch get
+ % Don't override parameters defined on the command line.
+ dup length .distillercommon length add dict begin
+ .distillercommon 2 {
+ {
+ systemdict 2 index known { pop pop } { def } ifelse
+ } forall
+ } repeat
+ currentdict end .setdistillerparams
+ .distillerdevice //null false mark .putdeviceparams
+ dup type /booleantype eq not { cleartomark pop } if pop pop
+} bind .schedule_init
+
+% Set a path to library files (ps2write)
+.defaultdevicename /ps2write eq {
+ mark
+ /OPDFReadProcsetPath
+ systemdict /OPDFReadProcsetPath .knownget dup { % check for a value on the command-line
+ 1 index () eq {
+ (Configuration warning : empty OPDFReadProcsetPath, will use defaults.) =
+ systemdict /OPDFReadProcsetPath undef
+ pop pop false
+ } if
+ } if
+ not { % if necessary, compute a default
+ mark
+ (gs_mgl_e.ps) (gs_mro_e.ps) (gs_agl.ps) (opdfread.ps) % Reverse order !
+ () counttomark 1 sub {
+ exch
+ .libfile { .filename } { false } ifelse not {
+ (Configuration error : library file opdfread.ps not found !) =
+ (opdfread.ps) /undefinedfilename signalerror
+ } if
+ .filenamelistseparator concatstrings concatstrings
+ } repeat
+ exch pop
+ } if
+ %stack: mark /OPDFReadProcsetPath <filelist>
+ /ps2write finddevice putdeviceprops pop % set the default instance's procset path
+} if
+
+2000 % priority
+{ % Note, this may not work if the initial device is not pdfwrite
+ currentdevice .devicename dup /pdfwrite eq exch /ps2write eq or {
+ % Inform the device with initial graphic state. See gdev_pdf_fill_path.
+ newpath fill
+ } if
+} bind .schedule_init
diff --git a/Master/tlpkg/tlgs/lib/gs_pfile.ps b/Master/tlpkg/tlgs/lib/gs_pfile.ps
new file mode 100644
index 00000000000..1f119e69260
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_pfile.ps
@@ -0,0 +1,127 @@
+% Copyright (C) 1994, 1995 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_pfile.ps 6300 2005-12-28 19:56:24Z giles $
+% Runtime support for minimum-space fonts and packed files.
+
+% ****** NOTE: This file must be kept consistent with
+% ****** packfile.ps and wrfont.ps.
+
+% ---------------- Packed file support ---------------- %
+
+% A packed file is the concatenation of several file groups, each of which
+% is the result of compressing several files concatenated together.
+% The packed file begins with a procedure that creates an appropriate
+% decoding filter for each file group, as follows:
+% <group-subfile-filter> -proc- <group-decode-filter>
+% Thus, accessing an individual file requires 4 parameters:
+% the starting address and length of the outer compressed file,
+% and the starting address and length of the inner file.
+/.packedfilefilter % <file> <ostart> <olength> <istart> <ilength>
+ % .packedfilefilter <filter>
+ { 4 index systemdict begin token pop end 6 1 roll
+ % Stack: fproc file ostart olength istart ilength
+ 4 index 5 -1 roll setfileposition
+ % Stack: fproc file olength istart ilength
+ 4 -2 roll () /SubFileDecode filter
+ % Stack: fproc istart ilength ofilter
+ 4 -1 roll exec
+ % Filters don't support setfileposition, so we must skip data
+ % by reading it into a buffer. We rely on the fact that
+ % save/restore don't affect file positions.
+ % Stack: istart ilength dfilter
+ save exch 64000 string
+ % Stack: istart ilength save dfilter scratch
+ 4 index 1 index length idiv { 2 copy readstring pop pop } repeat
+ 2 copy 0 8 -1 roll 2 index length mod getinterval readstring pop pop pop
+ % Stack: ilength save dfilter
+ exch restore exch () /SubFileDecode filter
+ } bind def
+
+% Run a packed library file.
+/.runpackedlibfile % <filename> <ostart> <olength> <istart> <ilength>
+ % .runpackedlibfile
+ { 5 -1 roll findlibfile
+ { exch pop dup 6 2 roll .packedfilefilter
+ currentobjectformat exch 1 setobjectformat run
+ setobjectformat closefile
+ }
+ { 5 1 roll /findlibfile .systemvar /undefinedfilename signalerror
+ }
+ ifelse
+ } bind def
+
+% ---------------- Compacted font support ---------------- %
+
+% Compacted fonts written by wrfont.ps depend on the existence and
+% specifications of the procedures and data in this section.
+
+/.compactfontdefault mark
+ /PaintType 0
+ /FontMatrix [0.001 0 0 0.001 0 0] readonly
+ /FontType 1
+ /Encoding StandardEncoding
+.dicttomark readonly def
+
+/.checkexistingfont % <fontname> <uid> <privatesize> <fontsize>
+ % .checkexistingfont
+ % {} (<font> on d-stack)
+ % <fontname> <uid> <privatesize> <fontsize>
+ % .checkexistingfont
+ % -save- --restore-- (<font> on d-stack)
+ { FontDirectory 4 index .knownget
+ { dup /UniqueID .knownget
+ { 4 index eq exch /FontType get 1 eq and }
+ { pop false }
+ ifelse
+ }
+ { false
+ }
+ ifelse
+ { save /restore load 6 2 roll }
+ { {} 5 1 roll }
+ ifelse
+ dict //.compactfontdefault exch .copydict begin
+ dict /Private exch def
+ Private begin
+ /MinFeature {16 16} def
+ /Password 5839 def
+ /UniqueID 1 index def
+ end
+ /UniqueID exch def
+ /FontName exch def
+ } bind def
+
+/.knownEncodings [
+ ISOLatin1Encoding
+ StandardEncoding
+ SymbolEncoding
+] readonly def
+
+/.readCharStrings % <count> <encrypt> .readCharStrings <dict>
+ { exch dup dict dup 3 -1 roll
+ { currentfile token pop dup type /integertype eq
+ { dup -8 bitshift //.knownEncodings exch get exch 255 and get } if
+ currentfile token pop dup type /nametype eq
+ { 2 index exch get
+ }
+ { % Stack: encrypt dict dict key value
+ 4 index { 4330 exch dup .type1encrypt exch pop } if
+ readonly
+ }
+ ifelse put dup
+ }
+ repeat pop exch pop
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/gs_rdlin.ps b/Master/tlpkg/tlgs/lib/gs_rdlin.ps
new file mode 100644
index 00000000000..e330f686c73
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_rdlin.ps
@@ -0,0 +1,20 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_rdlin.ps 6300 2005-12-28 19:56:24Z giles $
+% Patch for systems with readline support in the interpreter.
+
+% Disable the prompt message, since readline will generate it.
+/.promptmsg { } def
diff --git a/Master/tlpkg/tlgs/lib/gs_res.ps b/Master/tlpkg/tlgs/lib/gs_res.ps
new file mode 100644
index 00000000000..5ad6e404f09
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_res.ps
@@ -0,0 +1,1119 @@
+% Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_res.ps 7724 2007-02-20 23:54:19Z alexcher $
+% Initialization file for Level 2 resource machinery.
+% When this is run, systemdict is still writable,
+% but (almost) everything defined here goes into level2dict.
+
+level2dict begin
+
+(BEGIN RESOURCES) VMDEBUG
+
+% We keep track of (global) instances with another entry in the resource
+% dictionary, an .Instances dictionary. For categories with implicit
+% instances, the values in .Instances are the same as the keys;
+% for other categories, the values are [instance status size].
+
+% Note that the dictionary that defines a resource category is stored
+% in global VM. The PostScript manual says that each category must
+% manage global and local instances separately. However, objects in
+% global VM other than systemdict can't reference objects in local VM.
+% This means that the resource category dictionary, which would otherwise be
+% the obvious place to keep track of the instances, can't be used to keep
+% track of local instances. Instead, we define a dictionary in local VM
+% called localinstancedict, in which the key is the category name and
+% the value is the analogue of .Instances for local instances.
+
+% We don't currently implement automatic resource unloading.
+% When and if we do, it should be hooked to the garbage collector.
+% However, Ed Taft of Adobe says their interpreters don't implement this
+% either, so we aren't going to worry about it for a while.
+
+currentglobal false setglobal systemdict begin
+ /localinstancedict 5 dict
+ .forcedef % localinstancedict is local, systemdict is global
+end true setglobal
+/.emptydict 0 dict readonly def
+setglobal
+
+% Resource category dictionaries have the following keys (those marked with
+% * are optional):
+% Standard, defined in the Red Book:
+% Category (name)
+% *InstanceType (name)
+% DefineResource
+% <key> <instance> DefineResource <instance>
+% UndefineResource
+% <key> UndefineResource -
+% FindResource
+% <key> FindResource <instance>
+% ResourceStatus
+% <key> ResourceStatus <status> <size> true
+% <key> ResourceStatus false
+% ResourceForAll
+% <template> <proc> <scratch> ResourceForAll -
+% *ResourceFileName
+% <key> <scratch> ResourceFileName <filename>
+% Additional, specific to our implementation:
+% .Instances (dictionary)
+% .LocalInstances
+% - .LocalInstances <dict>
+% .GetInstance
+% <key> .GetInstance <instance> -true-
+% <key> .GetInstance -false-
+% .CheckResource
+% <key> <value> .CheckResource <key> <value> <ok>
+% (or may give an error if not OK)
+% .DoLoadResource
+% <key> .DoLoadResource <key> (may give an error)
+% .LoadResource
+% <key> .LoadResource - (may give an error)
+% .ResourceFile
+% <key> .ResourceFile <file> -true-
+% <key> .ResourceFile <key> -false-
+% .ResourceFileStatus
+% <key> .ResourceFileStatus 2 <vmusage> -true-
+% <key> .ResourceFileStatus -false-
+% All the above procedures expect that the top dictionary on the d-stack
+% is the resource dictionary.
+
+% Define enough of the Category category so we can define other categories.
+% The dictionary we're about to create will become the Category
+% category definition dictionary.
+
+% .findcategory and .resourceexec are only called from within the
+% implementation of the resource 'operators', so they don't have to worry
+% about cleaning up the stack if they fail (the interpreter's stack
+% protection machinery for pseudo-operators takes care of this).
+% Note that all places that look up categories must use .findcategory
+% so that the command in case of error will be correct rather than an
+% internal invocation of findresource.
+/.findcategory { % <name> .findcategory -
+ % (pushes the category on the dstack)
+ /Category .findresource begin % note: *not* findresource
+} bind def
+
+% If an error occurs within the logic of a resource operator (after operand
+% acquisition and checking), the Adobe interpreters report the operator name,
+% not the operator object, as the command in $error. For this reason, and
+% this reason only, all resource operators must wrap their logic code in
+% /<opername> cvx { ...logic... } .errorexec
+
+% The Category resource signals /undefined rather than /undefinedresource,
+% both when referenced implicitly (to look up the category for a general
+% resource operation) and when it is accessed directly (/Category /xxx
+% findresource). Because of this, all resource operators must use
+% .undefinedresource rather than signalling undefinedresource directly.
+/.undefinedresource { % <command> .undefinedresource -
+ /Category dup load eq { /undefined } { /undefinedresource } ifelse
+ signaloperror
+} bind def
+
+/.resourceexec { % <key> /xxxResource .resourceexec -
+ % (also pops the category from the dstack)
+ load exec end
+} bind def
+
+% .getvminstance treats instances on disk as undefined.
+/.getvminstance { % <key> .getvminstance <instance> -true-
+ % <key> .getvminstance -false-
+ .GetInstance {
+ dup 1 get 2 ne { true } { pop false } ifelse
+ } {
+ false
+ } ifelse
+} bind def
+
+20 dict begin
+
+ % Standard entries
+
+/Category /Category def
+/InstanceType /dicttype def
+
+/DefineResource {
+ .CheckResource {
+ dup /Category 3 index cvlit .growput
+ dup [ exch 0 -1 ] exch
+ .Instances 4 2 roll put
+ % Make the Category dictionary read-only. We will have to
+ % use .forceput / .forcedef later to replace the dummy,
+ % empty .Instances dictionary with the real one later.
+ readonly
+ } {
+ /defineresource cvx /typecheck signaloperror
+ } ifelse
+} bind def
+/FindResource % (redefined below)
+ { .Instances exch get 0 get
+ } bind def
+
+ % Additional entries
+
+/.Instances 30 dict def
+.Instances /Category [currentdict 0 -1] put
+
+/.LocalInstances 0 dict def
+/.GetInstance
+ { .Instances exch .knownget
+ } bind def
+/.CheckResource
+ { dup gcheck currentglobal and
+ { /DefineResource /FindResource /ResourceForAll /ResourceStatus
+ /UndefineResource }
+ { 2 index exch known and }
+ forall
+ not { /defineresource cvx /invalidaccess signaloperror } if
+ true
+ } bind def
+
+.Instances end begin % for the base case of findresource
+
+(END CATEGORY) VMDEBUG
+
+% Define the resource operators. We use the "stack protection" feature of
+% odef to make sure the stacks are restored properly on an error.
+% This requires that the operators not pop anything from the stack until
+% they have executed their logic successfully. We can't make this
+% work for resourceforall, because the procedure it executes mustn't see
+% the operands of resourceforall on the stack, but we can make it work for
+% the others.
+
+% findresource is the only operator that needs to bind //Category.
+% We define its contents as a separate procedure so that .findcategory
+% can use it without entering another level of pseudo-operator.
+/.findresource { % <key> <category> findresource <instance>
+ 2 copy dup /Category eq
+ { pop //Category 0 get begin } { .findcategory } ifelse
+ /FindResource .resourceexec exch pop exch pop
+} bind
+end % .Instances of Category
+def
+/findresource {
+ % See above re .errorexec.
+ 1 .argindex % also catch stackunderflow
+ dup type /stringtype eq { cvn } if % for CET 23-13-04
+ 3 1 roll exch pop
+ dup type /nametype ne {
+ /findresource .systemvar /typecheck signalerror
+ } if
+ /findresource cvx //.findresource .errorexec
+} odef
+
+/defineresource { % <key> <instance> <category> defineresource <instance>
+ 2 .argindex 2 index 2 index % catch stackunderflow
+ % See above re .errorexec.
+ /defineresource cvx {
+ .findcategory
+ currentdict /InstanceType known {
+ dup type InstanceType ne {
+ dup type /packedarraytype eq InstanceType /arraytype eq and
+ not { /defineresource cvx /typecheck signaloperror } if
+ } if
+ } if
+ /DefineResource .resourceexec
+ 4 1 roll pop pop pop
+ } .errorexec
+} bind odef
+% We must prevent resourceforall from automatically restoring the stacks,
+% because we don't want the stacks restored if proc causes an error or
+% executes a 'stop'. On the other hand, resourceforall is defined in the
+% PLRM as an operator, so it must have type /operatortype. We hack this
+% by taking advantage of the fact that the interpreter optimizes tail
+% calls, so stack protection doesn't apply to the very last token of an
+% operator procedure.
+/resourceforall1 { % <template> <proc> <scratch> <category> resourceforall1 -
+ dup .findcategory
+ /ResourceForAll load
+ % Stack: <template> <proc> <scratch> <category> proc
+ exch pop % pop the category
+ exec end
+} bind def
+/resourceforall { % <template> <proc> <scratch> <category> resourceforall1 -
+ //resourceforall1 exec % see above
+} bind odef
+/resourcestatus { % <key> <category> resourcestatus <status> <size> true
+ % <key> <category> resourcestatus false
+ {
+ 0 .argindex type /nametype ne {
+ % CET 23-26 wants typecheck here, not undefineresource that happens
+ % without the check.
+ /resourcestatus cvx /typecheck signalerror
+ } if
+ 2 copy .findcategory /ResourceStatus .resourceexec
+ { 4 2 roll pop pop true } { pop pop false } ifelse
+ } stopped {
+ % Although resourcestatus is an operator, Adobe uses executable name
+ % for error reporting. CET 23-26
+ /resourcestatus cvx $error /errorname get signalerror
+ } if
+} bind odef
+/undefineresource { % <key> <category> undefineresource -
+ 0 .argindex type /nametype ne {
+ /undefinedresource cvx /typecheck signaloperror
+ } if
+ 1 .argindex 1 index % catch stackunderflow
+
+ { .findcategory /UndefineResource .resourceexec pop pop
+ } stopped {
+ % Although undefineresource is an operator, Adobe uses executable name
+ % here but uses operator for the errors above. CET 23-33
+ /undefineresource cvx $error /errorname get signalerror
+ } if
+} bind odef
+
+% Define the system parameters used for the Generic implementation of
+% ResourceFileName.
+systemdict begin
+
+% - .default_resource_dir <string>
+/.default_resource_dir {
+ .file_name_parent .file_name_directory_separator concatstrings
+ (Resource) concatstrings
+ /LIBPATH .systemvar {
+ dup .file_name_current eq {
+ pop
+ } {
+ 1 index false .file_name_combine {
+ exch pop exit
+ } {
+ pop pop
+ } ifelse
+ } ifelse
+ } forall
+} bind def
+
+% <path> <name> <string> .resource_dir_name <path> <name> <string>
+/.resource_dir_name
+{ systemdict 2 index .knownget {
+ exch pop
+ systemdict 1 index undef
+ } {
+ dup () ne {
+ .file_name_directory_separator concatstrings
+ } if
+ 2 index exch false .file_name_combine not {
+ (Error: .default_resource_dir returned ) print exch print ( that can't combine with ) print =
+ /.default_resource_dir cvx /configurationerror signalerror
+ } if
+ } ifelse
+} bind def
+
+currentdict /pssystemparams known not {
+ /pssystemparams 10 dict readonly def
+} if
+pssystemparams begin
+ .default_resource_dir
+ /FontResourceDir (Font) .resource_dir_name
+ readonly .forcedef % pssys'params is r-o
+ /GenericResourceDir () .resource_dir_name
+ readonly .forcedef % pssys'params is r-o
+ pop % .default_resource_dir
+ /GenericResourcePathSep
+ .file_name_separator readonly .forcedef % pssys'params is r-o
+ (%diskFontResourceDir) cvn (/Resource/Font/) readonly .forcedef % pssys'params is r-o
+ (%diskGenericResourceDir) cvn (/Resource/) readonly .forcedef % pssys'params is r-o
+end
+end
+
+% Check if GenericResourceDir presents in LIBPATH.
+
+% The value of GenericResourceDir must end with directory separator.
+% We use .file_name_combine to check it.
+% Comments use OpenVMS syntax, because it is the most complicated case.
+(x) pssystemparams /GenericResourcePathSep get
+(y) concatstrings concatstrings dup length % (x]y) l1
+pssystemparams /GenericResourceDir get dup length exch % (x]y) l1 l2 (dir)
+3 index true .file_name_combine not {
+ exch
+ (File name ) print print ( cant combine with ) print =
+ /GenericResourceDir cvx /configurationerror signaloperror
+} if
+dup length % (x]y) l1 l2 (dir.x]y) l
+4 2 roll add % (x]y) (dir.x]y) l ll
+ne {
+ (GenericResourceDir value does not end with directory separator.\n) =
+ /GenericResourceDir cvx /configurationerror signaloperror
+} if
+pop pop
+
+% Define the generic algorithm for computing resource file names.
+/.rfnstring 8192 string def
+/.genericrfn % <key> <scratch> <prefix> .genericrfn <filename>
+ { 3 -1 roll //.rfnstring cvs concatstrings exch copy
+ } bind def
+
+% Define the Generic category.
+
+/Generic mark
+
+ % Standard entries
+
+% We're still running in Level 1 mode, so dictionaries won't expand.
+% Leave room for the /Category entry.
+/Category null
+
+% Implement the body of Generic resourceforall for local, global, and
+% external cases. 'args' is [template proc scratch resdict].
+/.enumerateresource { % <key> [- <proc> <scratch>] .enumerateresource -
+ 1 index type dup /stringtype eq exch /nametype eq or {
+ exch 1 index 2 get cvs exch
+ } if
+ % Use .setstackprotect to prevent the stacks from being restored if
+ % an error occurs during execution of proc.
+ 1 get false .setstackprotect exec true .setstackprotect
+} bind def
+/.localresourceforall { % <key> <value> <args> .localr'forall -
+ exch pop
+ 2 copy 0 get .stringmatch { .enumerateresource } { pop pop } ifelse
+} bind def
+/.globalresourceforall { % <key> <value> <args> .globalr'forall -
+ exch pop
+ 2 copy 0 get .stringmatch {
+ dup 3 get begin .LocalInstances end 2 index known not {
+ .enumerateresource
+ } {
+ pop pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+} bind def
+/.externalresourceforall { % <filename> <len> <args> .externalr'forall -
+ 3 1 roll 1 index length 1 index sub getinterval exch
+ dup 3 get begin .Instances .LocalInstances end
+ % Stack: key args insts localinsts
+ 3 index known {
+ pop pop pop
+ } {
+ 2 index known { pop pop } { .enumerateresource } ifelse
+ } ifelse
+} bind def
+
+/DefineResource {
+ .CheckResource
+ { dup [ exch 0 -1 ]
+ % Stack: key value instance
+ currentglobal
+ { false setglobal 2 index UndefineResource % remove local def if any
+ true setglobal
+ .Instances dup //.emptydict eq {
+ pop 3 dict
+ % As noted above, Category dictionaries are read-only,
+ % so we have to use .forcedef here.
+ /.Instances 1 index .forcedef % Category dict is read-only
+ } if
+ }
+ { .LocalInstances dup //.emptydict eq
+ { pop 3 dict localinstancedict Category 2 index put
+ }
+ if
+ }
+ ifelse
+ % Stack: key value instance instancedict
+ 3 index 2 index .growput
+ % Now make the resource value read-only.
+ 0 2 copy get { readonly } .internalstopped pop
+ dup 4 1 roll put exch pop exch pop
+ }
+ { /defineresource cvx /typecheck signaloperror
+ }
+ ifelse
+} .bind executeonly % executeonly to prevent access to .forcedef
+/UndefineResource
+ { { dup 2 index .knownget
+ { dup 1 get 1 ge
+ { dup 0 null put 1 2 put pop pop }
+ { pop exch .undef }
+ ifelse
+ }
+ { pop pop
+ }
+ ifelse
+ }
+ currentglobal
+ { 2 copy .Instances exch exec
+ }
+ if .LocalInstances exch exec
+ } bind
+% Because of some badly designed code in Adobe's CID font downloader that
+% makes findresource and resourcestatus deliberately inconsistent with each
+% other, the default FindResource must not call ResourceStatus if there is
+% an instance of the desired name already defined in VM.
+/FindResource {
+ dup //null eq {
+ % CET 13-06 wants /typecheck for "null findencoding" but
+ % .knownget doesn't fail on null
+ /findresource cvx /typecheck signaloperror
+ } if
+ dup .getvminstance {
+ exch pop 0 get
+ } {
+ dup ResourceStatus {
+ pop 1 gt {
+ .DoLoadResource .getvminstance not {
+ /findresource cvx .undefinedresource
+ } if 0 get
+ } {
+ .GetInstance pop 0 get
+ } ifelse
+ } {
+ /findresource cvx .undefinedresource
+ } ifelse
+ } ifelse
+} bind
+% Because of some badly designed code in Adobe's CID font downloader, the
+% definition of ResourceStatus for Generic and Font must be the same (!).
+% We patch around this by using an intermediate .ResourceFileStatus procedure.
+/ResourceStatus {
+ dup .GetInstance {
+ exch pop dup 1 get exch 2 get true
+ } {
+ .ResourceFileStatus
+ } ifelse
+} bind
+/.ResourceFileStatus {
+ .ResourceFile { closefile 2 -1 true } { pop false } ifelse
+} bind
+/ResourceForAll {
+ % Construct a new procedure to hold the arguments.
+ % All objects constructed here must be in local VM to avoid
+ % a possible invalidaccess.
+ currentdict 4 .localvmpackedarray % [template proc scratch resdict]
+ % We must pop the resource dictionary off the dict stack
+ % when doing the actual iteration, and restore it afterwards.
+ .currentglobal not {
+ .LocalInstances length 0 ne {
+ % We must do local instances, and do them first.
+ //.localresourceforall {exec} 0 get 3 .localvmpackedarray cvx
+ .LocalInstances exch {forall} 0 get 1 index 0 get
+ currentdict end 3 .execn begin
+ } if
+ } if
+ % Do global instances next.
+ //.globalresourceforall {exec} 0 get 3 .localvmpackedarray cvx
+ .Instances exch cvx {forall} 0 get 1 index 0 get
+ currentdict end 3 .execn begin
+ mark % args [
+ Category .namestring .file_name_separator concatstrings
+ 2 index 0 get % args [ (c/) (t)
+ dup length 3 1 roll % args [ l (c/) (t)
+ concatstrings % args [ l (c/t)
+ [
+ true /LIBPATH .systemvar 3 index
+ .generate_dir_list_templates_with_length % args (t) [ l [(pt) Lp ...]
+ % also add on the Resources as specified by the GenericResourceDir
+ true [ currentsystemparams /GenericResourceDir get]
+ counttomark 1 add index .generate_dir_list_templates_with_length
+ % Resource files on OpenVMS require a separate template (gs:[dir.*]*)
+ true [ currentsystemparams /GenericResourceDir get]
+ counttomark 1 add index .file_name_separator (*)
+ concatstrings concatstrings .generate_dir_list_templates_with_length
+ ] exch pop
+ dup length 1 sub 0 exch 2 exch { % args [ l [] i
+ 2 copy get % args [ l [] i (pt)
+ exch 2 index exch 1 add get % args [ l [] (pt) Lp
+ exch % args [ l [] Lp (pt)
+
+ { % args [ l [] Lp (pf)
+ dup length % args [ l [] Lp (pf) Lpf
+ 2 index sub % args [ l [] Lp (pf) Lf
+ 2 index exch % args [ l [] Lp (pf) Lp Lf
+ getinterval cvn dup % args [ l [] Lp /n /n
+ 5 2 roll % args [ /n /n l [] Lp
+ } //.rfnstring filenameforall
+ pop % args [ /n1 /n1 ... /nN /nN l []
+ } for % args [ /n1 /n1 ... /nN /nN l []
+ pop pop
+ .dicttomark % An easy way to exclude duplicates. % args <</n/n>>
+ % {
+ { pop } 0 get
+ 2 index 2 get { cvs 0 } aload pop 5 index
+ //.externalresourceforall {exec} 0 get
+ % }
+ 7 .localvmpackedarray cvx
+ 3 2 roll pop % args
+ { forall } 0 get
+ currentdict end 2 .execn begin
+} bind
+/.file_name_is_iodevice_or_absolute
+{ {
+ dup length 0 gt {
+ dup 0 get (%) 0 get eq {
+ pop true exit
+ } if
+ } if
+ .file_name_is_absolute exit
+ } loop
+} bind def
+/ResourceFileName
+ { % /in (scr)
+ exch //.rfnstring cvs % (scr) (n)
+ /GenericResourcePathSep getsystemparam exch % (scr) (/) (n)
+ Category .namestring % (scr) (/) (n) (c)
+ 3 1 roll % (scr) (c) (/) (n)
+ concatstrings concatstrings % (scr) (c/n)
+ /GenericResourceDir getsystemparam //.file_name_is_iodevice_or_absolute exec not {
+ /GenericResourceDir getsystemparam exch concatstrings
+ findlibfile
+ { % (scr) (p/c/n) file
+ pop exch copy true % (p/c/n) true
+ } { % (scr) (c/n)
+ false % (scr) (c/n) false
+ } ifelse
+ } { % (scr) (c/n)
+ false % (scr) (c/n) false
+ } ifelse
+ not { % (scr) (c/n)
+ /GenericResourceDir getsystemparam % (scr) (c/n) (d/)
+ dup length exch % (scr) (c/n) Ld (d/)
+ 3 index copy pop % (scr') (c/n) Ld
+ 1 index length % (scr') (c/n) Ld Lcn
+ 3 index 3 copy pop % (scr') (c/n) Ld Lcn (scr') Ld Lcn
+ getinterval % (scr') (c/n) Ld Lcn (scr[Ld:Lcn])
+ 4 3 roll exch % (scr') Ld Lcn (c/n) (scr[Ld:Lcn])
+ copy pop % (scr'') Ld Lcn
+ add 0 exch getinterval % (scr''[0:Ld+Lcn])
+ } if
+ } bind
+
+ % Additional entries
+
+% Unfortunately, we can't create the real .Instances dictionary now,
+% because if someone copies the Generic category (which pp. 95-96 of the
+% 2nd Edition Red Book says is legitimate), they'll wind up sharing
+% the .Instances. Instead, we have to create .Instances on demand,
+% just like the entry in localinstancedict.
+% We also have to prevent anyone from creating instances of Generic itself.
+/.Instances //.emptydict
+
+/.LocalInstances
+ { localinstancedict Category .knownget not { //.emptydict } if
+ } bind
+/.GetInstance
+ { currentglobal
+ { .Instances exch .knownget }
+ { .LocalInstances 1 index .knownget
+ { exch pop true }
+ { .Instances exch .knownget }
+ ifelse
+ }
+ ifelse
+ } bind
+/.CheckResource
+ { true
+ } bind
+/.vmused {
+ % - .vmused <usedvalue>
+ % usedvalue = vmstatus in global + vmstatus in local.
+ 0 2 {
+ .currentglobal not .setglobal
+ vmstatus pop exch pop add
+ } repeat
+} bind def
+/.DoLoadResource {
+ % .LoadResource may push entries on the operand stack.
+ % It is an undocumented feature of Adobe implementations,
+ % which we must match for the sake of some badly written
+ % font downloading code, that such entries are popped
+ % automatically.
+ count 1 index cvlit .vmused
+ % Stack: key count litkey memused
+ {.LoadResource} 4 1 roll 4 .execn
+ % Stack: ... count key memused
+ .vmused exch sub
+ 1 index .getvminstance not {
+ pop dup .undefinedresource % didn't load
+ } if
+ dup 1 1 put
+ 2 3 -1 roll put
+ % Stack: ... count key
+ exch count 1 sub exch sub {exch pop} repeat
+} bind
+/.LoadResource
+ { dup .ResourceFile
+ { exch pop currentglobal
+ { .runresource }
+ { true setglobal { .runresource } stopped false setglobal { stop } if }
+ ifelse
+ }
+ { dup .undefinedresource
+ }
+ ifelse
+ } bind
+/.ResourceFile
+ {
+ Category //.rfnstring cvs length % key l
+ dup //.rfnstring dup length 2 index sub % key l l (buf) L-l
+ 3 2 roll exch getinterval % key l ()
+ .file_name_directory_separator exch copy length add % key l1
+ dup //.rfnstring dup length 2 index sub % key l1 l1 (buf) L-l
+ 3 2 roll exch getinterval % key l1 ()
+ 2 index exch cvs length add % key l2
+ //.rfnstring exch 0 exch getinterval % key (relative_path)
+ .libfile {
+ exch pop true
+ } {
+ pop
+ currentdict /ResourceFileName known {
+ mark 1 index //.rfnstring { ResourceFileName } .internalstopped {
+ cleartomark false
+ } {
+ (r) { file } .internalstopped {
+ cleartomark false
+ } {
+ exch pop exch pop true
+ } ifelse
+ } ifelse
+ } {
+ pop false
+ } ifelse
+ } ifelse
+ } bind
+
+
+
+.dicttomark
+/Category defineresource pop
+
+% Fill in the rest of the Category category.
+/Category /Category findresource dup
+/Generic /Category findresource begin {
+ /FindResource /ResourceForAll /ResourceStatus /.ResourceFileStatus
+ /UndefineResource /ResourceFileName
+ /.ResourceFile /.LoadResource /.DoLoadResource
+} { dup load put dup } forall
+pop readonly pop end
+
+(END GENERIC) VMDEBUG
+
+% Define the fixed categories.
+
+mark
+ % Non-Type categories with existing entries.
+ /ColorSpaceFamily
+ { } % These must be deferred, because optional features may add some.
+ /Emulator
+ mark EMULATORS { cvn } forall .packtomark
+ /Filter
+ { } % These must be deferred, because optional features may add some.
+ /IODevice
+ % Loop until the .getiodevice gets a rangecheck.
+ errordict /rangecheck 2 copy get
+ errordict /rangecheck { pop stop } put % pop the command
+ mark 0 { {
+ dup .getiodevice dup null eq { pop } { exch } ifelse 1 add
+ } loop} .internalstopped
+ pop pop pop .packtomark
+ 4 1 roll put
+ .clearerror
+ % Type categories listed in the Red Book.
+ /ColorRenderingType
+ { } % These must be deferred, because optional features may add some.
+ /FMapType
+ { } % These must be deferred, because optional features may add some.
+ /FontType
+ { } % These must be deferred, because optional features may add some.
+ /FormType
+ { } % These must be deferred, because optional features may add some.
+ /HalftoneType
+ { } % These must be deferred, because optional features may add some.
+ /ImageType
+ { } % Deferred, optional features may add some.
+ /PatternType
+ { } % Deferred, optional features may add some.
+ % Type categories added since the Red Book.
+ /setsmoothness where {
+ pop /ShadingType { } % Deferred, optional features may add some.
+ } if
+counttomark 2 idiv
+ { mark
+
+ % Standard entries
+
+ % We'd like to prohibit defineresource,
+ % but because optional features may add entries, we can't.
+ % We can at least require that the key and value match.
+ /DefineResource
+ { currentglobal not
+ { /defineresource cvx /invalidaccess signaloperror }
+ { 2 copy ne
+ { /defineresource cvx /rangecheck signaloperror }
+ { dup .Instances 4 -2 roll .growput }
+ ifelse
+ }
+ ifelse
+ } bind
+ /UndefineResource
+ { /undefineresource cvx /invalidaccess signaloperror } bind
+ /FindResource
+ { .Instances 1 index .knownget
+ { exch pop }
+ { /findresource cvx .undefinedresource }
+ ifelse
+ } bind
+ /ResourceStatus
+ { .Instances exch known { 0 0 true } { false } ifelse } bind
+ /ResourceForAll
+ /Generic .findcategory /ResourceForAll load end
+
+ % Additional entries
+
+ counttomark 2 add -1 roll
+ dup length dict dup begin exch { dup def } forall end
+ % We'd like to make the .Instances readonly here,
+ % but because optional features may add entries, we can't.
+ /.Instances exch
+ /.LocalInstances % used by ResourceForAll
+ 0 dict def
+
+ .dicttomark /Category defineresource pop
+ } repeat pop
+
+(END FIXED) VMDEBUG
+
+% Define the other built-in categories.
+
+/.definecategory % <name> -mark- <key1> ... <valuen> .definecategory -
+ { counttomark 2 idiv 2 add % .Instances, Category
+ /Generic /Category findresource dup maxlength 3 -1 roll add
+ dict .copydict begin
+ counttomark 2 idiv { def } repeat pop % pop the mark
+ currentdict end /Category defineresource pop
+ } bind def
+
+/ColorRendering mark /InstanceType /dicttype .definecategory
+% ColorSpace is defined below
+% Encoding is defined below
+% Font is defined below
+/Form mark /InstanceType /dicttype .definecategory
+/Halftone mark /InstanceType /dicttype .definecategory
+/Pattern mark /InstanceType /dicttype .definecategory
+/ProcSet mark /InstanceType /dicttype .definecategory
+% Added since the Red Book:
+/ControlLanguage mark /InstanceType /dicttype .definecategory
+/HWOptions mark /InstanceType /dicttype .definecategory
+/Localization mark /InstanceType /dicttype .definecategory
+/OutputDevice mark /InstanceType /dicttype .definecategory
+/PDL mark /InstanceType /dicttype .definecategory
+% CIDFont, CIDMap, and CMap are defined in gs_cidfn.ps
+% FontSet is defined in gs_cff.ps
+% IdiomSet is defined in gs_ll3.ps
+% InkParams and TrapParams are defined in gs_trap.ps
+
+(END MISC) VMDEBUG
+
+% Define the ColorSpace category.
+
+/.defaultcsnames mark
+ /DefaultGray 0
+ /DefaultRGB 1
+ /DefaultCMYK 2
+.dicttomark readonly def
+
+% The "hooks" are no-ops here, redefined in LL3.
+/.definedefaultcs { % <index> <value> .definedefaultcs -
+ pop pop
+} bind def
+/.undefinedefaultcs { % <index> .undefinedefaultcs -
+ pop
+} bind def
+
+/ColorSpace mark
+
+/InstanceType /arraytype
+
+% We keep track of whether there are any local definitions for any of
+% the Default keys. This information must get saved and restored in
+% parallel with the local instance dictionary, so it must be stored in
+% local VM.
+userdict /.localcsdefaults false put
+
+/DefineResource {
+ 2 copy /Generic /Category findresource /DefineResource get exec
+ exch pop
+ exch //.defaultcsnames exch .knownget {
+ 1 index .definedefaultcs
+ currentglobal not { .userdict /.localcsdefaults true put } if
+ } if
+} bind
+
+/UndefineResource {
+ dup /Generic /Category findresource /UndefineResource get exec
+ //.defaultcsnames 1 index .knownget {
+ % Stack: resname index
+ currentglobal {
+ .undefinedefaultcs pop
+ } {
+ % We removed the local definition, but there might be a global one.
+ exch .GetInstance {
+ 0 get .definedefaultcs
+ } {
+ .undefinedefaultcs
+ } ifelse
+ % Recompute .localcsdefaults by scanning. This is rarely needed.
+ .userdict /.localcsdefaults false //.defaultcsnames {
+ pop .LocalInstances exch known { pop true exit } if
+ } forall put
+ } ifelse
+ } {
+ pop
+ } ifelse
+} bind
+
+.definecategory % ColorSpace
+
+% Define the Encoding category.
+
+/Encoding mark
+
+/InstanceType /arraytype
+
+% Handle already-registered encodings, including lazily loaded encodings
+% that aren't loaded yet.
+
+/.Instances mark
+ EncodingDirectory
+ { dup length 256 eq { [ exch readonly 0 -1 ] } { pop [null 2 -1] } ifelse
+ } forall
+.dicttomark
+
+/.ResourceFileDict mark
+ EncodingDirectory
+ { dup length 256 eq { pop pop } { 0 get } ifelse
+ } forall
+.dicttomark
+
+/ResourceFileName
+ { .ResourceFileDict 2 index .knownget
+ { exch copy exch pop }
+ { /Generic /Category findresource /ResourceFileName get exec }
+ ifelse
+ } bind
+
+.definecategory % Encoding
+
+% Make placeholders in level2dict for the redefined Encoding operators,
+% so that they will be swapped properly when we switch language levels.
+
+/.findencoding /.findencoding load def
+/findencoding /findencoding load def
+/.defineencoding /.defineencoding load def
+
+(END ENCODING) VMDEBUG
+
+% Define the Font category.
+
+/.fontstatus { % <fontname> .fontstatus <fontname> <found>
+ { % Create a loop context just so we can exit it early.
+ % Check Fontmap.
+ Fontmap 1 index .knownget {
+ {
+ dup type /nametype eq {
+ .fontstatus { pop null exit } if
+ } {
+ dup type /stringtype eq {
+ findlibfile { closefile pop null exit } if pop
+ } {
+ % Procedure, assume success.
+ pop null exit
+ } ifelse
+ } ifelse
+ } forall dup null eq { pop true exit } if
+ } if
+ % Convert names to strings; give up on other types.
+ dup type /nametype eq { .namestring } if
+ dup type /stringtype ne { false exit } if
+ % Check the resource directory.
+ dup .fonttempstring /FontResourceDir getsystemparam .genericrfn
+ status {
+ pop pop pop pop true exit
+ } if
+ % Check for a file on the search path with the same name
+ % as the font.
+ findlibfile { closefile true exit } if
+ % Scan a FONTPATH directory and try again.
+ .scannextfontdir not { false exit } if
+ } loop
+} bind def
+
+/Font mark
+
+/InstanceType /dicttype
+
+/DefineResource
+ { 2 copy //definefont exch pop
+ /Generic /Category findresource /DefineResource get exec
+ } bind
+/UndefineResource
+ { dup //undefinefont
+ /Generic /Category findresource /UndefineResource get exec
+ } bind
+/FindResource {
+ dup .getvminstance {
+ exch pop 0 get
+ } {
+ dup ResourceStatus {
+ pop 1 gt { .loadfontresource } { .GetInstance pop 0 get } ifelse
+ } {
+ .loadfontresource
+ } ifelse
+ } ifelse
+} bind
+/ResourceForAll {
+ { .scannextfontdir not { exit } if } loop
+ /Generic /Category findresource /ResourceForAll get exec
+} bind
+/.ResourceFileStatus {
+ .fontstatus { pop 2 -1 true } { pop false } ifelse
+} bind
+
+/.loadfontresource {
+ dup vmstatus pop exch pop exch
+ % Hack: rebind .currentresourcefile so that all calls of
+ % definefont will know these are built-in fonts.
+ currentfile {pop //findfont exec} .execasresource % (findfont is a procedure)
+ exch vmstatus pop exch pop exch sub
+ % stack: name font vmused
+ % findfont has the prerogative of not calling definefont
+ % in certain obscure cases of font substitution.
+ 2 index .getvminstance {
+ dup 1 1 put
+ 2 3 -1 roll put
+ } {
+ pop
+ } ifelse exch pop
+} bind
+
+/.Instances FontDirectory length 2 mul dict
+
+.definecategory % Font
+
+% Redefine font "operators".
+/.definefontmap
+ { /Font /Category findresource /.Instances get
+ dup 3 index known
+ { pop
+ }
+ { 2 index
+ % Make sure we create the array in global VM.
+ .currentglobal true .setglobal
+ [null 2 -1] exch .setglobal
+ .growput
+ }
+ ifelse
+ //.definefontmap exec
+ } bind def
+
+% Make sure the old definitions are still in systemdict so that
+% they will get bound properly.
+systemdict begin
+ /.origdefinefont /definefont load def
+ /.origundefinefont /undefinefont load def
+ /.origfindfont /findfont load def
+end
+/definefont {
+ { /Font defineresource } stopped {
+ /definefont cvx $error /errorname get signalerror
+ } if
+} bind odef
+/undefinefont {
+ /Font undefineresource
+} bind odef
+% The Red Book requires that findfont be a procedure, not an operator,
+% but it still needs to restore the stacks reliably if it fails.
+/.findfontop {
+ { /Font findresource } stopped {
+ pop /findfont $error /errorname get signalerror
+ } if
+} bind odef
+/findfont {
+ .findfontop
+} bind def % Must be a procedure, not an operator
+
+% Remove initialization utilities.
+currentdict /.definecategory .undef
+currentdict /.emptydict .undef
+
+end % level2dict
+
+% Convert deferred resources after we finally switch to Level 2.
+
+/.fixresources {
+ % Encoding resources
+ EncodingDirectory
+ { dup length 256 eq
+ { /Encoding defineresource pop }
+ { pop pop }
+ ifelse
+ } forall
+ /.findencoding {
+ { /Encoding findresource } stopped {
+ pop /findencoding $error /errorname get signalerror
+ } if
+ } bind def
+ /findencoding /.findencoding load def % must be a procedure
+ /.defineencoding { /Encoding defineresource pop } bind def
+ % ColorRendering resources and ProcSet
+ systemdict /ColorRendering .knownget {
+ /ColorRendering exch /ProcSet defineresource pop
+ systemdict /ColorRendering undef
+ /DefaultColorRendering currentcolorrendering /ColorRendering defineresource pop
+ } if
+ % ColorSpace resources
+ systemdict /CIEsRGB .knownget {
+ /sRGB exch /ColorSpace defineresource pop
+ systemdict /CIEsRGB undef
+ } if
+ % ColorSpaceFamily resources
+ colorspacedict { pop dup /ColorSpaceFamily defineresource pop } forall
+ % Filter resources
+ filterdict { pop dup /Filter defineresource pop } forall
+ % FontType and FMapType resources
+ buildfontdict { pop dup /FontType defineresource pop } forall
+ mark
+ buildfontdict 0 known { 2 3 4 5 6 7 8 } if
+ buildfontdict 9 known { 9 } if
+ counttomark { dup /FMapType defineresource pop } repeat pop
+ % FormType resources
+ .formtypes { pop dup /FormType defineresource pop } forall
+ % HalftoneType resources
+ .halftonetypes { pop dup /HalftoneType defineresource pop } forall
+ % ColorRenderingType resources
+ .colorrenderingtypes {pop dup /ColorRenderingType defineresource pop} forall
+ % ImageType resources
+ .imagetypes { pop dup /ImageType defineresource pop } forall
+ % PatternType resources
+ .patterntypes { pop dup /PatternType defineresource pop } forall
+ % Make the fixed resource categories immutable.
+ /.shadingtypes where {
+ pop .shadingtypes { pop dup /ShadingType defineresource pop } forall
+ } if
+ [ /ColorSpaceFamily /Emulator /Filter /IODevice /ColorRenderingType
+ /FMapType /FontType /FormType /HalftoneType /ImageType /PatternType
+ /.shadingtypes where { pop /ShadingType } if
+ ] {
+ /Category findresource
+ dup /.Instances get readonly pop
+ .LocalInstances readonly pop
+ readonly pop
+ } forall
+ % clean up
+ systemdict /.fixresources undef
+} bind def
+
+%% Replace 1 (gs_resmp.ps)
+(gs_resmp.ps) dup runlibfile VMDEBUG
diff --git a/Master/tlpkg/tlgs/lib/gs_resmp.ps b/Master/tlpkg/tlgs/lib/gs_resmp.ps
new file mode 100644
index 00000000000..64bda1a4b81
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_resmp.ps
@@ -0,0 +1,531 @@
+% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_resmp.ps 8046 2007-06-12 20:55:18Z alexcher $
+% A procset to redefine a resource category with a resource map.
+
+% Public entries :
+
+% Redefine - a procedure for redefining a resource category with a map.
+% Methods for interpreting the resource map to be provided by client
+% in the argument dictionary.
+%
+% Note that the procedure Redefine is idempotential :
+% consequtive calls to it will not replace the category methods,
+% but will merge resource maps. If an interleaving redefinition
+% needs to cancel the idempotentity, it must remove the entry
+% /.IsRedefinedWithMap from the category dictionary.
+
+% MakeResourceEnumerator - this procedure is useful for
+% redefining any category. It provides a proper order of instances
+% and proper stacks during resourceforall.
+
+% BindWithCurrentdict - a procedure for generating temporary procedures
+% from templates, binding them with a local dictionary.
+
+% execstack_lookup - a procedure for communicating through the execution stack.
+% It allows for a callee to get an information from an indirect caller.
+
+% The procedures are designed for exeution witout putting
+% the procset instance onto the dictionary stack.
+
+languagelevel 2 .setlanguagelevel
+currentglobal true setglobal
+
+/MappedCategoryRedefiner 10 dict begin % The procset.
+
+currentpacking false setpacking
+
+/InstanceEnumeratorPattern % - InstanceEnumeratorPattern ...
+{
+ % This is a pattern for enumeration procedure to be built dynamically,
+ % applying BindWithCurrentdict with a temporary dictionary.
+ % The following names will be replaced with specific objects
+ % during BindWithCurrentdict :
+ % en_local_dict - a dictionary for storing the local integer variable 'status'.
+ % scr - the scratch string argument of resourceforall;
+ % proc - the procedure argument of resourceforall;
+ % InstancesStatus - a dictionary that maps resource instance names to their status value;
+ % Category - the category to be enumerated.
+
+ % When this procedure is called from ResourceForAll, the category is the current dictionary.
+ % We remove it from the dictionary stack before performing the enumeration
+ % to provide the <proc> to write to the underlying dictionary,
+ % and put it back after the enumeration is completed.
+ end
+ {
+ 0 1 2 {
+ en_local_dict exch /status exch put
+ InstancesStatus {
+ en_local_dict /status get eq {
+ scr cvs % ... (Font)
+ proc exec %
+ } {
+ pop
+ } ifelse % ...
+ } forall
+ } for % ...
+ } stopped
+ Category begin
+ { stop } if
+} bind def
+
+% An auxiliary proc for BindWithCurrentdict :
+/.BindAux % <proc> BindAux <proc>
+{ 0 exec
+} bind def
+
+setpacking
+
+/BindWithCurrentdict % <proc> BindWithCurrentdict <proc>
+{
+ % Make a copy of the given procedure, binding in the values of all names
+ % defined in currentdict.
+ % Caution1 : this code cannot handle procedures that were already
+ % bound recursively.
+ % Caution2 : this code don't bind packedarrays. This was done
+ % intentionally for a termination of the procedure tree.
+
+ dup length array copy
+ dup length 1 sub -1 0 {
+ 2 copy get % {precopy} i {elem}
+ dup dup type /arraytype eq exch xcheck and {
+ % {precopy} i {elem}
+ //.BindAux exec % {precopy} i {elem_copy}
+ 2 index 3 1 roll put % {precopy}
+ } {
+ dup dup type /nametype eq exch xcheck and {
+ % {precopy} i {elem}
+ currentdict exch .knownget {
+ 2 index 3 1 roll put % {precopy}
+ } {
+ pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ } ifelse % {precopy}
+ } for % {copy}
+ cvx
+} bind def
+
+//.BindAux 0 //BindWithCurrentdict put % bind the recursive call in 'Bind'.
+
+/MakeResourceEnumerator % <proc> <scr> <InstancesStatus> MakeResourceEnumerator <Enumerator>
+{
+ % Build the enumeration procedure :
+
+ % Since the resourceforall procedure may leave values on the operand stack,
+ % we cannot simply store the enumerator's local data on the stack.
+ % We also cannot use a static dictionary to store local variables,
+ % because of possible recursion in the resourceforall procedure.
+ % To work around this, we create a copy of the enumeration procedure and
+ % bind it dynamically with a temporary dictionary, which contains
+ % local variables for the currently executing instance of resourceforall.
+
+ % Always place the enumerator in local VM,
+ % because its elements may be in local VM.
+
+ currentglobal 4 1 roll
+ false setglobal
+ currentdict % Category
+ 6 dict begin % the temporary dictionary
+ /Category exch def
+ /InstancesStatus exch def
+ /scr exch def
+ /proc exch def
+ /en_local_dict currentdict def
+ //InstanceEnumeratorPattern //BindWithCurrentdict exec % Enumerator
+ /status 0 def % variable for the current status to enumerate - do not bind with it !
+ end
+ exch setglobal
+} bind def
+
+/execstack_lookup % <object> execstack_lookup <object1>
+ % <object> execstack_lookup null
+{ % Checks whether execution stack contains a procedure starting with <object>,
+ % and retrives the 2nd element of the procedure,
+ % or null if the procedure was not found.
+ %
+ % Since 'execstack' actually renders subarrays of procedures,
+ % the pattern for recognition must be like this :
+ %
+ % { <object> <object1>
+ % CallSomething
+ % } loop
+ %
+ % The solution with 'loop' depends on how GS implements cycles,
+ % so it must not appear in documents, which are required to be interpreter independent.
+ % Any other type of cycles are also acceptable.
+ % If no repitition is really needed, just insert 'exit' into its body.
+ % If <object> <object1> are not needed for the caller, insert "pop pop" after them.
+ % If <object1> is really unuseful, the pattern may be simplified :
+ %
+ % { <object> pop
+ % CallSomething
+ % exit
+ % } loop
+ %
+ % It will retrieve 'pop' or 'null'.
+ %
+ % Note that 2 topmost execstack elements are the execstack_lookup procedure and its caller.
+ % We don't check them.
+
+ currentglobal false setglobal % <object> bGlobal
+ countexecstack array execstack % <object> bGlobal [execstack]
+ dup null exch % <object> bGlobal [execstack] null [execstack]
+ length 3 sub -1 0 { % <object> bGlobal [execstack] null i
+ 2 index exch get % <object> bGlobal [execstack] null proc
+ dup type dup /packedarraytype eq exch /arraytype eq or {
+ dup rcheck {
+ dup length 1 gt { % <object> bGlobal [execstack] null proc
+ dup 0 get % <object> bGlobal [execstack] null proc elem0
+ 5 index eq { % <object> bGlobal [execstack] null proc
+ 1 get % <object> bGlobal [execstack] null object1
+ exch pop exit % <object> bGlobal [execstack] object1
+ } {
+ pop
+ } ifelse
+ } {
+ pop % <object> bGlobal [execstack] false
+ } ifelse
+ } {
+ pop % <object> bGlobal [execstack] false
+ } ifelse
+ } {
+ pop % <object> bGlobal [execstack] false
+ } ifelse
+ } for % <object> bGlobal [execstack] bResult
+ exch pop exch setglobal exch pop % bResult
+} bind def
+
+currentpacking false setpacking
+/MethodsToRedefine 5 dict begin
+
+ % Procedures in this dictionary really are patterns for new category methods.
+ % The following names will be replaced with specific objects during BindWithCurrentdict :
+ % .map - the map dictionary;
+ % DefineResource, ResourceStatus, ResourceFileName, FindResource, ResourceForAll
+ % - procedures from the original resource category.
+
+ /FindResource % <Name> FindResource <dict>
+ { RESMPDEBUG { (resmp FindResource beg ) print dup = } if
+ dup ResourceStatus exec {
+ pop 2 lt
+ } {
+ false
+ } ifelse % bInVirtualMemory
+ { FindResource exec
+ } {
+ dup dup .map exch .knownget { % /Name /Name <<record>>
+ dup dup /RecordVirtualMethods get /IsActive get exec {
+ 1 index .getvminstance { % /Name /Name <<record>> holder
+ 1 get 1 eq
+ } {
+ true
+ } ifelse % /Name /Name <<record>> bStatusIs1
+ 4 1 roll % bStatusIs1 /Name /Name <<record>>
+ dup /RecordVirtualMethods get /MakeInstance get exec
+ % bStatusIs1 /Name /Name Instance size
+ 5 1 roll % size bStatusIs1 /Name /Name Instance
+ DefineResource exec % size bStatusIs1 /Name Instance
+ % Make ResourceStatus to return correct values for this instance :
+ % Hack: we replace status values in the instance holder :
+ exch .getvminstance pop % size bStatusIs1 Instance holder
+ dup 5 -1 roll 2 exch put % bStatusIs1 Instance holder
+ 3 2 roll { % Instance holder
+ 1 1 put % Instance
+ } {
+ pop
+ } ifelse % Instance
+ } { % /Name /Name <<record>>
+ pop pop FindResource exec
+ } ifelse
+ } { % /Name /Name
+ pop FindResource exec
+ } ifelse
+ } ifelse
+ RESMPDEBUG { (resmp FindResource end) = } if
+ } bind def
+
+ /ResourceStatus % <Name> ResourceStatus <status> <size> true
+ % <Name> ResourceStatus false
+ { RESMPDEBUG { (resmp ResourceStatus beg ) print dup == } if
+ dup ResourceStatus exec { % /Name status size
+ 1 index 2 lt {
+ % In VM - return with it.
+ 3 2 roll pop true
+ } {
+ % Not in VM.
+ exch pop exch % size /Name
+ dup .map exch .knownget { % size /Name <<record>>
+ dup dup /RecordVirtualMethods get /IsActive get exec {
+ 3 2 roll pop % /Name <<record>>
+ dup /RecordVirtualMethods get /GetSize get exec 2 exch true
+ } { % size /Name <<record>>
+ pop pop 2 exch true
+ } ifelse
+ } { % size /Name
+ pop 2 exch true
+ } ifelse
+ } ifelse
+ } { % /Name
+ dup .map exch .knownget { % /Name <<record>>
+ dup dup /RecordVirtualMethods get /IsActive get exec {
+ dup /RecordVirtualMethods get /GetSize get exec 2 exch true
+ } { % /Name <<record>>
+ pop pop false
+ } ifelse
+ } { % /Name
+ pop false
+ } ifelse
+ } ifelse
+ RESMPDEBUG { (resmp ResourceStatus end) = } if
+ } bind def
+
+ /ResourceFileName % <Name> <scratch> ResourceFileName <string>
+ { RESMPDEBUG { (resmp ResourceFileName beg ) print 1 index = } if
+ exch % (scratch) /Name
+ .map 1 index .knownget { % (scratch) /Name <<record>>
+ RESMPDEBUG { (resmp ResourceFileName : have a map record.) = } if
+ dup dup /RecordVirtualMethods get /IsActive get exec {
+ RESMPDEBUG { (resmp ResourceFileName : record is active.) = } if
+ dup /RecordVirtualMethods get /GetFilePath get exec % (string)
+ RESMPDEBUG { (resmp ResourceFileName : retrieving ) print dup = } if
+ } { % (scratch) /Name <<record>>
+ RESMPDEBUG { (resmp ResourceFileName : record is NOT active.) = } if
+ pop exch ResourceFileName exec
+ RESMPDEBUG { (resmp ResourceFileName : retrieving ) print dup = } if
+ } ifelse
+ } {
+ RESMPDEBUG { (resmp ResourceFileName : have NO map record.) = } if
+ exch ResourceFileName exec
+ RESMPDEBUG { (resmp ResourceFileName : retrieving ) print dup = } if
+ } ifelse
+ RESMPDEBUG { (resmp ResourceFileName end) = } if
+ } bind def
+
+ /ResourceForAll % <template> <proc> <scratch> ResourceForAll -
+ { RESMPDEBUG { (resmp ResourceForAll beg ) print CategoryName =string cvs print ( ) print 2 index = } if
+ % Create InstancesStatus dictionary :
+ 20 dict % IS - Instances Status
+ 4 1 roll % <<IS>> (templ) {proc} (sctarch)
+ % Check if we are under another ResourceForAll :
+ /.DisableResourceOrdering //execstack_lookup exec null eq 4 1 roll
+ % <<IS>> bOrder (templ) {proc} (sctarch)
+
+ % Put underlying resources to the InstancesStatus dictionary :
+ currentdict % the category
+ begin % ResourceForAll removes it locally.
+ 2 index
+ { cvn % <<IS>> bOrder (templ) {proc} (sctarch) /Name
+ 4 index {
+ dup ResourceStatus exec {pop 6 index 3 1 roll put} {pop} ifelse
+ } {
+ 5 index exch 2 put % Don't need the ordering, put '2' as a scratch.
+ } ifelse
+ }
+ 2 index ResourceForAll exec % <<IS>> bOrder (templ) {proc} (sctarch)
+ 4 3 roll pop % <<IS>> (templ) {proc} (sctarch)
+ end
+
+ % Put .map entries to the InstancesStatus dictionary :
+ 4 -1 roll begin % (templ) {proc} (sctarch)
+ .map { % (templ) {proc} (sctarch) /Name record
+ dup dup /RecordVirtualMethods get /IsActive get exec {
+ pop % (templ) {proc} (sctarch) /Name
+ dup currentdict exch known {
+ pop
+ } {
+ dup 2 index cvs % (templ) {proc} (sctarch) /Name (Name)
+ 4 index .stringmatch { % (templ) {proc} (sctarch) /Name
+ 2 def % It is not in VM.
+ } {
+ pop
+ } ifelse
+ } ifelse
+ } { % (templ) {proc} (sctarch) /Name record
+ pop pop
+ } ifelse
+ } forall % (templ) {proc} (sctarch)
+
+ % prepare stacks for the enumeration :
+ 3 2 roll pop % {proc} (sctarch)
+ currentdict end % {proc} (scratch) <<IS>>
+
+ % Make the enumerator and apply it :
+ //MakeResourceEnumerator exec exec
+ RESMPDEBUG { (resmp ResourceForAll end)= } if
+ } bind def
+
+ /GetCIDSystemInfoFromMap % <Name> GetCIDSystemInfoFromMap <Name>
+ % <Name> GetCIDSystemInfoFromMap <dict>
+ { RESMPDEBUG { (resmp GetCIDSystemInfoFromMap beg ) print dup = } if
+ % This is a special function for communicating with GetCIDSystemInfo in gs_cidcm.ps .
+ dup .map exch .knownget {
+ RESMPDEBUG { (resmp GetCIDSystemInfoFromMap : have a map record.) = } if
+ dup /RecordVirtualMethods get /GetCSI get exec
+ dup null ne {
+ RESMPDEBUG { (resmp GetCIDSystemInfoFromMap : retrieving a dict.) = } if
+ exch
+ } if
+ pop
+ } if
+ RESMPDEBUG { (resmp GetCIDSystemInfoFromMap end) = } if
+ } bind def
+
+currentdict end def
+setpacking
+
+/Redefine % <OptionsDict> Redefine -
+{ % Before calling this proc, the OptionsDict must specify options for
+ % the catregory to be redefined :
+ % CategoryName - a name of category to redefine;
+ % MapFileName - a string for the resource map file name;
+ % VerifyMap - a procedure :
+ % <raw_map> VerifyMap -
+ % - checks the map for consistency
+ % PreprocessRecord - a procedure :
+ % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> true
+ % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <raw_record> false
+ % - converts a map record into a dictionary;
+ % It must add RecordVirtualMethods dictionary to the record :
+ % MakeInstance - a procedure :
+ % <Name> <record> MakeInstance <Name> <Instance> <size>
+ % - converts the record to resource instance;
+ % GetFilePath - a procedure for ResourceFileName :
+ % <scratch> <Name> <record> GetFilePath <filepath>
+ % GetSize - a procedure for ResourceStatus :
+ % <Name> <record> GetSize <size>
+ % GetCSI - a procedure for obtaining CIDSystemInfo dictionary from the record :
+ % <record> GetCSI <CSI>
+ % <record> GetCSI null
+ % IsActive - a procedure for skipping records depending on the current device :
+ % <record> IsActive <bool>
+ % Also it is allowed to contain additional entries for client's needs.
+ % The OptionsDict is also used for storing some local variables.
+
+ % If a category is being redefined several times with this function,
+ % each redefinition must either use an unique map file,
+ % or the map file should be scanned by the last redefinition
+ % (and must be defined in the last one with /MapFileName).
+ % This happens so because we must accumulate all variants of
+ % methods before scanning the map. We would like to delay
+ % the scanning until all redefinitions are done, but it requires
+ % to implement a queue of "refinish" methods and execute it
+ % at very end of the prelude.
+
+ begin % OptionsDict
+ CategoryName /Category findresource /OldCategory exch def
+ OldCategory /.IsRedefinedWithMap known {
+ % Already redefined with map - don't redefine, but enhance the map.
+ OldCategory /NewCategory exch def
+ } {
+ % Redefine with a new category instance.
+ OldCategory dup length dict
+ dup /.PreprocessRecord 4 dict put
+ copy /NewCategory exch def
+ } ifelse
+
+ % Provide the 'or' logic for PreprocessRecord,
+ % to allow different record types to be mixed in a single map file.
+ % We do this with building a dictionary of PreprocessRecord procedures,
+ % which come from different calls to Redefine :
+ NewCategory /.PreprocessRecord get dup length % <<pr>> l
+ currentdict /PreprocessRecord get .growput
+
+ currentdict /MapFileName known {
+ MapFileName .libfile {
+ 1 dict begin
+ /; {} def
+ mark exch cvx exec .dicttomark % <<map>>
+ end
+ dup VerifyMap % <<map>>
+ } {
+ QUIET not {
+ currentdict /IsMapFileOptional .knownget not { false } if not {
+ (Warning: the map file ) print dup =string cvs print ( was not found.) =
+ } if
+ } if
+ pop 0 dict % <<map>>
+ } ifelse
+ } {
+ currentdict /.map .knownget not {
+ 0 dict % <<map>>
+ } if
+ } ifelse
+
+ % Preprocess entries :
+ dup NewCategory /.PreprocessRecord get % <<map>> <<map>> <<pr>>
+ 3 1 roll { % <<pr>> <<map>> /Name raw_record
+ false 3 1 roll % <<pr>> <<map>> false /Name raw_record
+ 4 index { % <<pr>> <<map>> false /Name raw_record i {pr}
+ exch pop % <<pr>> <<map>> false /Name raw_record {pr}
+ exec { % <<pr>> <<map>> false /Name record
+ 3 -1 roll pop true 3 1 roll % <<pr>> <<map>> true /Name record
+ exit
+ } if % <<pr>> <<map>> false /Name raw_record
+ } forall
+ 3 2 roll { % <<pr>> <<map>> /Name record
+ 2 index 3 1 roll put % <<pr>> <<map>>
+ } {
+ exch % <<pr>> <<map>> raw_record /Name
+ (Incorrect record ) print =string cvs print ( of the map file ) print MapFileName =string cvs print (.) =
+ end % Pops OptionsDict from dstack.
+ pop pop pop %
+ /Redefine cvx /undefinedresource signalerror
+ } ifelse
+ } forall % <<pr>> <<map>>
+ exch pop % <<map>>
+
+
+ % Add the map :
+ OldCategory /.IsRedefinedWithMap known { % <<map>>
+ % Just add to the old map :
+ OldCategory /.map get copy pop %
+ } { % <<map>>
+ % Store the map to both the category and OptionsDict :
+ dup NewCategory exch /.map exch put
+ /.map exch def %
+ } ifelse
+ OldCategory /.IsRedefinedWithMap known not {
+ % Copy old methods to OptionsDict :
+ [ /DefineResource /ResourceStatus /ResourceFileName
+ /FindResource /ResourceForAll
+ ] {
+ dup OldCategory exch get def
+ } forall
+
+ % Build new methods :
+ //MethodsToRedefine {
+ //BindWithCurrentdict exec NewCategory 3 1 roll put
+ } forall
+ CategoryName /CIDFont ne {
+ NewCategory /GetCIDSystemInfoFromMap undef
+ % This is some ugly, sorry.
+ } if
+ % Redefine the category :
+ NewCategory /.IsRedefinedWithMap true put
+ CategoryName NewCategory /Category defineresource pop
+ } if
+ end % OptionsDict
+} bind executeonly def
+
+currentdict /PutPreprocessRecord .undef
+
+currentdict end
+/ProcSet defineresource pop
+
+setglobal .setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_resst.ps b/Master/tlpkg/tlgs/lib/gs_resst.ps
new file mode 100644
index 00000000000..586b97a22b4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_resst.ps
@@ -0,0 +1,156 @@
+% Copyright (C) 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_resst.ps 8022 2007-06-05 22:23:38Z giles $
+% Redefine generic category with static resource table.
+
+languagelevel 2 .setlanguagelevel
+
+15 dict begin % a temporary dictionary for local binding.
+
+/sep (/) def % The %static% device uses platform independent paths.
+
+/tempstring 8192 string def
+
+/IsMyRecord % <raw_record> IsMyRecord <raw_record> bool
+{ dup type /dicttype eq { dup /StaticFilePos known } { false } ifelse
+} bind def
+
+/append_string % <scratch> <index> <string> append_string <scratch> <index>
+{
+ dup length 3 index 3 index 2 index getinterval % (scratch) index (string) l (scr_substr)
+ 3 2 roll exch copy pop add % (scratch) index'
+} bind def
+
+/StaticResourceRecordVirtualMethods 4 dict begin
+
+ /GetFilePath % <scratch> <Name> <record> GetFilePath <filepath>
+ { pop exch % /Name (scratch)
+ (%static%) dup length exch 2 index copy pop % /Name (scratch) l
+ //sep //append_string exec % /Name (scratch) l
+ Category //tempstring cvs //append_string exec % /Name (scratch) l
+ //sep //append_string exec % /Name (scratch) l
+ 3 2 roll //tempstring cvs % (scratch) l (Name)
+ //append_string exec % (scratch) l
+ 0 exch getinterval % (path)
+ } bind def
+
+ /MakeInstance % <Name> <record> MakeInstance <Name> <Instance> <size>
+ {
+ begin
+ STRESDEBUG { (Loading a static resource ) print dup = } if
+ 8192 string 2 index 2 index //GetFilePath exec
+ (r) file run
+ STRESDEBUG { (Completed loading the static resource ) print dup = } if
+ StaticFileEnd StaticFilePos sub
+ end
+ 1 index Category findresource
+ exch
+ } bind def
+
+ /GetSize % <Name> <record> GetSize <size>
+ {
+ % WARNING : this retrives file sise rather than VM size
+ begin
+ pop
+ StaticFileEnd StaticFilePos sub
+ end
+ } bind def
+
+ /IsActive % <record> IsActive <bool>
+ { pop true
+ } bind def
+
+currentdict end def
+
+mark
+/MappedCategoryRedefiner /ProcSet findresource begin
+
+/.StaticResourcesBeg % <end_string> <no_of_resources> <category_name> .StaticResourcesBeg <category_name>
+% Puts .map dictionary to dstack.
+{
+ STRESDEBUG { (Starting static resources for category ) print dup = } if
+ dup /Category resourcestatus {
+ pop pop exch dict begin exch pop
+ } {
+ STRESDEBUG { (Skipping the resources because the category isn't defined.) = } if
+ pop pop .skipeof
+ } ifelse
+} bind
+
+/.StaticResourcesEnd % <category_name> .StaticResourcesEnd -
+% Removes .map dictionary from dstack.
+{
+ STRESDEBUG { (Completting static resources for category ) print dup = } if
+ currentdict end dup % /CatName <map> <map>
+ systemdict /.io_static_root .knownget not {
+ 10 dict % /CatName <map> <map> <dir>
+ % Save it for garbager and for debug purpose :
+ dup systemdict exch /.io_static_root exch put % /CatName <map> <map> <dir>
+ dup .setup_io_static % /CatName <map> <map> <dir>
+ } if % /CatName <map> <map> <dir>
+ exch 3 index exch put % /CatName <map>
+ 14 dict begin
+ /.map exch def % /CatName
+ /CategoryName exch def %
+ /IsMapFileOptional true def
+ /VerifyMap { pop } bind def
+ /PreprocessRecord % <map> <Name> <raw_record> PreprocessRecord <map> <Name> <record> <bool>
+ { //IsMyRecord exec dup {
+ pop dup /RecordVirtualMethods //StaticResourceRecordVirtualMethods put
+ true
+ } if
+ } bind def
+ currentdict end
+ //Redefine exec
+} bind
+
+end % MappedCategoryRedefiner
+end % the temporary dictionary for local binding.
+
+/.BeginResource % <instance_name> BeginResource <instance_name>
+% Puts a record dictionary to dstack.
+{
+ STRESDEBUG { (Static resource ) print dup =string cvs print } if
+ currentfile fileposition
+ currentfile =string readline pop dup length 0 exch 10 .min getinterval (%% Replace) ne {
+ % We are in COMPILE_INITS=1 .
+ 4 dict begin
+ /StaticFilePos exch def
+ } {
+ % We are in COMPILE_INITS=0 .
+ pop
+ } ifelse
+ (%END_RESOURCE) .skipeof
+} bind
+
+/.EndResource % <instance_name> EndResource -
+% Removes a record dictionary from dstack.
+{
+ currentdict /StaticFilePos known {
+ /StaticFileEnd currentfile fileposition
+ (.EndResource) length sub
+ def
+ STRESDEBUG { ( from position ) print StaticFilePos =string cvs print ( to position ) print StaticFileEnd = } if
+ currentdict end def
+ } {
+ pop
+ STRESDEBUG { ( ignored with COMPILE_INITS=0. ) = } if
+ } ifelse
+} bind
+
+.dicttomark /StaticCategoryRedefiner exch /ProcSet defineresource pop
+
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_sepr.ps b/Master/tlpkg/tlgs/lib/gs_sepr.ps
new file mode 100644
index 00000000000..07b070b9675
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_sepr.ps
@@ -0,0 +1,268 @@
+% Copyright (C) 2001, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_sepr.ps 7201 2006-11-15 16:12:42Z ray $
+% Separation color space method dictionary
+
+
+% verify that Separation color spaces are supported
+/.setseparationspace where
+ { pop }
+ { currentfile closefile }
+ifelse
+
+.currentglobal true .setglobal
+.cspace_util begin
+
+
+%
+% <c1> <array> apply_sepr_tint_xform <c1>' ... <cn>' <array>
+%
+% Apply the tint transform for a Separation color space color intensity
+% value.
+%
+/apply_sepr_tint_xform
+ {
+ exch //bound_0_1 exec
+ mark exch 2 index 3 get exec
+ counttomark { cvr counttomark -1 roll } repeat % for CET, make all tints real.
+ counttomark 2 add -2 roll pop
+ }
+bind def
+
+
+%
+% <cspace_array> build_tintxform_function <cspace_array> <proc>
+%
+% Convert a tint transformation into a function, if possible. If this is
+% successful, <proc> will be a function procedure (a two-element,
+% execute-only, executable array whose first element is the function
+% data structure and whose second element is the operator %execfunction.
+% If it is not successful, <proc> will be the same as the tint transform
+% in <cspace_array>.
+%
+% Note that, for PDF files, the tint transform will likely already be a
+% function-array. In this case, <proc> will be this array, and thus will
+% also be identical to the original tint transform.
+%
+% This procedure is used for both Separation and DeviceN color spaces.
+%
+/build_tintxform_function
+ {
+ dup 3 get dup .isencapfunction not
+ {
+ % Try a FunctionType 4 function first; build the function dictionary
+ % in local VM.
+ .currentglobal exch //false .setglobal
+ % Make the dictionary a couple of elements large in case this fails
+ % and we need the dictionary to build a sampled function.
+ 6 dict begin
+ /FunctionType 4 def
+ /Function exch def
+ /Domain 2 index //.cs_get_range exec def
+ /Range 2 index 2 get //.cs_get_range exec def
+ currentdict end
+ { .buildfunction }
+ .internalstopped % If .buildfunction fails then not type 4 func.
+ { % If not then try building a sampled (type 0) func.
+ % We are using the dictionary which was created before .buildfunction
+ dup /Order 3 put
+ dup /BitsPerSample 16 put
+ { .buildsampledfunction }
+ .internalstopped % If .buildsamplefunction fails then invalid func.
+ { % Failed - Create a dummy tint transform function
+ % We are using the dictionary which was created before .buildfunction
+ dup /Function {} put % Replace invalid tint transform with dummy
+ .buildfunction
+ }
+ if % Check status from .buildsamplefunction/.internalstopped
+ }
+ if % check status from .buildfunction/.intermalstopped
+ % restore the VM mode
+ exch .setglobal
+ }
+ if
+ }
+bind def
+
+%
+% <array1> <array2> converttinttransform <array1> <array2'>
+%
+% Convert a Separation/DeviceN color space to use a function as a tint
+% transformation, if this is possible. Possible outcomes are:
+%
+% 1. The tint transform already is a function, or is a procedure that
+% cannot be converted to a function. In either case, <array2> is
+% left unchanged (<array2> == <array2'>).
+%
+% 2. The tint transform is not already a function but can be converted
+% to a function, and <array1> != <array2>. In this case, <array2>
+% is modified directly.
+%
+% 3. The tint transform is not already a function but can be converted
+% to a function, and <array1> == <array2>. In this case, <array2>
+% is copied, and the copy is modified (i.e., after the operation
+% <array1> != <array2>
+%
+% This slightly complex approach avoids creating an extra color space
+% array unnecessarily.
+%
+/converttinttransform
+ {
+ % convert the tint transform to a fucntion
+ //build_tintxform_function exec
+
+ % see if anything needs to be modified
+ 1 index 3 get 2 copy eq
+ { pop pop }
+ {
+ pop
+
+ % see if the color space must be copied
+ 3 copy pop eq
+ {
+ % copy the array into local VM
+ .currentglobal //false .setglobal
+ 3 -1 roll dup length array copy 3 1 roll
+ .setglobal
+ }
+ if
+ 1 index exch 3 exch put
+ }
+ ifelse
+ }
+bind def
+
+
+colorspacedict
+/Separation
+ mark
+ /cs_potential_indexed_base true
+ /cs_potential_pattern_base true
+ /cs_potential_alternate false
+ /cs_potential_icc_alternate false
+ /cs_get_ncomps //ncomps_1
+ /cs_get_range //get_range_1
+ /cs_get_default_color { pop 1 } bind
+
+ /cs_get_currentgray
+ { //apply_sepr_tint_xform exec 2 get //.cs_get_currentgray exec }
+ bind
+ /cs_get_currentrgb
+ { //apply_sepr_tint_xform exec 2 get //.cs_get_currentrgb exec }
+ bind
+ /cs_get_currentcmyk
+ { //apply_sepr_tint_xform exec 2 get //.cs_get_currentcmyk exec }
+ bind
+
+ % a lot of validation is done by the cs_validate method
+ /cs_validate
+ {
+ //check_array exec
+ dup 1 get type dup /nametype ne exch /stringtype ne and
+ //setcspace_typecheck
+ if
+ dup 2 get //.cs_validate exec //.cs_potential_alternate exec not
+ //setcspace_rangecheck
+ if
+ dup 3 get //check_array exec xcheck not
+ //setcspace_typecheck
+ if
+ }
+ bind
+
+ % substitute the base space if appropriate
+ /cs_substitute
+ {
+ dup 2 get //.cs_substitute exec 2 copy eq
+ { pop pop dup }
+ {
+ % retain only the new alternate space
+ exch pop
+
+ % build all new structures in local VM
+ .currentglobal 3 1 roll //false .setglobal
+
+ % construct a new array and insert the new base color space
+ 1 index dup length array copy dup 2 4 -1 roll put
+
+ % restore VM mode
+ 3 -1 roll .setglobal
+ }
+ ifelse
+ }
+ bind
+
+ %
+ % The Ghostscript interpreter works better when tinttransform procedures
+ % are translated into functions. Attempt to do that here.
+ %
+ /cs_prepare //converttinttransform
+
+ %
+ % Install the current color space.
+ %
+ % The current Ghostscript color space implementation requires that
+ % color spaces that provide a base or alternative color space set
+ % that base/alternative color space to be the current color space
+ % before attempting to set the original color space.
+ %
+ /cs_install
+ {
+ % save the current color space
+ currentcolorspace
+
+ % set the base color space as the current color space
+ 1 index 2 get //forcesetcolorspace
+
+ % set the indexed color space; restore the earlier space on error
+ mark 2 index
+ { .setseparationspace }
+ stopped
+ { cleartomark setcolorspace stop }
+ { pop pop pop }
+ ifelse
+ }
+ bind
+
+ /cs_prepare_color //validate_1
+
+ %
+ % If a Separation color space is not supported in native mode by
+ % the current process color model, Adobe implementations will always
+ % execute the tint transform procedure when setcolor is invoked.
+ % Ghostscript may have turned this transform into a sampled function,
+ % and even if this is not the case, will have sampled the transform
+ % when the color space is first set. Some applications may depend
+ % on the Adobe behavior, so we implement it via the
+ % cs_complete_setcolor method.
+ %
+ /cs_complete_setcolor
+ {
+ .usealternate
+ {
+ currentcolor exch 3 get exec
+ currentcolorspace 2 get //clear_setcolor_operands exec
+ }
+ { pop }
+ ifelse
+ }
+ bind
+
+ .dicttomark
+put
+
+end % .cspace_util
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/gs_setpd.ps b/Master/tlpkg/tlgs/lib/gs_setpd.ps
new file mode 100644
index 00000000000..489275d852e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_setpd.ps
@@ -0,0 +1,924 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_setpd.ps 8026 2007-06-06 22:03:27Z till $
+% The current implementation of setpagedevice has the following limitations:
+% - It doesn't attempt to "interact with the user" for Policy = 2.
+
+languagelevel 1 .setlanguagelevel
+level2dict begin
+
+% ---------------- Redefinitions ---------------- %
+
+% Redefine .beginpage and .endpage so that they call BeginPage and
+% EndPage respectively if appropriate.
+
+% We have to guard against the BeginPage procedure not popping its operand.
+% This is really stupid, but the Genoa CET does it.
+/.beginpage { % - .beginpage -
+ .currentshowpagecount {
+ .currentpagedevice pop
+ dup //null ne { /BeginPage .knownget } { pop //false } ifelse {
+ % Stack: ... pagecount proc
+ count 2 .execn
+ % Stack: ... ..???.. oldcount
+ count 1 add exch sub { pop } repeat
+ } {
+ pop
+ } ifelse
+ } if
+} bind odef
+
+% Guard similarly against EndPage not popping its operand.
+/.endpage { % <reason> .endpage <print_bool>
+ .currentshowpagecount {
+ 1 index .currentpagedevice pop
+ dup //null ne { /EndPage .knownget } { pop //false } ifelse {
+ % Stack: ... reason pagecount reason proc
+ count 2 .execn
+ % Stack: ... ..???.. print oldcount
+ count 2 add exch sub { exch pop } repeat
+ } {
+ pop pop 2 ne
+ } ifelse
+ } {
+ 2 ne
+ } ifelse
+} bind odef
+
+% Define interpreter callouts for handling gstate-saving operators,
+% to make sure that they create a page device dictionary for use by
+% the corresponding gstate-restoring operator.
+% We'd really like to avoid the cost of doing this, but we don't see how.
+% The names %gsavepagedevice, %savepagedevice, %gstatepagedevice,
+% %copygstatepagedevice, and %currentgstatepagedevice are known to the
+% interpreter.
+
+(%gsavepagedevice) cvn
+ { currentpagedevice pop gsave
+ } bind def
+
+(%savepagedevice) cvn
+ { currentpagedevice pop save
+ } bind def
+
+(%gstatepagedevice) cvn
+ { currentpagedevice pop gstate
+ } bind def
+
+(%copygstatepagedevice) cvn
+ { currentpagedevice pop copy
+ } bind def
+
+(%currentgstatepagedevice) cvn
+ { currentpagedevice pop currentgstate
+ } bind def
+
+% Define interpreter callouts for handling gstate-restoring operators
+% when the current page device needs to be changed.
+% The names %grestorepagedevice, %grestoreallpagedevice,
+% %restorepagedevice, %restore1pagedevice, and %setgstatepagedevice
+% are known to the interpreter.
+
+/.installpagedevice
+ { % Since setpagedevice doesn't create new device objects,
+ % we must (carefully) reinstall the old parameters in
+ % the same device.
+ .currentpagedevice pop //null currentdevice //null .trysetparams
+ dup type /booleantype eq
+ { pop pop }
+ { % This should never happen!
+ SETPDDEBUG { (Error in .trysetparams!) = pstack flush } if
+ cleartomark pop pop pop
+ /.installpagedevice cvx /rangecheck signalerror
+ }
+ ifelse pop pop
+ % A careful reading of the Red Book reveals that an erasepage
+ % should occur, but *not* an initgraphics.
+ erasepage .beginpage
+ } bind def
+
+/.uninstallpagedevice
+ { 2 .endpage { .currentnumcopies //false .outputpage } if
+ nulldevice
+ } bind def
+
+(%grestorepagedevice) cvn
+ { .uninstallpagedevice grestore .installpagedevice
+ } bind def
+
+(%grestoreallpagedevice) cvn
+ { .uninstallpagedevice grestore .installpagedevice grestoreall
+ } bind def
+
+(%restore1pagedevice) cvn
+ { .uninstallpagedevice grestore .installpagedevice restore
+ } bind def
+
+(%restorepagedevice) cvn
+ { .uninstallpagedevice restore .installpagedevice
+ } bind def
+
+(%setgstatepagedevice) cvn
+ { .uninstallpagedevice setgstate .installpagedevice
+ } bind def
+
+% Redefine .currentnumcopies so it consults the NumCopies device parameter.
+/.numcopiesdict mark
+ /NumCopies dup
+.dicttomark readonly def
+
+/.currentnumcopies
+ { currentdevice //.numcopiesdict .getdeviceparams
+ dup type /integertype eq
+ { exch pop exch pop }
+ { cleartomark #copies }
+ ifelse
+ } bind odef
+
+% Redefine .currentpagedevice and .setpagedevice so they convert between
+% null and a fixed empty directionary.
+/.nullpagedevice 0 dict readonly def
+/.currentpagedevice {
+ //.currentpagedevice exch dup //null eq { pop //.nullpagedevice } if exch
+} bind odef
+/.setpagedevice {
+ dup //.nullpagedevice eq { pop //null } if //.setpagedevice
+} bind odef
+
+% ---------------- Auxiliary definitions ---------------- %
+
+% Define the required attributes of all page devices, and their default values.
+% We don't include attributes such as .MediaSize, which all devices
+% are guaranteed to supply on their own.
+/.defaultpolicies mark
+ % M. Sweet, Easy Software Products
+ %
+ % Due to the fact that it is not possible to properly implement
+ % the selection policies from a Ghostscript driver, we have changed
+ % the default policy to "7" (impose) to avoid numerous problems with
+ % printing within CUPS...
+ %
+ NOMEDIAATTRS {
+ /PolicyNotFound 7
+ /PageSize 7
+ } {
+ /PolicyNotFound 1
+ /PageSize 0
+ } ifelse
+ /PolicyReport {
+ dup /.LockSafetyParams known {
+ % Only possible error is invalidaccess
+ /setpagedevice .systemvar /invalidaccess signalerror
+ }
+ if
+ pop
+ } bind
+.dicttomark readonly def
+% Note that the values of .requiredattrs are executed, not just fetched.
+/.requiredattrs mark
+ /PageDeviceName //null
+ /PageOffset [0 0] readonly
+% We populate InputAttributes with all of the known page sizes
+% followed by a dummy media type that handles pages of any size.
+% This will create some duplicates, but that only slightly slows
+% down the media selection (loop is in zmedia2.c).
+%
+% Some PostScript creators assume that slot 0 is the default media
+% size and some can't handle a non-standard 4-element array which
+% is a 'range' type page size (always put last).
+%
+% Real Devices that can only handle specific page sizes will override this.
+ /InputAttributes {
+ mark
+ % First put the device's default page size in slot 0
+ % This satifies those that have devices built with a4 as the default
+ 0 mark /PageSize currentdevice /PageSize gsgetdeviceprop .dicttomark
+ statusdict /.pagetypenames get {
+ counttomark 1 sub 2 idiv exch mark exch /PageSize exch
+ % stack: mark --dict-- --dict-- ... key mark /PageSize pagetypename
+ % see note above about pagetype executable array contents.
+ load dup 0 get exch 1 get 2 array astore .dicttomark
+ } forall
+ % If NORANGEPAGESIZE is defined, (-dNORANGEPAGESIZE), then don't add
+ % the 'match any' PageSize entry
+ systemdict /NORANGEPAGESIZE known not {
+ % Add one last entry which is the 4 element range array (non-standard)
+ counttomark 2 idiv
+ % PageSize with either dimension 0 will be detected in
+ % match_page_size, so we can allow it here
+ mark /PageSize [0 dup 16#7ffff dup] .dicttomark
+ } if
+ .dicttomark
+ }
+ (%MediaSource) 0
+ /OutputAttributes {
+ mark 0 mark .dicttomark readonly .dicttomark
+ }
+ (%MediaDestination) 0
+ /Install {{.callinstall}} bind
+ /BeginPage {{.callbeginpage}} bind
+ /EndPage {{.callendpage}} bind
+ /Policies .defaultpolicies
+ /ImagingBBox //null % default value
+ /UseCIEColor /.getuseciecolor load
+.dicttomark readonly def
+
+% Define currentpagedevice so it creates the dictionary on demand if needed,
+% adding all the required entries defined just above.
+% We have to deal specially with entries that the driver may change
+% on its own.
+/.dynamicppkeys mark
+ /.MediaSize dup % because it changes when PageSize is set
+% /LeadingEdge dup
+ /PageCount dup
+ /Colors dup
+ /BitsPerPixel dup
+ /ColorValues dup
+.dicttomark readonly def
+/.makecurrentpagedevice { % - .makecurrentpagedevice <dict>
+ currentdevice //null .getdeviceparams
+ % Make the dictionary large enough to add defaulted entries.
+ counttomark 2 idiv .requiredattrs length add dict
+ counttomark 2 idiv { dup 4 2 roll put } repeat exch pop
+ % Add any missing required attributes.
+ % Make a writable and (if possible) local copy of any default
+ % dictionaries, to work around a bug in the output of WordPerfect,
+ % which assumes that these dictionaries are writable and local.
+ .currentglobal exch dup gcheck .setglobal
+ .requiredattrs {
+ 2 index 2 index known {
+ 1 index /Policies eq {
+ % Merge policies from the device driver with defaults
+ 2 index % <<>> /key value <<>>
+ 3 2 roll get % <<>> value <<policies>>
+ exch {
+ 2 index 2 index known {
+ pop pop
+ } {
+ 2 index 3 1 roll put
+ } ifelse
+ } forall
+ pop
+ } {
+ pop pop
+ } ifelse
+ } {
+ exec 2 index 3 1 roll put
+ } ifelse
+ } forall exch .setglobal
+ dup .setpagedevice
+} bind def
+/currentpagedevice {
+ .currentpagedevice {
+ dup length 0 eq {
+ pop .makecurrentpagedevice
+ } {
+ % If any of the dynamic keys have changed,
+ % we must update the page device dictionary.
+ currentdevice //.dynamicppkeys .getdeviceparams .dicttomark {
+ % Stack: current key value
+ 2 index 2 index .knownget { 1 index ne } { //true } ifelse
+ { 2 index wcheck not
+ { % This is the first entry being updated.
+ % Copy the dictionary to make it writable.
+ 3 -1 roll
+ currentglobal 1 index dup gcheck currentglobal and setglobal
+ length dict
+ exch setglobal
+ .copydict
+ 3 1 roll
+ }
+ if
+ 2 index 3 1 roll put
+ }
+ { pop pop
+ }
+ ifelse
+ } forall
+ % If the device is the distiller device, update distillerparams that
+ % may have been changed by setdistillerparams
+ currentdevice .devicename /pdfwrite eq {
+ currentdistillerparams {
+ % Stack: current key value
+ 2 index 2 index .knownget { 1 index ne } { //true } ifelse
+ { 2 index 3 1 roll put } { pop pop } ifelse
+ } forall
+ } if
+ % If the dictionary was global and is now local, copy
+ % any global subsidiary dictionaries to local VM. This
+ % too is to work around the Word Perfect bug (see above).
+ dup gcheck not {
+ dup {
+ dup type /dicttype eq { dup gcheck } { //false } ifelse {
+ % Copy-on-write, see above.
+ 2 index wcheck not {
+ 3 -1 roll dup length dict .copydict
+ 3 1 roll
+ } if
+ .copytree 2 index 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+ } forall
+ } if
+ % We would like to do a .setpagedevice so we don't keep
+ % re-creating the dictionary. Unfortunately, the effect
+ % of this is that if any dynamic key changes (PageCount
+ % in particular), we will do the equivalent of a
+ % setpagedevice at the next restore or grestore.
+ % Therefore, we make the dictionary read-only, but
+ % we don't store it away. I.e., NOT:
+ % dup wcheck { .setpagedevice .currentpagedevice pop } if
+ readonly
+ } ifelse
+ } if
+} bind odef
+
+% Copy a dictionary recursively.
+/.copytree { % <dict> .copytree <dict'>
+ dup length dict exch {
+ dup type /dicttype eq { .copytree } if 2 index 3 1 roll put
+ } forall
+} bind def
+
+% The implementation of setpagedevice is quite complex. Currently,
+% everything but the media matching algorithm is implemented here.
+
+% By default, we only present the requested changes to the device,
+% but there are some parameters that require special merging action.
+% Define those parameters here, with the procedures that do the merging.
+% The procedures are called as follows:
+% <merged> <key> <new_value> -proc- <merged> <key> <new_value'>
+/.mergespecial mark
+ /InputAttributes
+ { dup //null eq
+ { pop //null
+ }
+ { 3 copy pop .knownget
+ { dup //null eq
+ { pop dup length dict }
+ { dup length 2 index length add dict .copydict }
+ ifelse
+ }
+ { dup length dict
+ }
+ ifelse .copydict readonly
+ }
+ ifelse
+ } bind
+ /OutputAttributes 1 index
+ /Policies
+ { 3 copy pop .knownget
+ { dup length 2 index length add dict .copydict }
+ { dup length dict }
+ ifelse copy readonly
+ } bind
+.dicttomark readonly def
+
+% M. Sweet, Easy Software Products:
+%
+% Define NOMEDIAATTRS to turn off the default (but unimplementable) media
+% selection policies for setpagedevice. This is used by CUPS to support
+% the standard Adobe media attributes.
+NOMEDIAATTRS {
+ % Define only PageSize for input attribute matching.
+ /.inputattrkeys [
+ /PageSize
+ ] readonly def
+ % Define no other keys used in media selection.
+ /.inputselectionkeys [
+ /noInputSelectionsKeys
+ ] readonly def
+
+ % Define no keys used in output attribute matching.
+ /.outputattrkeys [
+ /noOutputAttrKeys
+ ] readonly def
+} {
+ % Define the keys used in input attribute matching.
+ /.inputattrkeys [
+ /PageSize /MediaColor /MediaWeight /MediaType /InsertSheet /ManualFeed
+ % The following are documented in Adobe's supplement for v2017.
+ /LeadingEdge /MediaClass
+ ] readonly def
+ % Define other keys used in media selection.
+ /.inputselectionkeys [
+ /MediaPosition /Orientation
+ ] readonly def
+
+ % Define the keys used in output attribute matching.
+ /.outputattrkeys [
+ /OutputType /Duplex /Tumble /ManualFeed
+ ] readonly def
+} ifelse
+
+% Define all the parameters that should always be copied to the merged
+% dictionary.
+/.copiedkeys [
+ /OutputDevice
+ .mergespecial { pop } forall
+ .inputattrkeys aload pop
+ .inputselectionkeys aload pop
+ .outputattrkeys aload pop
+] readonly def
+
+% Define the parameters that should not be presented to the device.
+% The procedures are called as follows:
+% <merged> <key> <value> -proc-
+% The procedure leaves all its operands on the stack and returns
+% true iff the key/value pair should be presented to .putdeviceparams.
+/.presentspecial mark
+ .dynamicppkeys
+ { pop dup /LeadingEdge ne { //false } { pop } ifelse }
+ forall
+ % We must ignore an explicit request for .MediaSize,
+ % because media matching always handles this.
+ /.MediaSize //false
+ /Name //false
+ /OutputDevice //false
+ /PageDeviceName //false
+ /PageOffset //false
+ /PageSize //false % obsolete alias for .MediaSize
+ /InputAttributes //false
+ .inputattrkeys
+ { dup dup /PageSize eq exch /LeadingEdge eq or
+ { pop }
+ { { 2 index /InputAttributes .knownget { //null eq } { //true } ifelse } }
+ ifelse
+ }
+ forall
+ .inputselectionkeys { //false } forall
+ /OutputAttributes //false
+ .outputattrkeys
+ { { 2 index /OutputAttributes .knownget { //null eq } { //true } ifelse } }
+ forall
+ /Install //false
+ /BeginPage //false
+ /EndPage //false
+ /Policies //false
+ % Our extensions:
+ /HWColorMap
+ { % HACK: don't transmit the color map, because
+ % window systems can change the color map on their own
+ % incrementally. Someday we'll have a better
+ % solution for this....
+ //false
+ }
+ /ViewerPreProcess //false
+ /ImagingBBox //false % This prevents the ImagingBBox value in the setpagedevice
+ % from affecting the device's ImagingBBox parameter, but
+ % does retain a 'shadow' copy at the PostScript level.
+ % This is done for Adobe compatibility since Adobe does
+ % render marks outside the ImagingBBox (and QuarkXpress
+ % relies on it).
+.dicttomark readonly def
+
+% Define access to device defaults.
+/.defaultdeviceparams
+ { finddevice //null .getdeviceparams
+ } bind def
+
+% Select media (input or output). The hard work is done in an operator:
+% <pagedict> <attrdict> <policydict> <keys> .matchmedia <key> true
+% <pagedict> <attrdict> <policydict> <keys> .matchmedia false
+% <pagedict> null <policydict> <keys> .matchmedia null true
+/.selectmedia % <orig> <request> <merged> <failed> <-- retained
+ % <attrdict> <policydict> <attrkeys> <mediakey>
+ % .selectmedia
+ { 5 index 5 -2 roll 4 index .matchmedia
+ % Stack: orig request merged failed attrkeys mediakey
+ % (key true | false)
+ { 4 index 3 1 roll put pop
+ }
+ { % Adobe's implementations have a "big hairy heuristic"
+ % to choose the set of keys to report as having failed the match.
+ % For the moment, we report any keys that are in the request
+ % and don't have the same value as in the original dictionary.
+ 5 index 1 index .knownget
+ { 4 index 3 1 roll put }
+ { 3 index exch .undef }
+ ifelse
+ { % Stack: <orig> <request> <merged> <failed> <attrkey>
+ 3 index 1 index .knownget
+ { 5 index 2 index .knownget { ne } { pop //true } ifelse }
+ { //true }
+ ifelse % Stack: ... <failed> <attrkey> <report>
+ { 2 copy /rangecheck put }
+ if pop
+ }
+ forall
+ }
+ ifelse
+ } bind def
+
+% Apply Policies to any unprocessed failed requests.
+% As we process each request entry, we replace the error name
+% in the <failed> dictionary with the policy value,
+% and we replace the key in the <merged> dictionary with its prior value
+% (or remove it if it had no prior value).
+/.policyprocs mark
+% These procedures are called with the following on the stack:
+% <orig> <merged> <failed> <Policies> <key> <policy>
+% They are expected to consume the top 2 operands.
+% NOTE: we currently treat all values other than 0, 1, or 7 (for PageSize)
+% the same as 0, i.e., we signal an error.
+%
+% M. Sweet, Easy Software Products:
+%
+% Define NOMEDIAATTRS to turn off the default (but unimplementable) media
+% selection policies for setpagedevice. This is used by CUPS to support
+% the standard Adobe media attributes.
+ 0 { % Set errorinfo and signal a configurationerror.
+ NOMEDIAATTRS {
+ % NOMEDIAATTRS means that the default policy is 7...
+ pop 2 index exch 7 put
+ } {
+ pop dup 4 index exch get 2 array astore
+ $error /errorinfo 3 -1 roll put
+ cleartomark
+ /setpagedevice .systemvar /configurationerror signalerror
+ } ifelse
+ } bind
+ 1 { % Roll back the failed request to its previous status.
+SETPDDEBUG { (Rolling back.) = pstack flush } if
+ 3 index 2 index 3 -1 roll .forceput
+ 4 index 1 index .knownget
+ { 4 index 3 1 roll .forceput }
+ { 3 index exch .undef }
+ ifelse
+ } .bind
+ 7 { % For PageSize only, just impose the request.
+ 1 index /PageSize eq
+ { pop pop 1 index /PageSize 7 put }
+ { .policyprocs 0 get exec }
+ ifelse
+ } bind
+.dicttomark readonly def
+/.applypolicies % <orig> <merged> <failed> .applypolicies
+ % <orig> <merged'> <failed'>
+ { 1 index /Policies get 1 index
+ { type /integertype eq
+ { pop % already processed
+ }
+ { 2 copy .knownget not { 1 index /PolicyNotFound get } if
+ % Stack: <orig> <merged> <failed> <Policies> <key>
+ % <policy>
+ .policyprocs 1 index .knownget not { .policyprocs 0 get } if exec
+ }
+ ifelse
+ }
+ forall pop
+ } bind def
+
+% Prepare to present parameters to the device, by spreading them onto the
+% operand stack and removing any that shouldn't be presented.
+/.prepareparams % <params> .prepareparams -mark- <key1> <value1> ...
+ { mark exch dup
+ { % Stack: -mark- key1 value1 ... merged key value
+ .presentspecial 2 index .knownget
+ { exec { 3 -1 roll } { pop pop } ifelse }
+ { 3 -1 roll }
+ ifelse
+ }
+ forall pop
+ } bind def
+
+% Put device parameters without resetting currentpagedevice.
+% (.putdeviceparams clears the current page device.)
+/.putdeviceparamsonly % <device> <Policies|null> <require_all> -mark-
+ % <key1> <value1> ... .putdeviceparamsonly
+ % On success: <device> <eraseflag>
+ % On failure: <device> <Policies|null> <req_all> -mark-
+ % <key1> <error1> ...
+ { .currentpagedevice
+ { counttomark 4 add 1 roll .putdeviceparams
+ dup type /booleantype eq { 3 } { counttomark 5 add } ifelse -1 roll
+ .setpagedevice
+ }
+ { pop .putdeviceparams
+ }
+ ifelse
+ } bind def
+
+% Try setting the device parameters from the merged request.
+/.trysetparams % <merged> <(ignored)> <device> <Policies>
+ % .trysetparams
+ { //true 4 index .prepareparams
+ % Add the computed .MediaSize.
+ % Stack: merged (ignored) device Policies -true-
+ % -mark- key1 value1 ...
+ counttomark 5 add index .computemediasize
+ exch pop exch pop /.MediaSize exch
+SETPDDEBUG { (Putting.) = pstack flush } if
+ .putdeviceparamsonly
+SETPDDEBUG { (Result of putting.) = pstack flush } if
+ } bind def
+
+% Compute the media size and initial matrix from a merged request (after
+% media selection).
+/.computemediasize % <request> .computemediasize
+ % <request> <matrix> <[width height]>
+ { dup /PageSize get % requested page size
+ 1 index /InputAttributes get
+ 2 index (%MediaSource) get get /PageSize get % media size
+ % (may be a range)
+ 2 index /Policies get
+ dup /PageSize .knownget
+ { exch pop } { /PolicyNotFound get } ifelse % PageSize policy,
+ % affects scaling
+ 3 index /Orientation .knownget not { //null } if
+ 4 index /RollFedMedia .knownget not { //false } if
+ matrix .matchpagesize not {
+ % This is a "can't happen" condition!
+ /setpagedevice .systemvar /rangecheck signalerror
+ } if
+ 2 array astore
+ } bind def
+
+% ---------------- setpagedevice itself ---------------- %
+
+/setpagedevice
+ { % We mustn't pop the argument until the very end,
+ % so that the pseudo-operator machinery can restore the stack
+ % if an error occurs.
+ mark 1 index currentpagedevice
+
+ % Check whether we are changing OutputDevice;
+ % also handle the case where the current device
+ % is not a page device.
+ % Stack: mark <request> <current>
+SETPDDEBUG { (Checking.) = pstack flush } if
+
+ dup /OutputDevice .knownget
+ { % Current device is a page device.
+ 2 index /OutputDevice .knownget
+ { % A specific OutputDevice was requested.
+ 2 copy eq
+ { pop pop //null }
+ { exch pop }
+ ifelse
+ }
+ { pop //null
+ }
+ ifelse
+ }
+ { % Current device is not a page device.
+ % Use the default device.
+ 1 index /OutputDevice .knownget not { .defaultdevicename } if
+ }
+ ifelse
+ dup //null eq
+ { pop
+ }
+ { exch pop .defaultdeviceparams
+ % In case of duplicate keys, .dicttomark takes the entry
+ % lower on the stack, so we can just append the defaults here.
+ .requiredattrs { exec } forall .dicttomark
+ }
+ ifelse
+
+ % Check whether a viewer wants to intervene.
+ % We must check both the request (which takes precedence)
+ % and the current dictionary.
+ % Stack: mark <request> <orig>
+ exch dup /ViewerPreProcess .knownget
+ { exec }
+ { 1 index /ViewerPreProcess .knownget { exec } if }
+ ifelse exch
+
+ % Construct a merged request from the actual request plus
+ % any keys that should always be propagated.
+ % Stack: mark <request> <orig>
+SETPDDEBUG { (Merging.) = pstack flush } if
+
+ exch 1 index length 1 index length add dict
+ .copiedkeys
+ { % Stack: <orig> <request> <merged> <key>
+ 3 index 1 index .knownget { 3 copy put pop } if pop
+ }
+ forall
+ % Stack: <orig> <request> <merged>
+ dup 2 index
+ { % stack: <orig> <request> <merged> <merged> <rkey> <rvalue>
+ .mergespecial 2 index .knownget { exec } if
+ put dup
+ }
+ forall pop
+ % Hack: if FIXEDRESOLUTION is true, discard any attempt to
+ % change HWResolution.
+ FIXEDRESOLUTION { dup /HWResolution .undef } if
+ % Hack: if FIXEDMEDIA is true, discard any attempt to change
+ % PageSize or HWSize.
+ FIXEDMEDIA
+ { dup /PageSize 4 index /PageSize get put
+ dup /HWSize 4 index /HWSize get put
+ } if
+ % Hack: to work around some files that take a PageSize
+ % from InputAttributes and impose it, discard any attempt
+ % to set PageSize to a 4-element value.
+ % Stack: mark <orig> <request> <merged>
+ dup /PageSize .knownget {
+ length 2 ne {
+ dup /PageSize 4 index /PageSize get put
+ } if
+ } if
+
+ % Select input and output media.
+ % Stack: mark <orig> <request> <merged>
+SETPDDEBUG { (Selecting.) = pstack flush } if
+
+ 0 dict % <failed>
+ 1 index /InputAttributes .knownget
+ { 2 index /Policies get
+ .inputattrkeys (%MediaSource) cvn .selectmedia
+ } if
+ 1 index /OutputAttributes .knownget
+ { 2 index /Policies get
+ .outputattrkeys (%MediaDestination) cvn .selectmedia
+ } if
+ 3 -1 roll 4 1 roll % temporarily swap orig & request
+ .applypolicies
+ 3 -1 roll 4 1 roll % swap back
+
+ % Construct the new device, and attempt to set its attributes.
+ % Stack: mark <orig> <request> <merged> <failed>
+SETPDDEBUG { (Constructing.) = pstack flush } if
+
+ currentdevice .devicename 2 index /OutputDevice get eq
+ { currentdevice }
+ { 1 index /OutputDevice get finddevice }
+ ifelse
+ %**************** We should copy the device here,
+ %**************** but since we can't close the old device,
+ %**************** we don't. This is WRONG.
+ %****************copydevice
+ 2 index /Policies get
+ .trysetparams
+ dup type /booleantype ne
+ { % The request failed.
+ % Stack: ... <orig> <request> <merged> <failed> <device>
+ % <Policies> true mark <name> <errorname> ...
+SETPDDEBUG { (Recovering.) = pstack flush } if
+ counttomark 4 add index
+ counttomark 2 idiv { dup 4 -2 roll put } repeat
+ pop pop pop
+ % Stack: mark ... <orig> <request> <merged> <failed> <device>
+ % <Policies>
+ 6 2 roll 3 -1 roll 4 1 roll
+ .applypolicies
+ 3 -1 roll 4 1 roll 6 -2 roll
+ .trysetparams % shouldn't fail!
+ dup type /booleantype ne
+ { 2 { counttomark 1 add 1 roll cleartomark } repeat
+ /setpagedevice .systemvar exch signalerror
+ }
+ if
+ }
+ if
+
+ % The attempt succeeded. Install the new device.
+ % Stack: mark ... <merged> <failed> <device> <eraseflag>
+SETPDDEBUG { (Installing.) = pstack flush } if
+
+ pop 2 .endpage
+ { 1 //true .outputpage
+ (>>setpagedevice, press <return> to continue<<\n) .confirm
+ }
+ if
+ % .setdevice clears the current page device!
+ .currentpagedevice pop exch
+ .setdevice pop
+ .setpagedevice
+
+ % Implement UseCIEColor directly if this is a LL3 system.
+ % The color substitution feature is now implemented in
+ % the interpreter, and this is used as an optimization.
+ %
+ % NB: This shoud be the only use of the .setuseciecolor
+ % operator anywhere.
+ %
+ % If UseCIEColor is transitioned to false, set some
+ % color space other than /DeviceGray, to insure that
+ % initgraphics will actually perform a setcolorspace
+ % operation (there is an optimization in setcolorspace
+ % that does nothing if the operand and current color
+ % spaces are the same, and UseCIEColor is false).
+
+ /.setuseciecolor where
+ {
+ pop 1 index /UseCIEColor .knownget
+ {
+ dup .setuseciecolor not
+ { /DeviceRGB setcolorspace }
+ if
+ }
+ if
+ }
+ if
+
+ % Merge the request into the current page device,
+ % unless we're changing the OutputDevice.
+ % Stack: mark ... <merged> <failed>
+ exch currentpagedevice dup length 2 index length add dict
+ % Stack: mark ... <failed> <merged> <current> <newdict>
+ 2 index /OutputDevice .knownget {
+ 2 index /OutputDevice .knownget not { //null } if eq
+ } {
+ //true
+ } ifelse {
+ % Same OutputDevice, merge the dictionaries.
+ .copydict
+ } {
+ % Different OutputDevice, discard the old dictionary.
+ exch pop
+ } ifelse .copydict
+ % Initialize the default matrix, taking media matching
+ % into account.
+ .computemediasize pop initmatrix concat
+ dup /PageOffset .knownget
+ { % Translate by the given number of 1/72" units in device X/Y.
+ dup 0 get exch 1 get
+ 2 index /HWResolution get dup 1 get exch 0 get
+ 4 -1 roll mul 72 div 3 1 roll mul 72 div
+ idtransform translate
+ }
+ if
+ % We must install the new page device dictionary
+ % before calling the Install procedure.
+ dup .setpagedevice
+ .setdefaulthalftone % Set the default screen before calling Install.
+ dup /Install .knownget {
+ { .execinstall } stopped {
+ pop % Install procedure failed. One element will have been left on the stack.
+ % stack: mark <orig> <request> <failed> <merged>
+ 1 index /Install $error /errorname get put % Put it in the "failed" dict
+ % .applypolicies needs stack: <orig> <merged> <failed>
+ exch 4 2 roll exch 4 2 roll .applypolicies exch 4 2 roll exch 4 2 roll
+ % Now execute the old Install -- failures after this are not handled
+ dup /Install .knownget { { .execinstall } stopped { pop } if } if
+ .postinstall stop
+ } {
+ .postinstall
+ } ifelse
+ } {
+ .postinstall
+ } ifelse
+} odef
+
+% We break out the code after calling the Install procedure into a
+% separate procedure, since it is executed even if Install causes an error.
+% By making .execinstall a separate operator procedure, we get the stacks
+% mostly restored if it fails, except for one element (the operand).
+% Thus if it fails, there will be one element left on the op stack.
+
+/.execinstall { % <proc> .execinstall -
+ dup % element left on the stack if the exec fails.
+
+ % Because the interpreter optimizes tail calls, we can't just let
+ % the body of this procedure be 'exec', because that would lose
+ % the stack protection that is the whole reason for having the
+ % procedure in the first place. The 'pop' for the dummy element
+ % on the op stack suffices.
+ exec
+ pop % See above.
+} odef
+
+/.postinstall { % mark ... <failed> <merged> .postinstall -
+ matrix currentmatrix .setdefaultmatrix
+ % Erase and initialize the page.
+ initgraphics
+ currentoverprint //false setoverprint 1 setcolor
+ .fillpage
+ 0 setcolor setoverprint
+ .beginpage
+
+ % Clean up, calling PolicyReport if needed.
+ % Stack: mark ... <failed> <merged>
+SETPDDEBUG { (Finishing.) = pstack flush } if
+
+ exch dup length 0 ne
+ { 1 index /Policies get /PolicyReport get
+ counttomark 1 add 2 roll cleartomark
+ exec
+ }
+ { cleartomark
+ }
+ ifelse pop
+
+} odef
+
+end % level2dict
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_statd.ps b/Master/tlpkg/tlgs/lib/gs_statd.ps
new file mode 100644
index 00000000000..4ad40b50667
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_statd.ps
@@ -0,0 +1,374 @@
+% Copyright (C) 1989, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_statd.ps 6300 2005-12-28 19:56:24Z giles $
+% This file provides statusdict, serverdict, and assorted LaserWriter
+% operators, mostly for the benefit of poorly designed PostScript programs
+% that 'know' they are running on a LaserWriter.
+
+systemdict begin
+ % We make statusdict a little larger for Level 2 stuff.
+ % Note that it must be allocated in local VM.
+ .currentglobal false .setglobal
+ /statusdict 89 dict .forcedef % statusdict is local, sys'dict global
+ % To support the Level 2 job control features,
+ % serverdict must also be in local VM.
+ /serverdict 10 dict .forcedef % serverdict is local, sys'dict global
+ .setglobal
+end
+
+% Define various paper formats. The Adobe documentation defines only these:
+% 11x17, a3, a4, a4small, b5, ledger, legal, letter, lettersmall, note.
+% These procedures are also accessed as data structures during initialization,
+% so the page dimensions must be the first two elements of the procedure.
+
+/.setpagesize { /statusdict .systemvar begin .setpagesize end } bind def
+userdict begin
+ % Page sizes defined by Adobe documentation
+ % Note: these executable arrays should all begin with two
+ % integers which are the width and height (see gs_setpd.ps).
+ /11x17 {792 1224 //.setpagesize exec} bind def % 11x17 portrait
+ /a3 {842 1191 //.setpagesize exec} bind def
+ /a4 {595 842 //.setpagesize exec} bind def
+% a4small should be a4 with an ImagingBBox of [25 25 570 817].
+ /a4small /a4 load def
+% b5 see below.
+ /ledger {1224 792 //.setpagesize exec} bind def % 11x17 landscape
+ /legal {612 1008 //.setpagesize exec} bind def
+ /letter {612 792 //.setpagesize exec} bind def
+% lettersmall should be letter with an ImagingBBox of [25 25 587 767].
+ /lettersmall /letter load def
+% note should be letter (or some other size) with the ImagingBBox
+% shrunk by 25 units on all 4 sides.
+ /note /letter load def
+ % End of Adobe-defined page sizes
+STRICT { (%END SIZES) .skipeof } if
+ % Other page sizes
+ % ISO standard paper sizes
+ /a0 {2384 3370 //.setpagesize exec} bind def
+ /a1 {1684 2384 //.setpagesize exec} bind def
+ /a2 {1191 1684 //.setpagesize exec} bind def
+% /a3 {842 1191 //.setpagesize exec} bind def % defined by Adobe
+% /a4 {595 842 //.setpagesize exec} bind def % defined by Adobe
+ /a5 {420 595 //.setpagesize exec} bind def
+ /a6 {297 420 //.setpagesize exec} bind def
+ /a7 {210 297 //.setpagesize exec} bind def
+ /a8 {148 210 //.setpagesize exec} bind def
+ /a9 {105 148 //.setpagesize exec} bind def
+ /a10 {73 105 //.setpagesize exec} bind def
+% ISO and JIS B sizes are different....
+ /isob0 {2835 4008 //.setpagesize exec} bind def
+ /b0 /isob0 load def
+ /isob1 {2004 2835 //.setpagesize exec} bind def
+ /b1 /isob1 load def
+ /isob2 {1417 2004 //.setpagesize exec} bind def
+ /b2 /isob2 load def
+ /isob3 {1001 1417 //.setpagesize exec} bind def
+ /b3 /isob3 load def
+ /isob4 {709 1001 //.setpagesize exec} bind def
+ /b4 /isob4 load def
+ /isob5 {499 709 //.setpagesize exec} bind def
+ /b5 /isob5 load def
+ /isob6 {354 499 //.setpagesize exec} bind def
+ /b6 /isob6 load def
+ /jisb0 {2920 4127 //.setpagesize exec} bind def
+ /jisb1 {2064 2920 //.setpagesize exec} bind def
+ /jisb2 {1460 2064 //.setpagesize exec} bind def
+ /jisb3 {1032 1460 //.setpagesize exec} bind def
+ /jisb4 {729 1032 //.setpagesize exec} bind def
+ /jisb5 {516 729 //.setpagesize exec} bind def
+ /jisb6 {363 516 //.setpagesize exec} bind def
+ /c0 {2599 3677 //.setpagesize exec} bind def
+ /c1 {1837 2599 //.setpagesize exec} bind def
+ /c2 {1298 1837 //.setpagesize exec} bind def
+ /c3 {918 1298 //.setpagesize exec} bind def
+ /c4 {649 918 //.setpagesize exec} bind def
+ /c5 {459 649 //.setpagesize exec} bind def
+ /c6 {323 459 //.setpagesize exec} bind def
+ % U.S. CAD standard paper sizes
+ /archE {2592 3456 //.setpagesize exec} bind def
+ /archD {1728 2592 //.setpagesize exec} bind def
+ /archC {1296 1728 //.setpagesize exec} bind def
+ /archB {864 1296 //.setpagesize exec} bind def
+ /archA {648 864 //.setpagesize exec} bind def
+ % Other paper sizes
+ /flsa {612 936 //.setpagesize exec} bind def % U.S. foolscap
+ /flse {612 936 //.setpagesize exec} bind def % European foolscap
+ /halfletter {396 612 //.setpagesize exec} bind def
+ % minimum of a4 and letter (a4 width, letter length)
+ /pa4 {595 792 //.setpagesize exec} bind def
+% /tabloid {792 1224 //.setpagesize exec} bind def % 11x17 portrait
+% /csheet {1224 1584 //.setpagesize exec} bind def % ANSI C 17x22
+% /dsheet {1584 2448 //.setpagesize exec} bind def % ANSI D 22x34
+% /esheet {2448 3168 //.setpagesize exec} bind def % ANSI E 34x44
+%END SIZES
+end
+currentdict /.setpagesize .undef
+
+statusdict begin
+
+% Define the pagetype values for the known page formats.
+% The values for all but letter and note are arbitrary.
+/.pagetypenames
+ [ /letter /note %do not change this line, needed by 'setpagetype'
+ /legal /lettersmall
+ /11x17 /ledger
+ /a4small /a3 /a4
+STRICT { (%END SIZES) .skipeof } if
+ /a0 /a1 /a2 /a5 /a6 /a7 /a8 /a9 /a10
+ /archA /archB /archC /archD /archE
+ /b0 /b1 /b2 /b3 /b4 /b5 /b6
+ /c0 /c1 /c2 /c3 /c4 /c5 /c6
+ /flsa /flse /halfletter
+ /isob0 /isob1 /isob2 /isob3 /isob4 /isob5 /isob6
+ /jisb0 /jisb1 /jisb2 /jisb3 /jisb4 /jisb5 /jisb6
+ /pa4
+%END SIZES
+ ] cvlit readonly def
+
+%%%%%% The following items were suggested by a user as useful.
+
+% Permanent definitions
+
+/ramsize 4194304 def
+/hardwareiomode 0 def
+ /sethardwareiomode {pop} bind def
+/softwareiomode 0 def
+ /setsoftwareiomode {pop} bind def
+/dosysstart false def
+ /setdosysstart {pop} bind def
+/allowjobreset true def
+ /setallowjobreset {pop} bind def
+/defaultpaperfamily 0 def
+ /setdefaultpaperfamily {pop} bind def
+/defaultpapertray 0 def
+ /setdefaultpapertray {pop} bind def
+/defaulttrayswitch false def
+ /setdefaulttrayswitch {pop} bind def
+
+% Tray and format selection
+
+ /11x17tray {/11x17 .uservar exec} bind def
+ /a3tray {/a3 .uservar exec} bind def
+ /a4tray {/a4 .uservar exec} bind def
+ /a5tray {/a5 .uservar exec} bind def
+ /a6tray {/a6 .uservar exec} bind def
+ /b4tray {/b4 .uservar exec} bind def
+ /b5tray {/b5 .uservar exec} bind def
+ /flsatray {/flsa .uservar exec} bind def
+ /flsetray {/flse .uservar exec} bind def
+ /halflettertray {/halfletter .uservar exec} bind def
+ /ledgertray {/ledger .uservar exec} bind def
+ /legaltray {/legal .uservar exec} bind def
+ /lettertray {/letter .uservar exec} bind def
+
+% Per-job parameters
+
+/paperfamily 0 def % 0 is US, 1 is European
+/papertray 1 def
+ /setpapertray {statusdict exch /papertray exch put} bind def
+/trayswitch false def % paperout feeds from another tray
+% We don't implement the (undocumented by Adobe) papersize 'operator',
+% because it's very awkward to make it interact properly with all the
+% different ways of setting the paper size.
+%/papersize {/letter true} bind def % <name of paper size>, <short-edge-first-p>
+/appletalktype (LaserWriter) def
+
+%%%%%% The following items are defined in the PostScript Language
+%%%%%% Reference Manual, First Edition, and subsequent 'compatibility'
+%%%%%% documentation from Adobe.
+
+ /checkpassword {statusdict begin .password eq end} bind def
+ /defaulttimeouts {statusdict begin .timeouts aload pop end} bind def
+ /diskonline {
+ false (%disk*%) { pop not exit } 8192 string /IODevice resourceforall
+ } bind def
+ /diskstatus {10240 2097152 } bind odef % - diskstatus <free> <total> (in 1024 byte pages)
+
+%/dostartpage
+ /eescratch {pop 0} bind def
+ /idlefonts {statusdict begin mark .idlefonts aload pop end} bind def
+ /jobname () def
+%/jobtimeout
+ /manualfeed false def
+ /manualfeedtimeout 60 def
+ /margins {statusdict begin .topmargin .leftmargin end} bind def
+ /pagecount {4711} bind def
+ /pagestackorder {false} bind def
+ /pagetype 0 def
+ /prefeed false def
+ /printererror {pop pop} bind def
+ /printername {statusdict /.printername get exch copy} bind def
+ /processcolors /processcolors load def % defined in systemdict
+ /product product def % product is defined in systemdict
+ /revision revision def % revision is defined in systemdict
+ /sccbatch {pop 9600 0} bind def
+ /sccinteractive {pop 9600 0} bind def
+ /setdefaulttimeouts {statusdict begin .timeouts astore pop end} bind def
+ /setdostartpage {statusdict exch /dostartpage exch put} bind def
+ /setduplexmode {mark /Duplex 3 -1 roll currentdevice putdeviceprops} bind def
+ /seteescratch {pop pop} bind def
+ /setidlefonts {] statusdict exch /.idlefonts exch put} bind def
+ /setjobtimeout {statusdict exch /jobtimeout exch put} bind def
+ /setmargins
+ { statusdict begin
+ /.leftmargin exch def /.topmargin exch def
+ end
+ } bind def
+
+% The following compatibility operators are only documented by Adobe in a
+% supplement to the Red Book.
+%
+% - pagemargin <offset>
+% - pageparams <width> <height> <offset> <orientation>
+% <width> <height> <orientation> setpage -
+% <offset> setpagemargin -
+% <width> <height> <offset> <orientation> setpageparams -
+%
+% width and height are in default units (and if orientation is odd, are
+% exchanged!). offset is the x margin, also in default units.
+% Unfortunately, because orientation is relative to the device paper feed,
+% it does not have a consistent meaning in terms of image orientation.
+% We follow the convention that ORIENT1 determines the orientation value
+% that means portait: false means 0, true means 1.
+
+ /pagemargin { 0 } bind def
+ /pageparams
+ { currentdevice 1 dict dup /.MediaSize dup put .getdeviceparams
+ exch pop exch pop aload pop 0 ORIENT1 { 1 } { 0 } ifelse
+ } bind def
+ /setpage
+ { ORIENT1 { 1 } { 0 } ifelse ne {exch} if
+ statusdict /.setpagesize get exec
+ } bind def
+ /setpagemargin {pop} bind def % can't do better without setpagedevice
+ /setpageparams
+ { exch pop ORIENT1 { 1 } { 0 } ifelse ne {exch} if
+ statusdict /.setpagesize get exec
+ } bind def
+ /setpagetype
+ { statusdict begin
+ % The Adobe documentation only defines setpagetype
+ % (a Level 1 operator) as accepting the values 0 and 1,
+ % so we do too.
+ dup .pagetypenames 0 2 getinterval exch get
+ //systemdict /userdict get exch get cvx exec
+ /pagetype exch def
+ end
+ } bind def
+ /setpassword
+ {exch checkpassword
+ {statusdict exch /.password exch put true}
+ {pop false}
+ ifelse} bind def
+ /setprintername
+ {dup length string copy statusdict exch /.printername exch put} bind def
+
+% setresolution is not documented by Adobe, but some applications
+% use it anyway, without testing whether or not it is present.
+%
+% <pixels_per_inch> setresolution -
+%
+% sets the resolution of the device.
+
+ /setresolution
+ { mark /HWResolution [ 4 -1 roll dup ] currentdevice putdeviceprops pop
+ initmatrix erasepage
+ } bind def
+ /setsccbatch {pop pop pop} bind def
+ /setsccinteractive {pop pop pop} bind def
+ /settumble {pop} bind def
+ /waittimeout 300 def
+
+%%%%%% End of documented items.
+
+/.setpagesize
+ { mark /HWSize [
+ 4 index 4 index matrix defaultmatrix dtransform
+ abs ceiling cvi exch abs ceiling cvi exch
+ ] currentdevice putdeviceprops pop pop pop
+ initmatrix initclip erasepage
+ } bind def
+/.password 0 def
+/.timeouts [0 60 30] def
+true setdostartpage
+mark setidlefonts
+0 setjobtimeout
+0 0 setmargins
+product setprintername
+
+end % statusdict
+
+%%%%%% The following documented compatibility "operators" are in systemdict,
+%%%%%% not in statusdict.
+
+systemdict begin
+.currentglobal true .setglobal
+
+/devformat true def
+/devforall { % <pattern> <proc> <scratch> devforall -
+ exch {
+ 1 index currentdevparams
+ /Type .knownget { /FileSystem eq } { false } ifelse
+ { exec } { pop pop } ifelse
+ } /exec load 3 packedarray cvx exch
+ (*) 3 1 roll /IODevice resourceforall
+} odef
+
+/devstatus { % <(%disk*%)> devstatus <searchable> <writable>
+ % <hasNames> <mounted> <removable> <searchOrder>
+ % <freePages> <size> true
+ % <string> devstatus false
+ dup length 5 ge {
+ dup 0 5 getinterval (%disk) eq {
+ dup /IODevice resourcestatus {
+ pop pop dup currentdevparams
+ dup /Searchable get
+ exch dup /Writeable get
+ exch dup /HasNames get
+ exch dup /Mounted get
+ exch dup /Removable get
+ exch dup /SearchOrder get
+ exch dup /Free get
+ exch /LogicalSize get
+ 9 -1 roll pop true
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+} odef
+
+.setglobal end % systemdict
+
+% The following contents of serverdict are a complete guess,
+% based on some observed LaserWriter boilerplate.
+
+serverdict begin
+
+ /execjob { } bind def
+% The Red Book implies that something like the following is
+% an appropriate definition of exitserver.
+ /exitserver { clear stop } bind def
+% However, this interacts badly with our standard error handler,
+% so we override it with the following less appropriate definition.
+ /exitserver { 0 ne { clear cleardictstack } if } bind def
+ /setrealdevice { } bind def
+
+end % serverdict
diff --git a/Master/tlpkg/tlgs/lib/gs_std_e.ps b/Master/tlpkg/tlgs/lib/gs_std_e.ps
new file mode 100644
index 00000000000..e07c90c996d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_std_e.ps
@@ -0,0 +1,73 @@
+% Copyright (C) 1993, 1994 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_std_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the standard encoding vector.
+/StandardEncoding
+% \00x
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% \04x
+ /space /exclam /quotedbl /numbersign
+ /dollar /percent /ampersand /quoteright
+ /parenleft /parenright /asterisk /plus
+ /comma /hyphen /period /slash
+ /zero /one /two /three
+ /four /five /six /seven
+ /eight /nine /colon /semicolon
+ /less /equal /greater /question
+% \10x
+ /at /A /B /C /D /E /F /G
+ /H /I /J /K /L /M /N /O
+ /P /Q /R /S /T /U /V /W
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+% \14x
+ /quoteleft /a /b /c /d /e /f /g
+ /h /i /j /k /l /m /n /o
+ /p /q /r /s /t /u /v /w
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+% \20x
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% \24x
+ /.notdef /exclamdown /cent /sterling
+ /fraction /yen /florin /section
+ /currency /quotesingle /quotedblleft /guillemotleft
+ /guilsinglleft /guilsinglright /fi /fl
+ /.notdef /endash /dagger /daggerdbl
+ /periodcentered /.notdef /paragraph /bullet
+ /quotesinglbase /quotedblbase /quotedblright /guillemotright
+ /ellipsis /perthousand /.notdef /questiondown
+% \30x
+ /.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent
+ /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+ /emdash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+% \34x
+ /.notdef /AE /.notdef /ordfeminine /.notdef /.notdef /.notdef /.notdef
+ /Lslash /Oslash /OE /ordmasculine /.notdef /.notdef /.notdef /.notdef
+ /.notdef /ae /.notdef /.notdef /.notdef /dotlessi /.notdef /.notdef
+ /lslash /oslash /oe /germandbls /.notdef /.notdef /.notdef /.notdef
+% Make an array on large systems, a packed array on small ones.
+256
+vmstatus exch pop exch pop
+100000 ge { array astore readonly } { packedarray } ifelse
+def
+0 StandardEncoding .registerencoding
+/StandardEncoding StandardEncoding .defineencoding
diff --git a/Master/tlpkg/tlgs/lib/gs_sym_e.ps b/Master/tlpkg/tlgs/lib/gs_sym_e.ps
new file mode 100644
index 00000000000..d4ab056cff5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_sym_e.ps
@@ -0,0 +1,83 @@
+% Copyright (C) 1991, 1994, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_sym_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Symbol encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/SymbolEncoding
+% \000
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \040
+ /space /exclam /universal /numbersign
+ /existential /percent /ampersand /suchthat
+ /parenleft /parenright /asteriskmath /plus
+ /comma /minus /period /slash
+ /zero /one /two /three
+ /four /five /six /seven
+ /eight /nine /colon /semicolon
+ /less /equal /greater /question
+% \100
+ /congruent /Alpha /Beta /Chi
+ /Delta /Epsilon /Phi /Gamma
+ /Eta /Iota /theta1 /Kappa
+ /Lambda /Mu /Nu /Omicron
+ /Pi /Theta /Rho /Sigma
+ /Tau /Upsilon /sigma1 /Omega
+ /Xi /Psi /Zeta /bracketleft
+ /therefore /bracketright /perpendicular /underscore
+% \140
+ /radicalex /alpha /beta /chi
+ /delta /epsilon /phi /gamma
+ /eta /iota /phi1 /kappa
+ /lambda /mu /nu /omicron
+ /pi /theta /rho /sigma
+ /tau /upsilon /omega1 /omega
+ /xi /psi /zeta /braceleft
+ /bar /braceright /similar /.notdef
+% \200
+ StandardEncoding 0 32 getinterval aload pop % /.notdef
+% \240
+ /Euro /Upsilon1 /minute /lessequal
+ /fraction /infinity /florin /club
+ /diamond /heart /spade /arrowboth
+ /arrowleft /arrowup /arrowright /arrowdown
+ /degree /plusminus /second /greaterequal
+ /multiply /proportional /partialdiff /bullet
+ /divide /notequal /equivalence /approxequal
+ /ellipsis /arrowvertex /arrowhorizex /carriagereturn
+% \300
+ /aleph /Ifraktur /Rfraktur /weierstrass
+ /circlemultiply /circleplus /emptyset /intersection
+ /union /propersuperset /reflexsuperset /notsubset
+ /propersubset /reflexsubset /element /notelement
+ /angle /gradient /registerserif /copyrightserif
+ /trademarkserif /product /radical /dotmath
+ /logicalnot /logicaland /logicalor /arrowdblboth
+ /arrowdblleft /arrowdblup /arrowdblright /arrowdbldown
+% \340
+ /lozenge /angleleft /registersans /copyrightsans
+ /trademarksans /summation /parenlefttp /parenleftex
+ /parenleftbt /bracketlefttp /bracketleftex /bracketleftbt
+ /bracelefttp /braceleftmid /braceleftbt /braceex
+ /.notdef /angleright /integral /integraltp
+ /integralex /integralbt /parenrighttp /parenrightex
+ /parenrightbt /bracketrighttp /bracketrightex /bracketrightbt
+ /bracerighttp /bracerightmid /bracerightbt /.notdef
+256 packedarray .defineencoding
+2 SymbolEncoding .registerencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_t_m.xbm b/Master/tlpkg/tlgs/lib/gs_t_m.xbm
new file mode 100644
index 00000000000..3cfe6237bc5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_t_m.xbm
@@ -0,0 +1,8 @@
+#define gs_t_m.xbm_width 16
+#define gs_t_m.xbm_height 16
+#define gs_t_m.xbm_x_hot 0
+#define gs_t_m.xbm_y_hot 0
+static unsigned char gs.t_m.bm_bits[] = {
+ 0x00, 0x10, 0x00, 0x30, 0x00, 0x78, 0xf0, 0x7f, 0xfc, 0x7f, 0xfe, 0x7f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff,
+ 0xfe, 0x7f, 0xfc, 0x3f, 0xf0, 0x0f, 0xfe, 0x0f};
diff --git a/Master/tlpkg/tlgs/lib/gs_trap.ps b/Master/tlpkg/tlgs/lib/gs_trap.ps
new file mode 100644
index 00000000000..21e12b388ef
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_trap.ps
@@ -0,0 +1,103 @@
+% Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_trap.ps 6300 2005-12-28 19:56:24Z giles $
+% PostScript LanguageLevel 3 in-RIP trapping support.
+
+ll3dict begin
+
+% We need LanguageLevel 2 or higher in order to have setuserparams and
+% defineresource.
+languagelevel dup 2 .max .setlanguagelevel
+
+% ------ Trapping ------ %
+
+% The PostScript-level trapping parameters are maintained in userdict,
+% and explicitly reinstalled upon restore.
+
+/Trapping mark
+
+/settrapparams dup { % <paramdict> settrapparams -
+ /.trapparams .uservar dup length dict .copydict
+ dup 2 index {
+ % Stack: paramdict olddict olddict key value
+ 2 index 2 index known { put dup } { pop pop } ifelse
+ } forall pop
+ dup .settrapparams % Let the operator check parameter validity.
+ .userdict /.trapparams 3 -1 roll put pop
+} bind .makeoperator
+
+/.copyparams { % <obj> .copyparams <obj'>
+ dup type /dicttype eq {
+ dup length dict .copydict
+ dup {
+ .copyparams 3 copy put pop pop
+ } forall
+ } {
+ dup type /arraytype eq {
+ [ exch { .copyparams } forall ]
+ } if
+ } ifelse
+} odef
+
+/currenttrapparams dup { % - currenttrapparams <paramdict>
+ /.trapparams .uservar .copyparams
+} bind .makeoperator
+
+/settrapzone dup { % - settrapzone -
+ % ****** DUMMY ******
+ newpath
+} bind .makeoperator
+
+% Define initial (dummy) trapping parameters.
+% These values are mostly complete guesses.
+userdict /.trapparams mark
+ /BlackColorLimit 1.0
+ /BlackDensityLimit 1.0
+ /BlackWidth 1.0
+ /ColorantZoneDetails 0 dict
+ /Enabled true
+ /HalftoneName null
+ /ImageInternalTrapping false
+ /ImagemaskTrapping true
+ /ImageResolution 1
+ /ImageToObjectTrapping true
+ /ImageTrapPlacement /Center
+ /SlidingTrapLimit 1.0
+ /StepLimit 1.0
+ /TrapColorScaling 0.0
+ /TrapSetName null
+ /TrapWidth 1.0
+.dicttomark readonly put
+
+.dicttomark /ProcSet defineresource pop
+
+% Define the InkParams and TrapParams resource categories.
+{ /InkParams /TrapParams } {
+ /Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /dicttype def
+ currentdict end /Category defineresource pop
+} forall
+
+% Define the TrappingType resource category.
+/Generic /Category findresource dup maxlength 3 add dict .copydict begin
+ /InstanceType /integertype def
+/TrappingType currentdict end /Category defineresource pop
+
+{1001} { dup /TrappingType defineresource pop } forall
+
+.setlanguagelevel
+
+end % ll3dict
diff --git a/Master/tlpkg/tlgs/lib/gs_ttf.ps b/Master/tlpkg/tlgs/lib/gs_ttf.ps
new file mode 100644
index 00000000000..e657112b199
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_ttf.ps
@@ -0,0 +1,1802 @@
+% Copyright (C) 1996-2003 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_ttf.ps 8022 2007-06-05 22:23:38Z giles $
+% Support code for direct use of TrueType fonts.
+% (Not needed for Type 42 fonts.)
+
+% Note that if you want to use this file without including the ttfont.dev
+% option when you built Ghostscript, you will need to load the following
+% files before this one:
+% lib/gs_mgl_e.ps
+% lib/gs_mro_e.ps
+% lib/gs_wan_e.ps
+
+% Thanks to B. Jackowski and GUST (the Polish TeX Users' Group) for
+% the glyf-splitting code.
+
+% ---------------- Font loading machinery ---------------- %
+
+% Augment the FONTPATH machinery so it recognizes TrueType fonts.
+
+/.scanfontheaders where {
+ pop /.scanfontheaders [
+ .scanfontheaders aload pop (\000\001\000\000*) (true*)
+ ] def
+} if
+
+% <file> <key> .findfontvalue <value> true
+% <file> <key> .findfontvalue false
+% Closes the file in either case.
+/.findnonttfontvalue /.findfontvalue load def
+/.findfontvalue {
+ 1 index read {
+ 2 index 1 index unread
+ % beginning with binary 0 or 't' (TrueType), or 'O' (OpenType)
+ dup 0 eq 1 index (O) 0 get eq or exch (t) 0 get eq or {
+ % If this is a font at all, it's a TrueType font.
+ dup /FontType eq {
+ pop closefile 42 true
+ } {
+ dup /FontName eq { pop .findttfontname } { pop closefile false } ifelse
+ } ifelse
+ } {
+ % Not a TrueType font.
+ .findnonttfontvalue
+ } ifelse
+ } { pop closefile false } ifelse
+} bind def
+
+% <file> .findttfontname <fname> true
+% <file> .findttfontname false
+% Closes the file in either case.
+/.findttfontname {
+ //true 0 .loadttfonttables
+ tabdict /name .knownget {
+ dup 8 getu32 f exch setfileposition
+ 12 getu32 string f exch readstring pop
+ dup
+ 6 findname not {
+ 4 findname % Try FullName
+ } {
+ exch pop true
+ }
+ ifelse
+ } {
+ false
+ } ifelse
+ f closefile end end
+} bind def
+
+% Load a font file that might be a TrueType font.
+
+/tt_tag_dict << <00010000> 0 (true) 0 (typ1) 0 (ttcf) 0 >> readonly def
+
+% <file> .loadfontfile -
+/.loadnonttfontfile /.loadfontfile load def
+/.loadfontfile {
+ dup (1234) .peekstring { //tt_tag_dict exch known } { //false } ifelse {
+ % If this is a font at all, it's a TrueType font.
+ .loadttfont pop
+ } {
+ % Not a TrueType font.
+ .loadnonttfontfile
+ } ifelse
+} bind def
+
+currentdict /tt_tag_dict .undef
+
+% ---------------- Automatic Type 42 generation ---------------- %
+
+% Load a TrueType font from a file as a Type 42 PostScript font.
+% The thing that makes this really messy is the handling of encodings.
+% There are 2 interacting tables that affect the encoding:
+% 'cmap' provides multiple maps from character codes to glyph indices
+% 'post' maps glyph indices to glyph names (if present)
+% What we need to get out of this is:
+% Encoding mapping character codes to glyph names
+% (the composition of cmap and post)
+% CharStrings mapping glyph names to glyph indices
+% (the inverse of post)
+% If the post table is missing, we have to take a guess based on the cmap
+% table.
+
+/.loadttfontdict 50 dict dup begin
+
+/orgXUID AladdinEnterprisesXUID def
+/maxstring 32764 def % half the maximum length of a PostScript string,
+ % must be a multiple of 4 (for hmtx / loca / vmtx)
+
+/.invert_encoding % <array> invert_encoding <dict>
+{ dup 256 dict exch
+ 0 exch 1 exch length 1 sub { % [] <> i
+ dup 3 index exch get % [] <> i v
+ dup /.notdef ne {
+ exch 2 index 2 index .knownget {
+ dup type /arraytype eq {
+ [ exch aload pop counttomark 2 add -1 roll ]
+ } {
+ exch 2 array astore
+ } ifelse
+ } if 2 index 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+ } for
+ exch pop
+} bind def
+
+% Define the Macintosh standard mapping from characters to glyph indices.
+/MacRomanEncoding dup .findencoding def
+/MacGlyphEncoding dup .findencoding def
+
+% Invert the MacRomanEncoding.
+/.romanmacdict MacRomanEncoding .invert_encoding def
+
+% Define remapping for misnamed glyphs in TrueType 'post' tables.
+% There are probably a lot more than this!
+% Also see /postalias table below.
+/postremap mark
+ /Eoverdot /Edotaccent
+ /eoverdot /edotaccent
+.dicttomark readonly def
+
+% Array used for fast pre-filling of cmap array
+/.array1024z [ 1024 { 0 } repeat ] def
+
+% ---- Utilities ---- %
+
+% Define a serial number for creating unique XUIDs for TrueType fonts.
+% We used to use the checkSumAdjustment value from the font, but this is
+% not reliable, since some fonts don't set it correctly.
+% Note that we must do this in a string to make it immune to save/restore.
+/xuidstring <80000000> def
+/curxuid { % - curxuid <int>
+ 0 xuidstring { exch 8 bitshift exch add } forall
+} bind def
+/nextxuid { % - nextxuid -
+ 3 -1 0 {
+ xuidstring 1 index 2 copy get dup 255 ne {
+ 1 add put pop exit
+ } if pop 0 put pop
+ } for
+} bind def
+
+% <string> <index> getu16 <integer>
+/getu16 {
+ 2 copy get 8 bitshift 3 1 roll 1 add get add
+} bind def
+
+% <string> <index> gets16 <integer>
+/gets16 {
+ getu16 16#8000 xor 16#8000 sub
+} bind def
+
+% <string> <index> getu32 <integer>
+/getu32 {
+ 2 copy getu16 16 bitshift 3 1 roll 2 add getu16 add
+} bind def
+
+% <string> <index> gets32 <integer>
+/gets32 {
+ 2 copy gets16 16 bitshift 3 1 roll 2 add getu16 add
+} bind def
+
+% <string|array> <index> getu16 <integer>
+/getu16a {
+ 2 getinterval_from_stringarray 0 getu16
+} bind def
+
+% <string|array> <index> gets16 <integer>
+/gets16a {
+ 2 getinterval_from_stringarray 0 gets16
+} bind def
+
+% <string|array> <index> getu32a <integer>
+/getu32a {
+ 4 getinterval_from_stringarray 0 getu32
+} bind def
+
+% <string|array> <index> gets32a <integer>
+/gets32a {
+ 4 getinterval_from_stringarray 0 gets32
+} bind def
+
+16#ffffffff 0 gt { % 64-bit sign extension
+ { /curxuid /gets32 /gets32a} {
+ mark 1 index load aload pop { 16#80000000 xor 16#80000000 sub } aload pop
+ .packtomark cvx def
+ } bind forall
+} if
+
+% <string> <index> <integer> putu16 -
+/putu16 {
+ 3 copy -8 bitshift put
+ exch 1 add exch 16#ff and put
+} bind def
+
+% <string> <index> <integer> putu32 -
+/putu32 {
+ 3 copy -16 bitshift putu16
+ exch 2 add exch 16#ffff and putu16
+} bind def
+
+% <nametable> <nameid> findname <string> true
+% <nametable> <nameid> findname false
+/findname {
+ TTFDEBUG { (findname: ) print dup =only } if
+ false 3 1 roll
+ 1 index length 0 gt { % check for zero length name table
+ 0 1 3 index 2 getu16 1 sub {
+ % Stack: false table id index
+ 12 mul 6 add 2 index exch 12 getinterval
+ dup 6 getu16 2 index eq {
+ % We found the name we want.
+ exch pop
+ % Stack: false table record
+ dup 10 getu16 2 index 4 getu16 add
+ 1 index 8 getu16 4 -1 roll 3 1 roll
+ 3 copy add 1 index length
+ le {
+ pop
+ getinterval exch
+ % Stack: false string record
+ % Check for 8- vs. 16-bit characters.
+ is2byte { true } { dup is2byte2 } ifelse { string2to1 } if true null 4 -1 roll exit
+ } {
+ pop pop pop pop
+ false
+ exit
+ } ifelse
+ } if pop
+ } for
+ } if
+ pop pop
+ TTFDEBUG {
+ dup { ( = ) print 1 index == } { ( not found) = } ifelse
+ } if
+} bind def
+
+% <namerecord> is2byte <bool>
+/is2byte {
+ dup 0 getu16 {
+ { pop true } % Apple Unicode
+ { pop false } % Macintosh Script manager
+ { 1 getu16 1 eq } % ISO
+ { 1 getu16 1 eq } % Microsoft
+ } exch get exec
+} bind def
+
+% <string> is2byte2 <bool>
+/is2byte2 {
+ dup length
+ dup 2 mod 0 ne {
+ pop pop false
+ } { % s l
+ true exch % s b l
+ 1 sub 0 exch 2 exch {
+ 2 index exch get 0 ne {
+ pop false exit
+ } if
+ } for
+ exch pop
+ } ifelse
+} bind def
+
+% <string2> string2to1 <string>
+/string2to1 {
+ dup length 2 idiv string dup
+ 0 1 3 index length 1 sub {
+ 3 index 1 index 2 mul 1 add get put dup
+ } for pop exch pop
+} bind def
+
+% Each procedure in this dictionary is called as follows:
+% <encodingtable> proc <glypharray>
+/cmapformats mark
+ 0 { % Apple standard 1-to-1 mapping.
+ 6 256 getinterval_from_stringarray { } forall 256 packedarray
+ } bind
+ 2 { % Apple 16bit CJK (ShiftJIS etc)
+
+ % /sHK_sz subHeaderKey_size % 1 * uint16
+ % /sH_sz subHeader_size % 4 * uint16
+ % /sH_len subHeader_length
+ % /cmapf2_tblen total table length
+ % /cmapf2_lang language code (not used)
+ % /sHKs subHeaderKeys
+
+ /sHK_sz 2 def
+ /sH_sz 8 def
+ dup 2 getu16a /cmapf2_tblen exch def
+
+ dup 4 getu16a /cmapf2_lang exch def
+
+ dup 6 256 sHK_sz mul getinterval_from_stringarray /sHKs exch def
+
+ 0 % initialization value for /sH_len
+ 0 1 255 {
+ sHKs exch
+ 2 mul getu16
+ 1 index % get current max
+ 1 index % get current subHeaderKey
+ lt {exch} if pop
+ } for
+ /sH_len exch def
+
+ dup 6 256 sHK_sz mul add
+ cmapf2_tblen 1 index sub getinterval_from_stringarray
+ /sH_gIA exch def
+
+ /cmapf2_glyph_array 65535 array def
+
+ /.cmapf2_putGID {
+ /cmapf2_ch cmapf2_ch_hi 8 bitshift cmapf2_ch_lo add def
+ firstCode cmapf2_ch_lo le
+ cmapf2_ch_lo firstCode entryCount add lt
+ and { % true: j is inside
+ sH_offset idRangeOffset add % offset to gI
+ cmapf2_ch_lo firstCode sub 2 mul % rel. pos. in range
+ add 6 add % offset in sH_gIA
+ sH_gIA exch getu16
+ dup 0 gt { %
+ idDelta add
+ cmapf2_glyph_array exch cmapf2_ch exch put
+ } {
+ pop
+ % cmapf2_glyph_array cmapf2_ch 0 put
+ } ifelse
+ } { % false: j is outside
+ % cmapf2_glyph_array cmapf2_ch 0 put
+ } ifelse
+ } def
+
+ 16#00 1 16#ff { % hi_byte scan
+ /cmapf2_ch_hi exch def
+ sHKs cmapf2_ch_hi sHK_sz mul getu16
+ /sH_offset exch def
+ sH_gIA sH_offset sH_sz getinterval
+ dup 0 getu16 /firstCode exch def
+ dup 2 getu16 /entryCount exch def
+ dup 4 gets16 /idDelta exch def
+ dup 6 getu16 /idRangeOffset exch def
+ pop
+ sH_offset 0 eq {
+ /cmapf2_ch_lo cmapf2_ch_hi def
+ /cmapf2_ch_hi 0 def
+ .cmapf2_putGID
+ } {
+ 16#00 1 16#ff { % lo_byte scan
+ /cmapf2_ch_lo exch def
+ .cmapf2_putGID
+ } for
+ } ifelse
+ } for
+ pop
+ 0 1 cmapf2_glyph_array length 1 sub { % rewrite null -> 0.
+ dup cmapf2_glyph_array exch get
+ null eq { cmapf2_glyph_array exch 0 put } {pop} ifelse
+ } for
+ cmapf2_glyph_array
+ } bind
+ 4 { % Microsoft/Adobe segmented mapping.
+ /etab exch def
+ /nseg2 etab 6 getu16 def
+ 14 /endc etab 2 index nseg2 getinterval_from_stringarray def
+ % The Apple TrueType documentation omits the 2-byte
+ % 'reserved pad' that follows the endCount vector!
+ 2 add
+ nseg2 add /startc etab 2 index nseg2 getinterval_from_stringarray def
+ nseg2 add /iddelta etab 2 index nseg2 getinterval_from_stringarray def
+ nseg2 add /idroff etab 2 index nseg2 getinterval_from_stringarray def
+ % The following hack allows us to properly handle
+ % idiosyncratic fonts that start at 0xf000:
+ pop
+ /firstcode startc 0 getu16 16#ff00 and dup 16#f000 ne { pop 0 } if def
+ /putglyph {
+ glyphs code 3 -1 roll put /code code 1 add def
+ } bind def
+ % Do a first pass to compute the size of the glyphs array.
+ /numcodes 0 def /glyphs 0 0 2 nseg2 3 sub {
+ % Stack: /glyphs numglyphs i2
+ /i2 exch def
+ /scode startc i2 getu16 def
+ /ecode endc i2 getu16 def
+ numcodes scode firstcode sub
+ % Hack for fonts that have only 0x0000 and 0xf000 ranges
+ %dup 16#e000 ge { 255 and } if
+ % the previous line is obstructive to CJK fonts, so it was removed
+ exch sub 0 .max ecode scode sub 1 add add
+ exch 1 index add exch
+ numcodes add /numcodes exch def
+ } for array def
+ % prefill the array with 0's faster than a { 0 putglyph } repeat
+ glyphs length 1024 ge {
+ .array1024z 0 1024 glyphs length 1023 sub { glyphs exch 2 index putinterval } for
+ glyphs dup length 1024 sub 3 -1 roll
+ putinterval
+ } {
+ 0 1 glyphs length 1 sub { glyphs exch 0 put } for
+ } ifelse
+ % Now fill in the array.
+ /numcodes 0 def /code 0 def
+ 0 2 nseg2 3 sub {
+ /i2 exch def
+ /scode startc i2 getu16 def
+ /ecode endc i2 getu16 def
+ numcodes scode firstcode sub
+ % Hack for fonts that have only 0x0000 and 0xf000 ranges
+ %dup 16#e000 ge { 255 and } if
+ % the previous line is obstructive to CJK fonts, so it was removed
+ exch sub 0 .max dup /code exch code exch add def
+ ecode scode sub 1 add add numcodes add /numcodes exch def
+ /delta iddelta i2 gets16 def
+ TTFDEBUG {
+ (scode=) print scode =only
+ ( ecode=) print ecode =only
+ ( delta=) print delta =only
+ ( droff=) print idroff i2 getu16 =
+ } if
+ idroff i2 getu16 dup 0 eq {
+ pop scode delta add 65535 and 1 ecode delta add 65535 and
+ { putglyph } for
+ } { % The +2 is for the 'reserved pad'.
+ /gloff exch 14 nseg2 3 mul add 2 add i2 add add def
+ 0 1 ecode scode sub {
+ 2 mul gloff add etab exch getu16a
+ dup 0 ne { delta add 65535 and } if putglyph
+ } for
+ } ifelse
+ } for glyphs /glyphs null def % for GC
+ } bind
+ 6 { % Single interval lookup.
+ dup 6 getu16a /firstcode exch def
+ dup 8 getu16a /ng exch def
+ firstcode ng add array
+ % Stack: tab array
+ % Fill elements 0 .. firstcode-1 with 0
+ 0 1 firstcode 1 sub { 2 copy 0 put pop } for
+ dup firstcode ng getinterval
+ % Stack: tab array subarray
+ % Fill elements firstcode .. firstcode+nvalue-1 with glyph values
+ 0 1 ng 1 sub {
+ dup 2 mul 10 add 4 index exch getu16a 3 copy put pop pop
+ } for pop exch pop
+ } bind
+.dicttomark readonly def % cmapformats
+
+% <cmaptab> cmaparray <glypharray>
+/cmaparray {
+ dup 0 getu16a cmapformats exch .knownget {
+ TTFDEBUG {
+ (cmap: format ) print 1 index 0 getu16a = flush
+ } if exec
+ } {
+ (Can't handle format ) print 0 getu16a = flush
+ 0 1 255 { } for 256 packedarray
+ } ifelse
+ TTFDEBUG {
+ (cmap: length=) print dup length = dup ==
+ } if
+} bind def
+
+/get_from_stringarray % <array|string> <offset> get_from_stringarray <int>
+{ 1 index type /stringtype eq {
+ get
+ } {
+ exch { % o ()
+ 2 copy length ge {
+ length sub
+ } {
+ exch get exit
+ } ifelse
+ } forall
+ } ifelse
+} bind def
+
+/getinterval_from_stringarray % <array|string> <offset> <length> getinterval_from_stringarray <string>
+{ % May allocate a string in VM.
+ 2 index type /stringtype eq {
+ getinterval
+ } {
+ string exch 0 % [] s o p
+ 4 3 roll { % s o p Si
+ dup length % s o p Si lSi
+ dup 4 index lt {
+ 3 index exch sub % s o p Si o'
+ exch pop 3 1 roll exch pop % s o' p
+ } { % s o p Si lSi
+ dup 3 1 roll % s o p lSi Si lSi
+ 4 index sub % s o p lSi Si lSi-o
+ 5 index length 4 index sub % s o p lSi Si lSi-o ls-p
+ 2 copy gt { exch } if pop % s o p lSi Si minl
+ dup 3 1 roll % s o p lSi minl Si minl
+ 5 index exch getinterval % s o p lSi minl from
+ 5 index 4 index 3 index % s o p lSi minl from s p minl
+ getinterval % s o p lSi minl from to
+ copy pop % s o p lSi minl
+ 3 1 roll % s o minl p lSi
+ sub % s o minl p'
+ 3 1 roll add % s p' o'
+ dup 3 index length ge {
+ exch exit % s o p'
+ } if
+ exch % s o' p'
+ } ifelse
+ } forall
+ pop pop % s
+ } ifelse
+} bind def
+
+/string_array_size % <array|string> string_array_size <int>
+{ dup type /stringtype eq {
+ length
+ } {
+ 0 exch { length add } forall
+ } ifelse
+} bind def
+
+% Each procedure in this dictionary is called as follows:
+% posttable <<proc>> glyphencoding
+/postformats mark
+ 16#00010000 { % 258 standard Macintosh glyphs.
+ pop MacGlyphEncoding
+ }
+ 16#00020000 { % Detailed map, required by Microsoft fonts.
+ dup dup type /arraytype eq { 0 get } if length 36 lt {
+ TTFDEBUG { (post format 2.0 invalid.) = flush } if
+ pop [ ]
+ } {
+ /postglyphs exch def
+ /post_first postglyphs dup type /arraytype eq { 0 get } if def
+ post_first 32 getu16 /numglyphs exch def
+ /glyphnames numglyphs 2 mul 34 add def
+ % Build names array in the order they occur in the 'post' table
+ /postpos glyphnames def
+ /total_length postglyphs //string_array_size exec def
+ numglyphs array 0 1 numglyphs 1 sub {
+ postpos total_length ge { pop exit } if
+ % No name available, /postnames will be defined as an empty
+ % array and the glyph won't get a name attached.
+ postglyphs postpos //get_from_stringarray exec
+ postglyphs postpos 1 add 2 index //getinterval_from_stringarray exec cvn
+ exch postpos add 1 add /postpos exch def
+ 2 index 3 1 roll put
+ } for
+ /postnames exch def
+ numglyphs array 0 1 numglyphs 1 sub {
+ dup 2 mul 34 add postglyphs exch 2 //getinterval_from_stringarray exec
+ dup 0 get 8 bitshift exch 1 get add dup 258 lt {
+ MacGlyphEncoding exch get
+ } {
+ dup 32768 ge {
+ % According to the published TrueType spec, such values are
+ % "reserved for future use", but at least some PDF files
+ % produced by the Adobe PDF library contain entries with a
+ % value of 16#ffff.
+ pop /.notdef
+ } {
+ % Get the name for this glyph
+ 258 sub dup postnames length ge {
+ TTFDEBUG { ( *** warning: glyph index past end of 'post' table) = flush } if
+ pop
+ exit
+ } if
+ postnames exch get
+ % At least some of Microsoft's TrueType fonts use incorrect
+ % (Adobe-incompatible) names for some glyphs.
+ % Correct for this here.
+ postremap 1 index .knownget { exch pop } if
+ } ifelse
+ } ifelse
+ 2 index 3 1 roll put
+ } for
+ }
+ ifelse
+ } bind
+ 16#00030000 { % No map.
+ pop [ ]
+ } bind
+.dicttomark readonly def % postformats
+
+/call.readtable
+{ .readtable
+} bind def
+/call.readbigtable
+{ .readbigtable
+} bind def
+
+% Each procedure in this dictionary is called as follows:
+% <file> <length> -proc- <string|array_of_strings>
+% Note that each table must have an even length, because of a strange
+% Adobe requirement that each sfnts entry have even length.
+/readtables mark
+ % Ordinary tables
+ (head) //call.readtable
+ (hhea) 1 index
+ (maxp) 1 index
+ (name) 1 index
+ (OS/2) 1 index
+ (post) //call.readbigtable
+ (vhea) //call.readtable
+ % Big tables
+ (cmap) //call.readbigtable
+ (glyf) 1 index
+ (loca) 1 index
+ (hmtx) 1 index
+ (vmtx) 1 index
+ % Tables only needed for embedding in PDF files
+ (cvt ) //call.readtable
+ (fpgm) 1 index
+ (prep) 1 index
+.dicttomark
+% Normally there would be a 'readonly' here, but the ttf2pf utility wants
+% to include the 'kern' table as well, so we leave the readtables dictionary
+% writable.
+def % readtables
+
+/readtables_stripped readtables dup length dict copy
+dup (loca) { .skiptable } put
+dup (glyf) { .skiptable } put
+def
+
+% Read a table as a single string.
+% <file> <length> .skiptable <string>
+/.skiptable {
+ pop pop ()
+} bind def
+
+% Read a table as a single string.
+% <file> <length> .readtable <string>
+/.readtable {
+ dup dup 1 and add string
+ % Stack: f len str
+ dup 0 4 -1 roll getinterval
+ % Stack: f str str1
+ % Because of the absurd PostScript specification that gives an
+ % error for reading into an empty string, we have to check for
+ % this explicitly here.
+ 3 -1 roll exch
+ dup () ne { readstring } if pop pop
+} bind def
+
+% Read a big table (one that may exceed 64K).
+% <file> <length> .readbigtable <string[s]>
+/.readbigtable {
+ dup 65400 lt {
+ .readtable
+ } {
+ currentuserparams /VMReclaim get -2 vmreclaim
+ [ 4 2 roll {
+ % Stack: mark ... f left
+ dup maxstring le { exit } if
+ 1 index maxstring string readstring pop 3 1 roll maxstring sub
+ } loop .readtable ]
+ exch vmreclaim
+ } ifelse
+} bind def
+
+end readonly def % .loadttfontdict
+
+% <tab> .printtab -
+/.printtab {
+ dup 0 4 getinterval print ( ) print
+ dup 8 getu32 =only ( ) print
+ 12 getu32 =
+} bind def
+
+% <file> <bool> <SubfontID> .loadttfonttables -
+% Pushes .loadttfontdict & scratch dict on d-stack.
+% Defines f, offsets, tables, tabdict, tabs.
+% Skips loca and glyf if <bool> is true.
+/.loadttfonttables {
+ .loadttfontdict begin
+ 40 dict begin
+ /SubfontID exch def
+ /load_stripped exch def
+ /f exch def
+ /offsets f 12 string readstring pop def
+ load_stripped { readtables_stripped } { readtables } ifelse /readtables_ exch def
+ offsets 0 4 getinterval (ttcf) eq {
+ % We need to handle TT collections with disk fonts only.
+ % Therefore the file is a disk file and it can be positioned.
+ offsets 8 getu32 /num_fonts exch def
+ SubfontID num_fonts ge {
+ QUIET not { (True Type collection contains insufficient fonts.) = } if
+ /.loadttfonttables cvx /invalidfont signalerror
+ } if
+ SubfontID 4 mul 12 add f exch setfileposition
+ f 4 string readstring pop 0
+ getu32 /ttc_offset exch def
+ f ttc_offset setfileposition
+ /offsets f 12 string readstring pop def
+ } {
+ SubfontID 0 gt {
+ QUIET not { (SubfontID > 0 with a True Type file which is not a collection.) = } if
+ /.loadttfonttables cvx /invalidfont signalerror
+ } if
+ /ttc_offset 0 def
+ } ifelse
+ /tables f offsets 4 getu16 16 mul string readstring pop def
+ /tabdict tables length 16 idiv dict def
+ % tabs = tables we want to keep, sorted by file position.
+ /tabs [ 0 16 tables length 1 sub {
+ tables exch 16 getinterval
+ TTFDEBUG { dup .printtab } if
+ dup 0 4 getinterval readtables_ 1 index known {
+ % put all 0 length tables at 0 to avoid overlap
+ 1 index 12 getu32 0 eq { 1 index 8 0 putu32 } if
+ tabdict exch 2 index put
+ } {
+ pop pop
+ } ifelse
+ } for ] {
+ exch 8 getu32 exch 8 getu32 lt
+ } .sort def
+ % In certain malformed TrueType fonts, tables overlap.
+ % Truncate tables if necessary.
+ 0 1 tabs length 2 sub {
+ dup tabs exch get exch 1 add tabs exch get
+ 1 index 8 getu32 2 index 12 getu32 add
+ 1 index 8 getu32 gt {
+ (**** Warning: ) print 1 index 0 4 getinterval print
+ ( overlaps ) print dup 0 4 getinterval print
+ (, truncating.) = flush
+ dup 8 getu32 2 index 8 getu32 sub
+ 2 index 12 3 -1 roll putu32
+ } if pop pop
+ } for
+} bind def
+
+/.file_table_pos_names
+mark
+/glyf 0
+/loca 0
+.dicttomark readonly def
+
+% - .readttdata -
+% Read data. Updates offsets, tabs; stores data in tabdict.
+/.readttdata {
+ /file_table_pos 10 dict def
+ /fpos offsets length tables length add ttc_offset add def
+ /sfpos offsets length tabs length 16 mul add def
+ offsets 4 tabs length putu16
+ tabs {
+ dup 0 4 getinterval /tname exch def
+ dup 8 getu32 /tpos exch def
+ dup 12 getu32 /tlen exch def
+ load_stripped //.file_table_pos_names tname known and {
+ pop
+ file_table_pos tname [tpos tlen] put
+ tabdict tname () put
+ } {
+ 8 sfpos putu32
+ % Skip data between the end of the previous table and
+ % the beginning of this one, if any.
+ tpos fpos gt {
+ load_stripped {
+ % 'setfileposition' is faster for skipping a big data.
+ f tpos setfileposition
+ } {
+ f tpos fpos sub () /SubFileDecode filter dup flushfile closefile
+ /fpos tpos def
+ } ifelse
+ } if
+ f tlen readtables_ tname get exec
+ tabdict tname 3 -1 roll put
+ % Round up the table length to an even value.
+ /sfpos sfpos tlen dup 1 and add add def
+ } ifelse
+ /fpos fpos tlen add def
+ } forall
+} bind def
+
+% Find the string in a list of strings that includes a given index.
+% <strings> <index> .findseg <string> <index'>
+/.findseg {
+ exch {
+ dup length 2 index gt { exch exit } if
+ length sub
+ } forall
+} bind def
+
+% - .makesfnts -
+% Defines checksum, getloca, head, locatable, numloca, post, sfnts, upem
+% Note that the 'loca' table may be out of order. This is handled when
+% needed in .dividesfnts
+/.makesfnts {
+ .readttdata
+ /head tabdict /head get def
+ /post tabdict /post .knownget {
+ dup 0 get /post_first_part exch def
+ } {
+ null
+ } ifelse def
+ load_stripped not {
+ /locatable tabdict /loca get def
+ /numloca
+ locatable dup type /stringtype eq
+ { length }
+ { 0 exch { length add } forall }
+ ifelse % no def yet
+ locatable type /stringtype eq {
+ /.indexloca {} def
+ } {
+ /.indexloca /.findseg load def
+ } ifelse
+ head 50 getu16 0 ne {
+ /getloca {
+ 2 bitshift locatable exch .indexloca getu32
+ } def
+ 4 idiv 1 sub
+ } {
+ /getloca {
+ dup add locatable exch .indexloca getu16 dup add
+ } def
+ 2 idiv 1 sub
+ } ifelse def % numloca
+ % If necessary, re-partition the glyfs.
+ tabdict /glyf get dup type /stringtype ne {
+ .dividesfnts tabdict /glyf 3 -1 roll put
+ } {
+ pop
+ } ifelse
+ } {
+ % We did not load loca, take the number of glyphs from maxp.
+ /numloca tabdict /maxp get 4 getu16 def
+ } ifelse
+ /sfnts [
+ offsets tabs { concatstrings } forall
+ tabs {
+ 0 4 getinterval tabdict exch get
+ dup type /stringtype ne { aload pop } if
+ } forall
+ ] def
+} bind def
+
+% <glyfs> .dividesfnts <glyfs'>
+/.dividesfnts {
+ /glyfs exch def
+ /len1 0 glyfs { length add } forall def
+ % Determine where to split the glyfs by scanning the sorted locatable
+ % The very last entry in loca may be bogus.
+ % Note that some loca entries may be odd, but we can only
+ % split at even positions.
+ %
+ % Construct splitarray, the array of final lengths of
+ % the sfnts entries covering the glyfs (i.e., all but
+ % the first and last sfnts entries).
+ /prevsplit 0 def
+ /prevboundary 0 def
+ % sort the locatable in case it is out of order
+ % Note the 'loca' table remains unchanged
+ /needsort false def
+ numloca array % the array of 'loca' entries (may be out of order)
+ -1 % initial values for in order check
+ 0 1 numloca 1 sub {
+ dup getloca dup
+ 4 -1 roll lt { /needsort true def } if
+ 3 copy put exch pop
+ } for pop % discard inorder check value
+ needsort {
+ { lt } bind .sort % stack: locatable_array
+ } if
+ /splitarray [
+ 3 -1 roll 0 1 numloca 1 sub {
+ % stack: /splitarray -mark- { splitlen splitlen ... } locatable_array index
+ 1 index exch get dup prevsplit maxstring add gt {
+ prevboundary prevsplit sub exch
+ /prevsplit prevboundary def
+ } if
+ dup 1 and 0 eq { /prevboundary exch def } { pop } ifelse
+ dup type /arraytype ne { exch } if % keep locatable_array on top
+ } for
+ len1 prevsplit sub
+ exch pop % discard locatable_array
+ ] def
+ currentuserparams /VMReclaim get -2 vmreclaim
+ [
+ % Re-split the sfnts glyfs strings according to splitarray.
+ % We do this by iterating over the final segments defined
+ % by splitarray, and constructing them from pieces of the
+ % current glyfs strings. We recycle the current strings
+ % when possible, to avoid stressing the allocator.
+ /sfnt_idx 0 def
+ /strpos 0 def
+ /avail () def
+ splitarray {
+ /seglen exch def
+ /segpos 0 def
+ avail length seglen ge
+ { avail 0 seglen getinterval /avail () def } { seglen string }
+ ifelse
+ {
+ /str glyfs sfnt_idx get def
+ /strlen str length def
+ /strleft strlen strpos sub def
+ seglen segpos sub strleft lt { exit } if
+ % Copy the (rest of the) string into the new segment.
+ % We know strleft <= segleft.
+ dup segpos str strpos strleft getinterval putinterval
+ /segpos segpos strleft add def
+ /avail str def
+ /sfnt_idx sfnt_idx 1 add def
+ /strpos 0 def
+ segpos seglen eq { exit } if
+ } loop
+ % Fill up the segment with an initial piece of the next
+ % existing glyfs string. We know strleft > segleft.
+ /segleft seglen segpos sub def
+ dup segpos str strpos segleft getinterval putinterval
+ /strpos strpos segleft add def
+ } forall
+ ]
+ exch vmreclaim
+} bind def
+
+/first_post_string % - first_post_string <string>
+{
+ post dup type /arraytype eq { 0 get } if
+} bind def
+
+% - .getpost -
+% Uses post, defines glyphencoding
+/.getpost {
+ /glyphencoding post null eq {
+ TTFDEBUG { (post missing) = flush } if [ ]
+ } {
+ postformats first_post_string 0 getu32 .knownget {
+ TTFDEBUG {
+ (post: format ) print
+ first_post_string
+ dup 0 getu16 =only (,) print 2 getu16 = flush
+ } if
+ post exch exec
+ } {
+ TTFDEBUG { (post: unknown format ) print post 0 getu32 = flush } if [ ]
+ } ifelse
+ } ifelse
+ TTFDEBUG { (post=) print dup == } if
+ def
+} bind def
+
+% - .ttkeys <key> <value> ...
+/.ttkeys {
+ count /ttkeycount exch def
+ /upem head 18 getu16 def
+ /FontMatrix matrix
+ /FontBBox [ 36 2 42 { head exch gets16 upem div } for ]
+ nextxuid
+ tabdict /name .knownget {
+ % Find the names from the 'name' table.
+ /names exch def
+ /FontName names 6 findname not { names 4 findname not { curxuid 16#ffffffff and 16 32 string cvrs } if } if
+ /fontname 1 index def
+ /FontInfo mark
+ names 0 findname { /Notice exch } if
+ names 1 findname { /FamilyName exch } if
+ names 4 findname { /FullName exch } if
+ names 5 findname { /Version exch } if
+ } {
+ % No name table, fabricate a FontName.
+ /FontName curxuid 16#ffffffff and 16 32 string cvrs
+ /fontname 1 index def
+ /FontInfo mark
+ } ifelse
+ % Stack: ... /FontInfo mark key1 value1 ...
+ post null ne {
+ /ItalicAngle first_post_string 4 gets32 65536.0 div
+ /isFixedPitch first_post_string 12 getu32 0 ne
+ /UnderlinePosition first_post_string 8 gets16 upem div
+ /UnderlineThickness first_post_string 10 gets16 upem div
+ } if
+ counttomark 0 ne { .dicttomark } { pop pop } ifelse
+ /XUID [orgXUID 42 curxuid]
+ TTFDEBUG {
+ tabs { .printtab } forall
+ [ sfnts { length } forall ] ==
+ count ttkeycount sub array astore dup { == } forall aload pop
+ } if
+ /sfnts sfnts
+} bind def
+
+% ---------------- Standard TrueType font loading ---------------- %
+
+% - .pickcmap_with_no_xlatmap -
+% Defines cmapsub, cmaptab
+/.pickcmap_with_no_xlatmap {
+ tabdict /cmap get
+ % The Apple cmap format is no help in determining the encoding.
+ % Look for a Microsoft table. If we can't find one,
+ % just use the first table, whatever it is.
+ dup 4 8 getinterval_from_stringarray exch % () [] % the default
+ 0 1 2 index 2 getu16a 1 sub { % () [] i
+ 8 mul 4 add 1 index exch 8 getinterval_from_stringarray % () [] ()
+ TTFDEBUG {
+ (cmap: platform ) print dup 0 getu16 =only
+ ( encoding ) print dup 2 getu16 = flush
+ } if
+ dup 0 getu16 3 eq { exch 3 -1 roll pop exit } if pop
+ } for
+ % Stack: subentry table
+ /cmapsub 2 index def % () []
+ exch 4 getu32 1 index string_array_size 1 index sub getinterval_from_stringarray
+ /cmaptab exch def
+} bind def
+
+% - .pickcmap_with_xlatmap -
+% Defines cmapsub, cmaptab
+/.pickcmap_with_xlatmap {
+ .xlatmap_dict /TrueType known not {
+ (Emulating a CID font with a True Type file, ) print
+ (the file gs/lib/xlatmap must contain /TrueType key.) =
+ /.pickcmap_with_xlatmap cvx /configurationerror signalerror
+ } if
+ false
+ .xlatmap_dict /TrueType get
+ dup length 2 sub 0 exch 2 exch { % bool [] i
+ 2 copy get % bool [] i ()
+ (.) search { % bool [] i post match pre
+ cvi exch pop exch cvi % bool [] i PlatID SpecID
+ } {
+ (gs/lib/xlatmap containg a record with an invalid (PlatformID.SpecificID)) =
+ /.pickcmap_with_xlatmap cvx /configurationerror signalerror
+ } ifelse
+ TTFDEBUG {
+ (Seeking a cmap for platform=) print 1 index =only ( encoding=) print dup =
+ } if
+ tabdict /cmap get % bool [] i PlatID SpecID (cmap)
+ dup /cmaptab exch def % temporary
+ 0 1 2 index 2 getu16a 1 sub { % bool [] i PlatID SpecID (cmap) j
+ 8 mul 4 add 1 index exch 8
+ getinterval_from_stringarray % bool [] i PlatID SpecID (cmap) (cmapsub)
+ TTFDEBUG {
+ (cmap: platform ) print dup 0 getu16 =only
+ ( encoding ) print dup 2 getu16 = flush
+ } if
+ dup 0 getu16 4 index eq {
+ dup 2 getu16 3 index eq { % bool [] i PlatID SpecID (cmap) (cmapsub)
+ TTFDEBUG {
+ (Choosen a cmap for platform=) print 3 index =only
+ ( encoding=) print 2 index =
+ } if
+ /cmapsub 1 index def
+ dup 4 getu32 % bool [] i PlatID SpecID (cmap) (cmapsub) p
+ cmaptab length 1 index sub % bool [] i PlatID SpecID (cmap) (cmapsub) p l
+ cmaptab 3 1 roll getinterval
+ /cmaptab exch def % bool [] i PlatID SpecID (cmap) (cmapsub)
+ 5 index 5 index 1 add get % bool [] i PlatID SpecID (cmap) (cmapsub) /Decoding
+ /Decoding exch def % bool [] i PlatID SpecID (cmap) (cmapsub)
+ 7 -1 roll pop true 7 1 roll % true [] i PlatID SpecID (cmap) (cmapsub)
+ } if
+ } if
+ pop % true [] i PlatID SpecID (cmap)
+ 5 index { exit } if
+ } for % bool [] i PlatID SpecID (cmap)
+ pop pop pop pop % bool []
+ 1 index { exit } if
+ } for % bool []
+ pop % bool
+ not {
+ QUIET not { (True Type font doesn't contain a charset listed in gs/lib/xlatmap.) = } if
+ /.pickcmap_with_xlatmap cvx /invalidfont signalerror
+ } if %
+} bind def
+
+% - .pickcmap -
+% Defines cmapsub, cmaptab
+/.pickcmap {
+ % Currently we use xlatmap only for emulation CIDFontType 2 with
+ % a disk True Type font files, and use load_stripped
+ % to check this regime. We would like to do so
+ % while emulating a Type 42, but first the old code
+ % about handling them to be changed
+ % with adding a handling of a Decoding.
+ % fixme : A correct way to fix this is to implenent
+ % the Type 42 emulation with gs_fntem.ps .
+ % Also note that PDF embedded fonts probably don't need a xlatmap -
+ % see PDF spec, "Encodings for True Type fonts".
+ load_stripped {
+ //.pickcmap_with_xlatmap exec
+ } {
+ //.pickcmap_with_no_xlatmap exec
+ } ifelse
+} bind def
+
+% <glyph> .nname <_name>
+/.nname {
+ =string cvs (_) exch concatstrings cvn
+} bind def
+
+% Provide alternative backward-compatible names for new TTF glyphs.
+% This list was extracted from Adobe's Glyph List 2.0 and consists of
+% glyph names that map to the same Unicode value.
+% See: http://partners.adobe.com/asn/developer/typeforum/unicodegn.html
+/postalias mark
+ /pi1 /pi /plusinus /plusminus
+ /Acyrillic /afii10017 /Becyrillic /afii10018
+ /Cdot /Cdotaccent /Checyrillic /afii10041
+ /Dcroat /Dslash /Decyrillic /afii10021
+ /Delta /increment /Djecyrillic /afii10051
+ /Dzecyrillic /afii10054 /Dzhecyrillic /afii10145
+ /Ecyrillic /afii10053 /Edot /Edotaccent
+ /Efcyrillic /afii10038 /Elcyrillic /afii10029
+ /Emcyrillic /afii10030 /Encyrillic /afii10031
+ /Ercyrillic /afii10034 /Ereversedcyrillic /afii10047
+ /Escyrillic /afii10035 /Euro /euro
+ /Fitacyrillic /afii10147 /Gcedilla /Gcommaaccent
+ /Gdot /Gdotaccent /Gecyrillic /afii10020
+ /Gheupturncyrillic /afii10050 /Gjecyrillic /afii10052
+ /H18533 /blackcircle /H18543 /blacksmallsquare
+ /H18551 /whitesmallsquare /H22073 /whitesquare
+ /Hardsigncyrillic /afii10044 /IAcyrillic /afii10049
+ /IUcyrillic /afii10048 /Icyrillic /afii10055
+ /Idot /Idotaccent /Iecyrillic /afii10022
+ /Iicyrillic /afii10026 /Iishortcyrillic /afii10027
+ /Iocyrillic /afii10023 /Izhitsacyrillic /afii10148
+ /Jecyrillic /afii10057 /Kacyrillic /afii10028
+ /Kcedilla /Kcommaaccent /Khacyrillic /afii10039
+ /Kjecyrillic /afii10061 /Lcedilla /Lcommaaccent
+ /Ldot /Ldotaccent /Ljecyrillic /afii10058
+ /Ncedilla /Ncommaaccent /Njecyrillic /afii10059
+ /Ocyrillic /afii10032 /Odblacute /Ohungarumlaut
+ /Ohm /Omega /Oslashacute /Ostrokeacute
+ /Pecyrillic /afii10033 /Rcedilla /Rcommaaccent
+ /Shacyrillic /afii10042 /Shchacyrillic /afii10043
+ /Softsigncyrillic /afii10046 /Tcedilla /Tcommaaccent
+ /Tecyrillic /afii10036 /Tsecyrillic /afii10040
+ /Tshecyrillic /afii10060 /Ucyrillic /afii10037
+ /Udblacute /Uhungarumlaut /Upsilon1 /Upsilonhooksymbol
+ /Ushortcyrillic /afii10062 /Vecyrillic /afii10019
+ /Yatcyrillic /afii10146 /Yericyrillic /afii10045
+ /Yicyrillic /afii10056 /Zdot /Zdotaccent
+ /Zecyrillic /afii10025 /Zhecyrillic /afii10024
+ /acutecmb /acutecomb /acyrillic /afii10065
+ /afii00208 /horizontalbar /afii08941 /lira
+ /afii10066 /becyrillic /afii10067 /vecyrillic
+ /afii10068 /gecyrillic /afii10069 /decyrillic
+ /afii10070 /iecyrillic /afii10071 /iocyrillic
+ /afii10072 /zhecyrillic /afii10073 /zecyrillic
+ /afii10074 /iicyrillic /afii10075 /iishortcyrillic
+ /afii10076 /kacyrillic /afii10077 /elcyrillic
+ /afii10078 /emcyrillic /afii10079 /encyrillic
+ /afii10080 /ocyrillic /afii10081 /pecyrillic
+ /afii10082 /ercyrillic /afii10083 /escyrillic
+ /afii10084 /tecyrillic /afii10085 /ucyrillic
+ /afii10086 /efcyrillic /afii10087 /khacyrillic
+ /afii10088 /tsecyrillic /afii10089 /checyrillic
+ /afii10090 /shacyrillic /afii10091 /shchacyrillic
+ /afii10092 /hardsigncyrillic /afii10093 /yericyrillic
+ /afii10094 /softsigncyrillic /afii10095 /ereversedcyrillic
+ /afii10096 /iucyrillic /afii10097 /iacyrillic
+ /afii10098 /gheupturncyrillic /afii10099 /djecyrillic
+ /afii10100 /gjecyrillic /afii10101 /ecyrillic
+ /afii10102 /dzecyrillic /afii10103 /icyrillic
+ /afii10104 /yicyrillic /afii10105 /jecyrillic
+ /afii10106 /ljecyrillic /afii10107 /njecyrillic
+ /afii10108 /tshecyrillic /afii10109 /kjecyrillic
+ /afii10110 /ushortcyrillic /afii10193 /dzhecyrillic
+ /afii10194 /yatcyrillic /afii10195 /fitacyrillic
+ /afii10196 /izhitsacyrillic /afii10846 /schwacyrillic
+ /afii57381 /percentarabic /afii57388 /commaarabic
+ /afii57392 /zeroarabic /afii57393 /onearabic
+ /afii57394 /twoarabic /afii57395 /threearabic
+ /afii57396 /fourarabic /afii57397 /fivearabic
+ /afii57398 /sixarabic /afii57399 /sevenarabic
+ /afii57400 /eightarabic /afii57401 /ninearabic
+ /afii57403 /semicolonarabic /afii57407 /questionarabic
+ /afii57409 /hamzaarabic /afii57410 /alefmaddaabovearabic
+ /afii57411 /alefhamzaabovearabic /afii57412 /wawhamzaabovearabic
+ /afii57413 /alefhamzabelowarabic /afii57414 /yehhamzaabovearabic
+ /afii57415 /alefarabic /afii57416 /beharabic
+ /afii57417 /tehmarbutaarabic /afii57418 /teharabic
+ /afii57419 /theharabic /afii57420 /jeemarabic
+ /afii57421 /haharabic /afii57422 /khaharabic
+ /afii57423 /dalarabic /afii57424 /thalarabic
+ /afii57425 /reharabic /afii57426 /zainarabic
+ /afii57427 /seenarabic /afii57428 /sheenarabic
+ /afii57429 /sadarabic /afii57430 /dadarabic
+ /afii57431 /taharabic /afii57432 /zaharabic
+ /afii57433 /ainarabic /afii57434 /ghainarabic
+ /afii57440 /tatweelarabic /afii57441 /feharabic
+ /afii57442 /qafarabic /afii57443 /kafarabic
+ /afii57444 /lamarabic /afii57445 /meemarabic
+ /afii57446 /noonarabic /afii57448 /wawarabic
+ /afii57449 /alefmaksuraarabic /afii57450 /yeharabic
+ /afii57451 /fathatanarabic /afii57452 /dammatanarabic
+ /afii57453 /kasratanarabic /afii57454 /fathaarabic
+ /afii57455 /dammaarabic /afii57456 /kasraarabic
+ /afii57457 /shaddaarabic /afii57458 /sukunarabic
+ /afii57470 /heharabic /afii57505 /veharabic
+ /afii57506 /peharabic /afii57507 /tcheharabic
+ /afii57508 /jeharabic /afii57509 /gafarabic
+ /afii57511 /tteharabic /afii57512 /ddalarabic
+ /afii57513 /rreharabic /afii57514 /noonghunnaarabic
+ /afii57519 /yehbarreearabic /afii57636 /newsheqelsign
+ /afii57645 /maqafhebrew /afii57658 /sofpasuqhebrew
+ /afii57664 /alef /afii57665 /bet
+ /afii57666 /gimel /afii57667 /dalet
+ /afii57668 /he /afii57669 /vav
+ /afii57670 /zayin /afii57671 /het
+ /afii57672 /tet /afii57673 /yod
+ /afii57674 /finalkaf /afii57675 /kaf
+ /afii57676 /lamed /afii57677 /finalmem
+ /afii57678 /mem /afii57679 /finalnun
+ /afii57680 /nun /afii57681 /samekh
+ /afii57682 /ayin /afii57683 /finalpe
+ /afii57684 /pe /afii57685 /finaltsadi
+ /afii57686 /tsadi /afii57687 /qof
+ /afii57688 /resh /afii57689 /shin
+ /afii57690 /tav /afii57694 /shinshindot
+ /afii57695 /shinsindot /afii57700 /vavholam
+ /afii57705 /doubleyodpatah /afii57716 /vavvavhebrew
+ /afii57717 /vavyodhebrew /afii57718 /yodyodhebrew
+ /afii57723 /vavdagesh /afii57793 /hiriq
+ /afii57794 /tsere /afii57795 /segol
+ /afii57796 /qubuts /afii57797 /qamats
+ /afii57798 /patah /afii57799 /sheva
+ /afii57800 /hatafpatah /afii57801 /hatafsegol
+ /afii57802 /hatafqamats /afii57803 /sindothebrew
+ /afii57804 /shindothebrew /afii57806 /holam
+ /afii57807 /dagesh /afii57839 /siluqhebrew
+ /afii57841 /rafe /afii57842 /paseqhebrew
+ /afii57929 /apostrophemod /afii61248 /careof
+ /afii61289 /lsquare /afii61352 /numero
+ /afii61664 /zerowidthnonjoiner /afii63167 /asteriskarabic
+ /afii64937 /commareversedmod /alefmaksurainitialarabic /yehinitialarabic
+ /alefmaksuramedialarabic /yehmedialarabic /approximatelyequal /congruent
+ /arrowdblboth /dblarrowleft /arrowdblleft /arrowleftdbl
+ /arrowdblright /dblarrowright /arrowupdnbse /arrowupdownbase
+ /bar /verticalbar /betdagesh /betdageshhebrew
+ /blackdownpointingtriangle /triagdn /blackleftpointingpointer /triaglf
+ /blackrectangle /filledrect /blackrightpointingpointer /triagrt
+ /blacksmilingface /invsmileface /blacksquare /filledbox
+ /blackuppointingtriangle /triagup /bulletinverse /invbullet
+ /cdot /cdotaccent /circle /whitecircle
+ /circlemultiply /timescircle /circleplus /pluscircle
+ /club /clubsuitblack /colonmonetary /colonsign
+ /compass /sun /daletdagesh /daletdageshhebrew
+ /dargahebrew /dargalefthebrew /dbllowline /underscoredbl
+ /dcroat /dmacron /decimalseparatorarabic /decimalseparatorpersian
+ /dialytikatonos /dieresistonos /dkshade /shadedark
+ /dotbelowcmb /dotbelowcomb /edot /edotaccent
+ /eighthnotebeamed /musicalnotedbl /etnahtafoukhhebrew /etnahtahebrew
+ /existential /thereexists /female /venus
+ /finalkafdagesh /finalkafdageshhebrew /forall /universal
+ /gcedilla /gcommaaccent /gdot /gdotaccent
+ /gimeldagesh /gimeldageshhebrew /gradient /nabla
+ /gravecmb /gravecomb /haaltonearabic /hehaltonearabic
+ /heart /heartsuitblack /hedagesh /hedageshhebrew
+ /hehfinalalttwoarabic /hehfinalarabic /hookabovecomb /hookcmb
+ /ilde /tilde /integralbottom /integralbt
+ /integraltop /integraltp /invcircle /whitecircleinverse
+ /kafdagesh /kafdageshhebrew /kcedilla /kcommaaccent
+ /lameddagesh /lameddageshhebrew /lcedilla /lcommaaccent
+ /ldot /ldotaccent /logicalnotreversed /revlogicalnot
+ /longs /slong /ltshade /shadelight
+ /macron /overscore /mahapakhhebrew /mahapakhlefthebrew
+ /male /mars /memdagesh /memdageshhebrew
+ /merkhahebrew /merkhalefthebrew /merkhakefulahebrew /merkhakefulalefthebrew
+ /middot /periodcentered /mu /mu1
+ /munahhebrew /munahlefthebrew /napostrophe /quoterightn
+ /nbspace /nonbreakingspace /ncedilla /ncommaaccent
+ /notelement /notelementof /nundagesh /nundageshhebrew
+ /odblacute /ohungarumlaut /omega1 /pisymbolgreek
+ /openbullet /whitebullet /orthogonal /rightangle
+ /oslashacute /ostrokeacute /pedagesh /pedageshhebrew
+ /phi1 /phisymbolgreek /propersubset /subset
+ /propersuperset /superset /qofdagesh /qofdageshhebrew
+ /quoteleftreversed /quotereversed /rcedilla /rcommaaccent
+ /reflexsubset /subsetorequal /reflexsuperset /supersetorequal
+ /reviahebrew /reviamugrashhebrew /samekhdagesh /samekhdageshhebrew
+ /sfthyphen /softhyphen /shade /shademedium
+ /sheqel /sheqelhebrew /shindagesh /shindageshhebrew
+ /shindageshshindot /shindageshshindothebrew /shindageshsindot /shindageshsindothebrew
+ /sigma1 /sigmafinal /similar /tildeoperator
+ /smileface /whitesmilingface /space /spacehackarabic
+ /spade /spadesuitblack /tavdages /tavdagesh
+ /tcedilla /tcommaaccent /tetdagesh /tetdageshhebrew
+ /tevirhebrew /tevirlefthebrew /theta1 /thetasymbolgreek
+ /thousandsseparatorarabic /thousandsseparatorpersian /tildecmb /tildecomb
+ /tipehahebrew /tipehalefthebrew /tsadidagesh /tsadidageshhebrew
+ /twodotenleader /twodotleader /udblacute /uhungarumlaut
+ /yerahbenyomohebrew /yerahbenyomolefthebrew /yoddagesh /yoddageshhebrew
+ /zayindagesh /zayindageshhebrew /zdot /zdotaccent
+.dicttomark readonly def
+
+% - .charkeys /CharStrings <charstrings> /Encoding <encoding>
+% Resets glyphencoding
+/.charkeys {
+ TTFDEBUG {
+ (glyphencoding: length=) print glyphencoding dup length = === flush
+ } if
+ % Hack: if there is no usable post table but the cmap uses
+ % the Microsoft Unicode encoding, use ISOLatin1Encoding.
+ % if 'post' presents, .charkeys computes (with dropping minor details) :
+ % CharStrings = glyphencoding^-1
+ % Encoding = cmap*glyphencoding
+ % because 'post' maps glyph indices to glyph names.
+ % Otherwise .charkeys must compute (with dropping same details) :
+ % CharStrings = glyphencoding^-1 * cmap
+ % Encoding = glyphencoding
+ % because glyphencoding is stubbed with an encoding,
+ % which maps char codes to glyph names.
+ glyphencoding length 0 eq {
+ /have_post false def
+ cmapsub 0 4 getinterval <00030001> eq {
+ PDFDEBUG { (No post but have cmap 3.1, so use ISOLatin1Encoding) = } if
+ /glyphencoding ISOLatin1Encoding dup length array copy def
+ } {
+ PDFDEBUG { (No encoding info, use .GS_extended_SymbolEncoding) = } if
+ /glyphencoding /.GS_extended_SymbolEncoding findencoding dup length array copy def
+ } ifelse
+ } {
+ /have_post true def
+ } ifelse
+ % If necessary, fabricate additional glyphencoding entries
+ % to cover all of loca
+ glyphencoding length numloca lt {
+ /glyphencoding numloca array
+ glyphencoding length dup 1 sub 0 1 3 2 roll {
+ dup glyphencoding exch get
+ 3 index 3 1 roll put
+ } for
+ % /glyphencoding <newarray> <glyphencoding length>
+ 1 numloca 1 sub {
+ 1 index exch dup .nname put
+ } for
+ def
+ } if
+ /cmapa cmaptab cmaparray def
+ % Some badly designed Chinese fonts have a post table
+ % in which all glyphs other than 0 are named .null.
+ % Use CharStrings to keep track of the reverse map from
+ % names to glyphs, and don't let any name be used for
+ % more than one glyph.
+ /CharStrings glyphencoding dup length 1 add dict % +1 for .notdef
+ 0 1 3 index length 1 sub {
+ % Stack: glyphencoding dict index
+ 2 index 1 index get
+ have_post not {
+ exch dup cmapa length lt {
+ cmapa exch get
+ } {
+ pop 0 % a stub for a while. Must skip the entry.
+ } ifelse
+ exch
+ } if
+ 2 index 1 index known
+ { dup /.notdef eq {
+ pop pop % discard duplicate .notdef glyphs
+ } {
+ % The same name maps to more than one glyph. Change the name.
+ pop dup .nname 3 index 2 index 2 index put
+ 2 index exch 3 -1 roll put
+ }
+ ifelse
+ } {
+ 2 index exch 3 -1 roll put % unique name
+ } ifelse
+ } for exch pop
+ % If there is no .notdef entry, map it to glyph 0.
+ dup /.notdef known not { dup /.notdef 0 put } if
+ TTFDEBUG {
+ (CharStrings:)= dup { exch =string cvs print ( ) print == } forall
+ } if
+ //postalias {
+ % process pairs of names. If both names are known, do nothing. Otherwise
+ % make the name that is not defined an alias for the one that does exist.
+ % Stack: CharStrings(dict) /name1 /name2
+ 2 index 2 index known 3 index 2 index known 1 index xor not {
+ pop pop pop % both names known or neither known
+ } {
+ % Stack: CharStrings(dict) /name1 /name2 name1_known(bool)
+ { exch } if % /name1 known -- we need it on top
+ % Stack: CharStrings(dict) /alias_name /known_name
+ TTFDEBUG { (setting alias: ) print 1 index ==only ( to be the same as glyph: ) print dup == } if
+ 2 index exch get 2 index 3 1 roll put
+ } ifelse
+ } forall
+ readonly
+ /Encoding [
+ have_post {
+ cmapa dup length 256 gt { 0 256 getinterval } if
+ { glyphencoding exch get } forall
+ } {
+ glyphencoding dup length 256 gt { 0 256 getinterval } if
+ aload pop
+ } ifelse
+ counttomark 256 exch sub { /.notdef } repeat
+ ]
+ TTFDEBUG { (Encoding: ) print dup === flush } if
+} bind def
+
+currentdict /postalias undef
+
+% -mark- <key> <value> ... .definettfont <font>
+/.definettfont {
+ /FontType 42
+ /PaintType 0
+ TTFDEBUG {
+ (numloca=) print numloca =
+ } if
+ .dicttomark
+ end end dup /FontName get exch definefont
+} bind def
+
+% <file> .loadttfont <type42font>
+/.loadttfont {
+ TTFDEBUG { (.loadttfont) = } if
+ //false 0 .loadttfonttables
+ .makesfnts
+ .getpost
+ .pickcmap
+ mark
+ .charkeys
+ .ttkeys
+ .definettfont
+} bind def
+
+% ---------------- CIDFontType 2 font loading ---------------- %
+
+% Fill a string with sequential CIDs starting from the initial value.
+% <string> <value> .fill_identity_cmap <string>
+/.fill_identity_cmap { % () v
+ 1 index length 2 sub % () v n-2
+ 0 2 3 2 roll { % () v 0 2 n-1
+ 3 copy exch % () v i () i v
+ -8 bitshift % () v i () i v>>8
+ put % () v i
+ 3 copy 1 add % () v i () v i+1
+ exch 255 and % () v i () i+1 v&255
+ put % () v i
+ pop 1 add % () v+1
+ } for
+ pop
+} bind def
+
+% -mark- <key> <value> ... .definettcidfont <font>
+/.definettcidfont {
+ /CIDFontName fontname
+ /CIDFontType 2
+ /CIDSystemInfo mark
+ /Registry (Adobe)
+ /Ordering (Japan1) % adhoc
+ /Supplement 0
+ .dicttomark
+ /CharStrings mark /.notdef 0 .dicttomark
+ % The cmap isn't of any use even if it is present.
+ % Just construct an identity CIDMap covering all the glyphs.
+
+ /CIDCount numloca % Wrong if a CIDFontType2 embedded into PDF with a non-Identity CIDToGIDMap.
+ % processCIDToGIDMap may replace.
+ /CIDMap numloca maxstring le {
+ % Use a single string.
+ numloca 2 mul string 0 .fill_identity_cmap
+ } {
+ % We must use 2 strings.
+ maxstring 2 mul string 0 .fill_identity_cmap
+ numloca maxstring sub 2 mul string maxstring .fill_identity_cmap
+ 2 array astore
+ } ifelse
+
+ /GDBytes 2
+ .dicttomark
+ end end dup /CIDFontName get exch /CIDFont defineresource
+} bind def
+
+% <file> .loadttcidfont <cidtype2font>
+/.loadttcidfont {
+ //false 0 .loadttfonttables
+ .makesfnts
+ % CIDFontType2 fonts don't have a cmap: they are indexed by CID.
+ mark
+ .ttkeys
+ .definettcidfont
+} bind def
+
+% <file> <SubfontID> .load_tt_font_stripped <font_data>
+% The font_data includes sfnts, NumGlyphs, TT_cmap, file_table_pos, Decoding.
+% CIDMap to be created later from TT_cmap.
+/.load_tt_font_stripped {
+ //true exch .loadttfonttables
+ .makesfnts
+ .pickcmap
+ mark
+ .ttkeys
+ /NumGlyphs numloca
+ /TT_cmap cmaptab cmaparray
+ /file_table_pos file_table_pos
+ /Decoding Decoding
+ .dicttomark
+ end end
+} bind def
+
+% ---------------- PDF TrueType font loading ---------------- %
+
+% Strictly speaking, this code should be loaded only if we have a PDF
+% interpreter, but it's so closely tied to the rest of the code in this
+% file that we always include it.
+
+% <plat+enc> .findcmap <subtable> true
+% <plat+enc> .findcmap false
+/.findcmap {
+ false exch tabdict /cmap get
+ % Some fonts have multiple cmaps with the same platform and
+ % encoding. Use the first one we find.
+ 0 1 2 index 2 getu16a 1 sub {
+ % Stack: false plat+enc cmap index
+ 8 mul 4 add 1 index exch 8 getinterval_from_stringarray
+ dup 0 4 getinterval 3 index eq {
+ 4 getu32 1 index exch 1 index string_array_size 1 index sub getinterval_from_stringarray
+ 4 -1 roll not 4 2 roll exit
+ } if pop
+ } for
+ % Stack: false plat+enc cmap || subtable true plat+enc cmap
+ pop pop
+} bind def
+
+% Build .symbol_list for .pdfcharkeys .
+% It is a dictionary containing all SymbolEncoding glyph names
+% and random names for filling gaps in the character code range.
+/.symbol_list 256 dict def
+{
+ =string 0 (x) 0 get put
+ /SymbolEncoding .findencoding
+ 0 1 255 {
+ dup 2 index exch get
+ dup /.notdef eq {
+ pop dup
+ =string 1 3 getinterval cvs length 1 add
+ =string exch 0 exch getinterval cvn
+ } if
+ exch //.symbol_list 3 1 roll put
+ } for
+ pop
+} bind exec
+
+% Create .GS_extended_SymbolEncoding as inverse of .symbol_list .
+{
+ /.GS_extended_SymbolEncoding 256 array
+ //.symbol_list {
+ exch 2 index 3 1 roll put
+ } forall
+ .defineencoding
+} bind exec
+
+/.hexdigits (0123456789ABCDEF) def
+
+/.is_hex_digit { % <int> .is_hex_digit <bool>
+ dup 48 ge exch
+ dup 57 le exch
+ dup 65 ge exch
+ 70 le and
+ 3 1 roll
+ and or
+} bind def
+
+/.popfex { pop //false exit } bind def
+/.pop3ex { pop pop pop exit } bind def
+
+/.addglyph { % <dict> <name> <glyph#> .addglyph -
+ 1 index .namestring % d n g s
+ dup length 7 eq {
+ % Bug688467.ps doesn't work if the uniXXXX mapping is allowed with any cmap.
+ % Allow it with cmap 3.1 only.
+ currentdict /.allow_uniXXXX_glyph_names .knownget not { //false } if
+ } { //false
+ } ifelse % d n g s b
+ {
+ % An undocumented Adobe feature (not sure) :
+ % if the name is uniXXXX, obtain Unicode code from it.
+ % See bug 688946.
+ TTFDEBUG { (Try uniXXXX:) print dup print } if
+ { dup 0 get 117 ne //.popfex if % u
+ dup 1 get 110 ne //.popfex if % n
+ dup 2 get 105 ne //.popfex if % i
+ dup 3 get //.is_hex_digit exec not //.popfex if
+ dup 4 get //.is_hex_digit exec not //.popfex if
+ dup 5 get //.is_hex_digit exec not //.popfex if
+ dup 6 get //.is_hex_digit exec not //.popfex if
+ dup 3 1 getinterval .hexdigits exch search pop length exch pop exch pop 12 bitshift exch
+ dup 4 1 getinterval .hexdigits exch search pop length exch pop exch pop 8 bitshift exch
+ dup 5 1 getinterval .hexdigits exch search pop length exch pop exch pop 4 bitshift exch
+ dup 6 1 getinterval .hexdigits exch search pop length exch pop exch pop exch pop
+ add add add
+ dup cmapencoding length ge //.popfex if
+ cmapencoding exch get
+ dup 0 eq //.popfex if
+ TTFDEBUG { ( index=) print dup =string cvs print } if
+ exch pop
+ put //true exit
+ } loop
+ TTFDEBUG { ()= } if
+ } {
+ pop //false
+ } ifelse
+ not { % d n g
+ { dup cmapencoding length ge //.pop3ex if
+ cmapencoding exch get dup 0 eq //.pop3ex if
+ 3 copy pop known //.pop3ex if
+ put exit
+ } loop
+ } if
+} bind def
+
+% <subcmap> <chartoglyphmap> .pdfmapchars /CharStrings <charstrings>
+/.pdfmapchars {
+ exch cmaparray /cmapencoding exch def % c2g
+ /CharStrings 0 dict % c2g /CS <<>>
+
+ % Add glyphs of <chartoglyphmap>*<subcmap> :
+ 3 2 roll { % /CS <<>> v
+ dup type /arraytype eq { % /CS <<>> /name []
+ { 3 copy //.addglyph exec
+ pop
+ } forall
+ } {
+ 3 copy //.addglyph exec pop
+ } ifelse
+ pop
+ } forall
+
+ % Add glyphs of 'post' with lower priority :
+ 0 1 glyphencoding length 1 sub {
+ dup glyphencoding exch get exch
+ dup 0 ne {
+ 3 copy pop known not {
+ 3 copy put
+ } if
+ } if
+ pop pop
+ } for
+
+ dup /.notdef 0 put
+
+} bind def
+
+% - .pdfcharkeys /CharStrings <charstrings> /Encoding <encoding>
+/.pdfcharkeys {
+ % The following algorithms are per the PDF Reference, Second Edition
+ % (PDF 1.3 reference manual).
+ TTFDEBUG { (.pdfcharkeys beg) = } if
+ is_symbolic {
+ <00030001> .findcmap {
+ %
+ % Adobe PDF spec says that symbolic fonts should contain exactly one
+ % cmap subtable for Platform=1, Encoding=0.
+ % Perhaps "Adobe Acrobat PDFWriter 4.0 for Windows" sometimes embeds
+ % fonts with both subtables 3.1 and 1.0 (see comparefiles/159.pdf,
+ % the font "Arial,Bold" with the character "registered"),
+ % and both Acrobat Reader 4.0 and 5.0 choose 3.1.
+ % Therefore we try 3.1 first.
+ %
+ ( **** Warning: Embedded symbolic TT fonts should not contain a cmap for Platform=3 Encoding=1.\n)
+ pdfformaterror
+ prebuilt_encoding null ne {
+ % Bug 689083.
+ TTFDEBUG { (Using cmap 3.0 with prebuilt_encoding.) = } if
+ prebuilt_encoding .invert_encoding .pdfmapchars
+ /Encoding prebuilt_encoding
+ } {
+ TTFDEBUG { (Using cmap 3.1 with WinAnsiEncoding) = } if
+ AdobeGlyphList .pdfmapchars
+ /Encoding /WinAnsiEncoding .findencoding
+ } ifelse
+ } {
+ %
+ % Adobe PDF spec says that in this case PDF interpreter should
+ % map character codes directly to glyphs using
+ % the cmap <00010000>. But we use PS interpreter to emulate
+ % a PDF interpreter. Therefore we need to construct
+ % a type 42 font, which requires an Encoding and a Charstrings.
+ % We construct them with symbol_list, which
+ % includes all glyphs from SymbolEncoding and additional
+ % random names for 1-to-1 mapping.
+ %
+ % A real TT font may use a different characters than
+ % the Symbol charaster set. Perhaps our code
+ % will give a correct printing, because glyph names are not
+ % important for symbolic fonts in PDF.
+ %
+ <00010000> .findcmap {
+ prebuilt_encoding null ne {
+ TTFDEBUG { (Using cmap 1.0 with prebuilt_encoding.) = } if
+ prebuilt_encoding .invert_encoding .pdfmapchars
+ /Encoding prebuilt_encoding
+ } {
+ % This is a case, in which an obsolete software could stupidly specify Macintosh Roman
+ % for a random encoding. Particulatrly GPL Ghostscript 7.06 does so.
+ % Trying to recover with 'post'.
+ pop % The table itself doesn't contain useful data.
+ TTFDEBUG { (Using cmap 1.0 with post or .GS_extended_SymbolEncoding) = } if
+ .charkeys
+ } ifelse
+ } {
+ % This is illegal with PDF spec.
+ ( **** Warning: Embedded symbolic TT fonts must contain a cmap for Platform=1 Encoding=0.\n)
+ pdfformaterror
+ % Apply the default algorithm. Hopely it has 'post'.
+ .charkeys
+ % check if the CharStrings dict contains glyphs needed by the
+ % prebuilt_encoding otherwise try the 3,0 cmap.
+ prebuilt_encoding null ne {
+ false prebuilt_encoding { % false means no missing glyphs
+ 4 index exch known not { pop true exit } if
+ } forall
+ {
+ ( **** Warning: Encoding derived from 'post' is incomplete.\n)
+ pdfformaterror
+ % Try another cmap format 3,0 -- Adobe doesn't mention it, but does
+ % use it apparently (empirically determined).
+ <00030000> .findcmap {
+ TTFDEBUG { (Adding cmap 3.0) = } if
+ 5 1 roll pop pop pop pop
+ prebuilt_encoding null ne {
+ prebuilt_encoding .invert_encoding .pdfmapchars
+ /Encoding prebuilt_encoding
+ } {
+ AdobeGlyphList .pdfmapchars
+ /Encoding /SymbolEncoding .findencoding
+ } ifelse
+ } if
+ } if
+ } if
+ } ifelse
+ } ifelse
+ } {
+ <00030001> .findcmap {
+ prebuilt_encoding null ne {
+ TTFDEBUG { (Using cmap 3.1 with prebuilt_encoding for non-symbolic.) = } if
+ /.allow_uniXXXX_glyph_names //true def
+ prebuilt_encoding .invert_encoding .pdfmapchars
+ /Encoding prebuilt_encoding
+ } {
+ % Likely this branch is now obsolete.
+ TTFDEBUG { (Using cmap 3.1 for non-symbolic.) = } if
+ AdobeGlyphList .pdfmapchars
+ /Encoding /WinAnsiEncoding .findencoding
+ % WinAnsiEncoding is just a stub here.
+ % It will be replaced with one from font resource,
+ % because PDF spec requires it.
+ } ifelse
+ } {
+ <00010000> .findcmap {
+ TTFDEBUG { (Using cmap 1.0 for non-symbolic.) = } if
+ .romanmacdict .pdfmapchars
+ /Encoding /MacRomanEncoding .findencoding
+ } {
+ % Apply the default algorithm for using the 'post'.
+ .charkeys
+ } ifelse
+ } ifelse
+ } ifelse
+ TTFDEBUG { (.pdfcharkeys end) = } if
+} bind def
+
+% <file> <is_symbolic> <Encoding|null> .loadpdfttfont <type42font>
+/.loadpdfttfont {
+ TTFDEBUG { (.loadpdfttfont Encoding=) print dup == } if
+ /prebuilt_encoding gput % for .pdfcharkeys
+ /is_symbolic gput
+ //false 0 .loadttfonttables
+ .makesfnts
+ .getpost
+ .pickcmap
+ mark
+ .pdfcharkeys
+ .ttkeys
+ .definettfont
+} bind def
diff --git a/Master/tlpkg/tlgs/lib/gs_typ32.ps b/Master/tlpkg/tlgs/lib/gs_typ32.ps
new file mode 100644
index 00000000000..a4e83be5343
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_typ32.ps
@@ -0,0 +1,133 @@
+% Copyright (C) 1997 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_typ32.ps 7710 2007-02-17 14:14:09Z alexcher $
+% Initialization file for Type 32 fonts.
+
+% ------ Type 32 fonts ------ %
+
+% We need LanguageLevel 2 or higher in order to have defineresource.
+languagelevel dup 2 .max .setlanguagelevel
+
+/BitmapFontInit mark
+
+/.makeglyph32 systemdict /.makeglyph32 get
+systemdict /.makeglyph32 .undef
+
+/addglyph { % ([wx wy llx lly urx ury] |
+ % [w0x w0y llx lly urx ury w1x w1y vx vy])
+ % <bitmap> <cid> <type32font> addglyph -
+ 1 index dup 2 index .removeglyphs
+ 22 string .makeglyph32
+ % Stack: metrics bitmap cid font metstr
+ 3 index () ne {
+ % Use G4 encoding to compress the bitmap.
+ % Define a string large enough to hold the metrics,
+ % an uncompressed bitmap (worst case = 5x expansion),
+ % and the 2 RTC codes (3 bytes).
+ dup length 4 index length 5 mul add 10 add string
+ % Stack: metrics bitmap cid font metstr buffer
+ dup 0 3 index putinterval
+ dup 2 index length 1 index length 1 index sub getinterval
+ % Stack: metrics bitmap cid font metstr buffer bitbuf
+ mark /Columns 8 index dup 4 get exch 2 get sub
+ /Rows 10 index dup 5 get exch 3 get sub
+ /K -1 /EndOfBlock true /BlackIs1 true
+ .dicttomark /CCITTFaxEncode filter
+ % Stack: metrics bitmap cid font metstr buffer filter
+ dup 6 index writestring closefile
+ % Find the end of the data by scanning backwards for the RTC.
+ % There are 2 RTCs x 12 bits = 3 bytes to remove.
+ {
+ dup dup length 1 sub get 0 ne { exit } if
+ 0 1 index length 1 sub getinterval
+ } loop
+ 0 1 index length 3 sub getinterval
+ exch pop % metstr
+ } if
+ 1 index /CharStrings get 3 index 3 -1 roll put
+ pop pop pop pop
+} obind
+
+/removeall { % <type32font> removeall -
+ 0 65535 2 index removeglyphs pop
+} obind
+
+/.removeglyphs systemdict /.removeglyphs get
+systemdict /.removeglyphs .undef
+
+/removeglyphs { % <cid_min> <cid_max> <type32font> .removeglyphs -
+ 3 copy .removeglyphs
+ dup /CharStrings get dup {
+ % Stack: cidmin cidmax font CharStrings cid bitmap
+ pop dup 5 index ge { dup 4 index le { 2 copy undef } if } if pop
+ } forall pop pop pop pop
+} obind
+
+.dicttomark /ProcSet defineresource pop
+
+/.cidfonttypes where { pop } { /.cidfonttypes 6 dict def } ifelse
+.cidfonttypes begin
+
+4 % CIDFontType 4 = FontType 32
+{ dup /FontType 32 .forceput
+ dup /CharStrings 20 dict .forceput
+ 1 index exch .buildfont32 exch pop
+} bind def
+
+end % .cidfonttypes
+
+% Define the BuildGlyph procedure.
+% Since Type 32 fonts are indexed by CID, there is no BuildChar procedure.
+% The name %Type32BuildGlyph is known to the interpreter.
+(%Type32BuildGlyph) cvn { % <font> <cid> %Type32BuildGlyph -
+ 1 index /CharStrings get
+ % Stack: font cid CharStrings
+ dup 2 index .knownget {
+ exch pop
+ } {
+ 0 .knownget not {
+ exch pop % Stack: cid
+ .getshowoperator /invalidfont signalerror
+ } if
+ } ifelse
+ % Stack: font cid cstr
+ dup //.getmetrics32 % use // because of .undef below
+ dup 14 gt {
+ 8 index 8 index 13 3 roll setcachedevice2
+ } {
+ 4 index 4 index 9 3 roll setcachedevice
+ } ifelse
+ % Stack: font cid cstr w h nmetrics llx lly
+ 6 -1 roll 4 -1 roll 1 index length 1 index sub getinterval
+ % Stack: font cid w h llx lly bitstr
+ dup () eq {
+ pop pop pop
+ } {
+ mark /Columns 6 index /Rows 7 index /K -1 /EndOfBlock false /BlackIs1 true
+ .dicttomark /CCITTFaxDecode filter 4 index 4 index true
+ % Stack: font cid w h llx lly filter w h true
+ [ 1 0 0 1 11 -2 roll exch neg exch neg ] 5 -1 roll imagemask
+ } ifelse
+ pop pop pop pop
+} .bind def
+
+systemdict /.getmetrics32 .undef
+
+buildfontdict 32 /.buildfont32 cvx put
+
+32 dup /FontType defineresource pop
+
+.setlanguagelevel
diff --git a/Master/tlpkg/tlgs/lib/gs_typ42.ps b/Master/tlpkg/tlgs/lib/gs_typ42.ps
new file mode 100644
index 00000000000..9c8585f39b2
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_typ42.ps
@@ -0,0 +1,62 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_typ42.ps 7107 2006-10-15 17:19:45Z ray $
+% Type 42 font support code.
+
+% Here are the BuildChar and BuildGlyph implementation for Type 42 fonts.
+% The names %Type42BuildChar and %Type42BuildGlyph are known to the
+% interpreter. The real work is done in an operator:
+% <font> <code|name> <name> <glyphindex> .type42execchar -
+
+(%Type42BuildChar) cvn % <font> <code> %Type42BuildChar -
+ { 1 index /Encoding get 1 index get .type42build
+ } bind def
+(%Type42BuildGlyph) cvn % <font> <name> %Type42BuildGlyph -
+ { dup .type42build
+ } bind def
+/.type42build % <font> <code|name> <name> .type42build -
+ { 2 index begin
+ dup CharStrings exch .knownget not
+ { 2 copy eq { exch pop /.notdef exch } if
+ QUIET not
+ { (Substituting .notdef for ) print
+ =string cvs print ( in the font ) print
+ 1 index /FontName get = flush
+ }
+ { pop }
+ ifelse
+ /.notdef CharStrings /.notdef get
+ } if
+ end .type42execchar
+ } bind def
+
+% Register the font type for definefont.
+buildfontdict 42
+ { % check for bogus sfnts -- this happens in Genoa FTS 421-01.ps
+ dup /sfnts get 0 get length 14 lt { % smallest valid sfnts is 14 bytes
+ % HACK: Add a BuildGlyph and make this a Type 3 font instead
+ dup /FontType 3 put
+ dup /BuildGlyph {
+ 1 index /CharStrings get exch 2 copy known not { pop /.notdef } if get exec
+ } bind put
+ //.buildfont3 exec
+ } {
+ //.buildfont42 exec
+ } ifelse
+ } bind
+put
+
+
diff --git a/Master/tlpkg/tlgs/lib/gs_type1.ps b/Master/tlpkg/tlgs/lib/gs_type1.ps
new file mode 100644
index 00000000000..825819ceada
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_type1.ps
@@ -0,0 +1,209 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_type1.ps 8092 2007-06-30 12:25:22Z alexcher $
+% Type 1 font support code.
+
+% The standard representation for PostScript compatible fonts is described
+% in the book "Adobe Type 1 Font Format", published by Adobe Systems Inc.
+
+% Define an augmented version of .buildfont1 that inserts UnderlinePosition
+% and UnderlineThickness entries in FontInfo if they aren't there already,
+% and FontBBox isn't degenerate.
+% (This works around the incorrect assumption, made by many word processors,
+% that these entries are present in the built-in fonts.)
+/.buildfont1
+ {
+ .currentglobal 3 1 roll
+ dup .gcheck .setglobal
+ dup .fontbbox {
+ pop pop pop pop
+ dup /FontInfo known not
+ { .growfontdict dup /FontInfo 2 dict put }
+ if
+ dup dup /FontInfo get dup dup
+ /UnderlinePosition known exch /UnderlineThickness known and
+ { pop pop % entries already present
+ }
+ { dup length 2 add dict .copydict
+ dup /UnderlinePosition known not
+ { dup /UnderlinePosition 3 index /FontBBox get
+ 1 get 2 div put % 1/2 the font descent
+ }
+ if
+ dup /UnderlineThickness known not
+ { dup /UnderlineThickness 3 index /FontBBox get
+ dup 3 get exch 1 get sub 20 div put % 1/20 the font height
+ }
+ if
+ 1 index /FontInfo get wcheck not { readonly } if
+ /FontInfo exch put
+ }
+ ifelse
+ } if
+ //.buildfont1
+ 3 2 roll .setglobal
+ } bind def
+% If the diskfont feature isn't included, define a dummy .loadfontdict.
+/.loadfontdict where
+ { pop }
+ { /.loadfontdict 0 dict readonly def }
+ifelse
+/.loadfontfile % <file> .loadfontfile -
+ { mark exch
+ DISKFONTS { .loadfontdict begin } if
+ % In order to load fonts reliably, we should push systemdict
+ % here. However, Ed Taft says that Adobe implementations
+ % push userdict and nothing else!
+ % We really would just like systemdict on the stack,
+ % but fonts produced by Fontographer require a writable dictionary.
+ % However, we can't use any of the other well-known dictionaries
+ % (such as userdict), since the whole point of pushing systemdict
+ % is to make sure that nothing important has been redefined.
+ /userdict .systemvar begin
+ % We can't just use `run', because we want to check for .PFB files.
+ currentpacking
+ { //false setpacking .loadfont1 //true setpacking }
+ { .loadfont1 }
+ ifelse end
+ { stop } if
+ DISKFONTS { end } if
+ cleartomark
+ } bind def
+ % container for CloseSource flag (default //true to prevent buildup of file handles)
+ /closesourcedict mark
+ /CloseSource //true
+ .dicttomark readonly def
+/.loadfont1 { % <file> .loadfont1 <errorflag>
+ { % We would like to use `false /PFBDecode filter',
+ % but this occasionally produces a whitespace character as
+ % the first of an eexec section, so we can't do it.
+ % Also, since the real input file never reaches EOF if we are using
+ % a PFBDecode filter (the filter stops just after reading the last
+ % character), we must explicitly close the real file in this case.
+ % Since the file might leave garbage on the operand stack,
+ % we have to create a procedure to close the file reliably.
+ dup read not { -1 } if
+ 2 copy unread 16#80 eq {
+ dup //closesourcedict //true /PFBDecode filter cvx
+ exch .currentresourcefile eq {
+ dup /.execasresource .systemvar
+ } {
+ {exec}
+ } ifelse
+ 2 index cvlit
+ /closefile .systemvar 3 .execn
+ } {
+ cvx exec
+ } ifelse
+ } stopped
+} bind def
+% undefine a dict that is only used internally, and is immediately bound
+currentdict /closesourcedict .undef
+
+% Here are the BuildChar and BuildGlyph implementation for Type 1 fonts.
+% The names %Type1BuildChar and %Type1BuildGlyph are known to the interpreter.
+% The real work is done in an operator:
+% <font> <code|name> <name> <charstring> .type1execchar -
+
+(%Type1BuildChar) cvn { % <font> <code> %Type1BuildChar -
+ 1 index /Encoding get 1 index get .type1build .type1execchar
+} bind def
+(%Type1BuildGlyph) cvn { % <font> <name> %Type1BuildGlyph -
+ dup .type1build .type1execchar
+} bind def
+% Note: this procedure is used for both Type 1 and Type 2 fonts.
+/.type1build { % <font> <code|name> <name> .type1build
+ % <font> <code|name> <name> <charstring>
+ 2 index begin
+ dup CharStrings exch .knownget not {
+ 2 copy eq { exch pop /.notdef exch } if
+ QUIET not
+ { (Substituting .notdef for ) print
+ =string cvs print ( in the font ) print
+ 1 index /FontName get = flush
+ }
+ { pop }
+ ifelse
+ /.notdef CharStrings /.notdef get
+ } if
+ end
+} bind def
+
+1183615869 internaldict begin
+% CCRun is an undocumented procedure provided for Type 4 and Type 0 fonts.
+% Apparently there are two different argument lists for CCRun.
+% Handling the one with the extra Private dictionary requires fabricating
+% a Type 1 font on the fly, since we aren't currently prepared to parse the
+% dictionary any other way.
+/CCRun { % <font> <code|name> <charstring> CCRun -
+ % <font> <code|name> <charstring> <Private> CCRun -
+ dup type /dicttype eq {
+ dup 4 index /Private .knownget { ne } { pop //true } ifelse {
+ % The Private dictionary was supplied, and is different
+ % from the Private dictionary of the font. Fabricate a
+ % Type 1 font with this Private dictionary. Most of the
+ % font entries are arbitrary or not needed.
+ .currentglobal //false .setglobal 10 dict exch .setglobal begin
+ /Private exch def
+ /FontType 1 def
+ /FontMatrix 3 index /FontMatrix get def
+ /Encoding 3 index /Encoding .knownget not { StandardEncoding } if def
+ /FontBBox 3 index /FontBBox .knownget not { {0 0 0 0} } if def
+ /PaintType 0 def
+ /CharStrings 1 dict dup /.notdef () put def
+ 3 -1 roll pop () currentdict end .buildfont1 exch pop 3 1 roll
+ } {
+ pop
+ } ifelse
+ } if
+ 1 index dup type /integertype eq {
+ 3 index /Encoding get exch get
+ } if exch .type1execchar
+} bind def
+
+% setweightvector is an undocumented procedure that force writes
+% weight vector to the font. Do extra checks for safety.
+/setweightvector { % <font> <vector> setweightvector -
+ dup type dup /arraytype ne exch /packedarraytype ne and
+ 2 index type /dicttype ne or {
+ /setweightvector cvx /typecheck signalerror
+ } if
+ 1 index /FontType known not {
+ /setweightvector cvx /invalidfont signalerror
+ } if
+ dup gcheck 2 index gcheck not and {
+ /setweightvector cvx /invalidaccess signalerror
+ } if
+ 2 copy /WeightVector exch .forceput
+ .setweightvector
+} .bind executeonly def
+end
+
+% Register the font types for definefont.
+buildfontdict 1 /.buildfont1 cvx put
+buildfontdict 4 /.buildfont4 cvx put
+
+% Add Type 2 support if applicable.
+/.buildfont2 where not { (%END2) .skipeof } if
+pop
+(%Type2BuildChar) cvn { % <font> <code> %Type2BuildChar -
+ 1 index /Encoding get 1 index get .type1build .type2execchar
+} bind def
+(%Type2BuildGlyph) cvn { % <font> <name> %Type2BuildGlyph -
+ dup .type1build .type2execchar
+} bind def
+buildfontdict 2 /.buildfont2 cvx put
+%END2
diff --git a/Master/tlpkg/tlgs/lib/gs_wan_e.ps b/Master/tlpkg/tlgs/lib/gs_wan_e.ps
new file mode 100644
index 00000000000..181029c87fd
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_wan_e.ps
@@ -0,0 +1,46 @@
+% Copyright (C) 1994, 1996, 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_wan_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the WinAnsi encoding vector.
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/WinAnsiEncoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /bullet
+% \20x
+ % NOTE: /Euro, /Zcaron, and /zcaron are new for PDF 1.3.
+ % We may have to take them out for backward compatibility.
+ /Euro /bullet /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /bullet /Zcaron /bullet
+ /bullet /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /bullet /zcaron /Ydieresis
+ISOLatin1Encoding 160 96 getinterval aload pop
+256 packedarray
+4 1 index .registerencoding
+.defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_wl1_e.ps b/Master/tlpkg/tlgs/lib/gs_wl1_e.ps
new file mode 100644
index 00000000000..88d83604620
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_wl1_e.ps
@@ -0,0 +1,66 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_wl1_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Windows 3.1 Latin 1 encoding vector (H-P Symbol set 19U).
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/Win31Latin1Encoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /graybox
+% \20x
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+ /.notdef /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+ /.notdef /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /softhyphen /registered /overscore
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% \30x
+ /Agrave /Aacute /Acircumflex /Atilde
+ /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+ /Eth /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Yacute /Thorn /germandbls
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+ /eth /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /yacute /thorn /ydieresis
+256 packedarray .defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_wl2_e.ps b/Master/tlpkg/tlgs/lib/gs_wl2_e.ps
new file mode 100644
index 00000000000..a0e8477dd41
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_wl2_e.ps
@@ -0,0 +1,66 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_wl2_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Windows 3.1 Latin 2 encoding vector (H-P Symbol set 9E).
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/Win32Latin2Encoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /graybox
+% \20x
+ /.notdef /.notdef /quotesinglbase /.notdef
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /.notdef /perthousand /Scaron /guilsinglleft
+ /Sacute /Tcaron /Zcaron /Zacute
+ /.notdef /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /.notdef /trademark /scaron /guilsinglright
+ /sacute /tcaron /zcaron /zacute
+ /.notdef /caron /breve /Lslash
+ /currency /Aogonek /brokenbar /section
+ /dieresis /copyright /Scedilla /guillemotleft
+ /logicalnot /softhyphen /registered /Zdotaccent
+ /degree /plusminus /ogonek /lslash
+ /acute /mu /paragraph /periodcentered
+ /cedilla /aogonek /scedilla /guillemotright
+ /Lcaron /hungarumlaut /lcaron /zdotaccent
+% \30x
+ /Racute /Aacute /Acircumflex /Abreve
+ /Adieresis /Lacute /Cacute /Ccedilla
+ /Ccaron /Eacute /Eogonek /Edieresis
+ /Ecaron /Iacute /Icircumflex /Dcaron
+ /Dcroat /Nacute /Ncaron /Oacute
+ /Ocircumflex /Ohungarumlaut /Odieresis /multiply
+ /Rcaron /Uring /Uacute /Uhungarumlaut
+ /Udieresis /Yacute /Tcommaaccent /germandbls
+ /racute /aacute /acircumflex /abreve
+ /adieresis /lacute /cacute /ccedilla
+ /ccaron /eacute /eogonek /edieresis
+ /ecaron /iacute /icircumflex /dcaron
+ /dcroat /nacute /ncaron /oacute
+ /ocircumflex /ohungarumlaut /odieresis /divide
+ /rcaron /uring /uacute /uhungarumlaut
+ /udieresis /yacute /tcommaaccent /dotaccent
+256 packedarray .defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gs_wl5_e.ps b/Master/tlpkg/tlgs/lib/gs_wl5_e.ps
new file mode 100644
index 00000000000..07c4249488e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gs_wl5_e.ps
@@ -0,0 +1,66 @@
+% Copyright (C) 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gs_wl5_e.ps 6300 2005-12-28 19:56:24Z giles $
+% Define the Windows 3.1 Latin 5 encoding vector (H-P Symbol set 5T).
+/currentglobal where
+ { pop currentglobal { setglobal } true setglobal }
+ { { } }
+ifelse
+/Win32Latin5Encoding
+ISOLatin1Encoding 0 39 getinterval aload pop
+ /quotesingle
+ISOLatin1Encoding 40 5 getinterval aload pop
+ /hyphen
+ISOLatin1Encoding 46 50 getinterval aload pop
+ /grave
+ISOLatin1Encoding 97 30 getinterval aload pop
+ /graybox
+% \20x
+ /.notdef /.notdef /quotesinglbase /florin
+ /quotedblbase /ellipsis /dagger /daggerdbl
+ /circumflex /perthousand /Scaron /guilsinglleft
+ /OE /.notdef /.notdef /.notdef
+ /.notdef /quoteleft /quoteright /quotedblleft
+ /quotedblright /bullet /endash /emdash
+ /tilde /trademark /scaron /guilsinglright
+ /oe /.notdef /.notdef /Ydieresis
+ /.notdef /exclamdown /cent /sterling
+ /currency /yen /brokenbar /section
+ /dieresis /copyright /ordfeminine /guillemotleft
+ /logicalnot /softhyphen /registered /overscore
+ /degree /plusminus /twosuperior /threesuperior
+ /acute /mu /paragraph /periodcentered
+ /cedilla /onesuperior /ordmasculine /guillemotright
+ /onequarter /onehalf /threequarters /questiondown
+% \30x
+ /Agrave /Aacute /Acircumflex /Atilde
+ /Adieresis /Aring /AE /Ccedilla
+ /Egrave /Eacute /Ecircumflex /Edieresis
+ /Igrave /Iacute /Icircumflex /Idieresis
+ /Gbreve /Ntilde /Ograve /Oacute
+ /Ocircumflex /Otilde /Odieresis /multiply
+ /Oslash /Ugrave /Uacute /Ucircumflex
+ /Udieresis /Idotaccent /Scedilla /germandbls
+ /agrave /aacute /acircumflex /atilde
+ /adieresis /aring /ae /ccedilla
+ /egrave /eacute /ecircumflex /edieresis
+ /igrave /iacute /icircumflex /idieresis
+ /gbreve /ntilde /ograve /oacute
+ /ocircumflex /otilde /odieresis /divide
+ /oslash /ugrave /uacute /ucircumflex
+ /udieresis /dotlessi /scedilla /ydieresis
+256 packedarray .defineencoding
+exec
diff --git a/Master/tlpkg/tlgs/lib/gsnup.ps b/Master/tlpkg/tlgs/lib/gsnup.ps
new file mode 100644
index 00000000000..df96ba332da
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/gsnup.ps
@@ -0,0 +1,93 @@
+%!
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: gsnup.ps 6300 2005-12-28 19:56:24Z giles $
+% Prefix this to very well-behaved PostScript files for n-up printing.
+
+/cdef { 1 index where { pop pop } { def } ifelse } def
+
+%%%%%%%%%%%%%%%% Begin parameters %%%%%%%%%%%%%%%%
+
+% All parameters are also settable from the command line with -d, e.g.,
+% -d.Nx=3
+
+/.Nx 2 cdef % # of pages across the physical page
+/.Ny 2 cdef % # of pages down the physical page
+/.Landscape false cdef % if true, rotate page by 90 degrees
+
+%%%%%%%%%%%%%%%% End parameters %%%%%%%%%%%%%%%%
+
+vmstatus pop pop 0 eq { save pop } if
+.Landscape {
+ currentpagedevice /PageSize get aload pop
+ exch 2 array astore
+ 1 dict dup /PageSize 4 -1 roll put
+ setpagedevice
+} if
+/.BP currentpagedevice /BeginPage get def
+/.EP currentpagedevice /EndPage get def
+/.Ps 1 string def % survive save/restore
+/.Pn { .Ps 0 get } def
+true setglobal % protect from restore
+/.ELevel [0] def
+/.Rmat matrix def
+false setglobal
+/.max { 2 copy lt { exch } if pop } cdef
+% Work around the common save ... showpage ... restore locution.
+/restore {
+ .Rmat currentmatrix pop restore
+ vmstatus pop pop .ELevel 0 get lt { .Rmat setmatrix } if
+} bind def
+<<
+ /BeginPage {
+ .Nx .Ny .max
+ gsave
+ initclip clippath pathbbox exch 4 -1 roll sub 3 1 roll exch sub
+ grestore
+ 2 copy exch .Nx div exch .Ny div
+ .Pn dup .Nx mod exch .Nx idiv .Ny 1 sub exch sub
+ % Stack: nmax pw ph pw/nx ph/ny ix iy
+ exch 3 index mul exch 2 index mul
+ translate
+ % Stack: nmax pw ph pw/nx ph/ny
+ 4 -1 roll 4 index div 4 -1 roll 4 index div
+ % Stack: nmax pw/nx ph/ny pw/nmax ph/nmax
+ exch 4 -1 roll exch sub 2 div
+ 3 1 roll sub 2 div
+ translate
+ % Stack: nmax
+ 1 exch div dup scale
+ .BP
+ }
+ /EndPage {
+ dup 2 lt {
+ .ELevel 0 vmstatus pop pop put
+ .Ps 0 .Pn 1 add .Nx .Ny mul mod put
+ .Pn 0 eq {
+ .EP
+ } {
+ pop pop false
+ } ifelse
+ } {
+ pop pop false
+ } ifelse
+ }
+>> setpagedevice
+/.EOJ {
+ { .Pn 0 eq { exit } if showpage } loop
+} def
+
+{ currentfile cvx exec .EOJ } exec
diff --git a/Master/tlpkg/tlgs/lib/ht_ccsto.ps b/Master/tlpkg/tlgs/lib/ht_ccsto.ps
new file mode 100644
index 00000000000..2772ecc2f63
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/ht_ccsto.ps
@@ -0,0 +1,3171 @@
+%!
+% This file is a reformatting of data placed in the public domain by its
+% author, CalComp Technology, Inc. The original file bore this comment:
+%
+% convert 167.pat 167a360h.dat 167a360h.lin
+%
+% Aladdin Enterprises, Menlo Park, CA reformatted the original data as
+% PostScript halftone dictionaries, and hereby places this file in the
+% public domain as well.
+
+% $Id: ht_ccsto.ps 6300 2005-12-28 19:56:24Z giles $
+% This file defines a /StochasticDefault Type 5 Halftone.
+
+% Note that the Black array is used for Default, Black, and Gray
+% (not too surprisingly), as well as for Red, Green, and Blue.
+
+% The reason for using the single Black array for the
+% RGB additive primaries is to make stochastic dither to displays
+% look better since there is no misalignment between primaries to
+% a screen (as there often is printing to paper).
+
+% The CMY components are decorrelated (90 degree rotations of the
+% Black data) so that misalignment doesn't cause color shifts. This
+% is the same reason that conventional ordered screening uses
+% varying angles for C, M, Y, and K inks.
+
+/StochasticDefault <<
+ /HalftoneType 5
+
+ /Black <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+ff51ef01d993ec6bd87ae0b102f24fff9f52da29e9bbff389add8cd834f3a5cf26f879fb
+6afe32d2f8adfe79f7c760d0ea6ad87ae561f804ff53ed2dd95ec5ea52c1ff25f787ff94
+c7b3ff6cf7a7cb86f24388fecc5ce1be6bf356ffaef137cb4fd8b966c1ff43f9cb2fe4bc
+0bee36f554d969e91fed4ebffb79ff37b4f88affa501ed94e5bf0ac6fc8ef57cface63de
+7abfee7bb8fe4694ff2eed86f1a5ff70eeafd694c0f61a9cd883b6ff52affe8ef62bfec4
+93e578edc193f28609d9aee556f179ffc112fe87b9d618c89cf1b8875ac0dd49a8ff36b6
+f60affc1a1b9eda7cc93f679ff1ea7fb08a3ec5dd005e035e44ad9c00bed32d0afdd963d
+f6b215e085dcc5019ffe8dfb7ad9fa2b9fec9459ee79f8cf80d886ffa5cc95fe84ffa561
+ea89f2ca27da4fcbfb5ad83093f79a53d824dda53ef0adff29a7e0169ef2cf77d8b64ac7
+32b7db933bfb0de086cef223fdc932e0c20edd56d465ef33afd80bfe41afffcd7afa6dfe
+07c7b565e595ed39ffa5e64fd909ffe21d99f2d880e086c3dd8946fe24c84cfb0fbfe086
+edd165e5cb89db83f2b8fb87f2a15aff9af561ff0ff0acd875ffa9f92693fabe54e510f1
+45a5e6cc03d8fbacdc4cafff62e0b329f95cc0da2de0c015d453a4fe86f270aae289fec5
+48bee483ff56c4ff9013d893f868ffd834bafa19f6a5fe87f703fbc59ef176fe5b7ae4a7
+5aed79fb9ebff296e282c0ff59f296c5e12fa5ec22becfa2ed2dfaaf44d8bf64f286ff7a
+afc56bd0fe8c05f964fe52a5f9d17ae091e488d9aa38f84993ffb94ffa30fea5467bd213
+fab0d868afd990e083fc2dedc2449be7c249edd793db84d0ff875efeb98612c5fd25c0ed
+11c6eb7be00db0f35afa86ffafdd07d83cc6ff13d676eaacff1aeebf9ae669bde46eed42
+cbb57ce75ba4e081d85be09fd961e845acd833d9ff45bffa95d12ae57b3cff17b5f97bd8
+ad61fb79d3fc67b4f43bff79d98acbff79f7b025e03dcef62ffba53fe5c3aaed1abfed2a
+adf260ff2ef357ffc395bfde289fed7dd868e5b6fe93db77e22ac9fe1df347c858d0b669
+fed879ffb28628ff61f8af1ac2f0933eddff9a6ae05f9ffe934affa2fb6dcb9bd8b633ed
+64fb9df6b67aed58fb25d963d8a635fb08d7f83afd9dbefb02f48efec24bff0eedbd41b7
+ff7ec1fe67f598c7a4df14d963ffa5f9d886c9e946dc24e7bf1aed9944c2df83d893e252
+fb1da5e303ddc297fbb58ade81edbe72ff4fce9bd97cffc913daafcf84e56cdd01fe6df4
+d516feadef0ed82eec55ff8ffbaa51e078b6fa94ff1ae0a50bef3ad3fbc0a5ca35ed9ce0
+2fd5f6b64ebef388facf52f1d7af37c3ee3eff1cf7ce92e4ae48d01ef993cfa1f18cf57c
+fec293f2b250afcd1eea79e04fd91fed93ccb378fe87f21db1e417ecaf0870f486fe89ec
+b60bc361eea56bf49cfc83ffb66ef7acff15f952ef0bd26bf2bf56fd78ff6cd80de951d6
+15fab22df27afe5ee24395fb9e42fab91afe9ef1adcc4dafe29342c4ff97f679cb20d85c
+eac582ffd509e45ff27af7c766e09818ed5afeb669fa77febe6193f2d836e206a5dd8b18
+f4db7cb6d793e0874dfe24c9ff86de6bd932e04cca07da44e061ce7afed979ff57d398fe
+aad067fb2cf3d323e197c4fa7ada86cffbe026d851cc36f592feb325ffd208cb51d931cb
+e403da62ed93cba6fe87eb82de9bcab82fee5ffa7cff9fda5adfc0a0e533f4a5beea6ff0
+c667e0a5cd4bc631fb9bff5bc6f975bb45b5dd9fef94f701a5ed299feec2a5bfdc41aeff
+80f5b873d904e5cc3dd9af09fbd81d97ff7ac3fb34ffc8965afe02f550abedc681dc79ba
+f250fda6ff80fa9dff86fa96f32ae6bf0af1c2a5f22bc75ef99cc0e56193faac5eed55d4
+33ff4bbdafff80f194df5dd839e0c055affe89f793f05ea0fe86d8af2bfb46afdc37ff23
+f447f8a9cc9cc6b636ed84fe73f817c7afcc0dff52dd05a5ff28f779fb8eed86e50bb7ec
+1cc0ed93fb07ff60d981c7fa61ccfb874efe3189fbce21d94bceff90f7a279ff87f2a4c5
+85fec14ab8e66cedb64ff9d98fe479bfff0ca1fb60ee1094e8c40bc1dd22d85bd2b814b6
+ff5c9edf9337d988ff86ee0ddd40a6ffcb3cddbe06fe8bf09dea633ab8e510ff6dfb9bf2
+7efba4ed79df20d87afbc74ae038ffc09bc3f37bcda0d889d980ec1ffe45f4d493cc02d8
+87eb67fe81f193d686fecb7cd993e012d85bd877cffa6aaffe33e36fd086e638fd4bb4df
+9b3fc0dd7bd3ed9e5ff193faa02edf55c5eb15d849e058e575dda5f826afd07be09f21ce
+45fbd866cdf136e5a5fed83d9af35aaff06be539eda5dd85cbf94affaffa11acdc76b6ff
+88d808afea82ffcd6cdbad1fcafaed78d09fbfdc03d54fcd14d931d060ffa6e511b7f699
+ec79dd60e41bfe61f766fb14ff5ad890d9a51bff62f352ffa6d23ce04dd922edb65af240
+d160ffb6f526ffac39c1df81d9a5f94af4bfadd094ff0ff2afff1df6b905fec586d80ced
+c686fe3ba8f691fb7dff39f518ed80d8ff0bfa41ffaff288b424fabb7ad8b64abf6aedbe
+79fe86bdff98f679fe52ee1ab6e980d75ac1ed43f8d859b9f481fc50f227a5f442ffbf6c
+b2c3fe30fa4bb0f779ff93f687ff96edb13ec0ff5ad120aff707fd80d194ea0db6c99ec1
+e479f16afbbc7adc93e0bf22fb9fc2ff7dfabf32e7affe84eda94498dd86f19eff4cf217
+cc64d8a413fe2deb6cd879d886e59752e0a52af357ff62b3e871f2ca61de29cfacc79dcd
+62fb4688dfadcc79e85bfec6e59848f81bff93f7cc29ffd019e047cb02afd82ed876fc8f
+c622f69efe6acbaf1cfbc837e29fd96ac7e787d87fd8fb1554a5e491ed7cc5e027dc5be4
+4ad806c9fa6295ef86febf53d6a5ed32dd56d3f14ae838affe07e03fcaf22afc4086ee89
+d811afe4639cfb9308c0db24f7b8fe62d81de07bd18fff94fb27f1c97ce09cf63cfe26f9
+61d8ff79fad170e3c0a5fb10daaf24ffb99fe60ef05cfeb8a0c1f3982cedbe11dc9e3b82
+efd388de6fe004b1d958aaedb6fb6dd9fe65f286e5af3ffebe8ce42fb9ff7bed9962ffb4
+25b8fe9a3dfe0cf8459ce0ffcb66d81cfe43adefbfa2c2fb86f56da2eacc31d865f294ff
+3bbffa86ffa579ff8efa82bbd0a0fe6eb0d89dc2e5af5af897fc39c2e05dd3f29e69e47c
+d507e8b1fd5fd903eb57e07ddb6cbdfb53d686ca8ee19fc513b6ca3aafff9430dd51d87a
+ed99d154fa88ff93dc38e501e052cbfe67fdaf78f7c1ff09affe32c8a1fe79fb96f98739
+93efad43c7a5ff0fc1e07dec52cda5ed01df50d0f186db93f612e4b879e08bbaf374a90b
+f386e5c19cff883efe1eb5e037d2fb1aa8fe92e20ccf60e570b4cb2ce5c101d950e028ec
+59b7db13ff57f50affbd2bde68b5f518ffa943fbcc38ff92f39c46c2ed87f6a8c73cf4ac
+ff39b1ed08ff5deeaf45f5d96af29aec16ccfe80f498ff46fb08edc130d863bff77bff92
+f782b9dd3dd4ec1e8cd99dec52b7f35ed8b840e312d3ffbf1de597f926cba1fb5ed406ff
+6bfb84d88ffea50de546ed70d886fbcb4ceed02cd8f7bf50ffb161df09d0f480e679c5ff
+885bc0e450f577b5eda1c3f510feaf6dfb9db9f4a6ff94f631fa88bdd093dd75d2f286cd
+ed55d87bcbe578b3eb72d859c9ff9330fbbc70fe9fc50bcf9ae07bd9a4d819ffbe72b0ff
+4fdc83f8a545e0ad27c9b683e2af68f7a5fe21afd04ed92ae016a5f25fb7ffc55afb79d0
+ff85e822f1cb83f4a44ed8fb73d656ed64dc35f394f1aedc20e54ef532c0fa7bc6afff51
+f12e9fffa56afe865cec9ecf2ffb93f861abd959f20e96eeadff78d925c1ff4cfb289bd9
+80d0ed50de62c71bcd74bfd697ed4cfb33abfe41a4ff0ca0fe93f721baff0ec2fb29f8a6
+13e2afcc4ae527ee66fc5ff321fe62fa87e879d1fb03c2e923d861c6ef6ad8fa6ef3cc59
+ff94d351c4ea6beda6bffb6fffc986fb9538e0b12be4a913cb4cff64afdd6dc9f78835bf
+ff92b8fe93e579d9874dc4f87bcebc9ae03ad8fc219fde7bbedb19c6e901ddd13cfb78f1
+b949b5eacb2dffa5bfde44d801f2c499e085d87ccaff5fe51ebdf836ff7afb5af30dfe49
+aed97df1ca65e6c77ae0bc3bdc61ed519bf25ba5dd81edcf75f268ff95dd81d8a1d992d5
+a5c72ecf53fd31a3e05ea6fb92ff09b6fe1ebdd915acdd33e006f286b8ff0cf93d93eda1
+47e305beef86f4be67fa97e5abc59dfc30fe06bce7abed08e23ed114bfff2afae09544b1
+ff16f279ffaa67bff906ccfe6bf859b5fa98ff8ec2e022d997ff148aedc36af87afdb5e9
+8652fb3ef819f3af45ef87ff6ca5d894e493da85e068c1fd06e0af1cf9b726ef5ffbcb81
+fe88c4d981e1bf4eff3bb8fe1cdbaf06c1ff1ef541ff59f788ee9edd82baf286fec042ed
+76e589d0af64ff93fb79f5a4fe79e32d9fd987e5c71dd6f37dd0fe4cd817ffcc3cf251fb
+0fec53d87ee09661fe79cd9ffe7ff8a958ceb90affc1ea6dd85addc44ff4d286e4af43ed
+88e47dcb28b7e50ea4ff5eed81d8fc9f46e225d89f3b94feafd6a5bfe169dd93d0b841c4
+ed10f245d72dffc3a3e677f35aff96d078fe9ed817ade504b1fa2ff71bfc97c4e062a4ea
+7dd6f7ad5acb86ed7ae011db51ff09f7cb40d818e19ebfd951f235f7c24cea42d0ba6ac2
+da5ffcc976fe61aaff5ab8fc64a5e180ed76afd881dd92d881f9b6f258ffd01fb6f569c3
+ea44ef9efb71afd9882dfe97f6b00febb527ff60f295c9b733fe64ee4d7bfbcc79ddb636
+c552befa84fe63f1b8da29e510fe489eff31fb05f39ffd87cd7efeb6ee8742f927cea6c7
+86e952deaf4af595ff67f3d070e0a5d386ee098cf5d04ffe3487ec9bfab92ecaaffe7fd2
+93e0a969ff97f661f32eabfe83de77e19ec7a5ff0dee3a95f3ae4cf115cdf480da952ee8
+c421faa1d902fdb625ff60dea61b9cd839a1f9d849de27b4d162e01ed8f55ffbd5b73dc8
+89febd82e095d938fb11ffd693d9a2b3f2ad43f403fea5f186e007dba6cc14ff72f481ce
+93eed979cba5e077d82ce04ddca8049be1afd893ff3bed20acfb0fedc188d843c7b735fe
+c060ff48afd8ff30bee48dc9fb46dd12e5a5fb43bff023fb4bb7ed27d77bcd8fffc110cb
+a1ff02fb29ed5bd885ffcb19e9d18bddaf42e508edbf52ff95cb39feb96bebc67aef31ff
+b8fb85f3c25186ffadfa6fff93c1ff9731cba918ed86fa64d92efe5af779d0acdf844af6
+15ffd828e98ad8bf88d71fff9af6b84aecbf8fdf4eb6fc5fc007b8f566bfff5af7afff68
+fab8f64ffe15ed61d893fed781d86dff2cf9a5fd7aed9f11f195c1fb619eed930ff164b7
+d377ff6ad885e66aa5d87febc886f993fe07dc4be598f940afd990de7afa9be54ba9fb93
+28ff57fb99c2ff77f9b062ed7ae069c9f2439fe391cf6de444dc14e0afed9411bee603f3
+3a87dfb1f14fffafdf03edafd074ed0abeff569cecc1a5e586fe83bcff52f73afba8c73e
+cf79ff6afb37aefac930d8ff87e64bfe1396eac1189eed28d585dd79ca9fbdf269c037f2
+50e4aecb86e01dd852deafce38eb22e3c043fec3a5ff22ed99bdf24afe01c1ff3bfaa014
+d947df5bed6dfb79d865edca5cf23cbece11c1f8d550e0c0a5ec84d933add825dfc10dfb
+a5f62593ffd20af34ef795cd78ff61fa2fc4f280caa0cfaef954fe7de5c05f93ff9b52fb
+a5c79fe130caf31ffb51c639c1e212c99adab26ee580fe92de21d893cbed1a8ff69d42f2
+a2d485e5c54888f2cf79d95dff21b6fa46ff04b3e59fc3fa9b01ed57bff293ff87f76cfe
+86d97bf2af79e052d8b459fa19c796d0abf28ee362baf379ffc09bb8d0a5ee36ffa81cfe
+86b5ff7bf1a03187ff7bf649c511f388e469fe7af79ecf45d7aedd5ab6fe83d8af05fba8
+c890d1a3fe60e135fe5be576d80cdb9f24f8c545c0e21ddd42fe87f9b688dd7ab6ed954a
+a5fd76f11cccef47d815eb5ff27be45ba4ffd469e0afc720edb632fbafffa53afe94e888
+bfec7adf8bd1f74cff1890d3fe7affa23dd907d547e0a5ca51fe02cefb28f477fccd86e0
+66ec32de51d80dcaff30e5a81bf739ff24b6d987c5e56dd1ec18d964feb1e4b904b4d8fe
+9fbcff45efb2d93feb86ff60f114e579c1ed2cffbf5aed31e30de94cd7aff279db17eeb0
+fc78c9ed6cdda7f285ff93f1af1ad55dfe6cceff06fad1ed5add93ff65b9ff6bf5bf9dc3
+fe04f7c12fafed0efe5bfa73ffcd7ad809dfbd54f20fcbfc5bd830ef5797dd7abbef3eb8
+e026d0fb6af47efcbf17edb89de85bb6d395ed069fff3cf8a4fb81fe79f7b083d987d0ed
+6fddc38afd0ef5499ffa2da5fb91e525d851eda0fd8627f05acea0c80793feaf1ad9bd93
+fca7f73eafd97ce09ec3f86dffbf93fb1c9bd88dffc23f96e72eadfb13fe34ce60d86ecb
+ee78d90ce73ba0d96aaf30f9be3fafe60a9ae0ae35ff42a5d86ee687fb55d095e086d952
+a0e562ee70fac780ddaf36f1affe82c7ff2acffb75d9a465f787b6c6a5ea3098ff61f635
+beff86f83cc7afe56db6d60dbccb25e6c240ef65fd519ffeab58e495d67dedcd7be0c041
+cb5ef782ff6bd83bc0dd93e51cfe60f3d178dfc38cfa4bc72ed0a0fe5df21ffe4a93daaf
+42f062c0ff2dec5086fad467ffcf79d895d97df706fb4ca5ff93f481bbed7ce4ff95cb6a
+fed37dfad829fb86d1b1ed87ff4fd89fbef22bb0f414baf822fb99cb1da4ff6af99ec60a
+a1e51eb7eba542e413f3cd4ce50fff4dccb2dd83d893df70d913abe588ff4dc6f387ff79
+f493b75afb9ecc28e7c505bff93df25effaa04ff51f396ffa9c0df13affa94f578fb69d8
+81dda52efa4dff33afed86ff64e00cce95dd7abded22fb86d8a5e473f6a5bfdda408f09d
+3af286e453eca5d083eac324e04cd0ff5af72387e90de0ad2cf24ebb7fc3ee11fa53de24
+b7f409ff86cbfe63c9ed80daae45ffafed2bd84be06dffd066fb9461fec188ff82bffe79
+d893f186fb0bf341ff1ffaa0c1fe6cd81df7a124d950dd39d8ff88d80affb660fa88e07b
+cf85d82cddbd86db6bd808eb468cf2cc5ce00cd03feda7f639ffbf98ed6cbfe104d89af0
+85f962fb3bd0ff6dd39fcb08f33adac405f149ffc87ae0bf59ff0efdbf2bffb53bfa97bf
+fcae16c7a9cf60c1ff79f697caa6d9ff569fdd8bd67afbc779d958dd3993e4ab3dff4fc1
+e179d984e596fe86f32fafd943f4cd0af0b44adb25afed44de25d864e1afcd7be8c451dd
+2fee5be07ad2fe7df089feae18edabec79dbc198f030ff16fb9ff66dfbc822feb5f76dd4
+febe2bfe9dbcff8ec601b6d971e111cda9f779fe5bdd25cba5d888e5a501b4f437ffb681
+feaf5dfe97e066b7fb1df7a0ccb68d5df371e5bf85d93586ea9bfb43f0fb3db0d81feb53
+fe0293f2cf48ff1deda542fe99ee6beabc02fb9fd093fe07f73af351cf05dcc09aed6de2
+be87dd79cbf88afb7cbcfea5f97bff9f5bfdbe4696fe81f59cc7a7f154b5cb0fcfb868f9
+be3695f71cfe47afd893dfaf59b9e83e9ae3a54993dda23986edc478ec59b3fb86fe5bf8
+86f152e01fd989ed81ff54f419ff51f7c6e55bd969eccb51e993d833aef428d0af61ed3d
+d8fac59edb16f252ffc5f65ddc70e0a3d893ed67fc82dd87e3c12eafe595cb86e0afcf27
+c0f97effcb61f22ded66d8b79dc2ff7cf1a547fa11ffa525ff51fa31a8ed5ce51bcb62c0
+e831caed1ad9aced09b6d042ea04bffa2cff9ef23be1c581e5bf6bde86d0fb60ed43cff2
+0bcaafff79f2b8ff20f0b6deae4df91ac2e128eaafd420c79eff6cfba5ce34c6b2df72e3
+c086bd4493fe86fa15aadd1afb61ffcd7ce083ffd993fe8022ed45affe8ad8ac02b3d220
+ffb0065dfe15cdabc632f563faa4fe6ff25efe0af66cff9f17d149addd81e0bf90f160fb
+17afd85afeca91d87ecaed84d895e7b907d898ff8cf30d9adc51a8f886ff65d8f97bff92
+fb5cd8af6ee563fcaf23ff56fbcb3be9a611c97afe83befe61ed34d70fe088cf79fb05ff
+93d9a4fe7dd89644f2a5fe32d1aec54fffa2fa0f9efb932dd9feaded21b7c997ff79efc1
+87ba12f957ed38c101b2e2c094fbd465e02ced9dfe89f27dc7f5e2bf9ff943ff9eceb94b
+e008d832d876da93e550d9affc96f722feb00fff40bed093eb36e3b879e560f243aff619
+fe79c9ff68dc3bd95ad0fb79ffc660e02bcbaf48e027cf76e485edc242bcd18eee7bd807
+acff53f492ffb61ee54aa5dd86f966feac5afbbe51ce67f130d44aed60ffcb79e077e959
+ee0af367e56bf2d846c7f19810e080d6f643e557d8af40f7d993d3a7c98ffba5f550ff69
+c40ff7a4ff61d83bd950e5309a8427e071dc7aed1affb37cf797ff88f9bf3baff183e832
+e063d9c177eac5a5e427fe77f9a21bff33fbc29ee06ccf5ae03ca4f284faadfeb139edb6
+05f476b6f26fffc29dedb534ff12f5a5fe02e548b6f696ef77d7afe04ed8f79cc3ed21d0
+9ed981cbf41ce49be8a5c88dffba9df516bdfa04c599fb7fde92dc25ccb77dffab53facb
+6bff5a9ed984f224fe9cc632fb4dff0de060d884dd17b7ed87ca41b7dd7bee77ff86d6fb
+c4ffb7f108d393d985e4c241cd51ed229affc30ffe5dc97cf2a44cfb995afc7def95d95e
+cbee8fd8ae01ff32fb9cf293fdbb14e5c11e86e49fc77cdf93cefe12eaba1efb4cfec993
+d886db79d886ffce61e033b9fc2487ef7fbf32fb65ff54f115e642b8d886ff22fa54f30d
+e538d0af66d8a4ff2acbb638ffbfa5fe3bea07d0e67cb5ee39c1fb0afea5e06add7aeda2
+e56df1b6ff2def6bcefd34aff193f80afeafc80ef4bc45e58c4ca5fe5afb3df924f48efb
+bea5c5e04bdd87cfa5edb605ffd81fd3f331dc4dd409ffbd40da51eb88d2b579dd0cd667
+ebcc5396f7cf4aff29f951fb349bdca560e588da9f67f35efb37f860f2a51dfec19fdd67
+ccfeab04ffd88ad47fe195ff6dfd8eed5bc0d971e0afce79fe86d9fc43f36ce57bd8f487
+57f179d89bf78840ff1bd4a4eb78bace37bdf903ffb81bb2d9933e9fdd8dfaac52c1ff59
+d87ee0a334e697d967af16f8b6d979e0a8c96cd0acde16ea63fe78f4a2fb3af629fec76a
+baed86b6cc9cff84e0a86afb85febbf75ceec14eff85f72ea5ffd861bee992d8a5d887ed
+be50fdd279f20ac1e31cddb1c99adf32c6ed884cf213f9be43e5ce9351f309f9b629c6af
+c501b4fe39aafc9334ecb64fed1fb7e793da52fe169cd3e413c5fa5bb1e0a8c3f261fe27
+afe467ed80ccaf63e788fe49fbc7f554d01de59bdc80e524ff4bd0fb86fe2bccfedd6bec
+2ef2c012ef9ffe5a86ff93dc01d8b720b4d87fdd5994e59e52ff62f814aff12df6c30fe0
+a52495d912faa5bfe35fb7f08924fea208fb55f310ff45d7f39329ffbfa8fa83fea44bff
+0faffe5a94cbff83e09f71f59762ecafc0df6adaa5ef4afaa1f37ccfed15c6ff86f9c96d
+ff88c70fb6ed86c1fb42acfe932ac0fe1efb5495df84c8ff4cf696ff2ef4c241f2bd81bf
+13afe07bff64f605fb61c6abf289c143b5ef7a9c52c893feb24fff61e537f2b6c644b1f1
+57ff88f272ff90ccf81afbc20ade92e7ca6dd888e5b371f3b7ff72e658dd2893fbd04be0
+c16deed379e084ca9ae58601c4e69751e033d852cfed7abfee80d6fb08b7d83affc427d9
+ff19fb3e9ffe35fa86e06fdc2de54e93f6a54ddd06a1e2c03efba5ff3bb0e062c9ec70d9
+a9ed60da7ae2bf04f8b66ed910d05bd875de99d12cf9d895fe39edafd293b9cda0eb69d5
+10eaa6e058d5fab3ff21cf74dd87d994bed80ded9dfb79e89ee03fd709ed44afdb82f2b3
+79fe51a5fb5aff40facd39e14acc9ffe81efc4039cfe7af5b334b7fa3bbaec5eb0ffabf7
+41c0f08eff99f7bb30facd53e02ab5f26aedaf79eab359b7d893c2e473cd58d618ff97cb
+85ffd862caef7bd7ff2f9bf27ee564bffa22f19e02f54dff8bceaff536ffa0d834ed87fe
+93f29ffa14ff6deda54ee46ed89847fb29f342fe1ef596ff5ff71cffbe05d87ae8a8f702
+fbc41dff79fb60e32ccfbb1cc3fe6bfac0a4fe61d83de3c434bfed19d094dd679ffe7fb4
+fb1bafd96affafdf41d914d8fe7ccba4ff20f9c72ed966b4fe16d65ae00593e7a022ff95
+f77bd0a725fbd10dfbc887f64cff11f583ff93edae3febbf0eaffe27b7fb4487edd260d9
+27cfed6bda79ffd086e0c10af2439ad881e868fb9ee04ed824e579cbade10bceff90f807
+ffc0a5e17adc86b6cb51d9b684d99f67f33ff9be469ae556a0ed4eafd495c9a5ff70f95a
+addf9350e528f09dff6ef5a5ff7ad961f01fc1df06d4ee7dcaf243d837ea86f4afff964e
+ed18e07fd9a563f17bfbcb55dd81f47ac2fe47b8e085d861e53effc15e99e06ded28acdb
+7dd8a5e022d961c9f769fb9df155e56cccadf7be16fab6fe9508ffa5c73eaffe30a4fb82
+befe0ff746becb18aff77bff51b9fe5a89fb84be26afdd84eb68c5fe50d7ff75fa27cefe
+48f2ca94abd065ffd87ad2fa6ec2f632fe17f34be5c594ec2bceff7bd3be1eafdd0cd849
+e593fbbe9dff85f7a530e55299fe8bf9bf21cb5486e5bfa9ff5bef44cefd93de0e8cedaf
+ff25b4f26ccbfe69f303fdacd877edaafa41ff96c3fe68f2bb47b0f8befe0ab6d426e074
+d987ff09dd5393e9a74386e0afcc2cf797ed66bbdd52d2ed6ab4caa5ff7df2d23fb6c893
+df20ecc3d946eec7f35ad830fb119eeda507e0aded6eafe28726fde011edaf2ef2af27b4
+ea7bdd8bec7dd7ac06ff86f5b711aff779fcd061fe86fab603c64bf236eb53c7ff79dbc0
+0fe04ea8ff8efad106f267d09ec1fe861eeb58d0fec23f95d0eb3bd99e18d1afde952ff4
+c614dc81d9bf54e707d12cfe86eb8c44a2f27cff93bbfb1ec5b1f17dfdd051ffc4f65afb
+73ea7bd915cbf97bffaf27c2e950e029d95aa4fedc09fb64f5b4369ffe93499ffe7af186
+d9bf35c6f2933dc5fb0bc2ffd86082fec179fcb969ffd814ff53d041befe67dbbf41d861
+edc83cdd5193ed98ce2feea7fe8fd8b67ada8abaf424fbb476f1d061dc39b6fb93d92cf7
+0c95e0afc0ffa0317ef9d962a5ff86f6b0fb578dffbe5dafff52ef1aa5f387dd80e59bd9
+05ffb5e461dd37ed4bd0a0f94197e023a5e08e0ea1d834e0aefc59ffa548e41bf096fe7a
+fa8cf695ffc63286f0c0a5cf7affd102dcb7e716cda8e04dff90fa5fbfff6a9ceb9037a5
+edcbb638e6c609edbf81de86b6fa9ef224b0f079fa9afeb686ff95f3c514da5ae179d862
+e427cafb14fe43aae05fceff960df79eed7fc843fe87ddafed4dfa3a82e5b6eda614fbc7
+0be24fdd31c5e81cd8f986ccb688fec133ff4cfbb438b9f16dd82efcafcc96ff7aed64ce
+ff69c8fe38f4c6f267fec01a95d882f1c789d871db3fd816d055eb0188edd89644ff1aee
+56bef77dff6bb2f73ac1f477e824afe117ddbf45f7bafb1bf56efb5793db9f4afe3af7cb
+07e184d9fb33afd418cb4ce103d836a9ff80f7a5ff3df3b3ff5aaae569f1c686ed9e2ac7
+ea74d71cff64edafc560ff77d4a7f3d908ff5ccbe7945af07ad588ffa979ee9e42e505f7
+d449e093ceb76defa4fe4ad086ed9e4fe802c0db14e0af2ceeb884d9ab4a93dcaf52c6ed
+44e50baffe37faadf486ff94dc7cccfba75cfdd681d98de09a4bec33c1e486ff9405d298
+c2fb7bf688fea7cf5dd8984fdda0c3ff2ffac1a5e65b93ffc148b888c1ed68ff94f27cfb
+84f9cb52e0b118c3de9d0d88edd081d89f02ff3dd8fa81bafe52e092d89c16f8d831c6fb
+178ab7cc9bdb2887ffc0aafc1fed62cffb4dc7fe79d99d6bfa79ed0ff2c71ed866de93fb
+12c7ff81f8a75bfe86fba3d610f85efbb7ff21f39fff6cfbc19cf35ce7a006becd4be524
+feb52be1bf11aff463fa25fdafcba2fb20d94de6b8fd4bdd39d864d253ef03ff79e7ffb8
+0cf17ce460f20eccafed639bfed812ff4ae6a926d8b546ecbc74fb2cd2fe6188fbb8f5a2
+21fa48fed06ae8b85be534a5f371fa35ffbf5793e7b15ac2e545f867febef245d92db6de
+93f509a5e081b6f138ffc221d8affe61a5ff85f619ea59dc77bedf3ed3f273cb46f388e6
+76d706ec6bd87ae201d0b52edf85d87bc5ff65eeb66ff2c167ef74ff99ed2ccaa5db73e5
+0def60d079f2c55fa5ef7effa5ed29db94e086c72dce7ae067d897d092e073ff20d5f435
+a4e493d883cef772ffdb9f20e59af15895e5c13ae04dd9bf9bedb77bf6a715ff93ddc204
+cba8de79e2acfe03f49ffe74ee93d83b7fd19af986ff41d858c9f835ff13d0af5ae5a1fb
+5999d1eb4be0afcb7dff99f625a5fe9429bde69cc735affe8ade94d03efec293f679ff52
+f920fd42d9ae31fcd89b43faa2de41d95cb5ff50c0ff5ad882ff93faa52effd61de3be0c
+c2fe6bf53bb3eda320f6afff1ffa47fe32f394dab950c3ef52f704fe59b6c70e8bcffe65
+d988c9f905ffaf7af980fe37c912de4dd9c279ef55fc9fee4cc1f529f081dc86d724d9b0
+1cfbaeef02e553ce9ff27dffbb68dc94ed76f6bf89f23ebfe42b93fb9c39feb72ed95eed
+c66cefafff07f75dffdb26f056ff83f1af31ec5bdd87cfade08bd185ecc18d10ffafd00b
+c2fb82f7d479eb1794f3b8e240d808dec06293fb9e67f25bacd880cbfb56feddc040a5ec
+88dd86d8ae58fb79afff87d17cde9ff038fdacf43bbeee0cff43a8db72efcb1cdd5ef28f
+ff93fb83feb024d86de17bff0fafd86bcf3aff53f36bffc761e087ffa5bcec12c0e02a92
+f0b249b8de30ff09cba9ff7ef7bf03c4da79edc986feab0de14dd863de91d8bb79cda5c8
+1ce163da9bbeff13baf23ca0ef58ff1bf8b8e679df61ec932fccb704fb9fc5df8728afed
+80fe76eeace052cbfe8ccff818ffbc0ed88e5f95fdc352cb14f165e9c005c5e51ad92ffb
+bf71c4e06cd962e07cb3d878bfeb86d82dbbff95d784e063cc2ce040d0f888fe1db4cf99
+fb50ffb7ed79e0a2cd3f94f5af4dc925fb6afe78a3fad31bfea5fd68d297e06fed17d952
+e5a9ff51f80cafe039cdfb86ff93f9ac43fb15b1ff6df79fbff912fb4dcca5fa68c0fe0d
+d87ddd9646c4f534fa7bffaaf255ddac47f936fe9efa5bc79fcd3cff10f4b62ddf3d96ed
+9f61f27de9f9d206ef93ffa9bfff26f69afe66f281e0a541ff19b1f729ff9bfa4efea0f6
+1dfe56f3a34ae909fe3cbaf3a4c0f06db6ec4dbff761ed86df9f1a93fac00bfbaeec0ed0
+fc8df081d848cbed5dbee681d90cec7bf255fb94d088fe73d883ddc07bff54f176b9dc35
+d01fedc198c4e546d932ed49a8d888e079ed34afd974e5affb5cceff69acd887da4fe088
+fe7aedc16dd3b0e814b7f125f8b96db2d87bed88ffbf48c4e293ff266bafe079d835e24b
+9ed978df3dd0a4ff5cedc896ed7fd1a3cb18beed2ac762d0afe579fbc86ef7c3a6e55aff
+0e97ff08c8a5e085d922d73df2c3d933afdd7ad882fe9c2fe160db96e8ab06ff933cf95c
+c6a0fb22daaf3cf9b628ed44ec22a5e792d89ff71a9fed7ed970ff66f378faa5fd93c3ff
+61f425fe95c4ff1df5c1369cf123b5ed03fec617eec01cafe522ff93f55c85d8fe71dd55
+ecc7fb4afe01d969e5a8fb32d94fc99fff5afb99f483fdc951fbc187ec23cbb20dfa61c1
+fe51f17ae66dcca9e492ff3997d90fabdb9350ed1ad886d2e467dc7afb2eff5afa76feb9
+6cff87f755ff2be44ad9bfa5f711ff37f4b870e0c498ddff4aaed861fec67ae0c1a3fd97
+fad242fc1fe55fc8fb4cfeb7e53ad81ddfc004d058e80ce59bd2bf56e786deaa52ffc67f
+e26dd2bf63afff7799fbd061d852e00bcbff973ed0a9ff961c87e097cfa5fa1fd875ed87
+bee5f237d9b828b6d90b93edaf15ff93f372fcbf92e62aafe403fb94f459ff0bf153c2ed
+67ceff27f2bf9dfb79f7af43fa99f252d8a5cb93e0a510ea4bd3a9ed96c6b4fa79ff52c8
+b785dd7bccfb4df31fb987c1ea86e39c14f24fff0cc85aba87f36acf94ff7cbfde8a089f
+f186fcaf80ef8dfe7ab6ca4aff87f204d86cfa93d108f9a1fe51f79ee539cef34c94fe86
+f99cd9b629e5aff6058ae4b6f3af37f251bfef92ff09b0fe1a86cd7feda5fe77f9ce2ee0
+a0d843abd835e04bc6fb79d8b75fdd37d87adfbfa5fa18fdb186df5cfe32ceb630eda1cb
+28bfe689f301ee42d1f9c49ee505c94feb199ee51eee74fdd04ffe27a5eb7affd833f101
+ff37f5ce86d879e092d8ff08afe084ed06d92eacf5b4ff48b6ca31ff51dd27c6fb84edb3
+3bb7fe5ced29d978e0b138b9dc25d85bfaa526e7c406edaa3bf167fb53d886c1fb45d95d
+ffc87cfe9c35dd5db9eb69dcf74dfe01d857e0a55ef26cfa7abefe69f5a1ff68b5f24fff
+c285fe93f89e31d96addc42feb78d286e069ffc862fc82ffa916fe5fda79ffb8862eff61
+fb86fe7cf4cc69d888e028a3e592d9bf15ceaf6bfc9ecb79d8ba45ffa5f933f149a3edc0
+36ff5abefa87ec5ad86bcfed7ae093d89cf4ab3fdd15f8a5e388cd9dffb7f34cfc94f373
+ff85ed89d9bf7af2b56ed9ff91cebea0ff2feb77d782e522a8e113c2f484cdfa51d6ad9b
+df86e56df21dc4ffafdc31d0ea02ddc420c0e80bcfa925e2b015ea49c1f288ff9c5af7b8
+ff04fab3ed12a5e506dd5fe4cc7fd89fec961ef5bf92d0a6e039d9af44fba5f959b8f102
+f669ff87f244e6c362f9a5fe65afdc1eb2d882fbca6efe9ad6a9e83fcd96fd28f7a110fe
+56f519ed61ceff73d560d920fb43e07d169fe568cc12d5a3c90afe52ffac58fbc51cbc4d
+fa13ee61d0a5fe10f893d0fc61b4ff78e6a12bbffe0eff38d198ffb993e9860fc2ff9356
+f9b486ed799cfe84d9f769ffd771b6fe01e63fbde29345a5d99f4194d8f96fd0aff146bc
+f634fd4ac2e16ddd45f218bff865ff89d808bfdaff61d5ade040dd99fab60ee047ed28c0
+fb6dc7f268e6a926d951f017fb64b8ff0cc1df79e9c689d9a5cb88fb0abcea96fe80ed79
+d893f6befe2db5ff8cef3fe5bb79dd11e0c033e59ff2d578e091bff25ac2dc6aed3986e9
+d850cd1effaaf179c564bef124c649fb3bc0fb9a5eedacca49ff3bf9d15de030b6cb4096
+facd5bd880ccf612feb5f16df5baff8647b7ff3793fe9d69e086b6f15afea5fc9bec77b2
+d011edaffe823d87c6fe5793fbc12acf80ff88b5ca96e105ed994efe11bfff80e5c293cb
+a4e47af2ae4bffb75cf938ff4ada78e0a24df22ccba8ff09eb52dd85c4de47e0b6fb6af8
+94c4f472ffb062fe3793ffb33dfe20e79744ffa2bff7a508ed95d95be045afecacf979b3
+e68bd8a5ed4be4ba1bfe80e595daa619f1adff77f5a9ef1fa5ed8ffd5fa5d87dda25d650
+e323d9c1f27ceabf1ec4fa0fceff26b0ca0ad35ec3fe33ed9fc85194eecbf5972cc1ed12
+a7fe6eef3ad3f769ff86d87bffafcd94e35ff5a131f84cff20d861dd9bcc1fe196d07eed
+b8ff33f9c391bbe54bc7b673feae39f28bfa831ea5d927e944afd82aebd187cae609dc9c
+cbb66dfeb0cb18dd59c8ff6cfb88f781d0fb21e43ecffb5ff306ff72d982f3ce61d810f2
+7bc2fe9343c4dc0fe487c1ff47dd26c6ff39f460fc8df979affb8f19dc52fba5da80e4a3
+62dbf872ed86e525b6d86cff7ffbd832b117ebaff871b9dd5bd894e4a415d836ec4ce525
+d940fb89d003bfe088d87fecaffe31f687fe61f205fba41c93d86de010ff6cf486fad61b
+cffba805cbaffed060ffc09dfe86f99a16ed79baf765f379f9d803e079fa8dfe2ab5df40
+d304edb269bf86fe9e14bfd296b7cb29ff42afee91ffb129e54dbeeb935bfbb939df6bd2
+9ffa86b6e795cfafdf09cbee33c7fe95d66be62aff48f4c7934ad898fa52ff7cf6af3be0
+15a5f7c4ff62d946cfff7af608ff52c6fe86f4afd09ffa80eeb233f1acff50fb0ff3c255
+93e0bb45b6d886d96adfb1f644fca5f095d921e041a4ed934ed8ed6bdd5498f18f4fed02
+d84cc7fb5aff40a5d82fe44794edadf140d261ec7ac2f479fec134ffd8ed5cddaeff7af6
+54faa5c7a0fb25de72cbfd86d2f809feafce7afe98f207e76df251c90eff4286febd82e0
+aa4ded08f47bcd93d8af05fbbeff19c0de99d904ccf078bcea85539fe287fc9c26eda5c7
+90f1b76ddaa81cff61c1e058c6fd6beb7bda95d4a53cfbd001f0a8fa17ffaff452eb7add
+c15bd03cc2fe7dcbff62bbff7bbeff24f4c714dfc5aff679f0a96bdd88ccfb7dfec1afff
+8634c79ff3bb93fb1b9adda75ae6a01074f62de54cdb1de562de0be269d755f838a3f05e
+9cdd7fed2ae5c255b1fc93d91ee078ed9bc2f29f56ff62f5cf83ddaffe5df275ff88d932
+ade49339f362fe5abffdd23efec7fa38d20be0adcb4ee540d623fa48feca8bed0ba5ff1b
+9fdd42c92cee79ffbd78b8ff72db82e99f38bed22bfeb60dff80f7a661ee9630d8f30fe5
+3d99e47aaaff6dfb2f87e034ffbf0af5b624e09e07dd57d4fb6fff0ce447d8afff3bc7fa
+86debbc993d86cfbafd086fe94f28cfe9ded85bbdc12c9ff3ad854ffa518f9d633ce62ff
+9ffbba61e01dcde513d8a222ff9c2fc0e012d83cedc284f15efbc782d894e090229ae493
+05b5e979f288fe66fbaff381e292ed9b5bf67abdd979f3ce86fea5f959df19d8f72996ec
+3ad367c5fb79ff9bca51ed9fe02edabf01c3fbaf58cda7fdd85dfbd24be295bffe9dd380
+e2a5d86af15ec9fb87f6b81de093cfa5ff68f081e5960dee4afc19ff88f19e3bfeb635d8
+4fcd30d805c7ff68fa79b8ed88d973cbed79a3ff87edaf47d62efa93feb67bf889febf5c
+c4eb54b4fb9ff5b555fe9bd228b0ff16f445fab2ff4bd8f37ac0ff4ad72fe0c10f98fb62
+cc02bfdf3acefe2ee5bc47e10dd88ecb9efa5cabe4c765fe93f726d8b313e582faad67c0
+fb5aff9cf272e58ef12886b6ca0b93f8c11fd955dc1cee4bfa37ff86d9ab51ea2999eec1
+52f228cab612d960fecd79d9a5b857d90acbed80c6f577ff84f77afbaf44eca5e431affc
+02fa9642bfe058d90ecbf17de9c151d337ed4edd3befa8fa86ff8ac965d024e0af0ceea5
+dc6ae09fcf68dd7aedb961fe2baed96cf9b67cffc535b9ffa5f785ffaf54f26197ff7ff5
+6bff24e881cbed42a5f20fd85ee051edbf60f226c4fe0893eb86e04bd314feb9d9f742ff
+afed35a5ea88f27bffc193d09ac0e517ffcf7cbeff45a4fe8ae57cfcbfa3f330b4ff38f2
+cef76bffbc5ce003aadd18e5b1dd5ae096ce22c1f362c4e566f1affe1ff694fb79b5ff02
+9df682ffa5c77ae588d803d63ded1df996ff62f7cd7dff3df8af2dedb60cf7a41fe0c59a
+e580edc01ddd50eda7e55ad944d819e09dc7afea22caa9e051d861fe0987ffd07ae5b0fc
+95ff6dfaa5cf88e456f2d8b21db8ff88dda24880bfec6fde65cdff4efb06ccb15df70ffe
+51a5f29036fad867cbe907d95af535eb4dc6ace085d87d2298eda72ff978ffca88f1a53e
+bffe1af579fe8eb6ff46add814d986debf46c3e537c8aedd2bd9af07fbb61fff59f280e5
+79b6d841c0dd9347e96ed888cafb79ffc96ed0ff864cfa10ff419ffe93f786d917ee78fb
+95f265fa07fc79b7ed3bbffb86f2afbfdd9822fe9f46c81dafd902dd43ff97ccb746eda5
+d930ed64fab3ff039ed82efeb979ddbfa5e53ceda2e07eedc64abfe0ac13fdb56cfa83d0
+9edb93ff6dfb1ff652fee1bf42c3de8cd8a044fb53d1ff9361d9a4d856ef0cd09efb7aff
+6cf35c9dffa666fe8cf366fe71f2d561edcb73e0b5fe50cbff7ae8a513fec1a7fb01e556
+b8d73ea7e854bff2aad493cbb0f277d826d262fe9ed0be28afdc88d851cffe83f79c06d9
+a132fd4af1c268d9f978f4d081fe8ff0af1ff984ff7af76cfc9fcb20ed87c3fb79f2a411
+ed9739ff61fec46cd7b822fb96fe72f492dc2cd8afef1cff49cb02ed9cd991c8a04dff94
+f360fe21eebe7ceb9a0fc2f286ff2de07cdb86e524dfa4cb32c1e409d0ed20d840e1a1ca
+4e93ff9a4afba52795dba909f15afbce82e02cbdf279ff1df387fb2cfe9416e669ed5eda
+06e55eff7ee0af37f458fecd38ff79f8a617dd5dccfe6ae5c591e66efbb50bbee2ab4ced
+35d85ac9e969d813d03de0c251e5a5cf39e952d18ae0c366f8d583d99c28f946ffaf6de2
+0bd83fedc386ff4ba5d879e586df7bd05ef007fbd478d813e3aec967fdd62afab0e738cb
+6dea8afa3aff5bf6c03ff9a9fe87f581b9f883ffaf1afabfdb16c0da7bf0b9fa34f5c693
+deb938f05bff68c79fd9b45fe1afd976e0afc2ff22f8a5fd97c7b0f20afbc986e0a462ed
+b5de30e6c593ff2dbaef4dfa13add834ccff912cff9cc1f67bffa341fe8cf386feaf0af6
+88ff6dd999ff19f641ffb026b6f217e5b988e77bf1c153f89effb659f296c1fe3bf5aff9
+51fd28ffa5e88828f9b6ff8743eab80daedf79db85ff9ff705d0abc59cceb583e36fd823
+d560dd51a5dd6dd0ec873af7a7f237e610d383e08c4cfa239fff93d986e026f64cd0fe96
+09c3f73afe4788dcbf38ce4efa2a9edd934cff08c1fa94118ff39f56ed7adb71b4d59ac0
+ff85ed9450efce6adf0ab5e41adfc09add53e2c55dde7ad82ab5fb5daee069d97dccfb5f
+c3fb7affcd01d830dda6d079c724e4af04ec85e0bf1293d895dc83cb62ddef933ba3d1fa
+6fff93f74cfe3dd01fda5bb6fe4bf217fd48f210ff95f079ff2afbcb0efa4596fdb979d8
+65fec188ff4aafffd86bcbea4dd107eea5fe7ae69334bfed6ca4dd80cff59559ff7bde85
+ecd067f0c0d97ae841bdfed868fed201faaff61cff3df25ae163fbd8af3ff786fe78c3fb
+61f60eadff2798fbb6fe56f4c811f2cb86fe97f10893e89e4cd834a5fa85fe60ff11f35a
+f977fcd06afa5e9dd9ff34f255f719fe9e51dab9ed04bfd934e063caa5ed77fb93f1c678
+d992e079dd87d8b947b6d988e45c9bedc0ade00dcdff2cdea544f398c3ed0da1fe86bcf7
+7cfbb641bbd814f2c6f943ffcb24f0b501e1c1a0ed10feb63cffb520a5f38cd0f15eb6c9
+3cb0e29333c4e57cdd94cf26c7b716ff99beec4fd93aaad87dedcf6dbeea8636a5e6bd64
+e0af3ee829d455d8ff3cc0ed87e2bf4eecabc994e086d888dd39a5db26cdfe44b6c6a2ce
+abe279d0ff6afb7af55aaaf1c198f209afe04fd8149ff92fff51caaffe38f6a5fe03f3a5
+bfff8a61ff7bf3a05aed7bfbafcb20fb5db8db40f218a4d86add98ed80ffa55090d89d5c
+fbbe78ff61fb2cd7a8c77ae5c15ffacf4aff1d9de427ffa3f277cfff8a5bfbaf06fea5f2
+79ea61e421cba5ff8af225ffb93bd9f902c3f2d71693fa7fffa0bff76ffdbb79b1f60efe
+62f29ecc16f646afed1fff9fc0ff7bf6b087ee68fb0aff3cbff40f86e01eb3ce9bfe861a
+ff5bd8ff7bf386ffdd65eda2beed079ee57ceb67b0c83fe016d0e52fd84de9c793d702e3
+6ddf84d0fc77e562c4ff30f454ff1fe061d9b7fe1cedadd051eaafd393f279fb56f71394
+ed9c75e586c6fb79da6ed818fd48a5e0bf43c2e484dd4cfaa0d091fb79ee05cf93d7af5a
+fba779afff4a95ffd031d84ded0593dcae17c6e06adb97d01eff79e585befb64b6cb4aed
+16e052d91bc0e088d87ced5bafd8f79fc3ff47dd2ce0afcd87be42cc26c7b83bb3cc21fb
+61f7c74cd91ccdfa7efe86f553b7f795feb51cff60f299ff53edad30f3be9bd96fe0a5c9
+94ccaffb05f185e567ff10f69e1ee447bfe021d986d5ff32cafe04ddaf42f3b0ed53e698
+bfee0ef7a0ff5cf52eb6d70afe43adda62b6f54bfc86eebf2dedd868caed60b6fc9df378
+c3fe44f49efa2cfeac42fbbc93db3affd02bd8fe79f495c980fe93f2a92ef347fac296fe
+33be57e670ee93fb60f738d9fd93f8a5fc5ad8ff79e493d6b574fb99ffb64fda25d893ed
+74c605c072e08ed8b628b8d911ffa1ca04fe43f9c00efd3af64a93e4b343b9d891d97cc8
+fe80f9a560ffaff34ab0dd51a5ef6bff9fcb0e93fec360fa7bd886d923d86dcbff7af193
+c1f830ffc87ae0c10bdb6bfec01bfbaf23d986df0ec9a8e26bd987e55bd87ec9e579ed5a
+aeed6ba0f89607e2ae33fbb60ae64dffcb91dfa61ee980e58efb27d8b60cb8d87eebb104
+e04dd586e7920cf2bd40ff19eec230d683e59bef6cfe1fb0ff92d9fb3cf549fea7fa8acd
+79e07fe686edb07ded86df7ad9c468ff9ffa31f353fd32b6ed0dc4ec9335cca1fc6bf9c5
+87d82ce761fbd934a5dc22eb43fe60f387fba551e5c55fe077edaf1bfa399fffaad34a98
+dd75f4a1fe44bff859ff25f9bf1cc1ff92f106b5f82dc4fd03c0de4becc756ffd665ead0
+83db9f61fe6dc8ffb643c801aef281fe9ff349fec46af2c19fed16aff3a7d069ec83dfae
+5cf965f40bff49d09fc2e440ed5aafcf85ea78dd39f156f636ff50d3b82aff4cd0a8fe17
+f4b02bdf88cd84e096dd58cf9bfe43c0fe72ee0ae2a81dfe5af694d6b676bef886ff82c9
+a9cf9ee502edbf20acff12b4d088de82d2ed8724f9b0f288e538ce8ff16296d889de5eab
+ed953bdd54ff70d09fdf68b0fe87f373a5db7ebaf026aafb2bc5ed05d94b87efa5fee5cd
+60de36e06dd7a424ff972dfb77ffca4bfe2dfa99cf55fe93d8a4cabc93c0f837fb86cb9a
+f928febe0dcf96e57fd888dbc094ed6ce2c58bfb2fc1e35bd5f9c213ffb507f579ff8bdc
+6db2e31bd993d884cbed7dd8af12f248ffd108e450b6f413fb3bafdb71fe95f252bdfd3f
+f462feb84df3c778e00cff57b6ea05c1dcfd29ed79d0ff4efbce83ec9dd847ff1af4cc3c
+d820b9fb0ff7408bffcb79e051adf593fbd013d965a13dffafd093ff15f6ba78e2c558e5
+bf66df7edbac11f4be2fed05ff3fe15ceb7aafd60fe961d8b56beea5ff23affe15fbaf26
+f71bfeaf0be79ff2659bff9248a5e679edc0a5cb22ea3afad167f17bfb5bff2fb7f743ff
+c97de3ae67f498c2de6ae093c1ff85d038d976e5ca6bd99de32695dda55dff95d87cc6f7
+7fffa53cb6cba3fa1393dca50af5ae24fbbf93edb66ffa81ffd05ce4a1c3e09959f886ff
+ce7ae030a5ff86f7c2ed9518f94ea9d883edcf50feb68825f898ed46c8ff6be5a5ceb88c
+f2a8fb13bff168ffa2f518ffcb3ad861edc866de70eb9bd8a5ce69fabd57d6afdd03edb3
+fe61d93cff4afbbc62f2b704ff9cc727eb88e579c1e0893afabe25ddb03dfd26ffaf4ee9
+2bf261f7a2fb2c99f60ffe58bfff01fbcd31ee43faab2ad95bd0f67aff51c6aff235caff
+68d9b87ae45bce32e599eb4488febf63fe1ef4bf16edb710fe5ebae44ddc2bfc52beeb7b
+c1ed63fb31adf30bd8feacd201b0fb73b9dc43ff70fb61d82acb9ffe32ddb244bde0799c
+fa86f7ba4cf29fd051fb3fff4bf2c480ff1dfb50f56ad025ed93d686d86fdda5c887e6ac
+3ff8bca1d54dfe02afeaa6cf79fe85f9cd7ad988c7fb79d88fe0c006ccafed81d886cbf0
+6de7ba8ad984e367ccfe87ed1d99e10adb6dfe85e479bce646f3c90bfe81fbae12c8afee
+a52edc86d86cdd9fd168e897c2f16ffabe936bcfff44b2fe08ddc093dc7be9943af160ff
+cb86e2279fed92d81be697ff79dc62d879ee93fc4eb8de06e43c94ffaf02ffbd93ca89d8
+af2cdd79e086b8c796e2b77efb19f39ef70fff2efc79cced59dd13fbaad897f25cff19f1
+53e805abf242ed0da5f01afe46afff7fd954ff39faaf2bd8a246f710fea6d8159fe06fff
+c768f1aeea23d854fc2da4fb9361edb5dd4cd3ff78e006cbf951f2a7ff4cfa36feaf41fb
+1ab0cc23e1f30e86e3d56ef4ad5aff1efa51bfd986e0a438f059fec108fa58f6c44ac1ed
+21f7b7ff03e586c6f265fea5c0d927e0c286f12ff408e560ffabef41cffa29ff52fac65a
+dfbf32afed84d956e01eb7fe95ee67c63dfc31d984e09fd8b987ff5ed07dfeda59bacb97
+e75cef18e3a3ceb979f886fecb7aecc053ffb8ef3dd8af30fbbe3994f89cef86c1e01ad1
+ff982591f59f5ef28bfd6a9ae2c502beeb93da72c8e579d8f67affaad8aff8992ae5c237
+edc69dd0a5ff69fb2abffe93d57bebb581e0a67af286afe38a419ed9ad2fff20b0ce6ffb
+88f86cfd41d8a5b9fe95edc5118ffeb169d87ae90a9bffab63fecc6bd89ef986ff61d02d
+cba5ff91cfb56efbc04cfb36d9c09ce5b647c289ff67fa2fd787febf60f208e950df17af
+dd389cf29249c3fe7bf3a4cd7cffd14bdd02b6ff68f0af3dc2f9d838e9c62bd946d8ff38
+8dfb80cb24b5f806a0ff9351df9d3b75de4acafd8f61ffb463e445ed11e6c29ad962e017
+d851fecb34ffba09fe3bc5fbb5f451fbc39ac0ea4bdd1ae147cc9fed79e45bcc45b786f9
+bed915ed9fdb92caf236d0ee934ce418ed40c6a6f192fa5af20bde62f8c30f96ecc493ef
+2efb1afa86f6d636dfb6ed79ddaf3efb7dda8affc296ff67fbcf22d7fb9407e04cd910e3
+61bffe80c8f442d879fea5eb70bbfe7ab7ffa0f7b577baedae43fe9fe063edd432c6ef0b
+c8fbf193ffb61cf2b9d804fb8afe81ccaf5ef20ff9acff88f324a1d96aecd06bde9911e0
+85d387ed68f681fe99f383b6e913bfff23f87bd9fe35d24d9cf45aff23f84aa5e08b01c1
+fb98ff7fb6e507d947afda7ee59fed26ddacff801ffe66b7d493d8be0dacec93089fff25
+f79bc2ed5ad6ac37f24ae5b77be9a664ecc0a5fa81ff8af51dafe15c9feb93cf10dd51ff
+08a8e01ad052c610f4d31fddc088f046ffb786eaaf65ffb758af02d879ecc6439eed79da
+20b8f732ff84ecc5439dde79bef186fb51a5fa80ffbc6efe1ddd3cd90cd731d853c7ff77
+fa5fabdc93ed17a6f288ffc972e086cc6bbfff79fbaff22ada52cafd66f795c2ff19fbbf
+44affe7bee5ab8e2c6a5f658ff3bf39ffe4cfbc8e552d062e521a7fe1aee84d8a5c904ff
+5ff7c933ff5abded41b9d486fa36ffcd19fe5df788d893cbf35bfb84ee93e4a552ff65f2
+11c6a9cd1efc5af798d92ce5ccfb87f65e97ffd252f5c1a1e373dd52d0af69bffb34ceff
+5de617c8e527d84fedca56f27dfb89ffa6f87afea52ed993e0c23bfb64c0e654dd05b6fb
+39b9fca5ef1ed93ee571d191eaaf33d7be6ded86d86994ffd250d938cbf48d46ed11df77
+cb64e079d9bf6db2f384dc8affc968e0b1ff27fa6ee086da19b0df75dd16cb9fe555edab
+db69b9e586da78ed37e64e9fdd93d929ff61f9ca84e09bff7cfa79da80e014cf88fe649a
+49e434ddc11591e0a62eff4bfb99bef628ffd87fe4ad0dc79fd9b35af0acf71ca5e7afc6
+60ecbf47c5e007d3f257f60eff86cda2ff7ed896ec82d8a5e40fd85fe7b1ca94ff57f90b
+f397ff22fa37e14aecc40c86f5b6fc8705ffc093feba9bedb02bf5951aff3ac4fe03ec51
+9ef6944dbed093ed51fec493fb86f59afe6df924ffc60693f3a54cfb32c8afff7cfabf2f
+fe6cd482dc31affb27d056d838f24bffa4bffa40acedffc0a5fe70fbadf841fec594bcd3
+09e06ee59504f161f796fe48f98fffbf6188d2fe8e07ffd82b96f286b0ed6bb1cb77d69c
+ea08d93ef525fe4bf72dfe7cf488fe974cfe12bfe080d865e07ab5d898c0ff79f7afe99f
+1c95e5d171e05ccf43f801ffd06ae5c2a4f078add87bf9d10dd8f474fb11b5d8ad3bed4d
+d625cf4fe0b7d99661c1fc29ecc397bef91fa2d903e186c2f00dfbc1a4e079d993ed86e6
+9ad2ba2add61edca1978d920cfb92fe06cd787ed18f379ffa7fa48ccfcb4d930e088edba
+32d001dafa9e42dfc15aa4e5c313fe5dc1ff1dfbbef14abffe7ce3abcb6de0aec561ce46
+de26ceed7cdda041fea6fb3ec3f15cfe14acd82ad95cfeb8f346a5f228fbaed983dd7bbe
+fe25f959dab831fbbf42aefd8d35e4c499ff29f59fbfff7cf28efba73e88edafe07bd988
+ff0cdf6fe8ca65ffa8f741afe4954bff04f64cfd15feaf08fb61f593ffb582e0f393fa7f
+ef93c4f20ed961dd50b0d8388dd9b8864fa0ffaf21cb5df586fdaf2fc0f181fdaff76bfb
+b677e5349fda94378ffba561f3bf58eda4c71ff099ffba9ff26db5fa37f6b2c720ce9ffe
+06afd187f455fb92e32fd861c9fe7fd8a114ffb632fb4aa5de86d810ffce6ae093ed62c0
+ffa548f179e069da0eaae061d803ecb4fe13fa33ff56d56af2a2fe3e94edc11fd5a5ff5a
+bded7be59ec7b3db6acbe484dec24ed00afb5d3add57e009ff4bafff7df888fece67eec4
+fe26e4c4ed6bd4fb7be79cd86ded96ff6fd021ed32dc4cd2f092cef748ffb6e41cddc42b
+94ff12fa51ff79dd0de55bc2ff07c1d986ed79f285e873bbe43ced9fe07ad06df983ffaf
+34e564efc961f2c793eacc5cff98ed7eaff308ff2eb4db1fde86d3bb40fe80f7ce33fea5
+f96dd884dd79cdaded16dcb94ab6d8fb4c90f279de7ccef936b6cf5ff22da5ed3eb6ff20
+aded7be8a3d1b889fea8cb9ae567bee835cab520fca50f7dafff8c07f445a6d80eff3ce5
+4cd80ee152d995cc92fea526ff7ebae065d87aee51ffafdb86d580e99ed052f593fb3aa3
+e09353ff17d951ff2ccbf669fec524bfff03ebb5dc10e099beff3e94e69c53f50ab8ed28
+d950fa38cbbb9ec5e95bf0affe05f9a4c2e04b93edc558bfe539f24dbde75f98fb7cff89
+f608aae0bc55fc33ee1699d9ff1dfa93c0ff88fb79c99ff836fec127ffec11c351f939b3
+fb24d093fb79eb84e0b6f2d842bddf83c6ff79ef85ccaefe79f5affb7cff75f20addbe55
+ed03a5f315feaed070e55ced41d9af01fba9c970d5afee61feaec3e588d493dfae46d8b4
+79fb50a8f29343a4f66afa1eccaffe23d1ff8dd978aaf78cd285e668fe6ff57eff9a55c1
+e76bed2196fbb80990f126a4ffc19dff21f8cb45e226b1d07ff12affcd88d893fec75289
+eaaf63dd55d819f24be567d9b078de62be9eefd278d8f173d9a8ed02dc55f73ffe5393cf
+fb5ffe9f1fe249b8f31b9eddc235a3e016d859e87afbd06bfbcb84d9992ff9b707fcaaf8
+6afec086ee2fff1af886d921ed449cf402fc5ff887ff0eed9ac2de61cdffc34cd088ed79
+df81dba538e34cffc95fe014feafd71ce045d815d6fa9249d97dffca5bd8ffbb68fad981
+0de063d878b5f59ec2ed37feb5da9911f263e56baef5d844cbfe0bf775e286d888ffc404
+fb93f44afb2790ff9f0cbffe5c86ffa1bcc998d1adf81ba5eb37d1f686d9fe68c1fb2793
+edbe69f787fe9fc9399bdfaf3fff4df5c979edd09a25c2de33e347afdc8ae0bf42c5fb7e
+b9ff6edca9ca1de5be9fcf5cf32ffea520f086feb948fb06f361fbc37ef2a61efd93f2a1
+4bf995c2fc93e1b929c5ffb4e43ba8f38840ead29646c6fbaff393fd07d058fe86dda248
+85ebc1acff2cbfe00da4fb9369ed96ceaafe12ee4395e1b632c787d8b0e531f3aeed3bb8
+e2c34af116ff30dd62edc779dcaf50cbb40aace081cff858ffd040b7c629f9afff21f593
+c3ec68b5ff4689d8ff79b2f693ffd379f35c9affa565e2d014ebc16aed99d54dfb39ff93
+d586e8c095e218e7a7c79ecebc0fedb830c0eb66d93acbe374ed29b661fe78acf386139d
+fad819cffb9f1bffafee864bc435bfed92e019d56df2befe3efa59c9a5fa50ffc537e5d4
+af2dff41b8cfa4bff151f7a7ffea5bfe7ade65d886c8fe1d93fa88d978e97bff9f4dfe13
+fa98ff65c2f140ff60b6e5028bd9f270e062d888d670e50aa6e01eceadf32ebeed17cb53
+b909fe35cbec0dd8f13093fa9f30ff4bfa82f18ad873e00cd952fb3aaed87cff5bf740ff
+b06cfa9ffe7ad387ffae0cffbe9ff7c402c6e543d0efc05092e8af7ac1e06fd82bdea9d8
+fea05bff7af75aff0be591d878df01ec81dc965ef8b71decc39de760fa28fe83d86fd91e
+9dd005cb95ff21f94f9cf2d832e55afbafcc07c0e585ed88e023d8fa74d296ed38c9a8fe
+b01bffa5ef10e451fe9fc1fa7afe61dc75fb599ffe81d8fa99c3e57ab6f955afffc84ee0
+bb85ddb429b7db18eeaffe79f281befe61f227dd92d885e5d51cd950dd08ed52e589d03b
+e050db96f068ffaf31feaff664fe32f752f494fe62fa0186eac51fceafe886d8b322b8f3
+96fe61d626f2aecd86ff7efb6dbdf396dc62e50cfe93f267f8abfb43afda6ee6cf6cb6ff
+a5d68626f28bfa2bd7b93eb6ed932ebdfe12afff83dd52e398cb4abffc7ef2af36ed56d9
+87ee11e797c4e166f2a626ed4a96ff28cf8ce761a5f379fdce0cfea0f665ffc2449fdd1d
+c7ed01d988d172ed16f94ba5ff92f385fbc398bafb5af480ff79fa2fb8d884e578dd10cc
+9bd887ddbf15b0ec87e4bf42fba5f23b9dde52fba5ff30cf87f19fff77e907df51d83be0
+03cc4fc0ed87d2b53dc5bc38ed5ac1f583fea507ec4dc80cedbfffade05bda6dffa4f84d
+ffadeb5ae1c763eb1ef66dfb87ed79b6d122c0da90ff26c6a1feb83cff04d83fdfc091fb
+d869f0a8fe04bedf19d845a6ee6dd83ae0ad70facf7effa760e4b8ff3bfbafca79edc055
+d035e0a546fa2dd7a5c8b410e9c29ffb0af25ad894ff58f104ff42a0fcce3bd85dffb271
+dd83c7ff26ed82dd6ce652d919cb4cdabefe6df5a5f286ff91fca91cff53f8a5ffe092d6
+a3e518d137c0ff81fb7af69552cd399afeafe805d86acf7bdc86f79f48fb93d1a5d936dd
+07ff45f68eff6be174b6f74fcc86da7deda4fb79ff61be0eb8db4386d8fb7bfe8af7c65a
+dd86fec004eab726e250ccf4934ba5e09643feb32afb86f6b66bffbe7aed86fe23f2d193
+50dd80cba5fe23eb86d77ee4a5c2f26093ff9df125d0f50ffe4eafd262f815ccaffe7dfb
+8bf7a73d94d8b916b4d94dd82df6c993e07fdc156afe26fb62b6ed97e147d0a5df3eb8fb
+76d8f38646c2fb80f218e537d809cff0ae2fff5dc0fe7bd886e09fcd4ced01d7ed79e41a
+fb51f4be6cc3eb1bd1f59fff75bff2af3bcd5ae62497ff19f2b07cfbc659f085fa9a2efe
+b5f20acef17edcc499de03eccb1ff1cc14dc6dd99949fbbcff3eed69c6b661f42efbb34c
+df23e6c70bd96ce552b7cb95ed77fac09dbbed3a98e05fd822edb3fd2efa9ffe7aef87e5
+bc4af225d85bf1c7afe080c8ff50f787bbf323c2ffd219e1a50ec5ef9655dfb2fe9ff96b
+feb975ddc19af10faff343faaf13fbbc9dfeaf36ff95d3a6e09116fe35a5dc9357eb39d1
+fd1ee493eda5c9afed79b7d143e73395ffafd811c0ec7cd96afdbf64e50efe49b9ff5a9f
+df935effaef737ffafd71e87d8aff937fbcd9fdc78cbff93f979a9fa90fe82da89fb31d8
+b604ee4bff79f9c70af0a1ff67d086ed5be03dd00efe599ed97bfbaaff98eb419ff20e93
+dcaf15ff5fe5934b9ff580ffaffb30bbff933ac650b6e9983fff1bfa64cca2e688dd79c7
+ec60de2dcf65bbca61fa2bc1ffd886cef84effc986e0ad5cc767ff07fa4dff38ccfb69f9
+a3c4e0883cfda5f75dd521e99f2cffadcb93e778ceabfe3df8afd854a1e082ed69f7c2f1
+1693e09907ff51f1147fd939bdee49d72ec6f91cabe061ffc689d893e060a5feb649bae1
+0fdd76cd93eba5dd91c6ff09e6c039cc017dffd179fbcc42fdc497db74fab5ea31d861d9
+7bcfeb1dd9afed90db14cbf37fd891e033ff51cf25ff3da7fe86f292d9fb0de5afed8046
+b3e85f99e3ae31f711fb88ed9ed8b67ee090da9e0fedbe74ff08f5ca62d837dd87ff79bd
+df934cf230c1fa20ef71d980eb0bc1ed61cd06dda54b8fffd053edba7ad992c5f389fecb
+67e087eda560c2ff7af09e44fe2ef40ebed939dd93f679ffa5fb19ff75f966f235b7f45d
+a0ee8afadab521e752a6ed78e52ec1ed03d86dfe87f121e45aa0f67afa09ff6efb86bee3
+59ee7af4c293fbb583f1cb1cd953ff3aa5f2934ac5fba5f223fec105fc84d8be9fd625fe
+48f7c51ef461feafca28de5cd9bb85ed7bfeafed45d0fa5bf5d885ffa561e093d617ff62
+b6fe29f693ff7afdb6df39befe80c7f728feac44e41d9eff0ff551ffbae640d816cfe57b
+d985caff73fa7eed31d7b446b8d95ac926d89ce07ac8affe62de47bf60f49cbfff07d985
+fb4fb0fe57e0afcb50fa86ffc043cd5ce5a3d048ed23b1fd03d2b219ed61e4c04a94ea9d
+d27be7c55cd8ff8906dd6dd67bdd93b9ee4bff3cf6b780dd6ba5ec82d830e078f393fbad
+4aff1ae09f0cc1fb9704c9b716eb51d0f2af43fbbe9dc4e586d875e442cb24ed61faa20b
+e843a5e069d5fb6db7de79d9c094d8089af386fbb959f1a5fc479ae228cba3fe63f396f2
+84f488fe52fb1aff4ce415d87bf193fec334e068d059ee9fd979c6f49613eca2c6b601ed
+93feabc62de7a6c2ff51cba1ff6cf99edb06feaff567fe09f6a020feac27e0afc0ff51f4
+34fa62d0b181de78edcc14ffd05affa6f893fe52d21fe498d6be6af3cb8e5fe5a8ff71f8
+9bda8a06ffc387ed33dd3ef24efbc09ff9b384d97ae5cd6dfed186ef0fa0cfff4bf7af2e
+fd6df7c95ddbae3affbf1fd0aff367b7e806c2df1fd839d502deabed83d093d886f7b0fe
+2de50fadfb86f397feaf11ffbf2388d0fb62ff35f2d078d91be086fe7ef76094de7dec3c
+bed834c3ed5dd727dc84e06dc7ed66cbf371fd3194e1afcd9ce51ef3c102fe4d9af3bd30
+e5b60ac641b7da8bf16cfa32feb247ffb8f232dc4ce0af28febbd96de55aaafa7afe99d1
+b002e05dd5ff12f14db8f2af1dff5abfe93390edc561eca5d345afff27f4a1cb7aec5bdf
+15c7ff79f96dafff81fa9affb93ab6dc60fa32ed993fcbaa80ceed4dd81ed83be5bb6ae0
+aaed47bedf89d8994bffa8f861f042dd0ecef42bfa5bafe586fe75a5fa80ff52c8b3fc3c
+a9f79350e59dd9f9860eff4abfff58e4a5caafe08952f179d998e8aaef02ff4eceabdf75
+d0e68616c5fb7bd887fcc78342f6b223fdcf08b4c91eef86ff93ed2cafca9dff8b30e096
+caa5f97cfbc10193feb71dfb93e080d075e409f894ff87fbaa40d3afed52c0e061cb79ec
+a3f60be8afc779ffd96dfade599fff90f984f062caf841fc6bffa528f67afaafd82fc89a
+d2b99fff74b6d895c5ff1ff148b9d90fe0bfa5f91896e4d010d8ffc215ba50c2ec89ef76
+a1d87aff41f82dfcc3a3fe3af75dff85e47ab6f61293ed239ff8d869b3eb1cee3ea6fad8
+79eacb6794f6e060ffb752c534c1f563fa3ed8bffb5cf749df29d863daade53add84c3eb
+13ef61fe86d954d72cdc61ed93e5249efb10a5f01cfc58d37eff9f27feb706b4ea2089f7
+c503dd5ccb94ff1eafd093da0ae5b859dc11e864fd54f307fe66bfed47fb12ed88d96acc
+ff7bf3963ae585cfff498afba33f86ddf57ffe43de13d4f926f292d894d879dd10c0e077
+d025d844caea7bc8fb5fffc138adfe39c2ff7ccde7129dff2ea1ffd951a4d87de496d9fe
+6fb7d893e78118da86c1ed71ffb5f244ff5cf39dff497bfeb7d923eaaffe71f5afcf03fa
+5bffd87acdfe4dd894e024d950cbf36ad6ef61c0ffd93ba7f297fe2bdc6fe079ec30c2f4
+7dfecb6fffc493bfe080d88ee024d5af84e0b84cb4fb9b29e058caff6af25ba2edbf61ed
+b5fbae37d8a4cbadfeaf5fcb6de60bef5bff96fa55a9fb91f395fea42cff4aafd881de94
+ed79d955abe05c93f3b860d4f08718c1fb31f314fb499eee0dff27acfbc2a5ff04afd894
+119ee0c0a5cc0cd8afdc9351a6fb9a36c3e89b4bffa1c8b98842f5b668e57df96cfe88e5
+86bee24696fba54d7afdd672d07aedb9f64dffb6fa9e55d738aee09c45f218a5ff38f65a
+fa79ffc339fea2f20be8c0a9fb13b0d822e0b902ffd82adb62e997ff23f15185ed9afebe
+4ffb73c920e486d9bf18e166d861edbcd89de509f24eff07bff189f703febd4bd8f9bf3d
+e4b6ed6bdd90d0a7bfe07bd886c8ed5fe142d09ffe35f6b8fe8421fa69f686fd29fac8f1
+43beff8e19bfed6de43bd9f1add02ceda4c736cba9f23cfe12a1ffc728d8f3cab612ff36
+daa70a9cd8931686dfafff87fa20eeb97ffbc366eda9cb97e505f0af6bd886dd7afe62d6
+a0f57dfe88f9cd79aff794fe08c66de588fbc83ad91bddabc79eebb563f535ff86c2ff0e
+f8c1841bfd5af9af88d2a5fa28d09add69d2ff880e85fec55893ffaf4cfe24f73cfe4cf7
+a538ff93f86ae07cd488e346cfed88e0bf4cc3e2a30285d6e563e0cbfb31d893fe8215fb
+6effc007feafee0cc2dc79b9f25290e69418f96deda2e552feb6fa32f2c8fe40ef05ea96
+d26dffc852e69ad111fe44acd963ccf92bff52ce39f087ea40d050dd359cee1dc54aca84
+f6d358db06b7ff86f67afd26ff48f3ce7be0a5ed3eb0dc943fc7ecb5dc71cbed3be560b4
+ff45affb2699edb1f29e23fad601e0c195ec88ceafe479ddb2cf0bafed26f356d96ffbaf
+5bff38aeed9257f4b6ff9410f7b04886b6fd0eb1eaa7c1e05194f279dd7fff9354fbd080
+d8fa3ffeac45e0c264aff287d679e4b06cb7d393bdcb52e5ac0ae1b227fe60e493bfff7b
+f31cb5e698bbfa91c419b6fb94ed7ac8fe6cb7ff92f2b73ba5fb93f579d4af5ae093d786
+d8a502fec024d0a0f156fbaef38932a3ff17b7fb96c0dd6cebc685f0cb37da4ed0e57db9
+f564fa38ca53f2049cff1bf262fbcb88dc85ff17f2c308bbd299f811ffcc72df46edacce
+79ffc5f15ec9f84cdc349bf8d549d828ec47bfe0a533ed09b2ce61dfff9b28fbcf1bdd46
+fec259f623ff5ff779fe3bf3c179f8be82f2c24fec27d79dfb77c144ee05dcfe9fd965e0
+0bffb554e5d65fdd22d8ffc21bd04ee72bedba08f252f73bffc45e95f879fe88d424e05b
+feb9f253e47ac951ff0ef8a51ee077b6ff70fbbc62ff42a1d97ee6acff9fc1d957d68ae0
+bb50ff60cda5e9b486d9fb2bde6dd8af30fe97c75cfe35edb50593e09e76f28affc81bac
+ff86fac49ff718ff88beff72f6b78308bef1935bff80eda507e07bdb9fe218ddb7d96afb
+af4dedd834a5fb88dc5be940d8ff92d0b47f4af229ffc189d42ff5a50cf8affb8052ea86
+febba0ff6df9cf6be0afdd69ecb7d94de50ada63ff96cd04da80d893fe2aee87d883cdfe
+5dfa15c1ec930af095c3ed1effbe11d35efb87f574fd2d98e41bb6fc40c652fe6496ef7d
+fd47f3a5d020e784d599d957fed82effcf1fe15687eecc6ad9a561e66ed9afe95cd8ae2e
+edd2f3d850c9ea94d830cbff88fbbf4bc3fc8f2fa0ec26cfff0594ffce1ff46eff86c9af
+13f257fdd8adc1e0aa38fa9ee774caed86439ae0bf9ef134e360c4dc369fffc5189bfa8f
+13ffc680fb72eb86d977ed60ff27f46bd89edf62ed36abd98de2a03fc4e0af2efe5bd8a5
+50f993e526dd3aeda5c3fe6df6c87eee8ef423e6bf3dcb9ee168dd79fba7f317fb6df2c0
+62e752a4fbafd8faa03de501ffb823fe953bc1f922fec35a9e388dfeaf0dfb61f79d50ed
+2a93f3a562edb1ff7dd85ba7ddc15186e3afd201beed73dd93e09e1cff5287f780d85bbb
+fb3e99ffb8f312fc45afd87efd1795fbbf4893fec132f1bfa53eddadcb45f616feb1d1a4
+c6b0e14cf514fe9fbff128ff56f3afff6dfbd07ce086f1cb6dd87aff68b6cc06e74bd3af
+38de0ed89fd783f9a8ff1bb6ff07edc041d887cbbb2a9afa86beed7e48bc0dc0fe86f158
+d2f279c5fb669ce27cefaaffb9e52bdd86c3e077d9bfa9c5e703fed047d910b6fe92f572
+faaff29c3ffca2f837fe50f732beed84eecd04ebafff1ad0ace028d861ddc593ff03f3a5
+c1f074e5afed74e4b45adafb87f529fea5bfe09938fb49f10a9aff7cb7c752ff80cc97d6
+6bd820dc48a5f608fb36aafe17f19fc0f879ff94bcf07bff9afa72ff5ee404d85ef1c782
+d99460ff9ff844ffaced1ed0ff0ac4dbff84e95ed095dd9342b4e305f1cd43d80edc67d3
+55f999ff3ca4fe15fa43ff6dd886bcfa77f6cc3be41ae03fd80cffbe5ae081d98dd77dca
+fb61d83abcfe9443c4ef6bfe7cf290fea765ed79b6cd5be04bd80efe2dd952f4d0841ed8
+9fc889ed3086f9c193e57dfbcc39d7ed6ddc01e54ef70cfd86f881beed78cd9dc0ed87e0
+af43eb20d8ac42fb14e05acf88ec26c8a3fe7addaf4df63efbb7c60ab5e07dd874e4af68
+b3f6923fd59df436fe17fac5ff69d979afff86f791fb84e8c160abf2bf53ed7ad597e33f
+f1209ee0935ff2c096c5fe86e97ad0efb017b6f024fea50ee599ff915ad8fa7ab3dd14d8
+4fcb09e0bc2ff9d93dfa93ff85cb8cd897ff059fffaff050e60eafffcf56ed1bafdd5ca9
+f29321fba5f688d379e0b6de3acbff19b5ff5adf20d360ffc493fe5af3c392d0a8fa30db
+51b7f244b0ed27fb93d0a7cb26eb93dc5ef011fec440f9d32ae0aafb22afd97ee0be871d
+f3abfd29bbeb4ac81df59502eed724de8fcaa5ea1caffa82cbff33c7fea56bff51a9d860
+f92693fa86ff5de270deb766f11ed0f5bf23e04bc0f994ff83f75afecf9f6aedb125b7f2
+42f564e87abfed45e36cff7ffad9499ddb84ffd032fec774ffb1d05fc0ed31fea74695eb
+ac5dc2e53bf386fe7bdb06e051bfdc84e529fe62bff279fed06cffc688d86ee812fe88f3
+79fc37ffa3cd5593edbd6bfe88f164bfff6df6ae46ceec9644c6ed76d09effaf3ecfffbc
+78fb65ff0df559feca5dddaf53edb602e6d824baee15dd82cae54edbc695c2f443ffc687
+e0a5479cff88f3a558e024d69eec931be5bf11fe9fea7adaa5fc1dcafa68ce95c634d3b6
+68bff208e54e95ea9e15dd4be687fa1a9dd87ef1b9ff05f493fb6bd999cf4bf29ff783fb
+af0fff6fd99be00294e7a40be59c1ff74dffa5e068d85ae29dd2bd70e6affb17a1e24dd8
+03cbe54ad80fed9efe63b8e58f50fe12e556d9fab5874bed94cca8e06ed9ba79ff0df29f
+d286f04c9df3ce79fba3ff33bffea53bfb06a8d89c2ffd79f9b6e764d801fec88af172da
+3ac7fa79ffcc5fdd3fff0ad05fe0af28b8fe0cf9a1f321fcde79fea2c0fb65bdf089f7aa
+37d8afff4ee513d964d854dd2eedad0ffba5c837b0d82df29cc1ee53f67fffd840bdfc7d
+cdec7fd9b936b6f031ffaf19f54cfa07f286c3ff88f47afbb179ee99fe86dd25c9ff08f7
+c1a5dd86f079dc10fed8af18f84ac4fe9226edaacd79fb27ff68cafc8954e2b646b3ed93
+0df2c46cbfff78f8d05cd90bd736f27ee4af2cfb54e686ff69b2d84396f6aad56ee586f1
+7dffa5ee79d862e079ccac3ab1cb5eed28d8f942ce05c2fe7bf269caa2fe88f683fe9ed1
+75ffc462ed6ad9ff77e65dde36b5d519c94faff8ca57df37b8fb0df496fb86cf80ddc193
+e082d9bf50e03bd91eb7dd34febb2ec54fb5f8569fd978e035b7fb23bf6aadc537f5d284
+e49538c1fc9a4fe1be57e380daa52fc0f809ff97f463b9e079d99fed52e516aaf4b6ff71
+fb9fce4aed9bd3b80af4a4e320edacdf8728fbbf9dfe31cf53d83ae59bfe42b6ff6cd8f7
+1eff93cbb371afff86e057dd26b6fb36c7b52de0af0dfabc40e9b728fe941bc7a5fe93f5
+61ff8efba0ed1f93edadff76afd06ae057da01fa4bfe26b0ff349ffe97ef7ecbff67add0
+69fad993e279edd55fff93fa5ecda0ffd8f27de09d56ff21f1afde6bd4f818ff95c2f713
+ffafdf5cd97ee01fd3ff59f721fb33db86cbea893f94daae15ffbc86fb60ffa8d036c1fb
+5ef307ffc45aee15afdd91f785fdc417c0f2d704efbe81e0a846f60efeda5fee94fba5c0
+ed7be379facf61edca86e0b179f9d27cf2adfb49cc0bd886beed27e060d3ff8614c3ee3c
+febe2bff9fedb1e376d0ef6acaf321d260fba543c1f212e0a53eff06fbaf28e7c01bc4ed
+81e04fb527ff62fbc2a5d888fb04ed3cb5eb62d835afdd7ded79fe9fd067fcaf3cc8ace1
+80d56afea253fec9ed2ee5c18df31dd9bf39e56dfe7fb6cb93d16ce6b893c6fb4bea01dd
+4aaeec8a4c93dda734fe62d1ea7ae0bf27b6cf18c84bff09d951ed19a3ff9350f125fec1
+02a9e542d888ef6cffb6f847ceaf79faa748d8fa9c65d988f2a5cc79c63895f8a453dd86
+b8e883d906dfafeb86ff7bf5c29ebed051fe6aa4f29432fe03f778e599d009ed40fe4aca
+b682ff86c8a1fe93f24ad81ccb41e419edc07cd9fb884cffb8ed27f3c10385befe62f73b
+cbb175ec93c5f24fe010fe48f8af32fe4df386d5a3ffbe94f862ffc6f660ff94c3ed09b6
+ff508bd8fe7df999f087d298ff86c0dd3cc6fe80d969e498ff64b8eb15b1e0902ca4e57b
+ffc409c0edba50d7fe05e551dd16f95bffd80ec7fe13fb4aa8ff6df75cfc24d35ad828e9
+60f282db92cbfc47e4b1d19dc7fec051ebb893cf9fe569f2d051dd2bed09d260fe85fa9b
+f590ffa52dec9805c2f29510a5d871deaefa479fd87de055d9ff51f817a5d886edaddc79
+edbe7bd9ac26fe66cb5ce122d99e2cb9e315d9529ffa86c9adeda53ce352d82bde5bec38
+b5fc7af5b010ce97f34dd932ccf979ffd03ff4c7fc12d83bf297fe3193f27bb2ca7cff86
+eb88d8a266eeac7ae593edc21ce086ce93dc9fed92fe84cd16ff40f60bb6d786ff58f43b
+a51cfd81fa60f216bfff2facf97bfeba8ce5bda2e038d867d97accf950ffafe638dab6fa
+86ff5af193c3e410ffb6fa9606ce9cc0ff32f99f29c3ff1ecef205e5c197ed1bf5b6fe70
+d1fb79affa80f4d04be52dfc13f5c275ff86f6b0fd93bfe021d857eaa5fa34aeff8dedaf
+22c65295dea65486eda0e371da81d1fb1be341edbd30cdabfe23f6bb41facc5bd93af69f
+bff232ff51fa06ca4eb7fb9abaed6de17aed26afe98ddeefcb68d927dda4fa79d789e513
+b1cf65fb45f70ec2ff86f103fb5abadd74d37afe5fed45e018bacc2cff60f1a52786eeaf
+fe61ed7adf60d0fb945ce066a5ff7ef938afdb933da5ee0ebfed3fc1e023b5ff79d896d6
+83dfb301eaa549cc11fa6df395ff7edb62e6c81dd851fc9ef5affe03fab2ffbb4db7fe20
+ee53b7cc98ff6bfb9ff448c1e06de8d18927ff85d775ff45a6d88ae07cbeffa5dd35e15c
+d2a7c1ff54fbc609d84c72acf492ffb945b4e054fe9bc3ed35e1abcd95ec6db5d64fc7af
+e813a3f625f19cce7ffec39efb51e58fcf83dcbee258d879dc26d793efbf4eb7f687fbb9
+33dd62d2ff79fabbd986ff9966ffa36bfe87c0f13ff75bff31f2bf5dc3ff7bedaece4ee1
+03d046febe6cfb86e57adb39e286d968e032d993f665cba5ff86f65bd4b00ce175d97eb5
+ff09aafec0afed04e593c5fe0ff539b4e623f16df482fe20f83a98dba565f985ffc5e510
+d85be987fe07eeb929f65bff941dff5abffb21f39fff6292fdcb6ad855e008d9a62aed84
+d879fc0bf94dff8efb37f3a3ff5bfb0291ffd80ed845e9c992eaae4eca12ed53e63ac5d9
+09f2cd47e803a6e092cc95d87afb9de51dd9a429ff9cc1fb86f0af16f2a5ca09ff93d66b
+f22acb81f26de807b3e546d90fabeb2af7c493ff19fa3bc999f252e26096fbaf57ec80d9
+9bccf261d994cf0cc7afdf76eccb14f1d08bdb29a34dfe96f71eb0d497ca70df86d86ec8
+f083e53ad0af60de33d8f2bf42ff87fa83ff6bf5bc63ff1ff0a5dd74d7b21cc5afc70fb6
+e583c4e13ca5f18bff9e51fe0df49efeb586fc7aaff578e55bafdc7cfbc875fe19f04de5
+22d48af860fec96bec38afd869de9bd643eab65aee0ffec39effbe1dfb9fc1ff6dfb97c5
+fe79df58db43bfed93e586de6cd815f3ce2fddc21df968ff5493fbae4bffa6fa53a1fe95
+5effaf36fe59f5ecc96add7abef15df73cffa5fb06e6a444d8adff72d9fe8df7b62086ec
+aee433c6afdd3ee5cd94d9b53db8e92fed9ff549fe95f730affe79f4bc5ae417c0f288d0
+5ed831e0c527c1e41cfebf98ff29f3be32dd5ad8a5fe85b7ff40afd89345f6bd90ff25f8
+3dff87fd78f6d073e0b55ee43fdda5cd45f029d8ad33f24acf9ffe81f9a263d85dfe2df8
+9effb67aff6df0a3bbd62ce5c413c0e374da39edc405bfde7ce393c1d97a01a8fb36cfff
+2ee07ed9bb4bb6f17bfeaffb0297ed2fbe10ca5ec5fe950acba5ed1e9afb9307f74cfe9c
+f77bfe85e066d879e06abedd4bd520ccfe7cb3d92ede73fb84f26af8a0ff80d89337f786
+d7b168ff8bfa80dc35c6ed6acaf409edacd010e079d293ebb31fbfdd2b9afbc14bf193f8
+73fe83d993dd7eeac291bee622b9ec06c1ff27f2a5cfba4eca37ed9ad340fe5df4af7afe
+9ff729fe84d88eff86f330fb4af81cafffb9ee86e6af61c7a5fb12ed93dd5fd035dc62c6
+f77accf493ffa5e046d7f979ff67f8d04bedc888d86de013ca52d009ffa5f021cdff7df2
+9dfb943ec2fa66ffafed15db98d202dd44ed51c4e0ad4fed17e8a4cf08ec6df3a00ffab6
+7adb84ff6ff99ff158d973ccf2a253ffc41693ffae1ab8d20af362ff59f802ff61fa79f3
+68cba7e07dd9af02fc77ef87ddac0dfab779e005cbed3ddd63d09ded1bdd46b6d89ec6ac
+d299e06dcd5ad80cf29bfe51ccb163fa25ff83f98af2a553e09f4dd83aed88f26cbadf3a
+dab279ffb461ff31f3c096ffa6fab7c63ab3fc9343e519d86ae0afdc25e09f4bc0feaa47
+ffb779fab8a5ff0cf1c29efeba48f6b788ff54e0aad93bfe4fe629ddc03ac4fb0bfe4988
+fac679edabe039d0fe66ed9fc0e523b6c993d9b717dd94ff31fb4ff73aedc194e51efa51
+fec269ebc796fd74b6fa90bce95aaffb6bf7cc61ff0cf252ff42fb2df979ff89de1aec85
+ffc19fd4afe016d82dd0fc0cffaefa86c517b2fe1d9bf2c110e6c22ae07edba957ee26e5
+4691ec86de5edac0a5fe84f708ff5af279d1f48739e1be64ed99cd1edf87d96cfb3bcc68
+da7ae5c922d887ff64bfd79cbbfb5d93fea57add9be1c007e5af35fa6ded86bede4fff3b
+88d1fc6aed3fd0feaf46b6d88ed894d086ff42afd891d880f2af1aff3aace01ece50ff02
+f5c980e4a52bed93e085da88eda2e093ddbf47c2f978da09e03ff5519aeeb6ff61bcd981
+e424b8ff9ee552d5fb4b8ffd9453f1acf903fed189d97fd6f41cffa0f804f15fb9cf52ec
+93c7a3fd0694d8f76dfbca2bfe58f373fb30d093e085fa11ff40affb60ed30aff206ff66
+cdaee51eedbc30f755ffaf68fed885d55af7219bebc5affaa735d8aff75a85ed9ee469f0
+16fe58dc76c9f561ff2be548dabf64c3f65aff93ef81d6ae42ff10c1fe7ed85bfe33ca17
+bf51fe21abf09e37d893f288ea7dc7fe874899eb933df26bd0ed5ad97aefbf7bceec61d8
+fa9e5dcbb78437ff61f6be5ab5d03fc1e97bff2deda6ca67e636cbb0ff24b6ce12acd980
+e2abcb4ee779ff1fef97e4be9ded8ad37ff9ce70e093ef15f352d861ffce92d87ceeb925
+beff01dd78cdfb8710e260f196ff0c9de0c22af907ff83e5a9f21dfba512e098cca6fe79
+f79dee86d76edf27b8fe6dd9be97dd5ae61ff4c09be6aaf3d97acbfe70d1ff63fb4ac91f
+fbb804e5c8fb1cdfc1a5fe4694f601fbaf28ffaf06feb623d0ff44d9f0abc3df1293fed9
+6bfb964ccc9fd886fb14ffaff986ee5ae579f196ff3ff7c00affa0c1f45dd8b652c82ffe
+51d904e7b525fbab43d8b99bff85e7a245f017e041cef559a3f08cffb045c1fe7dd81cdf
+86c6fb3aff89cebf52cbba6dc4e064d4ffbf4cfb08bee02ed812dd35fac19ae537b4f260
+fb32f7a3ceb278f166ff8404f7a542e911b6e49bbdff9fd86af7b470bef264fb0fc9afe0
+79b7cb64de77e198c96be575beed931bfa4c99fcc53195ed0ed9bbf510fa4bb6e09647d8
+1ad0a5c3fb42e588ebb46cdd60ed14a9d981fea5f98fc4f26ffec279df86cafe61fa34cb
+b602fbc67efa99fe6f96eaca4ad828e5a5dc31edb9feab48e860d9b3ed5dfda5f520ff3f
+9eeb8d52a1ed88ec5ca5fb7bffa5e9870cff79f8cd18e08dd8bc69ff3afb12dd47d1db81
+e0c097f35dcb1ced53e538aed943ff31a5d88bdb86fa20ffd839fea8f538f24ff69ffe0e
+87fbc4a3bfe778efaefa79b0ff8761e4c2a2f161c1ed91ff6ef83186dcbf55d025fe9ef9
+93befe3cf202e64ad918ace09f38ff4cf71bbee98ae279f2d76fb5db50d22bd9fb14abfe
+93f381ff79f99d4a7bf5c493f38618a0d832d978e386beef04fdc2f826d96dffce44edbf
+51caf2aac5dc4e93ffad47fe04ed93bdd89ebffc884dff28fb52afff81fc7adb86fed079
+ed95c4e64dff2ded61cdab73edc1119cd88bd9ae36d8afe03bda54ff06d94ae021bee033
+d3fe9341ff23affe2edb4ddf9bbeffa40cfe91eec147d22edd65e0a5d093bff184ff45bf
+ea83d19bed8640d414fe4b97ed1dff87f491b85ec3e073dd5bc709cd63e5b1d905ed29af
+ffb7fb62f297fe47cffa68d0b038d884c4e52091d9af79fc932afb429ff2c062ecc59cb8
+d150e57aec2faceee1b0d093f1d931e6a7c60bf3b624fac015fe7ff393e07cb6f351fbb2
+6fd9fa4dff1afbc386f85dff7af286cd66ff82cffe5bf3a41fc6dd7ed0e579d886f2c403
+e15ad3ed79d960a8f380ff7af7c350ff2cfb54b8d293fa11b5f35bc3ffa7fb9ec7affd68
+d8a5ca0dc1f186ff43f61bb5fb9cf4b621ff88fba0c0e451de7bd9b908b6de952bb8ff79
+f496ff44aff1bff501e53fc1e07ebffe0ae4b023f558fb7ff709ff60f6c76da013ed3dc2
+87b9d045eda4cb6ceb59a5df71d906cd58fed50ee1c42bff87b8cb7bed88e514bfd399ea
+21b8fb9db9f2409ed872e8b6fb66f7b850fa0afeb36afb94f62bb2f920ffcc04e0afd61a
+95ed7cb2d787fe1ff062ccfe2adbaf09e563ed5add2cb7f33bfba6ff36e59fd591bfe062
+d93cd8eec156d038fe65cf0ced3fff8af76ffeaedd3ee0c10ddba5fb804d86ffc6a0fe61
+b2eb6fd97dfdd079d92cdd9ecb89d8a521ffd8fa7cb6fe06fa70ff84f72fff85ccff48f9
+bf9eedb54095fba466e65aed21e4b03edd61ff8df129cba5e439ed17c9aced01ffc33c90
+ed0b9aeabfa5cd3cecc176c6e962c0e0a576fb9843f0bcfe38c0e50dec98de7ad9a457e4
+79ed93cdb725ff84f7c881da78e37bd9af06fa57ff2ff87eff934ca5f27edd79f294ff83
+d0adeb4ed512ea7df2ab57fb66d416c2fed89749f214d0fa1fd795ed51a1ff87f26cff5a
+f23efecc5e934ccdf479d893dd23d860e0afd90e95e59133ff66f6c2dd27bff593da82fe
+66f3bf7febaa47affb7af470db93fe68f886d95995febf54c4ff8734ef60ffa123fe499c
+ff8c4df5d85bc7ff8f60d9a3f259fdac3ec3f82fffc095fa4cff3cf8d86be0a908ff57ee
+28d051edbf93eaa6cb97ed12b8fbc517ffabe723d84ac6f91c9be085f260cb18fe93cdac
+f288e09d25edba80e2a24cf05dff27bee70cc7a7ce17e095de79a5f2c7fe9d28e447ee5a
+f388fb9c3ffebdd862f4c6ade01588ff7fd844ff04c69fd20cffcf2afdc7e352d90cffbe
+48afdd2ee579fad017dea8e05ed4fb8de080d0e585d9be0fc4ed9616e4ad2aecc207fb70
+dd81d0ff6bb1e58aed0fd0bb9de075afcf41ed87d3b79ffe88f76bfe3bd21cf24bafd2e5
+72dd98cc42befe86e5af5abffc3bffc49efbb886ec1fe44cff3cf7c168fed85fffcb86d9
+88cefb69b2f938feb664fa1dc1e40bb638eabfa9ff9fc6aacc14edc55d87f8b31ae14ba0
+fad74db6ee9ec9abf941fbbc59abf2940284ffc19fce63fbd77dffb1c944aff574fe37f3
+af12cb47f216b8fa39f3a5fc39cafe7ef9cf79fe93b8d819f85fbbed03d64aaafc77f521
+c4fe0df395c3fb4af514c0e021d8aeda79fe6cc2fe8745ff31f96df6a256f10ffe9fef77
+d9b222da46e061baff9fc894da75e9b30babf328affb05f5ad42c2e27bed86e5c38fbaff
+69f97bdd88fb63cf1cf83bffba70fbabdd27cffb86fec35a93f2cb19fd5ce67add6eec99
+e04adab6eb9343ed28e0a212f0961ffd9dee2fd891d87ddd9ffeba99fd71afdf79d86add
+af52ed1e9edd3ae54eff9fc1e826a1fb7ffecb34d986df66b6e887ff1eafe27edd6ea8ff
+955bfba5c89de403f3bfa8d093e004d9c398df65d82fe6c06afa79ffa5f033d05ded05af
+fe31d3fb52c5e56cc1e067dd97fe12d850d324ff51ed40afd8
+ >
+ >>
+ /Gray 1 index
+ /Default 1 index
+% See the beginning of this file regarding the following.
+ /Red 1 index
+ /Green 1 index
+ /Blue 1 index
+
+ /Cyan <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+7bb6c793d8a0e14ddb04d951e02dcdb901eca3c572efa5fe78b5d86adcfa3ef584d3b938
+f308ff45f9ca7ad989de80e593bfda7debc76ae0bc679dea874abeecb83af378ff9accaf
+f175d8f36bfcc2a1e5018ebef786ff51ef28d44de122ceb819c974ed86e4ac64ff9bf786
+f29f6bf95fdd20ceff4ff5cb82e0ab3fd8b352dd16e5c484e25dd8fb6087ffafd14ac1fe
+d8b34db7ffd15cf7a9ff54c3ed3aafe070c7ff7af29cffdd38fe4cfa13b0ff81f77afe93
+f95aeea8c94de5accb1cc0e527f2ad10b5cf95e855e58dd8be9be06db6fd3bf759ce0ffe
+60b5ff41affe9238f8d05bd8fb9e1189dd93d9c049fb0293deaf0ecf52ed3dcdaefb579f
+e06ada93f978ffbf98f757ff93f65cfe3ef9be38df4dcd37ffafd295c0f67ab8dd6eb6fe
+11d0f97affc86bf88cff27bffe933dc1e99530eda5e28328f27be58e3cecbf0bcba5fe78
+b8ff26f4a445e423d85188ea9dcd7cedd028e0a5cb21dd79d886fb6afe10f468fd5199ff
+7dc5fe87ff02c1f92bfe50f128c2ed12d6a7c59fedadc3f421d19fe026d6edab05feb027
+efc3fe57fa20a5e487d8ff4af886ffbe95ff60f227e6c31efbb93bb6d89442ed6bd988d8
+2ddd9ecf79f1d186fe7fd95ae006fd40afe00ca0fb38c1ed65bee82193ecb64cb7e09f15
+edb0ff0dcbf95afd12bce9adfb0ec2fb9e50f366e430d0e580d886dfbfa7fd83effbbf28
+f4b63d93fbc042feabbfff0ce636dd96d892d981ebd062e037d84bbcee6099ddafc993fb
+64a2ff72f203ff4dfb349ce779f280fba35afbcb7ae590d251a8e07fcffe34f679b6ca99
+e344eb18afde81d870ffb37aeda3ff13f3c3a7ff0af16ce5ae14fbb32498e501edb8fb79
+efc3a5ff67f1c357e679afff46a8cffe2ed9a5f171f9cd67d879e06abedd76c9ff8a43cc
+a4e078cfff86d891fa9f10f151fe14fa5ac9b60163a9e479fec2f15297e970f04789f2af
+cf7af75bff27fab809fb9df5afed78d7abff860dea5bcfafe536d097dd90d886e0bf52fb
+0ec862e5c14395de31ff78f9cb09efb970dd5eec1cfd2ad5b27bf9d036feb6ee47cef504
+d187e360de2fbccb9efb4cffbf5fe6c6ff6dd8a52899d89352ec1fd87cff93c6fc2ed89a
+f774b2f279fe08dc43abfc1ff6adfe3f93f19a52d8f479ff22f12fb1e51ced4bbfff94cc
+89d995ed32ffd9cfff47d80687d9aff311d19ec2de9b61ffbe1ee9b9dd6093edc256d218
+94fb24f23cc3fb94ff1bf252da7afe5cf91ef368ffa6cc93ffb618f5afff65f39fd8399a
+ff932ffbc197c6f28fe56efec14e93e09f0c93dd9b5abffa43aefe8cf95ced3bafdb7ad2
+f38b49b9f257feb6f435ffcb88fa97e42fdb09b9f27ae502dd4fc0e05ad37affc682eb97
+2cd3afff1cdaf7bf03dd5ed9b9fb61c1fe7cb0dc6ddf36ec63d179e052931c9fee93fab9
+31ff5db6ff37f91afec72ef1b08745a4f2cf40a5ff84f8cc65debfa4e061d880dd87fea7
+ed2bcb84d897d007ed42dc50edd183da21d8ae0cf1b3e54bc4e0ad15ff43b961c2f408ed
+a9ff6df3b8fb2cfeaad96feac921d878e080fed01df69606d8fb931de077d983e2a914dd
+47d060fa9fed69afd256fb87ff12a8fb93ed9e32dd53caf27de665ccb23a88feb6ed9749
+93df9c43c5f703fb5df5b6ff2afbc2afecf8c65add70d0e681cbe463d878ec51a5e05dd4
+feb4fa169ffed821e44aa8ff8f53fe77f730ed46d6b60ab9dc94f03bfe59d978fdaff797
+37fe6ef986edbf73fb67aff26cf891d29ed8ff37addd63d815d749d860e086f134ffb867
+eea0ff03c6b686e554b7ffa53be9c4a5f90bfd4bbff186fe92f2c14abfff27faa0c4d961
+efc93dd91acef587fea64efa0ab9ef6efbd7a53681ffb5f809ffade079d59bd8920ba5e5
+9e0efe6b3baaf323ff45a7fc1c9bfb93da85ccfb7ef79707e079bfe54a88f195c4e00dca
+ed15d99dcba5fe79fa9cf66fff62e5afee85e5c41587e1c0a5e64fc83bfed924beff0ed7
+41e052ed04b4ed5ac0fb83f6a4fe7ef7af1ac1e0930dfdbe44caaaf535fe62facb72edc0
+86ff5ece93c99eff65d832e00ea5fe81d8b46eed1d94e59f6cf985ffb963e302d9bbd89a
+ff47e5a81ff1c5d814ea61d088ef27ff4ff239fec3f97bbfdd8ed8ffcc88d884edc67aed
+bd4af209ffb112d93ccaee54d7ff69cafbaf38fe6ef5a57afabf50ff07c2e432d84de01e
+cabb119ffb2e97ffbb47ff07cf9cfeb85ca8d0e87dd987fea6f579fb63c6ff9331edba24
+c4eb38cdff9863f7aed67cfb88dd77d894dea529d94bfb0faff22eed51d926e9aef373cc
+e63ade14eac24effbe37fed024e4b34bfac193ff7f29e06bd880c7ff8652fc8acbabf43e
+bfdc93cd7ee0b361d83cf256f67aba14fb60f7a40bdb53ffc988e0c163edbbff70b9fe89
+2ff2b604dec192d959ead543a9ed88e059b0f293ff79aff86affd94fc1db5ff3d081ec6c
+f21de286ed9335f861edc52ec1da8ae49d1edcadcf78ff6ab1d9875bf2ca4cdf2aeb53f1
+18ff4ff20bc7ff82e49ac2dc6ce0affb78f6c05894ffaf5bf786ff7bf6af79d8f25aacf4
+c27ce0a42ef256c3fbaef515fe3e9ae0be9fed2dd980fea25bf614fbc025ee86ff96d42b
+e070ed9ce02fcbf386e59f1fea3f9ffa934ba5df299be5acd082ed6bfc26bafe1c97ffc5
+2afb7bf66cc816b6ecd041e0bf79b0ed74e523a5fb4db6d893c3ff02fbca88dd1894ffa1
+20fe45d0fa7bf350e297f204fdbed809a5fe79fa9ad1a5e584cd8ce2a042f3ba5eff31fa
+a015c1df9a05fbda20ed93cbb653dd32d4fb0db686de8e41f708feafcf9fee8635bfeb92
+cff607fa46c3ff59e61ec2e487d9a455ffa5c917e265feb1fbc53fafff6cb6fe38d8fb7d
+f5d425ddb6fb86f6c313f951ff3cd49aed79caafe36de793bfdb23b7fe86fa3093fcaa23
+c6fe03fa93c2df7ac8ff32fa4aa1dc79b5fe50f3bc4be3b881eda551e90bfec52dc1e093
+42ffafed3ddbb00fff3eb1f730fe69fbafce1bed93d07ad8ff873dfec579b9d563ff07fa
+d08bfe9560edc6ff16fbcd97d86fe548dd11d1ff9d5fde79b8db84e26aa5f279b5fb4aff
+31edafd26be9b582efc402ab5dfed985eb24d0ae6ab8c751afff5ff106d85bedb17bdd86
+b5f84faaff5dfa3fd803f34b9fffd340df9ec2da6bed88f457d8b54bff3ef60ca5e588f1
+bc55eb20ceb079d3fb73f7cc11ffbf94d8b658fb9f4df8cc7be077d085e7c293bfdd7ad8
+9dd725ee61feac56eabe4393ecd066e5af50f49bc1e19e41ec17c9e39d4493eabe51ff32
+f295ff8bfab142c3f221ff4aa6fe25f8bf0ec5e086d896d079fe08f446f9c03393f2dd87
+bd0ecc59fa79d9f704fe9ae083d07be66eff35cffe2bc8eb18e1cd0ddd82f186fea5c3e2
+5f93efaf55f40aff47d096e06dea9fd2b895edd65ad916c9f784fc67d8ff0999dd32afe6
+69d93afe88e577edd5a526f34ffb1fff38f261fe5afb05ed55de91d880caf902feabf323
+a4f21affc335fe4884f2be7df3a52cfbb1dc63a5ed88d85ecb1dd653eda5fe7bd86aeccc
+63d87ade96ff37f506ed60df89cb9cdc7bffafe54f27f8d895ffa5c0ed43b4e587ee16f9
+35fea4c894e165baeda162ffbe79f2afcb20bcd062fc18f7bd05ffd77de5a5befb13affe
+31f519fb52bf86fb78ff983fe0a5ee38a7e0be52ff5ec2fb86f1ac25bfff1686fcc786d8
+93da9fcb86d91ae0afc785f872ff10e549b4dd69d872cbff81d987efa4d8b8d924fed74b
+ffcf79f101fec522f976fe86ed7ade87d804e493fbbf14f19ffd44ee88d26dc9b1ff20f7
+51fc24d859d878ffcfb362e548df1595ff70c848b6d88adcaf44f01dabfb8c09fed89557
+fb9f53ff9efa47ed8fdd79cbea8738feb828df62eccb87d880e176cdff26afe930d1feb6
+0fc48dfa6ef6d084f29a2ae060d2f866caafe75ab8ff14f15bf76dffa4f59644ffbb38cb
+b1f295ff86c4f535fcb25ce02fd152e41288fbb067ace570bbe857d878e09abfda0ae0a5
+fb24ff6ef75bcb378fffb83bb5d8ad5bfba2fa3ea6d893d983e7adf20bed9ffb1af491f9
+71fec431befb99ff2df262fbd883ffcd45e5d29335c2e327d2ed33e077d9b12fb7fe5296
+faaecb59f689ffa250f161ffa5d839adf2cc7bddad53f27dfed948e528afec0fd9bfa4ff
+0198df4bf392d83bdd9fc6b605ea2dd879ceec68dca3fd297bda3bed20a1e0bf0deda5fb
+7cf793ffc133f0db06c5f91c9effb7f44bff3b93f6af42c7b74fe6c1a4edaedf72da94e9
+01ffc01aea62c0e57af031ffbf6196fec15286e1c633bfd97fe6a5f21ceb61d0a5c602ad
+e55a95f7bd60f2aff780ff86b6c793f610ffa0d93be5d220e06fdc7ad835c6fa21d9af0e
+f39ae08b07ff62f893d8af26b8cc95ff69c5f962fe38cbb0ed7efea70cffb365f978fed0
+8ae056fe22a5fa12f086e5c2a6f979c0ff4b92fac841bfde04d84aedaf79bfff945ac3e0
+8820a2ddc3afe56ccffe79f4d8872fff1afa4ef429fe86f278e4a8cc95ff11fb5ecbb61a
+fbc54193dafe4badff9e06f34dd864df93bcfc53f797ff3abfec0ea2fe4add13da68f002
+fe5fccb67dec6af3ac6dee9cff11fa99f2b686e47bfbc586fe5bfac09fed1bcf42ffe486
+fc04d8bf43ace093f086fb46db2dd0f279cced2fd94babfa7cef8ec1e479c95ed24dfe19
+d19ce868c6e66196ff719ffe83e668d4fa4186ecadfe3ff2b4fb870ff150ff2799d9099f
+fbafd48fc9b681e5af52c4d950fe31ef5ab7c7a0e46eed79e1aff229c3a0e066edcd93ff
+8bfbc13dd90ce07aed72d0fb6dc2e085d87dffa5ca4ce6a5f23bfed826fbc10affb945c4
+e8af4bd001ff5acf30ef46afda2be54dc7a5fbbd8cc44fb4f17ffb9dff17d559e273c8ac
+fa69bde421a2ff92f2c53adb0cb6f331b8ff9cf8be93f15dfe0bb5fb2ac1ed19c4f059ce
+a9ff189ad8f52bdf6bd772d83acffe83d99fc0ee58ffbe55ed69f630fcce10d6fb9925f5
+92d886d1f64afe03f799d32fff86e95afa15f6b558e02ddb0fa5f281ff9fcc2fd9af21b5
+ff38fa1cedaf2ffc9dd86bc0e4925bcfaf79e1c87ff29364d8ff78edc0a0ebbb96c2e86d
+d785fe79eb5fdf07eda0d961e434de88d87bfe27b9ff1199ec4093fbbe51e0179cff86d0
+ff62afed3add09eb43ade084cff279affe7fb1e038b6f72694cbfe61b7ce93fa09ff7ff6
+a55de8af17f96bdd86f2d00ee09dd85f93fea53ee0c177e265fe2099e086daac44fca5cd
+09bb93d788c240fe7ced86c9fe6be4ae4df4befe60f3d686d89bcb79dfc089f324ff961a
+f5a7ff4df8b252fb18bffd2fa8d99343f61dff55fb05ffb9ed13dc37fe83f46bff30f7ad
+ce79f351ebc19fdc6bf4cf83ffd661edca79fdce5be59e46c4fc88d87ffe93c4ff30d9a9
+4fd8e451d1f76cfdc772d8f24cb6ed11ff50c0ed90dd29edc932fcd17eea39cb2b95feaf
+42ffc0ee48bff885ffb50cf2bfafec38d862ffc267ec7ad9fff24dffdd95d5b661faaf46
+d024fad893108dde9f4ff167f541fe5cf854ceba51c5e072dd05edbe27e6c3a5e054c8f8
+1bfecd7ad993df80d8a43e88faafd19fc645d4afe0960dffbe24feb508ed43e5be55df19
+b5f707afdd48b5f624fbade502d954edaf5bdc77b6f725ffb703f1a329d9ac0effb57ce1
+86c8af7be5a444cc59feb67ce09649ffbc93feb0e05bc7f28707d99ee119d84cedcf9453
+f779ffafed15dfb422faae38cbb67f27fb0ef3cd20e094edb8863affcaf733ffc703d990
+e49fd909e279eea9fe3ffac194d882fe9a66ff80f39a61e0ab5cfaaf3ab2f26af8b6e098
+50f61fffa6fb2188fec75df1a1cb81fa92ffa52ffeaeee74c79efe87f283c0df7ad866fa
+73ff2acefb0ff5cb69e2c25ffb7acbff62f48bdb46fb03ff3cf7d328feaff894c705f263
+f7adcb02e463f486fa20a2e6b879ff69f37cfba160ffd607ddc02b93f983f4be6de59a19
+eed8bfa4e151abff79f65affc5eda55eb6d862affb7aff19d07effb6fb15d886d8af51ff
+34f260d1ed38d807d2f086c6e509edc6fe18cf4ded23ffcb86e279d87bcbed489fe686d9
+34e058d870ceed935cc2fb4ce538d810e33fa4ff14f196cba5e57ab9e4a940ffb085dd94
+e6189be03bcf9fec84d895dd79bef061db1ae56affa4d922dd61fbabc914d973edd44bf5
+cb31ddafca28c3e53ba5fd609bfbcb52d83bcffe56ddfd9e44f566c4fb73d8b701d99e17
+88e0c520f292e85acca5ed67e09746a3dd60e90cf286cea5c2e411a9f68efeb942fe2da3
+ff90509fe57bff93d865b4d949ef0ee75dbaf9d917fb6affa6f61bfbb805d8f93099d97c
+f6b9ff6ff9cb6cd9af42ed18c2fe3987ef96d715fe37f46dbefa7cbefe20bcf936f351fc
+1e9dd882fb9ebad84cc1fe81f29f3dedba52ffb685fe66a5fb9345ff9bf570bfed80e4c3
+46a6ef93ffa207f18c5cc9ff93e62bb2ed39cbfb7ae5b2f246fe86bffd13baf92dc0fc1f
+f4b3ff82f97aff9ce31ffb4f93fecb5ae0669fdd7ee7d06edbb6f937dcad2efac20afeb8
+85ff9cf5328fb3c851ecba7ac4e6618cffa465d6ff1ceba54795d8a932f386febf79f955
+98dfc11ffa71ea93d859cced4eb3ee65e574cba9c593d0afff3df2c252ed1ffb77b0e02d
+d0ff80f8a0cd32e513bfe005d0ef5fd910b4fa32d11bf3affe0be279edc779d8e6ab04da
+5aff6fc1fe64afef52fe6cd795ec42cba3dd50ec7cafd363ed33ca26d0be3faff488ecbf
+4497fa24bfff0ef7a648fb14e96bd886ebbd74f1ac68f3cc3cd886d0ff5ae5a5d009f24a
+97d8f23fcaf483b6cd67feb6f023fec15cde1fe0a3d6b1f26bffa5cdb649f87affa92afe
+d80cd99afb52ff14ed61dd6ee3b30aff86d399ea0fbfed934fda22e57afbc596ff77f3b8
+87e580fecb86dd94fe7bdc87d252d92db5ff347af9c682ed87d911a8de28bfd51dbaf90a
+aeff6af674ff98d93cffb993bfe593ef5afcd26edc27fface579d5ed74ce60c2ed86cb98
+fe09f75afed240e0c11baee56dfd01bff027fa6bfe86c1ff2aa8e1bc0be54ffab003d979
+d587e49dbff658ff33fc07d247ed5bfec19edf0be4c7a078ff88f12ce080da98fe0cf5c4
+79de62b6f35ac5ff9066fec1aefb62d8af48ea5ad89f41ff1ed0af2cff56ea61cd37eb6b
+fb8afa65c1f3dd419ffe21b8fa9cf577ff7bfb9bdf79cbe487d825d3af05fbc859e00dfe
+4efab0e0a201ff5bd77bd905ffaf47b6f494ff23bef33fb9cf9fe11296ff81fb9efe4ced
+afda61acd880de3bafed79cbfb5c93ff9bda7ec8f388ff60f509ff4694d987ce93e79fdd
+8fd801f231bff19262f6bf43c958d2b1f75ace86d8a534fe92f8cc31fca540f1d807e145
+99ee09ff88c1f72cfdc46cbded6de5a5d30df7a0ff82f21dcbafe512a56efbd266e4cb4d
+d838e1afce4bf23affa533fa55f17ae6c288acf779f2a5db861781f8be86e99df363f0c3
+84fbd82bde51b1e37fff75f048c7afed60cf27dd79d8962ffa88f74fff99c5e321dc9f13
+ebc049ef25fe3fa5e42add81d0a6c3fb0eed62d96dfa26fd80e688d9a553ffd01deba8f9
+95fe18a5e12ffa49ffbf51e7149cdc7de4be60b7f779ffcb70dfa5f218afe087eda5f850
+fbc179f1b666d823debfa5ff4495fecfecbc0cf3b07bff8bf29806ec8fc1da67edc683e0
+9cfe38f24ce121d9c43bc6ffb6d937edc940fb1cccaf39e01295fa7dcbfd59d81bddaefb
+63ff38b6f893c2f50effc09ed21cedbc11fb8af762febf7af8d06cd886e0bf5cfb51b9ed
+66e579cbafff1ef286c65fcc3fff6afac239affe86db05e561c3ff79eeb6e57aeda5caaf
+ff4def27d0fb9d3ad9af1dfabd3acf9eff4dcd10d836de9d01ff4ac9fb89f49b56e379d8
+ed87269959ffbf3eed1ad94fc9fe61fd10b2f81eafff08ce5fda95ff80fb9f6cfb955df0
+8dfe73afd877b5f96bfeb8edc55beca103ee91fac12f93eb83c9e558ed35afe16ff142fe
+a5ca6ee0b541b7d832f1af379ffe93f516ff9bcba5f820fe37b5f1479fe051b6ffa5f6bd
+9cdd18ed97e556d872ffc188de3dd8a70393d919fb6df184d495fe9317c2f384eda4c754
+fe79ed68dc7ef294ff62b9d98ee89e14d947cafd03f7bf39b9f8e0abcf7fdd88fbaef66b
+b6d894e679d09add6bd97fedb610b8d533edbf06c2e224d750dd13ffc1e62bd8a24c88ff
+af3cffd27ae0649affd11edda802ffbea3fb52d081df8ee756fe85f49eff79dd68d6fbc2
+1fed53d08aed0edd83d88cc8ff7dd6fb78c9e739d812e25ac4fd67d979f32defaf3afb9d
+f362fec6fb61d05ad82de009d977ebafff51e52bff80f294d928faa8fe45e47ac7f450fa
+38c1ff80f8b878ddb064ffd6794af22aeb61e5c3369fe523fa53c2ff4bfb3ef5a6fe45fa
+a5ed6adb52ffa8f470fe7df793f2924498ff86f2b4d91fe5be6cb2f433ccf15da5f652fe
+8bd069e07cd921fdc107aff21dd351d903eeb2ff0f86e4b074b7e561c0fa6dff40f3ae02
+e92ebaed0e95f47dfe93f72fb1ce0ffba3bbcb7ae0b80db3e48f4bbef094ff88f6a8ff5e
+f936d87ccf96d86add0fe85dd5b804b6d793fb1ba6e082afe45aeca92fffc225f2a518fb
+da94fdaaff1486d8fe75d09ef12ab4ed93e5bc2ac3e086d827fe86e578d843dea5ca32e0
+57d0eebb52dd0bfb6af186d8f919c2ffa20fc0d96de3b0d940f716ff95edaf5affc67ddd
+87fbade59344a2e9cb40ffc6f72fffad45d0afe166dd9dc1fa619bffcf60dab545b8eb86
+ffabc84aff1cf94df588ff27d8f29d1fdd40e5c36abdcba2e35af105fe4bf9afcb88ff85
+f69bee2dda5acdff28bbfe79d81fccee6c97e086e6c86ab602c7478dbff8af0ebeff5dac
+e061c807cd63ed9e18ff71f3a2cb16f89cffb70efbbe9efdb405face7ae89bcc48fe349e
+ed9351e6affe36fb981bf2b787d875cc32f7a4d860fb3cedc32f86fcbdf5619aed920595
+d87be096ec1aa1fe2bf65193e0c242affc25f1a5ff78df27db6ee995dd80d9a2ed5acab6
+36ffc167fab30ffb40ee1bb8fea5dc86e09e36fcbf21dd4fe187ff85f37494ecd007f190
+fe9c5fd8fb3dff4f9cfeeb84e3aff1d35de087ed44cbf97eff88f794ff84fbba5adec153
+eaaad02fc666e561ed1cd87fdc9139fec029ffb975c3db61fbcf88f37bdd87cbff70c6fe
+59f292dc6be52bec89d9689affc64ee018d8f95ad9c0fe4df30dfd87faca71d982d3fe1d
+f286df8dd66dd904d25cf293f709d75efebf21d0aafb7aeb85df9fcd71e085da8fff79ca
+47c0f36dc6f15becb679feaf42c3e00dbff659a0e06ad945c6fa0db5ce7ad9f13293ff52
+fb2999ff3bfb93d9b703db31d84cd91fd851ccf1ae03fe89f45cfd87f199d884ffad4afe
+c4f062a9e07bd9a5ed06e4b525dd43d807ed4aa5e0299fe80afe4cfbc396bfff0cf6c020
+f2b879ffb528affb72b5e9a0cdb93abf4ef2afff37b6cd9ffe09f950f59ffa86febf50c3
+fe84f2379bfa81e514da53f706fe39f3a5fe51d833e591fa9a2fff0aafd87afaca15d8f9
+a368fed631b7fe3ffba5f4b67ce98af6af09b8d243c1d97acbea7adac41bf084fea9f36d
+feb5f079e52c93fa85c93fb6d979e01eff3aee52c1f29f1987d6fb58f30ffa5dfec083ff
+79fa86ff79bfef62f9c97adda5d2b613f247a6d781eab065de9ccb6bfecf3ce01cc75aff
+79f7db93d507a5ed7be556bdcb79e3ba41b3e0329deda63ce08fc9ed48d869fe8ac7a5d4
+7fe1b724bbebaefb60d811edafd0a1fe30df469fed9327e6c14997fadb6ecabc1bd436ff
+51de2fc5ff87f8ed9f0cf4a521f254a3faab37d157c0e09c3da5fc8fffc347beed94ff0b
+f9a5d091bccd87e029d9b6eaa013ca96e080d7af4af13dc7afe045b6fc10d8af39fbbe26
+f077fe86c5f831fe4bcefe06fa3aeebe85f58eff93ed2cd8a716ff61fbc74ef813ff82ee
+af23ff94ed69cefb1ae5ba63ff12b7fe9ff143baff30eeb44aff95f78801c2f27eff6dd9
+66e582ef8bffbd61ffce77fdaeed8813b0f27aff93ed9fd681fb6be25aad28ceff70e4b8
+86ffbf4cc3ff89ee9613f7b8dd0bcf60e49ffe2eda71d7b647f55afe04f7aaff65fb40f5
+b0ff3abfff27f594cba7ec139ff6d17ee488ff9bd055ff92e55db0e07ad899dd6fa5e486
+d8a50dea49d860d77bde65f2c09aedb67add89d862e033fbd986d812ffb679d85af3cc93
+de7bd002c6aaf479e57dfbcc72d95cd2ff9e43caa5e243fb1ec757d104f2d83ba6f306d9
+4cbdffd82adc62cc84da15eda5d01dc0fee063bedb39fbcd06e799df61d926ffca7be974
+f983f110d862e5aefb36e79cbfd894eb8038c1e094d07dd86ae5a552dc67ea1cfe60fbcd
+8e22f251d621df6bed7ece34c1ed07fe53f31afbc03cf761ffcf78feb6f202fba5fe37da
+4acb1fe53bfea2f5aac78fc147f9a5c830f786ffa42cfb4df66aff86e024db52ca1b9fe6
+12eeb532e0afed25bef494b7ff97f7b36993edc75ae07dfbd0579dfc93f302fe5afabe3f
+fe99dd79a2fb4893ed9d66d978fc12f67fe5a652fe2fd74ddca5ff7df7c1159ff264ff23
+fa43afd8fa890bed50fe22f285f9c884fe9dd986debc4cffc0affe70f5affb03baf79fff
+6bd3a5c783e188d994baed2396dda72899e3af44c1e67bfb73ff88efbf22cf4dfe19f2b7
+6fe562edafd20ec0e083d9a7e83ded5ffbc099f2affe58fac179fb6cf684ff87cd61eb2a
+dd4ce5c0fe2086ffaff13393f5c240e052d873dfb272e58cf249f712d7affe17b9ff4aef
+c593bed646fad085edb2ffbe27b6e03b8dffce7ed888e07ac4ff5b9ed4ff7add88e05bcf
+18b3e009d253f22d9ded6bda369fe5933fcba5e048da1db1f22effb647f827ff4cc8afe5
+39fab8ff6dcbf38810f0a5e059d8a85cff83ed95dc7cffd006fca143e497f040fec215b8
+d89eceb40ffe43d981dda54edd9ccf19d851dd0afea5cf7aff9f37d7ace9961ccaabdd0a
+e586bfff87f8c02dffc305d8a8c7f07ddd68c9f282e0ae31fe5af491b709e09f1c8ee286
+fa55cbf3bc4ae401f34bb3ef1abbe72fb5c835f9b9a2ff96fc6df67bff92cffe01e190ed
+c10ac3ff84f365ff94fbcb57d977e9cc6ce0aff266fe7ff18ad953df2098ffd3b927b5f2
+03fac49cdd08d652ea37afdd82cbfa67ff6dd0b079ff5bfa2aff76e08bd86aef28bfff0c
+f25afe95fa79f0c142fbbb18c3f281fb52d0f965fe75ffafee22a6eb17a0f24faaf980ff
+6096ff2ef8ac40cf21fa95d9b51cecc6ff66f5c5fb58ee96d9b11d86edaffea5c0dd6bd0
+fb74f554fe9ccd02ed49e43cc7a0e73ad965afd774ff56faa6ec4dd915d8b637be77f693
+fa139ffdc2029fde15d856cd11ed84fbc34a83fa95fe80d686eb2faff46bfbbf93f15fff
+2899dc08b6f824ef93e581c796f14ef937ffc493e385d693e079e731cbb488e475ef90fa
+50d80fde78b7e641d2bd5a89fbd267c7e57aceed64e036d01fb1e586ed9efebe79ed6bd0
+ff863aa5d849af37d8af06ff75d9fb9b2cc858f914feac3ecaa5e56cee79ffbf8ad0a9ed
+20c5a5fbbb36edb626d97ae068f599fe7ae48ff1d60ee05fbfed4186ffd070fb88f679ff
+add05dedafe034db50e53dff54c0fe7be6a51efe46e4a9bff27ac8ec88d855dd34baea0d
+d0a8bfeaaf03fb5ff767fd3cc9b9a8f84aff13d93ed39be46dedaffe26c7a4f22bf8d89f
+3cfeaf33fe9b1afe86b6eafdc979d901d85be0b00efb3fa0deb3f079fec7f379fece51ec
+bf60d3fb8ae094d87ce099ed0cd6b71dafd861fb10f766fe5cf20dcaff79f7c687fe1eb5
+c92faeee1cfb4a9cffc2abff79d8f1bd51ebafdb36e0a130fcb80dff8cf5a9cb79ed8ab4
+e05dcd2adac49dbccc16e652fba54dfe6dfcc2a5fe74f761ff2186df9cd0b72eebbba4ff
+07ed8adb82f3a4b8fe01aeffc14a9eef7aff86de9711c2e081ccf45ed9bf52c3f66a9d44
+fa59ff72f333ffd996c1f85efc21e0950fa3dc619cf89339ffb854f124ff4ff228ff86f8
+5fffc5f72aeda3d893cbacd893e56195e44fa1ee61ceff79f9d051dda5bfea863bdc23e4
+a52f93fb9b26c0ff7fcaf377dba1d84cc609ffb61dc9fb12f293ff80fa69f67ffe89d82e
+e0bf1de19f04f352d79edc8ecbf441fe4bf0a5cc14f268d85cfb25bfcd65e07aedcb2c88
+f5d85fe00ccd68fcafff4df10da5e27ceda5dd0ad8eeafd095c3e8a4d387bb4ce904da93
+cd6af7b6ff26edc017c5e5a80ae672d683cb90d8b843afdd924a94dbb53fff50f327ff4a
+affad31accfe11dcad46edb770ffc461fe08cdfb93f85bb9f4ca3fd8f79450e604bee540
+fe6bfa93f17ad8f9659fd875d848e40fe034d85ff3a5ff85f7b47beecb71e01ced39fa54
+afd97ae089ff53e584dc98e57caffe4cf726ff5786f9d89517fbbca0edb539e47dd993ff
+be43ff2af989ff7a2ff517fe3cb61ffe61f5cc7bf1c043ffbe30e55bd77affa5f26dd0f4
+86da9ef709fe61f39afb22f2cafe62fb86c2e571e089c5ed2ba6fb86b8e775f389d007e5
+af2bf37cd9a264ed7bccfe0889ffa51bedd386fe9b62f286cb23de5ae84196d0f53cffaf
+f4a3ce86fd9fda01cb5ad961cfff4ca8fa92ff7fb6d186ff14f5c124d896c1fa3bff1bbc
+ed79e587d0a2bfe0a543ffadcb3bfe55f5c263fa22d652ea95c9add146c1e5d874debf90
+fbc693e4109fff5fa5e57dddaf83fb93df32d84ffe36a4ff3aec5ae0a7dd12e080d8b784
+08e9aedd159dfdaf06fb80c1e051da3c97fb2ed89afc5cdb94bfe33effc017d94595e5d8
+4bcefe6cb8ed43d9c418bcea9fb9fba5c0ff24b5ed8805c762ffb64aec79ee93fa22ed99
+0fc1de35d864c8fb06e596d8b36dfe61f71eadd98ccbfe44d80fb6fb3df21dfdc767e581
+dc93d818e09cbfed86dd6ffb13f27afea16191fea854ed66dd41c2fad82db9fe19f24bfe
+c402ef60f986e07fc1e369c793febc65c5fcbf52ff3bf6c69737f5bad931c0dda546ff91
+f47dffc459beff25aaed86ff58abf57ee6a6feb7ed60aff269afe22ab0f96fffa4f74dff
+38ce13dd62e055c2d9fb93db26f1c296ff42e076d786fbaff579ff9ced4393f2bf4efe34
+eea2becf86fe5af362a5de93ffc66ad993d87ab7f304fe61f77bff5dfb32b6fe05f09eda
+60e024b9f8d837e0c40bf77effa24b86edcf84d89dd579e191bfd09fed10b6fb20b2fa1b
+cf2fed93459eeac2a5d36dffd87f50f994ff6df2b3d816beed04e19fed79c2f841d512ed
+cb25d854f23586c5ff2cc4fa0bc5ff7dc0e030d87cd193f082fe93f7affe8432be4af8b0
+5ae11eb8d1a5fe3ddf50d829e2bf16affed967a9ed7cb7d308e94ae4b1d00dc0f925f14d
+a5f407ff52ed35d0b188ed21cba9d393e75acba5c642afff91c8ed047df35eff9ab8d023
+f1b6fba652f76afb20f43cff4efb29adfecb5eedd879e59ff979ffaff1861bfb58e523a4
+fec286e151d623e886fe6ca4d866fe17b2de6ad980faa46dfe96dd88d2f911abdd80bde7
+8b4ced0ea5f46afb07d95be0c147cd0c9bf1adffd872cafe6df586f910b9f29fff6bf0ac
+57f8c5872cd0ff18cbfa79fb92ff9f39fb9ae87bd886ccea7ed587de9ffe70fac451bae5
+43f208aff27cff67facf2ee44ca7ffddafd487ea50e5af61e014caec08e094ccbca5d8b7
+94c3dc4893f3ac43ffbf6ad9b603d834fed093db88f1cb43ec0eaff47bfe5fce35c3fb3f
+f281cbf633feafe951c7e04bec05ff4dbe8fef79ff579ffbd086fdc954ddb6ee86ff2ca7
+e97deed25ee41998ed0aa5ddbf2ec4ea6cc31ab7cf81fe93d860ddf79e5be0a43be055d8
+29c7ed79dc31ff64fbb230fc47f7af11c0e02fd99bff78fb9ec0fe40d928e0b984f388fb
+cc539f12fb34bffa79fec196ff6793ffaf3efe5af10ef65cff79f8d107df96cc11ed3dcd
+f37ee3bb4ef506fb51adde89ffcd34ddc199f8a5eb79dfa6d85393e3c0019eff1faef782
+b6c99cd9fe41e01dd6f22fa8df3a94ff9841a5e068bdfb6effa528fb93c0fa86d3fc4592
+ff9e4bffd993ed3adc03e731ffaf0cc1ef7fffba84f3a5f97cb6ff51ca9fe10bdd98bfe0
+6ccef160a5f781f20eb3cc69db84d193f7a51ae557d90f93edfecb8defa50ad82eed47af
+e6c75adcc27ce48bd887e01eedaf6cff87f65ffeb1fa5ba5fd60a0e779b7c885fe13ef4a
+9cfa9305e34edc1bffc026fab9ff4786fbd079f0c52dd8fb72f415b1cf86fbaf65c1fe7a
+f6cc1fedbbfe26c7f201d83ddcb0c739de52e55e9bf2d061e5d38733fa79ff86f4b1c677
+ed95fe44d920ecca10d851df05c6a8ed5baff383ff17a5fe3895ffd31be15bc2eb38e424
+ed60e079cdfe6cffaabff62dba47e060cdfe86db91d8f936a3f225fab317ff45fb66cebe
+32e6c428aadd9f2593e0c117c4ff2bd4ff3aedafd476bfe562b9fcaeff93d16191ed9909
+d3afeea952dd9961fea539e05aed69fab850dd9be317d94aafe080d87af69f79e588f86a
+ff82f399ff25c3ec18a6fb05a9f7afc0e053d79f5afbd44de086cea5f95e9aff87fb93f4
+60f81afdcd41d861edca86ebc14886fcbfa5fb72ff7cf7a9ff12fb4b9eddc338e079d999
+f280ff3cb3f24dff1a86cbfd79e066d9c09ee9b9a5f27bfeb85afbd53feab7ff4bf095dc
+6dedaf86d99a5ff9a1ff1ed0ee8431c957f5befb4ac3fe79dc2fc9f50dffce7ce4b986ff
+9fd829c7f503ff5bf4c493fb61ff14e64cd9ff56caafe016d862d97cb6fe77bfe086c9ed
+55dd0ba2f324fec217a7faaf1efd63c7b0e545ed34ce76e086d9be7bff93f6b851d922fb
+afee974edd29d892d5b844b6d88ec6f10195f886ff5efd16d0a1ec6ac4df6ed0eeb006d1
+9fff2ef251c933ff05d94d93eebf6eff7af285d874fb36f9ba5af61bfecb26d858f3b14b
+d8f786eb9f0ed896e535f38aff7093e5ba46f40ffccc23db7aff966aed92d5b068e405d9
+a5f293d0b41db8fb2d9ff494fe04f6d833b2f839fe4f96ff7afbcd6bd974e58af33ac0eb
+93f12eff86d7be9bfeb62bffac46e81fdf359dfe7be361d809c4ff81f859f307fe98f55b
+ed31adfebf49ed1ec571b8e523c1fb039bf8a55aff94f44bafde88fe92dd7ee5acf3c615
+9de50ada42cb0ee5bf9fcf08e07addbe6df27ae4c181ffbe11e039ffb869ff7acb5ce01a
+d5fb5b9fde88d8a56bf892e952e2d0b348f92bffb3f1b750c634fe5ff3d779edcf45e05a
+ccaf6cedd065d97cebc62bd8ae3fffb0ee45b7d982ff58de7bd9ab01f350dc12f2cb65ed
+96c4fa70bee802f2c09eff8ce03beda6c99ce862dd26d886fbcc6dde93d1a7eaaffa85fe
+7694e1be31c3e524d887c0ed73d00dea62f9c12686fbaffe86d0a5f58cfeaf48ff6bf293
+fdab4fe692ffa502de3c9ffbadd175dbf028b6ec9abff8af3ac2f226fe5fefbf4aca0afa
+b725fea5c2df9f4385fe90f9bf96e1873effb668fa90bff03bff9f11ffaff419b4e482ec
+94c71c93f8cc08e5a0d00efb66f7c493fda5ea6fafd809fe51a0d9ff5bceaf43ed30f562
+b8cf13ff46b1d886ff77e59b4df428ff65fb52df39d949c6f65aff86fb79b6f739fe15fb
+5ef4aed23897fed54bdd31f15ffc64d82ded93c5e052d726c7fb0bd841cafe78f6d6885c
+fdbf43a8cff90dff4286eea3ff6dce97e71effa5f29bc67eed61e61388fab9e51cd843ed
+09affba7c90cddb222fd78e07fc8ed8944cc9efa4afe0ef561fbd8679bffb631fe8ccbb4
+41e629d260baff48f9b681ddc11386b6fb79fe93bed0a4fe75e293c2fd1df1accf0bffaf
+d59fb9e508c179f3be9ce92bd3a4dc42f1ce6de1aadb84d89e4effafed66a3ea91cf7de0
+1de897d974fe18aff786ff9e73ef94f8af4dedb725edc71ef286fe8c55d8a5c5d961e007
+b5ed4cb1d979e036ff5afb93d979ffcd31d867ed9dff6cc3d92ce86ef77aff9ad2bc15fb
+51afd8fb69e579d99cd0afe0ae3bfedb5ced7ec2ed55fec097ff79e51ec2e07bd0f52ffe
+abf8d328e0c30fe44fea1cf2af30ed5fe09e39fab75be216ed4fcba3ffd8a50fff62b2ed
+0cbfe59612fbbe4798f231feca79db1bcbff01f753ffafca7aff52e4c19bdd3bd848ebc9
+5bd82de09acc80fe9e67e4afd804e7aff165fb21fe93c1fa7cfeca3efb8bd0abdf19d63c
+edb584f391ffad5ccba4f776fe54d0a4ed4be43eeaa5d894fe08a5d81effbf2ffc4d87ef
+7fbe28cba6f93fafdd16f051bff288fb9d27ff429cee6ce53c95f452a5f18dfe7ddb68cc
+fb87d97bffc16aecc693fe7dfa89ec256afcc48cc0f979fe5588ffacca64ffd26ae0b512
+fa93f55cbedd85d8a528fabf05f4b432fa69ffa5f3b520ff79fc89f314dd48d8ff933bfb
+be61ff30e27eedae53d937dd1294e5af01ee63bff386ffc007e053d910d0fb24dd3ae094
+bfff1fb9d893fe85f732ee82bff988ee52a5e18dc9ff02d1f287e714d995ff81d68ee0a8
+0ada4cedcf92eac75bd888c7ed77d8ff64c934d6afff4abcf603d14cdfaf1cf942add830
+db5df7dd39ed4de020d991d0eb3fd92bedb702f8c586edbb3db6e1944afd3aeeb868ed9f
+d05af18fecc402ce63e496ddc352bdff6bf7b607edcd7bdfa5c893d0b944c3ff86f6a0bf
+ff71f2c193fe329ed84aa5f596fd7cf651bef080feaf16f286e061f305c753c4b1cb3dda
+59e074c8f760f025a5e59a45ff94fb62d025f45aff33fac19ffeb576fb04a7e01dffaf06
+fcb422b7fb87f70695e570a8eb8ff281fec075c4ef68fe83d087afca96f5a5ff60ee25b4
+f780fe9979dda027fc53d9a5fe22f8aec4e579fece45ff84dabf13b75efe7bf586fa10a3
+f130d0a5c57efaa55afe19f34efa14ff9ce517edb241e057d12afb4cccaff76ffbcb79dd
+32c89eea78b5cf47c2e6aa4cc5fe7ab5fa9fff17f587ffb828fdb711db81fbbc53f9d9c0
+5ac7a5ebb47ae099d883e367c934e45cbff17af74de59fcd59edd346ecadc1dd27fec757
+ff17d933edbbff0ee5a5f205ff52fe16d876cca8c1fe6cc0e258cdfa44ffc17ae686ee70
+d962ec179bd80c95e3af1efba5ffd995c0e035d955c0fe79e55aec1ee04dc9e68ad879e0
+9feb6ef488d979c7fe80f991da98e46bed0fddbc22ff58b6fe1eafff01f588ff69d4fa9a
+2bc0e938e262eb97c661f1a3d085ff96d86aecce862daaf00bff3bf2c205f752fe1cf393
+ff85d8fa54d2a1c66dff86fa9977dd9b5aff81ee9f3ce094cca5e3934597d8b646b8e094
+ed7ee45bfb04f3479edd0aabf31eb8ed80e4af3aff0ed19eff8ac0fe62f9c66cf0d8873e
+c64df824a5ffbfa9e03ad9b6ff82f490ffaf24f745fdbb30c1dc02d451f220a6d80bea52
+ff18d884ffa562ea8bcfed80e4d361e195dc22ed9310e5aeff79d287d9af2cfed502e54f
+dd37e848fe129fffb6fc7ae286d96cfe93bbcfa4dd5ed812edaf2cb5fe24f3b63ce019bd
+ff12facb1ed866c5f47dfb64f96ffbb5f62efe7bfb35c71ef9adc798e080d2f960ffcb73
+dfa551d81cf5c599bffb2cc64cf242e0a134ff509ff5dd80e579d0ed8618fb77f7980aa6
+d861da38ed97c6a6ce85ff6aa9fc93ff85cefb65f3afca7fed9ed92ec8f23adc9b0df947
+93fbc159bff85ecbff80d94af20bfc46f8c157adf692fe7bf4abcb78c0f241de1fd54ff6
+9ecb47e730ed4bb1fb86f5c26effcb7dd987d6f866c7f26ae5b986f5a1fc0bacdb27d84a
+d007dd79ec93d287e4b39ecf2aff43afff2e93eda04efb87ffc493fe78d966ed79b9f693
+d7b679f3d37fe6c829adfb0afea03ec2e191d05de8c6f830fe9ecc79ff5aee0cdd4bedca
+5fdf2ce89f3ee09733fdb640f956fc87b7fa6dfec4a5bff22ca0ff38a5dab041ed6cd788
+e09ccf71ed93e069d927ccb806eda3e07dd893ed88ddb018feb8a0fa7affc937dba542e5
+9e0ff050ff0da4ec964ad8a52eed41d95fcfff6cf1a4f486ff9fcb55db13f24affdd79ec
+8ff0d67addbe14c1e730d90ce037bfe509ff3fafe360dd04ffcc21b6fa0e89fecb72da88
+f1b0ff66f325ffaa4193e0af0ffbb719dd6dfeb4fa991df8aecb73fec37affd766e5c686
+e079e604d1b243ec60e079d7ed7bcefd06f29fc0f92ffead26ffb912fb40ffbfa5fb70ff
+5dfa2aff58f562ff31fbd169e022cdbf0f9af879febc63f2cf89dd79bcfb32d0fe85fbca
+7aff92f39a39bdc913bfe660ef20ff77faa1d96c3afec260bc1af765fea9f479d06cf1ad
+f7985bf2a3c1fa15ffa7ef6cacfc68d9afeda545eb63d456dc0ed895d885efb7fe78caed
+69d1f286d8a02982d5e58746f6bb06f1b522bef707a6ff1eccacff67e3c093ff21fba810
+de4e97e577fe1db6e066cbed7adda7c1dd8715eb4de093bed392bbc909cfa9c557aff385
+ff53eeafdf60d802d1fc3bb8fe39f4cb81deab01e643afe059d521e0b1fb7cfead38d994
+d88fe2b05ac0f7e59307d9fe95c3e03cd95dff93fbc24f86ffafcd6be080d99434bed83a
+debf49ff30bff686ff24fb94f861fe44e402da52f328bef943b0fe3af6b7f14dbeffd869
+e4af5cd8fa6d95d9f161b7ed3f9cf11bfe35afd956c7fe85fac75ed893dd7cc1fb4ea5f6
+5bfe2a99f2ce7af3c43ce61bf068f8a5fb79e88dde03d895e080fe32f286e58eafe168ae
+d89325fe51f2c16abffe11f7a5fe7bed53e02dd0fd81f75cfb2ad8ff0ba74eb8fba338ed
+50a5f281d81fe03b9eedd729dc47fe23f452c3fe81f7b179f29dcf86e016d996e0ae3fc1
+eda4ca7aff8bd293de74a3e77cc0e065db8afb9f0eb4fe3cd1fe9837edc24792d0fe59f8
+c77bd972ccf386f77ab6ec2ab0ff26f750ff0fafe5c708d86ecffa44afff1f98f981feb2
+dc35e04dee1cff95fd61f72ad65ac6a5ff48ee23c5f918ffb7e679d88effa5f07fdb88c7
+62d908d69ceb944bc701eaaac9689aedcbffd870f2c07cffd002feb6ef85ccfe17b1f37c
+e887b5d09fed62e01ecbfe08db56f999fe77cd5bf3c784bc2ceab64ef11ffb5cffc433fb
+04adff18d839cfed79c5ed8714c0e186ffaffa2d95ddbc27fb93eea14ad513e53cd09ef2
+7ed286edc598f34090ff94ef80b6e66bd8b9dd5cd9a54994ff81c79ed8be2face57bb5fb
+94ed1dceb67bff81beed885ac2f70de33bd823d251ee2efaa4ff86f66cffb4faa5c551fe
+aff532869f19dd59e5b22c93e6a55297fa68bae868befb03c0ff4bfa09d1a8ff5ea2e584
+edc138b1ed04fe89ec1bd8ff7bf6ce6ce4add908e095c6ea70c2ee73ff5c9afb249ff4ac
+ff4ad819da5acbee13a1eb5bd80afcb0ff94c1ff67dd0ae062d9a735fb81d6f152e43aff
+0ec3fc3387ffc60cfdb8ed13b6fe42f95df4d83ed0f208cb88fe61f6d856e536abd8fb40
+b0ca62fa7ffb93ff9ecf87d85dca3cd80fdf61ed82e01dd961d0f2c1f881fd0dd7fbbf4a
+f9c8e411da48a4ff32c8a6f179e586b6ea4693edc04eff1b93fbd160dab932b5fd9d4ac8
+12abfa984abbf588ff59b7fa44afe093f3c250bfe055d879ec69fb7ef2a567fbd588ff84
+e26bdd32ed5fb5f093fbaffe17e5b962e223b7c6a4d388e0629ef1c14aa0ec68de76d0f1
+79e586afc677ffa76ab7ff4cc1e09607fbbf95ec0a9eef83ffbaa0eb4be009dd53e819ee
+8efe79f29bcc29ff78f390ffaf43e85fd0acec8754f1d98f2fbeff7af6cf8bdd75e03fd8
+2dc9ff7af6cb28fb95d0afe549a4ff80f2a3dc5ae5affb93df32d6ff85ca3caff026cf9f
+fe0cd52fdea8ff7afb2af7c494bfe50bffc6aa4de52fcba8f951ca9cfa20c04cc9379eee
+5affcc92fa6dfe15f7b547f9cb01eaaefb7bd230f6af38d905ccff14edc125edd883f29f
+33efaccb6bf779ffcc65d930f314c8b7a9f782fd79ffafe126d8af3ffb9fd5b647e00fdd
+8826bbff3e98feb88418c4fe9d40e5b708fa5afe92f796fcad50e00eb3d865ea32dd7df1
+c627d853ff71f909d85fed75febe1aed62fdd885e27edd79d986fe61f203d092d9af0cff
+449fde913dd8fe79b7ed1dc5a5fe75cfa5d9ff86f4d078d9a502ed48da86d869caeda579
+ff86d822f297ffbf5aff9df7b652dcaa5efbaf3ae013ddb977ff3bde1cdbb628fd87e579
+d986ed69cbba31d1be459ff986ffc087ee09fac883f096fea1ed6bc3de1fd2ffacf251ed
+afc988ec80d819cc5bd613ed8bbffe71f9bd9efe5cfb0ab0f493e417cbaff281ff23d0b2
+6ae07bd8a511fa50ff1df252e8a5cd93eb6de35ce986d2afed62cffc9702c1f77dfe87ef
+04e54af37a08e058befb44f7bf9bfea8f436ff9628fed837e361da55e00989e5c26bd488
+ef81fa99d179ff9ff967fcd753e986fec160e751d0a8ff47f927ff40f2a3fb72f5c561e5
+1ddd4ec2e49458fcac3dccfb03b1f87af09345e06fd98afb22ff6ddca5f095ff83f5a5d8
+27daaf42f015c7a9cc9ae16bfe7ab7ed884edec19fe647f39ffe37f7c09acca7c781fbc0
+20ff43b5f92ffe9ff550fe26f8b531f2afe043d85ad86bdd86ff8ce8c1a4fe2895d885df
+5bca1cafec86e1c065baf59cfeaffb6fcbf2a121fa49fe1ad941e00deac471becc24aff4
+a6d04798fac59fed1bc0df93d797d886e003b0d913d897f67bfea55fffd02dd8f65c7fd6
+e52fd962fabf9ffe04d360d854f335fe4dd831dfc23cfeb65fffce89dd74f239ff4cd82a
+c9fb3bd2ff9438f886ffcb0cafdd5dec2ef460edbe3a95f0c3a4dc83d8b81cb6d97bddc3
+6ed95cea89ffaff62cffafc61dd041fa62cdaff219ff3af68bffd04cd805fbaf45ce14c6
+3c94eda93efbd879e0c1a5bfff6dfbb327f543fe87e09211fbaff08805fe6ff79b5bfe7b
+f618fe5ec2ff6ab6ff52b9d331bff21ab6ed75b2e1fe4a8affa4cc11ea38c2e77fed87e0
+a0c685e57af2b375e37dcfee8605f74bff93d77cf59eee5196e5a507edadd816b88ec1ed
+87d57cfe93e401feaee2864cf610ff61f395fc38eeac0ffb84ffa63ac91294e79f42fb9d
+f1bd94ed38dc65e0afce7aed619fe57bed6ddcff86f27af9d017ffbf59afed9333f35496
+edc859d997e5abef4effc960d830e0bfabdd39b8ed07cd61e1c0a6e94ff2ca79e005ed89
+dc7ae069c2ff15becbaaedc057feb583ff79b5f930ffaa0fedb722fbbf01ff52f91894e0
+c2aae6b121edb714df87ffc060fabf79fe69c5f25ffb45ff21d9b54bb8d961d818fed06a
+e0afc946e587cb5aff96c0e019cffa7df2d661cbf379e45efe11b5ff88fa9d54febd0bc1
+fa25ff99c71ea5d84fe0b688d97ee499fe0fceff87e7c32887b7ff62ce047fd8b67aed93
+ff7bf958c3ffd06ddc8ff39e42fb23dc9a3afaa5fe9efb41f7a5fe44a9e06b34fc0f95e4
+2af3d14cdf25ceaf64d9fa6affd49d5dea86d899c8fb57fe3787d0fb6dc7fe62d80eddb4
+28f1d939b3fb32e597d079e96af2a5ff88f27ce7b988fa9934fea5d105f4b880ec4c9ff1
+79bee348b6fb0eb0da27b6d88fde79d807c7f22ed9a5e080d9af4ef2b2f979ffc128fe52
+f72bd161f2b74cdd07feacf6d819ec93ffbff71efe43df16cf3de48a24a5fb4bff2ebfed
+92d883ecafd12ac55fceaec70bd89bf985f3d977d0fa79db5b9bf786fb70f2bf3bb6ca40
+8ae5c3a5f62bf04ba5dd7bd8fa5fa5dc529fed83f86cffd08955c2eb7bdca804fabd9ffd
+0ae03bd127ffa748ed1ebee57ff271ff8de21fc4fbd853fe25aeff76d993ed6effc968f3
+30f851fcaf61e579ff58ee40cdfe68d833e00ca3ed73e5bf93eba5c76dfb80d168db4c93
+fbaf51d8329ce583cfaffb85f295fdb6ee79e5c1abd976ff61f816ff70f386f121ff66ef
+79e726dc5686f5bb4cedafc3ed1bcaabe006d7fe7af4aff81dff49b0de87ffc026f2af1a
+c0f601ffbf36cda5eb459af7abff1cd84cffc95bdf2cbfce96fb72dd5bc7fb79ccff64d8
+28e0c046c6fe9336b9e885dd67d1be34fe53d8a33cfe9fe6a6cf79ea97bcf31bc6b2fb94
+11e682f192c8fd44d8a903fb4bff1eefb4e52cf27dffc23ec0f38afbc34abef2599fd85e
+d60ed936d89810fe51e509c6a5cc94e357d893d980e03affc293c5ffdf219dff9309ff86
+befe4393ff9c4fdb09d860d97bccfd5bd209edb669ff9ded88e580f1abfe1ec6afdd03e0
+7cee87e071b7f593ff64f143afed92f79e06dfaf3eefa1fb5c93eda566efd98705f9b0f4
+08f8a5c3e618f2b0d256c517feb722ff47ce9ffd3389e3bfa9fb49d85a97ec83ffc49ce0
+85d8a4389bfebbd811e49fdf09d465eda5fe0bb9f62cff7df587ff65f9cb83f289b6ef45
+fe30c0ff0cfa4bf598d3b249fa01ae66c4e03ccde5a740e961d8ef66bbe684ed93fea4ed
+1193ec98d97bfbca4ed831d34ecc28d95de085fb69fe5ccd3efcaff816d84cade57efeca
+16d840cef381fe94c914aecffe11f6b72ec0ffabcd3d98e486dc6098fd77e201ed93dd83
+edca7fe186dd6bf1d05fff26caa3ffbafa22dd51da39aff666feb9d98647a5f573fe6af9
+7fff21dd61cae86dddaaed49c5a8ed40a1de35d0fe6ae080dda562eda0ceb818fb86edbe
+9ff1b6fe75f8b763fbd48afab915cdfb29ffac45c929aefabf38ff51e336a2e57efe79f7
+97ff8dfa77f026d2bd93e7a6c7289beb85f2cb0edcb379f985ffbc61db23e661ffd943ba
+df58d4fb9c5ef27afdc250ff22fabf48cf93fa7aff5df73ba9f50dfe42ebac03f580d96e
+ed0887d2a5c0f879fecb19de4af105ebb0e083cd35dab6e154d086edaf3efbbd04cd9fe5
+1ccaafff77f7af1ed8adf451fbb3c62eff73edc028d754fe37e80dafd825ed9e14e2349b
+f3ae5ddd6fd0f66bffce6de0b586ed79c7fe13f1a7e00cd656e215b6cb99ff4bf312fa83
+feda51ff3093fec42aed4be5b00ffba5d19cf2b683f89b77ff931ae5d042d926deb682eb
+7beea5ff33afdb2dcc9cbfe06bd8a5c97bffbfa1e551fec0aff342e77b0cedb77dea93d0
+6dff8cf822ff58faa52995f19ef934ff9ac886ff7bfa6dfe5cd902e1c264bdfa2798d810
+e886df90d95aa5ff93e58dcb87f3cf6bff5ac7fe79cbff52e593c0f910bdec9c4ef321fc
+c019fab588d9b946b6fd6bf3a0c1ff37ed88d8b89dd842bb8ad0a5c1e74999fbc0a5d56c
+edc338ff53c732dd01edcb3bd8fab67ded88ff6af4c943d80ee08ac4f671bafe06fb51ff
+8ef92cda50e031c2f09a36e06afc92ffafc92eff59fb86d8b544bed993d686efc6ff15d9
+66d779e322db51e02dd186f290fb9e4cffd96ec9ff7ada71fe55f704feca61db10fb4fff
+9541e084ddaf4bf2b685d81efe3a9fe09038c1e195d87adda3cf2df664ff95de86d8af3f
+ec70dab10ef960ff79f6d906f261fa78b9de8655ff1cfab87ee38df593fb7bffb064f3be
+8647fe0dc7afe013a9fe86f7bf5be51cb4ef6ad986d824cb59ee95fb88f89317d6ff84cf
+1fd854e086d999dc12ed2ee4a2fe61ed18e04aaf6de681fe0ff2a5fe6bf3c0a5ecb53cde
+29c7ea9315f3b646edaff23bc5a2e5b635f884f17ad81ec3eda9f72cfd97d702e761eda5
+c4f179ffaffb03ff57f53cff61e083d805eb3af820ffc493fb4ef285bfd42eeab26dffaf
+e020ceff03f6d092d99f30f24cd90aea4abed02be09f0df6c2daa5fb4e93fbcf60d9a043
+fb7cffd54de5a1f261e89edf79d40fd84ccbfba95aed94e59ff139fe5ef677c79efc61f2
+0ac9aeff6ffac5fd42cbace0b849b5d89641fb18ffbe7aeda542fbaccc83fb9924caa8eb
+79cc69edafd045d9b9affb8708c8b768ed6ffba2ffbc7afb58d225d886d07eeab0c693ed
+affe54f4accb81dc6de00abcd09efe3df0a1cb23e5c34393efab5aecb635f350fec0a6ff
+78b8cca5fe6af579feacd68959f079e9c13b9ef323ffc2afdd3d9afac532affe81fa19ff
+a5f37fffa464e8be06ff5ff776cdabed25beff4fafdd7cb6f73f97dca1018eb8f45a88ff
+93f708ffcb91d97bcefa5bffd079dd59e208d1ff61f615ff3dfa9c1affa5fa66e24ad3ff
+81f3d81db5c645ce30dd0bd993f869f046dba510fe50ca0d9edd935dffbe48fbaff062e5
+23c5e487ff67fd5a87fbd671fe9fcb6be085dd7aeb1ec9aaed5cde25e595d94cec36ffba
+1ad82bffafe587d85ce40694f2c01391fdbf09cb5cd8bd3cc2ec20e4b83ffad97cc81ab9
+fb0dc6a5df81e8cc37ffd469ebcb2df3b4edd81cfbcf20dd6deba95ee564f1119bd80dba
+f533ffafed54b9de91d887d977e0c287e62bc17ef5b757da3ba5ffdb7ef092f79bfe73eb
+3ddeaffe62face80f186fad12efbc219eda5d02e95ff7dfa58b618d994cfaaedbe17d93d
+df1fffa5fb08d366fd5ff728ff86f9c21abffb93df67cbfe8ff285db02fb6df584fecf5a
+ffade64add87edabf778fb55afd87affcd872ebffb9fdc86e16cfe3ef80296ed9326fbbf
+85e57cfe5b86e4be79f0a2d446c0f725fea0c1e585ee6aa4e09468c1fa9f29fb49f2affe
+2ff05ecc9fffdd149fee78fbca8750fa17d855e149ccb3ff9b16bee63497d925e0bc75ed
+6be5b578f67cfec342b9d693edc151f608fa339dff80f893f1be46c3ed87d993e08cd998
+d859a4ff6dc808b6fa9746e061d071eda5cb2edda526e185d86ef198ff42e429b8d093fe
+61f20c96ecacde4ced35ff4def94d3a7c0ff4bbbe09d0eff4ecf39c0ff9b51fbb639fe8c
+df82d8b131f84bff3ac2fe06d3f73088e6cf7de0a409bed593fe03ec436ec0fe28e3a60d
+f4d299e07cffc088f21f87d6f26cc8aef369feb140ffadd93bffcd08e05beda1f501ff6b
+fba4e0b47addc462ebaf5ecc7afa9852ff3af214d250ed10daf03ab2e59fed2fe7afc0f7
+38febf51ffb64cf2c763ed34fbc222d0a5c796ff01e031ddaec1fd5af58afe7ed093d8af
+29f25bdb7ad0fb74f1afd893edaad922e8ce05de86bef213ff51e487d5a9cb95da79f251
+a5d8ff0eacff58c5fb61f63eb9d894f9a8e088d07bffc1912bfe41eeaf07faa2bffd43a5
+fb1dff4de4c179e9c40f99f35a9dfb86d81ed964e0afdd31d860c9fe3ee5b60bd8ff14ed
+2dbae5aecba1fe85fa7effb878c4f352ff79d75cff06a2d99520e57ad7fa79b7fb94ccb5
+68fe7af265ec72f0bbf69b4bdf28d8b408b7d91ff963ffbd73fe14eda01ed955fe62f615
+fc71faa567ffaeed2bccaf6bedb9ff50fb19f35fe386c4fe6393f0c739e585d893b6dd86
+fb59cbff21f751d936f1b8d96fceb968e5c653dd78eaca86d88dd99802f9b762fbcf86df
+c036f1a5ff7efac14c90f37dff1e99f286fec154aedc86d7fb890ce34bafe638afce31ad
+fe84d025dd87ef7fccfb76f2acc5f10aa0ea16d850ff0bd99fe50ffe3adba84587ccff79
+f76bff9fe570edacde07e6cb86e064f9c587e527caa5c693e054c8f1934dc4fe5cfad8a0
+047be093e9aefc2db8ea21bfdc5c9df575fe1df24eff12acee2f95d86bedafe5865efb96
+f525feaf79ff2bf6b609e551ed32ffa9d228eda54bfe20edaacb50bee63895fed014e4b7
+efd14ed829eda1f76dfea55ad0ff74f9d768cbf36afbd803dc62f7affe18d9af2ce552ff
+5f93fed061ffafef91bef946b0d893d382fab6fe1fb7e9a1cf48f13affc14391f79c46fb
+afce41b1ff6cb7ef4dff34aff38d30d9f9789de0943bfdb4f6c028d14cc99fff6baff738
+fecd18ddc197d8be9ac5dc79e45baefebf069fffc314ea59bed835edc49ad05aff7afcaf
+cc64e57cfe6ac8f27bd387fe6df911accaec24a7fb965286b0fb75f661e037d923c8f43b
+beed951cfebb08e0bf7bec8ae59b3ebfe354ed99cabd12e0c14391e4993fce2ce278c8fc
+5ef767e917d861e15cc610edb686d86698fbd85dc7f3a32cff97f109ccfb7bdd86ecce0d
+ffd4a41aecbc0cf5c086d849a5ff8bf176d90cedd07be5b862eda54aff36f36afd4cf8bc
+fbda3b93fad543e0abcaa3ff85faab16fb73ee93db9e22f9b842f294d9379fdb60e017d8
+93d3ff5388f7bf49d9c5ff02c0e493cd82ff99f2b480e09f29c2e06f9eff9342f951ff21
+c2fb60a3ff81f66bfdb477f8adfb21bef76affabf41d95e026c59fff86f296f989fe7aca
+fc1df3c415bbff3588d6ee69e07dddad44d706f9b679e5ba4afec259ffd078dd27fec5ec
+57dd15fe87f9a64eff01a0fb80f8b87ae288e025afcf0ba579d2ea5791f673fe4af001d5
+6de093c1e00fd639f5c679ebd8ad1bffb0f706ffaff17ae55e9ff2ce3ce09efe3493e09f
+42ff06edaf49d110ff50f7b6fc45f5c52eedaed19ec9a7ed7df2ce39d80fd93fd0ed30da
+79cbec86df9c4cd0afff51d8fb38afd905d038d956e031afdf78e5b179dbafe610b8c823
+fd53f787ffa1c94ffe389ded7de1b38e3ffb93f09f1184fbafcd61e53dbfd992e0c146d8
+26e6c306fa5fc0ff80eec8fe1ca6ffbf1bdd93d88cdd5aed39ff4bb5fe6be2af52ff1588
+fbc777d883e0c4439fff26fbc104affe7bee6fc1ed5df9cb7add69d7fb93e979dbc46193
+d87ee9b462fd0df668fe5ada08b9fa86fe9df488afff62eea54ffe0ac1ed81d96dedb379
+bef46afb7effa5f593ff80c0fa46ffcd26fe76f884fea5d093beed2fe26ded86d0f560d8
+28fbc6ed69e55abcf3d99942f4aac793fb2af752f388ffaf6cfba5cf9fed62d8369d6cf2
+cb2fe0b55bf328ff78f786d0aef15ec3f286fe95d0b1ef49a5e62dfb5193ebc068dd87d9
+9ce44cd80db7f52cd5b324fda5f71ebc50c2fa9602fee115ff5bdbc08dd894e01ad68ae9
+79afcb58e362de1bc8b605ffd978b5f635fe02fabf13ffd252dfa4ed4acb19d851ef04a5
+d96da5f08ad75ed938e051e916d29bc0ff1fd9af16ff96ea8601a7d81cceff8833c2e580
+ff1ded6fe082cb98df0bd0ed34dd52fe11e086f5e4c24b97f862fbc781e5b0cd21befe1a
+93e49e2ad903de3fe06cccfe5df2afbffe20f8b63af557ff79f786ffd863afff84edb64b
+c287ffdd9f2ff0c678b9d69af01fff35f44db1eeacff50f82bf0bf26fe82fa7af5cf8a3a
+c3e47bd88fdda560e59b2bebb11cb8da88ed9cdd8dd0fd32f7c856de06fbabf48effa7fa
+60f23e88b7fc66bdcb44affeb6f681fea045e4adff08da5ad6a1ff16b9fe2cadfa7bb6ff
+8bf193c6b3ff5403feafed7ed99c09ffa545fb9bde66b8f83fffcb68faa6f490ff0b93de
+9c0fdc5ad879cced74d61bdda5c82793faca12d961df8ff1d83e80fbb868e5ac29fa55af
+dea5e474beff8437c2df86d86dff95b8d239e04b93f2aafb1aff5af043cff282cafe7af6
+93ff78fb61f427fe5893ed9f1cff94ecb74ac60ec443b6d97efbc7e743d8fa79f2d45bd9
+39dd60c8ef69d877ed95b8f347c9a5dd67edcc41e04fc818d74aeb29a5d9f387d212ff3c
+f4cd79dcc187eb4fedd273ddbe81e0b254c72cb6d8f536c1ff84f3acff06a5fd8af2b238
+edace73e9df17afa39ff16afedcb0ad8ff43f3c592c1fe8648c4fbd027d8f29617fea2e7
+01dd4ded9fc1fcd725d861dfa3c9afff8826fa51b6dd44d833e00aceabc67ae8c349bfe1
+83d06bff93f2a1f686fe27e5a50f93f3a404e0a520f871ffa5f307b2fe25f9bf2efc7de3
+86f23dfdbe79ff9ff996f4afff7bf9cc69bf45e5b893d8b663f931fe10c5ff9f0afea51d
+f232ff86fca4f88661b5ee6fe5c34294e7c32de062cfff5ffb81d8ff4de5a2bed093f969
+a5f284afd086ff49e705d3f1991193faa54affafcb46bafba5f387ff0b86afff7df6c041
+e91f97e4c4aded0dc1fc6df9a2bcff3ffbb60cffa8f963f13ed821dc67d85ae095cf64ff
+b6da6cffc577fec786e1bf2ed193d97adfb052e864d005fb5fd4af11e8af21d95adb37a2
+e05c95e9a8ff72fb4cee21e59ded7de2af3bc0f383cdfb6dd9bbed12e547beffd553d929
+92fbbc4bfe98bbfb0b93e1c218bf8bb8cd0bfe53e037c6fe5ae531ef13b4d96bf9bb79ff
+b5ed6ec9e567dd7af78acd5dc724aadbee5ab9ed0e9afe69f9cc56fe679fff5ba5e0c34d
+ea73dd84cae561d812daaffe7af3affe34fbaf08edbf3bed52e52a99e9329ef11198fa78
+fe3ff7c162ffc4a5febe95b7ec78dc5bf2ce8ffe7cc3fb0dc0fe1fd031ddc5a5c1ffb14a
+b9d860fa88e562d9459fe8934da0d87bceed8e19f69bfed014f0d36de450cbaff842a5da
+fb30f26de880ed99fbb623d878fec09de47deda440e029d851e004b7fb38ec10d931ff78
+f9d36bbffb3bcfaddd8cd884b7f208c0e080d0f01091f296d515ed4a9bf488fb9b31c2e2
+9f52c0e073ccff6bfab086fe7bcbfb59d1ff52cded4ddfafeb9e0ded9521e14cef38ff1e
+f79efe8845e402b6ee6db0da84ed93f99817f25688d97bfe1cf1a7d123ff93f0c107f6b7
+e33bffaf27fbc97fe062a8e07baff61bff88ed6ad0ff865ce0affe43c7ba07cd61eb94dd
+af50fa3bff21c2fe69f5adfe86ff7bcf9cc0fe84ee95e0b04afe2da7d96dff53f313ff46
+d893fb2ef73c95ffbb2cfe60f8b3ffd225e04dbeec9301ffc61aaeea2ca5da22e0c116d8
+b67feeae6ce0a96cffc31a86cffb7acbfa80d886e0c58cc13bc6b4fb79f5d73ecbf32dff
+4ee06dccff7ed0fb05f5abdf9635fcb659dd29ffb365fe71f2c479e0a04fff02bffa5aff
+38c8b660dc26e09f04c1f7961dd1a5f77aff9ff486ff10f692d8a8ca96e080da9f3bc4da
+5fe922f253a6e343d80cf298c0ed79f9be27e286d07aedb2eb5adaa6c2d96ce5cb80d9a5
+3b87bffe79ccff5bf6d06ced95fc7bf7c779f162fb9cf438de0ac5fb1ff7bf338cd9ff45
+a5e039a1ed17f4b15ad9ff82e524d8bf5093ff9b5ae0a5bf04f642abdd38a0edc44886ff
+d86ac9f87ed86de5cb20da9709fa60edafd894f230cf9ade7efccd85f37cfeafed49caff
+86e028d951dc2ed758cc64e819f35bfb4bf70ebfed9319f7a6d792ffd867fa7cff88dd1b
+d8af02ea98c5fe3df7a51d86ffbf61fe21f44ba8ed20e3b7f25695eda513dd79b5fb44d8
+59d9973eff9ec942d387ff92f34fa5d979e1affabd60d7f669fed976ffbe2bfb9d09ef98
+fa66ffabe01cd8fac061fbd9a2bee779fec02993e8c60cafed9302eaadfb46a5ee81fec0
+a7d31ff840e779db88fa0eee40a5ff56d435d871dfa55aef69fe92f178fb7ef19bfeafcf
+88d8b893ceaaff4dfbb0c964fb49b815ccabc657e575fb68ffc386fb5dafe06cd9b8e09c
+01ee7de086c7ff79fb88fe04e7c434faba87ff2ec1e582ff15edafd002ecace457bfdc67
+ffce89fe04ed4b93f1ae25c9b902afcc67e479ecafd348bbcd0ced87f7b68615ea79c356
+fe23f265e4aff360fb9df73fd9ffc23397d9ff53d131ed48ff93cabda4fe51ec72d88ec6
+e917d988f694ff29f9bf0fd5acc514cbb3e404d8327afb40ff09ed33e07cd686df33ec94
+c3ef9ffe2af7b638f4afca4af236b6de0ac2fc30ff4bf2c396cb41fab609d843cd5cd886
+ffaf68f2cf52df9c0bf1a5cb66fe86f570fe13f1a525e5a234ed5bd886c7fc14dd93f26b
+fdd83cfaa9d052fe88f87af1a1c64dce33ffd489ff98f186d894cf51ff86d93ae05ad0b7
+6191f2c50f86b7fb93bad886ed57fc0bd0b726ff9ff452b4f26fe3b811b5d87ce9a0fb44
+f37fff4ca5ff87f7c19feabb90c5fe61f225f575ffc007fe3de087d97feacea123ed95d7
+a5fe7af6519fed88d372fb30ffa4d673eb93e09ded6cde1dd9c03cadf985f3afc748f9bb
+30e04dd993c579fecc6bfac681dd9aff2ea7e55aff43ebb681f29713ffb732de1bd836fb
+81fe92edaf53f237df0fe54aff0cdeb718b3ffc285fe17fabe4afeabf6cc1bf250fa14ad
+df7de56cf2c85ed723fe86c3fb46fe9ef263fb33cf6de489d993dfc242dd52e01bd268f1
+58a5d88ecf9add5aa5e07bd86fed5bff058ffed960ff16e656d888e5cb64dd14e5afd862
+ed1bfe52f67dff29faaaf574fea0e020d85cfe89e47bdda4c1ffa92afad83bb7f20fb2ff
+25f064d0f779b6d29fc625dd51e5cb85f3c86fffb6e560dc24e464dda4cab465feafc683
+ed7bfba0ed892aedafdd79e6cf79eb5b98e37bd79cc3ff37cd9cff44a3e483e664d908af
+cf84e044dac190ffb71dfe39f923f2a0bff46fff96fa26bff903fb4ffe16bdfa4cf3afff
+1dd0a5c1f14486b6d093bdf42affa520faa2fe8e58f3bb93cfaeddbe16b7d99352c1e50d
+ef8bfd7be737d81bff52fb0a8bedc05b9bea7dd89edf54cb85e0a03ec1fe0ae37aff92fb
+ab4ce85ea1e0934aa5ee79c9aefb07fe27f8d89f5af9d03fd962d85dcef99e4694f3229f
+df2ad4ff41b2fe65ee76b8ec1fc6b0fe04f9bf96fbbb5bed21c0ffad01ed4bde9ecbbd79
+e660fc1594d8af46d9a4e56deca7e06dcbed81d9a430c799f63cdc62bfdffc31fa64c8b5
+6dcfedb348b9f1cd0fff4efb3985fe9ff378d1ff36afd858d142c5a0fa71f0afd282f2ce
+60feb1f707ff46fb72f4a5f90cfeafed83f391ef60d80fc5ff22d8fe04f7bffe10baff48
+9dd886da8a2fefbf1cadffb9f232fdbf07e4b6ff68b9fe58f7b06bedca05d93caffb7ff7
+88ed7ad8a83def2bd2ff88faa55ce593c5f779ff67eea9c793ceb0fe2beec681ff39d8b4
+3eb7f99f41ff10cdfb68e17ab6fd96f80e9dd87fe011fbd93987ff80d928a7e57bd8a8f2
+c42de54ce008c69cfb7dff85d9ff06addb9627edbe43afda1ee088d0abc793e319d862ce
+5dd92cd84ecf31de81ec9d64f1b879b1cc6ad894f286d0f63cf24fffe677fc9beb8a0897
+d9a552ff69d831cbec81dbc40cfbbd7ce588fed00dd94dd827dd5effcb7dde9938e069cc
+f33afe61afd90fe049fa0bff3bec62de86fb0dc1f284fe88d924e5b98ae37cbef10affcb
+29d859c9f34dffaff25d99e9c303bff786fd3dbeed058bdeb568fcb1f97ff15cdd1becae
+65bef43ffec26afe9af57afba840e653f12dc0ff88fb95f27cffaff76dffa6f953fcafcb
+40fbd929ed3de850de1eb6c670cba5c0d93be04ef7b6fe78f5cb83f08efba706f94393e1
+9f30ff51f2be6af4b9ff6efbaff11b9efd6df8aebff60c9dddb7ec2ec0f587d790d99dd8
+87faa94bafe09d4ddd13ed96ff55d4f561ff39aedb51a3ed89ffa878eda03ecbaeff52fb
+9eec42b6d899ff6bcbfa47ffcc9438a1e223ce96f8c131eecd86d87ae9b40fd836e254c3
+ff7cfa98d98651e53bdd1fe0bf0595e4b81bb6d830dd83e39658ffbe9ac4fd6bf97affaa
+fb016ab2ff85d56fde47e320bae516d84fe0c1a2bfff75f4cd86dda52be09636a5e8934d
+c7b6e147d811ed4c86d8ff841da5fd9451ed2efe6cf15de401d8c4f363ffbd79faaf61c6
+ed861dbfd194ea6dc6fa79de25e2c305bfe886e019d179d86fffca5de424ddaf83e08c12
+f3b9fe6db5ff46b88dfcb64bff16fa50caf781ffbf95f21bb5cb10febdf7a5d07afe9e5a
+fbcd44fb9cf27efe6df412f9aad079f30ba6d993ed13e25aedfa22c4f212fe95cf86ff6d
+a9fe94f77dff63ed19d948abeb16ccff57fbb6e012d0f682ff68f3afff92c3fdaf49c3fb
+d36dd8ffa5c682e525ffbf86fe3593d821e7cd33e0c106abfaaffe4bf823feaf13d05ef9
+6bfe93f729fe69f68af22edeaf0bfb7af454fe1eb6efd573dc51d2ed69c4e610d86fe594
+d08ce0a546e8a004df61d4ee6be0ad44c601ffbd4ac3eda878dc85d858e006c9a4d387ed
+19fe5ac1ff32cf58d689d89479da9e60eaae2bfabe3fc4f258d03ad927d893fa7ec1fe88
+f9799fda86f068fea73ed907dda530cc57e229dc7beb9345f708ba60f9da52d0b242eaa0
+bffd78f85fadff7bfc93db36e180dd9cd885f293ffabbfd944dc6fd497d941e0a4fe65ed
+93d2aac798d0a5fb3fa3ff25f7bf03acf579ff9bf224dc55f629ffbe68d8f884fea439ff
+80ed93e5b46ded93f831c8ff14f339ff96bcf74eff39b6e086afdd80e0a1fb76fe30e5ff
+46fbcb7dddb868ef9ee01ddc86edaff25de53bb5e023d85bc6ed01cf31d888cbfb94ed79
+d0fe72f4a3fa93fe13e0afc99ae6c21c89b7f571fbc55bed07b5cb98ed56d929f369ff5c
+c802ef54e435dc4eed1c87f4aefd55f17dffc311b9cd35f84bff14f160d96ae5c985d89e
+63fed834dfaf43c1fe7ceb95d97dcbfb34b6c827ebc15ad621fe5bf4d322da6de39061e0
+c2a1d061e788d8bf93fb47bdf022fa4cf125eac593bfa5e0b818f23effd004eb64fb76ff
+c102a5fe86c9ff6df6a2ff38b1fa80ff5af326b760c0fb2097dfb602c851b7ef80ff5df3
+40ffabfbcb0fdda51fff92d0f545fb16d588eca5b9cd9ff4b686fc79caa5fb95c1e59e17
+bbd808ccb066ed79ffa5c1e26ddf8fff27f8bb0aed5be5afc687fa61d0fa67b5cc01ff5a
+f2189eed6effaf78fb9ef6b786d9379ffbafff0dd1faaf51f91ffeab35fb1def6dcbff6b
+d89dca8cd9ac48f70af06186feabe079b0fd8dd4a5c94294fccf2dde9909e8bb66d895e3
+4bddafe279ebc6ff41a7e7c746ff85f1a6d961d027db86d87ae03195fe83f2ce7ae0589e
+e27cdc6affc34ce519eb42ffc12dbcff0ace3bff5bfac679ff93fb26f897dd4eea1f95fb
+c54fc0e99479fe89fa39ff17da7bec0ba2ef2bfb88c6a4d2afe087d94ce4ba0ad943c9fa
+69ffcb8642bfe9a32fed86d8b679edbf73e5add90298e55bff07f563ffbe9ac633baec93
+57c1f438c252ff12f5afe577baf86cf2aad141ee0ef876fec1199dfc930a9fd8f3845ced
+94d643fb23fe75f4aefb16f061d8ed4ec73baff719fec226ffb9f20c97fb86fe93d868e0
+a4e668f583dd92d82ce0b13ce85fb6d539bffb88d9bf2fafed9d44c4dd52d9a5ce77ee4f
+ff93c2de74e1a7ed32fe3ff74efe10f667cefe84e59715ecb608d8f0934cfec494ff49f5
+cd08ffd69743feaff639d286da7cd81ae453fcd0ff1fcdfb0d96d8f8a1bfe061d81eef4e
+9ed852fe89faacc7a4d02693f5d237dcb5f88717d5feac10e5be9aea86e4a13ab9cf9eff
+b677afff9de85ad586edb1894aa2dfbe32da5dcf79f01afb46d9aeec54f17efe6af6c09e
+c3f283ffa506f255fe87f602feaff411ffbf26f399c0e0aa2ffb41ffbf5cd886dcb67bd8
+93d096ed37a5f257ffaacb81f3a562fbd760f211adde699fe29256f9c765d879edb8fa44
+fea6ee83d88e5d9fe4ac66dbff8426ed4c98ff91fa87caff15e2c027cc7afe53efb0e04c
+bdff5ee044cbfb9935cef763ff36afd909cbff59e544c604fad226de86ff6ddd37d0f6b6
+fe6ff9c878f710feafd193f3b8249dff06c9acdb0eed4cfb17d961e5cc7bdc9de079d886
+d872e0ac7ae74cfb1c88f2cc82d99911fd96f009c8ff24f25bff80bde024d879dd51fe3a
+e4c01cafe180befa27c3fe3eb8ed26a5f22efea51496e0c235bfff24f5edc84cf2d4a544
+c4d988fbcc2bd851dd37b6f360afff5be513dd6aff82fa70a3f07dffbb6dd9ed79b0e08e
+c3fe54f87abff17bfe89eec062ed52d80bf2a2fe7f08d83ee81fafed88dda53dff61c97a
+fbd870b5e54297fe87d87ae59cfe3cb1ff1cd334f04cf92affc058f2c494d0affe55b7f7
+5cedafd644c0fb9351e59fd82eccf96afeafef1ae9afda73ff9bf235cae66fb4ea7fd1fe
+64cbff86d852ddb6f36193fb9a56dd7c0594ff8816fbafe56dec08a6e580feaced7ace96
+ed85d993fb86ca34d907e6cd11d8ac2af257b5ff48cb19e871d794ec1fa5d92ed84b9df8
+82fbb3e5be48b5f1aafb94caa2ff37d851ebc298ed0be4bf47d0f879fbd062e234ffb928
+c4ed5dc1ee80ffa9c79aebb033fbb506fe61e57add04d4b52cf481ffa564dfb979fa75f4
+af03dd9c40c1fb935dc4f62dd879fea003ffd144f81493dca10fe576ee85ff2acef208e6
+c4a5faafda3ce0c280f120ff5cbefe48f2c20d9aff2ffb04d73aed4ab8f39fbff2af55fe
+74ed9ac0fe05c586fbbf9bf52cff5bd0fc85f493ffbb15dda52291fe85da2ae04ced65d9
+7ce693ff70f925b5fe5b93ff9f2dedbc1ef2bfa5cd88f96ca2f7934be2bf6bfb16d162e5
+c56eed86d822edacfb79ffca63d91acff520fecb14dec263ff7ac6f78761d8fe05a5ec8d
+db5bcff39362efa9bfe535fbc1affc1acb5ce67ab2d769ff3ecefe75f79dfe4dbf91cea5
+e079daaf69fad36dddafe575f6c2a8e821fe5086fb93c4e41efa62d893f1b631ed4bafdc
+87dfaf47ca0ee079edcc6cffb8d83eeb99ffbc90c1ff03fa4ecb08bbd891dd81ceed1adf
+c45a93ff9e4efa01e746d7e00fd0faa50add5aed87fe9f1cd9aaf952ffc1479feb50a5fa
+8dee7ab4ec5aadff9941e7b8ed32d9baff3397f1bf50ff17e5ae3ac1e09e58ff79f35ee0
+3f8fb6f99ebffe50f8bd90f06331e9c125d886f5d944fb2ef7bf1aebb740f0c25793ff9f
+1cff83d297e0c317ed40afd086e72ee05efdd86dffcf61fb15f39affbe60f93aafe630f3
+78fac111cd55f21fa8e1bf9ff3a8fe38f54cfb32b6f468fdaedb79ccec85d87bffb87efe
+9a37d8f588ff79ca37f2bcff3b9ce0936df9c517c0db25e056ff36c389e16dd1f2881ba2
+fb9312cdaee049dd86c2ee76f987ff1efbce2ad994d47dfec6e94adf0ad9af3ae413adde
+d3b368ed97ff01afed7bd89d64ffc779fea31decc545bfe06dd960ef3bffa1bdf968ffbe
+52ff9ec90e93e4a103edaac767e273d9a5c798fe52cf96df59acf288fc79d5f7862fdd5b
+e07ae99fd3aee56fccb003ed3ae516abfe30f1af22ed51c0ff6ab6cc40bae693d54d91f1
+d90bf5d336df94ff73fd9abed19fd9fb0bed2cbdfeb2e54dd3f97cf466ffa4fa3fb0d854
+df97d871b9fa87f106ecbe2280ff93f179cdfd6ed8ff7afb0bfeba49c6e579bfff12eec3
+3a96e05dbbf980fea6f286f706fb7ed988e26bd3b30aeda4cf76f8b1fe3bc8fa9340ffb7
+28fa39fe0ae07dd987fe01c9ff63d833dea541c2fe93fb1ab7c65eff1299fa3cfec06bff
+85f6c960ddc16dfbc6a5e586f124fba5f709ff78face67b6cb5cb0fe87f35ae5af4bf702
+fe4684cea5f98149d96dffa757e028b7c808d496fc0cfeb131f5af0ae04daeff528cf6d7
+af37c2ff1e9ded9329bf52abd880f2a03ffc51a5dd86f6acfd05f4d668d90fd832ce5cdf
+a5cb1ef44dfe2af6c47efb1ff24cea82d9b95be5d379e8cb7eddb6f05ffb19f161eca52c
+e593ee7cffaff06cd984d0ff2bf278c8eb81d887dea0d0be4694ffa653e2964af217d95e
+e07dd865dcb3e013befb29ff85e89e28b8d80dcbec7ddc93eebeff4ed8bffb93f10dc9ed
+83d0fb7af067e778db7df1cb5fd9ff95c4dc6bcde49e5afad9a557eabe42f8a7eec5f35f
+e214fec193cae935d75ae074cbaf2cff9bf58aff93fcaf43ffb77ad888e092db48afe18a
+dca715f188ff24aff906a3ed9349a1d88bcb9fd681fabf6bfe16ce5ae40dd429ee52a0d9
+8be0af44ff20f34bf82bfbafe011d0f80bfebf90ffabc99efe2ff39c3d91eea053e597d8
+14faafe282efa233ffb749c72690e49513c73eb6e08f38ffaf1de09dff2ec99fe54fa9fb
+88c144f820fba52ffec11188f2d379fbcb68e07be528ffa2d061e02af287fa6eff1eb6ed
+7ae554cc39e051dc24ebc167ddfb03f1aa3fffbcd856ff34c1fbad42d89eed6dc2fe31f6
+baff22f74cff26dc50e0aec799f9bd95fb82ff93c6f746fd06ee88d0b973ec96d864ed86
+f3799ed872e036cf51fb07c1e479cbfebf61ffd8af3efeb75bed40ff60fbc16be79ff3af
+f86efeaff59fff60fbc1d961f7bf3acfaded24c0ff18d52deab17be584edb96aedacff2b
+98e002b5ff16b86cafcb4cfab27efbaa0cc1df93cefa3dfec493f2b47cfa9fd386f2ad34
+b1cb64fbd5840dfa87c89be06ed0f57afb52afdf63d779e167eda7da77f296ff0df552d9
+36ed4bc1dc61e410b5d86acba5fe5cfba5c707feb61fd85ac7ff3ff4acfa7cea87ddaf47
+f9b620f2d02f86f6d071f1c780d893d020e4b216fe5add07d839e054dd2dd8a50193eda0
+59f279fb6cf85fafedb7fe6dffce4ed801ffcb43dc86c7fe4ff47cd89efec1fb86f01feb
+bf42c5ff9a27ef5090dd9f13fb61e6be06ed5aff12d0fe79e5bf229de9c0a0ee1bf851ff
+2cb6cd10c0ff1ff3b4ff0fd0b33dbee9ae5ec5a4d889ffb67bffa431f9a5f477ff9af92e
+bfe40fdb56e279cbff88f924b6ed9213d8be29f657ff94d86de75aa5ebc105a9dd259ffe
+08fa79d986f7cd7ad884ff98ed7bd08def84f5b2fe3dccff86d813ddc593df863d97d816
+bcf58fdf7baff876ee5eaad98ee734f246e005d95dd76ffe9fdc79e5b881ffbc63f7c0ae
+d923ffca92d87be069bbee4affaff45efe3dccacd594c0ed68fea5e081d89646a5dd86fd
+94fe07cdf837fb44ea1dcfe504e0afca52d3ba38e251dc63a1f77effaef44a9fdd77e459
+c3dcfd67ff99b8d486ed03fe97c2fe77fb8aff55f8cd76dea5f24dff3aa8f130ebc047af
+ff1dfa6bdd50e280d8b60ee495fea745ff03fac8f65af29a32fe50ed1cd8b60df9d01ffe
+5bbacf9467f588ff95d90af24ef837fed602e9d029e34b94f1a54efe28f5a5fa2e99d86d
+d936d086e56aff49f207a4e54df061fa39f2b8fb76ed2ed86ddf86b7e593cbaffa5f9ef6
+79fb84ff1fed8dc5f286fec340bad63395edc039fcaff2862cb5cb45ee1dfb34ade0b044
+dc10d745e496ecb93ceec02ec5e694c1e086fb68a5fbd264e5acce17ffc022fa8dfd53d9
+34f2c09bed6489b0dd79e0c0a5d099fb59ffdd9c67edc2a4fa77ffddadce27ed7de4c093
+cdb46daef55a9dfe74ffcf6dddb784e9c23ed9c5fe0ff67efe95f101d986d879fec77dd8
+1ccb9ad584d919cd5bfab9f551ff1dd469fe6393f2c74cd927e065ddaefb02a7d81ee08b
+f065fbc916ffa5d00496ffd86ce9a4c1e06fc7f179cbff6af882d9b61cc76dffac62ff5f
+b805f44dd911c5e12993f69b52fdb76994edc55dbfec7dce85e252afd9fe0fc4ff3afa0d
+f162c8b98840c0fb934be019d82e9742fbbe51fdb062ff18f2d942c9afed84daa60cf435
+fbcd609eff934f86edaee017dd58ffa5fa28ddaf36f994fc79ff02f45aff93e09f16a5d8
+7eecafed0bddc02db3fd93d09bf2c04380beff6cf499ff26eab680e07bdb6aecc14baffa
+07fe5293ff9f40fa18a2ed93e55df387fbb210e093d6a5fdd277ffbf9efe7af3b905dcc1
+34edc4fb459ef32ba5f760ff1dfbd02ebdeb4faad87be586ff37f4d8a6e52cccff81f6b6
+edfec269e7a1d023ecade060beff80fb1bd839fac782e19a16f2be06e2b5dd9e46befa93
+d2b861c4ec7feecb6ce058ecb9de88c975eb3dfeb4f23bfbc32d96f755ffa5db15ed56ff
+1188fecbeb4cddbf59cbaad00afe52f626fa85fea5ef83d98af2cf0cf3d28dddbf39d022
+ffafe04ad8f452fb1def4b98e89035ed50dc42cdfb80ffaf870fd4afdb71ffd006d893dd
+a574fe82b5f467fcc646dbb4e28108ff61f3b30ed8a54a8612e2b20cff79f5c5478dfb97
+10e46bdd8eed53affe5cbaff82d0fb79f825fece87c542f223e69f47ff0ca9fe24d3a33a
+abfe26f9a5d07ad986e06d9dffce75d888ed6afe86d87cc6f09f2493fa9f16f879fb83e6
+93d9b0cd5ee03bd81cd05ae528a5e4bb61fe59f786fca8c83797fe7bb6cb9ee37eddc224
+fac6a5d786fea061e559f1caf765fe16e5b583fb6ef142c7ed5ae027d2bf21afed93259f
+fcafcb93d378ed5bfec7f1d87bf9c787d9589cfed832ddc1a5f746ffc4a1df20d2ed40db
+51afed56c963ec1dffb479fe6ef7bf93c2f288d97ef6b6ed52d866dd0eef4dff03bde741
+aae219fb3ecbafe638faa946e0b5da36d1ed86e02bdb4df21b87fe9dbff579ff9ef57cca
+ff4793ec2ac8a5e961e17cf2cf01ed2dfe67beff39fbaf5ff207ffb61eebc624d89341a4
+e08af2bf3bea4ccbaffe9f0af795ff86f99fff70f6b8d950ea3cfa23febde08732a550ed
+38a7f22cfbb804bcf75afe2bccb68605fe76f8a76df692fe28d59fffb896f369e3c595d9
+18e054dc3ce550ff0bdc83fb9cf291fe87d891ccf360b8fe86f279b6e4089af279cdff63
+f872fe68b7ff51c59fffa9c0ee44d912afe549db35fcb668d8fb7ab5ff08d8b413fe51a5
+d988df8cf20ca5d87be1bf93e075cbf569abff7ef8b7ff2cd85285fac3a5ee1a87e1be79
+d960e406de51d812fe6af282ddace187419ff7b7ffd386fece6cdd7fd1ed69a3e67eed61
+d8f3bf95ec3ac1e10bcb6ae75fd908e544abd905fb3bafffa5fb79fe86cb9fe860d01ae0
+35c659e52dfc4f96facf12d84bc9ff84fbd24bda1eb7ed06c8afe810ceaded61cb2ee068
+b6ff93f986cb93ebbf12f0af1bc2df6ced50ffc29cbffa69ff3dcf5bc2ed64f617ff3dad
+fa5196d5f24be00add61edacffd99724ff78d5f930ffd038f2afcc7bf186e49ac727ffbe
+5e97f2b7d903db7024e5b617ff9ef75093ffce1fd893ff9e30de5ecb98ff7ab6fca4c0ff
+78f78fc6fd79f166c1e98833d0b912bef327affa93ff7ab7ff9ebcf6a9c0dc28a4ee88e5
+9f20de61baff80fc86d4a0e54197fe7af505fe91f388fbc634d851df02ff4da3d981ff9a
+f440fb95cd78f435ef1fe5bf96f8acfe29d288dd6ac5ed27d9ff1089d0a3fe7bd89d02c5
+35bfe093d95db6ca56acfb9543febe2efbb83de7a5cd06edc41dff61fb93eeffc364e05a
+cb09e5bd3ab2f45be00cc6fb7cff14db54edd747f21b93e0c150ed29afcd9cf95cbeed80
+f2a1e26afec732d84cc8f409d94ac91ced62febf43ff67f8adc2f52aa4e05aea32ff79fb
+c25ee093d96ddf47d80aa2f295fd7bed6dc6f360e53bdd79d388d91ee684dd92d8a848ed
+18d86bdb53febf9cfb6eceb65feac1fb34afee3bfeb3f686fc4cf40cfe88f39cdf11c9ed
+6bdb9fcb79fe87f46cfe55fab17ee8c53baf518ffa95f289ff7ad8fb78c0fe85f2ac4ae3
+aff1a5fb2686e494c4fa35a5fe76bbff43e222d8ff09d852ff46d6b779ed86e4af5de67b
+f293ff87e583f195c4d936ed4e93ddbf14f7afc693d81af1ba30fb4bc8a6fa7cffce55dc
+28d09cfbac30fe96c7a7fe04f75bffa1cd5dff75fbc49fff80f594efa745eb0baffe84f7
+a64386e6c877d989d25deaaed081e76cdd1fec84ffb788f819ff4ce00cd842db8bd47ae4
+c1459efbd6edba1dde3ed860ec9e12f19b33da52d2f89336d065c6afffb132ed5eb7dd12
+d0eb86d87cfeae72b2fa90c796ef06ff99f715fea0c0fb25e053d20cd851e104b0fe7bd0
+ff61facf9865ef51f6b06fe4a5d087ff1ec2ed3cabf783ff5ed91fe0b4cd0dfa5ac1ed81
+e0aa2bfab909ed32e261bccb3be003cff790c2e248d91ce0b5fe970eff50f220dc9b16ff
+bb3bce7afbc14ad633e459c6a5ee8bf87fffadf033da17feacf10d9440ffc179fea5f62f
+bfdd66e6ca88ff991cc1fe8bf909e958d1fe81cdfb86e59e4af70eefc32ef6ce3fe628fb
+61b4d93fb0d862ee39aad87ff8b5fe6ff7b6fb78c1e80ab5ed4088d9ff0bdf7accfa4dff
+13efb6e9965bbfe219cba5f091f685ff79ee86e634b2d045f1bf51ebb087d993f20efbb3
+86ff5dba37ff87f29fff58ef2bd9f486e57dff70fbc75aeda0ffb651a5f693fe7db5e96a
+d0ba45d8bf1f9dff86ec67d876e0c0af69e4a5cc21c7acfc47ffaa17ed42e0afd959db85
+d88df49d03e0a023f056ffc891dcaa5aedb761fe94d8a5c0ea6dcbfe7bde8accff5bdca5
+3d93d9a73293de27a3fb82caacfe2cb7c89dff23bedc86d9a54380feaff479fe62e807c8
+52d838d94adea0ff69fbaf79fed669febe4fff7dd856edc779d8fba5d826ca67bed57acc
+67bcd630c7b0e043a9f77cd906edc6e515d964cbfa01fe2cf39cfb6ccaea4bcfaff533fe
+86f6d8f90bf25eff6dee88d184f3bfa2fb6dff7af529ff4cde3bc7f74fffbf79d9af1dfb
+67ff9ed283dfac18f34dff20faaa2df147fa0198f115ffc5f21effc7f462ffd15de019ed
+64e558fb3baae1932bf765fec8e533d80fd09edd88fba0fe7df2a5fcbb10d8bf21ecc50e
+addc1ae5c926e98efea32de7981bed60fd94f305fa9cfeaf45fb9af506a3f0cf23e46afa
+953986ffa2ee2898dd86d874e015b2fa63bdfb0898d95bce1a
+ >
+ >>
+
+ /Magenta <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+d8af40ed51ff24d350d812fe97dd67e0c16ce5c552fbd331feaf05ed5dd033f0a5ff79fa
+6ac0e62fd865df98c3d904e093d0a8bff303e49dc8a5fb5b95ffa86edd7ee2af1eff87e8
+b666df86d934cbfe7ffba126e8c19fff4ee53add9e1eed52afdd6ad879dfaf71fd99bafe
+9fdd7dd891d82fee9dfd1f96f012a2e028ed4393ebb6da4ae099ec6edd7ae65cfd19cbf2
+935ac3fe86fbcf27ddabfb70baff3bf81ccf63fb88dd7bf969ffba8fc3e586ed7be2c242
+adf505fbaf28f3ab0bb3e975da94c89fffba61e046da22b2d977ef9ffe0ff156a2f66df9
+31ff4587fec26cfe79daaed821e0c014f54afbc395f30dfec421f577fcaa4ad603edbb5f
+f819d8b893fe79cff97efeca39fca5f339fab816f247cb12aff337fe74f5af44c9b1ff7d
+d7fb63ce9fc1ff840294f2ab59bcfb41f9abc99eeeb64dd7faa04be11ab3f8875dc5ed14
+ccaac69fffa9bfea38b60be4c11dfa64b6fe38f9b269fbce88d986cbff5fd8fe68c1f73c
+ff4ce41fec86b8fb9ec4ff3bfcbf5aafe586febe42cc98dd72e5d2af4bf21cd23bfe6bf7
+88fe9fb7d387ed41cfaf75e09dbbd00fed8ae5b16bffd081dd70fb07c2ec2aade41696ed
+c40fbed985e5d080e08dfbd45ee0a8de17d0fa79e52eddaf48beff0cd952e3c7fd2acfff
+0cd29fc604ff44d87fff8815e0adc6f462d8bdfe3f9cfb88f35aee47e4289dfec7f2a579
+de95e017cea7c70ce7be27ff5df04ca2e280baed259de088f2accd93fe18cb60f285e09b
+1cf9c64ad823e7abff17c5fbb812ed97cba6ea93bfed51d028ee57ff08a9e06bd8f83cff
+4cfa95c0ff2ff8c33eacfd59f2a3d9608fffc75bd8f54d8cff9c49fe23a1ff60ef3487ff
+c454bffe9559d986f868fe93db70f47afbaf47aaeb7fbff366fe82da93f5bf27ddc2f666
+ff3391e5950ed9afe060d823dd93d879f4cd4c935eccfe3ef25aff6cf287ffa151ed95d7
+1ffad014f24997d8fec216d466fb57abf27dea12d54eebadd083ff94f279dd7ef2a54c93
+ff7ef82fff57fa06afd97be378da81c8f784ff25b7cd93ed79e457a4d97ade98ec0de5c0
+38febcf04398fb76a5e0c062e9c676c1ec3ccda5bfea9a0bed903cc3ff01edacc917ed39
+e4a5cb29f18dff61dd3eb0e421ed5ae666a4fb9540b5ed9ebff948ffcc85ff2ff784ff70
+fa06feb67cfad8ff21a5d889cb9edd2cd979d0fd7dd96febb261fea0c6ff864d80fba5db
+0dc1e03eddaefe6ff78aff3fed0ccf65fe38d056c1eed83cd962e0bf91d59fe536ffa6fb
+3bf3b72cdd5aed63e509afdb2afecc62f01ffe87d7b27ced951ad6afe004ccff20f9b22b
+f694fb6ab3fe0afa50b8f766fbb6e872d89e40f2b99dfbb821ea99d3bf14e588ed7bcbb8
+87ff2bc4e10ed5fe58cd06d971dfa559eb6ccba4ed45d0b987c23ded13a06dc7f660ff09
+f77ffb58f523b0e40afebf7ee0c13fe501f5bff1af44ff96f479ffb82b95deb608b9d97b
+de51e4c0a0fb88ff21b6f49cfbb51bf643ff86f1c10dcaa5d868fdafc79efba7ffc35bf3
+b511fa93d2b854fb2cff50c3f77aff80f3a860d979edd35ae103c4f286d879e5d07eddc6
+1fa4f35bfecf82ff66cd86f27aff5df886c3fb1aff4dfad96fb2fb51f3b67ce093f37ffe
+15c0fa24b6f30bc6a7e631d9f193d0b0e1eeac2fec7ae550d1b89cc5ec62c0f29f42fb2a
+93fc79afd99120e5c484d838b0d068facf47fe97f262fbb7ffaf29ed05d9b1e563cd09c7
+5bdd73e0c35eb891f487ff1ded974bfe14d44086ed9bd183eabf45ff84f1bf93d0a5e065
+dd2ed247c1ee91fe0ca4ffbe9bdf4ddb2efeaf23ff4193fed333e0be21e04ad906ff54da
+3be0afd836aed98bd89c11c1ed73abcd61ed2dff4de6c495ed79d0fe86db7afc81ffaf52
+fb28ff4d88fcbf9ed8bd93ed04fe47adff934edcc5aaf2ca51bfed44ceff6dd926f8c2fd
+04efbe86e378d932d8a01886f393c4f57b4a9df979ff81f393feab14fbd92bd250dbb56f
+d7f279e28ae9be1bf74cff389fe0ac18d94ae602f23cfebe93f99efe25d055bfdc8631f8
+6eff91edc161f1a2c2e46187ffb079faaeef78e7bfa3c4fb870efe9ff64ff238f5a8fe39
+d8ff20fa86db8bd8a531ff43d9ae38e553ed1ccb5df397c0e081dbd147dd12fb3aff69bc
+d88de018cdf879ff0c87e9a5ff7bfba55cec88eda1528deb9e3fff20f5a5fd5dedb3d960
+e848abfeb9ed31dca5e528d84acaea966ffe99fa7ec6fb02b6cb34fa61feca86df79c2fe
+6ff2c48ff9a5fe81d9a914ed60dd6cb4eb88e542fbc3a5d01ad84796e0b64bfa10f5bbd9
+0eed9531c5fc994cfa1b93edbe75e56bc998e177de64cbb779e0afc90ffb64f2be70b4f7
+6ad89fffbd9be4b611e942a5f70484ff66f178b2cea3f732fb60f2b437e59ac1fa35dd12
+d82ee0be08fb4cbfffd464e0c46dbacb52bfce89ff3afbc686df1cd87dfec145b0ff8cf0
+a359f5ce41e017f045a2e785ff9bb9d843abfb25b5e704d951fe2fc852b6d85df4c1a0ff
+0ac0f73fff96f179e55aee86f9afff14fb86d89fcc4c96fb6bd9fe9312dfc3abf0d944ff
+d023b6fe06afff28affb01f69446fea5c1df1cfbc8e504b8fb1fc94afb63ffd170fecb7a
+d9f3aae69bc0f41fe65add97bed96dfeb827df6ed786ee9df779fea6cc98e012a5fb1df2
+a9e583ff07f92ac2e09d0cff96f160e21087fbcd78dd01ffbe25b9ee7cd892ceff61d852
+f315ef93e070cef97fd38aed9dbee497ef1fff79e74ecbabe280d9ac12ceb624ffb0cb36
+e667caa6ed2dff7be9c13fd0b55abef661ff3784b7cb5d9efad861ecce7bbfef7ad95aed
+d06bf23d93eb994887fec77dea88f293d8379ef0ab21fe51bf17ca33fe5bd87efec110ff
+42aed681ef93ff5af6c364bfda48e52bff61f5c976dc58fe16f069e49eed855af7afd835
+a7faafc5eb9b21f75ad585d8fe68afff55f730bced1ee5aecd66ff06f2af30ed60fbaf40
+ff11fa85e093d030fb73f358fe2bcafb6df7d89406fda3c793ec52cfb95ff104f8a0ff1c
+f4d67fd989d1fe03f9acf15394fd8f4bfbd552e59effb824e481d9bc61ffb6ee9a51f53f
+e009da78f9c247bfdd93e0a2ed88da85e093ed2ba5e480c9f502ff50ce1ee0ac3aff1aaf
+f280d891d8af42ff86d094d88ed8b646affed03fed6afcd1883bff4fdebe86ed6dfa35af
+e507c0e19bdd7aa5fe935dfbbb9cd7bf64ff87d822c9e57ada68cc3bfb6cd987df1ecd99
+ed64bee13987f4d179f25aff08f784fea5c0da5ede86ec9146e526ee57a9db7ee02ac2e6
+10c1f29b1dfeb217c586faaeff0cfcd02dd816e0afd49fc1ff85ec1ade89ff79f92dfb42
+ff52f20cff61ccf76bfbaf5ae9bc90fab674fd96c7eb69c2fe51fa1ee594c1ed3af74ffb
+31ff94dd17b7d993c9b623e5c09fed66fed039e0abed79c6fa8849fe0bfbc43ac0dd29e6
+4ffe3bd9aae054ff88b7f648bafe9ec2f10cffa5b8fa79b7ff47aafec04b9fe025dcafe0
+6ad819e54393fcb33ac6b7faa6ff96c0f331ff61b4ff79b2da3adfba6cf288ed3ad84d9f
+e053a5f28af983ff25fa63b1cc51fe9bf20cd85acd6de099d2acc69ed8b646dd1bed9dd0
+63dd3dedcb05e079b7fa0dacdd87ef77fc02afd97de0a7cb68f379fa61ff02f859ff62f3
+0ad2b81aaeff9316c4ff53a2f2cc73d958f19ff96fff84db7ab6fa0fa0f36dec08cfa4e8
+17ed4fade0c451ed44dd02d298db15edafff66fac23e94fb9df27dffcd21f0a5ff09d052
+ca13e06dd888c8ed4bd0f867ff79f9d746e0a5ff93f4cc7af7c662dc35d05fdd93ed12fb
+a5c761afe686eeb9ffaf1cf84afb30f386ff8ed884fe29f79ffe7aaff45dfe40d39aed37
+ca4ebacfa5f227ffc106ecb922e6be91c2ea7edd93d983fe73f893f14bc1fb9a2bddbf1f
+b3eb93d279e010d0aced09f4ca6aedc635dc80fa8bff68b1d786f73793d880ffa0f86af2
+84fb73de2ed9b37cfecc20d54bddbe6ae079d866e085fe7bf79cfe4cf70793fb9a1eeda5
+cb0a95fec55eca10be2fed9702fbaffe7bf1b64bbbd97ee02effcf36fba8017ad9c193e3
+7cdebf05c4ed39da74e3c013c4e52cd6bba3f06dff7ab6ff9ef82dfe5dd863a2f981fe9f
+cf4af233add829f045cda5dd3fe45eb5e073d0f678fd87ff3df825ff90bdf64593d8af40
+ffb785fea5d85add32bef329ff98bffe1ce4c127c5e031d85ed088f2c017e45abcf479fe
+af30f795fe49f59fed2fe9b83db5d994cde53eddafc633e4aeec8620b6f78dfed972ffad
+d844a4e606fba5ff3cf75df1be7add6ac9ecf559fe36afff5e95fea153faa6ff4baefb93
+54ff68f91dc2dd2fcef315d86cde86e593edbf43db58df79fec597fb6dffc19ffb1dbeff
+9ec3fe0fee5ab6ea43d69bde69d8af38ec6bc9fe60f88ad422e54df019fe75c8fb7cdcaf
+5be578f5af7afc86b5fe9ef40dfe519eff8bf1a53ce1c483e5b60fc7afc51cb2d774dda5
+f01fff63bcf56bff83fa87ff42bff2d833de60afd03ae583f0c86ed886df70ca97d4b01e
+f796fe4da329db8bd0f114cbec76dfafc70ccf94d961f2cc9bd980ec57affb9660e252f2
+99c93bfa19ff93c4f72aebab0fd946e5b307e86df281cb2af26bd693ff09caa5f216aff0
+86fbc19cff29a4d91de59dfb7ad895cc92e0a603e847cdf209d9c53ae653ed12ca4eaeea
+92c9e945d80ed8ff9102fb5bffa3f337fb8eff4df90bfc79d884ed2aa6d908e055d86acb
+fd9262ff9ff321fbbf5aff1d94ff5bf629b9ee07fe87e95bd810e5c5ff85f965a5db983a
+f820fe82f46df123e6b439f50ffec593e504edafc0feaa09ffb57ed975e10cb0d45bf686
+ffa5cb65f693d932e068d986e239db7ae586fb6cbefe46d003e14eceaeed7bffc35dbff2
+31ff5bf73ff1c087fe6ba3ff6699ff86d9bbfa79ffd262dd33b9fb87f6b74ebfef93d726
+dc79d858e2bedc83cf8fe551fb9ec3fe7fce9cf125f6a313e8afc74fd6b56dec95cdabe1
+35edc39bfe54e0b445b9ff92f4ac724cd809c6fb54ffc1a7d25ce135dda5ffbe7ce08ad8
+a645ff75d785ff2789d1e86de0c148f49ffb6bff98ccb753ee20feb74dbbffb2fa03feaf
+f59efc51d81dc8e662db7eff95f36dfa11cc49a5ea01b3df83d696d879ffb523e0c13fed
+bf0eeea53d93dbaf38f97effa566e05c94fbd060df7aed61feafee8627a5f160ff2cccba
+18e045ed5ffe7ad374ddba5afb03f186ffc20ef745fb65cfb113e589d779faa4dd27d968
+cbefde8de9af26ed7ae16dedba9afbb74eca06fa51ff32f2bf9ff63ad95bccfa41bbf623
+feabcd30bded41e31bfbd181da71e3a0ed8654a6de9552c622afed8dffae34faa5ea57d8
+21e0bf93fdb0f686ff75c2f513fc2de54bd0f480faaf79fbd170feb6f51bed97c1e505f2
+ce1effc3299ff932ffc09cce0696fab6ff10e4c393f15aff86fab6da38e6afff50f9cc7a
+d967d838e0a2bde58cbafe7bf9ac2fffbf16f260fa81fd1ca53bf458ff86d7b60bf640ff
+16cd84fe92ed9fdc93ce86e01cc2ed93e57aacee66a2d888eb86ff7ccab27bf29331fe97
+f23bd812fcc7f43fd0ff79f9cc32d94df397ce10b0f57afcb538ec5bde2bd852e33ca5ed
+adc986fa9f52d915e3b92c9ed922e15ccb66fe26acd97bbeed79dcaded86d8a517f851ff
+d955e07dd89f47faaede71d8a51095f2c20598ec2da5ff90f59bfa85fe60d209ed2bdd51
+d0f269e59fcf93b8eb51c0fec79dd1b1e447fccb92db82f260e928d85ad324fc5cf76dff
+a84afb13fec70ed8ff5bf916dd51e505fed750baedc009c4ff7be5a42c90e0b115ebb864
+ff98e469d980fec63cddc086ff98d287f099f97dfed88b50ffb609edc394ff60f6c6ff62
+f894beffa3d586f34dfe32aff848fe10e04ff2c593ec75b1cb3bf762febe8503c1f327ed
+b8ff4c88fbd97cc0ed19e441cb1cd84af293fea1c886ff82b6ca4afe40ed09d099e578f7
+03fe3294f2a46afe51d0be9ec2f57bff86ebafdf06d983e8b886dd53a4f89538c679cca5
+f288d9659cfad848a7fa79afce47f8b6ff6cef88d842e5a902c1fe25f15093ffa319ed51
+d909ff4bc818cfb627bfe07aead162fe34a7dd934c8aecae4add01ea4bfbc693b8e66cd1
+93cbb67ffe6de539bfd91df38dc1e52eedc9fe53a2fe6ad580e1acc83caffc67d09ffe79
+ed7dddaf35d862ebb53ced04fb88d8a5c2fb62ff27b54fe081edc41bc0e728affb06ff3e
+a5e012f2c143a5fb60d221f3ca6aefd076e3b1ed9fff2bbefe3ceec31486ffd360e027ed
+be86d80bcc49fbadf27cd2f979b1e086caed61cffa79e37bedc0a5fb94ee5fdafe0ef646
+a8e081beef04d7f2c017c4fd85f791ddaf15ee5ac4ff07f35efbc136d0a8ff60fb86bcff
+15aeda943f89eacb86db33fb21f759ffd31fe07ed95cdfafff13f7c295ff18f8d46bdeaf
+f121ff569de07df2d8ffa0cd5efa93ff5fd5ed79e293d9fa69d0ad67ffcb7eef97fe9f34
+ffb026fe4bfa01da57e06ad0af76ffaded931feda0fb8eff61f593fea5c71b94fe28b7e9
+40bcfa0dafe02db5c736fbb626dd57e086ffaf71b3cb93ff1ef7d86cffb642fe9be53ad8
+53cf31fe9dbffb2887dfaced20e3a4f40ab8d39bed4ace9ffb71ffb6f4aa16e552ed9fd9
+79e0b963f497ff09f8c02fa5da80e357bee14f9afcc13895e484d2f537c5ad6abf23fbb7
+35e078d99f56f8b54fc52ebbfe34ddb71ed93be050bfd982e093c1dd80cf86fb96f40dfb
+b837df57caf8af4fc919d5b536de5de677ffd96aed62c4ff75d19efe83f688fea2ca69f2
+7bfec205ce42f9d828ed5ecbb13aaccc79e062d879eea5ff7df186e56ed5aaf69643d8b2
+69ff86e654fb2cafe47ef236d70bd95cd0f878ffbf6cc4f20d93edb346b6e25489fcca68
+ff27fb79cdaaed2692fec44af818afd8fe10dc79f086dda5c1f708ffc925dd86fe99ee79
+b1fb7af488ffc386f207fa4cf519afff31f0b636b9d97feccd7dfcbd40d8ff7ff653eec1
+9cf22dd8b037c8a5fb0faded2edd54d864d913e54effafd837aaf789f0bd65fbc0a2fe79
+defc21f3a1f90cfeb828afe05fd00aff3fdd5fccff79fac73ada72f18ac8fe01d864e7b6
+f979fd2f9cd8a806fb3ba5febf33ffa3fb79cef39d4cf086d29ff20dff79bad96ee0a8cc
+94ed4b87b5fad956e512fe508fe5b863fe9eed0fd84ae5cb03d84de2a117fbafe670bdd2
+9de25ad868e0a5ff4df71f9ce50ba4e79402e09bd96fff0faffb83f79ff24bcf99d96bfb
+93f405ffb9f17ed89d1afa87e64bdd159eea954ee508f2bf68b6d334c695ce68faca1dfc
+a5da7aea9ffe11bfe51b93ec9ed624e058a5f388ff9c47a5e087c6ff43f4c295c6db4ee5
+ca82dd15eeba24d8e602b6ed53afdd5dcafe59f50dff65fb78bcffcf3eafff9ed076edc6
+4496ecce46aef66dffbf64f188fe6bbded9355cda3ff37fc79f388fe12e86ed888c6ff6c
+d0fe79f2bf62fe29e584dcbf51e006db7bfe86f33be5c25daceb9546a7fe31edc05fd0b1
+ff74c7fe32d0ff84db9d49d9fa7fff6ce345edbf7ae864f542f2b725b1ed6a9fcffe5af7
+83ff94f9c04be023bff5d01ef166b7de70e25dff86fa9326f960d8a951ff6ba5fec733ff
+cb82faaf1ceaa5ca8fde24d7ee0295f51dc84aebbb29fdabf31d87bee07ed9af22fbaae0
+2ad3f940c4fe11f05edc93eb26cba7d093fb27edb044f2b751db30faa8d092c3f35afe93
+c4ff60d320df5affb519ffcb3adeb6e079d388f6a5fb2193f2a95cddaf1bed56cfffaf0e
+e650f0afff9f05ff97d88ccb85ff93fa3dd9f92fbce009cb4fd814ddb37afad85a91ff99
+e50ea5fe24f0b617b0efd07ae986fec596c0f25f93e09e20f13fe397d57aed53bff2ab60
+c1e884fb91f786ffaf79d969ffc5fa17fe36f49dd53f92f6b368afe474d87de0b50ac6b7
+fb3ef64dafdd7afea3c826ec88cf5ae014fb42acd820eb43afe087edc09dcd78edbe81f8
+86fd0cf74ee501dc6dedd739ccfb7de593c1f98630ed89c89fd81e84d0f452d92dfe0ed8
+4be05bcdb679ed65a7fe90f27cfe6befc44394febc3ad861fbca7dd78dd981e05abeff0c
+d83fe01ae43bccf677fabc86d86dff43fa15fea43cff99f955d367dc0ed843cdf105e3b4
+4293dd95d05ee984ffdbc40affd01eedacff44f89fff6094d982c7f15ed804e45eff72fa
+9aff7bf0bc94ff79f8c09ff117feaa36fb08f6a548dc20d86bd697cc80ff52c7b77cff9a
+0af149fb3899e0bfa5fe29f587fbda5ab4e474edafe574f0c1a5f303ff93c5dd61d828e0
+acd01affafeb04cdee84edbe32f750fe37f8a2fc3f9cf2affa72f592feb610d947d0fe03
+e7c5a9bfd977e0c386dd2be5b9ffaaef7ce29c66fbc579f2d258f186fec00dbc487eedbe
+86fa9a2abbcb87d841c0ed07ffb61bffa8f983d79fd80ede38afd34be706ccb668ff7ad8
+6dcbf186e07cd0fb6dffaff356ff28f1bf9ffe14f54ce1b0c6a4d1b1fe16f645cbaddd3e
+a5bff132c1fe9348bffb9517fd7ed8af45fc12f3b8ff993efbbb5bd880f78752ff1c9ee0
+93dd73edbe01d2afe38651c1dda75bd87dffb1ed62a5f3932aed509df761fb0daffe8d38
+9e5ac3fe22f9c13b95fe23b8ff01e53da0fad8affba452e762c0f26dfb17f3a7fb79dd68
+e19ecb3dbfe623f48eee7ec8f66dfec3a5ed3add26e593f950a5d85bfe2eafe0c43fa0e2
+8dd9ab36ed62df9ed86bf427ff60ed77d986eb72fb80c6ff138ffa9b18c5ff9f36dcc460
+e334f19ebfe09a4386edca74e79efa38aae0c1add8fd57f213afc986ff6ef41fceff9405
+ffcf26eca02f8ffcc34bbffb88ffcb30d894eac950d8f3d2ed2eaed85ce9afd96ee661a5
+d96accee8756e11fcfff2ed8fe57d999d584e720d0a5f347fd7def9664fe52c640fcb61b
+e4982dfd74f587fb5ed311beff1eedc395f00a93ecc115fa5dfecd83d887ee2afe93d880
+da04cd96ff63da0ae54dd9b7ec69ddafe06bcff96dffa0bbfe86ea5280fbaff80ca5f52f
+d489c1ff29f24a7fb4d092ffd840e95bdc88fba534d8ed4daffb6ad9b7dd18e29fdb7be0
+07a5ed80ff5b93f1be0883b7f672ffbe88ff18f79fc4fa86ffac1bc8ff8af2769ee09305
+b5ed35fe5cc797fe30afd86dde2bfbd986b4e9a5cd60ff50bbe08ad657d9c19ffface67e
+d9a142ff62bcfb70ffb677e01ea5f80eff51c97ae453f2b9fe5be024d488fe79f8955ec4
+ff3bf752f208baed2be74ed01bc2ffd822dd5fd6e554b5ff0be065d99ffedc05ee44c177
+fb9dd727ec4fc2f282bef879c1f33bfe79f75fff23f659c2fe46dd1bcffb289bffdf61ce
+b209ed33a5e0bf47ec28d849d5f89b34dc4cf8c95ef1c5ff79ceaced46df72ccff11f899
+d2bb08c3f217ff85dc88cbfb62f21bff9c04f253ca38fa64f5b97de5d04eda37cbf085c6
+eb6cddc096fbb717ffa33289f3aefb56f1a0d024c0fe02a5d886d793e05aafd479f593fb
+a53bb7f292ffb76cfec87aed94fbb619c491fabb98e6b51cf37bffbf93e460fe27b2e10a
+ace552cbbd93d3b76cb0e479d687f2af64c2e045acfe3ffad880d0fb5493ff7fdd79f294
+51e0c1a7eab10efdb68648b0f71094ffb6f45792edae38ff5baffb6fd956f326edaf0bcf
+b2dd79e4afce88ec95c1e001d6fa239ef2b1ed9926fbaf45ffb460e53bedcb71dcb5ecc7
+3f94dcb03eeda5e07bcef348ff26fd7af686ffb706db58d3f684ca4ac51dee9c35dd50d0
+40ea87f039ce52ff2bf9cc63d9ac44fe11d19ae652c8ff6dd296ea05ef40fec8f232fab6
+fe52e5a2ed6df91894e69052f2b979dcc20ceeaffe07c0ff6efb1582fe93d831fbcbe063
+e5d68502a3e2c34cbfe088edcf46e388d47ce06af893ff38a5f74cfe3cf724fe4cafff93
+58c5fe850e88ffd269dd9ad028faa5d288aff95afd1b84c1f80effc286ff35f563b5eb9e
+c7abdd1bd93ac8fb88e56dc608fe94f7af79cdf988fe7df5a0d662fe7add86d86baff005
+e597cba9ed66c3fb7fb9ee20fa87ffafdf861693d89c0aa7da36ff12b6caf3d828c7ffa1
+12fe3cf2a9cb36c7a4ed2cd0adf1d93be46dedbf198effbe43f1c8fa29fd86f669fa2184
+feb8f635fe9fd042e15fedc886d87be0bfa7d090dd6bedb6e43dbff9d84bbdfe03f789f1
+bf07ff4ef209e59dd8bced61d866e118bfd986e420c973fb4fbefe9aed8551f123ff97e9
+62db2ad8ff02b9e022d8b013fba9c0e80bf2a2fe39c3ff79fa5af638ffa518f2459ce0ae
+38d7559efab6ff4df6b9ed7ad072d6fd7a4da5fb9646e2be86e588fe6cf97de568b6f542
+88b9c8a1ff4b9be8c3369afba65193dcafd80ccca5c0e09e1194d8af04ffa5c2fbac27ff
+0dee9e49fb14f331fbc11887f0d460b8f3935ce0ab55d979ed94de81d8af4aff2ca4fe95
+f391fba955fa96ff5bef0be66dcb5faffeadcba4d837aefbb5ed61bfeda25bf26affca58
+e0299bfbb44cb8e084afd524e08ed880e0bf93c4ff6fcbfe7df4c230ec79e06fdc2bfe97
+f2a73bd9ffc061efd66af3cb50d924e094d84dfecd7ad8ff5bfa03cfaff571feafea23d9
+b7fe7b49ff9df35cff44f2b5ff71edc186da1881e793d8b76ffed996e47dd8a451d9ffa1
+2eff9d12e7cd7cffc239fead38c1ff5ffbc87beaca44d825d077e0c010dd79d894d892f2
+26f9d413de43fe7ff5dd863fa3fb8a49ffcf85e53a96f37bffcc6ad988ed12fb47edbf66
+fe07f354fd64e811dc59b8e50ada93d0af1eff94cb5cdd03c5f78920eab406b7fe279fff
+7ed358fc1cf0a510fb9e24e593ed61dc2cd754d986fe61ef13ebc384dd3ae5adda63d829
+df49f75cfbbfd83efa63f5c134c552b7ff60e0f69467cbea79d8faa63eee1cebb369d8f8
+9f23ed9312f6b67ae485ff5df73afea3c3fc2df841ff7ad8a176ef89ecc250ba15c2ffd8
+10d0e49618f9a5bfe00fd9b948f11fffc595d8b674ff9fb9d29ac82fd8affa7af628a5ff
+6bfc41f8ca62f084f990ff9f59defa6dd9ff79c7afe80bf6a3ec79cb61e0c052edafd340
+aafb87ff94f809e475d080e093fb1db7fe9301c1fb7cf9a5ca96e0308bff9dcaaf2ced93
+ff86ef1ec9b408cffd23b2f64283c7fc87d87bfbc51686e6d075dfabce4eff02efaae898
+d979f15289e0afcaa5e458ffbf4aff0e86f9d99de55093f7a93cfcb3c852ff80faa575fe
+86e5af5bfa2bf4ce0edd42f061f8a8ff4b99d889dfbe47edaae06abbe53bd81ed84dedce
+80aacb3f99ed32fa60dcb63ab9ff9afa81ffaf6df979ffc715df5bec7acba1f427ffaf45
+d3a5ec61c5ed9033e9bf5aff1daff2b84df112ffd55de002b0d199fe7afaaa5ae56dd9bb
+fe28afe04cdc32f2b8ff47b2fe32fa6cf18bdab741c60ab6e530bdf39a4dfe02c1f31ee5
+9ccdafe19431fd71f3cb66edc76de084dc27d75dedc334d8be3cec7dde9460f77efe86e0
+1bd978d0f235ff62fbd08823bfff11affe97f386fbad0fe52dfeb0f786d893d083edabde
+02d539d81fdfc206e8b767f3afd01fbfff3aaedb5dc9f76dfd2eaff74bffcfa00fef86d1
+fe6dcde57ad984b3f99fc0fb4ef23edd33ed87c3ff068ada9bf871ffa8e55f8ecbf36abe
+d698e41fd252fe93f8a6ff5ad0ff14cced78de81b1d062fa34f451ffc0afe027acfe20a0
+f609fe67f5affe06db9ef96cffa1cb51ffc2a6e72dc6abfe93ed01b6c6a2ec1396f4c679
+d99fee59d068e034c3fe93f17bd815e44cff1afb52fe88f484f296f363fea3cb28e29a47
+fca5f159b9fb86f39a08d894c0d979deb76dfbd569e0a543e80ba2fa61ed24cb42e475d8
+86e5c49dbefb43aff2d051eb16b7c90497fbc10c9fe01aff4aadfb93f378e030d882eca5
+6bdd80b7f63cff4beeb993dd7bd66ddd0689ffd85cc5e77bd29dea944ac0e461ed19b2d2
+03fdb123ed48d0a3e55ccd43c0ff86fa50cbafe057feb04ffb85d907ffbf9cf460bf47de
+62feafc87ae09cd826c95ad9b846b4d731ed7efa73ffca85d97be5cf16d840e6baff51f5
+0fff9e1de444acfe28f7c780febe39dfb6fd7aff93f629feb662ff17d693e061a5ff85d8
+f55bfad045edaffe7bed85bbd95cde28caaffe61f41ec5f748fe25d69fbed884fc05c1fe
+23f2a5fbc54a93f2a53aff53d91ccbf183b5fb93c2f47aee59e3be86fb6eff09fa7af6a0
+5ae421f187fe6dd803edc12ee578eda652e721b5dafa8aeea05df4b735f266f975ff19fb
+a5ff79f693dd39d9be0ef42efe449ef07affc260a5ed87e067cbfe89f3c592d97abaed53
+d0ff8f4ba5dd06cd61edc10beb80d971ef20fac130f24c93dfbd79ff87dd37d862caf508
+ff74beed0f9eda90e07eb6d89eed88fb11f731aee3995fe8b34680edafe50dfbd992f286
+fea73dff25cf51ff33e091d87ff3cb14db90edafd91debcf7bd961d831eab5fa74db97c4
+fd42ccfb79d1ff7d01cc39c0e609ffc691dda5eb93cd76dd0fe1ba49b6fea560e093d889
+c6ff61e0ab1cf9c62ed749eebd39d97f14f151ff0799e09316f1c2f769ed82e0a154d8af
+f83dfeabce78e793cbadff2c9fe921d55df7a5fd3c88e0c4a3f969fbcc38ff4dfa07ff67
+c75cade086c9ff4ef8ce86d8ffc12bfa61cabb65cf2dde60ecc779dd88e6a2cc64fa1bff
+3f98e9b650c63a93ffbb30fbafff80f59f4b93e55fff15afdc930ef29f41eb98ffaafb7b
+d99e59fe0ed03de05bed86d067ffa1f00ac7f979ff4bee04b6d831fb89da82fe90faa979
+f993ffcb78dc9fcdfb37f9afd8871ed7afff37f7aeff5e93df9f5affb949fe0ee564bffd
+6ad97cecc011d8afff9533e743d1b779edafc9a5ed93e41efdd139eb5793dca535fe1691
+e0a6d395ff36affe9dbcfb13affa43f3af0ff19ac1dd75b9fe6bf99ffeb2df5596efc50e
+a5e119d2ffc223f3bb87f750ffc880e0afc7f15bd825f24abce587ef7afe9ffa2efdb3ed
+22d85fe0983aedbb9dc0fa77ed95cbb752e56cd90bc7e623df4cb3fb2ef461b6c669ed3e
+ffbcfb4999d96ddc14ccf11fcbec03de99c4dc7ef1ce0af2b5fe2e9afa85f059c6fb7cb0
+f219ff9724e65acd3baff2bf75ff9ff5d11bebc36cbef451fb1ae479edd701ed4ccd9fe0
+86d87bfec05dff2faef0cf09d837e518f280fbc24686f3d876fbb83edfa5d047e197edb6
+62fb26fe6a15dc7fe093c9f62dd84dd9b416b9d8943da7f78bfb7dfeafcc15f862d2af4e
+fe0ff5d025f19dff9360f2c2a5e47ed786eb23fea5cb80dd5093d1f223fe86ed7abeff6b
+b6f686fb2ab3fe4396e0a54b93f4cc50e226b7ea04c0fe86dd5ac6f78afe7bfbd88643db
+b80ebe61ff79fba4ed7dda86cc4ff7b674e16bff8ef645ff07dd36d9a5d193fb489ff786
+dc7bcf6ad805e8affe9a39cd5295f67afb81ffc037d118e5a3d692e0ffa5f853ff1ca9fc
+91ff86f2a5f56dfebeda4ccb19d952e66cdd82ed26ffc783dd71b2ff5dd83bcefca042ff
+04f158ff94d85af20afb9fc2e910b4c8a5d72dfa46a5e035d055c0ed79caaffb3bffb8e4
+60a7ff7ecffa70ade03ad86deea645d819dfbe04fea8f069d8fb91c0df3fd804ff3cb8fe
+a1c626ff90dac022d1b679ed87fb6df61eeb63c7e15aebadff4df8a4ff6dda5be0adffbf
+ed0cc84dec07a5fe83f5c15aed38bcc53db5d287edc04fcc03e03bd851df07e977ff9ff1
+87cf30ffa5fb52de9d3bf2a5fb42bfe487ecb015bfdd87d89bcc10dd78e584d8b82ffa79
+ff80f45afbba98c3fb85f392ffa54bf916ed72d188d901edc71ddd9f44c2ff65f6a0fe0c
+cefd79f3a561e78ccf28ff964aed26a6f266e1c497e711ee87d956ed36aff27efcbf4acb
+98e352dd83ffaf12febd2e93edb63eb9d72bfa8bf22686d6a5ffb66ccfe66edaaf43fbab
+f867f293fe0ce562dc96f3bd6dfb7eff86cdaef226d661fe96f3b822b3d886e8afce1fc5
+ea8601fa62fe94f452f732fe64f6affe31afff68f096db50e03bd089e552ed08dd50d91c
+d5e585d892dd27f261febe81f279feafee18dbb729b4dd85bbe04ec8ffaf55f9b67ae5c3
+99fad881fe9f59fb75dc61fe7afac19ffe51e410efa5ff1bb0fea8c938ed96d274fad823
+e088ed85e5c007ccaffb5ae532d8f29c4ff921ff95cb05d09d1ed96fd883fe28fa60e79d
+c3ec1db7f85e96dc81ec01df78d891e50bff5af77aff5ba0fed8a9de2bd86fe0c17aafe8
+9250c0efd043e5c602c4f79fbeff0caeff87d37afe9ffa6cb0ff40f75bff7cd8ae3afb52
+d90ce073d88af182fa4bff309ffa9330f1d80deccb35fe09b953cb17edbe2ef3adce1ee0
+a60ae570d688d862e070f2d98b02e5b660ff40f1c265ff98fa13fe4d9fff7be978d988fa
+931dfec886d865de7afe5beaffa7f751f1bfa4cfb841ff2dafd4e537c5ff50faa5c959fa
+3efebef26dd519e092edbf35c44b86eeafff1b9ffbcf19d8fa9d1386f3ac78fe61b629ed
+74e3cb3ad966ebc030b8ed0fbcce9ec7a7e718e295c0e886d593ff39fb4dd599ed6ac1eb
+14d0e265a5ff9a5cf379d3ff93f6b279ffd88946ffb568ecc393f521ffaff929c6b740d0
+ff58f8cf81e0ac0ab4cb50afdc79c7ed62dd30ff16f14ac3e2b83bedaef331e5b0d887c7
+32b6e19543ee12feaace96ed6993fba40de0bf2cffacc1eb8548a2dd86fe58d007fd93f3
+affbc64696d2ea4088f3a83be4b4ffc529b9e193fcc295f94ba1f293fd1ea6f27ec3fb61
+f306fb48b9fe86f020a5fe2ff35ccf9fbee51dcaa9dc6effb97efbc542bfe08adcaf47e3
+33dec2259ad0ed79c9f54dff3fafdf9b39c99ffe87f769beed9327fbc168fed986f6d137
+eba51bf8add198c9bca1ff865cfebf0c9fff9027fb4af493fb04c4ff88d886e275f70bfe
+cb44d8f5ae6be563f21199dab5fe37edc29ef5b578d863e00d81d9fa68bbffd85bcaff7d
+d94992fad615d845e01cd7affe14e05fc9ff4ce338a5db81df79ed88d04cc3ffcd61dec2
+9aed0eff87f85ffc02f49c44ed21d986f81aff2fee86c0fe6af8aafc07b7f92f99d984cb
+fb6bd0fb7ae859d816e0a335c2dd9e1bf3b849e21f9ffe5ffbcf9353fe3ff755dc02eda8
+d973f1d878d2ef9ebe62de78b0d967e54bf219d855dd63afea8952c7fe93d888cdff2af1
+7fd0b126e245cbf821ff9dc1ffa426f19009b8fb9621ed6be7c1559aff7ef56ffe68e685
+d28cf7aa78d98dffd123feafcc1efa6af6a44393f2a850fb79b4d846aedf93d488e5c3ae
+fe61eeafd570c9a9fb01afd941ed5ce570d0aefe15f3a503ed55bedd0af275ff7cfbaff5
+79feaecc85ef79ffc683dfbd42d8f2b6e084eb79fb93d024fbb339f951c311ecff27c1fe
+36f89fc979fb88ffc093fa1dffd99916ee33fc55bce0aa08f689ff7cfb985fe7bd4df239
+e5bf58c5ed934be0c2a4f905feaff05be9c59ebbcb38fa50d928edb80af5539ce6943eff
+be99e010dcb5eb03ffbf24c5fe69f6cb2cff51d917ff5393e0a33afb93f552d09ee980d5
+86dbafff51ee7ad865e0ba7eff26a5fe92cc95d952e10ed84ce53cff0ed8a645f4078cff
+af7d0fa5fc20b5ca35e8be67e59acba8fe89b8d1a3e87bedad20ffb63eeda52df25fcfb6
+36f9ce7cde79f2904cfbd8b64ab9dc16edadcd79dd84d86df9a5fe33cef780fe40bbd386
+de1fdbb42eff08f3af7eed98ff5cccea93c7f261c9ef64e534afff83f96dd07ae09fed3c
+e4bb73e885f279ed86d9c107ffc25be50ddd79ff51fa12ff942bc4dd1ce4b6ff48f7ce92
+f0d24cdc32ed21d06fff96ed6dd89ce77bfbd46bedc4e426fec4ee67cefe88f87dffaf4b
+ff09e057dd3a5dfb0ad04ec2de84e4cb6adbb3c79ee57bedbd5affa5d51fc1ed943efea2
+f26ad556ff33fa13feb4ec03d861e0aa0eda69e079f148a5ffc062ed93e06aceff10d886
+dea54afb32b6ff14a1d87ffec961d82fe392fb55f487d1af06fe9fce20c7b2f637fab56d
+f29fbaff99f01fc7a4ed58bff361a5fb8f3794da9f34e577b6fb6bf7affd81f1c02faffd
+86f55dcb21afffa04f86b8d98d38d8b050dd61d90ef2c493ef7ffa93f3e082b5ff93f561
+fb08affe15fd4cf604ff4b95e4af41f7a8ff65cae86fdf0cff88d97be0afed883ea7fb8e
+f27cffbf9ff529ff99c4e4358dfdae42bffb31b8da59f925febe7bdd83d9aefb28f2a546
+f3b8fe5cd92ad8ac14fe5cf1c33efba6fe41a0dd7cedce26de46ce61c5aee06dcbabe37c
+febf4af1befb1dffc15dfe13c3e5a45ac1df429efada01d032baed88e030d9b4fccc48fa
+a7ff79f318ed87d76ce02fb9cf20d97819caed61dd2abad29ae686ed93d979e0a4c1fb0d
+f0c286e103d9a21ff9be97c3ec29fcc16196d9b7e04fcf25d64ded3badd8b511fb74f4d8
+0dd1f97bd8ad78f0a4c2e56ad0ff01f843cf5ce071d1e5951c9fe9aff779ffc098d8b57a
+e065d880e0bf12fe4c97fe88f47cfe2df74bfe25f53ed908ea9cd677cbb16bedb086f296
+2bd8ff078efed28861bfff8ff948fe96f761f10495e56ee009d3bc94c5fe41f8adfb70fe
+a5c0ffedac40fabfa4ff4bf238d856d027fbaf31dc82d46cfe2fbffa7cffafc832fb4ca5
+f39306c6ff24f96dfe9af586fb93c4fe51ed93d0be4d94f69e51ec03fec43aff1a95f52b
+b0ed9bbafe93c0ff0587fcb6f5860cc4ec4ae137fa22ff97f30bf957ff94cab1e75fd80f
+e4a5d882ec96d87effa2cd86ff0ef657f2d307e0c547bfec60c6afe7a51cf7acf05ab3d9
+9fc70dade47fd8ff28f6be99fb4bff2ea6e09115c1dd34e4499a64fe88cf14e080da79fa
+7cff9be084caf961ff29d993dd9f4ee637ed78da86e5b969dbabed55e59fcb16dd75dfb0
+19da86e06efa27ffb1e068c9ff8adc84f3b26dbfd979e064cb77df11ed468df4cb38d950
+d2ff9469d886ed6dbed733afea91d171e53ed91eefa5fcb939fbb605dd54e6c064fb3bc2
+e093d92ea5fe7af8a6ff89fb7df256caed4fd827e5c817e65dffce34fbbf69afd052dd73
+e3a1c1f552d2ff975ef687fbcce52cd998f75afc1ecda9c611f265ff52a5e493ee84fb5b
+f3cb93d888f75dfe19cdff36fa86d4b941edbd5aff33c9f75fff04c9a5d884ee1afea721
+e562d052e5c8fb4cfe9ff33bff58f6a5c6e2b85aee7bfeaf44bffb19ffc295f766fdca52
+da2af2affb79ffbf6bcc86e072c9ff88f2a617ed93dcab5ffa77ffc753d831d70cd93cdd
+1dfe6ebcff80faa551fb86f1be79de9d43c5ec84ff32f7b820da79ed9e43c6ec79d802af
+58b7ff65afea86b7ff46f088c0dd1fd3f410c652d01ae0a808ff51dd10cf93eb9f5ce1af
+1df58aff81faa5c0ec64a6e97bb7e54af237acd65aedc29bf725ff9f0893ecac0dbed893
+d4b766fe1f80ffacdd26ed9fe57edaaf47d907e5b67fff98fbc1018be0a54af823ff5af4
+9c4dd235fed97bf823ffbf13e9b683f399fe81f668ed87d385e01199de6bd0ec6ad9a124
+f388ffacf90ff25eafcc81fe8afb04d8b9f21cb6ff93f1fbc80befc632d4ed63e09ffe43
+aeedba77b5f7a0ffb77afebb70eba5fe79d842f4c880febf61e310d94ce00794fbd722cf
+fb67ff96c2ff8ada7dfb3eafdd79edb6df36d6f686fa1afb2eef93c4ec960fc3f862de0b
+f25afa92f1a6c640ed18e44c93eed036f2ca92db9fed15d9bef986b745cc5be479ed9fcc
+47e11add4beac09ac3fb51f4b5fbc53bfe09baff34cbfe51d817e062d99ac2e611ed45e4
+63b4ff618ffdca4ade753b9ddf5193ffa006f8b524cb80fb8d38ffd846d92bc6e938d8f9
+c23daff068ffb602dd4bd1ff7ccda4f37bfec34992f29c38ddaf17df50e908f260bffe87
+d72ffa67ff89c247b6e59cc0d936fb4cc0fb6eb5cf91ffa5cb2dd061ff86f99ed86bccfe
+63abff9b0ae97ad869b1fe8f11c5ed95feb9a5d841fd6cf888fb6fceb020ff2fadd99e41
+8ae3af86f27aa6e081b5eb7bd593febf2afb69ffa5d09dc6ed37c2e52a99f8afd8aaff7a
+f6d879e5c872da93ebbe02c5e29a6afd8bf25e9ff5912598ffd11ae0c186ef9cf89439be
+fb30afd83defb8ff53c0ec7acbfe86f879b9cea3e318ef5ce797cbba59dafe7dd05eff87
+b9d89fe084d931fc3dc667ee95feb71ee056d984edaf32bfdf5ac6fa52ff29facf41efab
+ff60e508f42ff186c2e027d9c0a5fe65f2c686e503ffb7f721edc14ac4f658fa08c1fe59
+f038a4e086d9bf51fa1eff5aadf46ed5e3860ef3e123ccb01afb41affe36fa4cffa7f251
+f9cb06e078ffd34cddb5ed6193fba42dfc54d823eaaef168c7ff6fe09f15d8a6fe10f746
+a2d82baffa39ff54d97fffaf46fe1af0a50ded42f2ab05e853f119ff5cf297d8aafb13dd
+59edcc79fc2eff0ff79ef319fb7eb7e296c7b886e079dd2cafd889ca93bdff02afff943c
+e406deb84efc93ee79d862dc79ff97e61bd892ed9f27e286cbff60f13a94e97bdc93c0dd
+08feb244ffcf6b93befa6ff1c297e868d19fdd6cd886dc2ea5eeafc812aefb81fe0bc9f3
+46e6bc79e485fe6ddb0ae1991ded87fecc67e384d98abae76df0cb86d881edafcc06c0e0
+8fd879fbc788d97acdf985fe79cfa6eaaf02fe4dd5a1bcf83face687c8a5dd6fd886d693
+ed25d06af550fb1dff80c4f24bff3ffb51d09ff24cbaf786fa9c79e0bd44b2dd32fe9fcb
+2ad861fb70ff43dcb973fbb001d2acfed80bf3ad31fb63edc17bebbe52fc2bdc4de4ba5e
+fe10b7ed16bff41efe63bffe8844eb99e532ce5be47ab8d968ffca35f2afc651ff7af6d0
+5bd92aabfa43ee31cdfb01ffbf58fe0ff6992cfba2f761f22be94eafff26fd3db0dd25be
+fa3a89e0c179e588eb27c79cff04b7f262bcfb4aff3cd961feb3ed03ddafd657bdfa69ce
+a5d89beb70de66c8ed61d83acbff18f5a2ff68f1bf13fba8f28cb8cea5e56bffc846ed98
+f82588b6fe50cfed83d8a94ef91895edc2f786ffa530e07aceff86f85999e0c3a1e45cd0
+ff81fa6fb6ed93bffb24aef50aa5dc9313faa3cbb63ca5ff7ff7c67cd895ff5da5dd9526
+e39dd96bcae576d938d085ffc193e06adec298f467aee37dc9ff43f7b72fff5bfb7bf167
+d1fa3aea22cba5c0ed79e6a54892ff9b65f29fe70baffe1bf726affb15feaf23ffa5ee6b
+b5d861e90fd6af7aeb5ce13fff05ed2fbef411acdb7edf66bfe558c5e278baf615ff93d0
+afff3da165d913d0fb93f5ad51e079cbff8b40f70ffbb920d83cccf41aff47d89dec83ce
+fb4effd079ed29fddcc105eab657ff0ce078c7f34db8fe62f43ffdbd52f295fe71dbaf3b
+fb13f4b650e408d1ff48f212afd87dedcb84d893d91be3b26ddc8bff79f507b5ff13c2f9
+d55be3c12ffb8bc5e26ced94c0db88d87fe596cf0dbefe28f99acb86fb37f8c093bccaa4
+d893fe55cf99fa2dfe4bcaff77fb2d97ff24a4d76de036de60cde5fea5ef874bd905edc5
+2bfbaa26f0ba7edba573f387feb068df9fd070ff54dd3b95edab5ede89d89662f18fce38
+e588f2b0f92487edd282de88d0b412ffac20bfed02e59ecfa9c982ff86f8be76b6d694f6
+5afe1da8e20aee72fec043fe9bcf58dd96e084cd88df2bb0f417fea8d04cff2ab8d350ff
+36f656f139dd78ea85cfaf5aed40e4c29fd049ff0bf465f95caedf83ec69d0a7f3af16ed
+9fc1f26ac4fe49f39ffe81f2ae01c843b6ffc86dfe619fdb83d0ea65d6ff56c7ec4bdec0
+03fdc42df8b506f192ffc11cbff925ff59f8bf44fea1f475dd984ad3aaff9f39fa1bafed
+77e05fc5e551a5fb87f360fe43eb22dca534d9fb61e72cd887c5f96bfca1cc3593ecc40d
+edb632fd53f331fa9fff68c4d97adf86ed7db0ed86e67fe079cd8afaa7fe49f53cfbd992
+ffb01ffe6cef9be583d630c2ee19ff40bdf20c92e786d54de004b1eb7ed8b80cb6d827fb
+8ee580e91ea6df91cbff4de60ab6fb33aee20796f8a06bedae5aed79e5c97ed85be587d9
+6be2a8c90edf86d923affb1bc0fe6bdb0bc1e07ac8ff30f8c193f17affcb6dd823d986d8
+7bfa60c3fe930ecb9fff6befa551ddb04af3afff60a5f980fec87cd991d8b943b3e4934a
+f63afd0ec0f943fe04caa1ff11d9b828b6d88ee072c005c674ed93d825da4fb6ff99fb74
+b5d693e479ffd85afca5f893fdd938f760fb93ee70e657be33fe96c2fa47f32ea9f293fe
+80c995f479fed82bd0ff3adb93bcfb42acfe2cfa9ef444fec378f39dfcb660edca68d8ed
+2dbfee86fc4bf5b662daad43fe0ad7b62ef55cffa0f70eeebf98e653edb0f342afdd04fe
+ca32ffd586d921e0bf47e41e9ef610ff67e585f105fbafcc94c9a5e06fd99bbef330aded
+53ff99f260ff1cb5fe95f7b753f586fe7efacd1cd94cc7f761fb21ccb33bb8c726cc42be
+87cdafe02cdd47ffc39ff7d8af5bed7cd888e0c01bd952e016ed4acbb664fbbe85e579ff
+1ed097db6ae0c617aedc9305ed4dd831d0ff954affaf79a7fb5aafd793cf05ee79fb91d0
+a0fa4cdd84e4c243bfe0a548fd18d86eda79fbc686e5759ced9413f756fb79f293d3afea
+51d0aded1cfeb7d961e01fff54f430ffc462e577fcd084df6de302d793c7e94dd82fe5d0
+16e03fc8b067eb7ce59e07edbea2ed65ddff86f37bffd85bff1a86fe9bceb31ee0860ff4
+bf3cff0afb68ee87b0f67bffc09fff1fedaf46f616cc9ef262fe0ef6b179bbfd6ff7bfa0
+ff7ffa9316d7f2c302f9d93bb9ff25f28affa5cb21e461ea79f2a5fe06affb5b8affcf77
+f2a3ff27e49d1dff4acffa5fc1e57ac7a8d72cfb61ff78befb5c9dd89050a5ff80ed98dd
+6ad8a418f240dbb85dfb20cbaffb7bed5aa0f37bff618affbfa5f303fea5f638feafca51
+ff2ff99f14d84fe0af09f298c1f1aa5af57afb6affd079e2abcea2c6b644fecd26dba539
+dd88d886e094c9abec4ebfe287edc03cffd855d429e83eafe064bde6a53686eabe6dcfed
+7dd8aa3ad94fecbe99ff16b7c726cf94dd7ce5c43393e2b03cc9b65ef1d08cf3a520b5ff
+3cb6fe10eda0c1e101b5f024cbff43f9c6f214d8bb41b6fb7cf7bc86fea10dedc398f344
+a5de2cffcd0de0adc0ed9b5ce488d9b647b9d887dd79e092d978c6f193fb77eda5ca63e0
+34d9bf04edb9da519efe19f755f234ffd99d5efa6ad0fc77f95af311ff60fe85faa534d8
+4c9ee89308f197fe86cbf211c8f456feb6fb9827ffad0ef661fbc378fe86f73fafd8fb63
+e15af23dff1cf6affa01d2fe68d8febd41e87ad9c0f067d0ec85de7bff5995f5cf80dda4
+6cedbf3493e67afea5ee07d14deacb6bd8ffaf4aff88c1fe65d879b9fd9645fa0ecbfb2a
+ff79f095ff10f248fd17f24bfeb65bda1fd03dfe4cf793ff6ffad1a33b93efdd62cb83dc
+95d89312bfe085ec04afe424c779d0a6dd30d801cdff7afbc35ffbcc7dd969e0ae5dfbb5
+2ad87ade5dc5e253dd9ac0df1ae4b50adf6aceef5094ed85ffc09ad5b471db7aed569ff3
+8f1194fac108ff4c93dd9e2afa4ece38bfdc8847fe3af7c30996fed04cf626e086d993ff
+9f23fa4c8ce083d310e637f2a7f73a87ecd06ddda551dd60d523d86fe383b5ce9cc5abd0
+05f79fff85db79dfae0db8ea4387ffb6f92888e8a5ff28fd51f9aff53bfec196f259b6ff
+9ef853c1f17be788b9e517f2b626b0ff41f619ff99d96dff88f60aaffe86f38cfe41a3ff
+7bf6c19cff2c91ffcc34d8ad13fa4defba2dff93c5e630deb5ed62a4e086c9fb0af2b0c7
+97fda5f822ffc2afe076d9afe15fb4d99fc768ff5bf038b9de93c6f534fab9f07bdac016
+dbbffa1aafff83f8b981f587fea9f93fc0f65bff3afa8aea6dcb38e7b0fa2ad6fd67c9ae
+e313d878d4fb07f05ed07bdf86e579d8a54bff86c3ed3fd80be26dafff46f9289cd983d5
+f866c3e08ad152e939cfa5e551c2e03dd013d869e9c95ad835ed4cabe2be0bb5fb6ee691
+c5e56afecc5ddd17a6f879ff38cdfe58f437afe07eff5ee506da5eed69e61694fe2cfb87
+f31dff79f2bd2ce082cefb5af109a9db9527a5fb4a9aff934ecaa1e140d820edd009e4c1
+32cba4df24e586db7ce02dff86f2c20f9aeb7cbeee21fe60f394ff4da0c891d99ced02cb
+49ff1cefafd82cdc92f472fe96fb22b8d76cc4fe61ff3997ed11a4f279fbc387ed20cb9f
+fc6cf77aff84f91faff08ffe81d0f478f9d968c2f14afd32a1d9069cf783fecf51d888dc
+af28bed09efe62d226d877f2b0cb93d4aaf2bf54e8a73ed7b856e501fba7c1fe13a5e87a
+ffcb50feb5e073cbed61d5f271fe66f38cfe66a6ff9d5cf36cff7afb9ed00cef56d8a4d9
+6193ffd153fb44a0d88cdec342bfe1fe52f61ffb6dff93db9ed083fa6cb5fd13ace0bf4a
+c6ed7ee0a2ed3ce5a5bfdd79b9fe2ed89e03ffb3fa64ed30d9a5ed46b7cc97ff43dd02d9
+af1dc8469ffe2298ddbfaff286fbbf3bedb779fc07fa65f295fb78ee17d986f793fe9f41
+ff10fa4c86ffd06ec9ff79fbca88d86ee94793ddc041d8b679e580f259ff1fb6fb07afd9
+2bddaec837e5c346bfde86d914d8ad46ffb68efe79f51afebf3ea5f188caff78f92fa7ed
+98227dd885e0acc64deb35f55ad907e9cb67d8fa3690f2a551fe0ff75db1cc06fb4effcd
+65de6fecbf8048a2dd88ffb81db2d8f256e488cfa5fa6dff95fcb0e57ad0ff8709fe61d8
+51e0a9ca22eaafc79de019d844d95ae5a7ed50dd1dc0ed80e59ac5e01fa4f70cb6ed2daf
+f83dff7dcdf762ff96f91ded3dd603d888e57ac7a5ff82f69d02ffb579fb94f61ffeaff1
+66e5c462f3c122ce96e05addb1e518ddaa03e05cbcff6bf7cef238ffb430f3a3bffc7ce5
+8afea445ffbe7ccfff17e5c09ad093c1ff7bf288eaa535edafff42f7d9b9fe14d34be086
+eb9308fec426f260bfed51e05ed80ff2a542edcb81e824ff6bf57fff9761f254afff85f7
+a5ffb935c5ff7cb6f96cd9ae2bfe61b9ed7add68cf9fe06adca5ee0cafe024d065c98aff
+86faa8ef3bdd4eed37d351c1e97df1cb0ed958e0bf4296fa02fcaf31e4a5ec44affb7af7
+84ff77f5c680edcb0ad957b8a5d979cdfe60d912b6ca28f252c1ee9929ea51abd986ff37
+fa4bee1cdc55d91fc1f8930bcab68628f18ee572f29cff5afbc067adfa82e513b3d826f7
+93fe65c7e4ab5cfa9ecb8ed80de147bce52efece3adfbf02cc62fb980fc1e02fd74affc0
+7af3d84bffb2fa45f416ffb028d29bfe55b5f59ffbb454ebc45cbffe89f87bb6fe93fa2e
+d647afed87ffa379edcb73d988edb879fa68ffc705d830cd4fd835b6fe3b9ef188ff19fc
+4aee0d96e581f068ffa5cf93e01db8f687fbc95ef16ad8a5e280d39dfebf95e24bd2fb5d
+d8fda7cd58affbc301bfda2ee09fed51ca9bff79fbc567d33aec9629f7d819df59f9a5fe
+86cef379d9bd7af65b9bed92e281f3affb66fe88f279e9b50593e49a2290e094d882c7fb
+5ef184c2ed3cd812e0c02f9cff22a2d813e5cd1de061bafb9fff62ce33d6f918a5ff54d8
+3affc912dcbb85ed9dfe8cf294fe86d0affb6cd893c9bbde86fac73bffafd847e40cff6f
+fbd457dd079ee024b6f50abfff34e0872ffb6dffaa7ae4993de50ff3d83096ee61a6f780
+ff0db6fe2bd2be389fe982db72ffb878bdff79ee2cc942dd9f1bffa50bed8bcafe48fa23
+d640e54ecbade00bd238fac7fe3ed2fdbf5afe62f33993e4ad32d988ff75f25dfeafdd83
+cff562ff569ff2c29bed78e01ed993fcb155c2e52aed7fdd9c5ef0a338f855d769e20bde
+62e51ddb4ce52df67410a0e65aa7dd9a1bfb93bbf39fc73486ffafc1fe7dfbcc88dd6ba9
+f079f6afc5df14c7f424ffbe7bffbb62ffcb7dfec23cd05bc1dd7aeb52f4afff17faa8f0
+01d0fb3ca5d495da7beb6bfdc658e0c161ff1ca8da6db7f190c7a5ed269cfc87e29f5385
+eabc78f0cc04d999dec019ffbefb05afd893cd7bf408ed4daae082bdfe8642ff0ec951f2
+6de707f298fe7aceaffe09f8d286fdcb72de25fba0c7a5fa54f67affaedd5cedd8ff34c1
+fe79f4c27aec61d240f1aded9447e42fd8a540ff5afbc74cd802ed4f8ff19854dd6bedd8
+4e93eda441e021d995f0a5fc44f6b1df6ad986d8b645bbe09355c2f30ffb50ffacf133b2
+ee80fa9fd0aff486fec652ff08f67affcf46d962ffc4f7a515e03baff67cff52fa98d84a
+93c7f448ff2ae66bd695fec733eecb09dfafcf95e7b686fa9fd26bdf39b9fb5b93ebbe4d
+e529b1ff91eeaf42ff29cbb796d2bf149efe86bf69b2ed04d340dfb52afe8dfa79e003d8
+f979f365f7ba79ed169af986fe9dc0ff60d0feafcb05a8fbcf1bd6fa86f46cff10e06dd8
+931ca4fb05f261fe87f631feafec7fd888e0bf03d089fb40d925e54cec36d815a4e494d8
+5bddb971f8afeb17b132d8fb7fff6cd8b625e586ed72f8db62a3e480daa5fb52dc198ffb
+af79f98dfc60f439ffc626dd47ffc187e40fdcc44393fec27bf210d861cef382d972ff06
+f35ffbcf3ee421fbd081f788fb6cffc859dd18cbb0fe6db6cb9cdc09e6ca87d1eb2ad8af
+44e927d9a51e83fa8bf239aefe73b6c74be5bb91c3f933ffb8ed7ed096e11fcc9bdd61d8
+20ff4cf831a1f55fe394cdafff7bd886ff69f7d33aef6efea712edc12c97f5cbee9451c8
+9fed33fec35ed30acab026ffce0ffac41ebfea7cf2c1d923e350d625da7dd8a55ffd8fed
+a51fefa9f577ffadf119a6da95e580fe1bbae44beda5d88be6b379f9acecaf45e05bd995
+ed08a5f7bfa2ff4497e720fe3db3ff9337fe62b0ff72f4c494f86afbb6e047dec485dd52
+eb09ffa8cb2cf24da2e078da4aff38f95cb7ff4baef27ae4a4cb93c2e580ffbf11fe4e99
+ed05e196cab588ff80cf2ac1fb9357fec6873d82feafed11d0b277ec9bfca5fe5af1b686
+e0699dfe9337ffb74786ffbaf56df1b5fe12f6cc80d85bcdfa9640cbb630e05dd1f93bff
+49caaced5e9afbc03bfb49c624f1be64c579f1aaff1ecd50d8e98639ed6adcc25af2bf91
+e078d5f29fe533c0e011dd79bbe53fef8cffb52dfebef693d879ed80fe96eabc0afb88cb
+a5d989c6e979dfc10cffb864fb17f051d926a9e668f2c76dfbc028ed47e00eb6fa99dd40
+e0add561ffdabf08d889ff65f8bf18f245dd6de1c24afd34f6bc46f1afd06ff9d894419f
+d9a54593e2bd3fe601feb671d7ff69f7d984fe9c79ed86b4f95693ffc20f86e993b9ff98
+d138ff0efebf2ba1e678ffb461fcd093f810fea5d061ee13fa4dbc1cc5fb58acff52fe0a
+c9a3d512cc68e59f167de043fb20d960d573ffce61ed19f556fe10a1f728fd96cd3fe8a9
+d69afe6ecafb82d8b21edcaf65fea5f962c3e644f287ff69f602f1b859f9a5fb44afd939
+e0a6d092bff51e96ec9fd87fcce45fdd06e5a512edb3fa04ffb8f75a9cff88f2c149ea15
+b0e225a9cf0be8c020c4dd02ead031dcafffc41df26de586df9badd651facd84f4c213e1
+a822e582d777eb2fffa0bece91ffd96eb5f27abfd989ed85ff73f394fc4cf3b7ff9dcd88
+e3a5f815dd3fabf49cd893e07aedcf6bd85aec87fabe5aff36c0eda349f133f9a5ff45ba
+d879cb9efc6bafce15bfd992e5a328e088d869ccf47cfe86fb61ff2e86b8ff79da5ffe16
+a9ff82fc62c8ff69e086d278eb2fc4dd6ad9319ef893fe85c2ff4ff2b568ffa1f569febe
+7afa6cf25ea5e057d801fe4df7dc69ebb95ddd359cfe7cc8ff5dd945fbc186d853fb67f1
+3baaed06c4e726a5fa5bd825dcb938b1e078d929ed5cfeb73bb3ed84fbc627dd51ff31ca
+b648ffb4f5ac2ed906ed84e0af08ffd892e079d886cef537ff01f133d8ff7aeba527fe4f
+d0fd74ee1ee59e19eb4fc905e59ec4f9d142ee01f389e6bf28cba1ed30b6ce32fe5cdf86
+b1fd18faa5bfdf7ad837dd5fb7d879fbc64be035d8ab43d8a0e02ecef977fea5ed7fcd86
+1afeb009ff92efbf51f237aff3b6e48a05f6afe529b6d99cf986fe944cf3ce39e59ef751
+fea1f908d193fa6cd804f287ff4acab67afe8def80affc86f19f088adebf7cff94cf6af3
+87ba5ac80cff4ff2149ce386eac187b91ff34dfbcc7bdd85b7c852ff79fab4c696eda9d3
+4bea10a5e093cba5d852f299fa43aff779fb9dbff227ffce67edc253f10bff59f494fb03
+e4af2ae692bffc72f393ff15afed930bd9b628b8d937f2e5be87ed75d81ffaa5cf97e087
+1c96ffa9d03e97ffcb0be052d861d0fb9977ffaf63bfd26de27fc6ff52aade86e756bfd2
+9be50ce858d004c0df1dd83ae5b7fe4cfbc85fe51ffc42d2fa97fda3c1e07ac6fe61d8ae
+4affdd98c4e070b8f437ff11f7a5bfd94ae42bff55f787ff6cb9fe76fa5aff2efb7adc67
+e4d286d81aed5093dbab0fd99739ff92e4a9cc6de67af151fec161fa0db2cb23ec87c1fb
+51c9fd83f499fb5aff9fc94fd932fba8e569d901fe4afbc7ec55dd71fed8855cf593ff22
+e5af1cc0ee17c6fe03edb523f19c36c1f51dffc495fe25f461ffc393fda5fa78f366ff70
+d97eed9f1af79fd892e7a522ec44ed28b6f93cafda22fba0c65cf93c93ff06abe896db60
+e12f9cfe82d87addaf33d9c3f23dd722d985e0a5c808ff970eff5ae5a6c3f76ec8fb79e5
+afd062c72aedbe18cba3d17fed96c8ed5cffa4d03ddf78d99e4be235d879e0af6b26ff93
+e2c448bfff88ed7bd8b26db9f825f1b714e8b0d36dc1ed7afe88e04fda87d8ac69ffce5c
+fbafe574d9af34ed79e088d8a849ed32d946e5c498c1ed1fd035dcb976f154ff7bc0dd83
+d873fe88d094fb55f27bec0cd981e6be5dedcb48d881f08dfcd00eecaefb0bc0fa931a9f
+df86ed61f7bf4decb66df0c0a4f3ba3cfe09e94aa3f356fe1df6a0fe4efa9bff29f7b119
+ff41a5e081f266fe9af626ffbfa9ff93ef06d2f9e97df2619fed963ddf2db6f410ff3ccd
+9fc75bfa9efe36f947acdd55f2aaff7bfa34f5c44696dd7dd80dfec068faa5cc4dfb12f9
+bf9ff76dffb115fb43acf993ff86fbcd39e0af0cf851ffa9e552d917ed6fe097d268fda5
+fe1bd3faa378fe6afb25c94daff5943fcda2e079edb7ff50fb99cfb41dfe88f8d040e02c
+cc63e084d795ffbb2dd886ebbf78d8b37ce062d96ce0c471bffb2fd91ae5c505c0e965f1
+14cb52c3fd955f8ed80ebcff18f8cf8cfecb52e0acee76fe80edaf2887dfc59ffb04b7cc
+2f93ec61df79e6b8f81bff58efa03cf2ba13ffbe9bda63e11cc8a5cd79bbd891de63d84d
+e10dabfe86c9ed79dac403bff77effa9cb09ff30deb849b2f0922ae0c012ecbca5ff87e0
+61c7ff6bf353ff3acf6bd8af0fff7be16dd824b0fe83fb93ff8ff25edd1ccbef72dba843
+ff0ceebe3bf4acfd38f09fde7cd187ffaf79fb58aed886dd88eca540c0ddfe56fbcb80d8
+ac5bf2679efb9362c0de08d840e2b8f39417eb79d4f782fbc20bd0afff108dc1ec85d18b
+e0adcf87dd5bec31aff183ff56f026dbff5df707ffafef6cc6ed5ed92eb7fe399cfb932b
+e4bf3ef289bff676ed94dc68bbff7df29fce53e502efaefb1cb0d924d786dc81f029f5c1
+4cee9ffc55ef79c2d94dde12c937fe80f97aafff05f9c988d965fecf8b0ec7b659fe04f7
+52efc350b9da94f332fe47fa1fffaff620a3edb33bf56bfec20cbee31dd6ff2ea5fa93ff
+82d85affc050ffb55cd941dea2fa439bd8fc31aed942fd20f952ff79f693c2fe3ed094de
+8afeaf35c79ce6bd2994fea525f699ff7dcbafe04bebd19959fba1e55aafd013ff35f8c9
+58d841ff86f99ad17f3bd893ee74fe9ff403feace279dea8cb04c2dd93ff15a7f67bb7ed
+9bbfd94de03ac1e59558f19ae5209fdbff72f7ce83d893e4a435f4d520ff73e092d097d8
+67e07ace2dc786e094db29eda5ff7eefa55fc5f279d060ef0de573dba5ca2ced99ff74ef
+67c1f26fb6ee65ffc57bd885df2eb5d001e27ad86bec06d776e688f346cb73f2d33edfbe
+77dc59ea19f685ffa561feafd821c2ff38f1b681e0a509f593deb62dd945f2befe67f845
+e5c25ab1e79357bfff35fa71f3a534e55bb8e86ad0fe48fa21a2f5b8fb8861fed22cfb74
+bcec46b5d826a9e64aff12d8fe9b63edafcc0ef260e47cf10cb8ffe779ff03ef53d264d8
+39dd4bfdb8e64dd920fba2cbaffd25fa63f4af11bfe12bb5fe24e54bcdbe06a0e75cf39c
+c1fb6cff9ff321ffb7fb5ef810d6a3fb86fe5ba7f881ffc712fb93de66d81ec7f20fed79
+fa6b9dd979fec74dfbcf62ed1ffcaac0ff8728db9bccb78a17fbc631d8f8169cd892e052
+feba81fad83dff029fd881d0ed880d9ddec318b1e052cbf984fb7cf294ff68edc188b848
+c1ff935be6a5c1fa2fffc3a0dd4f98d85dcfa7fe88f67bfbc298d20594ff86e4c133ec4b
+9ae08dd981d6fd5ca7fbcc7cdc94ff86f4adfa37feaf0be544edc652afdc934aabd984b8
+ee2cafe014dbc002e84f9eed86d04afea4ef6db7ce93e049d4f705e5429eee79a9ff88d5
+7af05a94e7cb5cff08d9f3a7d477ff60c5afed64ff1cd774eac72a9eed86c6f169e5aa5a
+ffb3f33dffa5f780ffa936d803e14ccb18d4af33fbd984e107cbf73afe4a9fdb9357fb6e
+f51bfbbaf745bfdd17e1af24e877f4c13af7b26bff7df7be56ee1aff4496d8ed8801eb55
+d016d83fdb71d889c7f182d8951ac0fe67f2c6f438fec869ffce64ed7aff96ccaffc2ed8
+6df1b938b4fb4cff33c1fe88b6cc86f9d81ce8c531dd4fe20bc7fb14a6edb6e5823afa4d
+edafdd87fe43c87fed9ef70d96ffce5fe0aa43fe14fbca27e462d879e15ada14c5f395ff
+86b6fe9afa79f0b024f29efab686de81bfed09c6e638b6cbeda53790eb9c6affbf5ffa90
+ff4de0a8cd16e7b7dc02d1ff7acfa5c0f08632c6ff95f68cfa7afe96f01be448a5ff59fc
+aee034d8a10e8ee0a523e09741f9a0d04bed37dd61e4b5ff05d99be580dd87f3a51aef52
+ffaf5dbeff8d57fbb0f686ffa562d9f97e31a0ffc0afe0950cf72cd993fbb639dc61d0f1
+76b4fb24f4ba8ada7ab6d88ffea7ee2fce98ed9351dd3cc8ed61d841bfdb67febe41d053
+ff14d8ff69b9fc79c1fe8260d8ffc20bfbc53d93f2c635bfd986f17afe9f4993fe9f36b4
+f564fb09dcfea45ad929e050e9c227afff7bf9cb15d97bea73fb5af6c4ff51d0fd7df1b1
+c51efbbb93ff7cf2a2448ceb86fe2cd107e754bfd981dc14c6f42f95deafd1189ed93beb
+d0953fc2fed058eb1e86fec19ed067f206d1fa8effa84ee00fc0db79ffc753eb36f24bc6
+03b6fa86fe61d0fc79f7af11b7f586ff06acd77dec8bdd7beab427aff22eafed11e0fd26
+87e2af6eedade007a5ed9e11fb30d85af3c7ee46d9c3ec20df93c8b63fd2f27dffa5cab4
+6aedd252ddbb66ed97f72cccafe08643a7e99353dd09ff87d974e026d4b60afebef8b047
+bbf268fec396ff41faaaed77d8acfd03f369fecb6cf2b425ffafed8c0ede93fdce44ef5b
+ffa9bfe58654cb21bff98bfe9952e530a5f785ff9dbefb93e549d80cddaf1ebed37bffce
+2bec94c5e54bf317fe32f6c26efad27ad8ff65d0ab94caf248fece27fa75ffd750fec568
+eb84ddaf26be84fb895afeb951ff7bf7af18cbbe46f70ffebe82fba430feaf3ec7a5ff08
+95feb6fa16bef7adcc6ce555f19dfb69f7c961d922e0a5d87ddbac28ed6de0995ec1ff3e
+e561d885e0b847fec27af481dd55cbfb7bf163a5d97fe018ed4e96ffaff486ea37d843f2
+ca7deed406dfc11ff061d97affa5f56eff9df028e55093dfad5af970ffa5c995d4af4eed
+a056e59a46bef93ff3679fd984b6d951cbb686dc7ae1a5c0ff07f890ffce0be1adcb79e5
+24d84ee09efb68e881d89a43f20ac1e086d0ff79da6bedcf27d960d2ed8744fbb727feaf
+0ebfeb3faeed93ff83f511ff4cf687c8fb0dd1fb25a7d07bf795ff22a0e79305e05ad616
+feb466d92ec7f920ffa4cb7cfed814d941dfafff6ad9af1bfbb47ffe9f67dd94d019edbf
+34c4e33dd861fea4c0fa6bfec31cbbcf2ce360fb79ff1dc4fb02f7a8e87ad805beff1cf7
+5fff96f51efe42f329fb4798d86ee44ea5ed6dff14fa9ff293fe87ed34d8a0ff36f5afce
+8bff4df5029ef122fabf64e57ef29b2fffd77befca62d8ff85cb97ff18d658cd73e4c293
+d8b759b3ea79afed6af2b52ae053cdfa30bbf799ff8ef0c041f7abffb05eecba3bfab734
+b3f57afe9c03c4ef81fe9fcc4ae139cdfa40ff5afba551fe79b3f282dbaf44ed09d73fe0
+9ee879fb9ded0dd8be94d987dd74cf21ffb3fad558e0a6ea10d569eba0cdb993d2afed39
+fe95d8f92cd199de75d85bd010d96eb6f804bfe27ada60eda9d970ecc962e0b03bffa5fb
+3ec0e2a106dd4da5f6934ee52ddc6fe086fa35fe9f3efb19ffd927c4ff3ad8b708fbd680
+eebf7aedcf52d833e05197e6c40186e59aca84e079d3ee6dc1e04bd0fb9328dd58e672ff
+b7f371b3e588d86dcae792de0ac2fb1af8cc90ff72f288ff57f1b144c6b6f237e561ff4f
+b2fe93c8529c7aefb543c189f2abc661fb05f664ff7be0af13bf81bdf241c2f42eff96f6
+4cffc884df9554fb1efec02a93feac42fbc186edb60fc788ff6dc9f986ffc615edcf7cf3
+a1fa4aefa5da6adfc0afec6297f5719fe083ffcb945afeaf0fff4ba4fe83faa8bfff2993
+f3d745ff10f355fb08a2fe2489f0b75fe3bfa5fa12d99524a5e00fc3f62df1af14f862ff
+529ee59459dd7fd8b420b7d801dc93ff865afe9fef12c0f22eec6bddfecc2bfe86fbd04b
+ff24e580dc9be51dd054f5c7fb49fe88e763afcc80ed67e4af27fe61f2c3a8e0b15bfac5
+13e4d39c16fe52da93e7b71fed4fb6ec3493fcaa39feb401c5afc629b6f909f35193cee5
+43bef913f24c88edc632df9ac9b1dd1ce3c10af279d2fd50beed87d8a5d892e9be61d8ff
+a52ef785ff4ec1ee5cf7bbfe85fb6aa8e084ff9cccb686edba6ac7fe29f63afba2f478fe
+63ea16deacd06cc9a8e079d9b6f816af67d997e634a3e07ed859ffc152acfa8ddd9f3e93
+d9b21bb8ff03f9bd37ceba78eba4d41bff4088f79bd879f15787f4d87be56cf343fcd986
+fe79ceafe071d9c05bed8efd6dff95e17fd48ad8ff04abfecc67dd9fc1fe1da5f260f837
+fb5ef3679fda88e560a5dc9b34fb51f929ff4acff79653cceb67d60cdd79b5d288eb51da
+40bdff09d44ddc31f3d31fd8ff05b6eda5cf87dd4be0c5a5befb8ef424f93dfb5afea54c
+8ce545bcf40ec8affe0af893f1af34fdce6bef2dffb6f16de5a2ed7add6ae0a5fe0afbc1
+39eeb57ce6d007ea3bfea5bfff38b6cb2affa4d866afd038e50df354fa22ff86d8b842e6
+15f154ff65fb32bf7fef8724fcb933e061ceff86d879db86d893c9fe4cfb1ebaea12fece
+93df7cc79fe4861ec1e514bbfd93f29cfb32ff01aed88feecb5ed995ef7dfc5a99fb4ca4
+f27cc95dfe0fc3ff9a22ed51cd41c2e485d993d308f1b7ffc4fbd686ff77ee7bddb741ca
+87edb717dd84d860e00dff4dfb32c69cfe24f284d99e5aff6bcbfa53abff7db7cc25dc92
+de7ffb99c504fabd16f59dbaff8dc8a5e89be41cf4cb81d99ed021edc39cf7d84ee0afd7
+77ef96f6b648e502fea5f512ff34b5ed9dc2ff6ff2b676f405b6ed39b1feadfa84f2a43c
+e05acf6ce09ec2fb33ff1ba2f977fe27e4a5c5ea77c1d963e032e883f1af3bbff988ff97
+f77cb3ff1aed7adc71e027849a30e550d93bd861ffa4f70fc469ff50f5a5fb8fc9a7d393
+d9f740afd857e543f6d680e01098f1c746d8f26be567f30aee59e977e079cbff60ed4ad4
+30f167ce51befb5aacfe66f986dda54ae51eb6ff92f453ffac07d87bee8ed1bc42c2ed85
+e476cf27e048afcb2be060c6ff79fbd05ad93bdc68ffc979fe19f6af43f260e579b8e336
+eb93d0be40ff0fb0fe22f796fcafd950e593da76d832d808e04bb9ce9eff43f99fbfe2f5
+c77df289fe9ded2ce065d4fb94c0e2b201c138ed57f912ba87c1ef79ff97c9b721edadfe
+d92d93fb9e0ffaa2ff4fc5aed132fea5f24496d87dfea4d993ff05fb79cf88e00fd734ed
+61febe83fe7ac911a6e93bcbfb56ff23affc63e56eafd85cfb92ff7bf9d865ff86f8a851
+dc9a0df38cff98d807b9e795d884edca7ed891cafe5ad8af17fb60f190bfe081ddad49d1
+179fff6cf60afe5ef26ffea4fa63f532c6abcd15fe5d06b0ff20d2b302acd88afeaf45ed
+2280fe93d9ff83e07ccdff61fb1addaa15fa86fe9344bd86c0e372dfb2c634cea5fb6cff
+9ec720d4afea28e1c21af94daedeb6f020ffb8f279ffafca0bf2cf43ed60fbd086de6bbf
+e581c5e13bf29eff2cfabf04ea42d0b609edacd91aedca31e8c062cb1be55ceda831fa51
+ff25a5ff11fa47a5f17cffc29db7d866ed2df261cbff7ef9c027cfafe086cb95e5af2ec1
+e387dd82fc67ed93d8a3e070dc5df6c5ff52f216db9ec5fad83ded61afd028f4ae33d893
+e951cbec69d95be5c6f751ff19f454ff81ed89d91fe052f186f85bfe86fbb359ec78c4ed
+8639a2dd9349a5e39a3ee8b959afdf93d8af47fe1cf79536bef968b8cf0fcbb554f1a7c7
+9cf581fe9646befd5b9fff7bf9a5febc7cfb8af8cb79dd87bee26ded9ac0dc05cf51f33a
+f707fe93d09ffb02bcea6bee99fe42a5ed1dff48cff29302fe53eb1fd8b03dfbf043fb9b
+ea8635d985bfe571f35d8db6cca0f71dfbb766e097fe5daffe81b6ff37f4b401a5e588d8
+a5cb25dd5bfe79f7a9cd11e171d9b601c68effbc9dfe2bbefed46df7b5fe22c8fb6df69f
+fb16ff30f098c1db79ecabed18aefe89f07dfed27ae05bee2fdd51c4e87bcdafe164d825
+de44edaf25db4ab4f00acdf443d9af2ff386fe96e584d979e1c14fff3dabe49339dd58d9
+79c7fb7ad68bdd9f56ffd9a6ca97f679ffc160cfa9c716aefcbf97fa3bb5ff2bbffd0eff
+59bfe07ac8ff49f105c4da3af308cb9fd36dffd03bfb62f985f09ad804e1bf6ced98bfff
+39f6a7ed3fd00ce05cccf28c46eb08d86bdb86bddd2cd885cf7be088fa60b6ff0ad888ff
+d839dd50d924a1f71dd86cfec1a0fa1fff41f30bfb86f193d879febf82ff88c1fe6194fb
+66d0ff6de04bd82bedafff45aeda80edc963fecb86ff09f4b724de53fa11eec37fbb4ef2
+2cade00de98723f75affd04ce024c3ea83d0a5ec53e486f23a9df008a4ddbfa5f673e4a5
+d886fb22edbd7add95ce0ce064ff86edaf33ff4dfa2ea5dd81d869fb78f594faaf13dfc0
+a9ff96f351ff04aaff5ef23df9bf05c5e728cc9efb5ab793f479ff87f3c64dff88e5ab13
+d970df93d883ddb2cc4dff0fe54ccdf313e442a5ebb71ee5a10ac69ef96affa41dcb99fb
+22f8ba14f4b02bf2be9fd84fff87edb1d186fb29d8fa7dd3fe6acb95ffe47cedbb81f493
+ffa54cfb06f77dd995d879cfff67d4fa8650ec2dffc062f042afda934afe1ff25dfea0d0
+2ec74bfa8cc3df78d1f360fe1ce593ddc03bd86bff82f75ecb41c0e07bcded7dd695e458
+abfe9f51fd65ef40c2e625cbbc0dd6b66de5afc73cf886ffbe35f661ff9830eaa5c6b687
+f765a4d975fbcf2affc782feaff136afdd80c7fa70ee62e5a052d986e095d055fb87e66e
+d8a542ff35aee09a0ae6af3fbef930af6ad9a03be70cd978eecb6ed860ce34fe13fbad2e
+e7963fc2ff8dd89b1cfb93bfff6df8c39ee07cd9af3ef7a7fc93bdd91aaffe9307c8a0ce
+5af02786fda0ed51d825e591fba52dfa9f49f50efd8ac3dd6fedd087d983b0f779fe81fb
+a4f83cff9f06ed95d3b65be89db8ed17bffc7ef46afbd026e0b83eefbb7add9757ef30d8
+5bfccb0ff254bddf09d87acdff73fa5bfe0eedaf2fc1f704fec39dbff56bffb965ff93dd
+5aedd1fa06ffce6cfe5dd51aaff193ff85f2a7dd6cedc978fcb0ee17db79f2afd74ce90d
+e331ed5abfff2cedc179e514f160ff86eb3fd9b2ef45ffbc9ffed8b404b9e4b1fe64d918
+ecd16de5c587d9b624ff39f71ba8e530ffca0dd851de32ec66e086cdfc77f428fbce02fe
+51caa5e047d507d93da2ff7afed39018ff4cf7d18bdf7aecbf88e894fe3aa5ffaffb32b6
+ed20c7afe069d4ffa45be47bf25feb15d847efcc1cf176fda54a95edb67add88b6f987fe
+42dd1de2c045c5f8249fdb0cd876e55bfe35e160fea3d190c8a8fb05afd883feb65addae
+d745cf9ef77afe69e488f311c549f67bff8731a0f17bffb586fe1ca8ff36eea5d0b89bc0
+ff79f3ba62e38ef2abd096c719fa59b4d852e079aff27bd986fe6cf787ff93f2bf57ed01
+9bfac39fe5b304ff46fab621ff5dd979cff28848c5e585d4a2f2429df68f1aedcb93d821
+de92fe80e56eb2da9ac912e2c139c651fb1ff3ca30e19fc7a5fb529bff935fc0e57dfe54
+f9aecfa0ca80f2c42ffa61ff78cd95f74ef30ad2ff9325f6a5fb0dc1df25d8ad33d984ec
+a5c0e050d5f8c111cebe3cf25ccaed65d879fb6ded5bdf47d914a0fa3bffc101fe4af2bd
+99ed22ffa5c3fe43c0e322eb38ceafde52d81de086cbaee450f237c069f2bd9fca79dd85
+d528ed9e18c1ea9613fe4be687ffd830c9faae37fb6aff79cf3ec7a8fb3af752ffbc83fe
+86e5a5c1ec9c56ffbe0aed74d0afed03dfafff4ff1b1df873af303e6be1194edafe014dc
+44e46dcf91e39f43f2c969e07aed62b0f977ffc299fb57ff2893fba94be59bfa7ade90d9
+af40f998e54bdc07fe93f986c8eb7fd8a56ae685d86aff77d3b764f10f93ed9e61fbc195
+f1119fed7afda5f92cff6dd881d7fe93d861ed15fe4ff6b8fa68ffaff75affbf66f5b807
+c05ffcb64edf8fbfec4ab8f69aff1fd788bfd88ae928d8ff15f64a84dfacd079f75afe2e
+d964fa86ed18a9cb3197ffc193ff6ffaadff8651c2f385fbb8ff31ef7ac6eb6bb9fe39cb
+95ff52bfed08e542afdd8bd1e919cbff85d85bed29fb02ffa1cb10c1ff8fcd7bd727edb7
+4bfb23f0bf43fba5e512dd46fbc98de4be30ffd8af48ff60c0fe35b7c743d888c1ed0ffb
+ac20ed3bff93d8afe19b04a8dc4de02cd877e0a5cb79d9ee93ce81f472ff14cca6db07e0
+86f1a5fe03f443adf2b3a2d993d6ff11fb38d995e082bdfe89c83db7d5fb5ff5d81ee062
+d1b427de49d8f9a139d89c1ba6de60ff25b6fd02d9a1fa21c4e82e95da80f4cd15f14cae
+f3953aee0dffa5c79ee177de83feab2ef361f697ff69a9e093d27ffeafca2eb9fa9bec87
+34fe4fd0f58c09ee86d3a5e070d0f367ff95f54aafde52e986c7a6ce27f94287eeb6fe7e
+cd87fd9ff305fb31ff9e48fe10e529dab8f163fe84fabe52c536b6dd79ccfb7b4dee64fe
+33b7c995f260ff27b5eb0fb0f697fe2d88d9af71fb9eef44eac369f5b61fd0ff58f2b6f9
+81d892dd81d8af76ed80e1a564fcb85affaa61fe76c9fc5fdac26abad042ea4cc2f735f2
+51d9bf9ee118d840cbf709ff51db11e07aed86cb5aadf7d67deaa462e0c497fc1bf72ffa
+b104e5ad17d89efe78d096ff5af377e6a3c3ff2dd745f210edc441b8d093dd69e1bfa5d6
+affe943b9fd825e2469ffcd881ed5effa40ee5b728cb7de488ed43afe486d2f44fc4dd5a
+d86deac1ff0ab9ce58a9f87ffe9fcd79fe6196e07ed853ec0ffb51f23cccff17d84cfed0
+7df3d61dc7e587d99f2de379fea4f579fb93ff64afd089e576ed42c0fe86f2ba82dd9eee
+88f759ff41f51effc106afdb1cfeb83bff4ebfe181d9c488fe81cbfb5fef26b7f91cafe0
+06fdc168e085da93e494d8a56cff87ef45aff319f83efb5286e9b5fd7af86ac3ed8a14ff
+97d922e0c28eff98fab559f86bfecc06f9bf67aaff79f216ffb14495e0fa2affbf14d13e
+e208edabe7bc06fe30fc9dc5abe597fa67bef486efbe05e347a1ed933df90cffb886f206
+e033ddac15d9bd1efeb609ff92fba65ee0a331fd53cf2ec7a5d592d9a1d881dd95ff68f2
+75cfed81dda55bf29b51ed61dc3bbce07ac7e665caf17dd9ae49fe0df35afb7aff36f8bd
+1ee55fffca7cd885e099c4f201d844debfa5ff2dcbeab549b9f178fb3cd1dd01e9c619db
+be7bde9f21fcd83ae09abcce7bf8c44d87d979e593feb892ffbf3588f7c96dddaf64ff4c
+cb13a9e42bb1e03895fb86c9ff6ffbbfa6ed6beac451d394ff59ccf36efad86aefc661d8
+23e9c203fbd179e887fa62fe21f35ffc66ee27e54accafe213a6f829fbc20effba21f793
+fea00cffa441feab33fb4ced97d6bf74cd1bc762de50edd080d99b28fb4cffc125d978ff
+adee960ef259d9ab61f893fb2fcf9eec5c86fe6aa5ff9f2ef151ffafc67bfac032f54ee5
+20dcaef194f335dc64ed56d673fbd84ea4f483cbf122e885ffd079fb5ac5ffb75ff2a516
+e02ad94ed0af21fea5f768afe283b6c927ade045a5f883dc4fffb072beff19d8a4d97be0
+9acf0bc59ffe70bcfb3093ffc959d872ebb378e5cb7bd855edcd86f2d275dd93d0bd88fa
+31f694ffa6f4b99dfb6daffe10f5c3a1edb577f550e4c05b88ffc579e680f4d009df61b1
+ff50bff7d82cd0ee4ccbfb86d870ed46e50da5fe8fd884fb6bff06d45efba1cb26f997e5
+1dbfffd312e340b8d85ef3b752ec9dd98c1eecd43dddb982f792ff7bf7bf63d830c1ed08
+fb46ff98f480fecc16ec9af26ad9f545afee5dff08edb139ffacf43cc7a8f687edc2469c
+f392ff38ccfb43a9ff18f5b568de2bbdff0af557ff13dbb759ec28e050d901c1e52ccbb4
+70e560cf0ce292fea81afbd237e0b51efe3e88ff9cc1e586f30ba974f3ba8be079b8e412
+f693db86f1d050df01eda5cd52ec7de0c10fffa5c743adef933987f996fb79fea1c832fe
+af09ffc1f778affd67fecb52e001e538dc93ff88fa54d199ed7ad851dd3094ffaf3acab6
+13c59fe18eca86d653fbbd6cdb7de057eb03d95ffdb1e807d57ce4699ef2d35de0c239fc
+97f85aafe5c29dd8b06efea0d0bb82fa8eff79a5ff86fabf3bff94f265d831cceaa26df5
+86fbc2a2bfefad43fe1cd866cbffe09c45f80cfe3d9afeb825b4ff6299ed7bffb92fe48c
+befe3fafe586f265fed96dfbb6edaa58d9b104e06fde88d3ef823b9edc11beed2c98f3c1
+a0b8fe5cf00ee69fb9ff24afda10fba5c0e370d1fa79ffd861f926fe3cf69ce07cc9f127
+fb94ff8fd17be01dd862feb8f724dbc00893fb9c63e4af11d889ee8640fc2af2ca3fe007
+feaf38e84af1d356dd32eda5d653bffe86ef9562fac906d84ae45bdc27e0c57ced91e4a5
+5415fbd87fd887e7c76ad99fe237c8fb1cafcb6afe9ef622c68ffc76d82ed8af02cb47e0
+19d0ff29ccf793ff1bf84898e5c6fe5be879ccaddf8846fb62cd9dc7accf29de61caf271
+e8b362ff57f32aa5e05297e586d879d86ceb2dfe13a4d864cc17f24cff9ef186dd9844a9
+ed84feafe732bffa7dffc29ffb22bfe093dc7abcfb6af179e4c19ec9b60dea94d180fd07
+f7af20d15affc03eb1ed96ff87f693ff79f7b04bfa30fec3b26cbfff42f4a527f250fc81
+f4b959d8f843edc15ad780e9b61aee52fe79f698ffbd86fe79beed6abf4ab6d87abbfa24
+b488f2afff41fa0bffd880ed18f539ff7dfb91f6a83bfe86c6ed0cd886c5fe05b9f61dff
+aff20fff94d0adbff44af9a5d981dfc139acff26f5b6ff60d140f25ab6ed22d94de03cd2
+a6ff52f362ff1ba5d990d85aff14fb66f761fe1be460dd79ec99f6b711e5a6ff60d031d9
+14cd4fd503dcbf9fd078edfaca1faddb6ccdff82eaaf08d888ffb676dcac11faafff4af9
+cb85dda5ed39e56bf0af5af39a3dd8fea5e536f1cd66d8fb45ce219fe07bd0af26f8a5dd
+75e558e049d815ebc555df2ea0fa93f15f9eedd37bddc03f9bdfb44bfd38e686d06fe333
+feaf6afacf77d85bd812e093d97ccbfe86d693f181fe67eb87d802cc93d4f445fe1fec80
+d989d8a0cd7bf3c39bc0ff38e04ac7fb7ad820df79eda4fb7ef29bfb6dff10e5b83a63ea
+9df08bfe06bedd3ccbffa640dd0dee86ff88d93793df9e5cffb614b8d25bd822ddc10bc4
+e89410ee60fba10cffbf79e48fd9f94fb6ed6ce6b84ac1fe85c5a4f287ff79a2f790ffce
+4bd921cefb8931fe4e87fbcc61fac781d960ff07fb93edc01cecb70be586ed8efb79f728
+ffa505dd52ff0dccafc717f873fe84ed36b6c69ccca9f847f423ff37dcaf46fb2bafd886
+fea05ef093f789feaf55c0e039d85ddf94f180ffafbd4bff33d455ed5eacfa9361e5c09c
+f95ec72bf2a5c2f10abfe62af396fa86ff9dfa80ffa6fd50f2ba79dc81c6edab50f502fe
+5a96c8ff34fbc37aff971dd8fb09afd93dcce504d973b8f580ffae41dcbfa5c2ee9f29ed
+a501f794ef9fddb545bb75f9c65bff9bfb31c64bcda5e067c6f06feabea5f433e5a0c0df
+5ada9fff7cfa5fee2fb8ca9bde82eb87fea6cb93ed62da03e4cb31d951cb08d2ff25b3fe
+92f536cc51d826e0fbcf86da7afac497e123d3f32cfb67d0aafe98d357ff79d9fe7ace61
+e044da07ca4ce032d96bde86ffc924fe4d87e093d7b67cdbf4188bdda506e236d8f29361
+befe77fa69b6fe5aed1898e066c7f77af25fe409d5ff82c5ea5cd820cb79f697ffc44293
+e2af4dccadf19efe1ab9fa429efb9543e25efe7af22db2fa15d651e90dd86cff78fd56bf
+f26bd20bef52f915ffacf76eb6ff83fc9cf46ba5ee61c30bb6ec89fe86f47008afec17e4
+b11df287fe78b3cc93ed1fd94fe079ea1ecdaf50b2f293c2fe7cf58cf1a1cf93f91ed048
+aee492cef71cff3eeec337afd7f152cffa88f3be4eb6f6d52fe09ced35caa5c0fbd33aef
+0ba5e01aff94fab678e051aafb8fff55ec2ed80eefadfe16d5f46dfe01dd6ce584cfafda
+13c9ff7cd99bce4fff72beed81de8ab5fb97c2dd03e3a51dfb52e293d883dfc24499ed1a
+bfe724dc46e9c986d8f9a5ff63d914dfa4c798f567fec17effb741bded0eff4bc2fe8ef4
+02fbbe9dfd3af8d708fb35a6d863d925fb58ed7ab6f69dfb64ed33b6d89bcb6dfba2ff4a
+93fe9f5fe06a9affdd3e93f0c21aaff861ff2886b2ff79d8fe69b6d058c847f31dfec92a
+e277db93feb6e568d87ded9f28debf95c3ff57f32eff60f2ad2aedbf1aedaac3e53fa5fb
+2ff6ce3de025b0f779ffcb8ad979ff3bf4b467fcd379fb61add87bf9b517ff3c7be52ad1
+95fabf45ffd933d8ac45e861d99fe05bd881e0a45be77cb5cb42ed6ee4bd69e69abfee1a
+ffacea76d613ffc63cd807ddafff86fa5af3b00de07bebc611edc025fdc51286b9fe5e87
+ffd084db93d7ed49c2e79b44c2ed2dfc83e090d9af68d8b0fa13d27b46a5fe30fa4fb9ff
+9349f838aad988e491e07ad1f9a552fe64f9058cfed06bc5af7aff86f264bfd844affa2d
+eda2cfbe22eca52fe1c596f259ffc082e296f2bf9efb79ed5aa7e47a5bfe76f19ec5fb03
+f787fea5f619faba34d8ff68f893d81390ffc456ff83e4be48c5fe89e2aa70f286fea453
+d415c0e02ddac05cf929b3e062ffaf4cdcacfbd803cce6a545f110e554befa9326f9a9ff
+75d8acf00fff61f59aff5aa1f287fbb8f283db89cbe565d1ed86e0bf0ffb4cc824fe4689
+ddc386e080d8f2991de2ff09d94fe6a5ff39ed95e565b5c707fe6dfa7acdffaf41fe0bd8
+af33ef65d456dd0ec2e032c9fd23f2ce86e00dfb3b93dbb732c74ab6d877cff29e16e0a7
+29ffadf03ea5dd24d8539af79330d85afbcb4fda27caf289ea61a5ff84fe95cca5ff86d8
+80cff879ee5994ec9f2bfad97afb8dfe9f01c5dc85e015b2f63d96ddafd032ed0bc0d94a
+e435e005d05deca308fba71eff79f693cca7edb9a1c1ff0af6b636ffa849ddc05a87b8f1
+9cc818d6b987fe12c1ff79f156e5aed90986f293c1ed78e593c4fe2bf68efeaf52ffb683
+d89c1af6c094d6afee70ffa5f186ed2eff9446feb87beebf7ade63cefa7cf58efcc60abf
+e594ed01a5ff8af8b437ff79fbbf4eed1fe969d954f536ee0bbce42fcbf943ffc166b9d8
+4fcb37f1aeff56f36bbee15cccfe8843f286cba7f76cffb3c794ff87f725ffc152eac55e
+d92ded53ff04f861e57ad86aead060c7f779feadf8d232fe6afb79f826cfa5f334d88cdd
+9a38ffbbe929da529fff4ff202b1e07ad86bec93d901ef51ff
+ >
+ >>
+
+ /Yellow <<
+ /HalftoneType 3
+ /Width 167
+ /Height 167
+ /Thresholds <
+1ace5bd99808fbbd63fab215e074d886dd9828eea2ff863995fa6ae423cff0a306f59afb
+45affe9cfa05f394fd60ed1b98e72da3fe8ee926c9e51adcad0ec5ec21bfd810bbfca5f2
+7dfea0fb88dd9ed00fd833e5c8fe65f72b93e1aa3bfb58e564ed19e05dd1ff62f4c7ff1e
+f2c5ff15f19801fa47f12daafa20ff4df318acdf83d29eff67fb1dafd979bfff4ff7c73b
+de4cff29f57aff6dfba2bff384d188ee6dff5ef20bf9d8f686fe33f5afcf4beaca6cfb9c
+f32cfe01facb64d915e5c6ed06d97cf7a943e0b0c730d6bc67cc7ad5be67ca26d8a5fbd8
+79c7ed56d87dff4fbefe69d6fe79affb69ffa0de4ad938d852c807e862fe79f4affe8043
+a5d986dcbe23ff9dc8b72cfeacca82fba327de9332a7d9933da5dc5bffcc8ade7bfecb6d
+eac0a5d894fe61b7ed5aaadc91c8ff56f023a0e0039df48dd885db59d9afe042ed17aaff
+47fcacc721cca5e469afc0e076d867ec86ff9d1fbfd845bad06ae9b57dfe93f6a551b6ff
+a0ed5ac7fb70ff7de586f4d92bef58ff9ff287ff37ba5dff86b3fb0ef293d987b0eb51bf
+f145d0b234e686ee79ff85f691f0a5cb19e2bf5b96e9b6ef13ff4dfacc7adf0bffd98840
+edb50ae8c178fbb6f76ffeb5f87fd8aa39ee62d8b03fd9b461fb28e63fcef62ec3ef0ef7
+4a9ee586fbcd81fed158e909f98bfec11c99ff88cae666ddbf2ff6a5fe79c1ff40940df1
+acfe17da33f0adff7ff88beea5c659e433d64ac1fb7ace3bbbff169bdc20f250ff0e97fe
+b5e01cd948e2c290f7cf03e03bcbbc61e232ed09b9fa2baae081edc15afa0dcdb4e01fd9
+5eff83f7ab3cedc21eff87d0a5e46fb0f651ef6598cffa61ffd07bfeb004e151d80cd253
+e025fbc0a0fe15f799ff06ef96c790fab272aefe7cd886ebd012ddb75eed32b1ffafc665
+d03693f8d252da339bf1129eec60d83ede1dbaedd6fb9e45c1e47ad48bdb42d80ce04cff
+19f888b7ff84ec1fdd6ce781d0aeea5dd289d977c8e68643a6f784feaf0beb45a7ef94f5
+80ff9fc4fb75ff5dcda1ff5bf704fea7c796fe30acfb9cd028dc55ceff7cfaa6c84bfb30
+baf11ad893c6aff714bfdd934eed36d9c495f183e587ff93f27be65dafe486ed79b7d646
+ff52d809ffd822e243ffbb76fea535fac494e48626fba5f1afe34aacf285fec078fbd87a
+ff89f295fa8f51af3bc5e87eb1fa55fe6cf487fe79cb9fdb6bedc911df9cf388fe0cf44c
+fc86f6b3fe3beeaf34fbc1ea5fb6ce6efb9cbffe53db6bd818ed48a8d892dd84e61ed988
+d379dd3be560f3c66ded7bfd95f2a20ad847df6dd993e05ec2fb79ff32ea5ae0a42af5c2
+adf867ff43bffe62ed1cc94ad909f4c84cd832c7fe6ae2a1f280edbe5cf99ccdaf29ed50
+c1e0931bf247d7ed54db14ff7cfbc60ce05bf4b23abde509cb5ae064c3ffee93fb61ff1d
+c4ed06cda5e73db8fb2ebefe4395fbac56cab65dd993e0bf35c5029dd87bfea3d08910ff
+d927edc56add88d229feacf896bfe51fef35f478cd95fb40f49aff81d9a34dff02df51d8
+34c6fb88f391fe05f57afe9741e5a0d486fc80ffba61de209fe588eea428dcc0a9f6bc9e
+ffb77aff93faaf27f3be12b9d03388e9c166f179fdc68ff778ffc0a4fcb67aff98cb5ede
+309eff93d81fceff9350f79eff17b6e52470db03d9b7f2975ebeff27c79ae486f17bccaf
+f238d0ff30f9d578ff2497d9ffaced61dd0ae04bf2d59651faad3dff17f664edc25bcf3d
+ff69fabf9cc2ff50ed6cdfc21baff012bfeb93cb86f993ffb668e02ecb61edadce10e8af
+c806edb71eda4bd2fb84ffc94bd812cffa964ffc2de559c635e01ad060e89fcb86fe79fb
+a5ffaf3bfb05d9ab44e508d95fe76acb0be1c13aec95bff3d861ed7ee6a369edd17fdd6c
+cefe86d3ffb7f79f4187e1acdd82f26afe12d851de06e460d979bee1871aeea5c3fa8552
+d82cffb7f87effab69f5cb75e093bfe17bd8a50cf28cdf88d9a551fe13b4d808ffb57afb
+d868b6fc35db49e5af12d944eec0a9ff9fc551ffb768fe72f863ffcd79f29a08e4b679f2
+86feb860f3cc91d887fe91f29cfb83dc0bff50e53cdc54e018d995c5e369f396b8ff9fd5
+28fe92f66da7f876fe0586b6cc2bfe5af7bc04b8fb2cf2a738ed50a53287e0bdfe23fa3c
+ea50d9b8f670ff9ff986ff95f70a9ffeafcb4cea3bbff28ae0a44193d824c6eb1eb6ff07
+f25faffb39ffbe67fe2ded01cff27ce161e9a5c82aec9347ffca7cf59eff79f5bf9dfe87
+1bf24ddb2be086edd136dab5e046a9fa38e6afcb3efb19e2aa41e7bd03ff4def0edd66d8
+52edb6f67ed988f2c293bff76efe79b4ff1dec63c956edaf51db40edd220dfa1c4ff46f7
+a5c1dd32d8fe9c58d987c7f97bd8f1c7fe5bed78d393cbaffc9f2593edaf21bfd227e05a
+edc742f16efb83b5e516fe65f7caf159e561a0fe86d7a5c6fa24c2dd7ee39ecbb67bfe97
+37c8a8fc86f759fe61bbe4a528e55ad01cd83be05ecdb0d993e683fb79f8169ffa93249f
+f0c67cd886fe6aed88d875ceff9d6de086d97ad0a5f926feab3aa3d324fea90cff479fe6
+23f242c587cefe25f879fbd082ffba5cfeaf53ed8edd6be41097fb8d47c5f579ff0cb2e2
+12864aa5d80eb3f361ff0881e2b4db46c6fc67f4b582fe74a5dd93d806d0ff71dbafd40f
+87afff80fbcd42dc50ed3590e8984bef1dfb52f4d84ae0afff22d039bfdd8dd2f30ccff2
+8ad983efa5fe85fa26f652fe0ad0aacb59bfdd4cebcbfe8811ff56ed15dba5ff55f7962d
+c3fb3bf2b4fe3deb75c988deb9ec58e06ccbee7fecc461b8d293fabe469eddb5e206bef2
+169ae182c7fa39d81bfb80ffbe60e0adec23d0a1e769c2feedb6f681ffcc2ce5a6d8f437
+ff86e57bd8aa4febbd2ed0fb1dff60f7a52bf39e45fbc4ed34c1dc05b9f37afe9ebfff77
+d2fda5d693e010b2fb87f35de593eda218fa409fff9352fe07faaf4bc1ec6adb7be080b6
+ea26ff99f46cffbe8043c0f29bd093fdb32dc0dd0bedafec7ed8a5169fe093ff5af402ff
+79fc94f936afdd28faa5ff58dd17e0aeed864f93ff9e60cdfb35f40ca6da84edafc942d9
+f218ff62b0fd51befb42972ed819e04b93fbc04088b9c862f10dfa3affc40ffed9af52e2
+85ce7decbf5dc5ed9469b7fd529bf69329e1c511d94df405b85fff62acff6dc71cb6d982
+f86affcb79f1c76fe0c1a4e96cd8ff9604d0a5ff16c9fb65f08be01ed8a702fbaedd65e0
+27d94cc7f29363fe69d41dff51f5b9fa5bcd19d984d59acb1cd87dc7fe79d886d901f195
+fe7ef60ffec5d93ec2e984b7dd6dcfff74fe9d5af5ae6db4cd93c0e47ded27ceadddff77
+faa4c2ed679cddff59fb99d0a5c0e079ddb08964ed9bc0f234d953fd8dfa22c0ff17ceac
+e564d2fba568fb86e0c194e6c52ec0ee3cb9ec96e445d710dc44b0e0ad34fb1dee45cbb5
+2c86f2affc39c0ed9533d6ba40c3fe86f2c58ded1fff84fb79f69e5ffaafcb93e5b786df
+6dd82eed76fbb8f239fa61f04de5a407f249ff6ae586d036d96dd8992efaa5f528fe4ea5
+f1944be329d0e902d6fe37f84ef20ad995ff88f56794cfba5bfe1fd0f90db6d81ced50fe
+329af25af6c8fa03ff45a7fe95e40eb6d880e250dd6bfa1dffaf47c0eb30f1a83aff4df2
+a5de76cdf855ff8afb77fec297fe03ed86d4b899ff67fddcc359e477dd9f4af4aeff7ef7
+a163dc51e238bad352caafe004e5cf1dea44fb37f8cd07fe94fd86dda54696d881e0a5fe
+68edc094d5accc3dfe5ef4afff4aeebb69e07bd892caff23d9aec0f763bcff81b8e579dc
+9ffe6fd75dd905e046f234e78ed9aa5eee76f8af7bdf8ff5bc16d8973d86df93c5dd13d8
+86ffcc3dfeb2f584ef8dd07bed98ff84d87acdf786d979fa08fe9f25dda905c1eba55ae7
+6dd894ff57f629bed81392edb624f988ffcb79e256db0fe4bf2ef99aff77f4a5f931a4ff
+7bb6ff89d8a4c55eaee9be3db3d00fffb4f31fffc010cdb62cff51f81beea0c0e99d22bf
+e579fed012ff5aed06bee661fb139fdd9050ef279affc542bfeb1ff086fbc1fe9ed87cf4
+4ffec786dc43cbff01d84eceff6dfeb7edaf5ff86cfb79f259a0ed9301a5d82ddd54e039
+d807dd5afe16b2e420d093d880c7f171d0f6862fd0f220b6f947afdd87ea7cfaacf43fff
+c75ad81fb6fe07c7a5fb5cfea5cb6ad8b510e461dcc14bed36d952f50dff96f277daa7ed
+67e179d763dfaf52fb7af5d06ee09bc887fa0d84d5fb64cbb134adf286d39ffa7cb4f293
+c4fe3dface93dfc10caafb7eb2fa4ccbaf6cb816ffb502e0982bffaced6ab9ed84e57bb1
+ea2dd518ffc024edadcf3abff761d9c1fb60ff9ff5affe6ef8aff39fe76bc1fb60ff40ed
+5bb7fe3eafd8ff61bffecb79e4c107fb51cf36e072d89e79f386ed64d896ec73b9d088ee
+06fd46f7c693ff82fb95bdf999c7aee050dc26ff4cf722ffbaf631fec26ded9ed842adfb
+c134ff56d8bcff3faaf103fbdd67c1eb24dc51e039cc54e57aedb61eff6efa87f22ae061
+d0a2ff28e57be068cbfb79d3f28811c1fe2fa5fb20f844c188fba94fe59fc92eff9de01d
+afff388fe0b63ec71395e49026c749b7ff33a2ef82e2affa14d897e553a0ee913d9cf32f
+fe9ec9abff90bffe0bf8d011e0affb2bf84bf320ff44afe08bd9a052ee29d40de45ace16
+fe6bbffa81d69fcb8bd8a14993eda306f9af24ff88f115a7dc8ae1af48db92e088d87ab7
+ff43affc93ff8af59bff2cafcb74e05ad735e9ca93c1fe14e25ff3c5eea7f842beea57a5
+d9fa5a9ee4cd6bdcc495ffd95fcbf17ddb78e767f07afbd083edc90df193fbbfd84effbe
+ee93dc7deccb0dd8b8289ee885ff29fbbe13e0b3dc65d87de05ed917f24a96e253a6ff94
+46bed0a0de87d881ebc878f22bffd084d96cf0afff7cee93e52ca5ec61f119fb5ff0b6dd
+7ecbe879d3e55bb9d982ea4cf21ffb7ec4f62afe4df41ecba5df5cce32d80fd968d6f405
+fdacf686dda551fc3fa0f280d8ab52bf2993ed9d1effc237afd7f68c52ffae4de00aaff5
+31b1fe0cfc96d408c8b728e057a7ff6dd94981f9a5ce8446fe02f74bafe55af387feb05c
+cbb667cefa78ff09f7a5fb24f186e5a5c6fb6dc1dd60c9f685ff6bc0fe3cfa9912ff5ec6
+b71afb93fec241a5de33d863ffc901fe87d97de00afe39fa28b7ff4093fac83bfeb1f876
+cfa4ed0ab3d36be288d97efb06f786f2a6fe80f9bb5de0963ac3ee12ffbf79e5c649bafe
+0bfb7affd86efdcd79f193ff8022beec06f187fab971d897df54d8b03ffaa4ff66f47cf9
+d34de5b2febd2ced0bfbd99fd1be9afd73ff94df36d3f50bd9f1914dd593e6ba40ccb66a
+ffc051ed22aff130feab16e53aed03b0cc6fe5aed39fe97ae05bdd2f86f7d579fc88f2ac
+59df96cf52fe98c7a5d973e267c7aaed03a1e4930ec99eff52beff68f9bda1ff3bef60d9
+6de0bf45c5ec1da3fe79c7ff649dd87bedaf01ff97ed68b3d3dead13e43aafd90adf4ae9
+c6fe7dd494d92acefb1eff87f976eec286dd49e0aecd1293fba21b88f2d16de189c336ff
+56e025dbc017c5f96d93e09c3bffbcf237ca79ff88f5d8379afe7eb8ff7bd885eccc79db
+aefd68f4b632fb4cf538fea8f39fbfe1a81ff255cd11c1fa78f330e6af3af960beff9af3
+15fb61cfff6dd8fd5ee02ee786d0af40ed17c3e097d283ff1c9fff9357c2f040b7eb1abf
+f72efb44d9f586d825c1e93163f090bdf850febf9ef9b68f3fe05ef379ff589ee0c13aae
+e517ff50bff19733ffbad932edb8e74199ffad5aecb47aee8dfaa550eb9f47c1ff52f9aa
+d91c9ffe87ed5add0aa5fad00fe0d746e701fa4e9eff935ac4df1aedce81dd91d8bb08cb
+4efa03ffc190bcff99eb3ed8b8ff6ccced79e00eca47afdf87dcaf4bed31b6f193d862fa
+1ee4c493fb8650fe21e8a8c2f675e5afdd6dd3fa69afda79e0a5ce91bf4dfe9df775fece
+3eff69d7b27ae65ccb1afcafc1fb35e5bfa9ef6293f3cf5bdb8deca505fed86187f7c67a
+ff63c2de14cbfe20f5cf1ad963caff79fbaced22d886ed6ec5e562d116fb6bbfe24b93f7
+a26cf988cda5bff21ebced2d9fff935bfeb525f970ff93e67cd965ed4ce02ada85fe9122
+a5dd15bbff93f485fcd05bff2cf59bbffb86c505fec09aed74fe55aff2bf9ff3b84aed3a
+d704fb2fff9a0dc2f248febe5cff20f180c2e03cdaaffaa5c4e608f2ce2aff85ee76e50f
+a1dc9314f844d1ff03a0fe79d82df6c45d93fbc1409cdd03aff475fa79b9df64a5ff81f4
+2cb5d404dd7ae561fe06b5fb33b0eb9ac7a9ff80eec15dedc428b9ff34e262d0fb79f8d0
+47bfe40bed98c2eb51d837ffa2ca94fbaaf1b548bee5b3fb82f89d4bd82ed9a51fec94d7
+71e819cb48ffb557f22aacd811cde607d934ca86fb93d985ed96ce7aedacfe80e5a608ec
+6de5affb1688ff94057cdd569afb9361f3b6dd52d886ffcb64fed17feab46fe6ca35f29b
+ff73daafe91aefaffe6af9cc2ed89fe55193fbc044d6afed5cf7b755feafd094c4f258c0
+ff2af94cf034d31cffb13cfe9ce57ad887fe9742e5b570d8fb7ac961ff3da5dd88edaf1f
+e83ed8087ffea2f20bd852ed62c0ee89fe7bf1bf7af854fec38ee0b079edd96dbbff7df0
+a370fa82ff6add13e55bffaf60f3b637dd51d82bccfb88d9c444a5d4f24cc8edf524ffbf
+35c2e09614a5fe2ef2a526edb83efec327fabe80e1af1cc0e43afe51dd79d824e0bd80ff
+5bf224ffc809f096fd1199d982ccf2881cfb4ce77aace072d886d879e09ddc7bcce561d9
+17fb4ced0edbacc906ff9d24b8f393d1affe10f778c8f96ffeb6f6d037dd6dff86de26d2
+fa04c644e559ffcb09d9af36ff63f7ce3599fbcb44e05effbd4ce0b0ef53fe7acc27c0e2
+15ffca87fa91ff984ced2684ffdb66ace49f5d8ed883eea6fe44fab8ed79d865c7f95692
+e29f69dead11f260d7fb62a5f381cbaaff57f2a537ed96d093d87bb6dc86d85cbfff41fb
+2faae0c099f326bfff11f4affe02f687fe55f206a5ff83f2c39ec0f66afe7ef154ecaed9
+46fb1af079cf5dda32bedfa24a89b1ed86d55ae89dffaf77b6ff9ecfb93aa1e486ea9abe
+e510acfed51787f8b5dc37d2f59326d0a4c7acfa89fe52d89e4eef1ed861e0bfa1f8d896
+0dfbcd1fffd0fc53e41ad87cda86d239f6affe4397d6ff08cdf549ff94c4fe4c93f0d808
+b6ec1597e584fece67f610fe4ef73ffe32eda7e174dec293ff4fee77cea5d952ddc4449d
+edaf2fbfd988fbbf39d5b65fe83cb1e02cd892dd83f568e6a4e068d893fe86fb970cf2b9
+ff26c2fe19f7af3bc74eedd861f016fbaef475fe23fb43d694ed5c84f3d89f0a93fc9d19
+c1fe76f80eee41d1aaf26cf8ba77e5aff512ff52c238f4c15793ecba33c69abeff63f507
+ff5be59802d9ade573bfed79b6d886ed2fa3e9bf4286cbff69fac943d90abae44cd987e0
+afd2a4c688fb2befa20bec7bda17ff39fa89fe7994e9c04fc5fb951fea4edd97f826fb93
+ff79c6fa5bff3bce0affbc2dc1ff42eb19e54cc3ff6adc7ce29e58e07acef283fe9531e0
+7ad886db27d061d9a6f185ff46c7e7a741ffc6eb79e2afdd4be395d866bbe80999de2dcf
+fc9442c9a5d48dfdb079e0abfe8661f00af748acd98cca9dd86bffcb6def1dfb35abfe1f
+f951affad10dffaffb9f37d986b7f69efb78afff6eed9e18f25aff01ccb567fad061fa87
+c6afe55bed0abbf827ff8fdf6de2c1a5ff79ed66b0cc08d8bb179ee5c195fba5ca79fc86
+b6f49fcdb9a5ec88d516fb45f5d092ff1fa5dd0fcbfbabff40f35dff80efb751c802b6df
+9720fbc060b726f35aff80fab138ffa2f66dffc986fea502c1ff76fb64eb04d0ff3ef218
+b8e0a5bf93c5ea25f14cfa22f0bd47fb93bfd888e761d0a1c2e06190e36dda22d3f45bfe
+21d65ac1eb27c8b634fbcb7dd995eb7cfec143afdf34d8fe639ed885c9e56ad960f114ff
+4bf835cdb911c3ff7df155fdaef4871ced4edc35e454ef02c85cff69f329d956ed98cbb5
+07ed5bc5fb71f5b7891cc2e69ac9afe013fe93faa3f472fed079ed94fbcb88d831cf01ed
+c65bd823e0b53be55df2afed86dc1de09eef68b8dd7dcbfb46ffe530fe76fba1e080ddaf
+86e0b639ff4ef7bc96ff39f314ffc831f893ed6db4e593ed80ff39a4fe84f8d868beff29
+f655dc24f29bff79f5ac03bff725ffa33ffba5d098c7aad293ed65fea4e041d997d46fdc
+44d9bfabff93f285d89cdd80e136db93fc7bffad5ff878fdbfa0ea42b2d052daf960ba08
+f74593eb7bdc29e257cc30a5dd07d93ea7fe68f086da9f79f988fec17efa93d827d93ad0
+58f2c43fbefa2baeea609eda7994d889d658cf32ffc15afe19ed87d3a4c906e058d885dc
+78a8edc34abdff01c644ade06beed461df04a0e846a5e08cd094e56fd810e6c469edd251
+dc73d5efb61efe54f47afb0bafde2ef28af669fe29f793fe6bf95ed013affe23f84bfeaf
+faab06c1e033cde721d89335fe86bfff25e582c6a5ffd86dd3fbc349affdc392ffaff368
+ff82f6d012e0b6fb57ffcc16ebab48d919ed63ff7df794fea96dff86cf95fe12f2c422fa
+ed5ae213ed93d9a60bf379d0aaf912f46dfe7ef29cfb44cdfb5a9efe7ad0a5f7bdfe10cb
+b51bf295bfff81f7ca50fa16ff4bb6fc8db846ffb56dfeb9f3128ce083afdd24e45dcaff
+6fd879d119e086e8bf05c3e225de79fac66dea94d1bf1d86edc661affa79bdff63f3c4d8
+01e45df16cfe2eed5194fda51d84ffd8864ced11d847e1b6c74d93e8a53696e02ba5dd86
+cdf475ffbfa2c1e04fd816e5ba20e347de6fd585ffb26a01fbaaff7af96bfdc49abeff58
+96e383dd30d8b61bb8e49505bfe01fdd3be55186d998fa7cffc354e236d80fb4e97ad886
+cdee31c1f896ce23e2a13894ccff47facb6bff99d8b642ec9efb52ffaecb3ea0ed78a8ff
+89eda351dbae39ff61f5d455ff96ed13dd4d9de0af4ba9fa87d89dd990d787f5c02eecb7
+dd9d0cf6bfaef86dfd9e1bf1affb6effb9f46abef251ff309fe19343f906a7fb8ef083cb
+f578feb6f74ee03bd9c0a5cb70c6b61ede50e83ded29d9fb40cbaffc53f9a6ff6df7afff
+7cf295fb88ffc02df153e640a8fb7af59afe6ac2fe3ff4be65aeec1bdd5cf17ff9b1fc68
+b5de8b05edbe3dfd86f7bf03c3e9995df2afff4df3c959d829cbff0af1be7ce38ab9e524
+d988fe84f2c10dfb86de62ec3bff0bfa49e00fd9af61fe3af3cc69e03899de7dcbff5edd
+27d84dd90dd0fe88e57cbdfb0cc4db81eccb31d869ff52a5d997088aeb9bfc77e6ff4ff2
+3cf6d086f294d86accb179b8f1649dec81de31cf4ed82cd95dce62d819e393c7abd088e0
+1edaaf43beed2796dbad06ffd985ff7dfb9cc608e04ce52dc4f2a8d87be5a728d980ff87
+39d9fb11e07fd89d0ef896fdb67ae168fbcd10ff419ff9b73eb4d839ff81c6ee2bfeb0ce
+93c7a9ee67ff79f7c593e55ca5fa88ffd22bef3da8d87aed88f77ffbaf3cd905caed6bb0
+f758feb968ffb6e407bffd32f2b9ffad1cbfef2f8ada86d89d48ffba10febff704fed822
+ffc50fd860ef91f383edaffe0cf9a5f472fb46ff07f7b1fe60cef282d2aff071faa0c542
+d158d8af36ffd178f39ffe8539fb4eff0fcdf1b948b3edcf6db5c864fa31fcdfbf62dc3c
+f699c730a4d981edcb6de0a7ec6de5a4d946afd89415fc60e679bdcb9ede4bed01adffc0
+21ed5bbbfb96bff904feb0c61fecb876ee65feb241ffd42adf9f22f394469ef9ce5dd862
+d93fd0f95a9fd8f827fe07fbaec979eea54a93e0a15ee84cabfb92ff7ae30afec13ea0e0
+85cb54df9ed87dea9b5bc0ed8b0afb52ff1bd837e77bfd8bef0de5c15293d9b716beddae
+cf93bbf3588efea2fa20a5ff2af4bd93d0b68644f1c1a5d01dffaff34cfabd16fe4ffb03
+f9bf26fa96ff6ff4bfa0f223f939fe1db7ff90c1da44e084cfaf08d964e683e4a344ff9c
+cd37ffc39cd77be3985beb79cfe679ddafed2a89eda0fb7bed83c6affe65b4caa4dd64e4
+24dc60e5b6ff6fc8f385cbe551dd25c69fd2b679f7d064f025ffb20ff2b73bd8fa2aa9ff
+c1a4dd7be489fe5cd820e0a0fe74f5aafa29ff7df652fe1bed62d8afe514dd64cbe588d8
+56e616ff60d9fe8f05ff5bed6fd87be0a55add9acf8ed8a558f168d21be052dd42c2df93
+d989e46dcf33fb63f29efe46fbc386fe23d75ec8f26ce57ddfad14fa50f21bccf6abfe4a
+befa17fe85c2ffb318b7de0cff4ae50fdf37f253afed92fe81fb36d81bde32b7ff1397f2
+81b6eb43ff5ae5a72eff9add81c6fa6bccfe79c593d94de030bbf948c7aff385f9ad3cc0
+d91dde6ced9de093eb73d6a4ff30fb72d388ed9f51f67afea5d795ed23a1ceea7fd987e0
+3dfe07c0ff75f525f261fec590bbea9fc1f787ffa54cff7ff344fba0e97cd8b511b8e36f
+f2b452f49fff26b7d00bfc57ed86d8ba93fbb7860fc5f29161b7d05ae03ad986ff51cf94
+d886f198ff89d4ff33ce4dc6a1f17af888fe52d0a9fa3cd8fd6bf293dd14fcc786d85bed
+34a2e525a5f113fe70f586fe66cba5f10b9cdf52cff268afff86d85ccd43d809b6fa41cb
+96c3f24bff30fcc20adeb636f24acaaff438b6f72afe9fefc394ec33df86d67ce033ed09
+ff40fb7a32d804e4b3cb14c5acd50fbff929ff94f688d917e9c68ed872ec51fea4bdca93
+ff48ed31d153ffd99733c2ffd93ff79dfb60f3afe465f223fe56c379ea1586b6f787ed0c
+cdbb48d3afec79e467ccaf02b9c925aef1934bed04fe89ceff67dcbf57e4acec02d0afed
+15ff82e5c12eff87bafa34c4e704fe88fb79ffc786e07dee019ce0b8d96ce0af5dfb86c3
+ff68fb75e557c6abcc15b849fb64c9b0fb4dffaace93b8d888cfaffe9bf17efb78f192fe
+69ef5aa5df71d835d456ffa540ee0efa88db79e740f81fd3a7c0fe81eea546fbadea0293
+edaf0cc6e89329c0fe79e7bea2d9fb61c0fad81ce0abff66fa98ef099dfb2bbeff76d9fe
+69f6d760bdfaafe179d9a54ff392ff87d342c99eff3e97d959d844fbb579dd13a5ed9556
+f2b7e320eda84bf421fe61bfff861da5f73dfec598ea02afd81bdd88ff7cfa67d8ff92d7
+a6f71993edbf0ef74bfb5bf319e864cc58d72edc51d928e086ffca49edaffe7cf385cdfc
+7ede9acf30f294d8afed60fa0997da20cbe56dd87ef8c96ad8ff8648c4eda038ddab42f6
+04bfa5e05a9bff9350bfd824e582ffd95ab1f417eda139e0a545ffd98c33bff71ffbc50a
+de38f49cfb62f179c7f77bfc95ed6cd0f65bffcc79febf873ba5d980cbe56cd9c2a6da5a
+ebb2ed7ad086e227bef979edc098f20cd843e3a653f222e95fdac43b9fda80e096caa8d8
+92f610ff86f49fff7af7a5d11d96f7c1049fe026dc60b6c838ff5afabf02ff4fa0e079c4
+f271fe65b3ff29dd59b6fc3596dfabf505fbd07effcc6de04eff2df3cb3ed7f579fbb4c6
+3bc18cc5e086d880facb7afbcf861ac3ff6ca9e06caeee7fb6d816c1e022daa52ceaae1a
+c6ff0193ecbe4de025d2ffb3f860fe2cbbff953cf72efb93d846ff13f353ff6dd9a72dfe
+4ab0e095ee84fec09ccf7bff86feadf569fec221ff3bfa50afdd94eb61cd07bac743feaf
+e05c86ffd06aed88ff1bf6af7be0a862e07fc9fb27afff3be3b7f607c1f093ff23d1a7f1
+1cfe7bd98856f21798f993ed84dab06deeb602e44588fe9ef71eff38ef4ce12195ed0d9e
+ebafdf4dedcd52ffd159fbcb7bfe86b0fa6bffcc73e0c0529fe2c2319bfb88f49b4aed15
+d596f29110f0d080e0c008f2b784d88cddadcf3bfbbf6bd3f978ff31d910ec38fbb704e0
+51d829e040a4ed7de49dc0fe78d823b6fb99ed80e86df230fbdaa542f8afcb50e46dd3f0
+14d0fe9bf6198eedce7bd8a04d93e89f45d962e588fa60d8b94ab1ffc1a5c5dd31d01ffe
+c00dfbc37cfe8fcef25bdc78ecb795befea5c4ff62c1f73ffe78fa9811f19e32e9992ae5
+52ed3bbfed08affb34feaff37afeafda12d861e5ca84dd73ea4dc3e0a55bff9f67fe56cc
+f969fe9a0eedb95aeedbaa24c75dcd8af77add67e5c96eedb5ff79bbf96bd9b413ef31e5
+5afec637e053fe0bcdb88bbf18c2e1930bfbbb98fe4bbcfb9229d953d5ffbe47e512edbb
+d96dfbcd83f3c03bafe27ded9de521ee4cfb72ffa8e9955ce0a237db5ad921afe811afd4
+5ffb05d064e852b0df7ad993d12ebfe186c7fe77c5ff6cdab6ff64cf95e05ad867dc21d8
+3ef163f9a8ff0cb6fb3fffbca2f96dfcc10dedadc4e4971fe941c0f67dffaf860bff87f3
+a5fbba46cbafff4aa5fa931199f1d305e749ff86d0af84f2a569f993d0bea2e54dffd881
+fb5fffcf62e02dc3e79442c3e56feeb56186f8a4fc86ff32f21da5fe0a9fffc510fe31f9
+63b6d893b8e545bf69ccf97bffaff496f99fff79befd3df286e37dfc2ebff925feb207f3
+a5ff71f820a5e004a4f3930fa5e527fe86f6a1f293ff6bd083e1bf49c3e87ac6abce0ae0
+33d844ddb651fa2688ffafc9a3df61d825d7fcc19fed4ddd01e7a2fe1796f2d827d0fbc4
+4886fec192c5f343ffd80acbedaf16ff39fa7af19d3ee7aced38b2f28afda506ffacf384
+ffc136f5d8b62cc754b2e081bedd73d2ed4feb87c1dc79cdf43cff12d287f3d9a529eb4a
+d718c84fe041cced67dda5c947f3b895ed77d869efc860dd39d95bd4f279fad843e7c7fb
+7ed9b643c40ec64ab7ec94ff1c9fed9358fe27f461fb78ff93f67afeca82f2cf43f05aff
+1afbaaf2934be039d2b895ff6dd886dfc23784ffbe74e4a5deaf55fa29ace568b8fb803e
+d8f18fdf61d912cafa9327c8a5dd1bd674edcc79d85adc0f9cde930bff90f4a6fa68cbff
+3ff8b866de9bfb45a5ff099cd97eedaffe0354ffb3c693f18bffb67bfaad2cfeb916ffa1
+d65ada08ffade445a0fe81f6b6feaf44cbbd66fcb7883ef260faa7ff8ef4abfb06de56c8
+f732fdd08ddd9ced88dab81cb1eb2b9be560a5dd8fd87be4c33a8acff57afa82fe26bff0
+2bf850ffaceeb14df435ff1ff09ad6b978c6f02f9fddff87c24bb6ed84ffaf63d8ff86f7
+79ff57f53ab6f820febfaff25dfecc6ce03fde03d92a9ee4931afebe21cdb0e581c7fb62
+f8974bc2e4f586e011fe52dd34edd00bdf98cb82e06fed1dff80e5c23388ffce1cd8a701
+86ea96ff16afd91fffc09bd216e951e038d95ed78af0a56dd9a504ef51d819cb4aeda4df
+52d2ff13bffa02fe35f6b578d9ff05b6c81bde62e358cbaf79e98ad61ae094d88dc0db5b
+ff15e1fe0296fac250bc1ef7a5fd24b3d52cf5b70dd84ce49cd987dd68c0eb9351fb2de6
+a549efb1d095fe86f2c35ef1aed086f778ff28f35bb5e02fcbf26c9d36d862ed9fcfa5fb
+6cafff88f352f72afb93c7aaf44299d9f3bc5ae569edc6fb28d860f5d086ed6de22fedbe
+93d0a5fe84f876fe26cdff46fac080ff93f5a5ff7efb6af4be79b3ed6dd981edc10afe4f
+a5ee62ffaf88f49dfe86fab908da5afe68f60dfd62b4e97ed89361c4db79e993fbd769dd
+7acbf95dedc16fee7bfeaf04c1fb26ff9f43c4e083d877c7fb8815ff52afe26bfeb54bff
+39ed5add8cd893dd1bbfffa61cfec8ee80ffc05ffa06c3e626d846c1e092d9bf3de561cd
+affb84119ff093fb3f8eb3e17ded9d38fe4fc9a1ff87f753fd23c8b810e6afdb79b1e578
+dfaf31e056d938d005d9af38fbd851ffafd04c9cdf86eccb79da30edd03fd90fd839cef2
+7deda7c99ed1aeed2ec5f545fcb6f750ff10d149afed06ff429fe09334fe9ee03ccef29f
+5ee57af1afff06f7b0ff1badd8eb79c6f539d60fe0c193e06dd501f04afe73f69157ead2
+79a50bcfaf25e088e27ab8f880fba001ff4ea6f987fe15dd57ecc5fe27dd78d0ff59c2fe
+4abae579b6f906d744addd7de069eed68835ffbb15c4f31dfcca7afe89f996f286ff9fc5
+26e0951df4abff6af7be21fbadf877b4fd6bf681ffa360fbc221ff51f94293ff9e6fe0c2
+299fe080b4f299ff82cd93e4c002ffc5d949bff78853ffd393d817e060db9f37d994f242
+b8f9229edb93ee73fb16abfa85ffa3caabe043d5fa933bdafbbcf84cfd6af336ff4aa5ed
+62b8e57bd0ed0cd976f18bffa549d886c0f50cbcec1aa4d4ff0dceec86dd7bfbcc09f197
+ff2ca3f3c75dd8fb9866d886b6ed10c65ce161d817e967f75efcc878e22cce3f99e49143
+c1e012bdca99ed54e3bf3e9be58aec7bbfe008bbfe1c95edbe3bf4c823d937e061f675fb
+b0865296fba724eccaac11f96dfe87d37bf2c86afe7ce564ccaffc7aff5ad09ac4ed35d8
+be59ea14c3ff9f06bffeae5be479dcc59abed897c1dd18cdfe38f7af6bff9fc94cd128c0
+f6b4fd3b94e09d78f9d9308df3af34ff4defb76cffb141ceaffb469cf79143c1ff3af148
+cfa1e9b71ffeb6fa82d393d8b046f9be91efafff61d0fe935fff52e52cafd918feaff762
+dc03d8fb6af3cb68d7f974ffd05aa5fe6df7a1ed29d84ed1efb7e414d0fe9538e6be50cb
+aaed20fe4ba5ed28d2a9ff32ed51e509b6f62bff79affe25f596fb5e86e5afed6bd8952f
+eeac12ff4ef21dfe75f59d5cdcbf21eab82dfcaee993e07b04a0d8fa5cfec44d93f1c854
+e093c6a5ca27e587c5f964e086cbe607deaced70e59fff6bf779ffcc8745a8db3afe0fe5
+9fd90bff50d816eaa00af1c5acf276fbcc7fef87dd25d084fead31ceaf38e6af4be30c89
+fbd786dcae54c1fe86f2991eff7df3904cc1fa7effa5f136c0df86cffb62b7f90298d98d
+d886caea78dd53c6e568b9ce6fd9b8f136d951f721ffcb59fb86ddb693d885e539c7f093
+63fec486e35ff319fb50ffb9ed6bafcc2bedaeff67a5fa71fc15f662fe55d91ea0ed14fe
+73bdff63f91fd9b708b4d828df4b9bf6bbf072ec65f27afe68b5cc94fbb779fad77ae520
+95d9a206ff5cd779ff52f3c478b8ff7efa85fea1cbaee5ba2ded14ffd80bb6e53efec960
+d831ddafe064d91ed886fb9d5af3990fc4e979c1e44dff1dfba543fdbfa2fa07afee41fe
+2b91c1ff7bd088e0a8f994d8b93ef661fbc558ffac0effd8a551f279da95cba9d587e451
+ff13f2be86de05cee822d9aaed93d8aff174fbd07adb5bf229afd893d07efe8af55afdc1
+aedd31e001ff96c7a5d022c2fb34ed63c7f24cb6ff51bffe38f7c0afe72fed9fe5b23af0
+da10ed50d214f23aff5298fa7acc5eafeb62c4dd7ab4e0a4fb6bff01f5a1ed5be008cdff
+3bd9adff40b1fe69f3aec86cf2d6871ff288c0ff7ce099d2f40da6e328fec06e43ec03fe
+93d5be09a4e07dcfe68830f7d306fec23aff4bf831b1d882df8cfe39b6fb519bffc039cf
+4eff0e9de0bb4bffc0a7d394ef4dff35ed4cdeacec960cf261fe93d0b829e442ff98f16e
+d885e126a5dd2ecba5ed71d061e04697fab608c86dffa459d898d98ce093d987edc346be
+f193f880ff9d33fa08f651c1ed93d6b942c3fe7cf678b5e56bed75bce025d99734e6be16
+9bffb3cc49e155d817fa5087cafb78ee9f14ddff9fcc5ef02ffeaff249fb299ffac16894
+e0a46aee85e5c1a0fe25f7c046d4a2f079bee4865bfe7ce585bffb2693ed9602f83efe6c
+e186dc9ffbbf2e87cdff7ad8af55fb78f7abed87dd4ae6adff5acffe84f56dfb02db85f2
+8ffecb67df93fbbf1ac2f986ff28f75ffd66d308fba5ff1fdf3dd917beedaacf94d918b6
+58fa7dff952ed0a5ed19c2fb2ed1fa86f180cefa62feafde3deb73fe9bf792f07edbffa5
+3bda57b7f57ec12be687c2e077d987d891deb954edafff33f5ba0dd89b11f164e55ea9eb
+6ddd20cffb1cd8edb4f32dcbeb69d4ff37cce881dfa5c60dfbb91ac87cd9fa3fb8e420ec
+c23cbdd85ccb09bffd9113c0f29406e45cd887e5afff2bd81abaff36ec4cd995e525de5c
+edaac91eeb7add85e06bcb9ffe71d6fb875afd67ff87e4c523e562f0affb48beff5d93dd
+9e0dca50fe10a5db46f069f893d90bdd30ce45c6b51dd8f381ffd34ae266faa5ff1a9cfa
+3dff15f661ffd108e259dd79d0ff5bface7bd991cbff08f793ff885af4b88e01a1dc973f
+f7b67cddaf4fffbe25edabcd76f75fff06bee864a4ff7ff3a5ff19fa81feaf32c5fa9a3d
+ddafc2ff23f39e3bc1e979f05989d6acfe79f56afea5ccb878ffa6c0fe50f335b6ec5aab
+ef9343c3e523cba1f03dfe9ed0bc0ae06ddc81cbacf454feafed93c6b0ea7ed086d825d2
+58fb7abcffa2fb6fed68b7c80887fbafb9d945d0afed69cc79eba8ca2499fb83ccacfb42
+a5ed7abeff18fb4196d8b549b8e0accb42fdc5fa6fffaec90af261fc9ec777f65efe39f1
+9fe594ed5aa9fbcb4cd80fd479df9ee861f2a1e54dd5ff7cfb43a0d960cffb934efba5da
+c2f60d9fe02bd0be4aea0ad94cf2309fd992d0f603ffce20e0afff6db2ea2ed4bf85f24e
+fb93c4ff20f83aeb05d883e061ff3cf557ff03fbafff79f1c4a5ed61e702d797fd2cf7a9
+edc31ed87af184f835b6e5a2c53bf2afed46b6f31593eac729de3cb5eca5c0f36bfea5f2
+0ffe81e66daf4ae018ed61fea2e42eed12dc99d986e054d81fcf84ffd61793f888fb95ee
+59cb24d886d96aefb41ce55bbff786fea913e0afc70dfe4786bef364b0ff7bfb93f58de3
+7eb8fa1cff5586deb978fa61f206d9f679ff60f90eb1da70ec3fafd886de95ff64f62dcf
+a3dd7ad895e1c13890e09f3afe1ed885b6f24bafdd84e04195ff4ffb10db61cafe04f755
+fe71da7affc96ed9ff4c9efb90f286d12de051db22e379d766d915ffc6ef86d693d9be44
+b5d886fb59ff2ec9afff92fc6ae0369af0c231e050da2cf98eff51fb06feba71f6c48ae0
+0ed843c9f46aff88ed7db6fad83bcbed01dd32c753ff38c3ed6cd5a5c0fb9949e7c1a5d0
+8abb42d89db8d888ed37ffc1a0f36bfdb646b9d988b5fa19c0fc21f34e9cecbd10f9c093
+e552ffcb79fec75aff6bcff387cb8de593ffa55ad990df86e810d89827fabd64c2e102d9
+5cfe6dfa7bff86c89aff34f99ef19529a5fa58ff22f88cff6dd093ea7db7ed0c7be742f3
+afc0fe51e5a1bfff7bc9a5d86be0bf9ccc2ddbaf33ffa5ee7beb82b6de26d942d0e51a93
+ff779bf883b6f29cd1a5fb0fb0e54bed2ac4fe9330ff51dafe83fa12f34bff99cbb615e2
+56d60ce0a7f113fec779ed86b5e06dceff6bf6d06fdd5daef39b34e2149eed25d8af0de8
+37fe54d728c0ed73ff2ec6b3fb51f4add81eaff777ffafca1ce59fcd04bdfb3eafed86d0
+54e1b6da35cd83e0b0eb05f14ade19cbfe79f8c0a5d28708ed6ed980f503aceb42fe0df5
+a93bf75dff7afa93cf48bffa22ff50c2fd7af25e9cfbd458dfba43d9ff61e623db61bcff
+85f979b3dc0ecbf285eb9b28c7a6e793bdd226f077fa8dff97f779fe7ee5a236e351ff38
+bffaae29c945acff29fbcd15b9fa8ad4fb63b7f875feb6f19fbeed86fb18b8cea0ed62a5
+dd80e06afed035dea140eda8c549edaadd6de8ca61dd21ff7ff96afe73f5a54786d9b9fe
+66f6af39da51dd22fabaffa3ca26ff5fd0f16bdd86e17fcaed83dd93ed01e277fd9860dc
+86e4983dcdabffc02eb7f611fecfae14c994fe81f3ce40d816cafe7ee5ad4cd816f8affc
+3ecd5cfe69fb85e05dd928cc4ed331d84ecafb7bd998ec9311eda4fe93ed84e6bb66efd8
+61e940a7e5cd3ce0c466ae01fa49b2d398f54bfa0cffc030fe45efb689f283cbf965ff87
+f57dff2cf6b90bfea5ed65d409df9fe411d8bbfe9b38a4d885e09cc4ff83ec975ad849fb
+a9bfe38933fd9fce47ff22b7fe17c556d2b0f218e6c3a5f808f4b0f90587d9ef66a5ed93
+5cfba1ef3eafdf069ef792edaf43f164ff93f5b771e087ee7ce003ddafc61efeabf180e5
+88ed9dff69b6ed09d25bfdcc7bd960d809db4f9cff9343febe86ff0993ff9d21dfffc593
+c2ff3ae080d993d857e394cca5c609e551fe1098d836d90ed65ed89f59f2be4ac3fb8af3
+c03ec2ff7df22ce5b4ef1eff4bfb03a9d844fdc892f182e61194fbb2c61bf3bc97ea79cf
+a6e69ffe3ca3d853fe34bed167dd85e8b93693fec646c0e028d864ffcc79fbc75bdd72fb
+96cebf2cdf5bc9ff4cd81cffabf79a45eba5cd36bfff01f6c01aaff226c0ff87deb049ff
+1df8aff47afed706e0abca1bedc3afed4cbbf58656dc26e779ef66ff21f186f370ff16f8
+61ff76d9abc1e579eeb6fd95f285fbafcf83e59c32d851affb934cdb68d180fb6dc7a5eb
+93bfe573eda30ce033d868fecd40ee58ff79e561affc51f830f368c9ff6eed93d976ffae
+25fe53d8fbc41fe28dff71f27fe5be1eed48a7ff27d13be00afd9fbdfa04a8dc7bebc255
+89d0ff6cf883ed9f52dca55ffad87bdda54bf02bf6a5c3e58a40cab63bbff270fb86f79b
+5bdb79fad077d9f385f99bd80bc7aece5fc52ad1afec83d892edbf2eff4bfba5248ae43d
+cf16df43fe1ef7bfff93ec19d8f6acfe07dd4cb7f261d12bf752fe28c1ff79f9b2f24eaf
+d980e0a5d92ef2c707d879de8fd8b627dab00efbb648e3be79f19f4cec80b8f405d1a5fe
+3499fa88b9e77cf288ffa5f26ae979d097e532fbb339d9f128b4dd0ed862fec76dfbd087
+37fe57fbc899d886ea5d9dd4ff6afad964afce25df4cd1f32ae4950ffc346be0a944fea5
+f741fb9efea5fa3a9adc23fb429ef38fdc6dd0ffc358f97bff93ed7ab6d87f04ce62ffb7
+8728c3e787ffce0ffe99e47ed988b6e04fd8a51ec799ff25fac10bbdfe549dfa88ffb511
+fe5ee479f3cb61d6f27dfacf19e0c096ff5acb87e546c9afe06ad0fe18d861d9b84bb5d9
+21ff45fb5ff2c569fe79bffa60c0ff87df14b7ed21b1e6aac2e09418f952ff01bffb22b7
+ed0faaff30f9b579ff83b5fe57c0edaacbbe15ffc269e07adc89ed05e079caf24fe9a6c0
+e161cd07edb839ddabbfe030d860c9ff4eefabe597d959c8ed9654f33393edaf59bfff17
+d0f97af286ffdc6ded7be59f61ed7aceafe065dc38ed94bdf19dfb429fe79412c93aa6ff
+84fb0facee38fc95f361ff10f64c86e2aefe01e493fe7cd587edc18eb816d8aded07a5e5
+9651ee9ef57cd793ff4bf70586eecf7de375b3f27ae585c6a0e087ed7fe7c238ea11cca4
+ff8a4afee1b275edb61af2bf31d3b952ffb66affc25efe18f67bfe5b9bf76ffe0588f0af
+fb1192e087fe43f527b3fb6dffbfa5c1e079d8fb3ea9ed943cc614ce45affb05d84cd0ff
+8bf63aff19f2afcd62fa41d01dc6afff2cf6afff89ea5cd96ec3dd7bd9b61cb8d883dca4
+c3f0953abeed60f42eec5dddaf0ccbff86f83894ffd23bfbc92ad84cff39f274dd89ceff
+5fb6fe3cc2df31d84dfe35f354d860d304fe9fbffa62d92fe5d67f5cf6d82dd0ff5fa5fe
+7bf697d813d9b003e086d897d793dfc01bed9fc5fa9847d0a6f4af24ccbe71c4ea0de041
+d91afe49fa21a1f2cb6ffbaffe9cf5ba65c0e186ecaf1cca5bdf85d89528fea4c1e88cff
+86dd6bd85ad843e0aff231b5f826fe50f59ffe2ff9b543ff20c0fb81c7a7cc9ac0f737fe
+9ff347e69fc1de4e88edb77afe6be19acca9c715f042afda27d8a5f583ff95f0a5dc6dff
+22fb8ad96fe04593f07af8b103fbcc3dacfc5894e4c24edd1de561c5f572fba3f240ff27
+f947ffa8d051e760c1fe86e953d7fc67f99fff79d199fa81ef88d46bc2e58909e055da61
+e337d8fe2896ff36f4a8fe9bbff744fbbe58e0087af34ae504ef87fe7df7c10297fccf62
+edafd286e95ce36deb93cda5e852f21dff50fa11a5d87be06ab2d023ff81f2afcb17e493
+f4b00afb5cfe9ebdf971febf8bed13d65bcc19d880ec88c9afed51f2acffd21fdec36bed
+a1fe96f083c8fa09ee87c0ff86f99f45bed131bacb69ed86d979e587fd28b6db1cde3bff
+77b9dd13e03aaffb5eaadc52b6f79dff5abfff97f222d886ff79a5edca69d886da48ed02
+a5d978d0f486ffd9a5cf75fea5c51dedb779fed83d91de9f44ff0cafd992d003f261fe86
+d979dd7ee285d8fd62ed1abefe75ed5fd809f971ff53d827c6f17ddd32ea65d8b30ee050
+adfc96f792fe5afa08b7e5409dfec41884b8fe983effbb2688dd0fe047b6d59ffb3fafd8
+26e1afff79fd82f7a9b7c814f330d965ccff79f76bcbacef339ff283d8ed25c1ed14ffcc
+05d938aff630d27bfbaeea01cbf947b5f715fe6dfa92ccff5aee9e37c94cc020fa9cca51
+f9a8cb2fe54daac6ff0be5bf94c4f72afb7affa8de2fd50cfe9fcf26f0af3cca85ffd632
+df93fbafe55adca3f280ffa449e5afd095fb28cbf67affc92dd83fe075dd8bcff67affbe
+2f8fd9f15487ecacd05fe843afff90f378ff29cc9bf279fe8eee19e853dd09e04beba0ba
+ff83ef9e0aec95bffb0796e0c14cffb76aa7ff77c6af86e579f1d076de68eca04ac1f19e
+62e088d3a4c6b723e262b9e517feaffb93f0b55fed32dd6be284ff88d5fb67a5f27efb69
+ec79d855e0bf50c2f393e0af44fab759ff88f5bb4a98faab12c84a9dfdb532b9da60d1fb
+931bff4ec0ed9346eab686e579f1a6c832ffa448da11e4c8f94abffbd70dfd81f8c1f2d0
+61d91de082ed61df0fd83cca5dd887cf9eff93fb7ffa62cab040fbd8ab36e556d8f661fe
+88cb08f2d03ed8f45df942feb613edb8fd0cc6ff8733fcc30eff3ae452f1d681fb35a7d9
+62e00add67ffc194ffb0fc0ad85beba113eecb5ada19d84affacf49f24fb9a5cff73eec2
+70eac695e008d9ade46ccef67bffd81bec89fe04edb138c1ed84e5a25effa8d109fa4bff
+c003fbbe68e8ba68fa9752a5e6932cb2e559dd199f8632f5affe51c5a5fab4ff6cf686ff
+a4fa2eee51d223d83be30df7c25a88edbe81ff7bb6ce1ded94fbb57be5ac2fbed89ec781
+ff9449a5d95cddb9d86be6b680ef94ff9040f398c5ed86d27ef29ed03ce513d54aa1ee93
+fb27bcdd952dfaafff86e1c01487edc579edcf39d818ffad04fb33c4ff5cfb1ff14eb6ea
+2cbc84c7f35bcd77fe99f956db08fecb1ee062ed9fd0b587e87cf3b117fecc85efb6fe02
+d0ff7cc0f270d8ffcbed9a68c9aaea01c74b94eb9cd608d962c788db7ff0a5ff8ed879e6
+b7ff18f9c523ee48ffa5c65ad62af761fd95ff1cee4de035dcb2fe81f9981fffaf44facf
+6ed808c7e5af0fff50f726ffb02aecb67af786f3cc72d97bc7f859fed09247c2ed3798fe
+d13cfeb40e9ffb8adb65e0c07ce7a374de93d28bff7acaa4edc13faee096d916e086cf9d
+f279b1f781fec352f423fe47dc29d7ed9e3be01fd881f2a550ed38a3fbb84ea70bffd82a
+fb5cf781fdd02de053ed7bfea5f711febf6ac1f251fe2593d8ae68e1af8ee586f232fe80
+e095d803de8de879fba5f868f01be63cc4f37acef2992afe5bf6a54efbc17cdd93d85ec7
+fa85fec756d9af35fe1bf19c3fedb761f1d9956dfad85cafe469d8ffbe4df1b7f63afeb0
+43f9be28f352da02e444fe61f894fb24ff86f6bf30ff49bfde3ad8be3494d980e06bcdaf
+ff864fc2fb93ff5dd93ce0c395fed90793e5f7c05ab0e28fd894d938adfe7cfbb1e021d5
+59e0af43e601abde81cbf439feb83bfcd102d860dfafee53ff85f3af57c5a9cf09c9bb92
+d3be93e04deb1587ddc1a7dd7aedcb66e0b61dfe77e5974ede10a8fb21ff93c0e367ffac
+cc1effa607f7be22b5f106bbf64687e5d58229a0d886f2d169edca78feb7ef85d895d80e
+dc56d463eb45a5edafd968fcac6cefa7ff15fac1a3f25b98f7adf16cd079f4a9fe65f71a
+bc60c2fe3a6cd9a1fa77ff20ef60e6bf13c9bd399af392ff7acafb85fed032fbbc79dd89
+cff263bcfe79f89a0fbfcd22e069d1fb31ff62f558ff2afa5dff70fba5bfff40fb12b9ff
+26adfe2ff9c09ff206fdce7bedd779e060ec43b2d104e679e086c6e566d7ff7ac3fe73cb
+aef81d99fab4fe6ddd19b7fb0fafe09341aaff25f366ffb0f188da72cbfe890efab621cc
+ff04dd60e3af3fff09e5bf37e00cd930e7c114bedd7ad6f08fec79ddff4af213db55cb9f
+ff86f4a4f16cffcf5fd941ed2ea5d84a96eca40dff50f00f9ee542a5db37c9ff7afaa0b8
+fe18b0dd88ed93d87de0a3ed06b8cc27d969e093ed71cf9ce088d76ced41b0daa538ffa0
+2cf2bfa5c4fe6dfab787fc56f940b6fd3397e03e9fe82cdf5fcaed4bdd0cee5aff79cc9e
+fe30f8c6e85dd091e1c23ea0fe0afbad29c8e67fd3f379b6d793f6b979ed66d978fe93c4
+ff87fb4ea0ed932effaf43ff2acf9eb3e487d293ec79dd07d04ad827dbac0bfca1f586b9
+e56af2c766f8d687d97dcbff6ec2f586fbb14bed30e747cb9ef64fd51fde41f2c078cbab
+f47bfe92f6ad57c1f846fc0bf24ad980ffcb5ef8bf59c1fb9347f90d9bdc3af2c82ed99e
+ed7fcaaff365fbce85ff93fca96aff85cea6c697ed38da61d8a60a98f777fb1886edd079
+e580ddf59f50ff34a1e042f24cc62cfbbf99c5f51cd851a5df73cbff60f9d280e098c7ad
+f91ec735fb7bfe2ef6b5fb6ff964fb7df4c566d81ecbfa12ffbd19e03cb6f324feb52caf
+ed12d85edda4cfbb93fe6cd986e27afcb6ff9f12fe48e837dd4fe502d5fe2cafd987d279
+ffaee51093ed22dc95e161d3e480edcf8bea62a5ff84d818ff52ea0bd8a620f251d402dc
+c130bbfd45f724afff90f482ffb6d93ae0a9bfffa524f84dc63e87d8f06cc6f962fec08a
+ff9ed10eff3aafe480edb81ef3ab0add9e47f304fb5be47eed94e0b846b6d8974593e3a5
+cc94e03c9fee81ff5a9bdd7799fa86ff6dc6a1d254fad885ff93f31cfe52f705c2f23bff
+0bf0aa2d86ceec6ad896ff85d0a3f161c697eb62e238e9c02b9afad469ff88f501ffaf1e
+feb658ff22bcdd0fed6be498da91f980fec779d988f46eeb9fe079d88ae6c94de01eec5a
+e579fec055d935e0c095d9ffa5fb1eafe3950cd89b17ec62d970ee86e67ac1ff44facd58
+e2c06cfec1a8cc76d816fe52ff05f2a5e50effbbed33d917ff57c7fe27ddc1adec46d3ed
+59cd9fe54df77af1bf5ce434c967e383d899e07ab4eba5c75ac0d9f953bcfb81db11b7fd
+28b8ff87f517ff9ffab57afec54caae6c247cfb578ea9ec832dd79cbfb6ff7afcc4cfb2a
+d157e041b2ed17e59cff14fa4ef319fe5aa5fa7ec5a5d030f1a310fa86f57bfe5eb713bf
+da84ff45cefe79e5c4aef822fea5d953fc27a0dd7999fe80f7b425ee60ffa5f596caaf87
+d083fe68efc475c0fe81f28feba870e59506f787fbb722b4fc06afff1de0a704fb76b5fe
+9fc1fa33ff5af425d062fb94ff459ae5a525f060f7c874e059da3dcbb1c453c705f361e0
+86f216affe80f0be51f67cfd96f5a54ad89e32fe93c1f271ffbfa0f686ffc344b9d093c8
+a5df7bcded07b6f76bffbd52c3dd96e463ce02c4ec8ff15ad09fed68b8ee3afd4a94e1b6
+3dbbed86c5f802b7ed2bd93febd091d920e04ded39ddf75ddb30d8ad42f91cafdf4cd103
+f6bc4affafd634c964ffd877edc788d85bc7ea92cfed4cda0aa8e08ed681ff95d914e787
+f2d102ffc98de1a552ee88f9bf82ee32f785fe93d8b91fffbf94e03add24fbd010d953e0
+07c0ff86f3bf63ee01afe59412dd37d953aeed7ee230ff61befb3b93ffd848dd14f389fc
+79ff20b5f3a5ff69fa32b4f405bffa28a5d885ddbe5cf593fa12b5e06ad2ff64caacff88
+55fe79f9c08cc4fc6a25ec89fa7dfe93c6ec6ac1ff7bd987fbcc68db7dfe8df1a552f495
+3ce56cee9c42ff279dfb88f2bf51f016ddaf3ff9a6cb28be7fef874dfc2fbfff1ed8a508
+fe94d8a5ea3ee44beda4d054fe76f7a4cb5cadff91f384b5ed3cd619dfabd08bfb3ecafe
+7cfac193fe21fb65f1afe704d8afe4679efe80cc9ae02dd85bc9eb48d83bdd9bc1e452ff
+7acaafff53f701ffcb1bdb79cafe31f29847befb1296e5bf0cedb262ff0fa5d8ffa3cb4f
+ed16e25bb7fa399ee05fed30aff21cea4fe40fc3e028d3f8abfe2ff5d07be0c21ee579ff
+97c0fe55edc27eed5cdbfe3baee0afd09cd979e569fbd8af51fb15bcd29aff7af76ee82c
+d9c36cff9ded67d831cdff79d993fb5aff36e079d9b14cedb507e061d9c5a5d8558cfe86
+f21ec7ed25b7ed4daff894ef739eff86f7af18fe74d997e81de07dcf91eaa366edafff4e
+9ed884dbaae16dcef142dca4d32be99cbef379c108e5b99fd5afff0bcfacf11dfdc293e2
+75fea4d0be93fe79fbb68613c1dd81b6f948ffba60d229e641b4cb8cfe31b6ff9b67d8fb
+61f50efe4afa9ecc4489edc87fe078fd22b2dd0cc9a7fbaf09ed43d81ce5b9fa8813e661
+ed7ec69bf2a5ff1ee797ce6dffa3ee8642ff0df9cfa843bffd5c88d6f678feca41d80bfb
+c726d752e0c593ed2dd864fc5ff131dd4bd5fe9738d2aef45efb15fe39f7b679fb86ff5a
+f6c649d939df52fb65ff28f44d9be577ff86d8b146ff13cfb862f530ed43afce5bffd9a0
+51fe09d8af6feaa5fd93c4f766fb0ed0a0e508ccf8931cc794ec82e4b419f4afff119fff
+3bf0bf90fa68b6ff3e87e196bff990fe85439fdfc2a5fe25b7fa0aca4abfef5ffe26f2c2
+3aaff8bf9aecb628f0db75d1adfb9f3cde02a5ff92e64fabfd93f26bff48affe8cf5a5d0
+86feaffb8626c1f962ea0dd073edc087d824e5c331bee19476fe85faafeaa7d193de6dcc
+fb86d826dd62e89cc9a6ed3be08cff9ec0f202e8be70fac496ed65cbf212dc50f301abd9
+7bde58ff82d9b745eeb0ff3faed82bc6eb7cd965d0ed6cafcc5ae045cfed79d7f35ffe34
+c650b7f1b3ff2bf948b3d0e252e992f86ba5d888de9f5bfbd51ae05ccb7aff69b8ff39e0
+11beff81c1e47af26dbedd7ae008cf9fbfe50ecb42da0ae59d15c6f3ace57edd92fe88de
+af4bf494ff5aa5f89b03fbc123e5b871c51eed49bffead31ed5bf598fe07f359f881ffc4
+09d861e37bfe9d35df1fe846acff2bb6fe9bbed786ff2ef193ebc03af38ae574d96bcdfb
+7aff964ffe39f8b233d8f604fe94f49f2dfbb81db4d093f2a5d905e468b0d592ed6a96ff
+7adb23ccfc0ff446bae59370ff8af335e596d80e9feb86f7d84bb1f358d826cbfe1bf65a
+baf936fb74d885f27aff6ebfee934dd905ff33c951f22eff9fd106b0eed06edfc46aeca1
+d016fd5eff86f89501f1c68ed8b644b8d592d829dd4e97eeaffb22d951b8f693ff7bbed9
+86e076ce34ed45e5b0c763fd1eaffaa717c2fe24f3a20bdd55edc986e0bf77feb67cd962
+d816e0afca56ffd94ce614ff61fb93c4f45bff03f5c729d89fff86b9e47cceff0df5c92f
+dc79fec34afbbef557c93184eed01effa1f95f9ad986afed6ddc95f04bffb7ea3fd5fb5a
+b8fe7bf2a5b9e99ec0d966e079fdcb861aff4df2b33cff80f299d979e038c3dd9e4bfb12
+ffa9f77cff72fba5bffc8648c1eb86caed61d841cdfd1af860f493fb87ff9a5ef9a5ce86
+e04dd4fb5a9fd753e0c0aff7a905fba618ecc325ff99f382ff6af888e5799ff67ad880e0
+af4ad917e39bdd50b8fa69ed5ae039a5fe6199dd52a9eeafd30999ed9161d193ffaefcb9
+62e5bf76d4afed3affd42bffc417c1e093259fddaa28c4e632bece66fb45ff17b3fa25f2
+a336f9d891db86fecd60e047ba2df6bfaaff6cfecd79e060ed24e438ebc25be11bd3ff95
+38fea517ff83f3af5beda8c605df51d810caec20d944fe95ed77c6b1f486ff79fa3387d3
+e561d0f29b5ee552de39c7b0dc3dd801f2c726febbed1fccf67afec165affb86cfb115f4
+72fbd82dc5f079d0fb8647ffb9fa26c0ff1bdc4ee30593fa9c4aef13fe85c8b779e7a060
+fda55bfab1fe5ff687ff6cafed1ee087d88be47cc2dc5ac7e6af47ed2ed80aa5ef8dcbfe
+ed930fd957e51aa5f793d184db69ccb30ef281f7a560f1ce6ce0bf98dd0be19fca51ffb6
+7cf9a5f384baff7fefc10cafff31e703dc3aed93d9ff4b9eff9245fcd386fac093fb28a5
+ff6efbbd68e0a54198ff943adfa82ff2d61de041fed99cc9b682f7ae1fff9e01c0e39353
+d8a6df79eba5f899c1dd34cdff89dead51fb06f54ebbe37ef3cd3ded11cc96df07d1f879
+ff5cf60ef15afe3eafff9367ff96c1fe79fabf34fb129f53ccfb88f384b9e028d940fec0
+9efb78ff9bd92fe0c011aff747fc30b2fb64ff31dc79edc729d855e03ba4e05b9ef7dd60
+d893fe81cfb71ac36ceac42ebfdda50aed9819e45ed2ee7de9a72cff86eeb6dd54c9fd86
+d0fb9f57ff79ef8fbe4dff05ec4be0c751e9affe33f6cb81f23ffbc335ce5ffe7bf4af0e
+ec43cbf188db93d0fe34d803b6d96abfff43acf39348dcc394b7d8a5bccc94e008ecca14
+e061afe550ea87d4afddffa74ce42ecffa67ff7cf2af08f243e5ba51c4fa70fe9fde87d5
+7eeacc86d87be89afb399fff92fb79facb18ffd02c87c5f857acf06bff9ff2b910f986f5
+6dfeca72d8ffadf19b0ccd47c1e05bd907fb6af4a50eed4c8be7bd80ddab11f9d288dd96
+fe6da4fa80d96adeb217fe66d8a46cfe86e823d651e186c2fea423e558fb1b86f1afff79
+f99fe579d8ed5ecbfead29fb4eff3cf420fb6af752a6fbb6f123d0b89aff5ef37d04edc8
+91ffaf42c6a5cb5ae793d3a9cb21ed88b1d035ed52ff07f4a54df125f9c00dd0b1e44ae9
+08d3b77ceda967d9feaf16bfe229d850df3dfea5d1b81ee15ab0f84abe3284feaff793fe
+82f093d17cd830e0c07dffc50bfac42cffc58635f254d825cbed12d541f8c279ed9fe104
+edbe16d8b3f26dff94f9507fd8ff6dd3a5c2ea9e4593ed2fcf1bfab220fbb610ed9fd0bf
+91e179d59dd884cfed864ba2ff7ef70bc4e037d8f8b924e060da9ef005feb632fb5dff7b
+f761fe04f3b77ad893d96ac6ff93dea562f35afe86cfbea2ee34fe4ebff29343ed9cff79
+f5affb86d776e042ff96c2f126db93fbd9c255e062dd13ce38ff4df7a4ff6ff9b02ae2af
+69f2af60edb7fea6e67ef5ab58ff86edaa25ffbe59c4ff7df491ff46a5ddc031d9baf537
+97c6f63bff52bffcc565bcfe93c769e3c17fe086f960ef02c4fe4bf219feb92dd8fac241
+dd66ed54a8fe9161a1fe7af213fb6fdd86edbf9ce018d893dc81e567c7fd1df23dfbb60f
+d844fecb8cd9ad1ef761fe6db3d896e506fbc864d835dec10f99ed22fa93ee79ec4ab6ff
+62c70588edb524ffc0a5fbb99feabc18c4d943edb86cfece4bd8e59545d917c0ff3ee3bf
+94db5cfc9ad82efb973cda51e0c180fb06affd9d15ddaee90884b7d880e012dda7e05aec
+3affa436fe4fd832df93fb83afdd7de5a55fff9f10e493c6fb90bfde74d8e5c146d1adc9
+95ea52d622fa63c2f555fe3bcbadff43a5e0bfa2d087e579edbc1bff3bfac196d824c1f5
+14ff86d1b67fff92faa84cffcf61d95acb01da9ffd86cea3f4afff3cf5d09641e85ade23
+cb86f2629bfe86d3ed1ba5ff8908fecc7bed64a2d97cf32bafe507d089f375e7b886fba6
+2bedc589e071e5c286fb62fecaf222fb9af361fe09f79eda86f4d06df2a5ff7ad75be530
+beff43c0f17bccf561fe1fb63cfe17f52f7aff89f92aff43beff93d97de439b5eda0bcfb
+1795d8f98657ff26f74cfeaf7ce598dc84e553ff89e07ad9af54fa39ed1ce071cbee7bb4
+f785ffa5f35fd834e00fe448d875d89f65f9d87af193fa6bfe40e5be04e65094f7d83fca
+f4b95bf893fbcd08fe61c4ff70b7ed46addc11fecc1ad3faaf4aff27f350ff3fb5db944a
+92ddaf43b8d890cb83d672e60aa8e5c517c0ed26ffb6f76acd93da04e94cbb87d3a4e8c3
+95d0afeed80adda5ed7ce2a50df14dffaffc68cd0ce05fd8f5882ccbed7ae065cdbf25fb
+5cd868f214cca5f04bfe41f4cb8edc9ed752f3049fe11dbfe02ed889fe7ff669fa80ff93
+f212fbc91db6ff09c64cd8a1db77f3ca7fffc0269bfb932fa5e423dc3b86eabfa5dd51d0
+f979ffce61eea14fe49561e593d8accb93d8a3ed2af7c5ff5ff886ff28f24fff24f154b8
+ff3993f89c61dca30f95e021fc5ef8c196d9ff33f372ff59fa449d6af6c352bfd95ef4cc
+81e0c21197de86ff7aef9e4ac1ffae01feb8a4f382db8aed07ffa4bbeb2eb7d09cdf8621
+ff61f774fea5c2fc6dfe4da5fb52e616ccbc9dc4da2acd5de0b48aed79cba9f58cff0db8
+fc30a1e036dbafeb51bdf1d879ffabc2ff9c4afb1ceeae2fc9b51efe87c6f779ffca0df2
+5cfe66f710fb61d8af1db7d60ced99e07cd894e08afbd360bfec51cefe79f3c7fe79f0b3
+dea03ffb0eb0e05bd801d979c9fdeab686fe1a9bfe33affe3c9fd8f82bf2a4c726feafed
+6de49bd33ed913ff4af8a8b9c93cfd67f75ffb03afeabfa8d00deaba34dd55d888ecc87a
+f2bfa9e446fe1ea5e67bfec054ff3de550db34e0afed5dd0adff79f688fb70d0ff8641ed
+bf5fe00ed6f18fe47afe99f568e07ad926b6ed36bbfba5c520eda9d08abfff79ee6ce5a5
+ca3eacfe14f958c82c9bfbd975ff06afd837af49d8a53a86ffd06bed79befe9eed86e5b1
+1fd036e064edce7ae5c767d2fb895abdd241e6b778de0fd850fa90ef75e488b4cb31e779
+e093d685e393c4ff37f94ef196c781e593ef24f8b608dc9928ff5ff193bffb6bf4af2feb
+86d680fe95fa834ac3fb84ed11cd56d815de9f02c2fd9f13fa93f677be37b6d815d94dec
+a6fa56ff74d7af65d93ae7a0c73ce449ed02cd9cfe54f574fbd06bddc0a5feafed861db1
+d996ee58fbc5f566ffc6ec1cb5d995fa21cf40acf82eff9660ff80f9aa4ff2a017eba622
+eeafff75fe65f9d052fb81f2c318bbfb42c1f079fa95fe5af20cffbf28ef6ad88be076ff
+2afa5bff79b0d06dff67facb82ddaf37ea52d608dd9cc4fa03f2b527b9d3ff9820df53d9
+8af17ffe66f2afe06ccce977d957cbfb94ff65f384ffc30ac1ed90e101fecf92ff7bf66d
+fc96ffa2b9f935c8b52fe7bb1aefb34bf301e44abcf3cb55fa86e28e1c9fe009b791f45a
+fe31aee082f2c968dd7df0c7a8d805c3ff2dc0f887ffbf86e50addabca1c96e9acd7379f
+ff7acfa5fe0add51d819cf9cdd4ea5dd81d943fe0fb4ce9ed8b815c2fe40f097e443a1fc
+06d0ff7cdc95ed83ff5ca8d859e0a5f01088f3cb6dffb8fa39e5afc84cff27f847b6ff2e
+f2b11dda48e0a5cb3f93e59f36da6bed9d2df253d209e0b318cf5be088dd7affd49e5bff
+c47ae088d87eceff8d3be0b627beffb2ed85d0fa46d6be93c5ef4affb917feafd712f749
+f28ce572b2df73d852e040c2f59333f1afff8620fec0e54cdd2aeb61cd87ff84f66cfb79
+c1fa58feaff299c0fb5fed3de8a7d983e0c00ed2afed62e56fb7f219fe4dcf22bfef88ff
+73fb7be6c144afe39928a7dd9623edba94d988e183c7a5d36bff9ff7ba03fbaff570feaf
+c0ff4cbcde86d99dfe84c8f985f222fe50ed0b89fad8af43fa23ff64f29f15c1f77dffa5
+dc4dd72ffe52a6e57ff612fc78d9669ded9348fba279dd99fe3fbefa5afe02f393fc9d57
+d0fb7de05ac7ed9369b3f797ffb794f4be25edafe032b5ee12e69f1bca52db24e086ff6a
+f64dfb2ca4ff86f730c8a5f947c18fc7aaf5a2fe3be51fcb4ada37fea5fb02f2b6fe78cf
+ff61f73cc0fb1af353fe07edc134ce7eed6bdf21d651f2228ecdfb60fe1cea67dc52a5e5
+6ad87dd094e0c13880eb94d8bf9ce736fbaee562d810f183f974e97bcaff26d961df99e7
+06cdfb39dbbe63e0fec01dd0a5ed15da84cc62dc2ad8ffbd4cd906f3a63bd8f204d157c7
+1efb43e2a5ca439effd25cd972ccfb7de579f4aac602d07bde93ccf35ad879b6ff12d886
+d9fb33e062d889dd7ab6ed9ac0f265de7bd760d849ea0da5d886e4a56fdd99d87ae0b05d
+e592ff55d09bff88e47ed1f69f13eca7cb94f527ffbf3affb0f540fb65ffaaf704fe5af5
+47b6d771da2efe9fe460cf0bddb8f71396ee89ffc34cbfff86b8e470ffce28ad5ae26bfb
+81d69fed93ff7af2b01388edaefd77ceff61bdff8bef82e566d96dff7ef2c20188f795ff
+4ab4ee30ffba43f19ffeb712ff63bae51afbce69ed94ff23afee82ff13f84ec7fb61ff16
+a7d82ced93ff8ef585beee3afa06fece4bfe31f8c586fe77f026befb39afd810fcb645e0
+afc73df14aafd780e096ca13a0eab6d929e087cdbc91d0a5f90bff94edbe47c3ff8ffca5
+3d9ce0c057d137abfaa354f221a5f40c9fedf887ffc52fde51ff36d41bbcca6edbfa9749
+c1e62793ed9f46df30fea1d0afed11d860fbaeebbb24b7e17fd4a5c78afe69d848edc98f
+e03ca6ed9d32e0b341bae379cbbd56e57beda507d593dbf779ff5ac71ce03ccffe6bcb9c
+de65b0ea81d7a647f213b6d2a5dd7ac9f962efbf79ff86fa79ff83c0fe5dfa0ff358fbd6
+87199ff2c152ee3aff1ee079d9b63fc985fa932ce579f0b5fe6df3a9fe84f01bc4da7aea
+cb7ad9c143d2b809aff68ae97cb6f4a5fb3ffeb731d6fe68a3f9d815cafa7ad8af0aff2f
+9afa91e533d851fea5f339fe06f753da14e581fa9b37f284fec350bffe86fa9ff550f909
+fe9fcdb637ffaff24ebf3ab9cda0e9b572fbaf28b5ff79b8f220c0f60cffbf96c3fb4cfe
+0ae89f29e0a54aed07d843dd25b5e406eda5d97be0a962f0c4fe4aadff84d899f187fd5c
+f489fe03aef1cc51d81fd94cd831db03b7d993fb3bff9929fb52ff9332f1d97aceb50dfa
+c645d96ae0a059f6bf0de0c342affe79b6ec5bf1c66df3c047ca79ff8fda85e071cd9fdf
+85eb7afbaad021bffe5ed709f793f25cd204d96dd68ddf86f21dfed382d971cafa87fd0d
+f34dfec0d95af9d818e04ec6ff9a68d989ec2be56bdc92f259fec670ffcb87dd7bf388cf
+fb61dbc375b9ff29c0fe3991dc7fd81ced61e566c62fd0aaea53c1de5abafb84ff94f788
+ff7ef9cb44ed87e05dd3f1afe384ebfe9c4fff3dfbd85f9cfe90f107d0ec9474f385ff87
+e14fdd21bffc369ee086dca5feb81bee40fb0fb3fa67c1ff36b6ca5aeda2d980dd95e96e
+db27df78ffa5f125fcaf42c2e09351f62bfea11aec96e07bd8950592ed9a61f5bdfc862f
+c3ed3cfb60d8a4f732cc75d887b7f21b98fb36feafe65193ed9e34fe48cc9be87acefa05
+b4fd9ebefb0eb7ff9cf816cba2f371ff189eed63cd07c861e0ac5dffbe0eaff8bf8d47c7
+02b66ac8e686e0976ceecc1fd879febb28ffcd5ada2dee9bf685ff88cbaff94bfe05f15a
+e3a2cbbd6ac3e540dd1f9df2d827ff88f54df91cff4ac8abff86ebb845b5da60cfff9b61
+fac19ddd66e1afd045adff2ff7c6ff40cbe9a24493e5adfb87dd7dc6ff5aafed95ff16f7
+40d9b0e36dd9c00fa2ffc219f9d886f16afb0bdd52bbeed057e032caa5de43d878e586fe
+27d886e0c32abce593edb42af19ed075fed88614ffaafd94dafb18a5f225c2ff2fa9ec5a
+e4af82e0a61bfb93d7b604b8d55de80fdd6ad896cf7cd836f95effa8f688ff94f0be4b8f
+e4b30db8e07acbbba3fb0fceb12ff793fe7df4950eedba2ee902aef340ff6dfac061e5b7
+74b0e4860fffb2ee03d951d31df2af07c1fd21d97ce069d08bfe52f6a55df1cc33f4b26c
+bee51fd9b4f286ff984492f293f77dfe70f4a8ff52db6aeda5fa45fea6f53efb4bffc253
+fa23e59f36c3e561eb2af24a79d6ff64b0dd78b8f880ffc138fa50f4c77ae445fea8fa28
+d994f280ff2be551ffafeb77d909e02dd85ad061fbc6fe62f39dfb3aafef2df379d967fd
+c45ae212d839e7c978fbd67dffc88cd883dd0eed8ad053ed1fc2fbd668dd79ff9ef485fe
+56e78edf81d052fba3beff02a8dd1ed1ff9a64e07ad2ff3cafff884ca2d82be6c1ff13dd
+50d724e2c206bfed33d5b810b6ed7fd96bdd9ad079e694d8b66bf6aefb88dd7fcfabe0f8
+b939bff703fdca47d9149ee88ed9b962ff94f27edc68ed79fe54c7a4ed84f3c21793fe95
+d484f16dfb19d99303a7d83dde88c1ff72d856e597ed18dd9cbdf6a5ffb651e09f47f1b5
+37fe20f8a5cb9bff16f593fe9f37aff132d8b741b5e06ecaa5fe42f16fe1af35ed58e5c9
+83eb932fc1fa91ee03a1ec5bc5edb8fe6bf9b577d8af73fe8df05d95fb6c9ffb80ff95da
+5fce08ffaf1ef8b210fd61fec94fd91aed3ebfff59992687edd879e3569bf489fbc94aff
+019dde36d810cd4dff9ecf3abdfa1dafd93a9dfbd027ef4dffafcaa5ed7ae5b6ee79ffc3
+61e505db86feaf39c2fa6aff3fcc5fc686f21effafcb79e566edb951fb5cbfe086d86cd0
+f87abffe62f78afb11bced1cd29ec0ff0ef5c293f8b638ff63fbaedd1bd859fdcb7dfa95
+12e039afcc1cfb40c9ed37d9b6ffc63bc4d921e14cf238fe9ce083c6ed67dac18fec0698
+f28bff7bb0f30cbceccffe9544ffa5bfde23d866b6f179c1fb50f8a5ed87e0af18f2a5df
+70cbff79f7b760bee47ddc9c14e751bfff49fa2fe1a518fe95f9a8eb1dd0ff53a5d988e6
+80fd26fa6dd962ed0efbc3a6d081dd2ae4a53ffe25ef49c0eb139fdc21e3c599ff4ff788
+fa2f96d879dd27cf60edafc748f075ff7fe3b151de2bd8fb84c3f063f39de986bef88117
+86dba5f279f7ac88c2e67af155fa33a5ff3af24bceafe138d84dcbe466d2fb6ea512e5af
+cb1df282ffa0f70dd3a5e56dedbd6cc4fd2cf7c188ff09ee9945e107d8f140a5fc31ccf8
+92fe34a5d886ce5af7b1d258c943bff66292f1bf31f201d88fdd9fe793ce87d99446ff09
+f560ff88f3c87eda9bff935cfbcb79edaf3bde80d8ac61daafed4cfe9efb81ff9612e19f
+cfb93ff3be23ff94f4b647afff05d97bd75bff01a2e0b0fa4efe0de059c8fb05afd325d8
+87e4cb79df9bfb7bff77f59cfab821fe9f41ddf3c165fa8afb6beb37cd61ea56ff2cafd0
+1eff419fd85aea48afd862fbaec1fe6690ffc55af3b662de79c4f50cfe98da80e02cf188
+ff78a0c7e40bdf9ec1fe5bed47d207fc33ff58f6bf9de487d579d903b0fa4fe50bbce1a8
+2affc186fe6bfa27f0bf01fd6de5ae1bc1e040d2fe5af709fe98cb86edc260ce74edd579
+e5acff27dc6ed2fc5aef93e5bf93b9ff3cd998ff74f66affae0af9ba1dd5bf28dea811d9
+87ed82c6f97a34ffb52dd952d287dc7bfe94dd86cbfe80e587b8f377ff96c5fb7ae522da
+4f93edbf0fea99d386ff0ab3e36edd61ed14ff52fb9ad90cd8fe2aa9ff7af849b6cda5ff
+6bf2b1d6a3e01fde5cc1fe23f0b6fe67cdb683f4ca3ff2d8974af209d0a5e55affd086d8
+3cccf368acf174bdeb86d86be914fb48a6f70effbf24fa9744bfec88f4af3fbed026ca33
+ed63d3af7cec50dda3cb42ec95d76cfe52efaf64fec16fff5ada04abe6d879c7ed79e20b
+feaff31bd132fab410d95fefd005e0bf13e532cda0f880ffd02de0b077fb1fed52c2f23d
+ffafd093c5a9cb74e565eeb34eedcc59d893ea71fa1fc1df9855f979bffe86f332a9d895
+47a5eb1cffd665a4ff8c61e6c47abaec51c8b38f32f59cff85b8fe0ac2fa2eaddc37f9b6
+db6ed0e77edd9f66e05acbfe934ffb1fe39cff7af982ffb3f41ffcc02df9ba13fdbf86fe
+46f2b2e57afbcb39edb22be693ffc95c8cf107a2ff93efa646c3e480edbf70f59bff4593
+fba566fe85b6ff52baed3d9ff281fec14cd8ba9efb82d89d1efc51f336f9bc20febe7cfa
+be6df437fe15d796ef8739fec218ed42afd96ccbf96fffb9f67cd99930f9d805b8fb1bf6
+a6ff6afb17d9f9ba5de70eef49d9b465d893ff7be59f5090ffa32dfe42b9fe8ef6a911e4
+c2a5ce86f20ce960dda34697e067eda5cc5ae892f220c5e088179ed901b7d873fbc466f5
+449efddd56fecf3bd852cbfb9b60fda53be5c328caafdd31cbf54bd4ed73d914c9abfb61
+dd22d9a4ff6ae51adb61f0be79dd95d884ec9fcf3be09b18e694dd85b0ff40a9e4b97ae5
+a5cb96f114ffa43fe310d838e54cfbc25c93edce70d858e034d986e69f48edcb7bd879e2
+86cbff23ed4dcf18fec6ed09e5c686f0d207d838edd160f234ff51afd886d815fbb6ff7e
+d019ff7afbaf62d8b65ea5edc5ff5af679ffab51e1a4bfd8ee199ae56dbef483f9932bc0
+dd07d6ff60a1fb7cf369ff79b8e6a220fa86f463e402cbadf763f205c794f8affe28d3f7
+3cff03fb46db8bf462ffcb7afb5fc2e269cbf50ffbce2aff73fa66d87adfc083f287fe9e
+c774eeaefe2fa5ff92fa81cba1f15dc7fe8821fba6ff1ff65098e0b6f86af2b23aaffa5c
+abe0619af380ff669afe82d894c1fa3ffea9ee79e209d99fe490d903c7ff33f7caff3a86
+b8ed94e020cdf30efb277fb6cb38aefa22b4df15edafff79f75394cfed4cd819e19ed907
+87f2c75be0b0fe93bcff4996e07cb6fe59cc44a4e57bafc886e17cb5ff0eacd929a3f103
+b7ff25f7b677dc5bafed54d902e5adfb24f6b548ddaf07f7b519df55bee543ed08b5fe24
+beff0d96e0afd445c69fd1affa883ea4d880df93d97acdfe1bf8c854e0a5c3e627beed05
+dd72e0c551bace54f85cfe41f567f14f9fde8d1093d8fa24d046affa61b6d595ddff4df2
+ffd97aec67c2ff62d838ecafbff20cb5ff85f8bf48eec0ff42affe952bcb39ea7ed1fc32
+c9ed29dd90edc050ff11edb64cf2d872c7fd6cf7d151e4d84fa9d930ffc493fe7fd888fc
+c4469ee55bcefd79caed61d6ff83cff46bdc9fc1eb51f379ceadf730ff6bf483fe37dc13
+edb9ff05fb55ff1df64393d9a82ffdbf18fb52b2f84dffa7f51a96ff24f389c0df79cb9b
+d886d6f360febef44daee46bfec986ed7cfe40c288d793bb09cda5fc44acda86e09920fe
+65e277c1e03ea5fe935fd89de00ed0f286dd6bf917afe85da5f67fff09fa93ceb761fecb
+9426f7b638e0b17ffeaf79f2cf84e0ad43eb09dd3aedaf62ffd086ff9c17e051befb9340
+ec9911ffb927fe7bd888de34e461d9a0ed07df5feb79fe85d76de8c296bbeba0c0ed78ff
+d86493f27fc8e179afcf5b92e4c06bd89dfc2fafed1cfa38ffb521afd92fcc9fff81f2a5
+0fdb2de058b5f615fa5ae986ff2fd399f703fe4af6d186d892f52599fbd610cefc30f669
+ed55beff58eec09fd983fecf3ad872d76bdf2bf5d89a18ffa9ce59f0c419edc12afbb50b
+fe5df193bef89cffb831f3b60cdb3ac5f292ffa221e4bd69faacc873e259d517ff9dfb7f
+f1b44fc48cbdfba5c74de52bdaaf46ef30cf5aff01d04bafe8c445b9ff0ac1fb26d8fe3b
+f2a5e64ccaa5ff7dd885e0c26dfbd072ed7ae00cd93dc1fb8bff93cded66e0a0c329f2af
+e179ed6ee4a0c7b75aef31fe50d9c452afe581b6c98fd4affb9f09d99927ff50f10f87fb
+b4f23ffeadec8641fad468e683fe9f71ff9661e6c668e89cd119fe4dd25ec979e4c18eef
+7cfaab4bd92fedcc79f2d02ddb46fb86f093e0ac43bfd804fc86e4ff42cf1bed9fc0fa5b
+fe86c5fb7be486b6f299fa11ff9cee6dacf36aec7db6cc5ffe02f068da13dd4afea20eec
+bf3aff97f753fcbc93df64d84df3069effad4bfeda9341c5fb1ab6cb5efb11ff95cca8e4
+78f286fe29f44efa1aff2f87d8f479fecf6ce5afc3dda22088e0c35a94ffbf79afed4ad8
+04debf41c8fa924bffc079f9a6c2e586f012faa522fe56e08ad0fe78f965b3ff0ca7fe7e
+edb0cb38fe62f9c569ff95ccb826afd893f862ff078be09af30eafd921fac635d87adc6f
+e020d2e53bd9a0ff10f693c7b686ff80f7aff260bdf7955ae5ad02c6a5d061eb1cf2a5e6
+7fd9bf33c6e18652c1fe9661bfff31f07ae5c062ea1ac0ff01e994da72dfaeeda4c1e64f
+b7c742aff6933bff4bf4b7ff9e1cf9c506dbf033c1ff93f77cfba5ed0dbfe0a120ed3bda
+7b29fda3dc68ecce79d82dea05b6c69fdd3bd892f34bdf9801ffa4bfd90fecaf28e548d9
+fe7df253addd7bccf2ad39d8a5ff61f150a2ff89f659cbaefa9652feb72fb1d977e033ed
+d227e3c23593d2e545cdff83d8fb62f22dff99fbbe31c4fe71f991f41afb9fed0bf2ade7
+83d993d8a63efaa2fb5badd8b53bb8ff8f37cb5bf76eff24fba5e00adabf9ae078d857e8
+bb70e5ac67b0fb8812e452d12fe05cb2fc35f5c486ff95f2b1cb38bbff4496f5a4ff6df7
+5bf114ffb85ae7afca66f8d260e02a9af284d0f66efa8dc40fb6fed130e9af26ffcd76e1
+80d887cbec62df28b8fe3887eacb79dd8fed47fa9eff539ffb5795d8fe098cfbab1df044
+afdc8ad8b648c870ff9515df48e562b3cfff78d859d824fc51f720ffb1c96dd288ee44fd
+9ff114bffb93e404d887de7aed86fe76f922c5fe01f179cfff4bd7fe24d9b8d8a4ef87d9
+81ffcb72d869ddb449e510ff72f885c7afe01ad986cb9fda93d886c7fc8616ffbf25acf1
+86fbc25eff52bee0a738eea5e03f98ff78fb86bf52fb19f531feaf13fbbea5e57dd7ff05
+bdf718fc62d0bc20cbaff279beff62a1edba65e194c8a4fe35f916ee87e5b443edc0a5ff
+95d8f8274fe5afff7bdc9ccb89df60ed06f537ff96de7ad863ccec6ad87bfea5ed53d61d
+cb5ed888eda563dcb1fb2ca5f37dbef28448fe35c3ff1af2a423f3abfe02f9ca80d891de
+55ed05fb5afe61f238ff1ffb4ff326a5d5ed77e588fe3ad969e6af32dd9909ffd867fc84
+f7c916d95ad6ed95b8d29fea6de096d047ff0af455afef935fe2c3a5fe86f182dd0dcde1
+18ebc82bfecf35ff6ee67bd083e09afe04f7d979fa59cc0ebd87ddf29333c0f946f408fe
+79d096d886e0c50ebff825fea64aff21f2c342b1fa8bff95f232ff51beea93449de3c917
+ec419ee1c19bf450afe566d0ec9343beea56acfe61ee25d79dd87addbf93c2e785d077e0
+7bccf84d9ffb58b6d894bfff11ccf773fbd379b0ce20eb55bcf188e5a50cf63eff4bb5d8
+57f488ed6bdac29edf40d3ff9f4bf303d83ffa5dffaa4ff8b586dd7bb1ed5bd806f15fff
+af51c7b86aaed024eb85d9fe5dab02c4ef82b5e96bd2afed31ff4afbb579f2a56ae284db
+b879de5f9dffd111dd48e56fd897cdfb16ffc6ed6095fe8bd0fa07ff63d5b979c5fe3d87
+ffd87ad093ed1bceaffb69fe30f7b13eff0fb0db3dedafff4293e0c12dc5fe0be951a5ed
+81b8e34bbcf350feb579dca14afa32ffc87adfc293fa03fec623aafc9330fa86feb723db
+bf93e76de3afca79ed9ad43cff51f913c3f686fbb6dd25d4f57dfbd838feb66cffaf3fc5
+fbb1fe65e217c9a5ff55a4d987e4c21ee659ffc346fa07f6cf92ebbf3586ee9fcfaffe08
+f7418ede86b60dfbd432dd53b6cb93ed20dafb059adfc115a0fa31ff5ebaf342a0e28ccd
+84e5a5d19afa79fea509d8befd04f297e250f37bfad045fe20a1ff9418dd88cafb02ffc3
+93d8b64dfba523e574edb079bfe041d0ecb616c86cf67bfb2ac5ff971cfeba26fc6bed82
+d0ace59b29dfa54b93fa9f3fea1f9fe586f3cb2fe09ced70e02bd496ff86ee25c0fb14f6
+5ba2fe80d92ded9fbee09a3efe15f5aefbc356f22ea4e07cc2f4ac5af2d879aff67bff86
+f75bafff9458c0f678fbafe06cdcc29ae482ffc70bf24fff18f153eb2adf4ccaf25b87d9
+b16aff78cfaddc1e9de48adac12ec5ed61f83593ed86e21df26cec81d0f35fdbc14fd9ff
+6af8af79ff93f2b059e088eda943d5ea59d992c1de04b6f22f89feb970ffbbed63c1e088
+c9ff53db0ba4f760fb14ba7af656f23cd861b3e07ecd93dcbf3ef4abcb8afc5286ffc780
+d86be0297fff93c1fa4bb3e424d0fe37beff4ec2ea14de3ae6cc73f3aee926d951ed2ef2
+af0ffb4bd929a5de94d877dd88fb7cd6aef76398ffcd38ebc424baed3193ffc663fb79f5
+a6fe87d97de8d0a85cb8fe9ccf07ff47bbff972efb9f11bbca1ee04dd832e4c207ff50bf
+fa7aa5f56efe38affbca69ffd754eeca3cd912b1ff09f24abded7ac6ed84d888ccffd88e
+ddbf7bf9c3fe39f24fff27ef88d061ea14d8c5f11fa8e547ff9ad8bbd902e363b9ff85f9
+6c9fe5941ded6eb4d881fea50ee032d865ff9ec993ce5eff86c0ed72cbfa62fe35f5aaca
+44befd0d93e0c11aaff77efea4f683fbc05aedb404ed52e041d70effbe24d9fe3bc84fe6
+a5c0e18715c4e585eeafe562ff6ff69cfa79fea5cb9dd915edca0de0c495f1884ae5bf79
+e00797f77efbcc85da93fb9b1cfca745ff23f3aa3b6bfe0e9ee5a50b92d89bd579e0adff
+09f8b5ff8136a5d7fb6eefb90afa4ea6fe87f5ce1ad93dc9ef61d9c4a0fa27ffbf4ac1f2
+92fe86f1bf4bfd0bf9a5c4e93ba5ffb754e586b6c603ffa0ee67b8ff34f186e060d849d7
+15d863ddad37ffd89ed291f86cf2af67fb73bfed86f96efe3797f7affd78d959fe3bf094
+dcb90ab6d646ed30f777fe538fffa84ae421d8fe9f16fab4fed45de0a551ec78d863e4cb
+81e6d070dd5ac6f8ecafc2fb2affb6f55dfb03f7c5439cdf934997edb6fe883ab2cc65e6
+7df2ca53dd329eed93fba812ff87fb56d2af69ed9ffa60d047dd14a9e283d977e01d93fb
+d80696f61dd0fe80e078d821c9ea6fd9aafe2cfbb8f36dffa9ed08f4c261b943ff15ade0
+c44be5b3f10caed821da83d1ed50dc42ed07d097d884cb2beda7fe87dd80d861e0a4bfde
+65ccf884ffa540cff2a44587b0f12ec7fe1af937ffb65dff31b9fa93ee9f1c9352e079d1
+63ec36df6ddcb07cfec161fbb9d95edd03bff7da1cffafd32c97eb82c6ff7ad35ae0c04f
+dd02e57af2b909db2fe497fa88cbff35f4b6fe57f2b9498bf3d27adbaf3bed5cf98cfeae
+43fabf5a9bdd930c9fe0934ec1fe6ee58ff2c697c1fb2f93ff9a39d89ff365ffaff518b6
+ff93cca6ff68f31ef95cfe7ada52f21bff94fbc33cf224fb9418d256c2ed9360ddb9e91e
+beff619bdec29ed111f3afd98706d847ffcfd9ff32ed95d989cc94ffbf4bed1ce5b12ff1
+22ff79f4d8529af1933ffeadf61ffcab43dc08fe79f2b274f79ad82efcc693ff7cd81fec
+5293d89928a5d86dffc6e65fbfff4cfb9ecbbc2fde60e387d104f5ce47eeb6fe36d0f97b
+b2d52afd1cec5edd70b9ef09cbf978ff31de9543c1e562c80efb52bfe086d890dd97d036
+e5afcf5bea0d86ffabd778edaff59dfb09b8fa27ff5bf77acfaff28947f070e99752f1c2
+fe79e4a96301b6c95afa14fe51f1109ffa91d886ffcf78e0a4cc438affc976ddbe6ae079
+d867cdf971f1a5d92efecfa846ffaf79e657c3f167ffa5c3ef79fbb8ed01e59824b3fb14
+aee56cf10affa7c3f313ffa3ed7ab3ff70d881deaf18eb44e399cab679f634fecf7fe0a8
+51d290e57acbfb5aa3fb80f279e79c34fb4dff03f272ffa264fb93c9afdd9960eebc4bd8
+37e062d0eb81d992d896dd36e60cffbfabfe42c0fb933db6f428bffbef83fda7bfdf86d8
+80e5d030e466f3509efbc20efbade9bc12fd5af9cb0dffb0ed159fe0b74cb6ec9321e8be
+65edc138fba00ce0af40fd06e05ad97ffe86d1f179cf9edd2dd888d96bed4294d8b63bb9
+fb1ec3e627f260ff95beff86f84affd887e4a520fa57fec3ef27b0fe05abedd626e09fd1
+21f4c3aded9fc5a7d612edc228f150fe2bf9c102ff87fec57dff9951fd68f410fe6afb86
+d879dd21cba5e028d0ed7ccd9dea8851d823e445a4f426ffb878fea5cb0bbfec3c8ee57b
+f22883e2a5ed3095e9c13d93febf27ff8cf86bc8ff7af9d011feb66eddb87af6c095d2af
+ff37cd4ddf38bef93efe5cf693ff57f798bfff78f993da6ae09f57fbaecd3ded52cf0eaf
+de9302fb49c0d993dd89119efbd85bd0f83892feaf41ffb560fe0fce59f73bfdb66de09b
+bed88de555e895cfb510adf227e5c01ccbace54dc9a8ee5af993fe7af781ffb013fa4cfe
+38ddff9cf27affc770e0af3aedc354ffa9f75cd1ffb74db3d8fec14ad1afff8760fbd85d
+e284c4e516dd52b3d83fabe082cbf54fffce20dd5ff96b9ff286f79bff64ace486ed74c9
+19b8ce22e14dd428ef51ff86f7be8e01e5a1c2fc6bf3d875f1afcc9aff78f33ab8ecbe4a
+87ea9d67bce06ac7eb7ddabf93e580de89d97acaf945ff08f338b9d384f53efadc6ad8b5
+78fea5ef72c5a3ec01b9cd2de051d904db4de1a0d893c7b67b
+ >
+ >>
+
+>>
+dup /HalftoneName 3 index put
+/Halftone defineresource
+pop
diff --git a/Master/tlpkg/tlgs/lib/image-qa.ps b/Master/tlpkg/tlgs/lib/image-qa.ps
new file mode 100644
index 00000000000..e5e7fa7bcb1
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/image-qa.ps
@@ -0,0 +1,1826 @@
+%!PS
+% Copyright (C) 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+%
+% $Id: image-qa.ps 6300 2005-12-28 19:56:24Z giles $
+% Tests for the image operators
+
+% Specifications for Image operator testing.
+%
+% 1. All 8 standard orientations (0, 90, 180, 270 degree rotations with
+% and without reflection); ditto those orientations perturbed by +/-
+% 10 degrees, and by 45 degrees.
+%
+% Enough space is provided around images on a test page to allow
+% these permutations to use the same page layout. This will make
+% test page construction easier and simplify page checking.
+%
+% 2. All 9 image types (ImageType 1 mask, ImageType 1 opaque,
+% ImageType 3 with all 3 InterleaveTypes and with unequal scaling
+% for InterleaveType 2 and 3, ImageType 4 with both range and
+% single-point matching).
+%
+% 3. DeviceGray, DeviceRGB, and DeviceN color, both direct and Indexed.
+% Indexed color will use the common pallete size of 256 colors.
+%
+% 4. For simple masks, both colored and uncolored Patterns.
+%
+% 5. CombineWithColor true and false; several different colors for the
+% true case (including black, white, other solid colors, halftones,
+% and patterns).
+%
+% 6. Source transparency true and false.
+%
+% 7. Texture transparency true and false.
+%
+% 8. Different RasterOp values.
+%
+% 9. For ImageType 4, different color keys (out-of-range, specific
+% color other than white, range without white).
+%
+% 10. String, file, and procedure data sources; for multi-component
+% color spaces, MultipleDataSources = true. This is tested by
+% constructing string data sources that are used as input to
+% SubFileDecode filter to create a filetype data source. These
+% filters are read into scratch strings for the procedure data
+% source case. The procedure data source scratch string length
+% does not match the raster width, and the width x height is
+% not an integer multiple of the string length.
+%
+% Also for the File case, the number of bytes consumed is
+% checked after the image operator to verify that the exact
+% amount of data is used. This is particularly important when
+% the currentfile is used as a source (possibly through a
+% filter.
+%
+% Image bytes per line are < 500 bytes to exercise direct and
+% buffer copy gs_image_next_planes mode with the default stream
+% buffer size of 512 bytes. Procedure string size is greater
+% than the image bytes per line for the same reason (sM and sD).
+%
+% Total string size is kept below 65535.
+
+/WidthRGB 83 def
+/HeightRGB 89 def
+
+%
+% 11. Banded and non-banded rendering. This can be tested by running
+% test files throuch with different page device parameters to
+% force banding vs. page mode.
+%
+% -------------------------------------------------------------------------
+%
+% Testing the RasterOp-related functions (5/6/7/8) is not necessary at this
+% time. They are well isolated logically.
+%
+% Testing orientation (1) and color masking (9) would be a good idea at some
+% point, because this code has broken many times in the past and has had a
+% long bug tail.
+%
+% The really important things to test are 2 (image type), 3/4 (color space --
+% but only with regard to number of components, plus DeviceN and simple masks
+% with a Pattern, which exercise special control paths), 10 (data source),
+% and 11 (banding modes).
+%
+% ==========================================================================
+
+%
+% Procedure to generate test mask data
+%
+% WM and HM must be defined prior to invocation
+% MaskGen -
+%
+% The mask data is stored into a string named /MaskData
+%
+% The mask consists of a "target". Bits past width WM are
+% filled with 1's to make sure that pad bits are ignored.
+%
+/MaskGen {
+ /H8 HM 8 div def
+ /X0 WM 2 div def
+ /Y0 HM 2 div def
+ /WB WM 7 add 8 div cvi def
+ /MaskData WB HM mul string def
+ /MB [ 128 64 32 16 8 4 2 1 ] def
+ 0 1 HM 1 sub {
+ /Y exch def
+ 0 1 WB 1 sub {
+ /B exch def % byte within the row
+ /C B Y WB mul add def
+ /P 0 def
+ 0 1 7 {
+ /b exch def % bit within the character
+ /X b B 8 mul add def
+ X WM lt
+ { X Y eq
+ X HM 1 sub Y sub eq or
+ Y Y0 gt X X0 sub abs 2 le and or
+ X X0 sub WM div dup mul Y Y0 sub HM div dup mul add sqrt 9 mul cvi 2 mod 1 eq or
+ }
+ { true } % pad bits are always set
+ ifelse
+ % stack: true if pixel is set
+ {
+ MB b get P or /P exch def
+ } if
+ } for % Bits within a byte
+ MaskData C P put
+ } for % Bytes within the row
+ } for % Rows in the mask
+} bind def % MaskGen
+
+%
+% WM and HM must be defined prior to invocation
+% BPC MaskGenBPC -
+%
+% The mask data is stored into a string named /MaskData
+%
+% The mask consists of a "target". BPC is the size of the elements
+% in the MaskData string (must be 4, 8 or 12)
+%
+/MaskGenBPC {
+ /BPC exch def
+ /X0 WM 2 div def
+ /Y0 HM 2 div def
+ /WB WM BPC mul 7 add 8 div cvi def % Width in Bytes
+ /MaskData WB HM mul string def
+ 0 1 HM 1 sub {
+ /Y exch def
+ 0 1 WM 1 sub {
+ /X exch def
+ MaskData % Target string
+ X Y eq
+ X HM 1 sub Y sub eq or
+ Y Y0 gt X X0 sub abs 2 le and or
+ X X0 sub WM div dup mul Y Y0 sub HM div dup mul add sqrt 9 mul cvi 2 mod 1 eq or
+ X BPC mul 8 div Y WB mul add exch
+ [
+ { } % BPC = 0
+ { { 1 } { 0 } ifelse put4bit } % BPC = 4
+ { { 255 } { 0 } ifelse exch cvi exch put } % BPC = 8
+ { { 1 } { 0 } ifelse put12bit } % BPC = 12
+ ] BPC 4 div cvi get exec
+ } for
+ } for % Rows in the mask
+} bind def
+
+% -----------------------------------------------------------------------
+
+% Procedure to generate image data
+%
+% WD and HD must be defined prior to invocation
+% { proc } ImageGen -
+%
+% The procedure is called once for each pixel
+% Local definitions are R, G, B, X and Y
+
+% Example: Generate RGB Chunky pixel data (single data source) BPC = 8
+% /WD WidthRGB def
+% /HD HeightRGB def
+% /RGBData WD HD mul 3 mul string def
+% { X Y WD mul add 3 mul RGBData
+% dup 2 index R 255 mul cvi put
+% dup 2 index 1 add G 255 mul cvi put
+% exch 2 add B 255 mul cvi put
+% } ImageGen
+
+/ImageGen {
+ gsave
+ 0 1 HD 1 sub {
+ /Y exch def
+ 0 1 WD 1 sub {
+ /X exch def
+ /D X WD 2 div sub WD div dup mul Y HD 2 div sub HD div dup mul add sqrt def
+ /D D .6 div def
+ /A X WD 2 div sub Y HD 2 div sub atan 360 div def
+ A % Hue
+ .7 D .3 sub .60 div sub % Saturation
+ dup 0.05 lt
+ { .95 D .8 sub 3 mul sub 3 mul cvi 3 div sqrt } % Level once Saturation < 0
+ { .7 D .25 sub .75 div add } % Level inside
+ ifelse
+ X WD 2 div gt Y HD 2 div sub abs 2 le and { pop 0 } if % asymmetric marker
+ sethsbcolor
+ currentrgbcolor /B exch def /G exch def /R exch def
+ dup exec
+ } for
+ } for
+ pop % discard the procedure
+ grestore
+} bind def
+
+
+% -----------------------------------------------------------------------
+%
+% Procedures for ImageMatrix creation
+/IMLRTB { [ WD 0 0 HD neg 0 HD ] } def
+/IMLRBT { [ WD 0 0 HD 0 0 ] } def
+/IMRLTB { [ WD neg 0 0 HD neg WD HD ] } def
+/IMRLBT { [ WD neg 0 0 HD WD 0 ] } def
+% -----------------------------------------------------------------------
+%
+% Procedure to make invocation of image operators more concise
+%
+% YY, SX, SY, WD and HD should be defined prior to invocation
+% X matrix source decode DoImageMask -
+%
+/DoImageMask {
+ gsave
+ /D exch def
+ /S exch def
+ /M exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ <<
+ /ImageType 1
+ /Width WM
+ /Height HM
+ /ImageMatrix M
+ /MultipleDataSources false
+ /DataSource S
+ /Decode D
+ /BitsPerComponent 1
+ >>
+ imagemask
+ grestore
+} bind def
+
+% YY, SX, SY, WD and HD should be defined prior to invocation
+% X Y BPC matrix source multi decode DoImage1 -
+%
+/DoImage1 {
+ gsave
+ CSpace setcolorspace
+ /D exch def
+ /MS exch def
+ /S exch def % May be an array of sources
+ /M exch def
+ /BPC exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ <<
+ /ImageType 1
+ /Width WD
+ /Height HD
+ /ImageMatrix M
+ /MultipleDataSources MS
+ /DataSource S
+ /BitsPerComponent BPC
+ /Decode D
+ >>
+ image
+ grestore
+} bind def
+
+
+% YY, SX, SY, WD and HD should be defined prior to invocation
+% X Y BPC matrix source multi decode MaskColor DoImage4 -
+%
+/DoImage4 {
+ gsave
+ CSpace setcolorspace
+ /MC exch def
+ /D exch def
+ /MS exch def
+ /S exch def % May be an array of sources
+ /M exch def
+ /BPC exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ <<
+ /ImageType 4
+ /Width WD
+ /Height HD
+ /ImageMatrix M
+ /MultipleDataSources MS
+ /DataSource S
+ /BitsPerComponent BPC
+ /Decode D
+ /MaskColor MC
+ >>
+ image
+ grestore
+} bind def
+
+% YY, SX, SY, W, HD (Data) WM, HM (Mask) should be defined prior to invocation
+% (IT is InterleaveType)
+% X Y BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+%
+/DoImage3 {
+ gsave
+ CSpace setcolorspace
+ /IT exch def
+ /DD exch def
+ /DM exch def
+ /MS exch def
+ /S exch def % May be an array of sources - For InterleaveType 3
+ % S[0] is the Mask DataSource
+ /M exch def
+ /BPC exch def
+ /XX 1 index def
+ YY translate SX SY scale
+ 0 setlinewidth 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto 0 0 lineto stroke
+ .5 .5 translate
+ IR rotate
+ -.5 -.5 translate
+ /DataImage
+ <<
+ /ImageType 1
+ /Width WD
+ /Height HD
+ /ImageMatrix M
+ /MultipleDataSources MS
+ /DataSource IT 3 ne { S } { S 1 get exec } ifelse
+ /BitsPerComponent BPC
+ /Decode DD
+ >>
+ def
+ /MaskImage
+ <<
+ /ImageType 1
+ /Width WM
+ /Height HM
+ /ImageMatrix % construct the mask matrix using signs from the DataImage matrix
+ /M0 M 0 get WD abs div cvi def
+ /M3 M 3 get HD abs div cvi def
+ /M4 M 4 get WD abs div cvi def
+ /M5 M 5 get HD abs div cvi def
+ [ WM M0 mul 0 0 HM M3 mul WM M4 mul HM M5 mul ]
+ IT 3 eq {
+ /DataSource S 0 get exec % DataSource only allowed for InterleaveType 3
+ } if
+ /BitsPerComponent IT 1 eq { BPC } { 1 } ifelse
+ /Decode DM
+ >>
+ def
+ <<
+ /ImageType 3
+ /DataDict DataImage
+ /MaskDict MaskImage
+ /InterleaveType IT
+ >>
+ image
+ grestore
+} bind def
+
+
+% -----------------------------------------------------------------------
+%
+/Helvetica-Bold findfont 20 scalefont /TitleFont exch def
+
+/FontSize 10 def
+/Helvetica-Narrow findfont FontSize scalefont /LegendFont exch def
+
+/blockshow { % like "show" but '\n' causes new-line
+ dup = flush %DEBUG
+ currentpoint /showY exch def /showX exch def
+ {
+ dup 10 ne
+ { 1 string dup 0 4 -1 roll put show }
+ { pop showX showY FontSize sub dup /showY exch def moveto }
+ ifelse
+ } forall
+} bind def
+
+/TX 013 def % Title left X
+/SX 036 def
+/XA 060 def
+/XB XA SX 1.5 mul add def
+/XC XA SX 3.0 mul add def
+/XD XA SX 4.5 mul add def
+/XE XA SX 6.0 mul add def
+/XF XA SX 7.5 mul add def
+/XG XA SX 9.0 mul add def
+/XH XA SX 10.5 mul add def
+/XI XA SX 12.0 mul add def
+/XJ XA SX 13.5 mul add def
+
+/BY 036 def % Bottom Title Top line
+/SY 037 def
+/YA 050 def
+/YB YA SY 1.8 mul add def
+/YC YA SY 3.6 mul add def
+/YD YA SY 5.4 mul add def
+/YE YA SY 7.2 mul add def
+/YF YA SY 9.0 mul add def
+/YG YA SY 10.8 mul add def
+/YH YA SY 12.6 mul add def
+/YI YA SY 14.4 mul add def
+/YJ YA SY 16.2 mul add def
+/YK YA SY 18.0 mul add def
+
+% -----------------------------------------------------------------------
+%
+% Utility procedures to support storing 4 and 12 bit elements in
+% strings.
+%
+% <string> <index> <value> put##bit -
+%
+% <index> will have a fractional part ( .5 ) if the element
+% starts on a 4-bit boundary.
+%
+% <value> is between 0 and 1 and is scaled 0 to 15 (4bit) or
+% 0 to 4095 (12 bit)
+
+/put4bit {
+ 15 mul cvi
+ exch dup cvi dup 3 1 roll eq 3 -1 roll exch
+ { % integer index means high nibble.
+ 16 mul put
+ }
+ { % low nibble -- combine with high nibble
+ 2 index 2 index get or put
+ }
+ ifelse
+} bind def
+
+/put12bit {
+ 1 index cvi /I exch def
+ 2 index /S exch def
+ 4095 mul cvi
+ exch dup dup cvi eq
+ { % integer index means high byte is aligned
+ cvi exch 3 copy 16 div cvi put
+ exch 1 add exch 15 and 16 mul put
+ }
+ { % low nibble -- combine with high nibble
+ cvi exch 3 copy 2 index 2 index get exch 256 div cvi or put
+ 255 and exch 1 add exch put
+ }
+ ifelse
+} bind def
+
+% -----------------------------------------------------------------------
+%
+% Procedures to use generated string data as procedure or files
+
+/WD WidthRGB def
+/HD HeightRGB def
+
+/sM WidthRGB 2 mul 1 sub string def % long enough to hold more than one mask line
+/sD WidthRGB 7 mul 1 sub string def % long enough to hold more than one 12 bit RGB line
+ % worst case is 12bit ImageType3 InterleaveType 1 == 48 bits
+
+/MaskDProc {
+ /FM MaskData dup length () /SubFileDecode filter def
+ { { FM sM readstring pop } }
+} bind def
+
+/FileTailString (12345) def % Marker string to check file data usage
+
+/AppendFileTail { % <string> AppendFileTail <string_with_tail> <original_length>
+ dup length FileTailString length add string
+ dup 0 3 index putinterval
+ dup 2 index length FileTailString putinterval
+ exch length
+} bind def
+
+/MaskDFile {
+ MaskData dup length () /SubFileDecode filter
+ /MDF 1 index def
+} bind def
+
+/RGBDProc {
+ /FD RGBData dup length () /SubFileDecode filter def
+ { { FD sD readstring pop } }
+} bind def
+
+/RGBDFile {
+ RGBData dup length () /SubFileDecode filter
+ /RGBDF 1 index def
+} bind def
+
+/sR WidthRGB 2 mul 1 sub string def % long enough to hold more than one line of 12 bit data
+/sG WidthRGB 2 mul 1 sub string def
+/sB WidthRGB 2 mul 1 sub string def
+
+/RDProc {
+ /FR RData dup length () /SubFileDecode filter def
+ { FR sR readstring pop }
+} bind def
+
+/GDProc {
+ /FG GData dup length () /SubFileDecode filter def
+ { FG sG readstring pop }
+} bind def
+
+/BDProc {
+ /FB BData dup length () /SubFileDecode filter def
+ { FB sB readstring pop }
+} bind def
+
+/RDFile {
+ RData dup length () /SubFileDecode filter
+ /RDF 1 index def
+} bind def
+
+/GDFile {
+ GData dup length () /SubFileDecode filter
+ /GDF 1 index def
+} bind def
+
+/BDFile {
+ BData dup length () /SubFileDecode filter
+ /BDF 1 index def
+} bind def
+
+% -----------------------------------------------------------------------
+%
+% Procedure to handle fileposition. Ghostscript has a private
+% operator .fileposition that works when fileposition does not
+%
+% <file> tryfilepos
+% Returns: fileposition true if successful
+% 0 false if not
+/tryfilepos {
+ /.fileposition where
+ { pop /.fileposition load } % most likely to succeed
+ { /fileposition load }
+ ifelse
+ stopped
+ { pop 0 false }
+ { true }
+ ifelse
+} bind def
+
+% -----------------------------------------------------------------------
+%
+% Procedure to provide =only operator if not present. Suggested
+% by Alex Cherepanov to use =print operator present on some Adobe
+% implementations.
+/=only where
+ { pop }
+ { /=print where { pop /=print load } { /print load } ifelse
+ /=only exch def
+ }
+ifelse
+
+% -----------------------------------------------------------------------
+%
+% Procedure to make sure that the file is at the EOF.
+% added above (string == FileTailString.
+%
+% If not, it will mark the image area with a red "F"
+%
+% <string> <title> <file> CheckFileTail - XX is the horizontal position
+% YY is the vertical position
+% SX,SY determine size of "F" if fail
+/CheckFileTail {
+ dup
+ status not dup % status false says no longer valid
+ { (Unexpected EOF: XX,YY=) print XX =only (,) print YY = false }
+ { 1 index tryfilepos not exch 5 index length ne or dup
+ { 3 index print ( fileposition = ) print
+ 2 index tryfilepos pop =only
+ ( doesn't match expected = ) print 4 index length = flush
+ }
+ if
+ }
+ ifelse
+ or
+ {
+ gsave .8 0 0 setrgbcolor
+ SX 4 div setlinewidth
+ XX YY moveto 0 SY rlineto SX 0 rlineto stroke
+ XX YY SY .5 mul add moveto SX .5 mul 0 rlineto stroke
+ grestore
+ }
+ if
+ pop pop pop
+} bind def
+
+/CSpaceName { % - CSpaceName <string>
+ CSpace dup type /arraytype eq { 0 get } if
+ 15 string cvs
+} bind def
+% -----------------------------------------------------------------------
+%
+% tests
+
+/CheckImage {
+
+ /IR 0 def
+ /CSpace /DeviceRGB def
+
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+
+ 0 0 0 setrgbcolor
+ TitleFont setfont
+ 200 760 moveto (Image Type 3 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 170 720 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+ /SX SX 2 mul def /SY SY 2 mul def
+ /YY 780 SY sub def
+ MaskGen
+ TX IMLRTB MaskData [1 0] DoImageMask
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XI 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ /SX SX 2 div def /SY SY 2 div def
+
+ showpage
+} def
+
+% -----------------------------------------------------------------------
+%
+% Type 1 and Type 4 Tests
+
+% /CSpace and /IR are defined in order to generate various pages
+/T1T4Tests { %
+
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+ 0 0 0 setrgbcolor
+
+ TitleFont setfont
+ 120 760 moveto (Image Type 1 and ImageType 4 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 170 720 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ XA BY moveto (Decode\nInverted) blockshow
+ XB BY moveto ( IMLRTB\nDS=string) blockshow
+ XC BY moveto ( IMLRBT\nDS=string) blockshow
+ XD BY moveto ( IMRLTB\nDS=string) blockshow
+ XE BY moveto ( IMRLBT\nDS=string) blockshow
+ XF BY moveto (IMLRTB\nDS=proc) blockshow
+ XG BY moveto (IMLRTB\nDS=file) blockshow
+ XH BY moveto ( Multi\nDS=string) blockshow
+ XI BY moveto ( Multi\nDS=proc) blockshow
+ XJ BY moveto ( Multi\nDS=file) blockshow
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+
+ /WM WD def
+ /HM HD def
+ /SX SX 2 mul def /SY SY 2 mul def
+ /YY 780 SY sub def
+ MaskGen
+ TX IMLRTB MaskData [1 0] DoImageMask
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XI 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ /SX SX 2 div def /SY SY 2 div def
+
+ % ----------------------------------------------------------------------
+ % Type 1 Stencil Mask Images
+
+ /YY YA def
+ TX YA SY add moveto (\nType 1\nStencil\nMask) blockshow
+
+ MaskGen
+
+ % X matrix source decode
+ XA IMLRTB MaskData [0 1] DoImageMask
+ XB IMLRTB MaskData [1 0] DoImageMask
+ XC IMLRBT MaskData [1 0] DoImageMask
+ XD IMRLTB MaskData [1 0] DoImageMask
+ XE IMRLBT MaskData [1 0] DoImageMask
+ XF IMLRTB MaskDProc [1 0] DoImageMask
+ XG IMLRTB MaskDFile [1 0] DoImageMask
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Single Data Sources, BPC==8
+
+ /YY YB def
+ TX YY SY add moveto (\nType 1\nRGB\nBPC=8) blockshow
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] DoImage1
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] DoImage1
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] DoImage1
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] DoImage1
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] DoImage1
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] DoImage1
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Multiple Data Sources, BPC==8
+
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+
+ % X BPC matrix source multi decode
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] DoImage1
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] DoImage1
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] DoImage1
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask black
+
+ /YY YE def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask=black) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 000 000 000 ] DoImage4
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask black
+
+ % X BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 000 000 000 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask white
+
+ /YY YF def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask=white) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 255 255 255 ] DoImage4
+ gsave .5 .2 .2 setrgbcolor XB YY SX 13 mul SY rectfill grestore
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask white
+
+ % X BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 255 255 255 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask gray
+
+ /YY YG def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask=gray) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 147 147 147 ] DoImage4
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask gray
+
+ % X BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 147 147 147 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==8, mask range
+
+ /YY YH def
+ TX YY SY add moveto (\nType 4\nBPC=8\nmask range) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 8 IMLRTB RGBData false [1 0 1 0 1 0] [ 020 200 020 200 020 200 ] DoImage4
+ XB 8 IMLRTB RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XC 8 IMLRBT RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XD 8 IMRLTB RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XE 8 IMRLBT RGBData false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XF 8 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XG 8 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==8, mask range
+
+ % X Y SX SY BPC matrix source multi decode MaskColor
+ XH 8 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XI 8 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ XJ 8 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 020 200 020 200 020 200 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Single Data Sources, BPC==12
+
+ /YY YC def
+ TX YY SY add moveto (\nType 1\nRGB\nBPC=12) blockshow
+
+ /RGBData WD 36 mul 7 add 8 div cvi HD mul string def
+ {
+ X 36 mul 8 div Y WD 36 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put12bit
+ RGBData 1 index 1.5 add G put12bit
+ RGBData exch 3 add B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XA 12 IMLRTB RGBData false [1 0 1 0 1 0] DoImage1
+ XB 12 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ XC 12 IMLRBT RGBData false [0 1 0 1 0 1] DoImage1
+ XD 12 IMRLTB RGBData false [0 1 0 1 0 1] DoImage1
+ XE 12 IMRLBT RGBData false [0 1 0 1 0 1] DoImage1
+ XF 12 IMLRTB RGBDProc false [0 1 0 1 0 1] DoImage1
+ XG 12 IMLRTB RGBDFile false [0 1 0 1 0 1] DoImage1
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Multiple Data Sources, BPC==12
+
+ WD 3 mul 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 3 mul 2 div Y WD 3 mul 1 add 2 div cvi mul add
+ RData 1 index R put12bit
+ GData 1 index G put12bit
+ BData exch B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XH 12 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] DoImage1
+ XI 12 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] DoImage1
+ XJ 12 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] DoImage1
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==12, mask range
+
+ /YY YI def
+ TX YY SY add moveto (\nType 4\nBPC=12\nmask range) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 12 IMLRTB RGBData false [1 0 1 0 1 0] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XB 12 IMLRTB RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XC 12 IMLRBT RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XD 12 IMRLTB RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XE 12 IMRLBT RGBData false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XF 12 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XG 12 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==12, mask range
+
+ % X BPC matrix source multi decode MaskColor
+ XH 12 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XI 12 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ XJ 12 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 300 3000 300 3000 300 3000 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Single Data Sources, BPC==4
+
+ /YY YD def
+ TX YY SY add moveto (\nType 1\nRGB\nBPC=4) blockshow
+
+ /RGBData WD 12 mul 7 add 8 div cvi HD mul string def
+ {
+ X 12 mul 8 div Y WD 12 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put4bit
+ RGBData 1 index 0.5 add G put4bit
+ RGBData exch 1.0 add B put4bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XA 4 IMLRTB RGBData false [1 0 1 0 1 0] DoImage1
+ XB 4 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ XC 4 IMLRBT RGBData false [0 1 0 1 0 1] DoImage1
+ XD 4 IMRLTB RGBData false [0 1 0 1 0 1] DoImage1
+ XE 4 IMRLBT RGBData false [0 1 0 1 0 1] DoImage1
+ XF 4 IMLRTB RGBDProc false [0 1 0 1 0 1] DoImage1
+ XG 4 IMLRTB RGBDFile false [0 1 0 1 0 1] DoImage1
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 1 RGB Multiple Data Sources, BPC==4
+
+ WD 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 2 div Y WD 1 add 2 div cvi mul add
+ RData 1 index R put4bit
+ GData 1 index G put4bit
+ BData exch B put4bit
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XH 4 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] DoImage1
+ XI 4 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] DoImage1
+ XJ 4 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] DoImage1
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Single Data Sources, BPC==4, mask range
+
+ /YY YJ def
+ TX YY SY add moveto (\nType 4\nBPC=4\nmask range) blockshow
+
+ % X BPC matrix source multi decode MaskColor
+ XA 4 IMLRTB RGBData false [1 0 1 0 1 0] [ 1 10 1 10 1 10 ] DoImage4
+ XB 4 IMLRTB RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XC 4 IMLRBT RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XD 4 IMRLTB RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XE 4 IMRLBT RGBData false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XF 4 IMLRTB RGBDProc false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XG 4 IMLRTB RGBDFile false [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ % ----------------------------------------------------------------------
+ % Type 4 RGB Multiple Data Sources, BPC==4, mask range
+
+ % X BPC matrix source multi decode MaskColor
+ XH 4 IMLRTB [ RData GData BData ] true [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XI 4 IMLRTB [ RDProc GDProc BDProc ] true [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ XJ 4 IMLRTB [ RDFile GDFile BDFile ] true [0 1 0 1 0 1] [ 1 10 1 10 1 10 ] DoImage4
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ showpage
+
+} bind def % T1T4Tests
+
+% -----------------------------------------------------------------------
+%
+% Type 3 Tests
+
+/T3Tests {
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+
+ 0 0 0 setrgbcolor
+ TitleFont setfont
+ 200 760 moveto (Image Type 3 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 170 720 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+
+ /WM WD def
+ /HM HD def
+ /SX SX 2 mul def /SY SY 2 mul def
+ /YY 780 SY sub def
+ MaskGen
+ XA IMLRTB MaskData [1 0] DoImageMask
+
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi decode
+ XH 8 IMLRTB RGBData false [0 1 0 1 0 1] DoImage1
+ /SX SX 2 div def /SY SY 2 div def
+
+% ----------------------------------------------------------------------
+% InterleaveType 1, BPC==8, WM=WD, HM=HD
+% IT 1 is what GS calls "chunky pixel"
+ /YY YA def
+ TX YY SY add moveto (\nIntType 1\nBPC=8) blockshow
+
+ % Generate the MaskData first
+ 8 MaskGenBPC
+
+ % Generate the Data Image (uses the MaskData)
+ /RGBData WD HD mul 4 mul string def
+ { X Y WD mul add 4 mul % 4 bytes Mask,Red,Green,Blue
+ RGBData
+ dup 2 index MaskData X Y WB mul add get put
+ dup 2 index 1 add R 255 mul cvi put
+ dup 2 index 2 add G 255 mul cvi put
+ exch 3 add B 255 mul cvi put
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 1 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 1 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 1 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 1, BPC==12, WM=WD, HM=HD
+% IT 1 is what GS calls "chunky pixel"
+ /YY YB def
+ TX YY SY add moveto (\nIntType 1\nBPC=12) blockshow
+
+ % Generate the MaskData first
+ 12 MaskGenBPC
+
+ % Generate the Data Image (uses the MaskData)
+ /RGBData WD HD mul 6 mul string def
+ { X Y WD mul add 6 mul % 6 bytes Mask,Red,Green,Blue
+ RGBData
+ dup 2 index
+ MaskData X 1.5 mul .5 add cvi
+ Y WB mul add get % get the aligned mask byte (hi or lo)
+ 0 eq { 0 } { 1 } ifelse
+ put12bit
+ dup 2 index 1.5 add R put12bit
+ dup 2 index 3.0 add G put12bit
+ exch 4.5 add B put12bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 1 DoImage3
+ XB 12 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 1 DoImage3
+ XC 12 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 1 DoImage3
+ XD 12 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XE 12 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XF 12 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XG 12 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XH 12 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XI 12 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 1, BPC==4, WM=WD, HM=HD
+% IT 1 is what GS calls "chunky pixel"
+ /YY YC def
+ TX YY SY add moveto (\nIntType 1\nBPC=4) blockshow
+
+ % Generate the MaskData first
+ 4 MaskGenBPC
+
+ % Generate the Data Image (uses the MaskData)
+ /RGBData WD HD mul 2 mul string def
+ { X Y WD mul add 2 mul % 2 bytes Mask,Red,Green,Blue
+ RGBData
+ dup 2 index MaskData X 2 div cvi Y WB mul add get
+ X 1 and 0 eq { 128 div cvi } { 1 and } ifelse
+ put4bit
+ dup 2 index 0.5 add R put4bit
+ dup 2 index 1.0 add G put4bit
+ exch 1.5 add B put4bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 1 DoImage3
+ XB 4 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 1 DoImage3
+ XC 4 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 1 DoImage3
+ XD 4 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XE 4 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XF 4 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XG 4 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XH 4 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ XI 4 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 1 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==8, WM=WD, HM=HD
+% IT 2 is line interleave -- Mask line follwoed by Data line
+% RGB Image Data must be chunky (MultipleDatasources==false).
+ /YY YD def
+ TX YY SY add moveto (\nIntType 2\nBPC=8) blockshow
+
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 3 mul WB add cvi def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 3 mul Y BPL mul add WB add % 3 bytes Red,Green,Blue + Mask Bytes
+ X 0 eq {
+ RGBData 1 index WB sub
+ MaskData Y WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==12, WM=WD, HM=HD
+ /YY YE def
+ TX YY SY add moveto (\nIntType 2\nBPC=12) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 36 mul 7 add 8 div cvi WB add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 36 mul 8 div Y BPL mul add WB add
+ X 0 eq {
+ RGBData 1 index WB sub cvi
+ MaskData Y WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put12bit
+ dup 2 index 1.5 add G put12bit
+ exch 3.0 add B put12bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 12 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 12 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 12 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 12 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 12 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 12 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 12 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 12 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==4, WM=WD, HM=HD
+ /YY YF def
+ TX YY SY add moveto (\nIntType 2\nBPC=4) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 12 mul 7 add 8 div cvi WB add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 12 mul 8 div Y BPL mul add WB add
+ X 0 eq {
+ RGBData 1 index WB sub cvi
+ MaskData Y WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put4bit
+ dup 2 index 0.5 add G put4bit
+ exch 1.0 add B put4bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 4 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 4 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 4 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 4 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 4 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 4 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 4 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 4 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==8, WM=.6*WD, HM=HD/2
+% IT 2 is line interleave -- Mask line follwoed by Data line
+% RGB Image Data must be chunky (MultipleDatasources==false).
+ /YY YG def
+ TX YY SY add moveto (\nIntType 2\nBPC=8\nWM=.6*WD\nHM=HD/2) blockshow
+
+ % Generate the MaskData first
+ /WM WD .6 mul cvi def
+ /HM HD 2 div cvi def
+ /saveHD HD def
+ /HD HM 2 mul def % make HD even for this exercise
+ MaskGen
+
+ % Generate the Data Image (uses the MaskData)
+ /BPL WD 3 mul def % BytesPerLine RGB Data
+ /RGBData BPL HD mul WB HM mul add string def
+ { X 3 mul Y BPL mul add Y 2 div cvi 1 add WB mul add % 3 bytes Red,Green,Blue + Mask
+ X 0 eq Y 1 and 0 eq and { % Do one row of Mask every other image row
+ RGBData 1 index WB sub
+ MaskData Y 2 div cvi WB mul WB getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ }
+ ImageGen
+
+%DEBUG /xx (xx) (w) file def
+%DEBUG 0 1 HM 1 sub { MaskData exch WB mul WB getinterval xx exch writehexstring xx (\n) writestring } for
+%DEBUG xx (----------------------------------------------------------------\n) writestring
+%DEBUG 0 2 HD 1 sub {
+%DEBUG RGBData 1 index BPL mul 2 index 2 div cvi WB mul add
+%DEBUG WB getinterval xx exch writehexstring xx (\n) writestring
+%DEBUG RGBData 1 index BPL mul 2 index 2 div cvi 1 add WB mul add
+%DEBUG BPL getinterval xx exch writehexstring xx (\n) writestring
+%DEBUG RGBData 1 index 1 add BPL mul 2 index 2 div cvi 1 add WB mul add
+%DEBUG BPL getinterval xx exch writehexstring xx (\n) writestring
+%DEBUG pop
+%DEBUG } for
+%DEBUG xx closefile
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ /HD saveHD def % put odd HD back
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==8, WM=1.3*WD, HM=2*HD
+% IT 2 is line interleave -- Mask line follwoed by Data line
+% RGB Image Data must be chunky (MultipleDatasources==false).
+ /YY YH def
+ TX YY SY add moveto (\nIntType 2\nBPC=8\nWM=1.3*WD\nHM=2*HD) blockshow
+
+ % Generate the MaskData first
+ /WM WD 1.3 mul cvi def
+ /HM HD 2 mul def
+ MaskGen
+
+ % Generate the Data Image (uses the MaskData)
+ /HR HM HD div cvi def
+ /BPL WD 3 mul WB HR mul add cvi def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 3 mul Y BPL mul add WB HR mul add % 3 bytes Red,Green,Blue + Mask Bytes
+ X 0 eq { % Do HM/HD rows of Mask
+ RGBData 1 index WB HR mul sub
+ MaskData Y WB HR mul mul WB HR mul getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 8 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 8 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 8 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 8 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 8 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 8 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 8 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 8 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==12, WM=1.3*WD, HM=2*HD
+ /YY YI def
+ TX YY SY add moveto (\nIntType 2\nBPC=12\nWM=1.3*WD\nHM=2*HD) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /HR HM HD div cvi def
+ /BPL WD 36 mul 7 add 8 div cvi WB HR mul add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 36 mul 8 div Y BPL mul add WB HR mul add
+ X 0 eq {
+ RGBData 1 index WB HR mul sub cvi
+ MaskData Y WB HR mul mul WB HR mul getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put12bit
+ dup 2 index 1.5 add G put12bit
+ exch 3.0 add B put12bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 12 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 12 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 12 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 12 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 12 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 12 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 12 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 12 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 2, BPC==4, WM=1.3*WD, HM=2*HD
+ /YY YJ def
+ TX YY SY add moveto (\nIntType 2\nBPC=4\nWM=1.3*WD\nHM=2*HD) blockshow
+
+ % Generate the Data Image (uses the MaskData)
+ /HR HM HD div cvi def
+ /BPL WD 12 mul 7 add 8 div cvi WB HR mul add def % BytesPerLine
+ /RGBData BPL HD mul string def
+ { X 12 mul 8 div Y BPL mul add WB HR mul add
+ X 0 eq {
+ RGBData 1 index WB HR mul sub cvi
+ MaskData Y WB HR mul mul WB HR mul getinterval
+ putinterval
+ } if
+ RGBData
+ dup 2 index R put4bit
+ dup 2 index 0.5 add G put4bit
+ exch 1.0 add B put4bit
+ }
+ ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB RGBData false [0 1] [1 0 1 0 1 0] 2 DoImage3
+ XB 4 IMLRTB RGBData false [1 0] [1 0 1 0 1 0] 2 DoImage3
+ XC 4 IMLRTB RGBData false [0 1] [0 1 0 1 0 1] 2 DoImage3
+ XD 4 IMLRTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XE 4 IMLRBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XF 4 IMRLTB RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XG 4 IMRLBT RGBData false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XH 4 IMLRTB RGBDProc false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ XI 4 IMLRTB RGBDFile false [1 0] [0 1 0 1 0 1] 2 DoImage3
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+ showpage
+% ----------------------------------------------------------------------
+
+ % Use an unusual (unpleasant?) underlying color
+ .6 .95 .4 setrgbcolor clippath fill
+
+ 0 0 0 setrgbcolor
+ TitleFont setfont
+ 200 760 moveto (Image Type 3 Tests) show
+ 200 740 moveto (Rotation Angle = ) show IR 3 string cvs show
+ 200 720 moveto (InterleaveType 3) show
+ 170 700 moveto (Colorspace = ) show CSpaceName show
+ LegendFont setfont
+
+ .4 .1 .7 setrgbcolor % contrasting color for stencil masking
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=WD, HM=HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data chunky (MultipleDatasources==false).
+ /YY YA def
+ TX YY SY add moveto (BPC=8\nMulti\nfalse) blockshow
+
+ % Generate the MaskData first
+ /WM WD def
+ /HM HD def
+ MaskGen
+
+ % Generate the Data Image
+ /RGBData WD HD mul 3 mul string def
+ { X Y WD mul add 3 mul RGBData
+ dup 2 index R 255 mul cvi put
+ dup 2 index 1 add G 255 mul cvi put
+ exch 2 add B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData RGBData ] false [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData RGBData ] false [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData RGBData ] false [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc RGBDProc ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile RGBDFile ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==12, WM=WD, HM=HD
+ /YY YB def
+ TX YY SY add moveto (BPC=12\nMulti\nfalse) blockshow
+
+ /RGBData WD 36 mul 7 add 8 div cvi HD mul string def
+ {
+ X 36 mul 8 div Y WD 36 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put12bit
+ RGBData 1 index 1.5 add G put12bit
+ RGBData exch 3 add B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB [ MaskData RGBData ] false [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 12 IMLRTB [ MaskData RGBData ] false [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 12 IMLRTB [ MaskData RGBData ] false [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 12 IMLRTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 12 IMLRBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 12 IMRLTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 12 IMRLBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 12 IMLRTB [ MaskDProc RGBDProc ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 12 IMLRTB [ MaskDFile RGBDFile ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==4, WM=WD, HM=HD
+ /YY YC def
+ TX YY SY add moveto (BPC=4\nMulti\nfalse) blockshow
+
+ /RGBData WD 12 mul 7 add 8 div cvi HD mul string def
+ {
+ X 12 mul 8 div Y WD 12 mul 7 add 8 div cvi mul add
+ RGBData 1 index R put4bit
+ RGBData 1 index 0.5 add G put4bit
+ RGBData exch 1.0 add B put4bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB [ MaskData RGBData ] false [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 4 IMLRTB [ MaskData RGBData ] false [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 4 IMLRTB [ MaskData RGBData ] false [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 4 IMLRTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 4 IMLRBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 4 IMRLTB [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 4 IMRLBT [ MaskData RGBData ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 4 IMLRTB [ MaskDProc RGBDProc ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 4 IMLRTB [ MaskDFile RGBDFile ] false [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RGBData (RGB) RGBDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=WD, HM=HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YA def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue) blockshow
+
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=WD, HM=HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YD def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue) blockshow
+
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==12, WM=WD, HM=HD
+ /YY YE def
+ TX YY SY add moveto (BPC=12\nMulti\ntrue) blockshow
+
+ WD 3 mul 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 3 mul 2 div Y WD 3 mul 1 add 2 div cvi mul add
+ RData 1 index R put12bit
+ GData 1 index G put12bit
+ BData exch B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 12 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 12 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 12 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 12 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 12 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==4, WM=WD, HM=HD
+ /YY YF def
+ TX YY SY add moveto (BPC=4\nMulti\ntrue) blockshow
+
+ WD 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 2 div Y WD 1 add 2 div cvi mul add
+ RData 1 index R put4bit
+ GData 1 index G put4bit
+ BData exch B put4bit
+ } ImageGen
+
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 4 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 4 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 4 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 4 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 4 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=.9*WD, HM=1.1*HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YG def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue\nWM=.9*WD\nHM=1.1*HD) blockshow
+
+ /WM 0.9 WD mul cvi def
+ /HM 1.1 HD mul cvi def
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==12, WM=WD, HM=HD
+ /YY YI def
+ TX YY SY add moveto (BPC=12\nMulti\ntrue\nWM=.9*WD\nHM=1.1*HD) blockshow
+
+ WD 3 mul 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 3 mul 2 div Y WD 3 mul 1 add 2 div cvi mul add
+ RData 1 index R put12bit
+ GData 1 index G put12bit
+ BData exch B put12bit
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 12 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 12 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 12 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 12 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 12 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 12 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 12 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==4, WM=WD, HM=HD
+ /YY YJ def
+ TX YY SY add moveto (BPC=4\nMulti\ntrue\nWM=.9*WD\nHM=1.1*HD) blockshow
+
+ WD 1 add 2 div cvi HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ {
+ X 2 div Y WD 1 add 2 div cvi mul add
+ RData 1 index R put4bit
+ GData 1 index G put4bit
+ BData exch B put4bit
+ } ImageGen
+
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 4 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 4 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 4 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 4 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 4 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 4 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 4 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+% ----------------------------------------------------------------------
+% InterleaveType 3, BPC==8, WM=1.1*WD, HM=.9*HD
+% IT 3 is line interleave -- Mask and Data in separate sources
+% RGB Image Data seprate (MultipleDatasources==true).
+ /YY YH def
+ TX YY SY add moveto (BPC=8\nMulti\ntrue\nWM=1.1*WD\nHM=.9*HD) blockshow
+
+ /WM 1.1 WD mul cvi def
+ /HM 0.9 HD mul cvi def
+ % Generate the MaskData first
+ MaskGen
+
+ % Generate the Data Image
+ WD HD mul /RData 1 index string def
+ /GData 1 index string def
+ /BData exch string def
+ { X Y WD mul add
+ RData 1 index R 255 mul cvi put
+ GData 1 index G 255 mul cvi put
+ BData exch B 255 mul cvi put
+ } ImageGen
+
+ % X BPC matrix source multi MaskDecode DataDecode IT DoImage3 -
+ XA 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [1 0 1 0 1 0] 3 DoImage3
+ XB 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [1 0 1 0 1 0] 3 DoImage3
+ XC 8 IMLRTB [ MaskData [RData GData BData] ] true [0 1] [0 1 0 1 0 1] 3 DoImage3
+ XD 8 IMLRTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XE 8 IMLRBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XF 8 IMRLTB [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XG 8 IMRLBT [ MaskData [RData GData BData] ] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XH 8 IMLRTB [ MaskDProc [RDProc GDProc BDProc]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ XI 8 IMLRTB [ MaskDFile [RDFile GDFile BDFile]] true [1 0] [0 1 0 1 0 1] 3 DoImage3
+ MaskData (Mask) MDF CheckFileTail % Check that the correct amount of data was consumed
+ RData (Red) RDF CheckFileTail % Check that the correct amount of data was consumed
+ GData (Grn) GDF CheckFileTail % Check that the correct amount of data was consumed
+ BData (Blu) BDF CheckFileTail % Check that the correct amount of data was consumed
+
+ showpage
+} bind def % T3Tests
+
+
+% ----------------------------------------------------------------------
+% Do the various rotations
+%
+/CSpace /DeviceRGB def
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T1T4Tests } forall
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T3Tests } forall
+
+/CSpace [ /DeviceN [/Blue /Red /Green] /DeviceRGB { } ] def
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T1T4Tests } forall
+
+[ 0 10 -10 45 90 180 270 ]
+pop [ 0 ] % delete this line to enable tests
+{ /IR exch def T3Tests } forall
diff --git a/Master/tlpkg/tlgs/lib/impath.ps b/Master/tlpkg/tlgs/lib/impath.ps
new file mode 100644
index 00000000000..07aa3128054
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/impath.ps
@@ -0,0 +1,179 @@
+% Copyright (C) 1992, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: impath.ps 6300 2005-12-28 19:56:24Z giles $
+% impath.ps
+% Reverse-rasterize a bitmap to produce a Type 1 outline.
+% (This was formerly a Ghostscript operator implemented in C.)
+
+% <image> <width> <height> <wx> <wy> <ox> <oy> <string>
+% type1imagepath <substring>
+% Converts an image (bitmap) description of a character into
+% a scalable description in Adobe Type 1 format. The
+% current transformation matrix should be the same as the
+% FontMatrix of the font in which this character will be
+% used: this establishes the scaling relationship between
+% image pixels (the image is assumed to be 1 unit high in
+% user space) and the character coordinate system used in
+% the scalable description. wx and wy are the character
+% width, and ox and oy are the character origin relative
+% to the lower left corner of the bitmap, in *pixels*.
+% The image is assumed to be stored in left-to-right,
+% top-to-bottom order. Note that this is not consistent
+% with the `image' operator's interpretation of the CTM.
+% All coordinates in the scalable description are rounded to
+% integers, so the coefficients in the FontMatrix should
+% be on the order of 1/N for some value of N that is
+% either a multiple of the height/width or is large
+% compared to the width and height. (There is a
+% convention, which some PostScript programs rely on, that
+% N=1000.)
+% Note that the encoded description has *not* been subjected
+% to CharString encryption, which is necessary before the
+% description can be given to type1addpath: to do this,
+% follow the type1imagepath with
+% 4330 exch dup .type1encrypt exch pop
+% If the description is too complex to fit into the supplied
+% string, a limitcheck error results. A good rule of
+% thumb is that the size of the string should be about 6
+% times the number of 1-bits in the image that are not
+% completely surrounded by other 1-bits.
+
+% Import the Type 1 opcodes.
+(type1ops.ps) runlibfile
+
+100 dict
+dup /type1imagepath_dict exch def
+begin
+
+/rc { round cvi } bind def
+/moving [/rmoveto /hmoveto /vmoveto] def
+/drawing [/rlineto /hlineto /vlineto] def
+
+% Convert the current path to a Type 1 token array.
+/putxy % x y ops -> cs_elements
+ { 3 -1 roll dup x sub rc exch /x exch def
+ 3 -1 roll dup y sub rc exch /y exch def
+ % stack: ops dx dy
+ dup 0 eq
+ { % dy = 0, use hmoveto/lineto
+ pop exch 1 get
+ }
+ { 1 index 0 eq
+ { % dx = 0, use vmoveto/lineto
+ exch pop exch 2 get
+ }
+ { % use rmoveto/rlineto
+ 3 -1 roll 0 get
+ }
+ ifelse
+ }
+ ifelse
+ } bind def
+/pathtotype1 % -> charstack
+ { 3 dict begin /x 0 def /y 0 def
+ mark
+ { moving putxy
+ }
+ { drawing putxy
+ }
+ { % Convert curve to relative form
+ x y 3
+ { exch neg 7 index add rc
+ exch neg 6 index add rc
+ 8 -2 roll
+ }
+ repeat /y exch def /x exch def
+ 1 index 0 eq 5 index 0 eq and % dy1=dx3=0, hv
+ { 5 -1 roll pop exch pop /hvcurveto
+ }
+ { dup 0 eq 6 index 0 eq and % dx1=dy3=0, vh
+ { 6 -1 roll pop pop /vhcurveto
+ }
+ { /rrcurveto % none of the above
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { /closepath
+ }
+ pathforall end
+ } bind def
+
+end % type1imagepath_dict
+
+% The main program
+/type1imagepath % image width height wx wy ox oy string ->
+ % substring
+ { type1imagepath_dict begin
+ /tsave save def
+ /ostring exch def
+ /oy exch def /ox exch def
+ /wy exch def /wx exch def
+ /height exch def /width exch def
+ /data exch def
+
+ /ofilter ostring /NullEncode filter def
+ /raster width 7 add 8 idiv def
+
+% Construct the coordinate transformation.
+ height dup scale
+ matrix currentmatrix matrix invertmatrix setmatrix
+
+% Determine the left side bearing.
+ /lsbx width
+ 0 1 width 1 sub
+ { dup dup 8 idiv 0 exch
+ raster raster height mul 1 sub
+ { data exch get or }
+ for exch 8 mod bitshift 128 and 0 ne
+ { exch pop exit }
+ if pop
+ }
+ for def
+
+% Compute and encode the origin, width, and side bearing.
+ mark
+ ox oy dtransform
+ rc /opty exch def rc /optx exch def
+ wx wy dtransform
+ rc /iwy exch def rc /iwx exch def
+ lsbx ox sub 0 dtransform
+ rc /ilsby exch def rc /ilsbx exch def
+ ilsbx
+ iwy 0 ne ilsby 0 ne or
+ { ilsby iwx iwy /sbw }
+ { iwx /hsbw }
+ ifelse
+ ofilter charstack_write
+
+% Flip over the Y axis, because the image is stored top-to-bottom.
+ [1 0 0 -1 0 height] concat
+% Account for the character origin.
+ lsbx oy translate
+% Trace the outline.
+ newpath
+ width height data .imagepath
+ gsave matrix setmatrix pathtotype1 grestore
+ ofilter charstack_write
+% Terminate the output
+ mark /endchar ofilter charstack_write
+
+ ofilter .fileposition ofilter closefile % flush buffers
+ ostring 0 3 -1 roll getinterval
+ tsave restore
+ end
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/jispaper.ps b/Master/tlpkg/tlgs/lib/jispaper.ps
new file mode 100644
index 00000000000..252cfb8f1da
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/jispaper.ps
@@ -0,0 +1,27 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: jispaper.ps 6300 2005-12-28 19:56:24Z giles $
+% Select JIS B paper sizes for b0...b6.
+
+userdict begin
+ /b0 /jisb0 load def
+ /b1 /jisb1 load def
+ /b2 /jisb2 load def
+ /b3 /jisb3 load def
+ /b4 /jisb4 load def
+ /b5 /jisb5 load def
+ /b6 /jisb6 load def
+end
diff --git a/Master/tlpkg/tlgs/lib/jobseparator.ps b/Master/tlpkg/tlgs/lib/jobseparator.ps
new file mode 100644
index 00000000000..1d1d008937f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/jobseparator.ps
@@ -0,0 +1,4 @@
+% Execute the "real" system version of the ^D to separate jobs
+% when -dJOBDSERVER is being used.
+% $Id: jobseparator.ps 8022 2007-06-05 22:23:38Z giles $
+<04> cvn .systemvar exec
diff --git a/Master/tlpkg/tlgs/lib/landscap.ps b/Master/tlpkg/tlgs/lib/landscap.ps
new file mode 100644
index 00000000000..3dc9d9a0777
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/landscap.ps
@@ -0,0 +1,31 @@
+%!
+% landscap.ps
+%
+% This file can be prepended to most PostScript pages to force
+% rotation to "landscape" mode.
+%
+% There are (at least) four possible ways to reasonably position a
+% page after rotation. Any of the four old corners (llx,lly e.g.)
+% can be moved to match the corresonding new corner.
+% By uncommmenting the appropriate line below (i.e., remove the
+% leading '%'), any such positioning can be chosen for positive or
+% negative rotation. The comments at the end of each "rotate" line
+% indicate the ORIGINAL corner to be aligned. For example, as given
+% below, the lower left hand corner is aligned. When viewed, this
+% corner will have moved to the urx,lly corner.
+%
+% originally by James E. Burns, 3/8/93, burns@nova.bellcore.com
+% $Id: landscap.ps 6300 2005-12-28 19:56:24Z giles $
+%
+gsave clippath pathbbox grestore
+4 dict begin
+/ury exch def /urx exch def /lly exch def /llx exch def
+%90 rotate llx neg ury neg translate % llx,ury
+90 rotate llx neg llx urx sub lly sub translate % llx,lly
+%90 rotate ury lly sub urx sub ury neg translate % urx,ury
+%90 rotate ury lly sub urx sub llx urx sub lly sub translate % urx,lly
+%-90 rotate urx neg lly neg translate % urx,lly
+%-90 rotate urx neg urx llx sub ury sub translate % urx,ury
+%-90 rotate llx lly add ury sub urx llx sub ury sub translate % llx,ury
+%-90 rotate llx lly add ury sub lly neg translate % llx,lly
+end
diff --git a/Master/tlpkg/tlgs/lib/level1.ps b/Master/tlpkg/tlgs/lib/level1.ps
new file mode 100644
index 00000000000..75689d3680d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/level1.ps
@@ -0,0 +1,3 @@
+%!
+% $Id: level1.ps 6300 2005-12-28 19:56:24Z giles $
+/.setlanguagelevel where { pop 1 .setlanguagelevel } if
diff --git a/Master/tlpkg/tlgs/lib/lines.ps b/Master/tlpkg/tlgs/lib/lines.ps
new file mode 100644
index 00000000000..ebaa3e44450
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/lines.ps
@@ -0,0 +1,165 @@
+%!
+% Copyright (C) 1989, 1990, 1992, 1994, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: lines.ps 6300 2005-12-28 19:56:24Z giles $
+% Test line rendering (stroke).
+
+% Exercise the miter limit. The left column of lines should bevel at
+% 90 degrees, the right column at 60 degrees.
+
+gsave
+1.8 setlinewidth
+0 setgray
+15 15 scale
+-5 5 translate
+[1.415 2.0]
+ { setmiterlimit 12 0 translate 0 0 moveto
+ 10 30 360
+ { gsave 5 0 rlineto rotate 2.5 0 rlineto
+ gsave 0 setlinewidth 1 0 0 setrgbcolor stroke grestore
+ strokepath 0 setlinewidth stroke
+ grestore
+ 0 4 rmoveto
+ } for
+ } forall
+
+showpage
+grestore
+
+% Exercise all the combinations of cap and join styles
+% for one-line, two-line, and closed paths.
+
+gsave
+
+/drawlines {
+gsave
+2.0 setmiterlimit
+2.0 setlinewidth
+6 6 scale
+5 20 translate
+{0 1 2} % line cap
+ { setlinecap gsave
+ {0 1 2} % line join
+ { setlinejoin gsave
+ { {currentpoint lineto}
+ {3 7 lineto}
+ {3 7 lineto 5 1 lineto}
+ {3 7 lineto 6 3 lineto closepath}
+ }
+ { gsave 0 0 moveto exec
+ gsave stroke grestore
+ 0.5 setlinewidth 1 0 0 setrgbcolor stroke
+ grestore 8 0 translate
+ } forall
+ grestore 35 0 translate
+ } forall
+ grestore 0 20 translate
+ } forall
+grestore
+} def
+/xflip
+ { 8.5 72 mul 0 translate -1 1 scale
+ } def
+/rot90
+ { 90 rotate 0 -9.75 72 mul translate
+ } def
+/rot180
+ { rot90 rot90
+ } def
+/rot270
+ { rot180 rot90
+ } def
+
+drawlines showpage
+gsave xflip drawlines grestore showpage
+gsave rot90 drawlines grestore showpage
+gsave rot90 xflip drawlines grestore showpage
+gsave drawlines rot180 showpage
+gsave rot180 xflip drawlines grestore showpage
+gsave rot270 drawlines grestore showpage
+gsave rot270 xflip drawlines grestore showpage
+grestore
+
+% Here are some boundary conditions, contributed by Mark Rawling.
+
+gsave
+1 setlinecap
+2.6 setmiterlimit
+3.0 setlinewidth
+
+5 5 scale
+10 20 translate
+
+% [ 0.5 sqrt dup dup dup neg exch 0 0 ] concat % 45 rotate
+
+{0 1 2} % line join
+{
+ setlinejoin gsave
+ 0 0 moveto 0 10 lineto 10 0 lineto gsave stroke grestore
+ 15 0 translate
+ 0 0 moveto 0 10 lineto 10 20 lineto gsave stroke grestore
+ 15 0 translate
+ 10 0 moveto 10 10 lineto 0 20 lineto gsave stroke grestore
+ 15 0 translate
+ 10 0 moveto 10 10 lineto 0 0 lineto gsave stroke grestore
+ grestore
+ gsave
+ 0 20 translate
+ 0 20 moveto 0 10 lineto 10 20 lineto gsave stroke grestore
+ 15 0 translate
+ 0 20 moveto 0 10 lineto 10 0 lineto gsave stroke grestore
+ 15 0 translate
+ 10 20 moveto 10 10 lineto 0 0 lineto gsave stroke grestore
+ 15 0 translate
+ 10 20 moveto 10 10 lineto 0 20 lineto gsave stroke grestore
+ grestore 60 0 translate
+} forall
+
+showpage
+grestore
+
+% Test narrow lines at a variety of angles.
+
+gsave
+
+/rad 120 def
+/ray { gsave rotate 0 0 moveto rad 0 rlineto stroke grestore } def
+/star
+ { newpath gsave
+ gsave 0.5 setgray 0 0 rad 0 360 arc stroke grestore
+ 0 90 359
+ { rotate
+ 0 3 14 { ray } for
+ 15 15 89 { ray } for
+ } for
+ grestore
+ } def
+
+0 setgray
+150 150 translate
+[ [ 0 0.5 1 ] [ 1.5 2 2.5 ] [ 3 3.5 4 ] ]
+ { gsave
+ { setlinewidth star
+ 250 0 translate
+ } forall
+ grestore 0 250 translate
+ } forall
+
+grestore showpage
+
+% End
+
+quit
diff --git a/Master/tlpkg/tlgs/lib/markhint.ps b/Master/tlpkg/tlgs/lib/markhint.ps
new file mode 100644
index 00000000000..5143b8643fc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/markhint.ps
@@ -0,0 +1,130 @@
+% Copyright (C) 1994, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: markhint.ps 6300 2005-12-28 19:56:24Z giles $
+% markhint.ps
+% Draw the hints for a Type 1 font.
+
+(type1ops.ps) runlibfile
+
+/mhsetup % <matrix> <print> mhsetup -
+ { /mhprint exch def
+ /mhmx exch def
+ /mhdash 0 9 gsave initmatrix dtransform grestore idtransform add abs def
+ gsave
+ clippath pathbbox
+ 2 index sub /bbh exch def
+ 2 index sub /bbw exch def
+ /bby exch def
+ /bbx exch def
+ grestore
+ } def
+
+/markfonthints % <matrix> <print> markfonthints -
+ { mhsetup
+ } def
+
+/hmark % <y> hmark -
+ { bbx exch moveto bbw 0 rlineto stroke
+ } def
+/hsmark % <y0> <dy> hsmark -
+ { 1 index add exch gsave
+ [mhdash] 0 setdash 0 exch mhmx transform exch pop hmark
+ [mhdash 2 div dup 2 mul] 0 setdash 0 exch mhmx transform exch pop hmark
+ grestore
+ } def
+/vmark % <x> vmark -
+ { bby moveto 0 bbh rlineto stroke
+ } def
+/vsmark % <x0> <dx> vsmark -
+ { 1 index add exch gsave
+ [mhdash] mhdash setdash 0 mhmx transform pop vmark
+ [mhdash 2 div dup 2 mul] 0 setdash 0 mhmx transform pop vmark
+ grestore
+ } def
+/pmark % <x> <y> pmark -
+ { newpath 0 4.5 gsave initmatrix dtransform grestore idtransform add abs
+ 0 360 arc stroke
+ } def
+/mchdict mark
+ /hsbw { pop 0 mhmx transform translate 0 0 pmark }
+ /sbw { pop pop mhmx transform translate 0 0 pmark }
+ /hstem
+ { mhprint { (hstem ) print 2 copy 2 packedarray == } if
+ hsmark
+ }
+ /vstem
+ { mhprint { (vstem ) print 2 copy 2 packedarray == } if
+ vsmark
+ }
+ /hstem3
+ { mhprint { (hstem3 ) print 6 copy 6 packedarray == } if
+ 3 { hsmark } repeat
+ }
+ /vstem3
+ { mhprint { (vstem3 ) print 6 copy 6 packedarray == } if
+ 3 { vsmark } repeat
+ }
+ /div
+ { div
+ }
+ /callothersubr
+ { 3 eq
+ { pop
+ mhprint { (replace) = } if
+ % We're replacing hints; lighten the color.
+ currentrgbcolor 3 { 2 mul 3 div 3 1 roll } repeat setrgbcolor
+ }
+ { { pop } repeat
+ } ifelse
+ }
+ /callsubr
+ { Private /Subrs get exch get mchinterp
+ }
+ /pop
+ {
+ }
+ /return
+ {
+ }
+.dicttomark def
+
+/mchinterp % <charstring> mchinterp -
+ { 4330 exch dup length string .type1decrypt exch pop
+ dup length lenIV sub lenIV exch getinterval
+ 0 () /SubFileDecode filter
+ mark exch charstack_read ]
+ { dup type /nametype eq
+ { mchdict exch .knownget { exec } { cleartomark mark } ifelse
+ }
+ if
+ }
+ forall
+ } def
+
+/markcharhints % <charname> <matrix> <print> markcharhints -
+ { mhsetup
+ gsave mark
+ /Private currentfont /Private get def
+ Private rcheck % make sure we won't get an access error
+ { /lenIV Private /lenIV .knownget not { 4 } if def
+ currentfont /CharStrings get 3 -1 roll get mchinterp
+ }
+ { (Sorry, this font is protected; I can't show the hints.\n) print flush
+ exch
+ }
+ ifelse
+ cleartomark grestore
+ } def
diff --git a/Master/tlpkg/tlgs/lib/markpath.ps b/Master/tlpkg/tlgs/lib/markpath.ps
new file mode 100644
index 00000000000..f1495ee52c6
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/markpath.ps
@@ -0,0 +1,59 @@
+% Copyright (C) 1993 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: markpath.ps 6300 2005-12-28 19:56:24Z giles $
+% markpath.ps
+% Mark the corners of a path, drawing it slowly if desired.
+
+/Delay where { pop } { /Delay 0 def } ifelse
+/setxy0
+ { currentpoint /y0 exch def /x0 exch def
+ } def
+/bip
+ { epsx epsy idtransform /ey exch def /ex exch def
+ currentpoint ex 2 div ey 2 div rlineto currentpoint 0 ey neg rlineto
+ ex neg 0 rlineto 0 ey rlineto lineto lineto
+ stroke
+ } def
+/dally
+ { Delay { } repeat
+ Delay 0 ne { flushpage } if
+ } def
+/movebip
+ { /xs 2 index def /ys 1 index def
+ gsave newpath mpmx transform moveto setxy0 bip grestore
+ } def
+/linebip
+ { gsave newpath x0 y0 moveto mpmx transform lineto setxy0 bip dally grestore
+ } def
+/curvebip
+ { gsave newpath x0 y0 moveto 5 index 5 index mpmx transform lineto bip
+ 2 copy mpmx transform moveto 3 index 3 index mpmx transform lineto bip
+ x0 y0 moveto
+ 3 { mpmx transform 6 2 roll } repeat
+ curveto setxy0 bip dally grestore
+ } def
+/closebip
+ { xs ys linebip
+ } def
+
+/markpath % <matrix> markpath -
+ { /mpmx exch def
+ gsave initgraphics 9 dup dtransform grestore
+ /epsy exch def /epsx exch def
+ gsave 0 setlinewidth
+ { movebip } { linebip } { curvebip } { closebip } pathforall
+ grestore
+ } def
diff --git a/Master/tlpkg/tlgs/lib/mkcidfm.ps b/Master/tlpkg/tlgs/lib/mkcidfm.ps
new file mode 100644
index 00000000000..6bf34d8e537
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/mkcidfm.ps
@@ -0,0 +1,359 @@
+% Copyright (C) 2004 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: mkcidfm.ps 8022 2007-06-05 22:23:38Z giles $
+
+% Generate a cidfmap file for substituting CID fonts with TrueType
+% fonts, based on fonts found in the directory FONTDIR.
+%
+% The directory FONTDIR is searched for fonts whose filename
+% matches a Path in the cidsubs dictionary.
+% Any matches are written out as a CID font substitution.
+%
+% For each fontname and alias in the fontaliases dictionary,
+% write out each alias that matches a substituted font.
+% Where multiple aliases are possible, use the first match.
+%
+% Note that the substitutions and aliases in this file were created
+% by someone who doesn't understand Chinese, Japanese or Korean.
+% The initial list contains only font files found in Windows XP.
+% Please submit corrections and additions.
+%
+% Font filenames must match case.
+% All font filenames are currently lower case.
+%
+% Usage: gswin32c -q -dBATCH -sFONTDIR=c:/windows/fonts
+% -sCIDFMAP=c:/gs/cidfmap mkcidfm.ps
+
+
+systemdict /FONTDIR known not { /FONTDIR (c:/windows/fonts) def } if
+
+systemdict /CIDFMAP known { CIDFMAP } { (%stdout) } ifelse
+/cidfmap exch (w) file def
+
+% Directory separator as used by filenameforall
+/dirsep (/) def
+
+% This dictionary contains a list of font substitutions.
+% The first matching substitution in the array will be used.
+/fontaliases
+<<
+ % Traditional Chinese
+ /MSung-Light [ /MingLiU ]
+ /MSung-Medium [ /MingLiU ]
+ /MHei-Medium [ /MingLiU ]
+ /MKai-Medium [ /Arial-Unicode-MS /MingLiU ]
+
+ % Simplified Chinese
+ /STSong-Light [ /SimSun ]
+ /STFangsong-Light [ /SimSun ]
+ /STHeiti-Regular [ /SimHei ]
+ /STKaiti-Regular [ /SimHei ]
+
+ % Japanese
+ /Ryumin-Light [ /MS-Mincho ]
+ /Ryumin-Medium [ /MS-Mincho ]
+ /GothicBBB-Medium [ /MS-Gothic ]
+ /HeiseiMin-W3 [ /MS-Mincho ]
+ /HeiseiKakuGo-W5 [ /MS-Gothic ]
+
+ % Korean
+ /HYSMyeongJo-Medium [ /Batang ]
+ /HYRGoThic-Medium [ /Gulim ]
+ /HYGoThic-Medium [ /Dotum ]
+>>
+def
+
+
+% This dictionary contains a list of CID substitutions
+/cidsubs
+<<
+ % Simplified Chinese
+ /SimHei
+ <<
+ /FileType /TrueType
+ /Path (simhei.ttf)
+ /SubfontID 0
+ /CSI [(GB1) 2]
+ >>
+
+ /SimSun
+ <<
+ /FileType /TrueType
+ /Path (simsun.ttc)
+ /SubfontID 0
+ /CSI [(GB1) 2]
+ >>
+
+ /NSimSun
+ <<
+ /FileType /TrueType
+ /Path (simsun.ttc)
+ /SubfontID 1
+ /CSI [(GB1) 2]
+ >>
+
+ % Traditional Chinese
+ /MingLiU
+ <<
+ /FileType /TrueType
+ /Path (mingliu.ttc)
+ /SubfontID 0
+ /CSI [(CNS1) 2]
+ >>
+
+ /PMingLiU
+ <<
+ /FileType /TrueType
+ /Path (mingliu.ttc)
+ /SubfontID 1
+ /CSI [(CNS1) 2]
+ >>
+
+ /Arial-Unicode-MS
+ <<
+ /FileType /TrueType
+ /Path (arialuni.ttc)
+ /SubfontID 0
+ /CSI [(CNS1) 2]
+ >>
+
+ % Japanese
+ /MS-Gothic
+ <<
+ /FileType /TrueType
+ /Path (msgothic.ttc)
+ /SubfontID 0
+ /CSI [(Japan1) 3]
+ >>
+
+ /MS-PGothic
+ <<
+ /FileType /TrueType
+ /Path (msgothic.ttc)
+ /SubfontID 1
+ /CSI [(Japan1) 3]
+ >>
+
+ /MS-UI-Gothic
+ <<
+ /FileType /TrueType
+ /Path (msgothic.ttc)
+ /SubfontID 2
+ /CSI [(Japan1) 3]
+ >>
+
+ /MS-Mincho
+ <<
+ /FileType /TrueType
+ /Path (msmincho.ttc)
+ /SubfontID 0
+ /CSI [(Japan1) 3]
+ >>
+
+ /MS-PMincho
+ <<
+ /FileType /TrueType
+ /Path (msmincho.ttc)
+ /SubfontID 1
+ /CSI [(Japan1) 3]
+ >>
+
+ % Korean
+ /Batang
+ <<
+ /FileType /TrueType
+ /Path (batang.ttc)
+ /SubfontID 0
+ /CSI [(Korea1) 3]
+ >>
+
+ /BatangChe
+ <<
+ /FileType /TrueType
+ /Path (batang.ttc)
+ /SubfontID 1
+ /CSI [(Korea1) 3]
+ >>
+
+ /Gungsuh
+ <<
+ /FileType /TrueType
+ /Path (batang.ttc)
+ /SubfontID 2
+ /CSI [(Korea1) 3]
+ >>
+
+ /GungsuhChe
+ <<
+ /FileType /TrueType
+ /Path (batang.ttc)
+ /SubfontID 3
+ /CSI [(Korea1) 3]
+ >>
+
+ /Gulim
+ <<
+ /FileType /TrueType
+ /Path (gulim.ttc)
+ /SubfontID 0
+ /CSI [(Korea1) 3]
+ >>
+
+ /GulimChe
+ <<
+ /FileType /TrueType
+ /Path (gulim.ttc)
+ /SubfontID 1
+ /CSI [(Korea1) 3]
+ >>
+
+ /Dotum
+ <<
+ /FileType /TrueType
+ /Path (gulim.ttc)
+ /SubfontID 2
+ /CSI [(Korea1) 3]
+ >>
+
+ /DotumChe
+ <<
+ /FileType /TrueType
+ /Path (gulim.ttc)
+ /SubfontID 3
+ /CSI [(Korea1) 3]
+ >>
+
+>>
+def
+
+
+% A dictionary for storing the names and paths of found fonts
+/foundfonts 50 dict def
+
+% Get the basename of a path
+% For example, (c:/windows/fonts/msmincho.ps) --> (msmincho.ps)
+/basename { % path -- subpath
+ { dirsep search
+ {pop pop}
+ {exit}
+ ifelse
+ } loop
+} def
+
+
+% Check if a font basename matches one of the possible cid substitutions.
+% If it does, add the font and full path to the foundfonts dictionary
+/checkfont {
+ dup basename
+ cidsubs
+ {
+ /Path get
+ 2 index eq % Match case only
+ {
+ foundfonts exch
+ 3 index dup length string copy put
+ }
+ {
+ pop
+ }
+ ifelse
+ }
+ forall
+ pop pop
+} def
+
+% Add all matching fonts to foundfonts dictionary
+/findfonts { % path --
+ dup length 2 add string dup 3 1 roll copy pop
+ dup dup length 2 sub dirsep 0 get put
+ dup dup length 1 sub (*) 0 get put
+ /checkfont load 256 string filenameforall
+} def
+
+
+% Write out a cid substition, using the full font path
+% name is the font name, e.g. /MS-Mincho
+% path is the full path to the font file, e.g. (c:\windows\fonts\msmincho.ps)
+% subs is the dictionary for CID font substition, from cidsubs
+/emitsubs { % name path subs --
+ 3 -1 roll cidfmap exch write==only % name
+ cidfmap ( << ) writestring
+ % path subs
+ {
+ 1 index /Path eq {pop 1 index} if % use full path, not basename
+ exch cidfmap exch write==only cidfmap ( ) writestring
+ cidfmap exch write==only cidfmap ( ) writestring
+ } forall
+ cidfmap (>> ;\n) writestring
+ pop
+} def
+
+% Write out all known cid substitutions.
+/writesubs { % ---
+ cidfmap (% Substitutions\n) writestring
+ foundfonts
+ {
+ 1 index cidsubs exch known
+ {
+ 1 index cidsubs exch get % name path subs
+ emitsubs
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ forall
+} def
+
+% Write out aliases for which the cid substituted font exists.
+/writealiases { % --
+ cidfmap (\n% Aliases\n) writestring
+ fontaliases
+ {
+ % name aliasarray
+ {
+ % name alias
+ foundfonts 1 index known
+ {
+ 1 index cidfmap exch write==only cidfmap ( ) writestring
+ cidfmap exch write==only cidfmap ( ;\n) writestring
+ exit % after first match
+ }
+ {
+ pop % didn't find this name
+ }
+ ifelse
+ } forall
+ % name
+ pop
+ }
+ forall
+} def
+
+
+% Write out a new cidfmap file to stdout
+/writecidfmap { % path --
+ cidfmap (%!\n% cidfmap generated automatically by mkcidfm.ps from fonts found in\n) writestring
+ cidfmap (% ) writestring
+ dup cidfmap exch writestring cidfmap (\n\n) writestring
+ findfonts
+ writesubs
+ writealiases
+} def
+
+
+FONTDIR writecidfmap
diff --git a/Master/tlpkg/tlgs/lib/opdfread.ps b/Master/tlpkg/tlgs/lib/opdfread.ps
new file mode 100644
index 00000000000..571cd2a7cb9
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/opdfread.ps
@@ -0,0 +1,3676 @@
+%!PS-Adobe-2.0
+%
+% Copyright (C) 2002 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: opdfread.ps 8101 2007-07-04 19:52:15Z ray $
+% pdfread.ps - A procset for interpreting an ordered PDF 1.3 file.
+
+% This module defines routines for interpreting a PDF file with
+% a Postscript interpreter. To convert a PDF file into Postscript
+% just pre-contcatenate this file. The PDF file must satisfy
+% few constraints :
+%
+% 1. It must contain only Postscript level 2 objects encoded with
+% the PDF 1.3 language. Higher PDF levels must be re-distilled
+% with CompatibilityLevel=1.3 .
+%
+% 2. Objects must be ordered so that any resource be defined before
+% its usage.
+%
+% 3. The PDF file must not include other PDF files.
+% Consequently we have a single instance of the PDF reader.
+% We use this fact to simplify binding of the routines.
+%
+% 4. The PDF root object must always have the object id 1.
+%
+% 5. Generations besides 0 are not allowed.
+%
+% 6. xref must appear after all objects.
+%
+% Assuming the currentfile isn't positionable.
+% As a consequence, the reader fully ignores xref.
+
+
+true setglobal
+
+% ====================== Error handler =======================
+% A general error handler prints an error to page.
+
+10 dict begin % A dictionary for local binding
+
+/this currentdict def
+/y 720 def
+/ebuf 200 string def
+
+/prnt {
+ 36 //this /y get moveto //ebuf cvs show
+ //this /y 2 copy get 12 sub put
+} bind def
+
+/newline {
+ 36 //this /y get moveto
+ //this /y 2 copy get 12 sub put
+} bind def
+
+errordict /handleerror
+{ systemdict begin
+ $error begin
+ newerror
+ { (%%[ Error handled by opdfread.ps : ) print errorname //ebuf cvs print (; OffendingCommand: )
+ print /command load //ebuf cvs print ( ]%%) = flush
+ /newerror false store vmstatus pop pop 0 ne
+ { grestoreall
+ } if
+ errorname (VMerror) ne
+ { showpage
+ } if
+ initgraphics
+ 0 720 moveto
+ errorname (VMerror) eq
+ { //this /ehsave known
+ { clear //this /ehsave get restore 2 vmreclaim
+ } if
+ vmstatus exch pop exch pop
+ }
+ /Courier 12 selectfont
+ {
+ (ERROR: ) //prnt exec errorname //prnt exec
+ (OFFENDING COMMAND: ) //prnt exec
+ /command load //prnt exec
+ $error /ostack known {
+ (%%[STACK:) =
+ (STACK:) //prnt exec
+ $error /ostack get aload length {
+ //newline exec
+ dup mark eq {
+ (-mark-) dup = show
+ } {
+ dup type /nametype eq {
+ dup xcheck not {
+ (/) show
+ (/) print
+ } if
+ } if
+ dup = //ebuf cvs show
+ } ifelse
+ } repeat
+ } if
+ } ifelse
+ (%%]%) =
+ //systemdict /showpage get exec
+ quit
+ } if
+ end
+ end
+} bind readonly put
+
+end % A dictionary for local binding
+
+
+50 dict begin
+
+% ===================== Debugging =========================================
+
+/DefaultSwitch % <name> DefaultSwitch -
+{
+ dup where {
+ pop pop
+ } {
+ false def
+ } ifelse
+} bind def
+
+/=string 256 string def
+
+/=only {
+ //=string cvs print
+} bind def
+
+/HexDigits (0123456789ABCDEF) readonly def
+
+/PrintHex % <int> PrintHex -
+{ 8 {
+ dup -28 bitshift //HexDigits exch 1 getinterval //=only exec
+ 4 bitshift
+ } repeat
+ pop
+} bind def
+
+/PDFR_DEBUG DefaultSwitch
+/PDFR_DUMP DefaultSwitch
+/PDFR_STREAM DefaultSwitch
+/TTFDEBUG DefaultSwitch
+/RotatePages DefaultSwitch
+/FitPages DefaultSwitch
+/SetPageSize DefaultSwitch
+
+/error % mark <object> .... error -
+{ % A stub for a while.
+ counttomark 1 sub -1 0 {
+ index dup type /arraytype eq { == } { =only } ifelse
+ } for
+ () =
+ cleartomark
+ % Assuming ....Undefined is never defined.
+ % Use it to emit an error.
+ ....Undefined
+} bind def
+
+//SetPageSize {
+ //RotatePages //FitPages or {
+ mark (/RotatePages, /FitPages are not allowed with /SetPageSize) //error exec
+ } if
+} if
+
+% ===================== Utilities =========================================
+
+/knownget % <dict> <key> knownget <value> true
+ % <dict> <key> knownget false
+{
+ 2 copy known {
+ get true
+ } {
+ pop pop false
+ } ifelse
+} bind def
+
+/IsUpper % <int> IsUpper <bool>
+{ dup (A) 0 get ge exch (Z) 0 get le and
+} bind def
+
+% Copy (recursive) packedarray|array to to global VM
+% NOTE: a packedarray will be converted to non-packed (too bad)
+/cpa2g { % <packedarray|array> cpa2g <packedarray|array>
+ dup length array % <src> <dest>
+ 0 1 2 index length 1 sub {
+ % <src> <dest> index
+ dup 3 index exch get cp2g
+ % <src> <dest> index <globalelement>
+ 3 copy put pop pop
+ } for
+ exch pop
+} bind def
+
+% Copy (recursive) dict to to global VM
+/cpd2g {
+ dup length dict exch {
+ cp2g 2 index 3 1 roll put
+ } forall
+} bind def
+
+% Copy string to to global VM
+/cps2g { % <string> cps2g <string>
+ dup length string copy
+} bind def
+
+/cp2gprocs
+<< /arraytype //cpa2g /dicttype //cpd2g /packedarraytype //cpa2g /stringtype //cps2g >>
+def
+
+/cp2g { % <any> cp2g <any>
+ % where <any> is array | dict | string | packedarray
+ % NOTE: The object must be readable (not executeonly or noaccess)
+ dup gcheck not {
+ dup //cp2gprocs 1 index type
+ 2 copy known {
+ get currentglobal 3 1 roll true setglobal exec exch setglobal
+ % set the attributes appropriately (we must have 'read' access to get this far)
+ 1 index wcheck not { readonly } if
+ 1 index xcheck { cvx } if
+ exch pop % discard original (local) object
+ } {
+ pop pop % discard type
+ } ifelse
+ } if
+} bind def
+
+% ===================== Work Data =========================================
+
+/BlockBuffer 65535 string def % Make it big to load entire TrueType font
+/PDFReader currentdict def
+/ObjectRegistry 50 array def % may grow later
+/CurrentObject null def
+/DoneDocumentStructure false def
+/GraphicState 20 dict begin
+ /InitialTextMatrix matrix def
+ /InitialMatrix matrix currentmatrix def
+currentdict end def
+/TempMatrix matrix def
+/GraphicStateStack 20 array def
+/GraphicStateStackPointer 0 def
+/PDFColorSpaces 50 dict def
+/InstalledFonts 50 dict def
+/MacRomanEncodingInverse null def
+
+% We need some structures in local VM, put then into the userdict :
+currentglobal false setglobal
+userdict /PDFR_InitialGS gstate put
+userdict /PDFR_Patterns 50 dict put
+userdict /FuncDataReader 10 dict put
+setglobal
+
+% ===================== Constants =========================================
+
+% The ExtGState elements are composite, thus need to be copied to
+% global VM (in case they aren't already global).
+/InitialExtGState 20 dict begin
+ /BG2 currentblackgeneration cp2g def
+ /UCR2 currentundercolorremoval cp2g def
+ /TR2 [ currentcolortransfer ] cp2g def
+ /HT currenthalftone cp2g def
+currentdict end readonly def
+
+/InitialGraphicState 20 dict begin
+ /FontSize 0 def
+ /CharacterSpacing 0 def
+ /TextLeading 0 def
+ /TextRenderingMode 0 def
+ /WordSpacing 0 def
+currentdict end readonly def
+
+/SimpleColorSpaceNames 15 dict begin
+ /DeviceGray true def
+ /DeviceRGB true def
+ /DeviceCMYK true def
+currentdict end readonly def
+
+/1_24_bitshift_1_sub 1 24 bitshift 1 sub def
+
+/ReadFontProcs 10 dict def % Will be filled below.
+
+% ===================== Reading PDF objects ===============================
+
+/Register % <DefaultDaemon> <id> <obj> Register -
+{
+ exch dup % d obj id id
+ //PDFReader /ObjectRegistry get length ge {
+ dup dup 2 idiv add array dup % d obj id [n] [n]
+ //PDFReader /ObjectRegistry get dup length % d obj id [n] [n] [o] l
+ 3 2 roll exch % d obj id [n] [o] [n] l
+ 0 exch getinterval copy pop % d obj id [n]
+ //PDFReader exch /ObjectRegistry exch put % d obj id
+ } if
+ exch //PDFReader /ObjectRegistry get % d id obj r
+ 3 1 roll % d r id obj
+ 3 copy pop get % d r id obj e
+ dup xcheck { % d r id obj e
+ 5 4 roll pop % r id obj e
+ //PDFR_DEBUG {
+ (Have a daemon for ) print 2 index =
+ } if
+ % We've got a definition daemon, execute it :
+ exec
+ } { % d r id obj e
+ dup null ne { % d r id obj e
+ mark (The object ) 4 index ( already defined : ) 4 index //error exec
+ } {
+ pop
+ } ifelse
+ 4 3 roll % r id obj d
+ % Execute the default daemon :
+ exec
+ } ifelse % r id obj
+ put %
+} bind def
+
+/IsRegistered % <id> GetRegistered <bool>
+{
+ //PDFReader /ObjectRegistry get % id r
+ dup length % id r l
+ 2 index le { % id r
+ pop pop false
+ } {
+ exch get % id e
+ null ne
+ } ifelse
+} bind def
+
+/GetRegistered % <id> GetRegistered <obj>
+{
+ //PDFReader /ObjectRegistry get % id r
+ dup length % id r l
+ 2 index le { % id r
+ exch mark exch (Object ) exch ( isn't defined before needed (1).) //error exec
+ } if
+ 1 index get % id e
+ dup xcheck {
+ exch mark exch (Object ) exch ( isn't defined before needed (2).) //error exec
+ } {
+ dup null eq {
+ exch mark exch (Object ) exch ( isn't defined before needed (3).) //error exec
+ } if
+ exch pop % e
+ } ifelse
+} bind def
+
+/StandardFontNames <<
+ /Times-Roman true
+ /Helvetica true
+ /Courier true
+ /Symbol true
+ /Times-Bold true
+ /Helvetica-Bold true
+ /Courier-Bold true
+ /ZapfDingbats true
+ /Times-Italic true
+ /Helvetica-Oblique true
+ /Courier-Oblique true
+ /Times-BoldItalic true
+ /Helvetica-BoldOblique true
+ /Courier-BoldOblique true
+>> def
+
+/CleanAllResources % - CleanAllResources -
+{ //PDFR_DEBUG {
+ (CleanAllResources beg) =
+ } if
+ //PDFReader /ObjectRegistry get
+ dup length 0 exch 1 exch 1 sub { % R i
+ 2 copy get dup xcheck {
+ % Don't clean a daemon.
+ pop pop
+ } {
+ dup null eq {
+ pop pop
+ } {
+ dup type /dicttype eq { /.Global known } { pop false } ifelse {
+ pop
+ } {
+ //PDFR_DEBUG {
+ (Dropping ) print dup =
+ } if
+ 1 index exch /DroppedObject put
+ } ifelse
+ } ifelse
+ } ifelse
+ } for
+ pop
+ FontDirectory length dict begin
+ FontDirectory {
+ pop
+ dup //StandardFontNames exch known not {
+ dup null def
+ } if
+ pop
+ } forall
+ currentdict
+ end {
+ pop
+ //PDFR_DEBUG {
+ (Undefining font ) print dup =
+ } if
+ undefinefont
+ } forall
+ //PDFR_DEBUG {
+ (CleanAllResources end) =
+ } if
+} bind def
+
+/PrintReference % <array> PrintReference <array>
+{
+ //PDFR_DEBUG {
+ ({ ) print
+ dup {
+ =only ( ) print
+ } forall
+ ( }) =
+ } if
+} bind def
+
+/R % <id> <gen> R <daemon>
+{ % Make a reference daemon.
+ 0 ne {
+ exch mark exch (A referred object generation ) exch ( isn't 0.) //error exec
+ } if % id
+ [ % <id> proc <obj>
+ exch //GetRegistered /exec load
+ ] cvx
+ //PrintReference exec
+} bind def
+
+/IsObjRef % <any> IsObjRef <bool>
+{
+ dup type /arraytype eq {
+ dup length 3 eq {
+ dup xcheck exch
+ dup 0 get type /integertype eq 3 2 roll and exch
+ dup 1 get //GetRegistered eq 3 2 roll and exch
+ 2 get /exec load eq and
+ } {
+ pop false
+ } ifelse
+ } {
+ pop false
+ } ifelse
+} bind def
+
+/DoNothing
+{
+} def
+
+/RunTypeDaemon % <id> <obj> RunTypeDaemon <id> <obj>
+{
+ dup type /dicttype eq {
+ dup /Type //knownget exec {
+ //PDFReader /TypeDaemons get exch
+ //knownget exec {
+ exec
+ } if
+ } if
+ } if
+} bind def
+
+/obj % <id> <generation> obj <id>
+{
+ //PDFR_DEBUG {
+ (Defining ) print 1 index =only ( ) print dup =only ( obj) =
+ } if
+ 0 ne {
+ exch mark exch (An object generation ) exch ( isn't 0.) //error exec
+ } if
+} bind def
+
+/endobj % <id> <obj> endobj -
+{
+ //PDFR_DEBUG {
+ (endobj ) =
+ } if
+ dup type /dicttype eq {
+ dup /.endobj_daemon //knownget exec {
+ //PDFR_DEBUG { (.endobj_daemon for ) print 2 index = } if
+ exec
+ } if
+ } if
+ dup type /dicttype eq { dup /ImmediateExec known } { false } ifelse {
+ pop pop
+ } {
+ //PDFR_DEBUG {
+ (Storing ) print 1 index =
+ } if
+ //RunTypeDaemon exec
+ //DoNothing 3 1 roll //Register exec
+ } ifelse
+} bind def
+
+/StoreBlock % <buf> StoreBlock -
+{ % Stores a (encoded) stream data block to the current object.
+ //PDFR_DEBUG {
+ (StoreBlock ) print //PDFReader /BlockCount get =only (, Length = ) print dup length =
+ } if
+ dup length string copy
+ //PDFReader /BlockCount get exch % i s
+ //PDFReader /CurrentObject get 3 1 roll % o i s
+ put %
+ //PDFReader /BlockCount get 1 add
+ //PDFReader exch /BlockCount exch put
+} bind def
+
+/CheckLength % <val> CheckNumber <val>
+{ dup type /integertype ne {
+ mark (Object length isn't an integer.) //error exec
+ } if
+} bind def
+
+/ResolveD % <dict> <key> <check> ResolveD <value>
+{
+ 3 copy pop get % <> key {} e
+ dup //IsObjRef exec {
+ % We've got a reference daemon, execute it :
+ //PDFR_DEBUG {
+ (Resolving ) print //PrintReference exec
+ } if
+ exec % <> key {} val
+ exch exec % <> key val
+ } {
+ exch pop
+ } ifelse
+ dup 4 1 roll % val <> key val
+ put % val
+} bind def
+
+/ResolveA % <array> <index> <check> ResolveA <value>
+{ 2 index 2 index get
+ dup //IsObjRef exec {
+ exec
+ exch exec
+ 3 copy put
+ } {
+ exch pop
+ } ifelse
+ exch pop exch pop
+} bind def
+
+/StoreStream % <id> <obj> StoreStream <id> <obj>
+{ % Stores a (encoded) data stream copy to the current object.
+ dup //PDFReader exch /CurrentObject exch put % id obj
+ //PDFReader /BlockCount 0 put
+ dup /Length //CheckLength //ResolveD exec % id obj l
+ //PDFR_DEBUG {
+ (StoreStream Length = ) print dup =
+ } if
+ currentfile exch () /SubFileDecode filter % id obj file
+ { dup //BlockBuffer readstring { % id obj file buf
+ //StoreBlock exec
+ } {
+ //StoreBlock exec
+ exit
+ } ifelse % id obj file
+ } loop
+ pop % id obj
+ //PDFReader /CurrentObject null put
+ //PDFR_DEBUG {
+ (StoreStream end.) =
+ } if
+} bind def
+
+/MakeStreamDumper % <file> MakeStreamDumper <file>
+{ % Debug purpose only.
+ //PDFR_DEBUG {
+ (MakeStreamDumper beg.) =
+ } if
+ currentglobal exch dup gcheck setglobal
+ [ exch % f
+ 1 dict dup /c 0 put exch % d f
+ 1024 string % d f s
+ { readstring pop % d s
+ (StreamDumper ) print 1 index /c get =string cvs print ( ) print
+ dup length =string cvs print ( <) print dup print (>\n) print
+ dup length % d s l
+ 3 2 roll % s l d
+ dup /c get % s l d c
+ 3 2 roll % s d c l
+ add /c exch put % s
+ } /exec load
+ ]
+ cvx 0 () /SubFileDecode filter
+ exch setglobal
+ //PDFR_DEBUG {
+ (MakeStreamDumper end.) =
+ } if
+} bind def
+
+/ShortFilterNames 15 dict begin
+ /AHx /ASCIIHexDecode def
+ /A85 /ASCII85Decode def
+ /LZW /LZWDecode def
+ /Fl /FlateDecode def
+ /RL /RunLengthDecode def
+ /CCF /CCITTFaxDecode def
+ /DCT /DCTDecode def
+currentdict end readonly def
+
+/AppendFilters % <file> <dict> AppendFilters <file>
+{
+ //PDFR_DEBUG {
+ (AppendFilters beg.) =
+ } if
+ dup 3 1 roll % d f d
+ /Filter //knownget exec { % d f F
+ dup type /nametype eq { % d f /F
+ dup //ShortFilterNames exch //knownget exec {
+ exch pop
+ } if
+ 2 index /DecodeParms //knownget exec { % d f p /F
+ exch
+ } if
+ filter % d f'
+ } { % d f []
+ dup 0 exch 1 exch length 1 sub { % d f [] i
+ 2 copy get % d f [] i /F
+ dup //ShortFilterNames exch //knownget exec {
+ exch pop
+ } if
+ 3 1 roll % d f /F [] i
+ 4 index /DecodeParms //knownget exec { % d f /F [] i DP
+ exch get % d f /F [] dp
+ } { % d f /F [] i
+ pop null % d f /F [] dp
+ } ifelse
+ dup null eq { % d f /F [] dp
+ pop 3 1 roll filter exch % d f' []
+ } { % d f /F [] dp
+ 3 1 roll % d f dp /F []
+ 4 1 roll filter exch % d f' []
+ } ifelse
+ } for
+ pop % d f'
+ } ifelse
+ //PDFR_DEBUG //PDFR_DUMP and {
+ //MakeStreamDumper exec
+ } if
+ } if
+ exch pop
+ //PDFR_DEBUG {
+ (AppendFilters end.) =
+ } if
+} bind def
+
+/ExecuteStream % <id> <obj> ExecuteStream <id> <obj>
+{ % Executes a (encoded) data stream.
+ dup //PDFReader exch /CurrentObject exch put % id obj
+ dup /Length //CheckLength //ResolveD exec % id obj l
+ //PDFR_DEBUG {
+ (ExecuteStream id = ) print 2 index =only ( Length = ) print dup =
+ } if
+ //PDFReader /InitialGraphicState get
+ //PDFReader /GraphicState get copy pop
+ //PDFReader /Operators get begin
+ % currentfile exch () /SubFileDecode filter % id obj file
+ % We would like to use the code above,
+ % but HP LaserJet 1320 continues parsing after the byte count exceeds.
+ pop currentfile 0 (endstream) /SubFileDecode filter % id obj file
+ 1 index //AppendFilters exec
+ cvx mark exch % id obj mark file
+ exec
+ counttomark 0 ne {
+ mark (Data left on ostack after an immediate stream execution.) //error exec
+ } if
+ cleartomark % id obj
+ end % Operators
+ //PDFR_DEBUG {
+ (ExecuteStream end.) =
+ } if
+ //PDFReader /CurrentObject null put
+ dup /IsPage known {
+ dup /Context get /NumCopies //knownget exec {
+ 1 sub {
+ copypage
+ } repeat
+ } if
+ showpage
+ } if
+} bind def
+
+/stream % <id> <obj> stream <id> <obj>
+{
+ //PDFR_DEBUG {
+ 1 index =only ( stream) =
+ } if % id obj
+ % Run the object definition daemon, if exists :
+ //PDFReader /ObjectRegistry get dup length 3 index % id obj r l id
+ gt { % id obj r
+ 2 index get
+ dup xcheck {
+ exec
+ % Disable the daemon :
+ //PDFReader /ObjectRegistry get 2 index null put
+ } {
+ pop
+ } ifelse
+ } {
+ pop
+ } ifelse % id obj
+ dup /ImmediateExec known {
+ dup /GlobalExec //knownget exec {
+ currentglobal 4 1 roll
+ setglobal
+ //ExecuteStream exec
+ 3 2 roll setglobal
+ } {
+ //ExecuteStream exec
+ } ifelse
+ } {
+ //StoreStream exec
+ } ifelse
+ dup /.CleanResources //knownget exec {
+ /All eq {
+ //CleanAllResources exec
+ } if
+ } if
+} bind def
+
+/HookFont % <id> <obj> <font_descriptor> HookFont <id> <obj>
+{
+ //PDFR_DEBUG {
+ (Loaded the font ) print dup /FontName get =
+ } if
+ {
+ dup /FontFileType get dup /Type1 eq exch /MMType1 eq or { % id obj fd
+ % We assume that the Type 1 font has same name with no prefix
+ % due to pdfwrite specifics.
+ % We use it to find the font after it is defined.
+ % We could redefine 'definefont' for hooking the font,
+ % but we don't think that it could be guaranteedly portable :
+ % a 3d party PS interpreter may set a special context
+ % when running the font file.
+ % Note that this mechanizm does not depend on the
+ % font name uniquity, because the last 'definefont'
+ % is only important.
+ dup /FontName get % id obj fd fn
+ //PDFReader /RemoveFontNamePrefix get exec
+ currentglobal true setglobal exch % id obj fd g fn
+ findfont % id obj fd g f
+ exch setglobal % id obj fd f
+ exit
+ } if
+ dup /FontFileType get /TrueType eq { % id obj fd
+ //PDFReader /MakeType42 get exec
+ //PDFR_DEBUG {
+ (Font dict <<) =
+ dup {
+ 1 index /sfnts eq {
+ exch pop
+ (/sfnts [) print
+ {
+ (-string\() print length //=only exec (\)- ) =
+ } forall
+ (]) =
+ } {
+ exch //=only exec ( ) print ==
+ } ifelse
+ } forall
+ (>>) =
+ } if
+ dup /FontName get exch definefont
+ exit
+ } if
+ mark (FontHook has no proc for ) 2 index /FontFileType get //error exec
+ } loop
+ /Font exch put % id obj
+} bind def
+
+/endstream % <id> <obj> endstream <id> <obj>
+{
+} bind def
+
+/xref % - xref -
+{
+ //PDFR_DEBUG {
+ (xref) =
+ //PDFR_DUMP {
+ //PDFReader /ObjectRegistry get ==
+ } if
+ } if
+ end % The procset
+ count 0 ne {
+ mark (Excessive data on estack at the end of the interpretation.) //error exec
+ } if
+ currentfile flushfile
+} bind def
+
+% ===================== Restoring the PDF Document Structure ===============
+
+/ResolveDict % <dict> /ResolveDict -
+{ dup { % d key val
+ pop 1 index exch % d cp key
+ //DoNothing //ResolveD exec % d obj
+ pop % d
+ } forall
+ pop %
+} bind def
+
+/SetupPageView % <obj> SetupPageView -
+{
+ //PDFR_DEBUG {
+ (SetupPageView beg) =
+ } if
+ //GraphicState /InitialMatrix get setmatrix
+ /MediaBox get aload pop % bx0 by0 bx1 by1
+ 3 index neg 3 index neg translate % Temporary move to origin
+ 3 -1 roll sub 3 1 roll exch sub exch % bw bh
+ userdict /.HWMargins //knownget exec {
+ aload pop
+ } {
+ currentpagedevice /.HWMargins //knownget exec {
+ aload pop
+ } {
+ 0 0 0 0
+ } ifelse
+ } ifelse
+ currentpagedevice /PageSize get aload pop
+ 3 -1 roll sub 3 1 roll exch sub exch % bw bh px0 py0 px1 py1
+ exch 3 index sub exch 3 index sub % bw bh px0 py0 pw ph
+ //SetPageSize {
+ //PDFR_DEBUG {
+ (Setting page size to ) print 1 index //=only exec ( ) print dup =
+ } if
+ pop pop 3 index 3 index 2 copy % bw bh px0 py0 bw bh bw bh
+ currentglobal false setglobal 3 1 roll % bw bh px0 py0 bw bh bool bw bh
+ 2 array astore % bw bh px0 py0 bw bh bool []
+ << exch /PageSize exch >> setpagedevice % bw bh px0 py0 bw bh bool
+ userdict /PDFR_InitialGS gstate put
+ setglobal % bw bh px0 py0 bw bh
+ } if
+ //RotatePages {
+ 2 copy gt 6 index 6 index gt ne {
+ % a rotation is useful except it fits with no rotation.
+ 1 index 5 index le 1 index 5 index le and not
+ } {
+ false
+ } ifelse
+ } {
+ false
+ } ifelse
+ { //FitPages {
+ 1 index 5 index div 1 index 7 index div % bw bh px0 py0 pw ph sx sy
+ 2 copy gt {
+ exch
+ } if
+ pop dup scale % bw bh px0 py0 pw ph
+ } if
+ 90 rotate
+ 0 5 index neg translate
+ } {
+ //FitPages {
+ 1 index 6 index div 1 index 6 index div % bw bh px0 py0 pw ph sx sy
+ 2 copy gt {
+ exch
+ } if
+ pop dup scale % bw bh px0 py0 pw ph
+ } if
+ } ifelse
+ pop pop % bw bh px0 py0
+ translate % bw bh
+ pop pop %
+ //PDFR_DEBUG {
+ (SetupPageView end) =
+ } if
+} bind def
+
+/PageContentsDaemon % <id> <obj> <node> PageContentsDaemon <id> <obj>
+{ % Note: an excessive operand from a prebond procedure.
+ //PDFR_DEBUG {
+ (Executing PageContentsDaemon for ) print 2 index =
+ } if % id obj node
+ 1 index exch /Context exch put % id obj
+ dup /ImmediateExec true put
+ dup /IsPage true put
+ dup /Context get //SetupPageView exec
+} bind def
+
+/FontFileDaemon % <id> <obj> <font_descriptor> FontFileDaemon <id> <obj>
+{ % Note: an excessive operand from a prebond procedure.
+ //PDFR_DEBUG {
+ (Executing FontFileDaemon for ) print 2 index =
+ } if
+ % We need any font resource that refers this descriptor
+ % to know the font type. Assuming that FontDescriptorDaemon
+ % provided FontFileType.
+ dup /FontFileType get % id obj fd ft
+ 2 index exch % id obj fd obj ft
+ dup //ReadFontProcs exch //knownget exec { % id obj fd obj ft proc
+ exch pop exec % id obj fd
+ } {
+ mark (FontFile reader for ) 2 index ( isn't implemented yet.) //error exec
+ } ifelse
+ //PDFR_DEBUG {
+ (FontFileDaemon end) =
+ } if % id obj fd
+ pop
+} bind def
+
+/FontDescriptorDaemon % <id> <obj> <font_resource> FontDescriptorDaemon <id> <obj>
+{ % Note: an excessive operand from a prebond procedure.
+ //PDFR_DEBUG {
+ (Executing FontDescriptorDaemon for ) print 2 index =
+ } if % id obj fr
+ %HACK BEG assuming an own font for each font descriptor
+ % to provide an access to PDFEncoding
+ % from MakeType42, ComposeCharStrings.
+ 2 copy /FontResource exch put
+ %HACK END
+ /Subtype get 1 index exch /FontFileType exch put
+} bind def
+
+/TypeDaemons << % <id> <obj> proc <id> <obj>
+ /Page
+ { //PDFR_DEBUG {
+ (Recognized a page.) =
+ } if
+ dup /Contents //knownget exec { % id obj c
+ 0 get //DoNothing exch % id obj dn id1
+ [ % <id> <obj> proc <id> <obj>
+ 3 index //PageContentsDaemon /exec load
+ ] cvx % id obj {}
+ //Register exec % id obj
+ } {
+ (fixme: page with no Contents won't be printed.) =
+ } ifelse
+ } bind
+ /FontDescriptor
+ { //PDFR_DEBUG {
+ (Recognized a font descriptor.) =
+ } if
+ {
+ dup dup /FontFile known {/FontFile} {/FontFile2} ifelse
+ //knownget exec { % id obj ff
+ 0 get //DoNothing exch % id obj dn id1
+ [ % <id> <obj> proc <id> <obj>
+ 3 index //FontFileDaemon /exec load
+ ] cvx % id obj {}
+ //Register exec % id obj
+ exit
+ } if
+ % FontFile3 are not implemented yet.
+ (Font descriptor ) print 1 index =only ( has no FontFile.) =
+ } loop
+ } bind
+ /Font
+ { //PDFR_DEBUG {
+ (Recognized a font resource.) =
+ } if
+ dup /BaseFont //knownget exec {
+ % cache the installed font (if any) before replacing it.
+ //PDFReader /RemoveFontNamePrefix get exec
+ currentglobal exch % A hack against HP LaserJet 1320 bug :
+ % It sets the local allocation mode
+ % when 'resourcestatus' fails.
+ dup /Font resourcestatus {
+ pop pop
+ //PDFReader /GetInstalledFont get exec pop
+ } {
+ pop
+ } ifelse
+ setglobal
+ } if
+ dup /FontDescriptor //knownget exec { % id obj fd
+ 0 get % id obj id1
+ dup //IsRegistered exec { % id obj id1
+ //PDFR_DEBUG {
+ (already registered ) print dup =
+ } if
+ pop
+ } {
+ //DoNothing exch % id obj dn id1
+ [ % <id> <obj> proc <id> <obj>
+ 3 index //FontDescriptorDaemon /exec load
+ ] cvx % id obj {}
+ //Register exec % id obj
+ } ifelse
+ } if
+ } bind
+>> def
+
+/MakeStreamReader % <obj> MakeStreamReader <file>
+{ dup
+ [
+ exch
+ //PDFR_DEBUG {
+ (Stream proc )
+ /print load
+ //PDFR_STREAM {
+ (<)
+ /print load
+ } if
+ } if
+ 1 dict dup /i -1 put
+ /dup load
+ /i
+ /get load
+ 1
+ /add load
+ /dup load
+ 3
+ 1
+ /roll load
+ /i
+ /exch load
+ /put load
+ //knownget
+ /exec load
+ /not load
+ { () }
+ /if load
+ //PDFR_DEBUG {
+ //PDFR_STREAM {
+ /dup load
+ /print load
+ (>)
+ /print load
+ } if
+ ( end of stream proc.\n)
+ /print load
+ } if
+ ] cvx
+ //PDFR_DEBUG {
+ (Stream reader ) print dup ==
+ } if
+ 0 () /SubFileDecode filter
+ exch //AppendFilters exec
+} bind def
+
+/RunDelayedStream % <stream_obj> RunDelayedStream -
+{
+ //MakeStreamReader exec % file
+ mark exch
+ cvx exec %
+ counttomark 0 ne {
+ mark (Data left on ostack after a delayed stream execution.) //error exec
+ } if
+ cleartomark
+} bind def
+
+% ===================== Font Management ======================
+
+//ReadFontProcs begin
+ /Type1 % <font_descriptor> <FontFile_object> Type1 <font_descriptor>
+ { //PDFR_DEBUG {
+ (ReadFontProcs.Type1) =
+ } if
+ dup /.endobj_daemon [ 4 index //HookFont /exec load ] cvx put
+ dup /ImmediateExec true put
+ /GlobalExec true put
+ } bind def
+ /MMType1 //Type1 def
+ /TrueType % <font_descriptor> <FontFile_object> TrueType <font_descriptor>
+ { //PDFR_DEBUG {
+ (ReadFontProcs.TrueType) =
+ } if
+ dup /.endobj_daemon [ 4 index //HookFont /exec load ] cvx put
+ pop
+ } bind def
+end
+
+/MakeType42 % <FontFile_object> <font_descriptor> MakeType42 <FontFile_object> <font_descriptor> <font>
+{
+ //PDFR_DEBUG {
+ (MakeType42 beg) =
+ } if
+ 10 dict begin
+ /FontName 1 index /FontName get def
+ /FontType 42 def
+ /FontMatrix [1 0 0 1 0 0] def
+ /FontBBox 1 index /FontBBox get def % fo fd
+ dup /FontResource get % fo fd fr
+ dup /Encoding known { % fo fd fr
+ //PDFReader /ObtainEncoding get exec % fo fd fr
+ /Encoding get % fo fd e
+ } {
+ pop null
+ } ifelse
+ /PDFEncoding exch def % fo fd
+ /CharStrings 2 index //PDFReader /MakeTTCharStrings get exec def
+ /sfnts [ 3 index //MakeStreamReader exec 65535 string readstring pop ] def
+ /Encoding StandardEncoding def % A stub - will be replaced by font resource.
+ /PaintType 0 def
+ currentdict end
+ //PDFR_DEBUG {
+ (MakeType42 end) =
+ } if
+} bind def
+
+/GetInstalledFont % <name> GetInstalledFont <font>
+{ currentglobal exch true setglobal % g n
+ dup //InstalledFonts exch knownget { % g n f
+ exch pop % g f
+ } { % g n
+ dup findfont dup 3 1 roll % g f n f
+ //InstalledFonts 3 1 roll put % g f
+ } ifelse
+ exch setglobal
+} bind def
+
+/RemoveFontNamePrefix % <name> RemoveFontNamePrefix <name>
+{ //=string cvs true
+ 0 1 5 {
+ 2 index exch get //IsUpper exec not {
+ pop false exit
+ } if
+ } for
+ { (+) search {
+ pop pop
+ } if
+ } if
+ cvn
+} bind def
+
+/CheckFont % <key> <val> CheckFont <key> <val>
+{ dup /Type get /Font ne {
+ mark (Resource ) 3 index ( must have /Type/Font .) //error exec
+ } if
+} bind def
+
+/CheckEncoding % <key> <val> CheckEncoding <key> <val>
+{ dup type /nametype ne {
+ dup /Type get /Encoding ne {
+ mark (Resource ) 3 index ( must have /Type/Encoding .) //error exec
+ } if
+ } if
+} bind def
+
+/ObtainEncoding % <font_resource> ObtainEncoding <font_resource>
+{ dup /Encoding known {
+ dup dup /Encoding //CheckEncoding //ResolveD exec % fr fr er|e|n
+ dup type dup /arraytype eq exch /packedarraytype eq or {
+ % Already resolved.
+ pop pop
+ } {
+ dup type /nametype eq {
+ /Encoding findresource % fr fr e
+ } {
+ dup /BaseEncoding //knownget exec not {
+ /StandardEncoding
+ } if
+ /Encoding findresource % fr fr er e
+ exch % fr fr e er
+ /Differences //knownget exec { % fr fr e d
+ exch dup length array copy exch
+ 0 exch % fr fr e 0 d
+ { % fr fr e i v
+ dup type /integertype eq {
+ exch pop
+ } {
+ 3 copy put pop % fr fr e i
+ 1 add
+ } ifelse
+ } forall
+ pop % fr fr e
+ } if % fr fr e
+ } ifelse % fr fr e
+ /Encoding exch put % fr
+ } ifelse
+ } {
+ dup /Encoding /StandardEncoding /Encoding findresource put
+ } ifelse
+} bind def
+
+/ObtainMetrics % <font_resource> ObtainMetrics <font_resource>
+{ dup /Widths //knownget exec { % fr W
+ 1 index /Encoding get % fr W E
+ 256 dict % fr W E M
+ 3 index /Subtype get /TrueType eq {
+ 1000
+ } {
+ 1
+ } ifelse % fr W E M s
+ 4 index /MissingWidth //knownget exec not {
+ 0
+ } if % fr W E M s mw
+ 5 index /FirstChar //knownget exec not {
+ 0
+ } if % fr W E M s mw c0
+ 6 5 roll % fr E M s mw c0 W
+ dup 0 exch 1 exch length 1 sub { % fr E M s mw c0 W i
+ 2 copy get % fr E M s mw c0 W i w
+ exch 3 index add % fr E M s mw c0 W w c
+ 7 index exch get % fr E M s mw c0 W w n
+ dup null ne {
+ 6 index 3 1 roll exch % fr E M s mw c0 W M n w
+ 6 index div
+ 3 copy pop //knownget exec {
+ 0 eq
+ } {
+ true
+ } ifelse
+ { put % fr E M s mw c0 W
+ } {
+ pop pop pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+ } for
+ pop pop pop pop exch pop % fr M
+ 1 index exch /Metrics exch put % fr
+ } {
+ dup /MissingWidth //knownget exec { % fr mw
+ 256 dict % fr mw M
+ 2 index /Encoding get { % fr mw M e
+ dup null ne {
+ 3 copy 3 2 roll put % fr mw M e
+ } if
+ pop % fr mw M
+ } forall
+ exch pop % fr M
+ 1 index exch /Metrics exch put % fr
+ } if
+ } ifelse
+} bind def
+
+/NotDef % - NotDef -
+{ % A Type 3 font is on dstack.
+ FontMatrix aload pop pop pop exch pop exch pop % sx sy
+ 1 exch div exch
+ 1 exch div exch % wx wy
+ 1 index 0 setcharwidth
+ o setlinewidth
+ 0 0 moveto
+ 2 copy rlineto
+ 1 index 0 rlineto
+ neg exch neg exch rlineto %
+ closepath stroke
+} bind def
+
+/BuildChar % <font> <char_code> BuildChar -
+{ //PDFR_DEBUG {
+ (BuildChar ) print dup //=only exec ( ) print
+ } if
+ exch begin
+ Encoding exch get % n
+ //PDFR_DEBUG {
+ dup =
+ } if
+ dup null eq {
+ pop //NotDef exec %
+ } { % n
+ CharProcs exch //knownget exec { % cp_stream
+ //RunDelayedStream exec
+ } {
+ //NotDef exec
+ } ifelse
+ } ifelse %
+ end % font
+} bind def
+
+/printdict % <dict> printdict -
+{ (<<) =
+ { exch = == } forall
+ (>>) =
+} bind def
+
+/printfont % <dict> printfont -
+{
+ dup {
+ exch dup =
+ dup /Encoding eq {
+ pop =
+ } {
+ dup /FontInfo eq exch /Private eq or {
+ //printdict exec
+ } {
+ ==
+ } ifelse
+ } ifelse
+ } forall
+} bind def
+
+/ScaleMetrics % <Metrics> <scale> ScaleMetrics <Metrics>
+{ 1 index { % M s n v
+ 2 index div % M s n v'
+ 3 index % M s n v' M
+ 3 1 roll put % M s
+ } forall
+ pop
+} bind def
+
+/ResolveAndSetFontAux % <resource_name> <size> ResolveAndSetFont -
+{ exch dup % s rn rn
+ //PDFReader /CurrentObject get /Context get /Resources get
+ /Font //DoNothing //ResolveD exec
+ exch //CheckFont //ResolveD exec % s rn fr
+ dup /Font //knownget exec { % s rn fr f
+ exch pop exch pop
+ } {
+ {
+ dup /Subtype get dup dup /Type1 eq exch /TrueType eq or exch /MMType1 eq or {
+ % s rn fr
+ exch pop % s fr
+ dup /BaseFont get % s fr n
+ //RemoveFontNamePrefix exec % s fr n
+ //PDFR_DEBUG {
+ (Font ) print dup =
+ } if % s fr n
+ 1 index /FontDescriptor known { % s fr n
+ //PDFR_DEBUG {
+ (Font from a font descriptor.) =
+ } if
+ 1 index % s fr n fr
+ /FontDescriptor //DoNothing //ResolveD exec % s fr n fd
+ /Font //knownget exec {
+ exch pop % s fr fd
+ } {
+ //PDFR_DEBUG {
+ (Font descriptor has no Font resolved.) =
+ } if
+ //GetInstalledFont exec % s fr f
+ } ifelse
+ } {
+ //GetInstalledFont exec % s fr f
+ } ifelse
+ exch % s f fr
+ dup /Encoding known not {
+ 1 index /Encoding get 1 index exch /Encoding exch put
+ } if
+ //ObtainEncoding exec
+ //ObtainMetrics exec
+ exch
+ dup length dict copy % s fr f
+ dup 2 index /Encoding get % s fr f f e
+ /Encoding exch put % s fr f
+ 1 index /Metrics //knownget exec { % s fr f M
+ 2 index /Subtype get /TrueType ne {
+ % Adjust Metrics for fonts converted from TrueTypes by 3d party.
+ 1 index /FontMatrix get 0 get 0.001 div
+ //ScaleMetrics exec
+ } if
+ 1 index exch /Metrics exch put % s fr f
+ } if
+ 1 index /BaseFont get % s fr f n
+ exch
+ dup /FID undef
+ dup /UniqueID undef
+ definefont % s fr f
+ dup 3 1 roll % s f fr f
+ /Font exch put % s f
+ exit
+ } if
+ dup /Subtype get /Type3 eq { % s rn fr
+ //ObtainEncoding exec
+ 2 copy exch /FontName exch put
+ dup /CharProcs get //ResolveDict exec
+ dup /FontType 3 put
+ dup /BuildChar //BuildChar put
+ dup dup /Font exch put
+ % Ignore Metrics because pdfwrite duplicates it
+ % from setcharwidth/setcachedevice.
+ dup 3 1 roll % s fr rn fr
+ definefont % s fr f
+ 2 copy ne {
+ % The interpreter copied the font dictionary while 'definefont'
+ % Need to update the font pointer in the resource.
+ 2 copy /Font exch put % s fr f
+ } if
+ exch pop % s f
+ exit
+ } if
+ dup /Subtype get /Type0 eq { % s rn fr
+ } if
+ dup /Subtype get /CIDFontType0 eq { % s rn fr
+ } if
+ dup /Subtype get /CIDFontType2 eq { % s rn fr
+ } if
+ mark (Unknown font type ) 2 index /Subtype get //error exec
+ } loop
+ } ifelse % s f
+ exch scalefont setfont %
+} bind def
+
+/ResolveAndSetFont % <resource_name> <size> ResolveAndSetFont -
+{ currentglobal true setglobal 3 1 roll
+ //ResolveAndSetFontAux exec
+ setglobal
+} bind def
+
+%%beg TrueType
+% ================= Auxiliary procedures for True Type cmap Decoder =============
+
+/.knownget
+{ 2 copy known {
+ get true
+ } {
+ pop pop false
+ } ifelse
+} bind def
+
+/.min
+{ 2 copy lt {
+ exch
+ } if
+ pop
+} bind def
+
+/.max
+{ 2 copy gt {
+ exch
+ } if
+ pop
+} bind def
+
+/.dicttomark
+{ >>
+} bind def
+
+% ===================== True Type cmap Decoder =============
+% The following procedures are copied from gs/lib/gs_ttf.ps with no change.
+
+% <string> <index> getu16 <integer>
+/getu16 {
+ 2 copy get 8 bitshift 3 1 roll 1 add get add
+} bind def
+
+% <string> <index> gets16 <integer>
+/gets16 {
+ getu16 16#8000 xor 16#8000 sub
+} bind def
+
+% <string> <index> getu32 <integer>
+/getu32 {
+ 2 copy getu16 16 bitshift 3 1 roll 2 add getu16 add
+} bind def
+
+% <string> <index> gets32 <integer>
+/gets32 {
+ 2 copy gets16 16 bitshift 3 1 roll 2 add getu16 add
+} bind def
+
+% Each procedure in this dictionary is called as follows:
+% <encodingtable> proc <glypharray>
+/cmapformats mark
+ 0 { % Apple standard 1-to-1 mapping.
+ 6 256 getinterval { } forall 256 packedarray
+ } bind
+ 2 { % Apple 16bit CJK (ShiftJIS etc)
+
+ % /sHK_sz subHeaderKey_size % 1 * uint16
+ % /sH_sz subHeader_size % 4 * uint16
+ % /sH_len subHeader_length
+ % /cmapf2_tblen total table length
+ % /cmapf2_lang language code (not used)
+ % /sHKs subHeaderKeys
+
+ /sHK_sz 2 def
+ /sH_sz 8 def
+ dup 2 getu16 /cmapf2_tblen exch def
+
+ dup 4 getu16 /cmapf2_lang exch def
+
+ dup 6 256 sHK_sz mul getinterval /sHKs exch def
+
+ 0 % initialization value for /sH_len
+ 0 1 255 {
+ sHKs exch
+ 2 mul getu16
+ 1 index % get current max
+ 1 index % get current subHeaderKey
+ lt {exch} if pop
+ } for
+ /sH_len exch def
+
+ dup 6 256 sHK_sz mul add
+ cmapf2_tblen 1 index sub getinterval
+ /sH_gIA exch def
+
+ /cmapf2_glyph_array 65535 array def
+
+ /.cmapf2_putGID {
+ /cmapf2_ch cmapf2_ch_hi 8 bitshift cmapf2_ch_lo add def
+ firstCode cmapf2_ch_lo le
+ cmapf2_ch_lo firstCode entryCount add lt
+ and { % true: j is inside
+ sH_offset idRangeOffset add % offset to gI
+ cmapf2_ch_lo firstCode sub 2 mul % rel. pos. in range
+ add 6 add % offset in sH_gIA
+ sH_gIA exch getu16
+ dup 0 gt { %
+ idDelta add
+ cmapf2_glyph_array exch cmapf2_ch exch put
+ } {
+ pop
+ % cmapf2_glyph_array cmapf2_ch 0 put
+ } ifelse
+ } { % false: j is outside
+ % cmapf2_glyph_array cmapf2_ch 0 put
+ } ifelse
+ } def
+
+ 16#00 1 16#ff { % hi_byte scan
+ /cmapf2_ch_hi exch def
+ sHKs cmapf2_ch_hi sHK_sz mul getu16
+ /sH_offset exch def
+ sH_gIA sH_offset sH_sz getinterval
+ dup 0 getu16 /firstCode exch def
+ dup 2 getu16 /entryCount exch def
+ dup 4 gets16 /idDelta exch def
+ dup 6 getu16 /idRangeOffset exch def
+ pop
+ sH_offset 0 eq {
+ /cmapf2_ch_lo cmapf2_ch_hi def
+ /cmapf2_ch_hi 0 def
+ .cmapf2_putGID
+ } {
+ 16#00 1 16#ff { % lo_byte scan
+ /cmapf2_ch_lo exch def
+ .cmapf2_putGID
+ } for
+ } ifelse
+ } for
+ pop
+ 0 1 cmapf2_glyph_array length 1 sub { % rewrite null -> 0.
+ dup cmapf2_glyph_array exch get
+ null eq { cmapf2_glyph_array exch 0 put } {pop} ifelse
+ } for
+ cmapf2_glyph_array
+ } bind
+ 4 { % Microsoft/Adobe segmented mapping.
+ /etab exch def
+ /nseg2 etab 6 getu16 def
+ 14 /endc etab 2 index nseg2 getinterval def
+ % The Apple TrueType documentation omits the 2-byte
+ % 'reserved pad' that follows the endCount vector!
+ 2 add
+ nseg2 add /startc etab 2 index nseg2 getinterval def
+ nseg2 add /iddelta etab 2 index nseg2 getinterval def
+ nseg2 add /idroff etab 2 index nseg2 getinterval def
+ % The following hack allows us to properly handle
+ % idiosyncratic fonts that start at 0xf000:
+ pop
+ /firstcode startc 0 getu16 16#ff00 and dup 16#f000 ne { pop 0 } if def
+ /putglyph {
+ glyphs code 3 -1 roll put /code code 1 add def
+ } bind def
+ % Do a first pass to compute the size of the glyphs array.
+ /numcodes 0 def /glyphs 0 0 2 nseg2 3 sub {
+ % Stack: /glyphs numglyphs i2
+ /i2 exch def
+ /scode startc i2 getu16 def
+ /ecode endc i2 getu16 def
+ numcodes scode firstcode sub
+ % Hack for fonts that have only 0x0000 and 0xf000 ranges
+ %dup 16#e000 ge { 255 and } if
+ % the previous line is obstructive to CJK fonts, so it was removed
+ exch sub 0 .max ecode scode sub 1 add add
+ exch 1 index add exch
+ numcodes add /numcodes exch def
+ } for array def
+ % prefill the array with 0's faster than a { 0 putglyph } repeat
+ glyphs length 1024 ge {
+ .array1024z 0 1024 glyphs length 1023 sub { glyphs exch 2 index putinterval } for
+ glyphs dup length 1024 sub 3 -1 roll
+ putinterval
+ } {
+ 0 1 glyphs length 1 sub { glyphs exch 0 put } for
+ } ifelse
+ % Now fill in the array.
+ /numcodes 0 def /code 0 def
+ 0 2 nseg2 3 sub {
+ /i2 exch def
+ /scode startc i2 getu16 def
+ /ecode endc i2 getu16 def
+ numcodes scode firstcode sub
+ % Hack for fonts that have only 0x0000 and 0xf000 ranges
+ %dup 16#e000 ge { 255 and } if
+ % the previous line is obstructive to CJK fonts, so it was removed
+ exch sub 0 .max dup /code exch code exch add def
+ ecode scode sub 1 add add numcodes add /numcodes exch def
+ /delta iddelta i2 gets16 def
+ TTFDEBUG {
+ (scode=) print scode =only
+ ( ecode=) print ecode =only
+ ( delta=) print delta =only
+ ( droff=) print idroff i2 getu16 =
+ } if
+ idroff i2 getu16 dup 0 eq {
+ pop scode delta add 65535 and 1 ecode delta add 65535 and
+ { putglyph } for
+ } { % The +2 is for the 'reserved pad'.
+ /gloff exch 14 nseg2 3 mul add 2 add i2 add add def
+ 0 1 ecode scode sub {
+ 2 mul gloff add etab exch getu16
+ dup 0 ne { delta add 65535 and } if putglyph
+ } for
+ } ifelse
+ } for glyphs /glyphs null def % for GC
+ } bind
+ 6 { % Single interval lookup.
+ dup 6 getu16 /firstcode exch def dup 8 getu16 /ng exch def
+ firstcode ng add array
+ % Stack: tab array
+ % Fill elements 0 .. firstcode-1 with 0
+ 0 1 firstcode 1 sub { 2 copy 0 put pop } for
+ dup firstcode ng getinterval
+ % Stack: tab array subarray
+ % Fill elements firstcode .. firstcode+nvalue-1 with glyph values
+ 0 1 ng 1 sub {
+ dup 2 mul 10 add 4 index exch getu16 3 copy put pop pop
+ } for pop exch pop
+ } bind
+.dicttomark readonly def % cmapformats
+
+% <cmaptab> cmaparray <glypharray>
+/cmaparray {
+ dup 0 getu16 cmapformats exch .knownget {
+ TTFDEBUG {
+ (cmap: format ) print 1 index 0 getu16 = flush
+ } if exec
+ } {
+ (Can't handle format ) print 0 getu16 = flush
+ 0 1 255 { } for 256 packedarray
+ } ifelse
+ TTFDEBUG {
+ (cmap: length=) print dup length = dup ==
+ } if
+} bind def
+
+% Define remapping for misnamed glyphs in TrueType 'post' tables.
+% There are probably a lot more than this!
+/postremap mark
+ /Cdot /Cdotaccent
+ /Edot /Edotaccent
+ /Eoverdot /Edotaccent
+ /Gdot /Gdotaccent
+ /Ldot /Ldotaccent
+ /Zdot /Zdotaccent
+ /cdot /cdotaccent
+ /edot /edotaccent
+ /eoverdot /edotaccent
+ /gdot /gdotaccent
+ /ldot /ldotaccent
+ /zdot /zdotaccent
+.dicttomark readonly def
+
+% Each procedure in this dictionary is called as follows:
+% posttable <<proc>> glyphencoding
+/postformats mark
+ 16#00010000 { % 258 standard Macintosh glyphs.
+ pop MacGlyphEncoding
+ }
+ 16#00020000 { % Detailed map, required by Microsoft fonts.
+ dup length 36 lt {
+ TTFDEBUG { (post format 2.0 invalid.) = flush } if
+ pop [ ]
+ } {
+ /postglyphs exch def
+ postglyphs 32 getu16 /numglyphs exch def
+ /glyphnames numglyphs 2 mul 34 add def
+ % Build names array in the order they occur in the 'post' table
+ /postpos glyphnames def
+ [ numglyphs 1 sub {
+ postpos postglyphs length ge { exit } if
+ % No name available, /postnames will be defined as an empty
+ % array and the glyph won't get a name attached.
+ postglyphs postpos get
+ postglyphs postpos 1 add 2 index getinterval cvn
+ exch postpos add 1 add /postpos exch def
+ } repeat
+ ] /postnames exch def
+ [ 0 1 numglyphs 1 sub {
+ 2 mul 34 add postglyphs exch getu16
+ dup 258 lt {
+ MacGlyphEncoding exch get
+ } {
+ dup 32768 ge {
+ % According to the published TrueType spec, such values are
+ % "reserved for future use", but at least some PDF files
+ % produced by the Adobe PDF library contain entries with a
+ % value of 16#ffff.
+ pop /.notdef
+ } {
+ % Get the name for this glyph
+ 258 sub dup postnames length ge {
+ TTFDEBUG { ( *** warning: glyph index past end of 'post' table) = flush } if
+ exit
+ } if
+ postnames exch get
+ % At least some of Microsoft's TrueType fonts use incorrect
+ % (Adobe-incompatible) names for some glyphs.
+ % Correct for this here.
+ postremap 1 index .knownget { exch pop } if
+ } ifelse
+ } ifelse
+ } for ]
+ }
+ ifelse
+ } bind
+ 16#00030000 { % No map.
+ pop [ ]
+ } bind
+.dicttomark readonly def % postformats
+
+% - .getpost -
+% Uses post, defines glyphencoding
+/.getpost {
+ /glyphencoding post null eq {
+ TTFDEBUG { (post missing) = flush } if [ ]
+ } {
+ postformats post 0 getu32 .knownget {
+ TTFDEBUG {
+ (post: format ) print
+ post 0 getu16 =only (,) print post 2 getu16 = flush
+ } if
+ post exch exec
+ } {
+ TTFDEBUG { (post: unknown format ) print post 0 getu32 = flush } if [ ]
+ } ifelse
+ } ifelse def
+} bind def
+
+% ===================== True Type Interpretation =============
+
+/TTParser <<
+ /Pos 0
+ /post null
+>> def
+
+/readu8 % <file> readu8 <int>
+{ read not {
+ mark (Insufficient data in the stream.) //error exec
+ } if
+} bind def
+
+/readu16 % <file> readu16 <int>
+{ dup //readu8 exec 8 bitshift exch //readu8 exec or
+} bind def
+
+/reads16 % <file> reads16 <int>
+{ //readu16 exec 16#8000 xor 16#8000 sub
+} bind def
+
+/readu32 % <file> readu32 <int>
+{ dup //readu16 exec 16 bitshift exch //readu16 exec or
+} bind def
+
+/reads32 % <file> reads32 <int>
+{ dup //reads16 exec 16 bitshift exch //readu16 exec or
+} bind def
+
+/SkipToPosition % <file> <int> SkipToPosition -
+{ dup //TTParser /Pos get % f P P p
+ exch //TTParser exch /Pos exch put % f P p
+ sub % f P-p
+ //PDFR_DEBUG {
+ (Skipping ) print dup //=only exec ( bytes.) =
+ } if
+ dup 0 eq {
+ pop pop
+ } {
+ //BlockBuffer exch 0 exch getinterval readstring not {
+ mark (Insufficient data in the stream for SkipToPosition.) //error exec
+ } if % s
+ pop %
+ } ifelse
+} bind def
+
+/TagBuffer 4 string def
+
+/ParseTTTableDirectory % <file> ParseTTTableDirectory <dict>
+{ //PDFR_DEBUG {
+ (ParseTTTableDirectory beg) =
+ } if
+ 15 dict begin
+ dup //readu32 exec 16#00010000 ne {
+ mark (Unknown True Type version.) //error exec
+ } if
+ dup //readu16 exec /NumTables exch def
+ dup //readu16 exec /SearchRange exch def
+ dup //readu16 exec /EntrySelector exch def
+ dup //readu16 exec /RangeShift exch def
+ //PDFR_DEBUG {
+ (NumTables = ) print NumTables =
+ } if
+ NumTables {
+ dup //TagBuffer readstring not {
+ mark (Could not read TT tag.) //error exec
+ } if
+ cvn
+ [ 2 index //readu32 exec pop % CheckSum
+ 2 index //readu32 exec % Offset
+ 3 index //readu32 exec % Length
+ ]
+ //PDFR_DEBUG {
+ 2 copy exch //=only exec ( ) print ==
+ } if
+ def
+ } repeat
+ pop % file
+ //TTParser /Pos 12 NumTables 16 mul add put
+ currentdict end
+ //PDFR_DEBUG {
+ (ParseTTTableDirectory end) =
+ } if
+} bind def
+
+/ParseTTcmap % <file> <TableDirectory> ParseTTcmap <dict>
+{ //PDFR_DEBUG {
+ (ParseTTcmap beg) =
+ } if
+ /cmap get aload pop % f o L
+ 3 1 roll % L f o
+ 7 dict begin
+ //PDFR_DEBUG {
+ (Current position = ) print //TTParser /Pos get =
+ (cmap position = ) print dup =
+ } if
+ 1 index exch //SkipToPosition exec % L f
+ //TTParser /Pos get /TablePos exch def
+ dup //readu16 exec pop % version
+ dup //readu16 exec /NumEncodings exch def
+ //PDFR_DEBUG {
+ (NumEncodings = ) print NumEncodings =
+ } if
+ null % L f null
+ NumEncodings {
+ 1 index //readu32 exec % platformID, specificID % L f null id
+ 2 index //readu32 exec % offset % L f null id o
+ 3 array dup 3 2 roll 0 exch put % L f []|null id []
+ 2 index null ne {
+ dup 0 get 3 index 0 get sub % L f []|null id [] l
+ 3 index exch 1 exch put % L f []|null id []
+ } if
+ dup 4 3 roll pop 3 1 roll % L f [] id []
+ def
+ } repeat % L f []
+ dup 0 get % L f [] o
+ 4 3 roll exch sub % f [] L-o
+ 1 exch put % f
+ //PDFR_DEBUG {
+ currentdict {
+ exch dup type /integertype eq {
+ //PrintHex exec ( ) print ==
+ } {
+ pop pop
+ } ifelse
+ } forall
+ } if
+ 4 NumEncodings 8 mul add /HeaderLength exch def
+ //TTParser /Pos //TTParser /Pos get HeaderLength add put
+ 0 % f o
+ NumEncodings {
+ 16#7FFFFFF null % f o om null|[]
+ % Choosing a table with minimal offset greater than 'o' :
+ currentdict {
+ 1 index type /integertype eq { % f o om null|[] id []
+ exch pop dup 0 get % f o om null|[] [] oi
+ dup 5 index gt {
+ dup 4 index lt {
+ 4 1 roll % f o oi om null|[] []
+ exch pop exch pop % f o oi []
+ } {
+ pop pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse % f o oi []
+ } {
+ pop pop
+ } ifelse
+ } forall % f o om' []
+ //PDFR_DEBUG {
+ (Obtaining subtable for ) print dup ==
+ } if
+ 3 2 roll pop % f o' []
+ 3 copy pop % f o' [] f o'
+ TablePos add //SkipToPosition exec % f o' []
+ 3 copy exch pop 1 get % f o' [] l
+ //TTParser /Pos //TTParser /Pos get 3 index add put
+ string % f o' [] f ()
+ readstring not {
+ mark (Can't read a cmap subtable.) //error exec
+ } if % f o' [] ()
+ 2 exch put % f o'
+ } repeat
+ pop pop %
+ currentdict end
+ //PDFR_DEBUG {
+ (ParseTTcmap end) =
+ } if
+} bind def
+
+/GetTTEncoding % <file> <TTcmapHeader> <platformIDspecificID> GetTTEncoding <array>
+{ //PDFR_DEBUG {
+ (GetTTEncoding beg) =
+ } if
+ get % f []
+ exch pop % []
+ 2 get
+ 10 dict begin % For local variables.
+ /TTFDEBUG //PDFR_DEBUG def
+ //cmaparray exec
+ end
+ //PDFR_DEBUG {
+ (GetTTEncoding end) =
+ dup ==
+ } if
+} bind def
+
+/InverseEncoding % <encoding> InverseEncoding <dict>
+{
+ 256 dict begin
+ dup length 1 sub -1 0 { % E i
+ 2 copy get % E i n
+ exch % E n i
+ 1 index currentdict exch //knownget exec { % E n i e
+ dup type /arraytype eq {
+ aload length 1 add array astore % E n e'
+ } {
+ 2 array astore % E n e'
+ } ifelse
+ } if
+ def
+ } for
+ pop
+ currentdict end
+} bind def
+
+/GetMacRomanEncodingInverse
+{ //PDFReader /MacRomanEncodingInverse get
+ dup null eq {
+ pop
+ MacRomanEncoding //InverseEncoding exec
+ dup //PDFReader exch /MacRomanEncodingInverse exch put
+ } if
+} bind def
+
+/PutCharStringSingle % <cmap_array> <glyph_name> <char_code> PutCharStringSingle <cmap_array>
+{
+ dup 3 index length lt { % cmap name code
+ 2 index exch get % cmap name glyphindex
+ dup 0 ne {
+ def % cmap
+ } {
+ pop pop
+ } ifelse
+ } {
+ pop pop % cmap
+ } ifelse
+} bind def
+
+/PutCharString % <cmap_array> <glyph_name> <char_code> PutCharString <cmap_array>
+{ 1 index type /nametype ne {
+ mark (Bad charstring name) //error exec
+ } if
+ dup type /arraytype eq {
+ { % cmap name code
+ 3 copy //PutCharStringSingle exec % cmap name code cmap
+ pop pop % cmap name
+ } forall
+ pop % cmap
+ } {
+ //PutCharStringSingle exec
+ } ifelse
+} bind def
+
+/ComposeCharStrings % <cmaparray> <dict> ComposeCharStrings <dict>
+{
+ //PDFR_DEBUG {
+ (ComposeCharStrings beg) =
+ } if
+ 1 index length 1 add dict begin % cmap d
+ % fixme : the dict length estimation doesn't account 'post'.
+ /.notdef 0 def
+ exch % d cmap
+ //TTParser /post get % d cmap [post]|null
+ dup null ne {
+ exch % d [] cmap
+ 1 index length 1 sub -1 0 { % d [] cmap code
+ dup 3 index exch get exch % d [] cmap name code
+ dup 0 eq {
+ pop pop
+ } {
+ def
+ } ifelse
+ } for
+ } if
+ exch pop exch % cmap d
+ { % cmap name code
+ //PutCharString exec
+ } forall % cmap
+ pop %
+ currentdict end
+ //PDFR_DEBUG {
+ (ComposeCharStrings end) =
+ } if
+} bind def
+
+/ParseTTpost % <file> <TableDirectory> ParseTTpost -
+{ % Defines TTparser.post - an array,
+ % which maps glyph indices to glyph names.
+ //PDFR_DEBUG {
+ (ParseTTpost beg) =
+ } if
+ /post get aload pop % f o L
+ 3 1 roll % L f o
+ //PDFR_DEBUG {
+ (Current position = ) print //TTParser /Pos get =
+ (post position = ) print dup =
+ } if
+ 1 index exch //SkipToPosition exec % L f
+ //TTParser /Pos //TTParser /Pos get 4 index add put
+ exch string % f s
+ readstring not {
+ mark (Insufficient data in the stream for ParseTTpost.) //error exec
+ } if % s
+ 1 dict begin % A bridge to the code from /gs/lib/gs_ttf.ps .
+ /post exch def
+ //.getpost exec
+ //TTParser /post glyphencoding put
+ //PDFR_DEBUG {
+ (ParseTTpost end) =
+ glyphencoding ==
+ } if
+ end
+} bind def
+
+/MakeTTCharStrings % <FontFile_object> MakeTTCharStrings <CharStrings>
+{ //MakeStreamReader exec % f
+ dup dup //ParseTTTableDirectory exec % f f d
+ % Since the file isn't positionable,
+ % we must pick up either 'post' or 'cmap' first.
+ % Deside which one we do first :
+ //TTParser /post null put
+ dup /post //knownget exec {
+ 0 get
+ 1 index /cmap get 0 get
+ lt {
+ 2 copy //ParseTTpost exec % f f d
+ //ParseTTcmap exec % f ch
+ } {
+ 2 copy //ParseTTcmap exec % f f d ch
+ 3 1 roll % f ch f d
+ //ParseTTpost exec % f ch
+ } ifelse
+ } {
+ //ParseTTcmap exec % f ch
+ } ifelse
+ {
+ dup 16#00030001 known {
+ //PDFR_DEBUG {
+ (Using the TT cmap encoding for Windows Unicode.) =
+ } if
+ 16#00030001 //GetTTEncoding exec
+ AdobeGlyphList //ComposeCharStrings exec
+ exit
+ } if
+ dup 16#00010000 known {
+ //PDFR_DEBUG {
+ (Using the TT cmap encoding for Macintosh Roman.) =
+ } if
+ 16#00010000 //GetTTEncoding exec
+ PDFEncoding dup null eq {
+ pop //GetMacRomanEncodingInverse exec
+ } {
+ //InverseEncoding exec
+ } ifelse
+ //ComposeCharStrings exec
+ exit
+ } if
+ dup 16#00030000 known {
+ //PDFR_DEBUG {
+ (Using the TT cmap encoding 3.0 - not sure why Ghostscript writes it since old versions.) =
+ } if
+ % Same algorithm as for 16#00010000.
+ 16#00030000 //GetTTEncoding exec
+ PDFEncoding dup null eq {
+ pop //GetMacRomanEncodingInverse exec
+ } {
+ //InverseEncoding exec
+ } ifelse
+ //ComposeCharStrings exec
+ exit
+ } if
+ mark (True Type cmap has no useful encodings.) //error exec
+ } loop
+ //PDFR_DEBUG {
+ (CharStrings <<) =
+ dup {
+ exch
+ dup type /nametype eq {
+ //=only exec
+ } {
+ ==
+ } ifelse
+ ( ) print ==
+ } forall
+ (>>) =
+ } if
+} bind def
+
+%%end TrueType
+
+% ===================== Functions ============================
+
+/ScaleVal % <value> <Range> ScaleVal <scaled_value>
+{
+ aload pop % v r0 r1
+ 1 index sub % v r0 r1-r0
+ 3 2 roll mul add
+} bind def
+
+/ScaleArg % <arg> <Domain> ScaleArg <scaled_arg>
+{
+ aload pop % a d0 d1
+ 1 index sub % a d0 d1-d0
+ 3 1 roll % d1-d0 a d0
+ sub exch div % (a-d0)/(d1-d0)
+} bind def
+
+/ScaleArgN % <arg1> ... <argN> <Domain> ScaleArg <scaled_arg1> ... <scaled_argN>
+{
+ dup length 2 sub -2 0 { % a1 ... an [] 2i
+ 2 % a1 ... an [] 2i 2
+ 2 index 3 1 roll getinterval % a1 ... an [] []
+ 3 2 roll % a1 ... [] [] an
+ exch //ScaleArg exec % a1 ... [] an'
+ 1 index length 2 idiv 1 add 1 roll % an' a1 ... []
+ } for % a1' ... an' []
+ pop % a1' ... an'
+} bind def
+
+
+/ComputeFunction_10 % <scaled_arg> <sample_array> ComputeFunction_10 <result>
+{ % Assuming a 1-argument 1-result function type 0.
+ //PDFR_DEBUG {
+ (ComputeFunction_10 beg ) print 1 index //=only exec ( stack=) print count =
+ } if
+ exch % [] x
+ dup 1 eq {
+ pop dup length 1 sub get % y
+ } {
+ 1 index length 1 sub mul % [] x*(l-1)
+ dup dup floor sub % [] x*(l-1) f
+ dup 0 eq {
+ pop cvi get % y
+ } {
+ 3 1 roll floor cvi % f [] i
+ 2 getinterval % f []
+ aload pop % f y0 y1
+ 2 index mul 3 2 roll 1 exch sub 3 2 roll mul add % y1*f+(1-f)*y0
+ } ifelse
+ } ifelse
+ //PDFR_DEBUG {
+ (ComputeFunction_10 end ) print dup //=only exec ( stack=) print count =
+ } if
+} bind def
+
+/ComputeFunction_n0 % <arg1> .... <argn> <sample_array> <n> ComputeFunction_n0 <result>
+{ % Assuming a n-argument 1-result function type 0.
+ //PDFR_DEBUG {
+ (ComputeFunction_n0 beg N=) print dup //=only exec ( stack=) print count =
+ } if
+ dup 0 eq { % v 0
+ pop % v
+ } {
+ dup 2 add -1 roll % a2 .... an [] n a1
+ dup 3 index length 1 sub ge {
+ pop 1 sub % a2 .... an [] n-1
+ exch dup length 1 sub get exch
+ //PDFReader /ComputeFunction_n0 get exec
+ } {
+ dup floor cvi dup % a2 .... an [] n a1 i i
+ 4 index exch get % a2 .... an [] n a1 i [i]
+ 3 index dup % a2 .... an [] n a1 i [i] n n
+ 5 add copy % a2 .... an [] n a1 i [i] n a2 .... an [] n a1 i [i] n
+ 6 2 roll % a2 .... an [] n a1 i [i] n a2 .... an [i] n [] n a1 i
+ pop pop pop pop % a2 .... an [] n a1 i [i] n a2 .... an [i] n
+ 1 sub % a2 .... an [] n a1 i [i] n a2 .... an [i] n-1
+ //PDFReader /ComputeFunction_n0 get exec % a2 .... an [] n a1 i [i] n v0
+ 3 2 roll pop % a2 .... an [] n a1 i n v0
+ exch % a2 .... an [] n a1 i v0 n
+ 4 3 roll exch % a2 .... an [] n i v0 a1 n
+ 4 add 2 roll 1 add % v0 a1 a2 .... an [] n i+1
+ 3 2 roll exch get % v0 a1 a2 .... an n [i+1]
+ exch 1 sub % v0 a1 a2 .... an [i+1] n-1
+ //PDFReader /ComputeFunction_n0 get exec % v0 a1 v1
+ 1 index mul % v0 a1 v1*a1
+ 3 1 roll % v1*a1 v0 a1
+ 1 exch sub mul add % v1*a1+v0*(1-a1)
+ } ifelse
+ } ifelse
+ //PDFR_DEBUG {
+ (ComputeFunction_n0 end ) print dup //=only exec ( stack=) print count =
+ } if
+} bind def
+
+/FunctionToProc_x01 % <function_dict> FunctionToProc_x01 <proc>
+{ % Assuming a n-argument 1-result function type 0.
+ % The stream is already converted to the array /Data.
+ dup /Domain get exch
+ dup /Data get 0 get exch
+ /Size get length
+ [ 4 1 roll
+ //PDFR_DEBUG {
+ { (function beg, stack =) print count //=only exec (\n) print } /exec load
+ 5 2 roll
+ } if
+ dup 1 gt { % a1 ... an Domain Data n
+ { mark exch % a1 ... an Domain Data [ n
+ 3 add 2 roll % Data [ a1 ... an Domain
+ //ScaleArgN exec % Data [ a1 ... an
+ counttomark dup % Data [ a1 ... an n n
+ 3 add -2 roll % a1 ... an n Data [
+ pop exch % a1 ... an Data n
+ //ComputeFunction_n0 exec
+ } /exec load
+ } {
+ pop % a1 Domain Data
+ 3 1 /roll load //ScaleArg /exec load % Data a1s
+ /exch load
+ //ComputeFunction_10 /exec load
+ } ifelse
+ //PDFR_DEBUG {
+ (function end, stack =) /print load /count load //=only /exec load (\n) /print load
+ } if
+ ] cvx
+ //PDFR_DEBUG {
+ (Made a procedure for the 1-result function :) =
+ dup ==
+ } if
+} bind def
+
+/FunctionProcDebugBeg % - FunctionProcDebugBeg -
+{ (FunctionProcDebugBeg ) print count =
+} bind def
+
+/FunctionProcDebugEnd % - FunctionProcDebugEnd -
+{ (FunctionProcDebugEnd ) print count =
+} bind def
+
+/FunctionToProc_x0n % <function_dict> <m> FunctionToProc_x0n <proc>
+{ % Assuming a n-argument m-result function type 0.
+ % The stream is already converted to the array /Data.
+ %
+ % Making the procedure : { Domain //ScaleArg exec ... n copy {} exec n+1 1 roll ... }
+ % except "n copy" for the last chunk.
+ %
+ PDFR_DEBUG {
+ (FunctionToProc_x0n beg m=) print dup =
+ } if
+ 1 index /Size get length exch % f n m
+ dup 7 mul 2 add array % f n m []
+ PDFR_DEBUG {
+ dup 0 //FunctionProcDebugBeg put
+ } {
+ dup 0 //DoNothing put
+ } ifelse
+ dup 1 /exec load put
+ dup 2 5 index /Domain get put
+ 2 index 1 eq {
+ dup 3 //ScaleArg put
+ } {
+ dup 3 //ScaleArgN put
+ } ifelse
+ dup 4 /exec load put
+ 1 index 1 sub 0 exch 1 exch { % f n m [] i
+ dup 7 mul 5 add % f n m [] i i1
+ 1 index 4 index 1 sub ne {
+ dup 3 index exch 6 index put 1 add
+ dup 3 index exch /copy load put 1 add
+ } if
+ [ % f n m [] i i1 [
+ 6 index /Data get 3 index get % f n m [] i i1 [ di
+ 6 index 1 eq {
+ //ComputeFunction_10 /exec load
+ } {
+ 6 index
+ //ComputeFunction_n0 /exec load
+ } ifelse
+ ] cvx % f n m [] i i1 {}
+ 3 index exch 2 index exch put 1 add % f n m [] i i1
+ 2 index 1 index /exec load put 1 add
+ 1 index 4 index 1 sub ne {
+ 2 index 1 index 6 index 1 add put 1 add
+ 2 index 1 index 1 put 1 add
+ 2 index 1 index /roll load put % f n m [] i i1
+ } if
+ pop pop % f n m []
+ } for
+ PDFR_DEBUG {
+ dup dup length 2 sub //FunctionProcDebugEnd put
+ } {
+ dup dup length 2 sub //DoNothing put
+ } ifelse
+ dup dup length 1 sub /exec load put
+ cvx exch pop exch pop exch pop
+ //PDFR_DEBUG {
+ (Made a procedure for the n-argument function :) =
+ dup ==
+ } if
+ PDFR_DEBUG {
+ (FunctionToProc_x0n end) =
+ } if
+} bind def
+
+/MakeTableRec % <func_obj> <n> MakeTableRec <array>
+{
+ 0 % to be bound below
+ exec
+} bind def
+
+/MakeTable % <func_obj> <n> MakeTable <array>
+{ //PDFR_DEBUG {
+ (MakeTable beg ) print count =
+ } if
+ 1 index /Size get exch % f S N
+ 1 sub dup % f S n n
+ 3 1 roll % f n S n
+ get % f n s
+ array % f n []
+ 1 index 0 eq {
+ exch pop exch pop % []
+ } {
+ dup length 1 sub -1 0 { % f n [] i
+ 3 index 3 index //MakeTableRec exec % f n [] i []
+ 2 index 3 1 roll put % f n []
+ } for
+ exch pop exch pop
+ } ifelse
+ //PDFR_DEBUG {
+ (MakeTable end ) print count =
+ } if
+} bind def
+
+//MakeTableRec 0 //MakeTable put
+
+/StoreSample % <value> <table> <dimensions> StoreSample -
+{ % The reader is on the dictionary stack.
+ 1 sub
+ dup 0 eq {
+ pop % v []
+ } {
+ -1 1 { % v T i
+ I exch get get % v T[I[i]]
+ } for % v []
+ } ifelse
+ I 0 get 3 2 roll put
+} bind def
+
+/ReadSample32 % - ReadSample32 <value>
+{
+ 4 {
+ File read not {
+ mark (Insufficient data for function.) //error exec
+ } if
+ } repeat
+ pop % Ignore the last byte because it can't fit into 'real'.
+ 3 1 roll exch
+ 256 mul add 256 mul add
+ //1_24_bitshift_1_sub div
+} bind def
+
+/ReadSample % - ReadSample <value>
+{ % The reader in on the dictionary stack.
+ Buffer BitsLeft BitsPerSample
+ { 2 copy ge {
+ exit
+ } if
+ 3 1 roll
+ 8 add 3 1 roll
+ 256 mul File read not {
+ mark (Insufficient data for function.) //error exec
+ } if
+ add
+ 3 1 roll
+ } loop % b bl pbs
+ sub dup % b bl-bps bl-bps
+ 2 index exch % b bl-bps b bl-bps
+ neg bitshift % b bl-bps v
+ 2 copy exch bitshift % b bl-bps v v<<(bl-bps)
+ 4 3 roll exch sub % bl-bps v b-(v<<(bl-bps))
+ /Buffer exch def % bl-bps v
+ exch /BitsLeft exch def % v
+ Div div % v/(1<<pbs-1)
+} bind def
+
+/ReadSamplesRec % <dimensions> ReadSamplesRec -
+{ 0 % Will be bound below
+ exec
+} bind def
+
+/ReadSamples % <dimensions> ReadSamples -
+{ % The reader in on the dictionary stack.
+ //PDFR_DEBUG {
+ (ReadSamples beg ) print count =
+ } if
+ dup 1 eq {
+ pop
+ 0 1 Size 0 get 1 sub {
+ I exch 0 exch put
+ 0 1 M 1 sub {
+ dup Range exch 2 mul 2 getinterval % m r
+ //PDFR_DEBUG {
+ (Will read a sample ... ) print
+ } if
+ BitsPerSample 32 eq { //ReadSample32 } { //ReadSample } ifelse
+ exec exch //ScaleVal exec % m v
+ //PDFR_DEBUG {
+ (value=) print dup =
+ } if
+ exch Table exch get % v []
+ Size length //StoreSample exec %
+ } for
+ } for
+ } {
+ 1 sub
+ dup Size exch get 0 exch 1 exch 1 sub { % d-1 i
+ I exch 2 index exch put % d-1
+ dup //ReadSamplesRec exec % d-1
+ } for
+ pop
+ } ifelse
+ //PDFR_DEBUG {
+ (ReadSamples end ) print count =
+ } if
+} bind def
+
+//ReadSamplesRec 0 //ReadSamples put
+
+/StreamToArray % <obj> StreamToArray -
+{ //PDFR_DEBUG {
+ (StreamToArray beg ) print count =
+ } if
+ currentglobal true setglobal exch
+ userdict /FuncDataReader get begin % g f
+ dup /BitsPerSample get /BitsPerSample exch def
+ dup /Size get length /N exch def
+ dup /Range get length 2 idiv /M exch def
+ 1 BitsPerSample bitshift 1 sub /Div exch def
+ /BitsLeft 0 def
+ /Buffer 0 def
+ dup /Size get /Size exch def % g f
+ dup /Range get /Range exch def % g f
+ /File 1 index //MakeStreamReader exec def % g f
+ /I [ N { 0 } repeat ] def % g f
+ M array % g f []
+ dup length 1 sub -1 0 { % g f [] m
+ 2 index N //MakeTable exec % g f [] m T
+ 2 index 3 1 roll put % g f []
+ } for
+ /Table exch def % g f
+ N //ReadSamples exec % g f
+ PDFR_DEBUG {
+ (Table = ) print Table ==
+ } if
+ /Data Table put % g
+ end
+ setglobal %
+ //PDFR_DEBUG {
+ (StreamToArray end ) print count =
+ } if
+} bind def
+
+/FunctionToProc10 % <function_dict> FunctionToProc10 <proc>
+{ % Assuming a 1-argument function type 0.
+ PDFR_DEBUG {
+ (FunctionToProc10 beg, Range = ) print dup /Range get ==
+ } if
+ dup /Order //knownget exec {
+ 1 ne {
+ (Underimplemented function Type 0 Order 3.) =
+ } if
+ } if
+ dup //StreamToArray exec % f
+ dup /Range get length dup 2 eq {
+ pop //FunctionToProc_x01 exec % proc
+ } {
+ 2 idiv //FunctionToProc_x0n exec % proc
+ } ifelse
+ PDFR_DEBUG {
+ (FunctionToProc10 end) =
+ } if
+} bind def
+
+/FunctionToProc12 % <function_dict> FunctionToProc12 <proc>
+{ begin
+ currentdict /C0 //knownget exec { length 1 eq } { true } ifelse {
+ N
+ currentdict /C0 //knownget exec {
+ 0 get
+ } {
+ 0
+ } ifelse
+ currentdict /C1 //knownget exec {
+ 0 get
+ } {
+ 1
+ } ifelse
+ 1 index sub
+ [ 4 1 roll
+ { % x n c0 c1-c0
+ 4 2 roll % c0 c1-c0 x n
+ excp mul add % y
+ } aload pop
+ ] cvx
+ } {
+ [
+ 0 1 C0 length 1 sub {
+ N % [ ... i n
+ C0 2 index get % [ ... i n c0
+ C1 3 index get % [ ... i n c0 c1
+ 4 3 roll pop % [ ... n c0 c1
+ 1 index sub % [ ... n c0 c1-c0
+ [ /dup load % [ ... n c0 c1-c0 [ dup
+ 5 2 roll % [ ... [ dup n c0 c1-c0
+ { % x x n c0 c1-c0
+ 4 2 roll % x c0 c1-c0 x n
+ exp mul add % x y
+ exch % y x
+ } aload pop
+ ] cvx
+ /exec load
+ } for
+ /pop load
+ ] cvx
+ } ifelse
+ end
+ //PDFR_DEBUG {
+ (FunctionType2Proc : ) print dup ==
+ } if
+} bind def
+
+
+/FunctionToProc14 % <function_dict> FunctionToProc14 <proc>
+{ //MakeStreamReader exec cvx exec
+ //PDFR_DEBUG {
+ (FunctionType4Proc : ) print dup ==
+ } if
+} bind def
+
+/FunctionToProc1 % <function_dict> FunctionToProc <proc>
+{ % Assuming a 1-argument function.
+ dup /FunctionType get
+ { dup 0 eq {
+ pop //FunctionToProc10 exec exit
+ } if
+ dup 2 eq {
+ pop //FunctionToProc12 exec exit
+ } if
+ dup 4 eq {
+ pop //FunctionToProc14 exec exit
+ } if
+ mark exch (Function type ) exch ( isn't implemented yet.) //error exec
+ } loop
+} bind def
+
+/FunctionToProc20 % <function_dict> FunctionToProc20 <proc>
+{ % Assuming a 2-argument function type 0.
+ PDFR_DEBUG {
+ (FunctionToProc20, Range = ) print dup /Range get ==
+ } if
+ dup /Order //knownget exec {
+ 1 ne {
+ (Underimplemented function Type 0 Order 3.) =
+ } if
+ } if
+ dup //StreamToArray exec % f
+ dup /Range get length dup 2 eq {
+ pop //FunctionToProc_x01 exec % proc
+ } {
+ 2 idiv //FunctionToProc_x0n exec % proc
+ } ifelse
+} bind def
+
+/FunctionToProc % <function_dict> FunctionToProc <proc>
+{ //PDFR_DEBUG {
+ (FunctionToProc beg ) print count =
+ } if
+ dup /Domain get length 2 idiv
+ {
+ dup 1 eq {
+ pop //FunctionToProc1 exec exit
+ } if
+ dup 2 eq {
+ pop //FunctionToProc20 exec exit
+ } if
+ mark (Functions with many arguments aren't implemented yet.) //error exec
+ } loop
+ //PDFR_DEBUG {
+ (FunctionToProc end ) print count =
+ } if
+} bind def
+
+/spotfunctions mark % Copied from pdf_draw.ps
+ /Round {
+ abs exch abs 2 copy add 1 le {
+ dup mul exch dup mul add 1 exch sub
+ } {
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ } ifelse
+ }
+ /Diamond {
+ abs exch abs 2 copy add .75 le {
+ dup mul exch dup mul add 1 exch sub
+ } {
+ 2 copy add 1.23 le {
+ .85 mul add 1 exch sub
+ } {
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ } ifelse
+ } ifelse
+ }
+ /Ellipse {
+ abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt {
+ pop dup mul exch .75 div dup mul add 4 div 1 exch sub
+ } {
+ dup 1 gt {
+ pop 1 exch sub dup mul exch 1 exch sub
+ .75 div dup mul add 4 div 1 sub
+ } {
+ .5 exch sub exch pop exch pop
+ } ifelse
+ } ifelse
+ }
+ /EllipseA { dup mul .9 mul exch dup mul add 1 exch sub }
+ /InvertedEllipseA { dup mul .9 mul exch dup mul add 1 sub }
+ /EllipseB { dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub }
+ /EllipseC { dup mul .9 mul exch dup mul add 1 exch sub }
+ /InvertedEllipseC { dup mul .9 mul exch dup mul add 1 sub }
+ /Line { exch pop abs neg }
+ /LineX { pop }
+ /LineY { exch pop }
+ /Square { abs exch abs 2 copy lt { exch } if pop neg }
+ /Cross { abs exch abs 2 copy gt { exch } if pop neg }
+ /Rhomboid { abs exch abs 0.9 mul add 2 div }
+ /DoubleDot { 2 {360 mul sin 2 div exch } repeat add }
+ /InvertedDoubleDot { 2 {360 mul sin 2 div exch } repeat add neg }
+ /SimpleDot { dup mul exch dup mul add 1 exch sub }
+ /InvertedSimpleDot { dup mul exch dup mul add 1 sub }
+ /CosineDot { 180 mul cos exch 180 mul cos add 2 div }
+ /Double { exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add }
+ /InvertedDouble {
+ exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add neg
+ }
+.dicttomark readonly def
+
+% ===================== Color Spaces and Colors ==============
+
+/CheckColorSpace % <key> <val> CheckColorSpace <key> <val>
+{
+ dup type /arraytype ne {
+ mark (Resource ) 3 index ( must be an array.) //error exec
+ } if
+} bind def
+
+/SubstitutePDFColorSpaceRec % <array> SubstitutePDFColorSpace <array>
+{ 0 % Will be bound below
+ exec
+} bind def
+
+/SubstitutePDFColorSpace % <array> SubstitutePDFColorSpace <array>
+{ currentglobal true setglobal exch
+ {
+ dup 0 get /Pattern eq {
+ dup length 1 gt {
+ dup dup 1 //CheckColorSpace //ResolveA exec
+ dup type /nametype ne {
+ //SubstitutePDFColorSpaceRec exec
+ } if
+ 1 exch put
+ } if
+ exit
+ } if
+ dup 0 get /Indexed eq {
+ exit
+ } if
+ dup 0 get /Separation eq {
+ dup dup 2 //CheckColorSpace //ResolveA exec
+ dup type /nametype ne {
+ //SubstitutePDFColorSpaceRec exec
+ } if
+ 2 exch put
+ exit
+ } if
+ dup 0 get /CalGray eq {
+ 1 get % dict
+ dup /Gamma //knownget exec {
+ [ exch /exp load ] cvx
+ 1 index exch /DecodeLMN exch put
+ } if
+ [ exch /CIEBasedA exch ] % []
+ exit
+ } if
+ dup 0 get /CalRGB eq {
+ 1 get % dict
+ dup /Matrix //knownget exec {
+ 1 index exch /MatrixLMN exch put
+ } if
+ dup /Gamma //knownget exec {
+ aload pop
+ [ exch /exp load ] cvx
+ 3 1 roll
+ [ exch /exp load ] cvx
+ 3 1 roll
+ [ exch /exp load ] cvx
+ 3 1 roll
+ 3 array astore
+ 1 index exch /DecodeLMN exch put
+ } if
+ [ exch /CIEBasedABC exch ] % []
+ exit
+ } if
+ dup 0 get /Lab eq {
+ 1 get % dict
+ begin
+ currentdict /Range //knownget exec { aload pop } { -100 100 -100 100 } ifelse
+ 0 100 6 2 roll 6 array astore
+ /RangeABC exch def
+ /DecodeABC [{16 add 116 div} bind {500 div} bind {200 div} bind] def
+ /MatrixABC [1 1 1 1 0 0 0 0 -1] def
+ { dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse }
+ /DecodeLMN [
+ % Store white point implicitly inside procedures.
+ [ 3 index aload pop WhitePoint 0 get /mul load ] cvx
+ [ 4 index aload pop WhitePoint 1 get /mul load ] cvx
+ [ 5 index aload pop WhitePoint 2 get /mul load ] cvx
+ ] def pop
+ //PDFR_DEBUG {
+ (Constructed from Lab <<) =
+ currentdict { exch = == } forall
+ (>>) =
+ } if
+ [ /CIEBasedABC currentdict ] % []
+ end
+ exit
+ pop
+ } if
+ mark exch (Unimplemented color space ) exch //error exec
+ } loop
+ exch setglobal
+} bind def
+
+//SubstitutePDFColorSpaceRec 0 //SubstitutePDFColorSpace put
+
+/ResolveArrayElement % <array> <index> ResolveArrayElement <array>
+{ 2 copy get xcheck {
+ 2 copy get exec
+ 2 index 4 1 roll put
+ } {
+ pop
+ } ifelse
+} bind def
+
+/ResolveColorSpaceArrayRec % <color_space> ResolveColorSpaceArrayRec <color_space>
+{ 0 % Will be bond below.
+ exec
+} bind def
+
+/SetColorSpaceSafe % <color_space> SetColorSpaceSafe -
+{
+ % This works against applying a pattern over a pattern space,
+ % which may happen due to duplication of stroking and non-stroking colors.
+ % gs3.70 fails when setting a pattern space and
+ % the (old) current color space is a pattern space.
+ %
+ % If the new color space is an array and it appears equal to the old one,
+ % do nothing. Otherwise set the new color space.
+ PDFR_DEBUG {
+ (SetColorSpaceSafe beg) =
+ } if
+ currentcolorspace dup type /arraytype eq { % cs cs'
+ 1 index type /arraytype eq {
+ dup length 2 index length eq {
+ false exch % cs b cs'
+ dup length 0 exch 1 exch 1 sub { % cs b cs' i
+ dup % cs b cs' i i
+ 4 index exch get exch % cs b cs' csi i
+ 2 index exch get % cs b cs' csi cs'i
+ ne { % cs b cs'
+ exch pop true exch exit
+ } if
+ } for % cs b cs'
+ pop % cs b
+ {
+ setcolorspace
+ } {
+ pop
+ } ifelse %
+ } {
+ pop setcolorspace
+ } ifelse
+ } {
+ pop setcolorspace
+ } ifelse
+ } { % cs cs'
+ pop setcolorspace
+ } ifelse
+ PDFR_DEBUG {
+ (SetColorSpaceSafe end) =
+ } if
+} bind def
+
+/ResolveColorSpaceArray % <color_space> ResolveColorSpaceArray <color_space>
+{
+ //PDFR_DEBUG {
+ (ResolveColorSpaceArray beg ) print dup ==
+ } if
+ currentglobal true setglobal exch
+ dup 0 get /Indexed eq {
+ 1 //ResolveArrayElement exec
+ dup dup 1 get
+ dup type /arraytype eq {
+ //SubstitutePDFColorSpace exec
+ //ResolveColorSpaceArrayRec exec
+ 1 exch put
+ } {
+ pop pop
+ } ifelse
+ } if
+ dup 0 get /Separation eq {
+ 3 //ResolveArrayElement exec
+ dup 3 get //FunctionToProc exec
+ 2 copy 3 exch put
+ pop
+ } if
+ PDFR_DEBUG {
+ (Construcrted color space :) =
+ dup ==
+ } if
+ exch setglobal
+ //PDFR_DEBUG {
+ (ResolveColorSpaceArray end ) print dup ==
+ } if
+} bind def
+
+//ResolveColorSpaceArrayRec 0 //ResolveColorSpaceArray put
+
+/ResolveColorSpace % <name> ResolveColorSpace <color_space>
+{
+ //PDFR_DEBUG {
+ (ResolveColorSpace beg ) print dup =
+ } if
+ dup //SimpleColorSpaceNames exch known not {
+ dup //PDFColorSpaces exch //knownget exec {
+ exch pop
+ //PDFR_DEBUG {
+ (ResolveColorSpace known ) =
+ } if
+ } {
+ dup % n n
+ //PDFReader /CurrentObject get /Context get /Resources get
+ /ColorSpace //DoNothing //ResolveD exec
+ exch //CheckColorSpace //ResolveD exec % n cs
+ dup type /arraytype eq {
+ //SubstitutePDFColorSpace exec
+ //ResolveColorSpaceArray exec
+ dup //PDFColorSpaces 4 2 roll put % []
+ } if
+ } ifelse
+ } if
+ //PDFR_DEBUG {
+ (ResolveColorSpace end ) print dup ==
+ } if
+} bind def
+
+/CheckPattern % <key> <val> CheckPattern <key> <val>
+{
+ dup /PatternType //knownget exec {
+ dup 1 ne {
+ mark (Resource ) 4 index ( is a shading, which can't be handled at level 2. ) //error exec
+ } if
+ pop
+ } if
+ dup /Type get /Pattern ne {
+ mark (Resource ) 4 index ( must have /Type/Pattern .) //error exec
+ } if
+} bind def
+
+/PaintProc %
+{ /Context get % pattern_object
+ //RunDelayedStream exec
+} bind def
+
+/ResolvePattern % <name> ResolvePattern <pattern>
+{
+ dup % n n
+ % Since makepattern makes a local dictionary,
+ % we cahche them in userdict, which is in local VM.
+ % Assuming unique resource name through the document
+ userdict /PDFR_Patterns get % n n d
+ exch //knownget exec { % n p
+ exch pop % p
+ } { % n
+ dup % n n
+ //PDFReader /CurrentObject get /Context get /Resources get
+ /Pattern //DoNothing //ResolveD exec
+ exch //CheckPattern //ResolveD exec % n o
+ dup dup /Context exch put
+ dup /Resources //DoNothing //ResolveD exec pop
+ dup /PaintProc //PaintProc put
+ gsave userdict /PDFR_InitialGS get setgstate
+ currentglobal exch false setglobal % gs3_70 compatibility
+ dup /Matrix get
+ makepattern % n p
+ exch setglobal % gs3_70 compatibility
+ grestore
+ dup userdict /PDFR_Patterns get % n p p d
+ 4 2 roll % p d n p
+ put % p
+ } ifelse
+} bind def
+
+/SetColor % Same arguments and result as for scn
+{ //PDFR_DEBUG {
+ (SetColor beg) =
+ } if
+ currentcolorspace dup type /nametype eq {
+ pop setcolor
+ } {
+ 0 get /Pattern eq {
+ //ResolvePattern exec setpattern
+ } {
+ setcolor
+ } ifelse
+ } ifelse
+ //PDFR_DEBUG {
+ (SetColor end) =
+ } if
+} bind def
+
+% ===================== Images ===============================
+
+/ImageKeys 15 dict begin
+ /BPC /BitsPerComponent def
+ /CS /ColorSpace def
+ /D /Decode def
+ /DP /DecodeParms def
+ /F /Filter def
+ /H /Height def
+ /IM /ImageMask def
+ % /Intent is undefined - pdfwrite must take care of.
+ /I /Interpolate def
+ /W /Width def
+currentdict end readonly def
+
+/ImageValues 15 dict begin
+ /G /DeviceGray def
+ /RGB /DeviceRGB def
+ /CMYK /DeviceCMYK def
+ /I /Indexed def
+ /AHx /ASCIIHexDecode def
+ /A85 /ASCII85Decode def
+ /LZW /LZWDecode def
+ /Fl /FlateDecode def
+ /RL /RunLengthDecode def
+ /CCF /CCITTFaxDecode def
+ /DCT /DCTDecode def
+currentdict end readonly def
+
+/GetColorSpaceRange
+{ 2 index /ColorSpace get
+ dup type /arraytype eq {
+ 1 get
+ } if
+ exch //knownget exec {
+ exch pop
+ } if
+} bind def
+
+/DecodeArrays 15 dict begin
+ /DeviceGray { [0 1] } def
+ /DeviceRGB { [0 1 0 1 0 1] } def
+ /DeviceCMYK { [0 1 0 1 0 1 0 1] } def
+ /Indexed { dup /ColorSpace get 2 get [ exch 0 exch ] } def
+ /Separation { [0 1] } def
+ /CIEBasedA { [0 1] /RangeA //GetColorSpaceRange exec } def
+ /CIEBasedABC { [0 1 0 1 0 1] /RangeABC //GetColorSpaceRange exec } def
+currentdict end readonly def
+
+/Substitute % <key> <dict> Substitute <key>
+{ 1 index //knownget exec {
+ exch pop
+ } if
+} bind def
+
+/DebugImagePrinting % <image_dict> DebugImagePrinting <image_dict>
+{
+ //PDFR_DEBUG {
+ (Image :) =
+ dup { exch //=only exec ( ) print ==
+ } forall
+ } if
+} bind def
+
+/CompleteImage % <dict> CompleteImage <image_dict>
+{
+ dup /ColorSpace known {
+ dup /ColorSpace //CheckColorSpace //ResolveD exec pop
+ } if
+ dup /Decode known not {
+ dup /ColorSpace //knownget exec {
+ dup type /arraytype eq {
+ 0 get
+ } if
+ //DecodeArrays exch get exec
+ } {
+ [0 1]
+ } ifelse
+ 1 index exch /Decode exch put
+ } if
+ dup /ImageMatrix [2 index /Width get 0 0 5 index /Height get neg
+ 0 7 index /Height get] put % Not sure why upside down ?
+ //DebugImagePrinting exec
+} bind def
+
+/CompleteInlineImage % <dict> CompleteInlineImage <image_dict>
+{
+ //PDFR_DEBUG {
+ (CompleteInlineImage beg) =
+ } if
+ dup /ImageType known not {
+ dup /ImageType 1 put
+ } if
+ dup length dict exch { % d key val
+ exch //ImageKeys //Substitute exec
+ dup /Filter eq {
+ exch //ImageValues //Substitute exec exch
+ } if
+ dup /ColorSpace eq {
+ exch
+ dup //ImageValues exch //knownget exec {
+ exch pop
+ } {
+ //ResolveColorSpace exec
+ } ifelse
+ exch
+ } if
+ exch
+ 2 index 3 1 roll put
+ } forall
+ //CompleteImage exec
+ dup /DataSource 2 copy get % d d /n f
+ 2 index //AppendFilters exec put
+ //PDFR_DEBUG {
+ (CompleteInlineImage end) =
+ } if
+} bind def
+
+/CompleteOutlineImage % <dict> CompleteOutlineImage <image_dict>
+{
+ currentglobal exch dup gcheck setglobal
+ //PDFR_DEBUG {
+ (CompleteOutlineImage beg) =
+ } if
+ % todo: ResetStreamReader if DataSource already exists.
+ dup dup //MakeStreamReader exec /DataSource exch put
+ dup /ImageType known not {
+ //CompleteImage exec
+ dup /ImageType 1 put
+ dup /ColorSpace known {
+ dup /ColorSpace //CheckColorSpace //ResolveD exec
+ dup type /arraytype eq {
+ //ResolveColorSpaceArray exec
+ //SubstitutePDFColorSpace exec
+ 1 index exch /ColorSpace exch put
+ } {
+ pop
+ } ifelse
+ } if
+ } if
+ //PDFR_DEBUG {
+ (CompleteOutlineImage end) =
+ } if
+ exch setglobal
+} bind def
+
+/DoImage % <image_dict> DoImage -
+{
+ //PDFR_DEBUG {
+ (DoImage beg) =
+ } if
+ gsave
+ dup /ColorSpace //knownget exec { setcolorspace } if
+ dup /ImageMask //knownget exec not { false } if
+ { imagemask } { image } ifelse
+ grestore
+ //PDFR_DEBUG {
+ (DoImage end) =
+ } if
+} bind def
+
+% ===================== Viewer State ===============
+
+/GSave % - GSave -
+{
+ gsave
+ //PDFReader /GraphicStateStackPointer get
+ dup //GraphicStateStack exch get null eq {
+ currentglobal true setglobal exch
+ dup //GraphicStateStack exch //InitialGraphicState length dict put
+ exch setglobal
+ } if
+ dup //GraphicStateStack exch get
+ //GraphicState exch copy pop
+ 1 add //PDFReader exch /GraphicStateStackPointer exch put
+} bind def
+
+/GRestore % - GRestore -
+{
+ grestore
+ //PDFReader /GraphicStateStackPointer get
+ 1 sub dup
+ //PDFReader exch /GraphicStateStackPointer exch put
+ //GraphicStateStack exch get
+ //GraphicState copy pop
+} bind def
+
+
+% ===================== Interpret Data Streams ===============
+
+/SetFont % <resource_name> <size> SetFont -
+{ dup //GraphicState exch /FontSize exch put
+ //ResolveAndSetFont exec
+} bind def
+
+/ShowText % <string> ShowText -
+{ //GraphicState /TextRenderingMode get 0 eq {
+ //GraphicState /WordSpacing get 0
+ 32
+ //GraphicState /CharacterSpacing get 0
+ 6 5 roll awidthshow
+ } {
+ //GraphicState /CharacterSpacing get 0 eq
+ //GraphicState /WordSpacing get 0 eq and {
+ true charpath
+ } {
+ % Emulate with "{ charpath } cshow".
+ % Not sure how it works with CID fonts.
+ { % c wx wy
+ currentpoint 5 4 roll % wx wy x y c
+ ( ) dup 0 3 index put true charpath % wx wy x y c
+ 5 1 roll % c wx wy x y
+ moveto rmoveto % c
+ //GraphicState /CharacterSpacing get 0 rmoveto % c
+ 32 eq { %
+ //GraphicState /WordSpacing get 0 rmoveto
+ } if
+ }
+ exch cshow
+ } ifelse
+ } ifelse
+} bind def
+
+/ShowTextBeg % - ShowTextBeg -
+{ //GraphicState /TextRenderingMode get 0 ne {
+ currentpoint newpath moveto
+ } if
+} bind def
+
+/ShowTextEnd % - ShowTextEnd -
+{ //GraphicState /TextRenderingMode get
+ { dup 1 eq {
+ stroke exit
+ } if
+ dup 2 eq {
+ gsave fill grestore stroke exit
+ } if
+ dup 3 eq {
+ currentpoint newpath moveto
+ } if
+ dup 4 eq {
+ gsave fill grestore clip exit
+ } if
+ dup 5 eq {
+ gsave stroke grestore clip exit
+ } if
+ dup 6 eq {
+ gsave fill grestore gsave stroke grestore fill exit
+ } if
+ dup 7 eq {
+ clip exit
+ } if
+ exit
+ } loop
+ pop
+} bind def
+
+/ShowTextWithGlyphPositioning % <array> ShowTextWithGlyphPositioning -
+{ //ShowTextBeg exec
+ { dup type /stringtype eq {
+ //ShowText exec
+ } {
+ neg 1000 div //GraphicState /FontSize get mul 0 rmoveto
+ } ifelse
+ } forall
+ //ShowTextEnd exec
+} bind def
+
+/CheckFont % key val CheckFont key val
+{ dup /Type get /ExtGState ne {
+ mark (Resource ) 3 index ( must have /Type/ExtGState.) //error exec
+ } if
+} bind def
+
+/SetTransfer % <operand> SetTransfer -
+{
+ //PDFR_DEBUG { (SetTransfer beg ) print count = } if
+ dup type /arraytype eq 1 index xcheck not and {
+ 0 4 getinterval aload pop
+ setcolortransfer
+ } {
+ settransfer
+ } ifelse
+ //PDFR_DEBUG { (SetTransfer end ) print count = } if
+} bind def
+
+/CheckExtGState % <id> <obj> CheckExtGState <id> <obj>
+{ dup /Type get /ExtGState ne {
+ mark (Resource ) 3 index ( must have /Type/ExtGState.) //error exec
+ } if
+} bind def
+
+/CheckHalftone % <id> <obj> CheckHalftone <id> <obj>
+{ dup /HalftoneType known not {
+ mark (Resource ) 3 index ( must have /HalftoneType.) //error exec
+ } if
+} bind def
+
+/ResolveFunction % <dict> <name> ResolveFunction <dict> <proc>
+{
+ //PDFR_DEBUG { (ResolveFunction beg ) print dup = count = } if
+ 2 copy get //IsObjRef exec {
+ 2 copy //DoNothing //ResolveD exec
+ 3 copy put pop
+ } if
+ 2 copy get dup type /arraytype eq exch xcheck and not {
+ 2 copy get
+ dup type /arraytype eq 1 index xcheck not and {
+ dup length 1 sub -1 0 {
+ 2 copy //DoNothing ResolveA
+ dup /Identity eq {
+ pop 2 copy {} put
+ } {
+ //FunctionToProc exec
+ 3 copy put pop
+ } ifelse
+ pop
+ } for
+ } {
+ dup /Default eq {
+ % Leave it. ExtGState methods will resolve.
+ } {
+ dup /Identity eq {
+ pop {}
+ } { dup type /nametype eq {
+ //spotfunctions exch get
+ } {
+ //FunctionToProc exec
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ 3 copy put
+ exch pop
+ } {
+ 1 index exch get
+ } ifelse
+ //PDFR_DEBUG { (ResolveFunction end ) print dup == count = } if
+} bind def
+
+/ResolveFunctionSafe % <dict> <name> ResolveFunctionSafe <dict>
+{ 2 copy known {
+ //ResolveFunction exec
+ } if
+ pop
+} bind def
+
+/CreateHalftoneThresholds % <halftone_dict> CreateHalftoneThresholds <halftone_dict>
+{
+ dup /Thresholds known not {
+ dup /HalftoneType get 10 eq {
+ dup dup //MakeStreamReader exec
+ /Thresholds exch put
+ } if
+ dup /HalftoneType get dup 3 eq exch 6 eq or {
+ dup dup //MakeStreamReader exec
+ //BlockBuffer readstring pop
+ dup length
+ dup 0 eq {
+ mark (Could not read Thresholds) //error exec
+ } if
+ string copy /Thresholds exch put
+ dup /HalftoneType 3 put % replace Type 6 with Type 3.
+ } if
+ } if
+} bind def
+
+
+/SetExtGState % <name> SetExtGState -
+{
+ //PDFReader /CurrentObject get /Context get /Resources get
+ /ExtGState //DoNothing //ResolveD exec
+ exch //CheckExtGState //ResolveD exec % s gs
+ dup /LW //knownget exec {
+ setlinewidth
+ } if
+ dup /LC //knownget exec {
+ setlinecap
+ } if
+ dup /LJ //knownget exec {
+ setlinejoin
+ } if
+ dup /ML //knownget exec {
+ setmeterlimit
+ } if
+ dup /D //knownget exec {
+ setdash
+ } if
+ dup /RI //knownget exec {
+ % Ghostscript never writes it.
+ mark (Unimplemented ExtGState.RI) //error exec
+ } if
+ dup /OP //knownget exec {
+ % pdfwrite must take care of stroking/filling
+ setoverprint
+ } if
+ dup /op //knownget exec {
+ setoverprint
+ } if
+ dup /OPM //knownget exec {
+ % pdfwrite must take care of.
+ mark (Unimplemented ExtGState.OPM) //error exec
+ } if
+ dup /Font //knownget exec {
+ % Ghostscript never writes it.
+ mark (Unimplemented ExtGState.Font) //error exec
+ } if
+ dup /BG known {
+ /BG //ResolveFunction exec
+ setblackgeneration
+ } if
+ dup /BG2 known {
+ /BG2 //ResolveFunction exec
+ dup /Default eq {
+ //InitialExtGState /BG2 get
+ } if
+ setblackgeneration
+ } if
+ dup /UCR known {
+ /UCR //ResolveFunction exec
+ setundercolorremoval
+ } if
+ dup /UCR2 known {
+ /UCR2 //ResolveFunction exec
+ dup /Default eq {
+ //InitialExtGState /UCR2 get
+ } if
+ setundercolorremoval
+ } if
+ dup /TR known {
+ /TR //ResolveFunction exec
+ //SetTransfer exec
+ } if
+ dup /TR2 known {
+ /TR2 //ResolveFunction exec
+ dup /Default eq {
+ pop //InitialExtGState /TR2 get
+ aload pop setcolortransfer
+ } {
+ //SetTransfer exec
+ } ifelse
+ } if
+ dup /HT //knownget exec {
+ dup /Default eq {
+ pop //InitialExtGState /HT get
+ sethalftone
+ } {
+ //PDFR_DEBUG { (Ht beg) = } if
+ pop dup /HT //CheckHalftone //ResolveD exec
+ /SpotFunction //ResolveFunctionSafe exec
+ /TransferFunction //ResolveFunctionSafe exec
+ null exch
+ dup /HalftoneType get dup 5 eq exch dup 4 eq exch 2 eq or or {
+ dup { % null h n v
+ dup //IsObjRef exec {
+ pop
+ 1 index exch //CheckHalftone ResolveD
+ } if
+ dup type /dicttype eq {
+ dup /SpotFunction //ResolveFunctionSafe exec
+ /TransferFunction //ResolveFunctionSafe exec
+ //CreateHalftoneThresholds exec
+ dup /HalftoneType get 5 gt { % null h n v
+ 4 3 roll pop
+ dup 4 1 roll
+ } if
+ } if
+ pop pop
+ } forall
+ } if
+ //CreateHalftoneThresholds exec
+ //PDFR_DEBUG {
+ (HT:)=
+ dup {
+ 1 index /Default eq {
+ (Default <<)=
+ exch pop
+ { exch = == } forall
+ (>>)=
+ } {
+ exch = ==
+ } ifelse
+ } forall
+ (HT end)= flush
+ } if
+ exch dup null ne {
+ (Warning: Ignoring a halftone with a Level 3 component halftone Type ) print dup /HalftoneType get =
+ pop pop
+ } {
+ pop
+ dup /HalftoneType get 5 gt {
+ (Warning: Ignoring a Level 3 halftone Type ) print dup /HalftoneType get =
+ pop
+ } {
+ sethalftone
+ } ifelse
+ } ifelse
+ //PDFR_DEBUG { (HT set)= flush } if
+ } ifelse
+ } if
+ dup /FL //knownget exec {
+ setflattness
+ } if
+ dup /SM //knownget exec {
+ setsmoothness
+ } if
+ dup /SA //knownget exec {
+ setstrokeadjust
+ } if
+ dup /BM //knownget exec {
+ % pdfwrite must take care of.
+ mark (Unimplemented ExtGState.BM) //error exec
+ } if
+ dup /SMask //knownget exec {
+ % pdfwrite must take care of.
+ mark (Unimplemented ExtGState.SMask) //error exec
+ } if
+ dup /CA //knownget exec {
+ % pdfwrite must take care of.
+ mark (Unimplemented ExtGState.CA) //error exec
+ } if
+ dup /ca //knownget exec {
+ % pdfwrite must take care of.
+ mark (Unimplemented ExtGState.ca) //error exec
+ } if
+ dup /AIS //knownget exec {
+ % pdfwrite must take care of.
+ mark (Unimplemented ExtGState.AIS) //error exec
+ } if
+ dup /TK //knownget exec {
+ % pdfwrite must take care of.
+ mark (Unimplemented ExtGState.TK) //error exec
+ } if
+ pop
+} bind def
+
+/CheckXObject % <id> <obj> CheckHalftone <id> <obj>
+{ dup /Subtype get dup /Image ne exch dup /Form ne exch /PS ne and and {
+ mark (Resource ) 3 index ( must have /Subtype /Image or /Form or /PS.) //error exec
+ } if
+} bind def
+
+/DoXObject % <name> DoXObject -
+{
+ //PDFReader /CurrentObject get /Context get /Resources get
+ /XObject //DoNothing //ResolveD exec
+ exch //CheckXObject //ResolveD exec
+ dup /Subtype get
+ dup /Image eq {
+ pop
+ //CompleteOutlineImage exec
+ //DoImage exec
+ } {
+ dup /PS eq {
+ PDFR_DEBUG {
+ (Executing a PS Xobject) =
+ } if
+ pop
+ //RunDelayedStream exec
+ } {
+ dup /Form eq {
+ pop
+ PDFR_DEBUG {
+ (Executing a Form XObject) =
+ } if
+ //PDFReader /CurrentObject get exch
+ dup //PDFReader exch << exch /Context exch >> /CurrentObject exch put
+ dup /Matrix get concat
+ dup /BBox get aload pop exch 3 index sub exch 2 index sub rectclip
+ //RunDelayedStream exec
+ //PDFReader exch /CurrentObject exch put
+ } {
+ mark exch (unimplemented XObject type ) exch //error exec
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+/Operators 50 dict begin
+ /q { //GSave exec } bind def
+ /Q { //GRestore exec } bind def
+ /cm { //TempMatrix astore concat } bind def
+ /i { 1 .min setflat } bind def
+ /J /setlinecap load def
+ /d /setdash load def
+ /j /setlinejoin load def
+ /w /setlinewidth load def
+ /M /setmiterlimit load def
+ /gs { SetExtGState } bind def
+
+ /g /setgray load def
+ /rg /setrgbcolor load def
+ /k /setcmykcolor load def
+ /cs { //ResolveColorSpace exec //SetColorSpaceSafe exec
+ } bind def
+ /sc /setcolor load def
+ /scn { //SetColor exec } bind def
+ /G /setgray load def
+ /RG /setrgbcolor load def
+ /K /setcmykcolor load def
+ /CS //cs def
+ /ri { SetColorRenderingIntent } bind def
+ /SC /setcolor load def
+ /SCN { //SetColor exec } bind def
+
+ /m /moveto load def
+ /l /lineto load def
+ /c /curveto load def
+ /v { currentpoint 6 2 roll curveto } bind def
+ /y { 2 copy curveto } bind def
+ /re {
+ 4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
+ closepath
+ } def
+ /h /closepath load def
+ /n /newpath load def
+ /S /stroke load def
+ /s { closepath stroke } bind def
+ /f /fill load def
+ /f* /eofill load def
+ /B { gsave fill grestore stroke } bind def
+ /b { closepath gsave fill grestore stroke } bind def
+ /B* { gsave eofill grestore stroke } bind def
+ /b* { closepath gsave eofill grestore stroke } bind def
+ /W /clip load def
+ /W* /eoclip load def
+ /sh { % Reserved for ps3write.
+ ResolveShading
+ dup /Background known {
+ gsave
+ dup /ColorSpace get setcolorspace
+ dup /Background get aload pop setcolor
+ pathbbox % x0 y0 x1 y1
+ 2 index sub exch 3 index sub exch
+ rectfill
+ grestore
+ } if
+ shfill
+ } bind def
+
+ /Do { //DoXObject exec } bind def
+
+ /BI { currentglobal false setglobal << } bind def
+ /ID { >>
+ dup /DataSource currentfile
+ % HACK BEG
+ % This hack provides a compatibility to HP LaserJet 1320,
+ % which sometimes closes the underlying stream when EOD
+ % is reached in the ASCII85Decode filter.
+ % This portion is not required by the Postscript language definition.
+ 2 index /F //knownget exec {
+ /A85 eq {
+ 0 (~>) /SubFileDecode filter
+ } if
+ } if
+ % HACK END
+ put
+ //CompleteInlineImage exec
+ exch setglobal
+ //DoImage exec
+ } bind def
+ /EI {} bind def
+
+ /BT { gsave //GraphicState /InitialTextMatrix get currentmatrix pop } bind def
+ /ET { grestore } bind def
+ /Tc { //GraphicState exch /CharacterSpacing exch put } bind def
+ /TL { //GraphicState exch /TextLeading exch put } bind def
+ /Tr { //GraphicState exch /TextRenderingMode exch put } bind def
+ /Ts { % Ghostscript never generates it.
+ mark (Unimplemented SetTextRise) //error exec
+ } bind def
+ /Tw { //GraphicState exch /WordSpacing exch put } bind def
+ /Tz { % Ghostscript never generates it.
+ mark (Unimplemented SetHorizontalTextScaling) //error exec
+ } bind def
+ /Td { translate 0 0 moveto } bind def
+ /TD { dup neg //TL exec //Td exec } bind def
+ /Tm { //GraphicState /InitialTextMatrix get setmatrix
+ //TempMatrix astore concat
+ 0 0 moveto } bind def
+ /T* { 0 //GraphicState /TextLeading get neg //Td exec } bind def
+ /Tj { //ShowTextBeg exec //ShowText exec //ShowTextEnd exec } bind def
+ /' { //T* exec //ShowText exec //ShowTextEnd exec } bind def
+ /" { 3 2 roll //Tw exec exch //Tc exec //' exec} bind def
+ /TJ //ShowTextWithGlyphPositioning def
+ /Tf //SetFont def
+
+ /d0 /setcharwidth load def
+ /d1 /setcachedevice load def
+
+ /BDC { BeginMarkedContentSequenceWithPropertyList } bind def
+ /BMC { BeginMarkedContentSequence } bind def
+ /EMC { EndMarkedContentSequence } bind def
+ /BX { BeginCompatibilitySection } bind def
+ /EX { EndCompatibilitySection } bind def
+ /DP { DefineMarkedContentPointWithPropertyList } bind def
+ /MP { DefineMarkedContentPoint } bind def
+ /PS { cvx exec } bind def
+currentdict end def
+
+//PDFR_STREAM {
+ % Rebind operators with a debug tracing.
+ //Operators length dict begin
+ //Operators { % n p
+ exch dup % p n n
+ [ exch //=only /exec load % p n [ n =only exec
+ ( ) /print load % p n [ n =only exec () print
+ 8 7 roll % n [ n =only exec () print p
+ dup type /arraytype eq {
+ /exec load % n [ n =only exec () print p exec
+ } if
+ ( ) /print load
+ ] cvx % n {}
+ def
+ } forall
+ currentdict end /Operators exch def
+} if
+
+% Functions for handling Ghostscript library files that define encodings.
+
+/.registerencoding
+{ pop pop
+} bind def
+
+/.defineencoding
+{ def
+} bind def
+
+/.findencoding
+{ load
+} bind def
+
+
+% Leaving the procset on the dictionary stack to provide
+% definitions of obj, endobj, stream, endstream, R, xref.
+%%EndPrologue
+
diff --git a/Master/tlpkg/tlgs/lib/packfile.ps b/Master/tlpkg/tlgs/lib/packfile.ps
new file mode 100644
index 00000000000..549ca5b7294
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/packfile.ps
@@ -0,0 +1,333 @@
+% Copyright (C) 1994, 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: packfile.ps 6300 2005-12-28 19:56:24Z giles $
+% packfile.ps
+% Pack groups of files together, with compression, for use in
+% storage-scarce environments.
+
+% ****** NOTE: This file must be kept consistent with gs_pfile.ps.
+
+% ---------------- Huffman coding utilities ---------------- %
+
+% We count runs of zeros, and individual byte frequencies separately
+% depending on whether they follow or do not follow a run of zeros.
+/zruns 256 array def
+/zfreq 256 array def
+/nzfreq 256 array def
+/maxcode 13 def % max code length, must be between 10 and 16
+/maxzrun 100 def % max length of zero run, must be <= 100
+/statbuf 10000 string def
+
+% Initialize statistics.
+/initstats % - initstats -
+ { 0 1 255 { zruns exch 0 put } for
+ 0 1 255 { zfreq exch 0 put } for
+ 0 1 255 { nzfreq exch 0 put } for
+ } bind def
+
+% Accumulate statistics from an individual file.
+/addstats % <file> addstats -
+ { 0
+ { 1 index //statbuf readstring 3 1 roll
+ % Stack: file eof numzeros data
+ { dup 0 eq
+ { pop 1 add
+ }
+ { 1 index 0 ne
+ { exch 255 .min
+ //zruns exch 2 copy get 1 add put
+ 0 exch //zfreq
+ }
+ { //nzfreq
+ }
+ ifelse
+ exch 2 copy get 1 add put
+ }
+ ifelse
+ } forall
+ exch not { exit } if (.) print flush
+ } loop
+ pop closefile
+ } bind def
+
+% Compute the Huffman codes from the statistics.
+/statcodes % - statcodes <array>
+ { maxcode 1 add 256 add maxzrun 2 sub add 1 add array % full array
+ dup maxcode 1 add dup 2 index length exch sub getinterval % data
+ % Put statistics into array
+ dup 0 1 255
+ { zfreq 1 index get nzfreq 2 index get add put dup
+ } for
+ 0 zruns 1 get put
+ 256 zruns 2 maxzrun 2 sub getinterval putinterval
+ dup dup length 1 sub 1 put % EOD
+ maxcode .computecodes
+ } bind def
+
+% ---------------- File handling ---------------- %
+
+% Copy one file to another.
+% Close the input file, but not the output file.
+/copyfile % <infile> <outfile> copyfile <outfile> <length>
+ { 0 mark statbuf
+ { 4 index 1 index readstring
+ exch 5 index 1 index writestring
+ length 5 -1 roll add 4 1 roll
+ not { exit } if (.) print flush
+ } loop
+ cleartomark 3 -1 roll closefile dup == flush
+ } bind def
+
+% Represent a Type 1 font in its most compressed format.
+% Requires -dWRITESYSTEMDICT to run.
+% Does not close the output file.
+(wrfont.ps) runlibfile
+/compressfont % <fontname> <outfile> compressfont <outfile>
+ { exch save
+ systemdict /executeonly /readonly load put
+ systemdict /noaccess /readonly load put
+ systemdict readonly pop
+ wrfont_dict begin
+ /binary_CharStrings true def
+ /binary_tokens true def
+ /encrypt_CharStrings false def
+ /standard_only false def
+ /use_lenIV 0 def
+ /smallest_output true def
+ end
+ exch findfont setfont
+ 1 index writefont
+ restore
+ } bind def
+
+% ---------------- Main program ---------------- %
+
+% Find the length of a file.
+/filelength % <filename> filelength <length>
+ { status { pop pop exch pop } { -1 } ifelse
+ } bind def
+
+% Define the header string for a compressed file.
+/beginfilestring
+({dup token pop exch[/MaxCodeLength 2 index token pop/Tables 4 index token pop
+/EndOfData true/EncodeZeroRuns 256 .dicttomark
+/BoundedHuffmanDecode filter/MoveToFrontDecode filter
+[/BlockSize 4 -1 roll .dicttomark/BWBlockSortDecode filter
+}) readonly def
+
+% Write a 16-bit big-endian non-negative integer on a file.
+/write16 % <file> <int> write16 -
+ { 2 copy -8 bitshift write 255 and write
+ } bind def
+
+% Compress a group of files together.
+% Return a dictionary in which the keys are the input file names
+% and the values are [startpos length] in the uncompressed concatenation.
+% Does not open or close the output file.
+/tempname (t.em) def
+/packfiles % <filenames> <outfile> packfiles <outfile> <posdict>
+ { % Concatenate files to a temporary file.
+ tempname (w) file
+ dup /MoveToFrontEncode filter
+ dup <<
+ /BlockSize 1000000
+ >> /BWBlockSortEncode filter
+ % Stack: filenames outfile tempfile mtfe bwe
+ 5 -1 roll dup length dict 0 6 2 roll
+ { % Stack: outfile posdict pos tempfile mtfe bwe infilename
+ dup ==only dup (r) file 2 index copyfile exch pop
+ dup 7 index 4 2 roll 7 index exch 2 array astore put
+ 5 -1 roll add 4 1 roll
+ } forall
+ closefile closefile closefile pop exch
+ % Stack: posdict outfile
+ % Compute an optimal Huffman code.
+ initstats
+ tempname (r) file addstats
+ % Actually compress the file.
+ % Write the decompression information on the output first.
+ dup tempname filelength write==
+ dup maxcode write==
+ % Write the code table as a homogenous number array.
+ statcodes exch
+ dup 149 write dup 32 write dup 2 index length write16
+ exch { 2 copy write16 pop } forall
+ dup <<
+ /MaxCodeLength maxcode
+ /EndOfData true
+ /EncodeZeroRuns 256
+ /Tables statcodes
+ >> /BoundedHuffmanEncode filter
+ tempname (r) file exch copyfile pop closefile
+ exch
+ } bind def
+
+% Squeeze a font to a .cpf file in anticipation of compression.
+/squeezefont % <fontname> squeezefont <filename.cpf>
+ { dup type /nametype ne { cvn } if
+ dup
+ { dup type /stringtype eq { exit } if
+ Fontmap exch get
+ }
+ loop
+ % Stack: fontname filename
+ dup dup
+ { (.) search not { exit } if
+ exch pop exch 3 -1 roll pop
+ }
+ loop
+ % Stack: fontname filename noextname extension
+ exch
+ { (/) search not { (\\) search not { exit } if } if
+ pop pop
+ }
+ loop
+ % If the font extension is anything other than
+ % .pfa or .pfb, we assume it can't be rewritten
+ % using compressfont.
+ % Stack: fontname filename extension basename
+ (.cpf) concatstrings dup 5 1 roll (w) file
+ % Stack: outfilename fontname filename extension outfile
+ exch dup (pfa) eq exch (pfb) eq or
+ % Stack: outfilename fontname filename outfile bool
+ { exch pop compressfont
+ }
+ { 3 -1 roll pop
+ exch findlibfile pop exch pop
+ exch copyfile pop
+ }
+ ifelse closefile
+ } bind def
+
+% ---------------- Production code ---------------- %
+
+% The following code constructs a packed version of the commercial-quality
+% fonts available from Aladdin Enterprises. To use this code:
+% - If desired, change the output file names below.
+% - Make sure you have the synthetic font data (fontmap.shs and the
+% *.ps files for the commercial fonts) in a directory that is on
+% Ghostscript's search path.
+% - Construct the packed fonts by running
+% gs -dNODISPLAY -dWRITESYSTEMDICT packfile.ps
+% - If desired, move the output files to the directory that will be
+% used at run time. You no longer need the *.pfb or *.ps files
+% for the original fonts; however, you do still need the Fontmap
+% for these fonts, because it defines the font name aliases.
+% - Add the following line to the end of gs_fonts.ps:
+% (ALL.cmp) run
+% (substituting the definition of allmapname if you changed it).
+
+% Define the output file names. The extensions are arbitrary;
+% any legal file name is allowed.
+/allname (ALL.cff) def % the compressed font file
+/allmapname (ALL.cmp) def % the Fontmap override file
+
+% Load an alternate Fontmap that references the synthetic oblique and
+% narrow fonts.
+true .setglobal
+(fontmap.shs) findlibfile pop exch pop .loadFontmap
+false .setglobal
+
+% Define the packaging of fonts into font groups.
+% Fewer larger groups compress better, but make decompression slower.
+/Lists [
+[ % The oblique and narrow fonts are synthetic,
+ % and take very little space.
+ /AvantGarde-BookOblique /AvantGarde-DemiOblique
+ /Courier-Oblique /Courier-BoldOblique
+ /Helvetica-Oblique /Helvetica-BoldOblique
+ /Helvetica-Narrow /Helvetica-Narrow-Oblique
+ /Helvetica-Narrow-Bold /Helvetica-Narrow-BoldOblique
+]
+[/AvantGarde-Book /AvantGarde-Demi
+ /Bookman-Light] [/Bookman-LightItalic
+ /Bookman-Demi /Bookman-DemiItalic
+ /Courier] [/Courier-Bold
+ /Helvetica /Helvetica-Bold]
+[/NewCenturySchlbk-Roman /NewCenturySchlbk-Italic
+ /NewCenturySchlbk-Bold /NewCenturySchlbk-BoldItalic]
+[/Palatino-Roman /Palatino-Italic
+ /Palatino-Bold /Palatino-BoldItalic]
+[/Times-Roman /Times-Italic
+ /Times-Bold /Times-BoldItalic]
+[/Symbol
+ /ZapfChancery-MediumItalic
+ /ZapfDingbats]
+] def
+
+% We need to register the fonts under their true names, not aliases.
+/Lists Lists mark exch
+ { mark exch
+ { { Fontmap 1 index get dup type /nametype ne { pop exit } if
+ exch pop
+ }
+ loop
+ }
+ forall ]
+ }
+forall ] def
+
+% Squeeze the fonts to their .cpf format.
+(Squeezing... ) print flush
+/fdict mark
+Lists
+ { { dup squeezefont } forall } forall
+.dicttomark def
+(done.\n) print flush
+
+% Invert fdict.
+/f2dict fdict length dict def
+fdict { exch f2dict 3 1 roll put } forall
+
+% Construct the compressed font file.
+(Creating ) print allname print (... ) print flush
+/posdict fdict length dict def
+/all allname (w) file def
+all beginfilestring writestring
+Lists
+ { dup == flush
+ /fbegin all fileposition def
+ mark exch { fdict exch get } forall ]
+ all packfiles exch pop
+ /flength all fileposition fbegin sub def
+ { fbegin flength 3 -1 roll aload pop 4 packedarray
+ exch f2dict exch get exch posdict 3 1 roll put
+ }
+ forall
+ }
+forall
+all closefile
+(done.\n) print flush
+
+% Write the Fontmap addendum for accessing compressed fonts.
+(Writing ) print allmapname print (... ) print flush
+allmapname (w) file
+dup (%!
+/.runpackedlibfile where{pop}{(gs_pfile.ps)runlibfile}ifelse
+.currentglobal true .setglobal
+) writestring
+posdict
+ { exch 2 index exch write==only exch dup ({) writestring
+ dup allname write==only
+ exch { 1 index dup ( ) writestring exch write==only } forall
+ dup ( .runpackedlibfile}bind .definefontmap
+) writestring
+ }
+forall
+dup (.setglobal
+) writestring
+closefile
+(done.\n) print flush
diff --git a/Master/tlpkg/tlgs/lib/pcharstr.ps b/Master/tlpkg/tlgs/lib/pcharstr.ps
new file mode 100644
index 00000000000..e85e23748c7
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pcharstr.ps
@@ -0,0 +1,126 @@
+% Copyright (C) 1990, 1992, 1997, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pcharstr.ps 6300 2005-12-28 19:56:24Z giles $
+% pcharstr.ps
+% Print the CharStrings and Subrs (if present) from a Type 1 font,
+% in either a PostScript-like or a C-compatible form,
+% depending on whether CSFormat is defined as /PS or /C.
+
+% Load the Type 1 utilities.
+(type1ops.ps) runlibfile
+
+% Define the printing procedures for PostScript-like output.
+/pcs_ps_dict mark
+ /, {( ) print}
+ /charname {==only}
+ /csbegin {}
+ /beginchars {(%---------------- CharStrings\n) print}
+ /charbegin {==only}
+ /char1 {( ) print ==only}
+ /endchars {}
+ /beginsubrs {(%---------------- Subrs\n) print}
+ /subrbegin {=only}
+ /endsubrs {}
+ /beginboxes {(%---------------- Encoding & metrics\n) print}
+ /notdefbox {}
+ /boxbegin {=only ( ) print}
+ /boxend {(\n) print}
+ /endboxes {(%----------------\n) print}
+.dicttomark readonly def
+
+% Define the printing procedures for C-like output.
+/pcs_c_dict mark
+ /, {(, ) print}
+ /charname {(") print =only (") print}
+ /csbegin {counttomark =only ,}
+ /beginchars {(\nconstdata int CSCharData[] = {\n) print}
+ /charbegin {pop}
+ /char1 {=only ,}
+ /endchars {
+ (-1\n};\nconstdata char *CSCharNames[] = {\n) print
+ CharStrings {pop charname ,} forall (0\n};\n) print
+ }
+ /beginsubrs {(\nconstdata int CSSubrs[] = {\n) print}
+ /subrbegin {pop}
+ /endsubrs {(-1\n};\n) print}
+ /beginboxes {(\nconstdata type1_box CSboxes[] = {\n) print}
+ /notdefbox {( {""},\n) print}
+ /boxbegin {pop ( {) print}
+ /boxend {(},) =}
+ /endboxes {( {0}\n};\n) print}
+.dicttomark readonly def
+
+/printcs
+ { dup type /stringtype eq
+ { printcs1 (\n) print }
+ { ( ) print == }
+ ifelse
+ } bind def
+/printcs1
+ { save exch
+ lenIV 0 ge {
+ 4330 exch dup length string .type1decrypt exch pop
+ dup length lenIV sub lenIV exch getinterval
+ } if
+ 0 () /SubFileDecode filter
+ mark exch charstack_read csbegin
+ counttomark 1 sub -1 0 { index char1 } for
+ cleartomark restore
+ } bind def
+
+/printfont
+ { pcs_ps_dict
+ /CSFormat where { pop CSFormat /C eq { pop pcs_c_dict } if } if
+ begin
+ currentfont begin Private begin 10 dict begin
+
+ % Print the CharStrings and Subrs
+
+ beginchars
+ CharStrings { exch charbegin printcs } forall
+ endchars
+ /Subrs where
+ { pop % the dictionary
+ beginsubrs
+ 0 1 Subrs length 1 sub
+ { dup subrbegin
+ Subrs exch get printcs
+ } for
+ endsubrs
+ } if
+
+ % Print the bounding boxes
+
+ gsave nulldevice FontMatrix matrix invertmatrix concat
+ beginboxes
+ 0 1 Encoding length 1 sub
+ { dup Encoding exch get dup /.notdef eq
+ { pop pop notdefbox
+ }
+ { 1 index boxbegin charname ,
+ ( ) dup 0 4 -1 roll put
+ newpath 0 0 moveto false charpath
+ pathbbox ({) print 4 -1 roll =only ,
+ 3 -1 roll =only , exch =only , =only (}) print
+ boxend
+ }
+ ifelse
+ } for
+ endboxes
+ grestore
+
+ end end end end
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/pdf2dsc.ps b/Master/tlpkg/tlgs/lib/pdf2dsc.ps
new file mode 100644
index 00000000000..a18d82f72ef
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf2dsc.ps
@@ -0,0 +1,251 @@
+% Copyright (C) 1994, 1995, 1996, 1997, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdf2dsc.ps 7838 2007-04-09 20:50:20Z alexcher $
+% pdf2dsc.ps
+% read pdf file and produce DSC "index" file.
+%
+% Input file is named PDFname
+% Output file is named DSCname
+%
+% Run using:
+% gs -dNODISPLAY -sPDFname=pdffilename -sDSCname=tempfilename pdf2dsc.ps
+% Then display the PDF file with
+% gs tempfilename
+%
+% Modified by Jason McCarty, bug 688071
+% Add PageLabels support.
+% Modified by Geoff Keating <geoffk@ozemail.com.au> 21/12/98:
+% Add DocumentMedia, PageMedia comments
+% Use inherited BoundingBox and Orientation
+% Reformat, add new macro 'puts', generally clean up
+% Modified by Johannes Plass <plass@dipmza.physik.uni-mainz.de> 1996-11-05:
+% Adds BoundingBox and Orientation if available.
+% Modified by rjl/lpd 9/19/96
+% Updates for compatibility with modified pdf_*.ps code for handling
+% page ranges (i.e., partial files) better.
+% Modified by Geoff Keating <Geoff.Keating@anu.edu.au> 7/3/96:
+% include Title and CreationDate DSC comments (these are displayed by
+% Ghostview);
+% reduce the size of typical output files by a factor of about 3.
+% Modified by L. Peter Deutsch 3/18/96:
+% Removes unnecessary and error-prone code duplicated from pdf_main.ps
+% Modified by L. Peter Deutsch for GS 3.33
+% Originally by Russell Lang 1995-04-26
+
+/PDFfile PDFname (r) file def
+/DSCfile DSCname (w) file def
+systemdict /.setsafe known { .setsafe } if
+
+/puts { DSCfile exch writestring } bind def
+/DSCstring 255 string def
+/MediaTypes 10 dict def
+
+ GS_PDF_ProcSet begin
+ pdfdict begin
+ PDFfile
+ pdfopen begin
+ /FirstPage where { pop } { /FirstPage 1 def } ifelse
+ /LastPage where { pop } { /LastPage pdfpagecount def } ifelse
+
+% scan through for media sizes, keep them in the dictionary
+ FirstPage 1 LastPage {
+ pdfgetpage /MediaBox pget pop % MediaBox is a required attribute
+ aload pop
+ 3 -1 roll sub 3 1 roll exch sub exch
+ 2 array astore
+ aload 3 1 roll 10 string cvs exch 10 string cvs
+ (x) 3 -1 roll concatstrings concatstrings cvn
+ MediaTypes 3 1 roll exch put
+ } for
+
+% write header and prolog
+ (%!PS-Adobe-3.0\n) puts
+ Trailer /Info knownoget
+ {
+ dup /Title knownoget
+ {
+ (%%Title: ) puts
+ DSCfile exch write==
+ }
+ if
+ /CreationDate knownoget
+ {
+ (%%CreationDate: ) puts
+ DSCfile exch write==
+ }
+ if
+ }
+ if
+ % This is really supposed to be sorted by frequency of usage...
+ (%%DocumentMedia: )
+ MediaTypes {
+ exch pop
+ 1 index puts
+ (y) puts dup 1 get DSCstring cvs puts
+ (x) puts dup 0 get DSCstring cvs puts
+ ( ) puts dup 0 get DSCstring cvs puts
+ ( ) puts 1 get DSCstring cvs puts
+ ( 70 white ()\n) puts
+ pop (%%+ )
+ } forall
+ pop
+
+ (%%Pages: ) puts
+ LastPage FirstPage sub 1 add DSCstring cvs puts
+ (\n%%EndComments\n) puts
+ (%%BeginProlog\n) puts
+ (/Page null def\n/Page# 0 def\n/PDFSave null def\n) puts
+ (/DSCPageCount 0 def\n) puts
+ (/DoPDFPage {dup /Page# exch store pdfgetpage pdfshowpage } def\n) puts
+ (GS_PDF_ProcSet begin\npdfdict begin\n) puts
+ (%%EndProlog\n) puts
+ (%%BeginSetup\n) puts
+ DSCfile PDFname write==only
+ ( \(r\) file { DELAYSAFER { .setsafe } if } stopped pop\n) puts
+ ( pdfopen begin\n) puts
+ (%%EndSetup\n) puts
+
+ /.hasPageLabels false def % see "Page Labels" in the PDF Reference
+ Trailer /Root knownoget {
+ /PageLabels knownoget {
+ /PageLabels exch def
+ /.pageCounter 1 def
+ /.pageCounterType /D def
+ /.pagePrefix () def
+
+ % (TEXT) .ToLower (text) -- convert text to lowercase -- only letters!
+ /.ToLower {
+ dup length 1 sub -1 0 {
+ 1 index exch 2 copy get 2#00100000 or put
+ } for
+ } def
+
+ % int .CvAlpha (int in alphabetic base 26) -- convert a positive
+ % integer to base 26 in capital letters, with 1=A; i.e. A..Z, AA..AZ, ...
+ /.CvAlpha { % using cvrs seems futile since this isn't zero-based ...
+ [ exch % construct an array of ASCII values, in reverse
+ { % the remainder stays on the top of stack
+ dup 0 eq { pop exit } if % quit if the value is zero
+ dup 26 mod dup 0 eq { 26 add } if % so that the division is correct
+ dup 64 add 3 1 roll sub 26 idiv % save the ASCII value and iterate
+ } loop ]
+ dup length dup string 3 1 roll
+ dup -1 1 { % put the letters in a string
+ 4 copy sub exch 4 -1 roll 1 sub get put
+ } for pop pop
+ } def
+
+ % int .CvRoman (int in capital Roman numerals)
+ % convert a positive integer to capital Roman numerals
+ % return a decimal string if >= 4000
+ /.CvRoman {
+ dup DSCstring cvs % start with the decimal representation
+ exch 4000 lt { % convert only if Roman numerals can represent this
+ dup length
+ [ [ () (I) (II) (III) (IV) (V) (VI) (VII) (VIII) (IX) ]
+ [ () (X) (XX) (XXX) (XL) (L) (LX) (LXX) (LXXX) (XC) ]
+ [ () (C) (CC) (CCC) (CD) (D) (DC) (DCC) (DCCC) (CM) ]
+ [ () (M) (MM) (MMM) ] ] % Roman equivalents
+ () % append the Roman equivalent of each decimal digit to this string
+ 2 index -1 1 {
+ 2 index 1 index 1 sub get
+ 5 index 5 index 4 -1 roll sub get
+ 48 sub get concatstrings
+ } for
+ 4 1 roll pop pop pop
+ } if
+ } def
+
+ /PageToString <<
+ /D { DSCstring cvs }
+ /R { .CvRoman }
+ /r { .CvRoman .ToLower }
+ /A { .CvAlpha }
+ /a { .CvAlpha .ToLower }
+ >> def
+ /.hasPageLabels true def
+ } if
+ } if
+
+ % process each page
+ FirstPage 1 LastPage {
+ (%%Page: ) puts
+
+ .hasPageLabels {
+ dup 1 sub PageLabels exch numoget dup null ne {
+ % page labels changed at this page, reset the values
+ dup /S known { dup /S get } { null } ifelse
+ /.pageCounterType exch def
+
+ dup /P known { dup /P get } { () } ifelse
+ /.pagePrefix exch def
+
+ dup /St known { /St get } { pop 1 } ifelse
+ /.pageCounter exch def
+ } { pop } ifelse
+
+ % output the page label
+ (\() .pagePrefix
+ PageToString .pageCounterType known { % format the page number
+ .pageCounter dup 0 gt { % don't try to format nonpositive numbers
+ PageToString .pageCounterType get exec
+ } {
+ DSCstring cvs
+ } ifelse
+ } { () } ifelse
+ (\)) concatstrings concatstrings concatstrings puts
+
+ /.pageCounter .pageCounter 1 add def
+ } {
+ dup DSCstring cvs puts
+ } ifelse
+ ( ) puts
+ dup DSCstring cvs puts
+ (\n) puts
+
+ dup pdfgetpage
+ dup /MediaBox pget pop
+ (%%PageMedia: y) puts
+ aload pop 3 -1 roll sub DSCstring cvs puts
+ (x) puts exch sub DSCstring cvs puts
+ (\n) puts
+ dup /CropBox pget {
+ (%%PageBoundingBox: ) puts
+ {DSCfile exch write=only ( ) puts} forall
+ (\n) puts
+ } if
+ /Rotate pget {
+ (%%PageOrientation: ) puts
+ 90 div cvi 4 mod dup 0 lt {4 add} if
+ [(Portrait) (Landscape) (UpsideDown) (Seascape)] exch get puts
+ (\n) puts
+ } if
+
+ DSCfile exch DSCstring cvs writestring
+ ( DoPDFPage\n) puts
+ } for
+ currentdict pdfclose
+ end
+ end
+ end
+% write trailer
+(%%Trailer\n) puts
+(currentdict pdfclose\nend\nend\nend\n) puts
+(%%EOF\n) puts
+% close output file and exit
+DSCfile closefile
+quit
+% end of pdf2dsc.ps
diff --git a/Master/tlpkg/tlgs/lib/pdf_base.ps b/Master/tlpkg/tlgs/lib/pdf_base.ps
new file mode 100644
index 00000000000..fa82ba31612
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf_base.ps
@@ -0,0 +1,1006 @@
+% Copyright (C) 1994-2006 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdf_base.ps 8022 2007-06-05 22:23:38Z giles $
+% pdf_base.ps
+% Basic parser for PDF reader.
+
+% This handles basic parsing of the file (including the trailer
+% and cross-reference table), as well as objects, object references,
+% streams, and name/number trees; it doesn't include any facilities for
+% making marks on the page.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+pdfdict begin
+
+% Define the name interpretation dictionary for reading values.
+/valueopdict mark
+ (<<) cvn { mark } bind % don't push an actual mark!
+ (>>) cvn { { .dicttomark } stopped {
+ ( **** File has an unbalanced >> \(close dictionary\).\n)
+ pdfformaterror
+ } if
+ } bind
+ ([) cvn { mark } bind % ditto
+ (]) cvn dup load
+% /true true % see .pdfexectoken below
+% /false false % ibid.
+% /null null % ibid.
+ /F dup cvx % see Objects section below
+ /R dup cvx % see Objects section below
+ /stream dup cvx % see Streams section below
+.dicttomark readonly def
+
+% ------ Utilities ------ %
+
+% Define a scratch string. The PDF language definition says that
+% no line in a PDF file can exceed 255 characters, but this string
+% is also used to search for %PDF-, which needs 1024 characters.
+/pdfstring 1024 string def
+
+% Read the previous line of a file. If we aren't at a line boundary,
+% read the line containing the current position.
+% Skip any blank lines.
+/prevline % - prevline <startpos> <substring>
+ { PDFfile fileposition dup () pdfstring
+ 2 index 257 sub 0 .max PDFfile exch setfileposition
+ { % Stack: initpos linepos line string
+ PDFfile fileposition
+ PDFfile 2 index readline pop
+ dup length 0 gt
+ { 3 2 roll 5 -2 roll pop pop 2 index }
+ { pop }
+ ifelse
+ % Stack: initpos linepos line string startpos
+ PDFfile fileposition 5 index ge { exit } if
+ pop
+ }
+ loop pop pop 3 -1 roll pop
+ } bind def
+
+% Handle the PDF 1.2 #nn escape convention when reading from a file.
+% This should eventually be done in C.
+/.pdffixname { % <execname> .pdffixname <execname'>
+ PDFversion 1.2 ge {
+ dup .namestring (#) search {
+ name#escape cvn exch pop
+ } {
+ pop
+ } ifelse
+ } if
+} bind def
+/name#escape % <post> <(#)> <pre> name#escape <string>
+{ exch pop
+ 1 index 2 () /SubFileDecode filter dup (x) readhexstring
+ % Stack: post pre stream char t/f
+ not { % tolerate, but complain about bad syntax
+ pop closefile (#) concatstrings exch
+ ( **** Warning: Invalid hex following '#' name escape, using literal '#' in name.\n)
+ pdfformaterror
+ } {
+ exch closefile concatstrings
+ exch 2 1 index length 2 sub getinterval
+ } ifelse
+ (#) search { name#escape } if concatstrings
+} bind def
+
+% Execute a file, interpreting its executable names in a given
+% dictionary. The name procedures may do whatever they want
+% to the operand stack.
+/.pdftokenerror { % <count> <opdict> <errtoken> .pdftokenerror -
+ BXlevel 0 le {
+ ( **** Unknown operator: ') pdfformaterror
+ dup =string cvs pdfformaterror
+ % Attempt a retry scan of the element after changing to PDFScanInvNum
+ << /PDFScanInvNum true >> setuserparams
+ =string cvs
+ token pop exch pop dup type
+ dup /integertype eq exch /realtype eq or {
+ exch pop exch pop
+ (', processed as number, value: ) pdfformaterror
+ dup =string cvs pdfformaterror (\n) pdfformaterror
+ << /PDFScanInvNum null >> setuserparams % reset to default scanning rules
+ false % suppress any stack cleanup
+ } {
+ % error was non-recoverable with modified scanning rules
+ ('\n) pdfformaterror
+ true
+ } ifelse
+ } {
+ true
+ } ifelse
+ { % clean up the operand stack if this was non-recoverable
+ pop pop count exch sub { pop } repeat % pop all the operands
+ } if
+} bind def
+/.pdfexectoken { % <count> <opdict> <exectoken> .pdfexectoken ?
+ PDFDEBUG {
+ pdfdict /PDFSTEPcount known not { pdfdict /PDFSTEPcount 1 .forceput } if
+ PDFSTEP {
+ pdfdict /PDFtokencount 2 copy .knownget { 1 add } { 1 } ifelse .forceput
+ PDFSTEPcount 1 gt {
+ pdfdict /PDFSTEPcount PDFSTEPcount 1 sub .forceput
+ } {
+ dup ==only
+ ( step # ) print PDFtokencount =only
+ ( ? ) print flush 1 false .outputpage
+ (%stdin) (r) file 255 string readline {
+ token {
+ exch pop pdfdict /PDFSTEPcount 3 -1 roll .forceput
+ } {
+ pdfdict /PDFSTEPcount 1 .forceput
+ } ifelse % token
+ } {
+ pop /PDFSTEP false def % EOF on stdin
+ } ifelse % readline
+ } ifelse % PDFSTEPcount > 1
+ } {
+ dup ==only () = flush
+ } ifelse % PDFSTEP
+ } if % PDFDEBUG
+ 2 copy .knownget {
+ exch pop exch pop exch pop exec
+ } {
+ % Normally, true, false, and null would appear in opdict
+ % and be treated as "operators". However, there is a
+ % special fast case in the PostScript interpreter for names
+ % that are defined in, and only in, systemdict and/or
+ % userdict: putting these three names in the PDF dictionaries
+ % destroys this property for them, slowing down their
+ % interpretation in all PostScript code. Therefore, we
+ % check for them explicitly here instead.
+ dup dup dup /true eq exch /false eq or exch /null eq or {
+ exch pop exch pop //systemdict exch get
+ } {
+ % Hackish fix to detect missing whitespace after "endobj". Yet another
+ % problem that (you guessed it!) Adobe Acrobat ignores silently
+ 256 string cvs (endobj) anchorsearch {
+ ( **** Missing whitespace after 'endobj'.\n) pdfformaterror
+ exch pop cvn get exch pop exec
+ } {
+ .pdftokenerror
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+/.pdfrun { % <file> <opdict> .pdfrun -
+ % Construct a procedure with the stack depth, file and opdict
+ % bound into it.
+ 1 index cvlit count 2 sub 3 1 roll mark mark 5 2 roll
+ { % Stack: ..operands.. count opdict file
+ { token } stopped {
+ dup type /filetype eq { pop } if % pop the operand if it is restored
+ ( **** Error reading a content stream. The page may be incomplete.\n)
+ pdfformaterror
+ //false
+ } if {
+ dup type /nametype eq {
+ dup xcheck {
+ .pdfexectoken
+ } {
+ .pdffixname
+ exch pop exch pop PDFDEBUG {
+ PDFSTEPcount 1 le {
+ dup ==only ( ) print flush
+ } if
+ } if
+ } ifelse
+ } {
+ exch pop exch pop PDFDEBUG {
+ PDFSTEPcount 1 le {
+ dup ==only ( ) print flush
+ } if
+ } if
+ } ifelse
+ } {
+ (%%EOF) cvn cvx .pdfexectoken
+ } ifelse
+ }
+ aload pop .packtomark cvx
+ /loop cvx 2 packedarray cvx
+ { stopped /PDFsource } aload pop
+ PDFsource
+ { store { stop } if } aload pop .packtomark cvx
+ /PDFsource 3 -1 roll store exec
+} bind def
+
+% Execute a file, like .pdfrun, for a marking context.
+% This temporarily rebinds LocalResources and DefaultQstate.
+/.pdfruncontext { % <resdict> <file> <opdict> .pdfruncontext -
+ /.pdfrun load LocalResources DefaultQstate
+ /LocalResources 7 -1 roll store
+ /DefaultQstate qstate store
+ 3 .execn
+ /DefaultQstate exch store
+ /LocalResources exch store
+} bind def
+
+% Get the depth of the PDF operand stack. The caller sets pdfemptycount
+% before calling .pdfrun or .pdfruncontext. It is initially set by
+% pdf_main, and is also set by any routine which changes the operand
+% stack depth (currently .pdfpaintproc, although there are other callers
+% of .pdfrun{context} which have not been checked for opstack depth.
+/.pdfcount { % - .pdfcount <count>
+ count pdfemptycount sub
+} bind def
+
+% Read a token, but simply return false (no token read) in the case of an
+% error. This is messy because 'token' either may or may not pop its operand
+% if an error occurs, and because the return values are different depending
+% on whether the source is a file or a string.
+/token_nofail { % <file|string> token_nofail false
+ % <file> token_nofail <token> true
+ % <string> token_nofail <post> <token> true
+ null 1 index % stack: source null source
+ { token } .internalstopped { % stack: source null [source]
+ null ne { pop } if pop false
+ } { % stack: source null ([post] token true | false)
+ { 1 index null eq { 3 1 } { 4 2 } ifelse roll pop pop true }
+ { pop pop false }
+ ifelse
+ } ifelse
+} bind def
+
+% ================================ Objects ================================ %
+
+% Since we may have more than 64K objects, we have to use a 2-D array to
+% hold them (and the parallel Generations structure).
+/lshift 9 def
+/lnshift lshift neg def
+/lsubmask 1 lshift bitshift 1 sub def
+/lsublen lsubmask 1 add def
+/larray { % - larray <larray>
+ [ [] ]
+} bind def
+/lstring { % - lstring <lstring>
+ [ () ]
+} bind def
+/ltype { % <lseq> type <type>
+ 0 get type
+} bind def
+/lget { % <lseq> <index> lget <value>
+ dup //lsubmask and 3 1 roll //lnshift bitshift get exch get
+} bind def
+/lput { % <lseq> <index> <value> lput -
+ 3 1 roll
+ dup //lsubmask and 4 1 roll //lnshift bitshift get
+ 3 1 roll put
+} bind def
+/llength { % <lseq> llength <length>
+ dup length 1 sub dup //lshift bitshift
+ 3 1 roll get length add
+} bind def
+% lgrowto assumes newlength > llength(lseq)
+/growto { % <string/array> <length> growto <string'/array'>
+ 1 index type /stringtype eq { string } { array } ifelse
+ 2 copy copy pop exch pop
+} bind def
+/lgrowto { % <lseq> <newlength> lgrowto <lseq'>
+ dup //lsubmask add //lnshift bitshift dup 3 index length gt {
+ % Add more sub-arrays. Start by completing the last existing one.
+ % Stack: lseq newlen newtoplen
+ 3 -1 roll dup llength 1 sub //lsubmask or 1 add lgrowto
+ % Stack: newlen newtoplen lseq
+ [ exch aload pop
+ counttomark 2 add -1 roll % newtoplen
+ counttomark sub { dup 0 0 getinterval lsublen growto } repeat
+ dup 0 0 getinterval ] exch
+ } {
+ pop
+ } ifelse
+ % Expand the last sub-array.
+ 1 sub //lsubmask and 1 add
+ exch dup dup length 1 sub 2 copy
+ % Stack: newsublen lseq lseq len-1 lseq len-1
+ get 5 -1 roll growto put
+} bind def
+/lforall { % <lseq> <proc> lforall -
+ /forall cvx 2 packedarray cvx forall
+} bind def
+
+% We keep track of PDF objects using the following PostScript variables:
+%
+% Generations (lstring): Generations[N] holds 1+ the current
+% generation number for object number N. (As far as we can tell,
+% this is needed only for error checking.) For free objects,
+% Generations[N] is 0.
+%
+% Objects (larray): If object N is loaded, Objects[N] is the actual
+% object; otherwise, Objects[N] is an executable integer giving
+% the file offset of the object's location in the file. If
+% ObjectStream[N] is non-zero then Objects[N] contains the index
+% into the object stream instead of the file offset of the object.
+%
+% ObjectStream (larray): If object N is in an object stream then
+% ObjectStream[N] holds the object number of the object stream.
+% Otherwise ObjectStream[N] contains 0. If ObjectStream[N]
+% is non-zero then Objects[N] contains the index into the object
+% stream.
+%
+% GlobalObjects (dictionary): If object N has been resolved in
+% global VM, GlobalObjects[N] is the same as Objects[N]
+% (except that GlobalObjects itself is stored in global VM,
+% so the entry will not be deleted at the end of the page).
+%
+% IsGlobal (lstring): IsGlobal[N] = 1 iff object N was resolved in
+% global VM. This is an accelerator to avoid having to do a
+% dictionary lookup in GlobalObjects when resolving every object.
+
+% Initialize the PDF object tables.
+/initPDFobjects { % - initPDFobjects -
+ /ObjectStream larray def
+ /Objects larray def
+ /Generations lstring def
+ .currentglobal true .setglobal
+ /GlobalObjects 20 dict def
+ .setglobal
+ /IsGlobal lstring def
+} bind def
+
+% Grow the tables to a specified size.
+/growPDFobjects { % <minsize> growPDFobjects -
+ dup ObjectStream llength gt {
+ dup ObjectStream exch lgrowto /ObjectStream exch def
+ } if
+ dup Objects llength gt {
+ dup Objects exch lgrowto /Objects exch def
+ } if
+ dup Generations llength gt {
+ dup Generations exch lgrowto /Generations exch def
+ } if
+ dup IsGlobal llength gt {
+ dup IsGlobal exch lgrowto /IsGlobal exch def
+ } if
+ pop
+} bind def
+
+% We represent an unresolved object reference by a procedure of the form
+% {obj# gen# resolveR}. This is not a possible PDF object, because PDF has
+% no way to represent procedures. Since PDF in fact has no way to represent
+% any PostScript object that doesn't evaluate to itself, we can 'force'
+% a possibly indirect object painlessly with 'exec'.
+% Note that since we represent streams by executable dictionaries
+% (see below), we need both an xcheck and a type check to determine
+% whether an object has been resolved.
+/resolved? { % <object#> resolved? <value> true
+ % <object#> resolved? false
+ Objects 1 index lget dup xcheck { % Check if executable
+ dup type /integertype eq { % Check if an integer
+ % Check whether the object is in GlobalObjects.
+ pop IsGlobal 1 index lget 0 eq { % 0 --> Not in GlabalObjects
+ pop false % The object is not resolved
+ } { % The object is in GlobalObjects
+ % Update Objects from GlobalObjects
+ PDFDEBUG { (%Global=>local: ) print dup == } if
+ GlobalObjects 1 index get dup Objects 4 1 roll lput true
+ } ifelse
+ } { % Else object is executable but not integer
+ exch pop true % Therefore must be executable dict. (stream)
+ } ifelse
+ } { % Else object is not executable.
+ exch pop true % Therefore it must have been resolved.
+ } ifelse
+} bind def
+/oforce /exec load def
+/oget { % <array> <index> oget <object>
+ % <dict> <key> oget <object>
+ % Before release 6.20, this procedure stored the resolved
+ % object back into the referring slot. In order to support
+ % PDF linearization, we no longer do this.
+ get oforce
+} bind def
+/oforce_array { % <array> oforce_array <array>
+ [ exch { oforce } forall ]
+} bind def
+/oforce_elems { % <array> oforce_elems <first> ... <last>
+ { oforce } forall
+} bind def
+/oforce_recursive { % <any> oforce_recursive <any>
+ oforce dup type dup /arraytype eq {
+ pop [ exch { oforce_recursive } forall ]
+ } {
+ /dicttype eq {
+ << exch { oforce_recursive exch oforce exch } forall >>
+ } if
+ } ifelse
+} bind def
+
+% A null value in a dictionary is equivalent to an omitted key;
+% we must check for this specially.
+/knownoget { % <dict> <key> knownoget <value> true
+ % <dict> <key> knownoget false
+ % See oget above regarding this procedure.
+ .knownget {
+ oforce dup //null eq { pop //false } { //true } ifelse
+ } {
+ //false
+ } ifelse
+} bind def
+
+% PDF 1.1 defines a 'foreign file reference', but not its meaning.
+% Per the specification, we convert these to nulls.
+/F { % <file#> <object#> <generation#> F <object>
+ % Some PDF 1.1 files use F as a synonym for f!
+ .pdfcount 3 lt { f } { pop pop pop null } ifelse
+} bind def
+
+% Verify the generation number for a specified object
+% Note: The values in Generations is the generation number plus 1.
+% If the value in Generations is zero then the object is free.
+/checkgeneration { % <object#> <generation#> checkgeneration <object#> <OK>
+ Generations 2 index lget 1 sub 1 index eq { % If generation # match ...
+ pop true % Then return true
+ } { % Else not a match ...
+ QUIET not { % Create warning message if not QUIET
+ Generations 2 index lget 0 eq { % Check if object is free ...
+ ( **** Warning: reference to free object: )
+ 2 index =string cvs concatstrings ( ) concatstrings % put obj #
+ exch =string cvs concatstrings ( R\n) concatstrings % put gen #
+ } {
+ ( **** Warning: wrong generation: )
+ 2 index =string cvs concatstrings ( ) concatstrings % put obj #
+ exch =string cvs concatstrings % put gen #
+ (, xref gen#: ) concatstrings 1 index Generations % put xref gen #
+ exch lget 1 sub =string cvs concatstrings (\n) concatstrings
+ } ifelse
+ pdfformaterror % Output warning message
+ } { % Else QUIET ...
+ pop % Pop generation number
+ } ifelse
+ % We should return false for an incorrect generation number, however
+ % we are simply printing a warning and then returning true. This makes
+ % Ghostscript tolerant of of bad generation numbers.
+ true
+ } ifelse
+} bind def
+/R { % <object#> <generation#> R <object>
+ /resolveR cvx 3 packedarray cvx
+} bind def
+
+% If we encounter an object definition while reading sequentially,
+% we just store it away and keep going.
+/objopdict mark
+ valueopdict { } forall
+ /endobj dup cvx
+.dicttomark readonly def
+
+/obj { % <object#> <generation#> obj <object>
+ PDFfile objopdict .pdfrun
+} bind def
+
+/endobj { % <object#> <generation#> <object> endobj <object>
+ 3 1 roll
+ % Read the xref entry if we haven't yet done so.
+ % This is only needed for generation # checking.
+ 1 index resolved? {
+ pop
+ } if
+ checkgeneration {
+ % The only global objects we bother to save are
+ % (resource) dictionaries.
+ 1 index dup gcheck exch type /dicttype eq and {
+ PDFDEBUG { (%Local=>global: ) print dup == } if
+ GlobalObjects 1 index 3 index put
+ IsGlobal 1 index 1 put
+ } if
+ Objects exch 2 index lput
+ } {
+ pop pop null
+ } ifelse
+} bind def
+
+% When resolving an object reference in an object stream, we stop at
+% the end of file. Note: Objects in an object stream do not have either
+% a starting 'obj' or and ending 'endobj'.
+/resolveobjstreamopdict mark
+ valueopdict { } forall
+ (%%EOF) cvn { exit } bind
+.dicttomark readonly def
+
+% Note: This version of this function is not currently being used.
+% Resolve all objects in an object stream
+/resolveobjectstream { % <object stream #> resolveobjectstream -
+ PDFDEBUG { (%Resolving object stream: ) print } if
+ 0 resolveR % Get the objectstream dict, all objstrms use 0 as the gen #
+ dup /First get % Save location of first object onto the stack
+ 1 index /N get % Save number of objects onto the stack
+ 2 index false resolvestream % Convert stream dict into a stream
+ /ReusableStreamDecode filter % We need to be able to position stream
+ % Objectstreams begin with list of object numbers and locations
+ % Create two arrays to hold object numbers and stream location
+ 1 index array % Array for holding object number
+ 2 index array % Array for holding stream object location
+ % Get the object numbers and locations.
+ 0 1 5 index 1 sub { % Loop and collect obj # and locations
+ % Stack: objstreamdict First N objectstream [obj#] [loc] index
+ 2 index 1 index % Setup to put obj# into object number array
+ 5 index token pop put % Get stream, then get obj# and put into array
+ 1 index 1 index % Setup to put object loc into location array
+ 5 index token pop put % Get stream, get obj loc and put into array
+ pop % Remove loop index
+ } for
+ % Create a bytestring big enough for reading any object data
+ % Scan for the size of the largest object
+ 0 0 % Init max object size and previous location
+ 2 index { % Loop through all object locations
+ % Stack: ... maxsize prevloc currentloc
+ dup 4 1 roll % Save copy of object location into stack
+ exch sub % Object size = currentloc - prevloc
+ .max % Determine maximum object size
+ exch % Put max size under previous location
+ } forall
+ pop % Remove previous location
+ .bigstring % Create bytestring based upon max obj size
+ % Move to the start of the object data
+ 3 index 6 index % Get objectstream and start of first object
+ setfileposition % Move to the start of the data
+ % Read the data for all objects except the last. We do
+ % not know the size of the last object so we need to treat
+ % it as a special case.
+ 0 1 6 index 2 sub {
+ dup 4 index exch get % Get our current object number
+ % Stack: objstreamdict First N objectstream [obj#] [loc]
+ % bytestring loopindex object#
+ dup resolved? { % If we already have this object
+ (yyy) = pstack (yyy) = flush xxx
+ pop pop % Remove object and object number
+ 1 add 2 index exch get % Get location of next object
+ 6 index add 6 index exch % Form location of next object and get stream
+ setfileposition % Move to the start of the next object data
+ } { % Else this is a new object ...
+ % We are going to create a string for reading the object
+ 2 index 0 % use our working string
+ % Determine the size of the object
+ 5 index 4 index 1 add get % Get location of the next object
+ 6 index 5 index get % Get location of this object
+ sub % Size of object = next loc - this loc
+ getinterval % Create string for reading object
+ 6 index exch readstring pop % Read object
+ /ReusableStreamDecode filter % Convert string into a stream
+ resolveobjstreamopdict .pdfrun % Get PDF object
+ Objects exch 2 index exch lput % Put object into Objects array
+ pop pop % Remove object # and loop index
+ } ifelse
+ } for
+ pop pop % Remove our working string and loc array
+ % Now read the last object in the object stream. Since it
+ % is the last object, we can use the original stream and
+ % terminate when we hit the end of the stream
+ % Stack: objstreamdict First N objectstream [obj#]
+ 2 index 1 sub get % Get our current object number
+ dup resolved? not { % If we do not already have this object
+ exch % Get our object stream
+ resolveobjstreamopdict .pdfrun % Get PDF object
+ Objects exch 2 index exch lput % Put object into Objects array
+ } if
+ pop pop pop pop % Clear stack
+} bind def
+
+% Resolve all objects in an object stream
+/resolveobjectstream { % <object stream #> resolveobjectstream -
+ PDFDEBUG { (%Resolving object stream: ) print } if
+ 0 resolveR % Get the objectstream dict, all objstrms use 0 as the gen #
+ dup /Type get /ObjStm ne { % Verify type is object stream
+ ( **** Incorrect Type in object stream dictionary.\n) pdfformaterror
+ /resolveobjectstream cvx /typecheck signalerror
+ } if
+ dup /N get % Save number of objects onto the stack
+ 1 index false resolvestream % Convert stream dict into a stream
+ /ReusableStreamDecode filter % We need to be able to position stream
+ % Objectstreams begin with list of object numbers and locations
+ 1 index array % Create array for holding object number
+ % Get the object numbers
+ 0 1 4 index 1 sub { % Loop and collect obj numbers
+ % Stack: objstreamdict N PDFDEBUG objectstream [obj#] loopindex
+ 1 index 1 index % Setup to put obj# into object number array
+ 4 index token pop put % Get stream, then get obj# and put into array
+ 2 index token pop pop pop % Get stream, get obj loc and clear stack
+ } for
+ % Move to the start of the object data
+ 1 index 4 index /First get % Get objectstream and start of first object
+ setfileposition % Move to the start of the data
+ % We disable PDFDEBUG while reading the data stream. We will
+ % print the data later
+ PDFDEBUG /PDFDEBUG false def % Save PDFDEBUG and disable it while reading
+ % Read the data for all objects. We check to see if we get
+ % the number of objects that we expect.
+ % Stack: objstreamdict N objectstream [obj#] PDFDEBUG
+ mark 4 -1 roll % Get objectstream
+ count 5 index add % Determine stack depth with objects
+ /PDFObjectStkCount exch def
+ resolveobjstreamopdict .pdfrun % Get PDF objects
+ PDFObjectStkCount count ne { % Check stack depth
+ ( **** Incorrect object count in object stream.\n) pdfformaterror
+ /resolveobjectstream cvx /rangecheck signalerror
+ } if
+ % We have the object data
+ counttomark array astore % Put objects into an array
+ exch pop % Remove mark
+ exch /PDFDEBUG exch def % Restore PDFDEBUG flag
+ % Save the objects into Objects
+ 0 1 2 index length 1 sub { % Loop through all objects
+ % Stack: objstreamdict N [obj#] [objects] loopindex
+ dup 3 index exch get % Get our current object number
+ dup resolved? { % If we already have this object
+ pop pop % Remove object and object number
+ } { % Else if we do not have this object
+ PDFDEBUG { (%Resolving compressed object: [) print dup =only ( 0]) = } if
+ Objects exch 3 index % Put the object into Objects
+ 3 index get
+ PDFDEBUG { dup === flush } if
+ lput
+ } ifelse
+ pop % Remove loop index
+ } for
+ pop pop pop pop % Remove objstream, N, (obj#], and [objects]
+} bind def
+
+% When resolving an object reference, we stop at the endobj or endstream.
+/resolveopdict mark
+ valueopdict { } forall
+ /endstream { endobj exit } bind
+ /endobj { endobj exit } bind
+ % OmniForm generates PDF file with endobj missing in some
+ % objects. AR ignores this. So we have to do it too.
+ /obj { pop pop endobj exit } bind
+.dicttomark readonly def
+
+/resolveR { % <object#> <generation#> resolveR <object>
+ PDFDEBUG {
+ PDFSTEPcount 1 le {
+ (%Resolving: ) print 2 copy 2 array astore ==
+ } if
+ } if
+ 1 index resolved? { % If object has already been resolved ...
+ exch pop exch pop % then clear stack and return object
+ } { % Else if not resolved ...
+ PDFfile fileposition 3 1 roll % Save current file position
+ 1 index Objects exch lget % Get location of object from xref
+ 3 1 roll checkgeneration { % Verify the generation number
+ % Stack: savepos objpos obj#
+ ObjectStream 1 index lget dup 0 eq { % Check if obj in not an objstream
+ pop exch PDFoffset add PDFfile exch setfileposition
+ PDFfile token pop 2 copy ne
+ { ( **** Unrecoverable error in xref!\n) pdfformaterror
+ /resolveR cvx /rangecheck signalerror
+ }
+ if pop PDFfile token pop
+ PDFfile token pop /obj ne
+ { ( **** Unrecoverable error in xref!\n) pdfformaterror
+ /resolveR cvx /rangecheck signalerror
+ }
+ if
+ pdf_run_resolve % PDFfile resolveopdict .pdfrun
+ } { % Else the object is in an ObjectStream
+ % Process an objectstream object. We are going to resolve all
+ % of the objects in sthe stream and place them into the Objects
+ % array.
+ % Stack: savepos objpos obj# objectstream#
+ resolveobjectstream
+ resolved? { % If object has already been resolved ...
+ exch pop % Remove object pos from stack.
+ } {
+ pop pop null % Pop objpos and obj#, put null for object
+ } ifelse
+ } ifelse
+ } { % Else the generation number is wrong
+ % Don't cache if the generation # is wrong.
+ pop pop null % Pop objpos and obj#, put null for object
+ } ifelse % ifelse generation number is correct
+ exch PDFfile exch setfileposition % Return to original file position
+ } ifelse
+} bind def
+
+% ================================ Streams ================================ %
+
+% We represent a stream by an executable dictionary that contains,
+% in addition to the contents of the original stream dictionary:
+% /File - the file or string where the stream contents are stored,
+% if the stream is not an external one.
+% /FilePosition - iff File is a file, the position in the file
+% where the contents start.
+% /StreamKey - the key used to decrypt this stream, if any.
+% We do the real work of constructing the data stream only when the
+% contents are needed.
+
+% Construct a stream. The length is not reliable in the face of
+% different end-of-line conventions, but it's all we've got.
+%
+% PDF files are inconsistent about what may fall between the 'stream' keyword
+% and the actual stream data, and it appears that no one algorithm can
+% detect this reliably. We used to try to guess whether the file included
+% extraneous \r and/or \n characters, but we no longer attempt to do so,
+% especially since the PDF 1.2 specification states flatly that the only
+% legal terminators following the 'stream' keyword are \n or \r\n, both of
+% which are properly skipped and discarded by the token operator.
+% Unfortunately, this doesn't account for other whitespace characters that
+% may have preceded the EOL, such as spaces or tabs. Thus we back up one
+% character and scan until we find the \n terminator.
+/stream { % <dict> stream <modified_dict>
+ dup /Length oget 0 eq {
+ dup /Filter undef % don't confuse any filters that require data
+ } if
+ dup /F known dup PDFsource PDFfile eq or {
+ not {
+ dup /File PDFfile put
+ % make sure that we are just past the EOL \n character
+ PDFfile dup fileposition 1 sub setfileposition % back up one
+ { PDFfile read pop dup 13 eq {
+ % If there had been a \n, token would have advanced over it
+ % thus, if the terminator was \r, we have a format error!
+ ( **** Warning: stream operator not terminated by valid EOL.\n) pdfformaterror
+ pop exit % fileposition is OK (just past the \r).
+ } if
+ 10 eq { exit } if
+ } loop % scan past \n
+ dup /FilePosition PDFfile fileposition put
+ PDFDEBUG {
+ PDFSTEPcount 1 le {
+ (%FilePosition: ) print dup /FilePosition get ==
+ } if
+ } if
+ } if
+ % Some (bad) PDf files have invalid stream lengths. This causes problems
+ % if we reposition beyond the end of the file. So we compare the given
+ % length to number of bytes left in the file.
+ dup /Length oget
+ dup PDFfile bytesavailable lt { % compare to to bytes left in file
+ PDFfile fileposition % reposition to the end of stream
+ add PDFfile exch setfileposition
+ } {
+ pop % bad stream length - do not reposition.
+ % This will force a length warning below
+ } ifelse
+ } {
+ pop
+ % We're already reading from a stream, which we can't reposition.
+ % Capture the sub-stream contents in a string.
+ dup /Length oget string PDFsource exch readstring
+ not {
+ ( **** Warning: Unexpected EOF in stream!\n) pdfformaterror
+ /stream cvx /rangecheck signalerror
+ } if
+ 1 index exch /File exch put
+ } ifelse
+ PDFsource token_nofail not { null } if
+ dup /endobj eq {
+ % Another case that Acrobat Reader handles -- 'endobj' without 'endstream'.
+ ( **** Warning: stream missing 'endstream'.\n) pdfformaterror
+ pop /endstream % fake a valid endstream
+ } if
+ /endstream ne {
+ ( **** Warning: stream Length incorrect.\n) pdfformaterror
+ dup /Length undef % prevent the use of the incorrect length.
+ cvx endobj exit % exit from .pdfrun now.
+ } if
+ cvx
+} bind def
+/endstream {
+ exit
+} bind def
+
+% Contrary to the published PDF (1.3) specification, Acrobat Reader
+% accepts abbreviated filter names everywhere, not just for in-line images,
+% and some applications (notably htmldoc) rely on this.
+/unabbrevfilterdict mark
+ /AHx /ASCIIHexDecode /A85 /ASCII85Decode /CCF /CCITTFaxDecode
+ /DCT /DCTDecode /Fl /FlateDecode /LZW /LZWDecode /RL /RunLengthDecode
+.dicttomark readonly def
+
+% Extract and apply filters.
+/filterparms { % <dict> <DPkey> <Fkey> filterparms
+ % <dict> <parms> <filternames>
+ 2 index exch knownoget {
+ oforce_recursive
+ exch 2 index exch knownoget {
+ % Both filters and parameters.
+ oforce_recursive
+ exch dup type /nametype eq {
+ 1 array astore exch
+ dup type /arraytype ne { 1 array astore } if exch
+ } if
+ } {
+ % Filters, but no parameters.
+ //null exch
+ dup type /nametype eq { 1 array astore } if
+ } ifelse
+ } {
+ % No filters: ignore parameters, if any.
+ pop //null { }
+ } ifelse
+} bind def
+/filtername { % <filtername> filtername <filtername'>
+ //unabbrevfilterdict 1 index .knownget { exch pop } if
+ dup /Filter resourcestatus { pop pop } {
+ Repaired exch % this error is not the creator's fault
+ ( **** ERROR: Unable to process ) pdfformaterror
+ 64 string cvs pdfformaterror
+ ( data. Page will be missing data.\n) pdfformaterror
+ /Repaired exch store % restore the previous "Repaired" state
+ % provide a filter that returns EOF (no data)
+ /.EOFDecode
+ } ifelse
+} bind def
+/applyfilters { % <parms> <source> <filternames> applyfilters <stream>
+ 2 index null eq {
+ { filtername filter }
+ } {
+ { % Stack: parms source filtername
+ 2 index 0 oget dup null eq { pop } {
+ exch filtername dup /JBIG2Decode eq { exch jbig2cachectx exch } if
+ } ifelse filter
+ exch dup length 1 sub 1 exch getinterval exch
+ }
+ } ifelse forall exch pop
+} bind def
+
+% JBIG2 streams have an optional 'globals' stream obj for
+% sharing redundant data between page images. Here we resolve
+% that stream reference (if any) and run it through the decoder,
+% creating a special -jbig2globalctx- postscript object our
+% JBIG2Decode filter implementation looks for in the parm dict.
+/jbig2cachectx { % <parmdict> jbig2cachectx <parmdict>
+ dup /JBIG2Globals knownoget {
+ % make global ctx
+ PDFfile fileposition exch % resolvestream is not reentrant
+ true resolvestream % stack after: PDFfileposition -file-
+ % Read the data in a loop until EOF to so we can move the strings into a bytestring
+ [ { counttomark 1 add index 60000 string readstring not { exit } if } loop ]
+ exch pop 0 1 index { length add } forall % compute the total length
+ % now copy the data from the array of strings into a bytestring
+ .bytestring exch 0 exch { 3 copy putinterval length add } forall pop
+ .jbig2makeglobalctx
+ PDFfile 3 -1 roll setfileposition
+ 1 index exch
+ /.jbig2globalctx exch put
+ } if
+} bind def
+
+% When used with a PDF image dict, the JPXDecode filter needs to know
+% about any ColorSpace entries, since this overrides whatever is in
+% the image stream itself. We therefore propagate any such key into
+% a filter's DecodeParms.
+/jpxparmfix { % <streamdict> <readdata?> jpxparmfix <streamdict <readdata?>
+ 1 index /Filter .knownget
+ { /JPXDecode eq % we only need to do this for JPXDecode filters
+ % TODO: handle filter arrays
+ {
+ 1 index /ColorSpace knownoget {
+ 2 index /DecodeParms knownoget {
+ % insert in the existing DecodeParms dict
+ /ColorSpace 3 -1 roll put
+ }{
+ 1 dict % need to create a custom DecodeParms dict
+ dup /ColorSpace 4 -1 roll put
+ 2 index exch /DecodeParms exch put
+ } ifelse
+ } if
+ } if
+ } if
+} bind def
+
+% Resolve a stream dictionary to a PostScript stream.
+% Streams with no filters require special handling:
+% - Whether we are going to interpret the stream, or If we are just
+% going to read data from them, we impose a SubFileDecode filter
+% that reads just the requisite amount of data.
+% Note that, in general, resolving a stream repositions PDFfile.
+% Clients must save and restore the position of PDFfile themselves.
+/resolvestream { % <streamdict> <readdata?> resolvestream <stream>
+ jpxparmfix
+ 1 index /F knownoget {
+ % This stream is stored on an external file.
+ (r) file 3 -1 roll
+ /FDecodeParms /FFilter filterparms
+ % Stack: readdata? file dict parms filternames
+ 4 -1 roll exch
+ pdf_decrypt_stream
+ applyfilters
+ } {
+ exch
+ dup /Length knownoget { 0 eq } { //false } ifelse {
+ () 0 () /SubFileDecode filter
+ } {
+ dup /FilePosition .knownget {
+ 1 index /File get exch setfileposition
+ } if
+ % Stack: readdata? dict
+ /DecodeParms /Filter filterparms
+ % Stack: readdata? dict parms filternames
+ 2 index /File get exch
+ % Stack: readdata? dict parms file/string filternames
+ dup length 0 eq {
+ % All the PDF filters have EOD markers, but in this case
+ % there is no specified filter.
+ exch dup type /filetype eq 5 index or {
+ % Use length for any files or reading data from any source.
+ 3 index /Length knownoget not { 0 } if
+ } {
+ 0 % Otherwise length of 0 for whole string
+ } ifelse
+ 4 index /IDFlag known { pop } { () /SubFileDecode filter } ifelse
+ exch
+ pdf_decrypt_stream % add decryption if needed
+ pop exch pop
+ } {
+ % Stack: readdata? dict parms source filternames
+ exch 3 index /Length knownoget {
+ () /SubFileDecode filter
+ } if exch
+ pdf_decrypt_stream % add decryption if needed
+ applyfilters
+ } ifelse
+ } ifelse
+ } ifelse
+ % Stack: readdata? dict file
+ exch pop exch pop
+} bind def
+
+% ============================ Name/number trees ============================ %
+
+/nameoget { % <nametree> <key> nameoget <obj|null>
+ exch /Names exch .treeget
+} bind def
+
+/numoget { % <numtree> <key> numoget <obj|null>
+ exch /Nums exch .treeget
+} bind def
+
+/.treeget { % <key> <leafkey> <tree> .treeget <obj|null>
+ dup /Kids knownoget {
+ exch pop .branchget
+ } {
+ exch get .leafget
+ } ifelse
+} bind def
+
+/.branchget { % <key> <leafkey> <kids> .branchget <obj|null>
+ dup length 0 eq {
+ pop pop pop null
+ } {
+ dup length -1 bitshift 2 copy oget
+ % Stack: key leafkey kids mid kids[mid]
+ dup /Limits oget aload pop
+ % Stack: key leafkey kids mid kids[mid] min max
+ 6 index lt {
+ pop pop
+ 1 add 1 index length 1 index sub getinterval .branchget
+ } {
+ 5 index gt {
+ pop
+ 0 exch getinterval .branchget
+ } {
+ exch pop exch pop .treeget
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+/.leafget { % <key> <pairs> .leafget <obj|null>
+ dup length 2 eq {
+ dup 0 get 2 index eq { 1 oget } { pop null } ifelse
+ exch pop
+ } {
+ dup length -1 bitshift -2 and 2 copy oget
+ % Stack: key pairs mid pairs[mid]
+ 3 index gt { 0 exch } { 1 index length 1 index sub } ifelse
+ getinterval .leafget
+ } ifelse
+} bind def
+
+end % pdfdict
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/pdf_draw.ps b/Master/tlpkg/tlgs/lib/pdf_draw.ps
new file mode 100644
index 00000000000..68789c37de9
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf_draw.ps
@@ -0,0 +1,1604 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdf_draw.ps 8061 2007-06-19 02:39:15Z alexcher $
+% pdf_draw.ps
+% PDF drawing operations (graphics, text, and images).
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+GS_PDF_ProcSet begin
+pdfdict begin
+
+% For simplicity, we use a single interpretation dictionary for all
+% PDF graphics operations, even though this is too liberal.
+/drawopdict 100 dict def
+
+% ================================ Graphics ================================ %
+
+% ---------------- Functions ---------------- %
+
+% Note that resolvefunction converts a PDF Function to a PostScript Function;
+% resolve*fnproc converts a PDF function to a PostScript procedure.
+% We need to process all required and optional parameters to resolve any
+% use of indirect references.
+
+/fnrdict mark
+ 0 { .resolvefn0 }
+ 2 { .resolvefn2 }
+ 3 { .resolvefn3 }
+ 4 { .resolvefn4 }
+.dicttomark readonly def
+
+/.resolvefn0 {
+ dup length 1 add dict .copydict % make room for DataSource
+ % now resolve any indirect references
+ dup /Size 2 copy knownoget { put } { pop pop } ifelse
+ dup /BitsPerSample 2 copy knownoget { put } { pop pop } ifelse
+ dup /Order 2 copy knownoget { put } { pop pop } ifelse
+ dup /Encode 2 copy knownoget { put } { pop pop } ifelse
+ dup /Decode 2 copy knownoget { put } { pop pop } ifelse
+
+ % Don't lose our place in PDFfile.
+ PDFfile fileposition exch
+ dup true resolvestream
+ % The stream isn't positionable, so read all the data now.
+ % Stack: filepos fndict stream
+ 1 index /Range get length 2 idiv 2 index /BitsPerSample get mul
+ 2 index /Size get { mul } forall
+ 7 add 8 idiv string
+ 1 index exch readstring pop exch closefile
+ % Stack: filepos fndict data
+ exch dup /DataSource 4 -1 roll put
+ exch PDFfile exch setfileposition
+} bdef
+
+/.resolvefn2 {
+ dup length dict .copydict
+ dup /C0 2 copy knownoget { put } { pop pop } ifelse
+ dup /C1 2 copy knownoget { put } { pop pop } ifelse
+ dup /N 2 copy knownoget { put } { pop pop } ifelse
+} bdef
+
+/.resolvefn3 {
+ dup length dict .copydict
+ dup /Bounds 2 copy knownoget { put } { pop pop } ifelse
+ dup /Encode 2 copy knownoget { put } { pop pop } ifelse
+ dup /Functions 2 copy oget mark exch dup {
+ oforce .resolvefn
+ } forall
+ counttomark -1 roll astore exch pop put
+} bdef
+
+/.resolvefn4 {
+ PDFfile fileposition exch % filepos fndict
+ dup true resolvestream % filepos fndict stream
+ exch dup length dict copy % filepos stream fndict2
+ dup /Function undef % filepos stream fndict2
+ exch dup token not {
+ () /rangecheck cvx signalerror
+ } if
+ exch token {
+ /rangecheck cvx signalerror
+ } if
+ % Use .bind to avoid idiom recognition.
+ .bind
+ 1 index /Function 3 -1 roll put
+ exch PDFfile exch setfileposition
+} bdef
+
+/.resolvefn { % <fndict> .resolvefn <fndict'>
+ dup length dict .copydict
+ dup /Domain 2 copy knownoget { put } { pop pop } ifelse
+ dup /Range 2 copy knownoget { put } { pop pop } ifelse
+ dup /FunctionType oget //fnrdict exch get exec
+} bdef
+
+/resolvefunction { % <fndict> resolvefunction <function>
+ .resolvefn
+ PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { true } ifelse { (%Function: ) print dup === flush } if } if
+} bdef
+
+/resolvefnproc { % <fndict> resolvefnproc <proc>
+ resolvefunction .buildfunction
+} bdef
+
+/resolveidfnproc { % <fndict> resolveidfnproc <proc>
+ dup /Identity eq { pop { } } { resolvefnproc } ifelse
+} bdef
+
+/resolvedefaultfnproc { % <fndict> <default> resolved'fnproc <proc>
+ 1 index /Default eq { exch pop } { pop resolveidfnproc } ifelse
+} bdef
+
+% ---------------- Shadings ---------------- %
+
+/shrdict mark
+ /BBox {
+ dup dup dup aload pop normrect_elems
+ 5 -1 roll astore
+ } bind
+ /ColorSpace {
+ resolvecolorspace
+ } bind
+ /Function {
+ dup type /dicttype eq {
+ resolvefunction
+ } {
+ [ exch { oforce resolvefunction } forall ]
+ } ifelse
+ } bind
+.dicttomark readonly def
+
+/resolveshading { % <shadingstream> resolveshading <shading>
+ dup /.shading_dict .knownget {
+ exch pop
+ dup /ShadingType get 4 ge {
+ dup /DataSource get 0 setfileposition
+ } if
+ } {
+ dup
+ PDFfile fileposition exch
+ mark exch {
+ oforce //shrdict 2 index .knownget { exec } if
+ } forall .dicttomark
+ dup /ShadingType get 4 ge {
+ dup dup true resolvestream
+ % Make a reusable stream so that the shading doesn't
+ % reposition PDFfile at unexpected times.
+ /ReusableStreamDecode filter /DataSource exch put
+ } if
+ exch PDFfile exch setfileposition
+ dup 3 1 roll /.shading_dict exch put
+ } ifelse
+} bdef
+/resolvesh { % <shname> resolvesh <shading>
+ % <shname> resolvesh <null>
+ Page /Shading rget {
+ resolveshading
+ } {
+ null
+ }ifelse
+} bdef
+
+% ---------------- Halftones ---------------- %
+
+/spotfunctions mark
+ /Round {
+ abs exch abs 2 copy add 1 le {
+ dup mul exch dup mul add 1 exch sub
+ } {
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ } ifelse
+ }
+ /Diamond {
+ abs exch abs 2 copy add .75 le {
+ dup mul exch dup mul add 1 exch sub
+ } {
+ 2 copy add 1.23 le {
+ .85 mul add 1 exch sub
+ } {
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ } ifelse
+ } ifelse
+ }
+ /Ellipse {
+ abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt {
+ pop dup mul exch .75 div dup mul add 4 div 1 exch sub
+ } {
+ dup 1 gt {
+ pop 1 exch sub dup mul exch 1 exch sub
+ .75 div dup mul add 4 div 1 sub
+ } {
+ .5 exch sub exch pop exch pop
+ } ifelse
+ } ifelse
+ }
+ /EllipseA { dup mul .9 mul exch dup mul add 1 exch sub }
+ /InvertedEllipseA { dup mul .9 mul exch dup mul add 1 sub }
+ /EllipseB { dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub }
+ /EllipseC { dup mul .9 mul exch dup mul add 1 exch sub }
+ /InvertedEllipseC { dup mul .9 mul exch dup mul add 1 sub }
+ /Line { exch pop abs neg }
+ /LineX { pop }
+ /LineY { exch pop }
+ /Square { abs exch abs 2 copy lt { exch } if pop neg }
+ /Cross { abs exch abs 2 copy gt { exch } if pop neg }
+ /Rhomboid { abs exch abs 0.9 mul add 2 div }
+ /DoubleDot { 2 {360 mul sin 2 div exch } repeat add }
+ /InvertedDoubleDot { 2 {360 mul sin 2 div exch } repeat add neg }
+ /SimpleDot { dup mul exch dup mul add 1 exch sub }
+ /InvertedSimpleDot { dup mul exch dup mul add 1 sub }
+ /CosineDot { 180 mul cos exch 180 mul cos add 2 div }
+ /Double { exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add }
+ /InvertedDouble {
+ exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add neg
+ }
+.dicttomark readonly def
+
+/htrdict mark
+ 1 { .resolveht1 }
+ 5 { .resolveht5 }
+ % We don't support types 6, 10, or 16 yet.
+.dicttomark readonly def
+
+/.resolveht1 {
+ mark exch {
+ oforce
+ 1 index /SpotFunction eq {
+ dup type /nametype eq
+ { //spotfunctions exch get } { resolvefnproc }
+ ifelse
+ } {
+ 1 index /TransferFunction eq {
+ resolveidfnproc
+ } if
+ } ifelse
+ } forall .dicttomark
+} bdef
+
+/.resolveht5 {
+ mark exch {
+ oforce dup type /dicttype eq { resolvehalftone } if
+ } forall .dicttomark
+} bdef
+
+/resolvehalftone { % <dict> resolvehalftone <halftone>
+ dup /HalftoneType get
+ dup //htrdict exch .knownget {
+ exch pop exec
+ } {
+ (\n\n **** Unsupported HalftoneType ) pdfformaterror
+ =string cvs pdfformaterror (. ***\n\n) pdfformaterror
+ /resolvehalftone cvx /unregistered signalerror
+ } ifelse
+} bdef
+
+% ---------------- Graphics state management ---------------- %
+
+/cmmatrix matrix def
+drawopdict begin
+ % Graphics state stack
+ /q { q } def
+ /Q { Q } def
+ % Graphics state setting
+ /cm { //cmmatrix astore
+ .getpath
+ exch concat
+ newpath { exec } forall
+ % If inside a BT/ET block, we need to update the TextSaveMatrix
+ currentdict /TextSaveMatrix .knownget {
+ //cmmatrix exch dup concatmatrix pop
+ } if
+ } bdef
+
+ /i { 1 .min setflat } bdef
+ /J /setlinecap load def
+ /d /setdash load def
+ /j /setlinejoin load def
+ /w /setlinewidth load def
+ /M { 1 .max setmiterlimit } bdef
+ /gs { gs } def
+end
+
+% Each entry in this dictionary is
+% <gsres> <value> -proc- <gsres>
+/gsbg {
+ /BGDefault load resolvedefaultfnproc setblackgeneration
+} bdef
+/gsucr {
+ /UCRDefault load resolvedefaultfnproc setundercolorremoval
+} bdef
+/gstr {
+ dup type /arraytype eq {
+ { oforce /TRDefault load resolvedefaultfnproc } forall
+ setcolortransfer
+ } {
+ /TRDefault load resolvedefaultfnproc settransfer
+ } ifelse
+} bdef
+/gsparamdict mark
+ /SA { setstrokeadjust }
+ /OP { 1 index /op known not { dup op } if OP }
+ % The PDF 1.3 specification says that the name /Default is only
+ % recognized for {BG,UCR,TR}2. However, PDF 1.3 files produced
+ % by Adobe Acrobat Distiller 4.0 for Windows use the name /Default
+ % with the older keys, so we have to implement this.
+ /BG { 1 index /BG2 known { pop } { gsbg } ifelse }
+ /UCR { 1 index /UCR2 known { pop } { gsucr } ifelse }
+ /TR { 1 index /TR2 known { pop } { gstr } ifelse }
+ /HT {
+ dup /Default eq {
+ pop .setdefaulthalftone
+ } {
+ %****** DOESN'T IMPLEMENT THE STREAM CASE YET ******
+ resolvehalftone sethalftone
+ } ifelse
+ % the transfer function may dependent on the halftone, so make sure
+ % it is set if included in the graphic state (otherwise this is
+ % subject to order of a dictionary forall, which is unpredictable)
+ dup /TR2 .knownget {
+ dup /Default eq { oforce gsparamdict /TR2 get exec } { pop } ifelse
+ } {
+ dup /TR .knownget {
+ /dup /Default eq { oforce gsparamdict /TR get exec } { pop } ifelse
+ } if
+ } ifelse
+ }
+ /HTP {
+ % HTP may be present even if this isn't a DPS interpreter.
+ /sethalftonephase where { pop aload pop sethalftonephase } { pop } ifelse
+ }
+ % PDF 1.3
+ /Font { aload pop Tf }
+ /LW { setlinewidth }
+ /LC { setlinecap }
+ /LJ { setlinejoin }
+ /ML { 1 .max setmiterlimit }
+ /D { aload pop setdash }
+ /RI { ri }
+ /op { op }
+ /OPM { OPM }
+ /BG2 { gsbg }
+ /UCR2 { gsucr }
+ /TR2 { gstr }
+ /FL { 1 .min setflat }
+ /SM {
+ % SM may be present even if this is only a Level 2 interpreter.
+ /setsmoothness where { pop setsmoothness } { pop } ifelse
+ }
+ % PDF 1.4
+ % All of these require the "transparency" feature in the interpreter.
+ /ca { ca }
+ /CA { CA }
+ /SMask { gssmask }
+ /AIS { AIS }
+ /BM { BM }
+ /TK { TK }
+.dicttomark readonly def
+/gs { % <gsres> gs -
+ Page /ExtGState rget {
+ % We keep the dictionary on the stack during the forall so that
+ % keys that interact with each other have access to it.
+ dup {
+ oforce exch gsparamdict exch .knownget { exec } { pop } ifelse
+ } forall pop
+ } if
+} bdef
+
+% ------ Transparency support ------ %
+
+/gssmask {
+ dup /None eq PDFusingtransparency not or {
+ pop null
+ } {
+ % Preprocess the SMask value into a parameter dictionary for
+ % .begintransparencymaskgroup, with added /BBox and /Draw keys.
+ mark exch % Stack: mark smaskdict
+ dup /S oget /Subtype exch 3 2 roll
+ % Stack: mark ... smaskdict
+ dup /BC knownoget {
+ dup /Background exch 4 2 roll
+ gsave
+ 1 index /G oget /Group oget /CS knownoget {
+ csresolve dup setgcolorspace csput
+ } if
+ aload pop setcolor [ currentgray ]
+ grestore
+ /GrayBackground exch 3 2 roll
+ } if
+ dup /TR knownoget {
+ resolveidfnproc /TransferFunction exch 3 2 roll
+ } if
+ dup /G oget dup /BBox oget /BBox exch 4 2 roll
+ /.execmaskgroup cvx 2 packedarray cvx /Draw exch 3 2 roll
+ pop .dicttomark
+ } ifelse SMask
+} bdef
+
+% This procedure is called to actually render the soft mask.
+/.execmaskgroup { % <masknum> <paramdict> <formdict> .execmaskgroup -
+ % Save our place in PDFfile, and do a gsave to avoid resetting
+ % the color space.
+ currentcolorspace 4 1 roll
+ PDFfile fileposition 4 1 roll
+ % We have to select the group's color space so that the
+ % background color will be interpreted correctly.
+ dup /Group oget /CS knownoget { csresolve dup setgcolorspace csput } if
+ exch dup /BBox get aload pop .begintransparencymaskgroup {
+ dup /Resources knownoget { oforce } { 0 dict } ifelse
+ exch false resolvestream
+ .execgroup .endtransparencymask
+ } stopped {
+ .discardtransparencymask stop
+ } if
+ PDFfile exch setfileposition
+ setcolorspace
+} bdef
+% Paint a Form+Group XObject, either for a transparency mask or for a Do.
+/.execgroup { % <resdict> <stream> .execgroup -
+ gsave //nodict begin
+ null SMask
+ 1 .setopacityalpha 1 .setshapealpha
+ 0 .inittransparencymask 1 .inittransparencymask
+ /Compatible .setblendmode
+ % Execute the body of the Form, similar to DoForm.
+ pdfopdict .pdfruncontext
+ end grestore
+} bdef
+
+/.beginformgroup { % groupdict bbox .beginformgroup -
+ exch mark exch % bbox mark groupdict
+ dup /CS knownoget { csresolve setgcolorspace } if
+ dup /I knownoget { /Isolated exch 3 2 roll } if
+ dup /K knownoget { /Knockout exch 3 2 roll } if
+ pop .dicttomark
+ % Stack: bbox paramdict
+ exch aload pop
+ .begintransparencygroup
+} bdef
+
+% .paintgroupform implements the Form PaintProc in the case where the
+% Form XObject dictionary includes a Group key. See .paintform below.
+/.paintgroupform { % <resdict> <stream> <formdict> .paintgroupform -
+ dup /Group oget exch /BBox oget
+ % Stack: resdict stream groupdict bbox
+ .beginformgroup {
+ .execgroup
+ } stopped {
+ .discardtransparencygroup stop
+ } if .endtransparencygroup
+} bdef
+
+% Make an ImageType 103 (soft-masked) image.
+/makesoftmaskimage { % <datasource> <imagemask> <SMask> makesoftmaskimage
+ % <datasource> <imagemask>, updates currentdict =
+ % imagedict
+ % See the ImageType 3 case of makemaskimage below.
+ % SMask is a stream, another Image XObject.
+ % Stack: datasource imagemask(false) smaskstreamdict
+ PDFfile fileposition exch
+ dup /Matte knownoget { /Matte exch def } if
+ dup length dict makeimagedict pop
+ % In order to prevent the two data sources from being
+ % aliased, we need to make at least one a reusable stream.
+ % We pick the mask, since it's smaller (in case we need to
+ % read all its data now).
+ % Stack: datasource imagemask(false) savedpos
+ % maskdict is currentdict
+ /DataSource DataSource mark
+ /Intent 1
+ /AsyncRead true
+ .dicttomark .reusablestreamdecode def
+ PDFfile exch setfileposition
+ currentdict end currentdict end
+ 5 dict begin
+ /ImageType 103 def
+ /DataDict exch def
+ dup /InterleaveType 3 put
+ DataDict /Matte knownoget {
+ /Matte exch def
+ } if
+ AlphaIsShape { /ShapeMaskDict } { /OpacityMaskDict } ifelse exch def
+ /ColorSpace DataDict /ColorSpace get def
+} bdef
+
+% ---------------- Color setting ---------------- %
+
+/01_1 [0 1] readonly def
+/01_3 [0 1 0 1 0 1] readonly def
+/01_4 [0 1 0 1 0 1 0 1] readonly def
+
+% The keys here are resolved (PostScript, not PDF) color space names.
+/csncompdict mark
+ /DeviceGray { pop 1 }
+ /DeviceRGB { pop 3 }
+ /DeviceCMYK { pop 4 }
+ /CIEBasedA { pop 1 }
+ /CIEBasedABC { pop 3 }
+ /ICCBased { 1 oget /N oget }
+ /Separation { pop 1 }
+ /DeviceN { 1 oget length }
+.dicttomark readonly def
+
+/csrdict mark
+ /DeviceGray { }
+ /DeviceRGB { }
+ /DeviceCMYK { }
+ /CalGray {
+ 1 oget 6 dict begin
+ dup /Gamma knownoget {
+ /exp load 2 packedarray cvx /DecodeA exch def
+ } if
+ dup /BlackPoint knownoget { /BlackPoint exch def } if
+ dup /WhitePoint knownoget {
+ dup /WhitePoint exch def
+ dup /MatrixA exch def
+ /RangeLMN [ 3 2 roll { 0 exch } forall ] def
+ } if
+ /PDFColorSpace exch def [ /CIEBasedA currentdict end ]
+ }
+ /CalRGB {
+ 1 oget 6 dict begin
+ dup /Gamma knownoget {
+ [ exch { /exp load 2 packedarray cvx } forall
+ ] /DecodeABC exch def
+ } if
+ dup /Matrix knownoget { /MatrixABC exch def } if
+ dup /BlackPoint knownoget { /BlackPoint exch def } if
+ dup /WhitePoint knownoget { /WhitePoint exch def } if
+ /PDFColorSpace exch def [ /CIEBasedABC currentdict end ]
+ }
+ /CalCMYK {
+ pop /DeviceCMYK % not defined by Adobe
+ }
+ /Lab {
+ 1 oget 6 dict begin
+ dup /Range knownoget not { [-100 100 -100 100] } if
+ [0 100 null null null null] dup 2 4 -1 roll putinterval
+ /RangeABC exch def
+ /DecodeABC [{16 add 116 div} bind {500 div} bind {200 div} bind] def
+ /MatrixABC [1 1 1 1 0 0 0 0 -1] def
+ dup /BlackPoint knownoget { /BlackPoint exch def } if
+ dup /WhitePoint knownoget { /WhitePoint exch def } {
+ ( **** Warning: Lab colorspace is missing WhitePoint.\n)
+ pdfformaterror
+ /WhitePoint [0.9505 1 1.089] def
+ } ifelse
+ % scaling function g() for DecodeLMN construction
+ { dup 6 29 div ge {dup dup mul mul} {4 29 div sub 108 841 div mul} ifelse }
+ /DecodeLMN [
+ % Store white point implicitly inside procedures.
+ [ 3 index aload pop WhitePoint 0 get /mul .systemvar ] cvx bind
+ [ 4 index aload pop WhitePoint 1 get /mul .systemvar ] cvx bind
+ [ 5 index aload pop WhitePoint 2 get /mul .systemvar ] cvx bind
+ ] def pop
+ /PDFColorSpace exch def [ /CIEBasedABC currentdict end ]
+ }
+ /ICCBased {
+ dup 1 get type /dicttype ne { % don't resolve more than once
+ PDFfile fileposition exch
+ dup dup 1 oget
+ mark exch { oforce } forall .dicttomark
+ dup dup true resolvestream
+ /ReusableStreamDecode filter /DataSource exch put
+ 1 exch put
+ exch PDFfile exch setfileposition
+ % Resolve alternate color space
+ dup 1 get % Get colorspace dictionary
+ dup /Alternate .knownget % Check for alternate color space
+ { oforce resolvecolorspace /Alternate exch put } % resolve and replace
+ { pop } % remove colorspace dictionary
+ ifelse
+ } if
+ } bind
+ /Separation {
+ aload pop exch oforce resolvecolorspace
+ % Contrary to PDF manuals up to v.1.5, Acrobat Distiller 3.01
+ % can use /Identity name here instead of a function.
+ exch oforce resolveidfnproc
+ 4 array astore
+ }
+ /DeviceN {
+ [ exch aload pop ] % Copy into a new array
+ dup dup 1 oget % Resolve Names array
+ [ exch { oforce } forall ] % resolve each of the names
+ 1 exch put
+ dup dup 2 oget resolvecolorspace
+ 2 exch put
+ dup dup 3 oget resolvefnproc
+ 3 exch put
+ dup length 4 gt { % Check for attributes dict
+ dup dup 4 oget % devn_array devn_array attr_dict
+ dup /Colorants knownoget % Check for Colorants Dict
+ { % Create a new attribute dict with only a Colorants dict entry.
+ % Resolve all of the Colorant dict entries. This is needed
+ % to prevent a conflict if we attempt to resolve the tint
+ % transform functions of the Colorant color spaces multiple
+ % times.
+ exch pop % Remove old attributes dict
+ << exch % Start new attributes dict
+ % Build new Colorants dict with resolved entries
+ << exch { oforce resolvecolorspace } forall >>
+ /Colorants exch >> % Finish new attributes dict
+ } if
+ 4 exch put % Put resolved or new attributes dict
+ } if
+ }
+ /Indexed {
+ aload pop 3 -1 roll oforce resolvecolorspace
+ % Stack: /Indexed hival lookup basespace
+ % If the underlying space is a Lab space, we must scale
+ % the output of the lookup table as part of DecodeABC.
+ dup dup type /arraytype eq { 0 get } if /CIEBasedABC eq {
+ dup 1 get /DecodeLMN known {
+ 1 get dup length dict copy
+ begin /DecodeABC [ 0 2 4 {
+ RangeABC 1 index 1 add get RangeABC 2 index get sub /mul load
+ RangeABC 3 index get /add load
+ DecodeABC 6 -1 roll 2 idiv get [ 6 1 roll aload pop ] cvx
+ } for ] def
+ /RangeABC //01_3 def
+ currentdict end /CIEBasedABC exch 2 array astore
+ } if
+ } if
+ 3 1 roll
+ oforce dup type /stringtype ne {
+ % The color lookup table is a stream.
+ % Get its contents. Don't lose our place in PDFfile.
+ % Stack: /Indexed basespace hival lookup
+ PDFfile fileposition 5 1 roll true resolvestream
+ % Stack: filepos /Indexed basespace hival lookupstream
+ 1 index 1 add
+ % Stack: filepos /Indexed basespace hival lookupstream len
+ 3 index
+ dup dup type /arraytype eq { 0 get } if
+ //csncompdict exch get exec mul
+ string dup 3 1 roll readstring pop % the string is padded with 0s
+ length 1 index length lt {
+ ( **** Warning: Short look-up table in the Indexed color space was padded with 0's.\n)
+ pdfformaterror
+ } if
+ % Stack: filepos /Indexed basespace hival table table'
+ 5 -1 roll PDFfile exch setfileposition
+ }
+ if 4 array astore
+ % Replace the PDFColorSpace with the Indexed space if needed.
+ dup 1 get
+ dup type /arraytype eq {
+ dup length 2 ge {
+ dup 1 get type /dicttype eq {
+ dup 1 get /PDFColorSpace known {
+ dup 1 get /PDFColorSpace 3 index put
+ } if
+ } if
+ } if
+ } if pop
+ }
+ /Pattern {
+ dup type /nametype ne {
+ dup length 1 gt {
+ 1 oget resolvecolorspace
+ /Pattern exch 2 array astore
+ } if
+ } if
+ }
+.dicttomark readonly def
+
+/cssubst { % <csname> cssubst <cspace'> true
+ % <csname> cssubst false
+ dup resolvecolorspace
+ dup 1 index ne { exch pop true } { pop pop false } ifelse
+} bdef
+
+/csnames mark
+ /DeviceGray dup /DeviceRGB dup /DeviceCMYK dup /Pattern dup
+.dicttomark readonly def
+/csresolve { % <csresourcename> csresolve <cspace>
+ dup type /nametype ne {
+ (\n **** Warning: CS/cs (setcolorspace) operand not a name: ) pdfformaterror
+ dup stderrfile dup 3 -1 roll write==only flushfile
+ ( ****\n) pdfformaterror
+ dup type /arraytype eq { % Adobe InDesign + PDF Library has array
+ resolvecolorspace
+ } if
+ } {
+ dup Page /ColorSpace rget {
+ exch pop resolvecolorspace
+ } {
+ //csnames 1 index known not { /undefined cvx signalerror } if
+ } ifelse
+ } ifelse
+} bdef
+/resolvecolorspace { % <cspace> resolvecolorspace <cspace'>
+ dup dup type /arraytype eq { 0 get } if
+ //csrdict exch .knownget
+ {
+ exec dup type /nametype ne { dup length 1 eq { 0 get } if } if
+ } {
+ dup type /nametype eq { csresolve } { csset exch pop } ifelse
+ } ifelse
+} bdef
+
+/scresolve { % <c0> ... scresolve <multi>
+ % We can't really make sc[n] and SC[N] work, because
+ % the color space information isn't available at
+ % conversion time; so we hack it by assuming that
+ % all the operands on the stack are used, and that
+ % if the top operand is a name, it's a Pattern resource.
+ dup type /nametype eq
+ { Page /Pattern rget { resolvepattern } { null } ifelse }
+ if
+ dup type /dicttype eq {
+ % Check the PaintType, if any (shading patterns don't
+ % have one).
+ dup /PaintType knownoget { 2 eq } { false } ifelse
+ } {
+ .pdfcount 1 gt
+ } ifelse
+} bdef
+
+/.pdfpaintproc { % <patdict> <resdict> .pdfpaintproc -
+ PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { true } ifelse { (%Begin PaintProc) print dup === flush } if } if
+ % For uncolored patterns, we have to unbind the current
+ % color and color space before running the PaintProc.
+ % There's no harm in doing this for colored patterns,
+ % so for simplicity, we always do it.
+ PDFfile fileposition 3 1 roll
+ q
+ null sc1 null SC1
+
+ % save old value of pdfemptycount on opstack, set to new value
+ pdfemptycount /pdfemptycount count 3 sub def 3 1 roll
+ exch false resolvestream pdfopdict .pdfruncontext
+ % restore pdfemptycount
+ /pdfemptycount exch def
+
+ Q
+ PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { true } ifelse { (%End PaintProc) print dup === flush } if } if
+ PDFfile exch setfileposition
+} bdef
+
+/resolvepattern { % <patternstreamdict> resolvepattern <patterndict>
+ % Don't do the resolvestream now: just capture the data
+ % from the file if necessary.
+ dup length dict copy
+ dup /FilePosition .knownget {
+ 1 index /File get dup fileposition 3 1 roll
+ % Stack: dict savepos pos file
+ dup 3 -1 roll setfileposition
+ dup 3 index /Length oget
+
+ dup 65535 le {
+ dup 0 eq {
+ pop pop ()
+ } {
+ string readstring pop
+ } ifelse
+ } {
+ () /SubFileDecode filter /ReusableStreamDecode filter
+ } ifelse
+ % Stack: dict savepos file string
+ 3 1 roll exch setfileposition
+ 1 index /File 3 -1 roll put
+ dup /FilePosition undef
+ } if
+ dup /Shading knownoget {
+ resolveshading 1 index /Shading 3 -1 roll put
+ } if
+ dup /PaintProc [
+ % Bind the resource dictionary into the PaintProc.
+ 2 index /Resources knownoget { oforce } { 0 dict } ifelse
+ /.pdfpaintproc cvx
+ ] cvx put
+ PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { true } ifelse { (%Pattern: ) print dup === flush } if } if
+} bdef
+
+drawopdict begin
+ /g { /DeviceGray cssubst { cs sc1 } { g } ifelse } bdef
+ /rg { /DeviceRGB cssubst { cs sc* } { rg } ifelse } bdef
+ /k { k } bdef
+ /cs { csresolve cs } bdef
+ /sc { scresolve { sc* } { sc1 } ifelse } bdef
+ /scn /sc load def
+ /G { /DeviceGray cssubst { CS SC1 } { G } ifelse } bdef
+ /RG { /DeviceRGB cssubst { CS SC* } { RG } ifelse } bdef
+ /K { K } bdef
+ /CS { csresolve CS } bdef
+ /ri { ri } bdef
+ /SC { scresolve { SC* } { SC1 } ifelse } bdef
+ /SCN /SC load def
+end
+
+% ---------------- Paths ---------------- %
+
+drawopdict begin
+ % Path construction
+ /m /moveto load def
+ /l /lineto load def
+ /c /curveto load def
+ /v { currentpoint 6 2 roll curveto } def
+ /y { 2 copy curveto } def
+ /re {
+ 4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
+ closepath
+ } def
+ /h /closepath load def
+ % Path painting and clipping
+ /n { n } def
+ /S { S } def
+ /s { s } def
+ /f { f } def
+ /f* { f* } def
+ /B { B } def
+ /b { b } def
+ /B* { B* } def
+ /b* { b* } def
+ /W { W } def
+ /W* { W* } def
+ /sh { setfillstate resolvesh
+ gsave 0 .setoverprintmode
+ dup /.shading .knownget {
+ exch
+ pop
+ } {
+ dup
+ .buildshading
+ dup 3 1 roll /.shading exch put
+ } ifelse
+ .shfill grestore
+ } def
+end
+
+% ---------------- XObjects ---------------- %
+
+/xobjectprocs mark % <dict> -proc- -
+ /Image { DoImage }
+ /Form { DoForm }
+ /PS { DoPS }
+.dicttomark readonly def
+
+% Note that the keys in defaultdecodedict are resolved (PostScript, not PDF)
+% color space names.
+/defaultdecodedict mark
+ /DeviceGray { pop //01_1 } bind
+ /DeviceRGB { pop //01_3 } bind
+ /DeviceCMYK { pop //01_4 } bind
+ /CIEBasedA { 1 get /RangeA knownoget not { //01_1 } if } bind
+ /CIEBasedABC { 1 get /RangeABC knownoget not { //01_3 } if } bind
+ /ICCBased {
+ 1 oget dup /Range knownoget {
+ exch pop
+ }{
+ /N get [ exch {0 1} repeat ] readonly
+ } ifelse
+ } bind
+ /Separation { pop //01_1 } bind
+ /DeviceN {
+ 1 oget length [ exch {0 1} repeat ] readonly
+ } bind
+ /Indexed {
+ pop [ 0 1 BitsPerComponent bitshift 1 sub ]
+ } bind
+.dicttomark readonly def
+
+/checkaltimage { % <resdict> checkaltimage <resdict[']>
+ Printed {
+ dup /Alternates knownoget {
+ {
+ dup /DefaultForPrinting knownoget {
+ {
+ /Image oget exch pop exit
+ } {
+ pop
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } forall
+ } if
+ } if
+} bdef
+
+/makeimagedict { % <resdict> <newdict> makeimagedict <imagemask>
+ % On return, newdict' is currentdict
+ begin
+ /Width 2 copy oget def
+ /Height 2 copy oget def
+ % Handle missing BitsPerComponent later.
+ /BitsPerComponent 2 copy knownoget { def } { pop } ifelse
+ /Interpolate 2 copy knownoget { def } { pop } ifelse
+ makeimagekeys
+} bdef
+/makeimagekeys { % <resdict> makeimagekeys <imagemask>
+ % newdict is currentdict
+ % Assumes Width, Height, BPC, Interpolate already copied.
+ /ImageType 1 def
+ /ImageMatrix Width 0 0
+ % Handle 0-height images specially.
+ Height dup 0 eq { pop 1 } if neg 0 1 index neg
+ 6 array astore def
+ dup /ImageMask knownoget dup { and } if {
+ % Image mask
+ % Decode is required for the PostScript image operators.
+ % AI8 writes bogus decode array [0 1 0 0 0 0 0 0]
+ /Decode 2 copy knownoget { 0 2 getinterval } { //01_1 } ifelse def
+ % BitsPerComponent is optional for masks.
+ /BitsPerComponent 2 copy known { pop } { 1 def } ifelse
+ true
+ } {
+ % Opaque image
+ dup /ColorSpace oget resolvecolorspace /ColorSpace exch def
+ % Decode is required for the PostScript image operators.
+ /Decode 2 copy knownoget not {
+ ColorSpace //defaultdecodedict
+ ColorSpace dup type /arraytype eq { 0 get } if get exec
+ } if def
+ false
+ } ifelse
+ % Even though we're going to read data,
+ % pass false to resolvestream so that
+ % it doesn't try to use Length (which may not be present).
+ exch false resolvestream /DataSource exch def
+} bdef
+
+/DoImage {
+ checkaltimage dup length 6 add dict
+ 1 index /SMask knownoget { 1 index exch /SMask exch put } if
+ 1 index /Mask knownoget { 1 index exch /Mask exch put } if
+ makeimagedict doimagesmask
+} bdef
+/makemaskimage { % <datasource> <imagemask> <Mask> makemaskimage
+ % <datasource> <imagemask>, updates currentdict =
+ % imagedict
+ dup type /arraytype eq {
+ /ImageType 4 def
+ % Check that every element of the Mask is an integer.
+ //false 1 index {
+ type /integertype ne or
+ } forall {
+ (\n **** Warning: Some elements of Mask array are not integers.\n)
+ pdfformaterror
+ [ exch { 0.5 add cvi } forall ] % following AR4, 5, 6 implementation
+ } if
+ % Check elements of array are within 0::(2**BitsPerComponent)-1
+ % This is a PostScript error, but AR ignores Mask in that case
+ 2 BitsPerComponent exp cvi 1 sub //false 2 index {
+ % stack: max_value result_bool value
+ dup 0 lt exch 3 index gt or or
+ } forall exch pop {
+ (\n **** Warning: Some elements of Mask array are out of range.\n)
+ pdfformaterror
+ pop /ImageType 1 def % revert to non-masked image
+ } {
+ /MaskColor exch def
+ } ifelse
+ } {
+ % Mask is a stream, another Image XObject.
+ % Stack: datasource imagemask(false) maskstreamdict
+ PDFfile fileposition exch
+ dup length dict makeimagedict pop
+ % In order to prevent the two data sources from being
+ % aliased, we need to make at least one a reusable stream.
+ % We pick the mask, since it's smaller (in case we need to
+ % read all its data now).
+ % Stack: datasource imagemask(false) savedpos
+ % maskdict is currentdict
+ /DataSource DataSource mark
+ /Intent 1
+ /AsyncRead true
+ .dicttomark .reusablestreamdecode def
+ PDFfile exch setfileposition
+ currentdict end currentdict end
+ 5 dict begin
+ /ImageType 3 def
+ /InterleaveType 3 def
+ /DataDict exch def
+ /MaskDict exch def
+ /ColorSpace DataDict /ColorSpace get def
+ } ifelse
+} bdef
+
+/doimagesmask { % <imagemask> doimagesmask -
+ PDFusingtransparency { currentdict /SMask knownoget } { false } ifelse {
+ .begintransparencymaskimage
+ PDFfile fileposition exch
+ gsave //nodict begin
+ null /SoftMask gput
+ 1 .setopacityalpha 1 .setshapealpha
+ 0 .inittransparencymask 1 .inittransparencymask
+ /Compatible .setblendmode
+ DoImage
+ end grestore
+ PDFfile exch setfileposition
+ 0 .endtransparencymask
+ << /Subtype /Group /Isolated true
+ /.image_with_SMask true % pdfwrite needs : see gs/src/ztrans.c, gs/src/gdevpdft.c
+ >> 0 0 1 1 .begintransparencygroup
+ doimage
+ .endtransparencygroup
+ } {
+ doimage
+ } ifelse
+} bdef
+/doimage { % <imagemask> doimage -
+ % imagedict is currentdict, gets popped from dstack
+ DataSource exch
+ PDFusingtransparency {
+ currentdict /SMask knownoget
+ } {
+ false
+ } ifelse {
+ makesoftmaskimage
+ } {
+ currentdict /Mask knownoget {
+ makemaskimage
+ } if
+ } ifelse
+ % Stack: datasource imagemask
+ { currentdict end setfillstate { imagemask } }
+ { ColorSpace setgcolorspace currentdict end setfillblend { image } }
+ ifelse
+ stopped {
+ dup type /dicttype eq { pop } if % Sometimes image fails to restore the stack
+ $error /errorname get dup /ioerror eq {
+ pop (\n **** Warning: File has insufficient data for an image.\n)
+ pdfformaterror
+ } {
+ (\n **** Warning: File encountered ')
+ exch 40 string cvs concatstrings
+ (' error while processing an image.\n) concatstrings
+ pdfformaterror
+ } ifelse
+ } if
+ % Close the input stream, unless it is PDFfile or
+ % PDFsource.
+ dup dup PDFfile eq exch PDFsource eq or { pop } { closefile } ifelse
+} bdef
+
+/.paintform { % <formdict> <resdict> <stream> .paintform -
+ 3 -1 roll dup /Group known PDFusingtransparency and {
+ .paintgroupform
+ } {
+ pop pdfopdict .pdfruncontext
+ } ifelse
+} bdef
+
+/DoForm {
+ % Adobe 2nd edition of the PDF 1.3 spec makes /FormType
+ % and /Matrix keys optional. Cope with the missing keys.
+ begin <<
+ currentdict /FormType known not { /FormType 1 } if
+ currentdict /Matrix known not { /Matrix { 1 0 0 1 0 0 } cvlit } if
+ currentdict end { oforce } forall
+ >>
+ dup [ 2 index /Resources knownoget { oforce } { 0 dict } ifelse
+ 3 index false /resolvestream cvx
+ /.paintform cvx
+ ] cvx /PaintProc exch put
+ % Adjust pdfemptycount since we have an extra dictionary on the stack
+ pdfemptycount exch
+ /pdfemptycount where pop count 2 sub /pdfemptycount exch put
+ q execform Q % gsave / grestore around the Form
+ % Restore pdfemptycount
+ /pdfemptycount where pop exch /pdfemptycount exch put
+} bdef
+
+/_dops_save 1 array def
+
+/DoPS {
+ DOPS
+ {
+ //_dops_save 0 save put
+ true resolvestream cvx exec
+ //_dops_save 0 get restore
+ }
+ { pop }
+ ifelse
+} bdef
+
+currentdict /_dops_save undef
+
+drawopdict begin
+ /Do {
+ setfillblend
+ PDFfile fileposition exch
+ dup Page /XObject rget {
+ exch pop dup /Subtype get xobjectprocs exch get
+ % Don't leave extra objects on the stack while executing
+ % the definition of the form.
+ 3 -1 roll 2 .execn
+ } {
+ % This should cause an error, but Acrobat Reader can
+ % continue, so we do too.
+ ( **** Undefined XObject resource: )
+ exch =string cvs concatstrings (\n) concatstrings
+ pdfformaterror
+ } ifelse
+ PDFfile exch setfileposition
+ } bdef
+end
+
+% ---------------- In-line images ---------------- %
+
+% Undo the abbreviations in an in-line image dictionary.
+% Note that we must look inside array values.
+% /I is context-dependent.
+/unabbrevkeydict mark
+ /BPC /BitsPerComponent /CS /ColorSpace /D /Decode /DP /DecodeParms
+ /F /Filter /H /Height /I /Interpolate /IM /ImageMask /W /Width
+.dicttomark readonly def
+/unabbrevvaluedict mark
+ /AHx /ASCIIHexDecode /A85 /ASCII85Decode /CC /CalCMYK
+ /CCF /CCITTFaxDecode /CG /CalGray /CR /CalRGB
+ /DCT /DCTDecode /CMYK /DeviceCMYK /Fl /FlateDecode
+ /G /DeviceGray /RGB /DeviceRGB
+ /I /Indexed /LZW /LZWDecode /RL /RunLengthDecode
+.dicttomark readonly def
+/unabbrevtypedict mark
+ /nametype {
+ //unabbrevvaluedict 1 index .knownget { exch pop } if
+ }
+ /arraytype {
+ dup 0 1 2 index length 1 sub {
+ 2 copy get unabbrevvalue put dup
+ } for pop
+ }
+.dicttomark readonly def
+/unabbrevvalue { % <obj> unabbrevvalue <obj'>
+ oforce //unabbrevtypedict 1 index type .knownget { exec } if
+} bdef
+
+drawopdict begin
+ /BI { mark } bdef
+ /ID {
+ counttomark 2 idiv dup 7 add dict begin {
+ exch //unabbrevkeydict 1 index .knownget { exch pop } if
+ exch unabbrevvalue def
+ } repeat pop
+ /IDFlag true def % flag for stream processing.
+ /File PDFsource def
+ currentdict makeimagekeys doimage
+ % The Adobe documentation says that the data following ID
+ % consists of "lines", and some PDF files (specifically, some files
+ % produced by PCL2PDF from Visual Software) contain garbage bytes
+ % between the last byte of valid data and an EOL.
+ % Some files (PDFOUT v3.8d by GenText) have EI immediately following
+ % the stream. Some have no EOL and garbage bytes.
+ % Therefore, we skip all bytes before EI or EOL
+ 0
+ { PDFsource read not { //true exit } if
+ dup 10 eq 1 index 13 eq or
+ { pop PDFsource token pop /EI ne exit
+ }
+ if
+ exch 69 eq 1 index 73 eq and { //false exit } if % 'EI'
+ }
+ loop
+ exch pop
+ { /ID cvx /syntaxerror signalerror
+ }
+ if
+ } bdef
+end
+
+% ================================ Text ================================ %
+
+drawopdict begin
+ % Text control
+ /BT { BT } def
+ /ET { ET } def
+ /Tc { Tc } def
+ /TL { TL } def
+ /Tr { Tr } def
+ /Ts { Ts } def
+ /Tw { Tw } def
+ /Tz { Tz } def
+ % Text positioning
+ /Td { Td } def
+ /TD { TD } def
+ /Tm { Tm } def
+ /T* { T* } def
+ % Text painting
+ /Tj { Tj } def
+ /' { ' } def
+ /" { " } def
+ /TJ { TJ } def
+
+ /Tform { Tform } def % Text formatting and painting for AcroForm
+ % without appearance streams.
+end
+
+% ============================== Annotations ============================== %
+
+
+
+% Get and normalize an annotation's rectangle.
+/annotrect { % <annot> annotrect <x> <y> <w> <h>
+ /Rect get aload pop
+ exch 3 index sub dup 0 lt { dup 5 -1 roll add 4 1 roll neg } if
+ exch 2 index sub dup 0 lt { dup 4 -1 roll add 3 1 roll neg } if
+} bdef
+
+% Set an annotation color.
+/annotsetcolor { % <annot> annotsetcolor -
+ /C knownoget { aload pop setrgbcolor } { 0 setgray } ifelse
+} bdef
+
+% Draw the border. Currently, we ignore requests for beveling, and we
+% don't round the corners of rectangles.
+/strokeborder { % <annot> <width> <dash> strokeborder -
+ 1 index 0 ne { % do not draw if border width is 0
+ gsave
+ 2 index annotsetcolor
+ 0 setdash dup setlinewidth
+ exch annotrect
+ 2 { 4 index sub 4 1 roll } repeat
+ 2 { 4 index 0.5 mul add 4 1 roll } repeat
+ rectstroke pop
+ grestore
+ } {
+ pop pop pop
+ } ifelse
+} bdef
+
+% Draw an annotation border.
+/drawborder { % <annot> drawborder -
+ gsave
+ dup /BS known 1 index /Border known or {
+ dup /BS knownoget {
+ dup type /dicttype ne % <annot> <border> <bad?>
+ } {
+ dup /Border oget
+ dup type /arraytype ne % <annot> [border] <bad?>
+ } ifelse
+ {
+ ( **** Warning: Wrong type of annotation border object.\n)
+ pdfformaterror
+ } if
+ dup type /dicttype eq {
+ dup /W knownoget not { 1 } if
+ % Per PDF1.6 Reference table 8.13, /W in the border style dictionary is
+ % expressed in points (an absolute unit), so compensate here for any
+ % scaling of the PostScript user space done due to /UserUnit.
+ % Scaling due to -dPDFFitPage is not undone, to keep the correct border width
+ % compared to the size of the surrounding marks.
+ //systemdict /NoUserUnit .knownget not { false } if not
+ //systemdict /PDFFitPage known not and { % UserUnit is ignored if -dPDFFitPage
+ Page /UserUnit knownoget { div } if
+ } if
+ [] 2 index /S knownoget {
+ /D eq { 2 index /D knownoget not { [3] } if exch pop } if
+ } if 3 -1 roll pop strokeborder
+ } {
+ dup 2 get
+ exch dup length 3 gt { 3 get } { pop [] } ifelse
+ strokeborder
+ } ifelse
+ } {
+ 1 [] strokeborder
+ } ifelse
+ grestore
+} bdef
+
+%
+% The PDF annotation F (flags) integer is bit encoded.
+% Bit 1 (LSB) Invisible: 1 --> Do not display if no handler.
+% Note: We have no handlers but we ignore this bit.
+% Bit 2 Hidden: 1 --> Do not display. We will not display if this bit is set.
+% Bit 3 Print: 1 --> Display if printing. We will display if this bit set
+% (and not hidden) and Printed is true
+% Bit 4 NoZoom: 1 --> Do not zoom annotation even if image is zoomed.
+% Bit 5 NoRotate: 1 --> Do not rotate annotation even if image is rotated.
+% Bit 6 NoView: 0 --> Display if this is a 'viewer'. We will display
+% if this bit is not set (and not hidden) and Printed is false
+% Bit 7 Read Only - 1 --> No interaction. We ignore this bit
+%
+/annotvisible { % <annot> annotvisible <visible>
+ /F knownoget not { 0 } if % Get flag value
+ dup 2 and 0 eq % Check hidden flag
+ exch dup 4 and 0 ne Printed and % Check print flag
+ exch 32 and 0 eq Printed not and % Check noview flag
+ or % Combine print and view
+ and % Combine with 'hidden' flag test
+} bdef
+
+/drawwidget { % <scalefactor> <annot> drawwidget -
+ dup /AP knownoget {
+ dup /N known not {
+ ( **** Appearance dictionary (AP) lacks the mandatory normal (N) appearance.\n)
+ pdfformaterror
+ } if
+ false
+ [/N /R /D] {
+ % stack: scale annot appearance false key
+ dup 3 index exch known {
+ exch pop true exit
+ } if
+ pop
+ } forall
+ % stack: scale annot appearance key true
+ % stack: scale annot appearance false
+ dup {
+ pop
+ oget
+ % Acrobat Distiller produces files in which this Form
+ % XObject lacks Type and Subtype keys. This is illegal,
+ % but Acrobat Reader accepts it. The only way we can
+ % tell whether this is a Form or a set of sub-appearances
+ % is by testing for the stream Length or File key.
+ % If the stream lacks Length key, try File key.
+ dup /Length known 1 index /File known or {
+ % If this is a form then simply use it
+ true
+ } {
+ 1 index /AS knownoget not {
+ % If we do not have AS then use any appearance
+ { exch pop oforce exit } forall true
+ } {
+ % Stack: annot Ndict AS
+ % Get the specified appearance. If no appearance, then
+ % display nothing - set stack = false.
+ knownoget
+ } ifelse
+ } ifelse
+ } {
+ exch pop % discard useless AP dictionary
+ } ifelse
+
+ % Stack: scale annot appearance true
+ % Stack: scale annot false
+ {
+ % Draw appearance
+ % Initialize graphic following "7.4.4 Appearance Streams"
+ q graphicsbeginpage textbeginpage
+ 1 index annotrect pop pop translate
+ 2 index dup scale % Apply scale factor
+ DoForm Q
+ } if
+ } {
+ dup /FT knownoget {
+ /Tx eq {
+ % Stack: scale annot
+ dup /DA known 1 index /V known and {
+ dup /DA oget
+ q graphicsbeginpage textbeginpage
+ 1 index annotrect pop pop translate
+ 2 index dup scale % Apply scale factor
+ cvx exec
+ dup /V oget
+ 0 0 moveto dup false charpath pathbbox newpath 3 -1 roll
+ sub abs 3 1 roll sub abs
+ 3 index annotrect 4 2 roll pop pop
+ 6 index mul exch 6 index mul
+ % stack: scale annot V vsize hsize vrect hrect
+ % Calculate horizontal justification first
+ % horizontal can be left (Q=0), center (Q=1), or right (Q=2) justification
+ 3 -1 roll
+ % stack: scale annot V vsize vrect hrect hsize
+ 5 index /Q knownoget not { 0 } if % default 0 == left
+ dup 0 eq {
+ pop pop pop 0 % left justified
+ } {
+ 1 eq {
+ 2 div exch 2 div exch sub % centered
+ } {
+ sub % right justified (hrect - hsize)
+ } ifelse
+ } ifelse
+ % stack: scale annot V vsize vrect hoffset
+ % Center the text vertically in the rect (Acrobat Reader seems to do this)
+ 3 1 roll 2 div exch 2 div sub abs
+ % stack: scale annot V hoffset voffset
+ moveto show
+ Q
+ } if
+ } if
+ } if
+ } ifelse
+ pop pop
+} bdef
+
+% For stamp object we have to determine the size of the output rectangle
+% and the size of the BBox for the stamp image. From these we calculate
+% a scale factor for drawing the stamp.
+/calcstampscale { % <annot> calcstampscale scale
+ dup /Rect known {
+ dup annotrect 4 -2 roll pop pop % get width height size in user space
+ 3 -1 roll /AP knownoget {
+ /N knownoget {
+ dup /Matrix knownoget {
+ % transform /Annot /Rect xwidth to Form space
+ 4 -2 roll 3 -1 roll dtransform 3 -1 roll
+ } if
+ /BBox knownoget {
+ exch pop % discard y height
+ aload pop pop exch pop sub % BBox width
+ dup 0 eq {
+ ( **** Warning: /BBox has zero width which is not allowed.\n)
+ pdfformaterror
+ pop pop 1 1 % 0 width -- revert to unity scaling
+ } if
+ div % scale x widths
+ dup 0 lt { neg } if % get magnitude
+ } {
+ pop pop 1 % default to unity scaling
+ } ifelse % if we have /BBox
+ } {
+ pop pop 1
+ } ifelse % if we have /N
+ } {
+ pop pop 1
+ } ifelse % if we have /AP
+ } {
+ ( **** Warning: /Annot dict is missing required /Rect entry.\n)
+ pdfformaterror
+ pop 1
+ } ifelse
+} bdef
+
+/drawlink { % <annot> drawlink -
+ dup drawborder dup calcstampscale exch drawwidget
+} bdef
+
+% Draw an annotation.
+/drawannottypes mark
+ /Link { drawlink } bind
+.dicttomark readonly def
+/drawannot { % <annot> drawannot -
+ dup annotvisible {
+ gsave
+ dup dup /Subtype knownoget {
+ //drawannottypes exch .knownget {
+ exec
+ } {
+ dup calcstampscale exch drawwidget % Use drawwidget for everything else
+ } ifelse % type known
+ } {
+ pop
+ ( **** Warning: /Annot dict without required /Subtype entry is ignored.\n)
+ pdfformaterror
+ } ifelse
+ grestore
+ } if pop % annotvisible
+} bdef
+currentdict /drawannottypes undef
+
+% ============================ AcroForm fields ============================ %
+
+% Get an attribure of the 0th annotation of a node
+/annot_oget { % <annot> /Name annot_oget <value>
+ 1 index /Kids knownoget {
+ 0 oget exch oget exch pop
+ } {
+ oget
+ } ifelse
+} bdef
+
+% All procedures have the signature:
+% <acroform> <field> <annot|field> foo <acroform> <field> <annot|field>
+/draw_terminal_field_dict 4 dict begin
+
+/Btn {
+ 1 index /Tf pget not { 0 } if
+ dup 16#20000 and 0 ne {
+ pop % Push button
+ dup /AP known {
+ dup 1 exch drawwidget
+ } {
+ (Push button without appearance stream is not yet implemented) =
+ } ifelse
+ } {
+ 16#10000 and 0 ne {
+ % Radio button
+ dup /AP known {
+ 1 index /Kids oget {
+ 1 exch drawwidget
+ } forall
+ } {
+ (Radio button without appearance stream is not yet implemented) =
+ } ifelse
+ } {
+ % Checkbox
+ dup /AP known {
+ dup 1 exch drawwidget
+ } {
+ (CkeckBox without appearance stream is not yet implemented) =
+ } ifelse
+ } ifelse
+ } ifelse
+} bdef
+
+/Tx {
+ dup /AP known {
+ dup 1 exch drawwidget
+ } {
+ 2 index /NeedAppearances knownoget not { //false } if {
+ dup /AP << /N 10 dict dup cvx begin >> put
+ /Subtype /Form def
+ /BBox [ 0 0 4 index /Rect oget { oforce } forall 3 -1 roll sub abs 3 1 roll sub abs exch ] def
+ /Resources 3 index /DR pget not { 0 dict } if def
+ /File 1000 string dup 3 1 roll def
+ /Length 0 def
+ % <acroform> <field> <annot> (string)
+ /NullEncode filter % <acroform> <field> <annot> file
+
+ dup (BT ) writestring
+ 2 index /DA pget not { () } if
+ [ exch
+ { token {
+ dup /Tf eq {
+ 2 index 0 eq {
+ /BBox load 3 get
+ 0.75 mul % empirical constant
+ 4 -1 roll pop 3 1 roll
+ } if
+ } if
+ exch
+ } {
+ exit
+ } ifelse
+ } loop
+ ]
+ { 1 index exch write== } forall
+ dup 3 index /MaxLen pget not { 0 } if write=
+ dup 3 index /V pget not { () } if write==
+ dup 3 index /Ff pget not { 0 } if write=
+ dup 3 index /Q pget not { 0 } if write=
+ dup (Tform ET) write=
+ end
+ closefile % <acroform> <field> <annot>
+ dup 1 exch drawwidget
+ } if
+ } ifelse
+} bdef
+
+/Ch {
+ (Ch is not yet implemened) ==
+} bdef
+
+/Sig {
+ (Sig is not yet implemened ) ==
+} bdef
+
+currentdict end def
+
+/draw_terminal_field { % <field> draw_terminal_field -
+ dup /Kids knownoget { 0 oget } { dup } ifelse
+ dup /P knownoget {
+ /Page load eq {
+ //draw_terminal_field_dict 2 index /FT pget not { 0 } if .knownget {
+ exec
+ } if
+ } if
+ } if
+ pop pop
+} bdef
+
+% We distinguish 4 types of nodes on the form field tree:
+% - non-terminal field - has a kid that refers to the parent (or anywhere else)
+% - terminal field with separate widget annotations - has a kid that doesn't have a parent
+% - terminal field with a merged widget annotation - has no kids
+% - widget annotation - has /Subtype and /Rect
+%
+% The recursive enumeration of the form fields doesn't descend into widget annotations.
+
+/draw_form_field { % <field> draw_form_field -
+ dup /Kids knownoget { % field []
+ dup 0 oget /Parent knownoget { % field [] kid
+ pop % mon-terminal field % field []
+ exch pop % []
+ { oforce draw_form_field } forall
+ } {
+ pop draw_terminal_field % separate annots % -
+ } ifelse
+ } {
+ draw_terminal_field % merged annotation % -
+ } ifelse
+} bdef
+
+/draw_acro_form { % <form> draw_acro_form -
+ dup /Fields knownoget {
+ { oforce draw_form_field } forall
+ } if
+ pop
+} bdef
+
+currentdict /draw_terminal_field_dict undef
+
+end % pdfdict
+end % GS_PDF_ProcSet
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/pdf_font.ps b/Master/tlpkg/tlgs/lib/pdf_font.ps
new file mode 100644
index 00000000000..d9cf7adb199
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf_font.ps
@@ -0,0 +1,1557 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdf_font.ps 8093 2007-06-30 23:46:18Z alexcher $
+% PDF font operations.
+
+% Finding a font by name can't give a proper result when PDF font names aren't unique.
+% But it is only the way to obtain a font in Postscript after a font file is executed.
+% Therefore using a FontName (and findfont) is allowed only
+% immediately after a font file is executed.
+% In all other cases the font to be found by a pointer through PDF structures.
+%
+% This ideal logics can't work for documents,
+% which define a font resource with an embedded font,
+% and another font resource with same BaseFont but with no embedded font
+% (and possibly with no font descriptor).
+% Our testbase does contain such examples.
+% In this case we do find font by FontName (with findfont),
+% since there is no other way to get a reasonable result.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+GS_PDF_ProcSet begin
+pdfdict begin
+
+% We cache the PostScript font in an additional element of the
+% font resource dictionary, called PSFont.
+
+% ---------------- Encodings ---------------- %
+
+/.notdefEncoding 256 { /.notdef } repeat 256 packedarray def
+
+% Apply a list of differences to an Encoding.
+% Note that the differences may cause the array to grow.
+/updateencoding { % <encoding|null> <differences> updateencoding <enc'>
+ % Calculate the length of the result.
+ % in case the incoming Encoding is null, use .notdefEncoding
+ exch dup null eq { pop .notdefEncoding } if
+ 0 0 3 index {
+ dup type /nametype ne { exch pop oforce } { pop 1 add } ifelse
+ % Differences list may not be in order, update the largest_index
+ % stack: <Differences> <encoding> <largest_index> <at_index>
+ 2 copy lt { exch pop dup } if % at_index is new largest
+ } forall
+ pop 1 index length .max array dup 0 4 -1 roll putinterval
+ exch 0 exch {
+ % Stack: enc' code element
+ dup type /nametype ne
+ { exch pop oforce }
+ { 3 copy put pop 1 add }
+ ifelse
+ } forall pop
+} bdef
+
+% Get the Encoding for a font.
+/getencoding % <base-encoding> <font-resource> getencoding <enc>
+ { /Encoding knownoget
+ { dup type /nametype eq
+ {
+ % The published PDF specification says the Encoding name
+ % "must be" one of the 3 predefined Encodings, implying
+ % that an error should occur if it isn't. However, Acrobat
+ % Reader simply ignores unknown names, and since there are
+ % some buggy applications that rely on this, we do the same.
+
+ dup dup dup /MacRomanEncoding eq
+ exch /MacExpertEncoding eq or
+ exch /WinAnsiEncoding eq or
+ { exch pop findencoding }
+ { pop }
+ ifelse
+ }
+ { dup type /arraytype eq
+ { exch pop
+ ( **** Warning: Encoding is an array, not name or dictionary.\n) pdfformaterror
+ }
+ { dup /BaseEncoding knownoget
+ { dup / eq
+ { pop
+ ( **** Warning: Ignoring bad BaseEncoding name.\n) pdfformaterror
+ % as found in a PDF file from J.D.Edwards OneWorld (B7333), bug 687786
+ }
+ { findencoding 3 -1 roll pop exch }
+ ifelse
+ }
+ if
+ /Differences knownoget { updateencoding } if
+ }
+ ifelse
+ }
+ ifelse
+ } {
+ ( **** Warning: Encoding not present.\n) pdfformaterror
+ }
+ ifelse
+ } bdef
+
+/checkGlyphNames2Unicode % <dict> checkGlyphNames2Unicode -
+{
+ PDFDEBUG {
+ dup /FontInfo .knownget {
+ /GlyphNames2Unicode .knownget {
+ (Has GlyphNames2Unicode) =
+ pop % { exch == ==} forall
+ } if
+ } if
+ } if
+ pop
+} bind def
+
+% Define a font using it's FontName as the key.
+% Adjust a font according to the Encoding and Widths in the font resource.
+/adjustfont { % <font-resource> <font> adjustfont <font'>
+ getfontencoding
+ 3 copy .processToUnicode
+ getfontmetrics 5 -1 roll pop .updatefont { dup /FontName get exch definefont } if
+} bind def
+
+% Get the (possibly modified) encoding of a font.
+/getfontencoding { % <font-resource> <font> getfontencoding
+ % <font-resource> <font> <Encoding|null>
+ //systemdict /IgnoreTTEncoding .knownget not { //false } if {
+ 1 index /Subtype get /TrueType eq } { //false } ifelse {
+ //null
+ } {
+ 1 index /Encoding known {
+ dup /Encoding knownoget { 2 index getencoding } { //null } ifelse
+ } {
+ //null
+ } ifelse
+ } ifelse
+} bdef
+
+% Returns true if the current glyph is in the Differences array at
+% the specified index value. This is needed because the Widths
+% array may map to the same glyph at different positions from the
+% Encoding. We want to use the Width that was associated with the
+% one specified in the Encoding::Differences list.
+/match_in_diff % <Differences> <index> <glyphname> match_in_diff <bool>
+{ false 4 1 roll 0 4 -1 roll % stack: false index glyphname at_index==0 Differences
+ { exch 1 index type /nametype ne {
+ % stack: false index glyphname Diff_element at_index
+ pop % Diff_element is new at_index
+ } {
+ % stack: false index glyphname Diff_element at_index
+ exch 2 index eq {
+ % stack: false index glyphname at_index
+ dup 3 index eq {
+ true 5 1 roll % stack: true false index glyphname at_index
+ pop exit
+ } if
+ } if
+ 1 add % at_index++ stack: false index glyphname at_index'
+ } ifelse
+ } forall
+ % stack: true false index glyphname
+ % or : false index glyphname at_index
+ pop pop pop
+} bdef
+
+/unique_name { % <dict> </root> unique_name </unique>
+ %
+ % Note : this function interacts with pdf_write_encoding in src/gdevpdtw.c
+ % and with copied_drop_extension_glyphs in src\gxfcopy.c
+ % by adding a reserved substring (~GS~).
+ %
+ .namestring % <<>> (root)
+ 0 1 65535 {
+ 5 string cvs % <<>> (root) (0)
+ (~GS~) exch concatstrings
+ 1 index exch % <<>> (root) (root) (~GS~0)
+ concatstrings % <<>> (root) (root~GS~0)
+ dup % <<>> (root) (root~GS~0) (root~GS~0)
+ 3 index exch % <<>> (root) (root~GS~0) <<>> (root~GS~0)
+ known not {
+ exch pop exit % <<>> (root~GS~0)
+ } if
+ pop
+ } for
+ exch pop cvn % /root0
+} bdef
+
+% Get the metrics of a font, if specified.
+/getfontmetrics { % <font-resource> <font> <Encoding|null> getfontmetrics
+ % <font-resource> <font> <Encoding|null>
+ % <Metrics|null> <GlyphMap|null>
+
+ 2 index /Widths known {
+ dup //null eq { pop dup /Encoding get } if
+ 7 dict begin
+ dup length dict
+ /Metrics exch def
+ /Encoding exch def
+ /GlyphMap //null def
+ exch
+ dup /Widths oget /Widths exch def
+ % Stack: font font-res
+ % Note that widths are always based on a 1000-unit
+ % character space, but the FontMatrix may specify
+ % some other scale factor. Compensate for this here,
+ % by scaling the Widths if necessary.
+ 0.001 2 index /FontMatrix get 0 get div
+ % Stack: font font-res mscale
+ /FirstChar 2 index /FirstChar oget def
+ /LastChar 2 index /LastChar oget def
+
+ Encoding length LastChar le {
+ ( **** Warning: Font Encoding array size is smaller than character range.\n)
+ pdfformaterror
+ } if
+
+ 1 index /FontDescriptor knownoget {
+ /MissingWidth knownoget not { 0 } if
+ }
+ { 1000
+ }
+ ifelse /MissingWidth exch def
+
+ Widths length LastChar FirstChar sub le {
+ ( **** Warning: Font Widths array size is smaller than character range.\n)
+ pdfformaterror
+ /Widths [Widths aload length LastChar FirstChar sub exch sub MissingWidth exch {dup} repeat] def
+ } if
+ FirstChar
+
+ 0 Encoding
+ { % Stack: font font-res mscale first-char index charname
+
+ 1 index FirstChar lt { MissingWidth } {
+ 1 index LastChar gt { MissingWidth } { Widths 2 index FirstChar sub get } ifelse
+ } ifelse
+
+ % Stack: font font-res mscale first-char index charname width
+ 4 index mul
+ % The following 'loop' is only context for 'exit'.
+ {
+ % Work around a bug in pdfTeX, which can generate Encoding
+ % vectors containing nulls :
+ 1 index //null eq { exit } if
+ Metrics 2 index .knownget {
+ 1 index ne
+ } {
+ //false
+ } ifelse {
+ % Two or more Encoding elements refer same glyph name,
+ % and Widths specify different wihts for it.
+ % Since a Postscript font can't have different
+ % Metrics for same glyph name,
+ % we generate an unique name, and create a new
+ % Charstrings entry with same glyph value.
+ GlyphMap //null eq {
+ /Encoding Encoding dup length array copy def
+ /GlyphMap 4 dict def
+ } if
+ % To prevent too many new names, check whether
+ % we can use one already created for same glyph.
+ //true
+ GlyphMap { % f r s c i n w b n1 n2
+ 4 index eq { % f r s c i n w b n1
+ dup Metrics exch get % f r s c i n w b n1 w1
+ 3 index eq { % f r s c i n w b n1
+ 4 3 roll pop % f r s c i w b n1
+ 3 1 roll pop % f r s c i n1 w
+ Encoding 3 index 3 index put
+ //false % f r s c i n1 w b
+ exit
+ } {
+ pop
+ } ifelse
+ } { % f r s c i n w b n1
+ pop
+ } ifelse
+ } forall % f r s c i n w b
+ { % Do create a new name.
+ Metrics 2 index //unique_name exec % f r s c i n w nn
+ Encoding 4 index 2 index put
+ GlyphMap 1 index 5 -1 roll put % f r s c i w nn
+ exch
+ % Stack: font font-res mscale first-char index new_name width
+ } if
+ } if
+ 2 copy Metrics 3 1 roll put
+ exit
+ } loop
+ pop pop
+ 1 add
+ }
+ forall pop pop pop
+ exch Encoding Metrics GlyphMap end
+ } {
+ //null //null
+ } ifelse
+} bdef
+
+currentdict /unique_name undef
+currentdict /match_in_diff undef
+
+/ToUnicodeCMapReader 3 dict begin
+ /defineresource % <name> <dict> <cat-name> defineresource <dict>
+ {
+ pop
+ dup userdict exch /.lastToUnicode exch put
+ exch pop
+ } bind def
+ /CIDSystemInfo
+ {
+ ( **** Warning: ToUnicode CMap has invalid syntax near CIDSystemInfo.\n) pdfformaterror
+ /CIDSystemInfo
+ } bind def % A work around a bug in Altona.Page_3.2002-09-27.pdf - a slash is missed.
+ /CMapName
+ {
+ ( **** Warning: ToUnicode CMap has no CMapName.\n\
+ See the comment to revision 6201 in gs/doc/ps2pdf.htm#Problems .\n) pdfformaterror
+ /CMap1 % arbitrary, PDF defineresource tolerates non-unique names
+ } bind def % A work around incorrect ToUnicode CMap generated by GS before rev. 6201.
+currentdict end readonly def
+
+/string2number % <string> string2number <number>
+{ 0 exch dup 0 exch 1 exch length 1 sub { % n () i
+ 1 index exch get % n () v
+ 3 2 roll 256 mul add exch % v+n*256 ()
+ } for
+ pop % N
+} bind def
+
+/copy&def % <key> <value> <bool> copy&def -
+{
+ { true
+ } {
+ currentdict gcheck {
+ dup gcheck not
+ } {
+ false
+ } ifelse
+ } ifelse
+ { currentglobal currentdict gcheck setglobal
+ exch dup length string copy exch
+ setglobal
+ } if
+ def
+} bind def
+
+/.convert_ToUnicode-into-g2u % <GlyphNames2Unicode> <Encoding|null> <CMap> .convert_ToUnicode-into-g2u -
+{
+ PDFDEBUG {
+ (.convert_ToUnicode-into-g2u beg) =
+ } if
+ 3 2 roll begin
+ /.CodeMapData get % About the data format see gs_cmap.ps, the comment after "CMap operators".
+ 1 get % code maps
+ {
+ PDFDEBUG {
+ dup ==
+ } if
+ dup length 1 sub 0 exch 5 exch { % e [] i
+ 2 copy get % e [] i (prefix)
+ string2number % e [] i prefix
+ 2 index 2 index 1 add get % e [] i prefix (key_size,?is_range,value_type,value_size)
+ dup 0 get 8 mul % e [] i prefix (key_size,?is_range,value_type,value_size) key_size*8
+ 3 2 roll exch bitshift exch % e [] i prefix<<key_size*8 (key_size,?is_range,value_type,value_size)
+ dup 0 get exch 3 get % e [] i offset key_size value_size
+ 4 index 4 index 2 add get % e [] i offset key_size value_size (keys)
+ 5 index 5 index 3 add get % e [] i offset key_size value_size (keys) (values)
+ PDFDEBUG {
+ ( offset=) print 4 index =string cvs print
+ ( key_size=) print 3 index =string cvs print
+ ( value_size=) print 2 index =
+ ( keys=) print 1 index ==
+ ( values=) print dup ==
+ } if
+ 1 index length 0 eq {
+ % A single pair.
+ exch pop exch pop exch pop exch % e [] i (values) offset
+ 4 index null ne {
+ 4 index length 1 index gt {
+ 4 index exch get
+ } if
+ } if % e [] i (values) cid|name
+ exch
+ PDFDEBUG {
+ ( defined single: ) print 1 index =string cvs print ( ) print dup ==
+ } if
+ false copy&def % e [] i
+ pop % e []
+ } {
+ % A range. % e [] i offset key_size value_size (keys) (values)
+ dup length string copy % protect the original string from modifications below.
+ 0 4 index 2 mul 3 index length 1 sub { % e [] i offset key_size value_size (keys) (values) j
+ 2 index 1 index 6 index getinterval
+ string2number % e [] i offset key_size value_size (keys) (values) j keyL
+ PDFDEBUG {
+ ( keyL=) print dup =string cvs print
+ } if
+ 3 index 2 index 7 index add 7 index getinterval
+ string2number % e [] i offset key_size value_size (keys) (values) j keyL keyH
+ PDFDEBUG {
+ ( keyH=) print dup =
+ } if
+ 3 2 roll 6 index idiv 5 index mul % e [] i offset key_size value_size (keys) (values) keyL keyH J
+ 3 index exch 6 index getinterval % e [] i offset key_size value_size (keys) (values) keyL keyH (valueL)
+ 3 1 roll 1 exch { % e [] i offset key_size value_size (keys) (values) (value) k
+ 9 index null ne {
+ 9 index exch get % e [] i offset key_size value_size (keys) (values) (value) name
+ } if % e [] i offset key_size value_size (keys) (values) (value) cid|name
+ 1 index % e [] i offset key_size value_size (keys) (values) (value) cid|name (value)
+ PDFDEBUG {
+ ( defined from range: ) print 1 index =string cvs print ( ) print dup ==
+ } if
+ true copy&def % e [] i offset key_size value_size (keys) (values) (value)
+ % Assuming the lowest byte of 'value' changes, others don't.
+ dup dup length 1 sub % e [] i offset key_size value_size (keys) (values) (value) (value) l
+ 2 copy get % e [] i offset key_size value_size (keys) (values) (value) (value) l v
+ % Modulo 256 increment prevents a rangecheck error when the result is stored in a string.
+ % The adjustment can happen only at the end of the loop where the string is discarded. Bug 688535.
+ 1 add 255 and put % e [] i offset key_size value_size (keys) (values) (value')
+ } for % e [] i offset key_size value_size (keys) (values) (value)
+ } for
+ pop pop pop pop pop pop pop % e []
+ } ifelse
+ } for
+ pop % e
+ } forall
+ end
+ pop %
+ PDFDEBUG {
+ (.convert_ToUnicode-into-g2u end) =
+ } if
+} bind def
+
+/.processToUnicode % <font-resource> <font-dict> <encoding|null> .processToUnicode -
+{
+ % Currently pdfwrite is only device which can handle GlyphNames2Unicoide to
+ % generate a ToUnicode CMaps. So don't bother with other devices.
+ currentdevice .devicename /pdfwrite eq {
+ PDFDEBUG {
+ (.processToUnicode beg) =
+ } if
+ 2 index /ToUnicode knownoget {
+ dup type /nametype eq {
+ % Bug687351.pdf defines /ToUnicode /Identity-H, what is incorrect.
+ ( **** Warning: Ignoring bad ToUnicode CMap.\n) pdfformaterror
+ pop
+ } {
+ PDFfile fileposition exch
+ false resolvestream
+
+ //ToUnicodeCMapReader begin
+ % Following Acrobat we ignore everything outside begincmap..endcmap.
+ dup 0 (begincmap) /SubFileDecode filter flushfile
+ /CIDInit /ProcSet findresource begin 12 dict begin
+ 0 (endcmap) /SubFileDecode filter cvx /begincmap cvx exch 2 .execn
+ endcmap
+ userdict /.lastToUnicode currentdict put
+ end end end
+
+ PDFfile exch setfileposition
+ 1 index /FontInfo .knownget not {
+ 1 index /FontInfo 5 dict dup 4 1 roll put
+ } if
+ dup /GlyphNames2Unicode .knownget not {
+ currentglobal exch dup gcheck setglobal
+ dup /GlyphNames2Unicode 100 dict dup 4 1 roll .forceput
+ 3 2 roll setglobal
+ } if % font-res font-dict encoding|null font-info g2u
+ exch pop exch % font-res font-dict g2u encoding|null
+ userdict /.lastToUnicode get % font-res font-dict g2u Encoding|null CMap
+ .convert_ToUnicode-into-g2u % font-res font-dict
+ null % font-res font-dict null
+ } ifelse
+ } if
+ PDFDEBUG {
+ (.processToUnicode end) =
+ } if
+ } if
+ pop pop pop
+} bind def
+
+% ---------------- Descriptors ---------------- %
+
+% Partial descriptors for the 14 built-in fonts. Note that
+% from PDF 1.1 to PDF 1.2, the meaning of the Flag 6 in the FontDescriptor
+% object has undergone a subtle change in its meaning which has serious
+% consequences for searching with Acrobat:
+% In PDF 1.1, the flag meant: Font has StandardEncoding
+% In PDF 1.2, the flag means: Font has (subset of) StandardRomanCharacterSet
+/standardfontdescriptors mark
+ /Courier mark /Flags 16#23 .dicttomark
+ /Courier-Oblique 1 index
+ /Courier-Bold 1 index
+ /Courier-BoldOblique 1 index
+ /Helvetica mark /Flags 16#20 .dicttomark
+ /Helvetica-Oblique 1 index
+ /Helvetica-Bold 1 index
+ /Helvetica-BoldOblique 1 index
+ /Times-Roman mark /Flags 16#22 .dicttomark
+ /Times-Bold 1 index
+ /Times-Italic mark /Flags 16#62 .dicttomark
+ /Times-BoldItalic 1 index
+ /Symbol mark /Flags 16#4 .dicttomark
+ /ZapfDingbats 1 index
+.dicttomark readonly def
+
+% ---------------- Utilities ---------------- %
+
+
+/.pdforigfontcache_g 20 dict def
+currentglobal false setglobal
+systemdict /.pdforigfontcache_l 20 dict .forceput
+setglobal
+
+% Find an original font, using cache to prevent adjustfont to accumulate changes.
+/pdffindcachedfont { % <font_name> pdffindcachedfont <font>
+ dup //.pdforigfontcache_g exch .knownget {
+ exch pop
+ } {
+ dup .pdforigfontcache_l exch .knownget {
+ exch pop
+ } {
+ dup findfont dup
+ dup gcheck { //.pdforigfontcache_g } { .pdforigfontcache_l } ifelse
+ % Stack : font_name font font cache
+ 4 2 roll .growput
+ } ifelse
+ } ifelse
+} bind def
+
+% Add original font to cache to prevent adjustfont to accumulate changes.
+/pdfaddcachedfont { % <font_name> pdfaddcachedfont <font>
+ dup findfont dup % name font font
+ dup gcheck { //.pdforigfontcache_g } {.pdforigfontcache_l} ifelse
+ 4 2 roll % font d name font
+ put % font
+} bind def
+
+/.remove_font_name_prefix { % <name> .remove_font_name_prefix <name>
+ dup .namestring (+) search {
+ true exch
+ { dup 65 lt exch 90 gt or {
+ pop false exit
+ } if
+ } forall
+ { pop exch pop cvn
+ } {
+ pop pop
+ } ifelse
+ } {
+ pop
+ } ifelse
+} bind def
+
+% Find a font (except for embedded ones), and adjust its encoding if necessary.
+/.pdfdfndict mark
+ /defaultfontname /Helvetica
+.dicttomark readonly def
+/pdffindfont { % <font-resource> <fontname> pdffindfont <font>
+ % If the font isn't available, synthesize one based on
+ % its descriptor.
+ dup /Font resourcestatus {
+ pop pop pdffindcachedfont
+ } {
+ 1 index /FontDescriptor knownoget {
+ % Stack: font-res fontname fontdesc
+ dup /Flags oget
+ dup 16#40 and -6 bitshift % 1, oblique/italic
+ 1 index 16#40000 and -17 bitshift add % 2, bold
+ exch 16#2 and 2 bitshift add % 8, serif
+ % We should look at the fixed flag, too.
+ % Stack: font-res fontname fontdesc properties
+
+ % Even though /FontName is a required key in FontDescriptor dict
+ % (As of the PDF 1.4 Reference Manual), In the case of missing
+ % /FontName key, we substitue /BaseFont for the value of /FontName.
+ % Yet another case of broken PDF's that Adobe Reader accepts.
+ 1 index dup /FontName known {
+ /FontName oget
+ } {
+ ( **** FontDescriptor missing required /FontName key. BaseFont name used.\n)
+ pdfformaterror
+ pop 2 index % grab the BaseFont from the stack.
+ } ifelse
+ .remove_font_name_prefix
+ exch
+ % Analyzes font name and extract "Bold" and "Narrow" properties
+ % which are not described by the FontDescriptor Flags.
+ 0 2 index .fontnameproperties 6 and or
+ % Rebind the default font name to Helvetica so that
+ % fonts with no properties are handled correctly.
+ //.pdfdfndict begin .substitutefontname end
+ % Stack: font-res fontname fontdesc substname|null
+ Fontmap 1 index known not {
+ % No available good substitution, use the standard one.
+ pop 1 index .substitutefont
+ } if
+ dup 3 index ne QUIET not and {
+ (Substituting font ) print dup =only
+ ( for ) print 2 index =only (.) = flush
+ } if
+ pdffindcachedfont
+ % Stack: font-res fontname fontdesc font
+ % If this is a small-caps font, replace the CharString
+ % entries for a..z.
+ exch /Flags oget 16#20000 and 0 ne {
+ true .copyfontdict
+ dup /CharStrings 2 copy get dup length dict .copydict
+ % stack: font-res fontname font font /CharStrings CharStringsdict
+ 5 index /FirstChar get 97 .max
+ 6 index /LastChar get 122 .min 1 exch {
+ % Stack: font-res fontname font' font' /CharStrings charstrings code
+ % Note that this only remaps a-z, not accented characters.
+ 6 index /Widths oget 1 index 8 index /FirstChar get sub oget
+ 1 string dup 0 5 -1 roll put
+ % Stack: font-res font' font' /CharStrings charstrings code
+ % width (x)
+ 2 index exch dup cvn exch
+ dup 0 2 copy get 32 sub put 4 -1 roll {
+ % Stack: operand (X) width
+ 0 setcharwidth exch pop
+ currentfont /FontMatrix get matrix invertmatrix concat
+ 0.7 dup scale 0 0 moveto show
+ } /exec cvx 4 packedarray cvx put
+ } for put
+ } if
+ dup /FontName get 2 index ne {
+ true .copyfontdict
+ 2 copy exch /FontName exch put
+ } if
+ definefont
+ } {
+ % No descriptor available, use the default algorithm.
+ pdffindcachedfont
+ } ifelse
+ } ifelse
+ exch pop
+} bdef
+
+% ---------------- Type 1 fonts ---------------- %
+
+/buildType1 % <Type1-font-resource> buildType1 <font>
+ { dup /BaseFont get pdffindfont
+ } bdef
+
+% Read an embedded Type 1 font.
+/readfontfilter { % <proc> readfontfilter <filter>
+ 0 () /SubFileDecode filter
+} bdef
+
+% When Type 1 font reading procedure is executing, a copy of this dictionary is current.
+% We have to do something special about embedded fonts that execute definefont
+% more than once -- that is the function of topFontDict.
+% The whole type1 stream can be executed directly. There's no need to process
+% Length1, 2, 3 keys.
+
+/readtype1dict 5 dict dup begin
+ /definefont {
+ dup topFontDict eq topFontDict null eq or {
+ dup wcheck not { dup length dict copy } if
+ exch pop savedFontName exch
+ } if
+ //systemdict /definefont get exec
+ } bdef
+
+ /undef_proc_warning {
+ /Repaired true store % flag that we have warnings
+ UndefProcList exch 2 copy .knownget { 1 add } { 1 } ifelse put
+ } bdef
+
+ /missing-type1-procs 6 dict begin
+ /-| { string currentfile exch readstring pop /-| //undef_proc_warning exec } executeonly bdef
+ /RD { string currentfile exch readstring pop /RD //undef_proc_warning exec } executeonly bdef
+ /|- { noaccess def /|- //undef_proc_warning exec } executeonly bdef
+ /ND { noaccess def /ND //undef_proc_warning exec } executeonly bdef
+ /| { noaccess put /| //undef_proc_warning exec } executeonly bdef
+ /NP { noaccess put /NP //undef_proc_warning exec } executeonly bdef
+ currentdict end readonly def
+
+ /eexec {
+ % Assume the font dictionary is directly below the file on the stack
+ count 0 gt { /topFontDict 2 index cvlit store } if
+ //.eexec_param_dict /eexecDecode filter
+
+ //missing-type1-procs begin
+ /userdict .systemvar begin
+ //systemdict begin
+ readtype1dictcopy begin cvx stopped
+
+ { currentdict end //missing-type1-procs eq { exit } if } loop
+ { stop } if
+ } bdef
+
+ currentdict dup
+ /undef_proc_warning undef
+ /missing-type1-procs undef
+
+end readonly def
+
+/readtype1 { % <font-resource> <stream-dict> readtype1 <font>
+ 1 index exch % res res stream
+ PDFfile fileposition 3 1 roll % res pos res stream
+ dup /PFB known exch % res pos res pfb? stream
+ true resolvestream % res pos res pfb? file
+ exch {
+ //false /PFBDecode filter
+ } if
+ % Some buggy embedded fonts leave extra junk on the stack,
+ % so we have to make a closure that records the stack depth
+ % in a fail-safe way. This code also removes the mark when
+ % the implied cleartomark is not executed, i.e. Length3 == 0.
+ % Also restore dictstack depth.
+ %
+ //systemdict begin
+ % The PDF specification is somewhat muddy about whether
+ % an embedded font's name is supposed to be the BaseFont
+ % from the Font object or the FontName from the descriptor.
+ % Acrobat Distiller requires the former. Save away the
+ % name so we can substitute it at definefont time.
+ //readtype1dict dup length 3 add dict copy begin
+ 1 index /BaseFont oget /savedFontName exch def
+ /topFontDict null def
+ /readtype1dictcopy currentdict def
+ { cvx exec } aload pop count 2 sub 3 packedarray cvx exec
+ % clean up the dictstack
+ { currentdict /topFontDict known not { end } { end end exit } ifelse } loop
+ count exch sub { pop } repeat
+ PDFfile 3 -1 roll setfileposition
+ /BaseFont oget pdfaddcachedfont
+ exch pop
+ } bdef
+
+% ---------------- Type 3 fonts ---------------- %
+
+/buildType3 { % <Type3-font-resource> buildType3 <font>
+ 8 dict begin
+ /FontType 3 def
+ % If the font does not contain a Resources entry, then we use
+ % the resources from our current context. Page 391 of the PDF
+ % 1.6 spec says that the Resources dict is optional and if not
+ % present then we should use the Resources for the page.
+ % However we have a test file (687989) which uses a Type3 font
+ % inside a form XObject and the desired Resources are in the
+ % XObject dict and not in the Page dict. So we are going to
+ % the parent object to find resources instead of only going to
+ % the page dict when a font does not specify its required
+ % resources.
+ /Resources 1 index /Resources knownoget {
+ oforce
+ } {
+ LocalResources
+ } ifelse def
+ /FontBBox 1 index /FontBBox get cvx def
+ /FontMatrix 1 index /FontMatrix oget def
+ /CharProcs 1 index /CharProcs oget def
+ 1 index /Widths knownoget {
+ /Widths exch def
+ /FirstChar 1 index /FirstChar oget def
+ /LastChar 1 index /LastChar oget def
+ } if
+ /FontName 1 index /Name .knownget not {
+ PDFfile fileposition 16 32 string cvrs cvn
+ } if def
+
+ /Encoding .notdefEncoding 2 index getencoding def
+ % We have to define BuildChar rather than BuildGlyph:
+ % there is no PDF equivalent of glyphshow, and we need
+ % the character code to access the Widths.
+ /BuildChar {
+ % Stack: font charcode
+ 1 index begin 3 dict begin
+ /Font 3 -1 roll def /CharCode 1 index def
+ % Make unknown characters map to /.notdef
+ Encoding exch get dup CharProcs exch known
+ { CharProcs exch oget }
+ { pop CharProcs /.notdef oget }
+ ifelse
+ PDFfile fileposition exch
+ false resolvestream
+ % Stack: filepos stream
+ % Don't let setgcolor set the color inside the BuildGlyph
+ % procedure, because this causes an /undefined error.
+ q null /FillColor gput null /StrokeColor gput
+ Font /Resources get exch pdfopdict .pdfruncontext
+ Q
+ PDFfile exch setfileposition
+ end end
+ } bdef
+ dup currentdict Encoding .processToUnicode
+ FontName currentdict end definefont exch pop
+} bdef
+/.adjustcharwidth { % <wx> <wy> .adjustcharwidth <wx'> <wy'>
+ /Widths where {
+ begin
+ CharCode FirstChar ge CharCode LastChar le and {
+ exch pop Widths CharCode FirstChar sub get exch
+ } if end
+ } if
+} bdef
+
+% ---------------- TrueType fonts ---------------- %
+
+/TTfonts mark
+ /Arial /Helvetica
+ /Arial,Italic /Helvetica-Oblique
+ /Arial,Bold /Helvetica-Bold
+ /Arial,BoldItalic /Helvetica-BoldOblique
+ /CourierNew /Courier
+ /CourierNew,Bold /Courier-Bold
+ /TimesNewRoman /Times-Roman
+ /TimesNewRoman,Italic /Times-Italic
+ /TimesNewRoman,Bold /Times-Bold
+ /TimesNewRoman,BoldItalic /Times-BoldItalic
+.dicttomark readonly def
+
+/buildTrueType { % <TrueType-font-resource> buildTrueType <font>
+ dup /BaseFont oget
+ /Repaired true store % flag that we had warnings
+ TTFWarnList 1 index true put % Add fontname to the list
+ dup /Font resourcestatus dup { exch pop exch pop } if not
+ TTfonts 2 index known and {
+ dup TTfonts exch get
+ QUIET not {
+ (Substituting font ) print dup =only
+ ( for ) print 1 index =only (.) = flush
+ } if
+ exch 3 1 roll pdffindfont
+ true .copyfontdict
+ 2 copy exch /FontName exch put
+ definefont
+ } {
+ pdffindfont
+ } ifelse
+} bdef
+
+% Read an embedded TrueType font.
+/readtruetype { % <font-resource> <stream-dict> readtruetype <font>
+ 1 index exch
+ PDFfile fileposition 3 1 roll
+ true resolvestream readfontfilter
+ % Stack: filepos fontres stream
+ 1 index /Subtype get /CIDFontType2 eq {
+ .loadttcidfont
+ % Stack: filepos fontres cidfont
+ } {
+ % filepos fontres stream
+ 1 index /FontDescriptor oget % filepos fontres stream fd
+ /Flags get 4 and 0 ne % filepos fontres stream is_symbolic
+ dup { //null } { StandardEncoding } ifelse
+ 3 index /Encoding known {
+ 3 index getencoding
+ } if % filepos fontres stream is_symbolic Encoding
+ dup 4 index exch % filepos fontres stream is_symbolic Encoding fontres Encoding
+ /prebuilt_encoding exch put % filepos fontres stream is_symbolic Encoding
+ .loadpdfttfont
+ } ifelse
+ exch pop
+ PDFfile 3 -1 roll setfileposition
+ % Ignore both the Encoding and the Widths.
+ exch pop
+} bdef
+
+% ---------------- Type 0 fonts ---------------- %
+
+% Predefine the known CMaps, but only create them on demand.
+/knownCMaps mark
+ /Identity-H { /Identity-H 0 makeIdentityCMap }
+ /Identity-V { /Identity-V 1 makeIdentityCMap }
+.dicttomark def
+
+/makeIdentityCMap { % <cmapname> <wmode> .makeIdentityCMap -
+ .currentglobal true .setglobal 3 1 roll
+ /CIDInit /ProcSet findresource begin
+ 12 dict begin
+ begincmap
+ /WMode exch def
+ /CMapName exch def
+ /CIDSystemInfo 3 dict dup begin
+ /Registry (Adobe) def
+ /Ordering (Identity) def
+ /Supplement 0 def
+ end def
+ %/CMapName (see above)
+ /CMapVersion 1 def
+ /CMapType 1 def
+ %WMode (see above)
+ % The PDF documentation says that these CMaps map CIDs
+ % "1 to 65,536". This is a misprint for 0 to 65,535.
+ 1 begincodespacerange
+ % <0001> <00ff> <0100> <ffff>
+ <0000> <ffff>
+ endcodespacerange
+ 1 begincidrange
+ % <0001> <00ff> 1 <0100> <ffff> 256
+ <0000> <ffff> 0
+ endcidrange
+ endcmap
+ CMapName currentdict /CMap defineresource
+ knownCMaps CMapName 2 index put
+ end % CMap
+ end % CIDInit ProcSet
+ exch .setglobal
+} bdef
+
+/buildType0 { % <Type0-font-resource> buildType0 <font>
+ dup /BaseFont get % FontName
+ 1 index /Encoding oget
+ dup type /nametype eq {
+ dup /CMap resourcestatus {
+ pop pop /CMap findresource
+ } {
+ knownCMaps 1 index .knownget
+ { exch pop exec } { /undefined signalerror } ifelse
+ } ifelse
+ } {
+ PDFfile fileposition exch
+ dup /CMapName get exch true resolvestream cvx exec
+ /CMap findresource
+ exch PDFfile exch setfileposition
+ } ifelse % CMap
+ [
+ 3 index /DescendantFonts oget { exec resourcefont } forall
+ ] % subfonts
+ .composefontdict % composefont must insert FontInfo dictionary - see gs_cmap.ps .
+ % Stack: fontres name font
+ 3 copy exch pop null .processToUnicode
+ /Font defineresource % Stack: fontres font
+ 1 index /FontMatrix knownoget {
+ dup aload pop true {0 0 1 0 0 1} {3 -1 roll eq and} forall {
+ 1 index exch makefont exch /FontName get exch definefont
+ } {
+ pop
+ } ifelse
+ } if exch pop
+} bdef
+
+% ---------------- CIDFontType0/2 fonts ---------------- %
+
+% Insert metrics into a CIDFont, by saving the PDF W, W2, DW, and DW2
+% arrays and using a (currently very inefficient) CDevProc.
+% For detail, refer "PDF Reference" 2nd ed., p314 "5.6.3 CIDFonts".
+% It notes default DW is 0, but Acrobat Reader uses 1000 as default.
+% If DW is 0, currentpoint does not move by default in rendering text
+% horizontally, the result is unreadable. You can check it by Acrobat.
+
+/.pdfDefaultDW 1000 def
+/.pdfDefaultDW2 [ 880 -1000 ] def
+
+/addCIDmetrics { % <CIDFont-resource> <CIDFont> addCIDmetrics <fontdict>
+ dup length 5 add dict .copydict
+ dup /FID undef
+ dup /UniqueID undef
+ dup /XUID undef
+ % Insert the widths into the font.
+
+ % Stack: pdfresource newfont
+
+ 1 index /DW knownoget {
+ 1 index /DW 3 -1 roll put
+ } {
+ dup /DW .pdfDefaultDW put
+ } ifelse
+
+ 1 index /W knownoget {
+ dup 2 index /W 3 -1 roll put
+ .pdfMakeInternalW 1 index /.internalW 3 -1 roll put
+ } if
+
+ 1 index /DW2 knownoget {
+ 1 index /DW2 3 -1 roll put
+ } {
+ dup /DW2 .pdfDefaultDW2 put
+ } ifelse
+
+ 1 index /W2 knownoget {
+ dup 2 index /W2 3 -1 roll put
+ .pdfMakeInternalW2 1 index /.internalW2 3 -1 roll put
+ } if
+
+ dup /CDevProc 1 index /CIDWProc load /exec load 3 packedarray cvx put
+ exch pop
+} bdef
+
+/.pdfMakeInternalMTXArray { % <mtx_array> <item_size> .pdfConvertInternalW <mtx_array'>
+
+ % convert /W or /W2 to internal expression
+ %
+ % mtx_array: original /W or /W2 array
+ % item_size: number of metrics values per CID
+ %
+ % for detail of the metrics list format in PDF,
+ % refer PDF Ref. p.317 "Glyph Metrics in CIDFonts".
+ %
+ % format of single entry in internal expression
+ %
+ % [
+ % [cid_begin cid_end]
+ % value_is_varied (bool)
+ % [ [values for cid_begin...]
+ % [values for cid_begin + 1]
+ % ... ]
+ % ]
+ %
+
+ 7 dict
+ begin
+ /itemSize exch def
+ /M exch def % original /W or /W2
+ /Msize M length def
+ /Mi { M i get } def % W[i]
+ /Mi1 { M i 1 add get } def % W[i + 1]
+ /putMTXEntry <<
+ /arraytype {
+ [
+ [Mi Mi Mi1 length itemSize idiv add 1 sub]
+ true
+ [
+ 0 itemSize Mi1 length 1 sub {
+ [ exch 1 1 index itemSize add 1 sub { Mi1 exch get } for ]
+ } for
+ ]
+ ]
+ /i i 2 add def
+ }
+ /integertype {
+ [
+ [Mi Mi1]
+ false
+ [[ i 2 add 1 i 1 add itemSize add { M exch get } for ]]
+ ]
+ /i i 3 add def
+ }
+ >> def
+
+ /i 0 def
+
+ [ { putMTXEntry Mi1 type get exec i Msize ge { exit } if } loop ]
+ end
+} def
+
+/.pdfMakeInternalW { dup length 0 gt { 1 .pdfMakeInternalMTXArray } if } def
+/.pdfMakeInternalW2 { dup length 0 gt { 3 .pdfMakeInternalMTXArray } if } def
+
+/.pdfGetMTXByCID { % <internalMTXArray> <cid>
+ % .pdfGetMTXByCID
+ % { <MTXEntry> true | false }
+
+ % get values for given CID from internal format of /W or /W2
+
+ exch
+ {
+ {
+ dup 0 get {} forall % Stack: <cid> <entry> <cid_0> <cid_1>
+ 3 index lt { pop pop false exit } if
+ 2 index exch sub dup 0 lt { pop pop false exit } if
+ 1 index 1 get not { pop 0 } if
+ exch 2 get exch get true exit
+ } loop
+ { exit } if
+ } forall
+ dup type /arraytype eq { exch pop true } { pop false } ifelse
+} def
+
+
+% Apply the [D]W[2] metrics to a character before displaying.
+/CIDWProc { % <w0x> <w0y> <llx> <lly> <urx> <ury>
+ % <w1x> <w1y> <vx> <vy> <cid> <font> CIDWproc
+ % <w0x'> ... <vy'>
+ begin % push <font> to currentdict
+ % <w1x> <w1y> <vx> <vy> won't be used and replaced, discard now
+ 5 1 roll pop pop pop pop
+
+ {
+ currentdict /DW .knownget not { % no DW
+ .pdfDefaultDW exit % replace <w0x> by defaultDW
+ } if
+
+ currentdict /.internalW .knownget not { % no W
+ exit % use already-stacked DW
+ } if
+
+ dup length 0 eq { % W is null array
+ pop % discard unusable W
+ exit % use already-stacked DW
+ } if
+
+ % W is finite array, try to get W_cid
+ 2 index .pdfGetMTXByCID { % got W, discard DW
+ exch pop {} forall
+ exit
+ } if
+
+ exit
+ } loop
+
+ FontType 11 eq {
+ 1000 div % <w0x'> (normalized W)
+ } if
+ 0 % <w0y'>
+
+ % Stack: <w0x> <w0y> <llx> <lly> <urx> <ury> <cid> <w0x'> <w0y'>
+ 9 -2 roll pop pop % discard <w0x> <w0y>
+ 7 2 roll % put <w0x'> <w0y'>
+
+ % Stack: <w0x'> <w0y'> <llx> <lly> <urx> <ury> <cid>
+ 0 % <w1x'>
+ exch % put <w1x'>
+
+ % Stack: <w0x'> <w0y'> <llx> <lly> <urx> <ury> <w1x'> <cid>
+ {
+ currentdict /DW2 .knownget not { % no DW2, use defaultDW2
+ .pdfDefaultDW2 exit
+ } if
+
+ currentdict /.internalW2 .knownget not { % has DW2, no W2
+ exit % use already-stacked DW2
+ } if
+
+ dup length 0 eq { % W2 is null array
+ pop % discard unusable W2
+ exit % use already-stacked DW2
+ } if
+
+ 2 index .pdfGetMTXByCID { % got W2_cid, discard DW2
+ exch pop
+ exit
+ } if
+
+ % could not get W2_cid
+ exit
+
+ } loop
+
+ exch pop % discard <cid>
+
+ % Stack: <w0x'> <w0y'> <llx> <lly> <urx> <ury> <w1x'> { [<vy'> <w1y'>] | [<w1y'> <vx'> <vy'>] }
+ dup length 2 eq { % this is DW2
+ FontType 11 eq {{1000 div}} {{}} ifelse forall exch
+ 8 index 2 div % <vx'> = <w0x'> / 2
+ exch
+ }{ % assume W2
+ FontType 11 eq {{1000 div}} {{}} ifelse forall
+ } ifelse
+ end % recover currentdict
+
+} def
+
+% <string> <match> tailmatch ==> <pre> true
+% ==> <string> false
+/tailmatch {
+ 2 copy length 1 index length .min
+ dup 2 index length exch sub exch getinterval
+ 1 index eq {
+ length 1 index length exch sub
+ 0 exch getinterval true
+ } {
+ pop false
+ } ifelse
+} bind def
+
+/makeboldfont {
+ 16 dict begin
+ /strokewidth exch def
+ /basecidfont exch def
+ /FontMatrix [ 1 0 0 1 0 0 ] def
+
+ /CIDFontName /.boldfont def
+ /CIDFontType 1 def
+
+ /basefont-H /.basefont-H /Identity-H [ basecidfont ] composefont def
+ /basefont-V /.basefont-V /Identity-V [ basecidfont ] composefont def
+
+ /CIDSystemInfo dup basecidfont exch get def
+ /FontBBox [ basecidfont /FontBBox get cvx exec
+ 4 2 roll basecidfont /FontMatrix get transform
+ 4 2 roll basecidfont /FontMatrix get transform
+ ] def
+
+ /tmpstr 2 string def
+ /BuildGlyph {
+ gsave
+ exch begin
+ dup 256 idiv tmpstr exch 0 exch put
+ 256 mod tmpstr exch 1 exch put
+ rootfont /WMode known { rootfont /WMode get 1 eq } { false } ifelse
+ { basefont-V } { basefont-H } ifelse setfont
+ strokewidth setlinewidth
+ 1 setlinejoin
+ newpath
+ 0 0 moveto tmpstr false charpath stroke
+ 0 0 moveto tmpstr show
+ currentpoint setcharwidth
+ end
+ grestore
+ } bind def
+
+ currentdict
+ end
+ dup /CIDFontName get exch /CIDFont defineresource
+} bind def
+
+% <CIDFont-resource> <CIDFontName> findCIDFont <CIDFont-resource> <font>
+% CIDFont-resource is not modified.
+/findCIDFont {
+ {
+ dup /CIDFont resourcestatus {
+ pop pop /CIDFont findresource
+ exit
+ } if
+ .remove_font_name_prefix
+ dup dup length string cvs
+ (,Bold) tailmatch {
+ exch pop
+ cvn findCIDFont 0.03 makeboldfont
+ exit
+ } if
+ (,Italic) tailmatch {
+ exch pop
+ cvn findCIDFont
+ [ 1 0 0.3 1 0 0 ] makefont
+ exit
+ } if
+ (,BoldItalic) tailmatch {
+ exch pop
+ cvn findCIDFont 0.03 makeboldfont
+ [ 1 0 0.3 1 0 0 ] makefont
+ exit
+ } if
+ pop
+
+ 1 index /CIDSystemInfo oget begin Registry (-) Ordering end
+ concatstrings concatstrings
+ cvn
+ QUIET not {
+ (Substituting CID font resource) print dup ==only
+ ( for ) print 1 index ==only (.\n) print
+ } if
+ exch pop
+ /CIDFont findresource
+ exit
+ } loop
+} bdef
+
+/buildCIDType0 { % <CIDFontType0-font-resource> buildCIDType0 <font>
+ dup /BaseFont get findCIDFont exch pop
+} bdef
+
+/buildCIDType2 { % <CIDFontType2-font-resource> buildCIDType2 <font>
+ dup /BaseFont get findCIDFont exch pop
+} bdef
+
+/processCIDToGIDMap { % <fontres> <cidfont> processCIDToGIDMap <fontres> <cidfont>
+ 1 index /CIDToGIDMap knownoget {
+ PDFfile fileposition 4 1 roll
+ dup /Identity eq {
+ pop
+ } {
+ true resolvestream
+ % Stack: filepos fontres font mapstream
+ % Can't know the length of the decompressed stream, so allocate a big buffer...
+ dup 65534 string readstring {
+ % Length exceeded max string size, use an array of two strings
+ 1 index 65534 string readstring pop % maybe a null string - not important.
+ 2 array astore
+ % Stack: filepos fontres font mapstream array
+ dup 1 get length 65534 add
+ } {
+ dup length
+ } ifelse
+ 2 idiv
+ % Stack: filepos fontres font mapstream array/string CIDCount
+ 3 index exch /CIDCount exch put
+ exch closefile exch
+ dup /CIDMap 4 -1 roll put
+ } ifelse
+ 3 2 roll PDFfile exch setfileposition
+ } if
+} bdef
+
+% Adjust a CIDFontType0 DW[2] in the font resource.
+/adjustCIDType0 { % <font-resource> <font> adjustfont <font'>
+ addCIDmetrics
+ dup /CIDFontName get exch /CIDFont defineresource
+} bind def
+
+% Adjust a CIDFontType2 DW[2] and CIDToGIDMap in the font resource.
+/adjustCIDType2 { % <font-resource> <font> adjustfont <font'>
+ addCIDmetrics
+ processCIDToGIDMap
+ dup /CIDFontName get exch /CIDFont defineresource
+} bind def
+
+% ---------------- Other embedded fonts ---------------- %
+
+/fontloadprocs mark
+ /Type1C /readType1C cvx
+ /CIDFontType0C /readCIDFontType0C cvx
+.dicttomark readonly def
+
+% Read an embedded compressed font.
+/readType1C { % <font-resource> <stream-dict> readType1C <font>
+ 1 index exch
+ PDFfile fileposition 3 1 roll
+ dup true resolvestream dup readfontfilter
+ % Stack: pos resource streamdict stream filter
+ 3 index /FontDescriptor oget /FontName oget
+ 1 index FRD
+ closefile closefile pop
+ PDFfile 3 -1 roll setfileposition
+ /FontDescriptor oget /FontName oget pdfaddcachedfont
+ exch pop
+} bdef
+
+% Read an embedded CFF CIDFont.
+/readCIDFontType0C { % <font-resource> <stream-dict> readCIDFontType0C <font>
+ PDFfile fileposition 3 1 roll
+ dup true resolvestream dup readfontfilter
+ % Stack: pos resource streamdict stream filter
+ 3 index /FontDescriptor oget /FontName oget
+ 1 index FRD
+ closefile closefile pop
+ PDFfile 3 -1 roll setfileposition
+ % Some broken Adobe software produces PDF files in which
+ % the FontName of the CFF font and the FontName in the
+ % FontDescriptor don't match the BaseFont in the font.
+ % Use the FontName, rather than the BaseFont, here.
+ dup /FontDescriptor oget /FontName oget /CIDFont findresource
+ addCIDmetrics dup /CIDFontName get exch /CIDFont defineresource
+} bdef
+
+% Read an embedded OpenType font.
+/readOTTOfont { % <font-resource> <stream-dict> readOTTOfont <font>
+ 1 index exch
+ PDFfile fileposition 3 1 roll
+ dup true resolvestream dup readfontfilter
+ % Stack: pos resource streamdict stream filter
+ 3 index /FontDescriptor oget /FontName oget
+ 1 index
+ .init_otto_font_file //true ReadData
+ closefile closefile pop
+ PDFfile 3 -1 roll setfileposition
+ /FontDescriptor oget /FontName oget pdfaddcachedfont
+ exch pop
+} bdef
+
+% ---------------- Font lookup ---------------- %
+
+% Some PDF files mis-identify font type of the embedded font streams or
+% include raw PFB font streams. Length1, Length2, Length3 may be wrong or
+% missing. Adobe Acrobat corrects these errors transparently to the user.
+%
+% We ignore the font type keys and recognize the font type by the 1st 4 bytes
+% of the font stream. The PFB stream is recognized by the 1st 2 bytes.
+
+/fonttypeprocs mark % <font-resource> -proc- <font>
+ /Type0 //buildType0
+ /Type1 //buildType1
+ /MMType1 //buildType1
+ /Type3 //buildType3
+ /TrueType //buildTrueType
+ /CIDFontType0 //buildCIDType0
+ /CIDFontType2 //buildCIDType2
+.dicttomark readonly def
+
+/adjustfonttypes mark
+ /Type1 //adjustfont
+ /MMType1 //adjustfont
+ /TrueType //adjustfont
+ /CIDFontType0 //adjustCIDType0
+ /CIDFontType2 //adjustCIDType2
+.dicttomark readonly def
+
+% Bind a proc and define n names
+% /name ... /name {proc} n bndef -
+/bndef
+ { exch bind exch
+ { dup 3 1 roll def } repeat
+ pop
+ } bdef
+
+% Prototype for all procedures: <res> <desc> <stream> foo <font>
+/font_tag_dict 13 dict begin
+
+ % When the font stream is absent or cannot be read we load the font by the name.
+ /no_stream
+ { pop pop
+ dup /Subtype get % res res /subtype
+ fonttypeprocs exch dup / eq {
+ ( **** Warning: Font missing required Subtype, /Type1 assumed.\n)
+ pdfformaterror
+ pop /Type1
+ } if
+ get exec
+ } bdef
+
+ /bad_stream
+ { ( **** Warning: Error reading font stream, loading font by the name\n)
+ pdfformaterror
+ //no_stream exec
+ } bdef
+
+ <8001> % PFB
+ { dup /PFB //true put
+ exch pop readtype1
+ } bdef
+
+ (%!PS) (%!Fo) % Type1
+ { exch pop readtype1
+ } 2 bndef
+
+ <01000401> <01000402> <01000403> <01000404> % Type 1C
+ { exch pop
+ dup /Subtype get
+ fontloadprocs exch get exec
+ } 4 bndef
+
+ <00010000> (true) (typ1) (ttcf) % TrueType OpenType
+ { exch pop readtruetype
+ } 4 bndef
+
+ (OTTO)
+ { exch pop
+ readOTTOfont
+ } bdef
+
+
+currentdict end readonly def
+currentdict /bndef undef
+
+/resourcefont % <font-resource> resourcefont <font>
+{ dup /PSFont .knownget {
+ /FID knownoget { type /fonttype eq } { //false } ifelse
+ } {
+ //false
+ } ifelse {
+ /PSFont get
+ } {
+ dup dup /FontDescriptor knownoget {
+ % font-res font-res font-desc
+
+ dup /FontObject .knownget dup { % font-res font-res font-desc font? bool bool
+ % Check that the cached FontObject has the right resource type
+ % The same font descriptor can be reused in a CID and non-CID contexts. bug 689301
+ 3 index /Subtype knownoget not { /Type1 } if
+ dup /CIDFontType0 eq exch /CIDFontType2 eq or % font-res font-res font-desc font bool is_cid
+ 2 index /CIDFontType known xor {
+ pop pop //false % font-res font-res font-desc false
+ } if
+ } if {
+ % res res desc obj
+ 3 1 roll pop pop % res obj
+ } {
+ dup /FontFile knownoget not {
+ dup /FontFile2 knownoget not {
+ dup /FontFile3 knownoget not {
+ //null
+ } if
+ } if
+ } if
+ % res res desc stream
+ dup //null ne {
+ PDFfile fileposition
+ 1 index //true resolvestream dup
+ 4 string readstring not { /bad_stream } if
+ exch closefile
+ PDFfile 3 -1 roll setfileposition
+ dup length 4 lt { pop /bad_stream } if
+ } {
+ /no_stream
+ } ifelse
+ % res res desc stream tag
+
+ //font_tag_dict 1 index known not {
+ dup 0 2 getinterval <8001> eq {
+ 0 2 getinterval % res res desc stream pfb_tag
+ } {
+ (12345678>\n) dup /ASCIIHexEncode filter dup 4 -1 roll writestring closefile
+ ( **** Warning: unrecognized font file starts with <) exch concatstrings
+ pdfformaterror
+ /no_stream % res res desc stream unknown_tag
+ } ifelse
+ } if
+
+ //font_tag_dict exch get exec
+
+ 1 index /FontDescriptor oget % res font desc
+ 1 index /FontObject exch put % Save pointer to the font
+ } ifelse
+ } {
+ dup /Subtype get fonttypeprocs exch dup / eq {
+ ( **** Warning: Font missing required Subtype, /Type1 assumed.\n)
+ pdfformaterror
+ pop /Type1
+ } if
+ get exec
+ } ifelse
+ % Stack: font-res font
+ 1 index 3 1 roll
+ 1 index /Subtype get
+ //adjustfonttypes exch .knownget { exec } { exch pop } ifelse
+ dup 3 1 roll /PSFont exch put
+ } ifelse
+ dup checkGlyphNames2Unicode
+} bdef
+
+currentdict /font_tag_dict undef
+
+drawopdict begin
+ /d0 {
+ .adjustcharwidth setcharwidth
+ } bdef
+ /d1 {
+ 4 index 0 ne {
+ % invalid wy parameter for d1 in Type3 font (must be 0)
+ % Even though the PDF 1.4 specification states that this must be 0,
+ % Distiller sometimes creates Type3 fonts with non-zero wy. We set
+ % it to 0 since this is apparently what Acrobat Reader 4 and 5 do,
+ % but if the specification is ever changed to allow non-zero wy, this
+ % will not work.
+ 5 -1 roll pop 0 5 1 roll % set wy to 0
+ } if
+
+ 2 copy % ... llx lly urx ury | urx ury
+ 0 ne exch 0 ne % ... llx lly urx ury | ury!=0 urx!=0
+ 3 index 6 index eq and % ... llx lly urx ury | ury!=0 (urx!=0 && llx==urx)
+ exch 2 index 5 index eq and or { % ... llx lly urx ury | (urx!=0 && llx==urx) || (ury!=0 && lly==ury)
+ % The bounding box is empty and likely incorrect. Don't cache.
+ pop pop pop pop .adjustcharwidth setcharwidth
+ } {
+ 6 -2 roll .adjustcharwidth 6 2 roll setcachedevice
+ } ifelse
+ } bdef
+ /Tf {
+ 1 index Page /Font rget {
+ resourcefont exch Tf pop
+ }
+ { % Bug 689037
+ ( **** Warning: Tf refers to an unknown resource name: ) pdfformaterror
+ 1 index .namestring pdfformaterror
+ ( Assuming it's a font name.\n) pdfformaterror
+ Tf
+ } ifelse
+ } bdef
+end
+
+end % pdfdict
+end % GS_PDF_ProcSet
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/pdf_main.ps b/Master/tlpkg/tlgs/lib/pdf_main.ps
new file mode 100644
index 00000000000..a71a4dad5c4
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf_main.ps
@@ -0,0 +1,1770 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdf_main.ps 8159 2007-08-01 17:19:50Z ray $
+% pdf_main.ps
+% PDF file- and page-level operations.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+pdfdict begin
+
+% Patch in an obsolete variable used by some third-party software.
+/#? false def
+
+% Test whether the current output device handles pdfmark.
+/.writepdfmarkdict 1 dict dup /pdfmark null put readonly def
+/.writepdfmarks { % - .writepdfmarks <bool>
+ currentdevice //.writepdfmarkdict .getdeviceparams
+ mark eq { false } { pop pop true } ifelse
+ systemdict /DOPDFMARKS known or
+} bind def
+
+% For simplicity, we use a single interpretation dictionary for all
+% PDF graphics execution, even though this is too liberal.
+/pdfopdict mark
+ objopdict { } forall
+ drawopdict { } forall
+ /endstream { exit } bind
+ (%%EOF) cvn { exit } bind % for filters
+ /obj { ( **** Warning: Content stream is not terminated by 'endstream'.\n)
+ pdfformaterror pop pop exit
+ } bind
+ % PDF 1.1 operators
+ /BX { /BXlevel BXlevel 1 add store } bind
+ /EX { /BXlevel BXlevel 1 sub store } bind
+ /PS { cvx exec } bind
+ % PDF 1.2 operators
+ /BMC { pop } bind
+ /BDC { pop pop } bind
+ /EMC { }
+ /MP { pop } bind
+ /DP { pop pop } bind
+.dicttomark readonly def
+
+% ======================== Main program ======================== %
+
+end % pdfdict
+userdict begin
+
+/defaultfontname /Times-Roman def
+
+% Make sure the registered encodings are loaded, so we don't run the risk
+% that some of the indices for their names will overflow the packed
+% representation. (Yes, this is a hack.)
+SymbolEncoding pop
+DingbatsEncoding pop
+
+% Redefine 'run' so it recognizes PDF files.
+systemdict begin
+/.runps /run load def
+/run {
+ dup type /filetype ne { (r) file } if
+ % skip leading whitespace characters (actually anything less than or equal to <sp>)
+ { dup ( ) .peekstring not { false exit } if
+ dup 0 get 32 le { pop dup read pop pop } { true exit } ifelse
+ } loop
+ exch pop
+ {
+ % Appletalk PAP sends short strings with %! header expecting a response.
+ % 'gv' swallows the %!PS line, then sends DSC comments beginning with %%
+ % and also waits for a response. The following avoids those hangs.
+ dup 2 string .peekstring pop dup (%!) eq exch (%%) eq or {
+ cvx .runps
+ } {
+ dup 1023 string .peekstring pop dup length 400 ge {
+ % "1024 string" exceeds current %stdin buffer
+ % Valid PDF file cannot be smaller than 400 bytes.
+ (%PDF-1.) search {
+ 3 1 roll pop pop
+ dup (%!PS) search not {
+ length 0 ne {
+ 1 index exch readstring pop pop
+ (%stderr) (w) file dup
+ ( **** Warning: File has some garbage before %PDF-1. .\n)
+ writestring flushfile
+ } {
+ pop
+ } ifelse
+ dup (%stdin) (r) file eq {
+ % Copy PDF from stdin to temporary file then run it.
+ null (w+) //systemdict /.tempfile get exec exch 3 1 roll
+ % stack: tempname stdin tempfile
+ 64000 string
+ {
+ % stack: tempname stdin tempfile string
+ 2 index 1 index readstring
+ exch 3 index exch writestring
+ not { exit } if
+ }
+ loop
+ pop exch closefile
+ % stack: tempname tempfile
+ dup 0 setfileposition
+ dup runpdf
+ closefile deletefile
+ } {
+ runpdf
+ } ifelse
+ } {
+ pop pop pop pop cvx .runps % (%!PS) found first
+ } ifelse
+ } {
+ pop cvx .runps % (%PDF-1.) not found
+ } ifelse
+ } {
+ pop cvx .runps % too short for PDF
+ } ifelse
+ } ifelse
+ } {
+ closefile % file was empty
+ } ifelse
+} bind odef
+currentdict /runpdfstring .undef
+
+
+/runpdfbegin { % <file> runpdf -
+ userdict begin
+ % It turns out that the PDF interpreter uses memory more
+ % effectively if it is run under at least one level of save.
+ % This is counter-intuitive, and we don't understand why it happens,
+ % but the improvement is significant.
+ /PDFTopSave save def
+ 0 setobjectformat
+ /Page# null def
+ /Page null def
+ /DSCPageCount 0 def
+ /PDFSave null def
+ GS_PDF_ProcSet begin
+ pdfdict begin
+ pdfopen begin
+ /FirstPage where
+ { pop FirstPage dup pdfpagecount gt
+ { (\nRequested FirstPage is greater than the number of pages in the file: ) print
+ pdfpagecount = flush
+ } if
+ } {
+ 1
+ } ifelse
+ /LastPage where { pop LastPage pdfpagecount .min } { pdfpagecount } ifelse
+ 1 index 1 index gt
+ { ( No pages will be processed \(FirstPage > LastPage\).) = flush }
+ { QUIET not
+ { (Processing pages ) print 1 index =only ( through ) print dup =only
+ (.) = flush
+ }
+ if
+ }
+ ifelse
+} bind def
+
+/dopdfpages { % firstpage# lastpage# dopdfpages -
+ << /PDFScanRules true >> setuserparams % set scanning rules for PDF vs. PS
+ true .setaccuratecurves % unlike PS, PDF seems to need this
+ 1 exch
+ { dup /Page# exch store
+ QUIET not { (Page ) print dup == flush } if
+ pdfgetpage pdfshowpage
+ } for
+ false .setaccuratecurves % restore accuratecurves behaviour
+ << /PDFScanRules null >> setuserparams % restore scanning rules for PS
+} bind def
+
+/runpdfend {
+ Repaired { printrepaired } if
+ currentdict pdfclose
+ end % temporary dict
+ end % pdfdict
+ end % GS_PDF_ProcSet
+ PDFTopSave restore
+ end % userdict
+ 2 vmreclaim % couldn't hurt
+} bind def
+
+/runpdf { % <file> runpdf -
+ runpdfbegin
+ dopdfpages
+ runpdfend
+} bind def
+
+end % systemdict
+% Redefine the procedure that the C code uses for running piped input.
+% It is OK to use { (%stdin) run } here, because a startjob cannot occur.
+/.runstdin {
+ { (%stdin) run } execute0
+} bind def
+
+end % userdict
+pdfdict begin
+
+% ======================== File parsing ======================== %
+
+% Read the cross-reference and trailer sections.
+
+/traileropdict mark
+ (<<) cvn { mark } bind
+ (>>) cvn { { .dicttomark } stopped {
+ ( **** File has unbalanced >> in trailer.\n) pdfformaterror
+ } if } bind
+ ([) cvn { mark } bind % ditto
+ (]) cvn dup load
+% /true true % see .pdfexectoken in pdf_base.ps
+% /false false % ibid.
+% /null null % ibid.
+ /R { /resolveR cvx 3 packedarray cvx } bind % see Objects below
+ /startxref /exit load
+ /startref /exit load % Some application (unknown) misspells startxref
+.dicttomark readonly def
+
+% Because of EOL conversion, lines with fixed contents might be followed
+% by one or more blanks.
+/lineeq % <filestr> <conststr> lineeq <bool>
+ { anchorsearch
+ { pop { ( ) anchorsearch not { () eq exit } if pop } loop }
+ { pop false }
+ ifelse
+ } bind def
+/linene { lineeq not } bind def
+
+ % Read original version (pre PDF 1.5) of the xref table.
+ % Note: The position is the location of 'xref'. The current PDFfile
+ % position is just after the 'XREF'.
+/readorigxref % <pos> readorigxref <trailerdict>
+ {
+ pop % We do not need the position.
+ 0 % Initialize xref table error counter
+ { PDFfile token pop % first object # or trailer
+ dup /trailer eq { pop exit } if
+ PDFfile pdfstring readline pop
+ token pop % entry count
+ % remaining must be whitespace only (otherwise this xref Size was invalid.
+ exch dup length 0 ne {
+ false 1 index { 32 gt { pop true exit } if } forall {
+ ( **** Warning: xref subsection header has extra characters.\n)
+ pdfformaterror
+ /setxrefentry cvx /syntaxerror signalerror
+ } if
+ } if
+ pop % remove last
+ % This section might be adding new objects:
+ % ensure that Objects and Generations are big enough.
+ % stack: <err count> <first obj> <entry count>
+ 2 copy add growPDFobjects
+ { % stack: <err count> <obj num>
+ % Read xref line
+ PDFfile 20 string readstring pop % always read 20 chars.
+ token pop % object position
+ exch token pop % generation #
+ exch token pop % n or f
+ exch % stack: <err count> <obj#> <loc> <gen#> <tag> <remainder of line>
+ dup length 0 ne {
+ % check to make sure trailing garbage is just white space
+ dup { 32 gt { 5 -1 roll 1 add 5 1 roll } if } forall % bump error count on garbage
+ } if
+ pop % Stack: <err count> <obj#> <loc> <gen#> <tag>
+ dup /n eq { % xref line tag is /n
+ pop % pop dup of line tag
+ Objects 3 index lget null eq { % later update might have set it
+ 0 3 1 roll % Set ObjectStream object number = 0
+ setxrefentry % Save xref entry
+ 3 -1 roll pop % Remove ObjectStream object onumber
+ } if
+ }
+ { % xref line tag was not /n
+ /f ne % verify that the tag was /f
+ { /setxrefentry cvx /syntaxerror signalerror
+ } if
+ } ifelse
+ pop pop % pop <obj location> and <gen num>
+ % stack: <err count> <obj num>
+ 1 add % increment object number
+ } repeat
+ pop % pop <obj #>
+ } loop
+ 0 ne {
+ ( **** Warning: length of some xref entries is not equal to 20 bytes.\n)
+ pdfformaterror
+ } if
+ PDFfile traileropdict .pdfrun
+ } bind def
+
+ % This dicitonary is used to read the xref dictionary. It should work for
+ % reading any dictionary. dictlevelcount must contain 0.
+/xrefopdict mark
+ (<<) cvn { /dictlevelcount dictlevelcount 1 add def mark } bind
+ (>>) cvn { .dicttomark /dictlevelcount dictlevelcount 1 sub def
+ dictlevelcount 0 eq { exit} if } bind
+ ([) cvn { mark } bind % ditto
+ (]) cvn dup load
+% /true true % see .pdfexectoken in pdf_base.ps
+% /false false % ibid.
+% /null null % ibid.
+ /R { /resolveR cvx 3 packedarray cvx } bind % see Objects below
+.dicttomark readonly def
+
+% Get a variable length positive integer value from a stream. A value
+% of zero is returned if the count is zero.
+/getintn { % <stream> <count> getintn int
+ 0 exch { 256 mul 1 index read pop add } repeat
+ exch pop % Discard stream
+} bind def
+
+% This array contains handlers for processing the different types of
+% entries in the XRef stream.
+% Stack: <Xrefdict> <xref stream> <Index array> <pair loc> <obj num>
+% <field 2> <field 3>
+% The handlers leave the stack unchanged.
+/xref15entryhandlers [
+ { % XRef entry type 0 - free or f type xref entry
+% (free ) print
+% (obj num: ) print 2 index pdfstring cvs print ( ) print
+% (loc: ) print 1 index pdfstring cvs print ( ) print
+% (gen: ) print dup === flush
+ } bind % Do nothing for free xref entries
+ % XRef entry type 1 - normal or n type xref entry
+ { % field 2 = obj loc, field 3 = gen num
+% (normal ) print
+% (obj num: ) print 2 index pdfstring cvs print ( ) print
+% (loc: ) print 1 index pdfstring cvs print ( ) print
+% (gen: ) print dup === flush
+ 0 3 1 roll % set stream number = 0
+ setxrefentry
+ 3 -1 roll pop % remove stream number
+ } bind
+ % XRef entry type 2 - compressed object type xref entry
+ { % field 2 = object stream num, field 3 = index into object stream
+% (Compressed objects: ) print
+% (obj num: ) print 2 index pdfstring cvs print ( ) print
+% (field 2: ) print 1 index pdfstring cvs print ( ) print
+% (field 3: ) print dup === flush
+ 0 setxrefentry pop % set generation number = 0
+ } bind
+] def
+
+ % Read the PDF 1.5 version of the xref table.
+ % Note: The position is the location of the start of the dictionary object
+ % In PDF 1.5, the XRef dictionary also serves as the trailer dictionary
+/readpdf15xref % <pos> readpdf15xref <trailerdict>
+ {
+ PDFfile exch setfileposition % move to start of object
+ % Get object number, revision, and 'obj' and discard
+ PDFfile token pop pop
+ PDFfile token pop pop
+ PDFfile token pop pop
+ % Get the XRef dicitionary
+ /dictlevelcount 0 def PDFfile xrefopdict .pdfrun
+ % Verify that we have an XRef dictionary
+ dup /Type get /XRef ne {
+ /readpdf15xref cvx /syntaxerror signalerror
+ } if
+ % Ensure that we we have room in the objects array, etc.
+ dup /Size get growPDFobjects
+ % Create a stream for the XRef data
+ PDFfile token pop pop % Skip over 'stream'
+ dup stream false resolvestream
+ % Stack: <XRefdict> <xref stream>
+ % The Index array defines the ranges of object numbers in the
+ % XRef stream. Each value pair is consists of starting object
+ % number and the count of consecutive objects.
+ % Get the Index array, if present
+ 1 index /Index .knownget not { % If no Index array ...
+ [ 0 3 index /Size get ] % Default = [ 0 Size ]
+ } if
+ % Loop through the Index array
+ 0 2 2 index length 1 sub {
+ % Get start and end of object range
+ 2 copy get % Start of the range
+ dup 3 index 3 index 1 add get % Number of entries in range
+ % Loop through the range of object numbers
+ add 1 sub 1 exch { % Form end of range, set increment = 1
+ % Stack: <Xrefdict> <xref stream> <Index array> <pair loc> <obj num>
+ % Get xref parameters. Note: The number of bytes for each parameter
+ % is defined by the entries in the W array.
+ 4 index /W get aload pop % Get W array values
+ % The first field indicates type of entry. Get first field value.
+ % If the num. of bytes for field 1 is 0 then default field value is 1
+ 3 -1 roll dup 0 eq { pop 1 } { 6 index exch getintn } ifelse
+ % Get the handler for the xref entry type. We will execute the
+ % handler after we get the other two field values.
+ xref15entryhandlers exch get
+ 3 -1 roll 6 index exch getintn % Get second field
+ 3 -1 roll 6 index exch getintn % Get third field
+ 3 -1 roll exec % Execute Xref entry handler
+ pop pop pop % Remove field values and obj num
+ } for % Loop through Xref entries
+ pop % Remove Index array pair loc
+ } for % Loop through Index array entries
+ pop pop % Remove Index array and xref stream
+ } bind def
+
+% Read the cross-reference table.
+% <pos> is the position either from the startxref statement or the /Prev
+% entry in the prior trailer dictionary.
+/readxref % <pos> readxref <trailerdict>
+ {
+ PDFoffset add PDFfile exch
+ % Check that the given location is within the file.
+ dup PDFfilelen gt {
+ ( **** Warning: Specified xref location is beyond end of file.\n)
+ pdfformaterror
+ /readxref cvx /invalidaccess signalerror
+ } if
+ setfileposition
+ % In some PDF files, this position actually points to
+ % white space before the xref line. Skip over this here.
+ {
+ PDFfile fileposition PDFfile read pop 32 gt { exit } if pop
+ } loop
+ dup % Make copy of the file position (before last char was read).
+ PDFfile exch setfileposition
+ % The PDF specification says that the 'xref' must be on a line
+ % by itself. The code here formerly used readline and linene to
+ % check this. However, Acrobat Reader only requires the line to
+ % begin with 'xref', and there are enough applications producing
+ % non-compliant PDF files that we have to do this too.
+ PDFfile pdfstring 0 4 getinterval readstring pop
+ (xref) eq
+ { readorigxref } % 'xref' -> original xref table
+ { readpdf15xref } % otherwise assume PDF 1.5 xref stream
+ ifelse
+ } bind def
+
+% Open a PDF file and read the header, trailer, and cross-reference.
+/pdfopen { % <file> pdfopen <dict>
+ % Color space substitution in PDF is handled somewhat differently
+ % than in PostScript. A given device color space will be substituted
+ % if the corresponding "Default..." entry exists in the Page's
+ % Resource dictionary (which might be inhereted); there is no
+ % UseCIEColor to enable/disable color mapping.
+ %
+ % This behavior is achieved by always setting UseCIEColor to true
+ % in the page device dictionary. If the value of this parameter was
+ % originally false (i.e.: the output device does not perform color
+ % space substitution by default), the instances DefaultGray,
+ % DefaultRGB, and DefaultCMYK of the (local) ColorSpace category
+ % are redefined to be DeviceGray, DeviceRGB, and DeviceCMYK,
+ % respectively. This is not done if UseCIEColor is true by default,
+ % as in that case color substitution is presumably desired even
+ % if the file does not request it.
+ currentpagedevice /UseCIEColor .knownget dup { pop } if not
+ { .currentglobal false .setglobal
+ /DefaultGray { /DeviceGray } cvlit /ColorSpace defineresource pop
+ /DefaultRGB { /DeviceRGB } cvlit /ColorSpace defineresource pop
+ /DefaultCMYK { /DeviceCMYK } cvlit /ColorSpace defineresource pop
+ .setglobal
+ }
+ if
+ pdfopenfile begin
+ pdfopencache
+ writeoutputintents
+ .writepdfmarks {
+ % Copy bookmarks (outline) to the output.
+ Trailer /Root oget /Outlines knownoget {
+ /First knownoget {
+ { dup writeoutline /Next knownoget not { exit } if } loop
+ } if
+ } if
+ } if % end .writepdfmarks
+ currentdict end
+} bind def
+
+% Verify that each entry in the xref table is pointing at an object with
+% the correct object number and generation number.
+/verify_xref % - verify_xref -
+{ PDFfilelen
+ 1 1 Objects llength 1 sub % stack: filesize 1 1 <number of objects - 1>
+ { % Check if the object is free (i.e. not used). The values in
+ % Generations is the generation number plus 1. If the value in
+ % Generations is zero then the object is free.
+ % Stack: <filesize> <obj num>
+ Generations 1 index lget % Get the genration number
+ 0 ne { % Skip if object number is free
+ ObjectStream 1 index lget % Check if object is in objectstream
+ 0 eq { % We only check objects not in an objectstream
+ { % Use stop context since we may get an error if object is invalid
+ dup Objects exch lget % Get the object location
+ PDFoffset add dup 3 index ge % Compare object location to file size
+ { pop true } % Rebuild if location not in file
+ { PDFfile exch setfileposition % Go to the object location
+ true % Stack: <filesize> <obj num> <true>
+ PDFfile token pop % Read object number from file
+ 2 index eq { % Verify object number
+ PDFfile token pop % Read generation number from file
+ Generations 3 index % Get specified generaton number
+ lget 1 sub % Gen numbs are stored with 1 added.
+ eq { % Verify generation number
+ PDFfile token pop
+ /obj eq { % Verify 'obj' text
+ pop false % We have valid object, do not rebuild
+ } if
+ } if
+ } if
+ } ifelse
+ } .internalstopped
+ { true } if % If we stop then we need to rebuild
+ % Stack: <filesize> <obj num> <need rebuild flag>
+ {
+ ( **** Warning: File has an invalid xref entry: )
+ pdfformaterror
+ pdfstring cvs pdfformaterror
+ (. Rebuilding xref table.\n) pdfformaterror
+ search_objects
+ exit
+ } if % If the entry is invalid
+ } {
+ % The object is in an object stream. We currently do not rebuild
+ % objects in an object stream. So If we find one, then abort the
+ % verification of the xref table entries.
+ pop exit % Pop object number and then exit loop
+ } ifelse % If not in an object stream
+ } if % If object entry is not free
+ pop % Remove object number
+ } for
+ pop % Remove the size of the file
+} bind odef
+
+/pdfopencache { % - pdfopencache -
+ % Create and initialize some caches.
+ /PageCount pdfpagecount def
+ /PageNumbers PageCount 65534 .min dict def
+ /PageIndex PageCount 65534 .min array def
+} bind def
+
+/pdfopenfile { % <file> pdfopenfile <dict>
+ pdfdict readonly pop % can't do it any earlier than this
+ 15 dict begin
+ /LocalResources 0 dict def
+ /DefaultQstate //null def % establish binding
+ /Printed where { pop } {
+ % Guess whether the output device is a printer.
+ /Printed currentpagedevice /OutputFile known def
+ } ifelse
+ /PSLevel1 where { pop } { /PSLevel1 false def } ifelse
+ % NB: PDFfile is used outside of the PDF code to determine that a
+ % PDF job is being processed; to not change or hide this key.
+ cvlit /PDFfile exch def
+ /PDFsource PDFfile def
+ /Repaired false def
+ currentglobal true .setglobal globaldict begin
+ /TTFWarnList 0 dict def /UndefProcList 0 dict def
+ end .setglobal
+ PDFfile dup 0 setfileposition
+ 0 () /SubFileDecode filter % to avoid file closure
+ pdfstring readstring pop
+ (%PDF-) search not {/pdfopen cvx /syntaxerror signalerror} if
+ length /PDFoffset exch def pop
+ % some badly formed PDF's (Visioneer) have something other than EOL
+ % after the version number. If we get an error, shorten the string
+ % and try again.
+ false exch % error encountered
+ { { cvr } stopped
+ { exch pop true exch 0 1 index length 1 sub dup 0 eq
+ { pop 0 exit } if % exit if string now empty
+ getinterval % trim character from right end and retry
+ }
+ { exch {
+ ( **** Warning: PDF version number not followed by EOL.\n)
+ pdfformaterror
+ }
+ if exit
+ }
+ ifelse
+ } loop
+
+ /PDFversion exch def
+ % Read the last cross-reference table.
+ count /pdfemptycount exch def
+ /Trailer << >> def % Initialize to an emptry dict.
+ { initPDFobjects findxref readxref } .internalstopped {
+ recover_xref_data % Read failed. Attempt to recover xref data.
+ search_trailer % Search for the primary trailer
+ } {
+ /Trailer exch def % Save trailer dict after first xref table
+ % Read any previous cross-reference tables. When we are done,
+ % verify that the entries in the xref tables are valid if NoVerifyXref
+ % is not defined.
+ Trailer
+ { /Prev knownoget not { % If no previous xref table then ...
+ /NoVerifyXref where { pop } { verify_xref } ifelse exit
+ } if
+ { readxref } .internalstopped {
+ recover_xref_data % Read failed. Attempt to recover xref data.
+ exit % Exit loop since recover gets all obj data.
+ } if % If readxref stopped
+ % The PDF spec. says that each trailer dict should contain the required
+ % entries. However we have seen a PDF file that only has a Prev entry in
+ % the initial trailer dict. Acrobat complains but it accepts these files.
+ % To work with these files, we are copying any entries which we find in
+ % a previous trailer dict which are not present in the initial dict.
+ dup {
+ Trailer 2 index known {
+ pop pop % discard if key already present
+ } {
+ Trailer 3 1 roll put % add key if not present
+ } ifelse
+ } forall
+ } loop % Loop to previous trailer
+ } ifelse % Ifelse readxref stopped
+
+ % Scan numbers in the range 2147483648..4294967295 in Encrypt dictionary
+ % as unsigned integers for compatibility with Acrobat Reader. Bug 689010.
+ << /PDFScanUnsigned //true >> setuserparams
+ { Trailer /Encrypt knownoget {
+ pop
+ pdf_process_Encrypt % signal error
+ } if
+ } stopped
+ << /PDFScanUnsigned //false >> setuserparams
+ { stop } if
+
+ currentdict end
+ } bind def
+
+% Look for [\r\n]%%EO from the current position of the file.
+% Return the position of %%EO if found or -1 .
+/findeof { % <file> find_eof <file> <position>
+ -1 exch
+ {
+ dup bytesavailable 4 lt { exit } if
+ dup 0 (%%EO) /SubFileDecode filter flushfile
+ dup dup fileposition 5 sub setfileposition
+ dup 5 string readstring not { pop exit } if
+ dup (\r%%EO) eq exch (\n%%EO) eq or {
+ dup fileposition 4 sub
+ 3 1 roll exch pop
+ } if
+ } loop
+ exch
+} bind def
+
+% Skip backward over the %%EOF at the end of the PDF file, and read
+% the preceding startxref line. The PDF specification unambiguously
+% requires that the %%EOF appear on a line by itself, and that the
+% startxref and the following position value appear on separate lines;
+% however, some applications truncate the %%EOF to %%EO, and/or put the
+% startxref and the following value on the same line.
+% There seems to be no limit on the amount of garbage that can be
+% appended to the PDF file. Current record (60K) belongs to
+% PDF-Out (v 2.0 - 35). We start the search for %%EO from the last 1024
+% bytes and continue from the beginning of the file.
+/findxref { % - findxref <xrefpos>
+ PDFfile dup dup dup 0 setfileposition bytesavailable
+ dup /PDFfilelen exch def
+ % Find the last %%EOF string (within 1024 bytes)
+ 1024 sub PDFoffset .max
+ setfileposition findeof % search the last 1024 bytes
+ dup 0 le {
+ pop
+ dup PDFoffset setfileposition findeof % search from the beginnibg
+ dup 0 le {
+ ( **** Error: Cannot find a %%EOF marker anywhere in the file.\n)
+ pdfformaterror
+ /findxref cvx /syntaxerror signalerror
+ } if
+ } if
+ dup 3 1 roll setfileposition
+ % Stack: eofpos
+ % Check for whether this is, in fact, a valid PDF file.
+ dup PDFfilelen exch sub dup dup 7 gt exch 5 lt or {
+ pop true
+ } {
+ string PDFfile exch readstring pop
+ dup (%%EOF\n) eq exch dup (%%EOF\r) eq
+ exch dup (%%EOF\r\n) eq exch (%%EOF) eq or or or not
+ } ifelse {
+ ( **** Warning: File has a corrupted %%EOF marker, or garbage after %%EOF.\n)
+ pdfformaterror
+ } if
+ PDFfile exch setfileposition
+ % Now read the startxref and xref start position.
+ prevline token not { null } if dup type /integertype eq {
+ exch pop cvi % xref start position
+ exch PDFfile exch setfileposition
+ prevline dup (startxref) linene {
+ % startxref not on a line by itself. We have found PDF from
+ % www.verypdf.com in which the startxref was on the same line as
+ % the end of trailer dictionary. Check for this. Note: This
+ % violates the spec.
+ dup (startxref) search {
+ % found startxref - print warning
+ pop pop pop % clear strings from search
+ ( **** Warning: format of the startxref line in this file is invalid.\n)
+ pdfformaterror
+ } { % no startxref - we have a problem.
+ /findxref cvx /syntaxerror signalerror
+ } ifelse
+ } if
+ pop pop
+ } { % else, this file has 'startxref #####' format
+ (startxref) ne { /findxref cvx /syntaxerror signalerror } if
+ cvi % xref start position
+ ( **** Warning: format of the startxref line in this file is invalid.\n)
+ pdfformaterror
+ exch PDFfile exch setfileposition
+ } ifelse
+} bind def
+/stderrfile (%stderr) (w) file def
+/stderrprint { % <string> stderrprint -
+ //stderrfile dup 3 -1 roll writestring flushfile
+} bind def
+/pdfformaterror { % <string> pdfformaterror -
+ stderrprint
+ /Repaired true store
+} bind def
+
+/knownoget_safe
+{ 2 copy knownoget { 3 1 roll pop pop //true } { pop pop //false } ifelse
+} odef
+
+/printProducer {
+ Trailer /Info { knownoget_safe } stopped { pop pop false } if {
+ /Producer knownoget not { null } if
+ } {
+ null
+ } ifelse
+ dup null eq {
+ pop
+ } {
+ ( **** The file was produced by: \n **** >>>> ) stderrprint
+ % Handle a Unicode Producer.
+ (\376\377) anchorsearch {
+ pop dup length 2 idiv string 0 1 2 index length 1 sub {
+ % Stack: origstr newstr i
+ 1 index exch 3 index 1 index 2 mul 1 add get put
+ } for exch pop
+ } if
+ stderrprint
+ ( <<<<\n) stderrprint
+ } ifelse
+} bind def
+% The TTFWarnList is the list of all TrueType fonts that were not embedded.
+% The UndefProcList collects noisy warnings.
+% This gets rid of many multiple warnings from pdf_font.ps
+/printCollectedWarnings {
+ TTFWarnList length 0 gt {
+ (\n **** Warning: Fonts with Subtype = /TrueType should be embedded.\n)
+ stderrprint
+ ( The following fonts were not embedded:\n)
+ stderrprint
+ [ TTFWarnList { pop .namestring (\t\t\t) exch concatstrings (\n) concatstrings } forall ]
+ { lt } .sort { stderrprint } forall
+ } if
+ UndefProcList length 0 gt {
+ (\n **** Embedded font uses undefined procedure\(s\): ) stderrprint
+ UndefProcList {
+ exch .namestring stderrprint ( ) stderrprint
+ =string cvs stderrprint ( times, ) stderrprint
+ } forall
+ (\n) stderrprint
+ } if
+} bind def
+/printrepaired {
+ printCollectedWarnings
+ (\n **** This file had errors that were repaired or ignored.\n)
+ stderrprint
+ printProducer
+ ( **** Please notify the author of the software that produced this\n)
+ stderrprint
+ ( **** file that it does not conform to Adobe's published PDF\n)
+ stderrprint
+ ( **** specification.\n\n)
+ stderrprint
+} bind def
+
+% Write the outline structure for a file. Uses linkdest (below).
+% omit links to pages that don't exist.
+/writeoutline % <outlinedict> writeoutline -
+ { mark
+ 0 2 index /First knownoget
+ { { exch 1 add exch /Next knownoget not { exit } if } loop }
+ if
+ % stack: dict mark count
+ dup 0 eq
+ { pop 1 index }
+ { 2 index /Count knownoget { 0 lt { neg } if } if
+ /Count exch 3 index
+ }
+ ifelse { linkdest } stopped
+ {
+ cleartomark % ignore this link
+ ( **** Warning: Outline has invalid link that was discarded.\n)
+ pdfformaterror
+ } {
+ /Title oget /Title exch /OUT pdfmark
+ }
+ ifelse
+ /First knownoget
+ { { dup writeoutline /Next knownoget not { exit } if } loop }
+ if
+ } bind def
+
+% Close a PDF file.
+/pdfclose % <dict> pdfclose -
+ { begin
+ PDFfile closefile
+ end
+ } bind def
+
+% ======================== Page accessing ======================== %
+
+% Get a (possibly inherited) attribute of a page.
+/pget % <pagedict> <key> pget <value> -true-
+ % <pagedict> <key> pget -false-
+ {
+ 2 copy knownoget
+ { exch pop exch pop true }
+ { exch /Parent knownoget
+ { exch pget }
+ % finally see if the key is (misplaced) in the Root Catalog dict
+ { dup Trailer /Root oget exch knownoget dup {
+ 3 -1 roll ( **** Warning: The /) pdfformaterror 50 string cvs pdfformaterror
+ ( key is missing from the Page tree.\n) pdfformaterror
+ }
+ { exch pop }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bind def
+
+% Get the value of a resource on a given page.
+/rget { % <resname> <pagedict> <restype> rget <value> -true-
+ % <resname> <pagedict> <restype> rget -false-
+ LocalResources 1 index knownoget {
+ 3 index knownoget
+ } {
+ false
+ } ifelse {
+ exch pop exch pop exch pop true
+ } {
+ exch /Resources pget {
+ exch knownoget { exch knownoget } { pop false } ifelse
+ } {
+ pop pop false
+ } ifelse
+ } ifelse
+} bind def
+
+% Get the total number of pages in the document.
+/pdfpagecount % - pdfpagecount <int>
+ { Trailer /Root oget /Pages oget
+ dup /Count knownoget {
+ dup 0 le {
+ pop ( **** Warning: Invalid Page count.\n) pdfformaterror
+ % find the last page and use that as the Count
+ 1 1 999999999 {
+ dup pdffindpage?
+ exch pop
+ //null eq { exit } { pop } ifelse
+ } for
+ 1 sub % decrement to last page that we were able to find
+ 2 copy /Count exch put
+ } if
+ exch pop
+ } {
+ dup /Type oget /Page eq {
+ << exch 1 array astore /Kids exch /Count 1 /Type /Pages >>
+ Trailer /Root oget /Pages 3 -1 roll put
+ 1
+ ( **** Warning: No /Pages node. The document root directly point a page.\n)
+ pdfformaterror
+ } {
+ ( **** Warning: Page count not found; assuming 1.\n)
+ pdfformaterror
+ pop 1
+ } ifelse
+ } ifelse
+ } bind def
+
+/pdffindpage? { % <int> pdffindpage? 1 null (page not found)
+ % <int> pdffindpage? 1 noderef (page found)
+ % <int> pdffindpage? 0 null (Error: page not found)
+ Trailer /Root oget /Pages get
+ { % We should be able to tell when we reach a leaf
+ % by finding a Type unequal to /Pages. Unfortunately,
+ % some files distributed by Adobe lack the Type key
+ % in some of the Pages nodes! Instead, we check for Kids.
+ dup oforce /Kids knownoget not { exit } if
+ exch pop null
+ 0 1 3 index length 1 sub {
+ 2 index exch get
+ dup oforce dup /Kids known { /Count oget } { pop 1 } ifelse
+ % Stack: index kids null noderef count
+ dup 5 index ge { pop exch pop exit } if
+ 5 -1 roll exch sub 4 1 roll pop
+ } for exch pop
+ % Stack: index null|noderef
+ dup null eq { pop pop 1 null exit } if
+ } loop
+} bind def
+
+% Find the N'th page of the document by iterating through the Pages tree.
+% The first page is numbered 1.
+/pdffindpageref { % <int> pdffindpage <objref>
+ dup pdffindpage?
+ % Stack: index countleft noderef
+ 1 index 1 ne { pop pop /pdffindpage cvx /rangecheck signalerror } if
+ exch pop
+ PageIndex 2 index 1 sub 65533 .min 2 index oforce put
+ PageNumbers 1 index oforce 3 index dup 65534 le
+ { put }
+ { pop pop pop } % don't store more than 65534 pagenumbers
+ ifelse
+ exch pop
+} bind def
+/pdffindpage { % <int> pdffindpage <pagedict>
+ pdffindpageref oforce
+} bind def
+
+% Find the N'th page of the document.
+% The first page is numbered 1.
+/pdfgetpage % <int> pdfgetpage <pagedict>
+ { PageIndex 1 index 1 sub dup 65533 lt
+ { get }
+ { pop pop null }
+ ifelse
+ dup null ne
+ { exch pop oforce }
+ { pop pdffindpage }
+ ifelse
+ } bind def
+
+% Find the page number of a page object (inverse of pdfgetpage).
+/pdfpagenumber % <pagedict> pdfpagenumber <int>
+ { % We use the simplest and stupidest of all possible algorithms....
+ PageNumbers 1 index .knownget
+ { exch pop
+ }
+ { 1 1 PageCount 1 add % will give a rangecheck if not found
+ { dup pdfgetpage oforce 2 index eq { exit } if pop
+ }
+ for exch pop
+ }
+ ifelse
+ } bind def
+
+% Arrange the four elements that define a rectangle into a 'normal' order.
+/normrect_elems % <x1> <y1> <x2> <y2> normrect_elems <llx> <lly> <urx> <ury>
+{
+ exch 4 1 roll % <x2> <x1> <y1> <y2>
+ 2 copy gt { exch } if % <x2> <x1> <lly> <ury>
+ 4 2 roll 2 copy lt { exch } if % <lly> <ury> <urx> <llx>
+ 4 1 roll exch % <llx> <lly> <urx> <ury>
+} bind def
+
+% Arrange a rectangle into a 'normal' order. I.e the lower left corner
+% followed by the upper right corner.
+/normrect % <rect> normrect <rect>
+{
+ aload pop normrect_elems 4 array astore
+} bind def
+
+/fix_empty_rect_elems % </Name> <x1> <y1> <x2> <y2> fix_empty_rect_elems <x1> <y1> <x2'> <y2'>
+{ dup 3 index eq { //true } { 1 index 4 index eq } ifelse {
+ pop pop pop pop
+ ( **** Warning: File has an empty ) pdfformaterror pdfstring cvs pdfformaterror
+ (. Using the current page size instead.\n) pdfformaterror
+ 0 0 currentpagedevice /PageSize get aload pop
+ } {
+ 5 -1 roll pop
+ } ifelse
+} bind def
+
+/boxrect % <llx> <lly> <urx> <ury> boxrect <x> <y> <w> <h>
+ { exch 3 index sub exch 2 index sub
+ } bind def
+/resolvedest { % <name|string|other> resolvedest <other|null>
+ dup type /nametype eq {
+ Trailer /Root oget /Dests knownoget {
+ exch knownoget not { null } if
+ } {
+ pop null
+ } ifelse
+ } {
+ dup type /stringtype eq {
+ Trailer /Root oget /Names knownoget {
+ /Dests knownoget {
+ exch nameoget
+ } {
+ pop null
+ } ifelse
+ } {
+ pop null
+ } ifelse
+ } if
+ } ifelse
+} bind def
+
+% Procedures to do the necessary transformations of view destinations
+% <PDF2PS_matrix> <rot> <view> -- <view'>
+/viewdestprocs 8 dict dup begin
+ /Fit { exch pop exch pop } bind def
+ /FitH {
+ aload pop
+ 0 4 -1 roll 1 and 0 eq { exch } if
+ 4 -1 roll transform exch pop
+ 2 array astore
+ } bind def
+ /FitV {
+ aload pop
+ 0 4 -1 roll 1 and 0 ne { exch } if
+ 4 -1 roll transform pop
+ 2 array astore
+ } bind def
+ /FitB /Fit load def
+ /FitBH /FitH load def
+ /FitBV /FitV load def
+ /XYZ {
+ aload pop
+ 3 1 roll
+ 2 copy 7 -1 roll 1 and 0 ne { exch } if 4 2 roll % odd rotation switches x<->y
+ 2 { dup null eq { pop 0 } if exch } repeat % replace nulls with 0
+ 7 -1 roll transform % transform coordinates
+ 2 { 3 -1 roll null eq { pop null } if exch } repeat % put the nulls back
+ 3 -1 roll
+ 4 array astore
+ } bind def
+ /FitR {
+ exch pop
+ aload pop
+ 2 { 5 index transform 4 2 roll } repeat normrect_elems
+ 5 array astore
+ exch pop
+ } bind def
+end readonly def
+
+/linkdest { % <link|outline> linkdest
+ % ([/Page <n>] /View <view> | ) <link|outline>
+ dup /Dest knownoget
+ { resolvedest
+ dup type /dicttype eq { /D knownoget not { null } if } if
+ dup null eq
+ { pop }
+ { dup 0 oget
+ false % don't have a page# and transformation matrix (yet)
+ 1 index type /dicttype eq {
+ 1 index /Type knownoget {
+ /Page eq {
+ pop % the "false" flag
+ dup pdf_cached_PDF2PS_matrix exch
+ dup /Rotate pget not { 0 } if 90 idiv exch
+ pdfpagenumber
+ true % now we have a page# and a transformation matrix
+ } if
+ } if
+ } if
+ % stack: <link|outline> <dest> ( <PDF2PS_matrix> <rot> <page#> true | <page> false )
+ {
+ /Page exch 6 2 roll
+ % stack: [/Page <page#>] <link|outline> <dest> <PDF2PS_matrix> <rot>
+ 3 -1 roll dup length 1 sub 1 exch getinterval /View 4 1 roll
+ % stack: [/Page <page#>] <link|outline> /View <PDF2PS_matrix> <rot> <view>
+ //viewdestprocs 1 index 0 get get exec
+ 3 -1 roll
+ } {
+ pop
+ dup length 1 sub 1 exch getinterval /View exch 3 -1 roll
+ } ifelse
+ }
+ ifelse
+ }
+ if
+} bind def
+% <pagedict> mark ... -proc- <page#> <error>
+/namedactions 8 dict dup begin
+ /FirstPage { 1 //false } def
+ /LastPage { pdfpagecount //false } def
+ /NextPage { counttomark 2 add index pdfpagenumber 1 add dup pdfpagecount gt } bind def
+ /PrevPage { counttomark 2 add index pdfpagenumber 1 sub dup 1 lt } bind def
+end readonly def
+% <pagedict> <annotdict> -proc- -
+/annottypes 5 dict dup begin
+ /Text {
+ mark exch
+ { /Rect /Open /Contents }
+ { 2 copy knownoget { 3 -1 roll } { pop } ifelse }
+ forall pop /ANN pdfmark
+ } bind def
+ /Link {
+ mark exch
+ dup /C knownoget { /Color exch 3 -1 roll } if
+ { /Rect /Border }
+ { 2 copy knownoget { 3 -1 roll } { pop } ifelse }
+ forall dup /A knownoget {
+ dup /URI known {
+ /A mark 3 2 roll % <<>> /A [ <<action>>
+ { oforce } forall
+ .dicttomark
+ 3 2 roll
+ } {
+ dup /D knownoget {
+ exch pop exch dup length dict copy dup /Dest 4 -1 roll put
+ } {
+ /N knownoget { % Assume /S /Named
+ namedactions exch .knownget {
+ exec {
+ pop
+ ( **** Warning: Ignoring a named action pointing out of the document page range.\n)
+ pdfformaterror
+ } {
+ /Page exch 3 -1 roll
+ } ifelse
+ } if
+ } if
+ } ifelse
+ } ifelse
+ } if
+ linkdest pop /LNK pdfmark
+ } bind def
+end readonly def
+
+% **** The following procedure should not be changed to allow clients
+% **** to directly interface with the constituent procedures. GSview
+% **** and some Artifex customers rely on the pdfshowpage_init,
+% **** pdfshowpage_setpage, pdfshowpage_finish so all logic should be
+% **** implemented in one of those three procedures.
+/pdfshowpage % <pagedict> pdfshowpage -
+ { dup /Page exch store
+ pdfshowpage_init
+ pdfshowpage_setpage
+ pdfshowpage_finish
+ } bind def
+
+/pdfpagecontents % <pagedict> pdfpagecontents <contents>
+ { } bind def
+
+/pdfshowpage_init % <pagedict> pdfshowpage_init <pagedict>
+ { /DSCPageCount DSCPageCount 1 add store
+ } bind def
+
+/get_media_box { % <pagedict> get_media_box <box>
+ /MediaBox pget not {
+ ( **** Page has no /MediaBox attribute. Using the current page size.\n)
+ pdfformaterror
+ [ 0 0 currentpagedevice /PageSize get aload pop ]
+ } if
+} bind def
+
+% Compute the matrix that transforms the PDF->PS "default" user space
+/pdf_PDF2PS_matrix { % <pdfpagedict> -- matrix
+ matrix currentmatrix matrix setmatrix exch
+ % stack: savedCTM <pdfpagedict>
+ dup /CropBox pget dup {exch pop} if //systemdict /UseCropBox known and {
+ /CropBox 2 copy pget pop
+ } {
+ /MediaBox 1 index get_media_box
+ } ifelse
+ % stack: savedCTM <pdfpagedict> /Crop|MediaBox <Crop|Media Box>
+ oforce_elems normrect_elems fix_empty_rect_elems 4 array astore
+ //systemdict /PDFFitPage known {
+ PDFDEBUG { (Fiting PDF to imageable area of the page.) = flush } if
+ currentpagedevice /.HWMargins get aload pop
+ currentpagedevice /PageSize get aload pop
+ % Adjust PageSize and .HWMargins for the page portrait/landscape orientation
+ 2 copy gt
+ 7 index aload pop 3 -1 roll sub 3 1 roll exch sub exch
+ 10 index /Rotate pget not { 0 } if 90 idiv 1 and 0 ne { exch } if
+ gt
+ ne {
+ 2 copy ne {
+ % rotate the .HWMargins
+ 2 copy lt {
+ 6 2 roll 4 -1 roll 6 -2 roll
+ } {
+ 6 2 roll 4 1 roll 6 -2 roll
+ } ifelse
+ % rotate the page dimensions
+ exch
+ } if
+ } if
+ 3 -1 roll sub 3 1 roll exch sub exch
+ % stack: savedCTM <pdfpagedict> <Crop|Media Box> Xmin Ymin Xmax Ymax
+ PDFDEBUG { ( Translate up by [ ) print 3 index =print (, ) print 2 index =print ( ]) = flush } if
+ 3 index 3 index translate % move origin up to imageable area
+ 2 index sub exch 3 index sub exch 4 2 roll pop pop
+ % stack: savedCTM <pdfpagedict> [Box] XImageable YImageable
+ 2 index aload pop 2 index sub exch 3 index sub exch 4 2 roll pop pop
+ 5 index /Rotate pget not { 0 } if 90 idiv 1 and 0 ne { exch } if
+ % stack: savedCTM <pdfpagedict> [Box] XImageable YImageable XBox YBox
+ 3 -1 roll exch div 3 1 roll div .min
+ PDFDEBUG { ( Scale by ) print dup = flush } if
+ } {
+ //systemdict /NoUserUnit .knownget not { false } if {
+ 1
+ } {
+ 1 index /UserUnit knownoget {
+ PDFDEBUG { (Scaling due to UserUnit by ) print dup = flush } if
+ } {
+ 1
+ } ifelse
+ } ifelse
+ } ifelse
+ % stack: savedCTM <pdfpagedict> [Box] scale
+ dup scale
+ % Rotate according to /Rotate
+ aload pop boxrect
+ {
+ { pop pop }
+ { -90 rotate pop neg 0 translate }
+ { 180 rotate neg exch neg exch translate }
+ { 90 rotate neg 0 exch translate pop }
+ }
+ 5 index /Rotate pget not { 0 } if
+ PDFDEBUG { dup 0 ne { (Rotating by ) print dup =print ( degrees.) = flush } if } if
+ 90 idiv 3 and get exec
+ % Now translate to the origin given in the Crop|Media Box
+ exch neg exch neg translate
+ % stack: savedCTM <pdfpagedict>
+ pop
+ matrix currentmatrix exch setmatrix
+} bind def
+
+% Cache the matrix that transforms the PDF->PS "default" user space
+% into <pdfpagedict> under the key //PDF2PS_matrix_key, then return it
+/PDF2PS_matrix_key (PDF->PS matrix) cvn def
+/pdf_cached_PDF2PS_matrix { % <pdfpagedict> -- <PDF2PS_matrix>
+ dup //PDF2PS_matrix_key .knownget {
+ exch pop
+ } {
+ dup dup pdf_PDF2PS_matrix //PDF2PS_matrix_key exch put
+ //PDF2PS_matrix_key get
+ } ifelse
+} bind def
+currentdict /PDF2PS_matrix_key undef
+
+/.pdfshowpage_Install { % <pagedict> [<prevproc>] .pdfshowpage_Install -
+ exch pdf_cached_PDF2PS_matrix concat
+ 0 get exec
+} bind def
+
+/pdfshowpage_setpage { % <pagedict> pdfshowpage_setpage <pagedict>
+ 5 dict begin % for setpagedevice
+ % Stack: pdfpagedict
+ % UseCIEColor is always true for PDF; see the comment in runpdf above
+ /UseCIEColor true def
+ /Orientation 0 def
+ currentpagedevice
+ % Stack: pdfpagedict currentpagedevicedict
+ 1 index /CropBox pget dup {exch pop} if //systemdict /UseCropBox known and {
+ /CropBox 2 index /CropBox pget % will use the CropBox
+ } {
+ /MediaBox 2 index get_media_box true % will use the MediaBox
+ } ifelse
+ {
+ oforce_elems normrect_elems fix_empty_rect_elems boxrect 4 2 roll pop pop
+ 3 index /Rotate pget not { 0 } if 90 idiv 1 and 0 ne { exch } if
+ % stack: pdfpagedict currentpagedevicedict boxwidth boxheight
+ //systemdict /PDFFitPage known {
+ % Preserve page size,
+ % but choose portrait/landscape depending on box width:height ratio
+ % (if box width == height, select portrait orientation)
+ gt
+ 1 index /PageSize get aload pop
+ 2 copy gt
+ 4 -1 roll ne { exch } if
+ } {
+ % Set the page size.
+ //systemdict /NoUserUnit .knownget not { false } if not {
+ 3 index /UserUnit knownoget {
+ dup 4 -1 roll mul 3 1 roll mul
+ } if
+ } if
+ } ifelse
+ 2 array astore /PageSize exch def
+ } {
+ pop % pops /Crop|MediaBox
+ } ifelse
+ % Determine the number of spot colors used on the page. Note: This searches
+ % the pages resources. It may be high if a spot color is in a resource but
+ % is not actually used on the page.
+ << /PageSpotColors 3 index countspotcolors >> setpagedevice
+
+ % Let the device know if we will be using PDF 1.4 transparency.
+ % The clist logic may need to adjust the size of bands.
+ 1 index pageusestransparency /PageUsesTransparency exch def
+ dup /Install .knownget {
+ % Don't let the Install procedure get more deeply
+ % nested after every page.
+ dup type dup /arraytype eq exch /packedarraytype eq or {
+ dup length 4 eq {
+ dup 2 get /.pdfshowpage_Install load eq {
+ 1 get 0 get % previous procedure
+ } if
+ } if
+ } if
+ } {
+ { }
+ } ifelse 1 array astore
+ 2 index exch /.pdfshowpage_Install load /exec load
+ 4 packedarray cvx
+ % Stack: pagedict currentpagedict installproc
+ /Install exch def
+ % Stack: pagedict currentpagedict
+ pop currentdict end setpagedevice
+} bind def
+
+/.free_page_resources { % - .free_page_resources -
+ Page /Resources pget {
+ /Shading knownoget {
+ { dup type /dicttype eq {
+ dup /.shading_dict known {
+ dup /.shading_dict undef
+ } if
+ } if
+ pop pop
+ } forall
+ } if
+ } if
+} bind def
+
+/pdfshowpage_finish { % <pagedict> pdfshowpage_finish -
+ save /PDFSave exch store
+ /PDFdictstackcount countdictstack store
+ (before exec) VMDEBUG
+
+ % set up color space substitution (this must be inside the page save)
+ pdfshowpage_setcspacesub
+
+ .writepdfmarks {
+
+ % Copy the crop box.
+ dup /CropBox pget {
+ % .pdfshowpage_Install transforms the user space -
+ % do same here with the CropBox.
+ oforce_elems
+ 2 { Page pdf_cached_PDF2PS_matrix transform 4 2 roll } repeat
+ normrect_elems /CropBox 5 1 roll fix_empty_rect_elems 4 array astore
+ mark /CropBox 3 -1 roll
+ /PAGE pdfmark
+ } if
+
+ % Copy annotations and links.
+ dup /Annots knownoget {
+ 0 1 2 index length 1 sub
+ { 1 index exch oget
+ dup /Subtype oget annottypes exch .knownget { exec } { pop } ifelse
+ }
+ for pop
+ } if
+
+ } if % end .writepdfmarks
+
+ % Display the actual page contents.
+ 6 dict begin
+ /BXlevel 0 def
+ /BGDefault currentblackgeneration def
+ /UCRDefault currentundercolorremoval def
+ %****** DOESN'T HANDLE COLOR TRANSFER YET ******
+ /TRDefault currenttransfer def
+ matrix currentmatrix 2 dict
+ 2 index /CropBox pget {
+ oforce_elems normrect_elems boxrect
+ 4 array astore 1 index /ClipRect 3 -1 roll put
+ } if
+ dictbeginpage setmatrix
+ /DefaultQstate qstate store
+
+ count 1 sub /pdfemptycount exch store
+ % If the page uses any transparency features, show it within
+ % a transparency group.
+ dup pageusestransparency dup /PDFusingtransparency exch def {
+ % Show the page within a PDF 1.4 device filter.
+ 0 .pushpdf14devicefilter {
+ /DefaultQstate qstate store % device has changed -- reset DefaultQstate
+ % If the page has a Group, enclose contents in transparency group.
+ % (Adobe Tech Note 5407, sec 9.2)
+ dup /Group knownoget {
+ 1 index /CropBox pget {
+ /CropBox exch
+ } {
+ 1 index get_media_box /MediaBox exch
+ } ifelse
+ oforce_elems normrect_elems fix_empty_rect_elems 4 array astore .beginformgroup {
+ showpagecontents
+ } stopped {
+ .discardtransparencygroup stop
+ } if .endtransparencygroup
+ } {
+ showpagecontents
+ } ifelse
+ } stopped {
+ % todo: discard
+ .poppdf14devicefilter
+ /DefaultQstate qstate store % device has changed -- reset DefaultQstate
+ stop
+ } if .poppdf14devicefilter
+ /DefaultQstate qstate store % device has changed -- reset DefaultQstate
+ } {
+ showpagecontents
+ } ifelse
+ .free_page_resources
+ % todo: mixing drawing ops outside the device filter could cause
+ % problems, for example with the pnga device.
+ endpage
+ end % scratch dict
+ % Indicate that the number of spot colors is unknown in case the next page
+ % imaged is a PS file.
+ << /PageSpotColors -1 >> setpagedevice
+ % Some PDF files don't have matching q/Q (gsave/grestore) so we need
+ % to clean up any left over dicts from the dictstack
+ countdictstack PDFdictstackcount sub dup 0 ne {
+ ( **** Warning: File has imbalanced q/Q operators \(too many q's\)\n)
+ pdfformaterror
+ { end } repeat
+ } {
+ pop
+ } ifelse
+ (after exec) VMDEBUG
+ Repaired % pass Repaired state around the restore
+ PDFSave restore
+ /Repaired exch def
+} bind def
+
+% Display the contents of a page (including annotations).
+/showpagecontents { % <pagedict> showpagecontents -
+ dup % Save the pagedict for the Annotations
+ count 1 sub /pdfemptycount exch store
+ gsave % preserve gstate for Annotations later
+ /Contents knownoget not { 0 array } if
+ dup type /arraytype ne { 1 array astore } if {
+ oforce false resolvestream pdfopdict .pdfrun
+ } forall
+ % check for extra garbage on the ostack and clean it up
+ count pdfemptycount sub dup 0 ne {
+ ( **** File did not complete the page properly and may be damaged.\n)
+ pdfformaterror
+ { pop } repeat
+ } {
+ pop
+ } ifelse
+ grestore
+ % Draw the annotations
+ /Annots knownoget { { oforce drawannot } forall } if
+ //systemdict /ShowAcroForm .knownget { //true eq } { //false } ifelse {
+ Trailer /Root oget /AcroForm knownoget { draw_acro_form } if
+ } if
+} bind def
+
+/processcolorspace { % - processcolorspace <colorspace>
+ % The following is per the PLRM3.
+ currentdevice 1 dict dup /ProcessColorModel dup put .getdeviceparams
+ exch pop exch pop
+ dup type /nametype ne { cvn } if
+ dup { setcolorspace } .internalstopped { pop /DeviceRGB } if
+} bind def
+
+% ------ Transparency support ------ %
+
+% Define minimum PDF version for checking for transparency features.
+% Transparency is a 1.4 feature however we have seen files that claimed
+% to be PDF 1.2 with transparency features. Bug 689288.
+/PDFtransparencyversion 1.2 def
+
+% Determine whether a page might invoke any transparency features:
+% - Non-default BM, ca, CA, or SMask in an ExtGState
+% - Image XObject with SMask
+% Note: we deliberately don't check to see whether a Group is defined,
+% because Adobe Illustrator 10 (and possibly other applications) define
+% a page-level group whether transparency is actually used or not.
+% Ignoring the presence of Group is justified because, in the absence
+% of any other transparency features, they have no effect.
+/pageusestransparency { % <pagedict> pageusestransparency <bool>
+ PDFversion PDFtransparencyversion lt NOTRANSPARENCY or {
+ pop false
+ } {
+ dup false exch {
+ 4 dict 1 index resourceusestransparency { pop not exit } if
+ /Parent knownoget not { exit } if
+ } loop
+ % Also check for transparency in the annotation (if not in resources).
+ { pop true } { annotsusetransparency } ifelse
+ } ifelse
+} bind def
+
+% Check if transparency is specified in an ExtGState dict
+/extgstateusestransparency { % <gstate dict> extgstateusestransparency <bool>
+ false exch % Assume no transparency
+ { % establish loop context
+ exch pop oforce
+ dup /BM knownoget { dup /Normal ne exch /Compatible ne and
+ { pop not exit } if
+ } if
+ dup /ca knownoget { 1 ne { pop not exit } if } if
+ dup /CA knownoget { 1 ne { pop not exit } if } if
+ dup /SMask knownoget { /None ne { pop not exit } if } if
+ pop
+ } forall
+} bind def
+
+% Check the Resources of a page or Form. Check for loops in the resource chain.
+/resourceusestransparency { % <dict> <dict> resourceusestransparency <bool>
+ { % Use loop to provide an exitable context.
+ /Resources knownoget not { 0 dict } if
+ 2 copy .knownget {
+ { % Some circular references may be missed because scanning stops
+ % when the 1st transparency is found.
+ ( **** File has circular references in resource dictionaries.\n)
+ pdfformaterror
+ } if
+ pop //false exit
+ } if
+ 2 copy //true put % In the current chain.
+ dup /ExtGState knownoget {
+ extgstateusestransparency
+ { pop //true exit } if
+ } if
+ dup /XObject knownoget {
+ //false exch {
+ exch pop oforce dup /Subtype get
+ dup /Image eq { 1 index /SMask known { pop pop not exit } if } if
+ /Form eq {
+ 3 index exch resourceusestransparency { not exit } if
+ } {
+ pop
+ } ifelse
+ } forall { pop //true exit } if
+ } if
+ 2 copy //false put % Visited but not in the current chain.
+ pop //false exit
+ } loop
+ exch pop
+} bind def
+
+% Check if the annotations on a page use transparency
+/annotsusetransparency { % <page dict> annotsusetransparency <bool>
+ false exch % Assume no transparency
+ /Annots knownoget { % Get Annots array
+ { oforce /AP knownoget { % Get appearance dict for the annoation
+ /N knownoget { % Get the /N (i.e. normal) appearance stream
+ /Resources knownoget {
+ /ExtGState knownoget {
+ extgstateusestransparency { pop true exit} if
+ } if % If ExtGState known
+ } if % If Resources known
+ } if % If annotation has a normal appearance
+ } if % If AP dict known
+ } forall % For all annots on the page
+ } if
+} bind def
+
+% Add a color name to our spot color list. Ignore /All and /None
+/putspotcolor { % <name> <spotcolordict> putspotcolor -
+ % The 'name' could be a string. If so then convert to a name.
+ exch dup type /stringtype eq { cvn } if
+ dup dup /None eq exch /All eq or { pop pop } { 0 put } ifelse
+} bind def
+
+% Determine which spot colors are used within a color space Note: This
+% dict will include all colors used in Separation or DeviceN color spaces.
+% Thus it may include Cyan, Magenta, Yellow, and Black.
+% <colorspace> <spotcolordict> colorspacespotcolors -
+/colorspacespotcolors {
+ exch dup type /arraytype eq {
+ % If we have an Indexed color space then get the base space.
+ dup 0 oget dup /Indexed eq {
+ pop 1 oget 2 copy colorspacespotcolors
+ } {
+ % Stack: <spotcolordict> <colorspace> <colorspacetype>
+ dup /Separation eq exch /DeviceN eq or {
+ dup 1 oget dup type /arraytype eq {
+ { oforce 2 index putspotcolor } forall
+ } {
+ 2 index putspotcolor
+ } ifelse
+ } if
+ } ifelse
+ } if
+ pop pop
+} bind def
+
+% Check the Resources of a page, form, or annotation. Determine which spot
+% colors are used within the resource Note: The spot color dict will include
+% all colors used in Separation or DeviceN color spaces. Thus it may include
+% Cyan, Magenta, Yellow, and Black. We also pass a dict that is used to check
+% for loops in the resource list.
+% <spotcolordict> <loopdict> <page/form/annot dict>
+% resourcespotcolors <spotcolordict> <loopdict>
+/resourcespotcolors {
+ { % Use loop to provide an exitable context.
+ % Exit if no Resources entry
+ /Resources knownoget not { exit } if
+ % Exit if we have already seen this dict
+ 2 copy known { pop exit } if
+
+ % Save the Resources dict into our loop checking dict.
+ 2 copy 0 put
+
+ % Scan resources that might contain a color space.
+ dup /ColorSpace knownoget {
+ { exch pop oforce 3 index colorspacespotcolors } forall
+ } if
+ dup /Pattern knownoget {
+ { exch pop oforce 4 copy exch pop resourcespotcolors pop pop pop } forall
+ } if
+ dup /Shading knownoget {
+ { exch pop oforce /ColorSpace oget 3 index colorspacespotcolors } forall
+ } if
+ /XObject knownoget {
+ { exch pop oforce dup
+ /Subtype get /Form eq { resourcespotcolors } { pop } ifelse
+ } forall
+ } if
+ exit
+ } loop
+} bind def
+
+% Determine which spot colors are used within the annotations. Note: This
+% dict will include all colors used in Separation or DeviceN color spaces.
+% Thus it may include Cyan, Magenta, Yellow, and Black.
+% <spotcolordict> <loopdict> <annotsarray>
+% annotsspotcolors <spotcolordict> <loopdict>
+/annotsspotcolors {
+ { oforce /AP knownoget { % Get appearance dict for the annoation
+ /N knownoget { % Get the /N (i.e. normal) appearance stream
+ resourcespotcolors
+ } if % If normal appearance streamknown
+ } if % If AP dict known
+ } forall
+} bind def
+
+% Determine spot colors are used within a page. We are creating a dict to
+% hold the spot color names as keys. Using a dict avoids having to worry
+% about duplicate entries. The keys in the dict contain the spot color
+% names. However the values have no meaning. Note: This dict will include
+% all colors used in Separation or DeviceN color spaces specified in the
+% page's resources. Thus it may include Cyan, Magenta, Yellow, and Black.
+% There is no attempt to verify that these color spaces are actually used
+% within the object streams for the page.
+/pagespotcolors { % <pagedict> pagespotcolors <spotcolordict>
+ dup
+ % Create a dict to hold spot color names.
+ 0 dict exch
+ % Create a dict to be used to check for reference loops.
+ 4 dict exch
+ % Check for color spaces in the Resources
+ resourcespotcolors
+ % Also check for color spaces in the annotations.
+ 3 -1 roll
+ /Annots knownoget { annotsspotcolors } if
+ pop % Discard reference loop dict
+} bind def
+
+% Determine how many (if any) spot colors are used by a page.
+% Note: This count does not include Cyan, Magenta, Yellow, or Black
+/countspotcolors { % <pagedict> countspotcolors <count>
+ pagespotcolors % Get dict with all spot colors
+ dup length % spot color dict length
+ % Remove CMYK from the spot color count.
+ [ /Cyan /Magenta /Yellow /Black ]
+ { 2 index exch known { 1 sub } if } forall
+ exch pop % Remove spot color dict
+} bind def
+
+% ------ ColorSpace substitution support ------ %
+
+%
+% <pagedict> pdfshowpage_setcspacesub <pagedict>
+%
+% Set up color space substitution for a page. Invocations of this procedure
+% must be bracketed by the save/restore operation for the page, to avoid
+% unintended effects on other pages.
+%
+% If any color space substitution is used, and the current color space is a
+% device dependent color space, make sure the current color space is updated.
+% There is an optimization in the setcolorspace pseudo-operator that does
+% nothing if both the current and operand color spaces are the same. For
+% PostScript this optimization is disabled if the UseCIEColor page device
+% parameter is true. This is not the case for PDF, as performance suffers
+% significantly on some PDF files if color spaces are set repeatedly. Hence,
+% if color space substitution is to be used, and the current color space
+% is a device dependent color space, we must make sure to "transition" the
+% current color space.
+%
+/pdfshowpage_setcspacesub
+ {
+ false
+ { /DefaultGray /DefaultRGB /DefaultCMYK }
+ {
+ dup 3 index /ColorSpace //rget exec
+ { resolvecolorspace /ColorSpace defineresource pop }
+ { pop }
+ ifelse
+ }
+ forall
+
+ % if using color space substitution, "transition" the current color space
+ {
+ currentcolorspace dup length 1 eq % always an array
+ {
+ 0 get
+ dup /DeviceGray eq 1 index /DeviceRGB eq or 1 index /DeviceCMYK or
+ { /Pattern setcolorspace setcolorspace }
+ { pop }
+ ifelse
+ }
+ { pop }
+ if
+ }
+ if
+ }
+bind def
+
+% Write OutputIntents to device if the device handles it
+/writeoutputintents {
+ currentdevice 1 dict dup /OutputIntent null put readonly
+ .getdeviceparams
+ mark ne { pop pop
+ % device supports OutputIntent parameter
+ Trailer /Root oget /OutputIntents knownoget {
+ { % process all output profiles present
+ oforce
+ dup length dict .copydict
+ dup /DestOutputProfile knownoget {
+ PDFfile fileposition exch
+ mark exch { oforce } forall .dicttomark
+ true resolvestream
+ [ { counttomark 1 add index
+ 64000 string readstring
+ not { exit} if
+ } loop
+ ] exch closefile
+ 0 1 index { length add } forall .bytestring
+ 0 3 2 roll {
+ 3 copy putinterval
+ length add
+ } forall pop
+ exch PDFfile exch setfileposition
+ 1 index /DestOutputProfile 3 2 roll put
+ } if
+ % Convert to string array because it's easier for the device
+ [ 1 index /OutputCondition knownoget not { () } if
+ 2 index /OutputConditionIdentifier knownoget not { () } if
+ 3 index /RegistryName knownoget not { () } if
+ 4 index /Info knownoget not { () } if
+ 5 index /DestOutputProfile knownoget not { () } if
+ ]
+ [ /OutputIntent 3 2 roll .pdfputparams pop pop
+ pop % done with this OutputIntent dictionary
+ } forall
+ } if % OutputIntents known
+ % tell device there are no more OutputIntents
+ [ /OutputIntent [ ] .pdfputparams pop pop
+ } if
+} bind def
+
+end % pdfdict
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/pdf_ops.ps b/Master/tlpkg/tlgs/lib/pdf_ops.ps
new file mode 100644
index 00000000000..41ca168b320
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf_ops.ps
@@ -0,0 +1,727 @@
+% Copyright (C) 1994, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdf_ops.ps 8156 2007-07-31 14:19:45Z alexcher $
+% Definitions for most of the PDF operators.
+
+.currentglobal true .setglobal
+
+% Define pdfmark. Don't allow it to be bound in.
+% Also don't define it in systemdict, because this leads some Adobe code
+% to think this interpreter is a distiller.
+% (If this interpreter really is a distiller, don't do this.)
+systemdict /pdfmark known not
+ { userdict /pdfmark { cleartomark } bind put } if
+
+/renderingintentdict mark
+ /Perceptual 0
+ /RelativeColorimetric 1
+ /Saturation 2
+ /AbsoluteColorimetric 3
+.dicttomark readonly def
+
+userdict /GS_PDF_ProcSet 127 dict dup begin
+
+% ---------------- Abbreviations ---------------- %
+
+/bdef { bind def } bind def
+
+% ---------------- Graphics state stack ---------------- %
+
+% PDF adds a number of parameters to the graphics state.
+% We implement this by pushing and popping a dictionary
+% each time we do a PDF gsave or grestore.
+% The keys in this dictionary are as follows:
+% self % identifies the dictionary as one of ours
+% ClipRect % (optional)
+% Show
+% TextSaveMatrix % matrix at time of BT (iff within BT/ET)
+% (The following correspond directly to PDF state parameters.)
+% AlphaIsShape
+% FillConstantAlpha
+% FillColor
+% FillColorSpace
+% FillOverprint
+% SoftMask
+% StrokeConstantAlpha
+% StrokeColor
+% StrokeColorSpace
+% StrokeOverprint
+% TextSpacing
+% TextHScaling
+% Leading
+% TextFont
+% TextLineMatrix
+% TextMatrix
+% TextRise
+% TextRenderingMode
+% WordSpacing
+
+/nodict 1 dict def
+nodict /self { //nodict } executeonly put
+nodict readonly pop
+
+/dictbeginpage { % <initialdict> dictbeginpage -
+ //nodict 20 dict .copydict begin { def } forall
+ graphicsbeginpage textbeginpage
+} bdef
+/endpage { % - endpage -
+ showpage end
+} bdef
+
+/graphicsbeginpage {
+ initgraphics
+ currentdict /ClipRect knownoget { aload pop rectclip } if
+ 0 g 0 G false op false OP 0 OPM
+ 1 ca 1 CA null SMask false AIS /Compatible BM true TK
+} bdef
+
+/gput % <value> <key> gput -
+ { exch currentdict //nodict eq { /self dup load end 5 dict begin def } if
+ % If we're in a Level 1 system, we need to grow the
+ % dictionary explicitly.
+ currentdict length currentdict maxlength ge %eq
+ { currentdict dup length 3 mul 2 idiv 1 add dict .copydict end begin
+ }
+ if def
+ } bdef
+
+% Restore graphics state, but do not modify path. Paths are not part
+% of the PDF graphics state; see 4.4.1 of PDF reference 3rd ed.
+/grestore_nopath {
+ % Collect the upath with an identity CTM
+ matrix setmatrix .getpath
+ % Save the CTM, set identity during the uappend, then set the CTM
+ grestore matrix currentmatrix matrix setmatrix
+ exch newpath { exec } forall setmatrix
+} bdef
+
+/q {
+ gsave //nodict begin
+} bdef
+% Some PDF files have excess Q operators!
+/Q {
+ currentdict /self .knownget {
+ exec //nodict eq { end grestore_nopath false } { true } ifelse
+ } {
+ true % formaterror -- not a gsave dict
+ } ifelse
+ { (\n **** File has imbalanced q/Q operators \(too many Q's\) ****\n)
+ pdfformaterror
+ } if
+} bdef
+
+% Save PDF gstate
+/qstate { % - qstate <qstate>
+ gstate
+} bdef
+
+% Set PDF gstate
+/setqstate { % <qstate> setqstate -
+ { matrix setmatrix //false upath } stopped {
+ pop setgstate newpath
+ } {
+ % Save the CTM, set identity during the uappend, then set the CTM
+ exch setgstate matrix currentmatrix matrix setmatrix
+ exch newpath uappend setmatrix
+ } ifelse
+} bdef
+
+% ---------------- Color setting ---------------- %
+
+/fcput % <color> <colorspace> fcput -
+ { /FillColorSpace gput /FillColor gput
+ } bdef
+/scput % <color> <colorspace> scput -
+ { /StrokeColorSpace gput /StrokeColor gput
+ } bdef
+/csput % <colorspace> csput -
+ { csset 2 copy fcput scput
+ } bdef
+
+/csdevgray [/DeviceGray] readonly def
+/csdevrgb [/DeviceRGB] readonly def
+/csdevcmyk [/DeviceCMYK] readonly def
+/cspattern [/Pattern] readonly def
+/nullpattern1 mark
+ /PatternType 1 /PaintType 1 /TilingType 3 /BBox [0 0 1 1]
+ /XStep 1 /YStep 1 /PaintProc { pop } bind
+.dicttomark readonly def
+/nullpattern2 nullpattern1 dup length dict copy readonly def
+
+% Each entry in the color space dictionary is a procedure of the form
+% <cspace> -proc- <cspace> <initial-color>
+/CSdict mark
+ /DeviceGray { pop //csdevgray 0 } bind
+ /DeviceRGB { pop //csdevrgb [0 0 0] cvx } bind
+ /DeviceCMYK { pop //csdevcmyk [0 0 0 1] cvx } bind
+ /CIEBasedA { 0 } bind
+ /CIEBasedABC { [0 0 0] cvx } bind
+ /ICCBased { [ 1 index 1 oget /N get { 0 } repeat ] cvx } bind
+ /Separation { 1 } bind
+ /DeviceN { % What is the correct value??
+ [ 1 index 1 get length { 1 } repeat ] cvx
+ } bind
+ /Indexed { 0 } bind
+ /Pattern {
+ dup type /nametype eq 1 index length 1 eq or {
+ pop //cspattern //nullpattern1 matrix makepattern
+ } {
+ //nullpattern2 matrix makepattern 1 index 1 get csset
+ % Stack: patternspace nullpattern basecolor basespace
+ pop [ 3 1 roll dup type /arraytype eq { aload pop } if
+ counttomark -1 roll ] cvx
+ } ifelse
+ } bind
+.dicttomark readonly def
+/csset % <cspace> csset <color> <cspace>
+ { dup dup type /nametype ne { 0 get } if //CSdict exch get exec exch
+ } bdef
+
+/g { //csdevgray fcput } bdef
+/G { //csdevgray scput } bdef
+/rg { 3 array astore cvx //csdevrgb fcput } bdef
+/RG { 3 array astore cvx //csdevrgb scput } bdef
+/k { 4 array astore cvx //csdevcmyk fcput } bdef
+/K { 4 array astore cvx //csdevcmyk scput } bdef
+/cs { csset fcput } bdef
+/CS { csset scput } bdef
+/ri { //renderingintentdict exch .knownget { .setrenderingintent } if } bdef
+% We have to break up sc according to the number of operands.
+/sc1 { /FillColor gput } bdef
+/SC1 { /StrokeColor gput } bdef
+% We have to avoid storing into a color array associated with an outer
+% gsave level, so we do a kind of "copy on write".
+/sc* {
+ currentdict /FillColor .knownget {
+ astore pop
+ } {
+ /FillColor load
+ % FillColor may contain either a single value or an array.
+ dup type /arraytype eq { length }{ pop 1 } ifelse
+ array astore cvx /FillColor gput
+ } ifelse
+} bdef
+/SC* {
+ currentdict /StrokeColor .knownget {
+ astore pop
+ } {
+ /StrokeColor load
+ % StrokeColor may contain either a single value or an array.
+ dup type /arraytype eq { length }{ pop 1 } ifelse
+ array astore cvx /StrokeColor gput
+ } ifelse
+} bdef
+
+% ---------------- Overprint/transparency setting ---------------- %
+
+/op { /FillOverprint gput } bdef
+/OP { /StrokeOverprint gput } bdef
+/OPM {
+ /.setoverprintmode where { pop .setoverprintmode } { pop } ifelse
+} bdef
+/ca { /FillConstantAlpha gput } bdef
+/CA { /StrokeConstantAlpha gput } bdef
+/SMask { /SoftMask gput } bdef
+/AIS { /AlphaIsShape gput } bdef
+/BM {
+ /.setblendmode where {
+ pop [ exch dup type /nametype ne { aload pop } if /Normal ] {
+ { .setblendmode } .internalstopped not { exit } if pop
+ } forall
+ } {
+ pop
+ } ifelse
+} bdef
+/TK {
+ /.settextknockout where { pop .settextknockout } { pop } ifelse
+} bdef
+
+% ---------------- Color installation ---------------- %
+
+% Establish a given color (and color space) as current.
+/.settransparencyparams { % <alpha> <smask> .settransparencyparams -
+ PDFusingtransparency {
+ /.inittransparencymask where {
+ pop AlphaIsShape {
+ 1 .setopacityalpha 0 .inittransparencymask exch .setshapealpha 1
+ } {
+ 1 .setshapealpha 1 .inittransparencymask exch .setopacityalpha 0
+ } ifelse
+ % Set the soft mask by rendering the XObject. Doing this every time
+ % is obviously very inefficient; we'll improve it later.
+ .settransparencymask
+ } {
+ pop pop
+ } ifelse
+ } {
+ pop pop
+ } ifelse
+} bdef
+/.settransparencymask { % <paramdict> <masknum> .settransparencymask -
+ exch dup null eq {
+ PDFusingtransparency {
+ pop .inittransparencymask
+ } {
+ dup /Draw get exec
+ } ifelse
+ } {
+ dup /Draw get exec
+ } ifelse
+} bdef
+% (Non-mask) images must execute setfillblend.
+/setfillblend {
+ FillOverprint setoverprint
+ FillConstantAlpha SoftMask .settransparencyparams
+} def
+/setfillstate {
+ FillColor FillColorSpace setgcolor setfillblend
+} def
+/setstrokestate {
+ StrokeColor StrokeColorSpace setgcolor StrokeOverprint setoverprint
+ StrokeConstantAlpha SoftMask .settransparencyparams
+} def
+/Cdict 15 dict dup begin % <color...> <colorspace> -proc- -
+ /DeviceGray { pop setgray } bdef
+ /DeviceRGB { pop setrgbcolor } bdef
+ /DeviceCMYK { pop setcmykcolor } bdef
+ /CIEBasedA { setgcolorspace setcolor } bdef
+ /CIEBasedABC /CIEBasedA load def
+ /CIEBasedDEF /CIEBasedA load def
+ /CIEBasedDEFG /CIEBasedA load def
+ /ICCBased /CIEBasedA load def
+ /Separation /CIEBasedA load def
+ /DeviceN /CIEBasedA load def
+ /Indexed /CIEBasedA load def
+ /Pattern
+ { setgcolorspace
+
+ % Since multiple patterns may share
+ % same data stream, we need to ensure
+ % that the stream is at 0 position.
+ % Making this consistently with resolveshading,
+ % which applies ReusableStreamDecode filter
+ % to the PS stream, which represents the
+ % PDF stream in dynamics.
+
+ dup /Shading knownoget {
+ dup /ShadingType oget 4 ge {
+ /DataSource knownoget {
+ dup type /filetype eq {
+ 0 setfileposition
+ } {
+ pop
+ } ifelse
+ } if
+ } {
+ pop
+ } ifelse
+ } if
+
+ dup /Matrix knownoget not { matrix } if
+ gsave DefaultQstate setqstate makepattern grestore setcolor
+ } bdef
+end def
+/setgcolor % (null | <color...>) <colorspace> setgcolor -
+ { 1 index null eq
+ { pop pop }
+ { dup 0 get //Cdict exch get exec }
+ ifelse
+ } bdef
+% Compare the old and new color spaces in an attempt to avoid expensive
+% reloads of CIEBased color spaces.
+/PCSdict 15 dict dup begin % <colorspace> -proc- <colorspace|pdfcspace>
+ /CIEBasedA { dup 1 get /PDFColorSpace .knownget { exch pop } if } bdef
+ /CIEBasedABC /CIEBasedA load def
+ /CIEBasedDEF /CIEBasedA load def
+ /CIEBasedDEFG /CIEBasedA load def
+ /Indexed {
+ dup 1 get dup pdfcolorspace 2 copy ne { 3 1 roll } if pop pop
+ } bdef
+end def
+/pdfcolorspace { % <colorspace> pdfcolorspace <colorspace|pdfcspace>
+ dup type /arraytype eq {
+ //PCSdict 1 index 0 get .knownget { exec } if
+ } if
+} bdef
+/setgcolorspace { % <colorspace> setgcolorspace -
+ dup pdfcolorspace currentcolorspace pdfcolorspace eq {
+ pop
+ } {
+ setcolorspace
+ } ifelse
+} bdef
+/fsexec % <fillop|strokeop> fsexec -
+ { % Preserve the current point, if any.
+ { currentpoint } stopped
+ { $error /newerror false put cvx exec }
+ { 3 -1 roll cvx exec moveto }
+ ifelse
+ } bdef
+
+% ---------------- Path painting and clipping ---------------- %
+
+/S { setstrokestate /stroke fsexec } bdef
+/f { setfillstate /fill fsexec } bdef
+/f* { setfillstate /eofill fsexec } bdef
+/n { newpath } bdef % don't allow n to get bound in
+/s { closepath S } bdef
+/B { gsave setfillstate fill grestore S } bdef
+/b { closepath B } bdef
+/B* { gsave setfillstate eofill grestore S } bdef
+/b* { closepath B* } bdef
+
+% Clipping:
+
+/Wdict 4 dict dup begin
+/S { gsave setstrokestate stroke grestore n } bdef
+/f { gsave setfillstate fill grestore n } bdef
+/f* { gsave setfillstate eofill grestore n } bdef
+/n { end clip newpath } bdef
+end readonly def
+/W { //Wdict begin } bdef
+/W*dict 4 dict dup begin
+Wdict { def } forall
+/n { end eoclip newpath } bdef
+end readonly def
+/W* { //W*dict begin } bdef
+
+% ---------------- Text control ---------------- %
+
+/textbeginpage
+ { /TextSpacing 0 def % 0 Tc
+ /TextLeading 0 def % 0 TL
+ /TextRenderingMode 0 def % 0 Tr
+ /TextRise 0 def % 0 Ts
+ /WordSpacing 0 def % 0 Tw
+ /TextHScaling 1.0 def % 100 Tz
+ /TextFont null def
+ /Show { showfirst } def
+ } bdef
+
+% Contrary to the statement in the PDF manual, BT and ET *can* be nested,
+% if the CharProc for a Type 3 font does a BT/ET itself.
+% Since we always call the CharProc inside a q/Q, we simply ensure that
+% the text state is saved and restored like the rest of the extended
+% graphics state.
+
+/settextmatrix {
+ TextMatrix concat
+ TextHScaling 1 ne { TextHScaling 1 scale } if
+ TextRise 0 ne { 0 TextRise translate } if
+ TextFont dup null eq { pop } { setfont } ifelse
+} bdef
+/settextstate {
+ % The text state can be set even outside BT/ET.
+ currentdict /TextSaveMatrix known {
+ TextSaveMatrix setmatrix settextmatrix
+ } if
+} bdef
+/settextposition {
+ % Update the TextMatrix translation.
+ gsave TextSaveMatrix setmatrix
+ currentpoint TextRise sub TextMatrix 4 2 getinterval astore pop
+ % We would like to do "grestore currentpoint translate"
+ % here, but some PDF files set a singular text matrix
+ % (0 0 0 0 <x> <y> Tm), so we can't do this.
+ TextTempMatrix identmatrix setmatrix currentpoint
+ grestore
+ TextTempMatrix currentmatrix 4 2 getinterval astore pop
+ TextTempMatrix setmatrix
+} bdef
+
+/BT {
+ currentdict /TextLineMatrix .knownget
+ { identmatrix pop TextMatrix identmatrix pop }
+ { matrix /TextLineMatrix gput matrix /TextMatrix gput }
+ ifelse
+ { showfirst } /Show gput
+ currentdict /TextSaveMatrix .knownget not {
+ matrix dup /TextSaveMatrix gput
+ } if currentmatrix pop settextmatrix
+ matrix /TextTempMatrix gput % see settextposition
+} bdef
+/ET {
+ TextRenderingMode 4 ge { clip newpath } if
+ TextSaveMatrix setmatrix
+ currentdict /TextSaveMatrix undef
+} bdef
+/Tc { /TextSpacing gput { showfirst } /Show gput } bdef
+/TL { /TextLeading gput } bdef
+/Tr { dup .settextrenderingmode /TextRenderingMode gput { showfirst } /Show gput } bdef
+/Ts { /TextRise gput settextstate } bdef
+/Tw { /WordSpacing gput { showfirst } /Show gput } bdef
+/Tz { 100 div /TextHScaling gput settextstate} bdef
+
+% ---------------- Font control ---------------- %
+
+/Tf { % <font> <scale> Tf -
+ dup 0 eq {
+ (\n **** Warning: Invalid 0.0 font scale given for Tf ****\n)
+ pdfformaterror
+ pop 0.00000001 % handle invalid scale by using a really small value
+ } if
+ 1 index type /dicttype ne {
+ selectfont currentfont
+ } {
+ dup 1 eq { pop } { scalefont } ifelse
+ }
+ ifelse
+ /TextFont gput settextstate
+} bdef
+
+% Read a CFF font.
+/FRD % <resname> <file> FRD -
+ { /FontSetInit /ProcSet findresource begin //true ReadData
+ } bdef
+
+% Copy a font, removing its FID. If changed is true, also remove
+% the UniqueID and XUID, if any. If the original dictionary doesn't have
+% the keys being removed, don't copy it.
+/.copyfontdict % <font> <changed> .copyfontdict <dict>
+ { 1 index /FID known
+ 1 index { 2 index /UniqueID known or 2 index /XUID known or } if
+ { % We add 1 to the length just in case the original
+ % didn't have a FID.
+ exch dup length 1 add dict exch
+ { % Stack: changed newfont key value
+ 1 index /FID eq 4 index
+ { 2 index /UniqueID eq or 2 index /XUID eq or }
+ if not { 3 copy put } if pop pop
+ }
+ forall exch
+ }
+ if pop
+ } bdef
+
+% Insert a new Encoding or Metrics into a font if necessary.
+% Return a possibly updated font, and a flag to indicate whether
+% the font was actually copied.
+/.updatefontmetrics { % <font> <Metrics|null> .updatefontmetrics
+ % <font'> <copied>
+ dup //null ne {
+ exch //true .copyfontdict dup /Metrics 4 -1 roll put //true
+ } {
+ pop //false
+ } ifelse
+} bdef
+
+/.updatefontencoding { % <font> <Encoding|null> .updatefontencoding
+ % <font'> <copied>
+ dup //null ne { dup 2 index /Encoding get ne } { //false } ifelse {
+ exch //false .copyfontdict dup /Encoding 4 -1 roll put //true
+ } {
+ pop //false
+ } ifelse
+} bdef
+
+% Duplicate keys in CharString dictionary according to GlyphMap: <</new_glyph /old_glyph>>
+% We have to do this because PDF fonts can associate multiple widths with the same glyph
+% but Metrics dictionary works by the glyph name.
+/.update_charstring { % <font> <GlyphMap> .update_charstring <font'> <copied>
+ dup //null ne {
+ exch //true .copyfontdict % map font
+ dup dup /CharStrings get % map font font cstr
+ dup length % map font font cstr len
+ 4 index length add % map font font cstr len+map_len
+ dict copy dup begin % map font font cstr'
+ /CharStrings exch put % map font
+ exch { % font /new /old
+ currentdict exch .knownget {
+ def
+ } {
+ currentdict /.notdef .knownget {
+ def
+ } {
+ pop
+ % The font has no .notdef.
+ % Could not resolve the conflict,
+ % but either the font is invalid or the glyph name is never used.
+ } ifelse
+ } ifelse
+ } forall
+ end //true
+ } {
+ pop //false
+ } ifelse
+} bdef
+
+/.updatefont { % <font> <Encoding|null> <Metrics|null> <GlyphMap|null>
+ % .updatefont <font'> <copied>
+ 4 2 roll % <Metrics|null> <GlyphMap> <font> <Encoding|null>
+ .updatefontencoding % <Metrics|null> <GlyphMap> <font> bool
+ 4 1 roll exch % bool <Metrics|null> <font> <GlyphMap>
+ .update_charstring % bool <Metrics|null> <font> bool
+ 3 1 roll exch % bool bool <font> <Metrics|null>
+ .updatefontmetrics % bool bool <font> bool
+ 4 2 roll or or % <font> is_copied
+} bdef
+
+% ---------------- Text positioning ---------------- %
+
+/Td {
+ TextLineMatrix transform TextLineMatrix 4 2 getinterval astore pop
+ TextLineMatrix TextMatrix copy pop settextstate
+} bdef
+/TD { dup neg /TextLeading gput Td } bdef
+/T* { 0 TextLeading neg Td } bdef
+/Tm {
+ TextLineMatrix astore TextMatrix copy pop settextstate
+} bdef
+
+% ---------------- Text painting ---------------- %
+
+/Vexch {
+ rootfont /WMode knownoget { 1 eq { exch } if } if
+} bind def
+
+/textrenderingprocs [ % (0 is handled specially)
+ % Painting-only modes
+ { tf } { tS } { tB } { tn }
+ % Clipping modes
+ { gsave tf grestore tW }
+ { gsave tS grestore tW }
+ { gsave tB grestore tW }
+ { tW }
+] readonly def
+/setshowstate
+ { WordSpacing 0 eq TextSpacing 0 eq and
+ { TextRenderingMode 0 eq currentdevice .devicename /pdfwrite eq or {
+ { setfillstate show }
+ } {
+ TextRenderingMode 3 eq {
+ % Some PDF files execute 'tm' with a singular matrix,
+ % and then use the text rendering mode 3.
+ % The graphics library currently cannot handle text
+ % operations when the CTM is singular.
+ % Work around this here.
+ {
+ matrix currentmatrix dup dup
+ dup 0 get 0 eq 1 index 1 get 0 eq and {
+ dup dup 2 get 0 eq { 0 }{ 1 } ifelse 1 put
+ } if
+ dup 2 get 0 eq 1 index 3 get 0 eq and {
+ dup dup 1 get 0 eq { 3 }{ 2 } ifelse 1 put
+ } if
+ setmatrix
+ 2 index setfillstate show % Tr was set to graphic state.
+ setmatrix
+ % now set the currentpoint using the original matrix
+ gsave nulldevice
+ setmatrix
+ false charpath currentpoint newpath
+ grestore
+ moveto
+ }
+ } {
+ { false charpath textrenderingprocs TextRenderingMode get exec }
+ } ifelse
+ } ifelse
+ }
+ { TextRenderingMode 0 eq TextRenderingMode 3 eq or currentdevice .devicename /pdfwrite eq or
+ % Tr was set to graphic state.
+ { WordSpacing 0 eq
+ { { setfillstate TextSpacing 0 Vexch 3 -1 roll ashow } }
+ { TextSpacing 0 eq
+ { { setfillstate WordSpacing 0 Vexch 32 4 -1 roll widthshow } }
+ { { setfillstate WordSpacing 0 Vexch 32
+ TextSpacing 0 Vexch 6 -1 roll awidthshow } }
+ ifelse
+ }
+ ifelse
+ }
+ { { WordSpacing TextSpacing
+ % Implement the combination of t3 and false charpath.
+ % Note that we must use cshow for this, because we
+ % can't parse multi-byte strings any other way.
+ % Stack: string xword xchar
+ { pop pop (x) dup 0 3 index put false charpath
+ % Stack: xword xchar ccode
+ 3 copy 32 eq { add } { exch pop } ifelse 0 Vexch rmoveto pop
+ }
+ 4 -1 roll cshow pop pop
+ textrenderingprocs TextRenderingMode get exec
+ }
+ }
+ ifelse
+ }
+ ifelse /Show gput
+ } bdef
+/showfirst { setshowstate Show } def
+
+/Tj {
+ 0 0 moveto Show settextposition
+} bdef
+/' { T* Tj } bdef
+/" { exch Tc exch Tw T* Tj } bdef
+/TJ {
+ 0 0 moveto {
+ dup type /stringtype eq {
+ Show
+ } { -1000 div
+ currentfont /ScaleMatrix .knownget { 0 get mul } if
+ 0 Vexch rmoveto
+ } ifelse
+ } forall settextposition
+} bdef
+
+/tf { setfillstate currentpoint fill moveto } bdef
+/tn { currentpoint newpath moveto } bdef % Obsolete, never used.
+% For stroking characters, temporarily restore the graphics CTM so that
+% the line width will be transformed properly.
+/Tmatrix matrix def
+/tS
+ { setstrokestate
+ currentpoint //Tmatrix currentmatrix TextSaveMatrix setmatrix stroke
+ setmatrix moveto
+ } bdef
+/tB { gsave tf grestore tS } bdef
+% This does the wrong thing if there have been multiple text operations
+% within a single BT/ET pair, but it's a start.
+/tW { } bdef
+
+% Text formatting and painting for the AcroForm field without appearance streams.
+/Tform { % <MaxLen> (V) <Ff> <Q> Tform -
+ clippath pathbbox 4 2 roll pop pop % MaxLen (V) Ff Q dx dy
+ currentfont /ScaleMatrix .knownget { 3 get } { 1 } ifelse % MaxLen (V) Ff Q dx dy yy
+ currentfont /FontBBox get dup 1 get neg exch 3 get % MaxLen (V) Ff Q dx dy yy desc asc
+ dup 0 ne { div } { pop pop 0 } ifelse % MaxLen (V) Ff Q dx dy yy desc/asc
+ 1 index mul % MaxLen (V) Ff Q dx dy yy desc/asc*yy
+
+ 4 index 16#1000 and 0 ne { % multiline
+ 8 { pop } repeat (Multiline form fields are not yet implemented.) =
+ } {
+ 4 index 16#1000000 and 0 ne { % comb
+ 8 { pop } repeat (Combed form fields are not yet implemented.) =
+ } { % plain text
+ 3 1 roll sub add 2 div % MaxLen (V) Ff Q dx (dy-yy+desc)/2
+ 0 exch moveto % MaxLen (V) Ff Q dx
+ 1 index 0 ne {
+ 3 index stringwidth pop % MaxLen (V) Ff Q dx w
+ sub exch 1 eq { 2 div } { 2 sub } ifelse % MaxLen (V) Ff (dx-w)/2
+ 0 rmoveto % MaxLen (V) Ff
+ pop % MaxLen (V)
+ } {
+ pop pop pop % MaxLen (V)
+ 2 0 rmoveto
+ } ifelse
+ exch pop Show % -
+ } ifelse
+ } ifelse
+} bdef
+
+end readonly put % GS_PDF_ProcSet
+
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/pdf_rbld.ps b/Master/tlpkg/tlgs/lib/pdf_rbld.ps
new file mode 100644
index 00000000000..8732be478e3
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf_rbld.ps
@@ -0,0 +1,324 @@
+% Copyright (C) 2002 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdf_rbld.ps 8022 2007-06-05 22:23:38Z giles $
+% pdf_rbld.ps - Rebuilding of broken PDF files (xref errors)
+
+% This module contains routines that are used if we detect an error
+% while reading the xref tables. These routines will scan the file and
+% build an xref table by finding the objects. We also need to find the
+% appropriate trailer dictionary. Note: One procedure is also used
+% even if we do not need to rebuild a PDF file.
+%
+% This module cannot rebuild a PDF file which has had errors created inside
+% of objects or binary data streams. It often succeeds with files that
+% have had its end of lines converted between unix and dos versions.
+
+% if true --> we have an object with duplicate object and generation numbers.
+/dup_obj_gen_num false def
+
+% Note: This procedure is also used by non-rebuild code.
+% Store a line in the xref array (Actually Objects and Generations arrays)
+% <obj num> (strm num> <obj loc> <gen num> setxrefentry <obj num> strm num>
+% <obj loc> <gen num>
+/setxrefentry
+{ % We store generation numbers as value + 1
+ % We reserve 0 to indicate an free xref entry
+ 1 add % increment generation number
+ % To save space, generations numbers are stored in a lstring unless we
+ % find a generation number greater than 255. If so then transfer to
+ % an larray.
+ dup 255 gt {
+ Generations ltype /stringtype eq { % Convert Generations to an larray.
+ larray Generations llength lgrowto dup % Create new larray
+ 0 1 2 index llength 1 sub { % Copy from old lstring to new larray
+ Generations 1 index lget lput dup
+ } for
+ pop
+ /Generations exch store % Save new Generations larray
+ } if
+ } if
+ % Verify that the new values are for a new object. If the current
+ % entry is null then we have a new entry.
+ Objects 4 index lget null eq {
+ ObjectStream 4 index 4 index cvx lput % Save ObjectStream object number
+ Objects 4 index 3 index cvx lput % Save object location
+ Generations 4 index 2 index lput % Save geenration number
+ } {
+ % Verify that the new entry has at least as high a generaton number
+ % We accept equal entry number because we have found PDF files in
+ % which there are multiple objects with the same object and entry
+ % numbers. The normal xref logic only accepts the first such
+ % entry that it finds. However the 'rebuild PDF' logic can find
+ % both such entries. The correct one is usually the last one.
+ Generations 4 index lget 1 index le {
+ ObjectStream 4 index 4 index cvx lput % Save ObjectStream object number
+ Objects 4 index 3 index cvx lput % Save object location
+ Generations 4 index 2 index lput % Save geenration number
+ } if
+ % Set error flag if we have equal object and generation numbers
+ Generations 4 index lget 1 index eq { /dup_obj_gen_num true def } if
+ } ifelse
+} bind def
+
+% Print the contents of the xref array. This actually consists of three
+% arrays (Objects, Generations, and ObjectStream). All three are larrays.
+% larrays are a special Ghostscript object which can be arrays with more
+% than 64k elements.
+/print_xref % - print_xref -
+{ 0 1 Objects llength 1 sub % stack: 0 1 <number of objects - 1>
+ { dup =only % print object number
+ ( ) print
+ dup Generations exch lget 1 sub =only % print Generation number
+ ( ) print
+ dup ObjectStream exch lget ==only % print ObjectStream object number
+ ( ) print
+ Objects exch lget === % print object location
+ } for
+ flush
+} bind def
+
+% Get token from string and check its type
+% <string> <type> typed_token <false> % no token or not match
+% <string> <type> typed_token <obj> <last> <true> % matching token type
+% Where last is the string remainder
+/typed_token
+{ exch
+ token_nofail % get token
+ {
+ dup type % stack: type last token type
+ 4 -1 roll eq { % stack: last token bool
+ exch true % desired object found - set exit status
+ } {
+ pop pop false % not type - clear stack, set exit status
+ } ifelse
+ } {
+ pop false % no token - pop type, set exit status
+ } ifelse % check if we got token
+} bind def
+
+% Allocate space for post_eof_count to be bound into procedures below.
+/post_eof_count 0 def
+
+% We want the location of the trailer dictionary at the start of file.
+% First we will find the xref. Then we will skip over the xref entries
+% to the trailer.
+/search_start_trailer % - search_start_trailer <trailer loc>
+{ % Read the first 300 bytes and check for xref
+ PDFfile 0 setfileposition
+ PDFfile bytesavailable post_eof_count sub % location of end of data
+ 300 .min % block size to read
+ dup string 0 1 4 -1 roll 1 sub
+ { 2 copy PDFfile read pop put pop } for
+ (xref) search {
+ % found 'xref'
+ exch pop exch pop length 4 add PDFfile exch setfileposition
+ PDFfile token pop % get starting entry - or 'trailer'
+ (trailer) ne { % if we do not already have 'trailer'
+ PDFfile token pop % get number of entries
+ PDFfile token pop pop % this moves us into the middle of the first entry
+ 25 string exch % define working string for readline
+ { PDFfile 1 index readline pop pop
+ } repeat % skip entries
+ pop % pop working string
+ PDFfile token pop pop % get 'trailer'
+ PDFfile fileposition % get file position
+ } if
+ } {
+ pop search_end_trailer % no xref, should not happen, search end of file
+ } ifelse
+} bind def
+
+% We want the location of the trailer dictionary at the end of file.
+% We will read the last block of data and search for the final occurance
+% of the word 'trailer'
+/search_end_trailer % - search_end_trailer <trailer loc>
+{ % Position to read block of data from the end of the file. Note: We ignore
+ % anything past the last %%EOF since this is not PDF data.
+ PDFfile 0 setfileposition
+ PDFfile bytesavailable post_eof_count sub % location of end of data
+ dup 65535 .min % block size to read
+ % stack: <file end pos> <block size>
+ % move file position to the start of the block
+ 2 copy sub PDFfile exch setfileposition
+ % read block of data
+ dup string 0 1 4 -1 roll 1 sub { 2 copy PDFfile read pop put pop } for
+ % search for last occurance of 'trailer'
+ (trailer) { search not { exit } if pop } loop
+ % determine where the trailer is in the file
+ % trailer loc = end loc - remaing string length
+ length sub
+} bind def
+
+% We want to find the trailer dictionary. There is a trailer dictionary
+% for each xref object list. We only want the trailer dictionary associated
+% with the first xref object list. In theory this can be anywhere in the
+% file. However since we are trying to repair a broken file, we cannot simply
+% follow the xref links. So we are falling back to a simple strategy. We
+% find the specified location of the first xref list. If its location is in
+% the first half of the file then we search for the first trailer dictionary
+% at the start of the file. Otherwise we search for the last trailer at the
+% end of the file.
+/search_trailer % - search_trailer -
+{ % Find the 'startxref' and associated position at the end of the file.
+ % Position to read block of data from the end of the file. Note: We
+ % actually end at the end of the last %%EOF since this is the end of the
+ % useful PDF data. (Some files contain trailing garbage.)
+ PDFfile 0 setfileposition
+ PDFfile bytesavailable % size of file
+ post_eof_count sub dup % location of end of last %%EOF
+ dup 4096 .min % block size to read
+ % stack: <useful file size> <useful file size file> <block size>
+ % move file position to the start of the block
+ 2 copy sub PDFfile exch setfileposition
+ % read block of data
+ dup string 0 1 4 -1 roll 1 sub { 2 copy PDFfile read pop put pop } for
+ % search for last occurance of 'startxref'
+ false % Assume that startxref not present
+ exch (startxref) {
+ search not { exit } if % Exit loop when no more startxref's
+ pop 3 -1 roll pop true 3 1 roll % Idicate that we have found starxref
+ } loop
+ exch % Exch last string and 'found' flag
+ {
+ % determine where the startxref is in the file
+ % 'startxref' loc = end loc - remaing string length - 9 bytes
+ length sub 9 sub
+ % move the file to this position and read startxref and position
+ PDFfile exch setfileposition PDFfile token
+ pop pop PDFfile token pop
+ } {
+ % startxref not found. We will search the end of the file for trailer.
+ pop pop PDFfilelen
+ } ifelse
+ % compare xref position to 1/2 the length of the file and search for trailer
+ exch 2 div lt { search_start_trailer } { search_end_trailer } ifelse
+ % get the trailer
+ PDFfile exch setfileposition % set to the specified trailer location
+ PDFfile traileropdict .pdfrun % read trailer info
+ /Trailer exch def
+} bind def
+
+% This routine will determine if there is stuff after the %%EOF. There is
+% supposed to be only a line termination. However many real life files
+% contain some garbage. This routine checks how much. We then ignore this
+% stuff when we are scanning for objects.
+/determine_post_eof_count % - determine_post_eof_count <count>
+{ % Position to read block of data from the end of the file.
+ PDFfilelen % size of file
+ dup 4096 .min % block size to read
+ % stack: <file size> <file size> <block size>
+ % move file position to the start of the block
+ 2 copy sub PDFfile exch setfileposition
+ % read block of data
+ dup string 0 1 4 -1 roll 1 sub { 2 copy PDFfile read pop put pop } for
+ % search for last occurance of '%%EOF'
+ (%%EOF) { search not { exit } if pop } loop
+ % how much is left = remaining string length
+ length exch pop % pop /%%EOF
+} bind def
+
+% This routine will scan a file searaching for object locations to build
+% an alternate version of the data in the xref tables.
+% Its purpose is to provide a basis for an xref fixing facility.
+/search_objects % - search_objects -
+{ % Initialize the Objects, Generations, etc. larrays
+ initPDFobjects
+ % reset duplicate object and generation numbers error flag
+ /dup_obj_gen_num false def
+ % Determine how many bytes are in the file after the final %%EOF
+ /post_eof_count determine_post_eof_count def
+ % Start at the beginning of the file
+ PDFfile 0 setfileposition
+ % Create a working string (and also store its length on stack). We are
+ % using a maximum size string size the logic below wants a recovered object
+ % to fit into our working string.
+ 65535 dup string
+ { % Now loop through the entire file lloking for objects
+ PDFfile fileposition % save current file position
+ % When we get near the end of the file, we use a smaller interval of
+ % our working string to prevent reading past the end. (See comments on
+ % EOF testing below.)
+ PDFfile bytesavailable post_eof_count sub 10 sub dup 4 index lt {
+ 2 index 0 3 -1 roll getinterval % near EOF, use interval of string
+ } { pop 1 index % not near end, use full working string
+ }ifelse
+ % Read a line from file. If the line does not fit into our working string,
+ % or any other error, then we will discard it.
+ PDFfile exch { readline } .internalstopped
+ { pop pop false } if % indicate no string if we stopped
+ { % stack: <length> <working_str> <loc> <string>
+ % Now that we have line, get obj num, ref num, and 'obj'. Verify that each
+ % of these is correct type.
+ /integertype typed_token { % get obj number
+ /integertype typed_token { % get ref number
+ /nametype typed_token { % get 'obj' text
+ pop % pop remaining string
+ /obj eq { % verify name is 'obj'
+ % make sure we have room in the arrays. We work in increments
+ % of 20 each time we increase the size.
+ 1 index 20 add 20 idiv 20 mul
+ growPDFobjects
+ % save xref parameters into ObjectStream, Objects and Generations
+ 1 index 0 % rearrange parms for setxrefentry
+ 4 index PDFoffset sub 3 index
+ setxrefentry % save parameters
+ pop pop pop pop % clear parameters
+ } if % check if name is 'obj'
+ } if % check if we got 'obj" string
+ pop % remove ref number
+ } if % check if we got ref number
+ pop % remove obj number
+ } if % check if we got object number
+ } if % check if got a string from readline
+ pop % remove location
+ % Check if we are approaching the end of the file. We do not want to
+ % read past the end of the file since that closes it. We actually stop
+ % 10-20 bytes early since there cannot be an object that close to the end.
+ % (There is a Trailer dictionary, etc. at the end of the file.)
+ PDFfile bytesavailable post_eof_count sub 20 lt { exit } if
+ } loop % loop through the entire file
+ pop pop % remove working string and its length
+ % Output warning if we have two objects with the same object and generation
+ % numbers.
+ dup_obj_gen_num {
+ ( **** Warning: There are objects with matching object and generation\n)
+ pdfformaterror
+ ( **** numbers. The accuracy of the resulting image is unknown.\n)
+ pdfformaterror
+ } if
+} bind def
+
+% Print warning message because we found a problem while reading the xref
+% tables
+/print_xref_warning
+{ ( **** Warning: An error occurred while reading an XREF table.\n)
+ pdfformaterror
+ ( **** The file has been damaged. This may have been caused\n)
+ pdfformaterror
+ ( **** by a problem while converting or transfering the file.\n)
+ pdfformaterror
+ ( **** Ghostscript will attempt to recover the data.\n)
+ pdfformaterror
+} bind def
+
+% Attempt to recover the XRef data. This is called if we have a failure
+% while reading the normal XRef tables. This routine usually works
+% only for pre PDF1.5 versions of PDF files.
+/recover_xref_data % - recover_xref_data -
+{ print_xref_warning % Print warning message
+ count pdfemptycount sub { pop } repeat % remove anything left by readxref
+ search_objects % Search for objects
+} bind def
diff --git a/Master/tlpkg/tlgs/lib/pdf_sec.ps b/Master/tlpkg/tlgs/lib/pdf_sec.ps
new file mode 100644
index 00000000000..32aea04275a
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdf_sec.ps
@@ -0,0 +1,456 @@
+% Copyright (C) 1996-1998 Geoffrey Keating.
+% Copyright (C) 2001 Artifex Software, Inc.
+% This file may be freely distributed with or without modifications,
+% so long as modified versions are marked as such and copyright notices are
+% not removed.
+
+% $Id: pdf_sec.ps 7670 2007-02-02 18:54:09Z alexcher $
+% Implementation of security hooks for PDF reader.
+
+% This file contains the procedures that have to take encryption into
+% account when reading a PDF file. It replaces the stub version of this
+% file that is shipped with GhostScript. It requires GhostScript 7.01
+% or later.
+
+% Documentation for using this file is available at
+% http://www.ozemail.com.au/%7Egeoffk/pdfencrypt/
+
+% Modified by Alex Cherepanov to work with GS 6.60 and higher.
+% New versions of GS require explicit checks for /true , /false, and /null
+% in .decpdfrun . This fix is backward-compatible.
+
+% Modified by Raph Levien and Ralph Giles to use the new C
+% implementations of md5 and arcfour in ghostscript 7.01, and to
+% be compatible with PDF 1.4 128-bit encryption.
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+/pdfdict where { pop } { /pdfdict 100 dict def } ifelse
+pdfdict begin
+
+% Older ghostscript versions do not have .pdftoken, so we use 'token' instead.
+/.pdftoken where { pop } { /.pdftoken /token load def } ifelse
+
+% take a stream and arc4 decrypt it.
+% <stream> <key> arc4decodefilter <stream>
+/arc4decodefilter {
+ 1 dict begin
+ /Key exch def
+ currentdict end /ArcfourDecode filter
+} bind def
+
+% <ciphertext> <key> arc4decode <plaintext>
+/arc4decode {
+ %(key: ) print dup == (ct: ) print 1 index ==
+ 1 index length 0 eq {
+ pop
+ } {
+ 1 index length string 3 1 roll arc4decodefilter exch readstring pop
+ } ifelse
+} bind def
+
+/md5 {
+ 16 string dup /MD5Encode filter dup 4 3 roll writestring closefile
+} bind def
+
+/md5_trunk {
+ md5 0 pdf_key_length getinterval
+} bind def
+
+
+/pdf_padding_string
+ <28bf4e5e4e758a41 64004e56fffa0108
+ 2e2e00b6d0683e80 2f0ca9fe6453697a>
+def
+
+% Pad a key out to 32 bytes.
+/pdf_pad_key { % <key> pdf_pad_key <padded key>
+ dup length 32 gt { 0 32 getinterval } if
+ pdf_padding_string
+ 0 32 3 index length sub getinterval
+ concatstrings
+} bind def
+
+/pdf_xorbytes { % <iter-num> <key> pdf_xorbytes <xored-key>
+ dup length dup string
+ exch 1 sub 0 1 3 2 roll {
+ % <iter-num> <key> <new-key> <byte-num>
+ dup 3 index exch get 4 index xor
+ % <iter-num> <key> <new-key> <byte-num> <byte>
+ 3 copy put pop pop
+ } for
+ 3 1 roll pop pop
+} bind def
+
+% Get length of encryption key in bytes
+/pdf_key_length { % pdf_key_length <key_length>
+ Trailer /Encrypt oget
+ dup /V knownoget not { 0 } if 1 eq
+ { pop 5 } % If V == 1 then always use 40 bits
+ { /Length knownoget { -3 bitshift } { 5 } ifelse }
+ ifelse
+} bind def
+
+% Algorithm 3.2
+/pdf_compute_encryption_key { % <password> pdf_compute_encryption_key <key>
+ % Step 1.
+ pdf_pad_key
+
+ % Step 2, 3.
+ Trailer /Encrypt oget dup /O oget
+ % <padded-key> <encrypt> <O>
+
+ % Step 4.
+ exch /P oget 4 string exch
+ 2 copy 255 and 0 exch put
+ 2 copy -8 bitshift 255 and 1 exch put
+ 2 copy -16 bitshift 255 and 2 exch put
+ 2 copy -24 bitshift 255 and 3 exch put pop
+ % <padded-key> <O> <P>
+
+ % Step 5.
+ Trailer /ID knownoget { 0 oget } {
+ ()
+ ( **** ID key in the trailer is required for encrypted files.\n) pdfformaterror
+ } ifelse
+ 3 { concatstrings } repeat
+ % We will finish step 5 after possibly including step 6.
+
+ % The following only executed for /R equal to 3 or more
+ Trailer /Encrypt oget dup /R oget dup 3 ge {
+
+ % Step 6. If EncryptMetadata is false, pass 0xFFFFFFFF to md5 function
+ % The PDF 1.5 Spec says that EncryptMetadata is an undocumented
+ % feature of PDF 1.4. That implies that this piece of logic should
+ % be executed if R >= 3. However testing with Acrobat 5.0 and 6.0 shows
+ % that this step is not executed if R equal to 3. Thus we have a test for
+ % R being >= 4.
+ 4 ge {
+ /EncryptMetadata knownoget % Get EncryptMetadata (if present)
+ not { true } if % Default is true
+ not { % If EncryptMetadata is false
+ <ff ff ff ff> concatstrings % Add 0xFFFFFFFF to working string
+ } if
+ } {
+ pop % Remove Encrypt dict
+ } ifelse
+ md5_trunk % Finish step 5 and 6.
+
+ % Step 7. Executed as part of step 6
+ % Step 8. (This step is defintely a part of PDF 1.4.)
+ 50 { md5_trunk } repeat
+ } {
+ pop pop md5_trunk % Remove R, Encrypt dict, finish step 5
+ } ifelse
+
+ % Step 9 - Done in md5_trunk.
+} bind def
+
+% Algorithm 3.4
+/pdf_gen_user_password_R2 { % <filekey> pdf_gen_user_password_R2 <U>
+
+ % Step 2.
+ pdf_padding_string exch arc4decode
+} bind def
+
+% Algorithm 3.5
+/pdf_gen_user_password_R3 { % <filekey> pdf_gen_user_password_R3 <U>
+
+ % Step 2.
+ pdf_padding_string
+
+ % Step 3.
+ Trailer /ID knownoget { 0 oget } {
+ ()
+ ( **** ID key in the trailer is required for encrypted files.\n) pdfformaterror
+ } ifelse
+ concatstrings md5
+
+ % Step 4.
+ 1 index arc4decode
+
+ % Step 5.
+ 1 1 19 {
+ 2 index pdf_xorbytes arc4decode
+ } for
+ exch pop
+
+} bind def
+
+/pdf_gen_user_password { % <password> pdf_gen_user_password <filekey> <U>
+ % common Step 1 of Algorithms 3.4 and 3.5.
+ pdf_compute_encryption_key dup
+
+ Trailer /Encrypt oget
+
+ /R oget dup 2 eq {
+ pop pdf_gen_user_password_R2
+ } {
+ dup 3 eq {
+ pop pdf_gen_user_password_R3
+ } {
+ dup 4 eq { % 4 uses the algorithm as 3
+ pop pdf_gen_user_password_R3
+ } {
+ ( **** This file uses an unknown standard security handler revision: )
+ exch =string cvs concatstrings pdfformaterror printProducer
+ /pdf_check_user_password cvx /undefined signalerror
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+% Algorithm 3.6
+/pdf_check_user_password { % <password> pdf_check_user_password <filekey> true
+ % <password> pdf_check_user_password false
+ pdf_gen_user_password
+
+ Trailer /Encrypt oget /U oget
+
+ 0 2 index length getinterval eq {
+ true
+ } {
+ pop false
+ } ifelse
+} bind def
+
+% Compute an owner key, ie the result of step 4 of Algorithm 3.3
+/pdf_owner_key % <password> pdf_owner_key <owner-key>
+{
+ % Step 1.
+ pdf_pad_key
+
+ % Step 2.
+ md5_trunk
+
+ % 3.3 Step 3. Only executed for /R equal to 3 or more
+ Trailer /Encrypt oget /R oget 3 ge {
+ 50 { md5_trunk } repeat
+ } if
+
+ % Step 4 - Done in md5_trunk.
+} bind def
+
+% Algorithm 3.7
+/pdf_check_owner_password { % <password> pdf_check_owner_password <filekey> true
+ % <password> pdf_check_owner_password false
+ % Step 1.
+ pdf_owner_key
+
+ % Step 2.
+ Trailer /Encrypt oget dup /O oget 2 index arc4decode
+ % <encryption-key> <encrypt-dict> <decrypted-O>
+
+ % Step 3. Only executed for /R equal to 3 or more
+ exch /R oget 3 ge {
+ 1 1 19 {
+ 2 index pdf_xorbytes arc4decode
+ } for
+ } if
+ exch pop
+ % <result-of-step-3>
+
+ pdf_check_user_password
+} bind def
+
+% Process the encryption information in the Trailer.
+/pdf_process_Encrypt {
+ Trailer /Encrypt oget
+ /Filter oget /Standard eq not {
+ ( **** This file uses an unknown security handler.\n) pdfformaterror
+ printProducer
+ /pdf_process_Encrypt cvx /undefined signalerror
+ } if
+ () pdf_check_user_password
+ {
+ /FileKey exch def
+ } {
+ /PDFPassword where {
+ pop PDFPassword pdf_check_user_password
+ {
+ /FileKey exch def
+ } {
+ PDFPassword pdf_check_owner_password
+ {
+ /FileKey exch def
+ } {
+ ( **** Password did not work.\n) pdfformaterror
+ printProducer
+ /pdf_process_Encrypt cvx /invalidfileaccess signalerror
+ } ifelse
+ } ifelse
+ } {
+ ( **** This file requires a password for access.\n) pdfformaterror
+ printProducer
+ /pdf_process_Encrypt cvx /invalidfileaccess signalerror
+ } ifelse
+ } ifelse
+
+% Trailer /Encrypt oget /P oget 4 and 0 eq #? and
+% { ( ****This owner of this file has requested you do not print it.\n)
+% pdfformaterror printProducer
+% /pdf_process_Encrypt cvx /invalidfileaccess signalerror
+% }
+% if
+} bind def
+
+% Calculate the key used to decrypt an object (to pass to .decpdfrun or
+% put into a stream dictionary).
+/computeobjkey % <object#> <generation#> computeobjkey <keystring>
+{
+ exch
+ FileKey length 5 add string
+ dup 0 FileKey putinterval
+ exch
+ % stack: gen# string obj#
+ 2 copy 255 and FileKey length exch put
+ 2 copy -8 bitshift 255 and FileKey length 1 add exch put
+ 2 copy -16 bitshift 255 and FileKey length 2 add exch put
+ pop exch
+ 2 copy 255 and FileKey length 3 add exch put
+ 2 copy -8 bitshift 255 and FileKey length 4 add exch put
+ pop md5 0 FileKey length 5 add 2 index length .min getinterval
+} bind def
+
+% As .pdfrun, but decrypt strings with key <key>.
+/.decpdfrun % <file> <keystring> <opdict> .decpdfrun -
+ { % Construct a procedure with the file, opdict and key bound into it.
+ 2 index cvlit mark mark 5 2 roll
+ { .pdftoken not { (%%EOF) cvn cvx } if
+ dup xcheck
+ { PDFDEBUG { dup == flush } if
+ 3 -1 roll pop
+ 2 copy .knownget
+ { exch pop exch pop exec
+ }
+ { exch pop
+ dup /true eq
+ { pop //true
+ }
+ { dup /false eq
+ { pop //false
+ }
+ { dup /null eq
+ { pop //null
+ }
+ { ( **** Unknown operator: )
+ exch =string cvs concatstrings (\n) concatstrings
+ pdfformaterror
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { exch pop PDFDEBUG { dup ==only ( ) print flush } if
+ dup type /stringtype eq
+ {
+ % Check if we have encrypted strings R=4 allows for
+ % selection of encryption on streams and strings
+ Trailer /Encrypt oget % Get encryption dictionary
+ dup /R oget 4 lt % only 4 has selectable
+ { % R < 4 --> encrypted strings
+ pop 1 index arc4decode % Decrypt string
+ PDFDEBUG { (%Decrypted: ) print dup == flush } if
+ } { % Else R = 4
+ /StrF knownoget % Get StrF (if present)
+ { % If StrF is present ...
+ /Identity eq not % Check if StrF != Identity
+ { 1 index arc4decode % Decrypt string
+ PDFDEBUG { (%Decrypted: ) print dup == flush } if
+ }
+ if % If StrF != identity
+ }
+ if % If StrF is known
+ }
+ ifelse % Ifelse R < 4
+ }
+ if % If = stringtype
+ exch pop
+ }
+ ifelse
+ }
+ aload pop .packtomark cvx
+ /loop cvx 2 packedarray cvx
+ { stopped /PDFsource } aload pop
+ PDFsource
+ { store { stop } if } aload pop .packtomark cvx
+ /PDFsource 3 -1 roll store exec
+ } bind def
+
+% Run the code to resolve an object reference.
+/pdf_run_resolve
+{ /FileKey where % Check if the file is encrypted
+ { pop % File is encrypted
+ 2 copy computeobjkey dup 4 1 roll
+ PDFfile exch resolveopdict .decpdfrun
+ dup dup dup 5 2 roll
+ % stack: object object key object object
+ { % Use loop to provide an exitable context.
+ xcheck exch type /dicttype eq and % Check if executable dictionary
+ not { % If object is not ...
+ pop pop % ignore object
+ exit % Exit 'loop' context
+ } if % If not possible stream
+ % Starting with PDF 1.4 (R = 3), there are some extra features
+ % which control encryption of streams. The EncryptMetadata entry
+ % in the Encrypt dict controls the encryption of metadata streams.
+ Trailer /Encrypt oget % Get encryption dictionary
+ dup /R oget dup 3 lt % Only PDF 1.4 and higher has options
+ { % R < 3 --> all streams encrypted
+ pop pop /StreamKey exch put % Insert StreamKey in dictionary
+ exit % Exit 'loop' context
+ } if
+ % Check EncryptMeta. stack: object object key Encrypt R
+ exch dup /EncryptMetadata knownoget % Get EncryptMetadata (if present)
+ not { true } if % If not present default = true
+ not % Check if EncryptMetadata = false
+ { % if false we need to check the stream type
+ 3 index /Type knownoget % Get stream type (if present)
+ not { //null } if % If type not present use fake name
+ /Metadata eq % Check if the type is Metadata
+ { pop pop pop pop % Type == Metadata --> no encryption
+ exit % Exit 'loop' context
+ } if
+ } if
+ % PDF 1.5 encryption (R == 4) has selectable encryption handlers. If
+ % this is not PDF 1.5 encryption (R < 4) then we are done checking and
+ % we need to decrypt the stream. stack: object object key R Encrypt
+ exch 4 lt % Check for less than PDF 1.5
+ { pop /StreamKey exch put % Insert StreamKey in dictionary
+ exit % Exit 'loop' context
+ } if
+ % Check if the stream encryption handler (StmF) == Identity.
+ /StmF knownoget % Get StmF (if present)
+ not { /Identity } if % If StmF not present default = Identity
+ /Identity eq % Check if StmF == Identity
+ { pop pop % Identity --> no encryption
+ exit % Exit 'loop' context
+ } if
+ % If we get here then we need to decrypt the stream.
+ /StreamKey exch put % Insert StreamKey into dictionary
+ exit % Exit 'loop' context, never loop
+ } loop % End of loop exitable context
+ } { % Else file is not encrypted
+ PDFfile resolveopdict .pdfrun
+ } ifelse % Ifelse encrypted
+} bind def
+
+% Prefix a decryption filter to a stream if needed.
+% Stack: readdata? dict parms file/string filternames
+% (both before and after).
+/pdf_decrypt_stream
+ { 3 index /StreamKey known % Check if the file is encrypted
+ {
+ exch
+ % Stack: readdata? dict parms filternames file/string
+ 3 index /StreamKey get arc4decodefilter
+ exch
+ } if
+ } bind def
+
+end % pdfdict
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/pdfopt.ps b/Master/tlpkg/tlgs/lib/pdfopt.ps
new file mode 100644
index 00000000000..1ed2116cbe7
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdfopt.ps
@@ -0,0 +1,1271 @@
+% Copyright (C) 2000, 2001 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdfopt.ps 8005 2007-05-26 13:13:33Z alexcher $
+% PDF linearizer ("optimizer").
+
+.currentglobal true .setglobal
+/pdfoptdict 200 dict def
+pdfoptdict begin
+
+% This linearizer is designed for simplicity, not for performance.
+% See the main program (the last procedure in the file) for comments
+% describing the main processing sequence.
+
+% ---------------- Utilities ---------------- %
+
+% ------ Data structures ------ %
+
+% Distinguish dictionaries, arrays, and everything else.
+/ifdaelse { % <obj> <dictproc> <arrayproc> <otherproc> ifdaelse -
+ 3 index type dup /dicttype eq {
+ pop pop pop
+ } {
+ dup /arraytype ne exch /packedarraytype ne and {
+ exch
+ } if pop exch pop
+ } ifelse exec
+} bind def
+
+% Implement dynamically growable arrays using a dictionary.
+/darray { % <size> darray <darray>
+ dict
+} bind def
+/dadd { % <darray> <value> dadd -
+ 1 index length exch put
+} bind def
+/daforall { % <darray> <proc> daforall -
+ /exch cvx /get cvx 3 -1 roll /exec cvx 5 packedarray cvx
+ 0 1 2 index 0 get length 1 sub 4 -1 roll for
+} bind def
+/dacontents { % <darray> dacontents <array>
+ [ exch { } daforall ]
+} bind def
+/dacontstring { % <darray> dacontstring <string>
+ 0 1 index { exch pop length add } forall string
+ dup /NullEncode filter
+ % Stack: darray str filter
+ 3 -1 roll { 1 index exch writestring } daforall
+ closefile
+} bind def
+
+% Force an object, mapping it if it is a reference.
+/omforcenew { % <obj> omforce <obj'> <notseen>
+ dup oforce 2 copy eq { pop true } { exch 0 get omapnew exch pop } ifelse
+} bind def
+/omforce { % <obj> omforce <obj'>
+ omforcenew pop
+} bind def
+/omget { % <dict|array> <key> omget <obj>
+ get omforce
+} bind def
+% Visit an entire tree.
+/omvisit { % <obj> omvisit -
+ omforcenew {
+ { { omvisit omvisit } forall }
+ { { omvisit } forall }
+ { pop }
+ ifdaelse
+ } {
+ pop
+ } ifelse
+} bind def
+% Visit a tree, stopping at references to Page objects.
+% (This is only needed for the OpenAction in the Catalog.)
+/omvisitnopage { % <obj> omvisitnopage -
+ dup oforce dup type /dicttype eq {
+ /Type .knownget { /Page eq } { false } ifelse
+ } {
+ pop false
+ } ifelse {
+ pop % Page reference
+ } {
+ omforcenew {
+ { { omvisitnopage omvisitnopage } forall }
+ { { omvisitnopage } forall }
+ { pop }
+ ifdaelse
+ } {
+ pop
+ } ifelse
+ } ifelse
+} bind def
+
+% Collect the list of currently mapped object numbers, in order.
+/omapped { % - omapped <obj#s>
+ RMap ld_length larray exch lgrowto
+ RMap {
+ 2 index 3 1 roll 1 sub exch lput
+ } ld_forall
+} bind def
+
+% Collect the list of object numbers passed to omap by a procedure.
+/visited { % <proc> visited <obj#s>
+ false currentomap 2 .execn
+ omapped exch setomap
+} bind def
+
+% ------ Output ------ %
+
+% Provide a framework for closure-based streams.
+.currentglobal false .setglobal
+userdict /clostreams 20 dict put % stream -> [data endproc]
+.setglobal
+% Create a closure-based stream.
+/clostream { % <data> <proc> <endproc> clostream <stream>
+ 2 index 3 -1 roll /exec load 3 packedarray cvx
+ /NullEncode filter
+ % Stack: data endproc stream
+ clostreams 1 index 5 -2 roll 2 array astore put
+} bind def
+% Close a closure-based stream.
+/closend { % <stream> closend <result>
+ dup closefile clostreams exch
+ 2 copy get 3 1 roll undef aload pop exec
+} bind def
+
+% Implement in-memory output streams.
+/msproc { % <data> <more> <accum> msproc <scratch>
+ 3 -1 roll dadd { 100 string } { () } ifelse
+} bind def
+/mstream { % - mstream <mstream>
+ 10 darray {msproc} {dacontstring} clostream
+} bind def
+/mcontents { % <mstream> mcontents <string>
+ closend
+} bind def
+
+% Implement a stream that only keeps track of its position.
+% (All streams should do this, but the PLRM doesn't require it.)
+/posbuf 100 string def
+/posproc { % <data> <more> <accum> posproc <scratch>
+ 0 2 copy get 5 -1 roll length add put
+ pop //posbuf
+} bind def
+/postream { % - postream <postream>
+ [0] {posproc} {0 get} clostream
+} bind def
+/poslength { % <postream> poslength <pos>
+ closend
+} bind def
+
+% Implement streams with variable-bit-width data.
+% Note that these are dictionary objects, not stream objects.
+/bitstream { % <stream> bitstream <bstream>
+ 4 dict begin /S exch def /N 8 def /B 0 def
+ currentdict end
+} bind def
+/bitwrite { % <bstream> <value> <width> bitwrite -
+ PDFOPTDEBUG { ( ) print 1 index =only (:) print dup = } if
+ 3 -1 roll begin
+ N exch sub dup 0 ge {
+ /N exch def N bitshift B add
+ } {
+ 2 copy bitshift B add S exch write
+ % Stack: value -left
+ { 8 add dup 0 ge { exit } if
+ 2 copy bitshift 255 and S exch write
+ } loop
+ /N 1 index def bitshift 255 and
+ } ifelse /B exch def
+ end
+} bind def
+/bitflush { % <bstream> bitflush -
+ begin N 8 ne { S B write /B 0 def /N 8 def } if end
+} bind def
+
+/bwn { % <value> <width> bwn -
+ 2 copy % v w v w
+ 2 exch exp ge { % v w v>=2**w
+ /bwn cvx /rangecheck signalerror
+ } if
+ bits 3 1 roll bitwrite
+} def
+
+% Capture OFile output on the temporary file, in memory, or just as a length.
+/totemp { % <proc> totemp <start> <end>
+ TFile fileposition OFile
+ /OFile TFile def 3 .execn
+ /OFile exch def
+ TFile fileposition
+} bind def
+/tomemory { % <proc> tomemory <string>
+ OFile /OFile mstream def 2 .execn
+ OFile mcontents exch /OFile exch def
+} bind def
+/tolength { % <proc> tolength <string>
+ OFile /OFile postream def 2 .execn
+ OFile poslength exch /OFile exch def
+} bind def
+
+% Copy a range of bytes from TFile to OFile.
+/copyrange { % <start> <end> copybytes -
+ TFile 2 index setfileposition
+ exch sub 1024 string exch {
+ % Stack: buf left
+ 2 copy 1 index length .min 0 exch getinterval
+ TFile exch readstring pop OFile exch writestring
+ 1 index length sub dup 0 le { exit } if
+ } loop pop pop
+} bind def
+
+% Pad with blanks to a specified position.
+/padto { % <pos> padto -
+ OFile fileposition sub
+ dup 0 lt {
+ (ERROR: file position incorrect by ) print =
+ /padto cvx /rangecheck signalerror
+ } {
+ { ( ) ows } repeat
+ } ifelse
+} bind def
+
+% ---------------- Read objects into memory ---------------- %
+
+/touch { % <object> touch -
+ {
+ { touch touch } forall
+ } {
+ dup xcheck {
+ % Executable array, must be an indirect object.
+ dup 0 get resolved? { pop pop } { oforce touch } ifelse
+ } {
+ { touch } forall
+ } ifelse
+ } {
+ pop
+ } ifdaelse
+} bind def
+
+% ---------------- Replace references with referents ---------------- %
+
+/replaceable? { % <value> replaceable? <bool>
+ dup type /integertype eq exch xcheck not and
+} bind def
+/replacement { % <obj|ref> replacement <obj'>
+ dup oforce dup replaceable? { exch } if pop
+} bind def
+
+/replacerefs { % <object> replacerefs <object>
+ {
+ dup {
+ 2 index 2 index undef
+ exch replacement exch replacement
+ 2 index 3 1 roll put
+ } forall
+ } {
+ 0 1 2 index length 1 sub {
+ 1 index exch 2 copy get replacement put
+ } for
+ } {
+ } ifdaelse
+} bind def
+
+/replaceReferences { % - replaceReferences -
+ Objects { replacerefs pop } lforall
+ % Delete replaced objects.
+ 0 1 Objects llength 1 sub {
+ Objects 1 index lget replaceable? {
+ PDFOPTDEBUG { (Deleting ) print dup = } if
+ Generations 1 index 0 lput
+ } if pop
+ } for
+} bind def
+
+% ---------------- Create new objects ---------------- %
+
+/createObjects { % [<obj>...] createObjects <firstobj#>
+ Objects llength dup
+ dup 3 index length add growPDFobjects
+ % Stack: objects objn objn
+ 3 1 roll exch {
+ Objects 2 index 3 -1 roll lput
+ Generations 1 index 1 lput
+ 1 add
+ } forall pop
+} bind def
+
+% ---------------- Propagate attributes ---------------- %
+
+/nopropattrs <<
+ % Never propagate these.
+ /Type dup /Kids dup /Count dup /Parent dup
+ % Handle Resources specially.
+ /Resources dup
+>> def
+
+% Merge Resources.
+/mergeres { % <fromdict> <todict> mergeres -
+ % Values in todict take priority over fromdict.
+ 1 index /Resources .knownget {
+ 1 index /Resources .knownget {
+ % Stack: fromdict todict fromres tores
+ exch oforce exch oforce
+ % todict's Resources may be shared, so make a copy.
+ dup length dict .copydict
+ exch {
+ % Stack: fromdict todict tores' fromkey fromvalue
+ 2 index 2 index knownoget {
+ % Stack: fromdict todict tores' fromkey fromvalue tovalue
+ exch oforce exch
+ % ProcSet is an array, other types are dictionaries.
+ dup type /dicttype eq {
+ % Dictionary, not ProcSet.
+ exch dup length 2 index length add dict .copydict .copydict
+ } {
+ % Array or packed array, ProcSet.
+ % Use dictionaries to do the merge.
+ dup length 2 index length add dict begin
+ exch { dup def } forall { dup def } forall
+ mark currentdict end { pop } forall .packtomark
+ } ifelse
+ } if
+ 2 index 3 1 roll put
+ } forall
+ } if /Resources exch put pop
+ } {
+ pop pop
+ } ifelse
+} bind def
+
+% Merge attributes other than Resources.
+/mergeattrs { % <fromdict> <todict> mergeattrs <fromdict> <todict>
+ % Values in todict take priority over fromdict.
+ 1 index {
+ % Stack: fromdict todict fromkey fromvalue
+ //nopropattrs 2 index known {
+ pop pop
+ } {
+ 2 index 2 index known { pop pop } { 2 index 3 1 roll put } ifelse
+ } ifelse
+ } forall
+} bind def
+
+% Propagate attributes to a subtree.
+/proppage { % <attrs> <subtree> proppage -
+ % We should be able to tell when we reach a leaf
+ % by finding a Type unequal to /Pages. Unfortunately,
+ % some files distributed by Adobe lack the Type key
+ % in some of the Pages nodes! Instead, we check for Kids.
+ dup /Kids knownoget {
+ % Accumulate inherited values.
+ 3 1 roll
+ % Stack: kids attrs pagesnode
+ dup length dict .copydict mergeattrs
+ dup 3 1 roll mergeres
+ exch { oforce 1 index exch proppage } forall pop
+ } {
+ % Merge inherited values into the leaf.
+ mergeattrs mergeres
+ } ifelse
+} bind def
+
+% Propagate attributes to all pages.
+/propagateAttributes { % - propagateAttributes -
+ 0 dict Trailer /Root oget /Pages oget proppage
+} bind def
+
+% ---------------- Identify document-level objects ---------------- %
+
+/identifyDocumentObjects { % - identifyDocumentObjects <obj#s>
+ {
+ Trailer /Root omget
+ dup /PageMode .knownget { omvisit } if
+ % Don't allow omvisit to trace references to Page objects.
+ dup /OpenAction .knownget { omvisitnopage } if
+ Trailer /Encrypt .knownget { omvisit } if
+ dup /Threads .knownget {
+ omforce dup //null ne { { omvisit } forall } { pop } ifelse
+ } if
+ dup /AcroForm .knownget { omvisit } if
+ pop
+ } visited
+} bind def
+
+% ---------------- Identify the objects of each page ---------------- %
+
+/identifyfont { % <fontref> identifyfont -
+ omforce {
+ exch /FontDescriptor eq {
+ omforce dup /Flags .knownget { 32 and 0 ne } { false } ifelse
+ exch {
+ exch dup dup /FontFile eq exch /FontFile2 eq or
+ exch /FontFile3 eq or 2 index and {
+ fontfiles exch dadd
+ } {
+ omvisit
+ } ifelse
+ } forall pop
+ } {
+ omvisit
+ } ifelse
+ } forall
+} bind def
+
+% Collect all the objects referenced from a page. The first object number
+% (which may not be the smallest one) is that of the page object itself.
+/identifyPageObjects { % <extra> <page#> identifyPageObjects <obj#s>
+ PDFOPTDEBUG {
+ (%Objects for page: ) print dup =
+ } if
+ pdffindpageref
+ dup 0 get 3 1 roll
+ 4 dict begin
+ /filter_params 10 darray def
+ /images 10 darray def
+ /fontfiles 10 darray def
+ {
+ omforce
+ % Stack: pageobj# extra page
+ % Visit any extra objects if applicable.
+ exch omvisit
+ % Visit Annots, if any.
+ % We don't try to defer the drawing information.
+ dup /Annots .knownget { omvisit } if
+ % Visit beads.
+ dup /B .knownget { omvisit } if
+ % Visit resources dictionaries.
+ dup /Resources .knownget {
+ omforce dup {
+ % Visit the first-level Resource dictionaries.
+ omforce pop pop
+ } forall {
+ % Visit the resources themselves.
+ % Skip Image XObjects, and FontFile streams if the
+ % FontDescriptor Flags have bit 6 set.
+ % We don't try to visit the resources in the order in which
+ % the Contents stream(s) reference(s) them.
+ exch dup /XObject eq {
+ pop oforce {
+ dup oforce /Subtype get /Image eq {
+ dup oforce /DecodeParms .knownget {
+ oforce {
+ exch /JBIG2Globals eq {
+ filter_params exch dadd
+ } {
+ pop
+ } ifelse
+ } forall
+ } if
+ images exch dadd
+ } {
+ omvisit
+ } ifelse pop
+ } forall
+ } {
+ /Font eq {
+ oforce { identifyfont pop } forall
+ } {
+ oforce omvisit
+ } ifelse
+ } ifelse
+ } forall
+ } if
+ % Visit the Contents stream(s).
+ dup /Contents .knownget { omvisit } if
+ % Visit Image XObjects. We don't try to visit them in
+ % reference order.
+ filter_params { omvisit } daforall
+ images { omvisit } daforall
+ % Visit FontFile streams. We don't try to visit them in
+ % reference order.
+ fontfiles { omvisit } daforall
+ pop
+ } visited end
+ % Stack: pageobj# obj#s_larray
+ [ 3 1 roll {
+ 2 copy eq { pop } { exch } ifelse
+ } lforall counttomark 1 roll ]
+ PDFOPTDEBUG {
+ (%Objects = ) print dup === flush
+ } if
+} bind def
+
+% Identify the objects of the first page.
+/identifyFirstPageObjects { % - identifyFirstPageObjects <obj#s>
+ Trailer /Root oget null
+ 1 index /PageMode knownoget {
+ /UseOutlines eq {
+ 1 index /Outlines knownoget { exch pop } if
+ } if
+ } if exch pop
+ 1 identifyPageObjects
+} bind def
+
+% Identify the non-shared objects of the other pages, and the shared objects.
+% Note that the page objects themselves may appear to be shared, because of
+% references from Dest entries in annotations, but they must be treated as
+% non-shared. Note also that some objects referenced on the first page may
+% also be referenced from other pages.
+/identifyOtherPageObjects { % - identifyOtherPageObjects [<pageobj#s> ...]
+ % <sharedobj#s>
+ 4 dict begin
+ /marks lstring Objects llength lgrowto def
+ % Collect objects of other pages and identify sharing.
+ [ 2 1 pdfpagecount { null exch identifyPageObjects } for ]
+ dup {
+ { marks exch 2 copy lget 1 add 254 .min lput } forall
+ } forall
+ % Mark document-level and first page objects.
+ CatalogNs { marks exch 255 lput } lforall
+ FirstPageNs { marks exch 255 lput } forall
+ % Mark the page objects themselves as non-shared.
+ dup {
+ 0 get marks exch 1 lput
+ } forall
+ % Collect the non-shared objects of each page.
+ dup
+ [ exch {
+ [ exch {
+ marks 1 index lget 1 ne { pop } if
+ } forall ]
+ } forall ]
+ % Collect the shared objects of each page.
+ exch
+ [ exch {
+ [ exch {
+ marks 1 index lget dup 1 le exch 255 eq or { pop } if
+ } forall ]
+ } forall ]
+
+ % Collect the shared objects.
+ [ 1 1 marks llength 1 sub {
+ marks 1 index lget dup 1 le exch 255 eq or { pop } if
+ } for ]
+
+ end
+} bind def
+
+% Identify objects not associated with any page.
+/identifyNonPageObjects { % - identifyNonPageObjects <obj#s>
+ 4 dict begin
+ /marks lstring Objects llength lgrowto def
+
+ LPDictN marks exch 1 lput
+ PHSN marks exch 1 lput
+ CatalogNs { marks exch 1 lput } lforall
+ FirstPageNs { marks exch 1 lput } forall
+ SharedNs { marks exch 1 lput } forall
+ OtherPageNs { { marks exch 1 lput } forall } forall
+
+ %****** PUT THESE IN A REASONABLE ORDER ******
+ /npobj larray
+ 0
+ 1 1 Objects llength 1 sub {
+ marks 1 index lget 0 eq {
+ Generations exch lget 0 ne { 1 add } if
+ } {
+ pop
+ } ifelse
+ } for
+ lgrowto def
+
+ 0
+ 1 1 Objects llength 1 sub {
+ marks 1 index lget 0 eq {
+ % i
+ Generations 1 index lget 0 ne {
+ % i
+ npobj 2 index % i nobj 0
+ 3 -1 roll % nobj 0 i
+ lput 1 add
+ } {
+ pop
+ } ifelse
+ } {
+ pop
+ } ifelse
+ } for
+ pop
+
+ npobj
+ end
+} bind def
+
+% ---------------- Assign object numbers ---------------- %
+
+% Assign object numbers to all objects that will be copied.
+% Return the first (translated) object number in the First Page xref table.
+/assignObjectNumbers { % - assignObjectNumbers -
+ OtherPageNs { { omap pop } forall } forall
+ SharedNs { omap pop } forall
+ NonPageNs { omap pop } lforall
+ % Assign object numbers for the First Page xref table last.
+ LPDictN omap % don't pop, this is the return value
+ CatalogNs { omap pop } lforall
+ FirstPageNs { omap pop } forall
+ PHSN omap pop
+} bind def
+
+% ---------------- Create the LPDict ---------------- %
+
+% Create the contents of the LPDict.
+/createLPDict { % <phsstart> <phsend> <firstpageend>
+ % <xref0start> <filelength> createLPDict -
+ LPDict
+ dup /Linearized 1 put
+ dup /L 4 -1 roll put % filelength
+ dup /T 4 -1 roll put % xref0start
+ dup /E 4 -1 roll put % firstpageend
+ dup /H 5 -2 roll 1 index sub 2 array astore put % phsstart, end-start
+ dup /O 1 pdffindpageref 0 get omap put
+ /N pdfpagecount put
+} bind def
+
+% ---------------- Adjust object positions ---------------- %
+
+/adjustObjectPositions { % <boundary> <deltabelow> <deltaabove>
+ % adjustObjectPositions -
+ % Objects fall into 4 categories: LPDict, PHS, Catalog, and others.
+ % We handle the first two as special cases.
+ XRef {
+ % Stack: bdy below above key loc
+ dup 5 index ge { 2 } { 3 } ifelse index add
+ XRef 3 1 roll ld_put
+ } ld_forall pop pop pop
+ XRef LPDictN omap HeaderLength ld_put
+ XRef PHSN omap PHSStart ld_put
+} bind def
+
+% ---------------- Write the output file ---------------- %
+
+% Write objects identified by object number.
+/writeobjn { % <obj#> writeobjn -
+ Generations 1 index lget pdfwriteobj
+} bind def
+/writeobjns { % <obj#s> writeobjns -
+ { writeobjn } forall
+} bind def
+/lwriteobjns { % <obj#s> writeobjns -
+ { writeobjn } lforall
+} bind def
+
+% Write a part of the output file.
+/writePart { % <proc> <label> writePart -
+ PDFOPTDEBUG {
+ dup print ( count=) print count =only ( start=) print
+ OFile { .fileposition } stopped { pop (???) } if =
+ 2 .execn
+ print ( end=) print
+ OFile { .fileposition } stopped { pop (???) } if =
+ } {
+ pop exec
+ } ifelse
+} bind def
+
+% Write the header.
+/writePart1 { % - writePart1 -
+ {
+ pdfwriteheader
+ } (part1) writePart
+} bind def
+
+% Write the linearization parameters dictionary.
+/writePart2 { % - writePart2 -
+ {
+ LPDictN writeobjn
+ } (part2) writePart
+} bind def
+
+% Write the First Page xref table and trailer.
+% Free variables: FirstPageXN.
+/writePart3 { % <xrefstart> writePart3 -
+ {
+ FirstPageXN NObjects 1 add 1 index sub pdfwritexref
+ Trailer dup length 1 add dict copy
+ dup /Size NObjects 1 add put
+ dup /Prev 4 -1 roll put
+ pdfwritetrailer
+ 0 pdfwritestartxref
+ } (part3) writePart
+} bind def
+
+% Write the Catalog and other required document-level objects.
+% Free variables: CatalogNs.
+/writePart4 { % - writePart4 -
+ {
+ CatalogNs lwriteobjns
+ } (part4) writePart
+} bind def
+
+% Write the Primary Hint Stream.
+/writePart5 { % - writePart5 -
+ {
+ PHSN writeobjn
+ } (part5) writePart
+} bind def
+
+% Write the First Page's objects.
+% Free variables: FirstPageNs.
+/writePart6 { % - writePart6 -
+ {
+ FirstPageNs writeobjns
+ } (part6) writePart
+} bind def
+
+% Write the objects of other pages (Page + non-shared objects).
+% Free variables: OtherPageNs.
+/writePart7 { % - writePart7 <lengths>
+ {
+ [ OtherPageNs {
+ OFile fileposition exch
+ writeobjns OFile fileposition exch sub
+ } forall ]
+ } (part7) writePart
+} bind def
+
+% Write the shared objects of other pages.
+% Free variables: SharedNs.
+/writePart8 { % - writePart8 -
+ {
+ SharedNs writeobjns
+ } (part8) writePart
+} bind def
+
+% Write the other objects not associated with pages.
+% Free variables: NonPageNs.
+/writePart9 { % - writePart9 -
+ {
+ NonPageNs { writeobjn } lforall
+ } (part9) writePart
+} bind def
+
+% Write the main xref table and trailer.
+% Free variables: FirstPageXN.
+/writePart11xref { % writePart11 -
+ {
+ 0 FirstPageXN pdfwritexref
+ } (part11xref) writePart
+} bind def
+/writePart11rest { % <part3start> writePart11rest -
+ {
+ << /Size FirstPageXN >> pdfwritetrailer
+ pdfwritestartxref
+ } (part11rest) writePart
+} bind def
+
+% ---------------- Write hint tables ---------------- %
+
+/bitsneeded { % <maxvalue> bitsneeded <#bits>
+ 0 exch { dup 0 eq { pop exit } if exch 1 add exch 2 idiv } loop
+} bind def
+
+% Find the start and end of objects in the output.
+/omstart { % <obj#> omstart <pos>
+ PDFOPTDEBUG { (start\() print dup =only } if
+ omap
+ PDFOPTDEBUG { (=>) print dup =only } if
+ XRef exch ld_get
+ PDFOPTDEBUG { (\) = ) print dup = } if
+} bind def
+/omend { % <obj#> omend <pos>
+ % The end of an object is the start of the next object.
+ % The caller must be sure that this object is not the last one
+ % in part 9.
+ PDFOPTDEBUG { (end\() print dup =only } if
+ omap
+ PDFOPTDEBUG { (=>) print dup =only } if
+ 1 add
+ % Check that the requested object wasn't the last one in part 6:
+ % the next object in the output file is the first in part 7.
+ PHSN omap 1 index eq { pop 1 } if
+ XRef exch ld_get
+ PDFOPTDEBUG { (\) = ) print dup = } if
+} bind def
+/omlength { % <obj#> omlength <length>
+ dup omend exch omstart sub
+} bind def
+
+% Find the Contents of a page.
+/contentsobjects { % <pagedict> contentsobjects <firstobj#> <lastobj#> true
+ % <pagedict> contentsobjects false
+ /Contents .knownget {
+ dup oforce % ref []
+ dup type /dicttype eq {
+ pop 0 get dup true % ref ref
+ } {
+ exch pop % []
+ dup length 0 ne {
+ dup 0 get 0 get % [] 1st
+ exch dup % 1st [] []
+ length 1 sub get 0 get % 1st last
+ true
+ } {
+ pop false
+ } ifelse
+ } ifelse
+ } {
+ false
+ } ifelse
+} bind def
+
+/contentsstart { % <pagedict> contentsstart <pos> true
+ % <pagedict> contentsstart false
+ contentsobjects { pop omstart true } { false } ifelse
+} bind def
+
+/contentslength { % <pagedict> contentslength <length>
+ contentsobjects { omend exch omstart sub } { 0 } ifelse
+} bind def
+
+
+/writePageOffsetHints {
+ PDFOPTDEBUG { /writePageOffsetHints == } if
+ 20 dict begin
+ /bits OFile bitstream def
+
+ % Calculate least length of a page.
+ FirstPageLength OtherPageLengths { .min } forall
+ /minpl exch def
+
+ % Calculate least contents length.
+ FirstPageNs 0 get Objects exch lget contentslength
+ OtherPageNs { 0 get Objects exch lget contentslength .min } forall
+ /mincl exch def
+
+ % The Adobe documentation says that all versions of Acrobat
+ % require item 8 (mincl) to be zero. Patch this here.
+ /mincl 0 def
+
+ % Calculate bits needed to represent greatest page length.
+ FirstPageLength OtherPageLengths { .max } forall
+ minpl sub bitsneeded /maxplbits exch def
+ % Calculate bits needed to represent the greatest Contents length.
+ FirstPageNs 0 get Objects exch lget contentslength
+ OtherPageNs { 0 get Objects exch lget contentslength .max } forall
+ mincl sub bitsneeded /maxclbits exch def
+
+ % Per Adobe documentation, Acrobat requires that item 5 (maxplbits)
+ % be equal to item 9 (maxclbits). Set both to the max of the two.
+ maxplbits maxclbits .max /maxplbits 1 index def /maxclbits exch def
+
+ % Mapping from object number to shared object reference
+ /shared_id_dict FirstPageNs length SharedNs length add dict begin
+ 0 FirstPageNs { 1 index def 1 add } forall
+ SharedNs { 1 index def 1 add } forall
+ pop
+ currentdict end def
+
+ % Table F.3 Page offset hint table, header section
+
+ % 1: Least number of objects in a page:
+ FirstPageNs length OtherPageNs { length .min } forall
+ /minnop 1 index def 32 bwn
+ % 2: Location of first page's Page object:
+ FirstPageNs 0 get omap XRef exch ld_get 32 bwn
+ % 3: Bits needed to represent greatest # of objects in a page:
+ FirstPageNs length OtherPageNs { length .max } forall
+ minnop sub bitsneeded /maxnopbits 1 index def 16 bwn
+ % 4: Least length of a page:
+ minpl 32 bwn
+ % 5: Bits needed to represent the greatest page length:
+ maxplbits 16 bwn
+ % 6: Least start of Contents offset:
+ 0 % (Acrobat requires that this be 0.)
+ /minsco 1 index def 32 bwn
+ % 7: Bits needed to represent the greatest start of Contents
+ % offset:
+ 0 % (Acrobat ignores this.)
+ /maxscobits 1 index def 16 bwn
+ % 8: Least contents length:
+ mincl 32 bwn
+ % 9: Bits needed to represent the greatest Contents length:
+ maxclbits 16 bwn
+ % 10: Bits needed to represent the greatest number of Shared
+ % Object references:
+ FirstPageNs length SharedPageNs { length .max } forall bitsneeded
+ /maxsorbits 1 index def 16 bwn
+ % 11: Bits needed to identify a Shared Object:
+ FirstPageNs length SharedNs length add bitsneeded
+ /sobits 1 index def 16 bwn
+ % 12: Bits needed to represent numerator of fraction:
+ 2
+ /numfbits 1 index def 16 bwn
+ % 13: Denominator of fraction:
+ 1
+ /denf 1 index def 16 bwn
+
+ % Table F.4 Page offset hint table, per-page entry
+
+ % 1: Number of objects in pages:
+ FirstPageNs length minnop sub maxnopbits bwn
+ OtherPageNs {
+ length minnop sub maxnopbits bwn
+ } forall
+ bits bitflush
+
+ % 2: Total length of pages in bytes;
+ FirstPageLength minpl sub maxplbits bwn
+ OtherPageLengths {
+ minpl sub maxplbits bwn
+ } forall
+ bits bitflush
+
+ % 3: Number of shared objects referenced from page:
+ FirstPageNs length maxsorbits bwn
+ SharedPageNs { length maxsorbits bwn } forall
+ bits bitflush
+ % 4: A shared object identifier:
+ FirstPageNs { shared_id_dict exch get sobits bwn } forall
+ SharedPageNs {
+ { shared_id_dict exch get sobits bwn
+ } forall
+ } forall
+ bits bitflush
+
+ % 5: Numerator of fractional position for each shared object:
+ FirstPageNs { pop 0 numfbits bwn } forall
+ SharedPageNs {
+ { pop 0 numfbits bwn
+ } forall
+ } forall
+ bits bitflush
+
+ % 6: Contents offsets:
+ % Following Implementation Note 133 section 6 is empty.
+ maxscobits 0 gt {
+ [FirstPageNs OtherPageNs aload pop] {
+ 0 get Objects exch lget contentsstart { minsco sub } { 0 } ifelse
+ maxscobits bwn
+ } forall
+ bits bitflush
+ } if
+
+ % 7: Contents lengths:
+ [FirstPageNs OtherPageNs aload pop] {
+ 0 get Objects exch lget contentslength mincl sub maxclbits bwn
+ } forall
+ bits bitflush
+
+ end
+
+} bind def
+
+/writeSharedObjectHints {
+ PDFOPTDEBUG { /writeSharedObjectHints == } if
+ 20 dict begin
+ /bits OFile bitstream def
+ /obj_count SharedNs length FirstPageNs length add def
+
+ % Table F.5 Shared object hint table, header section
+
+ % 1: Object number of first object in Shared Objects section
+ 0 32 bwn
+ % 2: Location of first object in Shared Objects section:
+ % If there are no shared objects,
+ % Acrobat sets this to the location of linearization
+ % parameters object (the very first object).
+ { pdfwriteheader } tomemory length 32 bwn
+ % 3: Number of Shared Object entries for first page:
+ FirstPageNs length 32 bwn
+ % 4: Number of Shared Object entries for Shared Objects
+ % section
+ obj_count 32 bwn
+ % 5: Bits needed to represent the greatest number of objects
+ % in a shared object group (always 0, because all groups
+ % have only 1 object):
+ 0 16 bwn
+ % 6: Least length of a Shared Object Group in bytes:
+ 16#7fffffff FirstPageNs { omlength .min } forall
+ SharedNs { omlength .min } forall
+ /minsol 1 index def 32 bwn
+ % 7: Bits needed to represent the greatest length of a
+ % Shared Object Group:
+ 0 FirstPageNs { omlength .max } forall
+ SharedNs { omlength .max } forall
+ minsol sub bitsneeded
+ /maxsolbits 1 index def 16 bwn
+
+ % Table F.6 Shared object hint table, shared object group entry
+
+ % 1: Lengths of shared object groups:
+ FirstPageNs { omlength minsol sub maxsolbits bwn } forall
+ SharedNs { omlength minsol sub maxsolbits bwn } forall
+ bits bitflush
+ % 2: MD5 flag:
+ obj_count { 0 1 bwn } repeat
+ bits bitflush
+ % 3: No MD5 shared object signatures.
+
+ % 4: No number_number_of_objects_in_the_group - 1
+ end
+} bind def
+
+% ---------------- Main program ---------------- %
+
+/pdfOptimize { % <infile> <outfile> pdfOptimize -
+ realtime 3 1 roll
+ exch pdfdict begin pdfopenfile dup begin
+ 40 dict begin
+ /IDict exch def
+ /OFile exch def
+ /starttime exch def
+ /ToWrite 100 dict def
+ /now {
+ QUIET { pop } { print (, t = ) print realtime starttime sub = flush } ifelse
+ } def
+ omapinit
+
+ % Create and open a temporary file.
+ % Because of .setsafe, we have to open it as read-write, rather than
+ % opening for writing, then closing it and reopening it for reading.
+
+ null (w+) .tempfile /TFile exch def /TFileName exch def
+ .setsafe
+
+ % Read all objects into memory.
+
+ Trailer touch
+ (Read objects) now
+
+ % Encrypted files are not yet supported.
+ Trailer /Encrypt known {
+ (ERROR: Encrypted files are not yet supported.) = flush
+ /pdfOptimize cvx /limitcheck signalerror
+ } if
+
+ % Replace indirect references to numbers. This is needed
+ % for the Length of streams, and doesn't hurt anything else.
+
+ replaceReferences
+ (Replaced references) now
+
+ % Create the two new objects: the linearization parameter
+ % dictionary, and the Primary Hint Stream.
+
+ /LPDict 10 dict def
+ /PHS 10 dict cvx def % executable = stream
+ [LPDict PHS] createObjects
+ /LPDictN 1 index def 1 add
+ /PHSN exch def
+ PDFOPTDEBUG { << /LPDictN LPDictN /PHSN PHSN >> === } if
+
+ % Count the number of objects in the output.
+
+ 0 0 1 Objects llength 1 sub {
+ Generations exch lget 0 ne { 1 add } if
+ } for
+ /NObjects exch def
+ QUIET not { NObjects =only ( objects total) = flush } if
+
+ % Propagate inherited attributes down the page tree.
+
+ propagateAttributes
+ (Propagated attributes) now
+
+ % Identify the document-level objects (part 4).
+
+ identifyDocumentObjects /CatalogNs exch def
+ QUIET not { CatalogNs === flush } if
+ (Identified Catalog) now
+
+ % Identify the first page's objects (part 6),
+ % including the Outlines tree if appropriate.
+
+ pdfopencache
+ /FirstPageNs identifyFirstPageObjects def
+ QUIET not { FirstPageNs === flush } if
+ (Identified first page) now
+
+ % Identify shared vs. non-shared objects for remaining pages
+ % (parts 7 and 8).
+
+ identifyOtherPageObjects
+ /SharedNs exch def
+ /SharedPageNs exch def
+ /OtherPageNs exch def
+ QUIET not { OtherPageNs === flush SharedNs === flush } if
+ (Identified other pages) now
+
+ % Identify objects not associated with any page (part 9).
+
+ /NonPageNs identifyNonPageObjects def
+ QUIET not { NonPageNs { === } forall flush } if
+ (Identified non-pages) now
+
+ % Assign final object numbers to all the objects.
+ % (The omap is currently empty.)
+
+ /FirstPageXN assignObjectNumbers def
+ (Assigned objects #s) now
+
+ % Write the document-level objects (part 4).
+
+ { writePart4 } totemp
+ /CatalogTempEnd exch def /CatalogTempStart exch def
+ (Wrote Catalog) now
+
+ % Write the first page's objects (part 6).
+
+ { writePart6 } totemp
+ /FirstPageTempEnd exch def /FirstPageTempStart exch def
+ (Wrote first page) now
+
+ % Write the non-shared objects for other pages (part 7).
+
+ { writePart7 /OtherPageLengths exch def } totemp
+ /OtherPageTempEnd exch def /OtherPageTempStart exch def
+ (Wrote other pages) now
+
+ % Write the shared objects for other pages (part 8).
+
+ { writePart8 } totemp
+ /SharedTempEnd exch def /SharedTempStart exch def
+ (Wrote shared objects) now
+
+ % Write the objects not associated with pages (part 9).
+
+ { writePart9 } totemp
+ /NonPageTempEnd exch def /NonPageTempStart exch def
+
+ % Compute conservative lengths of parts 2,3,5,11 of the output.
+ % It's OK for these to be too large, but not too small.
+
+ % Make dummy XRef entres for LPDict and PHS.
+ XRef LPDictN omap 0 ld_put
+ XRef PHSN omap 0 ld_put
+
+ /HeaderLength { % this is exact
+ writePart1 % part 1
+ } tolength def
+ /CatalogLength % this is exact
+ CatalogTempEnd CatalogTempStart sub def % part 4
+ /FirstPageLength % this is exact
+ FirstPageTempEnd FirstPageTempStart sub def % part 6
+ /OtherObjectsLength % this is exact
+ NonPageTempEnd OtherPageTempStart sub def % parts 7,8,9
+ /ObjectsLength % this is exact
+ CatalogLength FirstPageLength add OtherObjectsLength add def
+ /XrefLength { % part 11
+ % The LPDict must end within the first 1024 bytes,
+ % so the start of the FirstPage xref table can't exceed 1024.
+ writePart11xref 1024 writePart11rest
+ } tolength def
+ /NominalFileLength % Make a generous allowance for parts 2,3,5.
+ HeaderLength ObjectsLength 3 mul add 10000 add 99999 .max def
+ /FirstPageXrefLength { % part 3
+ NominalFileLength writePart3
+ } tolength def
+ /LPDictLength { % part 2
+ NominalFileLength dup 2 mul 2 copy add 1 index dup createLPDict writePart2
+ } tolength def
+
+ % Compute a few additional values from the above.
+
+ /XrefBeginLength {
+ (xref\n0 ) ows
+ OFile FirstPageXN write=
+ } tolength def
+ HeaderLength LPDictLength add
+ /FirstPageXrefStart 1 index def
+ FirstPageXrefLength add
+ /CatalogStart 1 index def
+ CatalogLength add % phsstart
+ /PHSStart exch def
+
+ % Adjust the object positions ignoring PHS.
+ % (Writing the PHS needs these.)
+
+ 0 0 CatalogStart CatalogTempStart sub adjustObjectPositions
+ % Make a temporary XRef entry for the PHS, for the benefit of omend.
+ XRef PHSN omap CatalogStart ld_put
+ (Adjusted positions) now
+
+ % Construct the hint tables (part 5).
+
+ { writePageOffsetHints } totemp
+ pop /PHSTempStart exch def
+ { writeSharedObjectHints } totemp
+ exch PHSTempStart sub PHS /S 3 -1 roll put
+ PHSTempStart sub /PHSTempLength exch def
+ (Wrote hints) now
+
+ % Prepare to read TFile.
+% TFile closefile
+% /TFile TFileName (r) file def
+
+ PHS
+ dup /File TFile put
+ dup /FilePosition PHSTempStart put
+ dup /Length PHSTempLength put
+ pop
+ /PHSLength { writePart5 } tolength def
+
+ % Construct the linearization parameter dictionary (part 2).
+
+ PHSStart
+ dup PHSLength add % phsend
+ /FirstPageStart 1 index def
+ dup FirstPageLength add % firstpageend
+ dup OtherObjectsLength add
+ /XrefStart 1 index def
+ XrefBeginLength add % xref0start
+ dup XrefBeginLength sub XrefLength add % fileend
+ % Because of a bug, Acrobat Reader doesn't recognize any file
+ % shorter than 1K as linearized. Patch this here.
+ 1024 .max
+ /FileLength 1 index def
+ createLPDict
+
+ % Adjust the object positions again, taking the PHS into account.
+
+ PHSStart 0 PHSLength adjustObjectPositions
+ (Readjusted positions) now
+
+ % Finally, write the output file.
+
+ writePart1
+ writePart2
+ FirstPageXrefStart padto
+ XrefStart writePart3
+ CatalogStart padto
+ CatalogTempStart CatalogTempEnd copyrange % part 4
+ writePart5
+ FirstPageStart padto
+ FirstPageTempStart NonPageTempEnd copyrange % parts 6,7,8,9
+ % No Overflow Hint Stream (part 10).
+ XrefStart padto
+ writePart11xref
+ { FirstPageXrefStart writePart11rest } tomemory
+ FileLength 1 index length sub padto ows
+ (Wrote output file) now
+
+ % Wrap up.
+
+ TFile closefile TFileName deletefile
+ end % temporary dict
+ end % IDict
+} bind def
+
+end % pdfoptdict
+.setglobal
+
+% Check for command line arguments.
+[ shellarguments {
+ ] dup length 2 eq {
+ % Load the pdfwrite utilities if necessary.
+ /omapinit where { pop } { (pdfwrite.ps) runlibfile } ifelse
+ save exch
+ aload pop exch (r) file exch (w) file
+ 3000000 setvmthreshold
+ 0 setobjectformat
+ pdfoptdict begin pdfOptimize end
+ restore
+ } {
+ (Usage: gs -dNODISPLAY -- pdfopt.ps input.pdf output.pdf) = flush quit
+ } ifelse
+} {
+ pop
+} ifelse
diff --git a/Master/tlpkg/tlgs/lib/pdfwrite.ps b/Master/tlpkg/tlgs/lib/pdfwrite.ps
new file mode 100644
index 00000000000..f1b380adbfc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pdfwrite.ps
@@ -0,0 +1,384 @@
+% Copyright (C) 1999, 2000, 2001 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pdfwrite.ps 8120 2007-07-13 01:10:56Z alexcher $
+% Writer for transmuting PDF files.
+
+% NOTES:
+% We do editing by replacing objects (in the cache) and then doing a
+% simple recursive walk with object renumbering.
+% Free variables:
+% RMap [per input file] (dict): input_obj# => output_obj#
+% PDFfile (file): current input file
+% OFile (file): current output file
+% XRef (dict): output_obj# => output_file_pos
+% ToWrite: 0..N-1 => [obj# gen#]
+
+/.setlanguagelevel where { pop 2 .setlanguagelevel } if
+.currentglobal true .setglobal
+
+/PDFWRDEBUG where { pop } { /PDFWRDEBUG false def } ifelse
+
+% ======== Long dictionary support =============== %
+
+% The key must be a non-negative iteger.
+
+/ld_dict { % <len> ld_dict <ldict>
+ pop << 0 <<>> >>
+} bind def
+
+/ld_length { % <ldict> ld_length <length>
+ 0 exch { exch pop length add } forall
+} bind def
+
+/ld_get { % <ldict> <key> ld_get <any>
+ dup 3 1 roll -15 bitshift get exch get
+} bind def
+
+/ld_put { % <ldict> <key> <any> ld_put -
+ 3 1 roll dup % any ldict key key
+ 4 1 roll -15 bitshift % key any ldict key>>15
+ 2 copy known {
+ get % key any subdict
+ 3 1 roll put % -
+ } {
+ 64 dict dup 6 1 roll % <<>> key any ldict key>>15 <<>>
+ put put
+ } ifelse % -
+} bind def
+
+/ld_known { % <ldict> <key> ld_known <bool>
+ dup 3 1 roll -15 bitshift % key <<>> key<<15
+ 2 copy known {
+ get exch known
+ } {
+ pop pop pop //false
+ } ifelse
+} bind def
+
+/ld_knownget { % <ldict> <key> ld_known false | <any> true
+ dup 3 1 roll -15 bitshift % key <<>> key<<15
+ 2 copy known {
+ get exch .knownget
+ } {
+ pop pop pop //false
+ } ifelse
+} bind def
+
+/ld_def { % <key> <any> ld_def -
+ currentdict 3 1 roll ld_put
+} bind def
+
+/ld_forall { % <ldict> <proc} ld_forall -
+ { forall exch pop } aload pop
+ 4 2 roll 4 packedarray cvx forall
+} bind def
+
+/ld_clone { % <ldict> ld_clone <ldict copy>
+ << exch { dup length dict copy } forall >>
+} bind def
+
+% ================ Object mapping ================ %
+
+% Initialize the object number and location map.
+/omapinit { % - omapinit -
+ /RMap 100 ld_dict def
+ /XRef 100 ld_dict def
+ PDFWRDEBUG { (omapinit) = } if
+} bind def
+
+% Map an object number.
+/omapnew { % <oldobj#> omap <newobj#> <isnew>
+ RMap 1 index ld_knownget {
+ exch pop //false
+ } {
+ PDFWRDEBUG { (omap\() print dup =only } if
+ RMap dup ld_length 1 add % old# <<>> len+1
+ 2 index exch dup % old# <<>> old# len+1 len+1
+ 5 1 roll % len+1 old# <<>> old# len+1
+ ld_put pop //true % len+1 true
+ PDFWRDEBUG { (\) = ) print 1 index = } if
+ } ifelse
+} bind def
+/omap { % <oldobj#> omap <newobj#>
+ omapnew pop
+} bind def
+
+% Save and restore the object map.
+% Note that currentomap either returns a copy or calls omapinit.
+/currentomap { % <copy> currentomap <omap>
+ {
+ [RMap ld_clone XRef ld_clone]
+ } {
+ [RMap XRef] omapinit
+ } ifelse
+} bind def
+/setomap { % <omap> setomap -
+ aload pop /XRef exch def /RMap exch def
+ PDFWRDEBUG {
+ (setomap: #Xref = ) print XRef ld_length =only
+ (, #RMap = ) print RMap ld_length =
+ } if
+} bind def
+
+% ================ Writing ================ %
+
+% ---------------- Low-level output ---------------- %
+
+% Write a string on the output file.
+/ows { % <string> ows -
+ OFile exch writestring
+} bind def
+
+% ---------------- Scalars ---------------- %
+
+% Note that the '#' character isn't legal in a name unless it is a prefix
+% for a hex encoded character (for PDF 1.2 and later). The following assumes
+% that the names are already valid PDF 1.2+ names so that we can treat the
+% '#' as a legal character. The next two hex characters are already in the
+% set of valid name characters. PDF 1.1 and earlier allowed spaces in names
+% which probably wouldn't make it past the tokenizer anyway.
+/pdfnamechars
+ (!"#$&'*+,-.0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\\^_`abcdefghijklmnopqrstuvwxyz|~)
+readonly def
+/pdfwritename { % <name> pdfwritename -
+ (/) ows .namestring {
+ ( ) dup 0 4 -1 roll put
+ //pdfnamechars 1 index search {
+ pop pop pop
+ } {
+ pop 0 get 256 add 16 =string cvrs
+ dup 0 (#) 0 get put
+ } ifelse ows
+ } forall
+} bind def
+
+% ---------------- Composite objects ---------------- %
+
+/pdfwriteprocs mark
+ /resolveR { pdfwriteref }
+ /O { pdfwritenewref }
+.dicttomark readonly def
+/pdfwritearray { % <array> pdfwritearray -
+ dup xcheck {
+ aload pop //pdfwriteprocs exch get exec
+ } {
+ % Because of a bug in Acrobat's parser for linearization parameters,
+ % we have to include some whitespace after the opening [ (!).
+ ([ ) ows { pdfwritevalue (\n) ows } forall (]) ows
+ } ifelse
+} bind def
+
+/pdfwritedict { % <dict> pdfwritedict -
+ dup xcheck {
+ pdfwritestream
+ } {
+ (<<) ows {
+ exch pdfwritevalue ( ) ows pdfwritevalue (\n) ows
+ } forall (>>) ows
+ } ifelse
+} bind def
+
+% ---------------- References ---------------- %
+
+/pdfwritenewref { % <newobj#> pdfwritenewref -
+ OFile exch write=only ( 0 R) ows
+} bind def
+
+/pdfwriteref { % <obj#> <gen#> pdfwriteref -
+ 1 index omapnew {
+ ToWrite dup length 5 -2 roll 2 packedarray put
+ } {
+ exch pop exch pop
+ } ifelse
+ pdfwritenewref
+} bind def
+
+/pdfcopystring 200 string def
+/pdfwritestream { % <streamdict> pdfwritestream -
+ % Remove File, FilePosition, and StreamKey;
+ % optimize by replacing an indirect Length.
+ dup dup length dict copy
+ % Stack: origdict dict
+ dup /File undef dup /FilePosition undef dup /StreamKey undef
+ dup /Length known {
+ dup /Length get dup oforce ne {
+ dup /Length 2 copy oget put
+ } if
+ } {
+ 1 index /File get dup
+ 3 index /FilePosition get setfileposition
+ dup 0 (endstream) /SubFileDecode filter flushfile
+ .fileposition 9 sub
+ 2 index /FilePosition get sub
+ 1 index exch /Length exch put
+ } ifelse
+ exch dup /File get dup 3 -1 roll /FilePosition get setfileposition
+ pdfcopystream
+} bind def
+
+% We put copying the stream contents in separate procedures so that we
+% can replace this function if desired.
+/pdfcopybytes { % <fromfile> <tofile> <length> pdfcopybytes -
+ {
+ dup 0 eq { exit } if
+ //pdfcopystring 0 2 index 2 index length .min getinterval
+ 3 index exch readstring 3 1 roll
+ 3 index 1 index writestring length sub exch not { exit } if
+ } loop pop pop pop
+} bind def
+/pdfcopystream { % <newstreamdict> <file> pdfcopystream -
+ % (file has been positioned)
+ 1 index pdfwritevalue (stream\n) ows
+ exch /Length get OFile exch pdfcopybytes
+ (endstream) ows
+} bind def
+
+% ---------------- General values/objects ---------------- %
+
+/pdfwritetypes mark
+ % Scalars
+ /nulltype { pop (null) ows } bind
+ /integertype { =string cvs ows } bind
+ /booleantype 1 index
+ /realtype {
+ =string cvs
+ (e) search { % PDF has no exponential format
+ exch pop % exp pre
+ exch cvi exch
+ (-) anchorsearch { ows } if
+ (.) search {
+ exch pop % exp (frac) (int)
+ 1 index length % exp (frac) (int) len
+ 3 1 roll % exp len (frac) (int)
+ exch concatstrings % exp len (int_frac)
+ 3 1 roll sub % (int_frac) exp-len
+ exch % exp-len (int_frac)
+ } if % exp (mant)
+ 1 index 0 ge {
+ ows { (0) ows } repeat (.) ows
+ } {
+ dup length % exp (mant) len
+ 3 -1 roll add % (mant) exp+len
+ dup 0 le {
+ (0.) ows neg { (0) ows } repeat ows
+ } {
+ 2 copy 0 exch getinterval ows
+ (.) ows
+ 1 index length 1 index sub getinterval ows
+ } ifelse
+ } ifelse
+ } {
+ ows
+ } ifelse
+ } bind
+ /stringtype { OFile exch write===only } bind
+ /nametype { pdfwritename } bind
+ % Composite/reference objects
+ /arraytype { pdfwritearray } bind
+ /packedarraytype 1 index
+ /dicttype { pdfwritedict } bind
+.dicttomark readonly def
+
+/pdfwritevalue { % <obj> pdfwritevalue -
+ PDFWRDEBUG { (****Writing: ) print dup === flush } if
+ //pdfwritetypes 1 index type get exec
+} bind def
+
+% We make pdfwriteobjdef a separate procedure for external use.
+/pdfwriteobjheader { % <newobj#> pdfwriteobjheader -
+ XRef 1 index OFile .fileposition ld_put
+ PDFWRDEBUG { (XRef\() print dup =only (\) = ) print XRef 1 index ld_get = } if
+ OFile exch write=only ( 0 obj\n) ows
+} bind def
+/pdfwriteobjdef { % <newobj#> <value> pdfwriteobjdef -
+ exch pdfwriteobjheader
+ pdfwritevalue (\nendobj\n) ows
+} bind def
+/pdfwriteobj { % <obj#> <gen#> pdfwriteobj -
+ 1 index exch resolveR exch omap exch pdfwriteobjdef
+} bind def
+
+% ---------------- File-level entities ---------------- %
+
+% Write a PDF file header.
+% Free variables: OFile, PDFversion.
+/pdfwriteheader { % - pdfwriteheader -
+ (%PDF-) ows OFile PDFversion write=
+ (%\347\363\317\323\n) ows
+} bind def
+
+% Write a cross-reference table and trailer.
+/pdfwritexref { % <firstobj#> <#objs> pdfwritexref -
+ (xref\n) ows
+ OFile 2 index write=only ( ) ows OFile 1 index write=
+ 1 index add 1 sub 1 exch {
+ dup 0 eq {
+ pop (0000000000 65535 f \n) ows
+ } {
+ XRef exch ld_get 1000000000 add =string cvs
+ dup 0 (0) 0 get put
+ ows ( 00000 n \n) ows
+ } ifelse
+ } for
+} bind def
+/pdfwritetrailer { % <trailer> pdfwritetrailer -
+ (trailer\n) ows pdfwritevalue (\n) ows
+} bind def
+/pdfwritestartxref { % <startpos> pdfwritestartxref -
+ (startxref\n) ows OFile exch write=
+ (%%EOF\n) ows
+} bind def
+
+% ================ Top-level control ================ %
+
+/pdfwrite { % <file> <trailer> pdfwrite -
+ 10 dict begin
+ /trailer exch def
+ /OFile exch def
+ /ToWrite 100 dict def
+ omapinit
+
+ % Write the PDF file header.
+
+ pdfwriteheader
+
+ % Write the objects.
+
+ trailer {
+ exch pop dup xcheck { % The only executable objects are references.
+ aload pop pop pdfwriteobj
+ } {
+ pop
+ } ifelse
+ } forall
+ % Walk the object graph.
+ {
+ ToWrite dup length dup 0 eq { pop pop exit } if
+ 1 sub 2 copy get 3 1 roll undef aload pop pdfwriteobj
+ } loop
+
+ % Write the xref table and trailer.
+
+ /xref OFile fileposition def
+ 0 XRef ld_length 1 add pdfwritexref
+ trailer dup length 1 add dict copy
+ dup /Size XRef ld_length 1 add put pdfwritetrailer
+ xref pdfwritestartxref
+
+ end
+} bind def
+
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/pf2afm.ps b/Master/tlpkg/tlgs/lib/pf2afm.ps
new file mode 100644
index 00000000000..0d1f5fe6ac5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pf2afm.ps
@@ -0,0 +1,515 @@
+%!
+% This is a PostScript program for making an AFM file from
+% PFB / PFA and (optionally) PFM files.
+%
+% Written in BOP s.c., Gda\'nsk, Poland
+% e-mail contact: B.Jackowski@GUST.ORG.PL
+% version 0.5 (18 XII 1997)
+% version 0.55 (11 III 1998) -- unlimited number of chars in a font
+% version 1.00 (27 III 1998) -- scanning PFM subdirectory added,
+% code improved; version sent to LPD
+% version 1.01 (1 II 2000) -- message changed
+
+% Usage:
+% gs [-dNODISPLAY] -- pf2afm.ps disk_font_name
+%
+% The result is written to the file disk_font_name.afm, provided such
+% a file does not exist; otherwise program quits.
+%
+% The font can be either *.pfa or *.pfb; if no extension is supplied,
+% first disk_font_name.pfb is examined, then disk_font_name.pfa.
+% Moreover, if there is a *.pfm file in the same directory or in the
+% subdirectory PFM, i.e., disk_font_name.pfm or PFM/disk_font_name.pfm,
+% kern pairs from it are extracted, as well as additional font
+% parameters, usually absent from Type 1 fonts.
+
+% Tribute:
+% $Id: pf2afm.ps 6300 2005-12-28 19:56:24Z giles $
+% The program is based on James Clark's <jjc@jclark.uucp> printafm.ps
+% (with alterations by d.love@dl.ac.uk and L. Peter Deutsch) from
+% Ghostscript 5.10 distribution.
+
+/onechar 1 string def
+/edef {exch def} def
+/WinAnsiEncoding dup /Encoding findresource def
+
+% charnumber print-charname -
+% prints the name of the encoded character
+/print-charname {
+ PFMCharSet 0 eq {
+ WinAnsiEncoding
+ } {
+ PFBencoding
+ } ifelse
+ exch get =string cvs dup
+ (.notdef) eq {
+ /was.notdef true def
+ } if
+ print.to.ofi ( ) print.to.ofi
+} def
+
+/printquit {print flush quit} def
+
+% redirecting GS output to ``ofi'' file
+/eolch (\r\n) def
+/=only.to.ofi {ofi exch write=only} def % replaces GS's `=only'
+/print.to.ofi {ofi exch writestring} def % replaces `print'
+/=to.ofi { =only.to.ofi eolch print.to.ofi } def % replaces `='
+
+% read and skip: byte, short, word, double and long
+/readb-p {currPFMfile read not {(Unexpected EOF\n) printquit} if} def
+/readw-p {readb-p readb-p 256 mul add} def
+/reads-p {readw-p dup 32768 ge {65536 sub} if} def
+/readd-p {readb-p readb-p readb-p readb-p 256 mul add 256 mul add 256 mul add} def
+/readl-p /readd-p load def % double word is, in fact, long integer in GS
+/skipb-p {readb-p pop} def
+/skipw-p {skipb-p skipb-p} def
+/skips-p /skipw-p load def
+/skipd-p {skipb-p skipb-p skipb-p skipb-p} def
+/skipl-p /skipd-p load def
+/skipa-p { {skipb-p} repeat} def
+
+% PFMfile readPFMheader -
+% defines currPFMfile, PFMExtMetricOffset, PFMPairKernTableOffset
+
+/readPFMheader {
+ currPFMfile bytesavailable
+ % ---------------
+ % PFM MAIN HEADER
+ % ---------------
+ skipw-p % PFM: version
+ readd-p % PFM: size (size is dword, not word as the documentation says)
+ ne {(Wrong file size\n) printquit} if
+ 60 skipa-p % PFM: copyright
+ skipw-p % PFM: Type
+ skipw-p % PFM: Points
+ skipw-p % PFM: VertRes
+ skipw-p % PFM: HorizRes
+ skipw-p % PFM: Ascent
+ skipw-p % PFM: InternalLeading
+ skipw-p % PFM: ExternalLeading
+ skipb-p % PFM: Italic
+ skipb-p % PFM: Underline
+ skipb-p % PFM: Stikeout
+ skipw-p % PFM: Weight
+ readb-p % PFM: CharSet
+ /PFMCharSet edef
+ skipw-p % PFM: PixWidth
+ skipw-p % PFM: PixHeight
+ skipb-p % PFM: PitchAndFamily
+ skipw-p % PFM: AvgWidth
+ skipw-p % PFM: MaxWidth
+ skipb-p % PFM: FirstChar
+ skipb-p % PFM: LastChar
+ skipb-p % PFM: DefaultChar
+ skipb-p % PFM: BreakChar
+ skipw-p % PFM: WidthBytes
+ skipd-p % PFM: Device
+ skipd-p % PFM: Face
+ skipd-p % PFM: BitsPointer
+ skipd-p % PFM: BitsOffset
+ % here we assume that it is a PostScript font, i.e., it always uses
+ % the extended width table, therefore the normal width table is empty
+ % -------------
+ % PFM EXTENSION
+ % -------------
+ skipw-p % PFMEX: SizeFields
+ readd-p % PFMEX: ExtMetricOffset
+ /PFMExtMetricOffset edef
+ skipd-p % PFMEX: ExtentTable
+ skipd-p % PFMEX: OriginTable
+ readd-p % PFMEX: PairKernTable
+ /PFMPairKernTableOffset edef
+ skipd-p % PFMEX: TrackKernTable
+ skipd-p % PFMEX: DriverInfo
+ skipd-p % PFMEX: Reserved
+} def
+
+% requires that currPFMfile, PFMExtMetricOffset are defined
+% readPFMExtMetric -
+% defines PFMNumberofKernPairs
+
+/readPFMExtMetric {
+ currPFMfile PFMExtMetricOffset setfileposition
+ skips-p % EXTT: Size
+ skips-p % EXTT: PointSize
+ skips-p % EXTT: Orientation
+ skips-p % EXTT: MasterHeight
+ skips-p % EXTT: MinScale
+ skips-p % EXTT: MaxScale
+ skips-p % EXTT: MasterUnit
+ reads-p % EXTT: CapHeight
+ /PFMCapHeight edef
+ reads-p % EXTT: XHeight
+ /PFMXHeight edef
+ reads-p % EXTT: LowerCaseAscent
+ /PFMLowerCaseAscent edef
+ reads-p % EXTT: LowerCaseDescent
+ neg /PFMLowerCaseDescent edef
+ skips-p % EXTT: Slant
+ skips-p % EXTT: SuperScript
+ skips-p % EXTT: SubScript
+ skips-p % EXTT: SuperScriptSize
+ skips-p % EXTT: SubScriptSize
+ skips-p % EXTT: UnderlineOffset
+ skips-p % EXTT: UnderlineWidth
+ skips-p % EXTT: DoubleUpperUnderlineOffset
+ skips-p % EXTT: DoubleLowerUnderlineOffset
+ skips-p % EXTT: DoubleUpperUnderlineWidth
+ skips-p % EXTT: DoubleLowerUnderlineWidth
+ skips-p % EXTT: StrikeOutOffset
+ skips-p % EXTT: StrikeOutWidth
+ readw-p % EXTT: KernPairs
+ /PFMNumberofKernPairs edef
+ skipw-p % EXTT: KernTracks
+} def
+
+% requires that currPFMfile, PFMPairKernTableOffset, PFMNumberofKernPairs are defined
+% readPFMExtMetric -
+% prints kern pairs table in the AFM format
+
+/readPFMKernPairs {
+ currPFMfile () ne {
+ PFMdict begin
+ PFMPairKernTableOffset 0 ne {
+ currPFMfile PFMPairKernTableOffset setfileposition
+ readw-p % undocumented kern count (although all remaining structures are
+ % explicitly preceded by their sizes); if it were a stable
+ % feature, EXTTEXTMETRICS could be skipped
+ PFMNumberofKernPairs
+% 2 copy = =
+ ne {
+ (Inconsistent number of kern pairs\n) printquit
+ } if
+ (StartKernData) =to.ofi
+ (StartKernPairs ) print.to.ofi
+ PFMNumberofKernPairs =to.ofi
+ % ---------
+ % MAIN LOOP
+ % ---------
+ /was.notdef false def
+ PFMNumberofKernPairs {
+ (KPX ) print.to.ofi
+ readb-p % first char
+ print-charname
+ readb-p % second char
+ print-charname
+ reads-p % kern amount
+ =to.ofi
+ } repeat
+ was.notdef {
+ (.notdef character ocurred among kern pairs) =
+ (you'd better check the resulting AFM file.) =
+ } if
+ (EndKernPairs) =to.ofi
+ (EndKernData) =to.ofi
+ } if
+ end
+ } if
+} def
+
+% alias (for ``compatibility'' with J. Clark):
+/printkernpairs /readPFMKernPairs load def
+
+% printcharmetrics -
+
+/printcharmetrics {
+ (StartCharMetrics ) print.to.ofi
+ /PFBencoding currfont /Encoding get dup length array copy def
+ /PFBcharstrings currfont /CharStrings get def
+ PFBcharstrings length
+ PFBcharstrings /.notdef known { 1 sub } if =to.ofi
+ currfont 1000 scalefont setfont
+ % checking Encoding array and CharStrings dictionary for
+ % the consistency of names
+ /was.inconsitent false def
+ 0 1 255 {
+ dup PFBencoding exch get
+ PFBcharstrings exch known {
+ pop
+ }{
+% dup PFBencoding exch get =
+ PFBencoding exch /.notdef put % fix Encoding array
+ /was.inconsitent true def
+ } ifelse
+ } for
+ was.inconsitent {
+ (Encoding array contains name(s) absent from CharStrings dictionary) =
+ } if
+ % print metric data for each character in PFB encoding vector
+ 0 1 255 {
+ dup PFBencoding exch get
+ dup /.notdef ne {
+ exch dup printmetric
+ }{
+ pop pop
+ } ifelse
+ } for
+ % xPFBencoding contains an entry for each name in the original
+ % encoding vector
+ /xPFBencoding PFBcharstrings length dict def
+ PFBencoding {
+ xPFBencoding exch true put
+ } forall
+
+ /fontiter 0 def
+ /TMPFontTemplate (TMP_FONT#000) def
+ {
+ % NewPFBencoding is the new encoding vector
+ /NewPFBencoding 256 array def
+ 0 1 255 {
+ NewPFBencoding exch /.notdef put
+ } for
+ % fill up NewPFBencoding with names from CharStrings dictionary that
+ % are not encoded so far
+ /i 0 def
+ PFBcharstrings {
+ pop
+ i 255 le {
+ dup xPFBencoding exch known not {
+ dup xPFBencoding exch true put
+ NewPFBencoding i 3 -1 roll put
+ /i i 1 add def
+ }{
+ pop
+ } ifelse
+ }{
+ pop exit
+ } ifelse
+ } forall
+ i 0 eq {exit} if
+ % define a new font with NewPFBencoding as its encoding vector
+ currfont maxlength dict /NewTMPfont edef
+ currfont {
+ exch dup dup /FID ne exch /Encoding ne and {
+ exch NewTMPfont 3 1 roll put
+ }{
+ pop pop
+ } ifelse
+ } forall
+ % compute a unique name for a font to be registered
+ /fontiter fontiter 1 add def
+ TMPFontTemplate fontiter (000) cvs
+ dup length TMPFontTemplate length exch sub exch putinterval
+ /TMPFontName TMPFontTemplate cvn def
+ NewTMPfont /FontName TMPFontName put
+ NewTMPfont /Encoding NewPFBencoding put
+ % make this new font the current font
+ TMPFontName NewTMPfont definefont 1000 scalefont setfont
+ % print metric data for each character in the newly created encoding vector
+ 0 1 255 {
+ dup NewPFBencoding exch get
+ dup /.notdef ne {
+ exch -1 printmetric
+ }{
+ pop pop exit
+ } ifelse
+ } for
+ i 255 lt {exit} if
+ } loop
+ (EndCharMetrics) =to.ofi
+} def
+
+% name actual_code normal_code printmetric -
+
+/printmetric {
+ (C ) print.to.ofi =only.to.ofi
+ ( ; WX ) print.to.ofi
+ onechar 0 3 -1 roll put
+ onechar stringwidth pop round cvi =only.to.ofi
+ ( ; N ) print.to.ofi =only.to.ofi
+ ( ; B ) print.to.ofi
+ newpath 0 0 moveto
+ onechar false charpath flattenpath pathbbox
+ newpath
+ round cvi /ury edef round cvi /urx edef
+ round cvi /lly edef round cvi /llx edef
+ ury lly eq {/ury 0 def /lly 0 def} if % normalize degenrated BB
+ urx llx eq {/urx 0 def /llx 0 def} if %
+ llx =only.to.ofi ( ) print.to.ofi lly =only.to.ofi ( ) print.to.ofi
+ urx =only.to.ofi ( ) print.to.ofi ury =only.to.ofi ( ) print.to.ofi
+ (;) =to.ofi
+} def
+
+/printinfoitem {
+ 3 1 roll 2 copy known {
+ get dup type /stringtype ne { =string cvs } if exch
+ print.to.ofi ( ) print.to.ofi =to.ofi
+ }{
+ pop pop pop
+ } ifelse
+} def
+
+/printfontinfo {
+ (Comment AFM Generated by Ghostscript/pf2afm) =to.ofi
+ currfont /FontName (FontName) printinfoitem
+ %
+ currfont /FontInfo get
+ dup /FullName (FullName) printinfoitem
+ dup /FamilyName (FamilyName) printinfoitem
+ dup /Weight (Weight) printinfoitem
+ dup /Notice (Notice) printinfoitem
+ dup /ItalicAngle (ItalicAngle) printinfoitem
+ dup /isFixedPitch (IsFixedPitch) printinfoitem
+ dup /UnderlinePosition (UnderlinePosition) printinfoitem
+ dup /UnderlineThickness (UnderlineThickness) printinfoitem
+ /version (Version) printinfoitem
+ %
+ (EncodingScheme FontSpecific) =to.ofi
+ %
+ (FontBBox) print.to.ofi
+ currfont /FontBBox get {
+ ( ) print.to.ofi round cvi =only.to.ofi
+ } forall
+ eolch print.to.ofi
+ %
+ currPFMfile () ne {
+ PFMdict
+ dup /PFMCapHeight (CapHeight) printinfoitem
+ dup /PFMXHeight (XHeight) printinfoitem
+ dup /PFMLowerCaseDescent (Descender) printinfoitem
+ /PFMLowerCaseAscent (Ascender) printinfoitem
+ } if
+} def
+
+/readPFBfile {
+ % make a shot of the actual font directory:
+ /oldFontDirectory FontDirectory dup length dict copy def
+ isPFB {% defined in `makeafm'
+ (r) file true /PFBDecode filter cvx % true is better (see gs_type1.ps)
+ mark exch exec
+ }{
+ (r) file mark exch run
+ } ifelse
+ cleartomark
+ % make a shot of the updated font directory:
+ /newFontDirectory FontDirectory dup length dict copy def
+ % spot the added font:
+ oldFontDirectory {pop newFontDirectory exch undef} forall
+ newFontDirectory length 1 ne {
+ newFontDirectory length =
+ (Weird PFB file?\n) printquit
+ } if
+ newFontDirectory {pop} forall
+ findfont /currfont edef
+} def
+
+/readPFMfile {
+ dup () ne {
+ (r) file /currPFMfile edef
+ 10 dict dup /PFMdict edef begin
+ readPFMheader
+ readPFMExtMetric
+ end
+ }{
+ pop /currPFMfile () def
+ } ifelse
+} def
+
+% pfmfilename pf[ba]filename filetype printafm -
+% where filetype=(a) or (b)
+
+/printafm {
+ readPFBfile
+ readPFMfile
+ (StartFontMetrics 2.0) =to.ofi
+ printfontinfo
+ printcharmetrics
+ printkernpairs
+ (EndFontMetrics) =to.ofi
+} def
+
+% pf[ba]filename makeafm -
+
+/makeafm {
+ count 0 eq {(Missing font file name\n) printquit} if
+ /ifn edef
+ ifn length 0 eq {(Empty font file name\n) printquit} if
+% the following piece of the code does, in fact, the job of a system shell,
+% i.e., it analyses the supplied names, appends extensions if needed,
+% and check files:
+ /pfbn () def /pfan () def /pfmn () def % initialisation
+ ifn (.pfb) search {
+ 3 -1 roll length 0 eq {% file name extension = ".pfb"
+ ifn dup length string copy /pfbn edef
+ /ifn edef
+ }{pop} ifelse
+ } if pop
+ ifn (.pfa) search {
+ 3 -1 roll length 0 eq {% file name extension = ".pfa"
+ ifn dup length string copy /pfan edef
+ /ifn edef
+ }{pop} ifelse
+ } if pop
+ pfbn () eq pfan () eq and dup {% no extension was supplied, try ".pfb"
+ /pfbn ifn (.pfb) concatstrings def
+ } if
+ pfbn () ne {% check whether "filename.pfb" exists
+ pfbn status {pop pop pop pop /isPFB true def}{/pfbn () def} ifelse
+ } if
+ pfbn () eq and {% checking "filename.pfb" unsuccessful, try ".pfa"
+ /pfan ifn (.pfa) concatstrings def
+ } if
+ pfan () ne {% check whether "filename.pfa" exists
+ pfan status {pop pop pop pop /isPFB false def}{/pfan () def} ifelse
+ } if
+
+ pfbn () eq pfan () eq and {
+ (Neither pfa nor pfb found\n) printquit
+ } if
+
+ /ofn ifn (.afm) concatstrings def
+ ofn status {
+ pop pop pop pop (Resulting file exists\n) printquit
+ } if
+ /ofi ofn (w) file def
+
+ /pfmn ifn (.pfm) concatstrings def
+ pfmn status {
+ pop pop pop pop
+ }{
+ () pfmn {
+ (/) search {
+ 4 -1 roll exch concatstrings exch concatstrings exch
+ }{
+ exit
+ } ifelse
+ } loop
+ (pfm/) exch concatstrings concatstrings
+ dup status {
+ pop pop pop pop /pfmn edef
+ }{
+ pop /pfmn () def (pfm file not found -- ignored\n) print
+ } ifelse
+ } ifelse
+ //systemdict /.setsafe known {
+ <<
+ /PermitFileReading
+ [ pfmn dup length 0 eq { pop } if
+ isPFB {pfbn}{pfan} ifelse
+ ]
+ /PermitFileWriting [ ]
+ /PermitFileControl [ ]
+ >> setuserparams
+ .locksafe
+ } if
+
+
+ pfmn
+ isPFB {pfbn}{pfan} ifelse
+ printafm
+
+} def
+
+% Check for command line arguments.
+[ shellarguments
+ { ] dup length 1 eq {
+ 0 get makeafm
+ }{
+ (This is PF2AFM -- AFM generator \(ver. 1.00\)\n) print
+ (Usage: gs [-dNODISPLAY] -- pf2afm.ps disk_font_name\n) printquit
+ } ifelse
+ }
+ {pop}
+ifelse
+
diff --git a/Master/tlpkg/tlgs/lib/pfbtopfa.ps b/Master/tlpkg/tlgs/lib/pfbtopfa.ps
new file mode 100644
index 00000000000..0a5caaa0f5c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pfbtopfa.ps
@@ -0,0 +1,34 @@
+% Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pfbtopfa.ps 6300 2005-12-28 19:56:24Z giles $
+% pfbtopfa.ps
+% Convert a .pfb font to .pfa format.
+
+[ shellarguments {
+ counttomark 2 eq {
+ /pfa exch def /pfb exch def pop
+ /in1 pfb (r) file def
+ /in in1 true /PFBDecode filter def
+ /out pfa (w) file def
+ { in read not { exit } if out exch write } loop
+ out closefile in closefile in1 closefile
+ quit
+ } {
+ cleartomark (Usage: pfbtopfa input.pfb output.pfa) = flush
+ } ifelse
+} {
+ pop
+} ifelse
diff --git a/Master/tlpkg/tlgs/lib/ppath.ps b/Master/tlpkg/tlgs/lib/ppath.ps
new file mode 100644
index 00000000000..d621c1531c7
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/ppath.ps
@@ -0,0 +1,54 @@
+% Copyright (C) 1989, 1995, 1997 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: ppath.ps 6300 2005-12-28 19:56:24Z giles $
+% Redefine pathforall for tracing.
+% Can't be used recursively.
+
+/# {( )print} def
+
+/-mat matrix def
+/-imat matrix def
+/-smat { //-mat currentmatrix pop //-imat setmatrix } bind def
+/-rmat { //-mat setmatrix } bind def
+/-pathforall /pathforall load def
+/-p2 { ( ) print exch =only ( ) print =only } bind def
+/-dp2 { 2 copy -p2 2 { exch 4096 mul dup cvi dup ( ) print =only sub dup 0 eq { pop } { (+) print =only } ifelse } repeat } bind def
+/-tp2 { //-mat itransform -p2 } bind def
+/-dict 5 dict def
+
+/pathforall
+ { -dict begin
+ /-close exch def /-curve exch def /-line exch def /-move exch def
+ end -smat -mat ==only ( setmatrix) =
+ {2 copy -tp2 ( moveto\t%)print
+ 2 copy -dp2 (\n)print
+ flush -dict /-move get -rmat exec -smat}
+ {2 copy -tp2 ( lineto\t%)print
+ 2 copy -dp2 (\n)print
+ flush -dict /-line get -rmat exec -smat}
+ {5 index 5 index -tp2 3 index 3 index -tp2 2 copy -tp2 ( curveto\t%)print
+ 5 index 5 index -dp2 3 index 3 index -dp2 2 copy -dp2 (\n)print
+ flush -dict /-curve get -rmat exec -smat}
+ {(closepath\n)print flush -dict /-close get -rmat exec -smat}
+ -pathforall -rmat
+ }
+def
+
+% Just print the current path
+
+/printpath {
+ {pop pop} {pop pop} {pop pop pop pop pop pop} {} pathforall
+} def
diff --git a/Master/tlpkg/tlgs/lib/pphs.ps b/Master/tlpkg/tlgs/lib/pphs.ps
new file mode 100644
index 00000000000..2d97c224ff1
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/pphs.ps
@@ -0,0 +1,221 @@
+% Copyright (C) 2001 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: pphs.ps 6300 2005-12-28 19:56:24Z giles $
+% Print Linearized PDF hint streams
+
+% Utilities
+/read1 { % <file> read1 <value>
+ read not {
+ (**** Unexpected EOF) = flush quit
+ } if
+} bind def
+/read2 { % <file> read2 <value>
+ dup read1 8 bitshift exch read1 add
+} bind def
+/read4 { % <file> read4 <value>
+ dup read2 16 bitshift exch read2 add
+} bind def
+% Free variables: Bits, Bitsleft
+/readninit { % - <readninit> -
+ /Bits 0 def
+ /Bitsleft 0 def
+} bind def
+
+/pdftoken { % <file> pdftoken <token>
+ dup token pop
+ dup type /nametype eq 1 index xcheck and {
+ dup dup (<<) cvn eq exch ([) eq or {
+ exec exch {
+ dup pdftoken dup dup (>>) cvn eq exch (]) eq or {
+ exch pop exec exit
+ } if exch
+ } loop
+ } {
+ exch pop
+ } ifelse
+ } {
+ exch pop
+ } ifelse
+} bind def
+/makemask { % <nbits> makemask <mask>
+ 1 exch bitshift 1 sub
+} bind def
+/readn { % <file> <nbits> readn <value>
+ dup Bitsleft le {
+ exch pop
+ /Bitsleft Bitsleft 2 index sub def
+ makemask Bits Bitsleft neg bitshift and
+ } {
+ Bitsleft makemask Bits and
+ exch Bitsleft sub exch 1 index bitshift 3 1 roll
+ /Bits 2 index read1 def /Bitsleft 8 def
+ readn add
+ } ifelse
+} bind def
+/sread { % <string> sread <file>
+ 0 () /SubFileDecode filter
+} bind def
+
+/ptag { % <pre-tag> <proc> <post-tag> ptag -
+ 3 -1 roll print (: ) print
+ exch exec
+ ( % ) print =
+} bind def
+
+% Print the linearization parameters dictionary.
+/plpkeys <<
+ /E (end of p. 1 objects)
+ /L (total file length)
+ /H (PHS start + length)
+ /N (# of pages)
+ /O (p. 1 object #)
+ /T (offset of first main xref entry)
+>> def
+/plpdict { % <dict> plpdict -
+ (<<) = plpkeys {
+ 2 index 2 index .knownget {
+ % Stack: dict key label value
+ ( ) print 3 -1 roll ===only ( ) print ===only
+ ( % ) print =
+ } {
+ pop pop
+ } ifelse
+ } forall {
+ plpkeys 2 index known {
+ pop pop
+ } {
+ ( ) print exch ===only ( ) print ===
+ } ifelse
+ } forall (>>) =
+} bind def
+
+% Print the Page Offset Hint Table.
+/ppoht { % <npages> <file> ppoht -
+
+ 20 dict begin
+ /f exch def
+ /npages exch def
+ readninit
+
+ (1) { f read4 =only } (least # objs/page) ptag
+ (2) { f read4 =only } (offset of p. 1 object (+PHS length if beyond PHS)) ptag
+ (3) { f read2 dup =only /nb3 exch def } (# bits for # objs/page delta) ptag
+ (4) { f read4 =only } (least # bytes/page) ptag
+ (5) { f read2 dup =only /nb5 exch def } (# bits for # bytes/page delta) ptag
+ (6) { f read4 =only } (least content stream offset-in-page) ptag
+ (7) { f read2 dup =only /nb7 exch def } (# bits for content stream offset delta) ptag
+ (8) { f read4 =only } (least content stream length) ptag
+ (9) { f read2 dup =only /nb9 exch def } (# bits for content stream length delta) ptag
+ (10) { f read2 dup =only /nb10 exch def } (# bits for # of shared obj refs) ptag
+ (11) { f read2 dup =only /nb11 exch def } (# bits for shared obj indices) ptag
+ (12) { f read2 dup =only /nb12 exch def } (# bits for shared obj ref pos numerators) ptag
+ (13) { f read2 =only } (shared obj ref pos denominator) ptag
+
+ (*1) { [ npages { f nb3 readn } repeat ] ==only } (# objs/page deltas (see 1,3)) ptag
+ (*2) { [ npages { f nb5 readn } repeat ] ==only } (# bytes/page deltas (see 4,5)) ptag
+ (*3) { [ npages { f nb10 readn } repeat ] dup ==only /nso exch def } (# of shared obj refs (see 10)) ptag
+ (*4) { [ nso { [ exch { f nb11 readn } repeat ] } forall ] ==only } (shared obj indices (see 11)) ptag
+ (*5) { [ nso { [ exch { f nb12 readn } repeat ] } forall ] ==only } (shared obj ref pos numerators (see 12)) ptag
+ (*6) { [ npages { f nb7 readn } repeat ] ==only } (content stream offset-in-page deltas (see 6,7)) ptag
+ (*7) { [ npages { f nb9 readn } repeat ] ==only } (content stream length deltas (see 8,9)) ptag
+
+ end % temp dict
+
+} bind def
+
+% Print the Shared Objects Hint Table.
+/psoht { % <file> psoht -
+
+ 20 dict begin
+ /f exch def
+ readninit
+
+ (1) { f read4 =only } (first shared obj #) ptag
+ (2) { f read4 =only } (first shared obj offset (+PHS length if beyond PHS)) ptag
+ (3) { f read4 dup =only /n3 exch def } (# of p. 1 shared objs) ptag
+ (4) { f read4 dup =only /n4 exch def } (total # of shared objs) ptag
+ (5) { f read2 dup =only /nb5 exch def } (# bits for # of shared objs/group) ptag
+ (6) { f read4 =only } (least shared obj group length) ptag
+ (7) { f read2 dup =only /nb7 exch def } (# bits for shared obj group length delta) ptag
+
+ /nse n4 def
+ (*1) { [ nse { f nb7 readn } repeat ] ==only } (shared obj group length deltas (see 6,7)) ptag
+ (*2) { [ nse { f 1 readn } repeat ] dup ==only /md5s exch def } (MD5 present?) ptag
+ (*3:) = md5s {
+ 0 ne {
+ ( ) print f 16 string readstring pop
+ (%stdout) (w) file dup 3 -1 roll writehexstring closefile () =
+ } if
+ } forall
+ (*4) { [ nse { f nb5 readn } repeat ] ==only } (# objs/group (see 5)) ptag
+
+ end % temp dict
+
+} bind def
+
+% Print the Primary Hint Stream of a PDF file.
+/pphs { % <file> pphs -
+ /pdf exch def
+
+ % Read the linearization parameter dictionary.
+ { pdf pdftoken /obj eq { exit } if } loop
+ pdf pdftoken /lpdict exch def
+ /lpdict type /dicttype eq { lpdict /Linearized known } { false } ifelse {
+ (Not a linearized PDF file.) = stop
+ } if
+
+ lpdict plpdict flush
+
+ % Read the primary hint stream.
+ null {
+ pdf pdftoken dup /stream eq { pop exit } if
+ exch pop
+ } loop
+ /phsdict exch def
+ % Remove Length if indirect reference.
+ phsdict 0 known {
+ phsdict 0 undef phsdict /Length undef
+ } if
+ (PHS: ) print phsdict === flush
+ pdf 0 (endstream) /SubFileDecode filter
+ dup 64000 string readstring pop exch closefile
+ sread /phsdata exch def
+
+ % Decode the hint stream data if necessary.
+ phsdict /Filter .knownget {
+ phsdata exch filter
+ dup 5000 string readstring pop exch closefile
+ sread /phsdata exch def
+ } if
+
+ % Adobe says we can assume /P = 0.
+ (Page Offset Hint Table:) =
+ lpdict /N get
+ phsdata phsdict /S get string readstring pop sread
+ ppoht
+ (Shared Objects Hint Table:) =
+ phsdata psoht
+} bind def
+
+% Check for command line arguments.
+[ shellarguments
+ { ] dup length 1 eq
+ { 0 get (r) file dup pphs closefile }
+ { (Usage: pphs filename.pdf\n) print flush }
+ ifelse
+ }
+ { pop }
+ifelse
diff --git a/Master/tlpkg/tlgs/lib/prfont.ps b/Master/tlpkg/tlgs/lib/prfont.ps
new file mode 100644
index 00000000000..3afefca1f7d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/prfont.ps
@@ -0,0 +1,248 @@
+%!
+%%Creator: Eric Gisin <egisin@waterloo.csnet>
+%%Title: Print font catalog
+% Copyright (c) 1986 Eric Gisin
+% Copyright (C) 1992 Aladdin Enterprises, Menlo Park, CA
+% Modified to print all 256 encoded characters.
+% Copyright (C) 1993 Aladdin Enterprises, Menlo Park, CA
+% Modified to print unencoded characters.
+% Copyright (C) 1994 Aladdin Enterprises, Menlo Park, CA
+% Modified to always create 256-element Encoding vectors.
+% Copyright (C) 1995 Aladdin Enterprises, Menlo Park, CA
+% Modified to print more than 128 unencoded characters.
+% Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA
+% Modified to leave a slightly wider left margin, because many H-P
+% printers can't print in the leftmost 1/4" of the page.
+% Modified to print unencoded characters in any font that has CharStrings.
+% Copyright (C) 1999 Aladdin Enterprises, Menlo Park, CA
+% Modified to sort unencoded characters.
+% Copyright (C) 2000 Aladdin Enterprises, Menlo Park, CA
+% Modified to print CIDFonts as well as fonts.
+% O(N^2) sorting replaced with O(N log N).
+% Copyright transferred 2000/09/15 to Artifex Software, Inc. Send any questions to
+% bug-gs@ghostscript.com.
+
+% $Id: prfont.ps 8022 2007-06-05 22:23:38Z giles $
+
+% Example usages at bottom of file
+
+/#copies 1 def
+/min { 2 copy gt { exch } if pop } bind def
+
+/T6 /Times-Roman findfont 6 scalefont def
+/Temp 64 string def
+/Inch {72 mul} def
+/Base 16 def % char code output base
+/TempEncoding [ 256 { /.notdef } repeat ] def
+
+% Sort an array. Code used by permission of the author, Aladdin Enterprises.
+/sort { % <array> <lt-proc> sort <array>
+ % Heapsort (algorithm 5.2.3H, Knuth vol. 2, p. 146),
+ % modified for 0-origin indexing. */
+ 10 dict begin
+ /LT exch def
+ /recs exch def
+ /N recs length def
+ N 1 gt {
+ /l N 2 idiv def
+ /r N 1 sub def {
+ l 0 gt {
+ /l l 1 sub def
+ /R recs l get def
+ } {
+ /R recs r get def
+ recs r recs 0 get put
+ /r r 1 sub def
+ r 0 eq { recs 0 R put exit } if
+ } ifelse
+ /j l def {
+ /i j def
+ /j j dup add 1 add def
+ j r lt {
+ recs j get recs j 1 add get LT { /j j 1 add def } if
+ } if
+ j r gt { recs i R put exit } if
+ R recs j get LT not { recs i R put exit } if
+ recs i recs j get put
+ } loop
+ } loop
+ } if recs end
+} def
+
+% do single character of page
+% output to rectangle ll=(0,-24) ur=(36,24)
+/DoGlyph { % C, N, W set
+
+ % print code name, width and char name
+ T6 setfont
+ N /.notdef ne {0 -20 moveto N Temp cvs show} if
+ 0 -12 moveto C Base Temp cvrs show ( ) show
+ W 0.0005 add Temp cvs 0 5 getinterval show
+
+ % print char with reference lines
+ N /.notdef ne {
+ 3 0 translate
+ 0 0 moveto F24 setfont N glyphshow
+ /W W 24 mul def
+ 0 -6 moveto 0 24 lineto
+ W -6 moveto W 24 lineto
+ -3 0 moveto W 3 add 0 lineto
+ 0 setlinewidth stroke
+ } if
+} def
+/DoChar {
+ /C exch def
+ /N F /Encoding get C get def
+ /S (_) dup 0 C put def
+ /W F setfont S stringwidth pop def
+ DoGlyph
+} def
+/CIDTemp 20 string def
+/DoCID {
+ /N exch def
+ /C N def
+ /W F setfont gsave
+ matrix currentmatrix nulldevice setmatrix
+ 0 0 moveto N glyphshow currentpoint pop
+ grestore def
+ DoGlyph
+} def
+
+% print page title
+/DoTitle {
+ /Times-Roman findfont 18 scalefont setfont
+ 36 10.5 Inch moveto FName Temp cvs show ( ) show ((24 point)) show
+} def
+
+% print one block of characters
+/DoBlock { % firstcode lastcode
+ /FirstCode 2 index def
+ 1 exch {
+ /I exch def
+ /Xn I FirstCode sub 16 mod def /Yn I FirstCode sub 16 idiv def
+ gsave
+ Xn 35 mul 24 add Yn -56 mul 9.5 Inch add translate
+ I DoCode
+ grestore
+ } for
+} def
+
+% print a line of character
+/DoCharLine { % firstcode lastcode
+ 1 exch { (_) dup 0 3 index put show pop } for
+} def
+/DoCIDLine { % firstcode lastcode
+ 1 exch { glyphshow } for
+} def
+
+% initialize variables
+/InitDoFont { % fontname font
+ /F exch def % font
+ /FName exch def % font name
+ /F24 F 24 scalefont def
+ /Line0 96 string def
+ /Line1 96 string def
+ /Namestring1 128 string def
+ /Namestring2 128 string def
+} def
+
+% print pages of unencoded characters
+/DoUnencoded { % glyphs
+ /Unencoded exch def
+ /Count Unencoded length def
+
+ % Print the unencoded characters in blocks of 128.
+
+ 0 128 Unencoded length 1 sub
+ { /BlockStart 1 index def
+ dup 128 add Unencoded length .min 1 index sub
+ Unencoded 3 1 roll getinterval TempEncoding copy
+ /BlockEncoding exch def
+ /BlockCount BlockEncoding length def
+ save
+ F /Encoding known {
+ F length dict F
+ { 1 index /FID eq { pop pop } { 2 index 3 1 roll put } ifelse }
+ forall dup /Encoding TempEncoding put
+ /* exch definefont
+ /F exch def
+ /F24 F 24 scalefont def
+ /BlockStart 0 def
+ } if
+
+ DoTitle (, unencoded characters) show
+ BlockStart dup BlockCount 1 sub add DoBlock
+ F 10 scalefont setfont
+ 36 2.4 Inch moveto
+ 0 32 BlockCount 1 sub {
+ 0 -0.4 Inch rmoveto gsave
+ dup 31 add BlockCount 1 sub .min
+ exch BlockStart add exch BlockStart add DoLine
+ grestore
+ } for
+ showpage
+ restore
+ } for
+
+} def
+
+% print font sample pages
+/DoFont {
+ dup findfont InitDoFont
+ /DoCode {DoChar} def
+ /DoLine {DoCharLine} def
+
+ % Display the first 128 encoded characters.
+
+ DoTitle (, characters 0-127) show
+ 0 127 DoBlock
+ F 10 scalefont setfont
+ 36 2.0 Inch moveto 0 31 DoLine
+ 36 1.6 Inch moveto 32 63 DoLine
+ 36 1.2 Inch moveto 64 95 DoLine
+ 36 0.8 Inch moveto 96 127 DoLine
+ showpage
+
+ % Display the second 128 encoded characters.
+
+ DoTitle (, characters 128-255) show
+ 128 255 DoBlock
+ F 10 scalefont setfont
+ 36 2.0 Inch moveto 128 159 DoLine
+ 36 1.6 Inch moveto 160 191 DoLine
+ 36 1.2 Inch moveto 192 223 DoLine
+ 36 0.8 Inch moveto 224 255 DoLine
+ showpage
+
+ F /CharStrings known
+ {
+ % Find and display the unencoded characters.
+
+ /Encoded F /Encoding get length dict def
+ F /Encoding get { true Encoded 3 1 roll put } forall
+ [ F /CharStrings get
+ { pop dup Encoded exch known { pop } if }
+ forall ] {
+ exch Namestring1 cvs exch Namestring2 cvs lt
+ } sort DoUnencoded
+
+ }
+ if
+
+} def
+
+% print CIDFont sample pages
+/DoCIDFont {
+ dup /CIDFont findresource InitDoFont
+ /DoCode {DoCID} def
+ /DoLine {DoCIDLine} def
+
+ [ 0 1 F /CIDCount get 1 sub { } for ] DoUnencoded
+} def
+
+% Do font samples
+% /Times-Roman DoFont % Test (less than a minute)
+% /Hershey-Gothic-English DoFont % Test (8 minutes)
+
+% Do a complete catalog
+% FontDirectory {pop DoFont} forall % All fonts (quite a long time)
diff --git a/Master/tlpkg/tlgs/lib/printafm.ps b/Master/tlpkg/tlgs/lib/printafm.ps
new file mode 100644
index 00000000000..66ac708b8cc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/printafm.ps
@@ -0,0 +1,165 @@
+%!
+% written by James Clark <jjc@jclark.uucp>
+% print an afm file on the standard output
+% usage is `fontname printafm' eg `/Times-Roman printafm'
+
+% From the `dvitops' distribution, which included this notice:
+% dvitops is not copyrighted; you can do with it exactly as you please.
+% I would, however, ask that if you make improvements or modifications,
+% you ask me before distributing them to others.
+
+% Altered by d.love@dl.ac.uk to produce input for Rokicki's afm2tfm,
+% which groks the format of the Adobe AFMs.
+
+% $Id: printafm.ps 6677 2006-03-22 18:10:43Z giles $
+% Modified by L. Peter Deutsch 9/14/93:
+% uses Ghostscript's =only procedure to replace 'buf cvs print'.
+% Modified by L. Peter Deutsch 9/6/95:
+% uses Ghostscript's shellarguments facility to accept the font name
+% on the command line.
+
+% Altered my master@iaas.msu.ru to work with fonts of more than 256 glyphs
+% and avoid FSType output
+
+/onechar 1 string def
+
+% c toupper - c
+/toupper {
+ dup dup 8#141 ge exch 8#172 le and {
+ 8#40 sub
+ } if
+} bind def
+
+% print unencoded character metric data lines for glyphs in `v' array
+% and reset `v' -
+/printv {
+ % define a new font with v as its encoding vector
+ currentfont maxlength dict /f exch def
+ currentfont {
+ exch dup dup /FID ne exch /Encoding ne and {
+ exch f 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+ } forall
+ f /Encoding v put
+ f /FontName /temp put
+ % make this new font the current font
+ /temp f definefont setfont
+ % print a entry for each character not in old vector
+ /e currentfont /Encoding get def
+ 0 1 255 {
+ dup e exch get
+ dup dup /.notdef ne exch s exch known not and {
+ exch -1 printmetric
+ } {
+ pop pop
+ } ifelse
+ } for
+ 0 1 255 {
+ v exch /.notdef put
+ } for
+} bind def
+
+% printcharmetrics -
+
+/printcharmetrics {
+ (StartCharMetrics ) print
+ currentfont /CharStrings get dup length exch /.notdef known { 1 sub } if =
+ currentfont 1000 scalefont setfont 0 0 moveto
+ /e currentfont /Encoding get def
+ 0 1 255 {
+ dup e exch get
+ dup /.notdef ne {
+ exch dup printmetric
+ } {
+ pop pop
+ } ifelse
+ } for
+ % s contains an entry for each name in the original encoding vector
+ /s 256 dict def
+ e {
+ s exch true put
+ } forall
+ % v is the new encoding vector
+ /v 256 array def
+ 0 1 255 {
+ v exch /.notdef put
+ } for
+ % fill up v with names in CharStrings
+ /i 0 def
+ currentfont /CharStrings get {
+ pop
+ i 255 le {
+ v i 3 -1 roll put
+ /i i 1 add def
+ } {
+ printv
+ v 0 3 -1 roll put
+ /i 1 def
+ } ifelse
+ } forall
+ printv
+ (EndCharMetrics) =
+} bind def
+
+% name actual_code normal_code printmetric -
+
+/printmetric {
+ /saved save def
+ (C ) print =only
+ ( ; WX ) print
+ onechar 0 3 -1 roll put
+ onechar stringwidth pop round cvi =only
+ ( ; N ) print =only
+ ( ; B ) print
+ onechar false charpath flattenpath mark pathbbox counttomark {
+ counttomark -1 roll
+ round cvi =only
+ ( ) print
+ } repeat pop
+ (;) =
+ saved restore
+} bind def
+
+% fontname printafm -
+
+/printafm {
+ findfont gsave setfont
+ (StartFontMetrics 2.0) =
+ (FontName ) print currentfont /FontName get =
+
+ % Print the FontInfo
+
+ currentfont /FontInfo get {
+ exch
+ dup /FSType ne {
+ =string cvs dup dup 0 get 0 exch toupper put print
+ ( ) print =
+ } {
+ pop pop
+ } ifelse
+ } forall
+
+ % Print the FontBBox
+
+ (FontBBox) print
+ currentfont /FontBBox get {
+ ( ) print round cvi =only
+ } forall
+ (\n) print
+
+ printcharmetrics
+ (EndFontMetrics) =
+ grestore
+} bind def
+
+% Check for command line arguments.
+[ shellarguments
+ { ] dup length 1 eq
+ { 0 get printafm }
+ { (Usage: printafm fontname\n) print flush }
+ ifelse
+ }
+ { pop }
+ifelse
diff --git a/Master/tlpkg/tlgs/lib/ps2ai.ps b/Master/tlpkg/tlgs/lib/ps2ai.ps
new file mode 100644
index 00000000000..8f0a3ab7c7b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/ps2ai.ps
@@ -0,0 +1,551 @@
+%!
+% Copyright (C) 1994 , 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: ps2ai.ps 6300 2005-12-28 19:56:24Z giles $
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% ps2ai.ps - a postscript to editable adobe illustrator file filter
+%
+/vers {2.14} def % January 31, 1999
+
+% conditional def ( if the key is already defined before, don't
+% redefine it. This can be used by other programs to overwrite
+% some settings from externally
+%
+/cdef { 1 index where { pop pop pop } { def } ifelse } def
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% needs a postscript level 2 interpreter, like gnu ghostscript, to work
+%
+% Usage: gs -q -dNODISPLAY ps2ai.ps file.ps > file.aips
+% or (see below)
+% gs -q -dNODISPLAY ps2ai.ps file.ps
+% or
+% cat ps2ai.ps file.ps | lpr (then look in log file)
+%
+% or from within gsview via:
+% Edit->Convert to vector format
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Options
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Output Options: directly to a file or standard out
+%
+/jout false cdef % true=file false=stdout (default=false)
+/joutput (ps2ai.out.aips) cdef % Name of Output file
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% Other Options
+%
+/jtxt3 true cdef % output text in AI3 form (false=ai88)
+ % for coreldraw/photoshop readable output
+/joutln false cdef % use font outline instead of font
+/jerr false def % use error handling (ie die gracefully)
+/jbiterr false def % attempt to handle bitmap fonts (kludge)
+/jMacGS false def % true if using MacGS (not fully implemented yet)
+/jMacfix true def % convert filled boxes to lines (only usefull with
+ % laserwriter 8 postscript input)
+
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% No options below here
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+%
+% - Notes -
+% ai uses cmykcolor, so level 1 interpreters don't work
+% ai doesn't use image/imagemask - so bitmaps don't work correctly
+% the output file has a header so it is viewable/printable/reconvertable
+%
+% Comments, suggestions, bug-fixes, etc send to:
+%
+% Jason Olszewski (olszewsk@splash.princeton.edu)
+%
+% anonymous ftp: toby.princeton.edu /pub/olszewsk/ps2ai.ps
+% URL ftp://toby.princeton.edu/pub/olszewsk
+%
+% - Fix History -
+% 2.14 added cdef to allow overwriting of certain values from externally
+% 2.13 check for bitmap fonts, work better with TeX,WinPS,etc
+% 2.12 fixed initclip to US letter size page
+% 2.11 added header support for *u/*U compound paths
+% 2.1 option of font outline instead of text(gwhite@trevnx.bio.dfo.ca)
+% 2.0 major change to complex path handling
+% 1.9 fixed text leaking ascii (,),\
+% 1.85 added default font to handle no setfont (Courier)
+% 1.84 added even-odd fill/clip (D)
+% 1.83 undefined PPD PageSize printer specific info
+% 1.82 added kludge to save clipping status through a restore
+% 1.81 added custom color/gray support to header (x/X, g/G)
+% 1.8 added newpath if clippath is not consumed correctly(amiga)
+% 1.79 eliminated scientific notation of numbers less than 0.0001
+% 1.78 fixed transposed h & H
+% 1.77 made laserwriter 8 fixes optional
+% 1.76 added margin fix for unix AI (brown@wi.extrel.com)
+% 1.75 added kludge to handle bitmap font errors (TeX, Windows.ps)
+% 1.74 made grestore a little smarter
+% 1.73 included header handle encoded fontname (/_fontname)
+% 1.72 fixed problem with restore/clip info - (not enough Qs problem)
+% 1.71 filter font names to remove previous encoding (|,_,etc)
+% 1.7 change text format to AI3, works better with PS & CD
+% 1.67 deal with weird makefonts
+% 1.66 handle to many bad stroke/fills (s s s w/o paths)
+% 1.65 more useable with non-gs interpreters (defaultmatrix fix)
+% 1.64 fixed "smart grestore" repeat bug
+% 1.63 fixed ashow/awidthshow bug
+% 1.62 check if cmykcolor is understood otherwise rgb
+% 1.61 made grestore smarter (only print if different)
+% 1.6 add better compatibility to CorelDraw and PhotoShop
+% 1.53 make it more gs-backward compatible (clarke@lsl.co.uk)
+% 1.52 handle clipping paths a little better (Posted)
+% 1.51 improve mac lw8 output (lines instead of filled boxes)
+% 1.5 handle some level 2 stuff (mac lw8)
+% 1.4 fixed scaling of linewidth and dash
+% 1.31 made trailer more AI88 friendly
+% 1.3 add ablity to output to file directly
+% 1.21 print matrix cleaner
+% 1.2 fix rotated fonts, thanks to G.Cameron (g.cameron@biomed.abdn.ac.uk)
+% 1.1 fix stroke/fill color difference (k vs K)
+% 1.0 posted to comp.lang.postscript
+%
+% - To Do List -
+% find real %%BoundingBox: llx lly urx ury
+% make MacGS friendly (line-endings)
+% handle eps w/o showpage:(append to end)
+% write out image data to external file
+%
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+% Nothing of Interest below here
+%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+matrix identmatrix setmatrix % make ctm [1 0 0 1 0 0]
+/oldgsave {} def /oldgrestore {} def
+/initgraphics {} def /initmatrix {} def
+% undefine PPD PageSizes to be more printer independant
+/letter {} def /legal {} def /a4 {} def /b5 {} def /lettersmall {} def
+/setpagedevice { pop } def % for level 2 PPD PageSizes
+/Courier findfont 12 scalefont setfont % handle no setfont
+/initclip {0 0 moveto 0 792 lineto 612 792 lineto 612 0 lineto closepath
+ clip newpath } def
+/xdef {exch def} def
+/trx {transform exch} def
+/cbdef {cvx bind def} def
+/jltz {dup abs 0.0001 lt {pop 0} if} def % get rid of scientific notation bug
+/clstate false def % closepath state
+/dpth false def % destroy path (ie newpath)
+/fclp false def % first paint after clip
+/kscl {1.0} def % default current scale X-factor
+/gcnt {1} def % graphics state counter
+/spth {1} def % multiple paths on stack
+/jeol (\n) def % default end-of-line
+/jnump {0} def % number of paths on stack
+/jx {0} def /jy {0} def /j_ax {0} def
+/j3ftxt true def
+/clarry 10 array def
+0 1 9 {clarry exch false put} for % initilize no clipping path
+%
+% handle cmyk color on level 1 interpreters
+/setcmykcolor where {pop}
+ {/setcmykcolor {
+ /blk exch def /yel exch def /mag exch def /cyan exch def
+ /ccomp {add dup 1 gt {pop 1} if} def
+ /red {1 cyan blk ccomp sub} def
+ /green {1 mag blk ccomp sub} def
+ /blue {1 yel blk ccomp sub} def
+ red green blue setrgbcolor
+ } def
+} ifelse
+/currentcmykcolor where {pop}
+ {/currentcmykcolor {
+ currentrgbcolor /bval xdef /gval xdef /rval xdef
+ /rawC 1 rval sub def /rawM 1 gval sub def /rawY 1 bval sub def
+ rawC rawM ge { rawY rawM ge { /blk rawM def} if } if
+ rawC rawY ge { rawM rawY ge { /blk rawY def} if } if
+ rawY rawC ge { rawM rawC ge { /blk rawC def} if } if
+ rawY rawC eq { rawM rawC eq { /blk rawC def} if } if
+ /cyan rawC blk sub def
+ /mag rawM blk sub def
+ /yel rawY blk sub def
+ /blk blk def
+ cyan mag yel blk
+ } def
+} ifelse
+% If using Mac Ghostscript
+jMacGS {
+% /jeol {(\r) jp} def
+ /jout true def
+ (%%Note: Loading ps2ai.ps\n) print
+ } if
+/jstr 40 string def
+jout {joutput (w) file /joutput xdef} if
+%
+% Output
+%
+jout {/jp { joutput exch writestring } bind def }{/jp {print}bind def} ifelse
+/jpnum {jltz ( ) jp =string cvs jp } bind def
+/jpmat { dup /jarry exch def length 1 sub /j_num exch def
+ (\[) jp 0 1 j_num {jarry exch get jpnum} for (\]) jp } def
+%
+% Stack to Paths converters
+%
+/ckpnt { % check which paint and clipping to use
+ dpth { % if there are multiple paths on the stack
+ clarry gcnt get fclp and {clstate {(h W\n) jp }{(H W\n) jp } ifelse} if
+ spth 0 eq {clstate {(n\n) jp }{(N\n) jp } ifelse} if
+ spth 1 eq {clstate {(s\n) jp }{(S\n) jp } ifelse} if
+ spth 2 eq {clstate {(f\n) jp }{(F\n) jp } ifelse} if
+ } if
+} def
+/jpm {
+ ckpnt
+ /dpth true def
+ transform 2 copy /yst xdef /xst xdef exch jpnum jpnum ( m\n) jp } bind def
+/jpl { trx jpnum jpnum ( l\n) jp } bind def
+/jpc { 6 4 roll trx jpnum jpnum 4 2 roll trx jpnum jpnum trx
+ jpnum jpnum ( c\n) jp } bind def
+/jpp {xst jpnum yst jpnum ( l\n) jp /clstate true def} def
+/cntpaths { % count paths on stack
+ oldgsave
+ {pop pop /jnump jnump 1 add def} {pop pop} {6 {pop} repeat}{} pathforall
+ oldgrestore
+} def
+/ppforall {
+ cntpaths % find out how many paths are on the stack
+ jnump 1 gt { (*u\n) jp } if
+ {jpm}{jpl}{jpc}{jpp} pathforall
+ ckpnt
+ jnump 1 gt { (*U\n) jp } if
+ /jnump 0 def /clstate false def /dpth false def /fclp false def
+ oldnewpath
+} bind def
+%
+% Painting Operators
+%
+/oldnewpath [/newpath load] cbdef
+/newpath { (\n) jp /spth 0 def ppforall} def
+/stroke { (\n) jp /spth 1 def ppforall } def
+/fill {(\n) jp /spth 2 def ppforall } def
+/eofill {(1 D\n) jp fill (0 D\n) jp} def
+/clip {clarry gcnt get {(Q\nq\n) jp}{(q\n) jp} ifelse
+ /fclp true def clarry gcnt true put} def
+/eoclip {(1 D\n) jp clip (0 D\n) jp} def
+%
+% Text Operators
+%
+/oldshow [/show load] cbdef
+/curpt {stringwidth pop jx add jy} def
+/jNN {dup 0 eq {pop oldgsave currentfont /FontMatrix get setmatrix kscl
+ oldgrestore} if
+} def
+/curftmatrix {
+ currentfont /FontMatrix get dup 0 get jNN abs /norm exch def
+ dup 0 get norm div exch dup
+ 1 get norm div exch dup 2 get norm div exch dup 3 get norm div exch dup
+ 4 get exch 5 get 6 array astore matrix currentmatrix matrix concatmatrix
+} def
+% AI does not support negitive font sizes
+/curftsize {currentfont /FontMatrix get 0 get jNN abs 1000 mul} def
+/hstr (X) def
+/vbar (|) 0 get def /undsc (_) 0 get def
+/ftnamefix { % handle font names with |,_ (previously encoded)
+jstr cvs
+{ %forall
+ dup vbar eq {pop}{ %ifelse
+ dup undsc eq {pop}{ %ifelse
+ hstr exch 0 exch put hstr jp
+ } ifelse
+ } ifelse
+ } forall flush
+} bind def
+%/curftname {currentfont /FontName get ftnamefix}def
+/curftname { currentfont /FontName known {currentfont /FontName get}
+ { (Times-Roman)} ifelse ftnamefix } def
+/lftpar (\() 0 get def
+/rhtpar (\)) 0 get def
+/bckslsh (\\) 0 get def
+/handft { % handle strings with (,),\
+ (\() jp
+ { %forall
+ dup lftpar eq { (\\\() jp }{ %ifelse
+ dup rhtpar eq { (\\\)) jp }{ %ifelse
+ dup bckslsh eq { (\\\\) jp }{ %ifelse
+ hstr exch 0 exch put hstr jp
+ } ifelse
+ } ifelse
+ } ifelse
+ } forall (\)) jp flush
+} bind def
+% AI 3 text format pieces
+jtxt3 {
+/j3txt { j3ftxt {(0 Ts 100 Tz 0 Tt 0 TA 0 0 5 TC 100 100 200 TW 0 0 0 Ti\n) jp
+ (0 Ta 0 Tq 0 0 TI 0 Tc 0 Tw\n) jp} if } def
+/show {oldgsave (0 To\n) jp
+ currentpoint 2 copy /jy exch def /jx exch def translate
+ curftmatrix /jitm exch def
+ 0 1 5 {jitm exch get jpnum} for ( 0 Tp\n) jp (TP\n) jp
+ (0 Tr\n) jp (\/_) jp curftname curftsize jpnum ( Tf\n) jp
+ (0) jp j_ax curftsize div 100 mul jpnum ( 100 TC\n) jp % percent(?)
+ dup curpt moveto mark exch handft ( Tx\n) jp (TO\n) jp /j3ftxt false def
+ cleartomark currentpoint oldgrestore moveto
+} def
+/ashow {exch pop exch /j_ax exch def show /j_ax {0} def } def
+}
+ {
+/show {oldgsave (u\n) jp currentpoint 2 copy /jy exch def /jx exch def translate
+ (\/) jp curftname jstr cvs jp
+ curftsize dup jpnum jpnum ( 0 0 z\n) jp
+ curftmatrix jpmat ( e\n) jp
+ dup curpt moveto mark exch handft ( t T U\n) jp
+ cleartomark currentpoint oldgrestore moveto} def
+/ashow {oldgsave (u\n) jp currentpoint translate (\/) jp curftname jstr cvs jp
+ curftsize dup jpnum jpnum exch kscl mul jpnum ( 0 z\n) jp
+ curftmatrix jpmat ( e\n) jp dup curpt moveto mark exch handft
+ ( t T U\n) jp cleartomark currentpoint oldgrestore moveto} def
+} ifelse
+/widthshow { show pop pop pop} def
+/awidthshow {ashow pop pop pop} def
+/kshow {show pop} def
+%/show {true charpath fill} bind def % get outline of charactor
+joutln {/show { true charpath currentpoint
+ /jy exch def /jx exch def fill jx jy moveto} bind def} if
+%/show {oldshow} def % do nothing different
+%
+% Color Operators
+%
+/oldsetcmykcolor [/setcmykcolor load] cbdef
+/setcmykcolor {oldsetcmykcolor
+currentcmykcolor 4 -1 roll jpnum 3 -1 roll jpnum 2 -1 roll jpnum jpnum ( k\n) jp
+currentcmykcolor 4 -1 roll jpnum 3 -1 roll jpnum 2 -1 roll jpnum jpnum ( K\n) jp
+ } def
+/oldsetgray [/setgray load] cbdef
+/setgray {0 0 0 4 -1 roll 1 exch sub setcmykcolor} def
+/oldsethsbcolor [/sethsbcolor load] cbdef
+/sethsbcolor {oldsethsbcolor currentcmykcolor setcmykcolor} def
+/oldsetrgbcolor [/setrgbcolor load] cbdef
+/setrgbcolor {oldsetrgbcolor currentrgbcolor /bval xdef /gval xdef /rval xdef
+ /rawC 1 rval sub def /rawM 1 gval sub def /rawY 1 bval sub def
+ rawC rawM ge { rawY rawM ge { /blk rawM def} if } if
+ rawC rawY ge { rawM rawY ge { /blk rawY def} if } if
+ rawY rawC ge { rawM rawC ge { /blk rawC def} if } if
+ rawY rawC eq { rawM rawC eq { /blk rawC def} if } if
+ /cyan rawC blk sub def
+ /mag rawM blk sub def
+ /yel rawY blk sub def
+ /blk blk def
+ cyan mag yel blk setcmykcolor } def
+%
+% State Operators
+%
+/oldsetlinewidth [/setlinewidth load] cbdef
+/setlinewidth {kscl abs mul jltz oldsetlinewidth
+ currentlinewidth jpnum ( w\n) jp } def
+/oldsetlinecap [/setlinecap load] cbdef
+/setlinecap {dup oldsetlinecap jpnum ( J\n) jp} def
+/oldsetlinejoin [/setlinejoin load] cbdef
+/setlinejoin {dup oldsetlinejoin jpnum ( j\n) jp} def
+/oldsetmiterlimit [/setmiterlimit load] cbdef
+/setmiterlimit {dup oldsetmiterlimit jpnum ( M\n) jp}def
+/oldsetdash [/setdash load] cbdef
+/setdash {exch [ exch {kscl abs mul} forall ] exch kscl abs mul oldsetdash
+ currentdash exch jpmat jpnum ( d\n) jp } def
+/oldsetflat [/setflat load] cbdef
+/setflat {dup oldsetflat jpnum ( i\n) jp } def
+%
+% More State Operators
+%
+/kscl { % use just the x scale factor
+ oldgsave
+ matrix currentmatrix /jctm exch def
+ jctm 4 0 put jctm 5 0 put jctm setmatrix
+ 1 0 moveto currentpoint transform
+ dup mul exch dup mul add sqrt 10000 mul round 10000 div
+ oldgrestore
+} def
+/currentstate {currentcmykcolor setcmykcolor
+ currentflat jpnum ( i) jp currentlinecap jpnum ( J) jp
+ currentlinejoin jpnum ( j) jp currentlinewidth jpnum ( w) jp
+ currentmiterlimit jpnum ( M ) jp currentdash exch jpmat jpnum ( d\n) jp
+} def
+/jdifG {
+ currentcmykcolor /jok xdef /joy xdef /jom xdef /joc xdef
+ currentflat /jof xdef currentlinecap /jolc xdef currentlinejoin /jolj xdef
+ currentlinewidth /jolw xdef currentmiterlimit /joml xdef
+ currentdash /jood xdef /joad xdef
+ oldgrestore
+ currentcmykcolor /jnk xdef /jny xdef /jnm xdef /jnc xdef
+ currentflat /jnf xdef currentlinecap /jnlc xdef currentlinejoin /jnlj xdef
+ currentlinewidth /jnlw xdef currentmiterlimit /jnml xdef
+ currentdash /jnod xdef /jnad xdef
+ % compare old gstate to new gstate
+ joc jnc ne jom jnm ne joy jny ne jok jnk ne
+ jof jnf ne jolc jnlc ne jolj jnlj ne jolw jnlw ne joml jnml ne
+ false joad {true exit} forall {pop pop true}{false} ifelse
+ false jnad {true exit} forall {pop pop true}{false} ifelse ne
+ jood jnod ne 10 {or} repeat {currentstate} if
+} def
+/oldgsave [/gsave load] cbdef
+/gsave {oldgsave /gcnt gcnt 1 add def } def % clarry gcnt false put} def
+% (%%Note:gsave ) jp gcnt jpnum (\n) jp} def
+/oldgrestore [/grestore load] cbdef
+/grestore {dpth {newpath} if clarry gcnt get {(Q\n) jp clarry gcnt false put} if
+ jdifG /gcnt gcnt 1 sub def } def
+% oldgrestore currentstate } def
+% (%%Note:grestore ) jp gcnt 1 add jpnum (\n) jp} def
+/oldrestore [/restore load] cbdef
+% a kludgy way of saving the clipping path status information
+/restore {clarry aload pop 11 -1 roll oldrestore clarry astore pop} def
+/showpage { 0 1 9 {clarry exch get {(Q\n) jp} if } for
+ (%%Note: If Error, make sure there are matched pairs of 'q's and 'Q's\n) jp
+ (%%Note: in the file. Add 'Q's before '%%Trailer' until equal\n) jp
+ (%%Trailer\n) jp
+ jtxt3 {(Adobe_IllustratorA_AI3 /terminate get exec\n) jp
+ (Adobe_typography_AI3 /terminate get exec\n) jp
+ (Adobe_customcolor /terminate get exec\n) jp
+ (Adobe_cshow /terminate get exec\n) jp
+ (Adobe_cmykcolor /terminate get exec\n) jp
+ (Adobe_packedarray /terminate get exec\n) jp
+}{
+ (Adobe_Illustrator881 /terminate get exec\n) jp
+ (Adobe_customcolor /terminate get exec\n) jp
+ (Adobe_cshow /terminate get exec\n) jp
+ (Adobe_cmykcolor /terminate get exec\n) jp
+ (Adobe_packedarray /terminate get exec\n) jp
+ } ifelse
+( showpage\n%EOF\n%%EndDocument\n) jp
+ jout {joutput closefile} if jMacGS not {quit} if /j3ftxt true def } def
+%
+% Error handling
+%
+errordict begin
+% Attempt to handle the error caused by bitmap fonts (TeX,Windows.ps,etc)
+% this is a big-time kludge
+jbiterr {
+ /undefined {pop pop (Times-Roman)} def
+ /typecheck {pop pop} def
+} if
+jerr {
+ /handleerror {
+ (%%Note: ps2ai error, aborting rest of conversion\n) jp showpage
+ } def
+} if
+end
+%
+% Mac LW 8 improvements
+%
+/jmacimp { % stroked line instead of thin filled boxes
+ /@a { 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll add exch moveto
+ 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll exch sub exch lineto
+ abs setlinewidth stroke pop pop} def
+ /@b { 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll add exch moveto
+ pop
+ 3 -1 roll 2 div dup 3 -1 roll add exch 3 -1 roll add exch lineto
+ abs setlinewidth stroke} def
+ /endp {showpage pm restore} def % because the restore stops clean up
+} def
+%
+% Handle (some) PS Level 2
+%
+/rectstroke { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ closepath stroke} def
+/rectfill { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ fill } def
+/rectclip { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ closepath clip newpath jMacfix {jmacimp} if } def
+%
+% Add a header prolog to the output file so it is still view/print-able
+%
+(%!PS-Adobe-2.0 EPSF-1.2\n%%BoundingBox: 0 0 612 792\n) jp
+(%%Title: Adobe Illustator 3 Editable Document\n) jp
+(%%Creator: ps2ai.ps vers.) jp vers jpnum ( \(C\) 1993-94 Jason Olszewski\n) jp
+(%%TemplateBox: 0 0 612 792\n) jp
+jtxt3 {(%%AI3_Margin:0 0 0 0\n) jp } if
+(%%EndComments\n) jp
+(%%BeginProlog\n) jp
+(/m {moveto} def /l {lineto} def /c {curveto} def\n) jp
+(/S {stroke} def /F {fill} def\n) jp
+(/s {closepath S} def /f {closepath F} def\n) jp
+(/q {gsave} def /Q {grestore} def /W {clip} def /k {setcmykcolor} def\n) jp
+(/i {setflat} def /J {setlinecap} def /j {setlinejoin} def\n) jp
+(/w {setlinewidth} def /M {setmiterlimit} def /d {setdash} def\n) jp
+(/u {gsave} def /U {grestore} def /K {k} def\n) jp
+(/N {newpath} def /n {closepath N} def\n) jp
+(/g {setgray} def /G {g} def\n) jp
+(/x {pop pop k} def /X {x} def\n) jp
+(/H {} def /h {H closepath} def /D {pop} def\n) jp
+(/*u { /N {/spth 0 def}def /S{/spth 1 def}def /F {/spth 2 def} def} def\n) jp
+(/*U { spth 0 eq {newpath} if spth 1 eq {stroke} if spth 2 eq {fill} if\n) jp
+( /N {newpath} def /S {stroke} def /F {fill} def } def\n) jp
+%(\n) jp
+jtxt3 {
+ (/TC {pop pop pop} def /Tr {pop} def\n) jp
+ (/To {pop gsave} def /TO {grestore} def\n) jp
+ (/Tp {pop matrix astore concat} def /TP {0 0 moveto} def\n) jp
+ (/a_str 40 string def /cnt 0 def /h_str (X) def /undsc (_) 0 get def\n) jp
+ (/fntfix {a_str cvs dup length 1 sub /f_str exch string def\n) jp
+ ( {dup undsc eq {pop}{f_str cnt 3 -1 roll put /cnt cnt 1 add def\n) jp
+ ( } ifelse } forall flush /cnt 0 def f_str cvn } bind def\n) jp
+
+ (/Tf {exch fntfix findfont exch scalefont setfont} def /Tx {show} def\n) jp
+}{
+ (/z {pop pop pop exch findfont exch scalefont setfont} def\n) jp
+ (/e {concat 0 0 m} def /t {show} def /T {} def\n) jp
+} ifelse
+(\n) jp
+jtxt3 {
+ (userdict /Adobe_packedarray 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cmykcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cshow 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_customcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_typography_AI3 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_IllustratorA_AI3 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+}{
+ (userdict /Adobe_packedarray 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cmykcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_cshow 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_customcolor 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+ (userdict /Adobe_Illustrator881 2 dict dup begin put\n) jp
+ (/initialize {} def /terminate {} def\n) jp
+} ifelse
+(%%EndProlog\n) jp
+(%%BeginSetup\n) jp
+jtxt3 {
+ (Adobe_packedarray /initialize get exec\n) jp
+ (Adobe_cmykcolor /initialize get exec\n) jp
+ (Adobe_cshow /initialize get exec\n) jp
+ (Adobe_customcolor /initialize get exec\n) jp
+ (Adobe_typography_AI3 /initialize get exec\n) jp
+ (Adobe_IllustratorA_AI3 /initialize get exec\n) jp
+}{
+ (Adobe_packedarray /initialize get exec\n) jp
+ (Adobe_cmykcolor /initialize get exec\n) jp
+ (Adobe_cshow /initialize get exec\n) jp
+ (Adobe_customcolor /initialize get exec\n) jp
+ (Adobe_Illustrator881 /initialize get exec\n) jp
+} ifelse
+(%%EndSetup\n) jp
+0 0 0 1 oldsetcmykcolor
+currentstate
+
+jout {(%%Note: Load Postscript file to be converted now\n) print} if
diff --git a/Master/tlpkg/tlgs/lib/ps2ascii.ps b/Master/tlpkg/tlgs/lib/ps2ascii.ps
new file mode 100644
index 00000000000..8a8c1ff755b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/ps2ascii.ps
@@ -0,0 +1,1524 @@
+% Copyright (C) 1991, 1995, 1996, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: ps2ascii.ps 6300 2005-12-28 19:56:24Z giles $
+% Extract the ASCII text from a PostScript file. Nothing is displayed.
+% Instead, ASCII information is written to stdout. The idea is similar to
+% Glenn Reid's `distillery', only a lot more simple-minded, and less robust.
+
+% If SIMPLE is defined, just the text is written, with a guess at line
+% breaks and word spacing. If SIMPLE is not defined, lines are written
+% to stdout as follows:
+%
+% F <height> <width> (<fontname>)
+% Indicate the font height and the width of a space.
+%
+% P
+% Indicate the end of the page.
+%
+% S <x> <y> (<string>) <width>
+% Display a string.
+%
+% <width> and <height> are integer dimensions in units of 1/720".
+% <x> and <y> are integer coordinates, in units of 1/720", with the origin
+% at the lower left.
+% <string> and <fontname> are strings represented with the standard
+% PostScript escape conventions.
+
+% If COMPLEX is defined, the following additional types of lines are
+% written to stdout.
+%
+% C <r> <g> <b>
+% Indicate the current color.
+%
+% I <x> <y> <width> <height>
+% Note the presence of an image.
+%
+% R <x> <y> <width> <height>
+% Fill a rectangle.
+%
+% <r>, <g>, and <b> are RGB values expressed as integers between 0 and 1000.
+%
+% Note that future versions of this program (in COMPLEX mode) may add
+% other output elements, so programs parsing the output should be
+% prepared to ignore elements that they do not recognize.
+
+% Note that this code will only work in all cases if systemdict is writable
+% and if `binding' the definitions of operators defined as procedures
+% is deferred. For this reason, it is normally invoked with
+% gs -q -dNODISPLAY -dDELAYBIND -dWRITESYSTEMDICT ps2ascii.ps
+
+% Thanks to:
+% J Greely <jgreely@cis.ohio-state.edu> for improvements to this code;
+% Jerry Whelan <jerryw@abode.ccd.bnl.gov> for motivating other improvements;
+% David M. Jones <dmjones@theory.lcs.mit.edu> for improvements noted below.
+
+%% Additional modifications by David M. Jones
+%% (dmjones@theory.lcs.mit.edu), December 23, 1997
+%%
+%% (a) Rewrote forall loop at the end of .show.write. This fixes a
+%% stack leakage problem, but the changes are more significant
+%% than that.
+%%
+%% .char.map includes the names of all characters in the
+%% StandardEncoding, ISOLatin1Encoding, OT1Encoding and
+%% T1Encoding vectors. Thus, if the Encoding vector for the
+%% current font contains a name that is not in .char.map, it's
+%% redundant to check if the Encoding vector is equal to one of
+%% the known vectors. Previous versions of ps2ascii would give
+%% up at this point, and substitute an asterisk (*) for the
+%% character. I've taken the liberty of instead using the
+%% OT1Encoding vector to translate the character, on the grounds
+%% that in the cases I'm most interested in, a font without a
+%% useful Encoding vector was most likely created by a DVI to PS
+%% converter such as dvips or DVILASER (and OT1Encoding is
+%% largely compatible with StandardEncoding anyway). [Note that
+%% this does not make my earlier changes to support dvips (see
+%% fix (a) under my 1996 changes) completely obsolete, since
+%% there's additional useful information I can extract in that
+%% case.]
+%%
+%% Overall, this should provide better support for some documents
+%% (e.g, DVILASER documents will no longer be translated into a
+%% series of *'s) without breaking any other documents any worse
+%% than they already were broken.
+%%
+%% (b) Fixed two bugs in dvips.df-tail: (1) changed "dup 127" to "dup
+%% 128" to fix fencepost error, and (2) gave each font it's own
+%% FontName rather than having all fonts share the same name.
+%%
+%% (c) Added one further refinement to the heuristic for detecting
+%% paragraph breaks: do not ever start a new paragraph after a
+%% line ending in a hyphen.
+%%
+%% (d) Added a bunch of missing letters from the T1Encoding,
+%% OT1Encoding and ISOLatin1Encoding vectors to .letter.chars to
+%% improve hyphen-elimination algorithm. This still won't help
+%% if there's no useful Encoding vector.
+%%
+%% NOTE: A better solution to the problem of missing Encoding vectors
+%% might be to redefine definefont to check whether the Encoding
+%% vector is sensible and, if not, replace it by a default. This
+%% would alleviate the need for constant tests in the .show.write
+%% loop, as well as automatically solving the problem noted in fix
+%% (d) above, and the similar problem with .break.chars. This should
+%% be investigated. Also, the hyphen-elimination algorithm really
+%% needs to be looked at carefully and rethought.
+
+%%* Modifications to ps2ascii.ps by David M. Jones
+%%* (dmjones@theory.lcs.mit.edu), June 25-July 8, 1996
+
+%%* Modifications:
+%%*
+%%* (a) added code to give better support for dvips files by providing
+%%* FontBBox's, FontName's and Encoding vectors for downloaded
+%%* bitmap fonts. This is done by using dvips's start-hook to
+%%* overwrite the df-tail and D procedures that dvips uses to
+%%* define its Type 3 bitmap fonts. Thus, this change should
+%%* provide better support for dvips-generated PS files without
+%%* affecting the handling of other documents.
+%%*
+%%* (b) Fixed two bugs that could potentially affect any PS file, not
+%%* just those created by dvips: (1) added missing "get" operator
+%%* in .show.write and (2) fixed bug that caused a hyphen at the
+%%* end of a line to be replaced by a space rather than begin
+%%* deleted. Note that the first bug was a source of stack
+%%* leakage, causing ps2ascii to run out of operand stack space
+%%* occasionally.
+%%*
+%%* Search for "%%* BF" to find these modifications.
+%%*
+%%* (c) Improved the heuristic for determining whether a line break
+%%* has occurred and whether a line break represents a paragraph
+%%* break. Previously, any change in the vertical position caused
+%%* a line break; now a line break is only registered if the
+%%* change is larger than the height of the current font. This
+%%* means that superscripts, subscripts, and such things as
+%%* shifted accents generated by TeX won't cause line breaks.
+%%* Paragraph-recognition is now done by comparing the indentation
+%%* of the new line to the indentation of the previous line and by
+%%* comparing the vertical distance between the new line and the
+%%* previous line to the vertical distance between the previous
+%%* line and its predecessor.
+%%*
+%%* (d) Added a hook for renaming the files where stdout and stderr
+%%* go.
+%%*
+%%* In general, my additions or changes to the code are described in
+%%* comments beginning with "%%*". However, there are numerous other
+%%* places where I have either re-formatted code or added comments to
+%%* the code while I was trying to understand it. These are usually
+%%* not specially marked.
+%%*
+
+/QUIET true def
+systemdict wcheck { systemdict } { userdict } ifelse begin
+/.max where { pop } { /.max { 2 copy lt { exch } if pop } bind def } ifelse
+/COMPLEX dup where { pop true } { false } ifelse def
+/SIMPLE dup where { pop true } { false } ifelse def
+/setglobal where
+ { pop currentglobal /setglobal load true setglobal }
+ { { } }
+ifelse
+
+% Define a way to store and retrieve integers that survives save/restore.
+/.i.string0 (0 ) def
+/.i.string .i.string0 length string def
+/.iget { cvi } bind def
+/.iput { exch //.i.string exch copy cvs pop } bind def
+/.inew { //.i.string0 dup length string copy } bind def
+
+% We only want to redefine operators if they are defined already.
+
+/codef { 1 index where { pop def } { pop pop } ifelse } def
+
+% Redefine the end-of-page operators.
+
+/erasepage { } codef
+/copypage { SIMPLE { (\014) } { (P\n) } ifelse //print } codef
+/showpage { copypage erasepage initgraphics } codef
+
+% Redefine the fill operators to detect rectangles.
+
+/.orderrect % <llx> <lly> <urx> <ury> .orderrect <llx> <lly> <w> <h>
+ { % Ensure llx <= urx, lly <= ury.
+ 1 index 4 index lt { 4 2 roll } if
+ dup 3 index lt { 3 1 roll exch } if
+ exch 3 index sub exch 2 index sub
+ } odef
+/.fillcomplex
+ { % Do a first pass to see if the path is all rectangles in
+ % the output coordinate system. We don't worry about overlapping
+ % rectangles that might be partially not filled.
+ % Stack: mark llx0 lly0 urx0 ury0 ... true mark x0 y0 ...
+ mark true mark
+ % Add a final moveto so we pick up any trailing unclosed subpath.
+ 0 0 itransform moveto
+ { .coord counttomark 2 gt
+ { counttomark 4 gt { .fillcheckrect } { 4 2 roll pop pop } ifelse }
+ if
+ }
+ { .coord }
+ { cleartomark not mark exit }
+ { counttomark -2 roll 2 copy counttomark 2 roll .fillcheckrect }
+ pathforall cleartomark
+ { .showcolor counttomark 4 idiv
+ { counttomark -4 roll .orderrect
+ (R ) //print .show==4
+ }
+ repeat pop
+ }
+ { cleartomark
+ }
+ ifelse
+ } odef
+/.fillcheckrect
+ { % Check whether the current subpath is a rectangle.
+ % If it is, add it to the list of rectangles being accumulated;
+ % if not exit the .fillcomplex loop.
+ % The subpath has not been closed.
+ % Stack: as in .fillcomplex, + newx newy
+ counttomark 10 eq { 9 index 9 index 4 2 roll } if
+ counttomark 12 ne { cleartomark not mark exit } if
+ 12 2 roll
+ % Check for the two possible forms of rectangles:
+ % x0 y0 x0 y1 x1 y1 x1 y0 x0 y0
+ % x0 y0 x1 y0 x1 y1 x0 y1 x0 y0
+ 9 index 2 index eq 9 index 2 index eq and
+ 10 index 9 index eq
+ { % Check for first form.
+ 7 index 6 index eq and 6 index 5 index eq and 3 index 2 index eq and
+ }
+ { % Check for second form.
+ 9 index 8 index eq and
+ 8 index 7 index eq and 5 index 4 index eq and 4 index 3 index eq and
+ }
+ ifelse not { cleartomark not mark exit } if
+ % We have a rectangle.
+ pop pop pop pop 4 2 roll pop pop 8 4 roll
+ } odef
+/eofill { COMPLEX { .fillcomplex } if newpath } codef
+/fill { COMPLEX { .fillcomplex } if newpath } codef
+/rectfill { gsave newpath .rectappend fill grestore } codef
+/ueofill { gsave newpath uappend eofill grestore } codef
+/ufill { gsave newpath uappend fill grestore } codef
+
+% Redefine the stroke operators to detect rectangles.
+
+/rectstroke
+ { gsave newpath
+ dup type dup /arraytype eq exch /packedarraytype eq or
+ { dup length 6 eq { exch .rectappend concat } { .rectappend } ifelse }
+ { .rectappend }
+ ifelse stroke grestore
+ } codef
+/.strokeline % <fromx> <fromy> <tox> <toy> .strokeline <tox> <toy>
+ % Note: fromx and fromy are in output coordinates;
+ % tox and toy are in user coordinates.
+ { .coord 2 copy 6 2 roll .orderrect
+ % Add in the line width. Assume square or round caps.
+ currentlinewidth 2 div dup .dcoord add abs 1 .max 5 1 roll
+ 4 index add 4 1 roll 4 index add 4 1 roll
+ 4 index sub 4 1 roll 5 -1 roll sub 4 1 roll
+ (R ) //print .show==4
+ } odef
+/.strokecomplex
+ { % Do a first pass to see if the path is all horizontal and vertical
+ % lines in the output coordinate system.
+ % Stack: true mark origx origy curx cury
+ true mark null null null null
+ { .coord 6 2 roll pop pop pop pop 2 copy }
+ { .coord 1 index 4 index eq 1 index 4 index eq or
+ { 4 2 roll pop pop }
+ { cleartomark not mark exit }
+ ifelse
+ }
+ { cleartomark not mark exit }
+ { counttomark -2 roll 2 copy counttomark 2 roll
+ 1 index 4 index eq 1 index 4 index eq or
+ { pop pop 2 copy }
+ { cleartomark not mark exit }
+ ifelse
+ }
+ pathforall cleartomark
+ 0 currentlinewidth .dcoord 0 eq exch 0 eq or and
+ % Do the second pass to write out the rectangles.
+ % Stack: origx origy curx cury
+ { .showcolor null null null null
+ { 6 2 roll pop pop pop pop 2 copy .coord }
+ { .strokeline }
+ { }
+ { 3 index 3 index .strokeline }
+ pathforall pop pop pop pop
+ }
+ if
+ } odef
+/stroke { COMPLEX { .strokecomplex } if newpath } codef
+/ustroke
+ { gsave newpath
+ dup length 6 eq { exch uappend concat } { uappend } ifelse
+ stroke grestore
+ } codef
+
+% The image operators must read the input and note the dimensions.
+% Eventually we should redefine these to detect 1-bit-high all-black images,
+% since this is how dvips does underlining (!).
+
+/.noteimagerect % <width> <height> <matrix> .noteimagerect -
+ { COMPLEX
+ { gsave setmatrix itransform 0 0 itransform
+ grestore .coord 4 2 roll .coord .orderrect
+ (I ) //print .show==4
+ }
+ { pop pop pop
+ }
+ ifelse
+ } odef
+/colorimage where
+ { pop /colorimage
+ { 1 index
+ { dup 6 add index 1 index 6 add index 2 index 5 add index }
+ { 6 index 6 index 5 index }
+ ifelse .noteimagerect gsave nulldevice //colorimage grestore
+ } codef
+ } if
+/.noteimage % Arguments as for image[mask]
+ { dup type /dicttype eq
+ { dup /Width get 1 index /Height get 2 index /ImageMatrix get }
+ { 4 index 4 index 3 index }
+ ifelse .noteimagerect
+ } odef
+/image { .noteimage gsave nulldevice //image grestore } codef
+/imagemask { .noteimage gsave nulldevice //imagemask grestore } codef
+
+% Output the current color if necessary.
+/.color.r .inew def
+ .color.r -1 .iput % make sure we write the color at the beginning
+/.color.g .inew def
+/.color.b .inew def
+/.showcolor
+ { COMPLEX
+ { currentrgbcolor
+ 1000 mul round cvi
+ 3 1 roll 1000 mul round cvi
+ exch 1000 mul round cvi
+ % Stack: b g r
+ dup //.color.r .iget eq
+ 2 index //.color.g .iget eq and
+ 3 index //.color.b .iget eq and
+ { pop pop pop
+ }
+ { (C ) //print
+ dup //.color.r exch .iput .show==only
+ ( ) //print dup //.color.g exch .iput .show==only
+ ( ) //print dup //.color.b exch .iput .show==only
+ (\n) //print
+ }
+ ifelse
+ }
+ if
+ } bind def
+
+% Redefine `show'.
+
+% Set things up so our output will be in tenths of a point, with origin at
+% lower left. This isolates us from the peculiarities of individual devices.
+
+/.show.ident.matrix matrix def
+/.show.ident { % - .show.ident <scale> <matrix>
+% //.show.ident.matrix defaultmatrix
+% % Assume the original transformation is well-behaved.
+% 0.1 0 2 index dtransform abs exch abs .max /.show.scale exch def
+% 0.1 dup 3 -1 roll scale
+ gsave initmatrix
+ % Assume the original transformation is well-behaved...
+ 0.1 0 dtransform abs exch abs .max
+ 0.1 dup scale .show.ident.matrix currentmatrix
+ % ... but undo any rotation into landscape orientation.
+ dup 0 get 0 eq {
+ 1 get dup abs div 90 mul rotate
+ .show.ident.matrix currentmatrix
+ } if
+ grestore
+} bind def
+
+/.coord { % <x> <y> .coord <x'> <y'>
+ transform .show.ident exch pop itransform
+ exch round cvi exch round cvi
+} odef
+
+/.dcoord { % <dx> <dy> .coord <dx'> <dy'>
+ % Transforming distances is trickier, because
+ % the coordinate system might be rotated.
+ .show.ident pop 3 1 roll
+ exch 0 dtransform
+ dup mul exch dup mul add sqrt
+ 2 index div round cvi
+ exch 0 exch dtransform
+ dup mul exch dup mul add sqrt
+ 3 -1 roll div round cvi
+} odef
+
+% Remember the current X, Y, and height.
+/.show.x .inew def
+/.show.y .inew def
+/.show.height .inew def
+
+% Remember the last character of the previous string; if it was a
+% hyphen preceded by a letter, we didn't output the hyphen.
+
+/.show.last (\000) def
+
+% Remember the current font.
+/.font.name 130 string def
+/.font.name.length .inew def
+/.font.height .inew def
+/.font.width .inew def
+
+%%* Also remember indentation of current line and previous vertical
+%%* skip
+
+/.show.indent .inew def
+/.show.dy .inew def
+
+% We have to redirect stdout somehow....
+
+/.show.stdout { (%stdout) (w) file } bind def
+
+% Make sure writing will work even if a program uses =string.
+/.show.string =string length string def
+/.show.=string =string length string def
+/.show==only
+ { //=string //.show.=string copy pop
+ dup type /stringtype eq
+ { dup length //.show.string length le
+ { dup rcheck { //.show.string copy } if
+ } if
+ } if
+ .show.stdout exch write==only
+ //.show.=string //=string copy pop
+ } odef
+/.show==4
+ { 4 -1 roll .show==only ( ) //print
+ 3 -1 roll .show==only ( ) //print
+ exch .show==only ( ) //print
+ .show==only (\n) //print
+ } odef
+
+/.showwidth % Same as stringwidth, but disable COMPLEX so that
+ % we don't try to detect rectangles during BuildChar.
+ { COMPLEX
+ { /COMPLEX false def stringwidth /COMPLEX true def }
+ { stringwidth }
+ ifelse
+ } odef
+
+/.showfont % <string> .showfont <string>
+ { gsave
+ % Try getting the height and width of the font from the FontBBox.
+ currentfont /FontBBox .knownget not { {0 0 0 0} } if
+ aload pop % llx lly urx ury
+ exch 4 -1 roll % lly ury urx llx
+ sub % lly ury dx
+ 3 1 roll exch % dx ury lly
+ sub % dx dy
+ 2 copy .max 0 ne
+ { currentfont /FontMatrix get dtransform
+ }
+ { pop pop
+ % Fonts produced by dvips, among other applications, have
+ % BuildChar procedures that bomb out when given unexpected
+ % characters, and there is no way to determine whether a given
+ % character will do this. So for Type 1 fonts, we measure a
+ % typical character ('X'); for others, we punt.
+ currentfont /FontType get 1 eq
+ { (X) .showwidth pop dup 1.3 mul
+ }
+ { % No safe way to get the character size. Punt.
+ 0 0
+ }
+ ifelse
+ }
+ ifelse .dcoord exch
+ currentfont /FontName .knownget not { () } if
+ dup type /stringtype ne { //.show.string cvs } if
+ grestore
+ % Stack: height width fontname
+ SIMPLE
+ { pop pop //.show.height exch .iput }
+ { 2 index //.font.height .iget eq
+ 2 index //.font.width .iget eq and
+ 1 index //.font.name 0 //.font.name.length .iget getinterval eq and
+ { pop pop pop
+ }
+ { (F ) //print
+ 3 -1 roll dup //.font.height exch .iput .show==only ( ) //print
+ exch dup //.font.width exch .iput .show==only ( ) //print
+ dup length //.font.name.length exch .iput
+ //.font.name cvs .show==only (\n) //print
+ }
+ ifelse
+ }
+ ifelse
+ } odef
+
+% Define the letters -- characters which, if they occur followed by a hyphen
+% at the end of a line, cause the hyphen and line break to be ignored.
+/.letter.chars 100 dict def
+mark
+ 65 1 90 { dup 32 add } for
+ counttomark
+ { StandardEncoding exch get .letter.chars exch dup put }
+ repeat
+pop
+
+%%* Add the rest of the letters from the [O]T1Encoding and
+%%* ISOLatin1Encoding vectors
+
+mark
+ /AE
+ /Aacute
+ /Abreve
+ /Acircumflex
+ /Adieresis
+ /Agrave
+ /Aogonek
+ /Aring
+ /Atilde
+ /Cacute
+ /Ccaron
+ /Ccedilla
+ /Dcaron
+ /Eacute
+ /Ecaron
+ /Ecircumflex
+ /Edieresis
+ /Egrave
+ /Eng
+ /Eogonek
+ /Eth
+ /Gbreve
+ /Germandbls
+ /IJ
+ /Iacute
+ /Icircumflex
+ /Idieresis
+ /Idot
+ /Igrave
+ /Lacute
+ /Lcaron
+ /Lslash
+ /Nacute
+ /Ncaron
+ /Ntilde
+ /OE
+ /Oacute
+ /Ocircumflex
+ /Odieresis
+ /Ograve
+ /Ohungarumlaut
+ /Oslash
+ /Otilde
+ /Racute
+ /Rcaron
+ /Sacute
+ /Scaron
+ /Scedilla
+ /Tcaron
+ /Tcedilla
+ /Thorn
+ /Uacute
+ /Ucircumflex
+ /Udieresis
+ /Ugrave
+ /Uhungarumlaut
+ /Uring
+ /Yacute
+ /Ydieresis
+ /Zacute
+ /Zcaron
+ /Zdot
+ /aacute
+ /abreve
+ /acircumflex
+ /adieresis
+ /ae
+ /agrave
+ /aogonek
+ /aring
+ /atilde
+ /cacute
+ /ccaron
+ /ccedilla
+ /dbar
+ /dcaron
+ /dotlessi
+ /dotlessj
+ /eacute
+ /ecaron
+ /ecircumflex
+ /edieresis
+ /egrave
+ /eng
+ /eogonek
+ /eth
+ /exclamdown
+ /ff
+ /ffi
+ /ffl
+ /fi
+ /fl
+ /gbreve
+ /germandbls
+ /iacute
+ /icircumflex
+ /idieresis
+ /igrave
+ /ij
+ /lacute
+ /lcaron
+ /lslash
+ /nacute
+ /ncaron
+ /ntilde
+ /oacute
+ /ocircumflex
+ /odieresis
+ /oe
+ /ograve
+ /ohungarumlaut
+ /oslash
+ /otilde
+ /questiondown
+ /racute
+ /rcaron
+ /sacute
+ /scaron
+ /scedilla
+ /section
+ /sterling
+ /tcaron
+ /tcedilla
+ /thorn
+ /uacute
+ /ucircumflex
+ /udieresis
+ /ugrave
+ /uhungarumlaut
+ /uring
+ /yacute
+ /ydieresis
+ /zacute
+ /zcaron
+ /zdot
+counttomark
+ { .letter.chars exch dup put }
+repeat
+pop
+
+% Define a set of characters which, if they occur at the start of a line,
+% are taken as indicating a paragraph break.
+/.break.chars 50 dict def
+mark
+ /bullet /dagger /daggerdbl /periodcentered /section
+ counttomark
+ { .break.chars exch dup put }
+ repeat
+pop
+
+% Define character translation to ASCII.
+% We have to do this for the entire character set.
+
+/.char.map 500 dict def
+
+/.chars.def { counttomark 2 idiv { .char.map 3 1 roll put } repeat pop } def
+
+% Encode the printable ASCII characters.
+
+mark 32 1 126
+ { 1 string dup 0 4 -1 roll put
+ dup 0 get StandardEncoding exch get exch
+ }
+for .chars.def
+
+ % Encode accents.
+mark
+ /acute (')
+ /caron (^)
+ /cedilla (,)
+ /circumflex (^)
+ /dieresis (")
+ /grave (`)
+ /ring (*)
+ /tilde (~)
+.chars.def
+
+ % Encode the ISO accented characters.
+mark 192 1 255
+ { ISOLatin1Encoding exch get =string cvs
+ dup 0 1 getinterval 1 index dup length 1 sub 1 exch getinterval
+ .char.map 2 index known .char.map 2 index known and
+ { .char.map 3 -1 roll get .char.map 3 -1 roll get concatstrings
+ .char.map 3 1 roll put
+ }
+ { pop pop pop
+ }
+ ifelse
+ }
+for .chars.def
+
+% Encode the remaining standard and ISO alphabetic characters.
+
+mark
+ /AE (AE) /Eth (DH) /OE (OE) /Thorn (Th)
+ /ae (ae) /eth (dh)
+ /ffi (ffi) /ffl (ffl) /fi (fi) /fl (fl)
+ /germandbls (ss) /oe (oe) /thorn (th)
+.chars.def
+
+% Encode the other standard and ISO characters.
+
+mark
+ /brokenbar (|) /bullet (*) /copyright ((C)) /currency (#)
+ /dagger (#) /daggerdbl (##) /degree (o) /divide (/) /dotaccent (.)
+ /dotlessi (i)
+ /ellipsis (...) /emdash (--) /endash (-) /exclamdown (!)
+ /florin (f) /fraction (/)
+ /guillemotleft (<<) /guillemotright (>>)
+ /guilsinglleft (<) /guilsinglright (>) /hungarumlaut ("") /logicalnot (~)
+ /macron (_) /minus (-) /mu (u) /multiply (*)
+ /ogonek (,) /onehalf (1/2) /onequarter (1/4) /onesuperior (1)
+ /ordfeminine (-a) /ordmasculine (-o)
+ /paragraph (||) /periodcentered (*) /perthousand (o/oo) /plusminus (+-)
+ /questiondown (?) /quotedblbase (") /quotedblleft (") /quotedblright (")
+ /quotesinglbase (,) /quotesingle (') /registered ((R))
+ /section ($) /sterling (#)
+ /threequarters (3/4) /threesuperior (3) /trademark ((TM)) /twosuperior (2)
+ /yen (Y)
+.chars.def
+
+% Encode a few common Symbol characters.
+
+mark
+ /asteriskmath (*) /copyrightsans ((C)) /copyrightserif ((C))
+ /greaterequal (>=) /lessequal (<=) /registersans ((R)) /registerserif ((R))
+ /trademarksans ((TM)) /trademarkserif ((TM))
+.chars.def
+
+%%* Add a few characters from StandardEncoding and ISOLatin1Encoding
+%%* that were missing.
+
+mark
+ /cent (c)
+ /guilsinglleft (<)
+ /guilsinglright (>)
+ /breve (*)
+ /Lslash (L/)
+ /lslash (l/)
+.chars.def
+
+%%* Define the OT1Encoding and T1Encoding vectors for use with dvips
+%%* files. Unfortunately, there's no way of telling what font is
+%%* really being used within a dvips document, so we can't provide an
+%%* appropriate encoding for each individual font. Instead, we'll
+%%* just provide support for the two most popular text encodings, the
+%%* OT1 and T1 encodings, and just accept the fact that any font not
+%%* using one of those encodings will be rendered as gibberish.
+%%*
+%%* OT1 is Knuth's 7-bit encoding for the CMR text fonts, while T1
+%%* (aka the Cork encoding) is the 8-bit encoding used by the DC
+%%* fonts, a preliminary version of the proposed Extended Computer
+%%* Modern fonts. Unfortunately, T1 is not a strict extension of OT1;
+%%* they differ in positions 8#000 through 8#040, 8#074, 8#076, 8#134,
+%%* 8#137, 8#173, 8#174, 8#175 and 8#177, so we can't use the same
+%%* vector for both.
+%%*
+%%* Of course, we also can't reliably tell the difference between an
+%%* OT1-encoded font and a T1-encoded font based on the information in
+%%* a dvips-created PostScript file. As a best-guess solution, we'll
+%%* use the T1 encoding if the font contains any characters in
+%%* positions above 8#177 and the OT1 encoding if it doesn't.
+
+/T1Encoding 256 array def
+
+/OT1Encoding 256 array def
+
+%%* T1Encoding shares a lot with StandardEncoding, so let's start
+%%* there.
+
+StandardEncoding T1Encoding copy pop
+
+/OT1.encode {
+ counttomark
+ 2 idiv
+ { OT1Encoding 3 1 roll put }
+ repeat
+ cleartomark
+} def
+
+/T1.encode {
+ counttomark
+ 2 idiv
+ { T1Encoding 3 1 roll put }
+ repeat
+ cleartomark
+} def
+
+mark
+ 8#000 /grave
+ 8#001 /acute
+ 8#002 /circumflex
+ 8#003 /tilde
+ 8#004 /dieresis
+ 8#005 /hungarumlaut
+ 8#006 /ring
+ 8#007 /caron
+
+ 8#010 /breve
+ 8#011 /macron
+ 8#012 /dotaccent
+ 8#013 /cedilla
+ 8#014 /ogonek
+ 8#015 /quotesinglbase
+ 8#016 /guilsinglleft
+ 8#017 /guilsinglright
+
+ 8#020 /quotedblleft
+ 8#021 /quotedblright
+ 8#022 /quotedblbase
+ 8#023 /guillemotleft
+ 8#024 /guillemotright
+ 8#025 /endash
+ 8#026 /emdash
+ 8#027 /cwm
+
+ 8#030 /perthousandzero
+ 8#031 /dotlessi
+ 8#032 /dotlessj
+ 8#033 /ff
+ 8#034 /fi
+ 8#035 /fl
+ 8#036 /ffi
+ 8#037 /ffl
+
+%% 8#040 through 8#176 follow StandardEncoding
+
+ 8#177 /hyphen
+T1.encode
+
+mark
+ 8#200 /Abreve
+ 8#201 /Aogonek
+ 8#202 /Cacute
+ 8#203 /Ccaron
+ 8#204 /Dcaron
+ 8#205 /Ecaron
+ 8#206 /Eogonek
+ 8#207 /Gbreve
+ 8#210 /Lacute
+ 8#211 /Lcaron
+ 8#212 /Lslash
+ 8#213 /Nacute
+ 8#214 /Ncaron
+ 8#215 /Eng
+ 8#216 /Ohungarumlaut
+ 8#217 /Racute
+ 8#220 /Rcaron
+ 8#221 /Sacute
+ 8#222 /Scaron
+ 8#223 /Scedilla
+ 8#224 /Tcaron
+ 8#225 /Tcedilla
+ 8#226 /Uhungarumlaut
+ 8#227 /Uring
+ 8#230 /Ydieresis
+ 8#231 /Zacute
+ 8#232 /Zcaron
+ 8#233 /Zdot
+ 8#234 /IJ
+ 8#235 /Idot
+ 8#236 /dbar
+ 8#237 /section
+ 8#240 /abreve
+ 8#241 /aogonek
+ 8#242 /cacute
+ 8#243 /ccaron
+ 8#244 /dcaron
+ 8#245 /ecaron
+ 8#246 /eogonek
+ 8#247 /gbreve
+ 8#250 /lacute
+ 8#251 /lcaron
+ 8#252 /lslash
+ 8#253 /nacute
+ 8#254 /ncaron
+ 8#255 /eng
+ 8#256 /ohungarumlaut
+ 8#257 /racute
+ 8#260 /rcaron
+ 8#261 /sacute
+ 8#262 /scaron
+ 8#263 /scedilla
+ 8#264 /tcaron
+ 8#265 /tcedilla
+ 8#266 /uhungarumlaut
+ 8#267 /uring
+ 8#270 /ydieresis
+ 8#271 /zacute
+ 8#272 /zcaron
+ 8#273 /zdot
+ 8#274 /ij
+ 8#275 /exclamdown
+ 8#276 /questiondown
+ 8#277 /sterling
+
+ 8#300 /Agrave
+ 8#301 /Aacute
+ 8#302 /Acircumflex
+ 8#303 /Atilde
+ 8#304 /Adieresis
+ 8#305 /Aring
+ 8#306 /AE
+ 8#307 /Ccedilla
+ 8#310 /Egrave
+ 8#311 /Eacute
+ 8#312 /Ecircumflex
+ 8#313 /Edieresis
+ 8#314 /Igrave
+ 8#315 /Iacute
+ 8#316 /Icircumflex
+ 8#317 /Idieresis
+ 8#320 /Eth
+ 8#321 /Ntilde
+ 8#322 /Ograve
+ 8#323 /Oacute
+ 8#324 /Ocircumflex
+ 8#325 /Otilde
+ 8#326 /Odieresis
+ 8#327 /OE
+ 8#330 /Oslash
+ 8#331 /Ugrave
+ 8#332 /Uacute
+ 8#333 /Ucircumflex
+ 8#334 /Udieresis
+ 8#335 /Yacute
+ 8#336 /Thorn
+ 8#337 /Germandbls
+
+ 8#340 /agrave
+ 8#341 /aacute
+ 8#342 /acircumflex
+ 8#343 /atilde
+ 8#344 /adieresis
+ 8#345 /aring
+ 8#346 /ae
+ 8#347 /ccedilla
+ 8#350 /egrave
+ 8#351 /eacute
+ 8#352 /ecircumflex
+ 8#353 /edieresis
+ 8#354 /igrave
+ 8#355 /iacute
+ 8#356 /icircumflex
+ 8#357 /idieresis
+ 8#360 /eth
+ 8#361 /ntilde
+ 8#362 /ograve
+ 8#363 /oacute
+ 8#364 /ocircumflex
+ 8#365 /otilde
+ 8#366 /odieresis
+ 8#367 /oe
+ 8#370 /oslash
+ 8#371 /ugrave
+ 8#372 /uacute
+ 8#373 /ucircumflex
+ 8#374 /udieresis
+ 8#375 /yacute
+ 8#376 /thorn
+ 8#377 /germandbls
+
+T1.encode
+
+%%* Now copy OT1Encoding into T1Encoding and make a few changes.
+
+T1Encoding OT1Encoding copy pop
+
+mark
+ 8#000 /Gamma
+ 8#001 /Delta
+ 8#002 /Theta
+ 8#003 /Lambda
+ 8#004 /Xi
+ 8#005 /Pi
+ 8#006 /Sigma
+ 8#007 /Upsilon
+
+ 8#010 /Phi
+ 8#011 /Psi
+ 8#012 /Omega
+ 8#013 /ff
+ 8#014 /fi
+ 8#015 /fl
+ 8#016 /ffi
+ 8#017 /ffl
+
+ 8#020 /dotlessi
+ 8#021 /dotlessj
+ 8#022 /grave
+ 8#023 /acute
+ 8#024 /caron
+ 8#025 /breve
+ 8#026 /macron
+ 8#027 /ring
+
+ 8#030 /cedilla
+ 8#031 /germandbls
+ 8#032 /ae
+ 8#033 /oe
+ 8#034 /oslash
+ 8#035 /AE
+ 8#036 /OE
+ 8#037 /Oslash
+
+ 8#040 /polishslash
+
+ 8#042 /quotedblright
+
+ 8#074 /exclamdown
+ 8#076 /questiondown
+
+ 8#134 /quotedblleft
+ 8#137 /dotaccent
+
+ 8#173 /endash
+ 8#174 /emdash
+ 8#175 /hungarumlaut
+ 8#177 /dieresis
+OT1.encode
+
+%%* And add a few characters from the OT1Encoding
+
+mark
+ /Gamma (\\Gamma )
+ /Delta (\\Delta )
+ /Theta (\\Theta )
+ /Lambda (\\Lambda )
+ /Xi (\\Xi )
+ /Pi (\\Pi )
+ /Sigma (\\Sigma )
+ /Upsilon (\\Upsilon )
+
+ /Phi (\\Phi )
+ /Psi (\\Psi )
+ /Omega (\\Omega )
+
+ /dotlessj (j)
+ /ff (ff)
+
+ /cwm ()
+
+ /perthousandzero (0)
+
+ /polishslash ()
+
+ /Abreve (A*)
+ /Aogonek (A,)
+ /Cacute (C')
+ /Ccaron (C^)
+ /Dcaron (D^)
+ /Ecaron (E^)
+ /Eogonek (E,)
+ /Gbreve (G*)
+ /Lacute (L')
+ /Lcaron (L^)
+ /Nacute (N')
+ /Ncaron (N^)
+ /Eng (NG)
+ /Ohungarumlaut (O"")
+ /Racute (R')
+ /Rcaron (R^)
+ /Sacute (S')
+ /Scaron (S^)
+ /Scedilla (S,)
+ /Tcaron (T^)
+ /Tcedilla (T,)
+ /Uhungarumlaut (U"")
+ /Uring (U*)
+ /Ydieresis (Y")
+ /Zacute (Z')
+ /Zcaron (Z^)
+ /Zdot (Z.)
+ /IJ (IJ)
+ /Idot (I.)
+ /dbar (d-)
+ /abreve (a*)
+ /aogonek (a,)
+ /cacute (c')
+ /ccaron (c^)
+ /dcaron (d^)
+ /ecaron (e^)
+ /eogonek (e,)
+ /gbreve (g*)
+ /lacute (l')
+ /lcaron (l^)
+ /nacute (n')
+ /ncaron (n^)
+ /eng (ng)
+ /ohungarumlaut (o"")
+ /racute (r')
+ /rcaron (r^)
+ /sacute (s')
+ /scaron (s^)
+ /scedilla (s,)
+ /tcaron (t^)
+ /tcedilla (t,)
+ /uhungarumlaut (u"")
+ /uring (u*)
+ /zacute (z')
+ /zcaron (z^)
+ /zdot (z.)
+ /ij (ij)
+ /Germandbls (SS)
+.chars.def
+
+%%* We extend the df-tail command to stick in an Encoding vector (see
+%%* above for a discussion of the T1 and OT1 encodings), put in a
+%%* FontName (which will just be dvips's name for the font, i.e., Fa,
+%%* Fb, etc.) and give each font a separate FontBBox instead of
+%%* letting them all share a single one.
+
+/dvips.df-tail % id numcc maxcc df-tail
+ {
+ /nn 9 dict N
+ nn begin
+ %%
+ %% Choose an encoding based on the highest position occupied.
+ %%
+ dup 128 gt { T1Encoding } { OT1Encoding } ifelse
+ /Encoding X
+ /FontType 3 N
+ %%
+ %% It's ok for all the fonts to share a FontMatrix, but they
+ %% need to have separate FontBBoxes
+ %%
+ /FontMatrix fntrx N
+ /FontBBox [0 0 0 0] N
+ string /base X
+ array /BitMaps X
+ %%
+ %% And let's throw in a FontName for good measure
+ %%
+ dup ( ) cvs
+ %%
+ %% Make sure each font gets it own private FontName. -- dmj,
+ %% 12/23/97
+ %%
+ dup length string copy
+ /FontName X
+ /BuildChar {CharBuilder} N
+ end
+ dup { /foo setfont }
+ 2 array copy cvx N
+ load
+ 0 nn put
+ /ctr 0 N
+ [
+} def
+
+%%* This is functionally equivalent to dvips's /D procedure, but it
+%%* also calculates the Font Bounding Box while defining the
+%%* characters.
+
+/dvips.D % char-data ch D - : define character bitmap in current font
+{
+ /cc X % char-data
+ dup type /stringtype ne {]} if % char-data
+
+ /ch-xoff where
+ { pop }
+ { dup /Cd exch def
+ /ch-width { Cw } def
+ /ch-height { Ch } def
+ /ch-xoff { Cx } def
+ /ch-yoff { Cy } def
+ /ch-dx { Cdx } def
+ } ifelse
+ /ch-data X
+ nn /base get cc ctr put % (adds ctr to cc'th position of BASE)
+ nn /BitMaps get
+ ctr
+ ch-data % BitMaps ctr char-data
+ sf 1 ne {
+ dup dup length 1 sub dup 2 index S get sf div put
+ } if
+ put % puts char-data into BitMaps at index ctr
+ /ctr ctr 1 add N
+%%
+%% Make sure the Font Bounding Box encloses the Bounding Box of the
+%% current character
+%%
+ nn /FontBBox get % BB
+
+ dup % calculate new llx
+ dup 0 get
+ ch-xoff
+ .min
+ 0 exch put
+
+ dup % calculate new lly
+ dup 1 get
+ ch-yoff ch-height sub
+ .min
+ 1 exch put
+
+ dup % calculate new urx
+ dup 2 get
+ ch-dx ch-width add
+ .max
+ 2 exch put
+
+ dup 3 get % calculate new ury
+ ch-yoff
+ .max
+ 3 exch put
+
+} def
+
+%%* Define start-hook to replace df-tail and D by our versions.
+%%* Unfortunately, the user can redefine start-hook and thus bypass
+%%* these changes, but I don't see an obvious way around that.
+
+userdict /start-hook {
+ TeXDict /df-tail /dvips.df-tail load bind put
+ TeXDict /D /dvips.D load bind put
+} put
+
+%%* Introduce a symbolic constant for hyphens. (Need to make
+%%* allowance for hyphen being in different place?)
+
+/.hyphen 45 def
+
+% Write out a string. If it ends in a letter and a hyphen,
+% don't write the hyphen, and set .show.last to a hyphen;
+% otherwise, set .show.last to the character (or \000 if it was a hyphen).
+/.show.write % <string>
+ {
+ dup length 1 ge
+ { dup dup length 1 sub get % string last_char
+ dup .hyphen eq % string last_char hyphen?
+ { % string last_char
+ 1 index length 1 gt
+ { 1 index dup length 2 sub get }
+ { //.show.last 0 get }
+ ifelse % string last_char prev-char
+ currentfont /Encoding get exch get % look up prev-char
+ //.letter.chars exch known % is it a letter?
+ { % Remove the hyphen % string last_char
+ exch % last_char string
+ dup length 1 sub % last_char string len-1
+ 0 exch getinterval % last_char string-1
+ exch % string-1 last_char
+ }
+ { pop 0 } % string 0
+ ifelse
+ }
+ if
+ //.show.last 0 3 -1 roll put % store last_char
+ % in .show.last
+ % If .show.last ==
+ % hyphen, then
+ % last char of
+ % previous string
+ % was a hyphen
+ }
+ if % string
+ currentfont /FontType get 0 ne
+ {
+ { % begin forall % c
+ dup % c c
+ currentfont /Encoding get % c c vec
+ exch get % c name
+ dup //.char.map exch known % c name bool
+ { exch pop }
+ { pop OT1Encoding exch get }
+ ifelse % name
+ //.char.map exch get % translation
+ .show.stdout exch writestring
+ }
+ forall
+ }
+ { (\0) dup 0 get 0 eq
+ { 0 1 put
+ (%stderr) (w) file dup
+ (*** Warning: composite font characters dumped without decoding.\n) writestring
+ closefile
+ }
+ { pop
+ }
+ ifelse
+ .show.stdout exch writestring
+ }
+ ifelse
+} odef
+
+/.showstring1 { % string
+ currentpoint .coord % string x y
+ 3 -1 roll dup .showwidth % x y string dx dy
+ 1 index % x y string dx dy dx
+ 0 rmoveto % x y string dx dy
+ .dcoord pop % x y string width
+ SIMPLE
+ { % x y string width
+ 2 index % x y string width y
+ //.show.y .iget % x y string width y old.y
+ %%*
+ %%* Replaced test "has y changed" by "has y changed by more
+ %%* than the current font height" so that subscripts and
+ %%* superscripts won't cause line/paragraph breaks
+ %%*
+ sub abs dup % x y string width dy dy
+ //.show.height .iget
+ gt
+ { % x y string width dy
+
+ %%* Vertical position has changed by more than the font
+ %%* height, so we now try to figure out whether we've
+ %%* started a new paragraph or merely a new line, using a
+ %%* variety of heuristics.
+
+ %%* If any of the following is true, we start a new
+ %%* paragraph:
+
+ %%* (a) the current vertical shift is more than 1.1 times
+ %%* the previous vertical shift, where 1.1 is an
+ %%* arbitrarily chosen factor that could probably be
+ %%* refined.
+
+ dup % x y string width dy dy
+ //.show.dy .iget 1.1 mul
+ gt
+ exch
+
+ %%* Save the new vertical shift
+
+ //.show.dy exch .iput
+
+ %%* (b) The vertical shift is more than 1.3 times the
+ %%* "size" of the current font. I've removed this
+ %%* test since it's not really very useful.
+
+%%* //.show.dy .iget
+%%* //.show.height .iget 1.4 mul
+%%* gt % x y string width bool
+%%* .show.height .iget 0 gt and % only perform test if font
+%%* % height is nonzero
+%%* or
+
+ %%* (c) the first character of the new line is one of the
+ %%* .break.chars
+
+ 2 index length % x y string width newpar? len
+ 0 gt % x y string width newpar? len>0?
+ {
+ 2 index 0 get % x y string width newpar? s
+ currentfont /Encoding get
+ exch get % x y string width newpar? s_enc
+ //.break.chars exch known { pop true } if
+ }
+ if % x y string width newpar?
+
+ %%* (d) The indentation of the new line is greater than
+ %%* the indentation of the previous line.
+
+ 4 index
+ //.show.indent .iget
+ gt
+ or
+
+ %%* HOWEVER, if the line ends in a hyphen, we do NOT begin
+ %%* a new paragraph (cf. comment at end of BF2). --dmj,
+ %%* 12/23/97
+
+ //.show.last 0 get .hyphen ne
+ and
+
+ % newpar?
+ { (\n\n) } % Paragraph
+ { % Line
+ %%*
+ %%* BF2: If last character on a line is
+ %%* a hyphen, we omit the hyphen and
+ %%* run the lines together. Of
+ %%* course, this will fail if a word
+ %%* with an explicit hyphen (e.g.,
+ %%* X-ray) is split across two lines.
+ %%* Oh, well. (What should we do
+ %%* about a hyphen that ends a
+ %%* "paragraph"? Perhaps that should
+ %%* inhibit a paragraph break.)
+ %%*
+ //.show.last 0 get .hyphen eq
+ { () }
+ { ( ) }
+ ifelse % x y string width char
+ }
+ ifelse
+ //print
+
+ //.show.y 3 index .iput % x y string width
+ //.show.x 4 index .iput % x y string width
+ //.show.indent 4 index .iput
+ }
+ { % x y string width dy
+ % If the word processor split a hyphenated word within
+ % the same line, put out the hyphen now.
+ pop
+ //.show.last 0 get .hyphen eq { (-) //print } if
+ }
+ ifelse
+ %%*
+ %%* If have moved more than 1 point to
+ %%* the right, interpret it as a
+ %%* space? This need to be looked at
+ %%* more closely.
+ %%*
+ 3 index % x y string width x
+ //.show.x .iget 10 add gt % x y string width bool
+ { ( ) //print }
+ if
+ % x y string width
+ 4 1 roll % width x y string
+ .show.write pop % width x
+ add //.show.x exch .iput % <empty>
+ }
+ { (S ) //print .show==4 }
+ ifelse
+} odef
+
+/.showstring
+ { dup () eq { pop } { .showstring1 } ifelse
+ } bind def
+
+% Redefine all the string display operators.
+
+/show {
+ .showfont
+ .showcolor
+ .showstring
+} codef
+
+% We define all the other operators in terms of .show1.
+
+/.show1.string ( ) def
+/.show1 { //.show1.string exch 0 exch put //.show1.string .showstring } odef
+/ashow
+ { .showfont .showcolor
+ { .show1 2 copy rmoveto } forall
+ pop pop
+ } codef
+/awidthshow
+ { .showfont .showcolor
+ { dup .show1 4 index eq { 4 index 4 index rmoveto } if
+ 2 copy rmoveto
+ }
+ forall
+ pop pop pop pop pop
+ } codef
+/widthshow
+ { .showfont .showcolor
+ //.show1.string 0 4 -1 roll put
+ { //.show1.string search not { exit } if
+ .showstring .showstring
+ 2 index 2 index rmoveto
+ } loop
+ .showstring pop pop
+ } codef
+/kshow
+ { .showfont .showcolor
+ %**************** Should construct a closure, in case the procedure
+ %**************** affects the o-stack.
+ { .show1 dup exec } forall pop
+ } codef
+
+% We don't really do the right thing with the Level 2 show operators,
+% but we do something semi-reasonable.
+/xshow { pop show } codef
+/yshow { pop show } codef
+/xyshow { pop show } codef
+/glyphshow
+ { currentfont /Encoding .knownget not { {} } if
+ 0 1 2 index length 1 sub
+ { % Stack: glyph encoding index
+ 2 copy get 3 index eq { exch pop exch pop null exit } if
+ pop
+ }
+ for null eq { (X) dup 0 4 -1 roll put show } { pop } ifelse
+ } codef
+
+end
+
+% Bind the operators we just defined, and all the others if we didn't
+% do it before.
+
+DELAYBIND { .bindnow } if
+
+% Make systemdict read-only if it wasn't already.
+
+systemdict wcheck { systemdict readonly pop } if
+
+% Restore the current local/global VM mode.
+
+exec
diff --git a/Master/tlpkg/tlgs/lib/ps2epsi.ps b/Master/tlpkg/tlgs/lib/ps2epsi.ps
new file mode 100644
index 00000000000..531e88eb05f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/ps2epsi.ps
@@ -0,0 +1,249 @@
+% Copyright (C) 1990, 2000 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: ps2epsi.ps 6300 2005-12-28 19:56:24Z giles $
+% Convert an arbitrary PostScript file to an EPSI file.
+%
+% Please do not contact these users if you have questions. They no longer
+% have the time, interest, or current expertise to keep this code working.
+% If you find bugs, please send proposed fixes to bug-gs@ghostscript.com.
+%
+% Bug fix 2002-04-20 by rayjj: Bounding box was incorrect since it depended
+% on the dither pattern and gray shade at the boundary. Changed to use
+% 8-bit grayscale preview image to allow correct bounding box (at the
+% expense of a 8x larger preview image). Also moved .setsafe until after
+% the device and file operations are complete (but still before the input
+% file is processed.
+% Bug fix 2000-04-11 by lpd: if a font didn't have a FontName (which is the
+% case for bitmap fonts produced by recent versions of dvips), setfont
+% caused an error.
+% Bug fix 8/21/99 by lpd: many of the margin and width computations were
+% wrong (off by 1). The code only "worked" because the bugs were
+% (mostly) in conservative directions.
+% Modified 3/17/98 by lpd to make it possible to run this file without
+% running the ps2epsi script first, for debugging.
+% Bug fix 9/29/97 by lpd <ghost@aladdin.com>: if the page size wasn't an
+% exact multiple of 8 bits, an incorrect bounding box (or a rangecheck
+% error) could occur.
+% Patched 7/26/95 by
+% Greg P. Kochanski <gpk@bell-labs.com>
+% to add many new DSC comments and make the comments conforming.
+% Original version contributed by
+% George Cameron <george@bio-medical-physics.aberdeen.ac.uk>
+%
+
+% Initialize, and redefine copypage and showpage.
+
+% ps2edict is normally defined in the pre-loaded code created by the
+% ps2epsi script.
+/ps2edict where { pop } { /ps2edict 25 dict def } ifelse
+ps2edict begin
+
+ % The main procedure
+ /ps2epsi
+ { % Open the file
+ outfile (w) file /epsifile exch def
+ % Get the device parameters
+ currentdevice getdeviceprops .dicttomark
+ /HWSize get aload pop
+ /devheight exch def
+ /devwidth exch def
+ matrix defaultmatrix
+ /devmatrix exch def
+ % Make a corresponding 8-bit deep memory device
+ devmatrix devwidth devheight
+ 256 string 0 1 255 { 1 index exch dup 255 exch sub put } for
+ makeimagedevice
+ /arraydevice exch def
+ arraydevice
+ % Turn on anti-aliasing
+ mark /TextAlphaBits 4 /GraphicsAlphaBits 4 6 -1 roll
+ putdeviceprops
+ setdevice % (does an erasepage)
+ /rowwidth devwidth def
+ /row rowwidth string def
+ /zerorow rowwidth string def % all zero
+ % Replace the definition of showpage
+ userdict /showpage { ps2edict begin epsipage end } bind put
+ userdict /setfont { ps2edict begin epsisetfont end } bind put
+ //systemdict /.setsafe known { .setsafe } if
+ } bind def
+
+ /epsifontdict 100 dict def
+
+ /epsisetfont
+ {
+ % code here keeps a list of font names in dictionary epsifontdict
+ /tmpfont exch def
+ tmpfont /FontName known {
+ /tmpfontname tmpfont /FontName get def
+ epsifontdict tmpfontname known not { epsifontdict tmpfontname 0 put } if
+ epsifontdict tmpfontname 2 copy get 1 add put
+ } if
+ tmpfont setfont
+ } bind def
+
+% Get a scan line from the memory device, zeroing any bits beyond
+% the device width.
+/getscanline { % <device> <y> <string> getscanline <string>
+ dup 4 1 roll copyscanlines pop
+ 16#ff00 devwidth 7 and neg bitshift 255 and
+ dup 0 ne {
+ 1 index dup length 1 sub 2 copy get 4 -1 roll and put
+ } {
+ pop
+ } ifelse
+} bind def
+
+/margintest { % <y-start> <step> <y-limit> margintest <y-non-blank>
+ % <y-start> <step> <y-limit> margintest -
+ { dup arraydevice exch row getscanline
+ zerorow ne { exit } if pop
+ } for
+} bind def
+
+
+ /epsiNameStr 200 string def
+ /epsiNpages 0 def
+ /epsiNpageStr 20 string def
+ /epsipage
+ {
+ /epsiNpages epsiNpages 1 add def
+ /loopcount devheight 1 sub def
+
+ % Find top margin -- minimum Y of non-blank scan line.
+ -1 0 1 loopcount margintest
+ dup -1 eq { (blank page!!\n) print quit }{ exch pop } ifelse
+ /tm exch def
+
+ % Find bottom margin -- maximum Y of non-blank scan line.
+ loopcount -1 0 margintest
+ /bm exch def
+
+ % Initialise limit variables
+ /loopcount rowwidth 1 sub def
+ /lm loopcount def
+ /rm 0 def
+
+ % Find left and right boundaries of image
+ tm 1 bm
+ { % Get more data
+ arraydevice exch row getscanline pop
+ % Scan from left to find first non-zero element
+ % We save first the element, then the index
+ -1 0 1 loopcount
+ { dup row exch get 0 ne { exch pop exit }{ pop } ifelse
+ } for
+ % If we found -1, row is blank ..
+ dup -1 ne
+ { % Find the leftmost index
+ dup lm lt
+ % If the new index is less, we save index and element
+ { /lm exch def } { pop } ifelse
+ % Now find the rightmost index
+ loopcount -1 0
+ { dup row exch get 0 ne { exit }{ pop } ifelse
+ } for
+ dup rm gt
+ % If the new index is greater, we save index and element
+ { /rm exch def } { pop } ifelse
+ } if
+ } for
+
+ % Calculate the bounding box values.
+ % Note that these must be corrected to produce closed-open intervals.
+ /llx lm def
+ /lly devheight bm sub 1 sub def
+ /urx rm 1 add def
+ /ury devheight tm sub def
+
+ % Write out the magic string and bounding box information
+ epsifile (%!PS-Adobe-2.0 EPSF-1.2\n) writestring
+ /epsititle where { pop epsifile epsititle writestring } if
+ /epsicreator where { pop epsifile epsicreator writestring } if
+ /epsicrdt where { pop epsifile epsicrdt writestring } if
+ /epsifor where { pop epsifile epsifor writestring } if
+ epsifile flushfile
+
+ % Write out the page count:
+ epsifile (%%Pages: ) writestring
+ epsifile epsiNpages epsiNpageStr cvs writestring
+ epsifile (\n) writestring
+ epsifile flushfile
+
+ % Write out the list of used fonts:
+ epsifile (%%DocumentFonts:) writestring
+ epsifontdict {
+ epsifile ( ) writestring
+ pop epsiNameStr cvs epsifile exch writestring
+ } forall
+ epsifile (\n) writestring
+ epsifile flushfile
+
+ epsifile (%%BoundingBox: ) writestring
+ epsifile llx write==only epsifile ( ) writestring
+ epsifile lly write==only epsifile ( ) writestring
+ epsifile urx write==only epsifile ( ) writestring
+ epsifile ury write==
+
+ % Define character and bit widths for the output line buffer:
+ /cwidth rm lm sub 1 add def
+ /out cwidth string def
+
+ epsifile (%%EndComments\n\n) writestring
+ epsifile (%%BeginProlog\n) writestring
+ epsifile (%%BeginPreview: ) writestring
+ epsifile cwidth write==only epsifile ( ) writestring
+ epsifile bm tm sub 1 add write==only epsifile ( 8 ) writestring
+ epsifile bm tm sub 1 add
+ cwidth 39 add 40 idiv mul write==
+ epsifile flushfile
+
+ gsave
+
+ tm 1 bm
+ { % Get a scan line interval from the array device
+ arraydevice exch row copyscanlines lm cwidth getinterval
+ % Write out the hex data as 40 bytes per line (82 chars)
+ 0 40 cwidth
+ { epsifile (% ) writestring
+ epsifile exch 2 index exch
+ dup cwidth exch sub 40 .min getinterval writehexstring
+ epsifile (\n) writestring
+ } for
+ pop
+ } for
+
+ epsifile (%%EndImage\n) writestring
+ epsifile (%%EndPreview\n) writestring
+ epsifile flushfile
+ grestore
+ erasepage initgraphics
+
+ DonePage 0 1 put
+ } bind def
+
+
+(outfile) getenv
+ { /outfile exch def
+ ps2epsi
+
+ /DonePage 1 string def
+ (%stdin) (r) file cvx execute0
+ DonePage 0 get 0 eq { showpage } if
+ } if
+
+end
+quit
diff --git a/Master/tlpkg/tlgs/lib/quit.ps b/Master/tlpkg/tlgs/lib/quit.ps
new file mode 100644
index 00000000000..eb5f288470a
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/quit.ps
@@ -0,0 +1 @@
+quit
diff --git a/Master/tlpkg/tlgs/lib/rollconv.ps b/Master/tlpkg/tlgs/lib/rollconv.ps
new file mode 100644
index 00000000000..2c1243444be
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/rollconv.ps
@@ -0,0 +1,372 @@
+%!
+% Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
+
+% $Id: rollconv.ps 6300 2005-12-28 19:56:24Z giles $
+% Utility program for converting Japanese fonts produced by Macromedia's
+% Rollup program to Type 0 fonts suitable for use with Ghostscript.
+%
+% Rollup produces the following files, where xxx is the font name:
+% xxx-H, xxx-SA, xxx-SB, xxx-SK, xxx-SR, xxx-UG
+% JIS83-1_COD
+% JIS83-1_CSA
+% The _COD and _CSA files are large files containing the actual
+% character outline data; they may theoretically be shared between
+% multiple fonts.
+%
+% rollconv.ps converts the above to files named:
+% fff.ps
+% fff.COD
+% fff.CSA
+% fff.CSR
+% where fff is a font file name provided by the user at conversion time.
+% The fff.ps file is the actual font file to be loaded with `run'
+% or placed in a Fontmap or a directory named by [GS_]FONTPATH;
+% the other two files must be present at runtime in a directory that is
+% on Ghostscript's search path (-I, GS_LIB, GS_LIB_DEFAULT).
+%
+% The normal way to invoke this program is
+% gsnd -- rollconv.ps xxx fff InDir CDir OutDir
+% (assuming that gsnd is an alias for gs -dNODISPLAY), where:
+% xxx is the font name;
+% fff is the base part of the output file name;
+% InDir is the name of the directory containing the xxx-* input files;
+% CDir is the name of the directory containing the _COD and _CSA
+% input files (typically the same as InDir);
+% OutDir is the name of the directory where the output should be written
+% (OutDir must already exist).
+% For example:
+% gsnd -- rollconv.ps HGGothicBPRO gothic /gs/k/rufonts/Gothic \
+% /gs/k/rufonts/Gothic /gs/k/gsfonts
+% To suppress output messages, you may insert -q:
+% gsnd -q -- rollconv.ps ...
+%
+% This program assumes that the files have been FTP'ed from a Macintosh and
+% therefore have 128 bytes of garbage at the beginning. If you have
+% transferred them in some manner that avoids this, change true to false
+% in the following line.
+/fromMac true def
+% The FontName of the converted font is xxx-83pv-RKSJ-H. In order to
+% use a converted font with Ghostscript, you may either load it explicitly
+% at run time, e.g.,
+% (gothic.ps) run
+% or you may add an entry to the Fontmap file, in the form:
+% /HGGothicBPRO-83pv-RKSJ-H (gothic.ps) ;
+% which will allow the font to be loaded automatically. After
+% loading the font, by either method, you can select it in the usual way:
+% /HGGothicBPRO-83pv-RKSJ-H findfont 36 scalefont setfont
+% or
+% /HGGothicBPRO-83pv-RKSJ-H 36 selectfont
+
+
+/macrfile % <filename> macrfile <file>
+ { (r) file
+ fromMac
+ { % Get rid of the initial Mac garbage (128 characters).
+ % The garbage at the end is unpredictable,
+ % so we'll just have to hope that it's all nulls.
+ dup =string 0 128 getinterval readstring pop pop
+ }
+ if
+ } bind def
+
+/convert % <FName> <OutBase> <InDir> <CDir> <OutDir> convert -
+ { /OutDir exch def
+ /CDir exch def
+ /InDir exch def
+ /OutBase exch def
+ /FName exch def
+
+ /inprefix InDir (/) concatstrings FName concatstrings (-) concatstrings def
+ /inh inprefix (H) concatstrings def
+
+ % Open the output file.
+
+/OutDot OutDir (/) concatstrings OutBase concatstrings (.) concatstrings def
+/outname OutDot (ps) concatstrings def
+QUIET not { (Writing ) print outname = flush } if
+/cdfromstr (\(pgfonts/) FName concatstrings (-JIS83-1_) concatstrings def
+/cdstr (\() OutBase concatstrings (.) concatstrings def
+/out outname (w) file def
+/buffer 65000 string def
+
+ % Copy the initial comments from the input file.
+
+inh macrfile
+ { dup =string readline pop
+ out 1 index writestring out (\n) writestring
+ (%%EndComments) eq { exit } if
+ }
+loop
+
+ % Write out our preamble.
+
+out (
+currentpacking true setpacking
+userdict /AltsysCFD3 known { (%END) .skipeof } if
+userdict /AltsysCFD3 25 dict dup begin
+/beint { 0 exch { exch 8 bitshift add } forall } bind def
+/rfile { findlibfile { exch pop } { (r) file } ifelse } bind def
+/str 500 string def
+/AltRO { } def
+/BuildCh % <font> <ccode> <bias> BuildCh -
+ { /bias exch def /ccode exch def begin % font
+ ccode dup 255 and dup bias lt exch 252 gt or { pop 127 } if
+ dup -8 bitshift -67 mul add % subfonts have 189 chars, not 256
+ bias sub buildch1
+ } bind def
+/BuildChr % <font> <ccode> BuildChr -
+ { /ccode exch def begin % font
+ ccode buildch1
+ } bind def
+/buildch1
+ { 6 mul PGOffsets add
+ FileNames 0 get rfile dup dup 4 -1 roll setfileposition
+ (xxxxxx) readstring pop exch closefile
+ dup 1 3 getinterval beint % COD offset
+ exch 4 2 getinterval beint % length
+ dup 0 eq
+ { pop pop currentdict end
+ 1000 0 0 0 1 1 0 -1000 500 1000 setcachedevice2
+ }
+ { dup str length gt { /str 1 index string store } if
+ FileNames 1 get rfile dup dup % offset length file file file
+ 5 -1 roll setfileposition % length file file
+ str 0 5 -1 roll getinterval readstring pop pop closefile
+ currentdict end ccode str 1183615869 internaldict /CCRun get exec
+ }
+ ifelse
+ } bind def
+/privates 100 dict def
+/BuildPr % <stdhw> <stdvw> BuildPr <dict>
+ { 2 copy 1000 mul add privates 1 index known
+ { privates exch get 3 1 roll pop pop
+ }
+ { 7 dict begin
+ /MinFeature{16 16}executeonly def
+ /BlueValues BlueValues def
+ /StdVW 3 -1 roll 1 array astore def
+ /StdHW 3 -1 roll 1 array astore def
+ /password 5839 def
+ /LanguageGroup 1 def
+ /Subrs Subrs def
+ currentdict readonly end
+ privates 2 index 2 index put exch pop
+ }
+ ifelse
+ } bind def
+/FullEncoding
+ systemdict { pop } forall
+ systemdict length 512 sub 1 255 { (x) dup 0 4 -1 roll put cvn } for
+768 packedarray def
+/BlueValues[-250 -250 1100 1100]readonly def
+/BuildChar{AltsysCFD3 begin 64 BuildCh end}bind def
+/CharStrings 1 dict
+dup /.notdef (¿1pyÊ8å) noaccess put
+readonly def
+/CDevProc
+ { pop pop pop pop 0 exch -1000 exch 2 div currentfont /FontBBox get 3 get
+ } bind def
+/FontMatrix[0.001 0.0 0.0 0.001 0.0 0.0]readonly def
+/Subrs [
+(¿1p|=-“D\âR) noaccess
+(¿1py¼öUz) noaccess
+(¿1py½Äži) noaccess
+(¿1pù) noaccess
+(¿1p|35r·I) noaccess
+] noaccess def
+end put
+%END
+) writestring
+
+ % Locate and copy the definition of NotDefFont.
+
+out (
+FontDirectory /NotDefFont known { (%END) .skipeof } if
+) writestring
+ { dup =string readline pop
+ dup (/NotDefFont) eq { exit } if pop
+ }
+loop out exch writestring out (\n) writestring
+ { dup =string readline pop
+ (definefont) search { pop pop pop exit } if
+ out exch writestring out (\n) writestring
+ }
+loop out (definefont pop
+%END
+) writestring
+
+ % Copy the definitions of the subfonts, moving the
+ % CharStrings of the Roman supplement to an external file.
+ % Stack for pattern procedures: infile line
+
+/CSRName OutDot (CSR) concatstrings def
+/csr CSRName (w) file def
+QUIET not { (Writing ) print CSRName = flush } if
+
+/encoding 256 array def
+
+/patterns [
+ % Patterns specific to the Roman supplement, in which
+ % the outlines are in an eexec section.
+ { (/Encoding 256 array) {
+ pop out (/Encoding ) writestring
+ { dup buffer readline pop
+ dup (dup) search { exit } if pop pop
+ }
+ loop
+ { % Stack: infile dupline postdup (dup) predup
+ pop pop exch pop
+ % The top element of the stack is a string beginning with
+ % an index and value to put into the Encoding.
+ token pop exch token pop exch pop encoding 3 1 roll put
+ dup buffer readline pop
+ dup (dup) search not { pop exit } if
+ }
+ loop
+ out encoding cvx write== out ( cvlit ) writestring
+ out exch writestring out (\n) writestring
+ } }
+ { (/FontType 1 def) {
+ pop out (/FontType 4 def\n) writestring
+ out (/BuildChar{AltsysCFD3 begin BuildChr end}bind def\n) writestring
+ out (/FileNames[) writestring
+ 2 { out OutBase (.CSR) concatstrings write==only } repeat
+ out (]def\n) writestring
+ } }
+ { (currentfile eexec) {
+ pop out (systemdict begin\n) writestring
+ dup //.eexec_param_dict /eexecDecode filter
+ } }
+ { (dup/CharStrings ) {
+ % Copy the individual CharStrings to the CSR file,
+ % recording the lengths and offsets.
+ pop out (dup/CharStrings AltsysCFD3 /CharStrings get put\n) writestring
+ /offsets 256 dict def
+ { dup token pop % char name
+ dup dup type /nametype eq exch xcheck not and not { pop exit } if
+ 1 index token pop % length of binary data
+ 2 index token pop pop % skip RD
+ 2 index buffer 0 3 index getinterval readstring pop % charstring
+ offsets 3 index csr fileposition 16 bitshift 4 index add put
+ csr exch writestring pop pop
+ dup buffer readline pop pop % skip ND
+ }
+ loop
+ % We skipped the 'end'; skip the 'readonly put' as well.
+ 2 { dup token pop pop } repeat
+ out (dup/PGOffsets ) writestring
+ out csr fileposition write=only
+ out ( put\n) writestring
+ encoding
+ { offsets exch .knownget not { 0 } if
+ 2 { csr 0 write } repeat
+ 4 { dup -24 bitshift csr exch write 8 bitshift } repeat pop
+ }
+ forall
+ } }
+ { (/OtherSubrs[) {
+ pop
+ { dup buffer readline pop
+ (]noaccess def) search { pop pop pop exit } if pop
+ }
+ loop
+ } }
+ { (/Subrs 5 array) {
+ pop out (/Subrs AltsysCFD3 /Subrs get def\n) writestring
+ 6 { dup buffer readline pop pop } repeat
+ } }
+ { (currentfile closefile) {
+ pop out (end % systemdict\n) writestring
+ closefile
+ } }
+ % Patterns for other supplements.
+ { (pgfonts/) {
+ { cdfromstr search not { exit } if
+ out exch writestring pop out cdstr writestring
+ }
+ loop out exch writestring out (\n) writestring
+ } }
+ { (/BuildChar{AltsysCFD3 begin 64 BuildCh end}bind def) {
+ pop out (\t/BuildChar AltsysCFD3 /BuildChar get def\n) writestring
+ } }
+ { (/CDevProc{pop pop pop pop 0 exch -1000 exch 2 div ) {
+ pop out (\t/CDevProc AltsysCFD3 /CDevProc get def\n) writestring
+ } }
+ { (/CharStrings 1 dict dup begin) {
+ pop out (\t/CharStrings AltsysCFD3 /CharStrings get def\n) writestring
+ 2 { dup buffer readline pop pop } repeat
+ } }
+ { (/FontMatrix[0.001 0.0 0.0 0.001 0.0 0.0]def) {
+ pop out (\t/FontMatrix AltsysCFD3 /FontMatrix get def\n) writestring
+ } }
+ { (/Private 14 dict dup begin) {
+ pop out (\t/Private) writestring
+ { dup buffer readline pop
+ (end def) search { pop pop pop exit } if
+ (/Std) search
+ { pop pop dup length 3 sub 3 exch getinterval
+ (]) search pop out ( ) writestring out exch writestring pop
+ }
+ if pop
+ }
+ loop out ( AltsysCFD3 begin BuildPr end def\n) writestring
+ } }
+ { (UniqueID) { pop } }
+ { () {
+ out exch writestring out (\n) writestring
+ } }
+] def
+[ (SR) (SA) (SK) (SB) (UG) ]
+ { 0 1 255 { encoding exch /.notdef put } for
+ inprefix exch concatstrings macrfile
+ { dup buffer readline not { pop exit } if
+ /patterns load
+ { 2 copy 0 get search { pop pop pop 1 get exec exit } if pop pop }
+ forall
+ }
+ loop closefile
+ }
+forall
+csr closefile
+
+ % Copy the definition of the root font.
+
+dup buffer readstring pop out exch writestring closefile
+out (
+setpacking
+) writestring
+out closefile
+
+ % Remove the Mac garbage from the outline files.
+
+[ (COD) (CSA) ]
+ { CDir (/) concatstrings (JIS83-1_) concatstrings
+ 1 index concatstrings macrfile
+ exch OutDot exch concatstrings
+ QUIET not { (Writing ) print dup = flush } if
+ (w) file
+ % Stack: infile outfile
+ { 1 index buffer readstring exch
+ % Stack: infile outfile noteof substring
+ 2 index exch writestring not { exit } if
+ }
+ loop closefile closefile
+ }
+forall
+
+ } bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 5 eq
+ { convert
+ QUIET not { (Done.\n) print flush } if
+ }
+ { cleartomark
+ (Usage: gsnd -- rollconv.ps FName OutBase InDir CDir OutDir\n) print
+ ( e.g.: gsnd -- rollconv.ps HGMinchoE mincho HGfonts/Mincho HGfonts/Mincho HGfonts/gs\n) print flush
+ mark
+ }
+ ifelse
+ }
+if pop
diff --git a/Master/tlpkg/tlgs/lib/showchar.ps b/Master/tlpkg/tlgs/lib/showchar.ps
new file mode 100644
index 00000000000..d6ef66c6ba0
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/showchar.ps
@@ -0,0 +1,93 @@
+% Copyright (C) 1993, 1994, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: showchar.ps 6300 2005-12-28 19:56:24Z giles $
+% showchar.ps
+% Show the outline and rasterized forms of a character.
+
+/F where { pop } { /F /Times-Roman def } ifelse
+/P where { pop } { /P 16 def } ifelse
+/Rx where { pop } { /Rx 100 def } ifelse
+/Ry where { pop } { /Ry 100 def } ifelse
+/Cs where { pop } { /Cs (M) def } ifelse
+/Pr where { pop } { /Pr false def } ifelse
+/Delay where { pop } { /Delay 0 def } ifelse
+
+0 setgray
+(markpath.ps) runlibfile
+(markhint.ps) runlibfile
+/mmx [1 0 0 1 0 0] def
+/getpath % - getpath <pathproc>
+ { [
+ { /moveto cvx } { /lineto cvx } { /curveto cvx } { /closepath cvx }
+ pathforall
+ ] cvx
+ } def
+/bitselectfont % <fontname> <scale> bitselectfont -
+ { exch findfont exch scalefont setfont
+ % Compute the bounding box in device coordinates.
+ gsave [Rx 72 div 0 0 Ry 72 div 0 0] setmatrix
+ currentfont /FontMatrix get concat
+ currentfont /FontBBox get aload pop
+ transform ceiling cvi /ury exch def ceiling cvi /urx exch def
+ transform floor cvi /lly exch def floor cvi /llx exch def
+ /bbx urx llx sub def /bby ury lly sub def
+ grestore
+ } def
+/bitshow % <string> bitshow -
+ { /S exch def gsave
+ /W bbx 8 add 7 or 1 add def
+ /H bby 8 add def
+ /buf W 8 idiv string def
+ /M [Rx 72 div 0 0 Ry -72 div 4 llx sub H 4 sub] def
+ M W H <ff 00> makeimagedevice
+ /dev exch def
+ gsave dev setdevice
+ newpath 0 lly idtransform moveto
+ 0 setgray
+ gsave
+ /hpath S false charpath getpath def
+ grestore
+ S show grestore
+ 20 20 translate
+ 50000 Rx Ry .max P mul div dup scale
+ 0.7 setgray
+ 0 W H true M
+ { dup 1 add exch dev exch buf copyscanlines
+ } imagemask pop
+ 0 setlinewidth
+ gsave 0.5 1 0.5 setrgbcolor hpath exec mmx markpath grestore
+ 0 0.5 1 setrgbcolor hpath exec stroke
+ % Show the hints for Type 1 fonts also.
+ currentfont /FontType get 1 eq
+ { gsave 1 0 0 setrgbcolor
+ 0 lly M idtransform translate
+ currentfont /FontMatrix get
+ dup Pr markfonthints
+ currentfont /Encoding get S 0 get get exch Pr markcharhints
+ grestore
+ }
+ if
+ } def
+F P bitselectfont
+/S1 1 string def
+Cs
+ { /C exch def
+ currentfont /Encoding get C get /.notdef ne
+ { save S1 0 C put S1 bitshow
+ showpage restore
+ } if
+ } forall
+quit
diff --git a/Master/tlpkg/tlgs/lib/showpage.ps b/Master/tlpkg/tlgs/lib/showpage.ps
new file mode 100644
index 00000000000..0a6ae9a7e1f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/showpage.ps
@@ -0,0 +1 @@
+showpage
diff --git a/Master/tlpkg/tlgs/lib/stocht.ps b/Master/tlpkg/tlgs/lib/stocht.ps
new file mode 100644
index 00000000000..82e934dad6d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/stocht.ps
@@ -0,0 +1,62 @@
+% Copyright (C) 1999, 2000 Artifex Software, Inc. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: stocht.ps 8022 2007-06-05 22:23:38Z giles $
+% helper file to simplify use of Stochastic Halftone - uses ht_ccsto.ps
+
+% This file sets the /StochasticDefault /Halftone as the current
+% and the /Default halftoning, loading the Stochastic halftone
+% if required.
+
+% Stochastic halftoning is recommended for inkjet printers, and may
+% produce output as pleasing as the more computationally expensive
+% "error diffusion" that *some* device drivers provide.
+
+% For printing technologies other than inkjet, Stochastic halftoning
+% may not look better than standard screening. In particular, thermal
+% transfer and direct thermal tend to be better with standard ordered
+% screening methods. Some laser printers may produce "smoother"
+% looking gray shades with Stochastic halftoning. Try it, and if
+% you like it, use it.
+
+% Note that this /Default halftone can be overridden by PostScript
+% operators that set the screening or halftone (such as setscreen).
+
+% To make Stochastic Halftone be "sticky" so that other screening and
+% halftone setting in the subsequent PostScript will be ignored, use:
+% -c "<< /HalftoneMode 1 >> setuserparams"
+% on the command line prior to the file to be processed. For example,
+%
+% gs stocht.ps -c "<< /HalftoneMode 1 >> setuserparams" -f examples/tiger.eps
+
+% Alternatively, the command to set the /HalftoneMode userparam can be
+% concatenated to this file (see below).
+
+% =====================================================================
+% Try to get the previously defined resource
+{ /StochasticDefault /Halftone findresource } stopped
+{
+ pop pop
+ % Need to load the Stochastic Halftone using the lib file
+ (ht_ccsto.ps) runlibfile
+} if
+
+% If we didn't error out by now, then go ahead and define the /Default
+/StochasticDefault /Halftone findresource
+/Default exch /Halftone defineresource
+sethalftone % Use the halftone
+
+% Uncomment the next line to make the Stocahstic halftoning be "sticky"
+% << /HalftoneMode 1 >> setuserparams
diff --git a/Master/tlpkg/tlgs/lib/traceimg.ps b/Master/tlpkg/tlgs/lib/traceimg.ps
new file mode 100644
index 00000000000..91a9850b775
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/traceimg.ps
@@ -0,0 +1,42 @@
+% Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: traceimg.ps 6300 2005-12-28 19:56:24Z giles $
+% traceimg.ps
+% Trace the data supplied to the 'image' operator.
+
+% This code currently handles only the (Level 2) dictionary form of image,
+% with a single data source and 8-bit pixels.
+
+/traceimage % <dict> traceimage -
+ { currentcolorspace == (setcolorspace\n) print
+ (<<) print
+ dup { (\t) print exch ==only ( ) print == } forall
+ (>>\n) print flush
+ begin /i_left Width Height mul store /i_dict currentdict store end
+ { i_left 0 le { exit } if
+ i_dict /DataSource get exec
+ dup type /filetype eq
+ { i_buf 0 i_left 32 .min getinterval readstring pop
+ } if
+ dup (%stdout) (w) file exch writehexstring (\n) print flush
+ i_left exch length sub /i_left exch def
+ } loop
+ } bind odef
+
+/image /traceimage load def
+/i_left 0 def
+/i_dict null def
+/i_buf 32 string def
diff --git a/Master/tlpkg/tlgs/lib/traceop.ps b/Master/tlpkg/tlgs/lib/traceop.ps
new file mode 100644
index 00000000000..83e39f3b105
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/traceop.ps
@@ -0,0 +1,83 @@
+% Copyright (C) 1992, 1993, 1994, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: traceop.ps 6300 2005-12-28 19:56:24Z giles $
+% Trace individual operators or procedures.
+% <opref> is <opname> or <opname> <dict>
+% (dict defaults to dict where op is currently defined, if writable;
+% otherwise uses userdict)
+% <opref> traceop prints vmem usage before;
+% <opref> <numargs|preproc> prints arguments or runs proc before;
+% <opref> <numargs|preproc> <numresults|postproc>
+% also prints results or runs proc after.
+% If traceflush is true, flush the output after each printout.
+/traceflush true def
+
+currentpacking true setpacking
+.currentglobal true .setglobal
+
+% Define the default "before" action
+/tracebefore { vmstatus 3 traceprint pop pop pop } def
+
+% Define the default "after" action
+/traceafter { } def
+
+/traceprint {
+ dup type /integertype eq {
+ 1 sub -1 0 { ( ) print index ==only } for
+ } {
+ exec
+ } ifelse
+} bind def
+/traceend {
+ traceflush { flush } if
+} bind def
+/traceop {
+ userdict begin
+ dup type dup /nametype eq exch /dicttype eq or { { tracebefore } } if
+ 1 index type dup /nametype eq exch /dicttype eq or { { traceafter } } if
+ /.tpost exch def /.tpre exch def
+ dup type /dicttype ne {
+ dup where not { userdict 1 index {} put userdict } if
+ } if
+ dup dup wcheck not {
+ (Warning: substituting userdict for non-writable dictionary.) =
+ pop userdict
+ } if
+ /.tddict exch def /.tdict exch def /.tname exch cvlit def
+ .currentglobal [
+ .tname /=only cvx ( ) /print cvx
+ /.tpre load /traceprint cvx /traceend cvx
+ .tdict .tname get /.tdef 1 index cvlit def
+ dup xcheck {
+ dup type dup /arraytype eq exch /packedarraytype eq or {
+ /exec cvx
+ } if
+ } if
+ /.tpost load /traceprint cvx () /= cvx /traceend cvx
+ .tdef gcheck /.tpre load gcheck and /.tpost load gcheck and .setglobal
+ ] cvx
+ .tdef type /operatortype eq {
+ .tname exch .makeoperator
+ } if
+ exch .setglobal
+ .tddict exch .tname exch put
+ end % userdict
+} bind def
+/tracebind /bind load def % in case someone wants to put it back
+/bind { } def % disable
+
+.setglobal
+setpacking
diff --git a/Master/tlpkg/tlgs/lib/type1enc.ps b/Master/tlpkg/tlgs/lib/type1enc.ps
new file mode 100644
index 00000000000..8022f08374e
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/type1enc.ps
@@ -0,0 +1,65 @@
+% Copyright (C) 1992, 1993 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: type1enc.ps 6300 2005-12-28 19:56:24Z giles $
+% type1enc.ps
+% PostScript language versions of the Type 1 encryption/decryption algorithms.
+
+% This file is normally not needed with Ghostscript, since Ghostscript
+% implements these algorithms in C. For the specifications, see Chapter 7 of
+% "Adobe Type 1 Font Format," ISBN 0-201-57044-0, published by Addison-Wesley.
+
+/.type1crypt % <R> <from> <to> <proc> .type1crypt <R'> <to>
+ % (auxiliary procedure)
+ { 4 1 roll
+ 0 2 index length getinterval
+ 0 1 2 index length 1 sub
+ { % Stack: proc R from to index
+ 2 index 1 index get % proc R from to index C/P
+ 4 index -8 bitshift xor 3 copy put % proc R from to index P/C
+ 5 index exec % proc R from to C
+
+% Compute R' = ((R + C) * 52845 + 22719) mod 65536
+% without exceeding a 31-bit integer magnitude, given that
+% 0 <= R <= 65535 and 0 <= C <= 255.
+
+ 4 -1 roll add
+ dup 20077 mul % 52845 - 32768
+ exch 1 and 15 bitshift add % only care about 16 low-order bits
+ 22719 add 65535 and 3 1 roll
+ }
+ for exch pop 3 -1 roll pop
+ } bind def
+
+% <state> <fromString> <toString> .type1encrypt <newState> <toSubstring>
+% Encrypts fromString according to the algorithm for Adobe
+% Type 1 fonts, writing the result into toString.
+% toString must be at least as long as fromString or a
+% rangecheck error occurs. state is the initial state of
+% the encryption algorithm (a 16-bit non-negative
+% integer); newState is the new state of the algorithm.
+
+/.type1encrypt
+ { { exch pop } .type1crypt
+ } bind def
+
+% <state> <fromString> <toString> .type1decrypt <newState> <toSubstring>
+% Decrypts fromString according to the algorithm for Adobe
+% Type 1 fonts, writing the result into toString. Other
+% specifications are as for type1encrypt.
+
+/.type1decrypt
+ { { pop 2 index exch get } .type1crypt
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/type1ops.ps b/Master/tlpkg/tlgs/lib/type1ops.ps
new file mode 100644
index 00000000000..9647a90c98f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/type1ops.ps
@@ -0,0 +1,237 @@
+% Copyright (C) 1992, 1997, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: type1ops.ps 6300 2005-12-28 19:56:24Z giles $
+% type1ops.ps
+% Define the Type 1 and Type 2 font opcodes for use by Ghostscript utilities.
+
+% Define the default value of lenIV.
+% Note that this expects the current font to be on the dictionary stack.
+
+/lenIV { FontType 2 eq { -1 } { 4 } ifelse } def
+
+% ---------------- Encoding ---------------- %
+
+/Type1encode 70 dict
+
+ % Data types
+
+dup /nulltype {
+ pop ()
+} put
+dup /nametype {
+ Type1encode exch get
+} put
+dup /stringtype {
+} put
+dup /integertype {
+ dup dup -107 ge exch 107 le and {
+ 139 add (x) dup 0 4 -1 roll put
+ } {
+ dup dup -1131 ge exch 1131 le and {
+ dup 0 ge { 16#f694 } { neg 16#fa94 } ifelse add
+ (xx) dup dup 0 4 index -8 bitshift put
+ 1 4 -1 roll 255 and put
+ } {
+ (\377xxxx) 1 1 4 {
+ dup 8 mul 32 sub 3 index exch bitshift 255 and
+ 2 index 3 1 roll put
+ } for exch pop
+ } ifelse
+ } ifelse
+} put
+
+ % Operators
+
+% Identical or similar in Type 1 and Type 2.
+/c_hstem 1 def dup /hstem <01> put
+/c_vstem 3 def dup /vstem <03> put
+/c_vmoveto 4 def dup /vmoveto <04> put
+/c_rlineto 5 def dup /rlineto <05> put
+/c_hlineto 6 def dup /hlineto <06> put
+/c_vlineto 7 def dup /vlineto <07> put
+/c_rrcurveto 8 def dup /rrcurveto <08> put
+/c_callsubr 10 def /s_callsubr <0a> def dup /callsubr s_callsubr put
+/c_return 11 def dup /return <0b> put
+/c_escape 12 def
+ /ce_div 12 def /s_div <0c0c> def dup /div s_div put
+/c_endchar 14 def /s_endchar <0e> def dup /endchar s_endchar put
+/c_rmoveto 21 def dup /rmoveto <15> put
+/c_hmoveto 22 def dup /hmoveto <16> put
+/c_vhcurveto 30 def dup /vhcurveto <1e> put
+/c_hvcurveto 31 def dup /hvcurveto <1f> put
+% Only in Type 1.
+/c_closepath 9 def dup /closepath <09> put
+/c_hsbw 13 def /s_hsbw <0d> def dup /hsbw s_hsbw put
+ /ce_dotsection 0 def /s_dotsection <0c06> def dup /dotsection s_dotsection put
+ /ce_vstem3 1 def /s_vstem3 <0c01> def dup /vstem3 s_vstem3 put
+ /ce_hstem3 2 def /s_hstem3 <0c02> def dup /hstem3 s_hstem3 put
+ /ce_seac 6 def /s_seac <0c06> def dup /seac s_seac put
+ /ce_sbw 7 def /s_sbw <0c07> def dup /sbw s_sbw put
+ /ce_callothersubr 16 def /s_callothersubr <0c10> def dup /callothersubr s_callothersubr put
+ /ce_pop 17 def /s_pop <0c11> def dup /pop s_pop put
+ /ce_setcurrentpoint 33 def /s_setcurrentpoint <0c21> def dup /setcurrentpoint s_setcurrentpoint put
+ /s_setcurrentpoint_hmoveto s_setcurrentpoint <8b16> concatstrings def
+% Only in Type 2.
+dup /blend <10> put
+dup /hstemhm <12> put
+dup /hintmask <13> put
+dup /cntrmask <14> put
+dup /vstemhm <17> put
+dup /rcurveline <18> put
+dup /rlinecurve <19> put
+dup /vvcurveto <1a> put
+dup /hhcurveto <1b> put
+dup /callgsubr <1d> put
+ dup /and <0c03> put
+ dup /or <0c04> put
+ dup /not <0c05> put
+ dup /store <0c08> put
+ dup /abs <0c09> put
+ dup /add <0c0a> put
+ dup /sub <0c0b> put
+ dup /load <0c0d> put
+ dup /neg <0c0c> put
+ dup /eq <0c0f> put
+ dup /drop <0c12> put
+ dup /put <0c14> put
+ dup /get <0c15> put
+ dup /ifelse <0c16> put
+ dup /random <0c17> put
+ dup /mul <0c18> put
+ dup /sqrt <0c1a> put
+ dup /dup <0c1b> put
+ dup /exch <0c1c> put
+ dup /index <0c1d> put
+ dup /roll <0c1e> put
+ dup /hflex <0c22> put
+ dup /flex <0c23> put
+ dup /hflex1 <0c24> put
+ dup /flex1 <0c25> put
+
+readonly def
+
+% ---------------- Decoding ---------------- %
+
+/Type1decode 512 array
+
+Type1encode {
+ dup type /stringtype eq {
+ dup length 1 eq { 0 get } { 1 get 256 add } ifelse
+ % stack: array key code
+ exch 2 index 3 1 roll put
+ } {
+ pop pop
+ } ifelse
+} forall
+
+dup 12 {
+ dup read pop dup Type1decode exch 256 add get dup null ne
+ { exch pop }
+ { pop 2 string dup 0 12 put dup 1 4 -1 roll put }
+ ifelse
+} put
+dup 28 { % Type 2 only
+ dup read pop 128 xor 128 sub 8 bitshift
+ 1 index read pop add
+} put
+32 1 246 { 2 copy dup 139 sub put pop } for
+dup 247 { dup read pop 108 add } put
+dup 248 { dup read pop 364 add } put
+dup 249 { dup read pop 620 add } put
+dup 250 { dup read pop 876 add } put
+dup 251 { dup read pop 108 add neg } put
+dup 252 { dup read pop 364 add neg } put
+dup 253 { dup read pop 620 add neg } put
+dup 254 { dup read pop 876 add neg } put
+dup 255 { % Different for Type 1 and Type 2
+ dup read pop 128 xor 128 sub
+ 3 { 8 bitshift 1 index read pop add } repeat
+ FontType 2 eq { 65536.0 div } if
+} put
+
+readonly def
+
+% ---------------- Procedures ---------------- %
+
+% For these utilities, a CharString is represented by a sequence of
+% integers, reals, strings, and names, either in an array or on the stack.
+% Integers and reals represent themselves; strings are other data that
+% appears in the CharString; names are CharString operator names.
+% A CharString in an array is called a "charproc"; a CharString on
+% the stack is called a "charstack", and is delimited by a mark.
+% Individual elements are called "chartokens".
+
+% ------ Encoding ------ %
+
+% Get the string for a chartoken.
+% Note that this string may be overwritten by the next call.
+/chartoken_string { % <chartoken> chartoken_string <string>
+ dup type Type1encode exch get exec
+} bind def
+% Compute the length of a CharString.
+/chartoken_length { % <chartoken> chartoken_length <length>
+ chartoken_string length
+} bind def
+/charproc_length { % <charproc> charproc_length <length>
+ 0 exch { chartoken_length add } forall
+} bind def
+/charstack_length { % <charstack> charstack_length <charstack> <length>
+ counttomark 0 exch -1 1 { index chartoken_length add } for
+} bind def
+
+% Write a CharString to a file. Normally this will be a NullEncode filter
+% writing on a string of the correct length.
+/chartoken_write { % <file> <chartoken> chartoken_write -
+ chartoken_string writestring
+} bind def
+/charproc_write { % <file> <charproc> charproc_write -
+ { 1 index exch chartoken_write } forall pop
+} bind def
+% Note that the arguments of charstack_write are backwards.
+/charstack_write { % <charstack> <file> charstack_write -
+ counttomark 1 sub -1 1 { index 1 index exch chartoken_write } for
+ cleartomark
+} bind def
+
+% Convert a charproc or charstack to an *un*encrypted CharString.
+/charproc_string { % <charproc> charproc_string <string>
+ mark exch aload pop charstack_string
+} bind def
+/charstack_string { % <charstack> charstack_string <string>
+ charstack_length lenIV 0 gt {
+ lenIV add string
+ dup dup length lenIV sub lenIV exch getinterval % skip lenIV
+ } {
+ string
+ } ifelse
+ /NullEncode filter
+ exch 1 index counttomark 1 add 2 roll
+ charstack_write closefile
+% lenIV 0 ge { 4330 exch dup .type1encrypt exch pop readonly } if
+} bind def
+
+% ------ Decoding ------ %
+
+% Decode a CharString (unencrypted).
+/charstack_read { % <file> charstack_read <no-mark-charstack>
+ { dup read not { pop exit } if
+ Type1decode 1 index get dup null eq {
+ pop 1 string dup 0 4 -1 roll put
+ } {
+ exch pop exec
+ } ifelse exch
+ } loop
+} bind def
diff --git a/Master/tlpkg/tlgs/lib/uninfo.ps b/Master/tlpkg/tlgs/lib/uninfo.ps
new file mode 100644
index 00000000000..49de744c08c
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/uninfo.ps
@@ -0,0 +1,220 @@
+%!
+% Copyright (C) 1997 Aladdin Enterprises. All rights reserved
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: uninfo.ps 6300 2005-12-28 19:56:24Z giles $
+% uninfo.ps: Utilities for "printing" PostScript items, especially dictionaries
+% Usage:
+% (prefix-string) dict unprint
+
+% Maximum Print-Width
+/HSpwidth 80 def
+
+% any HScvs string
+/HScvs {
+% Number-Syntax
+ dup type % stack: any /anytype
+ dup /integertype eq 1 index /realtype eq or { pop
+ 16 string cvs
+ }{
+% Logical-Type
+ dup /booleantype eq { pop
+ 5 string cvs
+ }{
+% Identifiers
+ dup /nametype eq { pop
+ dup length 1 add string
+ dup 0 (/) putinterval
+ exch 1 index 1 1 index length 1 sub getinterval cvs pop
+ }{
+% Strings
+ dup /stringtype eq { pop
+% ------- Compute Length
+ 2 1 index { % stack: str len item
+ dup 32 lt 1 index 126 gt or { % need 4
+ pop 4 add
+ }{
+ dup 40 eq 1 index 41 eq or 1 index 92 eq or {
+ pop 2 add
+ }{
+ pop 1 add
+ } ifelse
+ } ifelse
+ } forall
+% ------- Allocate & Fill String
+ string dup 0 (\() putinterval 1
+ 3 -1 roll { % outstr pos item
+ dup 32 lt 1 index 126 gt or {
+ dup 7 le {
+ 2 index 2 index (\\00) putinterval
+ 8 3 index 3 index 3 add 1 getinterval cvrs
+ }{
+ dup 63 le {
+ 2 index 2 index (\\0) putinterval
+ 8 3 index 3 index 2 add 2 getinterval cvrs
+ }{
+ 2 index 2 index (\\) putinterval
+ 8 3 index 3 index 1 add 3 getinterval cvrs
+ } ifelse
+ } ifelse
+ pop 4 add
+ }{
+ dup 40 eq 1 index 41 eq or 1 index 92 eq or {
+ 2 index 2 index (\\) putinterval
+ exch 1 add exch
+ } if
+ 2 index exch 2 index exch put
+ 1 add
+ } ifelse
+ } forall
+ 1 index exch (\)) putinterval
+ }{ exch pop
+ dup length 1 add string
+ dup 0 (-) putinterval
+ exch 1 index 1 1 index length 1 sub getinterval cvs pop
+ dup dup length 4 sub (-) putinterval
+ 0 1 index length 3 sub getinterval
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+% int HSpindent - indent-spaces
+/HSpindent {
+ dup 0 gt {
+ 1 1 3 -1 roll { pop ( ) print } for
+ }{
+ pop
+ } ifelse
+} bind def
+
+% indent array HSaprint -> Print an Array
+/HSaprint {
+ dup type /arraytype eq {
+ ( [) print
+ exch 1 add dup 1 add
+ 3 -1 roll { % rind pos item
+ HScvs dup length % rind pos str len
+ dup 3 index add HSpwidth ge {
+ (\n) print
+ 3 index HSpindent
+ 3 -1 roll pop
+ 2 index add
+ exch
+ }{
+ ( ) print
+ 2 index add 1 add
+ 3 -1 roll pop
+ exch
+ } ifelse
+ print
+ } forall
+ ( ]) print
+ pop pop
+ }{
+ ( ) print
+ HScvs print pop
+ } ifelse
+ (\n) print
+} bind def
+
+% dict HSdnames dict names (creates sorted name-strings)
+/HSdnames {
+% Build namelist, stack: dic
+ dup length 0 eq {
+ []
+ }{
+ [ 1 index {
+ pop dup type /nametype eq {
+ dup length string cvs
+ }{
+ pop
+ } ifelse
+ } forall
+ ]
+% Sort the namelist, stack: dic nam
+ 0 1 2 index length 2 sub { % stack: dic nam I
+ 2 copy get % stack: pre dic nam I nam[I]
+ 1 index 1 add 1 4 index length 1 sub { % stack: dic nam I nam[I] J
+ 3 index 1 index get % dic nam I S[I] J S[J]
+ 2 index 1 index gt { % swap them
+ 4 index 2 index 4 index put
+ 4 index 4 index 2 index put
+ 3 1 roll
+ } if
+ pop pop
+ } for
+ pop pop
+ } for
+ } ifelse
+} bind def
+
+% string:prefix dict:which unprint
+/unprint {
+ HSdnames % pre dic nam
+% compute the maximum length
+ 0 1 index { % pre dic nam maxlen nam[I]
+ length 2 copy lt { exch } if pop
+ } forall
+% Print out all the items, stack: pre dic nam maxlen
+ (\n) print
+ exch { % pre dic maxlen nam[I]
+% no prefix yet, -> flush right
+ 3 index length 0 eq {
+ dup length 2 index exch sub HSpindent
+ }{
+ 3 index print (/) print
+ } ifelse
+% print the name
+ dup print
+% prefix: fill up with blanks
+ 3 index length 0 ne {
+ dup length 2 index exch sub HSpindent
+ } if
+% now print the item itself, stack: pre dic maxlen nam[I]
+ 2 index 1 index cvn get dup type % stack: pre dic maxlen nam[i] item typ
+% Dict-Syntax
+ dup /dicttype eq { pop % stack: pre dic maxlen nam[i] item
+ ( ) print dup HScvs print
+ 4 index length 0 eq { % brand new prefix
+ 2 index string 0 1 5 index 1 sub { 1 index exch 32 put } for
+ dup 4 index 4 index length sub 5 -1 roll putinterval
+ }{
+ 4 index length 1 add 2 index length add string
+ dup 0 7 index putinterval
+ dup 6 index length (/) putinterval
+ dup 6 index length 1 add 5 -1 roll putinterval
+ } ifelse
+ exch unprint
+ }{
+ 3 -1 roll pop % tack: pre dic maxlen item typ
+% Array-Syntax
+ dup /arraytype eq { pop % stack: pre dic maxlen item
+ 3 index length dup 0 ne { 1 add } if 2 index add
+ exch HSaprint
+ }{ pop
+ ( ) print
+ HScvs print
+ (\n) print
+ } ifelse
+ } ifelse
+ } forall
+ pop pop length -1 eq { (\n) print } if
+} bind def
+
+/currentpagedevice where { % check for currentpagedevice
+ /currentpagedevice get exec () exch unprint
+} if
diff --git a/Master/tlpkg/tlgs/lib/unprot.ps b/Master/tlpkg/tlgs/lib/unprot.ps
new file mode 100644
index 00000000000..fce2db10cdc
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/unprot.ps
@@ -0,0 +1,67 @@
+% Copyright (C) 1991, 1992, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: unprot.ps 6300 2005-12-28 19:56:24Z giles $
+% Disable all access checks. This is useful for printing out
+% eexec-encrypted Type 1 fonts, and similar purposes.
+
+systemdict wcheck
+ { /protdict systemdict def
+ }
+ { (Please restart Ghostscript with the -dWRITESYSTEMDICT switch.\n) print
+ (Some access checks will remain active if you do not do this.\n) print
+ flush
+ /protdict userdict def
+ }
+ifelse
+
+% The procedures we're about to define will go in systemdict,
+% so they must be allocated in global VM.
+
+.currentglobal true .setglobal
+
+protdict begin
+ /readonly. /readonly load def
+ /executeonly. /executeonly load def
+ /noaccess. /noaccess load def
+ /readonly { } odef
+ /readonly.. /readonly load def
+ /executeonly { } odef
+ /executeonly.. /executeonly load def
+ /noaccess { } odef
+ /noaccess.. /noaccess load def
+end
+
+% Disable the access checks.
+
+/unprot
+ { protdict begin
+ /readonly /readonly.. load def
+ /executeonly /executeonly.. load def
+ /noaccess /noaccess.. load def
+ end
+ } bind def
+
+% Re-enable the access checks.
+
+/reprot
+ { protdict begin
+ /readonly /readonly. load def
+ /executeonly /executeonly. load def
+ /noaccess /noaccess. load def
+ end
+ } bind def
+
+.setglobal
diff --git a/Master/tlpkg/tlgs/lib/viewcmyk.ps b/Master/tlpkg/tlgs/lib/viewcmyk.ps
new file mode 100644
index 00000000000..e874b09db2b
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/viewcmyk.ps
@@ -0,0 +1,63 @@
+% Copyright (C) 1996, 1997, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: viewcmyk.ps 6300 2005-12-28 19:56:24Z giles $
+% viewcmyk.ps
+% Display a raw CMYK file.
+% Requires the colorimage operator.
+% If SCALE is defined, maps input pixels to output pixels with that scale;
+% if SCALE is undefined, scales the image to fit the page.
+% If BITS is defined, it is the number of bits per sample (1,2,4,8,12);
+% if BITS is undefined, its default value is 1.
+
+/viewcmyk { % <filename> <width> viewcmyk -
+ 20 dict begin
+ /w exch def
+ /fname exch def
+ /bpc /BITS where { pop BITS } { 1 } ifelse def
+ /f fname (r) file def
+ mark fname status pop pop pop /flen exch def cleartomark
+ /h flen w bpc 4 mul mul 7 add 8 idiv idiv def
+ (Dimensions: ) print [w h] == flush
+ % Set up scaling.
+ /SCALE where {
+ pop
+ % Map pixels SCALE-for-1. Assume orthogonal transformation.
+ SCALE 1 0 dtransform add abs div
+ SCALE 0 1 dtransform add abs div
+ } {
+ % Scale the image (uniformly) to fit the page.
+ clippath pathbbox pop pop translate
+ pathbbox 3 -1 roll sub h div
+ 3 1 roll exch sub w div .min dup
+ } ifelse scale
+ w h bpc [1 0 0 -1 0 h] f false 4 colorimage
+ showpage
+ f closefile
+ end
+} bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments {
+ counttomark 2 eq {
+ cvi viewcmyk
+ } {
+ cleartomark
+ (Usage: gs -- viewcmyk.ps filename.cmyk width\n) print
+ ( e.g.: gs -- viewcmyk.ps my.cmyk 2550\n) print flush
+ } ifelse
+} {
+ pop
+} ifelse
diff --git a/Master/tlpkg/tlgs/lib/viewgif.ps b/Master/tlpkg/tlgs/lib/viewgif.ps
new file mode 100644
index 00000000000..7cfe8af829d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/viewgif.ps
@@ -0,0 +1,160 @@
+% Copyright (C) 1989, 1992, 1993, 1998 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: viewgif.ps 6300 2005-12-28 19:56:24Z giles $
+% viewgif.ps
+% Display a GIF file.
+
+/read1 % <file> read1 <int>
+ { read pop
+ } bind def
+/read2 % <file> read2 <int>
+ { dup read1 exch read1 8 bitshift add
+ } bind def
+
+/readGIFheader % <file> readGIFheader <dict>
+ { 20 dict begin
+ dup 6 string readstring pop
+ dup (GIF87a) eq exch (GIF89a) eq or not
+ { (Not a GIF file.\n) print cleartomark stop
+ } if
+ dup read2 /Width exch def
+ dup read2 /Height exch def
+ dup read1
+ dup 128 ge /GlobalColor exch def
+ dup -4 bitshift 7 and 1 add /BitsPerPixel exch def %***BOGUS?***
+ dup 8 and 0 ne /PaletteSorted exch def
+ 7 and 1 add dup /BitsPerPixel exch def
+ 1 exch bitshift /PaletteSize exch def
+ dup read1 /BackgroundIndex exch def
+ dup read1 15 add 64 div /AspectRatio exch def
+ GlobalColor
+ { PaletteSize 3 mul string readstring pop
+ /GlobalPalette exch def
+ } if
+ currentdict end
+ } bind def
+
+/readGIFimageHeader % <file> readGIFimageHeader <dict>
+ % Note: GIF header must be on dict stack
+ { 10 dict begin
+ { dup read1
+ dup (!) 0 get ne { exit } if pop % extension
+ dup read1 pop
+ { dup read1 dup 0 eq { pop exit } if { dup read1 pop } repeat
+ } loop
+ } loop
+ (,) 0 get ne
+ { (Not a GIF image.\n) print stop
+ } if
+ dup read2 /Left exch def
+ dup read2 /Top exch def
+ dup read2 /Width exch def
+ dup read2 /Height exch def
+ dup read1
+ dup 128 ge /LocalColor exch def
+ dup 64 and 0 ne /Interlaced exch def
+ LocalColor
+ { 7 and 1 add /BitsPerPixel exch def
+ 1 BitsPerPixel bitshift 3 mul string readstring pop
+ /Palette exch def
+ }
+ { pop pop /Palette GlobalPalette def
+ }
+ ifelse
+ currentdict end
+ } bind def
+
+/imageGIF % <imagedict> imageGIF
+ { /ImageOut where
+ { pop
+ % We know BitsPerComponent = 8, Decode = [0 255].
+ % and there is only a single data source which is
+ % either a filter or a string whose size is exactly
+ % the width of the row.
+ dup /DataSource get dup type /stringtype eq
+ { ImageOut exch writestring
+ }
+ { pop dup /Width get string
+ 1 index /Height get
+ { 1 index /DataSource get 1 index readstring pop
+ ImageOut exch writestring
+ }
+ repeat pop pop
+ }
+ ifelse
+ }
+ { image
+ }
+ ifelse
+ } bind def
+
+/viewGIF % <file|string> viewGIF -
+ { save 20 dict begin
+ /saved exch def
+ dup type /stringtype eq { (r) file } if
+ /F exch def
+ /ImageOutFile where { /ImageOut ImageOutFile (w) file def } if
+ F readGIFheader /Header exch def
+ currentdict Header end begin begin
+ VGIFDEBUG { Header { exch == == } forall (----------------\n) print flush } if
+ F readGIFimageHeader /ImageHeader exch def
+ currentdict ImageHeader end begin begin
+ VGIFDEBUG { ImageHeader { exch == == } forall (----------------\n) print flush } if
+ /D F
+ << /InitialCodeLength F read1
+ /FirstBitLowOrder true
+ /BlockData true
+ /EarlyChange 0
+ >> /LZWDecode filter def
+
+ [/Indexed /DeviceRGB 1 BitsPerPixel bitshift 1 sub Palette] setcolorspace
+ matrix currentmatrix
+ 0 1 3 { 2 copy get dup 0 ne { dup abs div } if 3 copy put pop pop } for
+ setmatrix
+ << /ImageType 1
+ /ImageMatrix [1 0 0 -1 0 Height]
+ /BitsPerComponent 8
+ /Decode [0 255]
+ Interlaced
+ { /Width Width /Height 1
+ /row Width string def
+ /DataSource row
+ >> /I exch def
+ /inter % <num> <denom> inter -
+ { /denom exch def /num exch def
+ gsave
+ /lines Height denom 1 sub add num sub denom idiv def
+ 0 1 lines 1 sub {
+ Height exch denom mul num add sub
+ I /ImageMatrix get 5 3 -1 roll put
+ D row readstring pop pop
+ I imageGIF
+ } for
+ grestore
+ }
+ bind def
+ 0 8 inter
+ 4 8 inter
+ 2 4 inter
+ 1 2 inter
+ }
+ { /Width Width /Height Height
+ /DataSource D
+ >> imageGIF
+ }
+ ifelse
+ saved end end end restore
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/viewjpeg.ps b/Master/tlpkg/tlgs/lib/viewjpeg.ps
new file mode 100644
index 00000000000..10282a8fe44
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/viewjpeg.ps
@@ -0,0 +1,159 @@
+%! viewjpeg.ps Copyright (C) 1994 Thomas Merz <tm@pdflib.com>
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: viewjpeg.ps 6300 2005-12-28 19:56:24Z giles $
+% View JPEG files with Ghostscript
+%
+% This PostScript code relies on level 2 features.
+%
+% Only JPEG baseline, extended sequential, and progressive files
+% are supported. Note that Adobe PostScript level 2 does not include
+% progressive-JPEG support. Ghostscript with IJG JPEG v6 or later
+% will decode progressive JPEG, but only if you edit gsjmorec.h to
+% enable that feature.
+%
+% Author's address:
+% ------------------------------+
+% {(pstack exec quit) = flush } | Thomas Merz, Munich
+% pstack exec quit | voice +49/89/29160728
+% ------------------------------+ tm@muc.de http://www.muc.de/~tm/
+%
+% $Id: viewjpeg.ps 6300 2005-12-28 19:56:24Z giles $
+% Updated by L. Peter Deutsch 20-May-1997:
+% move the usage example to the beginning
+% Updates by Tom Lane 6-Sep-1995
+
+% Usage example:
+% (jpeg-6/testimg.jpg) viewJPEG
+
+/languagelevel where {pop languagelevel 2 lt}{true} ifelse {
+ (JPEG needs PostScript Level 2!\n) print flush stop
+} if
+
+/JPEGdict 20 dict def
+JPEGdict begin
+
+/NoParamMarkers [ % JPEG markers without additional parameters
+ 16#D0 16#D1 16#D2 16#D3 16#D4 16#D5 16#D6 16#D7 16#D8 16#01
+] def
+
+/NotSupportedMarkers [ % JPEG markers not supported by PostScript level 2
+ 16#C3 16#C5 16#C6 16#C7 16#C8 16#C9 16#CA 16#CB 16#CD 16#CE 16#CF
+] def
+
+% Names of color spaces
+/ColorSpaceNames << /1 /DeviceGray /3 /DeviceRGB /4 /DeviceCMYK >> def
+
+% read one byte from file F
+% - ==> int --or-- stop context
+/NextByte {
+ F read not { (Read error in ViewJPEG!\n) print flush stop } if
+} bind def
+
+/SkipSegment { % read two bytes and skip that much data
+ NextByte 8 bitshift NextByte add 2 sub { NextByte pop } repeat
+} bind def
+
+% read width, height, and # of components from JPEG markers
+% and store in dict
+/readJPEGmarkers { % - ==> dict --or-- stop context
+ 5 dict begin
+
+ { % loop: read JPEG marker segments until we find SOFn marker or EOF
+ NextByte
+ 16#FF eq { % found marker
+ /markertype NextByte def
+ % Is it S0F0=baseline, SOF1=extended sequential, SOF2=progressive ?
+ markertype dup 16#C0 ge exch 16#C2 le and {
+ NextByte pop NextByte pop % segment length
+ % Ghostscript and Adobe PS accept only data precision 8
+ NextByte 8 ne {
+ (Error: not 8 bits per component!\n) print flush stop
+ } if
+
+ % Read crucial image parameters
+ /height NextByte 8 bitshift NextByte add def
+ /width NextByte 8 bitshift NextByte add def
+ /colors NextByte def
+
+ VJPGDEBUG { currentdict { exch == == } forall flush } if
+ exit
+ } if
+
+ % detect several segment types which are not compatible with PS
+ NotSupportedMarkers {
+ markertype eq {
+ (Marker ) print markertype ==
+ (not supported!\n) print flush stop
+ } if
+ } forall
+
+ % Skip segment if marker has parameters associated with it
+ true NoParamMarkers { markertype eq {pop false exit} if } forall
+ { SkipSegment } if
+ } if
+ } loop
+
+ currentdict dup /markertype undef
+ end
+} bind def
+
+end % JPEGdict
+
+% read image parameters from JPEG file and display the image
+/viewJPEG { % <file|string> ==> -
+ save
+ JPEGdict begin
+ /saved exch def
+ /scratch 1 string def
+ dup type /stringtype eq { (r) file } if
+ /F exch def
+
+ readJPEGmarkers begin
+ F 0 setfileposition % reset file pointer
+
+ % We use the whole clipping area for the image (at least in one dimension)
+ gsave clippath pathbbox grestore
+ /ury exch def /urx exch def
+ /lly exch def /llx exch def
+
+ llx lly translate
+ width height scale
+
+ % use whole width or height, whichever is appropriate
+ urx llx sub width div ury lly sub height div
+ 2 copy gt { exch } if pop % min
+ dup scale
+ ColorSpaceNames colors scratch cvs get setcolorspace
+
+ % prepare image dictionary
+ << /ImageType 1
+ /Width width
+ /Height height
+ /ImageMatrix [ width 0 0 height neg 0 height ]
+ /BitsPerComponent 8
+ % If 4-component (CMYK), assume data is inverted per Adobe Photoshop
+ colors 4 eq {
+ /Decode [ colors { 1 0 } repeat ]
+ } {
+ /Decode [ colors { 0 1 } repeat ]
+ } ifelse
+ /DataSource F /DCTDecode filter
+ >> image
+
+ end % image parameter dictionary
+
+ saved end restore
+} bind def
diff --git a/Master/tlpkg/tlgs/lib/viewmiff.ps b/Master/tlpkg/tlgs/lib/viewmiff.ps
new file mode 100644
index 00000000000..cdc42c474ab
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/viewmiff.ps
@@ -0,0 +1,124 @@
+% Copyright (C) 1998 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: viewmiff.ps 6300 2005-12-28 19:56:24Z giles $
+% viewmiff.ps
+% Display a MIFF file. You would think the 'display' command would do this,
+% but many versions of 'display' either core-dump or require unacceptably
+% large amounts of memory.
+
+% Recognize MIFF keywords.
+/miffwords mark
+ /class { cvn /class exch def }
+ /colors { cvi /colors exch def }
+ /columns { cvi /Width exch def }
+ /compression { cvn /compression exch def }
+ /depth { cvi /depth exch def }
+ /packets { cvi /packets exch def }
+ /rows { cvi /Height exch def }
+.dicttomark readonly def
+
+% Recognize MIFF image classes.
+/miffclasses mark
+ /DirectClass {
+ /DeviceRGB setcolorspace
+ /BitsPerComponent depth def
+ /Decode [ 0 1 0 1 0 1 ] def
+ }
+ /PseudoClass {
+ [ /Indexed
+ % The MIFF documentation lies about the size of pixels
+ % for this case: the pixel size is determined only by
+ % the number of colors, and is not affected by the image
+ % depth. Specifically, if there are 256 or fewer colors
+ % but the depth (of color map entries) is 16, each pixel
+ % is still only 1 byte, not 2.
+ currentdict /colors known {
+ /DeviceRGB colors 1 sub
+ /BitsPerComponent colors 256 le { 8 } { 16 } ifelse def
+ colors 3 mul string depth 8 eq {
+ f exch readstring pop
+ } {
+ % 16-bit color map entries: take only the high-order byte.
+ 0 1 2 index length 1 sub {
+ f read pop 2 index 3 1 roll put f read pop pop
+ } for
+ } ifelse
+ } {
+ /colors 256 def
+ /DeviceGray 255
+ 256 string 0 1 255 { 1 index exch dup put } for
+ } ifelse
+ ] setcolorspace
+ /Decode [ 0 1 BitsPerComponent bitshift 1 sub ] def
+ }
+.dicttomark readonly def
+
+% Recognize MIFF compression methods.
+/rlstring 768 string def
+/rlread {
+ % packets is not reliable -- disregard it.
+ dup rlstring 0 3 getinterval readstring {
+ pop read pop 3 mul 3 3 2 index {
+ rlstring exch rlstring 0 3 getinterval putinterval
+ } for
+ rlstring 0 3 -1 roll 3 add getinterval
+ } {
+ pop pop ()
+ } ifelse
+} bind def
+/miffcompress mark
+ /Uncompressed { f }
+ /RunLengthEncoded { { f rlread } }
+ /Zip { [ f /FlateDecode filter cvlit /rlread cvx ] cvx }
+.dicttomark readonly def
+
+% Read a MIFF file and display the image.
+/viewmiff { % <filename> viewmiff -
+ 50 dict begin
+ /fname 1 index def
+ /f exch (r) file def
+ % Set defaults.
+ /ImageType 1 def
+ /class /DirectClass def
+ /compression /Uncompressed def
+ /depth 8 def
+ /packets 16#7fffffff def
+ % Read and parse the header.
+ { f token pop
+ dup (:) eq { pop exit } if
+ dup type /nametype eq {
+ .namestring (=) search {
+ exch pop miffwords exch .knownget { exec } { pop } ifelse
+ } {
+ pop % who knows?
+ } ifelse
+ } {
+ pop % probably a comment in braces
+ } ifelse
+ } loop
+ % Read and display the image.
+ miffclasses class get exec
+ /DataSource miffcompress compression get exec def
+ /ImageMatrix [Width 0 0 Height neg 0 Height] def
+ currentpagedevice /PageSize get
+ dup 0 get exch 1 get scale
+ gsave 0.8 setgray 0 0 1 1 rectfill grestore % provide background
+ currentdict image
+ showpage
+ % Clean up.
+ f closefile
+ end
+} bind def
diff --git a/Master/tlpkg/tlgs/lib/viewpbm.ps b/Master/tlpkg/tlgs/lib/viewpbm.ps
new file mode 100644
index 00000000000..2811eac3eb5
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/viewpbm.ps
@@ -0,0 +1,184 @@
+% Copyright (C) 1992, 1995, 1996, 1998, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: viewpbm.ps 6300 2005-12-28 19:56:24Z giles $
+% viewpbm.ps
+% Display a PBM/PGM/PPM file.
+% Requires the Level 2 `image' operator (to handle variable pixel widths).
+% If SCALE is defined, maps input pixels to output pixels with that scale;
+% if SCALE is undefined, scales the image to fit the page.
+
+/s 100 string def
+/readmaxv { % <file> readmaxv -
+ 10 string readline pop cvx exec /maxv exch def
+} bind def
+/readrow { % <file> <row> readrow <row>
+ 0 1 2 index length 1 sub {
+ 1 index exch 3 index token pop put
+ } for exch pop
+} bind def
+/read01 { % <file> <count> read01 <byte>
+ 0 exch {
+ 1 index read pop 48 xor dup 1 le { exch dup add add } { pop } ifelse
+ } repeat
+} bind def
+/readrow01 { % <file> <row> readrow01 <row>
+ 0 1 w 8 idiv {
+ 1 index exch 3 index 8 read01 put
+ } for
+ wrem 0 ne {
+ dup rsize 1 sub wrem read01 8 wrem sub bitshift put
+ } if
+ exch pop
+} bind def
+/readwh { % <file> readwh <w> <h>
+ dup s readline pop % check for comment
+ (#) anchorsearch {
+ pop pop dup s readline pop
+ } if
+ cvx exec
+} bind def
+/pbmtypes mark
+% The procedures in this dictionary are called as
+% <file> Pn <w> <h> <readproc>
+/P1 { % ASCII 1-bit white/black
+ /bpc 1 def /maxv 1 def /rsize w 7 add 8 idiv def
+ /wrem w 8 mod def
+ /ncomp 1 def /invert true def /DeviceGray setcolorspace
+ readwh
+ { readrow01 }
+} bind
+/P2 { % ASCII 8-bit gray
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index def
+ /ncomp 1 def /invert false def /DeviceGray setcolorspace
+ { readrow }
+} bind
+/P3 { % ASCII 8-bit RGB
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index 3 mul def
+ /ncomp 3 def /invert false def /DeviceRGB setcolorspace
+ { readrow }
+} bind
+/P4 { % Binary 1-bit white/black
+ readwh
+ /bpc 1 def /maxv 1 def /rsize 2 index 7 add 8 idiv def
+ /ncomp 1 def /invert true def /DeviceGray setcolorspace
+ { readstring pop }
+} bind
+/P5 { % Binary 8-bit gray
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index def
+ /ncomp 1 def /invert false def /DeviceGray setcolorspace
+ { readstring pop }
+} bind
+/P6 { % Binary 8-bit RGB
+ readwh
+ /bpc 8 def 2 index readmaxv /rsize 2 index 3 mul def
+ /ncomp 3 def /invert false def /DeviceRGB setcolorspace
+ { readstring pop }
+} bind
+.dicttomark readonly def
+/pbmsetup { % <file> <w> <h> <readproc> runpbm -
+ /readproc exch def
+ /h exch def
+ /w exch def
+ /f exch def
+ 20 dict begin % image dictionary
+ /ImageType 1 def
+ /Width w def
+ /Height h def
+ /ImageMatrix [w 0 0 h neg 0 h] def
+ /BitsPerComponent bpc def
+ /Decode [ 0 255 maxv div invert { exch } if ncomp 1 sub { 2 copy } repeat ] def
+ /DataSource [ f rsize string /readproc load /exec load ] cvx def
+ currentdict end
+} def
+/imagescale { % <imagedict> imagescale -
+ begin
+ /SCALE where {
+ pop
+ % Map pixels SCALE-for-1. Assume orthogonal transformation.
+ Width 1 0 dtransform add abs div SCALE mul
+ Height 0 1 dtransform add abs div SCALE mul
+ } {
+ % Scale the image (uniformly) to fit the page.
+ clippath pathbbox pop pop translate
+ pathbbox .min exch pop exch pop ceiling
+ dup Height Width gt {
+ Width mul Height div exch
+ } {
+ Height mul Width div
+ } ifelse
+ }
+ ifelse scale
+ end
+} def
+
+% Image a PBM file page by page.
+/viewpbm { % <filename> viewpbm -
+ 20 dict begin
+ (r) file /pf exch def {
+ pf token not { exit } if
+ pbmtypes exch get pf exch exec pbmsetup
+ dup imagescale image showpage
+ } loop
+ end
+} def
+
+% Reassemble a composite PBM file from the CMYK separations.
+/viewpsm {
+ 20 dict begin
+ /fname exch def
+ /sources [ 0 1 3 {
+ /plane exch def
+ /pf fname (r) file def
+ pf pbmtypes pf token pop get exec
+ % Stack: pf w h readproc
+ plane {
+ /readproc exch def /h exch def /w exch def pop
+ /row rsize string def
+ h { pf row readproc pop } repeat
+ pf pbmtypes pf token pop get exec
+ } repeat
+ pbmsetup
+ } for ] def
+ /datas [ sources { /DataSource get 0 get } forall ] def
+ /decode sources 0 get /Decode get
+ dup 0 get exch 1 get add cvi 0 exch
+ 2 copy 4 copy 8 array astore def
+ sources 0 get
+ dup /MultipleDataSources true put
+ dup /DataSource datas put
+ dup /Decode decode put
+ /DeviceCMYK setcolorspace
+ dup imagescale image showpage
+ end
+} def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 1 ge
+ { ] { viewpbm } forall
+ }
+ { cleartomark
+ (Usage: gs [--] viewpbm.ps filename.p*m ...\n) print
+ ( e.g.: gs [--] viewpbm.ps my.ppm another.ppm\n) print flush
+ }
+ ifelse
+ }
+ { pop
+ }
+ifelse
diff --git a/Master/tlpkg/tlgs/lib/viewpcx.ps b/Master/tlpkg/tlgs/lib/viewpcx.ps
new file mode 100644
index 00000000000..b2b7789b07d
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/viewpcx.ps
@@ -0,0 +1,150 @@
+% Copyright (C) 1996, 1999 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: viewpcx.ps 6300 2005-12-28 19:56:24Z giles $
+% viewpcx.ps
+% Display a PCX file.
+% Requires the Level 2 `image' operator (to handle variable pixel widths).
+% If SCALE is defined, maps input pixels to output pixels with that scale;
+% if SCALE is undefined, scales the image to fit the page.
+% ****NOTE: does not handle multi-plane images with palette.
+
+/pcxbytes [
+ 0 1 255 {
+ 64 string exch 0 1 63 {
+ 3 copy exch put pop
+ } for pop
+ } for
+] readonly def
+/readpcx { % - readpcx <str>
+ f % gets replaced
+ dup read not {
+ pop ()
+ } {
+ dup 192 lt {
+ ( ) dup 0 4 -1 roll put exch pop
+ } {
+ 192 sub //pcxbytes 3 -1 roll read pop get exch 0 exch getinterval
+ } ifelse
+ } ifelse
+} def
+/get2 % <string> <index> get2 <int>
+ { 2 copy get 3 1 roll 1 add get 8 bitshift add
+ } bind def
+/dsproc
+ { df s readstring pop % s gets filled in
+ s1 () ne { df s1 readstring pop pop } if % discard padding bytes
+ } def % don't bind, must be writable
+/viewpcx % <filename> viewpcx -
+ { 100 dict begin
+ /fname 1 index def
+ /f exch (r) file def
+ % Read and unpack the header.
+ /header f 128 string readstring pop def
+ /version header 1 get def
+ /bpp header 3 get def
+ /w header 8 get2 header 4 get2 sub 1 add def
+ /h header 10 get2 header 6 get2 sub 1 add def
+ /nplanes header 65 get def
+ /bpl header 66 get2 def
+ /palinfo header 68 get2 def
+ /nbits bpp nplanes mul def
+ version 5 eq
+ { nbits 8 le
+ { /cspace
+ [/Indexed /DeviceRGB 1 bpp bitshift 1 sub
+ f fileposition
+ 1 nbits bitshift 3 mul string
+ fname status pop pop pop exch pop
+ 1 index length sub f exch setfileposition
+ f exch readstring pop
+ exch f exch setfileposition
+ ] def
+ /decode [0 cspace 2 get] def
+ }
+ { /cspace /DeviceRGB def
+ /decode [0 1 0 1 0 1] def
+ }
+ ifelse
+ }
+ { /cspace
+ [/Indexed /DeviceRGB 1 bpp bitshift 1 sub
+ header 16 1 nbits bitshift 16 .min 3 mul getinterval
+ ] def
+ /decode [0 cspace 2 get] def
+ }
+ ifelse
+ % Set up scaling.
+ /SCALE where
+ { pop
+ % Map pixels SCALE-for-1. Assume orthogonal transformation.
+ w 1 0 dtransform add abs div SCALE mul
+ h 0 1 dtransform add abs div SCALE mul
+ }
+ { % Scale the image (uniformly) to fit the page.
+ clippath pathbbox pop pop translate
+ pathbbox .min exch pop exch pop ceiling
+ dup h w gt { w mul h div exch } { h mul w div } ifelse
+ }
+ ifelse scale
+ % Since the number of bytes per line is always even,
+ % it may not match the width specification.
+ /wbpl w bpp mul 7 add 8 idiv def
+ % Define the data source procedure.
+ /s1 bpl wbpl sub string def
+ /df /readpcx load copyarray dup 0 f put cvx bind readonly
+ 0 () /SubFileDecode filter def
+ /dsource [ nplanes
+ { /dsproc load copyarray
+ dup 1 wbpl string put
+ cvx bind readonly
+ }
+ repeat ] def
+ % Construct the image dictionary.
+ 20 dict begin % image dictionary
+ /ImageType 1 def
+ /Width w def
+ /Height h def
+ /ImageMatrix [w 0 0 h neg 0 h] def
+ /BitsPerComponent bpp def
+ /Decode decode def
+ /DataSource dsource dup length 1 gt
+ { /MultipleDataSources true def }
+ { 0 get }
+ ifelse def
+ currentdict end
+ % Finally, display the image.
+ cspace setcolorspace
+ image
+ showpage
+ df closefile
+ f closefile
+ end
+ } bind def
+
+% If the program was invoked from the command line, run it now.
+[ shellarguments
+ { counttomark 1 ge
+ { ] { viewpcx } forall
+ }
+ { cleartomark
+ (Usage: gs -- viewpcx.ps filename.pcx ...\n) print
+ ( e.g.: gs -- viewpcx.ps my.pcx another.pcx\n) print flush
+ }
+ ifelse
+ }
+ { pop
+ }
+ifelse
diff --git a/Master/tlpkg/tlgs/lib/viewps2a.ps b/Master/tlpkg/tlgs/lib/viewps2a.ps
new file mode 100644
index 00000000000..f20a2fb0636
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/viewps2a.ps
@@ -0,0 +1,32 @@
+% Copyright (C) 1995 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: viewps2a.ps 6300 2005-12-28 19:56:24Z giles $
+% Display a file produced by ps2ascii with no switch or with -dCOMPLEX.
+% This is just a procset to read in before the file to display.
+
+/init { 0.1 0.1 scale } bind def
+init
+/next { currentfile token pop } bind def
+/F { next next pop next exch selectfont } bind def
+/P { showpage init } bind def
+/S
+ { next next moveto
+ next dup stringwidth pop next exch div
+ gsave 1 scale show grestore
+ } bind def
+/C { next next next setrgbcolor } bind def
+/I { next next next next gsave 0.75 setgray rectfill grestore } bind def
+/R { next next next next rectfill } bind def
diff --git a/Master/tlpkg/tlgs/lib/wftopfa.ps b/Master/tlpkg/tlgs/lib/wftopfa.ps
new file mode 100644
index 00000000000..df0451f9f4f
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/wftopfa.ps
@@ -0,0 +1,303 @@
+% Copyright (C) 1995, 1996 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: wftopfa.ps 6300 2005-12-28 19:56:24Z giles $
+% wftopfa.ps
+% Convert a Wadalab base font to .PFA (or .PFB) format.
+
+(gs_ksb_e.ps) runlibfile
+(wrfont.ps) runlibfile
+
+/wftopfa_dict 100 dict def
+wftopfa_dict begin
+
+/KanjiSubEncoding dup .findencoding def
+
+% Initialize parameters.
+/init % - init -
+ { /chars 256 dict def
+ /version (001.001) def
+ /highcode 0 def
+ /StdHW [32] def
+ /StdVW [32] def
+ /UniqueID 20000000 def
+ /FontBase (Wadalab) def
+ /StdEncMode false def
+ /CustomEncMode false def
+ /Binary false def
+ /Encrypt true def
+ } bind def
+
+% Read definitions.
+/rdstring 5000 string def
+/readdefs % <filename> readdefs -
+ { (r) file
+ { dup rdstring readline not { pop exit } if
+ dup length 15 ge
+ { dup dup length 7 sub 7 getinterval (> CompD) eq
+ { token pop exch token pop exch pop
+ dup 0 get /highcode exch def
+ exch chars 3 1 roll put
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ loop closefile
+ } bind def
+
+% Write out the final font.
+/writepfa
+ { 4 string highcode 16#1000 add 16 2 index cvrs 0 (.r) putinterval
+ FontBase exch concatstrings /fullname exch def
+ UniqueID 20000000 eq { /UniqueID 4990000 highcode add def } if
+ /encoding CustomEncMode
+ { KanjiSubEncoding }
+ { StdEncMode { StandardEncoding } { ISOLatin1Encoding } ifelse }
+ ifelse def
+
+ /Font 30 dict def
+ Font begin
+ /FontInfo 20 dict def
+ FontInfo begin
+
+ % Write the clear text part.
+
+ /CreationDate (%Calendar%) currentdevparams
+ dup /Weekday get {(Sun )(Mon )(Tue )(Wed )(Thu )(Fri )(Sat )} exch get
+ 1 index /Month get 1 sub
+ {(Jan)(Feb)(Mar)(Apr)(May)(Jun)(Jul)(Aug)(Sep)(Oct)(Nov)(Dec)} exch get
+ concatstrings
+ {{/Day ( )} {/Hour ( )} {/Minute (:)} {/Second (:)} {/Year ( )}}
+ { dup 1 get 3 -1 roll exch concatstrings exch
+ 0 get 2 index exch get
+ dup 10 lt { =string cvs (0) exch concatstrings } { =string cvs } ifelse
+ concatstrings
+ }
+ forall exch pop readonly def
+ /VMusage 100000 def
+ /version version readonly def
+ /Notice (No copyright on this font. Original available from moe.ipl.t.u-tokyo.ac.jp:/Font. Converted by wftopfa.ps (Aladdin Enterprises).) readonly def
+ /FullName fullname readonly def
+ /FamilyName FontBase readonly def
+ /Weight (Regular) readonly def
+ /ItalicAngle 0 def
+ /isFixedPitch true def
+ /UnderlinePosition 0 def
+ /UnderlineThickness 0 def
+
+ end % FontInfo
+
+ /FontName fullname cvn def
+ /Encoding encoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [.001 0 0 .001 0 -0.16] readonly def
+ /UniqueID UniqueID def
+ /FontBBox [0 0 1000 1000] readonly def
+
+ /Private 20 dict def
+ Private begin
+
+ /-| {string currentfile exch readstring pop} readonly def
+ /|- {readonly def} readonly def
+ /| {readonly put} readonly def
+ /BlueValues [] readonly def
+ /OtherBlues [] readonly def
+ /MinFeature {16 16} readonly def
+ /StdHW StdHW def
+ /StdVW StdVW def
+ /ForceBold false def
+ /password 5839 def
+ /UniqueID UniqueID def
+ /OtherSubrs [] readonly def
+ /Subrs [
+ (\020\2771p|\020\024\020=-\223D\\\342R) readonly
+ (\020\2771py\274\366Uz) readonly
+ (\020\2771py\275\304\236i) readonly
+ (\020\2771p\371) readonly
+ (\020\2771p~\266+6\034\3446z) readonly
+ ] readonly def
+
+ end % Private
+
+ /CharStrings 256 dict def
+ chars
+ { exch =string cvs
+ dup 0 get highcode eq
+ { 1 get encoding exch get exch CharStrings 3 1 roll put }
+ { pop pop }
+ ifelse
+ }
+ forall
+
+ end % Font
+
+ Font /FontName get Font definefont setfont
+ (%stdout) (w) file writefont
+ } bind def
+
+% Scan the command line and process files.
+/options mark
+ /version { 2 copy get /version exch def 1 add } bind
+ /StdHW { 2 copy get cvx exec /StdHW exch def 1 add } bind
+ /StdVW { 2 copy get cvx exec /StdVW exch def 1 add } bind
+ /UniqueId { 2 copy get cvi /UniqueID exch def 1 add } bind
+ /UniqueID 1 index
+ /FontBase { 2 copy get /FontBase exch def 1 add } bind
+ /StdEnc { /StdEncMode true def } bind
+ /CustomEnc { /CustomEncMode true def } bind
+ /Binary { /Binary true def } bind
+ /noEncrypt { /Encrypt false def } bind
+.dicttomark def
+/wftopfa % [(arg1) ...] wftopfa -
+ { init dup 0
+ { dup 2 index length ge { exit } if
+ 2 copy get exch 1 add exch
+ options 1 index .knownget { exch pop exec } { readdefs } ifelse
+ }
+ loop pop pop
+ wrfont_dict /binary_CharStrings Binary put
+ wrfont_dict /eexec_encrypt Encrypt put
+ wrfont_dict /name_all_Encodings CustomEncMode put
+ writepfa
+ } bind def
+
+end % wftopfa_dict
+
+/wftopfa
+ { mark exch wftopfa_dict begin /saved save def { wftopfa } exec false%stopped
+ { cleartomark true } { cleartomark false } ifelse
+ saved end restore { stop } if
+ } bind def
+
+[ shellarguments
+ { ] wftopfa }
+ { pop }
+ifelse
+
+% ---------------- Root font ---------------- %
+
+% Define the Encoding for the root font.
+/wfrootencoding
+% \x00-\x3F
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 1 2 3 4 5 6 7 8 0 0 0 0 0 0 0
+ 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+% \x40-\x7F
+ 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
+ 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
+ 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
+ 73 74 75 76 77 0 0 0 0 0 0 0 0 0 0 0
+% \x80-\xFF
+128 copy
+256 packedarray def
+
+% Define the template for the root font dictionary.
+/wfrootfontdict mark
+ /FontType 0
+ /FontMatrix [1 0 0 1 0 0]
+ /FMapType 2
+ /Encoding wfrootencoding
+.dicttomark def
+
+% Define a dummy (placeholder) Type 1 font for the FDepVector.
+/type1dummyfont % <fontname> type1dummyfont <font>
+ { mark /FontName 3 -1 roll
+ /FontType 1
+ /FontMatrix [.001 0 0 .001 0 0]
+ /FontBBox [0 0 1000 1000]
+ /Encoding /KanjiSubEncoding findencoding
+ /CharStrings 0 dict
+ /Private mark /BlueValues [] /password 5839 .dicttomark
+ .dicttomark dup /FontName get exch definefont
+ } bind def
+
+% Write a root font. Again, wrfont.ps does most of the work.
+/makerootfont % <rootname> makerootfont <font>
+ { wfrootfontdict dup length 4 add % FontName, FDepVector, PrefEnc, FID
+ dict copy begin
+ cvlit /FontName exch def
+ 4 dict begin
+ /len FontName length def
+ /str len 4 add string def
+ FontName str cvs pop
+ str len (.r) putinterval
+ /FDepVector [ 16#21 1 16#74
+ { dup wfrootencoding exch get 0 eq
+ { pop
+ }
+ { 16 str len 2 add 2 getinterval cvrs pop
+ str cvn type1dummyfont
+ }
+ ifelse
+ }
+ for end counttomark -1 roll dup counttomark 2 roll
+ ] def
+ FontName currentdict end definefont
+ } bind def
+/writerootfont % <rootname> writerootfont -
+ { save exch makerootfont setfont (%stdout) (w) file writefont restore
+ } bind def
+
+% ---------------- Converting entire fonts ---------------- %
+
+% Define the directory where the Wadalab fonts are stored.
+/wfdir (/home/ghost/kanji/w) def
+
+% Convert an entire Wadalab font.
+/writeentirefont % <fontname> <template*> writeentirefont -
+ { 2 dict begin
+ /templates exch def
+ /fontname exch def
+ [ templates
+ { wfdir (/) concatstrings exch concatstrings { copystring }
+ 8192 string filenameforall
+ }
+ forall
+ wfdir (/wadalab-sym/*.ps) concatstrings { copystring }
+ 8192 string filenameforall
+ ]
+ (%!\n) print
+ { /currentuserparams where
+ { pop currentuserparams /VMReclaim get -2 vmreclaim { vmreclaim } }
+ { { } }
+ ifelse
+ } == (exec\n) print
+ (/KanjiSubEncoding ) print /KanjiSubEncoding findencoding ==
+ (readonly def\n) print
+ { (%stderr) (w) file dup 2 index write== flushfile
+ mark exch (CustomEnc) (Binary) (noEncrypt)
+ (FontBase) fontname counttomark -1 roll ] wftopfa
+ }
+ forall
+ fontname cvn writerootfont
+ (exec\n) print
+ end
+ } def % don't bind, so we can print the procedure
+
+% Convert the Wadalab JIS 1&2 SaiMincho font.
+% To invoke this from the command line,
+% gs -dNODISPLAY -q wftopfa.ps -c writeSaiMincho0 flush quit >wmin0.ps
+% To make the resulting font loadable on demand, add to the Fontmap file:
+% /Wadalab-SaiMincho (wmin0.ps) ;
+/writeSaiMincho0
+ { (Wadalab-SaiMincho) [ (wadalab-mincho-0-8/*.ps) ] writeentirefont
+ } bind def
diff --git a/Master/tlpkg/tlgs/lib/winmaps.ps b/Master/tlpkg/tlgs/lib/winmaps.ps
new file mode 100644
index 00000000000..a386f5a4647
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/winmaps.ps
@@ -0,0 +1,106 @@
+% Copyright (C) 1993 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: winmaps.ps 6855 2006-06-14 21:03:34Z giles $
+% winmaps.ps - make maps between PostScript encodings and Windows
+% character sets.
+
+% Define the two Windows encodings.
+
+/ANSIEncoding
+ ISOLatin1Encoding 256 array copy
+ dup 16#90 /.notdef put
+ 16#93 1 16#9f { 2 copy /.notdef put pop } for
+def
+
+/OEMEncoding [
+ /.notdef /.notdef /.notdef /heart /diamond /club /spade /bullet
+ 8 { /.notdef } repeat
+ /.notdef /.notdef /.notdef /.notdef /paragraph /section /.notdef /.notdef
+ /arrowup /arrowdown /arrowright /arrowleft /.notdef /arrowboth /.notdef /.notdef
+ StandardEncoding 32 96 getinterval aload pop
+ /Ccedilla /udieresis /eacute /acircumflex /adieresis /agrave /aring /ccedilla
+ /ecircumflex /edieresis /egrave /idieresis /igrave /Adieresis /Aring
+ /Eacute /ae /AE /ocircumflex /odieresis /ograve /ucircumflex /ugrave
+ /ydieresis /Odieresis /Udieresis /cent /sterling /yen /.notdef /florin
+ /aacute /iacute /oacute /uacute /ntilde /Ntilde /ordfeminine /ordmasculine
+ /questiondown /.notdef /logicalnot /onehalf /onequarter /exclamdown /guillemotleft /guillemotright
+ 48 { /.notdef } repeat
+ /alpha /beta /Gamma /Pi /Sigma /sigma /mu /tau
+ /Phi /Theta /Omega /delta /infinity /phi /element /intersection
+ /equivalence /plusminus /greaterequal /lessequal /integraltp /integralbt /divide /.notdef
+ /degree /dotmath /periodcentered /radical /.notdef /twosuperior /.notdef /.notdef
+] def
+
+% Utility procedures
+
+/invertencoding % <array> invertencoding <dict>
+ { 256 dict exch dup length 1 sub -1 0
+ { % stack: dict array index
+ 2 copy get /.notdef ne
+ { 2 copy get exch 3 index 3 1 roll put }
+ { pop }
+ ifelse
+ } for
+ pop
+ } def
+
+/pmarray 256 array def
+/printmap % <chars> <decode> printmap -
+ { mark 3 1 roll exch
+ { 2 copy known { 1 index exch get } { pop 0 } ifelse exch
+ }
+ forall pop
+ pmarray 0 counttomark 2 sub getinterval astore
+ ([) print dup length =only 0 exch (] = {\n ) exch
+ { exch print =only
+ 1 add 15 and dup 0 eq { (,\n ) } { (, ) } ifelse
+ }
+ forall pop pop (\n};\n) print pop
+ } def
+
+/decodeStd StandardEncoding invertencoding def
+/decodeISO ISOLatin1Encoding
+ % Remove the redundant characters
+ dup length array copy
+ [8#222 8#225 8#230 8#233 8#240] { 2 copy /.notdef put pop } forall
+invertencoding def
+/decodeSym SymbolEncoding invertencoding def
+
+/decodeANSI ANSIEncoding invertencoding def
+/decodeOEM OEMEncoding invertencoding def
+
+% Construct the map from Symbol to OEM.
+
+(\nprivate const byte far_data gs_map_symbol_to_oem) print
+SymbolEncoding decodeOEM printmap
+
+% Construct the map from ISOLatin1 to OEM.
+
+(\nprivate const byte far_data gs_map_iso_to_oem) print
+ISOLatin1Encoding decodeOEM printmap
+
+% Construct the map from Standard to ISOLatin1.
+
+(\nprivate const byte far_data gs_map_std_to_iso) print
+StandardEncoding decodeISO printmap
+
+% Construct the map from ISOLatin1 to Standard.
+% The Windows driver doesn't need this, but the X11 driver does.
+
+(\nprivate const byte far_data gs_map_iso_to_std) print
+ISOLatin1Encoding decodeStd printmap
+
+quit
diff --git a/Master/tlpkg/tlgs/lib/wrfont.ps b/Master/tlpkg/tlgs/lib/wrfont.ps
new file mode 100644
index 00000000000..5d062143863
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/wrfont.ps
@@ -0,0 +1,665 @@
+% Copyright (C) 1991, 1995, 1996, 2002 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: wrfont.ps 6300 2005-12-28 19:56:24Z giles $
+% wrfont.ps
+% Write out a Type 1 font in readable, reloadable form.
+% Note that this does NOT work on protected fonts, such as Adobe fonts
+% (unless you have loaded unprot.ps first, in which case you may be
+% violating the Adobe license).
+
+% ****** NOTE: This file must be kept consistent with gs_pfile.ps.
+
+/wrfont_dict 100 dict def
+wrfont_dict begin
+
+% ------ Options ------ %
+
+% Define whether to use eexec encryption for the font.
+% eexec encryption is only useful for compatibility with Adobe Type Manager
+% and other programs; it only slows Ghostscript down.
+ /eexec_encrypt false def
+
+% Define whether to write out the CharStrings in binary or in hex.
+% Binary takes less space on the file, but isn't guaranteed portable.
+ /binary_CharStrings false def
+
+% Define whether to use binary token encodings when possible.
+% Binary tokens are smaller and load faster, but are a Level 2 feature.
+ /binary_tokens false def
+
+% Define whether to encrypt the CharStrings on the file. (CharStrings
+% are always encrypted in memory.) Unencrypted CharStrings load about
+% 20% slower, but make the files compress much better for transport.
+ /encrypt_CharStrings true def
+
+% Define whether the font must provide standard PostScript language
+% equivalents for any facilities it uses that are provided in Ghostscript
+% but are not part of the standard PostScript language.
+ /standard_only true def
+
+% Define the value of lenIV to use in writing out the font.
+% use_lenIV = 0 produces the smallest output, but this may not be
+% compatible with old Adobe interpreters. use_lenIV = -1 means
+% use the value of lenIV from the font.
+ /use_lenIV -1 def
+
+% Define whether to produce the smallest possible output, relying
+% as much as possible on Ghostscript-specific support code.
+% Taking full advantage of this requires the following settings:
+% binary_CharStrings = true, binary_tokens = true, standard_only = false.
+ /smallest_output false def
+
+% Define whether to write out all currently known Encodings by name,
+% or only StandardEncoding and ISOLatin1Encoding.
+ /name_all_Encodings false def
+
+% ---------------- Runtime support ---------------- %
+
+/.packedfilefilter where
+ { pop }
+ { (gs_pfile.ps) runlibfile }
+ifelse
+
+% ------ Output utilities ------ %
+
+% By convention, the output file is named psfile.
+
+% Define some utilities for writing the output file.
+ /wtstring 2000 string def
+ /wb {psfile exch write} bind def
+ /wnb {/wb load repeat} bind def
+ /w1 {psfile exch write} bind def
+ /ws {psfile exch writestring} bind def
+ /wl {ws (\n) ws} bind def
+ /wt {wtstring cvs ws ( ) ws} bind def
+ /wd % Write a dictionary.
+ { dup length wo {dict dup begin} wol { we } forall
+ {end} wol
+ } bind def
+ /wld % Write a large dictionary more efficiently.
+ % Ignore the readonly attributes.
+ { dup length wo {dict dup begin} wol
+ 0 exch
+ { exch wo wo () wl
+ 1 add dup 200 eq
+ { wo ({def} repeat) wl 0 }
+ if
+ }
+ forall
+ dup 0 ne
+ { wo ({def} repeat) wl }
+ { pop }
+ ifelse
+ (end) ws
+ } bind def
+ /we % Write a dictionary entry.
+ { exch wo wo /def cvx wo (\n) ws
+ } bind def
+ /wcs % Write a CharString (or Subrs entry)
+ { dup type /stringtype eq
+ { 4330 exch changelenIV 0 ge
+ { % Add some leading garbage bytes.
+ wtstring changelenIV 2 index length getinterval
+ .type1decrypt exch pop
+ wtstring exch 0 exch length changelenIV add getinterval
+ }
+ { % Drop some leading garbage bytes.
+ wtstring .type1decrypt exch pop
+ changelenIV neg 1 index length 1 index sub getinterval
+ }
+ ifelse
+ binary_tokens encrypt_CharStrings and
+ { % Suppress recognizing the readonly status of the string.
+ 4330 exch dup .type1encrypt exch pop wo
+ }
+ { encrypt_CharStrings
+ { 4330 exch dup .type1encrypt exch pop
+ } if
+ smallest_output
+ { wo
+ }
+ { readonly dup length wo
+ binary_tokens not { ( ) ws } if
+ readproc ws wx
+ }
+ ifelse
+ }
+ ifelse
+ }
+ { wo % PostScript procedure
+ }
+ ifelse
+ } bind def
+
+% Construct the inversion of the system name table.
+ (\210\001) token pop exch pop 1 eq { % i.e., do we have binary tokens?
+ /snit 256 dict def
+ 0 1 255 {
+ (\221 ) dup 1 3 index put
+ { token } stopped {
+ pop pop
+ } {
+ % Stack: char () token true
+ pop exch pop exch snit 3 1 roll put
+ } ifelse
+ } for
+ } {
+ /snit 1 dict def
+ } ifelse
+
+% Write an object, using binary tokens if requested and possible.
+ /woa % write in ascii
+ { psfile exch write==only
+ } bind def
+
+ % Lookup table for ASCII output.
+
+ /intbytes % int nbytes -> byte*
+ { { dup 255 and exch -8 bitshift } repeat pop
+ } bind def
+ /wotta 10 dict dup begin
+ { /booleantype /integertype }
+ { { ( ) ws woa } def }
+ forall
+ % Iterate over arrays so we can print operators.
+ /arraytype
+ { dup xcheck {(}) ({)} {(]) ([)} ifelse ws exch dup wol exch ws wop
+ } bind def
+ /dicttype
+ { ( ) ws wd } def
+ /nametype
+ { dup xcheck { ( ) ws } if woa
+ } bind def
+ % Map back operators to their names,
+ % so we can write procedures.
+ /nulltype
+ { pop ( null) ws
+ } bind def
+ /operatortype
+ { wtstring cvs cvn cvx wo
+ } bind def
+ % Convert reals to integers if possible.
+ /realtype
+ { dup cvi 1 index eq { cvi wo } { ( ) ws woa } ifelse
+ } bind def
+ % == truncates strings longer than 200 characters!
+ /stringtype
+ { (\() ws dup
+ { dup dup 32 lt exch 127 ge or
+ { (\\) ws dup -6 bitshift 48 add w1
+ dup -3 bitshift 7 and 48 add w1
+ 7 and 48 add
+ }
+ { dup dup -2 and 40 eq exch 92 eq or {(\\) ws} if
+ }
+ ifelse w1
+ }
+ forall
+ (\)) ws wop
+ } bind def
+ /packedarraytype
+ { ([) ws dup { wo } forall
+ encodingnames 1 index known
+ % This is an encoding, but not one of the standard ones.
+ % Use the built-in encoding only if it is available.
+ { encodingnames exch get wo
+ ({findencoding}stopped{pop) ws
+ (}{counttomark 1 add 1 roll cleartomark}ifelse)
+ }
+ { pop ()
+ }
+ ifelse
+ (/packedarray where{pop counttomark packedarray exch pop}{]readonly}ifelse) ws
+ wl
+ }
+ def
+ end def
+
+ % Lookup table for binary output.
+
+ /wottb 8 dict dup begin
+ wotta currentdict copy pop
+ /integertype
+ { dup dup 127 le exch -128 ge and
+ { 136 wb 255 and wb }
+ { dup dup 32767 le exch -32768 ge and
+ { 134 wb 2 intbytes wb wb }
+ { 132 wb 4 intbytes wb wb wb wb }
+ ifelse
+ }
+ ifelse
+ } bind def
+ /nametype
+ { dup snit exch known
+ { dup xcheck { 146 } { 145 } ifelse wb
+ snit exch get wb
+ }
+ { wotta /nametype get exec
+ }
+ ifelse
+ } bind def
+ /stringtype
+ { dup dup length dup 255 le { 142 2 } { 2 intbytes 143 3 } ifelse wnb
+ ws wop
+ } bind def
+ end def
+
+ /wop % Write object protection
+ { wcheck not { /readonly cvx wo } if
+ } bind def
+ /wo % Write an object.
+ { dup type binary_tokens { wottb } { wotta } ifelse
+ exch get exec
+ } bind def
+ /wol % Write a list of objects.
+ { { wo } forall
+ } bind def
+
+% Write a hex string for Subrs or CharStrings.
+ /wx % string ->
+ { binary_CharStrings
+ { ws
+ }
+ { % Some systems choke on very long lines, so
+ % we break up the hexstring into chunks of 50 characters.
+ { dup length 25 le {exit} if
+ dup 0 25 getinterval psfile exch writehexstring (\n) ws
+ dup length 25 sub 25 exch getinterval
+ } loop
+ psfile exch writehexstring
+ } ifelse
+ } bind def
+
+% ------ CharString encryption utilities ------ %
+
+/enc_dict 20 dict def
+1 dict begin
+/bind { } def % make sure we can print out the procedures
+enc_dict begin
+
+(type1enc.ps) runlibfile
+enc_dict /.type1decrypt undef % we don't need this
+
+end end
+
+enc_dict { 1 index where { pop pop pop } { def } ifelse } forall
+
+% ------ Other utilities ------ %
+
+% Test whether two values are equal (for default dictionary entries).
+ /valueeq % <obj1> <obj2> valueeq <bool>
+ { 2 copy eq
+ { pop pop true }
+ { % Special hack for comparing FontMatrix values
+ dup type /arraytype eq 2 index type /arraytype eq and
+ { dup length 2 index length eq
+ { true 0 1 3 index length 1 sub
+ { % Stack: arr1 arr2 true index
+ 3 index 1 index get 3 index 3 -1 roll get eq not
+ { pop false exit }
+ if
+ }
+ for 3 1 roll pop pop
+ }
+ { pop pop false
+ }
+ ifelse
+ }
+ { pop pop false
+ }
+ ifelse
+ }
+ ifelse
+ } bind def
+
+% ------ The main program ------ %
+
+% Define the dictionary of keys to skip because they are treated specially.
+/.fontskipkeys mark
+ /CharStrings dup
+ /Encoding dup
+ /FDepVector dup
+ /FID dup
+ /FontInfo dup
+ /Metrics dup
+ /Metrics2 dup
+ /Private dup
+.dicttomark def
+/.minfontskipkeys mark
+ .fontskipkeys { } forall
+ /FontName dup
+ /UniqueID dup
+.dicttomark def
+/.privateskipkeys mark
+ /ND dup
+ /NP dup
+ /RD dup
+ /Subrs dup
+.dicttomark def
+/.minprivateskipkeys mark
+ .privateskipkeys { } forall
+ /MinFeature dup
+ /Password dup
+ /UniqueID dup
+.dicttomark def
+
+% Define the procedures for the Private dictionary.
+% These must be defined without `bind',
+% for the sake of the DISKFONTS feature.
+4 dict begin
+ /-! {string currentfile exch readhexstring pop} def
+ /-| {string currentfile exch readstring pop} def
+ /|- {readonly def} def
+ /| {readonly put} def
+currentdict end /encrypted_procs exch def
+4 dict begin
+ /-! {string currentfile exch readhexstring pop
+ 4330 exch dup .type1encrypt exch pop} def
+ /-| {string currentfile exch readstring pop
+ 4330 exch dup .type1encrypt exch pop} def
+ /|- {readonly def} def
+ /| {readonly put} def
+currentdict end /unencrypted_procs exch def
+
+% Construct an inverse dictionary of encodings.
+/encodingnames mark
+ StandardEncoding /StandardEncoding
+ ISOLatin1Encoding /ISOLatin1Encoding
+ SymbolEncoding /SymbolEncoding
+ DingbatsEncoding /DingbatsEncoding
+ /resourceforall where
+ { pop (*) { cvn dup findencoding exch } 100 string /Encoding resourceforall }
+ if
+.dicttomark def
+
+% Invert the standard encodings.
+.knownEncodings length 256 mul dict begin
+ 0 .knownEncodings
+ { { currentdict 1 index known { pop } { 1 index def } ifelse
+ 1 add
+ }
+ forall
+ }
+ forall pop
+currentdict end /inverseencodings exch def
+
+/writefont % <psfile> writefont - (writes the current font)
+ { /psfile exch def
+ /Font currentfont def
+ /FontInfo Font /FontInfo .knownget not { 0 dict } if def
+ /FontType Font /FontType get def
+ /hasPrivate Font /Private known def
+ /Private hasPrivate { Font /Private get } { 0 dict } ifelse def
+ /readproc binary_CharStrings { (-| ) } { (-! ) } ifelse def
+ /privateprocs
+ encrypt_CharStrings binary_tokens not and
+ { encrypted_procs } { unencrypted_procs } ifelse
+ def
+ /addlenIV false def
+ /changelenIV use_lenIV 0 lt
+ { 0 }
+ { use_lenIV Private /lenIV .knownget not
+ { 4 /addlenIV use_lenIV 4 ne def } if sub }
+ ifelse def
+ /minimize
+ smallest_output
+ FontType 1 eq and
+ Font /UniqueID known and
+ def
+ (%!FontType) ws FontType wtstring cvs ws (-1.0: ) ws
+ currentfont /FontName get wt
+ FontInfo /version .knownget not { (001.001) } if wl
+ FontInfo /CreationDate .knownget { (%%Creation Date: ) ws wl } if
+ FontInfo /VMusage .knownget
+ { (%%VMusage: ) ws dup wt wtstring cvs wl }
+ if
+ (systemdict begin) wl
+
+% If we're going to use eexec, create the filters now.
+ /realpsfile psfile def
+ eexec_encrypt
+ { /eexecfilter psfile binary_CharStrings not
+ { pop /bxstring 35 string def
+ { pop dup length 0 ne
+ { realpsfile exch writehexstring realpsfile (\n) writestring }
+ { pop }
+ ifelse bxstring
+ }
+ /NullEncode filter dup /hexfilter exch def
+ }
+ if 55665 /eexecEncode filter def
+ }
+ if
+
+% Turn on binary tokens if relevant.
+ binary_tokens { (currentobjectformat 1 setobjectformat) wl } if
+
+% If the file has a UniqueID, write out a check against loading it twice.
+ minimize
+ { Font /FontName get wo
+ Font /UniqueID get wo
+ Private length addlenIV { 1 add } if wo
+ Font length 1 add wo % +1 for FontFile
+ ( .checkexistingfont) wl
+ }
+ { Font /UniqueID known
+ { ({} FontDirectory) ws Font /FontName get dup wo ( known) wl
+ ( {) ws wo ( findfont dup /UniqueID known) wl
+ ( { dup /UniqueID get) ws Font /UniqueID get wo ( eq exch /FontType get 1 eq and }) wl
+ ( { pop false } ifelse) wl
+ ( { pop save /restore load } if) wl
+ ( } if) wl
+ }
+ if
+ }
+ ifelse
+
+% If we are writing unencrypted CharStrings for a standard environment,
+% write out the encryption procedures.
+ privateprocs unencrypted_procs eq standard_only and
+ { (systemdict /.type1encrypt known) wl
+ ( { save /restore load } { { } } ifelse) wl
+ (userdict begin) wl
+ enc_dict { we } forall
+ (end exec) wl
+ }
+ if
+
+% Write out the creation of the font dictionary and FontInfo.
+ minimize not
+ { Font length 1 add wo {dict begin} wol % +1 for FontFile
+ }
+ if
+ (/FontInfo ) ws FontInfo wd {readonly def} wol
+
+% Write out the other fixed entries in the font dictionary.
+ Font begin
+ Font
+ { minimize
+ { .minfontskipkeys 2 index known
+ { pop pop
+ }
+ { //.compactfontdefault 2 index .knownget
+ { 1 index valueeq { pop pop } { we } ifelse }
+ { we }
+ ifelse
+ }
+ ifelse
+ }
+ { .fontskipkeys 2 index known { pop pop } { we } ifelse
+ }
+ ifelse
+ } forall
+ /Encoding
+ encodingnames Encoding known
+ name_all_Encodings
+ Encoding StandardEncoding eq or
+ Encoding ISOLatin1Encoding eq or and
+ { encodingnames Encoding get cvx }
+ { Encoding }
+ ifelse
+ dup /StandardEncoding cvx eq minimize and
+ { pop pop }
+ { we }
+ ifelse
+
+% Write the FDepVector, if any.
+ Font /FDepVector .knownget
+ { {/FDepVector [} wol
+ { /FontName get wo {findfont} wol () wl } forall
+ {] readonly def} wol
+ }
+ if
+
+% Write out the Metrics, if any.
+ Font /Metrics .knownget
+ { (/Metrics ) ws wld {readonly def} wol
+ }
+ if
+ Font /Metrics2 .knownget
+ { (/Metrics2 ) ws wld {readonly def} wol
+ }
+ if
+
+% Start the eexec-encrypted section, if applicable.
+ eexec_encrypt
+ { {currentdict currentfile eexec} wol () wl
+ /psfile eexecfilter store
+ (\000\000\000\000) ws {begin} wol
+ }
+ if
+
+% Create and initialize the Private dictionary, if any.
+ hasPrivate
+{
+ Private
+ minimize
+ { begin {Private dup begin}
+ }
+ { dup length privateprocs length add dict copy begin
+ privateprocs { readonly def } forall
+ /Private wo
+ currentdict length 1 add wo {dict dup begin}
+ }
+ ifelse wol () wl
+ currentdict
+ { 1 index minimize { .minprivateskipkeys } { .privateskipkeys } ifelse
+ exch known
+ { pop pop }
+ { 1 index /lenIV eq use_lenIV 0 ge and { pop use_lenIV } if we }
+ ifelse
+ } forall
+ addlenIV { /lenIV use_lenIV we } if
+}
+if
+
+% Write the Subrs entries, if any.
+ currentdict /Subrs known
+ { (/Subrs[) wl
+ Subrs
+ { dup null ne
+ { wcs minimize not { () wl } if }
+ { pop /null cvx wo }
+ ifelse
+ } forall
+ {] dup {readonly pop} forall readonly def} wol () wl
+ }
+ if
+
+% Wrap up the Private dictionary.
+ hasPrivate
+ { end % Private
+ minimize
+ { {end readonly pop} } % Private
+ { {end readonly def} } % Private in font
+ ifelse wol
+ }
+ if
+
+% Write the CharStrings entries.
+% Detect identical (eq) entries, which bdftops produces.
+ currentdict /CharStrings known
+{
+ /CharStrings wo CharStrings length wo
+ minimize
+ { encrypt_CharStrings not wo ( .readCharStrings) wl
+ CharStrings length dict
+ CharStrings
+ { exch inverseencodings 1 index .knownget not { dup } if wo
+ % Stack: vdict value key
+ 3 copy pop .knownget { wo pop pop } { 3 copy put pop wcs } ifelse
+ } forall
+ }
+ { {dict dup Private begin begin} wol () wl
+ CharStrings length dict
+ CharStrings
+ { 2 index 1 index known
+ { exch wo 1 index exch get wo {load def} wol () wl
+ }
+ { 2 index 1 index 3 index put
+ exch wo wcs ( |-) wl
+ }
+ ifelse
+ } forall
+ {end end} wol
+ }
+ ifelse
+ pop
+ { readonly def } % CharStrings in font
+ wol
+}
+if
+
+% Terminate the output.
+ end % Font
+ eexec_encrypt
+ { {end mark currentfile closefile} wol () wl
+ eexecfilter dup flushfile closefile % psfile is eexecfilter
+ binary_CharStrings not { hexfilter dup flushfile closefile } if
+ /psfile realpsfile store
+ 8
+ { (0000000000000000000000000000000000000000000000000000000000000000)
+ wl
+ }
+ repeat {cleartomark} wol
+ }
+ if
+ { FontName currentdict end definefont pop
+ }
+ wol
+ Font /UniqueID known { /exec cvx wo } if
+ binary_tokens { /setobjectformat cvx wo } if
+ ( end) wl % systemdict
+
+ } bind def
+
+% ------ Other utilities ------ %
+
+% Prune garbage characters and OtherSubrs out of the current font,
+% if the relevant dictionaries are writable.
+/prunefont
+ { currentfont /CharStrings get wcheck
+ { currentfont /CharStrings get dup [ exch
+ { pop dup (S????00?) .stringmatch not { pop } if
+ } forall
+ ] { 2 copy undef pop } forall pop
+ }
+ if
+ } bind def
+
+end % wrfont_dict
+
+/writefont { wrfont_dict begin writefont end } def
diff --git a/Master/tlpkg/tlgs/lib/xlatmap b/Master/tlpkg/tlgs/lib/xlatmap
new file mode 100644
index 00000000000..f5369e426ce
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/xlatmap
@@ -0,0 +1,49 @@
+% xlatmap - the map of translation tables for various kinds of fonts.
+%
+% It specifies Decoding resources to be used with FAPI-handled fonts.
+% If a font contains multiple character mapping tables, this gives
+% priorities for choosing a specific table from the font according to
+% the order of entries of this map.
+
+% This file is intended to be customized by users. Please keep the
+% obvious format of this file. Strings and names must not be empty
+% and must not contain null ('\0') characters.
+
+% $Id: xlatmap 6797 2006-05-23 07:13:03Z leonardo $
+
+% The map contains entries for each kind of font being handled by
+% any font rendering plugin. The key of an entry is the font type
+% and the value is array of pairs.
+% The first element of pair is a string which encodes identifier of
+% character mapping table. The format of the first element depends
+% on the font type, and should be recognized by the font rendering
+% plugins. The second element is name of the Decoding resource. If
+% that resource is not available, definefont will fail. Note that
+% currently we supply insufficient decoding resources, as well as
+% insufficient entries in this map.
+
+/TrueType
+[ % Each entry is pair :
+ % a string PlatformID.SpecificID and a name of Decoding resource.
+ (3.0) /Symbol % Symbol
+ (3.1) /Unicode % Unicode
+ (3.2) /ShiftJIS % Japanese
+ (3.3) /PRC % Simplified Chinese, GB2312
+ (3.4) /Big5 % Traditional Chinese
+ (3.5) /Wansung % Korean
+ (3.6) /Johab % Korean
+ % todo : add more entries
+]
+
+/PostScript
+[ % Since PostScript fonts were designed especially for PostScript,
+ (*) /Unicode % fixme : other charsets
+]
+
+/Intellifont
+[ (*) /FCO_Unicode % fixme : other charsets
+]
+
+/Microtype
+[ (*) /FCO_Unicode % FCOfontmap may may overwrite this for a specific font.
+]
diff --git a/Master/tlpkg/tlgs/lib/zeroline.ps b/Master/tlpkg/tlgs/lib/zeroline.ps
new file mode 100644
index 00000000000..848774e22ab
--- /dev/null
+++ b/Master/tlpkg/tlgs/lib/zeroline.ps
@@ -0,0 +1,100 @@
+%!
+% Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
+%
+% This software is provided AS-IS with no warranty, either express or
+% implied.
+%
+% This software is distributed under license and may not be copied,
+% modified or distributed except as expressly authorized under the terms
+% of the license contained in the file LICENSE in this distribution.
+%
+% For more information about licensing, please refer to
+% http://www.ghostscript.com/licensing/. For information on
+% commercial licensing, go to http://www.artifex.com/licensing/ or
+% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
+% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
+
+% $Id: zeroline.ps 6300 2005-12-28 19:56:24Z giles $
+% zeroline.ps
+% Test file to determine how other PostScript implementations handle
+% filling zero-width lines under a variety of conditions.
+
+% Add a small "fan" of zero-width lines at different angles to the path.
+/fan
+ { currentpoint 100 0 rlineto
+ 2 copy moveto 100 20 rlineto
+ 2 copy moveto 100 100 rlineto
+ 2 copy moveto 20 100 rlineto
+ moveto 0 100 rlineto
+ } def
+
+% Append a rectangle to the current path.
+/rectappend
+ { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath
+ } def
+% Fill a rectangle.
+/rectfill
+ { gsave newpath rectappend fill grestore
+ } def
+% Stroke a rectangle.
+/rectstroke
+ { gsave newpath rectappend stroke grestore
+ } def
+% Clip to a rectangle. Unlike the real rectclip,
+% this clear the current path.
+/rectclip
+ { newpath rectappend clip newpath
+ } def
+
+40 40 translate
+
+% Display fans of different colors on different backgrounds.
+gsave
+0 setgray
+0 0 120 120 rectstroke
+10 10 moveto fan fill
+140 0 translate
+0 setgray
+0 0 120 120 rectstroke
+0.8 setgray
+10 10 moveto fan fill
+140 0 translate
+0 setgray
+0 0 120 120 rectfill
+1 setgray
+10 10 moveto fan fill
+grestore
+0 140 translate
+
+% Display rectangles with two edges coincident.
+gsave
+newpath
+0 setgray
+0 0 40 40 rectappend
+0 0 20 20 rectappend
+eofill
+60 0 translate
+0 0 40 40 rectappend
+40 0 -20 20 rectappend
+fill
+grestore
+0 60 translate
+
+% Display superimposed lines.
+gsave
+/super
+ { currentpoint fan
+ 2 copy moveto 20 0 rmoveto 50 0 rlineto
+ 2 copy moveto 20 4 rmoveto 50 10 rlineto
+ 2 copy moveto 20 20 rmoveto 50 50 rlineto
+ 2 copy moveto 4 20 rmoveto 10 50 rlineto
+ moveto 0 20 rmoveto 0 50 rlineto
+ } def
+0 setgray
+0 0 moveto super fill
+140 0 translate 0 0 moveto super eofill
+grestore
+0 140 translate
+
+showpage